Flights and accomodation for the Europe trip booked. It’s been hanging around my to-do list for the last two months. Good to finally check that off.
I suspect, in a world where companies are replacing staff with AIs, that the organisations that choose to keep the humans on will have the competitive advantage. You can’t form a connection with a machine.
New Stuff Setup Weekend
A bunch of new stuff I’ve bought has arrived recently and this is the weekend I finally get around to setting it up.
New Furniture
The largest one is a new couch. I’ve been sitting on a second-hand two seater that my parents gave me when I’ve moved out. It did the job but it was getting quite old and saggy, and I’ve been finding myself wanting to have something larger that I can lie across. So about six months ago, I bought a new couch. It was meant to come last December, but got delayed thanks to Covid-19 supply chain issues. But it finally arrived this Saturday.
But before it can be delivered, I had to prepare the way, as they said. I did that on Friday, moving the old couch around to make space for the new one and also taking the opportunity to clean up a little.

The placement of the old couch is a little awkward, but it will only be for about a week and a half before it leaves my house.
Delivery time was between 10 and 12 on Saturday morning, and it was near the end of the delivery window when the movers eventually arrived. There was some concerns about getting the couch through the door but they managed to do so by standing it up on its side and sliding it through.

The delivery went smoothly, but I wouldn’t call it a great “first launch” experience. Apparently it’s policy not to take all the packing material, which means it’s something I have to deal with. It’s not a huge problem, and it’s not the first time I had to get rid of waste over several weeks, but it did take the shine out of enjoying a new piece of furniture.


But that aside, it’s great having a new couch. One interesting thing about the long time gap from purchase and arrival is that I forget how it felt trying it out in the store. It’s firmer than I remember and the height of the seats are a little short. It’s feels like a whole new experience from scratch. But I expect I’ll get use to it over time. And it’s not like I didn’t realise these properties when I actually tried it out during the shopping phase.
All in all, I’m really happy with it.
New Electronic Devices
Today (Sunday) was all out electronic devices, starting with a new M2 Mac mini.

This will replace my 2018 Intel Mac mini, which will become a home server. This is actually the first Apple Silicon computer I own. I’ve been using a M1 MacBook Pro for work for a year and a half, and I’m reasonably confident that the M1 chips will handle the type of things I’d like to run.
Going through the setup was pretty seamless. I tend to start all new machines from scratch, meaning I don’t migrate anything over. Since the old Mac mini will be still around, I’ll move projects and documents over to the new Mac over time.
The one thing that didn’t work out as well as I expected was my USB audio interface. I’ve been using a Roland Quad-Capture as my audio interface and while I was getting ready to move to the M2 chip, I did a search to see whether Roland had drivers that worked with Apple Silicon. At the time I thought they did, but when I tried installing them they didn’t work at all. Another look today confirmed that there was no driver support the M2 chip.
This was a bit of a setback. I think next time I make sure to actually do a search for “thing M2 support” instead of just browse the driver download page and infer support for something when it doesn’t explicitly say “does not support M1 Macs”. It would also be helpful to remember that MacOS 10.X does not equal MacOS X. π€¦
Anyway I’ve got another audio interface on the way. It’s another Roland product, since I think something designed for music production means the device will be able to handle low latency audio. I also need something with MIDI since I do occasionally use it for music production. This new one uses the built-in MacOS audio drivers so hopefully I don’t need to worry about driver support going forward.
Apart from that, I’m still in the process of setting the Mac up. It always feels a little strange moving to a brand new machine. It’s like moving house or going to a holiday let: everything its new to you, you need to find out where things are, and none of your old things are there. But it’s also a good opportunity to form a few new habits. For example, I may try using Safari as my browser instead of Vivaldi, and start using Mac-Assed Mac Apps like NetNewsWire in lead of web-apps. I might be a little more judicious about keeping my Download folder cleen as well. I saw a cronjob that will remove things in that folder after a week. I’ll give this a try and see if a clean Downloads folder works for me.
The last bit of kit is a new Smart Keyboard Folio case for my iPad.

I finally bit the bullet and replaced my old keyboard folio with a new one. The keyboard was completely non functional in the end and the lining was starting to peel off, so it was probably time for a replacement anyway.

