Archives September 2020

National Public Vote: Close Elections

One of the nightmare scenarios sometimes brought up when arguing for the Electoral College and against the popular vote is, what happens in case of a really close election? There would have to be a nationwide recount. Think Florida 2000, times 50.

For instance, take the 1960 election, where Kennedy beat Nixon by 0.17% of the popular vote. He won by 84 Electoral Votes, a comfortable margin, but this seems to be the sort of thing that the close-race argument seeks to address.

For one thing, it seems to me that if the race is that close, that’s exactly when you want to count votes carefully, to make sure that the right person is put in the White House (assuming that the National Popular Vote Interstate Compact passes).

But another argument is more pragmatic: elections are run at the state level, not the federal level, which means that the election would have to be contested in fifty separate jurisdictions. Fifty judges would have to be convinced that the case even has merit.

Furthermore, the vote might be close on the national level, but probably won’t be on the state or county level. See the county map of results for the oh-so-close election of 1960:

Map of results of the 1960 US presidential election, by county. Map by www.nhgis.org and Wikimedia Commons user Tilden76.

Let’s say a suit is brought in a state that isn’t a member of the Compact, where the vote isn’t close. Say, Utah. It’s easy to imagine a judge saying that the vote in Utah is clear enough; there’s no need to conduct a recount, because it’s clear which way Utah’s Electors will vote.

Given that each campaign has only a limited amount of money to pay for lawsuits, they’ll have to prioritize those suits that’ll give them the most bang for the buck. That suggests that the suits will have to be concentrated in states where the count is close (think Florida in 2000), or which are members of the Compact, or where for one reason or other, the suing campaign thinks it can win a significant number of votes. I think that means that small states are relatively immune from this, simply because barring significant shenanigans, there just aren’t a lot of votes to be gained in a state with a low population. That means that recounts are more likely in more populous states like California, Texas, New York, and, yes, Florida.

Remember that what matters is the total national vote: if, say, the Republican candidate’s campaign sues in California, its goal is not to flip the state blue; just to pick up votes. If it argues that 300,000 ballots were discarded improperly, and once they’re reinstated, it turns out that 100,000 of them were for the Democratic candidate and 200,000 for the Republican one, that doesn’t change the fact that a large majority of Californians voted Democratic. But it does mean that the Democrats pick up 100,000 votes while Republicans pickup 200,000, so Republicans win. You can do the same thing in North Dakota or Delaware, but the numbers will be smaller, so the same amount of effort yields smaller rewards.

So yeah, in the case of a close election, there would be a bigger recount than just one state as in 2000, but it probably wouldn’t involve all fifty states. But that’s probably what ought to happen anyway, in a close election.

Ansible: Roles, Role Dependencies, and Variables

I just spent some time banging my head against Ansible, and thought I’d share in case anyone else runs across it:

I have a Firefox role that allows you to define a Firefox profile with various plugins, config settings, and the like. And I have a work-from-home (WFH) role that, among other things, sets up a couple of work profiles in Firefox, with certain proxy settings and plugins. I did this the way the documentation says to:

dependencies:
  - name: Profile Work 1
    role: firefox
    vars:
      - profile: work1
        addons:
          - ublock-origin
          - privacy-badger17
          - solarize-fox
        prefs: >-
          network.proxy.http: '"proxy.host.com"'
          network.proxy.http_port: 1234
  - name: Profile Work 2
    role: firefox
    vars:
      - profile: work2
        addons:
          - ublock-origin
          - privacy-badger17
          - solarized-light
        prefs: >-
          network.proxy.http: '"proxy.host.com"'
          network.proxy.http_port: 1234

The WFH stuff worked fine at first, but then I added a new profile.

- name: Roles
  hosts: my-host
  roles:
    - role: wfh
    - role: firefox
      profile: third
      addons:
        - bitwarden-password-manager
        - some fancy-theme

This one didn’t have any prefs, but Ansible was applying the prefs from the WFH role.

Eventually, I found that the problem lay in the two vars blocks in the wfh role’s dependencies: apparently those get set as variables for the entire task or play, not just for that invocation of the firefox role. The solution turned out to be undocumented: drop the vars blocks and pull the role parameters up a level:

dependencies:
  - name: Profile Work 1
    role: firefox
    profile: work1
    addons:
      - ublock-origin
      - privacy-badger17
      - solarize-fox
    prefs: >-
      network.proxy.http: '"proxy.host.com"'
      network.proxy.http_port: 1234
  - name: Profile Work 2
    role: firefox
    profile: work2
    addons:
      - ublock-origin
      - privacy-badger17
      - solarized-light
    prefs: >-
      network.proxy.http: '"proxy.host.com"'
      network.proxy.http_port: 1234

I do like Ansible, but it’s full of fiddly stupid crap like this.