Blog moved

Please see for the new location.

Posted in Uncategorized | Leave a comment

Assessing the impact of API evolution

Assessing the impact of API evolution is the title of my master’s thesis on which I just graduated. It’s for the Master of Science in Software Engineering at the University of Amsterdam. The project is for the VU University Medical Center, for a brain image analysis package they develop. The program visualizes data from e.g. MRI scans and provides an interactive 3D view of the head. Doctors for instance use it to compare the situation before and after an operation.

My thesis proposes a technique that helps understanding how hard it is to upgrade a program to a newer version of a library. And what makes it hard exactly.

The brain image analysis program uses an old version of the Qt Framework to draw widgets and do its visualizations. The newest version has changed considerably. It’s hard but necessary to upgrade the program to use the newest version. One of the things that is not clear is which changes in Qt have an effect on the program and how big those changes are.

My thesis proposes a tool called LICIA that can find all references in the source code of the program to the library (Qt in this case). Those references are compared with a list of changes (this should be made by hand for now). The result is a spreadsheet that lists the exact code locations on which changes in the library have an effect.

The result can be used to make graphs and derive statistics: “of the 200 functions that have changed, only 20 are used in the program”. This is useful to decide how to migrate the program.

LICIA uses the Elsa parser to parse the C++ code. It supports inheritance: if a class has changed, its subclasses are assumed to be changed as well because of the Liskov substitution principle. In the experiment, precision is 81% and recall is 96%.

Another contribution is a list of refactorings that were found during the experiment. Part of the changes from Qt 2 to 3 can be seen as refactorings but they have no generally accepted names. I propose names for them.

The correct BiBTeX citation format (if anybody is going to read it haha) is as follows:

    author = {Witte, Taco C.},
    citeulike-article-id = {7691136},
    day = {6},
    month = {August},
    school = {University of Amsterdam},
    title = {Assessing the impact of API evolution},
    year = {2010}

See below for the source code of LICIA.

Continue reading

Posted in Technical | Tagged , , , , , , , , , , , , , , | Leave a comment

Ubuntu 9.10 Released

The newest version of Ubuntu has just been released. It’s an operating system like Windows 7 and OS X that you can use on most computers, including older computers. And you can try it without installing anything! See below.

A big difference between Ubuntu and other systems is that it’s free: both in cost and in freedom. It’s so-called free software and there is a lot of idealism involved. Everybody has access to the “blueprints” and can change the system. Including for example schools, governments or companies that want to make their own version and distribute or sell it. Fortunately there’s an increasing number of companies that sees oportunities based on a healthy self-interest.

The system is getting more and more user-friendly. In many aspects it’s easier to use than Windows because you’ll never have to insert a CD to install hardware. In most cases the system just recognizes that you connect new hardware and will use it. Also, you never have to re-install it because a virus infects it or maybe it simply gets too slow over time. If a new version comes out, you just press “Upgrade” and wait.

The system ships with a large number of applications (many are installed by default). In fact, if you use Firefox (free web browser), (free office suite, similar to Microsoft Office) or Gimp (image processing, like Photoshop) you already know some of the them. Starting with the newest version, Ubuntu is introducing something like the Apple App Store where you can find and install new applications such as Skype (and pay if the application costs anything).

Even if you’ve never used Ubuntu or another GNU/Linux distribution (Ubuntu is based on the Linux kernel), you’ve used that kind of system a lot. Most websites run on Linux because it’s so reliable and secure, including very big websites.

Support for Netbooks
Apart from progress on many things, the newest version supports netbook computers much better than the previous one. It’s called Netbook Remix and it’s really a special interface designed for the small screens they have. Here you can see what it looks like (the version for desktops looks different):

Ubuntu 9.10 Netbook Remix

Ubuntu 9.10 Netbook Remix

Want to try it?
So, if you want to give it a try you can go to and download the CD. If you insert it and restart the computer you can use Ubuntu as if it’s installed, without changing anything on your computer (if you restart your computer any changes you made will be lost). Or if you like you can really install it.

In Windows it’s also possible to install Ubuntu as a program with WUBI. That way changes will be saved but Windows will just stay where it is.

I can recommend using Ubuntu and only Ubuntu to anybody, except to people who really want to play games on their computer. In that case it’s better to use Windows (as well). Personally I’m using this kind of system for more than 10 years already.
p.s. Another new feature is better hardware integration. It warned me that I have to replace my hard disc because it will fail soon. Good to know! Windows doesn’t provide such warnings (OS X does).

