My recent woodworking projects

When I was fifteen I completed a Design & Tech GCSE specifically in “Resistant Materials”, a big part of which involved a practical woodworking section. I had decided to (rather ambitiously) build a desk using mortise-and-tenon joints, but I was completely floundering and none of the joints were strong enough. My teacher, rather than spend a little time helping me out, decided it was appropriate to laugh about how terrible my project was with the other teachers, or so a friend who’d been in the woodshop told me afterwards. Mortified, I decided to scrap the project and focus on the exam so that I might scrape a passing grade, which I did.

Dog gate

It hadn’t crossed my mind to attempt any woodworking again until my partner Jenny and I realised we needed a gate to prevent our dog going upstairs when we were downstairs. (Our dog Fern is mischievous.) We have employed traditional baby gates in other parts of the house but our stairs have an awkward vertical space between the trim and the railing.

Searching on YouTube, I found a straightforward tutorial with a simple design. What I loved about the way this video is presented was that it helped me visualise the gate and therefore believe that I could make it; The creator made it seem so easy.

I didn’t have a miter saw but some googling led me to believe I would need some kind of workbench, some handsaws, a square, a drill (which I already owned), screws and some wood glue.

For the workbench, I ended up going with the very highly recommended Black & Decker workmate, which I still use on various projects. It’s a little low for me though. The handsaws, square and the other bits were fairly easy to buy at Screwfix. Jenny and I drove to Sydenhams for the wood, a builder’s merchant. We had to cut down some longer pieces so they’d fit in my Skoda Octavia spaceback.

Nothing to lose

I didn’t really have any expectations of myself, as I preprared to begin the project. I knew it highly unlikely that I’d end up with nothing; if all went to plan I’d have a working gate.

The gate took me most of a weekend to build. Quickly I learned that, even with accurate measurements and markings, my cuts were just not consistently straight, which you can see at the tops of each vertical a little.

On evaluation

I’m fairly pleased with the gate’s fairly straightforward, functional design. To mount it on the wall I placed a piece of wood on the wall and used my wood drill bit to drill through it and only a little into the wall to mark it. Then, on the masonry setting I drilled much bigger holes for rawlplugs. Initially I only used three screws but some weeks later, after my dog had rested her paws on the gate a number of times and seeing it drop a few millimeters at the bolt end, I added another two.

For the bolt, I imrovised a fixing made of two perpendicular pieces, fixed to the wall with three rawlplugs. This part of the gate was the least secure. There’s about 1mm of clearance from the gate frame but Jenny and I like that we can often rest the gate in the closed position without locking it, so the dog can come downstairs if we want to give her the option.

We chose to paint the gate with white Dulux satinwood paint. I didn’t realise that I probably should have used a primer, but actually the paint took well. I rushed this part because I was so excited to mount and use my gate and perhaps, on reflection, shouldn’t have. This becomes a recurring theme in my other projects; overcome with excitement I often rush the decorating part, compromising the finish.

(The drill scraped a little of the wall as I was fixing the hinges. Unfortunately we don’t have any of the paint the previous owner used for this hallway.)

Patio raised bed

With my newfound woodworking confidence I wanted to take on another project. In June, we had our patio renovated and had asked that a small space be left for a raised bed.

Once again, with very low expectations I watched some more YouTube videos. Through this video I was introduced to the excellent, highly-produced work of Stuart at “Proper DIY”. His video on raised sleeper beds exposed me to a little more “technicality” than I had perhaps experienced on the gate project but features some lovely touches, like using some trim to fold the waterproof lining over, for clean edges.

On this project I had bought some 200 by 100 by 2400 railway sleepers from Bradford’s, another builders merchant near where we live in Somerset. Unfortunately some of these were twisted, which made some aspects of the project tricky later on.

New tools

For this project I bought myself a Bosch Cordless circular saw. Initially I was nervous about potentially severing one of my limbs with its spinning blade but quicky realised that, with its guard, it would be very difficult to hurt myself with. It made sense for me to buy the battery-operated UniversalCirc saw because I’d be doing most of my work outside, but in retrospect a corded saw and extension cable also would have worked fine.

The UniversalCirc cut through the sleepers reasonably well but after spending whole days in the sun, its batteries would quickly overheat. I bought a much larger 4ah 18v battery for this project so that I could work for longer, however if I could go back, I would have invested in the “professional” Bosch range, which features much more powerful tools; the DIY and the Pro Bosch battery systems are unfortunately incompatible. I read a comment recently that said something to the effect of “buying new tools means we have outgrown the old ones”; the DIY range of tools has served me pretty well.

