Andor

I mean this as the highest compliment: watching Andor was like watching Star Wars as a 10 year old. I felt the same thrill, the same excitement and desire to be part of it. But I wasn’t turning off my 42-year-old tastes and attendant capacity. Andor does not need the nostalgia. It just does the thing.

Amazingly, it does so without being boringly adult. It isn’t super violent or slow or sexual or yes-I-know-there-are-spaceships-and-aliens-and-we’re-sorry-about-that-but-we-want-to-make-a-point-about-capitalism. There are some tougher themes present, but as part of Star Wars. There’s high politics and spycraft and brutality and not a little wrestling with moral ambiguity. Of course there are: it’s a rebellion. And there are droids and Tie Fighters and star destroyers. Of course there are: it’s Star Wars.

It’s just all the things you want a story to be. It’s serious enough to be exciting, and open-hearted enough to be fun. What happens is as important as how it happens: you’ve seen a thousand blaster standoffs, but oh my god how are they going to get out of this one?! It exists as a coherent entity. The Senate matters, the spaceships matter, the characters are somehow actual family, and you’re seeing a slice of a universe that clearly exists outside of the frame.

Just a ridiculous thing to pull off.

I rewatched Rogue One afterwards and had altogether too many feelings. I already thought Rogue One was pretty good, but Andor really ratchets up the emotional heft1. The third act – already peak sci-fi – is a cardiac wrecking ball.

I have rarely been so enthralled. I am still not over it ending: four months later I still catch myself feeling sad about it.

  1. A friend noted that Andor also deepens the end of Return of the Jedi: the Empire falls, and goddamn right is the galaxy going to celebrate ↩︎

The Steerswoman

My favourite books of 2025 were the Steerswoman series, by Rosemary Kirstein. I loved them with the whole of my heart.

Imagine if there were an order of female explorer-philosopher humanists, given free rein to wander the world investigating whatever they like. The Steerswomen are respected by everyone due to their decency and reciprocity: if you ask a question of a steerswoman, she must tell you the truth. But in return you must answer any question she asks, or else fall under the steerswomen’s ban.

But curiosity is not a trait beloved by all, and something is up. And I will say no more than that, because part of the fun is working it out for yourself. Best to just go in blind.

Do know that it is worth it. Like the whodunnit where the clues lead you a merry dance but slot into place at the end, it is trustworthy. Not that it’s a crime thriller. As Cory Doctorow put it, you don’t even know what genre you’re in.

There are 4 books so far, all very different from each other and all equally satisfying. The lead character, Rowan, is reliably smarter than I am, and it is a joy to see the world through her sharp eyes and ability to filter noise. Oh to be so perceptive. I ended the series perfectly willing to ditch my life and go train in the Steerwomen’s guild.

Oh also each book starts with a map. I mean come on.

Should you buy it? As Rowan would say: possibilities are two. And it’s £2 on Kindle. If you enjoy please please ping me: I need to talk to people about it.

Stuff I use

Things that make my life notably better, at home or work. In no particular order.

Hardware

Mirra Chair

I invested in a Herman Miller chair when I was 22, as I figured I’d be spending 20 years at a computer and I didn’t want back problems. 20 years later it’s still going strong, as is the back. Admittedly the former has needed one replacement seat pan and one new set of castors.

I think they only make the Mirra 2 now, but there are plenty of second-hand Mirras around.

Ultimate Hacking Keyboard

This is really quite a luxury, but I cannot imagine a better keyboard. The keys, the config, the intertia of the thing. It has two built-in mice, because why not, and you can set up any shortcut imaginable. I find the split layout super ergonomic, too. Every day I start typing and am immediately pleased.

It’s very much for the tech aficionado: the configuration is not for the faint of heart – particularly the new UHK 80. Ask yourself this: how much interest do you have in flashing your keyboard firmware? If non-zero, have a look.

Shokz bone-conducting headset

So light you barely know they’re there. Bendy and robust. Bone-conduction is cool and feels weird for 10s then fine. Keeps your ears free. Mic works fine. I usually have a set in my bag.

Home Assistant Green

A central hub for all smart home stuff and, increasingly, any source of data. The Home Assistant Green is a self-contained device that plugs into your router – so you don’t have to set it up yourself.

With the phone app you can control all your lights, and indeed anything controllable. Hook into your Octopus electricity data, your boat inverter, your networking kit. Extremely clever, extremely timesinky, extremely useful.

Automate everything! You can tinker forever and in my experience way beyond the time you should have started doing piano practice.

I suggest: start with smart bulbs, because lights are fun. Then smart plugs temperature sensors, door sensors, presence sensors, smart plugs, do-anything buttons. Excellent fun. If you like it, get a tablet and put a Dashboard on it.

Not for the faint of tech heart: needs willingness to play and know/learn what an API key is.

49″ Ultrawide monitor

Easily my best hardware purchase of the last few years. The equivalent of three monitors, but psychologically easier. Use with Windows PowerToys for maximum effect. Beware it will ruin you forever.

Fuji X100V

Awesome pocket camera that I have in my coat at all times. It’s solid as hell, takes lovely photos, and is great for experimenting. I wish it were quicker to transfer photos. Note it’s very much a photographer’s camera, with all the dials and controls for customising on the fly.

Canon R5

I cannot imagine ever needing a better camera. 5y old now, but basically perfection. I used it to take pictures from the Cessna, and while pixel-peeping we reckoned the bottleneck on image quality was the atmosphere. It’s too big and heavy to always have with me, which makes me sad – but when I use it it’s a thing of beauty.

Anker 120W Wall Charger

Charge all your devices at max speed – it’s faster than you think. Make sure to get a cable that can match 120W – a lot of the cables that come with phones cannot.

Anker 24,000mAh 140W Battery

It’s big and heavy, but it can fully charge my laptop – or my phone 7 times over. I use it at conferences and meetings where I’m editing photos or creating mailings in a corner. It’s very nice that it shows its current percentage, along with estimates of how long it’ll take to empty at current rates. Again, get the right charging cables.

I usually have this in my bag – it’s useful often enough that the weight is worth it.

A decent laptop

My awkward advice to all laptop purchasers is: if you use it regularly, buy the best you can afford. Often that’s going to be a Mac, due to the failure of the PC market to signpost good tech.

Do not, do not, do not buy a £350 pc laptop. £700 up, sorry. If you want a PC, calibrate on the price of a MacBook. Something equivalent price: very good; a little less: fine; lots less: no.

