Lees in Nederlands

Welcome to gogognome.nl

Welcome to the website of Sander Kooijmans. This website contains software and articles that I have produced in my spare time. I also occasionally add posts about software engineering.

Here are my recent posts:

Gogognome's Ringtone nr 1 published

After many years I finally publish a new song.

My presentation at PyData Berlin is available on YouTube

As announced here, I gave a presentation at PyData Berlin on October 10, 2019. The presentation has the title “How to write tests that need a lot of data?”

The contents of the presentation were already available in this post before the recording was published.

Here is the recording of my presentation, hosted on YouTube:

How to write tests that need a lot of data?

Based on a true story.

I explain how to write tests that need a lot of data at PyCon DE & PyData Berlin

On October 10th I will explain how to write tests that need a lot of data at PyCon DE & PyData Berlin. Here is the abstract of my presentation:

Math Max

A parody on “Mad Max Fury Road” commenting on the behaviour of Javascript’s math.max() function that might confuse people without mathematical background as shown in this reddit post.

I explain how computer chess works at T-DOSE in Eindhoven

On Saturday May 11, 2019, I will give a presentation called “How stuff works: computer chess” at the T-DOSE conference in Eindhoven. Here is the abstract of my presentation:

Binding multivalue-keys with INI-files using Microsoft.Extension.Configurations

Binding multivalue-keys with INI-files using Microsoft.Extension.Configurations Microsoft’s documentation on their new configuration framework is hard to find for two reasons: It is not clear what name you should search for? Microsoft.Extension.Configurations? ASP.NET configuration? Dotnet configuration? The documentation that is available omits many details. Disclaimer: my experiences are based on version 1.1.2 of the Microsoft.Extension.Configuration libraries. The latest version of the library at the date of publication is 2.

Gogo Chess published

Gogo Chess is a computer chess game that plays chess better than me. Today I publish it for the first time. The program is still under development, but you can already give it a try.

Test-Driven Development compared to double-entry bookkeeping

What is so wrong with Test-Driven Development? In What is so wrong with TDD on quora.com Robert Martin (Uncle Bob) compares programmers not using Test-Drive Development (TDD) to accountants not using double-entry bookkeeping. Ominously he concludes this comparison with: “Of course, if an accountant tried any of these excuses, they’d be fired or jailed. That day will come for programmers too. It’s just waiting on the right disaster.” To me, what is so wrong with TDD?

The Visitor Pattern Revisited

Introduction Recently I was working on (gogo text search), a Java library for text search. One of the features of this library is that it can search text in strings using expressions like foo and bar and not (blub or blob). A parser converts patterns to a tree of Criterion objects. Here is a class diagram of the Criterion interface and its implementations: . After parsing the pattern foo and bar and not (blub or blob) to a tree, the tree looks like this (object diagram): .

Score Surprise published

I have published the score of my own composition ‘Surprise’. Using the program MuseScore 2 I could turn my handwritten score into a professional looking score. You can download the song and the score from my music page.

I give presentions at NextBuild 2016 and Clean Code Days 2016

On Saturday April 16, 2016 I will give a presentation called “Dynamic Progamming: The techinque behind the diff tool explained” at NextBuild 2016 in my old home town Eindhoven.

On Wednesday June 29, 2016 I will give a workshop: “How invariants help writing loops” at the Clean Code Days 2016 in Munich. The next day I will give a presentation: “Let tests drive or let Dijkstra derive?” at the same conference.

How invariants help writing loops

On Saturday May 30, 2015 I gave a workshop called “How invariants help writing loops” at NextBuild 2015 in my old home town Eindhoven. At ProgSCon 2015 I gave the same workshop.

For people who would like to know what I have talked about here is a PDF containing the summary of my presentation and the exercises in case you want to practise the presented technique yourself.

New layout for gogognome.nl

Since today my website has a new layout. I switched from using WordPress to Hugo. Why?

I give a workshop at NextBuild 2015 in Eindhoven

On Saturday May 30, 2015 I will give a workshop called “How invariants help writing loops” at NextBuild 2015 in my old home town Eindhoven. Here is the abstract of my presentation:

I give a workshop at ProgSCon 2015 in London

On Friday April 17, 2015 I will give a workshop called “How invariants help writing loops” at ProgSCon 2015 in London. Here is the abstract of my presentation:

New picture of me courtesy to Olaf Lewitz

Olaf Lewitz, Trust Artist. Thank you Olaf for taking a picture of me during the ALE 2014 conference. Your picture now shines on my curriculum vitae on this website.

Let tests drive or let Dijkstra derive?

For those of you who did not attend my presentation at the ALE2014 in Krakow I have written down the contents of the presentation.

I am speaker at ALE 2014 in Krakow

My presentation “Let Tests Drive or let Dijkstra Derive?” has been accepted at the unconference ALE 2014 in Krakow. Here is the abstract of the presentation:

Drop all tables for one user in Oracle database

To drop all tables for a single user in an Oracle database, use one of the following two queries. The queries return the drop statements. Execute these drop statements and you are done.

Two selectInputDates with same id cause NullPointerException

ICEFaces 1.8.2 throws a NullPointerException. The stack trace shows that the exception is thrown by:


Potter Kata solution

Last year I got interested in Test-Driven Design (TDD). I practice TDD every now and again during my work. In my spare time I tried to solve a few katas using TDD. Then I studies other people’s solutions to the same kata and discovered most of them were incorrect!

Test-Driven Development and formal proofs

Since last year I got interested in Test-Driven Development. The idea of first writing a test before implementing new functionality appeals to me, because it ensures you ensure 100% code coverage. And having a lot of test cases makes it safe to refactor your code later. Refactoring code is needed to keep your code clean.

initSQL does not work with ojdbc14

In a project my team used Tomcat 6 and ojdbc14. A connection pool was configured as a data source.

We wanted to execute a statement at the moment a new connection to the database was created. The documentation of Tomcat mentions the attribute initSQL of the data source.

valueChangeListener not called for SelectOneMenu

It turns out that to make the valueChangeListener work for SelectOneMenu, one has to add partialSubmit="true".

Plus sign does not work in grep

In a bash shell under cygwin I used grep like this:

grep [0-9]+[.][0-9]+ <filename>

I expected a line like "...>2.49<..." to match. Unfortunately, this was not the case. It turns out that the plus sign is part of the extended regular expression syntax.

Svn+ssh with Subclipse

Subversion supports several protocols: http, https, svn and svn+ssh. I don’t like using http for Subversion, since the user name and password are transmitted as plain text. Getting https to work, you need to get a certificate from a Certificate Authority. This takes time and costs money. The svn+ssh alternative can be quickly set up and is for free. The application svnserve allows access to your Subversion repositories using the svn protocol.

Logging in on Samba server fails in Windows 7

Adding the following registry settings in Windows 7 solved this problem for me:

Disable button click triggered by enter in Compact Framework 2.0

Mobile devices do not have mouse. When the user uses the touch screen to click on a button, then this click is translated to mouse events. This way existing software can still be used on a mobile device without mouse.

When the mobile device has a barcode reader, then when a barcode is scanned, this barcode is offered to the application as if it was typed on a keyboard. And typically a key press for the enter key is added after the barcode.

But what happens if the user accidently moved the focus from a text box to a button? If the user then scans a barcode, the key presses for the barcode are ignored, but the key press for the enter will cause a button click!

It turns out that preventing this button click is difficult in Compact Framework.


I decided to try a new Linux distribution. Last time I installed Linux I installed it from a USB stick. I remember I needed some special software to make the USB stick bootable.

Samba problem

The Samba configuration file can be very small and simple. However, when the winbindd daemon was running, my Linux and Windows machines could not look into the shared folders (although they could see the shares).

Search in file does not work in Eclipse

When Eclipse is run with GCJ (GNU compiler for Java) the file search does not work properly. This problem can be Solved by adding a file ~/.eclipse/eclipserc with the following content:

Sudo without password

If you want sudo without entering a password, edit /etc/sudoers and add:

JViewPort.scrollRectToVisible() does not work as expected

Scrolling a JScrollPane such that a component becomes visible should work like this:

    Rectangle bounds = component.getBounds();

Unfortunately, the code above does not work. The following code does the trick:

How to find constraints and indexes on a table in Oracle?

Sometimes you have to work with an old version of an Oracle database. And if you are unlucky, SQL Developer cannot connect with that database. You can use less sophisticated tools to connect to the database. How do you find the constraints on a table?