In my design I had planned to stack three railway sleepers on their short side but in the build decided two was enough. I had toyed with the idea of the sleepers connecting to each other but I’d also bought some 100 by 100 fence posts, having also imagined a design in which these posts sit on each corner. The latter turned out to be the more feasible because, as I mentioned earlier, many of the sleepers were twisted.

I began the project by using a hammer & chisel (lended to us by Jenny’s mum) to clear out all the excess concrete on the breezeblocks that the bed would sit on. One challenge with the design was that the end of the bed (made of brick) was slightly higher than the breezeblocks. This meant I had to cut the end posts and bottom end sleeper slightly shorter.

Cutting the sleepers was difficult because my saw’s maximum cutting depth was 50mm and the sleepers were 100, so I would have to mark my cuts on both sides, then flip it over. On some pieces my cuts were so poor I had to discard them altogether.

Tricky cuts

While the patio builder had left a 45 degree angle in the breezeblocks, I poorly judged where my end posts would sit and consequently had to cut a more acute angle for my diagonal piece. As you’ll see in the following images, my cuts were so poor I had to create a sort of “shim” and fill the gaps with loads of filler. It’s “functional” but a little more planning might have produced a better finish.

It’s worth mentioning just how much more physical this project was than the last. The sleepers were especially heavy, so every flip, every adjustment required me to lift the piece. Equally, driving 150mm screws through each of the posts required a lot of force. I should mention that, invariably I’m using the drill setting on the slow speed of my combi-drill to drive screws in, rather than the screw setting. I still don’t fully understand why the drill setting has so much more strength than the screw setting; I’d love someone to explain why this is.

I completed most of the bottom half of the project in one first weekend, then resumed a few weekends later. While the wood is weather-treated, I didn’t have to worry about it raining because the UK was experiencing the first of several heatwaves.

Once the frame was complete, I sanded the corners with another of my new purchases: an orbital sander (also in the Bosch DIY range) to remove sharp edges and splinters. Jenny then coated it all in Ronseal and painted the whole piece in a rather lovely (weatherproof) eggshell blue paint. The extra Ronseal step might have been unnecessary but, with how tired this project made me, the idea of having to rebuild the bed next year was not one I embraced.

Alcove shelves

When one has an ever-expanding Blu-ray collection (as I do), storage space is in high demand. Jenny and I wanted to make the most of the space either side of our living room’s fireplace to relieve our bookcase of Blu-rays and books.

Again, turning to YouTube, I found some excellent tutorials. This one, by a professional carpenter explained all of the important technical qualities.

Importantly, it mentioned that alcoves are not usually perfectly square. I would need to measure each wall if I wanted similiarly sized shelves. I would also need to “scribe” the shape of the wall onto the pieces of MDF I was using for a neat fit.

The following video from “Rag ‘n’ Bone Brown” also features the scribing technique. Jenny and I love his “Junk Hunt” series, in which he finds discarded scrap wood and recycles it into useable furniture.

For this project, I ordered most of my wood from Sydenhams. Because some items were out of stock at our local branch, it took about two weeks to arrive. I had chosen some thicker softwood to as front pieces, with a planed width matching that of the full constructed height of the shelf but what arrived was unfortunately about 2mm thinner. Because I had blocked out a weekend for the project, I chose to push on. Jenny assured me that we could make the appearance of this gap less noticeable with decorator’s caulk.

Building out my first shelf was surprisingly straightforward. I drilled through each wooden baton, marking the wall for drilling into the masonry (as I did when I mounted my gate.) I then measured and cut three perpendicular batons to spread the weight of heavy books and provide extra structural support.

I used 6mm MDF on the tops and bottoms of each shelf, measuring with the aforementioned scribing technique and cut with my circular saw. I “pinned” each shelf to the frame with short screws, counter-sinking each screw hole so that later I could fill over the top. I didn’t want to have to buy a nailgun for this project, but with the glue dripping from the frame as I attempted to pin each sheet of MDF in place, one probably would have made the process much less painful, especially on the shelf undersides.

After filling & sanding, Jenny and I painted our shelves first using two coats of a wood primer, then a topcoat of what was left of our satinwood.

