Best tool discoveries of 2024

I love finding new tools to work with on my computer. Now some of these may be old tools, but ones I've just discovered this year. No particular order here, but things I've found extremely useful. None of these are sponsored (if anyone wants to, feel free to reach out).

This is actually my latest one (see my last blog post), but it's one that's really changing the way I code. Every day I'm learning something new and becoming more efficient in it. I think I'm now more efficient in Neovim than I am in VSCode. I'm even installing plugins that aren't part of the easy installation that Lazyvim provides. And even doing some minor contributions on GitHub to existing plugins.

It really comes with a real mindset shift in moving around a file, and editing blocks of text (just between quotes, or even entire functions). And because it's popular with geeks/nerds like me, there's support for pretty much any programming language you could think of.

If you run lots of little servers everywhere (even just something with a web interface), then Tailscale is your saviour. It lets you connect all your devices together in one big network, doesn't matter if it's sitting in your local home network, on a server somewhere, or even your phone, it's all together.

In my case, I find it extremely useful for accessing my 3D printer's interface (see below) while out and about. Also file shares, etc. You can even set up exit nodes on different networks to act like a traditional vpn.

Now all of this was possible using Wireguard, but Tailscale adds a wrapper on top of that, so that it doesn't matter if your devices are behind NAT gateways, firewalls, etc. you'll still be able to get a connection.

So for your home use, you get up to 3 users and 100 devices for free. Their thinking is that if you love the product, you'll be telling your work about it and they'll buy one of the larger plans. Also, beyond the development of the app and servers, their overheads are pretty low. The servers they have running are only hit for setting up connections, and even then the data is quite small.

The ability to limit what servers can see which other servers is pretty amazing too.

I've been aware of Klipper for a long time, I may have even used it before 2024, but I've finally started taking full advantage of it and everything it offers since building a Voron 2.4.

The UI is nice and clean, but very functional. I can access it from my mobile phone (via Tailscale) and check the progress of my prints.

The features like performance, input shaping (for quality prints at high speed), pressure advance, etc are just icing on the cake.

I had been using Joplin for a very long time for note taking, but after Obsidian was recommended in my company's Slack, I figured I'd give it a go, and while the base app isn't really that much more than Joplin (although looks a lot prettier), it's the community of plugin authors that push it to the top.

Dataview and Remotely Save being my two MUST HAVE'S. Dataview lets me script sections of my notes, so for example, I have my home page note listing me any untagged notes (so I can add tags and keep them organised), show me how many contacts I have listed (based on tags), etc.

Remotely Save is a free sync tool. Obsidian charge for their syncing, and yes, if you can afford it, that's the best option, but I'm trying to save money lately (thank you cost of living 😦 ), so free it is. You just need somewhere to sync it to. That's where Cloudflare R2 comes in to play. For the small amount of data, and not a large number of hits, it comes in at the lovely price of free.

Not something for everyone, and not one I use all the time, but it's soooooo pretty.

It's essentially just a configurable web page dashboard. I have links to my most common sites, stats from my Pihole server (thanks to Tailscale connectivity), lets me know if my printer is running (I'm toying with making an actual plugin for all the status), NASA photo of the day, XKCD comic, etc.

I mentioned this in my last blog post, but once again, I'm still loving Wezterm. After using iTerm2 for MANY years, it's nice to use something different. There's nothing wrong with iTerm2, even performance is good, but a change is as good as a holiday, and I really do like the features it offers. It's nice to drop Tmux for now, as I never really got a good config going there, but Wezterm is pretty good out of the box.

I've been using 1Password for a few years now (I migrated from KeePass for usability reasons, to get the rest of my family using secure passwords), but I have just discovered the CLI tool. Now it's not something I use on the command line directly, but in my scripts.

I keep all my SSH keys in 1Password, and have scripts that pull them on to my computer whenever I set up a new one (working for a consultancy, I jump between machines quite a bit). I also use it for filling out any keys I need on the command line in Environment Variables or config files (no, I can't use it directly there, but see below).

I also covered this in the previous blog post, but I've got into it a lot more since then. Chezmoi lets me keep all my dotfiles (command line config files) on GitHub for easy syncing. But the problem is, I'm on different machines, and need slight changes in a lot of config files.

That's where Chezmoi really shines, by using the power of Go templates, you can now look up particular variables and change the config based on that. So for example, when I first set up Chezmoi on a machine, it asks me my name (this one probably isn't needed), email address (this is needed given I have three main ones, personal, consultancy, client), 1Password secret key (to get the initial setup), and where the computer is used (work, home, or server).