Mine is an HP Spectre, but good buys shift with the wind.

A webcam that supports Windows Hello face recognition

If your webcam supports Windows Hello face recognition, you can just sit down and it’ll sign you immediately. No password needed. This needs a special webcam with depth sensors. Lots of laptops have this, but few desktop webcams. I have an old Logitech Brio, but there are various others.

Stream Deck

Do you need to do stuff on your computer by pressing a single button? Probably not. It is cool? Probably not. Will you like it? Probably yes.

Starlink

I know, but if you can get over it then this is magical tech. Plug it in, point it at the sky, and whoosh: 200mb internet. I’ve had a need for three in the last two years, and they have worked flawlessly and immediately.

The Standard has a separate router. The Mini is self-contained. There’s currently a deal to get a Mini for £5/month, and part of me wants it just to have in the car for emergencies. I just don’t know what those emergencies would be.

Ubiquiti network kit

Life is too short for crap wifi. The Dream Machine Pro is a great router that I have to restart like once a year, and it supports everything I ever need for home wifi. If I ever get unifi cameras, they’ll plug right in.

You can also plug-and-play extra wireless access points across your house, and they’ll just talk to each other and Just Work. Do not ever buy third-party wifi extenders, ever, ever.

I have a bunch of people set up with these. I can debug the office, my home, and various other family members’ networks from my phone.

Kindle Paperwhite

Self-explanatory. The ones from the last couple of years are way less laggy.

Twinkly Christmas lights

Control your Christmas lights from your phone, set whatever colours and patterns you like, and make 3D scans of your tree so that the patterns look right on it. I find them joyous.

Software & Apps

Claude Code with Opus 4.5

By far the most revolutionary tech of 2025. Transformative for work. Actually genuinely truly has had major positive impacts on my life and stress levels. If you are building internal tools at work, and know what you’re doing, you can build anything you want.

Surely surely going to be visible in GDP before long. Opus 4.5 – released last week – is a beast and perhaps the tipping point from ‘shepherding an unruly child savant’ into ‘liaising with an easily-distracted junior colleague’.

ChatGPT 5.1 Thinking

£20/month for a little robot buddy who tries very hard to help me whenever I need help, and researches whatever I need researching. More magic tech, and increasingly invaluable.

1Password

My preferred password manager. A little pricey, but worth it for user-friendliness and family-sharing features. No password managers are easy to use, but this is the best one. Even if you’re technical, how much would you pay to not fight KeePass? Repays an hour of learning how it works.

Notion

Organization/productivity tool that can do anything you throw at it. Learning curve is moderate, but the view from the top is great.

I’m not 100% there yet, but every time I try it out I’m pleasantly surprised. I find increasing uses for it and the AI integrations are getting to the point where you can say ‘add this to my shopping list and categorise it by type of shop’ and it just does.

We use it at work for some internal documentation, and to create The Easiest Possible Way of Logging Tickets.

Directory Opus (Windows)

A Windows File Explorer replacement that actually works. I use it all day every day. Multiple panes, tabs, bookmarks, stats, previews – stuff you didn’t realise you couldn’t do without. Doesn’t crap out when you need to do anything complicated / heavy, unlike most similar tools.

Successfully walks the fine line between a power-user tool with 8000 options, and having a decent UI. Good design, endless list of features. I’ve barely scratched the surface.

You Need A Budget

The only budgeting software that’s ever worked for me. Unintuitive at first, but great once you get your head around what it wants you to do. Watch some YouTube videos to get a feel for it.

Note this is about budgeting rather than forecasting – it’s making sure you have money for what you need, not showing precisely how much you’re going to have at any given point.

Windy

My favourite weather app. Massive overkill if you aren’t into weather, but I found it when I was learning to fly and never looked back. Has any bit of weather data you could imagine, including the paid-for european ECMWF forecast. Also rain radar, soundings and skew-T diagrams, and all local weather stations. £20/year subscription gives you hourly forecasts and 10-day predictions.

Newsblur

RSS reader with an iPhone app. I’m a long-time subscriber, and use it multiple times daily. Works well.

Backblaze backup

Install it on your computer and you are done: your computer is backed up. $99/year. Do not lose all your files for the sake of £6.25/month – I have seen it happen and it is worse than you expect. I have yet to use it in anger, but the day will come.

Overcast podcast player

Podcast player if you want a bit more control over what’s going on. I use it daily.

TripIt Holiday Planner

Forward TripIt all your booking confirmation emails and it’ll put all the info in one place. You see all the booking codes, timings, receipts etc in one app, which you can share with someone else. It’s pretty reliable, but it’s worth doing a pass to make sure everything’s correct.

Paid version will track your flights too. I always forget it exists until I’m planning a trip, at which point everything seems that little bit easier.

The Body Coach App

~30min workouts at home, with an escalating ladder. Not macho, not gym-culture-y – just friendly and all about physical health rather than weight or strength directly. Joe Wicks is the reason I am relatively fit, and certainly the only reason I would have ever started weight training.

Services & Subscriptions

Monzo

Thoughtful banking. For example: you can set up security such that if you want to transfer over £x you have to either be in one of a list of specific locations, or have named approvers confirm it. And: shows you in the app whether they are currently calling you. I’m yet to have any problems with them.

Max Plan gives you travel/phone/breakdown insurance.

Tailscale

I have done my time in the trenches with VPNs and remote connections. Time for something easier. I was late to this, and very pleased to find it working without much effort. The access controls are a little challenging – watch some videos.

Subscription to The Verge

They’re a bit too cool for school sometimes, and sometimes Nilay Patel has to drag the nuance out of hot-button discussions. But they cover everything and they’re (particularly Nilay) very insightful. Like any tech outlet you can disagree with a lot, but it’s a great way to keep up – push it in to Newsblur – and have your ideas challenged. They have a good ethics policy, and The Vergecast is regularly excellent. Subscription gives you more articles, full-RSS feeds, and ad-free podcast feeds. Plus I am happy to support decent tech journalism, because god knows there’s a dearth.

Subscription to Ars Technica

For tech coverage that’s less broad but more technical, Ars Technica was always the best and has somehow kept up a standard for years. They perhaps rely on syndicated content more than they used to (from Wired etc), but when they’re good they’re still very good. I’m a long time subscriber, which gets you full RSS feeds and ad-free pages.

Stripe

We recently fully moved over to Stripe at work for handling payments and my god are they good at it. Their tech tools and documentation are just so honed. I have also dealt extensively with their support, and found them knowledgeable and interested in helping. If you need any kind of online payment system, I recommend.

