My house literally has the road name on it, yet this week I've had mail and a parcel for 2 completely different roads. One I guess because it also started with a 'w', the other I guess because it is also a 'terrace'. If only they read the whole thing.
I miss the days when interviews on the news weren't just endless hypothetical trolley problems
sorry, what kind of a font size are the subtitles on Just Cause 4

bookmarked IndieAuth Spec Updates 2020

This is great. I was in the process of updating https://auth.hawx.me/ by comparing the specs side-by-side, this will make it so much easier.

liked A tiny CI system - Christian Ştefănescu at

Can we have a rule where people can only buy fireworks if their back garden is like a third of an acre
The Wall Market section of FF7R is the most perfect thing I've ever seen
As someone who enjoys looking at old maps, this history of Broadmarsh is top notch https://storymaps.arcgis.com/stories/21c59c2e9c52410b9278230ea7828acc
I do love getting the item delivered email from Amazon when it hasn't arrived. Just don't send the email, I'll know when I've got the delivery

liked @kenklippenstein's tweet at

My new feed reader

I enjoy using Fraidycat to read some feeds, in addition to my "river of news". It is a really nice format. But I did really want to use it from multiple devices without importing/exporting every time.

So I have made something that replicates it, kind of, in a hosted app based on a lot of the feed reading code I already had written for riviera. I've called the new thing arboretum, and have a (private) instance running along nicely.

screenshot of arboretum

I don't know if I'll keep it private forever, but at least for now it gives it a different feel to my public feed reader.

I love that bandcamp puts through multiple purchases as separate transactions, a nice game to see how many go through before the declines roll in
Finally got round to cancelling my @netflix because I watch roughly 0 hours a week, and pumping that into @ntslive because I listen basically every working hour that isn't a meeting

replied to a note

Joshua Hawxwell :

I opened up the code for relme-auth as I noticed Twitter wasn't showing as an option, looks like they've removed rel=me from the homepage links in the last few weeks which is pretty annoying...
HTML of Twitter link to homepage
It looks like there is a space at the start of the rel tag, maybe it was only an accidental deletion. Also I miss the days when classes meant something.
I opened up the code for relme-auth as I noticed Twitter wasn't showing as an option, looks like they've removed rel=me from the homepage links in the last few weeks which is pretty annoying...
branch naming strategy meme

liked Sheffield’s Twin Towers at

read The Penguin Book of Japanese Short Stories

5 years later, a new way to test in Go

5 years ago I forked https://github.com/stretchr/testify, because I wanted to "fix" the ordering of arguments to some of the functions. It isn't something that really matters, as I've lived with it for 5 years and it is one of the more popular assertion packages.

But last week I started thinking about it again, and decided that maybe I should do something about:


assert.Equal(t, expected, actual)
assert.Len(t, actualList, expectedLength)

As I'd already published the package, by virtue of having my fork on GitHub, I didn't want to change the existing API. I doubt anyone else relied on it, and with modules it shouldn't affect me, but I am trying to do things at least semi-properly.

So I added a new API. The new style is impossible to get wrong. The only cost is that you have to get the assertion function by wrapping the *testing.T first (you don't have to, but it would be ugly not to).

assert := assert.Wrap(t)

assert(actual).Equal(expected)
assert(actualList).Len(expectedLength)

I haven't changed the naming so some of them may read a bit weird.

When I originally forked the repo I did do one thing: I moved the assert package to be the root. I never really liked the style of test where the first failing assertion quits the test. It just means you have to run a test over and over to find all of the problems. But sometimes it is useful if one assertion means the others are pointless; for instance, if a list is empty you don't need to assert properties on the first element.

With the new API I have been able to provide the ability to do both. Using the .Must property on the wrapped assertion function gives access to the same API but with the methods will terminate the current test.

assert := assert.Wrap(t)

assert(actual).Must.Equal(expected)
assert(actualList).Must.Len(expectedLength)

Admittedly the naming does get even more off with the word "Must" in the middle, but this is Go not English…

Anyway a 5 year long task, done.

liked Keiss Castle, Caithness at < a crowd of bicycles > at

I will never understand why Firefox's default tabbing behaviour is set to "show me an alt-tab thing with my tabs in an order I don't expect"

liked Crank.js | Introducting Crank at

liked @CjvHenderson's tweet at @iyad_elbaghdadi's tweet at