Category Archives: Development

Conference in my living room

a kids drawing easel thing by IKEAToday (uh make that yesterday since we’re now past midnight here…) around lunch I drove my two kids over to my parents in law and got back to my house to host four friends (associated with a company that shall remain nameless in this blog – at least for now) coming over to discuss some work stuff.

It was great fun sitting in my living room chatting for a few hours, having a cup of coffee and instead of using a fancy company white board I brought my kids’ drawing easel (oh we love IKEA). The picture is the actual model we used, called “MÅLA”.

And we did indeed manage to get some good decisions done and some proper architectural stuff set. Admittedly, my kids’ drawing pens were a bit thin and not as thick and “powerful” as the ordinary office white board pends tend to be.

I don’t like Java

I don’t like Java. I have a hard time to explain exactly why I feel this way, but when facing a Java program or just thinking about doing something in Java I feel nothing but panic and dislike. Why is this? I have to admit that due to my general dislike I’ve never done any major Java developments so my feelings are based on occasional hacks and works and not years of punishment.

Java in itself isn’t terrible as a language I think. It is basically C++ with some of the worst parts removed. It is in fact made so simple that nowadays when all people learn Java at school and not much else, we see people getting out lacking clues about much in how computers and low-level stuff actually works.No java thanks

What I find annoying is that there’s hardly ever any Java-related problem or program that isn’t on top of 22 layers of existing packages – giving me the feeling I’m building a house of cards.

Running a program with the help of a humongous run-time environment isn’t exactly what I like either. It makes the startup-time terrible and it makes the system/memory requirements far bigger than I like. Also, whatever Java-people try to throw at us, everyone that runs Java-based apps on their PCs or in their phones or wherever knows that Java is slow when used in real-life. Period. (Cute quote from Steve Jobs: “Nobody uses Java anymore. It’s this big heavyweight ball and chain.” – not that I believe he’s right in the first part.)

I dislike how everything in Java seems to always be depending on this and that version and this and that doesn’t work in this and that version etc and it’ll all be fixed in the next release. I don’t like how Java programs can’t be built normally with make, I hate the XML-mess called ant, I’m not friends with using GC-only for memory handling and I don’t like how Java is the run-time, the class-library and the language itself all together.

The fact that Java wasn’t at all possible to do completely open source until very recently of course has always kept me reluctant as well, and even if this situation now has changed the marks still live in me.

Of course, I’m never really much of a friend of OO in general as it is commonly used either, as some of the primary premises of OO is quite the opposite of my own beliefs: I don’t believe in hiding what’s is actually done, and most of the OO works, interfaces and inheritance etc are designed and implemented exactly to hide what is actually being done underneath from the users. I want interfaces and APIs that are clear and that makes the user of them understand what the functions do, and I want the actual source code for the functions and libraries to be easy to read and the flow of the code to be easy to follow. OO actually makes following code flow harder.

This of course shows my “on the metal” state of mind and the fact that I never do very high level application development or similar, but the few times I’ve for example looked around in and worked with the Qt source code (C++) it has made me go completely bonkers. I’ll remain working near the hardware and the OS and mostly on resource-restrained systems. I remain with and I really prefer plain C. For scripting situations, I like perl. This way I won’t have to do any Java.

The Mythical Man-Month

The Mythical Man-MonthFrederick Brooks wrote this classical book already back in 1975 and added a few extra chapters for the twenty years anniversary 1995…

Large portions of it feels of the age and there’s a lot of talk about Fortran, System/360 and PL-1 as if we should know about them (which made me fast forward over some chapters). But there are gems as well, and the most significant things people seem to remember Brooks’ book for are still pretty valid and fine.

Adding more people to a project leads to the need for more communication and thus it may slow down development rather than speed it up. Also known as Brooks’s law.

Given the complexity of software and software development, there’s no single method or concept that will lead to an improvement by an order of magnitude – within a decade. There’s No Silver Bullet. (This section was not in the original edition of the book.)

The risks involved when rewriting something and wants to fix everything that was wrong in the previous version so you over-work and over-design the successor. The so called Second system effect.

A lot of the book is spent on thoughts and theories around how to manage really really large software projects, like when you involve thousands of persons. Is it even possible to make such huge projects successful and if so, what does it take? The extra chapters do indeed add value since they offered Brooks a chance to re-evaluate his earlier claims and ideas and to check what seemed to be truths and what mistakes he did in the original edition.

A very interesting read that I’m glad I finally got time to get through!

Food Calendar

MatkalendernFacing the every day problem with what to eat, planning and shopping food for the family I took the familiar route: I wrote a web site (the site is in Swedish!) and service for it to ease this boring work!

Using this site, you enter the recipes of the dishes you tend to eat, you assign meals to days and then you can get the site to produce a nice and handy shopping list of all the ingredients that the planned meals require.

With multiple users, you can bookmark other users’ recipes to avoid having to enter them yourself. With top-lists and statistics you can see what meals you plan to eat the most and the least and so on. It actually works pretty neat. We have a set of user logins handed out as well, but I don’t think very many people other than me and my wife actually use it…

It still has lots of room for improvements to make it even easier to plan and to make the grocery store shopping list easier and quicker to deal with, but it scratches my itch already and I’m improving it slowly over time. I started the development of this in early 2006 and we’ve been using it in my family for well over a year now.

ABI Breakage

Domenico Andreoli, the Debian curl and libcurl maintainer posted to the curl-library list about the recent libcurl soname bump and the related issue of ABI breakage.

I responded, explaining my view on why the soname bump from 3 to 4 was valid, but I’ve also gone back in my mail archives and checked out a private discussion I had with Bjorn Reese over this subject a long time ago and I feel it is about time it hits the air.

An ABI breakage occurs when one or more of the following changes are made

Functions:

  • Change function names
  • Remove existing functions
  • Change parameters
  • Change behavior
  • Change undefined behavior
  • Add dependence on other functions (e.g. A() must be called before B())

Data structures:

  • Change the order of elements
  • Add elements
  • Remove elements
  • Change the data type or size
  • Change alignment
  • Change element values (e.g. change bits in flag variables)

Global variables:

  • Change variable names or types
  • Remove variables

Update: Dan Fandrich posted on the curl-library list and mentioned Mike Hearn’s great related page: Writing shared libraries.