Skip to Content

Recent Posts

Other publications

  • Develop, Build, Deploy - Repeat!

    Your resource on Continuous Delivery: Infrastructure-as-Code, Immutable Servers, Zero-Downtime Blue/Green deployment, Software Tests and Database Migrations.

  • The Web Development Beginner Tutorial

    Learn software development for the web - from the ground up.

  • The Node Beginner Book

    The aim of this book is to get you started with developing applications with Node.js, teaching you everything you need to know about "advanced" JavaScript along the way. It goes way beyond your typical "Hello World" tutorial.

Older posts

  • Posted on

    German PostWie Studien verdreht werden

    Ich habe mal aufgeschrieben wie aus einer Studie, die Elektroautos eine bessere CO2-Bilanz als Benzinern bescheinigt, ein Beitrag auf der Facebook-Seite von 'Unser Planet' wird mit der Aussage: 'Elektroautos verschmutzen Umwelt mehr als Benzin-Autos'.

  • Posted on

    How Cassandra's inner workings relate to performance

    At Galeria.de, we learned the hard way that it's critical to understand the inner workings of the distributed masterless database Cassandra if one wants to experience good performance during reads and writes. This post describes some of the details of how Cassandra works under the hood, and shows how understanding these details helps to anticipate which use patterns work well and which don't.

  • Posted on

    Compile Time Cassandra Injection in Play 2.4

    Play 2.4 supports Compile Time Dependency Injection. This post describes how to inject your own Cassandra repository object into a controller at compile time, while also initializing and closing a Cassandra connection session during application startup and shutdown, and how to mock the repository in the non-integration tests.

  • Posted on

    German PostVideo: Die E-Commerce-Welt bei GALERIA Kaufhof

    Das Personalmarketing der GALERIA Kaufhof GmbH hat einen wie ich finde sehr ansprechend gemachten Film zur Arbeitswelt im E-Commerce Bereich des Unternehmens drehen lassen. Mit dabei meine Kollegen Beate Radics, Rico Pfaus, und ich.

  • Posted on

    Upgrading a Symfony project from 2.6 to 3.0

    Symfony 3.0 has been released recently, and I wanted to upgrade my side project JourneyMonitor, which was still based on Symfony 2.6, as quickly as possible. This post explains how I approached the upgrade, and shows which parts of the project structure and code had to be changed in order to get the project working again.

  • Posted on

    German PostEntwicklung und Betrieb einer Symfony2 Webanwendung – Teil 1

    Ich möchte ein Projekt aus der realen Welt heranziehen um den Leser durch all jene Details des Produktentwicklungsprozesses zu führen, die eine relevante Rolle spielen im Zusammenhang mit dem Schreiben und Betreiben von Anwendungen auf Basis von Symfony2 – hierbei gehe ich ein auf Aspekte wie Projektsetup, Testing, Datenbankmigrationen, Continuous Delivery, Sicherheit, und vieles mehr.

  • Posted on

    How I build, deploy, and run Spark

    I’m currently tinkering with Spark for my side project JourneyMonitor. The goal is to extract useful metrics from the Selenium runs executed by the platform. To do so, I’m currently in the process of creating a new Analyze component. I want to build the Spark setup and the jobs using Scala 2.11. Therefore, I had to compile my own version of Spark 1.5.1, put it onto the systems, and run a cluster from that. This post describes what worked for me.

  • Posted on

    German PostInterview: Die E-Commerce-Plattform von GALERIA Kaufhof

    In Ausgabe #23 der ShopTechTalks unterhält sich Roman Zenner mit Michael Wegener (talentformation GmbH) und mir über die selbst entwickelte E-Commerce-Plattform von GALERIA Kaufhof. Wir berichten unter anderem über die nötigen Schritte von einer monolithischen Shop-Lösung, die primär von einem externen Dienstleister weiterentwickelt und gepflegt wurde hin zu einem verteilten System, an dem interne Teams arbeiten.

  • Posted on

    German PostTransformieren und Validieren von JSON Requests in Play2

    In diesem Tutorial möchte ich auf die Verarbeitung des JSON Body eines eingehenden POST Requests innerhalb eines Play2 Controllers eingehen, insbesondere in Hinblick auf die fachliche Validierung der JSON Struktur und ihrer Überführung in Models in der Applikation.

  • Posted on

    Setting up a Scala sbt multi-project with Cassandra connectivity and migrations

    This is a from-the-trenches tutorial about some of the first things I have managed to understand about and build with Scala. My goal is to provide a detailed step-by-step tutorial which shows how to set up a new Scala project with two sub-modules (one being plain old Scala, one being based on Play2) using sbt. I’ll also describe how to enable both modules to speak with an Apache Cassandra database, and how to add automatically applied database migrations (in order to allow using the project in a Continuous Delivery setup like the one we use at Galeria Kaufhof).

  • Posted on

    Limiting access to forwarded ports in Cisco iOS

    This is a short tutorial which explains how to forward outside access to ports on a Cisco router on to ports on internal systems while limiting this access to selected outside IPs.

  • Posted on

    Creating a useful AngularJS project structure and toolchain

    This article describes in great detail what I learned about setting up AngularJS applications in terms of project structure, tools, dependency management, test automation and code distribution. The result is a seed project that is easily extendable, clearly structured, self-documenting, and comfortable to work with.

  • Posted on

    Mocking Dependencies in PHP Unit Tests with Mockery

    The PHP library Mockery allows to use a simulated version of certain objects within unit tests, usable where objects are passed into methods as dependencies. This form of simulation is called mocking. The following example shows how mocking enables us to test methods that depend on a database without the need for a real database when running our tests.

  • Posted on

    Building manageable server infrastructures with Puppet: Part 1

    With this series I would like to provide a comprehensive hands-on tutorial that explains step-by-step how to build an automated and centrally managed Linux server infrastructure using Puppet. Part 1 of the series explains in great detail how to set up a virtual machine infrastructure which allows to create a realistic Puppet server-client setup.

  • Posted on

    Building manageable server infrastructures with Puppet: Part 4

    The fourth part of this series shows how an infrastructure-wide users, rights and SSH key management can be realized through Puppet and demonstrates the use of macros in order to streamline the creation of manifests with similar content.

  • Posted on

    German PostSoftware-RAIDs unter Linux mittels md

    Über das md Modul („Multiple Device driver“) verfügt der Linux-Kernel bereits seit geraumer Zeit über einen äußerst soliden Treiber, um rein softwaregesteuerte Festplatten-RAIDs zu konstruieren.

  • Posted on

    German PostDirektes mounten eines KVM RAW Images

    Ich habe ein mir weitgehend unbekanntes RAW Image eines KVM-Gastes, und möchte auf die darin vorhandenen Partitionen direkt zugreifen, d.h. ich will sie auf dem KVM Host einmounten.

  • Posted on

    German PostKVM Gäste über WLAN ins Netz bringen

    Folgende Situation: Ihr habt einen KVM-Host, auf dem mehrere virtuelle Maschinen laufen. Diese sind alle mit einer Bridge verbunden, die auf dem Host eingerichtet wurde. Soweit, so gewöhnlich. Was aber, wenn der Zugang zum Internet auf dem Host nicht über eth0 erfolgt, sondern über eine WLAN-Verbindung? In diesem Fall kommen die KVM-Gäste über die Bridge zwar an alle Hosts, die entweder Teil der Bridge sind oder an eth0 hängen, sie gelangen aber nicht ins Internet.

  • Posted on

    German PostDesktop Ubuntu zu Server downgraden

    Aus Versehen Ubuntu Desktop installiert, jetzt soll's aber doch ein Server werden? So wird man die grafische Oberfläche komplett los.

  • Posted on

    German PostMit virt-install virtuelle KVM Maschinen an der Textkonsole ohne VNC installieren

    Die meisten KVM bzw. virt-install Tutorials erwecken den Eindruck, dass man virtuelle Maschinen zwar an der Konsole neu erstellen kann, sich dann aber via VNC in diese verbinden muss, um die Installation durchzuführen. Es geht aber auch komplett textbasiert, d.h. man muss die laufende SSH Session mit dem KVM Host nicht einmal unterbrechen. Einzige Voraussetzung ist natürlich, dass der zu installierende KVM Gast überhaupt eine textbasierte Installation erlaubt. Getestet habe ich es mit einem Ubuntu 12.04 LTS Server Gast.

  • Posted on

    Using virt-install to create virtual KVM machines on the text console without using VNC

    Most KVM or virt-install tutorials will make you think that while you can create new virtual guests on the text console, you still have to log into them using VNC in order to actually use their OS installation tools. But in fact there is a way to completely install new guests without leaving your SSH session – as long as the guest OS does have a text-based installer, that it. I have tested this with an Ubuntu 12.04 LTS Server guest.

  • Posted on

    German PostWindow Maker unter Ubuntu 12.10 Quantal Quetzal

    Privat benutze ich ein sehr einfaches aber praktisches Acer Aspire One 722, dies ist ein günstiges 11,6 Zoll Netbook mit einer 1GHz AMD CPU. Das System ist nicht gerade ein Rennpferd, aber das muss es für meine Ansprüche auch nicht sein – im Wesentlichen beschränken sich 95% meiner Nutzung auf Browser und Konsole, letztere in Form des wunderbaren Guake. Als Betriebssystem verwende ich aktuell Ubuntu 12.10 Quantal Quetzal, und hier liegt das Problem: Unity ist einfach zu schwergewichtig, um auf diesem schmalbrüstigen Rechner Spaß zu machen, und die leichtgewichtigen Alternativen wie Xubuntu oder Lubuntu habe ich als wenig stabil erlebt. Meine Wahl fiel daher auf das etwas angestaubte, aber schön einfache Window Maker, welches sich an der GUI des NextSTEP Betriebssystems orientiert.

  • Posted on

    German PostBash: Skriptausgaben mit Zeitstempel versehen

    Oft ist es wünschenswert eine Vorstellung davon zu bekommen, wie viel Zeit zwischen den einzelnen Ausgaben eines Skripts vergangen ist. Bei eigenen Skripten ist es natürlich in der Regel möglich, aus dem Skript heraus vor jede ausgegebene Zeile einen Zeitstempel zu setzen. Eleganter ist es aber, dies „von außen“ zu tun, über Bordmittel der Bash. Der weitere Vorteil dieser Lösung ist, dass man auch die Ausgabe fremder Applikationen, die man nicht verändern kann, mit Zeitstempeln versehen kann.

  • Posted on

    German PostTalk: PHP 5.4 – die wichtigsten Neuerungen im Überblick

    Am 14. März 2012 fand das erste Treffen der Symfony User Group Berlin statt. Ich habe dort einen kurzen Talk mit dem 'Titel PHP 5.4 – die wichtigsten Neuerungen im Überblick' gehalten. Folien und Videomitschnitt des Talks nach dem Klick.

  • Posted on

    Object-orientation and inheritance in JavaScript: a comprehensive explanation

    Let’s talk about object-orientation and inheritance in JavaScript. The good news is that it’s actually quite simple, but the bad news is that it works completely different than object-orientation in languages like C++, Java, Ruby, Python or PHP, making it not-quite-so simple to understand. But fear not, we are going to take it step by step.

  • Posted on

    Project: projectile, an HTML5 canvas game

    Some days ago my son asked me how computer games are made. I couldn’t really explain it very well in terms he understood (he’s 5 years old), but I wanted to show it to him. Thus I started working with him on a 2D space shooter written in JavaScript, using the canvas element of HTML5.

  • Posted on

    Project: bivouac, an HTML5 web chat with filesharing

    bivouac provides an open source software package which allows to easily setup and run web-based group chats with dead-simple file-sharing (drag a file into the chat, and it’s immediately available as a download for all chat members).

  • Posted on

    Interview on the Leanpub Podcast

    Peter Armstrong from Leanpub, where I publish my eBooks, did an interview with me on the experience of releasing The Node Beginner Book on their platform, how bundling books work out, pricing, on learning from each other in the Internet age, and much more.

  • Posted on

    How hosting MyHammer started in a devops way back in the day

    This here is just me, bragging about myself. You have been warned. This guy with the psychopathic look standing in a room full of rubbish in front of something that vaguely looks like computers is me standing in front of the first MyHammer server cluster, only days before the whole system went into production.

  • Posted on

    Deploying Symfony2 Applications to Amazon AWS with Scalarium

    This here is just me, bragging about myself. You have been warned. This guy with the psychopathic look standing in a room full of rubbish in front of something that vaguely looks like computers is me standing in front of the first MyHammer server cluster, only days before the whole system went into production.

  • Posted on

    Why developing without tests is like driving a car without brakes

    The following roots in something I heard from Jon Jagger at QCon London 2011 after his fantastic talk about Deliberate Practice. It was related to Test Driven Development. He asked “Why do cars have brakes?”. It made us think “To stop!”, but he said “No – to go faster”.

  • Posted on

    Visualization: Why working iterative works

    I’m really into visualizations. More often than not I can only really “get” something (a complex system, an abstract idea, a process etc.) when I see it visualized. You could call this the transformation of gut feelings into images.

  • Posted on

    German PostEmpfehlung: Literatur für Manager

    Ich werde oft gefragt, wie ich so ein hervorragender Manager geworden bin. Haha, quatsch, kein Mensch fragt mich das. Ich stelle mir nur manchmal vor, dass es so wäre. Dann weine ich mich langsam in den Schlaf… Wo war ich? Ach ja.

  • Posted on

    German Post<angular/> – ein radikal neuer Weg, Ajax Applikationen zu schreiben

    JavaScript, Ajax und DHTML sind nicht wirklich meine Welt. Zum einen, weil ich einfach grundsätzlich eher mit dem Backend einer Software als mit dem Frontend zu tun habe, zum anderen, weil ich immer schon das ungute Gefühl hatte, in diesem Bereich muss man einfach deutlich zu viel Code produzieren um damit dann gefühlt deutlich zu wenig zu erreichen. Umso mehr hat <angular/> mein Interesse geweckt.

  • Posted on

    German PostTutorial: Testgetriebene Entwicklung mit PHP

    Testgetriebene Entwicklung (test driven development) ist eine Arbeitsmethodik, die Softwareentwickler dabei unterstützt, wichtige Qualitätsprinzipien bei der Erstellung von Code zu erreichen. Dieses Tutorial beschreibt Schritt für Schritt die Motivation, einem testgetriebenen Ansatz zu folgen, und stellt die notwendigen Werkzeuge und Techniken vor.

  • Posted on

    German PostEmpfehlung: “Der Kuchenladen” in Berlin

    Die Konditorei “Der Kuchenladen” ist sogar die nervige Parkplatzsuche auf der Kantstraße wert. Handgemachte Torten, Kuchen und Tarts, die klasse aussehen und einfach gut schmecken.

  • Posted on

    German PostAlte Homepage wieder verfügbar

    Meine alte Homepage (2000-2005) ist wiederauferstanden und unter http://old.manuel.kiessling.net/ erreichbar.

  • Posted on

    German Postsiqqel: SQL-Abfragen direkt aus HTML heraus ausführen und darstellen

    Ein Kollege von mir, Max Winde, hat in den vergangenen Wochen ein Tool geschrieben welches sich innerhalb kürzester Zeit zu einem Renner in den verschiedensten Abteilungen entwickelt hat, und schon jetzt aus dem Arbeitsalltag kaum noch wegzudenken ist: siqqel.

  • Posted on

    German PostDatabase Change Management mithilfe von VCS: Teil 1

    Dieses Dokument beschreibt Werkzeuge und Prozesse, um Datenbankänderungen innerhalb von großen Softwareprojekten einfach, fehlerfrei und nachvollziehbar durchzuführen und zu managen.

  • Posted on

    German PostWie man Replikationsunterbrechung durch Deadlocks bei INSERT INTO … SELECT verhindert

    Der My-Hammer Auftragsradar, der unsere Auftragnehmer auf Wunsch regelmässig per E-Mail über neu eingestellte Auktionen anhand einstellbarer Filterkriterien informiert, baut bei jedem Durchlauf eine eigene Suchtabelle auf. Diese wird gefüllt mit einer Untermenge der Daten unserer Haupt-Auktionstabelle, nämlich nur den derzeit laufenden Auktionen. Die Verwendung von INSERT INTO … SELECT ist hier naheliegend