It’s been a rare (but not unprecedented) three coffee and one caffeinated tea kind of morning today. 😴

The cafe I go to has started playing music where I sit. I find music at a cafe distracting, mainly because I find myself paying attention to the music instead of what I was doing. Fortunately it’s music I don’t find appealing. But even so, bad music is still not no music.

I never considered myself someone who believed that Go must’ve had generics from the start. I appreciated that the designers added them to the language, but I though I’d could be just as effective writing Go code if they chose not to.

I don’t believe that anymore.

I’ve found generics in Go to be a major improvement to the language. It now means that I can now use higher order functions that operate on collections, like “map” or “filter”, in a more natural way. I got use to these functions while working in languages that had them (Python, Ruby, JavaScript, Java 1.8) and they’ve been so useful that I wished Go had them as well.

There was no technical reason for Go not to have these functions, but they would have had to use the interface{} type to be useful, meaning that there was no type safety built-in and your code would be littered with type assertions. This was such a turn-off that most of the time I didn’t bother with considering higher order functions, and just wrote a for loop by hand to convert types in one slice to types in another slice. Trivial to write, but just so boring.

Now with generics, these higher order functions can be made type safe, and there is no longer a need for type assertions to use them. These made them viable once more, and I’ve found myself using them a fair bit recently. Not having to write yet another for lop has made coding fun again.

🔗 The Magic of Small Databases

I kinda want this but for internal databases. There’ve been several times at work where I’ve had to collect semi-structured information in a spreadsheet or a wiki page comprised solely of tables. There’s always some loosely defined convention around how to represent it (use this colour to indicate this particular state) or when it should be changed (change this label to “In Review” until these people have seen it and then change it to “Confirmed”).

One example is how we manage releases: which services we’re pushing out and what commits they are, which environments it’s been deployed to or tested in, whether the other teams or the person on-call are aware of it and have signed off, etc. This is all managed in wiki pages that follow a standard layout, and it’s… okay. It was a convention that has grown out over time as we were working out our release procedure. And it made sense keeping it relatively informal as we were trying to work out our groove. But that groove has been formed now, and it would be nice to formalise the process. But doing so means that there’s a lot of manual labour keeping these release documents correct and up to date. And since it’s all in a centrally managed wiki, it’s difficult to automate away things that are managed by other systems like our code repositories.

A tool that can be hosted on-prem which will allow anyone to spin up a new document-base database (either for the team or themselves), define a very loose schema and some views, and put a very simple workflows and code macros would be great. The trick is trying to walk the line that separates something that basically is like a hosted version of Excel verses something that will require so much setup work that no-one will bother with it. I’d imagine that’s a tricky balancing act to follow.

Saw the following quote while reading this article:

You could fill a book with all I know, but with all I don’t know, you could fill a library.

— Unknown

Quite profound.

It’s 2023 now and podcasts are still saying that I should Google so-and-so to see an article they’re citing, instead of just putting a link in the show-notes. I understand that this is mainly because Apple’s podcasting app doesn’t support HTML with links. Maybe once they’ve stopped burning money on their podcast subscription play that seems to be going nowhere, they can take a look at fixing this. We’ve got linking technology now; we shouldn’t be afraid to use it.

On a train now peeking at someone’s laptop. His desktop is completely covered in document icons. And I mean completely, as in there’s no room for any more.

I’ve never seen this before. It’s both amazing and shocking at the same time.

Busses should use the tram lines more. I remember being taught that if a bus was driving on a tram line, it must be treated like a tram. This gives them dedicated lanes and certain priorities over cars. Don’t know why busses don’t do this.

Passing by the Vegemite factory on the way to work. You usually get a whiff of its signature smell when you walk by, but today it was particularly strong.

Corner of the Vegemite factory

Ah, my Smart Response XE developer kit has arrived. Time for a new project.

Smart Response XE handheld device, and headers and leads to connect it to a computer

Achievement unlocked: first spam email offering to identify and fix vulnerabilities in one of my GitHub projects (it’s open source: if there are any vulnerabilities, just raise a PR).

