Otter Nonsense

What I use, 2023 edition

Hi, I’m Louis! Creator of the Gleam programming language and software tinker.

I’m a sucker for nostalgia, and I enjoy talking and thinking about technology, so I’ve decided to join the /uses train and write about what tech I use and why. Let’s go!

My workstation

I use a 2020 Macbook Air with 16GB RAM, the hostname for which is Diglett. I name all my devices after Pokemon as I’m very mature and enjoy occasionally forgetting exactly which one is Bellsprout and which is one Chansey.

I’m rather indifferent to macOS and in may ways prefer Linux, but they’re reliable machines and I was quite excited to use an ARM processor. I think my ideal would be an ARM Linux laptop that’s design to be repairable and upgradable, but as I’ve got this I’m going to try and make it last as long as possible, to avoid creating electrical waste.

For years I’ve struggled with RSI. I’m largely OK these days, but it means I have to be mindful of how I use computers. I almost never use my laptop as a laptop, instead using it as a desktop computer. Perhaps an Apple mini desktop would have been better, but it’s nice to have a computer I can take with on the infrequent occasions I travel and might want to do some work.

My monitor is some cheap 1440p ultrawide AOC thing that a friend gave to me. I’m not in love with it, but I can’t afford a lovely 5k replacement, so it’ll do for now. My mouse is a Razer brand bluetooth mouse which works well enough for me.

My keyboard! I got into mechanical keyboards in part because of my RSI, but it has become something I really enjoy. I use an ortholinear 40% Planck v7 with a gorgeous green aluminium case and green Acute keycaps. I use Cherry MX Silent Red switches, which are linear and the quietest switches I’ve ever heard. They feel fab to me, and they’re much less antisocial than other switches I’ve used.

A tiny ortholinear mechanical keyboard of 4 rows and 12 columns

I’d really like to experiment with low profile split bluetooth keyboards like the GEIST TOTEM. You could do all sorts of intereting things with them like attach them to your thighs or mount them vertically on a desk, two positions which seem to fit the human body much more naturally than the standard horizontal keyboard position. It’s a lot of money for an experiment though, so it’ll have to wait.

Every desk chair ever seems to give me back ache, including the expensive ones everyone recommends. These days I’m using the rather bizarre looking Varier Variable Balans kneeling chair, which I bought second hand as an experiment. Most the time I kneel on it not the way it’s intended, but it’s working much better for me than a regular chair. I think part of that is that I move around on it so much and rotate through a bunch of different positions while using it.

A rocking kneeling stool in all black

The majority of the time I don’t sit on anything at all, thanks to my IKEA hand-cranked standing desk. This is maybe one the best things I’ve bought when it comes to my health, I’d recommend it to everyone, especially with how cheap the hand-cranked one is. Standing and moving around has made such a difference for me.

On my desk I’ve got a pair of comically named Sony WH-1000XM3 headphones. I bought them years back for when I worked in a noisy office, but they still get use for playing rave music letting me rapidly alternate between programming and dancing around the room like a nutter. Perhaps controversially, I don’t think they sound very good, and something without isolation (or with a pass-through feature) would be much better for me. ANC can be tiring on the ears, and I’ve missed the doorbell on a few occasions.

Software

I’ve been a Linux terminal person for longer than I’ve been a programmer, but in recent years I’ve been using Visual Studio Code, after being impressed with how easy it was to get going with. However, a week ago I tried my old love Neovim again after having not used it since before Lua support landed. Wow, the configuration and out-of-the-box experience is really good these days! I’ve been using the LazyVim starter template and I think Neovim is going to become my daily driver once again.

Some other software I use on my workstation:

  • Firefox, a browser.
  • Fish, a shell with excellent UX.
  • Migadu and the Apple Mail app, for email.
  • mpd with mpc and Persephone, a hacker’s music player.
  • watchexec, for running commands when files change.
  • xh, an ergonomic terminal HTTP client.
  • yt-dlp, a video downloader.
  • moreutils, some niche but useful scripts.
  • zoxide, a fast directory jumper.
  • asdf, a software version manager and installer.
  • ripgrep, grep but a little easier to use.

Personal devices

Over the last few years I seem to have accumulated a lot of Apple stuff. I’m a little worried about how annoying it’ll be to move away from them, but that seems to be an unavoidable problem with any brand these days.

My phone is an iPhone Pro 13 Pro (named Machop), which I bought refurbished this year to replace a very broken Android phone. I quite like a lot about the iOS experience and lots of the built-in features and apps are very clever. It has made me much more interested in phones as a programming platform. This is immensely frustrating as the yearly fee you have to pay Apple to run your own software on the computer you bought from them is straight up robbery and should be illegal as far as I’m concerned. I’m very jealous of how Android users can run a full Linux development environment on their phones. A phone and a bluetooth keyboard would be an amazing portable setup and I could forget about laptops entirely!

I have an iPad Air 4 (named Hoothoot) which I mostly use for watching videos when cooking or in bed, and this year I splashed out on the cheapest Apple watch (named Kabuto) when I found one heavily discounted. It’s a too underpowered for most apps to be usable, but I’ve found the “rings” that nag you to exercise surprisingly motivating. It even got me to buy an Apple Fitness+ subscription, which I do make use of. Well done to the Apple marketing team I suppose!

Homelab

Now here’s some computing which brings me a lot joy! Since going full time on Gleam (rather than working 2 jobs at once as I have for many years) I’ve had time for engaging with technology as a hobby again. One thing I’ve been doing is winding down my use of proprietary services and instead running my own software. It has been tremendously enjoyable.

