I started a new project

I stared a new project at home, and I am really into it.
It’s a food-photo-sharing website. I intend to have a beta-release before Christmas.

I am using django in the backend and angular.js in the frontend. I really wanted to try out angular for some time now. At work we are using djnago, but not angular, and I found that django really needs a good frontend framework to complement it – and somethig more advanced than jquery. So, I am going to try out angular to see if it is as good as they say it is, and to see if it plays nicely with django.

I think that django, although a really powerful, and beautifully designed web framework, is not strong enough when it come to frontend. Why? Because in order to have a decent user experience, you will need to write a ton of client side logic, and that will be javascript. There is no going around that. And this client side code will have a thousand connections to your python-generated server-rendered html (e.g. specifying a div class in django, and referencing it from javascript). And it is hard to ensure that those links are not broken. (Who has unittests to test if a div is called the same in python and in javascript?). All in all, it is impossible to have all the ux logic in the backend, it is bloody hard to have it half in the frontend and half in the backend, so the only logical option remaining is to move it all to the frontend. And that’s where angular comes into play.

So, my technology stack will look like this:
– frontend in angular.js
– rest api in django
– database connection – comes with django for free
– admin interface – comes with django for free
– async tasks (e.g. creating thumbnalis) – celery

Software systems are like cities

I discovered an interesting analogy: software systems are like cities. In very many ways.

1. They are continuously changing/evolving
It would be absurd to expect that a city can be first designed, and then built in one go. And then, it functions till the end of times without major changes.

2. They are designed by many autonomous people
Even if there is one chief architect when designing a city, if can not have control over everything. It can provide stylistic guidelines, and design the bird-view looks of the city, and maybe some key buildings at best. But nobody can control the whole design, all the high-impact decisions that are made during the building of a city.

3. The passage of time shows
The age of the building shows, so does the age of software. In the software world, it is sometimes called software erosion.

4. Components may not fit together perfectly
The city does not provide a uniform look, even if it tries to. Buildings are designed by different people, following different guidelines. Sometimes two buildings standing next to each other differ so much that it hurts the eye. Still, until they function well enough, we have to live with the fact.

5. Design is not always carried through implementation due to lack of resources
Even if the plan is nice, lack of time or money can interfere during the implementation, leaving the end result simplified, altered or half finished.

So, if you ever find yourself in the situation when you have to manage expectations about software systems, think about this analogy.


I think it is high time that I start a professional blog.

I am a software engineer, have been active for about 10 years (it really depends where you start the counting from, some people call themselves programmers since they first wrote a hello world in Pascal at the age of 12).

I was doing c++ programming for a while, in the financial industry, and I was quite isolated from the open source world. But recently I switched, and I discovered web development for myself, with all its enthusiastic and open minded communities, and I am loving it!

So I am rowing in the open source boat now, and I want to share the experience with you. Because I can. Finally.