About
A history of this website: This personal website of mine has gone through numerous iterations. Previously, I hosted this website on a spare laptop running Apache but have since moved to Vercel for hosting—forwarding ports, fiddling with DNS records, generating HTTPS certificates with Let's Encrypt, configuring my mail server daemons Postfix and Dovecot, and everything else associated with server administration were an absolute nightmare. I have not so fond memories of spending hours reading through my server logs, trying to figure out why my emails didn't forward. I remember, after debugging for days, finally narrowing the problem down to my ISP blocking the port for SMTP. I was forced to use this service called GhettoSMTP. I also remember using a DigitalOcean's droplet at some point for hosting once. The only upside of all this fumbling around is that I learned a lot about server administration.
I believe initially I used a handwritten SSG in C++ to generate my website, since I was a tad bit obsessed with C/C++ those days and dutifully endeavoured to write all my software projects in C++. I don't have those files anymore, unfortunately. I proceeded to rebuild my website in a dozen different web frameworks (Next.js, Svelte, Vue.js, etc.) before deciding to write my own in Node.js. It crawls for Nunjucks templates and blog posts written in my own Markdown-like document language. It uses Babel for JavaScript transcompilation and miniaturization, highlight.js to syntax highlight blocks of source code, and MathJax for rendering the LaTeX embed in my posts. I have a Node.js script that hosts a HTTP development server which injects a bit of JavaScript into all the HTML. This JavaScript receives websocket commands from a websocket server that I host alongside the HTTP one. When I edit a post or webpage that belongs to this website, the script is notified and the websocket server sends a command to the embed JavaScript to refresh the page. This is basically poor man's live reloading. A handful of randomly scattered shell scripts aid in my development process.
Tools I've Used
- Python
- pyenv — Used once upon a time. Dropped in favour of uv.
- Ruff — Super fast linter.
ruff server
makes ruff to act as a LSP server, permitting me to format code in neovim with a press of a button. - Pip — Tried and trued package manager. Created in 2008 as a replacement of easy_install, the original Python package manager.
- Conda — I use Miniconda. Not sure exactly what advantage it has over pip but some packages such as the Montreal Forced Aligner have to be instealled with Conda.
- uv — I like it. The machine learning Python projects install quite a bit faster with this rather than pip. I use Arch Linux's pacman for global packages and uv for venv packages, so basically no pip now. I think it also takes up less space, though I'm not sure of this. uv also provides a more unified interface, combining three tools: pyenv, pip, and
python -m venv
. Astral.sh is hitting it out of the park with tools for the Python ecosystem.
- Krita
- Blender
- FFmpeg
- Gimp — Not a good choice for me. Bad UI, spaghetti codebase, provides no additional functionality; if I wanted to perform simple image manipulation, like rotation, I would reach for FFmpeg. If I wanted to digitally paint, I would reach for Krita.
- Packages/Libraries
- Selenium -