My canadian digital hero

My canadian digital hero is without a doubt Michael Geist. He is able to popularize important digital issues like net neutrality, privacy, and copyright. He is able to show what the government is doing wrong with his expertise in laws.

In this time where those important issues are being tackled by politicians, we need more of those heroes.

Unreliable train schedule software

In case you have been wondering why I have not been writing as much as I did in the last few weeks, it is because I was on vacation in Italy. Which brings me to my next post: how much reliable your software must be?

According to those responsible for the train schedule software in Rome’s main train station, Roma Termini, not much.

Roma Termini Monitor Roma Termini Monitor Close Up Roma Termini Monitor 2 Roma Termini Monitor 2 Close Up

The first monitor picture was taken on June 13rd and the second monitor picture was taken on June 27th. It seems like not much has been done to correct the situation between these dates or that whatever was tried, it got worse.

I like those kind of photos. They show you that you are the only one making production applications crash and burn.

Let’s get back to my main question in regards to this situation. How much reliable Rome software that display train schedules must be? I think it is okay if it is down once in a while because it is a redundant system to the main mechanical board and to the each platform boards. Even if the software is down, you can easily find out what are the schedules, the arrivals and the departures. My concerns is that I have never seen it work the whole time I was there.

From the start of your project, you should know how much reliable you want your software to be and how much efforts you should put in order to achieve that level. Building a software to be used in a spacecraft is different from building a calendar software for your grandma.

So how much your software must be? My first answer would be it depends on the situation.

  • Is it powering a critical system?
  • Are people’s life at risk if it fails?
  • Are people’s investment at risk if it fails?
  • How many person are going to use your software? Are they able to perform their work if your software fails?

Asking yourself those questions is probably a good start. The important part is that you should know about it and be aware about it. Remember Murphy’s law.

Whatever can go wrong, will go wrong.

A call from the loyalty department

This is my unpleasant tale with Bell Canada. In case you do not know what is Bell in Canada, it is the biggest telecommunication company in the country. It owns many network links mostly in the easter part of Canada. It used to be a monopoly but now, I would describe it as a “minipoly”. It provides phone, internet and satellite TV services to many Canadians.

Last year, I moved to Sherbrooke. As an internet addict, I needed to find my new pusher.

Internet addiction

I must have had some of my brain parts disabled by all the ads they place everywhere, but I choose to phone Bell to get my access. That was not particularly bad. It was quick and straightforward. I knew what I wanted. I got the simple broadband special with the new client promotion. They always have a new client promotion. I had to agree to a full year contract in order to get the promotion.

A few months later, I received a phone call from one of Bell’s annoying representative asking me if I wanted to get a better internet package for a higher price with some kind of integrated firewall, router, anti-virus, anti-spam thing. I politely declined by staying that I do not need those extras as I know how to get most of them for free.

This was not the case with my sister. She gets her fix with Bell too and she received the same phone call. Unknowingly that she already had all those extras for free, she accepted the offer because she thought that she would be more secure online. I wonder how many people without the proper technical knowledge got trapped too. My sister is now stuck with a contract paying for something she does not need.

Back to my story, I received the same annoying call a few months later. Again I told them that I already have those things and that I already refused a similar offer.

A few months ago, I noticed that my bittorrent speed dropped sharply to the point where it was like downloading on a dial up modem. After a few searches and reading a forum or two, some people were having suspicions about Bell playing the throttling card. It was later confirmed by multiple Bell customers and even later on, confirmed by a Bell PR employee.

That is when I choose that I will not renew my access with Bell. I even wrote to my member of parliament about it. I told him that we should encourage more competition in the internet service provider field and that we should pass a net neutrality law for providers. Unfortunately, I have not received any response from him.

Two days ago, I called Bell to tell them that I will not renew my contract with them for the next year. They asked me why and I told them that I do not agree with them interfering with my connection for specific applications and that I found a better price and a better service at one of their competitor. They asked me if I would accept the same contract with a lower and better price to match the competitor and I said no.

Yesterday, I received a call from their loyalty department. They wanted to know why I was leaving and probably wanted to keep me on the line. I never got to tell them why because the line dropped in the middle of our conversation. I guess they have some problems with their lines too.

Their loyalty department called me again today at dinner time. I told them the same thing regarding the throttling, the price and the service. The representative on the phone than told me that only happens once or twice a month. Everyone who is using peer-to-peer software on Bell’s network knows that they are throttling from 4:30 PM to 2 AM everyday. I wish I had recorded that conversation to show you. The representative on the phone even tried to sell me one of those all-in-one package internet access with a better throughput for a higher price. He was really insisting on the fact that those new package are better and that I would like it. I terminated that conversation politely and quickly as I was hungry seeing my dinner getting colder.

What I want is my internet service provider to be neutral regarding whatever application I am using on the internet. That is something Bell cannot offer me.

As an interesting update on the subject, a class-action lawsuit has been filed against Bell for this practice. I hope it gets accepted so I can cash back on some of those reduced functionalities

Duck typing and Python

I am a fan of Python, the programming language. Unfortunately, I did not have the time or the opportunity to use it as much as I would have liked.

One of the concept I have become to liked is Duck Typing. A good visual representation would be this simple sentence from James Whitcomb Riley.

If it walks like a duck and quacks like a duck, I would call it a duck.

Baby duck

Python uses duck typing extensively. There is no type check for method arguments and return values. If the function you are calling is expecting something that walks and quacks, it will call those methods appropriately and it will work. No matter if it is a duck or a baby pretending to be a duck, as long as it have those expected methods, properties or members, it will go through.

Today, I have been reading some interviews with Guido van Rossum, the Python author. In Contracts in Python, he talks about the implicit contract between the method user and the method creator. He argues that strongly-typed languages like Java or C#, interfaces are often used as contracts but that they get in the way as much as they help.

After digesting the whole thing, I have to agree with him.

I am currently working on projects using Coldfusion, C#, Java and Javascript. Coldfusion supports duck typing with the “any” type and the onMissingMethod event handler. I have been pleased to use it recently for my unit tests.

I have to come realize how much finger typing, work and code goes into type handling with C# and Java. There is a cost for it that put some weight onto maintenance. The more code you have, the more complicated it becomes to maintain and that includes code for type handling. I am not saying that there is no advantage to using a strongly-typed language, but that there is an alternative that shows many promises.

Distributed Revision Control

I am always interested by software project management. I was surfing the web today for new ideas and ways to see how others are managing their projects. I was introduced to this new concept: distributed revision control.

Random Graph

I have been a Subversion and mostly a TortoiseSVN user for quite a while now. I like it. It does most of what I expect from a revision control system. It keeps my files versions and history. I must say that I have used it with a group of at most 5 or 6 people.

While reading different papers on the subject, I have been discovering problems that I have with Subversion and that are solved with other distributed revision control systems.

Branching and merging is hard with Subversion

The simple act of branching or merging is not that hard with Subversion. It is a simple command. What is hard is keeping track of what was merged with what. It is like wrestling with a jūdōka.

Wrestling

What I currently do is that I write in my log message what was merged with what. Whenever I do another merge, I have to check out my log to see if it was merged somewhere else. It is far from being ideal.

Hopefully, this will be solved in the next version of Subversion. In the distributed world, this is solved by having each developer have his own branch and each change sets are totally independent from each other.

A disconnect between you and the server hurts with Subversion

You are totally screwed if you get disconnected from the server with Subversion. No more branches, no more merges and no code sharing even if you can still connect to your coworkers or your teammates. It had happened a few times with my different setup even when I was on a local network and it was unpleasant.

With distributed version control, you can share your changes with your teammates directly if you want to. You always have you local repository and it is the same with other people. It is peer exchanges of changes.

Different implementations

From what I read, the two main players in the free and open source world of distributed version control systems (DVCS) are Git and Mercurial. Git was created by Linus Torvalds initially for the Linux kernel development as a replacement of the infamous BitKeeper. It is mainly used in the Linuxsphere and it does not show much love for Windows even though it has a few implentations for it.

My attention has been focused on Mercurial. Many well known projects have switched to it in the recent years including Mozilla, OpenJDK, OpenSolaris MoinMoin, Xen and the One laptop per child project.

I was surprised to find out that there is a TortoiseHg (Hg being the short name for Mercurial) and a plugin for trac, my favourite project management software so far.

I tried out version 0.4RC2 of TortoiseHg.

TortoiseHg Context Menu

It was quite interesting to toy with. It is far from being as good as TortoiseSVN but I guess it is a good start. Having such an easy to use tool lowers the entry bar for everyone.

In the next few days, I will try to setup a project using Mercurial and see how I like it. It is by using it on a daily basis that I will get a better grip on it.

Living on the bleeding edge

Are you one of those who lives on the bleeding edge? One who choose to use the beta build instead of the stable one to see those new features? One who install every updates the minute it become available?

I use to be part of that group but I got burned.

Torch

That is what you get for playing with fire.

I have not installed Windows XP SP3 yet (why are you using XP). In case you do not know about it, Microsoft or OEMs have screwed up the evaluation and testing of SP3. On some computer, it creates an infinite reboot loop after the installation of SP3.

I did download Firefox 3.0 beta 5 to test some new features, but I am still using the good old version 2.

I am still using WordPress 2.3.2 for my blog even though version 2.5 has been out for a while. I am fine using something that works for me and I do not need all those new feature. I am somewhat unpleased with the fact that it is always reminding me that I should updates.

Wordpress update sign 1

Wordpress update sign 2

If I had installed version 2.5, I would have to install version 2.5.1 to correct many important security bug. I would have been burned again.

Firefox 3 on Linux will be released with a known system-killing performance problem. That is quite unappealing. You get all those new and interesting features for a major problem.

It is not worth it. Living on the bleeding edge is something I will try to avoid in the future.