Posted in Technical | Tagged , , , , , , , , , , , , , , , , , | Leave a comment

Food combining

Food combining describes how mixing different types of food in one meal supports or stresses digestion. It has practical recommendations to improve digestion. Good digestion means feeling well, having energy and being slim while needing less food. A bad digestion can cause illnesses. Food combining is not a diet because it doesn’t prescribe types of food or quantities. (People do turn it into a diet however; the Hay diet is related.)

Interesting thought
The book I read about food combining starts with a discussion that our body is not designed for lots of foods we currently eat. This includes many agricultural products such as grains. People eat them because they are so practical in building a complex society (=cheap to produce) but they need to be processed before the body has a chance of extracting nutrients. Herbs and spices improve digestion but problems such as obesity, bloating and acid reflux remain and are accepted as normal.

Fortunately just paying some attention to how digestion works solves most of the problems while not having to change diet. Food combining doesn’t say “eat berries” 😉

Scientific basis
The scientific basis for this is not clear to me (Wikipedia is currently biased). Many ideas sound very reasonable however and like many people I feel improvements. Use your own judgement. It’s easy to try: just keep on eating what you currently eat but change the timing.

Basic principles
There are two main ideas underlying food combining: dominant nutrients and acid-base balance.

The enzymes that digest nutrients like proteins and starch work best in different (acidic) conditions. According to food combining the body creates those different conditions depending on the dominant nutrient in the food being digested. Usually that’s the nutrient that’s most abundant. If for instance both proteins and starch are abundant this implies that it’s not possible to create the optimal conditions for both and digestion suffers. Some combinations are compatible while others conflict.

Acid-base balance is about balancing concentrated food (nuts, grains, most protein sources) with less concentrated food (vegetables, anything with a lot of water in it). Since I can’t find supportive information about it and I don’t see how it’s so important you’ll have to read elsewhere if you want to know more hehe.

Practical recommendations

  • Most natural foods have a dominant nutrient. Eating only one food item at a time and waiting before the stomach is finished is always a good combination. (Legumes are an exception because they contain a lot of proteins and starch at the same time. That explains why they are inherently hard to digest. Tofu is an exception.)
  • Sour food and starch don’t combine well because the sour inhibits amylase in the mouth. So no sour drinks, fruits or sauces when eating potatoes, pasta or rice.
  • Eat fruits before the meal, not after it. They are processed faster than other food and their sour can conflict with the digestion of other nutrients.
  • Don’t eat significant quantities of proteins and starch in the same meal (yes, this is very common).
  • Don’t eat too much at a time. Smaller quantities are processed more efficiently.
  • Use your own judgement and don’t go too far. Eating should be fun as well (my recommendation).