I’ve only tried the new one for a few minutes as I was looking up passwords and setup instructions for the new Mac. So far it’s working well. The only concern I have is that I’ll have to go through this again in three years time.
So that’s all the new stuff I got setup this weekend. Most of the setup will continue over the next few weeks, especially the new Mac, but I’m happy I got the most of it done.
Spotify Video Follow-up
Some follow-up from my post about Spotify videos. I looked into this a little and from what I understand they’re not full videos but “short looping video clips that play during certain songs,” at least according to this website.
So I guess my initial belief is incorrect. Spotify might have music videos (they’re a bunch of articles about them thinking about it in 2020-21) but this looks to be completely different.
Furthermore, you can turn them off. They’re called “Canvas Video Clips”, and if you go into the preferences of the Android mobile app, sure enough there’s a switch for them.

Not sure why I missed that when I was looking for that option earlier. I guess because I was looking for a preference with the name “video” in the label. But this switch seems to work and after I turned it off, this visuals stopped.
Still toying with the idea of cancelling my subscription for other reasons but at least this is one less concern I have for using the service.
I just realised thereβs a downside to cross-posting my Micro.blog posts to Mastodon: I canβt use hashtags ironically anymore. Not that Iβm in the habit of doing so, but the occasional one would be nice.
Hmm, how to adapt? Β£thinking
Toying with the idea of cancelling my Spotify subscription. There are a number of reasons for this, but one that really gets to me is the insistent need to show video when playing a song. And there’s no way to turn it off anywhere (I tried looking for one).
I listen to music when I’m walking or driving or doing something that needs my visual attention. But even if I am in a position to stare at my phone, I don’t want to be watching music videos. So why is my bandwidth being wasted streaming a video when an MP3 will do?
So obnoxious it borders on being offensive.
Trying out Keyboard Maestro to automate some niggly things I occasionally need to do. Got my first macro working, which converts a selected string FromCamelCase
to UPPER_SNAKE_CASE
.

So far I’m impressed. Looking forward to finding other things I can automate away with this.
I don’t know what I need to do to get Swift Packages working.
It never seems to work for me. The option to add dependencies are in the menu, but when I try to use them, they error out or cannot resolve the dependencies for some reason.
This is in addition to not being able to see or edit “Package.swift” as a text file, which I thought was the whole thing with this.
Is it the version of Xcode I’m using? Does it work for anyone outside of Apple? Libraries are being released with Swift Package support so it must work for someone.
Read my last post during lunch to see how well it read. Couldn’t get past the third paragraph without thinking: wow, this is really boring. Rewriting it helped a little, but it’s still rather dull. Maybe it’s the topic?
In either case, it’s something I need to work on. π§βπ»
On Higher Order Functions In Go
It’s a bit surprising that higher-order functions like map and filter have not caught on in Go.
They seemed to have caught on quickly when they were added to Java. One of the long standing issues back then was the clunky and verbose approach to writing closures. Java 8 fixed this with the introduction of the lambda (the ->
operator). Suddenly, what once took multiple lines of boilerplate could be done in a single expression. The underlying mechanism was still the same but the new syntax was enough to get people to use it (amongst other things, read on).
I don’t see that in Go. With generics in Go 1.18 reducing the need for interface{}
and type assertions, I would have expected the tide to turn a little: more maps and filter functions, and way less for
loops. But it hasn’t seem to happen yet. I still see those same for
loops that I’ve been seeing over the last eight years.
I’m not sure of the reason but I can guess I could be explained by two things.
The first is Go’s culture. And yeah, you could describe Go as having a culture1. It’s one that’s quite conservative and methodical. Fancy ways of doing things that sacrifice readability in favour of terseness is usually frowned upon. It’s proper to make sure the code is clear, even if it takes more room on the screen.
The culture comes through in the design of the Go language itself. A classic example is the use of the error
type rather than exceptions. And I think it partly explains why higher-order functions have not caught on. It’s not because you can’t do it. At least you had proper closures in the language, which is something you couldn’t say about Java, back in the pre-1.8 days.
But I don’t think culture is enough. You couldn’t say that using higher-order functions in Java 1.6 was a big thing back then either2. What got them moving so quickly?
This is where I think reason number two comes in, which is the lack of standard library support. When Java 8 came out, every collection type was retrofitted with a bunch of higher-order methods which made it trivial to map, filter or reduce anything you need. There was event a new streams package, allowing you to build pipelines that are nothing but higher-order methods. All of this was useful and fun to work with, and people naturally wanted to use them.
Nothing like this existed when Go 1.18 was release. Nothing like this is in the upcoming release of Go 1.20.
Now, to be fair, this is very characteristic of how Go maintainers add features. They take their time, making sure not to break backwards compatibility or locking themselves into a design that is difficult to evolve. And I understand the reasons for why they want to go slow here. But that means that an “official” package of higher-order functions will take time to be ready. And no such package exists now. Sure, there are open-source and experimental ones out there, but would you be using those for any production level code? Maybe adding one more for
isn’t exciting, but at least it doesn’t involve another dependency (and you’re already using for
loops in several of your other functions anyway).
So I guess I’ll need to wait a bit longer for higher-order functions to be more of a thing. I can’t say I’m not disappointed: one of nice things about working in a language like Ruby, JavaScript, or even Java itself, is all the higher-order functions they have. I’m still hopeful that they will come eventually. After all, generics are only a year old. And Go as a language may move slowly, but at least it’s still moving.
Spent the last week updating my travel blog a bit. Started writing about the the trips around the south pacific I took for work almost 10 years ago. I’ve been wanting to write about this for a while, before I forget most of it. I’m glad that I’ve finally got around to doing so.
A watched kettle never boils, and a watched clock will not get the train arriving sooner (sadly).
Making A Long Form Posts Category In Micro.blog
I use the Categories feature of Micro.blog to organise the types of posts I make on this site. One of the categories I have on this blog is called Long Form Posts, which I use to file all the posts I have that have titles. This is done automatically, such that I don’t have to think about adding a post to this category once I’ve written it1.
It’s a little hard to find the relevant features in Micro.blog to do this, but they’re there. Here’s how you can use them to make such a category on your Micro.blog blog.
Creating The Category

