About these papers

I am one of those people who choose to publish their ideas on a blog. 

The practical reason behind doing this is so that in a conversation I can refer my interlocutor to a text which elucidates my points better than I could conversationally. Admittedly, the opportunity to do this does not arise as often as I wish it did, and even when it does happen, about half the time the interlocutor appears to be reluctant to go and actually read the post, so let's just say that I publish my ideas mainly because I like doing it. 


Incremental Integration Testing

Abstract (descriptive)

A new method for Automated Software Testing is presented as an alternative to Unit Testing. The new method retains the benefit of Unit Testing, which is Defect Localization, but eliminates the need for mocking, thus greatly lessening the effort of writing and maintaining tests.


50 things expected of developers

Games industry veteran Mike Acton gave talk/rant at GDC (Game Developers' Conference) 2019 where he listed 50 things he expects of developers: https://www.youtube.com/watch?v=cV5HArLYajE  This list was transcribed by Adam Johnson and posted here: https://adamj.eu/tech/2022/06/17/mike-actons-expectations-of-professional-software-engineers/ and I am copying it here for posterity.

I found this list useful as reference material; some of the items on this list do not apply to my job because I rarely do anything especially performance-oriented nowadays, and some of the items on the list are good to always have in mind but subject to the programmer's own judgement, on a case by case basis, whether they should be practiced or not.

Here it is:


The Deployable Design Document

blueprint-technical-drawing-4056027 by xresch, in the public domain


A need is identified and a solution is proposed for a novel set of software tools to facilitate the visual composition of technical software design documents as schematic diagrams consisting of predefined software components, and the automatic deployment of runnable software systems from such design documents.


On Microsoft "Visual" products

The logo from Visio version 1.0

This post is intended as support material for another post of mine; see michael.gr - The Deployable Design Document.

One day back in the early nineties, when people were using Windows 3.0 and programming with the Microsoft C/C++ Compiler, a colleague showed me a software design that for the first time he had done not on whiteboard, nor on paper, but on a computer screen, using a new drawing tool called Visio

Screenshots of Visio 1.0 running under Windows 3.1. Click to enlarge.

He showed me interconnected components laid out on a canvas, and as he moved one of the components, the drawing tool re-routed the lines to maintain the connections to other components. This meant that Visio was not just a pixel drawing utility like Microsoft Paint; it had some understanding of the structure of the information that was being displayed. 

On Visual Programming Languages

Logos of various visual programming languages

This post is intended as support material for another post of mine; see michael.gr - The Deployable Design Document.

The idea of creating software using visual tools has existed ever since the first aspiring programmer was bitterly disillusioned by discovering that programming almost exclusively entails writing lots of little text files containing nothing but boring and cryptic text.

On UML (oh, do not get me started)

The UML logo, by Object Management Group®, Inc. from uml.org; Public Domain.

This post is intended as support material for another post of mine; see michael.gr - The Deployable Design Document.

The Universal Modeling Language (UML) (Wikipedia) was intended to be a standard notation for expressing software designs, and to replace the multitude of ad-hoc notations that software architects have been using on various mediums such as whiteboard, paper, and general-purpose box-and-arrow diagram-drawing software. The idea was that by following a standard notation which prescribes a specific way of expressing each concept, every diagram would be readily and unambiguously understood by everyone.

It has miserably failed.


Common mistakes Dutchies make in the use of English

"Dutch Tongue" by michael.gr, based on the logo of The Rolling Stones.

Object-adjective instead of adjective-object.

"I will learn you how to skate." ("Learn" instead of "Teach".)

"When you want, we also have it in white." ("When" instead of "If".)

"Let's meet at sex." ("Sex" instead of "Six".)

"Dear colleagues, hereby the schedule." ("Hereby" instead of "Here is" or "Hereby I give you".)

"I am a cineville" ("cineville" instead of "cinefille") -- there is even a .nl domain misspelled this way.

"We have lot's of bicycle's" (Genitive instead of plural suffix.)

"Meet you at the busstop" (Concatenating words that are not normally concatenated in English.)

Dutch pronunciation rules cause some really weird phenomena, for example when you call Vodafone, the recorded greeting informs you that you have reached "Fodavone".


A Programming Language

"Coding Software Running On A Computer Monitor" by Scopio from NounProject.com


My thoughts and notes on how I would like a new programming language to look like.

The goals of the language are:

  • Simple and elegant. (So that it is suitable for the academia.)
  • Expressive. (So that it is suitable for experienced programmers.)
  • Consistent. (So that it is attractive to developer teams.)
  • Guiding. (So that it promotes best practices.) 
  • Fast. (So that it is suitable for high performance computing.)
  • Lean. (So that it is suitable for resource-constrained computing.)
This is work-in-progress; It is bound to be heavily amended as time passes, especially if I try some new language, like Kotlin or Rust.

Summary of language characteristics


Why the majority is always wrong | Paul Rulkens | TEDxMaastricht

I knew I was definitely going to watch this one, from just the title. It turns out that he comes across a bit annoying due to attitude; nonetheless, the talk is definitely worth watching.


Bret Victor - Inventing on Principle

Interestingly enough, in his code snippets he is using JavaScript, whereas one of my personal guiding principles is thou shalt not suffer an error to go undetected, which means that no scripting language should be used under any circumstances, for anything at all, by anyone, anywhere, ever. But I digress. Excellent presentation.



The Bathyscaphe logo, a line drawing of bathyscaphe Trieste
by Mike Nakis, based on art found at bertrandpiccard.com


This article introduces Bathyscaphe, an open-source java library that you can use to assert that your objects are immutable and/or thread-safe.

The problem

Programmers all over the world are embracing immutability more and more; however, mutation is still a thing, and in all likelihood will continue being a thing for as long as there will be programmers. In a world where both mutable and immutable objects exist side by side, there is often a need to ascertain that an object is of the immutable variety before proceeding to use it for certain purposes. For example, when an object is used as a key in a hash map, it better be immutable, or else the hash code of the key may change, causing the map to severely malfunction.

Furthermore, when an object is not immutable, there is often the need to ascertain that it is at least thread-safe before sharing it between threads, otherwise there will be race conditions, with catastrophic results.

Note that when any of the above goes wrong, it tends to be a bug which is very difficult to troubleshoot.


Fixing broken module names in IntellijIdea

Quite often, when I rename a maven module, IntellijIdea gets confused and keeps showing the old module name in the project view.

  • Re-importing maven projects does not help.
  • Clearing the IntellijIdea caches and restarting does not help.
  • Even deleting the .idea directory does not help.

I discovered that this is happening because: 

  • IntellijIdea keeps information about a project outside of the .idea directory
  • IntellijIdea fails to delete that information when you invalidate caches and restart.

The solution I have found to this problem is:

  1. Exit IntellijIdea.
  2. Go to the application data directory of IntellijIdea (on my Windows machine, this currently is %USERPROFILE%\AppData\Local\JetBrains\IdeaIC2022.1)
  3. Delete the `external_build_system` subdirectory
  4. Start IntellijIdea.
  5. Re-import all maven projects.


Shortly after I discovered this, a new release of IntelliJ IDEA came out, (IdeaIC2021.3) and there appears to be no "external_build_system" subdirectory in its directory. Miraculously, it makes use of the "external_build_system" subdirectory of the IdeaIC2021.1 directory!

Also, with this new version, when I apply the above steps, IntellijIdea for some reason starts to believe that I have chosen to "ignore" all of my pom.xml files.  So, I have to open up maven settings, go to "Ignored Files", and uncheck every single one of my pom.xml files.


Mouse Wheel Natural Scrolling in Windows

Some time ago and for about a year I used a Mac, which had natural scrolling by default. I decided to resist the urge to immediately configure it to work like Windows, and instead I made it a point to give natural scrolling a try for at least a while before making up my mind as to whether to keep it or lose it. While giving it a try, I was surprised to see that it was very easy for me to adjust to it, despite the fact that I have been using the unnatural Windows scrolling mode for nearly 30 years. (Ever since the mouse wheel became a thing.) I found that natural scrolling was indeed... natural. So, I kept using it, and I became addicted to it. Ever since then, I always have to configure natural scrolling on any Windows machine that I get my hands on before I can start using that machine.

Artwork based on original mouse-15887 by Arkthus from the Noun Project

Windows is so poor that it does not offer any user interface through which a novice user can change the mouse wheel scrolling mode. To do that you have to edit the registry, and the setting you are going to be modifying is a machine setting, so you will be affecting the mouse wheel mode for all users, not just for yourself. This is unbelievably lame, but hey, that's Windows, we are totally used to lame.


Getting AntiVirus software to trust a Windows Application

anti virus

One of our customers tried installing our Windows Application on one of their computers and their antivirus software complained. They in turn complained to us, so we had to find a solution. I am documenting the solution here.


Digital Audio Waveform Generation

For various projects of mine I need to be able to synthesize sound, so I decided to take a quick dabble in the realm of Digital Signal Processing. I mean, how hard could it be, right? 

After some fooling around with the Sampled Audio Subsystem of the Java Virtual Machine I was able to hear sinusoidal waveforms of various frequencies from my speakers, and I was starting to think that I am probably almost done, until I tried to play square waveforms. That's when I realized that I had barely scratched the surface. The square waveforms sounded pretty awful at any frequency, and especially at high octaves they sounded like random notes. Triangular waveforms, sawtooth waveforms, really anything except sinusoidal waveforms all suffered from the same problem.

A bit of googling around soon revealed the name of the source of my troubles: aliasing.

A naïvely sampled square wave, exhibiting a bad case of aliasing. Note how some of the peaks and valleys consist of 3 samples, while some consist of only 2 samples.