Freedom of speech and cancel culture

Unusually, the BBC asked more than one person to deliver the 2022 Reith Lectures. Each focused on one of “four freedoms”. The first lecture, delivered by Chimamanda Ngozi Adichie and available to stream via BBC Sounds, was excellent (excluding the underwhelming Q&A at the end). The subject was “freedom of speech”. It was a clear plea for people to avoid the temptation of perpetual online outrage that in turn drives “cancellation” and self-censorship. What it didn’t do, however, is provide a convincing model of why such outrage emerges, aside from the simplistic view that people have not evolved to deal with social media.

I thought back to this lecture when I read a post today from Robin Hanson, entitled “Why is everyone so boring?” I find Hanson’s blog quite hit-and-miss. That is not a criticism. I like that he throws all his ideas out there. Some are not so insightful. Others, such as this one, are brilliant. Here he suggests a model as to why much of the world is dull, and explains online outrage in the process:

Either you act boring, so the bandits will ignore you, you act lively, and invite bandit attacks, or you act outraged, and play a bandit yourself.

In the context of the current public debate about J.K. Rowling’s interventions in the debate about the compatibility of women’s rights with trans activism, Hanson adds:

It takes unusual art, allies, and energy, in a word “eliteness”, to survive while choosing lively.

This strikes me as broadly correct, although incomplete. I think there is a subset of “lively” people who essentially adopt extreme views in order to allow “boring” people to follow them and enjoy more lively debate vicariously. Think talk radio hosts, Ash Sarkar, Nigel Farage, Gina Miller, and the endless Twitter ideologues of both left and right. In the end you end up with outrage being commodified, as predicted so poignantly in the Black Mirror episode Fifteen Million Merits.

Some notable institutions have failed to avoid the slide into what Hanson would call “banditry”. That the Oxford Union still claims to be the what Harold Macmillan once described as “the last bastion of free speech” is ludicrous given their consistent cancellation of controversial views. Yet for me the canary in the coalmine is comedy. Comedians surely should be the last bastion of free expression. They operate under the explicit licence of jest. The brilliant aphorism “[i]f you want to tell people the truth, you’d better make them laugh or they’ll kill you,” has been attributed to George Bernard Shaw. So long as outrageous jokes survive, free speech survives. I watch Chappelle, Rock, Gervais, and Carr as much in an act of solidarity as in search of entertainment – and much less in search of outrage.

SQLzoo XOR solution

I was feeling good about the speed that I was progressing through the early SQLzoo SQL tutorials. Then I hit question eight in the “SELECT FROM world” tutorial, and couldn’t work out what response the question was seeking. It seems from the various help threads on StackOverflow and Reddit that I am not the only one who has had this issue.

To my mind, the phrasing of the question implies that there is an XOR feature in SQL, as there is in many other languages. So first I tried using the same format as the OR-based answer to the previous question, but changing the operator:

SELECT name, population, area
FROM world
WHERE area > 3000000 XOR population > 250000000

This didn’t work. So then I think “maybe there is no XOR operator in SQL and I have to do this manually”. So I try:

SELECT name, area, population
FROM   world
WHERE  (area > 3000000 AND population <= 250000000)
OR     (area <= 3000000 AND population > 250000000)

This gives the following error:

Wrong answer. Some of the data is incorrect.

But the data are not incorrect. Only after some fretting did I realise that SQLzoo wants you to SELECT the population before you call the area. Hence the correct solution is:

SELECT name, population, area
FROM   world
WHERE  (area > 3000000 AND population <= 250000000)
OR     (area <= 3000000 AND population > 250000000)

This got me the “Correct answer” result, and the weird happy-face emoji. Onwards!

Swapping two variable values without using a third value

I have been cautiously dipping my toe into the Odin Project, an open-source online resource for learning to code. One of the downsides of the project is that it specifically tells you not to get lured down rabbit-holes, before linking to several supplementary articles. These link to others, of course, and then… well, in my case I ended up reading about programmers who can’t program.

Apparently it is not unusual to have candidates with no programming skills apply to programming jobs. The article suggests some screening tests to weed out these optimists. I would fail most of these tests. This is unsurprising, as I don’t consider myself a programmer, despite an amateur interest and some past experience with fairly basic Python, R, and PHP scripts. However, in the comments there was one screening problem that was described as:

swap two variables without using a third variable

This piqued my interest, because it seemed pretty easy. I was intrigued that one comment said:

“We hired the guy who said, well, “if they’re integers, then I’d do it by a=a|b, b=a^b, a=a^b. But I don’t know how to do it if they’re strings.”

I then found a whole plethora of answers on StackOverflow about how to do this in C++, none of which looked especially simple.

So I fired up R Studio Cloud and tried the following:

a <- b <- c(a,b)
a <- a[2]
b <- b[1]

Is this an acceptable solution? It works for and a and b of the same datatype, including integers or strings. Although a vector is created, this is not stored in a third variable. I would have thought this approach could be recreated in most languages. It works identically in Python, for example:

a = b = [a,b]
a = a[1]
b = b[0]

Introducing the Slow Ways project

As a keen trail runner and walker, I have been following the development of the Slow Ways project closely. The aim of the project is to link the 2,000-odd major walking “destinations” (mainly towns and cities) through a series of routes that minimise diversion, and can be linked together to form longer, easily navigable routes across the whole of Great Britain.

A recording of one of the Slow Ways Zoom Briefings is available on YouTube

Last month Daniel Raven-Ellison, “guerrilla geographer” and founder of the project, held a series of webinars to introduce Slow Ways. One of those briefings is now on YouTube (embedded, above) and provides the best insight into the ambitions of the project. Importantly, it also makes clear what the project is not, and how it differs from other great initiatives, such as the LDWA’s database of paths, Sustran’s National Cycle Network, and the Ramblers’ “Don’t Lose Your Way” campaign. I would highly recommend taking the 45 minutes it takes to watch this (in 1.25x or 1.5x playback speed).

No drop wasted: let’s build a tool to reallocate spare COVID vaccine

The need to dispose of viable COVID-19 vaccine is repugnant. Of course, it is easy to understand why this occurs, even when all participants in the system are behaving with the best of intentions. The vaccines have expiry dates and complex handling requirements. Some patients fail to show up for their appointments. Yet an understandable situation is not a tolerable one. More than that, we have a moral imperative to explore every means to avoid vaccine waste.

There are two parts to this problem. The first is logistical. There is, of course, an orderly vaccination process, with rational prioritisation of vulnerable groups, and integration with other healthcare workflows. The early effectiveness of this system in distributing and using vaccine is a point of considerable national pride. There is no need to reinvent the core distribution system.

The early effectiveness of distributing vaccine is a point of considerable national pride. There is no need to reinvent the core distribution system.

What is needed is a more agile secondary system, which can pick up the slack when the main system throws up short-term vaccine surpluses. Sometimes this may be as simple as a rural vaccination centre realising at 3pm that it has one extra five-dose vial of the Pfizer vaccine that expires at the end of the day, and nobody remaining in their priority group to whom to give it. Five doses is insignificant in the scheme of the main distribution scheme – it barely warrants thinking about. For a rural village in an area with a high rate of infection, five doses today rather than next week is significant.

If the hypothetical rural vaccination centre is a surgery, it would be possible for them to search their records for the unvaccinated, and call them to ask them to attend and short notice. Yet the period of time that it would take to identify, call, and explain the situation to potential recipients is non-trivial. In a 3pm-5pm window, it may be possible to raise the interest of one or two people through cold-calling. And that’s only where the vaccination centre is a surgery, with clerical staff, and local patient lists. For non-traditional vaccination sites – shopping centres and stadiums – this option does not exist.

