BarCamp Montreal

October 29, 2006

Last weekend, I attended BarCamp Montreal where a mix of tech-savvy Montrealers gave informative and entertaining presentations on diverse topics that included:

A common theme of the presentations was harnessing the potential of the Web for conversation, collaboration, and group participation. I went to BarCamp to listen, to learn, to discuss, to question, to be inspired, and to network, and I was not disappointed. After attending the conference, I realized that the technology community in Montreal is alive and well, but perhaps more artistic and media-oriented than the tech communities in Ottawa and Silicon Valley.

Grande Bibliothèque and Safari Books Online

October 15, 2006

Did you know that Grande Bibliothèque (BAnQ) provides Québec residents with free access to Safari Books Online? This service lists books for online reading from publishers such as Addison-Wesley, No Starch, O’Reilly, Peachpit, Prentice Hall PTR, Que, and Sams. I found a few Ruby related O’Reilly titles that I recognized:

Though the Grande Bibliothèque Safari subscription allows you to search all books and read any book online, unlike a regular Safari subscription, it does not allow you to download individual book chapters for offline reading.

Ruby Montreal Minga 2

October 3, 2006

Last night, a small group of Ruby Montreal members met for the second Ruby Montreal Minga. Though there were just three of us in attendence compared with the eight who attended the first meeting, it was a more personal and focused meeting. We reviewed chapter 4 of the book Agile Web Development with Rails, Second Edition and started chapter 5. We plan to meet again in about two weeks to continue where we left off.

In case you don’t know, Ruby Minga is group of Ruby enthusiasts in Montreal who meet regularly to study Ruby programming related topics.

Typo and Missing DNS Record

September 12, 2006

I was a bit premature in declaring my Typo installation a success. Though my Apache Web server virtual host configuration was correct, I was missing one important piece of the solution. In order for http://blog.derekmahar.ca to be accessible to a Web browser on the Internet, I had to add a DNS ‘A’ record to my DNS name servers at ZoneEdit.

Now that my Typo weblog is running and visible on the Web, the next step is to configure its theme and migrate content from my blog sites here at Blogsome and Bloglines. Unfortunately, unlike Wordpress 2.0, Typo does not yet provide a means to copy content from one blog site to a Typo blog site.

Further reading:

Easy as Typo 1-2-3

September 10, 2006

I just installed the Typo blog engine on my website in about 45 minutes, which included the time it took to configure the Apache proxy, but did not included content customization or migration from my existing blogs. Even though the installation includes an example Apache proxy configuration template, the proxy configuration took about 80% to 90% of the total installation time. However, installing Typo itself was practically a no-brainer:

$ sudo gem install typo
(answer a few yes/no prompts)
$ sudo typo install /var/www/typo

These two commands install Ruby on Rails (if it’s not already installed), Mongrel, Typo, SQLite3, and some additional Rails plugins. Starting Typo was equally painless:

$ sudo typo start
$ sudo typo start /var/www/typo
Starting Typo on port 4231
$ ps -eaf --width=2000 | grep typo
root 15286 1 5 15:41 ? 00:00:01 /usr/bin/ruby /usr/bin/mongrel_rails start /var/www/typo -d false -e production -P /var/www/typo/tmp/pid.txt -p 4231

The first time that you load the Typo blog URL into your web browser, Typo asks you to enter a user name and password, and then promptly takes you to the Administration page. The Typo Administration page looks pretty slick and provides options similar to those that Wordpress offers, but it’s far more responsive than Wordpress at Blogsome. I’m not sure whether this is because Typo is more performant than Wordpress or because Blogsome has misconfigured Wordpress or their web servers. In any case, my Typo is snappy!

Interestingly, this post took me about 45 minutes to write, or same amount of time that it took me to install Typo. Wow, that’s fast!

Joel Spolsky on Language Wars

September 2, 2006

In Language Wars, Joel Spolsky advises development managers to heed the masses and build their next Web application using an industry proven programming language with which his or her team is most familiar.

I find two ironies in Joel’s argument. The most contradictory and amusing irony is that Joel does not follow his own advice: he developed FogBugz, his company’s flagship product, using Wasabi, a language that one of his developers invented in-house. Wikipedia knows the Wasabi GUI application framework in Winamp, but not the programming language. If Wikipedia has never heard of Wasabi, would you expect any programmers to know about the language?

The second and more subtle irony in Joel’s article is that despite calling the programming language debate a waste of time, Joel goes ahead anyway and adds to the debate! By denouncing the debate in advance, Joel vainly tries to shield himself from the criticism that he is wasting his readers’ time. However, if Joel truly felt that the programming language issue was a waste of time, after saying so, he would written no more. Instead, he fires the language war torpedoes.

So is the programming language debate just a waste of time? No way. After correctly specifying software requirements, making the right choice of programming language(s) in a project can lead to significant gains in productivity. This gain may be due to the strengths of the language itself, but more often, it is a result of the runtime environment, frameworks, toolset, mindset, support, and community that accompanies a language. So, discussing the merits of existing programming languages will lead to the development of new languages with unique features that more effectively help programmers solve new or exisitng problems.

