Go Go Gnome
the website of Sander Kooijmans

The Developer

The Developer

The Developer

So you want to know more about me as software developer? If you are a software developer too, then you will find interesting posts here from me about problems I have solved or techniques and tools I find useful. Perhaps they are also useful to you?

2023-06-28: Gogo Dirsynch

Gogo Dirsynch is a tool for synchronizing directories. Directories to be synchronized can be located on a computer's file system or on an FTP server. Personally, I use the tool to upload new versions of various websites to FTP servers.

Click here to read about the tool and download it.

2023-04-20: John Castelijn and I explain how to write tests that need a lot of data at T-DOSE in Geldrop

On Saturday April 22, 2023, John Castelijn and I will give a presentation called "Stop **cking About! How to write tests that need a lot of data?" at the T-DOSE conference in Geldrop.

Click here to read more about it.

2023-01-04: Gogo Account

Gogo Account logo Gogo Account is a bookkeeping program I wrote and have used myself as treasurer for 3 sports clubs.

Click here to read more about it and to download it.

2022-09-23: I explain Test Data Builders at J-Fall 2022

In an ignite session of 20 sheets in 5 minutes, I will explain how you can write unit tests without mocks using Test Data Builders.

2021-09-13: JSF ace:dataTable sorts its data in the field of the backing bean

A true story: we build a web application with JSF. We use ace:dataTable to let the user sort and filter the table rows.

One table was sorted by default, so without user interaction. Inside this table, the user could change a dropdown field. We use partial submit so that a value change listener could update the value in the database.

What we did not expect was that when one the value of one dropdown is changed, sometimes other dropdowns changes too. Only on screen, not in the database. So after refreshing the page, everything looks fine again. But this bug is very confusing to our users.

Click here to find out how I solved this problem.

2021-06-04: Stop **cking About! How to write tests that need a lot of data?

John Castelijn (a colleague I worked with at SPS) and I created a presentation about how to write tests that need a lot of data. This presentation was prepared for the T-DOSE conference in Eindhoven in 2020. Due to the corona pandemic the conference was cancelled. We did not want our preparations for this presentation to be in vain. That is why we decided to record it ourselves. The advantage is that you will not be distracted by the beautiful stage in the background and you will not be disturbed by noises from the audience.

2021-05-11: Videos of MMM Professional and Triplex

I created two videos and published them on YouTube. The videos show a music editor and a Tetris clone I wrote for MSX computers when I was a teenager. The videos contain subtitles that explain what you see.

2021-01-29: FreeTDS returns empty string as space

This post shows that FreeTDS returns an space instead of an empty string when reading data from Microsft SQL Server.

2020-10-09: How to write tests that need a lot of data?

This article explains how you can write tests that need a lot of data.

2019-12-20: My presentation at PyData Berlin is available on YouTube

PyCon logo As announced in this post, 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 recording of this presentation is available on YouTube. Click here to watch my presentation.

2019-08-16: I explain how to write tests that need a lot of data at PyCon DE & PyData Berlin

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

2019-05-10: Gogo Chess

Gogo Chess logo I have built a chess game that plays chess better than me. Click here to read about it and to download it.

2019-04-13: I explain how computer chess works at T-DOSE in Eindhoven

Gogo Chess logo On Saturday May 11, 2019, I will give a presentation called "How stuff works: computer chess" at the T-DOSE conference in Eindhoven. Click here to read the abstract of my presentation.

2018-08-26: Binding multivalue-keys with INI-files using Microsoft.Extension.Configurations

This article explains how to use Microsoft's configuration framework to read configuration from an INI-file like this:

[logging:0]
logging:level = DEBUG
logging:format = XML
logging:output = file
logging:filename = logging.xml

[logging:1]
logging:level = WARN
logging:format = TEXT
logging:output = email
logging:mailTo = devops@yourcompany.com

2017-12-26: Test-Driven Development compared to double-entry bookkeeping

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? Nothing. TDD is a great tool to write production code and cover it completely by tests. What is wrong is people claiming TDD is the one and only way to write correct production code.

Click here to read my post.

2018-08-05 Gogo Chess published

Go Go Chess logo 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.

2017-11-27: The Visitor Pattern Revisited

Click here to read an article about an alternative design for the Visitor Pattern.

2017-03-18: Gogo Logbook

