Long Form Posts

    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?

    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.

    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.

    Less Consuming, More Creating

    Mike Crittenden posted a good quote from a random Hacker News commenter:

    Less consuming, more creating.
    Doesn’t matter what it is, doesn’t matter if it’s bad.

    This quote actually sums up this blog quite nicely. The first line explains why it came to exist. The second line describes how it continues to exist.

    Happy 1,000th post.

    Ballarat Beer Festival 2023

    My friends and I returned to Ballarat today for the Beer Festival. It was another stunning day for it: sunny, mild, not too hot. Much like last year I took an earlier train to walk around Ballarat a little. Not much to report here: very little has changed. But I never see Ballarat so it’s good to walk around a little. My friends were on the train behind mine and I caught up with them when I boarded at Ballarat. We then made our way to Wendouree park for the festival.

    We were given a plastic pot when we entered and brewers typically offered either a tasting size, a half pot, or a full pot of a particular drink. Half pots are usually the best value for money: you get a decent amount to enjoy but you pace yourself and avoid reaching your limit before you tasted everything you wanted to. I made that mistake last year: buying too many full-sized pot servings. I went half pots this year.

    I also made the mistake of not making notes of the beers I tried last year. I made sure to record them this year. Given the occasion, I decided to go for drinks that I wouldn’t normally go for. In other words: lots of sours today. I’m not a sour drinker and I think I eventually reached my enjoyment limit of them today. But that’s fine: I guess it’s good finding my limits this way.

    Here’s a quick rundown of the drinks I tried:

    • Fox Friday “Feeling Peachy” Fruited Sour: This was less sour and more on the bitter sweet side. The peach flavour came through strong, which took the edge off and made it quite refreshing. Made for a nice starter.
    • Dollar Bill “Australian Wild Ale”: This was a regular ale and a little more bitter than I was expecting (although that could’ve been because of the peach sour). It felt like a heavy sort of ale. Maybe a little too heavy for me. Not sure it’ll be something I go for again.
    • Mountain Culture “MS DOS” West Coast IPA: Nothing too remarkable about this. Just an IPA. But a decent IPA. Will definitely have again.
    • Wild Life Citrus Sour: I can’t quite remember the make up of this sour. I think it was lemon and blood-orange. Definitely something and blood-orange, as the blood-orange taste really came through. I didn’t think much of this but that’s probably because I reached my limit for sours at this point. This brewery was also advertising a “pineapple sour,” which would’ve been amazing, but sadly they weren’t pouring it when we arrived. Might have affected how I thought about the blood-orange drink: feeling that it was playing second fiddle to the pineapple one.
    • Prancing Pony “10 Year” Beer: This was one my friend got but he offered me a taste of it. It was a pilsner IPA but more on the pilsner side. It’s probably one I can see myself drinking if it wasn’t for it’s alcoholic content. It was quite high: 7.5%, or 3 standard drinks in a 500 ml can. That’s just a little too high for me. The can was quite something though.
    • Molly Rose “Strawberry Sublime”: This was a low alcholoic strawberry and lime gose. A bit of a mix of sweet and sour. It was nice, but it really wasn’t doing it for me, and frankly I’m not really sure why I went for it at this point in the day.

    The event was back in Wendouree park, and was pretty much like last year. Which is good: they did a good job last year.

    But there were a few small changes this year. For one, more tables were placed under the trees, which was a good move. There were more tables in the sun last year, which never had anyone on it for long as people preferred the ones in the shade. I think there were fewer brewers this year too. It might have been because of the layout change but it felt a little smaller this year, and some brewers from last year didn’t make an appearance.

    Also, no finska this year.

    But all in all, it was a good day. Good excuse to get on a regional train out to the country for a change.

    Ignoring Bard to Speak to Paulie

    So this happened today.

    Our team was testing the integration between two systems. The first system — let’s call it Bard — can be configured to make API calls directly to Stripe, or be configured to use the second system — let’s call it Paulie — to call Stripe on it’s behalf. Bard has a REST API that is used by the HTML front-end to handle user requests. Paulie is designed to be completely isolated from the front-end and has a simple gRPC API that Bard calls. Whether or not it Bard calls Paulie at all is determined by the value of an SSM parameter.

    The test was setup with Bard configured to bypass Paulie and make calls directly to Stripe. The way we were to verify this was to tail the logs of both Bard and Paulie, make a REST-API call, and confirm that logs showed up in Bard but not Paulie.

    I got called by those running the test to help, as they were seeing something unusual: when the test was performed, logs were showing up in Paulie. The system was configured for Bard to ignore Paulie and go directly to Stripe, and yet Paulie was being spoken to.

    So we started going through the motions. We checked to make sure we had the correct version of Bard deployed, checked the SSM parameter, traced through the code, restarted Bard a couple of times to make sure it was configured correctly. And after every check we tried the test again, to nothing changing: logs will still coming through from Paulie.

    We were at it for about 15 minutes. I was staring to go through the more esoteric explanations for why this was happening, like whether we were using SSM parameters incorrectly and we may have been using an old configuration or something. Then as I was going through the traces one last time before giving up, I noticed something: there were no traces from Bard. This REST-API it had did all sorts of things like contact the database before going to Paulie or Stripe so I was expecting something like that to show up. Yet there was no evidence of any of that happening.

    I then asked how this was actually being tested. And you can probably guess what the response was. Turns out the person running the test wasn’t using Bard’s REST-API at all, and was making gRPC calls directly to Paulie.

    Well, naturally, if you called Paulie directly without calling Bard, it doesn’t matter what Bard is configured to do. 🤪

    Now, I don’t write this because I’m angry or annoyed. In fact, I came away from this feeling very zen about the whole thing. Mistakes like this happen all the time, it’s fine.

    But it’s a perfect opportunity remind myself that working on tech can sometimes give you tunnel vision, and that sometimes the explanation isn’t technical at all. Sometimes the answer is much simpler than you think.

    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.

    An empty space where the new couch will go, with the old couch to the right, beside the bookcase
    Preparing the way for the new couch. The old couch is temporarily beside the book shelf.

    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 new couch placed in the living room. The couch is a maroone reclying three seater
    The new couch.

    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.

    A pile of packing material waste in the living room
    All the waste I need to sort and throw out.
    A wooden board propped up against a wall
    Most of the waste is plastic and cardboard, but there's also this wooden board. I'll probably keep this. Might be useful in the future.

    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.

    A M2 Mac mini in its box
    The 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.

    An iPad Smart Keyboard Folio in its box
    The new Smart Keyboard Folio

    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.

    An old Smart Keyboard Folio, with the top lining starting to peel off
    The "retired" Smart Keyboard Folio. Notice the lining above the keyboard starting to peel off.

    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.

    Spotify preference screen with the toggle for Canvas visualisations enabled

    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.

    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.


    1. Maybe another way to put it is a “way that things are done.” ↩︎

    2. Unless you’re writing Android apps, in which case you’re forced into a culture of anonymous classes for all the callbacks you need to write. ↩︎

    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 new category edit box with the name Long Form Post
    The New Category form.

    The first thing you need to do is create the category:

    1. 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”.
    2. Give your category a name. I chose the name “Long Form Posts” but it can be anything you want: Titled Posts, Essays, etc.
    3. 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 new filter form configured for putting titled posts in the Long Form Posts category
    The new filter form configured for filing titled posts in the Long Form Posts category.

    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:

    1. Within the “Categories” section, click “Edit Filters”, then click “New Filter”.
    2. For a filter that will select all blog posts with a title; in the “Post length” picker, choose “Only long posts with a title”.
    3. 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”.


    1. 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. 😛

    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?

    I’m wondering how much traction these app-only services will actually be able to get in this day and age. One huge advantage that Mastodon has is that it’s a web service first, and doesn’t require an app to use. This makes sharing things outside the network quite easy. Don’t have the app? Just open this link up in your web browser.

    If Hive and Post cannot do this, I don’t see how you can get people unaware or uninterested in the service to sign up. You might be able to share a link which will prompt people to download and sign in the app. But would they actually do this? I feel that we’re beyond the days of just trying out new services unless you know for sure you’ll get value for it, and you probably won’t know this unless you can see what’s being shared without having the app.

    While we’re on the subject: my curiosity got the better of me a few minutes ago, so I took a quick look a Post.news to see what it’s like. It’s backed by Andreessen Horowitz which means that I was expecting to see a few things that I’d find disagreeable. I was not disappointed.

    There was a website — styled by someone the same level of design skills that I could muster (that’s not a compliment). And it wasn’t just a sign-up page either: there was a “discover” feed of sorts. Lots of US news, politics, and screenshots of posts from other social platforms (and not just the major ones). I don’t know if/how they curate the posts that appear there but the ones I saw did not entice me to sign up (not that I have any interest in signing up anyway).

    I hope A18Z feels like got their money’s worth for this. Not sure that I would if I was backing them.


    1. Not sure who would sign-up to Post other than those that know/like the VC backers themselves. ↩︎

    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.

    Hand-made, Home-cooked

    “Here, buy this sandwich. It’s hand-made.

    “Well, it’s machine made. But hands made the machines.

    “Well, hands made the machines that made the machines.

    “But it’s a home-cooked receipt.

    “Well, it’s a home-cooked inspired recipe. We did have to get some input from nutritionists and focus groups. And a few of our stakeholder had to approve the list of ingredients we used. But we think it’s close enough.

    “Anyway, enjoy.”

    (There’s no real point to this. This just came to me while I was at the supermarket.)

    Hustle Writing

    There was one other thing that was a bit distasteful about those posts on how you can further your career by being a technical writer, and it had to do with how they formatted their writing.

    Many of them were not afraid to include a lot of emphasis. And when I say a lot, I mean a lot. As it whole phrases or even entire sentences. They did it quite often. Sometimes in bold. Actually, quite often in bold. And once or twice, they even used both bold and italics.

    This was mixed in with prose that included a lot of tweets, liberal use of emojis 🧑‍💻, and block quotes as call-outs to something that was just said a few sentences ago.

    Because block quotes stand out from the body text, and are easy to do in Markdown. 🔥

    I see a lot of this writing in tech newsletters or blog aggregators, and I’m always a little suspicious of them. I doubt it’s mealy to highlight a point, like a typical Coding Horror blog post. I think the motivation for all this emphasis is different. They could be just trying to make the article look fun and approachable, or trying to make it stand out. Does it work though? I suspect it’s harder to stand out if every other post on the site looks like this. You’re more likely to stand out if you don’t include any formatting or emoji at all.

    I wouldn’t be to fazed by this if was a personal blog and that was just the author’s style. But these posts are trying to inform or persuade, and it all feels a little like the hustle equivalent to writing — “hustle writing” if you like — as if it’s trying to get me jazzed on a subject that I totally should be on board for. But if the content is good enough, or your argument compelling enough, does it need all this embellishment?

    Maybe I’m just a cynic — when all the web3 stuff was blowing up this time last year, I saw many a Substack newsletter touting NFTs or d-apps (remember those?) written in this style. Or it could be that I just don’t like fun, and that I’m just a stuffy old man. And yeah, there might be something to that. I took a look at my archives this morning and many of my older posts were… well, I wouldn’t say “bad”, but they were pretty dry and boring. So it might simply be that my personality just doesn’t jell with this style of writing.

    Even so, I wish there was less of this.

    Froth and Bubble

    Woke up in the early morning with this poem in my head:

    In this world of froth and bubble,
    Two things stand like stone;
    Kindness in other peoples' trouble,
    Courage in your own.

    I first read this in a young adults novel some good 25 years ago, and over the years it’s come back to me several times. I guess you can say it resonates.

    Hammers, Nails, and Hugo

    Going through my hammer and nail phase with Hugo. Trying it out on my personal knowledge base to see if it could replace the tool I wrote to generate the site from a set of Markdown files.

    Hey, if you were to squint, that tool kinda looks like a pale imitation of Hugo. How about that.

    Such as it is with things like this. I first tried out Hugo a few years ago and did the bare minimum to get a few sites off the ground. Then I coasted on that knowledge for a while, using Hugo’s basic features, and doing only cursory explorations of the more advance stuff like layouts, short-codes, and taxonomies. When it came to the personal knowledge base, I knew in principal that I could use Hugo, but since I didn’t have a lot of experience in these advanced features, I decided to just hack this tool up.

    I guess that occasional explorations worked eventually, since I came to a point where everything “click” together. That happened last Saturday as I was trying out the largest amount layout changes I’ve attempted so far. And now, I can see how Hugo can be used several other things as well.1

    If I had all this knowledge before, I probably wouldn’t have hacked together that static site generation tool. I probably would have made it work with Hugo, seeing that they are so similar.

    Now I’m not going to beat myself up too badly over this. One characteristic I’ve noticed about myself is the need to go from an idea to something that works as quickly as I possibly can. If I don’t, the idea will die on the vine (I’ve lost many draft blog posts this way). I guess the trick is trying to balance that against that other characteristic I have, which is rushing to a solution using the knowledge I already have, before spending a bit of time looking at the alternatives.

    Hey, if you were to squint, the cognitive bias of that characteristic might the same one that I’m worthing through now. How about that.

    P.S. This is the second time in three days that I work up at 5 AM with the need to do something. This doesn’t normally happen to me, and I’m not sure how keen I am for this to become a habit, but I guess sometimes you just gotta feed that beast.


    1. One other thing favouring Hugo here was that I was facing some largish changes to this hacked up tool which I wasn’t too keen on doing. And yeah, these are changes I can theoretically do using Hugo layouts. ↩︎

    On Posting Here Daily

    I sometimes struggle with the idea of trying to post here at least once a day. While perusing my archive I find days where my posts are cringeworthy or just not good, and part of me wonders whether it’s better to wait for a post to meet a certain level of quality before publishing it.

    I have also seen this argument from other bloggers as well. They post the rules they have that include things like “it should start a conversation” or it should be “distinctive”. I remember reading tweets from one who shuns the idea of posting on a schedule in favour of only publishing something that’s “good”. From looking at their site, there’s probably only a single new post every two years on average1.

    But reflecting on it now, I don’t think this works for me. Maybe it could if I was a journalist or a professional writer, but for me and this blog, I don’t see how holding back could help.

    For one thing, it will mean a lot less posts. Of course the response to this is that’s the whole point: “quality over quantity” after all. But I think if I did this, the post frequency will probably drop to the point where I’d be in danger of abandoning this blog together. I tried the minimum-level-of-quality approach when I first started this blog, and I think I got a total of 5 or 6 posts in the first 8 months. And they weren’t good posts anyway: the minimum level of quality I was shooting for was just getting something out there at all.

    That’s the reason why I joined Micro.blog2: writing smaller things more often. If I were to abandon this, I’d just be falling into old habits.

    And if that isn’t enough, there are plenty of anecdotes in how quantity leads to quality. You can spend a day, week or month trying to come up with the perfect blog post and not publishing anything at all, or publishing something that is mediocre at best. Publishing regularly forces you to practice: sure what you write today may not be considered “good”, but you’d be force to write it, publish it, and judge it with a critical eye. That can only force you to write better, even if the improvements are small like checking your spelling, or reading it once through before publishing. I can tell by personal experience that this practice has helped me.

    And let’s not even discuss the feeling of being accountable from publishing frequently. You know how often I read the blog of that person I mentioned earlier? Never. Why would I if I know there won’t be any new content for a year? When they do post something, it’s usually tens of thousands of words that feels so heavy to read. I set it aside for “later”, which usually means never.

    The blogs I do read regularly? The ones that post daily, or weekly, or even a few times a month, with updates that range from a few sentences to several paragraphs in length. And the quality of the writing or the topic really doesn’t matter to me. It was good just to get an update on what they’re thinking.

    And if this piece hasn’t convinced me yet, I’ll end it this way. If you want to keep a record of your days, or improve the clarity of your thinking, you’ll need to write. There aren’t many ways around that. And if you want to improve you’re writing, you need to practice. And to keep you honest, you need accountability, even if it’s just being accountable to yourself, and the best way to be accountable is to write in public.

    So that’s why I’m sticking with writing daily. If that’s not enough of a reason to maintain this goal, I don’t know what is.


    1. No, it’s not hypercritical.co↩︎

    2. Well that, and the social aspect. ↩︎

    2022 Year In Review

    I’ll be honest: these year in review posts feel like going to the dentist. I generally hate doing them, but I know that it can be good exercise to reflect on the past year. I think one thing in my favour is that I’ve actually kept my blogging — and to a lesser extent, my journalling — up to date so I’ve actually got something that I can refer back to.

    So here’s a brief summary of how my year went.

    Career

    I’m a little bit disappointed on this front. It feels like I’m in a bit of a rut, and lately things have been a little boring. I have been promoted to a squad lead, which I guess is some form of progression. But just like other times I’ve been asked to lead a team, it’s not something I feel I’m good at or like doing. And yet, I really cannot see any progression here other than leading bigger teams (apart from changing jobs).

    That said, a few good things have happened. The project I was working on went live earlier in the year, and while it was a stressful couple of weeks (around Easter time as well), it was generally well received and no major issues came up. Plus, I got to learn a lot about Stripe, which has been on my goals list for a while.

    Family And Friends

    Sadly, there’ve been a couple of deaths this year. My grandfather passed away in March, after suffering from a spate of aliments like stomach cancer and emphysema. This was obviously quite sad, but I take solace in the feeling that he’s finally found some peace and relief from his suffering. The second was in February, when a friend of the family that my Mum was very close to passed away. Neither of these felt like they came too soon, which is some consolidation, but it was not a great start to the year.

    Oh, and in December, after 2 years and 9 months since March 2020, I got Covid-19 for the first time. I just glad that I was up to date with my vaccination: I couldn’t imagine how worse it could have been if I wasn’t.

    Projects

    One new project this year that I actually managed to release: Dynamo-Browse. I’m actually quite happy that this tool exists. It’s been on my wish-list for a couple of years and the moment came around to finally bite the bullet and work on it. I’m also quite please that I put some effort into the finish of it, so that I wouldn’t be completely embarrassed to share it with others.

    For a while I was working on another project called Broadtail which downloaded YouTube videos and made them available in my Plex server. This was before I got YouTube premium, and as soon as I did, this project fell to the wayside. It’s still around and I’ve modified it to download WWDC videos, so I may dust it off come next June.

    There were various other things here or there that aren’t really worth any comment. Again, I’m wondering if I’m focusing on too much and only half-finishing things.

    Travel

    Wow, after a few years of not travelling at all (this is not just because of the pandemic), there was a fair bit of it this year.

    If there was one destination that was top of list this year, it was Canberra. We went once as a family during Easter to see my sister’s house, and her new cockatiels. I’ve returned to Canberra three other times this year to look after them while she was overseas for work. The whole work from home revolution has made this possible, and I’m glad I was able to do this.

    The other location of note was travelling to Las Vegas to attend AWS re:Invent, and although I became ill during the trip, and was generally overwhelmed by the size of the conference, it was still good to be able to travel overseas again. Good thing I got my passport renewed.

    By the end of the year, the amount of travelling I was doing was exhausting. 2023 is shaping up to be a big travel year as well, and I’m a little concerned it may be too much for me. I guess we’ll see this time next year.

    Apps

    Not much on this front.

    This was the year I really got into Obsidian. I started the year trying to carry around a paper notebook, and although I used it a few times to write notes, it was a little uncomfortable in my pocket. Later in the year, I gave Obsidian another try and since they’ve now got mobile apps, it’s become my go-to place for all my notes.

    Another good app discovered this year was Numi. This has been very useful during sprint planning sessions, when I need to calculate velocity and projected capacity. If there is one feature I wish I could add to this, it’s the ability to turn off iCloud syncing. I don’t like seeing my work stuff showing up on my personal desktop.

    Writing And Online Presence

    I think this is the first year where I end up with less domains than I started with. There were a bunch that I bought in 2020 and 2021 which I never used for anything, and they were just sitting there, taunting me. It’s good to see them expire out.

    It’s also the year when I fell into a bit of a writing streak. This was a good one to have happened, and it drove me to write at least one blog post or journal entry every day. I like to continue this, and maybe refine it further by attempting to write at-least one blog post per day here.

    One thing that didn’t work for me was banking posts: writing posts days earlier in anticipation of days where I couldn’t think of anything to say. I got the idea from Seth Godin, and I tried it for a bit, but the Drafts section just piled up with half-finished posts that eventually grew too stale to publish. I guess the need to publish things as soon as I’ve started work on them is something I’ve learnt about myself.

    I’ve also settled on a CMS for my side-project work journal and have started a check-in blog. Both of them are hosted on Micro.blog and although I’m still working on the writing workflow, it seems to be working well for me so far.

    The not-using-Twitter streak has continued, and given the current direction of the platform, it’s very unlikely that I will return. I have started browsing around Mastodon a lot more, especially since Adam has launched social.lol. Mastodon felt like a bit of a ghost-town at first, but things are improving after many of those I used to follow on Twitter started posting there. I’m trying to avoid making the same mistake that drove me away from Twitter, so I continue to be very careful about who I follow and will not hesitate to hide boost from those that make me anxious. I’m also adhering to the idea of POSSE so most of my writing will continue to originate here.

    Books And Media

    I’m combining them in a single section because I really did not get a lot of reading done. I’d like to say that I’d like to change this, but I’m honestly not sure if I would be serious. Anyway, here are some moments:

    A lot of reading about creativity and self improvement this year. This includes The Dip by Seth Goden, and Ignore Everybody: and 39 Other Keys to Creativity by Hugh MacLeod. Both of these I discovered after reading Indie Microblogging by Manton Reece.

    The books that I’ve started reading, but didn’t finished, were The Kaiju Preservation Society by John Scalzi, Build: An Unorthodox Guide to Making Things Worth by Tony Fadell, and 4000 Weeks by Oliver Burkeman. There’s a bit of irony in not finishing the last one.

    Things I’ve watched this year:

    • Severance: I didn’t watch this when this first came out but I eventually got to it and enjoyed this quite a lot. It was good to finally get all the Lumon references.
    • The Orville: I was expecting this to be a bit more satirical than it actually was, but in the end I found it to be quite a good watch. I haven’t got around to S3 yet.
    • Hamilton: I finally got to see this in person. I’ve watched the Broadway performance before, and I was familiar with the soundtrack, so I wasn’t going into it cold. But it’s a much different experience watching this on the real stage.

    I also made my podcast debut by being a guest on Martin’s Feld excellent podcast series Really Specific Stories. Honestly, if you’re interested in tech podcasts at all, you should absolutely be listening to this show. And I’m not just saying that because I was a guest. Feel free to skip the episode I was on, but make sure you listen to all the others.

    The 2022 Word

    The word for 2022 was finisher. The general goal was to stop splitting my focus and start following through on things all the way to the end. As I mentioned when I was talking about Dynamo-Browse, I think I’m improving on that front. It will be something that I’ll need to work on going forward, but the improvements are there.

    So overall, a pretty decent year. Probably one of the more eventful ones than the last few, but I’m pretty happy with this one.

← Newer Posts Older Posts →