This logistical challenge could be easily solved through a back-up system of self-selected people expecting a standby vaccination call. This system would be accessible staff at a vaccination site, and would allow them to filter only for people who could arrive in the relevant timescale – be that before 5pm, or on 2am on a Sunday morning. The system itself need only be simple. So simple, in fact, that a non-developer like myself was able to hack together a viable tool in about 14 hours (see below). A tool like this could get five people to a spare vial in under two hours. If it could repeat that trick 300 times across England – a trivial amount of scaling for a simple app – then through the grim calculus of COVID, it would unarguably save lives.

The second challenge, however, is getting acceptance to use such a tool. There are surmountable concerns around data protection, and app reliability at scale. For these reasons, it is a considerably better idea to have a backup system that is complete separated from NHS patient records, holds minimal personal data, and is entirely voluntary. But the biggest barrier to acceptance is whether vaccination centres are to be permitted to bypass the prioritization queue if and only if the alternative was vaccine being wasted.

When the alternative is waste, the case against emergency reallocation is morally indefensible.

To be clear, that is the only purpose of this proposed tool: to prevent vaccine from being thrown away. It’s would be a backup system, not a challenge to the primary system, and not a means for anyone to “jump the queue”. Yes, the private gains here are earlier immunity to those who are able to receive last-minute vaccine. These people are likely to be younger, richer, and more tech-savvy than average. It is easier for an office-worker to get 45 minutes off in the middle of the day to be vaccinated than a haulier. Yet these private benefits are only part of the social benefit, which is community immunity, a considerable public good. When the alternative is waste, the case against emergency reallocation is morally indefensible.

The potential for such a secondary system to have an impact is now. The first widely distributed (Pfizer/BioNtech) vaccine appears to be both the most effective, but also the least stable. We can solve this, but a solution that takes weeks to develop will have a much more limited impact. So my suggestion is that we – by which ideally I refer to people with much greater skill than me – can hack together a “minimally viable product” (MVP), which could be trialled in a limited area over a period of days, before a broader rollout.

My amateur attempt at such a system is SpareVaxGS. I built it in 14 hours using Stacker, which is an intuitive no-code tool. The potential recipient is able to login (through a verified email account), and browse vaccination sites to find sites near to them. They can then create a “standby” indicating their contact number, availability, and typical response time to be on site.

Screenshot of the SpareVax patient view
The patient view shows the “standbys” created with local vaccination sites

The clinician at a vaccination site sees a kanban-type board, listing the phone numbers of all the people who are ready to drop everything to get an otherwise wasted vaccine. They also see potential recipients’ typical availability: they won’t call at 1am if the “24-hour” box if not ticked. By design, no personal information is passed to the vaccination site: they see only a phone number, an optional safeword (to protect users against scam callers) , and availability. This isn’t just for data protection reasons, but also to avoid any ability for intentional or unintentional discrimination in deciding who to call in.

The clinician view shows those on the waitlist, who could drop everything to receive vaccine that would otherwise be wasted

Backend data is currently stored in Google Sheets, and the platform could scale easily to 5,000 users, at a cost of around £300 per month. This is not adequate scale for rollout: the average Primary Care Trust in England covers 250,000 people. It might, however, be adequate for a town/city trial, and I’d happily fund the platform during that trial, if any health authority is game to try. If it were successful, I would need considerable help – both technically and financially – to re-architect the concept at a scale that could work nationwide.

That’s the pitch. I’d be interested to make contact with anyone who may be able to help. That might be as simple as critiquing the idea: constructive criticism is most welcome. But it’s likely to be most useful either on the technical side (to build a better platform, if and when required), or on the policy side (to discuss with a busy and stressed health trusts whether and how we can trial). And of course, if you’re a large tech player that is looking for a high-impact project to showcase your platform’s ability to solve social problems in double-quick time, the door is wide open. Can you help?