From there I tweak my config files as need be by simple templates.

For example, my .gitconfig is templated like below

[user]
	name = {{ .name | quote }}
	email = {{ .email | quote }}
[init]
	defaultBranch = main

You can even have more complex statements like if else blocks. So in my configs, I do some switching based on operating system.

I even have scripts that install a default set of tools. This is where complex configs really come in to their own. If I'm on a Mac, I use brew install for installing tools, whereas if I'm on my work computer (Windows running Ubuntu under WSL), I'm using apt get.

With Docker Desktop becoming bait and switch with policy changes, and the general unstable nature on MacOS (unsure about others), I was looking for an alternative. But one of the MUST HAVE features was mapping local folders into the container, which many of the alternatives lacked.

I started with podman which wasn't too bad (it actually works a lot like docker swarm which I use on my server), but there were just a few compatibility issues.

Then I discovered Orbstack. It's a full Docker Desktop replacement. And supports all the same features. Perfect!

Totally useless, but fun. Gamify your coding. It tracks the keys you type coding, and give you experience points for it, you level up as you go along. I had trouble with VSCode for a while there (due to Chromium updates breaking certain types of encryption), but now I have it in Neovim, we're up and running again!

Svelte is one of those frameworks I'd dabbled with a little bit over the last couple of years, but this year, I actually jumped in quite deeply. The changes to Svelte 5 makes it a lot more intuitive to me with what they have dubbed as runes. Snippets are great too.

I find with Svelte 5 and Sveltekit, I can get a complex website up and running quite quickly.

The downside is that the majority of component libraries for it are Tailwind based, which I'm still on the fence about. I do like how quick it is to add various CSS styles, but I hate how big the class definitions get on the HTML tags. That said, I did pick Tailwind for my current work project for styling - alas, I wasn't allowed to pick Svelte too.

So yes, React.js rules the big company websites now. But I find Next.js to be quite slow in development times. It's a good framework, and they're trying to improve that, but I've jumped on the Remix (now known as React-Router v7) bandwagon.

I find it extremely fast (due to running on top of Vite). So when I save changes, it's ready to test straight away (vs the 10-15 seconds of Next.js). It doesn't sound like a large change, but it breaks development flow, and when you're doing this many times an hour, it adds up quickly.

I love how the actions and loaders are in the same file, and just get compiled into different ones, so you can easily follow what's going on, and only break out complex code into a separate file if needed.

Being React based, I was able to choose this for my work project, yay!

Used by Chezmoi above, just before I started using that, I discovered how amazing they can be.

My previous project I had to write a SOAP to REST adapter, and I wanted to template the output to be generic. I started writing my own, but after half a day on this I thought, "hey I can just use Go Templates".

So a quick refactor, and my JSON output was Go template/text files. Perfect, I could just pipe a parsed XML SOAP request straight to the template and transform it there.

It worked perfectly and is now running in production without missing a beat. Beauty was that it wasn't crazy high volumes of data (order of a couple per second at peak), so performance wasn't a problem.

2023 was all about Automatic 1111 for AI (With Stable Diffusion), this year, ComfyUI. Yes, it's tricky to start with, but once you understand the basics of it's node based flow, it's extremely powerful.

I got on to it with creating Pixel Art as that has a few stages, so I'm quite enjoying the workflow. Getting Python sorted and plugins still isn't amazing (especially on a Macbook given it's not running CUDA), but it's better than it was, especially if you use the Desktop app that's currently in Beta.

So LLM's are all the rage in the AI space. Fitten Code is such a plugin for your IDE (much like Github Copilot) that gives you a nice autocomplete experience.

One thing I've found is that it's amazing at helping with boilerplate and writing tests, but it's not going to the level of writing complete sections of code that you would have no understanding of (very important for competent programmers).

Best of all, unlike most of the others, it's free, and their privacy policy looks pretty good too.