I'm building a digital filing cabinet to order the chaos in my (and potentially your life). Whether you're a companion in struggling with staying on top of letters and e-mails or a fellow developer curious how this adventure unrolls, this is the place where I will regularly share my progress and learning, both form a technical as well as a business perspective.


The misguided dream of language monogamy in web development

In the ever-changing world of web development, many seek the ideal of using one language for both frontend and backend. But if we focus on common data instead of a common language, we can get the best out of both worlds without having to sacrifice significant synergies. —

Discover Functional Programming with Elm

If you’ve been eyeing functional programming or diving into Single Page Application (SPA) development I think no other tool is better suited for you than Elm. It stands out as a language that not only makes development delightful but also serves as the perfect gateway to the world of functional programming.

Dynamic Diagrams

Static images, videos, and SVG animations come each with their own challenges when it comes to visualize complex systems through diagrams. I’ve developed a mini language and web component to add a narrative element to diagrams.

htmx vs. SPA

As web developers, it’s our responsibility to discern the best tool for the job. htmx indeed simplifies the tech stack and lowers the entry barrier for budding developers or simpler projects. However, for intricate UIs that demand consistent data representation, the SPA approach offers better support. Rather than getting swayed by trends, it’s time we appreciated the nuance in these discussions and chose our tools wisely.

Building in the open

Join me as I embark on a transparent journey to develop a digital filing cabinet that prioritizes your privacy. Using my years of experience in web development, I aim to craft a solution that bridges the gap between convenience and data security, all while sharing each step of the process with you. Follow along for live coding sessions, insights, and the chance to shape a product designed for individuals, families, and SMEs alike.

Episode 12 & 13: Fade out and clean up

In episode 12(1h:25m) I started with building a simple score tracker. Adding gradual fading became a bit of a cliffhanger, because I introduced a gnarly bug that I was only able to resolve in episode 13 (1h:20). I used this as motivation to clean up and reorganize the code with the help of the glorious Conquer of Completion Vim plugin.

Episode 11: Game Over

There are still a few elements missing to be able to call our Tetris complete. However, with the changes from episode 11 (40min) we’re at least able to tell the player “Game Over”.

Episode 10: Clearing lines

For my Tetris to be actually playable I’m adding in episode 10 (55min) the code to have full rows cleared. With the help of more unit tests and the infamous fold function, I’m inching my way towards a complete solution.

Episode 9: Preventing invalid movements

In episode 9 (48min) I make sure the current piece can’t be moved out of the board or into other pieces. With that came the opportunity to do a little functional finger exercise and develop a function that swaps the arguments of another function.

Episode 8: Rotation and random new pieces

Rotation In Episode 8 (60min) I implement the rotation of the current piece. That worked out so fast that I also looked at generating random pieces instead of the hardcoded one when a new piece has to be created.

Episode 6 & 7: Collision detection and Test Driven Development

collision detection This article is the summary of the last two episodes. Tetris-wise I’m trying to implement the functionality that lets the current piece rest on the ground or other previously dropped pieces. After I introduced a gnarly logic error in episode 6 I decided to start from scratch in episode 7. This gave me the opportunity to talk about elm-test and to show the strengths of the Test Driven Development technique.

Episode 5: Registering keystrokes

In this episode (40min) we investigate how to react to global keyboard events. Once more we’re putting the “subscription system” to use which we got to know last episode

Episode 4: Applying 'gravity' to the current piece with subscriptions

After the marathon episode last week I kept it to more digestible 30 minutes this time.

Episode 3: Definition, Rendering of Tetris pieces and static typing

This week I developed the data structures that are necessary to define and render the characteristic Tetris pieces. I was a bit surprised it took me more than 1.5 hours, but I never was the fastest 😅.

Episode 2: Rendering the empty board and partial function application

After we looked at the structure of an Elm app line by line last week, we had a more abstract look at the mechanics of an Elm app today. But after that we jumped right into the code that would render the empty Tetris board.

Episode 1: Project setup for the Elm Tetris clone

In this episode I shared my hot code replace setup for Elm explorations with you. After struggling with the limitations of elm reactor I build this little boiler plate setup to shorten my feedback loop.

A stream, because: why not 🤷

The only thing that’s even more energy draining than reading long texts is writing them. That’s why I’ve decided to give the “stream format” a try.

Practical exmaples in Elm

I am starting a series of small articles to motivate you and get you started with Elm development. I don’t want to prove to you how Elm has to make you more productive or how your programs are more robust than with other frameworks. There are enough articles about that out there 😉. For me coding in Elm is fun and it brings back some of the memories of how it felt when In picked up programming. And I want to share that.