I’m overall very pleased with the sheer practicality of these shelves. Unlike in videos, I chose to make them 300mm deep so we could double-stack Blurays and books. With a rough calculation I estimate that they could support up to 20kg in weight!

On evaluation

Much like on my gate project, in the excitement of seeing my shelves manifest, imagining my physical media spread across them, I rushed the sanding and filling process. In angled lamplight, it’s possible to see the edges of some of the screwholes I hastily filled and sanded, visible in the following picture.

I went into each project with very low expectations and in each one I ended up “winging” some aspect; not as any “professional” would do but just a guy DIY-ing around his house. I’ve created things that I never thought possible.

It was on this project that I noticed, while I can point out its deficiencies, I’m perfectly satisfied with “good enough”. Perhaps, when it comes to DIY, I’ll always be a “good enough” guy.

Workbench

This weekend I’ve been building a workbench so I can continue my DIY & woodworking projects. One of the things I learned on the alcove shelves was just how unbearable cutting sheet materials on the floor is; in my case raised on bits of scrap railway sleeper. Most sheet materials come in a 2440 by 1220 size, which one must cut down to something useable. With my workbench, I hope to be able to work at a comfortable height.

For this project I once again enlisted the help of Stuart at Proper DIY. I decided to extend Stuart’s simple workbench design with a 100mm overhang on each side for easy clamping. Remembering Sydenhams’ slow delivery, I ordered the wood for this project from Bradford’s. Unfortunately, after a whole kerfuffle in which they delivered the wrong product three times, much of the correct wood I received was twisted.

Again, having blocked out a weekend I decided to push on with the project. Part of me really wishes I hadn’t; it caused lots of headaches.

Earlier this week I took receipt of my new Bosch Pro GCM 305-216 S miter saw and stand (costing only £314 altogether!) I knew that the workbench would warrant lots of clean, repeatable cuts and so far I’ve been very impressed with its quality. The GTA 2600 stand is much more solid than I’d imagined.

Jenny and I also recently purchased a Titan “shop vac” from Screwfix, which we’ve used to hoover up soil and sawdust from the garage floor. We can’t believe how something so cheap has such vastly superior suction power; I don’t exaggerate when I say our quality of life has been improved.

On this project I tried using a (newly acquired) jig for drilling tidy pocket screw holes. While the finish is very good, I got frustrated with the tedium of reclamping and repositioning my workpiece and instead defaulted to using the “turning drill” technique you can see in Stuart’s workbench video. It’s much quicker and in all likelihood nobody’s ever going to see the screwholes on the inside of my workbench but me.

I’m looking forward to attaching a vice to the bench and possibly adding castors on the feet so that I can reposition it to the middle of our garage for cutting larger sheet materials. It is however, very structurally secure.

I’m very proud of what I’ve been able to accomplish with these projects in only a few months. As I’m sure other homeowners can attest, there are always things that need making or fixing. It’s fair to say I have taken to my new occupation well.

No smoking gun

North Devon bluebells in Spring

When my girlfriend and I arrived in North Devon for a short break with her parents last week I said I didn’t want to talk about AI. I suppose lately I’ve been feeling the coming together of several different forces in my work life and I feel so terribly exhausted by the rhetoric around the use of LLMs. I’m so tired of being seen to be the unreasonable one, to ask for things I don’t think of as being unreasonable. To be absolutely clear, I do not want this future society appears to be sleepwalking into. I didn’t ask for any of this.

In my despair it was then so refreshing to read Kyle Kingsbury’s essay series “The Future of Everything is Lies, I Guess”. In my favourite of the series, “Where do we go from here?”, he writes:

The personal automobile reshaped streets, all but extinguished urban horses and their waste, supplanted local transit and interurban railways, germinated new building typologies, decentralized cities, created exurban sprawl, reduced incidental social contact, gave rise to the Interstate Highway System (bulldozing Black communities in the process), gave everyone lead poisoning, and became a leading cause of death among young people. Many parts of the US are highly car-dependent, even though a third of us don’t drive. As a driver, cyclist, transit rider, and pedestrian, I think about this legacy every day: how so much of our lives is shaped by the technology of personal automobiles, and the specific way the US uses them.

I want you to think about “AI” in this sense.

Some of our possible futures are grim, but manageable. Others are downright terrifying, in which large numbers of people lose their homes, health, or lives. I don’t have a strong sense of what will happen, but the space of possible futures feels much broader in 2026 than it did in 2022, and most of those futures feel bad.

I do appreciate the fabulous utility of this technology.

Last week I got Claude to write me a script that took my saved articles (as markdown files with front matter) and save them in Readwise, then delete the files. It took ~20 minutes and I saved hours of my time. It wrote me a Python script and I don’t know Python particularly well, not that it mattered. It’s wonderful to be able to do boring things so easily (I never really cared about the ins and outs of the Readwise API) but I do feel a great disconnect between what I’m doing and what I’m learning.

As Christopher Meiklejohn writes in “Rift”:

This is engineering. I keep being told that. It is engineering and it is the future and it is more leveraged than what I used to do. All of that is probably true. But it is not the work I have been doing for thirty years. The shape of it is different. The rhythm is different. The way it sits in the day is different.

…

I don’t know how to be honest about this without sounding like I am complaining about progress, but I can’t pretend that something hasn’t been taken. The flow state I had for thirty years is not part of my workday now. The creativity that lived inside it is not there either. I do useful things. I do not feel what I used to feel while doing them.


Why do conversations about one aspect, or nuance of the use of LLMs, so often seem to devolve into conversations about whether LLMs are, on the whole, useful or not? I want to believe it’s because we’re still in the process of deciding. For some, it seems like an ideological argument, like making billionaires pay more tax, than it is one grounded in truth. They were quick to set out their position, where they will remain. I suspect a lot of those who have only recently started admitting to using LLMs publicly were long using them in secret.

A friend of mine, James, another Software Engineer, tells me the company he works for acquired Claude licenses for the engineering staff about a month ago. He recently met with some of his team to discuss concerns about the way he suspects LLMs are being used in communication. He says many of them use it for programming, which he’s not opposed to. We both agree that we’re willing to take a risk on not using LLMs in our work because we think (and some research seems to suggest) that using them will make us worse programmers. I think it will still be useful to be knowledgeable about programming in ~five years, while I don’t think that using Claude to assist my code is a skill I’ll miss out on if I don’t. Maybe I’ll be wrong, but I’m willing to gamble on myself, which in the past has never led me astray.

James thinks his colleagues are using LLMs in various “subversive” ways.

His manager recently wrote a spike (a call for investigation) on a particular issue James had some knowledge of. James spent some time describing some of the challenges in that domain and giving feedback on some of the approaches his manager (the LLM) had suggested. He has reason to believe that his manager merely took his feedback and fed it back into the LLM. The so-called “findings” from the spike were just rebuttals to James’ ideas.

He suspects another colleague is using their Gitlab access token to have Claude read PR feedback, make changes and reply to the comments. James takes time to review his colleague’s work but suspects his input is merely being funnelled into another stream of pseudo-consciousness. When James asked his colleague what they thought about his feedback they said it was “all fine”.

Naturally James asked his colleagues for more clarity about when they were using LLMs in their work. He suggested a label on PRs, or perhaps if he asked them, they would be candid about it. But to his surprise even his manager thought that was unreasonable. For the record, he wasn’t asking that they change their use of LLMs in any way, just that they tell him when they do.

I told him I’d had a similar experience. I will always feel dishonest taking credit for someone else’s work or present some ideas I’ve read online as my own without citing them. I’m not talking about intellectual property, though that’s another discrete concern, I’m talking about a failure to engage with one’s work in any sort of creative or intellectual capacity. How can you say you “take responsibility” for your work, when it’s an agent that speaks on your behalf? A continuous failure like this, failure to think and to communicate with candour, at least to me, signals a lack of creativity, innovation and desire. Perhaps, James’s colleagues feel it is simply not their concern.

Sadly, there’s no “smoking gun”. James can’t prove any of what he has good reason to believe. He knows (having worked with them for years) that his colleagues don’t really write like that. He knows he’s not really messaging them, that what he’s reading isn’t really them. But how can any of it really be proven? And why should he bother to engage with the ideas of someone who can’t be bothered to engage with his?

Why do people drop litter?

In February of last year I became a member of Dorset Devils, a litter picking group based here in beautiful Dorset, where I live. I’m DD1164 but the thoughts expressed here are my own, not the group’s. Joining had been on my horizon for some time but the kick up the backside I needed was seeing a local taxi driver pull up in my road before dumping a McDonald’s paper bag (full of other assorted rubbish) out of his car. Deciding not to do anything about it for the next week, while out walking I would see the bag, breaking apart and then eventually sending little bits of rubbish all over the road. What a f*cking mess.