The first thing you need to do is create the category:
- Click “Categories” in the sidebar. You should be presented with a list of categories on your blog. You can add a new one by clicking “New Category”.
- Give your category a name. I chose the name “Long Form Posts” but it can be anything you want: Titled Posts, Essays, etc.
- Click “Create Category”.
The new category should show up in the list of categories on Micro.blog. You should also see the category appear on your blog as well. If you were go to the archive page, the list of categories should appear, along with all the posts on your blog. Clicking it will show only the posts that have that category.
The new category should also have an RSS feed, which you can use in any standard feed reader. You can get to it by clicking the category on your blog, and adding feed.xml
to the URL. For example: the URL https://lmika.org/categories/long-form-posts/feed.xml is the RSS feed of my Long Form Post category.
Creating The Filter

The Long Form Post category should exist now, but you may notice that it’s empty. At this point you need to manually add the Long Form Post category to each post you want in this category by selecting the checkbox in the Edit Post window. In you want Micro.blog to do this automatically for each category that has a title, you will need to create a Filter:
- Within the “Categories” section, click “Edit Filters”, then click “New Filter”.
- For a filter that will select all blog posts with a title; in the “Post length” picker, choose “Only long posts with a title”.
- Select the category you want these posts to have, then click “Add Filter”.
Now any post with a title will automatically be given the Long Form Post category. You can try this out by writing a post, giving a title, then saving it as a draft. When you go back to edit the post, the Long Form Post category checkbox should be checked.
Finally, to apply the new filter for any existing post, click “Run Filter”.
-
I haven’t managed to get automatic category selection working for blogging apps like MarsEdit. There might be a way to do this, but I haven’t really looked. ↩︎
I, Developer
There was a bit of a discussion on Mastodon and various blogs about how best to call someone who writes code for fun or profit. I’ll spare you the prologue of how this discussion that has been going on since the start of the profession itself: I’m sure you’ve heard it all before. But hearing one of these terms today got me thinking about this, and I thought I’d say what my preferences are.
As someone who writes software for my job and hobby, I personally prefer the term “developer”. I usually call myself a “developer” or “dev” when I’m around a group of my peers. When I’m with lay people, I usually say that I’m a “software developer” as people can associate a developer as one who’s involved with building houses (this has happened to me once). I don’t mind the term “coder” or “programmer” either, but I don’t feel like it fully describes what I actually do, given that about half my job involves things other than code (as much as I dislike that fact).
Officially my role is “engineer” but I don’t really care for the term. The reasons are the same as anyone else that’s got a problem with it, namely the fact that we’re not bound to the same level of accreditation that “real” engineers are (civil, electrical, etc.). But I think my dislike for it also has to do with the fact that the job of a “software engineer” usually involves more than just the “engineering” side of things. There’s design work, planning work, operations, etc. that feel beyond the scope of what could simply be called engineering. I guess one could say that an engineer is required to consider maintenance when they’re designing a structure or electrical circuit, but I feel like us software developers are more involved in the day-to-day operations of things than our “real” engineer counterparts. I could be completely wrong here though: I don’t know a thing about what “real” engineers really get up to, so I probably can’t say.
One term I’ve recently started hearing more is “individual contributor”, and I must say I don’t care for the term. It’s feels so abstract and wishy-washy; so divorced from the actual act of working with the code which, arguably, is a pretty important part of delivering value for a project. I don’t know how this term got so widespread. Maybe is a way of grouping all the activities involved in software development into one noun-phrase. I guess if I’m being charitable, I can see it that way. After all, the existing terms don’t really work as well for doing this (I’m guess that’s why the question was posted on Mastodon in the first place). And yet, I still get this feeling that the existence of this term is to deliberately reduce the importance of value these people deliver, as if we’re interchangeable cogs. It might just be where I see this term, so I could be completely unfair. But that’s how I feel, and it’s for that reason I don’t like using this term.
So that’s pretty much it. All in all I’m generally okay with being called what you’d want me to call, and I won’t call you out if you called me something else (except “Java monkey”, especially since I haven’t work in Java for a few years now). But if I had the choice: call me a “dev”, “developer” or “programmer”; try not to call me a “engineer”; and please don’t call me an “individual contributor”.
And please don’t call me at home. π
Pro tip: don’t have a sprint planning meeting with the hiccups. I’ve tried it today and it’s just didn’t work out.
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. It also tracks the winds of the players and the prevailing winds, which are mechanics that can affects how much a player can get during a round. The spreadsheet works quite well, but it does mean we need to keep a bulky laptop around whenever we play.
I wondered if the way we calculated and tracked the scores could be improved. I could do something like build a web-style scorecard, like I did for Finska, but it gets a little boring doing the same stuff you know how to do pretty well. No, if I wanted to do this, I wanted to push myself a little.
I was contemplating building something with an Arduino, maybe with a keypad and a LCD display mounted in a case of some sort. I’ve played around with LCD displays using an Arduino before so it wasn’t something that seemed too hard to do. I was concerned about how well I could achieved the fit and finished I wanted this to have to be usable. Ideally this would be something that I can give to others to use, not be something that would just be for me (where’s the fun in that?). Plus, I didn’t have the skills or the equipment to mount it nicely in an enclosed case that is somewhat portable. I started drawing up some designs for it, but it felt like something I wouldn’t actually attempt.

