Arnt Gulbrandsen
About meAbout this blog
2018-09-21

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.

2018-09-20

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…)

2018-09-19

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…)

2018-09-11

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…)

2018-05-26

GDPR

There's a lot of hair on fire this week...

This blog, like my other websites, does not process your personal data (arguably my personal data constitute an exception). There are no cookies, no comment forms, no login, no third-party plugins or buttons or scripts, nothing, and that's the way I want it. There is a server log file with IP addresses, which I can't remember ever using and have no plans to use, either alone, by combining them with any other personal data, or by giving them to any third party. I don't actually know for how long those IP addresses are kept. Not at the time of writing and certainly not at the time of reading.

Have a nice day. Don't panic.

2018-02-05

More on the Jelly Pro smartphone

Another few weeks have passed.

I have made up my mind to ditch the Jelly and go back to a bigger phone, in fact I've made up my mind to that several times. And I've also made up my mind that I cannot possibly do that.

It's difficult. One one hand many things work so well on the Jelly. I have apps, for example Google Authenticator, on a device that is unobtrusively small and is not a timewaste magnet. On the other, data entry can be a pain. Last Satuday I wanted to know whether I had time to get to a shop before it closed, and I remembered the shop's location but not its name. I found it, which makes the Jelly qualitatively different from other small phones, but the data entry was impractical compared to a large smartphone.

2018-01-23

The tiny Jelly Pro smartphone

I don't buy a lot of hardware any more, and nothing out of the ordinary... but I have a credit-card-sized smartphone called Jelly (a Jelly Pro actually, with 2GB RAM).

A smartphone should be small and light, have a large screen and battery, be fast enough, and not have too many bugs. Obviously there's a conflict between overall size and screen/battery size. The Jelly is a very different compromise than most smartphones — most phones fit barely in a pocket, or only in some pockets, and provide large screens on which apps work well. The Jelly starts by fitting easily in any pocket, and makes the apps work as well as possible on a very small screen.

It succeeds on size: I can stick the Jelly in tight jeans pockets and sit down without noticing that it's there. (more…)