I pick up litter on my own, usually every other Sunday for around two or three hours. Sometimes the roads can remain free of litter for a week. Sometimes more litter will appear the day after I cleared it. I choose not to care: there will always be litter. Doing something… anything… is better than inaction. Some people do thank me in the street, for which I’m very grateful; It does feel nice to know my time and effort is appreciated but it’s not something I have ever expected.

The purpose of this article is to describe where I think roadside litter comes from, why I spend my free time picking it up and what else could be done to reduce it. It’s based on my own personal experiences of litter picking (a posteriori) and not any research I’ve read or conducted. My intent is not to virtue signal; Don’t think litter is important? You know where the door is.

What constitutes litter?

To me, litter is anything that’s been intentionally discarded in a public place. The vast majority (by volume) is food packaging and (by type) cigarette butts. How do I know what’s been intentionally discarded? Usually it’s dirty.

My bucket is only so large, which means that over the course of two hours or so I have to empty it several times. A dartboard left propped up against a lamppost has probably been discarded, but a decision I leave to the authorities to make.

Where does roadside litter come from?

Most people will have been raised to understand littering is morally wrong: It makes a place look scruffy and poses a danger to people’s and animals’ health. In school you’re taught to take your litter home with you, or deposit it in the nearest public bin. Until that point it’s your responsibility to hold onto it. It’s just what you do. While not a serious crime, I think littering is quite a selfish thing for a person to do.

While picking, I often think about the litterer’s motivations; I wonder whether they drop litter out of carelessness or malice. Either they do it in the knowledge that it’s wrong or they’re simply careless about where it goes. The latter seems silly to imagine; a person would have to have a lot of litter in their car for it to blow onto the street without their knowledge. I prefer to imagine a spectrum of behaviour instead of two distinct options.

I pick up vastly more cigarette butts than any other type of rubbish. Cigarette butts are small but hard to pick up in any quantity. On a given outing I usually have a tolerance for how many I’m willing to pick up, but food packaging is far more garish and noticeable in my opinion. Sometimes I’ll come across a bench or spot where smokers congregate and find hundreds of butts in one place. I’m sure some smokers will argue it should be the authorities’ responsibility to provide bins to deposit cigarette butts in, but this is far too easy: every person maintains their own moral responsibility and smoking is still, ultimately, a choice, as is throwing a butt on the floor.

Most of the rubbish I pick up seems to collect around cars. I have to be careful about how to word this so as to not indiscriminately accuse drivers of littering, but there is certainly more litter where there are free places to park. For example, on more than one occasion I’ve seen taxi drivers eat a meal in their car and then deposit the packaging at the curbside. Having walked the same routes for over a year now it’s also apparent to me who some of the main culprits are, due to the amount of new rubbish that appears by their cars. You need only glance through their windows to see rubbish in the footwells, on the seats, in the cupholders etc. These people, although a minority, contribute most of the curbside rubbish. The irony that they do this outside their own homes!

Some litter does fall out of household bins (as they’re being emptied into the bin lorry) and blow into the road but I think this only accounts for a small amount. In apartment blocks there’s often not a clear understanding about who’s responsible for clearing this rubbish, but homeowners tend to be fairly dilligent. Is someone more likely to drop litter if there’s already lots or less litter already around, I wonder?

Why do I pick up litter?

Lots of rubbish in public places generally leads a person to believe that (if there’s a nicer way of saying this please send it to me) they live in… a sh*thole. When people think they live in a sh*thole, they treat it and the people (and other people’s posessions) with a proportionate level of respect. Not thinking they live in a sh*thole generally makes a person feel better about their life, improves their sense of wellbeing and allows them to focus their energy on the day.

Picking up litter is also a great source of exercise. I wear a Dorset Devils branded high-vis jacket (which is actually very useful) and my bucket also has branding (and a QR code linking to the website, though nobody has every engaged me in conversation long enough to ask for a link). People simply seeing me pick up litter (and piqueing their interest enough to go to the website) is a good thing in my books. At the time of writing we have 1434 members. Not only is more people picking up litter a good thing, but having more people (especially young people) experiencing their communities (and the people that live in them) is essential. To quote myself “Good people do good things”, the operative word being “do”.

What might help even more?

