Projects

Astrill Extractor

Astrill, my VPN of choice, allows you to export OpenVPN config files for all its VPNs, allowing you to connect on platforms it doesn't provide clients for, which albeit isn't many. The AUR package astrill has started becoming really unstable on my machine recently, so I decided to switch it…

Attack on blocks game

Attack on Blocks is a space invaders style game I wrote for my IT coursework, for the games development unit. We could make any game we wanted, provided it could be done within the time limits, was very easy to play, and easily run on the college computers (which were…

Backgrounds

Even though I use i3, a window manager well known for being minimal, and black, I still like having desktop wallpapers. It makes my desktop feel far less plan, and my lock screens far less boring. I’m not one for keeping things the same, and so my backgrounds cycle, every…

CircleCI Artifact Proxy

My favourite feature of CircleCI, besides the fact it’s the fastest CI I’ve used, and support docker natively, is artifacts. Artifacts allow you to store files from your build, and download them from the web interface. This means you can use the interface to build mobile apps, installers, or even…

Date Group

Over the years, I’ve taken a lot of photos on my phone, and it’s hard to keep them organized properly. Large directories of files don’t play nicely with Nextcloud, my storage of choice. date-group is my tool to solve this. Give it a directory of files, and it’ll group them…

Django Plaintext Password

It’s well known that storing passwords in plain text is a bad idea, A really bad idea. For production applications, there really is no excuse for it. Really, there’s no real reason for this module to exist. Although there are a couple reasons it might be handy. For example, during…

Django Plausible

It’s no secret I’m a huge fan of Plausible when it comes to analytics. I’ve jumped around a number of different platforms, and this one just clicked. I’ve been running Plausible on my websites (yes, even this one) for a while now. Adding it to your website is as simple…

Django SRI

Subresource integrity (SRI) is a way of securing your remote CSS and JS from being modified without your consent. This works by adding a hash of the file to the script or link tags, and if the remote file doesn’t match, it’s not executed. Most people would think this is…

Django secret key generator

What's a "secret key"? Django’s SECRET_KEY is the setting used as the basis for secret generation and signing. It’s used to generate session keys, password reset tokens and any other text signing done by Django. For the safety and security of a Django application, this must be kept as secret…

Docker DB Auto Backup

Databases house a lot of data, and it’s not quite as simple as just backing up their filesystem and getting everything fine. Most database engines will recommend a process for backing them up correctly, generally in the form of a command-line. So how does that play with databases running in…

Docker Static Server

Sometimes, you just need a simple container to host some static files. Whether that be files for download, images to show, or a directory of files.Why not just use Nginx? If you’re not really bothered, the default nginx container will work just fine for you, however this container has a…

Docker Website Server

If you, like me, have a website, you’ll probably need some way of serving it. And if, like me, your website is static, nginx is a great, lightweight and insanely fast file server. But, how do you configure it? Sometimes, you just don’t care, and want someone else to do…

Dotfiles

Dotfiles are a way for people to store settings and preferences to make setting up a new computer that much easier. I use both my laptop, desktop and work machine almost every day, and want them to be set up in an almost identical way. Most people store their dotfiles…

Git Mirror

Recently, I started moving most of my archived projects from GitHub onto my own Git server. Unfortunately, the self-hosted offerings aren’t perfect for mirroring. Gitea supports mirroring repositories into itself, but not pushing (work is planned). GitLab supports pushing repositories to an upstream, but not mirroring into itself unless you…

Grafana Apprise Adapter

Grafana is a great application for monitoring. With a plethora of data sources allowing for analysing and cross-referencing several metrics. Unfortunately, it doesn’t support much in terms of notifications. Apprise is a great library for creating generic integrations between applications and messaging services for receiving notifications. The only downside is…

Hugo Theme RevealJS

RevealJS is a versatile front-end framework for creating slide show presentations in your browser using HTML. It’s designed to be easy to use, and create high-quality presentations. To create a presentation with RevealJS, you’ll still need a server to run the presentation from. It’s certainly possible to access presentations by…

Hugo theme notes

For my notes, I started with gatsby-theme-code-notes, powered by Gatsby. Gatsby is a very popular static site generator, but I really don't want that much javascript on a site as simple as some text notes. But, at the time, the code-notes theme was fantastic and supported everything I needed, so…

Lantern

Lantern is a generic web server which wraps any application and allows it to respond to HTTP requests. The request body and headers are passed to stdin as JSON, and anything sent to stdout is returned to the client. Is this useful? Not really. Isn’t this basically just CGI? Yeah…

MDCal

MDCal is a project designed to make creating calendar feeds simpler. Static site generators are great, but sometimes you need a calendar rather than a website. View on GitHub Demo: https://mdcal.netlify.app/

Morse code decoder

It’s not often people need to decode text into morse code (and visa-versa), but if I had something like this when I needed to, it would have saved me hours of time!Usage In order to make it accessible for as many people in as many languages as possible, I converted…