Mister Organ

This isn’t going to become a reviews site, but I want to place some kind of marker down when I finish a book, or a show, or a game, or some other media. I want to remind myself about what I’ve finished, or motivate myself to finish things.

If I don’t have some impressions from it worth recording and sharing, then why did I consume it in the first place?

So I’m not going to tell you all about Mister Organ, David Farrier‘s documentary about a single, frightening human. I’m just going to write some notes about what really stuck with me.

I don’t think I’m going to include enough context for people to understand what I’m talking about independently, so what I’m writing is likely to be irritating because it’s a mixture of (a) spoilers, and (b) impressions that won’t even make sense if you haven’t seen it.

Like I said: I’m not doing it to write “reviews”.

The most haunting person in the entire documentary was not Organ himself, it was Jillian. She’s never apart from Organ, she has no voice of her own. She’s a ghost, she’s haunted by her partner, or he’s haunted by her. If she breaks free of that grip somewhere down the line, it’ll be fascinating and probably tragic to hear her whole story.

The scenes where Farrier is trying to interview Organ’s family are similarly harrowing. The vibe really was “I cannot talk to you, and I can’t even be seen to be considering talking to you.”

I guess the last thing that’s sticking with me — and probably with you — is “Do I know someone like that?”

It’s relatable enough that a name lept to mind, but I think the worst people I know are, thankfully, awful in different ways.

My first COVID infection

My partner tested positive first, on Friday the 11th. Omicron is considered now to be one of the most infectious diseases in recorded history, but even so in a fully-vaccinated household we’ve heard plenty of examples of it not spreading completely. She sequestered herself in the spare bedroom and we opened all the windows and were generally paranoid.

Had I not actually caught it, that probably would have made for a perfectly miserable at-least-a-week-stuck-in-a-single room, but it was a moot point, because on Sunday morning (13 November) I tested positive with a throat/tonsil swabbed rapid antigen test. Our in-apartment isolation from each other ended.

Two things of note: (a) I was still completely asymptomatic, and (b) a nasal swab (the suggested technique) still showed negative, even though the throat swab was positive. That probably means we detected my infection absurdly early in the process. In fact, it wouldn’t be for two more days that I’d have symptoms strong enough that I wouldn’t just think they were my usual spring-time allergies.

The first RAT pictured is a nasal swab, the second RAT was a nasal, throat, and tonsil swab. If I hadn’t done the throat swab I may not have known I was infected for another two days.

My illness has been extremely mild, my symptoms have been:

  • allergy-like runny nose.
  • tired, and dizzy
  • mild fever (measured 38.2 at the highest) for a couple hours on a couple days
  • in the long-tail of the second week, I’ve had a nasty phlegmy cough

I’m one of the few people younger than 50 who were actually able to score a second booster shot (in late July), so that probably has helped with the mildness of the symptoms.

But what’s freaked me out a little bit is that I’m still testing positive on a RAT a full two weeks later. As I write this, on day 14 since my first positive test, for the first time the “positive” line is faint, but it’s still a clear and obvious positive.

My partner’s illness seems to have been significantly shorter and sharper. She had extremely painful achy joints and some miserable fever as well as all my symptoms, but she was testing completely clear after day eight.

I’m going into my third (and hopefully last) week of almost complete isolation. I’ve only left the house once to go for a solo walk along the beach, and had to nap afterwards for an hour. I want to be extremely careful about resting, which anecdotally seems to be a key factor in trying to avoid long covid.

Zeroeth Draft: Thoughts on Twitter

The following is one-pomodoro’s worth (a 25 minute timer) of brainstorming on what could later be a blog post on either Twitter, or free speech, or communities, or all of the above. But after writing it I’ve decided to publish it completely bare.

I’m doing this because it’s an interesting example of the “raw material” that I would hope to refine into “good” writing, but also to generally lower the standards of what’s acceptable so that I’m more likely to post more often.

Word-vomited out between 2.35pm and 3pm on Sunday 6 November.


Trying to write a post about what’s happening to Twitter would be a sucker’s game, the situation is changing — deteriorating — so rapidly that trying to get your thoughts ahead of it isn’t going to work.

The people who are making the most noise about “free speech” absolutely do not actually care about free speech, they care about their speech. The tell is in what speech they defend, and what speech they’re strangely silent about defending.

