Working with some GitHub access tokens last night left me wondering why there’s no way to just renew an expired token. Dealing with the secret is not as tedious as dealing with the token permissions. Get that wrong and you’ve wasted several minutes of work.

It’s 2023 now, and I still hate code reviews.

Seeing Mastodon posts from Jason Snell about his trip to Aotearoa New Zealand prompted me to check when I travelled to Queenstown for a holiday. It was 10 years ago to the day: 7th March 2013. Would love to go back there again some day.

Follow-up from my earlier post about ChatGTP this morning, it turns out I probably should’ve RTFM:

ChatGTP welcome screen, with the limitation 'Limited knowledge of world and events after 2021' circled in red

Thanks to for the tip.

Oh, AWS. Once again your brilliant UX design chops shine through in the products you release. I always wondered why copying an API keys from an SSO login session took just one click. It’s great that it now takes two, plus a whole lot more reading of small text. 😒

Remember in Gödel, Escher, Bach when they were saying that a (then) theoretical AI is less like a calculator and more akin to the human mind; and just like the human mind is likely to produce errors in the answers it gives? Well…

ChatGTP session where MacOS Big Sur was given as the answer to what the latest version of MacOS was

For reference, macOS Ventura is the current latest release.

Update: Turn’s out the reason for this is that ChatGTP’s data-set only goes back to Nov 2021. See follow-up post.

I wish more app developers built websites for their apps.

There are many benefits in doing so. It’ll allow others to see what the app does without getting kicked out of the browser and shoved to an app store, or when they’re using a device that can’t even access the app store.

It’ll also give others a nice URL that can be linked to or bookmarked. I’m sure App Store URLs are stable, but I wouldn’t call them “nice”. Not much meaning in a URL like

I can appreciate that this is asking a fair bit. And I get it: after making websites for a few open-source projects, I know how painful and time consuming they can be to put together.

But I think there’s still value in having a simple, single page website for an app, especially when it’s gained enough traction that people are writing about it. It doesn’t even need to be a standalone site, a blog post would be just as good. But something more than just a listing on the App Store.

Evidence that I didn’t sleep well last night: for a split second I thought this was actually a note I made. I even remarked as to how neat I made it.

Screenshot of Obsidian showing Release Notes

The neatness is what eventually tipped me off. None of my notes look as good.

A lot of track work going on this weekend. I enjoy seeing these trucks that can go both on roads and rails. You don’t want to be waiting for them to transition, though. It’s usually done at level crossings and they don’t rush it.

Truck on rail tracks at a station with workers.

To Wordpress Or Not To Wordpress

I’m facing a bit of a dilemma.

I’ve been asked to setup a new website for someone who wants to stand up a new business. In therory this is something that I can do quite easily. I know HTML and CSS. I’ve made a living building backends for web-apps. I do have an undeveloped eye for design, but I like to think I have an idea of the principal of good website usability; and as long as I’m not too ambitious, and aim for a minimal usable site, I can probably put together a simple static website.

The only problem is that this may not work for the person that I’m building a site for. This is someone that has no experience with putting together websites, and if I were to go down the static HTML road, I’d probably be on the hook to make changes going forward.

So the alternative is to use a CRM like Wordpress. That way, once I hand ownership of the site to the client, he could either contract someone else to maintain it going forward or even learn to do it himself.

Only problem with that is that my experience with Wordpress is quite minimal. I can get around the dashboard no problem, but when it comes to designing or customising themes or (sigh) using the Block editor, I’m just as much as a novice as he is. And I’m not sure to what degree I can leverage my HTML and CSS skills to style the site. I may be able to change a few things but I’d have to do so within the confines of the block templating system.

So, what to do?

Maybe the best way forward is to get a sense of how often this person would need the site changed. That’s by far the biggest variable here. I only know what he wants at a very superficial sense at this moment. I don’t believe it’ll need any sort of blog or product catalogue; just a simple landing page with contact details.

In that case, I’m wondering if a static site with just plain HTML and CSS would be enough. That’ll be easy enough to put together. It can probably scale with some basic dynamic aspects as well, maybe powered with a simple backend that can regenerate the site. Maybe something like Carrd could work here as well.

But the danger is that he’ll be locked into using a static site. Any changes would require someone who’s versed in HTML and CSS. Even worse would be a static site with a bit of backend “sprinkled in”. Then he’d be locked into using me. Not sure I like that for his sake or for mine. You read about those developers in The Daily WTF who’ve put together a custom backend for a “simple website” that has grown unwieldily and become a huge mess that someone who inherits it needs to cleanup or take responsibility for. The prospect of being such a developer is not a great one.

Which is why I’m looking at Wordpress, and wondering the pain of learning how to work with it is worth it. I guess it’s offsetting the potential future pain (and embarrassment) of transitioning a static site to a proper CRM later.

So, Leon, which pain is worse?

Ok, I now understand why everyone is going on about the Wordpress block editor. I’ve installed Wordpress this morning to play around with it in preparation of a new project, and wow is there a lerning curve associated with it. Definitely not your dad’s Wordpress instance.

Here’s something I’d never would have imagined: Jaycar does same day delivery. I experienced this once before but I dismissed it as just a fluke. But it happened again today. I bought something from them at 1:14 this afternoon and it arrived at my house at 3:26. Incredible.

It sometimes sucks being a listener of Apple tech podcasts when you’ve got an Android phone. I love the shows where an indie dev talks about an app they’ve worked on. But I can never try them out because I don’t have an iPhone.

I know there are fixes to this. Just not ready to apply them yet.

