• On a train. Heard an announcement from the Metro control center: “yadda, yadda, follow us on Twitter.” Wondering if anyone outside of tech news readers know that the service has been rebranded. It’s either that or they’re saying to themselves, “yeah, I’m not gonna call it that.”

  • Sat down on a park bench to reply to someone and this magpie came running up to me. Stayed for a minute then moved on after he realised I had no food for him.

    An Australian white-backed magpie standing in profile.
  • A thought just occurred to me while reading this post: all the effort that goes into optimising the browser for bloated, “commercial” webpages pay off in spades for sites with a lighter presence. If they can make those crummy, script-laden page usable, they can make the simpler ones sing.

  • On Tools and Automation

    The thing about building tools to automate your work is that it’s hard to justify doing so when you’re in the thick of it. Easy to see all the time you save in the aggregate, but when you’re faced with the task in your day to day, you’re just as likely to say “I can build a tool which will let me do this task in a couple of seconds, but it’ll take me an hour to build it verses the 5 minutes it’ll take for me to just do the task. Continue reading →

  • If there’s any indication of the staying power of Twitter the brand, it’s hearing podcasters continue to refer to the service as “Twitter” a week and a half after it was rebranded “X”. Will be interesting to see how long this keeps up.

  • I wonder if a read-it-later service that could work for me would be one that’ll show a random article once a day on a private RSS feed. I put links into Instapaper and they’re never seen again. But I’m always in FeedBin or NetNewsWire, so I’m more likely to read a post that’ll show up there.

  • A couple of updates from my day at work today, in no particular order.

    Still working on that design task. I’m not quite done yet, but I did spend today going over some of the earlier details, and I found that if I were to add a domain specific language (DSL) to one of the data models, it simplifies other areas of the design. I know how fraught adding DSLs can be, especially given my eagerness to add DSLs to everything I touch (a bit of an exaggeration, but not quite). But here it seems to work, at least on paper. I guess that’s a good hint to push for a DSL here when the design goes up for review. We’ll see what my colleagues say.

    Speaking of colleagues, someone asked me how I did something in DynamoDB and I shared with her my terminal DynamoDB tool. She downloaded it and gave it a try, and it looks like it clicked with her. So you can imagine how stoked I feel hearing this! Will ride these good vibes for a little while, at least for the next hour.

  • Attempting to design an app icon for a Chips Challenge fan game I’m working on. Going for something that looks like the fireball sprite in the original game with a hint more realism and tinted in the colour blue. For reference, here’s the original fireball sprite:

    Fireball sprite in Chips Challenge

    And here’s my attempt:

    Blue plasma shaped like the fireball sprite in Chips Challenge

    I started with Stable Diffusion to get the base image:

    Stable Diffusion production of the image described in the caption
    Prompt: a blue plasma fireball shaped like a throwing star with four points on a white background, pixel art

    Then imported into Acorn to rotate it, colourise it, and distort it to look a bit closer to the original sprite.

    Screenshot of Acorn showing the image produced by Stable Diffusion rotated and the effects applied to produced the final image.

    Desaturating the original image got rid of the purple centre, then applying the Glowhoo and Hue Adjust effect recolourised it to the blue I was looking for (I’m not sure what the Glowhoo effect does, but it seems to adjust the colour based on the pixel intensity, so it was good enough for what I wanted). Finally, I added a Twirl Distortion effect to achieve the slight warp in the star.

    And yeah, it’s not going to win any design awards, but it’s good enough for now.

    Oh, and just for kicks, here was my first attempt of producing the sprite using Affinity Designer.

    First attempt at the blue plasma logo, crafted within Affinity Designer

    That’s definitely not going to win any design awards. 😂

  • Greg Morris wrote an excellent post about personal blogging that resonated with me. I know this is something that I struggle with. There are many posts on my blog that are formal and impersonal. And I hate re-reading them: they’re super boring. On the flip side, seeing posts about my day (sans post about work), of photos and videos I’ve taken, are a joy to relive. I know these are posts I tend to prefer reading on personal blogs of others. I’ll try to write more of those.

    Related: Nobody cares about your blog, via. Skoobs.

  • Design task at work. Would be so sweet to junk what we have at the moment, which is a rat’s nest of dodgy code and weird behaviours, with something new. Unfortunately, the deadline is tight so I think I’ll need to keep what’s already working. Also, there’s the second system syndrome to be aware of.

  • It’s great that MacOS comes with virtual machine support out of the box for Apple Silicon Macs. Makes this sort of notarisation testing so easy to do now. I’m using VirtualBuddy to create and manage these VMs, which is a really nice app.

  • Success! Managed to get a Go app built, signed, and notarised all from within a GitHub Action. It even cross-compiles to ARM, which is something considering that it’s using SDL. Here’s the test app being downloaded and launched in a VM (ignore the black window, the interesting part is the title).

  • For reasons that are “totally” coincidental to the news of the day, I had a quick check to see how much the domain Y would cost:

    Screenshot of Porkbun prices for Y.co. Domains Y.inc for $3057.15, Y.xyz for $54583.41, and Y.pro for $2729.65 are available.

    Hmm, might be a bit much for a joke domain. 😃

  • Apple, please improve the error messaging of your code signing tools. Simply saying “specified item is not found” without saying what “item” is is borderline user hostile. You are not giving them the information they need to solve the problem. They’re left high and dry, which is not good.

  • To anyone who needs to know this: if codesign is throwing the error The specified item could not be found in the keychain, but you can see the certificate that you’re trying to sign with, just check that that certificate has the associated private key as well. The “item” not found might be that.

  • Spent most of the weekend going down various rabbit holes to get a Go application signed and notarised as a MacOS app. I’m trying to do this in a way that would make this easy to automate using GitHub Actions. This means things like no implicit access to the system keychain: I want to make a temporary keychain, add my secret stuff to it, then delete it once signing and notarisation is done.

    It also means no XCode GUI either: command line stuff only. Not that I had much hope of using XCode here anyway, since this is a Go application.

    But that’s fine, preferable even. I’ve never liked all the manual steps needed to get code signing work with XCode. What are you going to do when you change systems? Would you remember all the steps you took several years ago, when you last setup developer certificates?

    So this is why I’m trying to get it working with the terminal. But it’s not easy. Lots of esoteric commands that I need to learn and be made aware of. Just hope it’s not a huge waste of time.

  • A really nice quality of life improvement you can make in Terminal.app: map Option-Backspace to ^W (Control-W, or \027) so that pressing it in the shell will delete one word to the left, like most other MacOS apps:

    Key mapping preference pane within Terminal, with a new key mapping with the delete key and option modifier sends control W as text
  • Finished reading: Anything You Want by Derek Sivers 📚

    An intriguing book. I’ve never used CD Baby but I did hear of it, and it was interesting reading how Derek approached building it. Kind of good to hear that it was as unconventional as you would imagine a “tech startup” to be. Good read.

  • I have an Android phone so Apple Maps is a non-starter right now. But one thing that makes me consider Apple Maps is Google’s insistence of pushing bike and scooter shares when I ask for walking directions to somewhere. This just reeks of commercialism. Oh, and you can’t turn this “feature” off. 😒

  • John Gruber in his article about Llama 2:

    Second, I’m glad to see Facebook drop their awkward “LLaMA” letter-casing style.

    Reminds me of when I once worked at a company that sold a product called “Project MeNtOR”. The capitalisation was important: it was the only way in which the name could be trademarked. I didn’t have much to do with that product but I feel sorry for those that had to write the name in emails or marketing copy, or even the product itself (it was a delivery process, which means lots of binders with documentation). Hope they had a keyboard macro handy.

  • Closed my Plausible account and have gone all in with Tinylytics by Vincent. Not because Plausible was a bad service. Far from it. But Tinylytics gives me what I need, plus the additional good vibes of using something a fellow Micro.blogger built and released.

  • Nothing kills momentum on a task with a tight deadline quite like being ask to do admin stuff like “produce an estimate”. Now you’re scheduling meetings, going through tasks, setting story-points, etc. Argh! I mean, I understand why: we’ve all got someone to report to (unless you own the business). But all this effort sucks up the time that we could use to actually do the work.

  • Found some really nice things about Netlify today.

    I learnt that you can write server-side functions in Go. I knew that JavaScript functions were supported but I had no idea that Go was a possibility. This excites me as Go is my favourite backend language.

    From my testing it looks like the build will use a go.mod file for dependencies if one exists in the project root directory (i.e. the repository directory), so you can include third-party packages. Embeds also seem to work as well.

    The functions are executed using AWS Lambda. You can use aws-lambda-go-api-proxy if you prefer to use http.Handler from the standard library:

    func helloHandler(w http.ResponseWriter, r *http.Request) {
        w.WriteHeader(http.StatusOK)
        w.Write([]byte("Hello world"))
    }
    
    func main() {
        adapter := httpadapter.New(http.HandlerFunc(helloHandler))
        lambda.Start(adapter.ProxyWithContext)
    }
    

    I also learnt that you can protect individual sites with a password, so if I ever want to deploy something for myself, I don’t have to roll my own authentication. This is a paid feature, but you know what, Netlify has been pretty good at hosting my other sites for free it’s probably worth signing up for a pro account.

  • Thinking about Manton’s post about bookmark tags reminds me of a bit of UI I built for that admin tool I worked on way back when. It was in a section where the user would manage a set of file extensions associated with meteorology products1 that should be backed up for operational purposes.

    It looks something like this:

    Wireframe of dialog, with two fields. The top field a text field with the label file extensions, and the bottom three radio buttons: add to existing file extensions, remove from existing file extensions, and set to existing file extensions.

    It will appear when the user has selected a bunch of products from a list, and clicked a button labelled “File Extensions”. The user can enter as many file extensions in the text field as they wished, separated by commas. The operation radio button determines how these will be merged with the product’s original set of file extensions. They’d either be added to the set, removed from the set, or the set will be replaced with the extensions entered here. Pretty basic stuff.

    And yeah, it’s by no means a revolutionary bit of UI, and it didn’t do anything groundbreaking. In fact, I’m not sure if it was even used. I did write about it in the help docs, but who reads the manual anyway? 😉

    And yet, I remember being pretty glad after building this. I guess because the alternative would’ve been not to make it possible to manage file extensions in bulk at all. Working with software tools today where you can’t do anything in bulk drives me up the wall, and adding the ability to do so here felt like a bit of a statement.


    1. Examples of products included observations, forecasts, radar images, etc. ↩︎

  • Lava Stream

    Another random hack today, but this one sort of developed over the week. It all started last Monday. I was doing an exploratory task around single-sign on. I read Scripting News that morning, and I was thinking about the style of writing Dave Winer has adopted for his blog: short notes made across the day, sort of like a running commentary on what he’s working on and what his thinking. I wondered if this would work for my job: having a way to write your thoughts down, even if they’re rough, so you can build atop them. Continue reading →