Dutch / Nederlands
Site map

I write, therefore I am

With this variation on a famous statement by the philosopher Descartes, I would like to express that the act of writing about what happens in my life is important to me.

Saturday, January 16, 2021


Yesterday, on the news there was an issue about how today a snow front would go over the country from the west to the east. Yesterday morning, I already saw some small snow specks fall from the sky, some of which stayed on the roofs of the houses. In the evening, I made some curly kail hotchpotch (with no fried pork but with smoked sausage). Only in the evening, it started to snow and some of it on the roads. At least about 2.5cm of snow fell during the evening, based on my own measurement. The coming days the temperature is going to rise and the snow is expected to quickly melt away.

Wednesday, January 13, 2021

Literate programming with Markdown

On March 20, I am going to give a (online) workshop on parsing. The workshop will start of with a overview of parsing and than explain the decision I took for implementing IParse. In the second part of the workshop, will consist of writing some simple grammar for IParse and test it on input. I am thinking about discussing RawParser, a reimplementation of IParse in 'raw' C, in the last part of the workshop. In the past months I have been working on RawParser and trying to add extensive documents to explain how it works, but I do not feel very happy about all the restrictions that C imposes on the order and level of detail you have to provide. A few days ago, I came across Build Your Own Text Editor and was rather charmed by it approach. It is generated from a collection of Markdown files and a steps.diff file with the help of a program called leg. This made me thinking about using Markdown as the primary source of the code and write a program to generate a C program from a collection of Markdown files. I think it is possible to make the program smart enough to reorder the Markdown code fragments and to allow a mechanism for extending the code without having to include many instructions where to include which piece of the code as in CWEB, a computer programming system created by Donald Knuth and Silvio Levy as a follow-up to Knuth's WEB literate programming system. I have started this approach on RawParser/doc/grammar.md file. As a positive side effect, working on this did result into some improvement of RawParse.c itself.

Tuesday, January 12, 2021

Palindrome date

Today is palindome date of the form (D)D-(M)M-YY and/or YY.(M)M.(D)D: 12-1-21 and/or 21.1.12. This year there are nine other palindrome date like this and six other special dates, one of which we already have had. All of these, including today, are:
  • January 2: Palindrome date M/D/YY and YY.M.D, double date: D-M-YY.
  • January 12: Palindrome date DD-M-YY and YY.M.DD.
  • February 1: Palindrome date D-M-YY, double date M/D/YY and YY.D.M
  • February 10: Double date MM/DD/YY and YY.MM.DD.
  • February 12: Palindrome date DD-MM-YYYY, DD-M-YY and YY.M.DD.
  • March 12: Palindrome date DD-M-YY and YY.M.DD.
  • April 12: Palindrome date DD-M-YY and YY.M.DD.
  • May 12: Palindrome date DD-M-YY and YY.M.DD.
  • June 12: Palindrome date DD-M-YY and YY.M.DD.
  • July 12: Palindrome date DD-M-YY and YY.M.DD.
  • August 12: Palindrome date DD-M-YY and YY.M.DD.
  • September 12: Palindrome date DD-M-YY and YY.M.DD.
  • November 12: Palindrome date DD-MM-YY and YY.MM.DD.
  • December 2: Palindrome date MM/DD/YYYY and YYYY.MM.DD.
  • December 11: Palindrome date MM/DD/YY, double date MM/DD/YY and YY.MM.DD.
  • December 22: Palindrome date MM/DD/YY, double date MM/DD/YY and YY.MM.DD.

Sunday, January 10, 2021

Cloud bow

This afternoon, Conny and I mada a walk through the country side. At one point, while walking with the sun on our backs, we noted some bright spots in the clouds. We noted some other bright spots in some other clouds, and realized that they were on a bow. When we walked further the bow became clearer. We also noticed some slight colouration: red on the outside and blue on the inside. We took several pictures. Above one that I stiched together (with Hugin) from two pictures. At home, I concluded that the phenomenon we saw was like a fog bow, or also called a white rainbow. Because it was not in the fog, but in a cloud, I would call it a cloud bow.


Thursday, January 7, 2021


Wednesday, January 6, 2021

