Arnt Gulbrandsen
About meAbout this blog

Saudi science fiction

This is what the airport in Dubai showed me on the landing page when I connected to the WLAN there:

I've never been to Dubai, the city. Does it look like that? Maybe the photo borrows a great deal from the style of old science fiction paperback covers, or maybe the city planners in Dubai really like Don Dixon's SF covers and are trying to build a future city in that style. If so, I think they should reread Crash, and maybe High-Rise by J. G. Ballard, an author of fine science fiction.

It's not just Dubai. Here are two renderings of hotels to be built in the Saudi Neom project:

Wow! More SF photos on Dezeen's article about it. I'm not sure I'd pick that as the location for my next vacation, but as a matter of well-executed genre design, wow! They should build it so it can be used as a set for action films.

As an aside, if you look very closely, you can just about see that the women on these photos have naked knees and shoulders. Saudi future or science fiction.

A correction

John Gruber wrote about Richard Stallman's disgraceful behaviour in September 2019 and again two weeks later. Read that, and maybe the original article too. This isn't about Stallman though, it's about the correction, so today the original article is a digression.

I quote the correction from the original article: [UPDATE 7 OCTOBER 2019: Please read this correction regarding an erroneous allegation originally contained in, but now removed from, this article.]

That's the way to do it. I think that's the best correction I've seen on the web; frank about what the mistake was and that it was a mistake, frank about how and why it happened, apologetic, frank about what changes were made to the original blog posting to correct the mistake, posted as a separate article so it would be on the top of the home page for a while, and last but not least, with links in both directions.

Yes, I post this today because I'm annoyed about a different correction on another site.

Kinds of answers

The simplest form of question is a yes/no question. How many kinds of answers does that permit?

There are eight kinds, as I count them. There's yes and no, including lookalikes like yes, in my opinion or most probably yes. This is about kinds of answers, not details.