Gogo Logbook logo Gogo Logbook is an electronic logbook I built for the company my wife worked for at the time. I also have used it as a private logbook myself for some time. Click here to read more about it and to dwonload it.

2016-04-04: I give presentations at NextBuild 2016 and Clean Code Days 2016

NextBuild logo On Saturday April 16, 2016 I will give a presentation called "Dynamic Programming: The technique behind the diff tool explained" at NextBuild 2016 in my old home town Eindhoven.

Clean Code Days logo 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.

Click here to read the abstracts of the presentations.

2015-11-05: Triplex

Triplex screenshot Triplex is a Tetris clone I have written in 1993 for MSX computers. Click here to read more about it and to download it.

2015-05-30: How invariants help writing loops

Sander presenting at ProgScon 2015 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 click here to download a PDF containing the summary of my presentation and the exercises in case you want to practise the presented technique yourself.

2015-02-13: I give a workshop at ProgSCon 2015 in London

Logo ProgScon 2015 On Friday April 17, 2015 I will give a workshop called "How invariants help writing loops" at ProgSCon 2015 in London. Click here to read the abstract of my presentation.

2015-02-13: I give a workshop at NextBuild 2015 in Eindhoven

Logo NextBuild 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. Click here to read the abstract of my presentation.

2014-08-25: Let tests drive or let Dijkstra derive?

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

Click here to open a PDF with the contents of the presentation.

2014-08-06: I am speaker at ALE 2014 in Krakow

Logo ALE 2014 My presentation "Let Tests Drive or let Dijkstra Derive?" has been accepted at the unconference ALE 2014 in Krakow. Click here to read the abstract of the presentation.

2014-02-03: Drop all tables for one user in Oracle database

This article explains how to drop all tables for a single user in an Oracle database.

2013-09-09: Two selectInputDates with same id cause NullPointerException

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

com.icesoft.faces.component.selectinputdate.SelectInputDateRenderer.encodeEnd(SelectInputDateRenderer.java:541)

In my case it turns out that this exception was caused by two SelectInputDate instances with the same id. Unfortunately, ICEFaces does not give a concise error message.

2013-01-30: 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!

Click here to see my solution to the Potter Kata.

2012-11-03: Test-Driven Development and formal proofs

Click here to read a post about how I think about Test-Driven Development and formal proofs of correctness of algorithms.

2012-07-27: valueChangeListener not called for SelectOneMenu

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

See also this link at ICESoft’s forum.

2012-08-12: InitSQL does not work with ojdbc14

Click here to see why initSQL does not work with odjbc14.

2012-04-27: Plus sign does not work in grep

Click here to find out why grep [0-9]+[.][0-9]+ does not match the line "...>2.49<...".

2012-04-10: Svn+ssh with Subclipse

Subversion supports several protocols: http, https, svn and svn+ssh. click here to see how to install Subversion on an Ubuntu server and configuring it to use the svn+ssh protocol.

2012-03-26: Logging in on Samba server fails in Windows 7

When logging in on a Samba server fails from Windows 7, click here to find a solution.

2012-01-13: Disable button click triggered by enter in Compact Framework 2.0

Mobile devices do not have a 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 a 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 accidentally 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. This article explains how to do this.

2011-12-27: UNetbootin

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.

Now I discovered UNetbootin. This tool copies a Linux distribution to a USB stick and makes it bootable. It can even download any of the popular distributions for you.

UNetbootin is available for Linux, Windows and Mac OS X.

Tip: most BIOSes can only handle USB sticks formatted with the FAT file system.

2011-12-16: Sudo without password

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

username ALL=(ALL) NOPASSWD: ALL

Save, and that's that.

2011-12-16: Search in file does not work in Eclipse

When you run Eclipse under Linux and the "Search in file" feature does not work, then click here to read how to solve this problem.

2011-12-15: JViewPort.scrollRectToVisible() does not work as expected

Click here to see how to programmatically scroll a JScrollPane such that a component becomes visible.

2010-09-01: 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? This article shows how to find them using SQL queries.

2000-08-15: The Pruning of the Search Tree

Click here for a report describing the contents of the presentation given by Prof. Dr. E.W. Dijkstra in honour of the eighteenth Dies Natalis of Gewis, on July 2000. Gewis is the Eindhoven Univeristy community of mathematics and computer science students.

I wrote this report to conclude the course 'Technical Writing and Editing English' of the Software Technology program (OOTI).