I hate the term “business logic.” Is there a better noun-phrase for things the software is meant to do that doesn’t sound corporatey? I guess “user flow” or “user experience” could work, but not everything I deal with involves the user directly.

Currently reading: Temeraire by Naomi Novik 📚

About half way through the first chapter but already very captivating. Started strong right out of the gate. HT to pluralistic.net, where it was highly recommended.

On the subject of birds, I was looking at my status.lol statuses this morning. There are only a handful on there but I saw these two and it made me smile. I obviously posted them while I was looking after my sisters cockatiels last November.

Two status.lol statuses made 2 months ago: one saying 'Can't work, Too many parrots on hand (1, which is > 0)’ and the other saying ‘Ok, parrots off hand. Back to work’“></p>

    </p>
	</section>
	<footer class=

Putting up a new print today.

Framed print of an Eastern Rosella

Original is by a local artist, although I didn’t get their name.

My 2023 Word

I think I’ve settled on my 2023 word of the year: generous. Specifically (although not exclusively) generous in the projects I work on. I’m always working on some form of software in my spare time, but most of the time I keep this software just for myself. I want to do less of this, and start sharing it with others. You could say that I want to get better at shipping, but shipping to me is making the software usable for what it’s designed for, and for many of the projects I build, it’s only designed for me and my needs. Shipping’s for myself is no longer enough, I want to start shipping for others.

This word ties in nicely with the words over the last couple of years. Last year my word was finishing: following through on delivering something that goes beyond just the merely usable. The year before it was sharing: not being afraid to talk about it. Both of these desired qualities are still a work in progress, but I feel like I’m getting better at these. But the focus has been on solving my own needs. I think now’s the time to start looking at the needs of others.

Like last year, this word is not one from Nicholas Bate’s list of words, although if it were to be closest to anything, it will probably be entrepreneur. In fact, my 2023 word was originally going to be entrepreneur, but I wasn’t fully onboard with this. Someone approaches me and says “I want to be an entrepreneur,” I immediately think that person wants to start a business, get VC funding, go for growth, etc. and that’s not something I’d like to do at this stage (maybe at any stage, but I don’t want to speak for future me). And maybe those feelings are unfair. Maybe a better way to look at it is thinking of terms of entrepreneur as someone who solves the problems of others. You read the works of Seth Goden or Nicholas Bates and you’re more likely to associate those qualities with that word.

But, whatever. I’ll start with generous for the moment and we’ll see how we go.

The word 'generous' at the bottom of an Android lock screen

Updates To My Online Presence

Making some changes to my online presence.

The first is moving my knowledge base site from a set of HTML pages generated from a bespoke tool to one managed by Hugo. I wrote about that already so there’s nothing new to report here, apart from changing the domain name: I guess I finally fell out of love for “tecknow.space”. The new domain is simply technote.wiki. I originally wanted “technotes.wiki” — note the S — but I ran into a few problems trying to set this up in Netlify. While waiting for help on this, I gradually grew to like “technote.wiki” as a domain: not only does it contain notes about technology and development, it alludes to the phrase “take note”, which I find cute (although part of me is wondering if it’s time to stop looking for “cute” domain names).

I also tried setting up a site to track Go packages I find useful, or may find useful in the future. This was only up for about a day, mainly because I fell into the same trap as I did before. I went down the bespoke tool path again, building a web-app that will read these packages from an OPML file and produce a single page site that will present them as cards. It was mildly interesting working on this but as soon as I put it up, I felt nothing. No real sense of accomplishment or feeling that I’ve delivered value to others or myself. Worst than that, I couldn’t find a way to write about it without feeling like I’ve just wasted my time. In hindsight I probably should have taken that “mild interest” during development as the escape from boredom that it was. I guess I can count myself lucky that it was only a few hours, and not being able to write about it was good sign that I’ve made a mistake of sorts. All this building just for myself is something I’ll probably write more about in day or so.

Anyway, those packages are now on the knowledge base site as well. Not as cards at the moment: just a plain old table. But the foundations are there, and I’m getting quite comfortable in using Hugo to do all this now, meaning that there are even fewer reasons to build something bespoke for static web pages.