Three more kinds of straight answers: neither, both and not 100% straight, it depends. (Some yes/no questions don't allow neither/both.)

The sixth kind is to talk about the question, for example you've heard a politician say that's a really interesting question and […More…]

Rhetoric in software development

Or: Leveraging Schopenhauer's book of dirty tricks in agile software development.

This rather lengthy posting started when I read Schopenhauer's little book about rhetoric. The book is great, I particularly like the smoothly satirical preface. He describes about forty dirty tricks, and as I read I realised that I've heard every single trick in scrum meetings etc. I think some of my past colleagues would nod as they read Schopenhauer's preface: Nobody absolutely knows yet, but later, with the benefit of hindsight it may become clear that I was right today, so it's best for everyone if I have my way in this meeting.


Rhetoric (/ˈrɛtərɪk/) is the art of persuasion is Wikipedia's first sentence on the subject. When people use the word, they often don't use it to mean exactly that, though. Sometimes it means an argument or an opinionated statement, sometimes a choice of phrasing, sometimes wording with more elegance than substance, and quite often the word rhetoric is used to mean any device that's used to win a discussion except by achieving a shared understanding of the subject matter.

That isn't what Aristotle had in mind. I don't think Aristotle ever used dirty tricks such as the door in the face, the Gish gallop, guilt by association, or making jokes about other participants in a discussion.

Books on rhetoric study, analyse, categorise and explain rhetorical devices, which are means to persuade, or if not persuade, at least to carry a meeting. Today I want to speechify a bit about using the same field of study, these same devices, in three other ways: ⓐ Listening more attentively to what others are saying, noticing unfair rhetoric, ⓑ countering or neutering that unfair rhetoric, and ⓒ staying fair.

Below you'll find Schopenhauer's dirty rhetorical tricks, grouped and worded as I see it. I describe each (fairly or unfairly), mention an agile software example to help you learn to notice it when someone uses that dirty trick, and if I can, I write a bit about how to counter that trick while staying fair and within a normal software development context. […More…]

The miracle button

I read this a few years ago:

In Gurri's telling, High Modernism had always been a failure, but the government-media-academia elite axis had been strong enough to conceal it from the public. Starting in the early 2000s, that axis broke down. People could have lowered their expectations, but in the real world that wasn't how things went. Instead of losing faith in the power of government to work miracles, people believed that government could and should be working miracles, but that the specific people in power at the time were too corrupt and stupid to press the CAUSE MIRACLE button which they definitely had and which definitely would have worked. And so the outrage, the protests — kick these losers out of power, and replace them with anybody who had the common decency to press the miracle button!

So for example, Gurri examines some of the sloganeering where people complain about how eg obesity is the government's fault — surely the government could come up with some plan that cured obesity, and since they haven't done so, that proves they're illegitimate and don't care that obesity is killing millions of Americans. […] The general formula is ① take vast social problem that has troubled humanity for millennia ② claim that theoretically The System could solve the problem, but in fact hasn't ③ interpret that as The System has caused the problem and it is entirely the system's fault ④ be outraged that The System is causing obesity and homelessness and postmodernism and homosexuality and yet some people still support it. How could they do that??!

I read those paragraphs and cannot unread them. In my eyes, half the protests now look like secret or unknowing demands that someone should press the miracle button.

Someone's angry that mobile phones don't last for ten years: The manufacturers keep phone lifetimes short to boost their sales! Because they're evil! And when I read it, I think of the miracle button that the manufacturers don't have.

The diary of an assistant mistress

Devuan 4.0 has been released, codenamed Chimaera, and it reminded me of Teri Norton, whose email address was chimera@… and who seems to be gone from the internet. What a pity.

Teri's Diary of an assistant mistress is preserved by the Internet Archive, though. It purports to be the diary of a teacher somewhere in Brtain and maybe it is. The author seems to know a thing or two about schools, at least. She also has a sex life and makes words dance. JanuaryFebruaryMarchAprilMayJuneJuly • intermezzo • September • October isn't in the archive • NovemberDecember and an addendum, the FAQ.

Cruise ships in the Venetian lagoon

I go there sometimes, it's a magic place. Even the densest throngs are quiet compared to many city streets elsewhere, and there's always beauty around the corner.

Last summer I biked along the lagoon from Chioggia to Venice and saw this sign. GPL refers to ocean-going passenger ships, grand passenger liner if you will. I quite agree with it. Banish the GPL, build a port for them in the deep water outside the lagoon, let the passengers cross the (1m deep) lagoon in shallow-draft boats and arrive in Venice properly. […More…]

Merging and deploying the Brexit PR

Ten more months pass, the British still… do. This is awful. (I've moaned about it before, yes.)

Experience, review, discussion and routine should all guard against mistakes, so how can such a large country as Britain carry out something quite so badly? Despite all its newspapers, the BBC, the well-established political parties and NGOs, despite the think tanks and the excellent civil service at Whitehall? I suppose I ought to feel bad for all the expats whose future health insurance status is a bit Schrödingers-cattish, for all the people who work in companies with cross-border supply chains, and so on and so forth, but I actually do feel bad that these are the same techniques we use to ensure quality in software: Experience, review, discussion and routine. And they're not working.

There's a failure here that that warrants study.

Update: On a surface level, the problem is that they're ignoring problems. A time-honoured tradition. A confident assertion that prospective customers will do so-and-so can carry a meeting, right? Even if the actual prospects don't feel obliged to behave as predicted. What worries me is that these assertions are working so well, on so many people, for so long.

Thanks, Devuan

Sometimes one friend or another has computer problems. I am pleasantly surprised by the number of times these problems might have affected me but do not, because I've switched to Devuan everywhere. No more Debian, no more Ubuntu, even my minimac runs Devuan now.

Devuan, for those who do not know, is Debian with an absolute rejection of systemd. Some devuan people also dislike anything else that's new, but I don't mind that. Haters somehow always find something to hate, and at some point I seem to have learned to let them hate.

Devuan has something I like: The unix tradition of valuing simplicity over a complete feature ticklist, and it has the debian package repository. Simple, mostly good enough. Sometimes the unix tradition sucks, for example syslog and text log files aren't really good enough, but simplicity is a feature that I personally value highly.

In a few years unix will be fifty years old, and I think that at that point, devuan will be the pinnacle of unix.

On the phone with customer service

There has been a mishap, followed by increasingly emphatic denials, finally an apology. I'm not angry about the original mishap.

At first I wanted to send them this photo. But they're not going to learn from the mistake, they're not going to even try. All I might achieve is to make some lowly employee feel bad. Sigh. I post it here instead, tagged rant.

Bless those who add a unit test after each fixed bug, and then add another, for good karma. Bless those who often do that, too.

Friday nudes, et cetera

I hate friday nudes. Always have.

Friday nudes, for those who haven't come across them, are a feature of some workplaces. At some companies, the dress code is less strict on Friday, Friday being almost weekend and all that. Time to lighten up! So some people will mail around a photo of a bare-breasted beauty around lunchtime on Friday.

I've always hated those.

It's not that I hate nude photos, or even porn. I don't, not at all. Many may be tasteless, kitschy or degrading, but the same adjectives apply to much advertising and many TV shows too (I once watched an episode of something called Idol), and all that is too commonplace to hate. I'd be smothered by my own hate.

No, my hate is more selective. NSFW refers to anything to do with nudity, whereas we should fighting a war on distraction. Working while being distracted by looking at boobs is bad, […More…]

Brexit

I make mistakes. I'm a programmer, half of what I do is giving birth to new bugs, and I hate it. So of course I try to improve that percentage. To identify and avoid error-prone routines, to interrupt mistakes before they've gone too far, etc.

Brexit scares me. Britain is an entire country with all the democratic mechanisms and institutions, with a long tradition, with no external pressure, with a full set of checks and balances, no lack of time or other resources except what they imposed on themselves. If experience, review, discussion or routines guard against mistakes, then noone should be more able to avoid big mistakes than Britain. Yet with just three weeks to go, they still seem headed for an utter mess. I can't bear to watch it.

Seeing like a state

This is the third blog posting in three days. The intelligent reader may have guessed it: I'm tidying my office again. Yes I am. One desk is tidy already, and while working on the second desk, I found a book called Seeing like a state in one of the piles.

There was a note sticking out of page 352, so of course I opened the book and started reading.

The book is a strong condemnation of various well-intended reforms and schemes. Why did so-and-so agrarian reform fail? Because the reformers expected reality to match a simplistic model and when it didn't, they tried to bend reality to their model instead of the other way around. In some cases reality eventually bent (at considerable cost to the people whose lives were being reformed), […More…]

Audience and goal

Written texts have two major invisible properties: audience and goal. I can't remember who taught me about that, but I taught it to my friend Abhijit Menon-Sen when we started working together, and the texts he and I have written together over the years always have a hidden comment describing the audience(s) and goal(s) for that text. That's why those texts are crisp and to the point.

Here's an example. Not by us together, this one is his alone.

Abhijit and his girlfriend Hassath have recently built a house, it's aaaaalmost done now, and a few weeks ago Abhijit wrote a blog posting about an electric power gadget they bought for the house. The audience for that posting consists of two groups of people: Friends who want to know how the house is coming along, and people who are searching for reviews of the gadget before possibly buying one themselves. The goal for the first group is to describe the power problems and how Abhijit and Hassath are coping, and for the second group, to tell them whether and how well that particular gadget helps with that kind of power problem.

Now please read about their amazingly unreliable power supply and consider how each sentence, each paragraph and each picture helps with either or both of those goals, in the eyes of those audiences. Does a sentence say something that both audiences already know, or does it tell either or both audiences something Abhijit wants to tell them? Does a sentence help with one goal but disturb the other? What does the photo achieve? Would mentioning the audiences or goals in the text help to achieve either of the goals, or would it distract or detract?

That posting may be stylistically vapid, but it achieves Abhijit's goals and that makes it good writing. The rest is a mere question of how good.

Now please start formulating an explicit audience and goal before you write your own email, documentation, almost anything. Help save the world from pointless blather and documentation that forgets the critical points.

Open source is succeeding, and rms is unhappy

This summer Dropbox released an image compression thing called Lepton, effectively a better way to encode JPEG (same principles, same pixel results, considerably better execution of various implementation aspects). Dropbox didn't have to do that. But one does nowadays, it's become part of modern programming culture. Using and releasing open source is a best practice, as the buzzword goes.

Around the same time Richard M. Stallman posted a condemnation of companies that both support free software and teach classes in use of nonfree software. Condemnation is the word he chooses, not my choice. No fraternisation with the enemy!

That enemy is us, now. The enemy is those who follow today's conventional best practices. A stealth-mode startup I am talking to has ten projects on github, because the CTO there has decided that whatever good programmers consider good is what shall be done in his realm. Most of the projects are forks, some with PRs for upstream, others described as the code in this fork isn't really suitable for upstream, but take it if you want. Good, polite behaviour, best practice indeed, and very different from the GNU purity that rms requires.

What is left of rms' following if the good programmers are declared to be enemies? The outlook for the GNU project is poor.

On software architecture

It's not particularly sensible, and not related to any software architecture I deal with at the moment, but I do want to post this photograph. Nominally it's is a photo of the concrete kind of architecture, not the software kind, but doesn't it look like an enterprise-ready, flexible, feature-rich and polished staircase framework?

It's from a hotel interior, so I expect there's a lift off-camera that people use when they want to get anywhere.

Eighty million polygons

Reality is eighty million polygons per second, said a weighty graphics book I read almost twenty years ago, when I was looking to draw perfect bezier curves quickly. RiscOS could, I wanted to.

Maybe that's not true any more. Reality has changed. […More…]

Someone has to make the decisions

It's weasel wording and angers me. The real meaning of the statement is almost always that someone is me, and we both know I'm not particularly well qualified.

Another ancient Trolltech principle was the person who did the work had final authority over how it was done. Not exactly a result of planning — I think that principle came to be when the passion for quality clashed with the workload. A serendipitous compromise.

Reviewing code and people

Some years ago an Indian friend of mine was invited to speak at a conference here. He applied for a visa, then the visa application was rejected. He got someone to phone around behind the scenes, and learned the real reason for the rejection.

The decision made sense.

My friend was an expert in his field and could easily get a job here. The fact that he was invited to speak at that conference proved his expertise, and his connections here proved that he could easily get a job. Further, my friend was single (on paper), did not have a highly paid job in India, and he was young and easily able to move. The visa application reviewer quite sensibly inferred that that my friend had the option of not returning.

The visa application reviewer used this decision matrix when processing the application:

Application acceptedApplication rejected
Friend planned to returnNeutralNone
Friend planned to overstayNegativeNone

This matrix leaves out the impact on the conference and on my friend, because their interests did not matter when the decision was taken. The government at the time really wanted to reduce the number of people who overstayed their visas, and almost ignored other factors when it made the decision matrix. It didn't particularly care to please my friend, or to displease him, it wanted to reduce the number of overstayers.

It's easy to curse the xenophobic so-and-sos who guard borders, but when I look at that matrix, I can understand why the reviewer decided to reject the application, if the chance of overstaying seemed even just a little above zero.

Code reviews are like that in some companies. They can be easy to curse, too.

Patch acceptedPatch rejected
Patch worksNeutralNone
Patch is brokenNegativeNone

Given that matrix, of course each and every meeting is more important than getting progress on the patch. Of course any minor objection is enough to block the patch or ask for another revision. Some people say things like if you haven't found any problems, you haven't reviewed properly. I think that when someone can say that with a straight face, the team is secretly using the decision matrix above.

For the next visa application my friend changed the matrix. Among other things, he arranged for a Sir Humphrey Appleby to telephone the consulate and explain that the minister hopes you will treat this young man favourably.

Application acceptedApplication rejected
Friend planned to returnNeutralMinister displeased
Friend planned to overstayNegativeMinister displeased

My friend got his visa. It's always good to have friends in the foreign ministry. It's good to have an appropriate decision matrix, too.

I have no simple hack to balance the matrix for a code review. But balance is necessary, that's one of the keys to useful code reviews. If the matrix is skewed one way, the code will stall, if the other way, it will acquire too much technical debt.

Comoyo shuts down

Not interesting to very many people. But I was a contractor there, so I care, and I like to watch films, so I care.

There are two sides to this. One is internal: Comoyo was a research and development organization. That's supposed to remain so, although merged into the corporate structure instead of distinct. I don't want to go into that aspect here.

The other is public. Comoyo had a Netflix-like service for Norway and a few other countries called Comoyo View. Management (which I largely trust) says the main reason to shut that down is that the cost of purchasing content rights has increased by too much. The content owners are using their current power to squeeze prices too high and set customer-unfriendly terms. And that I think is deplorable. […More…]

My razor blades were confiscated today

A security guard at an airport confiscated my razor blades today. I've carried razor blades in my hand luggage since 2004 (inadvertently on the first few dozen flights, knowingly and together with my razor on a hundred or more since I found the blades). Usually the guards want to look at my razor and the corkscrew I also carry, but until today noone has asked whether I might perhaps have any blades for the razor.

He also found, and let me keep, my forbidden shampoo and aftershave. And he checked whether I had a blade in the razor. Such clue. Maybe there is hope for mankind.

NN has endorsed me for a skill

I acked a linkedin invitation tonight, and noticed that the x has endorsed for y notifications have piled up a bit. Must decide what to do about those.

Two things strike me about the pile.

One is that my most-endorsed skill is for C++, a big and complex language where there is much I don't know. Ask me about .->, and I'll frankly admit ignorance. If my code is good, I would rather say it's because of taste and restraint than because I exploited the language's particular features.

The other is that I think my endorsers know less.

In related news, I recently saw a fabulous example of operator whitespace in real life. It was in java and leveraged annotations and reflection.

I wonder what Bjarne Stroustrup says if I endorse him for Java.

No comments.

There are no comments on this blog. The original reason for that was that I didn't want to deal with moderation. But another reason has grown, and grown, and grown: I see comments elsewhere and I want no part of that. […More…]

Code review, Gerrit's way

To the New Yorker, this is a neat way to start a story: A few years ago, at a Las Vegas convention for magicians, Penn Jillette, of the act Penn and Teller, was introduced to a soft-spoken young man named Apollo Robbins, who has a reputation as a pickpocket of almost supernatural ability. Jillette, who ranks pickpockets, he says, a few notches below hypnotists on the show-biz totem pole, was holding court at a table of colleagues, and he asked Robbins for a demonstration, ready to be unimpressed. […More…]

I'm tired of errors in the server log

Yes, there are a few pictures on this server. No, I don't care to let you list them. Hosting pictures is not the point here.

As of this posting, requests for listing all pictures will no longer cause errors to be logged on the server. Instead these two paragraphs are displayed. That is all.

An aside on Json.net and the Xbox 360

Json.net is a fine library. High DWIM factor. So I was happy when Microsoft suggested that I use Json.net instead of the class Microsoft had previously suggested as the best-supported, JavascriptSerializer.

Starting with the July 2012 release, the Xbox ADK contains an integrated version of Json.net. Unfortunately it seems dynamic types don't work on the Xbox 360, so they removed all the dynamic parts of JSON (ie. JS and most of the O).

Thus, for using Json.net on the Xbox, the following three rules apply: Use using Json.Net.Adk; instead of the proper package name. Use only JsonTextReader and its helpers (JsonToken, IJsonLineInfo) to parse. Use printf to write JSON.

Should you feel tempted to use json.net's excellent higher-level functionality, forget it. It's not there. The Microsoft Help page spends six sentences describing json.net, and that really is everything you can use.

I do wonder why dynamic doesn't work, and why that and the lack of the Microsoft.Csharp assembly isn't documented.

Web pages without URLs

You'll need content to test your new server.

To generate sample test content

  1. Build the AESPackaging sample (for more information, see Packaging Samples) by following these instructions:
    1. Install PlayReady Server SDK. For more information, see Installing PlayReady Server SDK.

Those links do not lead where you think they do. There are indeed web pages they could lead to, I have the pages. But I cannot see them in the address line of the browser, and even if I could, I couldn't give them to the colleague whom I'd like to read them and follow the instructions, because the files are on my machine.

Copying them to the web is difficult.

I despair.

Why do people tolerate suckage?

When I feel the phone growing hot in my pocket, I don't have to guess why. Menu→Settings→Battery usage, and high on the list I invariably see the Economist. Yesterday it spent about a minute helping me read the magazine. Later, in my pocket, the app went into battery-burning mode, spent eighteen minutes working the CPU as hard as it could, and then I noticed the heat. […More…]