Category Archives: Uncategorized

Thoughts on the election

Beeminder is demanding that I blog today, but I’m not really feeling it, so I’m going to phone this one in, sorry.

I was trying to write something intelligent. Maybe something about delta debugging, maybe something about voting systems. When the dust settles and we have some data maybe I’ll do an analysis of what this election would have looked like under Random Ballot or something.

But, well, right now I’m too depressed, so here are some very ill-formed and ill-informed thoughts on the UK general election that is causing that impression.

This was a lot better than I feared, slightly worse than I expected, and a lot worse than I’d hoped it would be. I never expected a Labour majority (and I’m not the biggest Corbyn fan so would have felt only modestly positive if we’d got one), but I did think Labour might have been able to form a coalition.

Instead we get a Conservative + Democratic Unionist Party (think a more right-wing Irish version of the Conservatives. This is probably not a very fair description but I’m not very inclined to provide a fairer one) not-quite-a-coalition.

I confess I forgot completely about the DUP as a factor (English centric bias, sorry), and the Tory wins in Scotland were a complete surprise to me (Somewhat English centric bias, mostly that the Scots I know very strongly conform to the stereotype of Scotland being very left wing even though I know the reality is different), but I’d be lying if I said I ever really had a very firm sense of how the political landscape was going to go. I was mostly going on a mix of general knowledge and dread.

The dread turned out to be pretty warranted. Although I’m enjoying the schadenfreude of May losing her majority, this isn’t really much better than we started with. The DUP are terrible, and a Conservative/DUP alliance is going to be an improvement on the Conservative majority replaces in only three ways:

  • Their majority is smaller
  • They will be less able to get things done due to internal disagreements
  • They might go for a softer Brexit than they otherwise would have.

There’s also the argument that Brexit is going to be a disaster for whichever party deals with it, so in the long run this might be better by making the Conservative government pay the consequences. I’m not entirely sure I buy the calculus here, but it’s at least a small glimmer of hope.

Mostly I feel like as usual this election underlines the need for a better electoral system. The popular vote is so close between Labour and Conservative, with neither of them that close to a majority.

It is of course invalid to project how people would vote under a different voting system from this, but counting up the minority parties it is at least suggestive that if we’d had a more proportional system then we’d have likely been in the territory of the progressive alliance many people were hoping for – Labour + SNP + Lib Dem comes to 50.4% of the vote. Add the greens in and you’re up to 52%. Of course, in reality, that 52% of the vote came to 47.5% of the seats, so a small win became a small loss instead.

Oh well, so it goes. Another five years of something resembling this government.

Unless someone calls another general election I guess. So give it six months?

This entry was posted in Uncategorized on by .

Auction Update

You may recall that I ran an experiment last month where I put my time up for auction.

The auction was won by Zack M. Davis. He bid £550 and paid £501 for help working with some maths self-study on Causal Inference. We’re working through understanding a textbook he’s studying, and did one three hour session over Google hangouts and will do another one later this week.

I think we were both a little sceptical that the format would work well (even without the fact that I don’t know much about causal inference), but if so we were both wrong. There were some difficulties – communicating about maths without a shared blackboard (or, if you insist, whiteboard) is hard, but fortunately we had the textbook in front of us for reference and could fall back to typing if necessary, which worked more than well enough. At the end I think we both understood the material a lot better than at the beginning, and Zack seemed very happy with the result (and I enjoyed it too!).

So all told I’m calling that a success: I’m happy and Zack is happy. I got an amount of money for my time that I’m perfectly happy with (it’s a lot less than I’d do for my high priced consulting, but a pretty good day rate for general purpose dev contracting), and Zack got help that he found useful at a price he was happy to pay. A good time was had by all.

Some statistics for the interested:

  • There were a total of 15 bids.
  • The second and first prices were quite a lot higher than the others.  The third price bid was £200.
  • The lowest bid was £15
  • The median (and modal) bid was £100.
  • Not terribly surprisingly, almost every bid came from someone in a personal capacity rather than a company. The exceptions were people who were basically freelancers who have their own company for their work and Beeminder, probably partly because Danny heard “Vickrey auction” and came running.

In general, I’m very pleased with this experiment, and will be repeating it by running another auction next month (I’m skipping this month both because of the delay and because everything is a bit busy right now).

This entry was posted in Uncategorized on by .

Life Changes Announcement: Academia Edition

This is just a small blog post to let people know what’s going on in my life.

I wrote a little while ago that I was thinking about starting doing a PhD. Well, thought turned into action remarkably quickly, and in October I will be starting a PhD with Dr Alistair Donaldson’s Multicore Programming Group at Imperial College London.

