This a CV and profile of my skills and interests.
Areas of Expertise top
My professional skills and interests, grouped by strength of expertise into senior, working and junior.
To consider myself "senior level" in an area, I need to feel comfortable to offer in-depth analyses of existing systems and to design, create and maintain lastable systems.
I have extensive experience with functional programming techniques. That includes Nix(OS) on the operations level, Clojure(Script) on the application level and React(Native) on the UI level.
I like to focus on declarative, reproducible and introspectable systems, with explicit effects, based on functional techniques.
User Stack Engineering
The user stack is the part of the "Full Stack" running in the user space provided by a typical posix kernel. For a typical project, engineering the user stack entails:
- Requirement Design
- Security Design / API
- Storage / DBMS
- Distributed Consistency
- UI Programming
I do not consider myself a "Full Stack" developer. For that I would need to also become proficient in:
- Kernel programming and even lower software, like drivers, firmware or FPGA programs
- UI Design, this website is about the best I can do
- SEO. I'd rather work with a marketing team for such requirements
- Operations / Monitoring
- Provisioning / Scaling / Load Balancing
To deliver full systems, I like to rely on these technologies in particular
- Nix + NixOps
- PostgreSQL / Datomic
- JVM + Clojure
- GraphQL / HTTP
- React + ClojureScript
To consider myself "working level" in an area, I need to feel comfortable to become productive within an existing system quickly and to create a new system after some research.
I have delivered projects on JavaME, Android and JavaEE, and I know my way around the JVM pretty well.
For server programming, I prefer using Clojure to program the JVM. For Android, I prefer using ReactNative, to keep the necessary Java to a minimum. At these, I'd consider myself senior level.
With web standards changing as fast as they do, I consider it really hard to stay senior level at this. I have been delivering UIs via the browser for all my programming life, habitually working around browser quirks. I care about accessability and progressive enhancement.
Web APIs, I've used as a frontend programmer, include:
- Indexed DB
- Web Workers
- Web Audio
- Local Storage
Still on my TODO list:
- Service Workers
- Web Assembly
- Web GL
For browser work, I prefer to use ClojureScript with React. At this, I'd consider myself senior level.
Many of my deliverables have been full user-facing systems, spanning browsers, mobile devices and server-side components. Often, I'd also operate the hardware for the servers.
This means, that I'm basically familiar with Monitoring, Provisioning, Scaling and Load Balancing and I design my systems, such that they interact well with these.
Apart from running my personal and development infrastructure, I prefer to work with an ops team. Though, I believe that functional, reactive architecture can bring development very close to operations.
Shell / Systems Programming
It's hard to enumerate all the languages and technologies, I've worked with during my activity as a package maintainer for NixOS, most often there is Python (which I also did some application programming in), bourne shell, autotools, systemd and small C programs.
Deriving consistency guarantees from the single-writer principle leads to simpler and more introspectable systems and I like to apply it in my designs, if possible. I have experience with Datomic, which designs a database system around this, as well as Matrix.org, which is ostensibly a chat protocol, but it's really a standardized event DAG.
In addition to Clojure, I've worked with Common Lisp and Emacs Lisp, and I found my skills to carry over well.
I really appreciate docker for guiding me towards discovering the power of unshare(1).
To consider myself "junior level" in an area, I need to have set up a working environment and written some code myself. Here are some that I'm interested for expanding my skill in.
Custom Android Builds / ChromeOS Ecosystem
Due to maintenance of the Chromium package in NixOS, as well as experiments with WebRTC, I'm somewhat familiar with the ChromeOS build system and infrastructure. I also developed a prototype of a kiosk, which included developing patches for Android.
I have developed an OpenGL ES feature for an android app at some point and I'm generally interested in hardware - accelerated realtime graphics, as well as scientific programming using CUDA or OpenCL.
I've done some toy projects / prototypes in these. Interested in picking them up again.
- Erlang / Elixir
Unfortunately no experience in Rust
If you're willing to let me learn this on the job, I'd be delighted.
Working Experience top
My work so far, in roughly chronological order.
Network Administrator at Urbas
Linux, SunOS, Windows. Also did my first paid development: A python server + web UI for transferring files too large for email attachments (shouldn't be a problem nowadays .. hah).
Junior .. Senior Developer at Bolldorf
A small shop, that I helped build up from very early stage. There I got my holistic view on systems, as well as an opportunity to use many different technologies in the field.
Frontend Developer at Diagnosia
Helped them with expanding into the german market.
Open Source Engagements
Projects with actual users, that I work on regularly. For more, visit my github profile.
Maintainer of Clojure's data.xml library
Started out by implementing missing namespacing support. Got handed the keys.
Maintainer of nixpkgs
The package collection for NixOS. This is a full linux distribution and I've been involved (amongst other) with the following packages:
- CDemu (Creator)
- Wine (Contributor)
- Chromium (Maintainer)
- systemtap (Contributor)
- Emacs (Contributor)
- Gnome (Contributor)
- ja2-stracciatella (Creator)
- firmware-linux (Contributor)
- dwarf-fortress (Contributor)
Notable projects from my employments and freelance gigs.
A smartphone gadget for a managers of a hotel chain, to display current resident when getting called from a room. Python on Nokia S60.
A full system for a facility management company, generating SLA compliance reports. Clojure, jQuery, NFC, JavaME on Nokia S40, Java on Android.
Car2Go for BlackBerry
Carsharing app, cross-platform for BBOS6 and BBOS10. Clojurescript in WebView + native JavaME extensions on BBOS6.
Political information. Clojurescript, SVG.
Heterodox Newsletter backend
A CMS and authoring system for an academic newsletter. Clojure, ClojureScript, Datomic.
Service for volunteer first responders, to get notified in emergency situations near them. Clojure, ClojureScript
CNPView mobile map viewer
High-Performance viewer for a map with vector and marker overlays. Java and GLES on Android, OpenGL ES.
Diagnosia germany UI
Browser UI, as well as setup to unify native apps. ClojureScript, React, ReactNative.
Cambridge 1st Certificate in English
Software & Information Engineering
Other Interests top
I'm a passionate beatboxer and regularly attend jam sessions and other events.
Climbing / Bouldering
I love climbing as a holistic workout, but also as an excuse to visit interesting places.
The free software community enriched my life and carreer to a great deal and I try to give back, when I can.
Event Management / Volunteer Coordination
After many years of being involved in the beatbox community in Vienna, I have started to host a regular beatbox event. Also, I have been involved in organizing a 2-day festival, based on voluntary work, in my home town.
I'm really into cycling as a means of transportation and have worked in a bicycle workshop. I used to do the occasional single-trail.