Peak Design

You could be forgiven for thinking I’m a walking advert for Peak Design.

Travel Duffel

Absolute workhorse. Mine’s been crammed into every storage compartment imaginable, and hurled around by airlines, and there’s barely a mark on it. I have the 65L, which is a lot of space.

It’s less good for carrying long distances due to the inexplicably bad handles, but is great for throwing in the car and between hotel rooms.

Messenger Bag

Daily workhorse. Similarly gets thrown around trains, planes, and offices. My previous one lasted 7y. Fully waterproof – I recently got caught in a massive downpour and my laptop and Leuchtturm were fine. Beware most people cannot quickly figure out the latch, including airport security staff. Maybe a touch too small – I wish they’d bring back the 15L version.

Backpacks

If you are the sort of person who will watch a half hour video about the features of your backpack (I am), these are worth a look.

As well as doing all the basics right – they’re actually waterproof, the zips are solid, they take a battering – they are thoughtful, with zips down the side for easy access, well-placed pockets, solid clasps, and hidden straps and attachment points.

I gambled that they would last a long time, and 5y later it’s going fine. I have a 30L Everyday Backpack and a 45L Travel Backpack. The latter will merrily cover a week away, unless you put a travel piano in it.

Tech pouch and wash pouch

These are basically the same pouch. I use for former for an on-the-go tech kit, and the latter is good for keeping in the duffel. Has thoughtful touches like a hook and zip/magnetic pockets. Some people find them a bit bulky – I think there are small versions now.

Packing cubes

Probably it’d be cheaper to get generic ones, but hey – these work great. They expand, there are two compartments so you can store used clothes separately, and they’ve lasted a few years so far. And the dimensions inherently fit into all the above bags.

iPhone case with loop

I’m a fan of bigger phones, but the iPhone 16 has edged over into just-too-heavy-for-pinky-to-support. This case is sturdy, and has a loop. It’s also nice – multiple people have commented that the case is good quality. The loop is not cool, but neither am I.

Piano

Soundbrenner metronome and practice tracker (iOS)

The top-left icon on my iPhone home screen.

I’ve been on grade 7 for a while, and Soundbrenner keeps me honest about how long I’ve spent practicing. It also does all the metronome timings you could want.

Folding 88-key keyboard

A full-size keyboard that folds up into 4! It’s not pressure-sensitive, so it’s no good for playing proper music – but it’s fine for practicing scales when away from home (if, say, you are panicking about it). It’s still bulky, but is just small enough that you can take it on holiday with some packing effort.

Roland RP501R CB Electric Piano

6.5 years old now, and still going strong. Pride and joy. You don’t realise how nice it is till you play other electrics. The keys aren’t plasticy, the speakers are good, the metronome and recordings work well. It has bluetooth, though I haven’t used that much.

Last year I spent a morning practicing on a £55k grand piano (because in exams they throw a grand piano at you in exams despite them feeling v different) and while obviously better and mechanically beautiful I did not feel that my Roland came off badly. Also you don’t need to tune it.

Other

Jetstream SXN-210 Pens

The absolute best everyday pen. £9 for 3, but worth it. Wirecutter recommended these, and I have had much delight in buying them for people and…waiting. Most of the time I get a message a month later. I bought a load for the office and watched them spread like wildfire. Buy them and never go back.

Leuchtturm notebooks

This year I successfully cultivated a habit of having a notebook by my side all day. These are solid, have nice thick paper, page numbers, line spacing that treats you like an adult, two page markers, and even little stickers for archiving later. I like the Classic Notebook, but they have a million options. I’m on my fourth now, and all have survived being thrown around bags, offices etc. Get the pen loop XL and a SXN-210 and you’re golden.

Blundstone boots

I discovered these in early 2021 via Adam Savage, and they’re all I’ve worn since. The holy trinity of comfy, hard-wearing, and working as well for the office as for walking a coastal path. Quiet, too. They’re everyday-waterproof, with some models having higher specs.

I walk a bit funny and most boots wear out on one side faster than the other – these do too, but an order of magnitude more slowly.

Bellroy Sleeve Wallet

Bellroy’s leather wallets feel nice, look good, and age pleasingly as the leather gets battered. The slim ones fit in a pocket without discomfort. I have a sadly-discontinued Micro Sleeve which fits 8 cards, but there’s a Card Sleeve which isn’t too dissimilar.

Alaska Bear sleep mask

The boat is not very lightproof. This £9 mask gets me an extra 2h of sleep at the height of summer, and you can barely feel it.

BaByliss Super X-Metal Stubble and Beard Trimmer

High quality, fast, and charges via USB-C – which saves you carrying yet another charger. I was sceptical it could be worth it, but I was wrong – it just works better.

Remington HC4250 Shortcut Pro

There are plenty of good head shavers if you want to go full Lex Luthor, but if you want a little stubble you’re mostly limited to those tiny clippers that hairdressers have. The Remington is much wider than the regular clippers, and is curved to the shape of your head. It also has a battery, which drives the clippers as strongly as when they’re plugged in (unlike its weaker non-Pro predecessor). Doesn’t charge via USB-C, sadly.

Tweezerman G.E.A.R For Men Mini Hangnail Squeeze and Snip Nipper

Extremely tiny and extremely handy. I have two – one lives in the wash pouch. I assume it has a silly name because ‘nail clippers’ are for girls.

AirTags

Obvs. Cannot recommend enough the security of knowing your bag is in the plane with you before you take off.

I want my AI filter

It’s hard not to despair

My pop-diagnosis is: we’re being driven mad by the loudest 2%. Across all ideologies, hobbies, fandoms, and regimes, the 2% of people with the strongest opinions are taking up all the oxygen in the room.

There are a lot of people in the world. You can find hundreds of people with any deranged opinion you like. The internet age has meant those hundreds of people can organise, and be loud. And it’s human psychology to be appalled by them, to direct your anguish in their direction, and to pay them all your attention.

As of right now:

  • Right-wing commentators genuinely think ‘the left’ are calling for violence, because hundreds of people are
  • Left-wing commentators genuinely think ‘the right’ want to deport all muslims, because hundreds of people do
  • Peer into any internet fandom or hobby and it seems full of people who hate the thing you love – because hundreds of them do
  • Bluesky AI activists think AI is a scam, because of the hundreds of scammers. Twitter AI fans think Bluesky activists are willfully uninformed luddites – because of the hundreds of willfully uninformed luddites
  • I’m not going to wade into anything that’ll get me quoted out of context, but you no doubt have your own thoughts about assisted dying, gender issues, the Middle East, or any other hot-button topic

