Arnt Gulbrandsen
About meAbout this blog

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), in other cases not. What happened wasn't pleasant, and the book's description is never pleasant either. (That describes some of the reforms in the book, not all. The book is worth reading, by the way.)

Page 352 is near the start of chapter 10, Conclusions, and I had marked a section starting with this passage:

This rather blanket condemnation must be tempered, especially in the case of social systems, by at least four considerations. First, and most important, the social orders they were designed to supplant were typically so manifestly unjust and oppressive that almost any new order might seem preferable. Second, … and it goes on for pages.

I loved it when I first read it and I loved it when I reread it now. Those reformers may have been wrong and in some cases predictably so, but the author makes a real attempt to understand and describe their reasons fairly, in a book that condemns their actions. In this decade of polarisation and demonisation, I want to read more like that.


Jelly Pro, Android 8.1

Many more months have passed, the Jelly Pro is still in my life, and it now runs Android 8.1.

Android 8.1 runs well, but one configuration setting absolutely must be changed: settings → smart assistant → power save manager and then turn that off. The power saving regime provided by Android 8 is better, and the third-party power save manager Unihertz has included confuses (more…)


Live code for a small main()

This is the simplest possible java main(): int main(String[] argv){return 0;}. How many classes, constructors and methods does it require?

The simple answer, of course, is the String constructor and the String[] constructor, so that's two functions.

But it also requires whatever those two functions require, which is where the fun begins. (more…)


The changing nature of breakage

Software is changing. So are its problems.

Software today is developed in a more regimented and orderly manner than twenty years ago. A few good practices have taken hold:

  • Version control
  • Code review
  • A sort of of agile development
  • Coding standards
  • Wide use of libraries, toolkits and frameworks

These are good things. Even if the agile development is often a parody of what it could be, it's still a net positive factor, in my opinion.

These good things have bad effects, too. Perhaps most notably, developers don't know what their third-party code does, and that affects what they know about their own software, and what the users can know and do.

Code gets used because of some known function, without anyone learning the full scope of functionality. Take Ruby on Rails and the action-mailer package, for example. If you want to send HTML, you probably want an add-on package that modifies your site's CSS for common mail reader compatibility, Premailer is the most common one.

There will be an issue in the issue tracker to add Premailer and fix CSS compatibiliy. Some team member will take the issue, add the necessary five lines of code, test that it looks right in gmail and outlook, write a test, and that was it. The premailer web site doesn't say whether premailer takes care of printouts (@media print {...} in CSS), and most likely noone on the team will ever know whether that works or not.

That lack of knowledge results in poor documentation and bugs around the edges. The team doesn't know everything its software actually does, (more…)

Two database views of reality

The screenshots below are two views of the same parcel being sent from Munich, Germany to Корець, Ukraine. Both are based on the same data entered, they're just different database lookups.

This is what I think of whenever I see a database queries or data exchange performed by someone else's code. (more…)