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. In the South of the country, there was some more snow.

Friday, January 24, 2025

B93 Anno Nu

This afternoon, I went to see the exhibition B93 Anno Nu - Het is duur en niet ongevaarlijk, which translated to English is: B93 Now - It's expensive and not without danger. I did not go to the opening (in English) on January 8, but today there was another opportunity to see the exhibition. I did like the exhibition. I found the following works (in random order) noteworthy:


Tuesday, January 21, 2025

Link


Monday, January 20, 2025

IJsdagen

We have had three days where the maximum temperature stayed below zero degrees Celsius. In Dutch these days are called 'ijsdagen'. Last winter we did not have any such days, so, with these 'ice days' the longest sequence on record of days that the maximum temperature stay above zero has ended. The Dutch word for ice is 'ijs' en the Dutch word for days is 'dagen'. The word 'ijs' starts with the digraph ij, which is usually captilazed as IJ, which rather exceptional. There are also Unicode character for this digraph: ij and IJ.


Sunday, January 19, 2025

Mutual exclusion with atomic memory operations

I have thought that for low-level mutual exclusion you need a test-and-set operation. In the past day, I realized that it can be achieved with atomic memory operations. An atomic memory operation is where you can retrieve and store the contents in one undividable operaton. This is usually the case when reading or writing a value to/from a memory cell into the register of a CPU. For values larger than the size of a register have to be loaded with multiple instructions and usually do not have the atomicity property. The idea is to use two memory locations, 'A' and 'B', where is one process (the lock server) that copies the contents of 'B' to 'A' if 'A' has the value zero and that there are multiple proceses each with a unique identifier that when needed mutual exclusion (a lock) write their identifier to memory location 'B' if 'A' and wait until 'A' becomes equal to their identifier. If 'A' becomes zero again, they will write their identifier to 'B' again. To release a lock (when they leave the mutual exclusive section) they set 'A' to zero again. This morning, I believe that the following PROMELA code proof this:
byte n = 0
byte A = 0
byte B = 0
proctype Client(byte id)
{
    do
    :: (A == 0) -> B = id
    :: (A == id) -> 
        n = n + 1;
        assert (n == 1);
        n = n - 1;
        A = 0
    od
}
proctype LockServer()
{
    do
    :: (A == 0) -> A = B
    od
}
init {
    atomic {
        run LockServer();
        run Client(1);
        run Client(2);
        run Client(3);
    }
}
It fails when two processes have the same identifier, for example, when Client(2) is replaced by Client(1) in the above code.

ESP32-S3: reset I²C

Yesterday evening, I discovered that the reset of the finite state machine of the I²C of the ESP32-S3 is not implemented. In the soc_caps.h file it says:
// FSM_RST only resets the FSM, not using it. So SOC_I2C_SUPPORT_HW_FSM_RST not defined.
//ESP32-S3 support hardware clear bus
#define SOC_I2C_SUPPORT_HW_CLR_BUS  (1)
This basically means that you have to shut-down the I²C peripheral, perform an optional bus reset, and start-up the peripheral again. I think you can use the following low-level code, which works on memory mapped hardware registers, to shut-down the I2C0 periperal:
    // Save the current settings
    i2c_scl_low_period_reg_t scl_low_period = I2C0.scl_low_period;
    i2c_scl_high_period_reg_t scl_high_period = I2C0.scl_high_period;
    i2c_scl_start_hold_reg_t scl_start_hold = I2C0.scl_start_hold;
    i2c_scl_rstart_setup_reg_t scl_rstart_setup = I2C0.scl_rstart_setup;
    i2c_scl_stop_hold_reg_t scl_stop_hold = I2C0.scl_stop_hold;
    i2c_scl_stop_setup_reg_t scl_stop_setup = I2C0.scl_stop_setup;
    i2c_filter_cfg_reg_t filter_cfg = I2C0.filter_cfg;
    i2c_clk_conf_reg_t clk_conf = I2C0.clk_conf;
    bool fifo_mode_en = I2C0.fifo_conf.nonfifo_en;
    // Disable the peripheral
    SYSTEM.perip_clk_en0.i2c_ext0_clk_en = false;