People complaining about a “lack” of free speech are actually complaining about the existence of “standards” of speech. It makes a bit more intuitive sense if you use the word “behaviour” instead. There are some behaviours that are illegal, and a huge amount of behaviour that is “free” (as in, “not illegal”).

However, “behaviours that are acceptable” is a much smaller subset than just the behaviours that are “not illegal”. The point is that it’s not up to “police” or “the law” to enforce those standards, it’s up to society. You can’t “do anything you want as long as it’s not illegal”, because the bar for what’s acceptable in society is higher than just “not illegal”.

A community is a group of people who have come together with a common interest, and a common set of standards. That set of standards is a narrower bar than just “anything that’s legal”, it has to fit with what the community is interested in, and the behaviours it wants to see.

This is what brings me back to moderated content on social media — no community can survive a complete lack of any standards of behaviour. Or, to rephrase: any community of people can be destroyed with the right application of entirely legal behaviours or entirely legal speech.

So if you want to keep a community, you have to set your standards at a bar higher than what is simply “legal”. And enforce them yourselves.

And so that’s exactly what we’re doing: we all agree that it’s not a government or a police force’s job to choose and enforce exactly what’s acceptable or unacceptable in society. That’s the part that we have to do ourselves.

People who are pretending to lose their minds over “cancel culture” are playing a clever game, they’re claiming it’s about losing their free speech, but it’s actually a much more democratic process than that — it’s a fight over what we consider acceptable or unacceptable in the broader set of legal activities in society.

There are a couple “memes” that explain this idea so much better than I can myself, there’s the parable about the barkeeper throwing out the Nazi to prevent his bar becoming a “Nazi Bar”, and there’s also the meme-image explaining that, if you say your community is welcome to both “sheep and wolves”, you’re actually just welcome to wolves.

If your community is open to both “assholes” and “people who don’t want to hang out with assholes” then, over time, your community will completely organically become a community of assholes.

Other essayists have made the excellent point that Twitter’s entire product was the content moderation. People for the most part hang out on Twitter because they can closely associate for the most part with the people they want to hang out with. If that weren’t true, you wouldn’t value it. And of course, it’s swung back and forth over time.

Twitter is about to take a big swing towards assholism. It’ll be there for a while, and Elon Musk will lose a gigantic amount of money. A lot of commentators have pointed out that there are ways he could improve things, but I think with the firing of half the staff, the ship has sailed on the ability to improve Twitter for the forseeable future.

Mike Masnick has a great piece on speedrunning all the lessons of moderating content on a social media site. If only Elon had moved slightly more deliberately and more slowly, he might have had a chance to learn some lessons, but he’s hamstrung himself so quickly that I don’t see much chance of the site changing direction from “straight down”, for some time yet.

Ending self-hosting

I’m not sure if I’ll regret this or not, but I’ve shut down my little WordPress docker container and moved the site to wordpress.com.

I’ve needed to decommission the EC2 instance running the site anyway, because I moved Secateur to a Graviton instance to save money, and the amd64 instance is just sitting there running this site, my git repositories, and basically just costing me money.

So this is a an experiment: I’ve moved some of the static sights I’ve been hosting to Netlify, and instead of moving the blog to Hugo, like I’ve been meaning to try, in the mean time I’m simply putting it in someone else’s hands.

Collins

Judith Collins’ bullshit is going to make this difficult.

I gave up on watching Judith Collins’ press conference, but she did a very interesting thing before I cut away. She snortingly dismissed postal voting as obviously a ridiculous idea as an alternative to moving the election.

That’s the official definition of “begging the question”. There’s actually nothing wrong with postal voting. But by demanding the election be moved because “OF COURSE” postal voting is ridiculous is pretending that we’ve all agreed that postal voting is ridiculous. We haven’t agreed on that at all.

It’s not “democratic” to delay an election, and voting by post is not “unsafe”. This has nothing to do with safety or democracy. Right now the opposition is losing, and if the election is delayed it buys them more time to turn it around.

What it took to delete my ‘like’ history

A while ago I decided to delete my ‘like’ history on Twitter.

Since then, I’ve discovered interesting ways in which Twitter’s engineering makes it impossible to do.

The recent ones are easy, if you have access to the Twitter API. You can request the list of ‘favorites’ (they never renamed them to ‘likes’ on the API layer) and from there you can delete them, one at a time.

