All blogs / Software / engineering practice
jotaen.net
Jan Heuermann’s blog
- Posts
- 102 from 21 Feb 2014 to 21 Aug 2026
- Posting
- monthly (9 in the last year)
- Kind
- personal blog
- Feed
- https://www.jotaen.net/index.xml
2026 9
- Let’s talk about “vibe writing”
- Let’s talk about “vibe writing”
- thoughts
- Timer – Programmable timer web app – e.g. for gym workouts or stretching sessions
- Timer Programmable timer web app – e.g. for gym workouts or stretching sessions
- How to write great PR descriptions
- How to write great PR descriptions
- Ali Baba and the Forty Relying Parties – A tale from 1001 Nights, but with passkeys
- Ali Baba and the Forty Relying Parties A tale from 1001 Nights, but with passkeys
2025 4
2024 18
- Not all binary state is boolean
- Not all binary state is boolean
- Custom git subcommands
- Custom git subcommands
- Shortcut for “docker run”
- Shortcut for “docker run”
- Keep track of migration state in SQlite
- Keep track of migration state in SQlite
- Inlining images in HTML
- Inlining images in HTML
- Testing HTTP APIs with hurl
- Testing HTTP APIs with hurl
- Immediately invoked function expressions
- Immediately invoked function expressions
- Happy Anniversary! – Looking back on 10 years of blogging
- Happy Anniversary! Looking back on 10 years of blogging
- snapdiff – CLI tool, written in Rust, to analyse the difference between two directory snapshots
- snapdiff CLI tool, written in Rust, to analyse the difference between two directory snapshots
2023 10
- Let’s self-host! – Get started with self-hosting, using Docker, HAProxy and Let’s Encrypt
- Let’s self-host! Get started with self-hosting, using Docker, HAProxy and Let’s Encrypt
- “Congrats!” – The future of AI-enhanced online networking for professionals
- “Congrats!” The future of AI-enhanced online networking for professionals
- fail err – Musings about error handling syntax in Go (2/2)
- fail err Musings about error handling syntax in Go (2/2)
- The fallacy of software development principles – Why SOLID, TDD, or Clean Code won’t make us good programmers
- The fallacy of software development principles Why SOLID, TDD, or Clean Code won’t make us good programmers
- On “free” and “open-source” software – How language makes the people, and people make the language
- On “free” and “open-source” software How language makes the people, and people make the language
2022 6
- Boost klog Speeding up my Go CLI app tenfold
- Like App Store, but open, cross-platform and decentralised Imagining the future of software distribution
- if err != nil Musings about error handling syntax in Go (1/2)
- “Diff it to me baby (aha, aha)” A timely refactoring kata
- run.sh Keeping track of CLI commands in software projects
- [x]it! A plain-text file format for todos and check lists
2021 3
2020 9
- The Design of Everyday Code Two golden principles for building great APIs
- Espresso Reactive, fast and testable sketching for Arduino
- Waiting for Godot The hidden performance implications of sending bits over the wire
- The hyphen text transregional postcard How a British Lord accidentally invented the web in the 17th century
- Mental Poker Dealing cards, peer to peer
- Crypto Yahtzee Rolling the dice, peer to peer
- “Run” scripts Keeping track of commands in coding projects
- What are microservices anyway? Reasoning about application architecture
- connect4-ai On building a game AI for “Connect Four”
2019 6
- Sabbatical check-in Reflecting on 8 months of full-time self-study
- Arduino flightseeing An explanation of the Arduino Uno hardware components
- “The convoluted converter” A refactoring in 10 steps, guided by coding best pracices
- Running in circles How I spent half a day fixing something that was perfectly fine
- The continuous delivery mindset What software developers can contribute to making CD successful
- A faint little dot that was Pluto The story of its discovery and exploration
2018 4
2017 6
- Critical debug info Sensible logging in web applications
- Shearing layers About change, persistence and making decisions
- Docker ABC A short, fun and explorative tutorial for software developers
- Apartment-hunting How to approach the search in Berlin
- Fast, cheap and automated Deploying static websites to AWS
- Protect yourself A basic guideline to computer security
2016 21
- The job interview Asking questions as a candidate
- Optimizing for print The champions league of responsive webdesign
- The map method Exploring functional javascript
- Storytime Learning from challenges
- Run Monitor How I keep track of my run training
- Halftime! Five learnings from half a year of blogging
- Make 404s fun! Suddenly find yourself on the shell of a crashed web server
- Semantic versioning Communicate compatibility to API consumers
- JSON Web Tokens A brief primer
- “The discount campaign” A functional javascript code kata
- JavaScript city tour Two days of JSConf in Budapest (May 2016)
- J4N.IO – Deployment and operating From the series “Let’s build a REST service”
- Testing and QA of J4N.IO From the series “Let’s build a REST service”
- Coding J4N.IO with NodeJS From the series “Let’s build a REST service”
- What is a REST service? From the series “Let’s build a REST service”
- Let’s build a REST service Kickoff for a five part blogpost series
- Behind the scenes The making-of of my blog
- Spread your configuration Syncing dotfiles with git
- Asynchronous conditionals The idea behind JS promises
- Stop using ASCII Art Explore the super powers of your Mac keyboard
- Put your stuff into the world! Facing the challenges of being a software developer