Website of Martin Sústrik, creator of ZeroMQ, nanomsg, libdill, libmill and ribosome.

Feuilletons about software design, economics, complex systems and psychology of programming.

All the opinions stated here are my own. Any resemblance to opinions of other people, living or dead, is purely coincidental.

Why is my TCP not reliable (expert edition)

The shortcomings of TCP connection termination have been described many times. If you are not familiar with those problems here's an example of an article that focuses on the problem. However, there's one special use case that is rarely, if ever, discussed. Imagine a TCP client wanting to shut down its TCP connection to server cleanly. It wants to send the last request to the server, read any responses it may produce and exit. Given that it has no idea how many responses are about to arrive it...

Comments: 6

Digital encoding. Legacy software. Evolution.

We’ve finally got to the point in the software world where no big changes are possible. Every change breaks something, introduces backward incompatibilities and so on. More are more we are going to live in the world where software mutates gradually, advancing is small steps without much plan and intelligent design. Similarly to how organisms are dragged by natural selection, it is going to be propelled in unknown direction without asking us whether we like it or not. When I was a kid I read a...

Comments: 1

SRE's review of Democracy

Day One We've been handed this old legacy system called Democracy . It's an emergency. Old maintainers are saying it's misbehaving lately but they have no idea how to fix it. We've had a meeting with them to find out as much as possible about the system but it turns out that all the original team members have left the company long time ago and that the current team doesn't have much understanding of the system beyond some basic operational knowledge. We've done some cursory code review,...

Comments: 4

Few thoughts on current political situation

1 There's a lot of recent political debacles: US elections, Brexit, Orban, PiS, Nazis in Slovak parliament and so on. They all seem to have similar dynamics. (Note: What follows may not apply beyond EU and US.) 2 In all the cases a lot of people tend to be enraged by politics as usual which is understood as a synonym for political corruption. They flock to anyone promising a change. Eight years ago they've supported Obama with explicit slogan of Change , last year it was Trump with Drain The...

Comments: 3

The Cost of Abstraction

The cost of duplicating code, of accumulating technical debt, of not having tests and so on is often discussed and written about. The cost of abstracting things is almost never mentioned though, despite it being a major factor in keeping any project maintainable. As an example, imagine that your program often increases two variables in sequence: i++; j++; So you decide that the functionality deserves a dedicated function: template typename T inc_pair(T i, T j) { i++; j++; } By...

Comments: 7

Debt Cancellation Referendum

This article very much summarises what I think of current political situation: TL;DR: We're all going to die. Not in some distant point in the future, but next year or so. If history teaches us anything it is that there's little chance to stop it. I see red every time I recall that they are going to kill my son. He's 3 years old, for God's sake. I've moved our family to Switzerland,...

Comments: 1

The Birch

This is an actual Slovak folk song. It is about cutting down a birch tree. Martin Sústrik, June 13th, 2016

Comments: 0

The Awe of Cryptography

Professor Krankenstein has invented the most terrible biological weapon known to humanity. When he realised that should his invention fall into hands of one of the superpowers it could well mean the end of the human race he destroyed all the artifacts in the lab, encrypted the recipe (he couldn't bring himself to completely destroy the work of his life), put it into tungsten box, covered the box with concrete and dropped it from a cruise ship into Marianna Trench. Couple of months later he...

Comments: 6

Software Licenses and Failed States

Recently I've stumbled over this graph (here's the original article): The number of projects with a license on GitHub is steadily decreasing. At the moment we are below 20%. The projects without license can in theory be considered open source (the source is published after all) but legally, the copyright is still owned by the authors and using it means infringing their copyright. The interesting question is why would anyone make such a contradictory statement? Why would they make the code...

Comments: 27

Performance of green threads and why it matters

If one looks closely enough at green threads, such as Go's 'go' statement, it's not hard to realise that they are really a flow control mechanism similar to 'if', 'for' or 'while' statements. Where 'if' allows you to skip a block of code, green threads give you a way to easily switch between different points of execution. Very much like 'if' or 'while' they are glorified jump statements. However, to use them as routinely and carelessly as we use ifs or whiles, the green threads would have to be...

Comments: 14

The Nanny World