Some wet snow

This afternoon, we had some wet snow. It is the first wet snow of this winter. Because temperatures are above zero Celsius, there is no chance the snow will stay on the ground.

Tuesday, January 5, 2021


Monday, January 4, 2021


Saturday, January 2, 2021

Going home

Today, we went home from our stay in Manderveen. We decided to search for two border poles, but while drivingvthrough Germany, Conny thought that she saw some one. At first I dismissed it, thinking we were too far from the border, but than we saw another one. We went back to have a look at them. We visited the followein border poles:
  • At 9:30, pole 92-I.
  • At 9:48, pole 88-I.
  • At 10:22, pole 60.
  • At 10:26, pole 62, 62-I, and 62-II.
  • At 10:40, pole 61.


Friday, January 1, 2021

Dolmen and burial mounds

Conny and I went walking in the forest near Mander where there used to be a dolmen and where there are several burial mounds. We also went searching for border poles and found the following:
  • At 13:55, pole 86.
  • At 14:08, pole 85-I.
  • At 14:12, pole 85-II.
  • At 14:39, pole 86-I
We again searched for pole 86-IV, but did not find it. We concluded that it must have been removed.

Thursday, December 31, 2020


Conny and I went walking to Galgenberg, which translate as gallows hill in English. It is named so, because in the middle ages, there was a gallows where the corpses of death row inmates were put on display as a deterrent. Before we went there, we looked at a watermill along the mosbeek. While walking around the area, we found the following border poles:
  • At 11:55, pole 83
  • At 12:35, pole 84
  • At 12:52, pole 85
  • At 12:59, pole 84-I

Wednesday, December 30, 2020

Mander circles

Conny and I walked along the Mander circles near the village Mander. We search for some border poles, and found the following:
  • At 15:40, pole 86-III
  • At 16:08, pole 87
  • At 16:17, pole 87-I
  • At 16:25, pole 87-II
We searched for border pole 86-IV, but could not find it.

Tuesday, December 29, 2020

Oklab colour space

About a week ago, I came accors the Oklab color space. This morning, I tried to use it for generating a colour palette, like I did before with the HSLuv colour space. For the a and b parameters, I used the sine and cosine functions multiplated with a saturation factor. To get a palette looking similar to the HSLuv palette, I had to use saturation (chroma) factors ranging from 0.07 to 0.17 and values from 0.6 to 0.9 for the L parameters. Althought Björn Ottosson claims that the Oklab colour space is better than the other colour spaces. About HSV he states: Only on this list because it is widely used. Does not meet any of the requirements except having a D65 whitepoint. He does not mention HSLuv nor compare it with his colour space. I am also a little worried about colours getting out of range. In the palette below there are eight clipping errors with values being 12.5% out of range. For a more in-depth discussion see: Oklab: A perceptual color space for image processing on Hacker News.

This text is displayed if your browser does not support HTML5 Canvas.

Round Goki puzzle

I extended the program with another command for some further analysis of the round Goki puzzle. There are 1,789,051 unique solutions to the puzzle when the colour of the pieces are ignored. For each of these solutions, there are 288 (=2*2*2*3*2*6) solutions when the colour of the pieces are taken into consideration. This leads to a total of 515,246,688 unique solutions not taking into account rotations and mirroring. Only 256,299 of these solutions have no pieces with the same colour touching eachother. That is only about 0.05% of all solutions. According to the new command of the program only 26,661 of the 1,789,051 unique solutions to the puzzle when the colour of the pieces are ignored, do have solutions where no two pieces with the same colour are touching. That is about 1,49%. I furthermore, made a break down of how many of the unique solutions ignoring the colours have solutions with no touching colours. These results are presented in the table below. According to this table, 898 of the unique solutions ignoring the colours do have seven solutions where the pieces of the same colour are not touching eachother.

   407  1   |  1739 10   |    84 30
  1494  2   |  4187 12   |   158 32
  1170  3   |   281 14   |     1 33
  3631  4   |    24 15   |   104 36
   441  5   |  1194 16   |    54 40
  3879  6   |   317 18   |     3 42
   898  7   |   599 20   |   165 48
  4117  8   |    36 21   |     5 60
    99  9   |  1539 24   |     6 64
    11 11   |    18 28   |

