CV

About me

I like to tinker with computers/software, learning about good software architecture, and mathematics. I am captivated by the beauty of functional programming and I am going down the rabbit hole of learning some category theory for the sake of it. My current long term goal is to finish developing/deploy my stock trading system. In the mean time, I am looking for work where I can enhance my functional programming skills and generate value for the shareholders of the company.

Technical Skills

A short summery of some of my most relevant technical skills.

Programming

Language Level
C Superficial
Fennel Proficient
Haskell Intermediate
Kotlin Fluent
Lua Fluent
Ocaml Basic
Python Fluent
Rust Basic
Shell Fluent
VHDL Basic

In my spare time I am focusing on improving my skills in Haskell and Ocaml. I am also keen on trying out Julia, and compare it to Python for data science/machine learning projects.

Markup

Language Level
HTML Proficient
LaTeX Fluent
markdown Fluent

Databases

Type Implementation
Cache Redis
Graph ArangoDB
Index Elasticsearch
Message bus Kafka, SQS
NoSQL MongoDB
SQL Postgres, TimescaleDB
Vector DB Qdrant

I would like to try out Nats as a message broker, skytable as NoSQL database, and meilisearch for indexing.

Software

Here is a collection of software that I have interacted with that might be worth mentioning.

Name Level
CircleCI Proficient
Docker Fluent
Git Fluent
Helm Proficient
Hugo Intermediate
Kubernetes Proficient
Neomutt Proficient
Neovim Fluent
Tekton Proficient
Terraform Intermediate
Tmux Proficient

I have plans on learning Nomad, as this seems to be a better alternative of k8s. I am also moving to podman next time I work with containers in my spare time. I am also keen on working more with service meshes, to improve my knowledge of their capabilities.

Machine Learning

I have worked on many machine learning projects, both at work and at home (hobby), ranging from time series classification, regression, generative models, and machine translation to name a few. My latest project is a Retrieval Augmented Generation (RAG) system for my personal library of books and articles. I plan on extending this to integrate with dmenu, so I can ask questions through the search bar, which will be pretty cool.

I have also spent quite some time on a OCR project where I started with CNN-LSTM based systems to then move on to transformer models that I have implemented. This has been a crucial project for me, as it has kept me up to date with the SOTA in transformer architectures, and allowed me to test some of my own ideas out, most of which were not successful.

Operating Systems

I use Artix Linux as my daily OS. However, I would like to transition to OpenBSD soon. But, I am a bit afraid of the lack of support for Nvidia GPUs. Unfortunately, I use macOS for work.

Workflow

I use Neovim for all development, together with dwm as a tiling window manager, and st as the terminal of choice. I am very happy with this setup, but would like to improve the workflow with increased tmux usage and git worktrees, à la ThePrimeagen. I now use worktrees full time, and it is a game changer when it comes to development. For improving my tmux workflow I now use a popup session which I can easily toggle. I use this popup sessions to run all time consuming tasks during development in the background, such as compiling and running tests.

I build my own keyboard, and I currently have several ferris sweep, but my latest build is a Charybdis Nano and I believe this to be my endgame when it comes to split keyboards. I also moved on from qwerty as I do not believe that you should go through life using suboptimal solutions from the past, just because you cannot bother learning something new.

Architecture

Good software is like physics, it should avoid too much complexity, like von Neumann famously stated, “With four parameters I can fit an elephant, and with five I can make him wiggle his trunk”. I adhere by the unix philosophy, as well as the suckless philosophy. I truly believe that you develop better software by following these principles.

For designing and implementing distributed systems, I really like the framework presented in the book The Tao of Microservices. Web services should almost be provocatively small, most communication between services should be asynchronous. It is important to reason and respect separation of concerns. You should at all cost avoid building a distributed monolith with entangled dependencies. I also like the idea of designing systems from first principles with defining the messages first, and not focus on the services from the start.

However, I have now started exploring the idea of “modular monolith”, I believe this to be the most sane approach to building software yet. It keeps the communication simple between modules, e.g. inter-process instead of network calls, such as http or grpc. It has the benefit of having the entire source code in one place, making it easier to develop new software using existing interfaces. If you develop it the right way, modules can easily be extracted into separate services if necessary. But I see a downside to this approach, and that is how to deal with the complexity of testing multiple features/branches at the same time in dev/staging, maybe there is a good way?

Miscellaneous

What Level
Soldering Basic

Experience

Institutions

Languages

Language Level
Swedish Native
English C2