Joel should have advised his friend to evaluate several languages and environments, compare them using custom criteria, and choose the one that best matched those criteria. Sadly, I find that most development managers, like Joel, are quick to dismiss alternative programming languages in favour of the market dominant or most popular programming environment. Often, this is not because the language is better, but because those managers have no experience or knowledge of any other programming language. We see IT managers exhibit this same behaviour when they choose the familiar and market dominant Windows to run on their computers while rarely even considering the alternatives. The solution? Teach IT students how to use many programming languages and operating systems. That way, when they become managers, they’ll be better equipped to choose the one that best suits a given project or task.

Further reading:

Scaling Images with RMagick

August 27, 2006

Very early this morning, inspired by an article on the Philippines Ruby Users Group mailing list, I started experimenting with RMagick, a Ruby programming interface to Imagemagick, an open source image manipulation toolkit. Using a slightly modified version of the image scaling script from the article, I was able to reduce all of my bloated Philippines travel photos to one quarter of their original size.

I encountered two minor obstacles in trying to run the script:

  • Installing the RMagick gem before Imagemagick. I used RubyGems to install the RMagick gem, but after my first attempt, I quickly learned that RMagick requires the Imagemagick package and its various library dependencies. Without these, the RMagick native extensions fail to compile. After successfully installing Imagemagick, my second attempt to install RMagick again failed because, as the RMagick configuration log file (config.log) reported, I was missing the freetype font library. After installing freetype, my RMagick installation completed successfully.
  • Loading the RMagick gem. To get the Ruby interpreter to load the gem, the script must include the line requires 'rubygems'; you must specify -r rubygems on the Ruby command line, or you must assign string rubygems to environment variable RUBYOPT. The RubyGems User Guide explains in detail how to use one of these three environment options.
Once I managed to overcome these obstacles, I wrote a one line Bash script to apply the image scaling Ruby script to my images:

for file in Photos/Travel/Philippines/*.JPG; do sudo -u apache ./reduce_photo.rb $file; done

Et voila! Smaller Philippines photos!

Ship It!

August 23, 2006

A few weeks ago, I finished reading Ship It! A Practical Guide to Successful Software Projects from The Pragmatic Programmers. Drawn from the authors’ numerous years of experience developing software at SAS Software, Ship It! is a book full of advice, tips, and techniques that can help managers and developers alike improve their software development process. The book examines software development from three interrelated perspectives: infrastructure, techniques, and process. In particular, it discusses the iterative and agile Tracer Bullet software development process.

Two important lessons that I learned from Ship It! is that I should perform more code reviews and automated testing!

Other Ship It! reviews:

Google Reader Getting Better

August 15, 2006

Google Reader has improved considerably since I last used the blog reader and aggregator several months ago. Google Reader is a lot like Rojo, but much more responsive. Like Rojo, Reader does a fine job of weaving together (or aggregating) multiple feeds, interleaving their posts into a single virtual feed. I also like how Google Reader and Rojo both allow you to tag a feed with multiple labels. Contrast this with Bloglines, which still uses an antiquated and oh-so-Web-1.0 (or un-Web-2.0) folder hierarchy to organize feeds.

Google Reader, like Bloglines, has a handy set of keyboard shortcuts to help you more quickly navigate through articles and feeds and its menu items at the top of the page allow you to filter your reading list. Though Reader and Bloglines both have a ‘Keep Unread’ checkbox to allow you to preserve the unread status of an article, unlike Reader, Blogines provides no means for reading those flagged articles without also ‘reading’ newly unread articles. (This is one of my biggest Bloglines pet-peeves.) Like Rojo, Google Reader provides a ‘Star’ flag which also marks an article for later re-reading, but unlike ‘Keep Unread’, does not mark the article as permanently unread. The behaviour is subtly different, but there is an obvious overlap between the two flags, so I’m not too sure why Reader provides both. Nevertheless, Google Reader, like Rojo, makes reading previously read articles and articles of particular interest, much easier than does Bloglines.

One standard feature that is missing from Google Reader, but that most readers share, is the prominent display of feed subscriptions along with the number of unread articles in that feed. Unfortunately, since Google Reader doesn’t give you an ‘at-a-glance’ feed summary, you must randomly pick feeds to find out which ones have unread articles. This is a pain.

Google Reader can also improve in its responsiveness and useability. Though quicker than Rojo in loading and displaying articles, it still doesn’t come close to Bloglines, which is very fast. Navigating articles in Google Reader, though made easier with the keyboard shortcuts, is still awkward and imprecise. Jumping to the next article with the j key should jump immediately to the next article without delay, but instead, can sometimes leave you between articles, which is odd.

Despite Google Reader’s weaknesses, it has improved considerably and like Gmail, should continue to improve with time.

To switch between Rojo, Bloglines, or Google Reader (or use them all), all readers allow you to export and import your feed list as an Outline Processor Markup Language (OPML) file.

My Podcast Playlist

August 6, 2006

About three months ago, I bought a Sandisk Sansa audio player and since then I’ve become an avid listener of mostly science and technology related podcasts. My favourites of these are IT Conversations, Agile Toolkit, and Quirks and Quarks.