Monday, December 28, 2020

Goki puzzle: no touching colours

Before, I already investigated the number of solutions for the round Goki puzzle ignoring the colour of the pieces. Someone raised the question about the number of solutions when pieces of with the same colour are not allowed to touch. I extended the program with two new options. One option to generate an Exact Cover and one option to check the results. The program found 256,299 unique solutions with respect to rotations and mirroring.

Saturday, December 26, 2020

Three cases

There have no been three cases being reported of the new variant of the COVID-19 virus in the Netherlands. Two cases are found in Amsterdam and one in the region of Rijnmond, which is near Rotterdam. In all cases no direct relation to the United Kingdom was found, which means that the new variant is already circulating in the Netherlands. It is possible that the virus is not more infectious but spreading more easily because it makes less people ill. It might look more like the normal coronavirus for which most people have some immunity. If people have no or vague symptoms, they are more likely to infect others.

Wednesday, December 24, 2020


Tuesday, December 22, 2020

Moleskin daily planner

This morning, I realized that I had not yet bought a Moleskin daily planner for next year. I ordered one from the webshop of Bookshop Broekhuis for € 19.90. This evening, I found a Moleskin daily planner for 2021 being delivered, probably by someone from the bookshop. Made me happy!

Monday, December 21, 2020

VUI - 202012/01

I find it rather bizar, that due to some statement about the a new COVID-19 variant, officially known as VUI - 202012/01, all personal traffic with the United Kingdom has been stopped. On one hand, I am surprised that now suddenly it is possible to shutdown flights within very short noticed, while in the past people were adviced to go into quarantine when coming from an area with a high infection rate. On the other hand, I am surprised because the variant was already found in the Netherlands. It might already have been going round for over a month, because the variant was first detected early October from a sample taken in September. It might even be the case that the variant is responsible for the 'third' wave here in the Netherlands. We do not know this, because here in the Netherlands not much samples are being sequenced for the detection of new variants. So, I feel it is like slamming a door after giving the foo ample time to slip inside. It is clearly an overreaction caused by fear.


Sunday, December 20, 2020

Twinkly red-orange animation

In the past weeks, I made some further attempts to control the Twinkly starter light set. I managed to write a Python script that writes the authenitication token to a file and changed the mode to rt with some small modifications to the xled library, using the following script fragment:
file = open("token.txt", "w")
I also wrote a C++ program that would send UDP packets to port 7777 as described in the documentation about Real time LED operating mode, but I failed to get it working. So, today, I wrote a Python script, which uses the movie mode to send movies of one frame to animate the LEDS with a pattern consisting of red and 30 orange lights, where every second at most five orange lights change place. Then, while writing this, I read the documentation about the Real time LED operation mode, I realized that I had left the byte out specifying the number of LEDs. When I modified the test program, it worked. I modified the program to have a similar effect as the Python script.

Saturday, December 19, 2020

Groote Boekel

Conny and I went searching for three marke stones along the former marke Esmarke and Lonneker, namely: Steen bij de Stroinksbleek, Steen bij erve Kleinvoort, and Hoge Boekelersteen. We only found the first, which is not an original stone, but one placed on Augustus 18, 2017. It happened to be near the entrance of a school that Andy attended for some years. We could not find the second stone, because the location was overgrown and we could determine its location. The third stone is at the Groote Boekel estate. We looked around the estate and some adjecent fields and roads and walked about 4Km. We could also not locate the last stone, which should be on the estate. Conny did take a nice picture at the estate which happens to include me.

Wednesday, December 16, 2020

Pythagorean triple date

Today is a Pythagorean triple date because 16² + 12² = 12² + 16² = 20². It was due to a new paper article by Ionica Smeets that I heard about these kind of special dates. This makes it the eight special date of this year.

Saturday, December 12, 2020

Compile on save

I came up with very simple bash script, which will compile a give C++ program every time when it is saved:

while true; do
  exetime=`stat -c %Y $1`
  cpptime=`stat -c %Y $1.cpp`
  if [ $cpptime -gt $exetime ]; then
    g++ $1.cpp -o $1
  sleep 1

