Refining 'simplicity'

❝Refining the definition of simplicity: 'specific' becomes 'dedicated', 'deoptimized' becomes 'unoptimized'.❞ In “The definition of simplicity” I explained my proposal for how to define simplicity, such that this “intangible” concept can be expressed as a property triple. A good definition of simplicity should “feel” correct in the same way we all “feel” what it is for something to be “simple". Original definition: simple = specialized & deoptimized & reduced Previously I defined simplicity as such and explained how all three properties are complementary.


Read more ...

git: merge only the completed work

❝The benefits of merging only a completed work, forgetting in-progress development history.❞ Something that pops up occasionally in a conversation on software development, is how one should reintegrate feature branches into the main line of development (typically “master” or “develop"). There are a number of options for reintegrating development work that lives on a separate branch: Merge the branch using a merge-commit. Rebase feature development work on top of the main line. Introduce the work, squashed into a single commit. In this article, it is assumed that a new feature is developed on a separate branch, then reintegrated when finished.


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 ...

What if Programming Is Like LEGO?

❝What if programming would be as easy as playing with LEGO-bricks?❞ TL;DR There is no point in searching for programming-like-LEGOs. PHP allows us to pretty much do the programming-like-LEGOs thing. It is insufficient in the long run. “LEGO-likes” leave a lot to semantics, therefore do not give us the level of control we need in software development. Disclaimer I have little (recent 😁) experience in creating with LEGO. I may slip up in painting a picture of LEGO that is too limited or subtly incorrect.


Read more ...

Proposal: refining Go export conventions

❝A proposal for Go coding conventions regarding access control.❞ Conventions for refined access control The Go language is different in certain ways. One of these ways is the how access control is managed. This proposal builds on the type system and existing access control mechanism to increase the granularity of access control. As Go’s syntax is limited to ‘exported'/'unexported', it cannot be enforced by syntax. However, it can still be applied by convention. Available mechanisms: managing type access through exported/unexported.


Read more ...

The hackability of simplicity

❝How the original 'hacks' are made possible by simplicity.❞ In ‘The definition of simplicity’ we looked at how we may define simplicity in terms of 3 properties that help to evaluate the simplicity of a solution. While writing the blog post, I realized that actually simplicity may be the determining characteristic for a solution to be used as what we call a “hack”. That is, the original term “hack”, referring to a clever solution / workaround using parts not originally intended for that purpose.


Read more ...

The definition of simplicity

❝An attempt at defining simplicity, the word 'simple'.❞ 2020-07-16: a refined definition of simplicity is published in which ‘dedicated’ is preferred over ‘specialized', ‘unoptimized’ is preferred over ‘deoptimized'. Giving definition simple = dedicated & unoptimized & reduced. 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.


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. However, being curious, I decided to look into it myself.


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 ...