Despite the group title, my focus will be almost entirely on the sorts of things I’ve already been doing for the last few years and probably won’t involve that much multicore programming at all (I’m interested in them because they do a lot of work on language based fuzzing for GPUs, and also because Ally and I really hit it off and there’s a bunch of other interesting related work at Imperial). I’ll be focusing on Hypothesis and related technology, but with a goal of validating and publishing some of the research I’ve been doing on it from a more academic standpoint.

Separately, though not unrelated, to that, I’ve also started a part time research assistant job at Imperial with the same group. I’ll be doing three days a week there for the next three months, helping them with some of their work on GLFuzz (I somehow convinced Ally I knew a thing or two about programming in general and writing fuzzers in particular. Not sure how). So I am now officially an academic.

Feels weird, to be honest. Also not really sure it’s sunk in yet.

For now this doesn’t mean I’ll be around London any more often than I have been, as it will mostly be a remote working position, but come October or so when I start my PhD I will be moving back. I have decidedly mixed feelings about this, but it will be very good to see my friends and family who live there more often.

This entry was posted in Uncategorized on by .

On persuasion and anger

Humans are messy and complicated, and there are very few universal rules of human behaviour, so when you encounter a useful one it’s worth paying attention to it, because it’s basically gold dust.

There’s one I’ve had to learn the hard way. Most people seem to know it when you point it out, but very few people seem able to bear it in mind in their actions.

The rule is this: The angrier you make someone at you while trying to persuade them of something, the less likely they are to be persuaded of that thing and the harder they will be to persuade of it in future.

That’s it that’s the whole rule.

Importantly, the rule applies no matter who is correct. Sadly, truth is not nearly as relevant to persuasion as one might hope.

Obviously it’s not actually completely universal – there are always going to be a few exceptions, whether they are people, subjects or specific circumstances – but it’s close enough to universal that I think it’s worth just treating it as true until you’ve got overwhelming evidence that you’re in one of those special cases. Certainly I’ve seen it play out this way a lot, from both sides of the argument.

A little bit of introspection will probably give you plenty of evidence of your doing this. Think of someone condescendingly explaining your error to you, insulting your intelligence along the way. Are you likely to want to listen? What if you’re actually wrong? Will you get the point faster or slower than if they’d just said “Hey, are you sure about that? I think X, Y and Z”.

I was going to include some examples here, but the problem with doing that is that it will just make the groups I use as examples angry and they’ll not be persuaded of this point. Also it’s somewhat unnecessary given that my primary example is everyone.

So if you can’t think of examples of this yourself, feel free to disregard this post, but I wish you wouldn’t because I think it’s really important if you have any desire to change peoples’ belief.

Because so many attempts to evangelise or persuade completely ignore this and instead go straight for making the person you’re talking as angry as possible.

If you lecture someone, or treat them like they’re a bad person for being wrong, or declare your superiority over them in some way, you will make them angry.

If you try and engage with them calmly, try to understand where they’re coming from, and work with them to find common ground and identify where your disagreement lies, you probably won’t. You won’t necessarily succeed at persuading them, but you’re a lot more likely to than if you told them they were an immoral idiot and the correctness of your position was obvious to anyone with two brain cells to rub together.

Most attempts to persuade on issues that people feel strongly about look a lot more like the first form (“How can you disagree with my obviously correct position you monster?”) than the second (“I’m not sure I get where you’re coming from. Can we discuss this?”), despite it being an entirely ineffective strategy.

I’m not totally sure why this happens, but I can think of a couple of plausible reasons:

  • Persuading people is hard. Most attempts are going to fail, so it’s hard to get feedback on what actually works because most of the time nothing does.
  • When we are angry, it takes a lot of self-control to behave calmly, and behaving angrily will tend to cause people to reciprocate.
  • Engaging people constructively is intrinsically hard and doesn’t feel that rewarding. A good rant will make you feel good about yourself and is much lower effort. If you don’t really expect to succeed, why not go for the easy option that makes you feel better?
  • We socially reward posturing and dominance much more than we do a successful conversion. The people who already agree with you (who probably make up a large fraction of your social group) are much more likely to go “Nice put down! You really showed that guy!” than they are “Well done on patiently sitting there educating that person”.
  • There may be other non-persuasion benefits to getting someone angry (e.g. what it reveals to the audience. Though I think this one often backfires)

So we’ve got an easy option that will make you feel good and a hard option that won’t. It’s perhaps not actually that surprising which one we tend to pick.

You probably think I’m going to tell you that you have to do the hard thing, but in all honesty I’m not sure it’s really worth it most of the time.

By and large, persuasion will only happen when someone is ready to be persuaded. If someone seems able and willing to be persuaded and tries to engage you in productive dialogue about it and you feel up to reciprocating, go for it. It might do some good, or at least you might get an interesting conversation out of it.

