About 5 months ago I ordered a n̵e̵w̵ ̵t̵o̵y̵ ̵f̵o̵r̵ ̵m̵e̵ Christmas present for my son. A Toniebox. It seems there was quite a hype about them at the time since it took almost half a year until it finally arrived, but that is another story.

It’s basically a very simple audio player for kids, where you play an audiobook by placing the appropriate toy figure (a “tonie”) on it and it starts playing.

The content gets downloaded from the companie’s servers and cached on the device.

Of course I wanted to have a closer look from the technical side…

On 16.8.2017 I held a talk at the Technologieplauscherl #50 in Linz.

The topic was “Programmer’s Guide to Sound and Music”.

You can find the slides here. If you’re interested in slides with speaker notes (they also contain some additional links) and/or the sample files you can find those here.

If you understand German, you can also watch me give the presentation on youtube:


When writing modern JavaScript front-ends (independent of your favorite flavor — Angular(JS, 2̶), Ember, React, ThisWeeksNewShiny) you will have run into the requirement to debug some issue.

With the typical HTML/JS front-ends getting more and more complex, chances are you are actually hitting this problem more and more — and trust me, switching to next weeks great framework will not magically save you from ever having to debug a JavaScript issue again.

Debugging is a skill

Just like writing clean code, effective debugging 🐛is a skill that can be learned & trained. The big software vendors of the world know this very well, as…

On the 1st and briefly on the 2nd (more on that later) of March I was lucky to attend the Topconf Linz 2017.

I had a really great time and talked to lots of awesome people.

Talks I visited

You can find the full schedule here.

  • (Opening Keynote) Lukáš Ježek — Google’s Load Shedding
  • Ivan Krylov — What to expect from Java 9
  • Armin Ronacher — Rust for Serious Developers
  • Corinna Baldauf — 12 Work Hacks
  • Michael Sperber, Nicole Rauch — The day after tomorrow: Let the machine do the coding
  • Milen Dyankov — What’s NOT new in modular Java?
  • Ben Linders —…

Sometimes Boys just wanna have fun…

I found my old GameBoy Color and a classic game: Pokémon Gold!

Problem: The save-feature no longer worked, when you played, saved, powerd the GameBoy off & on again, there was only the “new game” option, no “continue”.

Because of previous internet research I already knew what the problem was / what to do:

Step 1: locate my GameBoy-Cartridge-Screwdriver that I already made some time ago following this tutorial video.

Selfmade GameBoy-Cartridge Screwdriver

Step 2: check the battery type & run to the local electronics store to pay way too much for one petty cell.

Is a database view which responds without an error to a “SELECT * …” query bug free?

Sounds simple and obvious, until recently I would not have hesitated to say: Yes, sure.

Turns out, it’s more complicated than that.


Recently I ran into exactly this problem. There was a database view that I had to query and show the results. The code worked on my local machine, it worked on the test-instance, but failed on the integration environment.

At first I suspected an issue in the code that queried the database view. It was a relatively lengthy query (about 30…

A few days ago I ran into an issue in a rather large application that uses Spring & Hibernate.

I found myself debugging an issue where Hibernate tried to update some entities that I had just deleted, the situation was basically like this:

  1. Load entities A, B, C of type Dummy.
  2. Some logic determines that those entities should get deleted.
  3. Ran a Hibernate CriteriaDelete query which basically did “DELETE FROM DUMMY WHERE ID IN (A, B, C);”
  4. The transaction gets committed and suddenly Hibernate tried to run updates on the entities. …

Recently I have been playing around with an idea, after a few discussions with different people, it seems to be a solution in search of a problem though.
Let me set the stage for how it started:

I was thinking about how it could be made easy to build generic business apps (forms, forms and more forms) better, faster, more flexible & cheaper.

A proven method

What has often been done and implemented in various ways is something like this:

  • The actual apps people are working with are basically thin-clients.
  • The apps interpret some simple declarative language that describes the UI.
  • For all…

As my day-job is typically writing (modern) enterprise Java applications I have an open ear for news in the Java world.
Luckily I can currently do all of my work with the most recent version of Java (which means currently Java 8). Apart from some nice features like lambdas, Java 8 also brought us the Nashorn (oracle post, openjdk post) JavaScript engine.

Although having heard a bit about it and read some short examples, I’ve never actually played with it until a few days ago.
Here’s what I tried.

Creating an instance of an engine is easy:

public TestScriptExecutor() {…

In part one of this article I presented an approach to get started with replacing a legacy system.
By now we’ve picked one specific subsystem of a larger legacy application as the focus for the first implementation phase of the replacement system.

To make this a little easier to follow, let’s assume our end goal is to replace a big application that does all the internal management of a fictional slot-machine maker&distributor. Let’s call the company SlotManiacs and the application we are replacing is SlotManager3000.

In the first steps we already decided that the part of the application that we’d…

Paul Klingelhuber

Software engineer from Austria. Passionate about software, likes photography, addicted to podcasts and always busy. http://paukl.at

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store