Another thing I’ve been doing online is putting together a travel blog. I’ve been debating with myself on how best to write in detail about the trips I’ve taken in the past. I wasn’t comfortable posting them here. This blog is more for the up-to-the-minute events that are happening, and many of the trips I hope to write about happened a long while ago. I guess I could’ve written something like “nine years ago, I went to…”, but then should the date stamp be today, or the date of the trip? If it should be the date of the trip, why would I say “nine years ago?” Better to just keep them separate, at least for the moment.

Anyway, I’ve published the blog, which I’ve called Untraveller. There’s only one trip on there at the moment: my recent trip to Las Vegas. I’ll be adding more over time. It’s also built as a Hugo site hosted in Netlify. The pictures are hosted in R2, Cloudflares new object store. This is my first use of this, and so far it’s been fine. Serving the images are a little slow: maybe I should stick a CDN in-front of them.

These updates have now been reflected in my omg.lol page as well.

Discovered that the cafe I go to offers raisin toast. It’s too early for hot cross buns but the last couple of days have been relatively cool and my autumn dietary cravings kicked in a little early (it’ll warm up again in about a week so we’ll see how long they actually last).

Might be time for a new, larger monitor. The one I’m using now, a 12 year old Samsung SyncMaster P2250, has worked well for me (apart from turning itself on during the night for no particular reason). But it felt really cramped working on it yesterday, and not for the first time.

I’m cautiously optimistic that upgrading my iPad to iPadOS 16.2 has fixed the keyboard issue I’ve been experiencing. It’s been two days and I haven’t needed to reconnect the keyboard or restart the iPad. Hoping it was just a software problem all along.

Update: Ok, I may have spoken too soon. It started flaking out again during lunch. Slightly better than it was a few days ago, but still problematic.

🎙 Really Specific Stories: John Siracusa

As an avid fan of all of John’s podcasts, I’ve been looking forward to this episode of Really Specific Stories for a while. I’m please to say that @martinfeld does not disappoint. A fantastic listen.

I wonder if finding anything related to Kubernetes sidecars, cluster configuration, or tools boring or unnecessary is a career limiting move.

Update: After spending a bit more time thinking about this, I’m wondering if the reasons why things like this get so complicated is a mixture of:

  • Larger teams getting split into smaller ones, and needing a way for them to work more or less independently without stepping on each other’s toes,
  • Leaning towards the security side on the security vs. convenience (or rather simplicity) continuum,
  • Saying “It’s what Google/Amazon/Spotify/whoever does” without taking into account that they’re got 100x more developers and 10,000,000x more users than we do.

And this complexity tends to cascade onto itself: throwing one more tool in means that we need to secure it, which means more configuration, which means that we need a tool to manage that, which adds more security, and on and on it goes.

This is not helped by people always looking out for the new and shiny. It might be because I’m getting old and cynical but that appeal is wearing off on me.

And yeah, people could make the argument for why we need each one of these. It’s the classic “the road to hell is paved with good intentions” situation here.

Feature for web-browsers: a keyboard shortcut to go to the last tab that had input focus. Would be useful when you find yourself switching through tabs to look something up, like a link, while at the same time drafting an answer that will make use of it in another tab.

Spent 15 minutes going through newsletters looking for a Go package I wanted to use. I really need a proper system to track these package of interest. Maybe I should use one of the 10 different systems I’ve thought of to do just that.

P.S. Feedbin’s search works pretty well.

This Coulda Been A Podcast

Started listening to a “podcast” published as a YouTube video.

I don’t like that this is how people choose to publish their shows. I can understand why that do, since people now use YouTube just to listen to music and other audio content. But for a podcast, the presence of video suggests to me that this is something that I need to actually watch. That simply listening to the audio while letting it play in another tab is not the best way to consume it, lest I miss something visual.

Well, I’ll listen to this podcast with the video on, but if it’s effectively just two people in a room talking into mics, I’ll be a little unhappy.

Update: After listening to it: yeah, the video was unnecessary. I mean it was shot really well. Set was nice, as was the choice of doing it in black and white. Lots of cameras on slow dollies, and cameras filming cameras filming the conversation, along with the regular shot reverse-shot of an interview. But really, it coulda just been a podcast.