22nd of March 2018
Refactoring Go Code to Avoid File I/O in Unit Tests
At work today, I refactored some simple Go code to make it more testable.
The idea was to avoid file handling in unit tests without mocking or using temporary files by separating data input/output and data manipulation.
9th of March 2018
A Tiny `ls` Clone Written in Rust
In my series of useless Unix tools rewritten in Rust, today I'm going to be covering one of my all-time favorites:
9th of January 2018
Rust in 2018: Streamline Collaboration and Empower Intermediate Users
I wrote about the future of Rust before and it seems like nobody stops me from doing it again! Quite the contrary: this time the Rust core team even asked for it.
I'm a bit late to the party, but here are my 2 cents about the priorities for Rust in 2018.
2nd of January 2018
Functional Programming for Mathematical Computing
Programming languages help us describe general solutions for problems; the result just happens to be executable by machines. Every programming language comes with a different set of strengths and weaknesses, one reason being that its syntax and semantics heavily influence the range of problems which can easily be tackled with it.
17th of December 2017
Rust for Rubyists
Recently I came across a delightful article on idiomatic Ruby.
I'm not a good Ruby developer by any means, but I realized, that a lot of the patterns are also quite common in Rust.
What follows is a side-by-side comparison of idiomatic code in both languages.
10th of December 2017
Making Myself Obsolete
In December 2015 I was looking for static analysis tools to integrate into trivago's CI process. The idea was to detect typical programming mistakes automatically. That's quite a common thing and there are lots of helpful tools out there which fit the bill. So I looked for a list of tools...
7th of November 2017
Modern Day Annoyances - Digital Clocks
This morning I woke up to the beeping noise of our oven's alarm clock.
The reason was that I tried to correct the oven's local time the day before — and I pushed the wrong buttons.
As a result I didn't set the correct time, instead, I set a cooking timer... and that's what woke me up today.
15th of October 2017
Learn Some Rust During Hacktoberfest
October is the perfect time to contribute to Open Source — at least according to Github and DigitalOcean. Because that's when they organize Hacktoberfest, a global event where you get a free shirt and lots of street cred for creating pull requests. Let me show you, how everybody can contribute code to Rust, a safe systems programming language.
10th of October 2017
A Little Story About the `yes` Unix Command
What's the simplest Unix command you know?
echo, which prints a string to stdout and
true, which always terminates with an exit code of 0.
18th of September 2017
Lightning Fast Image Previews with Pure CSS and LQIP
My website is reasonably fast. There was one thing left which really annoyed me: layout reflow after images got loaded. The problem is, that the image dimensions are not known when the text is ready to be displayed. As a result, the text will be pushed down on the screen as soon as an image is loaded above. I decided to fix that once and for all.
15th of September 2017
Go vs Rust? Choose Go.
Rust or Go, which one should I choose? is a question I get quite often. Both languages seem to be competing for the same user base and they both seem to be systems programming languages, so there must be a clear winner, right?
It's not so easy. Both languages have a different scope. Golang shines for writing microservices and for typical "DevOps" tasks, but it is not a systems programming language. Rust is stronger for tasks where concurrency, safety and/or performance are important; but it has a steeper learning curve than Go.
15th of August 2017
Afraid of Makefiles? Don't be!
In the last few years, I've had the pleasure to work with a lot of talented Software Engineers. One thing that struck me is, that many of them did not have any working knowledge of
Makefiles and why they are useful. Let's change that!
12th of August 2017
Of Boxes and Trees - Smart Pointers in Rust
Recently, I tried to implement a binary tree data structure in Rust.
Each binary tree has a root value, a left, and a right subtree.
I started from this Python implementation, which is quite straightforward.
10th of July 2017
Why Type Systems Matter
I've written most of my code in dynamically typed languages such as Python or PHP. But ever since dabbling with Rust, I've developed a passion for static type systems.
It began to feel very natural to me; like a totally new way to express myself.
18th of May 2017
Being a Professional Programmer
When I was around 12, I set myself the goal to become a professional programmer.
I can tell, because at this time I made the conscious decision to use my right hand to control the mouse — even though I'm left-handed.
27th of April 2017
The Future of Rust
Let me first point out the obvious: yes, the title is a little sensationalist. Also
you might be asking why I should be entitled to talk about the future of Rust. After
all, I'm neither part of the Rust core team, nor a major contributor to the Rust
ecosystem. To that I answer: why not? It's fun to think about the future of
systems programming in general and Rust in particular.
9th of April 2017
Launching a URL Shortener in Rust using Rocket
One common Systems Design task in interviews is to sketch the software architecture of a URL shortener (a bit.ly clone, so to say).
Since I was playing around with Rocket, why not give it a try?
18th of March 2017
The Essence of Information
People look confused when I tell them about my passion for algorithms and data-structures.
Most of them understand what a Programmer is doing, but not what Computer Science is good for.
And even if they do, they think it has no practical relevance.
Let me show you with a simple example, that applied Computer Science can be found everywhere.
15th of March 2017
Why I Love Programming
Programming has many faces. It is the science of structured thinking.
It is the art of eloquent expression.
It teaches you to be humble when you look at other peoples' fascinating work.
Most of all, it teaches you a lot about yourself.
While the syntax may change, the concepts will not.
30th of October 2011
For as long as I can think, religious flamewars have infected computer science.
20th of October 2011
Are you a Programmer?
My geography teacher once told the story of her first lecture at University.
As an introduction, her professor asked the class to draw
a map of Germany without any help and as accurate as possible. To her surprise, she was not
able to fill the map with much detail. Even the shape of the country was a bit vague.
13th of October 2011
On Hard Work
Great people get shaped by their achievements
12th of February 2010
Overkill: Java as a First Programming Language
I recently talked to a student in my neighborhood about his first programming
experiences. They started learning Java at school, and it soon turned out to be
27th of January 2010
Howto Sort a Vector or a List in C++ using STL
A little code snippet that people need very often.
10th of January 2010
Why I Love Text Files
Text files are the single most important way we can communicate with computers. It's no coincidence that they are also the most vital way to interact with other human beings. What we can achieve with text files is invaluable: Write it once and refer to it whenever you want to get the message across in the future. Write a program (it's just text), save it and let the machine execute it whenever you like. Write another text file which contains the rules for the execution of your program and the computer runs your application exactly as you specified (
cron files do that on Unix).
8th of November 2009
Running Legacy Code
This short article deals with a severe problem in software development: bit rot.
When switching to a new platform (for instance from Windows XP to Windows Vista/7), the programmers need to make sure that old bits of code run flawlessly. There are several ways to achieve this goal that will be discussed in the next paragraphs: