Chosen links

Links - 13th August 2017

Ron Jeffries: New framework — the Increment

I’m not planning to produce a new brand-named framework, but I am interested in ways of deriving, expressing, describing, and developing the ideas that surround “Agile[1]” software development. I’ve been running on at length about the “Increment”, and today I’m wondering whether the Increment could be a driver for successful software development in the “Agile” style. Walk with me — we’ll explore the idea.

CAP theorem & organizations

The trick is to decentralize everything to allow for independent action, but then centralize everything to provide consistency

Please don’t hold yourself or others responsible for beating CAP with an org chart, I guess is what I’m saying

AsciiDots - The result of combining ascii art, electrical engineering, and programming

AsciiDots is an esoteric programming language based on ascii art! In this language, dots, represented by periods (.), travel down ascii art paths and undergo operations.


Linux load averages: solving the mystery

In 1993, a Linux engineer found a nonintuitive case with load averages, and with a three-line patch changed them forever from “CPU load averages” to what one might call “system load averages”. His change included tasks in the uninterruptible state, so that load averages reflected demand for disk resources and not just CPUs. These system load averages count the number of threads working and waiting to work (waiting on CPUs, disks, and uninterruptible locks), and are summarized as a triplet of exponentially-damped moving sum averages that use 1, 5, and 15 minutes as constants in an equation. This triplet of numbers lets you see if load is increasing or decreasing, and their greatest value may be for relative comparisons with themselves.

The use of the uninterruptible state has since grown in the Linux kernel, and nowadays includes uninterruptible lock primitives. If the load average is a measure of demand in terms of running and waiting threads (and not strictly threads wanting hardware resources), then they are already working the way we want them to.

In this post, I dug up the Linux load average patch from 1993 — which was surprisingly difficult to find — containing the original explanation by the author. I also measured stack traces and time in the uninterruptible state using bcc/eBPF on a modern Linux system, and visualized this time as an off-CPU flame graph. This visualization provides many examples of uninterruptible sleeps, and can be generated whenever needed to explain unusually high load averages. I also proposed other metrics you can use to understand system load in more detail, instead of load averages.

Font-size: an unexpectedly complex CSS property

It’s a CSS property probably everyone who writes CSS has used at some point. It’s pretty ubiquitous.

And it’s super complicated.

“But it’s just a number”, you say. “How can that be complicated?”

Writing I/O-free (Sans-I/O) protocol implementations

This informational document is an attempt to make the case for implementing network protocols without performing I/O, and to provide concrete assistance and instructions for doing so in Python.

What Is An I/O-Free Protocol Implementation? An I/O-free protocol implementation (colloquially referred to as a “sans-IO” implementation) is an implementation of a network protocol that contains no code that does any form of network I/O or any form of asynchronous flow control. Put another way, a sans-IO protocol implementation is one that is defined entirely in terms of synchronous functions returning synchronous results, and that does not block or wait for any form of I/O. Examples of this kind of application can be found on the landing page.

Comparing the cityscapes of The Witcher 3, Dark Souls and Bloodborne to medieval paintings

Mention the city in the middle ages, and you likely either conjure images of streets awash in faeces and offal, or of a cosy collection of quaint houses reminding people of gallant knights and ladies. Even though cities harking back to medieval times have been a staple of fantasy games ever since the inception of the genre, they usually do little to challenge the clichés presented by Renaissance fairs or grimdark pseudo-realism. To make things worse, those sterile spaces function primarily as pit stops for the player, a place to get new quests, to rest, or to trade. It’s difficult to imagine everyday life in those places once the hero is out of town. They’re little more than cardboard cut-outs (I’m looking at you, Skyrim).

A handful of games, however, try to paint a more interesting picture. The Witcher 3 boasts a handful of cities that would be exemplary in any medium, but, being found in a video game, have the additional advantage of being able to invite players to intimately explore and study them from every angle. Cities like the central European Novigrad or Oxenfurt, or the Mediterranean Beauclair are vibrant places whose fundaments are firmly grounded in the middles ages despite their more fantastical aspects.

Blog post idea

Computers : a pile of things that are more or less similar, and lie more or less badly in the way they work internally.

Examples : processors and programming languages, networks and processors, VMs and CPUs,

1. You’re probably wondering why I so often put the word “Agile” in quotes. This is my passive-aggressive way of responding to the fact that the term means many things to many people. I myself use the rough definition that Agile software development is an approach that is in good accord with the values and principles of the Agile Manifesto.