Hi there!
I'm a passionate software engineer from Hamburg, Germany, and in the business since 1998.
(To be exact my first IT job was when I fixed the computer of a car repair shop in my home town when I was a 13 years old boy.)
Between 2001 and 2019 I lead my own companies (arcus(x) GmbH, Brain, Cool & Schmidt and Avoid Murphy Products) and developed systems for several industry sectors:
- Banking
- Dating,
- e-Commerce,
- e-Learning,
- Education,
- Insurance,
- Logistics,
- Medical Research,
- Publishing,
- Shipbuilding,
- Stock Exchange,
- Travel,
- Translation.
In the last years I was not happy with the contractor relationship anymore. I wanted to work as close to the product as possible.
Currently I am employed by a big retailer in Hamburg.
While most fluent in Java, Javascript, and Python I am also experienced with Go and many more programming and scripting languages.
I feel at home in the Frontend and in the Backend, have maintained infrastructure as code for several years and do operations as well.
I love simplicity, testing, k8s, docker, ansible, terraform, Linux, make, the command line, nodejs, Maven, the Spring framework, flyway, PostgreSQL, S3 and GCS, CockroachDB, Cloud Spanner, async messaging, React, DDD, CQRS/EDA, feature toggles, ... and going the extra mile to make customers happy.
I am opinionated about slowing down progress because of synchronous reviews and bullying developers with code metrics.
Currently I prefer working in the cloud (GCP & AWS), but I am also experienced with taming on premise infrastructures.
I have a strong foundation in isolating, modelling and implementing business logic. And I really know how to organize software to keep it maintainable for a long time.
Though I love building software from scratch, my heart beats for modernizing legacy systems.
OSS Projects
Because I love to share code, I have created some more or less successful projects:
- q4c of tamingj - internal dsl for queries on java collections with join support
- strike4j - inofficial java lib to interact with the Alesis strike pro drum module
- remove-drums - drum track removal from audio file with spleeter
- go-edilib - an edifact reader written in golang
- java-edilib - an edifact reader written in java
- go-ant-pattern - ant pattern lib written in golang
- go-spring-password-encoder - spring compatible password encoders written in golang
- ansible-vault-var - a tool two get and set encrypted values from ansible vars yaml files
- installed-packages-diff - a tool two create a diff of package versions installed on two servers (rpm and dpkg)
- gcloud-aio-run - an asyncio python client for the google cloud run admin api
- Optional Backport - a jdk7 compatible backport of java.util.Optional
- Deployment Board - deployment dashboard to show which stories are deployed in what environment
- setup-tfvm - github action to setup tfvm managed terraform for github pipelines
- AWS Scatter-Gather - Batch processing/scatter-gather/fork-join/map-reduce with AWS lambda and python in multiple variants
- tfvm - another terraform version manager (but written in golang)
- versioner - versioning tool to help with releasing projects when no sophisticated build tool is available.
- pygglz - feature toggles in python
- bytesbufio - python package bytesbufio
- codestickers for java - a collection of code annotations
- zipdiff - a lib, cli, maven plugin to verify build artifacts; very useful for build modernization
- fluentxml4j - a fluent xml processing api for java
- Server Mechanic - evolving servers, managing environments with shell scripts
- react-editable-select - a combo box component with react
- tmply - secrets exchange via browser on https://tmply.herokuapp.com
- @cbuschka/flux - an oo style flux dispatcher built for react
- distrolessdocker - distroless docker containers built with different programming languages
- loadprofile - a profile manager for bash
- config4go - a simple config reader written in go.
- agfsapi4j - another glusterfs api for java
- maven-webpack-plugin - a webpack plugin that calls maven (e.g. for version info)
- gulp-if-any-newer - a gulp pipe component to filter for changed sources
- @cbuschka/data-utils - collection of data utils
OSS Contributions
I contribute to other OSS projects, such as:
- liquibase-spanner - liquibase extension for cloud spanner (Feature: customizable changelog/lock table names.)
- openconnect - documentation fix in openconnect free vpn client)
- logback - logback logging framework (test coverage for JNDIUtil)
- kubernetes-client-java - kubernetes client for java (Fixed NPEx and issue #1629 by Exception handler injection)
- boto3 - boto3 python AWS sdk (Feature: SQS batch sender)
- cw - a cli tool for tailing cloudwatch streams (Feature: --endpoint-url for localstack compatibility)
- okapiframework - Extract and merge of translation units from various file formats into xliff (Bugfix: data loss)
- docker-compose-maven-plugin - Control docker-compose from maven (Minor documentation improvement)
- flyway - the Java database migration tool (Migration loading strategy, encoding bug fix)
- buildnumber-maven-plugin - maven plugin for putting version infos into artifacts on build (Feature: JSON output format)
- git-commit-id-maven-plugin - maven plugin for extracting git commitish (Bugfix: Property filtering)
- distributeme - utils used in distribution framework (Feature: Locking with timeout)
- webpack-version-file-plugin - generate version file for deployment artifact (Bugfix: dir not created)
- chrono - a date/time library written in Java
- mailer - emails from application via database (very useful to improve traceability and prevent sending emails from development environments)
- JBoss - EJB 2/3 Application Server (Bugfix for EJBTHREE-1177)
Non-OSS Projects
- WTGTrack - an app for case tracking of wind turbine generators
Recommendations
- Video: "9 Steps to Awesome with Kubernetes" by Burr Sutter - many insights, my favorite conference speaker because he never wastes time
- Video: "The Do's and Don'ts of Error Handling" by Joe Armstrong - oh shit, they knew it all already in the mid 1980s
- Video: "Turning the database inside out with Apache Samza" by Martin Kleppmann - eye opening
- Video: "Design Microservice Architectures the Right Way" by Michael Bryzek - very brave to go with code generation in 2020, outcome driven software development
- Book: "Generation Scavenging: A non-disruptive high performance storage reclamation algorithm" by David Ungar - an unprecedented engineering achievement
- Book/ Audiobook: "Phoenix Project: A Novel about It, Devops, and Helping Your Business Win" by Gene Kim - instructive and entertaining at the same time
- Newsletter: GCPWeekly
- Blog: Official Google Cloud Blog