An Epidemic in Economics

If you search the internet for the phrase “hypothecation is a fallacy”, you get essentially two results. First is this Twitter post.

Another is an article titled “Why treasurers should go back to economics school”, by Geoff Harcourt, Visiting Professorial Fellow, University of New South Wales. Key excerpts:

Obsessed with the relationship of government expenditure and taxation, many treasurers suffer from deficit size fetishism, and fall victim to the “balancing the budget over the cycle” fallacy. Many also get caught up with hypothecation — matching specific government expenditures with particular tax sources. …

Proportional Representation Without All the Hassle

Image for post
Image for post
Photo by Tom Radetzki on Unsplash

In 1949, Germany adopted a voting method called mixed member proportional voting, or MMP.

After the use of the absolute-majority Two Round System (TRS), see Two-Round System, in the German Empire, and the use of a pure proportional representation system in the Weimar Republic, see Mixed Member Proportional, a new electoral system was established by the Parliamentary Council in 1949.

With MMP, you vote for both a candidate, to represent your local district, as well as a party. Whoever gets the most votes represents your district. …

Lee Drutman recently wrote a post called “Approval voting vs ranked-choice voting: A hypothetical election”, aimed at demonstrating the superiority of his favored instant runoff voting (IRV) voting method over approval voting. (IRV has been marketed in recent years as “ranked choice voting”, but there are actually a multitude of ranked voting methods.)

By the time we reach the title, Drutman is already off to a bad start. Probably the most common amateur fallacy in voting theory is to fixate on a specific anecdotal electoral scenario (“a hypothetical election”), rather than average results over a statistically significant sample of elections, as was done with Warren Smith’s Bayesian regret calculations and Jameson Quinn’s voter satisfaction efficiency calculations. …

require: rubocop-rails

# TODO EnabledByDefault: true
NewCops: enable

AllowParenthesesInMultilineCall: true
Enabled: true
IgnoreMacros: false

- app/policies/**/*
- db/**/*

# Worry about complexity, not length.
Enabled: false
Enabled: false
Enabled: false
Enabled: false

# Unqualified constant names are unclear perhaps, but NOT ambiguous.
Enabled: false

# Cyclomatic complexity is useful; assignments aren't problematic.
Enabled: false

# Trailing commas make for clearer diffs because the last line won't appear
# to have been changed, as it would if it lacked a comma and had one added.

Here’s a proof sketch of Goldbach’s conjecture, which states that any even number can be formed as the sum of two prime numbers.

We start by envisioning any even number as the sum of any column within two rows. E.g. 14 is:

 2  3  4 5 6 7
12 11 10 9 7 7

The bolded “columns” are those ones that satisfy the conjecture, i.e. are composed of two primes.

Conceptually, the conjecture merely says that it’s impossible to “eliminate” every number below the primes in the top row via division by one of the primes in the top row. For example, the 3 eliminates the 9 from consideration (which is why the 5 doesn’t count despite being prime itself), but nothing eliminates the 11 or the 7 on the bottom row. …

Trump cheated on his third wife with a porn star, and used illegal campaign funds to cover it up.

Trump’s sister Maryanne, a former federal judge, said of Trump, “He has no principles. None. None.”

Trump was recorded openly bragging of sexually assaulting women.

Trump has been accused of sexual assault by over 26 women.

In December 2019, Trump was forced to pay more than $2 million in court-ordered damages to eight different charities for illegally misusing charitable funds at the Trump Foundation for political purposes. As part of a resolution of the lawsuit announced on November 7th, Trump was ordered to pay $2 million, or $250,000, a piece to eight different charities. The foundation’s remaining bank account balance of $1,809,123.30 was distributed evenly to the eight agreed upon charities. Each charity ended up receiving a total of $476,140.41. Additionally, as part of the settlement, Trump was required to agree to 19 admissions, acknowledging his personal misuse of funds at the Trump Foundation, and agreed to restrictions on future charitable service and ongoing reporting to the Office of the Attorney General, in the event he creates a new charity. The settlement also included mandatory training requirements for Donald Trump Jr., Ivanka Trump, and Eric Trump, which the three children have already undergone. …

The latest iteration of generics is amazing. Here’s a short proof of concept for a Ruby-like enumerable construct.

package mainimport (
func newSliceEnum[T comparable](s []T) enumerable[T] {
return newEnum[T](sliceEnum[T](s))
type sliceEnum[T comparable] []Tfunc (se sliceEnum[T]) Each(f func(T)) {
for _, v := range se {
func newEnum[T comparable](e eacher[T]) enumerable[T] {
return enumerable[T]{eacher: e}
type eacher[T comparable] interface {
type enumerable[T comparable] struct {
eacher eacher[T]
func (e enumerable[T]) Select(f func(T) bool) enumerable[T] {
result := sliceEnum[T]{}
e.eacher.Each(func(v T) {
if !f(v) {
result = append(result, v)
return enumerable[T]{eacher: result}
func main() {
ints := newSliceEnum([]int{3, 5, 1})
fmt.Println(ints.Select(func(e int) bool { return e < 5 }))
strs := newSliceEnum([]string{"foo", "bar", "baz"})
fmt.Println(strs.Select(func(s string) bool { return strings.HasPrefix(s, "b") }))

This prints out:

{[3 1]}
{[bar baz]}

It’s a Risky Tool with No Benefit


Avoid calling hash[key]. Instead use hash.fetch(key) if the key is expected to always be present, or hash.fetch(key, nil) if it’s valid/expected for the key to be absent.


The only benefit of using hash[key] is that it’s six characters shorter to type than hash.fetch(key), or ten characters shorter than hash.fetch(key, nil). But the costs are significant.

  1. Unclear hard-to-diagnose exception stack traces.
  2. Less clear code that makes more work for future developers reading your code.

As Gary Bernhardt, an influential Rubyist and creator of the Destroy All Software screencasts and DeconstructConf once tweeted:

Ruby’s `[]` operator should almost never be used. You will die. Do `x.fetch(k)`. If you really want nil by default, do `x.fetch(k) { nil }`.

Spooky Action at a Distance, Explained

Quantum entanglement and the resulting “spooky action at a distance” is weirder than most people ever realize. In my view, it’s extremely poorly explained in popular media. So here’s a simplified analogy.

Imagine you have two tiny handheld computers, one labeled “Even” and the other “Odd”, and each having two buttons, labeled “0” and “1”. You each grab one of the computers and press a sequence of 0’s and 1’s, and find that that you see a corresponding series of apparently random pictures of either ROCK, SCISSORS, or PAPER. But when you align the sequences, you see something like this.

Even: 0110100011 => PSRRPSPRSS
Odd: 1010001001 =>…

Before you begin: Please try this brief experiment in which you rank and rate 22 of the candidates for Democratic presidential nominee for 2020.

What They Are

Instant Runoff Voting (IRV) is a ranked voting method in which voters can rank the candidates in order, 1–2–3 etc. There are a multitude of ranked voting methods, but IRV has become so pervasive that advocates have taken to calling it by the more generic and marketable moniker “Ranked Choice Voting”, or just RCV. IRV has has experienced a resurgence in recent years, but it was actually invented in the late 1800s and adopted in the Australian House of Representatives in 1918. In the early 1900s, around two dozen U.S. …


Clay Shentrup

Advocate of Score Voting and Approval Voting. Software engineer. Father. Husband. American.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store