My First Project of 2024

It's only been just a week, and I've already "completed" my first project of the year. Well, it's not really completed, but it's functional and it already completely addresses a personal need.

The project is a simple plugin for Neovim that helps me generate the initial frontmatter I need for my blog posts. It's called blogutils.nvim, so you can imagine it may grow in the future. But right now, it has three pieces of functionality:

  • formatTitle - Format specified input as AP Title Case via Text Case CLI.
  • formatSlug - Format specified input as a slug via Text Case CLI.
  • generateFrontMatter - Uses the first line of the current buffer as an input, then generates a title, slug, gets the current date, and adds the relevant frontmatter to the top of the file.

Here's a short video showing me generating the frontmatter from an example title:

I may improve it in the future, but right now that's all I need it for. And with how smoothly the development went, I'm really interested in the idea of making more plugins in the future.

Additionally, the act of learning how to write a Neovim plugin has made me much more comfortable using Neovim generally. It's weird to think that just months ago I could barely even use vim motions.


I've also created a new page for my 2024 projects, which now has just a single entry. I plan on using this page to document the projects I work on (big and small) throughout the year, grouped by week. You can also find in the menu bar the top, titled "2024".

I wanted to group by week because I wanted to visualise my work over the year in more granularity. I just hope I build enough things to make it an interesting list.

My Projects in 2023

I wanted to wrap up 2023 with another post looking back at the projects I worked on over the year, and also have a think about what 2024 could bring.

Text Shot

I can't quite remember where I said it, but I remember thinking at the end of 2022, I really wanted to work on another app. Thankfully I did just that, and I managed to develop and release a universal (iOS, iPadOS, and macOS) app that takes in various parameters and generates a "text shot", Text Shot.

Text Shot

It's a simple idea, and the app itself is very utilitarian. But from what I've heard, quite a few people have found it useful, including myself. It was originally developed to be a way to share quotes from websites (blogs), but after some feedback, I ended up making it more general. So you can provide up to four parameters: a title, source, author, and the quote. And on top of that I added some extra features like font options, themes, basic Markdown formatting, and also the option to export Alt text for those that wanted to add it to their Mastodon posts.

Website | App Store

Text Case

This is by no means a new project. But 2023 brought a few small changes to Text Case, along with an entirely new form.

Text Case

Apart from some small visual tweaks and bug fixes, I added back a "scratchpad" feature, which shows a piece of text in all formats and flows at once, similar to the original version of Text Case, there were new colour options added, and also, it became a totally free app! The tip jar still exists, but I decided to make all versions of the app free.

Text Case

The new form that Text Case took in 2023 was a command line application. Partly because I wanted the functionality myself, along with wanting to work on something new, and also open-source[1]. It's made with Swift, and it shares a lot of the underlying logic, although I have been refactoring where necessary as it's now public. I had planned at one point to distribute it alongside the Mac App Store version, and also as a publicly available executable, but the various processes like code signing, Developer ID certificates, app notarization, etc. made me decide to distribute it via Homebrew instead.

Website | iOS App Store | Mac App Store | GitHub (CLI)

Smaller Projects

Apart from the two relatively big projects that I've already mentioned, I worked on a few more smaller projects that were both for fun, and for when I had a quick idea or need for something to exist. None of them are groundbreaking, but they were certainly enjoyable, and I think I learned at least something from all of them.

blogroll.js

This was something that I've seen on other peoples websites, and it's a way to have a static list of links, and randomly, a subset are displayed as a list on a website. As the name suggests, it's a simple JavaScript script, and it's quite minimal (purposely). All you do is define a JSON file with a few links (only a title and URL is needed), include the script on the website, and then specify a HTML element where you want the links to be displayed.

I'm not sure if anyone will ever use it. But it was definitely a useful project for me, as I learned how to make minimal JavaScript scripts, and also have them easily configurable via parameters.

GitHub

random-link.js

Very similar to blogroll.js, this is another script that I built that uses similar logic, but instead only presents a single random link at a time.

GitHub

Arbok

