A robust, containerized platform for running MCP servers with browser access, secure routing, and a clear path to scale — available as Fair‑code to self‑host or use as a hosted service.| The Log Book of Manuel Kießling
This is the homepage and blog of Manuel Kießling. I’m a software architect, programmer, Linux and AWS admin, book author, and father of two. You can write me an e-mail at manuel@kiessling.net, or find me on Twitter, GitHub, Xing, and LinkedIn.| Home on The Log Book of Manuel Kießling
Build Static Landing Pages Faster, Especially with AI Creating effective marketing and product landing pages often involves repetitive setup: configuring build tools, defining reusable components, and establishing a consistent style. While AI coding assistants can accelerate HTML and CSS generation, achieving quality and consistency requires a solid foundation. Manually building this foundation for each new page is inefficient. To streamline this process, especially when working with AI tools...| Home on The Log Book of Manuel Kießling
Introducing Platform Problem Monitoring I’d like to share a new open-source project I’ve been working on: Platform Problem Monitoring. In essence, it’s a powerful tool that helps DevOps and platform engineering teams understand what’s going wrong in their systems without active effort or manual analysis. The Problem If you’re running a complex platform with many components, you’re likely already collecting logs in an ELK (Elasticsearch, Logstash, Kibana) stack. But there’s a fun...| Home on The Log Book of Manuel Kießling
Introduction & Context At JOBOO we work in a highly data-driven manner, with all of our application platforms continuously streaming so-called event data records to our data warehouse. Each of these records encapsulates a relevant event from the areas Business (“a new user signed up”, “a user has taken out a subscription”) Application (“an email was sent to a user”, “an error occurred”) Web request (“Page X was requested with these and those parameters”) and Conversion tra...| Home on The Log Book of Manuel Kießling
Einführung & Kontext Bei JOBOO arbeiten wir stark datengetrieben, indem alle unsere Anwendungsplattformen sogenannte Event-Daten kontinuierlich an unser Data Warehouse streamen. Jeder dieser Event-Datensätze kapselt dabei ein relevantes Ereignis aus den Bereichen Geschäftsvorfälle (“ein User hat sich registriert”, “ein User hat ein Abonnement abgeschlossen”) Anwendung (“einem User wurde eine E-Mail zugestellt”, “ein Fehler ist aufgetreten”) Webaufruf (“Seite X wurde mit ...| Home on The Log Book of Manuel Kießling
This is part three of a multi-part tutorial series that teaches how to build real-world software applications with JavaScript, TypeScript, Node.js, and React — starting from zero knowledge, all the way to launching into production. Go to Part 1: Introduction to JavaScript to start at the beginning. Part 3: Node.js: JavaScript on the command line A new context As stated before, running JavaScript code, and therefore, building JavaScript applications, is possible in several different contexts.| Home on The Log Book of Manuel Kießling
This is part two of a multi-part tutorial series that teaches how to build real-world software applications with JavaScript, TypeScript, Node.js, and React — starting from zero knowledge, all the way to launching into production. See Part 1: Introduction to JavaScript if you haven’t read it yet. Part 2: Storing values Variables Let’s now write a more complex JavaScript expression. Please enter and run let a = "hello" in the console.| Home on The Log Book of Manuel Kießling
Preface What you will learn The approach of this tutorial is to teach its readers how to build a fully working software application from zero to production. This means two things: You are not required to have done any kind of software development before getting started with this tutorial. It will introduce and explain everything that is needed to build applications in full detail, assuming no prior knowledge or experience.| Home on The Log Book of Manuel Kießling
Introduction At Joboo.de, we are running nearly all of our production infrastructure on AWS. This includes several web applications running on virtualized Linux servers hosted via EC2. A couple of weeks ago, we saw elevated error levels from these applications, and they all boiled down to the same problem: in order to connect to some of our AWS-managed services like MariaDB (on AWS Relational Database Service), ElasticSearch (on AWS OpenSearch), SMTP (on AWS Simple Email Service), and Redis (...| Home on The Log Book of Manuel Kießling
About 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. Background One of my current tasks at Joboo.| Home on The Log Book of Manuel Kießling
Books The Rise and Fall of American Growth: The U.S. Standard of Living Since the Civil War In the century after the Civil War, an economic revolution improved the American standard of living in ways previously unimaginable. Electric lighting, indoor plumbing, motor vehicles, air travel, and television transformed households and workplaces. But has that era of unprecedented growth come to an end? Weaving together a vivid narrative, historical anecdotes, and economic analysis, The Rise and Fal...| Home on The Log Book of Manuel Kießling
Introduction Most AWS projects start small and simple, with just a single AWS account that contains all the resources and services to build, deploy, and run one or more software projects. Up to a certain point, this is just fine. And even with just one account, resources can be isolated from each other – for example, you can run the EC2 instances of your preproduction stage in a different VPC than the instances of your production stage.| Home on The Log Book of Manuel Kießling
In der Branche des Softwarebauens wird gerne mit Metaphern gearbeitet, um die eigene Tätigkeit anschaulich und greifbar zu machen. Dazu gehört auch, den handelnden Personen verschiedene Rollen zuzuweisen. Klassische Beispiele sind die Software-ArchitektInnen, die ähnlich den ArchitektInnen von Bauwerken das große Ganze im Blick haben sollen und dafür zuständig sind, grobe bis detaillierte Pläne und Rahmenbedingungen aufzustellen, in deren Grenzen solide Softwareprodukte einerseits mög...| Home on The Log Book of Manuel Kießling
Ein schönes Beispiel für professionell gemachte Fake News - oder zumindest grobe Fahrlässigkeit - findet sich unter https://unserplanet.net/e-autos-dreckig. Das Ganze ist auch verbreitet als Facebook-Post unter https://www.facebook.com/unserplanet/videos/188402545408094, unter Einbindung eines grob thematisch verwandten Videos von ZDF heuteplus (dessen Wahrheitsgehalt ich hier nicht beurteilen kann und will). Der verlinkte Artikel sagt: “Eine aktuelle Studie, die vom Trancik Lab des Mass...| Home on The Log Book of Manuel Kießling
The Anatomy of Peace – Second Edition What if in our conflicts with others there is something we want more than solutions? What if conflicts at home, conflicts at work, and conflicts in the world stem from the same root cause? And what if individually and collectively we systematically misunderstand that cause, and unwittingly perpetuate the very problems we think we are trying to solve? These are among the important questions explored in The Anatomy of Peace.| Home on The Log Book of Manuel Kießling
This is a cross post from the GALERIA Kaufhof Technology Blog. About 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.| Home on The Log Book of Manuel Kießling
I'm currently rewriting a Scala Play2 based web service that employs the following body parser: def tolerantJsonParser[A](implicit reader: Reads[A]): BodyParser[A] = parse.tolerantJson.validate(json = json.validate[A].asEither.left.map(err = Results.BadRequest) )(play.api.libs.iteratee.Execution.Implicits.trampoline) def doSomething = Action.async(tolerantJsonParser[SomeThing]) { request = val someThing: SomeThing = request.body ... Not shown here is the implicit Reads that takes care of tran...| Home on The Log Book of Manuel Kießling
I recently played around with graphs and tried to implement Depth-First Search in a functional and recursive way. In the following examples we are talking about the following simple directed unweighted graph with vertices a to e: (click to enlarge) Each vertex is represented by an object of the following class: class Vertex() { val name: Char val edges: Set[Vertex] } Let's start with an approach that is neither functional nor recursive, but at least straight-forward: def dfsMutableIterative(s...| Home on The Log Book of Manuel Kießling
In one of the JourneyMonitor puppet manifests, we have a defined type that allows us to dynamically create cronjob files on target machines: define createCronjobFile { file { "/etc/cron.d/journeymonitor-${name}": owner => "root", group => "root", mode => "0644", content => template("cronjobs/etc/cron.d/journeymonitor-${name}.erb"), } } Let’s assume that we have a system where we want to end up having cronjobs /etc/cron.d/journeymonitor-foo and /etc/cron.d/journeymonitor-bar. This is achieve...| Home on The Log Book of Manuel Kießling
About 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, respectively. The code of the final application is available at https://github.com/manuelkiessling/play2-compiletime-cassandra-di. The goal At the end of this post, we have created a small Play 2.4.6 Scala application with w...| Home on The Log Book of Manuel Kießling
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, der unser Motto Wir ♥ E-Commerce! anschaulich macht. Mit dabei meine Kollegen Beate Radics, Rico Pfaus, und ich.| Home on The Log Book of Manuel Kießling
Über diesen Artikel Im Kontext des GALERIA Kaufhof Technology Blogs stellt der vorliegende Artikel ein Update und eine Erweiterung des Beitrags von September 2014 dar. Schon damals existierte ein klar definiertes Set an Vorgaben, welches den Rahmen für Makro- und Mikroarchitekturfragen gesteckt hat und das Projekt in Hinblick auf Fragen der System- und Softwarearchitektur leitet. In den vergangenen Tagen haben wir begonnen, ausgehend von den Erfahrungen bis heute und unserer jetzigen Perspe...| Home on The Log Book of Manuel Kießling
The following applies to Play 2.4 projects for Scala 2.11. When setting up a Play2 Scala project, two test case files are created automatically: test/ApplicationSpec.scala and test/IntegrationSpec.scala. The testcases therein are based on specs2. If you prefer to write your test cases using ScalaTest (I certainly do), then you need to proceed as follow: Change the libraryDependencies in file build.sbt from: libraryDependencies ++= Seq( jdbc, cache, ws, specs2 % Test )| Home on The Log Book of Manuel Kießling
About this post Already working on an sbt-based Scala project with two sub-projects, I wanted to create a third sub-project, a Play2 application. The following describes what worked for me. Creating the sub-project structure Before adding the third sub-project, my sbt project structure looked like this: importer/ └ src/ ├ main/ └ test/ spark/ └ src/ ├ main/ └ test/ project/ └ plugins.sbt build.sbt Within build.| Home on The Log Book of Manuel Kießling
About this post 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. Preparing the upgrade The code base for the project – the CONTROL component of the JourneyMonitor project – lives at https://github.| Home on The Log Book of Manuel Kießling
Über diesen Artikel Dies ist ein Crosspost vom GALERIA Kaufhof Technology Blog. Vor kurzem standen wir vor der Herausforderung, eine kleine Onlineanwendung für eine zeitlich begrenzte Rabattaktion zu realisieren, die keinerlei Verbindung mit dem Galeria.de Webshop hatte. Während der Technologiestack rund um unseren Onlineshop auf Scala, Ruby und Casssandra basiert, wurde hier die Entscheidung gefällt, die Anwendung außerhalb unserer bestehenden Dienste und Systeme zu realisieren, und auc...| Home on The Log Book of Manuel Kießling
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. If set up as describes below, you can manage your project via sbt, and you will be able to run your test cases via sbt test. Also, after setting things up this way, the project can be opened and used in IntelliJ IDEA 14 as an sbt project.| Home on The Log Book of Manuel Kießling
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.| Home on The Log Book of Manuel Kießling
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:| Home on The Log Book of Manuel Kießling
Dies ist ein Crosspost vom Galeria Kaufhof Technology Blog. Als Anfänger in der Arbeit mit Scala stehe ich aktuell vor der Aufgabe, eine einfache Webservice API in Play2 zu realisieren. Der Webservice hat einen Endpunkt /api/experiments, über den via POST ein A/B Test (bzw. Experiment) mit 2 oder mehr Varianten angelegt werden kann. Der Body eines solchen Requests ist eine JSON Struktur, die den A/B Test beschreibt: { "name": "Checkout page buttons"| Home on The Log Book of Manuel Kießling
Please do not read this, this, this, this, and this.| Home on The Log Book of Manuel Kießling
This is a cross-post from the official Galeria Kaufhof Technology Blog I have learned the following through the great support and advice of my coworkers Jens Müller and Martin Grotzke. About I have recently joined the new multi-channel retail eCommerce project at Galeria Kaufhof in Cologne. This meant diving head-first into a large-scale Scala/Play/Akka/Ruby software ecosystem, and as a consequence, a lot of learning (and unlearning, and disorientation, and some first small successes), as I...| Home on The Log Book of Manuel Kießling
Please do not read this, this, this, this, and this.| Home on The Log Book of Manuel Kießling
The following should probably be obvious, but I had a surprisingly hard time figuring out the official Cisco documentation. The scenario is as follows: a gateway Cisco router provides internet access via NAT for, say, your office. It therefore has an external interface (called Dialer0, for example) which is connected to the uplink (this could e.g. be a DSL line), and an internal ethernet interface connected to the internal office network: ^ | | Dialer0: 87.| Home on The Log Book of Manuel Kießling
About 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. Requirements One of the key points of this setup is that everything that is needed for the application itself to run and the tests to works, and every other relevant task re...| Home on The Log Book of Manuel Kießling
The following solution is based on the work of my coworker Marcel Frank. The PHP library Mockery allows to use a simulated version of certain objects within unit tests, where objects are passed into methods as dependencies. This form of simulation is called mocking. Instead of trying to explain why simulating these objects in the tests makes sense, I will try to illustrate the need for it with an example.| Home on The Log Book of Manuel Kießling
About With this series I would like to provide a comprehensive hands-on tutorial that explains step-by-step how to build a centrally managed Linux server infrastructure using Puppet. Target audience I believe that the readers who will get most out of this series are Linux systems administrators who already manage a small-sized network of server systems and wonder how they can grow the existing infrastructure – without having to grow the amount of time and effort put into managing these syst...| Home on The Log Book of Manuel Kießling
About In Part 1 of Building manageable server infrastructures with Puppet, we have set up two virtual Linux systems, a puppetserver and a puppetclient. We reached an important first milestone: We installed and set up the Puppet server and Puppet client software on their respective machines, and we authenticated the Puppet client with the Puppet server. We are now going to use this setup to start configuring our puppetclient system through the Puppet server on the puppetserver system.| Home on The Log Book of Manuel Kießling
About In Part 2 of Building manageable server infrastructures with Puppet, we started to configure our puppetclient machine by writing a first, simple manifest on the Puppet master. We are now going to look at more complex configuration setups and we’ll learn how to put our manifests into a useful structure. Modules Keeping the managed configuration for a server infrastructure in just one file won’t scale well once this infrastructure grows beyond a handful of systems.| Home on The Log Book of Manuel Kießling
About In Part 3 of Building manageable server infrastructures with Puppet, we created our first reusable real-world Puppet module, apache2. In part 4 and following, we will stop using examples and start building a fully featured infrastructure with users and rights management, Nagios monitoring, file servers, load balancers, web servers, databases, VPN, development systems et cetera. Managing user and group accounts through Puppet At the company I work for, I use Puppet to manage the Unix use...| Home on The Log Book of Manuel Kießling
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. The first thing we need is a raw image file which mirrors the exact layout of the physical hard drive in our physical server. In our example scenario, the physical box has one hard drive at /dev/sda with a /boot Partition on /dev/sda2 and a physical LVM volume on /dev/...| Home on The Log Book of Manuel Kießling
Ü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. Diese Software-RAIDs bringen zwar nicht die Performance eines dedizierten hochwertigen Hardware-RAID-Controllers mit, sind aber definitiv mehr als eine Notlösung. Die Benchmarks am Ende des Artikels zeigen, dass sich zumindest für ein strukturell einfaches RAID1-Setup keine praktisch releva...| Home on The Log Book of Manuel Kießling
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. Dies geht mit folgendem Kommando: mount -t ext4 -o loop,offset=OFFSET /var/lib/libvirt/images/foo.raw /mnt Das Problem ist der Offset – es ist eine Byte-Angabe die dem Mount-Befehl sagt, an welcher Stelle in der RAW Datei die Partition beginnt. Diese Zahl muss man zuerst ermitteln.| Home on The Log Book of Manuel Kießling
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, wobei eth0 ein Teil dieser Bridge ist: ~# brctl show bridge name bridge id STP enabled interfaces lan0 8000.dc0ea1540a0e no eth0 vnet0 vnet1 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 B...| Home on The Log Book of Manuel Kießling
Aus Versehen Ubuntu Desktop installiert, jetzt soll’s aber doch ein Server werden? So wird man die grafische Oberfläche komplett los: apt-get remove \ --purge \ whoopsie \ network-manager \ lightdm \ ubuntu-desktop \ unity* \ gnome* \ xserver-xorg-core xserver-xorg compiz-kde compizconfig-backend-kconfig kdelibs5-data libattica0.3 libdlrestrictions1 libkdecore5 libkdeui5 apt-get --purge autoremove| Home on The Log Book of Manuel Kießling
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 eine...| Home on The Log Book of Manuel Kießling
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.| Home on The Log Book of Manuel Kießling
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,...| Home on The Log Book of Manuel Kießling
Sowohl selbstgeschriebene als auch fremde Applikationen für die Linuxkonsole schreiben häufig Ausgaben nach STDOUT, zum Beispiel, um über den Fortschritt ihrer Operationen zu berichten: Starte Foo... Foo beendet. Beginne mit Migration... Element 1 migriert... Element 2 migriert... Element 3 migriert... Migration abgeschlossen. Richtet man solche Skripte als regelmäßige Batchläufe über cron ein, leitet man diese Ausgaben vielleicht in eine Datei um, so dass man über Logfiles der Batchl...| Home on The Log Book of Manuel Kießling
What this text is about 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. It doesn’t make much sense to completely rephrase Uncle Bob’s blog post here, thus reading his text first is definitely a prerequisite for understanding mine. In it, he mainly describes the Dependency Rule, which, when applied to an architecture where different areas of the software are organized as circles ...| Home on The Log Book of Manuel Kießling
This is a multi-part tutorial series. You are currently reading part 1. Some days ago, my son asked me how computer games are made. He’s five years old and couldn’t quite imagine how games are created, because “you can’t just paint them like animation movies, can you?”. I quickly realized that explaining it to a child is really difficult. And so I decided to create a game, with him as the Creative Director who decides what the game should be like.| Home on The Log Book of Manuel Kießling
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. Well, first of all, there may really be the need for people to change something about their work, and so the motivation and the goal of the manager might be valid and important.| Home on The Log Book of Manuel Kießling
As a JavaScript developer writing general-purpose libraries, you probably wish you could go fully universal, that is, you might want to create a library: that can be used in the browser and in Node.js – without any hacks for either platform, and without code-duplication that transparently utilizes AMD via RequireJS in the browser and CommonJS via require in Node.js – without any hacks for either platform, and without code-duplication with a Jasmine spec suite which runs in the browser and...| Home on The Log Book of Manuel Kießling
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. Die Folien des Talks gibt es hier zum Download als PDF und hier bei Slideshare. Einen Videomitschnitt gibt es bei Ustream. PHP 5.4: Die wichtigsten Neuerungen im Überblick View more PowerPoint from Manuel Kießling| Home on The Log Book of Manuel Kießling
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. Blueprints versus finger-pointing Let’s start by looking at how "typical" object-oriented languages actually create objects.| Home on The Log Book of Manuel Kießling
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. The result is playable at http://manuel.kiessling.net/projectile/. The project source code is hosted at https://github.| Home on The Log Book of Manuel Kießling
Some weeks ago I started working on a new open source software, called bivouac. 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). Besides these “feature goals”, my secondary goal is to learn how to architect JavaScript applications that are relatively complex, with domain-driven design and a strong separat...| Home on The Log Book of Manuel Kießling
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. My English is awful as always and the transcript has some funny flaws, but if you like, check out the audio version or the text version below: Peter Armstrong I’m here with Manuel Kiessling, who’s a software developer and IT manager liv...| Home on The Log Book of Manuel Kießling
Some weeks ago I wrote about deploying Symfony2 Applications to Amazon AWS with Scalarium. It turned out that the described methodology can be improved in several ways. Here’s how. First, let’s discuss what’s suboptimal with the previously described approach. The basic idea was to provide a custom Chef recipe which is executed on our instances whenever our Symfony2 application gets deployed. This recipe took care of executing the tasks which need to be done whenever the application is d...| Home on The Log Book of Manuel Kießling
If you set up an OutlineView in Interface Builder and connect your Controller as its dataSource and delegate (and provide the methods there accordingly), you will notice that - (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item never get’s called. The reason might very simple: in Interface Builder, in the attributes inspector for your OutlineView, you can define the Content Mode as View Based or Cell Based. If you simply want ...| Home on The Log Book of Manuel Kießling
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. It was 2005, and I had set up the whole system in a way I’m still quite proud of.| Home on The Log Book of Manuel Kießling
Important Note The methodology explained here is outdated, please read Deploying Symfony2 Apps via Scalarium: Improved Methodology for an updated version. About This article describes how to use the cloud-based cluster-management platform Scalarium in order to automatically mass-deploy Symfony2 applications with a MySQL database backend onto clusters of Amazon EC2 virtual machines by creating a special Symfony2 environment, using a custom Chef recipe, and making use of Doctrine migrations.| Home on The Log Book of Manuel Kießling
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. However, I quickly came to the point where I needed to stub out a dependency in one of my modules, and as far as I can see, Vows doesn’t provide mocking/stubbing.| Home on The Log Book of Manuel Kießling
It just dawned on me that this is really the only job application form that makes sense, isn’t it?| Home on The Log Book of Manuel Kießling
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”. (Jon points out he didn’t invent it, he heard it from Kevlin Henney). I have been thinking about this ever since, and here is what I came up with.| Home on The Log Book of Manuel Kießling
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. So, I had this (rather obvious) gut feeling that working iterative in software projects makes a lot of sense, I’ve heard all the arguments and explanations and examples and stuff like that, and I probably already “got it”, but I thought it could make s...| Home on The Log Book of Manuel Kießling
Das Blog von O’Reilly Deutschland hat in seiner Reihe “Karriere(n) in der IT” ein kurzes Interview mit mir geführt: https://blog.oreilly.de/2011/01/31/job-portrait-softwarenentwickler-bei-myhammer-de/ Zum Zwecke der Archivierung drucke ich das Interview im Folgenden auch hier ab: In der Reihe „Karriere(n) in der IT“ stellen wir Ihnen heute Manuel Kießling vor, der die Softwareentwicklung des Handwerks- und Dienstleistungsmarktplatzes MyHammer.de verantwortet. Sein Aufruf an den IT...| Home on The Log Book of Manuel Kießling
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. Also, ich wurde nach Literatur zum Thema Management bzw. Mitarbeiterführung gefragt. Spontan fiel mir dazu erst mal nicht viel ein, weil ich keinen Kanon dazu im Hinterkopf habe, und weil Führungsqualitäten sowieso nur bedingt anlesbar sind.| Home on The Log Book of Manuel Kießling
Platform Health Viewer (kurz PHV) ist mein aktuelles Ruby on Rails Hobbyprojekt. Sobald es einen stabilen Zustand erreicht, wird dieses Tool das Sammeln und Visualisieren verschiedener statistischer Daten, wie sie typischerweise von Internetplattformen erzeugt werden, schnell und leichtgewichtig ermöglichen. Beispiele für diese Daten sind Dinge wie die CPU Last einzelner Systeme, Benutzerlogins, Anzahl der Seitenaufrufe usw. Die Applikation basiert in erster Linie auf Rails, der HTTP Server...| Home on The Log Book of Manuel Kießling
Platform Health Viewer is my current Ruby on Rails pet project. Once stable, it will allow users to easily collect and visualize different types of statistical data which is typically produced by internet platforms, like CPU performance, user logins, HTTP requests etc. The main application is build on Rails, the server used for data collection is written in node.js, the web interface makes heavy use of jQuery and uses Raphaël to create SVG graphs.| Home on The Log Book of Manuel Kießling
Ich hatte tatsächlich einmal eine ganz eigene Idee. Und sie war gut, auch nachdem ich sie mehrmals durchgekaut und von allen Seiten beleuchtet hatte. Wieso eigentlich sollte man die Prinzipien und Methodiken von testgetriebener Softwareentwicklung nicht auch auf den Bereich der IT-Systemadministration übertragen? Also in aller Kürze: Ich definiere Tests, die das vom noch zu implementierenden System erwartete Verhalten prüfen, sehe zu wie diese Tests fehlschlagen, und erfülle dann schritt...| Home on The Log Book of Manuel Kießling
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. Die Autoren versprechen: Write less code.| Home on The Log Book of Manuel Kießling
Einleitung Testgetriebene Entwicklung (test driven development) ist eine Arbeitsmethodik, die Softwareentwickler dabei unterstützt, wichtige Qualitätsprinzipien bei der Erstellung von Code zu befolgen: Lose Kopplung (loose couping) – weil man beim Schreiben von Unittests, dem zentralen Werkzeug der Methodik, ganz automatisch dazu verführt wird, innerhalb der Tests von Codeunits (Klassen, Methoden usw.) auszugehen, die möglichst wenige Abhängigkeiten zu anderen Modulen haben – einfach...| Home on The Log Book of Manuel Kießling
Klar, über Geschmack lässt sich immer streiten, aber über den Geschmack von Barbecue Saucen wahrscheinlich am meisten. Die beste Sauce, die zu probieren ich bisher das Vergnügen hatte, ist jedenfalls völlig zweifelsfrei die “Bone Suckin’ Sauce regular” von Ford’s Food. Phil Ford war Immobilienmakler und hat aus einem Hobby heraus angefangen, diese Sauce zu entwickeln. Sie hat nur wenig Raucharoma und ist nicht scharf, im Vordergrund steht vor allem ein fantastisches Tomatenaroma ...| Home on The Log Book of Manuel Kießling
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. Das Wichtigste: Auf übertriebene effekthascherische Zuckerguß-Ungetüme wird verzichtet – die Torten zeichnet neben der spürbaren handwerklichen Qualität vor allem aus, dass sie nicht zu süß sind. Als Schwiegersohn einer Konditoreimeisterin bin ich sehr verwöhnt, aber der Kuchenladen hat mich noch nie...| Home on The Log Book of Manuel Kießling
PHPRestfulSubversion… …provides a RESTful JSON webservice API to access information in your Subversion repository, …provides tools to cache your Subversion repository in order to make it searchable through the webservice in a fast and simple manner, …is a library of PHP classes which you can use to implement more complex use cases. A secondary goal of this project is to explore how to create very clean PHP code using a 100% test-driven approach.| Home on The Log Book of Manuel Kießling
Meine alte Homepage (2000-2005) ist wiederauferstanden und unter http://old.manuel.kiessling.net/ erreichbar.| Home on The Log Book of Manuel Kießling
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. Welchen Zweck erfüllt siqqel? Die verschiedensten Leute in einem Unternehmen müssen aus den verschiedensten Gründen auf relationale Datenbanken zugreifen. Klassischerweise gibt es zwei Szenarien: Ich brauche eine einfache und kurze ...| Home on The Log Book of Manuel Kießling
Dieser Artikel ist Work in Progress! Vorüberlegungen Dieses Dokument beschreibt Werkzeuge und Prozesse, um Datenbankänderungen innerhalb von großen Softwareprojekten einfach, fehlerfrei und nachvollziehbar durchzuführen und zu managen. Zentraler Ansatz dieser Lösung ist: Datenbankänderungen und Codeänderungen sind prinzipiell genau dasselbe. Denn Datenbankänderungen haben genau wie Codeänderung die folgenden Eigenschaften: Sie ändern das Verhalten des Softwaresystems Sie entwickeln ...| Home on The Log Book of Manuel Kießling
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, zum Beispiel so: INSERT INTO Suchtabelle SELECT a, b, c FROM Auktionstabelle W...| Home on The Log Book of Manuel Kießling
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.| The Log Book of Manuel Kießling
How time-tested software engineering practices amplify the effectiveness of AI coding assistants.| The Log Book of Manuel Kießling