The definition of simplicity

❝An attempt at defining simplicity, the word 'simple'.❞ This is an attempt at a general definition of simplicity that should be broadly applicable. There exist many definitions of simplicity that make soft statements that are ambiguous and therefore easy to interpret in different ways. I’ve attempted a definition such that misinterpretation and therefore discussion should be limited. I have chosen the terms for this definition such that three parts make up simplicity, each covering a different dimension of the answer.


Read more ...

Setting the Linux CPU scaling governor through udev rules

❝How to configure udev to set up a specific CPU scaling governor on boot.❞ Introduction Linux allows you to select your own preferred scaling governor, which is the algorithm that is used control processor performance. On heavy load, the processor will work on full speed, while - during idle times - the processor is tuned back into a low-speed operating mode that is power-efficient. Typically, a linux distribution comes with a particular scaling governor pre-selected. There are many instructions on how to manually configure/select a scaling governor.


Read more ...

The symbiotic relationship of hash and AEAD

❝Observations on combining a cryptographic hash function and AEAD.❞ AEAD and hash function independently are useful cryptographic concepts. A few days ago, I was looking into an interesting and somewhat curious concept called “time-lock encryption”, and starting pondering the added benefits of combining hash and AEAD, i.e using them as a single construct. There does not seem to be much information on this, at least based on a quick search. Most likely because it is too trivial in nature.


Read more ...

Convert your site into a simple progressive web app

❝Converting your site into a web-app that includes an "Add to homescreen" link.❞ You can convert any website into a basic web app installable on mobile phones, with the following steps. You can then incrementally enhance the installed “web app” experience by adding further capabilities like preloaded and off-line content. In this article we’ll just prepare for the basic initial set-up. There are three steps involved: Add a manifest, which is most easily adopted from the basic example at “Your first Progress Web App”.


Read more ...

On Error Handling

❝On error handling - a general outline on case and error handling❞ A living document on the fundamentals of case and error handling. A general programming language-agnostic guideline for application development of all sorts. The article attempts to establish first principles that can be applied in any context where defined trade-offs give you the necessary adaptability to make it suitable to any situation. Note In this document I use “case” and “error” interchangeably. Anything that’s not on the expected happy path is typically an alternative “case” and if this happens to be undesirable we call it an “error”.


Read more ...

On Class Design

❝On the design of classes for simplicity, readability and maintainability.❞ This article goes into the specifics of designing a class such that we can achieve reasonable simplicity, readability and maintainability. In addition, this mechanism achieves desirable properties by working in a minimalist way, and ensures a lean-and-mean implementation. Note that a lot of what is described here is trivial and should be considered known to all developers, however in practice this isn’t the case. In many cases one cannot blame the individual for not knowing, because once you go down the wrong path you need to make compromise after compromise.


Read more ...

Java compile-time static analysis with Error Prone and NullAway

❝A guide into Google's Error Prone compile-time static analysis plug-in and Uber's NullAway❞ Static analysis is often used to identify problematic or dubious pieces of code early. This way we can avoid bugs and mistakes. In the Java ecosystem many already know the standard Java compiler warnings and errors, the feedback from your IDE, Pmd, Checkstyle, SpotBugs (or its predecessor FindBugs), and the likes. However, there are more solutions available, some of them lesser known .. at least to me. With the introduction of Java’s compiler plug-in system, it has become possible to introduce additional checks at compile-time.


Read more ...

Java fuzzing with JQF + afl

❝Performing fuzzing in Java using afl and JQF.❞ Many applications require user input or otherwise untrusted input, in order to do their work. One typically cannot assume that this input is always exactly according to the prescribed format and does not contain any invalid or illegal content. However, testing for every possible violation of the prescribed format is often not feasible. Fuzzing helps with this by automatically generating variations in input and offering it to process by the application.


Read more ...

How to be efficient

❝How to be efficient, using your brain to work for you.❞ This is a reflective article, in which I look back at the last years of open source development, done in my personal time, and professional engineering at work. I’m writing this given the assumption that the mind does not have a single “state of mind” that is suitable for all types of work, but rather has various possible states and not all types of work are suitable for all states.


Read more ...

Secure Boot Linux Shim (Mokmanager)

❝Secure Boot: The linux shim and MokManager❞ Previously, we’ve had a look at secure boot in Fedora 27 / 28. Now we will look at another part of Secure Boot in linux. It is important to know about this aspect in order to have a complete picture of how Secure Boot functions in a typical linux distribution. In part, because having the shim misconfigured, may limit the security that is claimed Secure Boot provides. The Shim fixing a problem The idea of Secure Boot is to have every step in the boot process verified before it is executed.


Read more ...