Foldables and rollables are so 2022. Where are the scrunchables? When I’m done with my phone, I want to be able to scrunch it up into a little ball and stuff it in my pocket. Why can’t I do that? Where is the R&D money going?

(Honestly, the whole foldable phone thing seems kinda ridiculous to me).

I was listening to an episode of Sharp Tech the other day. When the conversation moved on to AI and Ben Thompson’s experience with Sydney, an idea for a game came to me.

It’ll essentially be a text adventure, but the goal is to try to get a GPT AI to play it. The AI would give you a description of what it “sees” on their screen, and you have to tell it how to proceed. You can’t enter the commands yourself. Except, you have to use natural language to guide the AI through the game.

Maybe in the harder difficulty levels the AI could disagree with you and you’ll need to convince it to do what you say. Or maybe it’ll give you partial information about what it “sees”. It can say that it sees a castle, but doesn’t explain that there’s a gate-house as well, and you have to tease this information out of it in order to move forward.

This sort of harkens back to the time when you’re playing a game for the first time with someone that’s experienced, and they’re telling you what to do1. Here, you’re that experienced player giving assistance, even though you’ve never played the game yourself.

Anyway, free idea for anyone who wants it.

  1. Or maybe those times when you’re trying to give tech support over the phone. Those are fun, right? Well, what better way to spend your downtime than playing a simulation of that. 😛 [return]

For anyone working with YAML Cloud Formation, if you were to see this error message:

E0001 Error transforming template: 'NoneType' object has no attribute 'get'

it might be because one of your resources is not properly indented. That is, the Type and Properties keyword is at the same indentation level as the resource name:

  # Broken
  Type: AWS::SQS::Queue
    # ...

  # Fixed
    Type: AWS::SQS::Queue
      # ...

Another problem is that you’re trying to use !GetAtt with a string parameter:

    Type: String

    Type: AWS::Lambda::EventSourceMapping
      # This is the source of your woes 
      EventSourceArn: !GetAtt DynamoDBStream.StreamArn

Took a while for me to find the cause of these. Had to comment out all the resources and uncomment them back one by one. In retrospect, a quick glance at the entire file would’ve found it as well; although the slow act of going through the file, commenting and uncommenting things, was still a useful act in and of itself.

Naturally the error message is cryptic, probably because it falls within the gap of a well-formed YAML file but a badly formed object model. Some better error reporting would be preferred though.

And yeah, there’s going to be commentary about error reporting in these posts. 😛

Quotes Around Names In Error Messages

I saw this error a few minutes ago:

failed to process input: RUNTIME ERROR: function has no parameter stack

This threw me for a minute as I was trying to work out which parameter stack went missing, what I did to cause it to go missing, and what the heck a parameter stack actually is anyway.

But it had nothing to do with any sort of stack. The error message was showing up because a function call was expecting a parameter with name “stack” which was missing from the function definition.

This is why I always like putting quotes around names in logs or error messages. It removes any ambiguity about what the message is referring to. If the message was:

failed to process input: RUNTIME ERROR: function has no parameter "stack"

then you’re more likely to infer that the thing missing was a parameter with the name stack.

Consider doing this in the error messages you write.

Interesting feeling I had just now. I was drafting a reply in which I chose not to post. And yet, it feels like I’ve posted it. Wonder if that falls into the same sort of fallacy as the one where talking about what you’ll do feels like you’ve actually done it. 🤔

A park I frequently go to once had a non-directional beacon transmitter built there. Being somewhat interested in things like this, I always enjoyed looking at it as I walked by. It was decommissioned in early 2020 and now there’s no trace of it ever being there. I kinda wish I had a photo of it.

Web Search Works With Blogs Too

Here’s one more reason to write (or syndicate) to your blog instead of post directly to social media: you can use web search engines to find what you need.

I hear a lot of people complain about the crappy search in Twitter or the lack of search in Mastodon, but this won’t be a problem if you post to your site and let public search engines crawl it. They’re incentivised to make sure their search is good, so you’re more likely to get better results more quickly.

Honestly, it works. I used it today to find a post from a fellow Micro.blogger that I wanted to reread. A site:<url> query with a few keywords. Found it in 5 seconds. I can’t imagine how long it would’ve taken if I had to track it down in Mastodon.

Obviously this won’t work for posts from others, unless they too write to their blog. But it’s probably still worth doing for others that enjoy your work. And who knows? It might be useful to yourself one day. I know it has been for me.

Some acorns fell to the ground while I was passing under an oak tree this afternoon. I looked up and saw a few female king parrot perched there, feeding on the acorns.

Female king parrot in an oak tree

Female king parrot reaching to an acorn in an oak tree

It was difficult making them out: their green plumage provided good camouflage.

TIL that long-clicking some toolbar icons in desktop Safari will bring up a menu. I would’ve though a right-mouse click would suffice for that, but I guess touchpads and traditional Mac mice only have a single button. I just wish I could make the long-click delay a bit longer.

Setting up Yarn on a new machine to manage some JS packages. As usual, everything about how the tool works is completely different from the last time I installed it. So, once again, what was expected to take 5 minutes is now taking 30 as I learn the new way of doing things. 😩

Close encounter with a kookaburra.

Kookaburra perched on a signpost saying Grassland Tk near a forest.

Taken a few days ago while on a walk.

I don’t understand people — adults who are by themselves — who go to a cafe just to watch something on their phone with the load speaker. A bit discourteous in my opinion. Please use headphones if you got them. Otherwise, watch it at home. That way you won’t distracting others.