• Out walking my usual Sunday arvo. route. Perfect conditions for it as well.

  • Mahjong Score Card Device

    I’ve recently started playing Mahjong with my family. We’ve learnt how to play a couple of years ago and grown to like it a great deal. I’m not sure if you’re familiar with how the game is scored, and while it’s not complicated, there’s a lot of looking things up which can make scoring a little tedious. So my dad put together a Mahjong scoring tool in Excel. You enter what each player got at the end of a round — 2 exposed pungs of twos, 1 hidden kong of eights, and a pair of dragons, for example — and it will determine the scores of the round and add them to the running totals. Continue reading →

  • Tried doing some electronics this morning. Not much to show for it apart from some reading, designing, and driving to Jaycar to grab some components. This really is an activity where I’m still quite a novice.

  • OS/2 Dreaming

    I’ve been thinking of OS/2 recently. Yes, the ill fated OS that IBM built with Microsoft. Re-reading the Ars Technica write-up of it and listening to the Flashback episode again fills me with nostalgia. Truth is that a lot of my early experiences with computing began with OS/2. Dad was working somewhere that used it, and I had a chance to play with it whenever he bought his laptop home. We had a plain old DOS home computer as well but it wasn’t as powerful or exciting as the laptop as dad’s laptop. Continue reading →

  • Follow-up to my last post: you can turn off committing after conflict resolution in GoLand by clicking “Modify options” in the Merge dialog and selecting “Do not commit the merge result.” This should display the --no-commit flag.

    GoLand merge dialog with the no-commit option

    Ok, I admit it’s pretty close to how it works on the command line; although not when you have conflicts, and the only time I merge in GoLand instead of the command line is when I need to resolve conflicts (I prefer the diff/merge tools there). But to be fair to GoLand, it doesn’t know about my merging preferences.

  • I don’t understand code editors that think they know when to commit changes “better” than I do.

    GoLand is guilty of this. I just finished resolving merge conflicts, but instead of letting me make sure the resolved conflicts actually build and pass the test, GoLand just commits them as soon as I’ve finished picking the hunks I want to use. This means any fixes I need to make cannot go into the merge commit. That commit is now unstable.

    One could argue that this is the proper way to do things, that the merge commit should only contain conflict resolutions and nothing else. I don’t agree. I’m bound to make mistakes while resolving conflict, and I want to make sure what I’m committing is actually working code. It probably doesn’t matter in the grand scheme of things, and it wouldn’t be the first time I make a commit with dodgy code. But I’d like to reduce the number of times that happens if I possibly can.

    Besides, conflicts in Go imports or module versions I can usually fixed by running tools. I tend to resolve these conflicts quickly, expecting to get errors and duplicates that I can fix with a couple of commands (they usually need to be formatted anyway). I can’t do this if the code editor decides when to actually commit the changes.

    Stage the resolved conflicts all you like, but let me actually commit them when I say so.

  • This hollow is hot property at the moment. It was occupied by a couple of kookaburra chicks about a month ago. They’ve since flown the nest. Now a pair of rainbow lorikeets are interested in it.

    Two rainbow lorikeets outside a hollow in a gum tree
  • It kills me that Pinboard doesn’t automatically set the title of a bookmark if you add one without it. So easy to fetch the page and get it from there. It can be a setting if privacy/costs are a concern. But really, having this feature would be a massive usability improvement.

  • Premature abstraction is the root of unnecessary rework.

  • Might just have to accept that the way I manage links to posts of interest is not perfect. There might be some room for improvement — something that polls Pinboard occasionally and posts any new links from there somewhere — but a wholesale replacement is probably not a good idea.

  • A reminder to myself that the only way to get a blog post out there that you’re happy with is get a blog post out there that you’re not happy with. Classic case of learning by shipping. And I think you need to actually need see it all the way through to publishing it. I’m not convinced that you’ll get the full benefit if you just leave the post half-finished in your drafts folder.

  • A Rambling Thought About The App-Only Social Networks

    Re-reading this post got me wondering how much traction Hive and Post are getting from the Twitter exodus. I am aware that Hive had to deal with a vulnerability and had to shut down while they fixed it. I don’t know much about Post apart it being another VC backed social network. But unless you’re a gamer attracted to Hive, and… 🤷1 heading to Post, is there anyone else using them? Continue reading →

  • 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.