November 17, 2022

Scoped web search results

During programming I still need to look up a lot of implementation details of features I am using; it appears that I do not know many things by heart, obviously – unfortunately. How to settle a discussion about HTTP response codes when it comes to 422 versus 400, 401 or 403? I need to look that up… I am an avid user of the MutationObserver and the IntersectionObserver, but I find it hard to remember all methods and options. I need to look that up too!


October 06, 2022

Web Development with Docker, from PHP7.x to PHP8

My other article about web development via the MAMP stack in Docker is the most popular article of this website to date. That’s great! It feels good to give back to the community from which I learned so much over tha past 15 years! This article is a follow up when using a custom PHP8 Docker image.


October 01, 2022

CSS has has!

The CSS feature :has() is a very powerful addition to selectors. This article is about the evolution of feature detection code that is production ready!


August 08, 2022

Bullet Journal - Why I Optimized My Handwriting

I developed a new way of handwriting during the first few months of Bullet Journaling. As one of my own requirements is that my Bullet Journals should be well readable and look good, and my original handwriting does not meet this standard.

Actually, I can still write those beautiful standard joined handwriting characters we learned in Primary School, but it takes so much time to write them… over the years this handwriting developed – or degenerated – into an ugly fast way of writing. Not usable in my Bullet Journals.


January 28, 2022

Bullet Journal - Do what works for you

I see so many tips on social media, even implicit, about what you should or should not do in your Bullet Journal, and I must say, I disagree with a lot of them. Even though a lot of Bullet Journalists advocate that anything goes, there’s still a lot of advice that sound like The Law of Bullet Journaling.

I’m against most of these rules. Though this article might sound like a rant, it is not! It is about that you should do what works for you and a hommage to minimalism.


September 04, 2021

Developing with Docker, PHP, Apache and MariaDB

Oh Docker…

It took me quite some time before I got on the Docker boat (pun intended), but since last few weeks, I’m totally in. This article describes a way to set up a MAMP development environment with Docker, Apache, PHP and MariaDB (i.e. MySQL).

I was cleaning up my laptop as I had only 6Gb left on my 2013 MacBook Pro. I had both Macports and Homebrew installed… Why? I can’t recall actually. But I found out both use an aweful lot of diskspace. I deleted both and wrote a docker-compose.yml with about 50 SLOC that’s easier to maintain and easy to set up.


November 28, 2020

Perlin Noise in JavaScript

Perlin Noise, you’d almost think it’s a punk rock band name. But it’s not! But it is noise, very elegant noise. I learned about Perlin noise back around 2007, when I was teaching at MAD Tech in Groningen, the Netherlands, as tutor computer programming. I taught art students the basic principles of computer programming with the aid of Processing.

After visiting Ken Perlin’s website at NYU, I noticed all his code snippets are written in Java. I hardly know Java… I have not had any formal education in computer science or programming: I learned programming in practice. I can read Java, but I won’t understand all of it. So let’s port Perlin Noise to JavaScript then…!


November 11, 2020

Slot machine mathematics in JavaScript

About two years ago I got the idea of creating an online slot machine. The purpose was not to earn any money with it, the goal was to create an online artwork that consists of a slot machine. I got inspired by a work from Jeff Koons called “Three Ball Total Equilibrium Tank”: a glass tank filled with some fluid in which three Spalding basketball balls are floating in total equilibrium. I wanted to have the math correct. This lead me to research how slot machine math actually works, and how I would need to implement this in JavaScript, using React.