Since some people ask me what software I use in my daily and work life, here’s a non-comprehensive list:

Text Editors

My main editor is usually Visual Studio Code for the most part, but I used Emacs before switching. Its main selling point is its git integration, especially with GitLens, which I found to be nearly as good as Emacs’ magit, and good autocompletion and code inspection with Intellisense.

For authoring TeX, the best choice is still Emacs with AUCTeX. For system config, especially within containers, I exclusively use vim.

Programming languages

My primary general purpose languages are C++, JavaScript and TypeScript. Most of my projects are written in these. For scripting, I enjoy writing a lot of Ruby and bash. I know well several other languages which I don’t normally use, like Haskell, Scheme, Common Lisp and Erlang, and I’ve had some experience with OCaml, Scala and Go, Prolog, Python and a lot of generally obscure stuff like MiniKanren. Even though I also know C and PHP in depth, I try to avoid them as much as possible, and I have a deep hatred for the latter. Unless I get paid to deal with the mess.

Web development

My software of choice is usually Node for webservers (with Hapi as my favourite framework), and Ember or React for the frontend. I do this for several of my personal projects; instead of writing a desktop UI (for which I used Qt), I prefer to write separate server and client programs. The reason for this is that it’s very easy later to extract (which is a noop) server logic into its own service with persistent data, which I can then offload to a remote server for remote access from any location. A monolithic webapp (like with Electron), wouldn’t let me do that without a massive refactor.

Repository management

I use GitLab for all my personal and work projects. It has many features, and can be self-hosted. Normally, I prefer to use gitlab.com, which hosts most of my git repositories, from small scripts to massive art asset repositories of several GBs. Features like pipelines, code review tools, Docker registry, Agile and planning tools (scrum, kanban, roadmaps, epics), external integration and ability to self-host make it all-round the best git repository manager and devops tool.

Deployment

At work, we use Kubernetes for managing deployments for production and staging systems. I recently started using it for my personal projects as well, after having used for years my own dedicated servers or virtual servers from cloud providers. As I was already using Docker containers, switching has been painless and straightforward, requiring only a manifest yaml file and persistent data migration. I am looking forward to doing the same with Terraform, which can also be used to describe Kubernetes resources, giving me a single file to manage my entire infrastructure.

Cloud Providers

I have been using DigitalOcean for many years, and it’s also where this website, along with some of my personal services, are running, which all recently moved to their managed Kubernetes service. (You can get $100 credit if you sign up from here.) At work, I use AWS, and at some point I will probably move some of my projects there, as it gives me more services and functionality, and further develops my AWS skills.

Task management

I use Trello for pretty much everything. My daily worklist is all there, which helps keeping me on track on personal and work projects so I can get things done without getting lost. Also, they have a large collection of cute 🐈 cat 🐈 backgrounds you can set during your daily standups to annoy your colleagues. For design documents, I use Confluence.

Game development

I have been writing custom engines on OpenGL for years, and have worked on a few released games. Currently, all my game development is done Unreal Engine 4 in C++. For character development, sculpting, and environment designing, I use ZBrush, Blender 2.8 for retopology, rigging and animations. For texture painting, I use Substance Painter and Gimp. These, along with the Unreal Editor, provide for all my asset creation needs.

Desktop

The desktop environment I am mostly fond of is my dwm-based setup on Ubuntu for my x220. All my computers must have a tiling window manager, no exceptions, especially with multiple monitors. Regular desktops make me feel like a cat without whiskers. On Mac, I use Magnet, and on Windows, AquaSnap. I am usually happy to use anything that I can mostly manage by keyboard, and on Windows I can only survive if Git for Windows is installed, which provides a complete unix-like environment. I have also used linux distributions like Slackware and Gentoo, but currently I prefer to have multiple systems and to move between them without having to manage too much configuration, so I am not tied to any specific system, as long as it’s usable out of the box.

For questions or comments contact me.