More information
Related books are The New Book of Food Combining (with recipes) (Amazon USA, DE), the Food Combining Bible (Amazon USA, DE) and Handboek voeding en gezondheid ( These books are by Jan Dries. Other books tend to be more pretentious.

Posted in Health | Tagged , , , , , , , , , , , , , , , , , , , | 7 Comments

The 4-Hour Workweek

Would you like to realize more of your dreams? Does your daytime job get in the way of e.g. getting really proficient in another language or going to another country for several months? Then this book can be quite interesting!

The original version of The 4-Hour Workweek by Tim Ferriss was published in 2007 and is a New York Times bestseller. It describes how to get more out of life in general (both business-related and personal). He focuses on using time effectively and creating efficient income sources that give more freedom for e.g. spending months at a time in other countries. He’s the personal example of this, delegating even chores like ordering tickets, finding the best dance teacher in Argentina and organizing his dates 😉

This new updated version will be published soon and contains especially more example of how to put his ideas into practice. Highly recommendable! Available for 15 USD/EUR as a preorder at Amazon USA and DE (free shipping to NL).

Posted in Personal development | Tagged , , , , , , , , , | Leave a comment

How to effectively learn foreign languages

Do you think language learning is hard and unpleasant? Then you probably do it the wrong way. It will always require attention and time to learn something new, but the process can be fun (yes, fun!) and fast.

How to Learn Any Language by Barry Farber is a cheap book full of useful tips. Especially if you want to make language learning more fun. This post gives additional tips that the book doesn’t specifically mention.

Practicing over a glass of beer
Obviously the most important thing when you learn a language is to practice (why don’t schools understand this?). Try to immerse yourself in the language. There are lots of fun and free ways to do this, such as doing a language exchange with someone who speaks the language you want to learn and wants to learn a language you speak.

You can post such a proposal on JustLanded or UniLang and find someone near you with whom you can practice over a glass of beer (that’s better than a dull classroom!). Or use one of the other websites that offer this service. Practicing on a distance with Skype or with a chat program is possible as well of course.

Digital flashcards
Usually there’s a lot of room for improvement in how people rehearse words and grammar rules. At least I wish I found this solution before! This is the idea: take a flashcard for every word, rule, saying or other bit of information you want to remember. Write that information on one side of the card. Write the translation, answer or whatever applies on the other side of the card. Now you can use the flashcards to rehearse yourself. You can take them wherever you are and use “lost” time to practice your language.

If you learn a lot of words, another solution is much more practical however: Anki. It’s a free cross-platform program and website that uses the digital equivalent of flashcards and intelligently chooses the order in which it shows them to you. The order is based on how well you know a card. So simple and so effective.

How to Learn Any Language in 3 Months focuses on efficiency and the Pareto principle in true Ferrissean style. This is good advice for language learning: choose the purpose you have for learning a language and learn what you need to reach that goal. That may include specialized vocabulary or it may just be the 500 most used words and some basic grammar to make yourself understood. If you’re feeling really lazy, just learn 10 words and buy a Picture Dictionary.

Posted in Personal development, Travel | Tagged , , , , , , , , , , , , , , , , , , , , , | 3 Comments

Planning your life with Gmail

A successful approach to combat stress and increase productivity is described in Getting Things Done by productivity guru David Allen (Amazon, I’ll describe a simplified version of that approach here. It takes less than 5 minutes to get started and can save a lot of time and stress; you’ll see if you try!

Offload your brain
The main idea is to organize actions and offload the brain. Trying to remember what one has to do is just a waste of energy and causes a lot of stress. Instead we’ll use a simple system. It should be simple because you’ll have to trust it or you’d keep trying to remember your TODOs.

Getting Things Done (GTD) suggests to choose one “bucket” for all incoming information that is actionable (messages, invoices, everything). Actionable means that some concrete action can be done on it (be critical!) and that you cannot delegate it to someone else. Non-actionable information cannot be acted upon but can be used for reference. Having more places that explicitly or implicitly contain tasks would be more complex than necessary, so no piles on your desk! A natural choice for many networked people is the Inbox of their e-mail account, such as Gmail.

Label your tasks
Gmail let’s you label messages with labels of your choice. See Settings, Labels. You can create as many as you like. When you open a message, you can choose the labels that should be associated with it. If you don’t use Gmail, your e-mail service may support labels as well or at least folders, which are similar.

Now create the following labels: “Action” (should be done in the next couple of days), “Some Day” (should be done but can wait several days), “Future Idea” (could be done), “Working On” (keep track of non-actionable information you often need), “Waiting On” (non-actionable for you but keep track of it). All tasks that are not done yet will have exactly one of these labels. I use Star (in Gmail) to mark the Actions with the highest priority.

Put all tasks in Gmail
How to use this? Simple: write down everything you have on your TODO list in a separate e-mail to yourself. Include really everything, including “wash the car”, “figure out what to do on that special weekend” and “learn Spanish”. It doesn’t matter whether it’s something that should be completed tomorrow or whether it’s just an idea for whenever in the future. Next, label the messages with one label each. Use the highest priority labels (Starred and Action) sparingly; is that task really so important?

What about tasks that don’t arrive as e-mail but on paper? There’s one thing you can always do: write yourself a message with a description of the task and store the physical object somewhere you can find it when you need it.

Time-based tasks
What about time-based tasks? You can add them to Google Calendar instead and let it remind you by e-mail one or two days in advance. Then it will automatically enter your “bucket” at the right moment. This is very useful for recurring tasks as well (Calendar reminds me weekly to vacuum clean the house and I actually do it 🙂 ).

Just try and adapt it to your style when you get used to the idea. And make sure you keep adding everything as a task (looking somewhere and thinking “ahh I should X” is a good hint).

Posted in Personal development | Tagged , , , , , , , , , , , | 2 Comments