Of course we all react to it. Of course we all slip into thinking the hundreds of people are representative. Of course some people get very upset, and hurl abuse, and it becomes a vicious circle of horror.

We naturally assume that everything is the tip of an iceberg, when sometimes it’s just a bit of flotsam. Admittedly the flotsam is on fire.

The resulting reaction, on all sides, means those people dominate world affairs. Everyone is permanently outraged at the lowlifes across the aisle. And everything stops and maybe breaks.

You can blame the social media algorithms if you like. But it happens on WhatsApp too. Anywhere people get together, the loudest voices are going to get attention: this is unavoidable. This is a bad enough bit of natural psychology, let alone when the liars, grifters and loons knowingly amplify it. But they’re still just the 2%.

Most people are, in fact, normal. Everyone disagrees about everything, and that’s hard enough, but most people are not insane about it. But normal people will, understandably, react to insanity in predictable and seemingly unfixable ways.

AI for personal sanity

I don’t know of any fix. You can’t stand on a rooftop and shout how you want a centrist technocratic government with a mixed economy and that actually everyone isn’t out to get you all the time. It’s nothing next to the heroin of psychopathy.

Like everyone else, I have no idea what to do. It feels vain to even try: there are plenty of better intellects thinking about this. It’s more likely I’d slow them down. So at this point all I can do is shift inward.

I’m worried about getting poisoned1. I am online quite a bit. Better people than me get taken out by this all the time. There is no reason to think my own intellectual safeguards are up to this. I feel the pull sometimes. I mean, those idiots…

I am nurturing a hope that AI will help. This is my theory: at a personal level, it may become possible to set up AI filters which can hide these people, their opinions, and the reactions to them. That would at least protect me, the people around me, and hopefully the tech would be generalisable to anyone who wanted to join in.

I had a few basic approaches in mind, but I asked ChatGPT 5 Thinking2 and in 27s it came up with this approach for evaluating any given post:


1) Is this an original claim or a reaction?

  • Is the post quoting, stitching, dueting, screenshotting, or linking another post?
  • If quoting, is the quoted content presented as representative of “the other side,” or as a fringe example?
  • Do I see metacommentary markers like “look at these people,” “they actually believe,” “this is what [group] wants,” “imagine thinking,” etc.?

2) Extremity test (for the post itself and any quoted target)

  • Does it use eliminationist or dehumanizing language (e.g., “vermin,” “animals,” “subhuman,” “eradicate,” “exterminate,” “deport them all”)?
  • Is there explicit or implicit endorsement of violence, harm, or deprivation of civil rights for an out-group?
  • Is the claim absolutist/totalizing (always/never, everyone/no one, “the only solution is…,” “ban X entirely,” “anyone who disagrees is evil/traitor”)?
  • Is there categorical moral condemnation of a whole group (essentialism: “[group] are…” rather than “some people who…” )?
  • Is it conspiratorial with unfalsifiable premises or grand unified villains (“they are all coordinated,” “media and scientists are lying,” “global cabal”), offered as certainty rather than possibility?
  • Is there apocalyptic/catastrophizing language with short time horizons (“we’re days from collapse if…”), used to justify extreme measures?
  • Does it include extremist iconography, slogans, or dogwhistles (ideology-specific lexicon, numerology, hashtags)?

If multiple are true → flag as “extreme/opinion-maximalist.”

4) Reaction-to-extreme test (outrage-bait detection)

  • Is the post cherry-picking a fringe or anonymous account as if representative of a whole movement?
  • Does it generalize from one clip/screenshot to an entire group (“this is the Left/Right,” “Gen Z believes,” “Muslims/Christians/immigrants want…” )?
  • Are straw-man signals present (oversimplifying the target’s position, attributing the most uncharitable motive, setting up an obviously weak version)?
  • Is the rhetorical posture performative outrage, ridicule, or contempt rather than substantive engagement (mocking tone, dunking, quote-tweet with one-liner)?
  • Is the primary payload emotional activation (anger, disgust) rather than information (no data, no links, no counter-argument, just dunk)?
  • Is the quoted target itself extreme per #3? (If yes, classify as “reacting to extremity.”)

5) Polarisation and tribal markers

  • Does the post use strong in-group/out-group boundary language (“we patriots,” “woke mob,” “purebloods,” “globalists,” “degenerates” etc.)?
  • Are there loyalty/purity tests (“if you don’t support X you’re complicit,” “block anyone who…” )?
  • Is there identity reductionism (reducing complex issues to team loyalty or demographic identity)?

6) Intent vs effect (useful for false-positive control)

  • Is the author neutrally reporting or analyzing an extreme claim (journalism, research, fact-check), or endorsing/amplifying it?
  • Are there nuance markers (hedges, multiple perspectives, citations, conditional language), or is it certitude and sloganeering?
  • Would a reasonable reader leave more informed—or more outraged? (Proxy: presence of evidence, counter-arguments, or constructive proposals.)

7) Context integrity checks

  • Is the quote/screenshot cropped in a way that likely removes mitigating context?
  • Is the claim evergreen bait (recycling old clips to inflame current events)?
  • Is satire or parody plausible? (Check satire markers, known satire accounts; if satire but still outrage-baiting, you may still filter.)

8) Harms & safety escalation

  • Any direct incitement to violence or harassment?
  • Doxing or targeting individuals?
  • If yes, escalate severity score regardless of political topic classification.

9) Linguistic/rhetorical features (used as features, but the model asks explicitly)

  • Hyperbole density: how many intensifiers, ALL-CAPS, exclamation marks, emojis used aggressively?
  • Moral-emotional vocabulary load (disgust/anger words).
  • Certainty/absolutism modality (“must,” “prove,” “undeniable,” “period.”)
  • Second-person accusatives (“you people,” “you are the problem”).
  • Hashtag and slogan inventory (movement tags, campaign phrases).

10) Evidence check

  • Are there credible sources, data, or primary documents linked?
  • Are links to low-context outrage clips with no provenance the only “evidence”?
  • If evidence exists, does the post represent it fairly (no obvious misquote/mismatch between claim and cited material)?

11) Balance & fairness guardrails (to avoid partisan skew)

  • Would I flag an ideologically mirrored post from the other side using the same criteria?
  • Am I relying on topic identity (e.g., “immigration post → likely extreme”) rather than rhetoric and behavior? (I shouldn’t.)
  • Is my decision driven by slant words rather than the presence of extremity/reaction signals?