It’s quite apparent to me that BCP (Bournemouth, Christchurch and Poole) Council have chosen to focus their litter-picking efforts on some parts of Bournemouth and not others. On Braidley Road for example, the road that (ironically) Town Hall resides on, lots of litter can be found beyond the flyover halfway alongs its length, but the section next to Town Hall itself is fairly litter-free. More bins and collections are required all over, in parks (in Horseshoe Common) and on residential roads too. In parking bays signs should indicate the nearest bins. Cigarette bins could be erected next to park benches.

Fast food restaurants (McDonald’s, Subway, Burger King) and big-chain supermarkets (Sainsbury’s, Asda, Lidl, Aldi) could equally do a lot more to prevent littering, whether that involves working with the local council to erect more bins or encouraging their customers to deposit litter at their establishments or take it home with them. I suspect low-level corruption is partly the reason as to why the former hasn’t already happened.

Taste and Criticism: Appreciation for The Last of Us, Part 2

This essay contains The Last of Us, Part 2 spoilers. If you haven’t played it already I think you should.

A popular gaming YouTuber called Mr Blueberry begins his “Why Last of Us Part 2 Sucks.” video by saying “It can be hard to find an unbiased review”. He doesn’t say whether he thinks that includes his own but then goes on to give his rather (in my opinion) biased opinion on the game. That’s because “our feelings about a story make our perceptions about the quality of writing biased” to quote “Some Quality Biases”, an essay I wrote after my last playthrough in 2022.

But nearly four years after its release, Reddit users still post thousands of comments decrying the game’s “poor storytelling”, “poor execution”, “woke politics” and “lazy writing” to its subreddits /TheLastOfUs2 and /thelastofus. It’s actually quite hard to find anyone on there with anything positive to say, not even that Reddit is the only place where the discussion is taking place, only where the strength of feeling seems to be so great so long after the game’s initial release. There doesn’t seem to be a place for anyone who did like the game to talk about it, though. Holding the opinion that I do (that part 2 was a good game) and reading some of these threads (or dare I say it, commenting) feels like walking into a room on fire: there’s so much hate that the only likely outcome is to leave feeling burned.

First I want to talk about some of the behaviours that seem prevalent in (online) discussions of taste, then I’ll look at why I still think part 2 was well written.

One of the most cynical of these behaviours I encounter online is typically expressed through the question, “How could you [not] like X?”. It’s suggested that the arguee is either: (a) some sort of raving lunatic or (b) not clever enough to understand. The latter’s more common but that’s in a way part of the egotism I’m about to describe: there’s no debate if the person you’re arguing with is mad but besting them intellectually is far more satisfying. Ironically though it’s the quality of the arguments and its justifications that gives us an idea of whether we regard them as good not (or whether we think they’re intelligent 1) 2, though I think we can all agree slighting another person’s intellect is probably not a great way to bring them round to our point of view.

It’s now so common that it’s become a bit cliche of modern criticism to call something a “masterpiece”. Usually when I see this in reviews it suggests the possibility that the critic has decided to elevate it to a level higher than any comprehension of its masterfulness. Admittedly though, that’s how I felt after experiencing the game for the first time: a body-shaking orgasm of emotion that I felt no need to articulate. As Pirsig wrote in Zen, “Quality is a direct experience independent of and prior to intellectual abstractions”, or in other words it would be hard for me to describe what I liked about playing the game as I played it, but perhaps not if I were to analyse it afterwards. Thinking about creative expression in critical terms and explanations tends to take away some of my enjoyment. Isn’t it good enough to simply say, “I enjoyed it” without anything further? 3 This notion doesn’t sit entirely comfortably with me: some writings are very clearly “better” than others and some works of art are widely regarded as masterpieces.

A friend once described me as “contrarian” for not having enjoyed the most recent Spiderman film. It was a critical and commercial success and I was definitely in the minority. I can recall the exact moment I realised I wasn’t enjoying it, when Peter says, “Hey, Strange! You know what’s cooler than magic? Math!” I’d imagined he might have said something so direly predictable as the scene was unfolding.