To start-up the I2C0 peripheral again (with the saved settings), I think you can use:
    // Enable the peripheral
    SYSTEM.perip_clk_en0.i2c_ext0_clk_en = true;
    // Reset the peripheral
    SYSTEM.perip_rst_en0.i2c_ext0_rst = 1;
    SYSTEM.perip_rst_en0.i2c_ext0_rst = 0;
    // Set the default configuration (for master)
    i2c_ctrl_reg_t ctrl_reg;
    ctrl_reg.val = 0;
    ctrl_reg.ms_mode = 1;
    ctrl_reg.clk_en = 1;
    ctrl_reg.sda_force_out = 1;
    ctrl_reg.scl_force_out = 1;
    I2C0.ctr.val = ctrl_reg.val;
    I2C0.ctr.tx_lsb_first = I2C_DATA_MODE_MSB_FIRST;
    I2C0.ctr.rx_lsb_first = I2C_DATA_MODE_MSB_FIRST;
    // Reset FIFO buffers
    I2C0.fifo_conf.nonfifo_en = fifo_mode_en;
    I2C0.fifo_conf.tx_fifo_rst = 1;
    I2C0.fifo_conf.tx_fifo_rst = 0;
    I2C0.fifo_conf.rx_fifo_rst = 1;
    I2C0.fifo_conf.rx_fifo_rst = 0;
    // Disable and clear interupts
    I2C0.int_ena.val &= (~I2C_LL_INTR_MASK);
    I2C0.int_clr.val = I2C_LL_INTR_MASK;
    // Restore saved settings
    I2C0.scl_low_period = scl_low_period;
    I2C0.scl_high_period = scl_high_period;
    I2C0.scl_start_hold = scl_start_hold;
    I2C0.scl_rstart_setup = scl_rstart_setup;
    I2C0.scl_stop_hold = scl_stop_hold;
    I2C0.scl_stop_setup = scl_stop_setup;
    I2C0.filter_cfg = filter_cfg;
    I2C0.clk_conf = clk_conf;
Note that in the function s_i2c_hw_fsm_reset the peripheral is not disabled and enabled again, like it is in the function i2c_hw_fsm_reset. To clear the I²C bus, a specific sequence of signals on the clock and data lines is used. It seems that can be done by calling the function s_i2c_master_clear_bus. (In i2c_hw_fsm_reset this is called when the peripheral is disabled, suggesting the idea that it can be executed without it being enabled and being some function outside the normal circuitry.) Because SOC_I2C_SUPPORT_HW_CLR_BUS has the value (1) for ESP32-S3 the following code can be used to start the bus reset procedure that exists of nine pulses as defined by the value of I2C_CLR_BUS_SCL_NUM.
    I2C0.scl_sp_conf.scl_rst_slv_num = I2C_CLR_BUS_SCL_NUM;
    I2C0.scl_sp_conf.scl_rst_slv_en = 1;
    I2C0.ctr.conf_upgate = 1;
However, the function i2c_ll_master_is_bus_clear_done always returns false, which results in the time-out to be triggered and that the function s_i2c_master_clear_bus returns the ESP_ERR_INVALID_STATE error. The time-out period is 50ms as defined by I2C_CLR_BUS_TIMEOUT_MS. From the fallback code in the function, I understand that the whole bus reset sequence is 100µs. A time-out period of 1ms should be enough for the bus reset sequence to be finished. After the time-out, the i2c_ll_update function is called, which equals to the following for device I2C0 for the ESP32-S3:
    I2C0.ctr.conf_upgate = 1;
The code of i2c_master_clear_bus does not have the time-out check, without which it would run indefinitely, it seems that the function i2c_hw_fsm_reset is not called for the ESP32-S3.

Link


Saturday, January 18, 2025