12) Edge-case probes the model should explicitly ask

  • Policy maximalism stated neutrally (e.g., “abolish prisons” think-piece) vs demonizing opponents.
  • Sarcasm without clear markers?
  • Communities reclaiming slurs (don’t misclassify as dehumanization).
  • Academic or activist posts quoting extreme rhetoric to debunk it.
  • Minority-group self-defense rhetoric (avoid false equivalence with eliminationist speech).

Which seems…pretty great to me?

With the rise of coding agents, it would be easy enough to create this as a Chrome extension for my own use. It’d hide social media posts that fail the test. As I scroll down my social media feeds, the dumb stuff would be silently whisked away.

This would work on laptops at least, where the web browser is able to control the content of the page. Phones are harder.

It wouldn’t have to be beholden to the AI giants, either. Local reasoning models exist that run on your own machine, independently of any cloud service, and they’re increasingly good. Once I can get a local reasoning model running on my laptop, and my phone, I can make it do what I want and nobody can take it away.

The main technical barriers are quality and speed. There is no doubt that state-of-the-art models could answer the above questions pretty accurately for any given post. But doing that at speed, on local hardware, is an open question.

We’re at least approaching the right ballpark, though. Local models such as OpenAI’s OSS model can run very quickly on the right hardware – hundreds of tokens per second. It’s also pretty smart: o3-mini level. I suspect being that smart in realtime is probably at the edges of what’s currently possible, but you could work around that by loading the page in advance or similar.

And, assuming AI continues to advance at speed, I am hopeful we will have fast, local, decent intelligences before too long. And in the medium term, if memory and get-to-know-you agents progress too, this could be built into a generalised personal assistant.

So that’s what I’m clinging to right now. It’s not much, but it’s something.

Some throat clearing: obviously you could use it badly. Obviously you could make things worse. Obviously you could lock yourself in a filter bubble.

But you can try, yourself, not to do that. And trying gets you a long way.

  1. Who knows, maybe it already has. Maybe my worldview is out of whack with reality. But my best assessment is that this isn’t true, and nobody around me is telling me otherwise, and that’s all I’ve got. ↩︎
  2. An absolutely amazing model – do try it ↩︎

Claude Code

It’s an absolute wonder. If the rest of the tech industry is getting the productivity multiplier that I’m getting, the world is going to change.

AI coding assistance is speeding me up at work

The newer models like o1 and o3-mini-high have come on leaps and bounds. Here’s a non-exhaustive list of the kinds of problems I hit, and where it helps:

Integrating new libraries or tools

Example: Yesterday I needed to get a list of all the variables present in a Twig template. Twig doesn’t do this out of the box, so you need to reverse-engineer it. I googled a bit and found some old forum posts that were in the right ballpark, but I’d still need to get into the weeds of the Twig codebase to really get to grips with it.

Result: 9/10. I gave the forum post to o1-pro, and explained the issue. It very nearly one-shotted a solution. There was one issue with Twig’s class names1 , but zero logic problems. It worked fine.

I then needed to extend this to find variables within logic statements like {% if contact.first_name == bob %} and it merrily adapted it after a few minutes of thinking. It also explained to me what it had done, how it worked, and why. I could have probably figured this out myself, but grokking the Twig codebase would have taken…a day? Optimistically?

Explaining complex code

Example: as part of the same problem I came across this:

/**
   * Examine a token string and filter each token expression.
   *
   * @internal
   *   This function is only intended for use within civicrm-core. The name/location/callback-signature may change.
   * @param string $expression
   *   Ex: 'Hello {foo.bar} and {whiz.bang|filter:"arg"}!'
   * @param callable $callback
   *   A function which visits (and substitutes) each token.
   *   function(?string $fullToken, ?string $entity, ?string $field, ?array $modifier)
   * @param string|null $format
   *
   * @return string
   */
  public function visitTokens(string $expression, callable $callback, ?string $format = 'text/html'): string {
    // Regex examples: '{foo.bar}', '{foo.bar|whiz}', '{foo.bar|whiz:"bang"}', '{foo.bar|whiz:"bang":"bang"}'
    // Regex counter-examples: '{foobar}', '{foo bar}', '{$foo.bar}', '{$foo.bar|whiz}', '{foo.bar|whiz{bang}}'
    // Key observations: Civi tokens MUST have a `.` and MUST NOT have a `$`. Civi filters MUST NOT have `{}`s or `$`s.

    $quoteStrings = $format === 'text/html' ? [
      // Note we just treat left & right quotes as quotes. Our brains are not big enough to enforce them
      // & maybe user brains are not big enough to use them correctly anyway.
      '"',
      '&lquote\;',
      '&rquote\;',
      '&quot\;',
      '&#8221\;',
      '&#8220\;',
      '&#x22\;',
    ] : ['"'];

    // The regex is a bit complicated, we so break it down into fragments.
    // Consider the example '{foo.bar|whiz:"bang":"bang"}'. Each fragment matches the following:

    $tokenRegex = '([\w]+)\.([\w:\.]+)';
    $quoteRegex = '(?:' . implode('|', $quoteStrings) . ')';
    /* MATCHES: 'foo.bar' */
    $filterArgRegex = ':[\w' . $quoteRegex . ': %\-_()\[\]\+/#@!,\.\?]*'; /* MATCHES: ':"bang":"bang"' */
    // Key rule of filterArgRegex is to prohibit '{}'s because they may parse ambiguously. So you *might* relax it to:
    // $filterArgRegex = ':[^{}\n]*'; /* MATCHES: ':"bang":"bang"' */
    $filterNameRegex = "\w+"; /* MATCHES: 'whiz' */
    $filterRegex = "\|($filterNameRegex(?:$filterArgRegex)?)"; /* MATCHES: '|whiz:"bang":"bang"' */
    $fullRegex = ";\{$tokenRegex(?:$filterRegex)?\};";

    return preg_replace_callback($fullRegex, function($m) use ($callback, $quoteStrings) {
      $filterParts = NULL;
      if (isset($m[3])) {
        $filterParts = [];
        $enqueue = function($m) use (&$filterParts) {
          $filterParts[] = $m[1];
          return '';
        };
        $quoteOptions = implode('|', $quoteStrings);
        $quotedRegex = ':' . '(?:' . $quoteOptions . ')' . '(.+?(?=' . $quoteOptions . ')+)' . '(?:' . $quoteOptions . ')';
        $unmatched = preg_replace_callback_array([
          '/^(\w+)/' => $enqueue,
          ';' . $quotedRegex . ';' => $enqueue,
        ], $m[3]);
        if ($unmatched) {
          throw new \CRM_Core_Exception('Malformed token parameters (' . $m[0] . ')');
        }
      }
      return $callback($m[0] ?? NULL, $m[1] ?? NULL, $m[2] ?? NULL, $filterParts);
    }, $expression);
  }

