The third part of this tutorial series introduces Node.js, a JavaScript interpreter that runs on the command line, and shows how to build a simple command line application in this context.
This part introduces JavaScript, a widely used programming language. It guides beginners on how to write and run JavaScript code in a web browser, and covers the most basic components of the language such as values and types.
The applications on our EC2-based virtual machines started to repeatedly show 'temporary failure in name resolution' errors. Here is how we solved the problem.
From zero to production: this extensive guide describes in detail how to create and deploy a React-based web app frontend using TypeScript and Redux Toolkit on top of a Node.js based AWS Lambda backend with a DynamoDB database, connect and integrate them through API Gateway and CloudFront, and explains how to codify and automate the required cloud infrastructure and deployment process using Terraform.
This tutorial explains a battle-tested solution to keep resources and services of different projects on AWS securely separated – while still providing convenient single sign-on with clean and manageable access rights management.
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'.
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.
For one of my current projects, I needed to gain full control over the request-body-to-case-class-object transformation of my Scala Play2 controller action. Here's the solution I came up with.
Passing an array when declaring a defined type automatically evaluates the defined type once for each element of the array, but care must be taken if no array is declared in the Hiera structure for a given target system.
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.
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.
Dieser Beitrag erläutert die wichtigsten Eckpfeiler der Software- und System-Architektur der Galeria.de Online Plattform, und zeigt das Verhältnis der Architektur zu Vorgehensmodell und Aufbauorganisation auf.
Already working on an sbt-based Scala project with two sub-projects, I wanted to create a third sub-project, a Play2 application. This post describes what worked for me.
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.
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.
This post describes how to set up a new Scala 2.11.7 project with ScalaTest 2.2.4 support using sbt 0.13.9 on Mac OS X 10.11 “El Capitan” with Java 1.8.
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.
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.
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.
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).
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.
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.
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.
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.
The second part of my Puppet series explains how to use the infrastructure that was set up in part 1 in order to automatically and centrally manage the configuration of a Puppet client system.
Part 3 of the series shows how to extend the first simple manifest developed in the previous part into a more complex one, and how to structure it into a generic and reusable module.
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.
Let’s assume you have a physical machine running a Linux system, and you would like to convert this system into a virtual KVM/QEMU machine, keeping everything as close to the original as possible. What follows is my approach.
Ü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.
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.
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.
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.
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.
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.
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.
I would like to contribute to Uncle Bob’s concept of The Clean Architecture by demonstrating how its principles could be applied to an actual Go application.
Some days ago, my son asked me how computer games are made. The result is a simple yet fully-functional 2D space shooter, available on Facebook. Here’s how it’s done.
Every now and then, a manager at your company might say something like “We need to work longer” or “Our people need to work longer”. Here’s why I don’t think it is a good idea to say this.
Writing JavaScript modules that can be seamlessly included in client-side as well as server-side applications, and providing Jasmine test suites which allow to test these modules in a browser environment as well as a Node.js environment is possible without any dirty workarounds.
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.
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.
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.
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).
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.
Some weeks ago I wrote about deploying Symfony2 Applications to Amazon AWS with Scalarium. It turned out that the described methodology can be refined in several ways. Here’s how.
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.
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.
I’m about 3.5 hours into node.js development, I guess that qualifies me to give advice on it on this Internet thing. Being the BDD fanatic that I am, I wanted to start off behaviour-driven right from the beginning, and Vows looked like a good choice.
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”.
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.
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.
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.
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.
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.
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.
Dieses Dokument beschreibt Werkzeuge und Prozesse, um Datenbankänderungen innerhalb von großen Softwareprojekten einfach, fehlerfrei und nachvollziehbar durchzuführen und zu managen.
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
Vor mittlerweile auch schon wieder einer halben Ewigkeit hatte ich mal eine kurze Artikelserie zum Thema Serverlast-Problemlösungen bei MyHammer online, die ich nun wieder ausgegraben habe.