RSSAmplifier

Blog

Home on The Log Book of Manuel Kießling

Recent content in Home on The Log Book of Manuel Kießling

manuel.kiessling.netRSS feed ↗87 posts

Latest posts

SiteBuilder Remote Assets: Cross-Vertical Architecture and S3 Integration

Describe in chat → see the result → changes land in a GitHub PR. The full loop. SiteBuilder is the content management tool that creators love to use and engineering loves to support. SiteBuilder is an open-source tool that lets non-technical teams edit web content through chat while engineers keep Git workflows and full control. Marketing describes changes in plain language; an AI agent makes the…

SiteBuilder Architecture Insights: Agent Tools and Execution Context

Describe in chat → see the result → changes land in a GitHub PR. The full loop. SiteBuilder is the content management tool that creators love to use and engineering loves to support. SiteBuilder is an open-source tool that lets non-technical teams edit web content through chat while engineers keep Git workflows and full control. Marketing describes changes in plain language; an AI agent makes the…

Introducing SiteBuilder: Edit Web Content with Natural Language

Describe in chat → see the result → changes land in a GitHub PR. The full loop. SiteBuilder is the content management tool that creators love to use and engineering loves to support. The Problem Here’s a situation that will sound familiar to many engineering teams: the marketing department needs to change a headline on the website. Or update a phone number. Or tweak some copy before a…

What if software shipped with a software engineer?

A recent experiment made the rounds showing an LLM acting as the whole application: every HTTP request is handled by the model, that designs schemas, renders HTML, and mutates state through tool calls: “Why write code if the LLM can just do the thing?”. It worked — barely. It was slow, expensive, and visually inconsistent. But it surfaced a useful question: if inference keeps getting cheaper and…

Introducing MCP as a Service: an open MCP server management platform

Introduction & Context Over the last months I have been building MCP as a Service — an open platform with the goal to allow for deploying and operating MCP servers without having to think about infrastructure. The goal is simple: give AI agents a reliable way to use real tools through MCP servers that you can launch in seconds, observe visually, secure properly, and connect from anywhere. MCP as a…

New Open Source project: An AI-Friendly Static Landing Page Generator

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…

Senior Developer Skills in the AI Age: Leveraging Experience for Better Results

Abstract Embedded into powerful IDEs like Cursor, large-language models are now able to act as effective Coding Assistants that can significantly enhance the output and abilities of professional software engineering teams. However, ending up with the desired functional and non-functional results, as well as an acceptable code quality, is not something that will take care of itself. Together with…

New project: Platform Problem Monitoring

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…

Cost and performance optimization of Amazon Athena through data partitioning

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…

Kosten- und Performance-Optimierung von Amazon Athena durch Daten-Partitionierung

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…

Node & React Beginner Tutorial — Part 3: Node.js: JavaScript on the command line

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…

Node & React Beginner Tutorial — Part 2: Storing values

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.…

Node & React Beginner Tutorial — Part 1: Introduction to JavaScript

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…

Getting rid of temporary failures in name resolution on Amazon Elastic Compute Cloud

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…

Tutorial: Single Page Applications with a Serverless Backend and Infrastructure as Code

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…

January 2021 Reading Recommendations

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?…

Single Sign-On and Resource Separation on AWS

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…

Die Metapher der Stadt für das Bauen und Betreiben von Softwareprodukten

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…

Wie Studien verdreht werden

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…

March 2018 Book Recommendations

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…

How Cassandra's inner workings relate to performance

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…

Scala Play2: Tolerant JSON body parsing with dedicated error handling

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…

Scala: Traversing a graph in a functional way

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…

Puppet: Evaluating defined types for each element in an array in a non-brittle way

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…

Compile Time Cassandra Injection in Play 2.4

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…

Video: 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, der unser Motto Wir ♥ E-Commerce! anschaulich macht. Mit dabei meine Kollegen Beate Radics, Rico Pfaus, und ich.

Die Architektur der Galeria.de Plattform im Kontext der Produktentwicklungs-Organisation

Ü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…

Play2: Switching from specs2 to ScalaTest

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…

Adding a Play2 application as a sub-project to an existing sbt project

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…

Upgrading a Symfony project from 2.6 to 3.0

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…

Entwicklung und Betrieb einer Symfony2 Webanwendung – Teil 1

Ü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…

Setting up an sbt-based project for Scala 2.11 with ScalaTest support

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.

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…

Interview: 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…

Transformieren und Validieren von JSON Requests in Play2

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…

Things you should not read, Vol. 2

Please do not read this, this, this, this, and this.

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

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…

Things you should not read, Vol. 1

Please do not read this, this, this, this, and this.

Limiting access to forwarded ports in Cisco iOS

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…

Creating a useful AngularJS project structure and toolchain

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…

Mocking Dependencies in PHP Unit Tests with Mockery

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…

Building manageable server infrastructures with Puppet: Part 1

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…

Building manageable server infrastructures with Puppet: Part 2

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…

Building manageable server infrastructures with Puppet: Part 3

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…

Building manageable server infrastructures with Puppet: Part 4

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…

Converting a running physical machine into a KVM virtual machine

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…

Software-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. 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…

Direktes 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. 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…

KVM 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, 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…

Desktop 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: 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…