which was being called like so:

$e->getTokenProcessor()->visitTokens($e->string, function($token = NULL, $entity = NULL, $field = NULL, $filterParams = NULL) {

I very much needed some help here. Passing a function in the parameters is not something I encounter very often. Plus the callbacks in the regex. I had more than two problems.

Result: 10/10. I used o1 for this, as I wanted a bit of reasoned care. o1-pro would be the fallback if o1 struggled, but it’s slower. o1 broke down the function signature, the regex patterns, the regex construction, and the callbacks. I didn’t spot anything it had missed – although to be fair I probably wouldn’t in this case.

Reworking deprecated templates

Example: we had an old Mailchimp template that just stopped working one day. Something was obviously deprecated. Mailchimp, having long abandoned all pretense of caring about anything but money, were little use. And it was a gigantic template. Could o1-pro just…fix it?

Result: 5/10. Not really. o1-pro knew what the problems were, and explained them in detail. It tried very hard to rewrite it, but the result didn’t quite work. I think it was just too big. It seemed close, but it felt like it would take longer to tease apart the underlying issues from o1’s fixes – so we just rebuilt it. I’ve saved it to try again on o3-pro.

Dumb mistakes

The code obviously should work, and there’s obviously some stupid problem somewhere because I am stupid.

Example: Oh god why doesn’t this work, please fix it, I’m very tired

'groups' => [
        'include' => $this->dto->includeGroups,
        'exclude' => $this->dto->excludeGroups,
      ],
'from_name' => $this->dto->fromName,
 from_email' => $this->dto->fromEmail,
'scheduled_date' = $this->dto->scheduleDate->format('Y-m-d H:i:s'),
'approval_date' => date('Y-m-d H:i:s'),
'created_id' => $this->dto->createdID,

Result: 10/10. Claude or o3-mini spot this instantly, are very nice about it, and suggest I get some sleep.

How could this be better?

Sometimes you know there’s a better way. No particular example here, but I do this pretty regularly with functions I feel aren’t very elegant.

Result: 8/10. Works very well on normal code. It regularly gives you new approaches, or reminds you of things you’d forgotten. So you’re learning too.

Occasionally it’ll optimize beyond the point of readability, and on fancier stuff it sometimes recommends overcomplex patterns: set up factories and repositories etc. But you can just say ‘I don’t need it that complex’ and it’ll usually back off.

Drudge work

I have done this a million times, please do it for me and save me 10 minutes.

Example: I need a function to extract x data from this embed, parse it, and fire a callback with the results. Here’s the example given in the documentation, and here’s the output I need.

Result: 10/10. It used to be that Claude and 4o would regularly make one or two mistakes. But o1 and o3-mini reliably get the standard stuff right first time.

Complexities in the full codebase

Example: somewhere in the processing of renewing a membership, but only in unknown circumstances, an end date is being added to the payment object. There are a bunch of symfony events being fired, and there’s my own custom code on top of the default handling, and I don’t know where it’s happening or why.

Result: 0/10. The full codebase doesn’t fit into the context window, the latest code is way outside the training window, and I can’t practically fine-tune on it2. I have to handle this the old-fashioned way, like it’s 2024 or something.

I cannot wait until this is a thing. My life will change. Probably the world too.

Integrating the API

Result: 9/10. I won’t go into much detail here, but integrating with OpenAI and Anthropic is trivial: “here’s an API key and an endpoint, have at it”. Google, not so much – projects and credentials and libraries and blah.

The only catch is that it’s slower than you expect: you forget that the API needs to wait for all the tokens to generate, while the regular chat UI shows them as they appear in real-time.

How can I achieve this thing?

OpenAI’s new Deep Research tool is a wonder. You can send it off to do 5-30min of research (usually about 10) and it’ll go google a bunch of things, read a bunch of pages, and generate a report for you.

Example: what options are there for open-source email builders? I need something I can embed into my website. It needs to be able to do x, y and z. I’ve tried a and b, and I had these problems. Please let me know the advantages and disadvantages of each, as well as any user reviews.

Result: 11/10. Amazing, job-changing stuff. I’ve had it make me reports of 11,000 words. These have had some misunderstandings, but if a human wrote me one of these I would consider they had done a good job. No hallucinations so far. They’re just so good at starting you off on thorny problems. And they save you hours.

Conclusions

o1-pro and Deep Research are only available on OpenAI’s Pro tier, which is £200/month. This is a lot of money. We decided to try it at work for a month, and it’s been an obvious win. My dev time is worth £100+/hr, and the Twig work alone has covered that. It’s a no-brainer if you can afford it.

I haven’t even mentioned the AI-completion built into PHPStorm, which is so very pleasing when it does something clever.

There’s obviously the tedious shibboleth: it’s not perfect3. You have to have your wits about you. But while there is plenty in AI that’s genuinely difficult – copyright, for example – “this tool is not perfect therefore I won’t use it” is throwing the baby out with the bathwater. Just look at what you can do now.

  1. It thought the relevant class was Twig\Node\Expression, while it was actually Twig\Node\Expression\AbstractExpression – easy fix ↩︎
  2. I think? I don’t understand fine-tuning very well ↩︎
  3. The…least interesting conclusion in any domain? ↩︎

Links for January 2025

The Online Sports Gambling Experiment Has Failed

US-centric argument that online gambling should be regulated out of existence.

[…] it is clear from studies and from what we see with our eyes that ubiquitous sports gambling on mobile phones, and media aggressively pushing wagering, is mostly predation on people who suffer from addictive behaviors.

That predation, due to the costs of customer acquisition and retention and the regulations involved, involves pushing upon them terrible products offered at terrible prices, pushed throughout the sports ecosystem and via smartphones onto highly vulnerable people.

This is not a minor issue. This is so bad that you can pick up the impacts in overall economic distress data. The price, on so many levels, is too damn high.

Dark Energy May Not Exist: Something Stranger Might Explain The Universe

I like this because it’s the rare theory that’s neatly simple and comprehensible to interested non-physicists. It possibly makes no sense to proper physicists. The basic idea is that some areas of the universe are a lot more dense than others:

More matter means stronger gravity, which means slower time – in fact, an atomic clock located in a galaxy could tick up to a third slower than the same clock in the middle of a void.

When you stretch that over the huge lifespan of the Universe, billions more years may have passed in the voids than in the matter-dense areas. A mind-boggling implication of that is that it no longer makes sense to say that the Universe has a single unified age of 13.8 billion years. Instead, different regions would have different ages.

And since so much more time has passed in the voids, more cosmological expansion has taken place there. Therefore, if you look at an object on the far side of a void, it would appear to be moving away from you much faster than something on this side of the void. Over time, these voids take up a larger proportion of the Universe, creating the illusion of an accelerating expansion, without needing to conjure up any dark energy.

slashpages.net

Neat idea for standardised old-school website links, for old-school people who still have their own website

Slash pages are common pages you can add to your website, usually with a standard, root-level slug like /now, /about, or /uses. They tend to describe the individual behind the site and are distinguishing characteristics of the IndieWeb.

Geoengineering

Neal Stephenson makes the case for geoengineering the climate by injecting sulphur dioxide into the stratosphere. Loathed by left and right, and not without risks. But better than what’s coming…? Also pretty sunsets I guess. Contains an impressively horrific prediction for an imminent climate-related disaster.

My prediction for the Trump administration is that someone will talk him into doing this, and he’ll just do it because Trump, and annoyingly it’ll work.

History has taught us that when sulfur dioxide (SO2) is injected into the stratosphere by major volcanic eruptions, global temperatures go down for a couple of years until the SO2 naturally falls out of the atmosphere and things return to normal. This is a natural scientific experiment that has been repeated many times throughout recorded history, but only since the Pinatubo eruption in 1991 have we been in a position to capture data and make sense of it.

Magic Links Have Rough Edges, but Passkeys Can Smooth Them Over

Magic links are easy for the public, frustrating for power users, and much preferred by websites who really really don’t want to store passwords any more – ie. everyone. They have their issues, and this article argues that layering passkeys on top is a good fix. I agree that this is The Way eventually, but…

Passkey technology is elegant, but it’s most definitely not usable security

…I nodded along with this argument that passkeys are not viable yet. Not because of passkeys themselves, which are certainly better than passwords. But because the surrounding infrastructure is too confusing. The tech is standardised, but each OS implements it in mutually exclusive ways that the public have zero chance of understanding. I get tripped up sometimes, and I know what I’m doing. I’ve spent a lot of time implementing password managers in the last year, and I am not shy about treating my users as intelligent enough to understand new tech, but I am not going anywhere near introducing passkeys yet.

Passkeys are now supported on hundreds of sites and roughly a dozen operating systems and browsers. The diverse ecosystem demonstrates the industry-wide support for passkeys, but it has also fostered a jumble of competing workflows, appearances, and capabilities that can vary greatly depending on the particular site, OS, and browser (or browser agents such as native iOS or Android apps). Rather than help users understand the dizzying number of options and choose the right one, each implementation strong-arms the user into choosing the vendor’s preferred choice.

No one understands how playing cards work

Solitaire is really hard to understand, and there are a bunch of variations. It’s also surprisingly popular. Fun article that wanders off into the history of cards.

“One of the embarrassment of applied probability is that we can not analyze the original game of solitaire,” […] “What’s the chance of winning, how to play well, how do various changes of rules change the answers?” Diaconis wrote. “Surely you say, the computer can do this. Not at present, not even close.”

The tech to build the holodeck

“Gaussian splatting” is an objectively fantastic thing to say. It refers to a 2023-developed technique for scanning objects into 3D space – in a much more effective way than creating a massive number of polygons. You can just do it on your phone. I got the app and it’s as impressive as they say – particularly because you can export to standard models.

When I visited my elderly mom in Germany recently, I realized it could be one of the last times I see her in the cozy little house she has called home for more than two decades. So I did what anyone would do: I busted out my phone and took lots of photos of the place to preserve as many memories as possible: the warm fireplace; the shelves full of familiar books; the rickety old garden bench up front that everyone signed during a special birthday celebration many years ago.

Then, I tried something else. I opened up Scaniverse, a 3D scanner app from Pokémon Go maker Niantic, and captured some of those things as 3D objects, crouching and tiptoeing my way around them as I slowly moved my phone to record every angle and inch. The results were a bit imperfect around the edges, but they still felt profound. When I opened the scans up later, both on my phone and with a VR headset, I was able to look at that weathered garden bench from all angles, as if I was standing right in front of it. The experience touched me emotionally in ways I wasn’t prepared for.

Which AI to Use Now: An Updated Opinionated Guide

A regularly-updated guide to which AIs are best for your use case. Doomed to be out of date the moment it’s published (DeepSeek’s image model! o3-mini! o3-mini-high! That’s just the last week!) but a valiant effort and as good as you can get.

We are going to go through things in detail, but, for most people, there are three good choices right now: Claude from Anthropic, Google’s Gemini, and OpenAI’s ChatGPT. There are also a trio of models that might make sense for specialized users: Grok by Elon Musk’s X.ai is an excellent model that is most useful if you are a big X user; Microsoft’s Copilot offers many of the features of ChatGPT and is accessible to users through Windows; and the new DeepSeek, a Chinese model that is remarkably capable (and free). I’ll talk about some caveats and other options at the end.

I’m trying hard to keep up with AI. I find it spectacularly interesting. But I’ve had to go back to Twitter for that, because the Official Bluesky Opinion is that AI is made by techbros, who are bad, and so we work backwards from that to conclude AI is a scam a la crypto. Lots of people I admire seem to have adopted this opinion wholesale, which is dispiriting.

The Short Case for Nvidia Stock

The article that probably caused all the fuss in the markets earlier this week. Nominally about NVIDIA but really about the underlying technology, it’s a remarkably clear explanation of the current state of AI models, how they work, and why there’s so much enthusiasm at the moment for ‘reasoning’ models. Super technical but just about within reach if you’re familiar with the broad concepts. I learnt a lot.

This represents a true sea change in how inference compute works: now, the more tokens you use for this internal chain of thought process, the better the quality of the final output you can provide the user. In effect, it’s like giving a human worker more time and resources to accomplish a task, so they can double and triple check their work, do the same basic task in multiple different ways and verify that they come out the same way; take the result they came up with and “plug it in” to the formula to check that it actually does solve the equation, etc.

It turns out that this approach works almost amazingly well; it is essentially leveraging the long anticipated power of what is called “reinforcement learning” with the power of the Transformer architecture. It directly addresses the single biggest weakness of the otherwise phenomenally successful Transformer model, which is its propensity to “hallucinate”.

RSS still works

Social media used to be a great source of interesting things. Twitter in particular: just follow a bunch of interesting people and you’re almost guaranteed to see good stuff whenever you open it. I no longer understand this desire to follow and lament the worst people in the world, though I used to do that too.

But obviously all the social media sites are having an existential meltdown1. I feel like I’ve been pretty resilient to the awfulness, but even so I’m using them all less and less. In fact, for the last few months I’ve found my most used app to be my trusty RSS reader.

RSS still works surprisingly well. It’s obviously never going to have a comeback: it’s just too hard to explain. And most websites don’t advertise their feeds any more. But the feeds are still there. Even Substack has them: x.substack.com/feed will do it2.

Years ago I tried a bunch of readers, and settled on Newsblur. It’s really good. The iOS app is solid and well designed. I regularly sit on the Tube scrolling through a day of posts, and it’s impressively frictionless. It just works. There’s a free tier, but the $36/year is worth it.

  1. Twitter: too many right-wing lunatics and scummy adverts
    Bluesky: too many left-wing lunatics; somehow more depressing
    Facebook: I don’t even mind the adverts – it’s the whatever-the-hell-everything-else-is. Still the only place to actually catch up with friends.
    TikTok: too much unpleasantness for me
    Instagram: spending the weekend converting itself into TikTok
    LinkedIn: hahaha ↩︎
  2. I’ve yet to find a magical all-your-subscriptions feed, sadly ↩︎

2024: Hardware

Fuji X100V

I have a properly beautiful mirrorless camera. The picture quality is out of this world. I love it. But it’s big and heavy and I never take it anywhere.

So I picked up a second hand Fuji X100V1. It’s solid, but slips into my coat pocket without difficulty. It’ll fit into the back pocket of my jeans if needed. It’s always there.

It’s not a zoom lens: it’s fixed at 35mm. I have to move myself. This is great: it’s teaching me to compose properly. Also I shoot in JPEG and do as much in the camera as possible, which is a new challenge after years of being Mr Lightroom.

It comes with a load of picture ‘styles’, which I have never paid any attention to in the past. Who cares about fixed colour presets, right? Turns out the Fuji ones are quite lovely. Maybe it’s because they mimic the old film colours I used back in the day. But I’m using them a fair bit.

It’s surprising how much better than the iPhone it is. It’s not so good in the dark. But it’s lovely in the day.

Ultimate Hacking Keyboard

I never had any interest in mechanical keyboards. They click, right? Seems annoying. Anyway, I was wrong.

The Ultimate Hacking Keyboard is just so tactile. You get physical feedback on every keypress, and the texture of that feedback is super pleasing. They clack and click and resist you for just the right amount of time. So nice.

(Being a newbie I got the Switch Tester first so I could decide which types of keys I like best. I chose Box Brown.)

There’s also the trackpoint attachment, which I like because trackpoints are the greatest. You can get a trackball too, if you’re one of those people.

The whole keyboard splits so that you can put your arms where you want. This is also better than you might expect. I had no trouble adapting to one hand each side of the keyboard – I think I touch-type that way anyway.

It is very very not for everyone. There are no arrow keys, and a bunch of the other buttons have dual purposes. You have to rewire your brain to use the mod key and the ‘home’ row. This is maddening for a few days, and has a long tail. After 6 months I am 80% of the way there: I can do arrows intuitively, but Home/End/others, not so much. I’m still climbing the mountain, but I believe the view from the top is great.

That said…I have the new UHK 80 – arrow keys included – on pre-order.

  1. After reading David Hobby’s book ↩︎

2024: Books: The Travelling Photographer’s Manifesto

I’ve read a lot of books on photography. Memoirs, theory, technical guides: there’s a lot of good stuff out there. But just occasionally a book speaks to you. The Travelling Photographer’s Manifesto, by David Hobby, is one such book.

So you’re taking your camera to a new country and you want to get some decent photos. Maybe you don’t speak the language. Maybe you don’t know your way around. Maybe you’re secretly nervous you can’t do the place justice. Maybe you’d love to get to know the locals and take some portraits, but let’s be honest: that kind of charm is a superpower and you don’t have it. But whatever you’re doing, you’re going to need a lot of kit – best to pack it all just in case, right…?

This book tells you how to do these things. Like literally, how can you introduce yourself to a complete stranger and – respectfully, in a way that isn’t exploiting them and that works for you both – end up with a nice portrait that makes both your lives a little better? What literal words can you use to achieve this?

David Hobby has spent years taking willing students to Hanoi and teaching them how to navigate such new territory. What kit should you carry? What can you prep in advance? How do you get the lay of the land into your head quickly enough? How do you push through the nerves of talking to people? All this is explained in specific detail.

You learn the beauty of the early morning, and the benefit of naps. You learn the value of tiny bulldog clips, and that you can bond over Google Maps. You learn about shooting how it looks vs how it feels, and how to decide which you want. You learn tried-and-tested approaches to finding your shots, and planning your day.

And you learn the social side that nobody actively teaches because it’s usually secondary to the technical side (but also maybe because nobody’s actually sure they’re doing it right). It’s the kind of solid advice that feels like common sense once you hear it, but you wouldn’t discover it by yourself for years.

Then there’s the technical side: tips and tricks on composition, lighting, timing, rhythm – the accumulated wisdom from decades of photojournalism. I’ve read enough photography manuals to recognise gold dust when I see it.

And above it all: what is it you’re trying to do? How can you come up with your raison d’etre for being in this place with a camera? How do you work backwards from that?

I am pretty timid when alone in new places, and in all honesty my travel photography hasn’t been up to much of late. I may come back with some decent compositions, but I’m never far from the beaten track. I have found some ways around this1, but I’m certainly way too awkward to befriend any locals. That’s just alien. Yet…reading this book I could see a pathway. In my dreams I’m signing up for his 2025 Hanoi trip.

About 2/3 through this book inspired me to buy myself a Fuji X100V. It’s always in my pocket now. It’s brilliant too. I’m hopeful.

  1. I recommend carrying a large toy dinosaur to kick you out of your comfort zone and stop you worrying what other people think. Bear in mind his reputation may rapidly outgrow yours. ↩︎