I started to appreciate statically generated websites earlier this year (which is why my blog now runs via Hugo), and I also wanted to write some more Python, so I decided to make another static blog generator, named Arbok. It was an interesting project, although I doubt it will be used (I'm starting to notice a trend). However, I did have to write some Python code to manipulate files at work earlier this year, and what I learned writing this project helped me complete that. So I guess it can be classed a success.

GitHub

Hugo Post Organiser

As mentioned above, my blog is now built using Hugo. But previously, it was based on Ghost. And while I managed to export the content from my Ghost blog into suitable files ready for Hugo, they lacked organisation. So I decided to built a tool that could organise a single directory of markdown files, and organise them into subdirectories by year and month, both taken from the source frontmatter in each file.

I have yet to use this for my live blog, but I wanted to see if it was feasible to accomplish. Thankfully it was, and it's something I still may use. But I decided to not go ahead with using it just yet, because I was reminded many times about the benefit of not changing URLs and breaking any links to my blog posts.

GitHub

Plans for 2024

I don't have any detailed plans for 2024. Just some over arching ideas that I hope to at least be following for the first half of the year.

Instead of trying a lot of new languages and frameworks, I want to spend most of my time building on existing skills. So for example maybe using Swift for a new app, or maybe another command line utility. I'm sure I'll end up using JavaScript or Python for a few fun ideas. But seeing as I currently work professionally as a Java developer, I'm interested to see if I can start doing this more in my spare time as well.

Who knows, maybe my next open-source project will be Java-based?

I certainly enjoyed the process of working in public with the CLI version of Text Case, and even if not open-source, I'm beginning to become more a fan of making free software. So I would definitely expect that to continue.


  1. There may be a better term for it than open-source, because I'm not really encouraging contributions, so it's more "public source". ↩︎

Software I've Enjoyed in 2023

2023 is nearly at a close, so I thought I'd write about the software that I've enjoyed using this year. Some of these I've been using for a while, others I've either moved back to this year, or tried out for the first time.

Things

Screenshot

I'm not exactly a big user of task manager apps, but for the odd occasion where i want to track important tasks, or keep track of things like packing luggage for a trip, or purchasing/wrapping christmas presents, Things has been a really good fit for me. I'm pretty sure it's capable of much more than I use it for, but I'd rather that, than use something that forces me to change my habits.

Neovim

Screenshot

This is probably symbolic of my the general way I've been using my computers recently, but I have to give a massive mention to Neovim. You may not have heard of Neovim, but if you've heard of Vim/Vi, I'm sure you'll have a rough idea of what it is.

I've been using Neovim for most of my development work (outside of Java), writing short notes, editing small files, and also to write blog posts. It's a truly powerful piece of software, and the more I'm both learning and customising it, I'm becoming faster at using it, and it's becoming much more moulded to my own use cases.

If you're interested, my Neovim config is available on GitHub.

Artifact

Screenshot

Apart from social media, I've found Artifact to be a really good tool to surface news, blog posts, links, apps, etc. that are both relevant and interesting to me. I don't use it every day, but I can easily get lost in there if I want to. It sends articles that it things I'd like regularly as push notifications, which aren't always perfect, but they're still useful enough that I've left them on.

The only downside to Artifact is that it's iOS only. I'd love to either see a native Mac app, or even just a web interface that I could use.

NetNewsWire

Screenshot

This is an app I've used for a while. But it's such a great RSS reader, I can't say I've even wanted to even think about switching to anything else. I'm using NetNewsWire mainly to follow people, whether it's developers, personal bloggers, or even a few newsletters.

It seems to me that there's been a bit of a resurgence in personal blogging recently, so I've definitely been using NetNewsWire more than past years. And I hope it continues.

Homebrew

Screenshot

The world of package managers[1] for macOS is a lonely one. Fortunately, what we have is Homebrew. Maybe it's because I appreciate command line tools, or just that I dabble occasionally with Linux, but having a package manager is becoming essential for me. Whether it's to install a CLI tool like eza, neovim, or ripgrep, or even non-open source software through Homebrew Cask, it's a really easy way to both install and manage software.

I use Homebrew myself as a developer as well. I distribute Text Case CLI through a custom Homebrew tap. Simply because I didn't want to go through the hassle of signing and notarising it as an app, and then have the extra baggage of maintaining it that way. Instead, when you use Homebrew to install Text Case CLI, it clones the public repository, and then compiles it on your machine.

I've been through a few laptops at work recently, and that's when I really notice how useful it is to have a package manager. Because in one command you can pretty much get all your required tools installed. Which means you don't need to go through the boring task of going to various app websites, downloading installers, expanding DMGs, etc.

Amethyst

Screenshot

I've been using this for a while, but I'm a big fan of tiling window managers[2], and Amethyst is the best one I've come across for macOS so far.

Sure, I'd much prefer a proper native tiling window system with better workspace support. But at least Amethyst gives me the tiling support, and also some keybindings that can help you throw windows between macOS spaces. It's definitely not for everyone, but as someone that typically works from a laptop screen, it's super handy to be able to manage my windows and spaces from my keyboard.

Safari Web Apps

Screenshot

This isn't an app in it's own right. But the recent feature in macOS Sonoma to save any website in Safari as a web app is so useful for when an app or service only exists online. Back when I was playing Chess a lot, I had the Chess.com website saved in my dock as a web app. At home I just have a web app for Fosstodon (the Mastodon instance I'm on), and at work, I have a bunch of them for internal web tools that we use.

The best thing is that they're not the same as typical web app turned native, like you may see with Electron-based apps. Instead, they look, feel, and perform, exactly how they would if they were opened in Safari.


  1. Basically, a tool that helps you automate the management of installing, configuring, and removal of software (packages). Read more. ↩︎

  2. A window manager that resizes your windows into always-visible tiles on your screen (or workspace). Read more. ↩︎

A Better Version of the ls Command

I was watching various videos recently about various command line tools that could be useful on macOS, and one peaked my interest, a replacement for the ls (list directory contents) command, called exa. It's still just listing the contents of a directory, but it has a lot of nice-to-have features like better colouring, better visualisation of metadata, knowledge about more file types, and a bunch of options that you can use.

TL;DR, exa is no longer being maintained. However, a replacement has now risen out of the ashes, and is called eza.

Essentially, eza, is a maintained fork of exa, and adds even more features, that you definitely didn't know you needed. Nevertheless, even just using the default behaviour, you'll find it much more pleasant to use than ls.

I have it currently replacing three commands, ls maps directly to eza, ll is mapped to eza --long, and also because it has support for trees, tree is also mapped to eza --tree.

Some examples to give you an idea what it looks like:

eza

eza --long

eza --tree

You can find the code, docs, and install instructions via the GitHub repo. But if you're on a Mac, and you use Homebrew, you just need to type brew install eza.

Using an Old Computer for New Writing

Ruben Schade has an interesting idea, that's started flipping a lot of switches in my head, using an old computer as a dedicated device for writing.

I’ve seen more people on Mastodon take up old computers for this purpose, which as a self-respecting retrocomputing nerd has inspired me tremendously. These are some of the reasons I’ve seen:

  • Single-tasking operating systems force the text editor to be front and centre, and nullify any temptation to ALT+TAB to a browser, or chat window, or a quick game of Chips Challenge running in Wine.

  • Spartan GUIs or text interfaces have fewer distracting Das Blinkin Lights, relatively speaking.

  • Old machines and word processors have their charms. Why wouldn’t you want to write on something old and cool, instead of something new and meh?

  • Some old keyboards were garbage. Some were wonderful. The latter, turns out, are still great to type on.

  • Writers have muscle memory going back to the days of WordPerfect or Paperback Writer. I think The Beatles sang a song about that.

  • Fast character recognition. Modern computers have higher latency between key presses and typing, which I absolutely notice now.

Just reading this post makes me want to get out my X1 Carbon ThinkPad, play around with Arch, and configure myself a device dedicated to writing. It wouldn't even be that complicated for me, since my blog is really just a bunch of markdown files that are put together on my server using Hugo.

The idea makes my mind go back to a video by Joshua Blais where he talked about using a 10 year old ThinkPad, and also how he uses various devices to keep contexts defined and separate.

I think it's time to download a fresh Arch ISO, make myself a coffee, watch some of Joshua Blais' videos, and play around with a ThinkPad.

Sony Playstation Removes Access to Already Purchased Content

PlayStation:

As of 31 December 2023, due to our content licensing arrangements with content providers, you will no longer be able to watch any of your previously purchased Discovery content and the content will be removed from your video library.

I'm so glad this didn't affect me. Because something like this would annoy me so much I'd stop buying things digitally. And I'm not quite ready for that yet.

One a Month

Manuel Moreale writing about supporting people online:

But I recently realized that tiers are the wrong approach. At least for me. I believe in kindness. I believe that if you decide to support something I do, you should get all the benefits, no matter how much you pay.

I also realized that 1$+/month is the best price possible when it comes to supporting online creators. The 1$ part means you can set it up and forget about it because it’s a low enough amount that won’t make too much of a difference for the majority of people who are considering supporting online creators. The + part allows you to contribute more if you want to do so. And that’s just perfect.

As a result of this idea, I've also gone ahead and updated my Ko-fi page to be up to date, and to also have an option for a £1 a month membership.

Previously I've had links to BuyMeACoffee on my sites, but I think the idea of a £1 (or higher) subscription is a better model for supporting people like me online.

At the moment, this subscription is more of a tip to support the work I do here on my blog, and also the software I write. However, this may expand in the future.

For example, I've always liked the idea of a newsletter, and I've tried it a few times in the past, so I think I may bring that back at some point. And I also want to write more open-source software in the future. Right now the only open-source project I'm really working on is Text Case CLI, and I think I want to do more of this in the future. Along with maybe even working on some free apps.

With all that being said, you can find (and support) me on Ko-fi.

4 Days of Advent of Code

It's only the 4th of December, so there hasn't been much of Advent of Code so far. Just 8 puzzles, out of the 50 total that we will get to solve.

This is the first time that I'm attempting all of the puzzles, and my aim is do them roughly within the same day. Although I'm not sure I'll get much code written on Christmas Day.

That being said, while some days have been tougher than others, I've had a lot of fun so far.

I've seen a lot of people talk about Advent of Code being the perfect tool to help you learn a new programming language. I'm not doing that myself, but I am writing it in Java 21, so I'm both refining my Java skills, and also seeing what is new with the language at the same time.

So far it's been mainly string manipulation, iterating through arrays, and some fiddly counting logic. It can be a bit tedious at times, but maybe after 25 days it will come a lot more naturally.

If you want to have a look at my solutions so far, I have a public repo on GitHub with the logic for each puzzle.

Well, I Guess I'm a Java Developer

I've written a few times about my progressional career as a software engineer, and how I've had troubles working out what my programer identity was.

Needless to say, right now, professionally, I'm 90% a Java developer [^1].

With that in mind, I updated my LinkedIn and my online CV to reflect my latest situation (and skills, experiences, etc.), and I'm now "officially" casually open for a new role. I say it like that, because I'm in no rush to leave my current role, but I've decided that I'm going to start keeping my ears peeled for any interesting opportunities.

I've also now decided to take a more formal approach to learning more about Java, and how I can become a better Java developer. Even though I used it for a few years at university, and also quite a number of years professionally, I think I'm going to try and focus more time on getting even better.

That has meant that I've been having some fun on LeetCode solving various problems. But I'm going to have an attempt at this years Advent of Code. I've done some individual puzzles in the past, but I've never tried to do them each day (or close to) as they are available. So that should be fun.

I don't know if I'll be posting my Java-related content here. But it wouldn't surprise me if I decided to have fun with a few more side-projects while I spent more time refining my Java skills.

Analogue Pocket Now Comes in Authentic GameBoy Colours

Andrew Webster, writing at The Verge:

Analogue seems obsessed with recreating the Game Boy family as faithfully as possible. For its latest endeavor, it’s bringing the classic colorways of the Game Boy Advance and Pocket to the Analogue Pocket. These Classic Limited Edition Pockets have, according to the press release, been “carefully color-matched” to resemble the colors of the Game Boys of old, offering blue, green, indigo, spice orange, pink, red, silver, and yellow.

I've been interested in the Analogue Pocket for some time. Although I've always held back because I'm not sure if I'd actually use it.

However, I have to say, I love it in the true GameBoy colours.