That Which Didn't Make The Cut

I did a bit of a clean-up of my projects folder yesterday, clearing out all the ideas that never made it off the ground. I’d figured it’d be good to write a few words about each one before erasing them from my hard drive for good.

I suppose the healthiest thing to do would be to just let them go. But what can I say? Should a time come in the future where I wish to revisit them, it’d be better to have something written down than not. It wouldn’t be the first time I wished this was so.

Anyway, here are the ones that were removed today. I don’t have dates of when these were made or abandoned, but it’s likely somewhere between 2022 and 2024.

Interlaced

This was an idea for a YouTube client1 that would’ve used YouTube’s RSS feeds to track subscriptions. The idea came about during a time when I got frustrated with YouTube’s ads. I think it was an election year and I was seeing some distasteful political ads that really turned me off. This would’ve been a mobile app, most likely built using Flutter, and possibly with a server component to get this working with Chromecast, although I had no idea how that would work.

This never got beyond the UI mock-up stage, mainly because the prospect of working on something this large seemed daunting. Probably just as well, as YouTube solved the ads problem for me, with the release of YouTube Premium.

Auto-generated description: A smartphone interface mockup displays a channels list with annotations highlighting features like a navigation tab, subscription indicators, filter options, and a Chromecast button.

Red Crest

I thought I could build my own blogging engine and this is probably the closest I got (well, in recent years). This project began as an alternative frontend for Dave Winer’s Drummer, rendering posts that would be saved in OPML. But it eventually grew into something of it’s own with the introduction of authoring features.

I got pretty far on that front, allowing draft posts and possibly even scheduled posts (or at least the mechanics for scheduled posts). One feature I did like was the ability to make private posts. These would be interleaved with the public ones once I logged in, giving me something of a hybrid between a blogging CMS and a private journal. It was also possible to get these posts via a private RSS feed. I haven’t really seen a CMS do something quite like this. I know of some that allow posts to be visible to certain cohorts of readers, but nothing for just the blog author.

In the end, it all got a bit much. I started preparing the screen for uploading and managing media, I decided it wasn’t worth the effort. After all, there were so many other blogging CMS’s already out there that did 90% of what I wanted.

Reno

As in “Renovation”. Not much to say about this one, other than it being an attempt to make a Pipe Dreams clone. I think I was exploring a Go-based game library and I wanted to build something relatively simple. This didn’t really go any further that what you see here.

Auto-generated description: A grid of dark squares is displayed on a computer screen, with one square featuring two horizontal white lines.
Auto-generated description: A grid of interconnected circuit-like lines on a dark background.
Tileset free for anyone who wants it.

SLog

Short for “Structured Log”. This was a tool for reading JSON log messages, like the ones produce by zerolog. It’s always difficult to read these in a regular text editor, and to be able to list them in a table made sense to me. This one was built for the terminal but I did make a few other attempts building something for this; one using a web-based GUI tool, and another as a native MacOS app. None of these went very far β€” turns out there’s a lot of tedious code involved β€” but this version was probably the furthest along before I stopped work.

Despite appearing on this list, I think I’ll keep this one around. The coding might be tedious, but I still have need something like this, and spending the time to build this properly might be worth it one day.

Auto-generated description: A terminal window displays log messages with levels and a table summarizing error, ID, level, message, and time values.

Miscellany

Here are all the others that didn’t even get to the point that warranted a screenshot or a paragraph of text:

  • s3-browse: a TUI tool for browsing S3 buckets. This didn’t go beyond simply listing the files of a directory.
  • scorepeer: An attempt to make a collection of online score-cards much like the Finska one I built.
  • withenv: Preconfigure the environment for a command with the values of an .env file (there must be something out there that does this already).
  • About 3 aborted attempts to make a wiki-style site using Hugo (one called “Techknow Space” which I though was pretty cleaver).

I’m sure there’ll be more projects down the line that would receive the same treatment as these, so expect similar posts in the future.


  1. Or possibly a Peertube client. ↩︎

I’m happy that Ludo Studio managed to secure a deal for a feature-length Bluey film, plus attractions in Disney parks. But it’s just another example of how the ABC cannot keep nice things. It happened to Kath and Kim too.

Maybe it’s enough that it’s role is more of a launch pad for good media.

Eternal Comeng.

A utility pole is adorned with various stickers, including a red and white sticker of a train.

Oof! Almost deleted my Obsidian notes while cleaning out my work laptop. Fortunately it was a simple move to recover. Ended the year with 581 notes, totalling 8.7 MB. Most of these are Daily Notes, of which 214 were created this year. Thus ends the second full year of using Obsidian for work.

Counting down the hours now. 3 to go…

Writing documentation for tools that others will need to run over the Christmas break. I remain convinced that documentation is a great way to spot the usability flaws in the tools I write. The question then turns into one of priorities: should I fix the tool, or just explain the flaws in the docs?

I’m not a fan of the changes Google made to their Weather app. It assumes you’re interested in saving every location you search for as a favourite, which is not how I use search. And horizontal scrolling for the 10 day forecast? With no date?