The rest of the time though? It’s up to you whether you really want to or not. I’m increasingly disinclined to, myself.

But I do recommend doing less of the easy thing, or at least be aware of what it is you’re really doing: If you find yourself shouting at someone, maybe stop being surprised that it doesn’t result in them agreeing with you no matter how loudly or repeatedly you do it, or how obviously correct your position is.

If you want to keep doing it anyway because you’re angry and it feels good, go for it I guess. I’m probably not going to be able to persuade you not to.

(This post was done as a Patreon request, but I won’t try to persuade you to donate beyond noting that here, regardless of whether it would make you angry)

This entry was posted in Uncategorized on by .

A deterministic improvement to Hare-Clark Single Transferable Vote

Quick note: I’ve been redesigning this in my head and think I have a version that is both simpler and better. Alas what I don’t have is a keyboard. I’ll write up the improved version when I’m back. For now consider this inspiration rather than a good idea.

I was thinking about my problems with Meek’s method and trying to figure out a way around them when I accidentally hit on what might be a good idea. I don’t have time to sit down and work through the implications just yet, and I’m about to head off on a road trip without my laptop, so this is just me writing it down the details so that I don’t forget them.

It starts from Hare-Clark counting instead of Gregory counting: We don’t transfer fractional votes, but only ever transfer whole votes.

However unlike Hare-Clark it is not randomized but is in fact entirely deterministic modulo one detail (that one details is basically that when two candidates are clones of eachother you might have to break some ties arbitrarily).

For this purpose of this piece I’m assuming that ballots are total orders of all the candidates. This method could doubtless be adapted to handle incomplete ballots, but I’ve not thought through the details yet.

The key idea is this: We start by ordering the candidates according to some rank aggregation voting method. This can be more or less anything you want. It could even be completely random if you want, but you’re probably better off using Borda count or Borda majority judgement or something. All that matters is that you get a total ordering of the candidates though, and I’m not sure how much impact on the end result the specific ordering has. It is however essential for making the process deterministic: Once you have this ordering there is no further randomness involved.

We call a candidate more mainstream than another if they rank higher in this ordering. We call a voter more mainstream than another if on the first entry in their rankings that differs the first’s candidate is more mainstream (i.e. it’s the lexicographic order with respect to the candidate order). Given any two voters, either their ballots are identical or one is more mainstream than the other.

Now, the vote proceeds as follows:

At any given point, every vote is allocated to a single candidate. Initially start by allocating every vote to their first choice candidate.

Now we proceed to reallocate votes so that no candidate has more than the quota required for election allocated to them.

To do that, we go over each candidate in order of decreasing number of allocated votes, breaking ties by starting with the more mainstream candidate.

We will reallocate just enough of the candidate’s votes to try to give them exactly the quota of remaining votes (and we will succeed unless in the course of doing so some other candidate reaches quota) by removing the least loyal voter one at a time.

One voter is less loyal to a candidate than another in the following circumstances (the first one that applies wins):

  1. If they rank the candidate they would transfer to higher than the other voter ranks the candidate they would transfer to (the candidate they transfer to is picked in the usual way – the highest rank candidate in their ballot that has not been disqualified and has not reached quota)
  2. If they rank the current candidate lower than the other voter did
  3. If they are less mainstream than the other voter

If neither voter is less loyal than the other then their ballots are identical so it doesn’t matter which one you pick.

For each vote in turn we transfer it to its next preference. If this causes that preference to reach quota we immediately stop, leave all the remaining votes where we are, and begin the process again from the beginning (this is because changing the set of candidates who have reached quota immediately redraws all the loyalty boundaries).

This process continues until all candidates have no more than the quota of votes allocated to them. If this results in all the seats being filled, stop. If it results in some vacancies, it’s now time to disqualify a loser.

The loser is the candidate with the fewest votes allocated. If multiple candidates have the fewest votes allocated, the loser is the least mainstream amongst them.

What happens now could go in various ways: You could either do a complete restart as per the Wright system (but note that I think that you probably should count disqualified candidates when considering ranks for loyalty). Another way that I think would work well is that you reallocate them to their first choice non-disqualified candidate even if that candidate is currently above quota. Votes will then get reallocated by the normal way as per above. This lowers the impact of tactical voting for spoilers in much the same way as the Wright system does but fits in better with how this system works (and is probably fractionally more efficient but I doubt that matters).

Anyway, that’s how the system works. I haven’t analysed it or written an implementation of it yet, but I suspect it’s actually rather good. I guess I’ll find out when I get back in a week or two.

This entry was posted in Uncategorized on by .