Ever wondered how complicated the German tax system is? I wrote a Ruby implementation of the tax algorithm. In this post I describe what I learned along the way. read more
In the second post of my "reverse engineering mobile apps" series, I give an introduction on how to analyse the traffic of apps. read more
In the first post of my "reverse engineering mobile apps" series, I'm arguing why you should learn how to reverse engineer apps. read more
A dark full-screen terminal window. That is what you see mostly on my screen. My fascination with the terminal started when I found out how to run COMMAND.COM on my parents Windows computer. What a joy! I could edit files with "edit", start "fdisk" and explore the file system with "DIR". I felt like one of those cool hackers from the movies! A few years later I was lucky enough to discover that Windows and COMMAND.COM isn't the most effective way to work and I started to learn about Linux and Bash.read more
Whenever I want to know my external IP address, I use ifconfig.me. It's a small service that returns your IP address along with some additional information. The only downside is that it's relatively slow. In this post I'll describe how I implemented a subset of ifconfig.me in C and deployed it to Heroku.read more
I recently switched from local to online backups with Tarsnap. In this post I want to share what I think is great about Tarsnap and how I configured it.read more
I analyzed the custom protocol used by the mobile messaging application Threema and wrote a paper to summarize my results. read more
I've been playing with GNU Emacs and implemented the FizzBuzz Kata. In this post you can read about my approach. read more
How to setup an up-to-date Yesod and Haskell virtual machine read more
Hi, I'm Jan Ahrens. In this blog you can read about my thoughts on various technical topics.
As you might have already guessed: My opinions are my own and don't necessarily represent those of my employer.
If you want to contact me you can use my PGP key. Its fingerprint is 3762 1152 E099 AB27 04E8 3FD1 B911 E6A2 2B4F 3B5F.