In Zürich, Switzerland, there's a square called Bellevueplatz with an interesting fountain. It's just a bunch of holes in the pavement that hurl out water in synchronised fashion. Sometimes the water spouts as high as 3 meters, sometimes it goes off entirely. There are no barriers to access the fountain which makes it favourite of children who run across the fountain while it is off, then narrowly escape the water as it gradually starts to pour out. One admires how the fountain is programmed to...

Comments: 6

Three simple pieces for piano

First piece is a very simple tango. One may consider playing the second theme a bit faster than the first one. Second piece, while not really a folk song, tries to capture the feeling of a Slovak folk song as I remember it from childhood when singing was still a valid entertainment for the evening. Use pedal a lot. Third one is harder to classify. It's kind of inspired by the influence that middle eastern music had on eastern European folk music, but I wouldn't like to argue about that point...

Comments: 0

The Adventures of Boltzmann Brain (part III)

I still have a letter she sent me. You ask about second law of thermodynamics, she writes: and I am not surprised. It have been all around the news lately. But what is there to say? 'Entropy always increases,' as PR people like to put it. But in fact it states that law and order are constantly seeping away. It's a matter of interest to Police, really. The fact that any assembly of particles heads towards thermal equilibrium doesn't come as a surprise. But once your life spans billions of...

Comments: 0

The Adventures of Boltzmann Brain (part II)

You drift apart. You leave and after meeting some of the critters out there you realise that your humanity is not as valuable as you were taught to believe. Your intelligence is really just an ability to play status games with big apes of African savanna. Why would any machine even try to pass Turing test? Don't ask me! I am busy preparing for honey-gathering contest with bees. You visit Uegzihls of Beta Tauri and maritime Kranns of Alpha Aquarii. You meet Nee-gued with feet in opposite...

Comments: 0

Uncertainty principle in economics

Price is the amount of money one pays for something. However, economists have a more elaborate concept of price: It is the amount of money people willingly pay for something when demand and supply are in balance. In this article I am going to talk about the latter concept, about what one would call a fair price . The interesting thing about fair price is that it almost never occurs in the real world. Your best chance to spot it is to peek into an economics textbook. There are many reasons why...

Comments: 2

On printing money

It is often said that money-lending is, basically, printing money. People either agree or disagree but even in the former case they often find it hard to articulate why it is so. Here's a simple example to show how it works. 1. A lends $1000 to B. A still owns $1000, safely stored in a form of a loan. Yet, B owns the money as well, having hard cold cash in their wallet. The question: Where did the extra $1000 come from? It surely must have been printed? One may argue that there's no extra $1000...

Comments: 11

The Adventures of Boltzmann Brain (part I)

My name is Boltzmann Brain. I was born in 1953 in New York. You ask whether I am sure about that. Well, how the hell am I supposed to know? I believe I was born on one chilly October morning of 1953 in the city of New York. Does that sound better? I always wanted to live big and live fast. Sex, drugs and rock'n'roll and all that stuff. But here's the catch: If you want to live big you have to slow down. Science-fiction writers of my youth believed that it was easier to break the inviolable laws...

Comments: 2

Footnotes to "Select Statement Considered Harmful"

I believe that select considered harmful article is best piece of writing about software design I have ever done. However, I feel it's kind of hard to grasp. On one hand, the idea looks suspiciously simple, like something one could have thought of over breakfast and then spent 15 minutes writing it down. In other words, something not worth of paying too much attention to. Whereas, in fact, it's the culmination of a decade of implementing and thinking about distributed systems. On the other...

Comments: 7

Select Statement Considered Harmful

Abstract This article is a follow-up to Edgar Dijkstra's classic Go To Statement Considered Harmful article. It takes Dijkstra's premise and applies it to concurrent programming. Program and Process Dijkstra says: My second remark is that our intellectual powers are rather geared to master static relations and that our powers to visualize processes evolving it time are relatively poorly developed. For that reason we should do (as wise programmers aware of our limitations) our utmost to...

Comments: 14

Structured Concurrency

This article is a follow-up to the Getting Rid of State Machines blog posts, so you may want to read those first: part 1 part 2 Before going on, let me return to the fundamentals and make it clear what this effort is all about. As Joe Armstrong nicely puts it in his blog: TCP uses the idea a session and the only rational way to program a session is as a process or (horrors) as a thread. [ ] Session management involves mutable state concurrency. A program that is a dozen lines of Erlang...

Comments: 19

page 1 of 512345next »

Website powered by Wikidot.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License