One day I was perusing the web when I came across the SMART Response XE. From what I gathered, it a device that was built for classrooms around the early 2010s. Thanks to the smartphone, it didn’t become super successful. But hobbyist have managed to get their hands on them and reprogram them to do their own thing. It’s battery powered, had a full QUERTY keyboard and LCD display, is well built since it was designed to be used by children at schools, and feels great in the hand. And since it has an Atmel microprobes, it can be reprogrammed using the Arduino toolchain. Such a device would be perfect for this sort of project.
I bought a couple, plus a small development adapter, and set about trying to build it. I’ll write about how I go about doing it here. As the whole “work journal” implies, this won’t be a nice consistent arc from the idea to the finished project. I’m still very much a novice when it comes to electronics, and there will be setbacks, false starts, and probably long periods where I do nothing. So strap in for a bit of bumping around in the dark.


First Connection Attempt
The way to reprogram the board is to open up the back and slot some pins through the holes just above the battery compartment. From my understanding, these holes expose contact pads on the actual device board that are essentially just an ISP programming interface. In theory, if you had an ISP programmer and a 6 pin adapter, you should be able to reprogram the board.

The first attempt of attempting to connect to the SMART Response XE was not as successful as I hoped. For one thing, the SRXE Development Adapter was unable to sit nicely within the board. This is not a huge issue in and of itself, but it did mean that in order to get any contact with the board, I would have to push down on the device with a fair bit of force. And those pogo pins are very fragile. I think I actually broke the tip of one of them, trying to use an elastic band and tape to keep the board onto the . I hope it does not render the board useless.
The other issue I had is that the arrangement of the 6 pin header on the developer board is incompatible with the pins of the ISP programmer itself. The pins on the ISP programmer are arranged to plugin directly to an Arduino, but on the development board, the pins are the the wrong way round. The left pin on both the male pin on the board and female socket from the IVR programmer are both Vcc, when in order to work, one of them will need to be a mirror image of the other. This means that there’s no way to for the two to connect such that they line up. If the pins on the SMART Response XE were on the back side of the board, I would be able to plug them in directly.
I eventually got some jumper wires to plug the ISP programmer into the correct pins. Pushing down on the board I saw the LEDs on the adapter light up, indicating activity. But when I tried to verify the connection using avrdude
, I got no response:
$ avrdude -c usbASP -p m128rfa1
avrdude: initialization failed, rc=-1
Double check the connection and try again, or use -F to override
this check.
avrdude done. Thank you.
So something was still wrong with the connection. It might have been that I’ve damaged one of the pins on the dev board while I was trying to push it down. I’m actually a little unhappy with how difficult it is to use the adapter to connect to the device, and I wondered if I could build one of my own.
Device Adapter Mk. 1
I set about trying just that. I wanted to be able to sit the device on top of it such that the contact points on the board itself will sit on the adapter. I was hoping to make the pins slightly longer than the height of the device such that when I rest it on the adapter, the device was slightly balanced on top of the pins and the board will make contact with gravity alone.
This meant that the pins had to be quite long and reasonably sturdy. Jaycar did not have any pogo pins of the length I needed (or of any length) so I wondered if the pins from a LED would work1. I bought a pack of them, plus a prototyping board, and set about building an adapter for myself. Here the design I came up with:

And here is the finished result:


And it’s a dud! The position of the header gets in the way of where the device lines up to rest on the pins. But by far the biggest issue is the pins themselves. I tried placing them in the holes and rested the circuit board on top with a small spacer while I was soldering them. The idea is that after removing the spacer the pins will be higher than the device. I was hoping to cut them down to size a little, but I cut them unevenly, which meant that some of the pins won’t make contact. When I try resting the device on the board I get no rocking, which means that I suspect none of the pins make contact. I’m still not happy with the LED pins either. They don’t seem strong enough to take the weight of the device without bending.
The best thing about it was the soldering, and that’s not great either. I’m not sure I’ll even try this adapter to see if it works.
Next Steps
Before I create a new adapter, I want to try to get avrdude
talking with the board first. I think what I’ll try next is resting some nails in the holes and attaching them to alligator clips hooked up to the ISP programmer. If this works, I see if I can set about building another board using the nails. I won’t use the header again as I think it will just get in the way. It might be enough to simply solder some hookup wires directly onto the prototyping board.
Anyway, more to come on this front.
Update 29 Oct 2023: I haven’t revisited this project since this post.
-
I couldn’t find any decent bridging wire at Jaycar either so I used reclaimed wire from a CAT-5 cable. I stripped the insulation completely, twirled the wires, and soldered them onto the contacts. It worked really well. ↩︎
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. It also helped that the laptop had a colour screen.
There were a lot of firsts associated with this OS. It was the first time using a graphical-based OS. I could do some pretty basic things in the DOS command line at the time, but being able to manipulate things on screen with a mouse was a much better experience. The OS had some pretty nice utilities that I grew to love, like a music app that let you compose monotonic songs by moving sliders that adjusted the pitch and duration of a note. It was my programming environment as well (QBasic, but it was still running on OS/2).
It was my first experience “shutting down” a computer. This was quite novel, and I remember wondering why it was necessary. The DOS computer you could just turn off, why couldn’t you do that here? I came to accept how important shutting down the computer first was, for no reason other than that not doing this would mean the next boot-up would run a file system check that would take several minutes. For someone who wanted to get to my DOS games as quickly as possible, learning this was important.
It was even the first time I saw someone surfing the web. On night I was watching dad using WebExplorer. I asked him what he was doing and he said that he was “using the web”. I had no idea what that meant, but I wondered if it had anything to do with a family friend that had the surname Webb. I still remember the loading animation of that browser: cubes flying by on the screen of the computer icon in the toolbar while the disk activity light flashed green.
When Windows 95 came around, we set it up with a dual boot system with OS/2. I remember at the time being reasonably unimpressed with Windows 95 and was more than happy to continue using OS/2, at least while we still had v2 installed. But eventually we got version 3 (OS/2 Warp) and it was around this time my love for it was starting to wane. DOS games were always a little incompatible on OS/21 but they eventually stopped running altogether, and I found myself booting into Windows a lot more often to play them. Eventually the day came when Dad bought home a laptop that only had Windows 95, and my OS/2 experience came to an end.
Anyway, it would be nice to pay around with OS/2 v2 again. Apparently OS/2 v2 is notoriously difficult to virtualise so I don’t know if that’s even possible. I found an emulator of OS/2 v1 that runs in the browser, and the GUIdebook has some fantastic screenshots of v2. I guess that will have to do for the moment to bring back the memories.
-
A great example of this was Commander Keen. There was something wrong in the logic that would keep text boxes on screen long enough to read them. They would fly by when running the game in OS/2 and I had to get good at hitting the Pause key if I wanted to read it. ↩︎