Into the city

At Fotogalerie Objektief, I saw the exhibiion 'Gewaande Landschappen' (which in English can be translated as: 'Imagined Landscapes') with photographs by Hans Bouma. At 14:45, I bought the book De Godenmakers written by Frank Herbert in Dutch, translated by Lucien Duzee from the English The Godmakers, published by Het Spectrum in 1994, ISBN:9789027440457, from Het Goed for € 2.60.


Thursday, January 16, 2025

Fancy Tetris Wooden Puzzle

Some time ago, I found this 'Fancy Tetris Wooden Puzzle' measuring 15×22cm, which is using the same types of pieces as the Chinese Wooden Puzzle. It does not have five pieces of each type, but only three, except for the yellow and the purple type, which have four pieces each. Please note that in this puzzle, the colours on the white and purple types are swapped. The pieces fit in a grid of 8 by 12. Last weekend, I started a modified version to calculate the number of solutions. The program is still running and it still might run for some time. Below it shows one solution where the pieces of the same type are all connected with each other but minimally touching each other.

Link


Tuesday, January 14, 2025

Prospects & Concepts

Today, I received two Prospects & Concepts catalogues about the young artist that were supported by the Mondriaan Fonds and exhibited their works at the Art Rotterdam exhibition. I bought both wooks last Sunday. The books are:


Monday, January 13, 2025

Link


Sunday, January 12, 2025

ESP32: Disabling peripheral interrupt source

On October 27, I wrote something about I²C on the ESP32 without interrupts. I suggested that idea of disabling interrupt by setting the INTERRUPT_COREx_SOURCE_y_MAP register to the value 16 (the default). Today, I read in Section 9.3.3.3 of ESP32-S3 Technical Reference Manual that setting the value to 6, 7, 11, 15, 16, or 29 will disable the interrupt source. To disable this, if it was enabled (for example when calling i2c_new_master_bus), I understand that you have to execute the following statements:
	esp_rom_route_intr_matrix(0, ETS_I2C_EXT0_INTR_SOURCE, 16);
	esp_rom_route_intr_matrix(1, ETS_I2C_EXT0_INTR_SOURCE, 16);
The ETS_I2C_EXT0_INTR_SOURCE is found in the SoC specific interrupts.h file in the soc module.


Thursday, January 9, 2025

Some snow

When I was walking to the office, it started to snow. During the day, there was some snow, from which some did stay on parts of the ground. Some of it stayed during the evening.


Wednesday, January 8, 2025

Links


Tuesday, January 7, 2025

TkkrLab member again

In the past half year, I have been visiting the TkkrLab hackerspace once every while. I have decided to become a member again and did so this evening.


Monday, January 6. 2025

Links


Sunday, January 5, 2025

2cm snow and 11.2°C

At the end of the morning, there was about 2cm of snow on the table outside. This means that at least 2cm of snow fell during the evening and the morning. On ground most of the snow was already gone. The snow already had changed into rain. Until noon, the temperature at Twenthe Airport remaind between -0.4 and 0.4° Celcius. It dis not look like the prediction of 9.4° as the maximum temperature for today was goint to be reached, but around 3 in the afternoon, the temperature started to rise and between 6 till the end of the day remained around 11°C with a maximum of 11.2°C around 11 in the evening. For tomorrow a maximum temperature of 12.9°C.

ESP32: SMP

I continued my investigation with respect to running 'bare metal' on core 1 of the ESP32. I notice that I was mistaken about SMP in description about watchdog timers two days ago. The FreeRTOS SMP scheduling policy means that there is one 'instance' of the scheduler controlling task on several cores, where with the AMP scheduling policy each core runs its own 'instance' of FreeRTOS. The ESP-IDF define CONFIG_FREERTOS_SMP ia about selecting an experimental SMP version of the FreeRTOS Kernel. The normal kernel verions is SMP capable.


Friday, January 3, 2025

Wet snow

