Long Form Posts

    First Posts Of The Day

    It’s bit strange how the first post of the day can always feel like the hardest to get out. Every one after it is so much easier to write.

    I wonder if it’s because when faced with an empty text-box, there are these grand plans about what I’m going to write, as if everyone reading this is hanging on my every word: it’ll be my masterpiece of wit, inspiration, and insightfulness that will spread far and wide and blow the minds of everrryyywoonnneee1. Then I write something, and naturally it falls far short of these expectations: mundane, unimportant, already said before2.

    Then I say to myself, “ah well, at least it’s written down.” And with that, the expected level of quality for anything else that day has been set.

    So, this is today’s first post. More might come, probably along the same level of importance as this one. At least until the tomorrow, when the cycle starts again.


    1. Another possibility is that I feel I need to write something at the same level of quality of those that I read. That’s probably not a bad feeling to have; but, at least for me, it can get in the way of writing anything at all that day. ↩︎

    2. And lets not forget the bad spelling and grammar I failed to catch. ↩︎

    Reheating Chicken Schnitzel in a Microwave

    Some tips for heating up chicken schnitzel that you had for dinner in a 1.1 kW microwave for lunch the next day. This is something I occasionally do, and today I found a process that works that I’d like to document for the future.

    First, don’t use the high setting on the microwave. A minute at high will heat the schnitzel up, but would also harden the crumbling, making it rubbery and unpleasent to eat. Even worst is using a plate instead of a container. That would ruin the meat even more and make a mess of your microwave.

    Instead, put the schnitzel in a microwave-safe container and heat it up twice, one minute each time, at medium. This will heat it up without making it rubbery. If still not warm enough, do it a third time for about 30 seconds (this I haven’t tried, but it seems like a good approach to getting the meat slightly warm while giving you time to make sure it’s still nice to eat).

    Photos Of Churchill Island

    Yesterday, my parents and I went to Churchill Island for afternoon tea and a walk around the homestead. Here are a few photos of that outing. Apologies that some of them are not great — they were taken in a bit of a hurry.

    Hiding Your Attachment Folder In Obsidian's Outline

    A useful little CSS snippet for anyone using Obsidian that wants to hide their attachment folder from their outline.

    .nav-folder.mod-root>.nav-folder-children .nav-folder>.nav-folder-title[data-path^="Attachments"],
    .nav-folder.mod-root>.nav-folder-children .nav-folder>.nav-folder-title[data-path^="Attachments"] + .nav-folder-children {
            display: none;
    }
    

    To use:

    • Go to the directory $VAULT/.obsidian/snippets where $VAULT is the directory of you vault. If the snippets directory doesn’t exist, create it.
    • Copy the CSS snippet into a new CSS file.
    • Open you vault settings and go to Appearance.
    • Scroll to the bottom to where you see CSS snippets.
    • Click the reload button. You should see the CSS file you’ve just created appear in the list. Turn it on to apply it.

    This’ll work if you’ve configured Obsidian to store attachments in a folder called “Attachments” located at the root of your vault, like I do. But I suspect the data-path attribute holds the folder’s path so you could use whatever CSS attribute selector you need based on how you’ve configured attachments. For example, [data-path*="/Files"] selector will probably work if you’ve configured attachments to be in folders called “Files” that sits alongside your notes (I haven’t tested this so YMMV).

    Source: Scribbles_some_words on this Reddit response

    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.

← Newer Posts Older Posts →