Futoshiki to Exact Cover

I wrote a program to convert Futoshiki puzzles into Exact Cover problems. I first attempted this by generating all permutations for each row and column that are allowed by restrictions, but that did not lead to an exact cover that could be solved easily. With this second version, I took the same approach as the method for for sudoku puzzles.

Fungus on tree

When I was cleaning the leaves in the garden, I noticed many very small mushrooms on the trunk of the large tree in our garden. They were on the side of trunk that is overgrown with moss. Appearantly, that part of the trunk is also infected with some type of fungus. I have no idea if this is a bad sign or that it is relatively benign condition. On the right a close-up of one of the mushrooms.


Thursday, December 10, 2020


Wednesday, December 9, 2020


Yesterday, we installed the Twinkly starter light set with 105 RGB LED's. I installed the app on my phone and played at little with it. This evening, I wanted to try to access it through a laptop with the help of XLED - unofficial control Twinkly - Smart Decoration LED lights. I spend some time installing all the depended modules (using pip3) and was able to connect to it. But I got invalid challenge-response errors like described in issue 30. I have a TW105SEUP09 device with firmware version 2.1.8. There is a firmware update to version 2.3.8 available. I am thinking about developing a program in C++ that uses the Real time LED operationg mode by sending UDP packets to port 7777. For this I do need the authentication token. I hope I can retrieve this using the XLED Python library.

Tuesday, December 8, 2020

BindingList with filtering

A BindingList<T> in the .NET framework can be used to bind a user-interface control with a data source that consists of a list. The idea is that the control will follow any changes in the contents of the list and that through the control the contents of the list can be changed. But it lacks good possibilities to implement filtering and sorting. In my search for how to implement this, I found the blog: Databinding with a filter and a sort. In the end, I created my own solution, for a one-way use where the control cannot directly change the list. I created a class derived from BindingList<T> with an _inner member of type BindingList<T>. It implements an event handler on ListChanged event of _inner, which performs the filtering (and sorting) and then fills the Items collection again with the elements (in the sorted order). Each change in the Items collection will raise a ListChanged event. To prevent this, the RaiseListChangedEvents property can be set to false to surpress these events. However, it is not possibility to raise the ListChanged event in a derived class, because it is not defined in the proper way. (See: How to raise base class events in derived classes in the .NET programming guide.) I implemented a trick by which each change to the Items collection is delayed and that the last change is applied after RaiseListChangedEvents has been set to true again. (After this, I also added a call to the ResetBindings method.)

Random numbers on micro-controller

I got some question from an artist with respect to random number generation on an micro-controller. These usually have a build in pseudorandom number generator. Although these usually produced a good random sequence, they generate the same sequence every time the micro-controller is started. A common solution to avoid this, is to add a call to randomSeed in the initialization with some hardware related random source, for example, to call analogRead on an 'open' input pin. However, analogRead from an open pin is usually not a very good random source because they do not have a uniform distribution or contain a strong 50/60 Herzt signal from a nearby power line. The least significant bit, are usually a better random source. There are some tricks to combine many samples into a better signal with some shifting and exclusive-or bitwise operations. (See for a long discussion about this: Better Arduino Random Numbers.) Another solution is to combine the 'good' pseudo-random source with a 'weak' random hardware source. The artist wanted to have a one-in-eight random change expression. I suggested to use:
    (random(8) == (analogRead(A0) & 7))
An even better and genertic method is to mix the two random sources. See for example the (untested) modified random function from the Arduino implementation:
static long myRandom(int n, int pin)
     * Compute x = (7^5 * x) mod (2^31 - 1)
     * wihout overflowing 31 bits:
     *      (2^31 - 1) = 127773 * (7^5) + 2836
     * From "Random number generators: good ones are hard to find",
     * Park and Miller, Communications of the ACM, vol. 31, no. 10,
     * October 1988, p. 1195.
    static long x;
    long hi, lo;

        x = x ^ analogRead(pin); // Mix with 'weak' random source
    /* Can't be initialized with 0, so use another value. */
    if (x == 0)
        x = 123459876L;
    hi = x / 127773L;
    lo = x % 127773L;
    x = 16807L * lo - 2836L * hi;
    if (x < 0)
        x += 0x7fffffffL;
    return x % n;