I may be slightly misusing the term “homelab” as my philosophy is quite different to what I see on homelab social media, but I’m not sure what else to call it. I really like trying to do as much as possible with as little as possible so big powerful computers running lots of docker containers of resource hungry programs isn’t very appealing to me. Inefficient software causes more polution, and it’s so much more fun to solve a problem when you have constraints! So many of these systems are designed for large enterprises, but I’m not a large enterprise, I’m some guy with a bad moustache.

I’ve a 4GB Raspberry Pi 4 (named Cubone) which is my server. It boots from an SSD connected via a USB cable, which is a bit silly but the novelty PlayStation case I found was so cute I completely abandoned any logical thinking and bought it immediately. It doesn’t have a place for an SSD inside.

A Raspberry Pi case that looks like an original PlayStation

I’ve used configuration management tools like Ansible and Chef a lot in the past, but I don’t enjoy using any of them. The idea behind them is great, but they’re all so slow and overly complex. For my personal stuff I just write some POSIX shell scripts which I scp to the server and run.

If you’re a comfortable programmer and have experience with Ansible or similar then I think using shell scripts will be easier to work with, and can can run in a couple seconds rather than possibly minutes. Give it a try!

VPN and backups

The server isn’t publicly accessible, so I use Tailscale to create a VPN for my devices. Tailscale rules. I love it. It makes a lot of boring stuff really easy.

Backing up and replicating data is really important! There’s few things I would be more upset about losing than family photos. I use Syncthing to replicate my personal data beteen the server and my laptop, and rclone to back it up to Backblaze B2 and my dad’s home server. I think I’d like to replace B2 and get an offline backup next year. I’m also curious about btrfs.

Media

The server has SFTP enabled and my phone pushes photos and videos to it over that. I’m using the app FTPManager, but it’ll probably get replaced as it doesn’t seem to support not pushing photos that have already been uploaded, even if they are no longer in the SFTP receive directory.

For a while I ran Plex, but it sucked! It used monstrous amounts of resources and was constantly nagging to give them money. I replaced it by enabling NTFS on the server and using the Android VLC app to stream videos from it on my TV. It uses pretty much no resources, and the only downside so far is that I have to navigate the file system rather than having some fancy UI. That’s fine, it’s my file system. I know where I put the video I want to watch.

Web

I slightly lied when I said the server isn’t publicly accessible. I’m using Cloudflare Tunnel to man in the middle attack myself proxy HTTP traffic from the public internet to the server. It gets received by Caddy, a fantastic web proxy that finally ended my many year relationship with Nginx.

I’ve got Caddy serving two directories of files, one public, one with HTTP basic authentication, as well as a couple static sites. I’ve also added a CGI module to Caddy and use it to run some scripts, presumably because I’m completely mad.

OK! Hear me out! CGI is good, actually!

It may be kinda slow and awkward, but CGI scripts only uses system resources when they are actually handling a request. There’s so many sites on the internet that serve practically no traffic, and so much energy and compute could be saved by not running those programs all the time, taking up space doing nothing. If we called it POSIX serverless or something I bet we could get some VC funding for it.

Monitoring

I have a handful of sites that I want to know about any outages for, and for this I use gatus. It’s a simple little program that will take a yaml file of URLs and periodically send them HTTP requests, and then sending you a notification if they fail however many times in a row.

It’s written in Go. I tend to opt for software written in Go as there’s a lot of it, it’s typically a single statically linked binary, and often these programs use relatively small amounts of resources. It’s not always the case, but Gatus ticks those boxes.

For notifications I use Pushover, which a service that lets you send a HTTP request to them and they’ll send a push notification to your phone. That’s it. Super straightforward. What’s even cooler is that it’s a single $5 purchase for the app, and then you can use it forever. I hope the developer is making enough money because it seems like a really generous deal to me.

The last bit of software I run is Goatcounter, a basic analytics service, again written in Go. Ideally I’d just parse access logs to get visitor numbers, but some of these sites are hosted on GitHub pages so I don’t have access to that data.

It’s an OK bit of software. The UI is nice, but by default it tracks more than I want (I don’t use their default JavaScript for this reason), and it has this really silly thing where you need to use a new DNS name for each site you want to track. I’m not going to duplicate a DNS record once per site, it’s not practical. I’m hacking around the problem by prepending the hostname to the path when registering events. It works, if unsatisfyingly.

All the alternatives seem to be more invasive or use more resources, so I’m sticking with it for now. Let me know if you have an alternative to suggest.

Networking

Confession time: I don’t understand my home network well enough to explain it. When I moved into this flat I mentioned what I was aiming for to my dad and he turned up later with a bunch of stuff and installed it while giving me one of those “engineer with decades of experience in this field” explanations that’s just a bit too much to absorb in one go. He’s also more of a configure-things-with-interactive-tools than an configure-with-code kinda guy, so there’s a bit of a mismatch there too.

He knows his stuff and it’s been rock solid so I’ve largely ignored it, depriving myself of any opportunity to learn. Don’t worry, it’s there on my never-ending todo list. Somewhere…

The Future

I add to this little project every now and again as the mood takes me. Other than the additions mentioned above I’d like to try a minimalistic approach to Prometheus. It seems promising, didn’t use too much memory in my brief test, and it has Pushover support. Perhaps it could replace Gatus too.

PhotoPrism looks like very nice photo library software. I’m hoping Grist could break my Google Sheets dependence. I use Apple notes for Journaling and some basic data collection, I’d like to export that data and keep my own copy somehow. DNS that blocks adverts like AdGuard Home could be good for my phone’s battery life and surfing experience.

So yes, lots more fun to be had with this tiny little computer. :)

Happy new year folks. I hope you had a good 2023, and hope this next one is even better. x