#!/usr/bin/env python3
import os
import twitter

api = twitter.Api(
    os.environ['CONSUMER_KEY'], os.environ['CONSUMER_SECRET'],
    os.environ['ACCESS_TOKEN_KEY'], os.environ['ACCESS_TOKEN_SECRET'],
    sleep_on_rate_limit=True
)
while True:
    favorites = api.GetFavorites(count=200)
    if not favorites:
        break
    print(f"GetFavorites(): Received {len(favorites)} status objects.")
    for status in favorites:
        print(f"{status.user.screen_name:20}: {status.text}")
        status = api.DestroyFavorite(status_id=status.id)

From the looks of things, you can delete the most recent 3,000 or so ‘likes’ you’ve ever made using a script like this.

After that, things get harder.


I’ve been thinking about what a ‘like’ on Twitter and Facebook means.

When you click it, you’re sending a single piece of information to the person who wrote the tweet. Ostensibly, I guess, that you liked their tweet. Really it’s just read-receipt for Twitter — you’re just telling someone that you read what they wrote. If you’re mentioned in a tweet it seems almost fait accompli that you’re going to hit ‘like’. It means “yeah yeah, I got your message”, and not much else.

After that, it just sits there, in your history, and in Twitter’s database. It becomes part of their algorithm to tune your feed to keep you hooked.


Once you’ve deleted all the ‘likes’ that the API will allow you to see, you’ll find, to your surprise, that there are still thousands to go. They show up on your ‘likes’ page, and they show up in your exported data archive, but the little red ‘heart’ isn’t active.

I guess these ‘likes’ are in some sort of static cold storage. I’d be fascinated to hear from a Twitter engineer (a) how it works, and (b) why they still work for Twitter.

You can’t delete them, the platform doesn’t treat them as ‘liked’ tweets at all.

The only way to get rid of them is to is to click the heart twice: to ‘like’ it anew and then ‘unlike’ it. This sends the author and anyone mentioned a fresh notification telling them that you liked their tweet.

If you want to delete your old history of tweets. You’re going to have to send a new notification to every single person in every single tweet you’ve ever liked. Thousands upon thousands of them. For tweets that can be years old.


I like it when people like my tweets. I come up with witty, snarky things to say so that people click ‘like’. I want to write more of them. It keeps me coming up with ‘tweetable’ things to say.

At its most cynical, “like” is the endorphin button: Every time you like someone’s tweet you’re sending them a tiny little burst of pleasure that keeps them addicted to Twitter.

The sad thing is, the better you are at twitter — the better you are at pithy, wry sarcasm in short form — the more effective you are at keeping everyone else addicted to an intentionally-addictive platform.

We all are each other’s drug pushers.


The only way someone won’t get a notification when you “like” their tweet is if (a) they don’t follow you, and (b) you set your account to ‘private’ mode first.

To get an exhaustive list of the tweets you’ve liked, you have to download your Twitter “data archive”, a .zip file of all data Twitter keeps on you (that they want to admit to). In the date/like.js file is the list of all the likes, along with their ID numbers.

This would be enough to use the API to ‘like’ and ‘unlike’ each tweet, but if you want to reduce the disruption to others you need to take more steps.

I used the Twitter API to retrieve the full details of every Tweet in the list so that I could group them by author and by accounts mentioned in the Tweet. I ended up writing some unreasonable amount of Python and SQLAlchemy code to correlate them all.

My plan was to group the operations so that I could (a) prevent notifications to strangers by being in ‘private mode’ whenever I was running my program, and (b) when it came time to disrupt my friends’ by sending them notifications, I’d try to group them all so it all happened at once instead of spread out over interminable days of hundreds of notifications.

It would be hundreds, after all: your likes are pretty proportional to the tweets you see. The tweets you see most tend to be the friends you’ve followed the longest.

I started working my way through the list. A couple of times a day the routine was:

  • set my twitter profile to ‘protected mode’
  • start my script. Watch it chug through ‘liking’ and ‘unliking’ a stream of tweets
  • crash when the rate limit was hit
  • reset my Twitter profile to ‘public’ mode
  • wait a couple hours, and repeat