Note that for us humans it is quite difficult to recognize pseudorandom sequences from 'hardware' random sequences. Below two images, one generated with a short pseusorandom sequence of length 127 and the other from www.random.org. Click on the image so see which is which.

Sunday, December 6, 2020

Steen bij de Höfte

Around noon, Conny and I walked the through the park called Zweringbeekpark. This year October 30, a replacement for the marke stone Steen bij de Höfte was placed in the park at about the original location of the stone.

Saturday, December 5, 2020

Hyper Sudoku

We had some problem solving a Hyper Sudoku and we wondered if it could be solved without guessing. For this purpose, I modified the program for converting a Sudoku to an Exact Cover problem. (On September 9, 2010 is used this program for solving the Hardest Sudoku.) With the program, I checked that the two Hyper Sudokus as published on page 42 of Denksport Logisch 2-4★ vakantieboek NR.38, indeed did only have one solution and could be solved without guessing.

Friday, December 4, 2020


Wednesday, December 2, 2020


Tuesday, December 1, 2020

Double date

Today is a double date when the date is written in the format MM/DD/YY or YY.MM.DD. The next such date is on February 10, 2021. This is the seventh and last special date of this year.


Saturday, November 28, 2020


January 2021
December 2020
November 2020
October 2020
September 2020
August 2020
-- contact --




Art works
Useless lists


My life as a hacker
Signature programs
Software enginering
The Art of Programming
eXtreme Programming Programs


Hamilton cycles
cutting sticks
Califlower fractal




The email address below, may only be used for private communications. This email address may not be put on any mailing list. I do not want to receive emails with advertisements of any kind. My email address is:

Privacy statement

This is a static website with no contact form and no way to add comments. It has no advertisements and no trackers. It does not use cookies. I am not using any method to analyse traffic to this website nor keeping any logs. I am not collecting personal data besides what is published on this website. If you want me to remove any personal data (including your name or link to your website), please contact me by above email address and I will make all effort to remove the data as soon as possible. I am private person and this website does not serve any economic purpose. All cost for maintenance are paid by myself. I do not receive any payments. The website is ad-free and does not have sponsored links.

Site statistics

If I did not count wrong, this site consists of 992 HTML-files with a total size of 22,955,638 characters, having 49,128 internal links and 11,906 external links to (more than) 3,965 websites. (At least 737 of the external links are broken.) Furthermore, it contains 218 C/C++ program files with a total size of 4,836,511 characters, 9 MySample scripts with a total size of 75,004 characters. and 3 PASCAL program files with a total size of 35,259 characters. There are 69 text files with a total size of 742,902 characters. With respect to images, this site containts 1286 JPEG images (total size 56,736,341 bytes), 146 GIF images (total size 3,765,046 bytes), 94 PNG images (total size 2,280,364 bytes), and 2 BMP images (total size 3,727 bytes). With respect to sounds, it contains 14 WAV files with a total size of 389,002 bytes and 1 MP3 files with a total size of 70,182 bytes. It also contains 43 PostScript files (total size 308,387 bytes), 2 LaTeX files (total size 132,020 characters), 10 PDF files (total size 12,337,569 characters), 22 zip files (total size 2,487,335 bytes), 3 gzipped tar files (total size 52,345 bytes), 45 SGF files with a total size of 85,019 bytes, 118 KML files with a total size of 4,703,842 bytes, and 2 EXE files with a total size of 38,340 bytes. It also uses 16 JavaScript files with a total size of 682,455 bytes, This leads to a total size of 113,084,885 bytes.


Creative Commons License

I, Frans hold the copyrights of this and all other pages on this website. For this website a Creative Commons License is applicable. You may not use this work for commercial purposes. I consider all computer programs to be copyrighted by me under the GNU General Public License, unless stated explicitly otherwise. All quotes (text and program fragments) from other sources are excluded from this, and should be considered as copyrighted by their authors.

(This space is intentionially left empty)