My whole experience with Coldfusion

As I left my last job, I am also departing from ColdFusion. It was quite interesting to learn and use that language everyday, but I do not think I will be using it anytime soon. Here are my thoughts on it.

I find that ColdFusion is to web application development what the old version of Visual Basic, version 6 and before, was to desktop application development: an easy to get started application framework. In that sense, it shares many of the qualities and weaknesses that Visual Basic had.

On the plus side

ColdFusion was first developed to do some simple database operations. In that regard, it has kept all the simplicity and the ease of use that you need for a 3-tier application which is what most web application are these days. It seems too simple. Here is an example that list pages.

<cfquery name="pages" datasource="mydatasource">
select title from pages
</cfquery>
<ul>
<cfouput query="pages">
<li>#pages.title#</li>
</cfoutput>
</ul>

Most built in programming tags and function are simple to use and are self-explaining. If you want to send an email, you use cfmail. If you want to read a file, you use cffile. If you want to create a pop-up window, you use cfwindow. If you want to manipulate a pdf, you use cfpdf. If you want to manipulate an image, you use cfimage. I guess you get the point.

ColdFusion has a great community behind it. It is quite easy to find help even for advanced problems. Even ColdFusion book authors hang out in help channels to answer and help you out.

It can be extended in various ways with Java and .NET. Since it is based on Java, it is quite easy to use other Java classes or component with it. In the latest versions, it comes with a .NET “bridge” which let you call .NET code as if it was an other simple object in your application.

ColdFusion comes bundled with many interesting and useful components that you would not normally see elsewhere. You have a file indexing and search server, a PDF manipulation module, Flash/Flex integration services, a HTML to PDF conversion module and a component to connect to Microsoft Exchange (you got it, it is cfexchange) for free.

On the minus side

ColdFusion is proprietary software. You cannot change it the way you want. You have to accept all its features and components the way they are or leave it aside. If there is a bug in a component, you have to live with it until Adobe decides to correct it in a new version. There are a few alternative open source engines that can execute the same code as ColdFusion but they are not feature wise equivalent.

An enterprise license for ColdFusion is quite expensive. It starts at US$7,499. At that price, it makes you think twice before using it.

Th ease of use of the application framework comes at the expense of a loss in flexibility. For instance, the tag cfexecute can be used to execute a program on the server and retrieve the output in a variable. It will return the stdout but not the stderr. You have to resort to some gymnastic in order to retrieve it. That same goes if you want to send values in the stdin.

ColdFusion was not meant to perform any extensive numerical operations. The way it stores numerical values and floating-point values combined with the way it process operations on them can lead to a catastrophe. That is what I discovered when I was trying to implement the polyline encoding for Google Maps.

The online documentation for ColdFusion is lacking many important details that you can only find in expensive books or by trying it.

The main extension point for ColdFusion is Java. You can create your own programming tags or function in ColdFusion but since you will limited to use the built in functions, you will probably have to resort on using Java for anything out of the simple scenario. Since you might have to use a mix of ColdFusion and Java in your web application, it quickly brings the question of why not using Java and J2EE all the way for your web application.

It was still a pleasant experience to use ColdFusion. However, I would not recommend anyone to use it for a new project. I think there are many better options for new projects. As for maintaining an application currently built using it, it is probably wise to stick to it for a while.

Time for changes

These days, it is time for changes in my life. I have just moved into a new apartment with my girlfriend. Actually, my girlfriend is on working in another city, five hours north of here for another two weeks, but we are officially staying together.

The other big news for me is that I resigned from work last Thursday. I was not satisfied anymore with my job and I needed a change. The day after, I was asked to leave immediately which I agreed to. It was a quick breakup.

I have my sister’s website to complete and I have a few projects of my own that I would like to pursue. That will keep me occupied for a little while. I would also like to work on contracts involving web development.

If you need an experimented web developer for your project, let me know and I will see if my competences can be of help.

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.