A 10-day weather forecast shows a mix of sunny and rainy days, with temperatures ranging from 13Β°C to 34Β°C.

No, sorry. This is a step backwards in design.

Spending the last few days of the year feeding the dragon. My instructions are clear: I must feed the dragon. The dragon must be fed. At no point should I allow the dragon to go hungry.

(“Dragon” here refers to the system I’m running migrations on, a.la. this Rec Diffs episode)

For @vincent.

A small decorated Christmas tree stands in a living room near a window with sheer curtains.

Lot of interesting thing scheduled for Go 1.24, but this one looks particularly exciting:

The new Text function can be used to generate cryptographically secure random text strings.

You’d be surprised how often I need to generate random strings. Doing so, without installing a third-party package, is always a bit involved; either generating a UUID and stripping the dashes, or doing a Base64 on a random byte slice. To be given a function to do this from the standard library will be most welcome.

If there’s one thing I learnt from all the database querying I’ve been doing today, it’s that all the parallelism in the world doesn’t come close to performing as well as just being physically close to the data.

Exploring Godot to see if I could use it to make a card game. I got this far:

Auto-generated description: A computer window titled SolitaireGolf (DEBUG) is displayed with a blank dark screen.

Yep, I’m on a roll. πŸ˜„

Might need to work through a couple Godot tutorials first, just so that I understand the basics.

To remember for next time I open-source a package: the README should have an example on how the package works front and centre. It doesn’t have to be a large, and probably shouldn’t be complicated, but it should show your package doing something useful.

Installation instructions are helpful, but unless they differ from every other package for a language or framework, they’re not super necessary. Your users can probably guess as to how to install your package if they’ve done it before.

But they’ll have no idea how to use your package. What do you need to do to initialise it? What are the major types and methods? What’s the minimum you need to do to get something working?

An example demonstrating these should give enough information about how the package work and how it’s structured. At the very least it will show what the more important types and attributes are, so the user can use that as a launching place while browsing the documentation. But sometimes, if it’s a client for something that the user knows what to expect, a user could probably gauge enough about how it works from the example itself.

So, examples. Have them. Front and centre.

I wonder if a source of my distraction is thinking I can context switch while waiting for something to finish, like a build or a deploy. What actually happens is that I focus on the new task, and completely forget to monitor the thing that needs to finish. This wouldn’t be a problem if it were just me, but more often than not, I need to notify a coworker that the build is ready, so they can test it. I eventually remember to do this, but it’s usually after a longer delay than it would’ve been if I had just waited. And it means my focus is pulled from the new task, resulting in another context switch.

It might be worth trying to avoid context switching altogether, and just wait for things to finish. It does mean more time sitting around monitoring things, but I wonder if it would be faster in the long run.

Finished Mind Over Magnet. It’s been a joy watching this come together over at GMTK, and it’s wonderful to see it finally released. Such a fun and delightful game. Two thumbs up: πŸ‘πŸ‘

Might need to move off Spotlight as a launcher. Since upgrading to Sequoia, Spotlight has had trouble indexing the applications I use, blunting it’s usefulness as an application launcher.

So I guess I’ll need to investigate an alternative. Might give Raycast a try.

Gonna complain about the weather for a minute. Meant to be very hot today: 41Β°C. So despite how awful the weather will be, you try to make the most of it and get your washing done. But does the weather co-operate? Well the band of rain wetting the doona I just put out is not. Frickin' weather!

I occasionally dip into the Bluesky Discover feed, usually when I’m up to speed with RSS and Mastodon. It doesn’t take long for my hackles to be raised. A lot of discussion about US politics over there. I suppose I could shape it by following people but I’m not sure I’d like to spend the time.

Tried logging into Steam for the first time in years. Couldn’t recover my existing account. Gave up after 5 CAPTCHA attempts and 2 SMS messages and just created a new one.

I’ve also come around to the idea that user names must die. At this point all the decent login names β€” including my old one β€” have been taken, and you’re left with one, with numbers or dashes. Ugh! Let’s just settle on email addresses.

Two weeks ago, I tried that GenChess thing that Google Labs released. When prompted, I asked for a chess set to be made with pieces resembling Australian birds. What it produced was a little underwhelming, but I was curious to know what Gemini itself could produce when prompted for a single piece: an image of a pawn shaped like a cockatiel.

Here’s the prompt:

Please generate a photo realistic image of a 3D pawn chess piece which looks like a cockatiel. The piece must look like it is made with wood. The image must be generated with a white background and with a parallel projection.

And here’s the result:

An AI image, generated by Google Gemini, of a wooden cockatiel perched on the base of a chess piece

Not bad. Certainly better than what I could produce. And it’d be fun playing with such a set should one actually existed1.

It got me thinking as to what birds I’d choose if such a chess set were made in real life. My current idea is cockatiels as pawns, emus for kings (large and mobile, and important enough for such a role) and maybe cassowary as queens (also large and mobile, and actually quite dangerous in real life). I haven’t got positions for the other roles just yet.


  1. Might be that such a set does. I haven’t actually looked. ↩︎