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.
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.
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.
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.
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.
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.
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:
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.
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:
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.
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.
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.
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.
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!
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.
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:
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.
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.
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.
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.
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.
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.)
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.
Around noon, Conny and I walked the through
the park called Zweringbeekpark. This year October 30, a replacement for the
marke stoneSteen bij de Höfte
was placed in the park at about the original location of the stone.
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.
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.
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.
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.
Copyright
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.