For friends of mine who’s tweets I’d liked *hundreds* of times, I either blocked them first so they wouldn’t get notifications (knowing I could unblock them afterwards, and invite them to re-follow me), or I tried to message them first to warn them that I was about to spam them.

For the people who get scores-to-hundreds of notifications, having this tweet pinned on the top of my profile would at least give them some explanation as to what the hell was happening.

It definitely weirded people the hell out though. Some of my friends politely removed me till it was done.

I also accidentally re-started conversation threads left hanging years previously, thanks to the fresh notification on an old tweet.

But finally, after about two weeks of running the script at least once a day until rate-limited, I had finally deleted all my likes. Finally, I had a clean slate.

Only, I didn’t.

Completionists gonna have a hard time with this

You can’t delete a like on an old tweet without ‘liking’ the tweet again.

It turns out that there are plenty of tweets old tweets you might have hit ‘like’ on once, but you can’t see any more.

Tweets from deleted or suspended accounts remain in the count even if they’re not visible by the system. Tweets by people who you don’t follow who have protected their accounts are inaccessible.

Tweets that you liked, by Twitter users who have subsequently blocked you, can never, ever by removed by you.

And so, at the end of the day, I can no longer see my liked tweets, but maybe you can. And some of the tweets will be people who no longer follow me, and some of them — there forever — will be from people who loath me.


What was the point of all this?

When it became obvious that I wasn’t going to be able to delete my like history without sending thousands of notifications. I decided to press on with the project because I wanted to see exactly what social cost Twitter would exact upon me, just for trying to reclaim my own data.

I didn’t measure how many people unfollowed me, but I certainly got some bewildered reactions. I had friends reach out to me out-of-band to ask me if my account had been hacked.

And for all that, it turned out to be un-completable. Twitter will not allow you the means to completely wipe your “like” history short of actually deleting your account.

‘Likes’ might not seem important. But it’s critical to the sorts of algorithms social media use to tune their feeds to keep you hooked, and to target you with advertising. They’re also a paltry, lazy mode of communication. From now on, if I like someone’s tweet, I’ll conjure the mental effort to at least tell them so, with words.

Don’t click “like”, Digital Minimalism by Cal Newport (2019)

Image insertion test

This is a test post to experiment with what seems to be buggy image handling in wordpress.

I uploaded this screenshot from my phone, and then cropped the image in wordpress. I then used gutenberg to insert the image at every available size into this post. As you can see not all of the images are the cropped one.

Thumbnail (correctly cropped)
Medium image (correctly cropped)
“large” image (why isn’t this one cropped?!
Full size (this one IS correctly cropped)

Flying over Cook Strait

Makara

Yesterday my friend and former colleague Patrick Brennan messaged me and invited me to go for a short scenic flight with him out of Wellington Airport. Patrick is based in Auckland but travels to Wellington often enough on business that he decided to become a member of the local Aero Club.

I hadn’t been expecting a sudden change of plans, my phone was low on battery and my camera was mostly-drained and sitting neglected. Raced home to pick them up and headed to the airport.

Flight map

The flight was pretty much exactly one hour long. Took off to the North, turned over the city and headed west across Makara and the Cook Straight to Marlborough Sounds.

Makara
Makara

My poor camera doesn’t see much action these days. I took random photos of what I thought looked good, playing with — in turn — the tilt-shift filter and the back & white settings. I wish my camera would save RAW images of the photos even when you’re using its effects filters, but I don’t think it can.

Kura Te Au
Kura Te Au (Tory Channel)

I only ever take good photos when I have heavy constraints on what I can do. That’s where black and white is nice and where tilt-shift forces me to try to (literally) just focus on what I want to look at.

Picton
Picton

We pretty much ended up following the ferry route to Picton, overflying one of the Bluebridge ferries on our way back.

Dieffenback Point
Dieffenback Point
Queen Charlotte Sound
Queen Charlotte Sound

It was a beautiful day for a flight, but we were racing the subset back across the strait to get home, and there were low clouds over Makara that gave the North Island a proper ominous look as we headed back.

Cape Terawhiti
Cape Terawhiti

These two black and white images will probably be my desktop backgrounds for a little while.

Cook Strait
Cook Strait

The wind had picked up as we were heading back around to Wellington airport, the approach was — as you can probably guess if you’ve been there before — bumpy.

Landing
Landing
//www.instagram.com/embed.js