When I walked to the office, it started to snow. Some of the snow stayed on the ground. In some areas the snow stayed on the street, while at other is did not. The temperature of the ground must have been around the freezing point such that the properties of the street, such as the blackness, played a decisive role in whether or not the snow stayed. During the day some more snow fell from the sky. When I walked home I there was only some snow left in some small spots.

Watchdog timers

Watchdog timers are used in embedded systems to perform a system reset when for some reason the embedded system is not responding anymore. These are timers that after a specified time perform some kind of reset operation. To prevent the reset operation to occur, the timer need to be reset frequently. The ESP32 has several watchdog timers. According to the ESP32-S3 Technical Reference Manual (version 1.6), the watchdog timer in timer group 0 (belonging to core 0) is automatically enabled during the flash booting process. In the code of ESP-IDF it is disable again in the function bootloader_config_wdt when it is no longer needed. The watchdog timer in timer group 0 is enabled again in call_start_cpu0. No watchdog timer is enable in the function call_start_cpu1. This means that by default the watchdog timer for core 1 is not enabled. It is only possible to enabled it by software. If CONFIG_ESP_INT_WDT is enabled (defined) the watchdog timer in timer group 1 will be used for Interrupt Watchdog Timer (IWDT). Furthermore, the ESP-IDF also has a Task Watchdog Timer (TWDT), which is enable with CONFIG_ESP_TASK_WDT_INIT, that watches the idle task and makes use of the watchdog timer in timer group 0. The idle task has the lowest priority and only becomes active when other tasks are not active. If the idle tasks is not active, it probably means that some other task is running all the time. An idle task is started (by default) on both cores, but it is possible (through setting the field idle_core_mask to disable the idle tasks to be tracked by task watchdog timer. The idle tasks are created in the function prvCreateIdleTasks, which is called from the function vTaskStartScheduler. Note that there are two definitions of these function depending on whether FreeRTOS-Kernel-SMP or FreeRTOS-Kernel is used, which depends on the CONFIG_FREERTOS_SMP define. SMP stands for Symmetric Multiprocessing, which allows tasks to be scheduled across multiple identical processor cores. This should not be used when you want to dedicate one of the cores (core 1 usually) for a dedicated task.

Links


Thursday, January 2, 2025

Photograph

This evening, I bought a photograph from Paul Hendriksen that I had seen at the opening of the exhibition A day in a lifetime on December 11, last year. It is one of twenty photographs that are enlargements of a single photograph when placed in four rows of five photographs display the original photograph. I found this particular photograph the most interesting and Paul allowed me to buy this single photograph. (It is relatively easy to make the series complete again by printing the one photograph again.) While at his place, he showed me the monograph One Tree by Machiel Botman, one of his tutors. Botman takes a long time, years, to compose his monographs. I fear it is impossible to appreciate these kind books at one vieweing and that it takes careful watching and rewatching to understand them. Probably having some formal training in taking and printing photographs also helps appreciating and understanding these kind of monographs. Paul also gave me some clips such that I could put the photograph on the wall in the same manner as at the exhibition.


Tuesday, December 31, 2024

403: Access Denied

I chatted with the Dutch helpdesk of Albert Heijn, the largest supermarket chain in the Netherlands, because the link https://ah.nl/producten when opening with Firefox under Linux was returning a 403 error: Access Denied with the contents (similar to):
Access Denied

You don't have permission to access "http://ah.nl/producten" on this server.

Reference #18.55071002.1735742594.142133ce

https://errors.edgesuite.net/18.55071002.1735742594.142133ce

If you follow the link to https://errors.edgesuite.net/ it says that if you are the site owner you can find more information on the control center under: "Hamburger menu > SUPPORT > Edge Diagnostics". Edgesuite.net is a content delivery network. I already had cleared the cookies for the ah.nl website. The people at the helpdesk (I chatted with three different people) suggested I use a different browser. And indeed, the link returned the expected contents with Chrome and Chromium. (According to Client Reputation Overview my IP Address did not receive a bad risk score.) I told them that I was a little surprised that Firefox was no longer supported as is only in the past week that the 403 errors are returned. The last person asked me to provide a lot of details such that the IT deparment could investigate the problem. I told that I already had provided all the necessary information by copying the above reply and the User-Agent string, which gives information about the version of Firefox and the operating system.


Sunday, December 29, 2024

FDA Clearance for spinal cages

Today, I read the press release: Nvision Biomedical Technologies™ Secures FDA Clearance for First 3D-Printed Porous PEEK Interbody System made with Invibio PEEK-OPTIMA™ from September 24 earlier this year, which mentions the usages of the proprietary Bond3D additive manufacturing technology. Surpisingly the blog on the Bond3D website does not mention this achievement although it has been one of the two primary goals from April 2023 until the end of 2023 when the application for the FDA Clearance was submitted. During that period it was also my top priority to support the process team responsible for the application with respect to developing features for the Bond3D Slicer. For this, I also joined the weekly meeting of the process team to know about all the relevant developments and to see how we of the software team could support them. During that period, I did not take any holidays except for the last weeks of December, when I did joined Advent of Code, but even during that time I was on standby ready to return to the office if needed, checking my emails daily. So, I do feel part of the achievement of getting the FDA Clearance. The blog of Bond3D does mentioned that Bond3D joined the Demcon group on October 12. On October 1, 2019, I joined Bond3D as a senior software developer working primarily on the Bond3D Slicer, which is an application that taken a geometry specified with one or more 3D models (in the STL format) can produce instructions (in G-code) for a 3D-printer according to the various settings that the user has selected in the slicer. When I joined the company, the slicer was already developed and I helped to develop many of the features. Without knowing it at the time, it was my first experience with continous intergration and continuos delivery. I estimate that on the DORA Quick Check we scored an 8.3 at that time. In the years that followed, management forced a more project oriented according to the V-model on the development of the slicer, which probably resulted in a much lower score and a less effective software development process. At my preformance review at the start of 2024, I got a less than good score on the areas of cooperation and predictability due to my 'attitude' with one of the projects, a project that did not have top priorities and for which I nevertheless did achieve all the goals that were set. This caused me to lose my confidence in management, which resulted, after a lot of struggling and feeling burn-out, in quiting on March 29. Earlier that month, in the blog 'Being too senior', I implied that I did not feel recognized for my abilities as a senior software engineers.

Link


Friday, December 27, 2024

WinterGo

I went to Wintergo, a friendly go tournament (just one round per day) with various workshops and ample time to play board games, for just one day. primarily to talk to some people that I had not seen for a long time. This year the event was held at Brick Works De Panoven, a little over a one hour drive from were we live. I played my first game of go in more than five years during the first round, which as usual started later than according to the schedule. I lost the game with five and half points (if we counted correctly) against a 9 kyu player. I was quite happy about this because I had enlisted myself as a 11 kyu player, although according to the European Go Database my rating was just a little less than 10 kyu, because I had expected that my strength would have gone down after not having played any game for more than five years. I was a little surprised by how strong I played. I did make some tactical mistakes that costed me about twenty points, but probably also because I had played some bold moves that I could not have defended anyway. I guess I would have felt guilty had I been paired up with a 11 kyu player, as it seems that my strength is still around 10 kyu. I also watched several other go games being played, all outside the tournament and watched some strong players teach others about go. I was happy to see that the strongest player, took ample time to analyze the game he played against another player, almost replaying the whole game, and sharing his ideas about what his opponent could have done better. Strong go players have no problems with replaying a game without having taking notes, because they can usually remember the whole game. There is always an eagerness with strong players to tutor less strong players. There was a code yellow alart because of possible fog. When driving home there was some fog, just as on the way going there, but not so bad that I had to significantly my driving speed. With respect to the end position shown on the right, black captured 10 stones and I captured one.


Thursday, December 26, 2024

Language for TinyCoPoOS

In the past weeks, I have been thinking about a programming language that is an extension to (a subset) of C that can be compiled to code that for cooperative, polling operating system that I came up with last month, because it is hard to write correct code for it. An example of a some code in this language, using a I2C peripheral to read a 16 bit value from some temperature sensor every 4 ticks.
uint32_t temp = 0;
err_t temp_err = ERR_OK;

task int get_temp(void)
{
    queue for I2CExec {
       I2COpen(TEMP_DEVICE_ADDR);
       I2CStartWrite();
       I2CWrite(TEMP_DEVICE_GET_TEMP_CMD);
       I2CReadValues(2);
       temp_err = I2CExec();
       if (temp_err == ERR_OK) {
            uint8_t x = I2CRead();
            uint8_t y = I2CRead();
            temp = (x << 8) | y
       }
    }
}
I have marked the extensions bold in the above example. The task keyword (type modifier) indicates that the function should be executed as a task. The queue for keywords indicates that following code needs to be queued for the call of I2CExec task. The other function starting with I2C are low level functions that compose the I2C-request that is going to be executed. The implementation of I2CExec will make use of a timer for the case when the I2C peripheral continues producing errors due to a bad behaving slave device. The implementation for this could look like:
task err_t I2CExec(void)
{
    I2CStop();
    err_r err;
    timer bus_err_timer;
    poll {
        if (I2CDone()) {
            err = I2CError();
            break;
        }
    } at most (2) {
        err = ERR_TIMEOUT;
    }
    if (err == ERR_OK) {
        TimerReset(bus_err_timer);
    }
    else {
        I2CResetFSM();
        TimerStart(bus_err_timer, 100);
        if (TimerDone(bus_err_timer)) {
            I2CBusreset();
            poll {
                if (!I2CBusBusy())
                    break;
            }
    }
    return err;
}
The keyword timer is used to allocate a timer. The keyword poll stands for an infinite loop that yields at each iteration of the loop. The yielding means that the execution is interrupted to allow other tasts to execute. The at most keywords after a poll indicates a time-out timer will be started at the start of the poll and that the following statement will be executed if the time-out has occred. The TimerStart function will not restart the timer when it is already running. To execute the get_temp task every 10 ticks, the following code can be used, that uses the every (10) start construct. If the task is not finished yet, it will restart as soon as it is finished.
void run(void)
{
    every (10) start get_temp;
}

Link


Wednesday, December 28, 2024

Advent of Code: Rank 1719

My alarm went of at 5:40, such that I could go down and be ready at 6:00 to solve the last puzzle of this years Advent of Code challenge. Yesterdays puzzle was really difficult and it was way after midnight before I solved the second half of that puzzle with a bit of hacking. I might look at a better program to solve that puzzle. For today, I did get the correct algorithm to solve the problem, but I made a small mistake that required me to do some debugging with the example input that was provided with the puzzle (as there is some examples with every puzzle).When I found the bug, it found the correct answer for the example input and my puzzle input. At 6:18:26, I submitted my answer for the puzzle (being the 2060th person doing so). The second part of the puzzle is simply clicking a link that is only available if you have already solved all other puzzles, and because I had, at 6:18:51, I as the 1719th person doing so. The fact that this rank is a bit lower than the first, means that about 341 persons who solved this puzzle, had not yet solved all other puzzles.


Tuesday, December 24, 2024

Link


Monday, December 23, 2024

Link


Sunday, December 22, 2024

Ein Endloses Geflochtenes Band

At 15:03:27, I bought the book Gödel, Escher, Bach: Ein Endloses Geflochtenes Band written by Douglas R. Hofstadter, translated from the English Gödel, Escher, Bach: an eternal golden braid to German by Philipp Wolff-Windegg and Hermann Feuersee, and published by Deutscher Taschenbuch Verlag GmbH in September 1991, ISBN:9783423114363, from bookshop Broekhuis for € 10.00. I already saw this book yesterday, when I visited the shop, and this afternoon, I went back to buy it. I already have the original and the Dutch translation of this book. I have only read parts of those books. I do not know exactly why I bought this German translation.

Links


Saturday, December 21, 2024

Rozendaal Ateliers

I went into the city where I saw the exhibition Rozendaal Ateliers at Concordia. It is about the artist working at Rozendaal Ateliers. I found the works of the following artist noteworhty:


Sunday, December 15, 2024

Link


Saturday, December 14, 2024

A picture of a Christmas tree

The second part of todays puzzle from Advent of Code was rather cryptic mentioning finding 'a picture of a Christmas tree' in a long sequence of generated images. I first thought that the Christmas tree would be centered in the middle at the bottom and I designed some code to detected this. When this resulted in nothing promising, I went back to the puzzle description and realizing that it said 'some' and not 'all', implying that there could be dots (robots in the description) outside of the Christmas tree. I wrote some code to see if at some point there would be a horizontal concentration of dots. That was indeed the case, but there were multiple occurences of this. When I added code that also looked at a vertical concentration of dots, I did find the correct answer to the puzzle. When I later watched the video Advent of Code 2024 Day 14 - 12th gold star! by Neil Thistlethwaite solving the puzzle, I got the idea to check for the iamge that did not have any dots on top of each other. For him that did result in the correct answer. I later noticed several others also mentioning this idea. I verified it for my puzzle input and found that there was but one image with no overlapping dots. I still wonder if this always the case or that it was engineered like this.

Sapphire Blue

In the past months, I did not find a Moleskine dairy for 2025 in the shops I visited. Last Friday, I went to their Dutch webshop and discovered that they did not have the black version that I normaly buy in stock. So, I ordered a 'Moleskine 2025 12M Daily Hardcover Pocket Sapphire Blue', article code DHB2012DC2Y25, for € 23.90. The postage costs were € 3.95. Today, it arrived at 14:06 (according to the tracking page) in the mail.


Thursday, December 12, 2024

Enschede Lights Up

In the evening, I went into the city to see the Enschede Lights Up event. I saw the following projections or installations: I was too late to see Curious about the DNA of Enschede? by Total-Image. At several places there was mentioning of the year 700, because in the year 1325, Enschede was granted town privileges. There will be a lot of celebrations in the coming year of which the official opening is next Sunday.


Wednesday, December 11, 2024

Carte Blanche

I went to the opening of two exhibitions at the artist collective B93: A day in a lifetime with photographs by Paul Hendriksen and Farewell to 't Winkel with photographs by Martin Klein Schaarsberg, which is about his parents leaving the 't Winkel where he grew up. Paul Hendriks had one of his photographs of a view from the beach towards the sea split into twenty prints showing a part of the original photograph. I thought about which of the individual photographs I liked most and selected the fourth photograph from the left in the second row from the top.


Sunday, December 8, 2024

Advent of Code: 14 seconds

In the past days of solving the Advent of Code coding challenges, I have been rather successfull in finding the answers when I try to find the answers in one try (including compiling the program correctly). To achieve this, I spend some time reviewing my code before compiling and running it. Several times when doing this I found syntax errors and bugs in my code.

Today, the first correct solution to the first part of the puzzle was submitted after 14 seconds by Jeroen de Bruin. On his GitHub page he writes: 'Improving my Python skills using AI.' It looks like he used an AI agent to help solving the puzzle, and in the short time it took him to submit the answer, he probably used the program that the AI generated. It might be the case that some of the other top five submitters also have been us an AI for finding their solution. In the About page of Advent of Code it says:

Can I use AI to get on the global leaderboard? Please don't use AI / LLMs (like GPT) to automatically solve a day's puzzles until that day's global leaderboards are full. By "automatically", I mean using AI to do most or all of the puzzle solving, like handing the puzzle text directly to an LLM. The leaderboards are for human competitors; if you want to compare the speed of your AI solver with others, please do so elsewhere. (If you want to use AI to help you solve puzzles, I can't really stop you, but I feel like it's harder to get better at programming if you ask an AI to do the programming for you.)
The fifth submitter for the first part of the puzzle is Foromo Daniel Soromou, who just took 35 second for the first part of the puzzle and than 61 seconds to find the solution for the second part of the puzzle. The second part is a rather simple adjustment of the first part. Although I have to admit it also took me a second try to find the solution due to not reading the puzzle description in detail, which removes an exclusion condition explicitly stated in the first part of the puzzle. He has not yet published his programs, so, we cannot see how he got from the first to the second part of the puzzle. It looks like he does not have extremely short submit times, so, probably he is just very good at these kind of challenges. Some of the top people in the global leaderboard up until today (that I have not mentioned before) are:


Saturday, December 7, 2024

Do Not Believe in Us

In the afternoon, I went into the city. I first went to TETEM art space where I saw the exhibition Pearl of the Past with works by Lea van Vlodrop. I saw her work the first time on Saturday, July 6 at the AKI Finals exhibition. Next, I went to Fotogalerie Objektief, where I saw the exhibition Morgen ligt de vis erin (Dutch for Tomorrow the fish will be in) with photographs by Emiel Muijderman from his nieuws and report photography. I finally, went to the opening of the exhibition Do Not Believe in Us: Celebrating 25 years of low res hardcore images with works by The C-Men, the duo existing of Julian van Aalderen (Website in Dutch) and Sjors Trimbach (Website in Dutch). The C-Men are a VJ-duo making use of Amiga computers. The works on display are: In the shop I bought from the 'Brokjes serie 1' the '02 Alien' for € 10.00.

Link


Tuesday, December 4, 2024

Collector of things

I finished reading the book jurriaan van den berg: verzamelaar van dingen with text and illustrations by Linda Rusconi about her father Jurriaan van de Berg who was a collector of modern jewerly. 'Verzamelaar van dingen' is Dutch for 'Collector of things.' I started reading the book on November 28 after I received it on October 31. I really enjoyed it. I found it a very interesting and touching book.

Links


Sunday, December 1, 2024

Introduction

Diaries
January 2025
December 2024
November 2024
October 2024
September 2024
August 2024
2025
2024
2023
-- contact --

Family

Frans
Conny
Annabel
Andy
Li-Xia
Others
Pictures

Collecting

Books
Maps
Bookshelves
Art works
Computers
Cameras
Trips
Flights
Weddings
Funerals
Reading
Movies
Useless lists

Hacking

My life as a hacker
Signature programs
Software enginering
The Art of Programming
HTML to LaTeX
JavaScript
eXtreme Programming
Programs

Puzzles

Hamilton cycles
cutting sticks
Califlower fractal
more...


SARS-CoV-2

Tracking
Trends
Prediction
nextstrain.org/ncov



Email

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 1070 HTML-files with a total size of 39,149,026 characters, having 82,968 internal links and 18,345 external links to (more than) 5,407 websites. (At least 795 of the external links are broken.) Furthermore, it contains 246 C/C++ program files with a total size of 5,828,310 characters, 11 MySample scripts with a total size of 85,207 characters, 3 PASCAL program files with a total size of 35,259 characters. and 2 Python program files with a total size of 3,764 characters. There are 70 text files with a total size of 772,678 characters. With respect to images, this site containts 1363 JPEG images (total size 62,328,986 bytes), 146 GIF images (total size 3,765,046 bytes), 95 PNG images (total size 2,302,310 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 2 MP3 files with a total size of 8,717,982 bytes. It also contains 43 PostScript files (total size 308,387 bytes), 2 LaTeX files (total size 132,020 characters), 14 PDF files (total size 16,211,832 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, 169 KML files with a total size of 6,584,358 bytes, 1 bundle files with a total size of 99,918 bytes, and 2 EXE files with a total size of 38,340 bytes. It also uses 19 JavaScript files with a total size of 1,265,061 bytes, This leads to a total size of 154,019,620 bytes.

Copyright

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.