While my own sense of “good” writing is probably made up of lots of conscious and unconscious thoughts and biases, the following are some of the things I like:

  • I like it when details are shared implicitly. An English teacher once told me “Show, don’t tell”; this is especially true of visual arts, but yesterday I was listening to the audiobook of “An Artist of the Floating World” in which a character mentions his “pupils”, implying he’s a teacher. It would have seemed obstructive to the flow of the story for him to have talked about being a teacher, but it’s expanded upon later.
  • I like it when characters speak in a normal kind of way. Contrary to popular opinion, a lot of dialogue doesn’t read or sound like real-life conversation: you miss out on all the awkward bumps and pauses. Dialogue tends to have been edited but real conversations flows. Dialogue is also a great way to tell a story implicitly.
  • There’s great power in what’s not said, which is especially true of the ending to The Last of Us in which I found myself urging Joel to say what I wanted him to, but then he didn’t quite. Characters don’t have to do or say exactly what we want them to for us to find them compelling, but nearing the end of the game at times I found myself setting the controller down, not wanting to feel responsible for what Ellie wanted to do.
  • We have too many “triumph of good over evil” stories; what’s so compelling about The Last of Us is its moral ambiguity that left me feeling so conflicted. This was the game’s greatest strength.

Having read so many hateful comments online about part 2, it’s hard to write about something you enjoy so enormously without imagining its detractors and what they might say. Fortunately my blog doesn’t have a comments system because I write mostly for myself, but writing this post (and thinking about some of the different viewpoints on taste and criticism) was a real pleasure. Of course holding The Last of Us franchise in as high regard as I do, I’m guilty of huge bias which I’m sure comes across in places. Though as I look to take a break from gaming for the next few months I still can’t think of another title that even remotely holds a light to it. I’d love for the game’s creators to know how much playing the game warmed my soul.


  1. What most affects our perception of someone’s intelligence? Is it that they use long, multisyllabic words? I try to write my essays in the most concise way, though I’ve been told by non-native-English speakers I use “fancy words” (unncecessarily). Personally I think of the “fancier” words as being more concise i.e. you can use one word instead of many.
  2. I sometimes laugh when I read a horribly written comment that criticises the “poor writing”.
  3. When I first wrote about the game in 2020 I said “We seem to live in an age where everything requires some sort of justification but I’m not going to try to convince you why you need to play this game. It was meaningful to me and you’re reading my blog.”

Comparing Player Stats

Earlier this week I was curious if I could create a program that would help me make my Fantasy Premier League selections: a list of players with the highest scores for the anticipated gameweek (a set of fixtures). Initially I wanted it to consider form (a player’s average score over the last thirty days) and the difficulty of each fixture. I wrote a first version in a couple of hours [1].

Writing programs that consume APIs in Go usually requires creating a series of structs that mirror the structure of the API. You “unmarshal” JSON onto these. In my first iteration, when I wanted to add my own additional computed values I would just add these as new fields, omitting the json struct tags. When I came to add more features a few days later the code was hard to read so I prefixed my API structs with “api” and then created a series of new types designed on the structure of data I wanted to output. I then iterated over the API values, mapping the data onto the new types. The data was much easier to work with in that way.

My program works like this: Initially I create a selection of “likely winners”: teams whose expected difficulty is less than that of the teams they’re facing. I then take all the players from these teams and sort them by form, their ICT index (a metric created by the league), their average starts and the difficulty of the fixture.

But I encountered an interesting problem. The game requires you to play a certain number of players in each position. Between three and five defenders, two and five midfielders and one and three forwards. There’s always one goalkeeper. These bounds mean that (for example) one week the “ideal” team might consist of four defenders and five midfielders because the midfielders are higher scoring than the defenders and forwards. I attempted various different solutions including maintaining state across an ordered slice and a map of players by position. Even ChatGPT couldn’t produce viable code. Ultimately I ended up calculating the total scores for each combination of players (a formation) and picking the formation with the highest score; though I’m sure this isn’t the most efficient method - if you have a better idea please email me.

I still continue to enjoy writing code with Go. My language (pending name timlang) is still in development and I’ve been adding some new features to my blog. I can’t imagine having worked on this tool any other way, especially when the compiled run time is ~100ms.

Edit: 21st Aug

In studying the API data, today I also decided to include the likelihood of a player starting in a given round as part of their “score”, so as to downgrade injured players. I’m also now displaying the score in the results, an arbitrary number whose meaning is unclear to the uninitiated. Some players seem to rank higher on this score than others in much better form, which might not make sense at first. In some ways the “meaning” of the data, what I’m really trying to convey when I say the “perfect team”, has been distilled; Adding more variables to my ranking order is not as simple as just form on its own nor am I under any illusion that having more variables presents a “complete” picture. That picture may be complex but I suspect that most of my predictions will be wrong.

[1] Latest version: https://github.com/notoriousbfg/simple-fantasy