|« October 2002||December 2002 »|
I'm Ryan Lowe, a Software Engineering graduate living in Ottawa, Canada. I like agile software development and Ruby on Rails.
I write this blog in Canadian English and don't use a spell checker. Typos happen.
» Full-time Ruby on Rails freelancer
» Full-time with Rails since May 2005
» Former committer for RadRails (now Aptana)
» I also have a few Rails side-projects in development:
1. wheretogoinTO.com Toronto nightlife
2. Hey Heads Up! TODO list and sharing
3. Layered Genealogy family history research
4. foos for foosball scoring
5. fanconcert for music fans (on hold)
Hiring Rails developers? I can telecommute by the hour from Ottawa, Canada
»» Email: rails AT ryanlowe DOT ca
Now hosted on Hey! Heads Up -- check it out!
Derek Lowe's (Ryan's older brother) words at Ryan's funeral
firstname.lastname@example.org no more
Forging Email Headers: Good, Bad or Ugly?
Sarcastic Dictionary (Part 1 of Many)
Twisting Rails is Risky Business
Risky Business? My Take on Early Alphas
Whoa, it's August 2007
A Postscript to "Growth at the grassroots"
»» All Blog Posts
David Heinemeier Hansson
James Duncan Davidson
Signal vs. Noise
Amy Hoy: (24)slash7
Luis de la Rosa
# The Sims Online
An interesting article on Maxis' new game, The Sims Online. Besides the technical aspects, the article also has a moral angle to it. Creator Will Wright ponders the effects of a completely immersive online world on real people.
# Bugzilla + Linux kernel
It's very interesting seeing how the Linux kernel team is dealing with integrating Bugzilla into their process.
It will also be interesting to see how Bugzilla changes in response to more people using the tool with many new different types of projects. It should (in theory) make it more robust.
# The WhatI'mDoing Update
I stopped looking at Mozilla development for now. I'm still reading about it a bit, but I don't think the maturity is there. The things I want to do are file I/O intensive and Mozilla's support for that right now is iffy on at least the Windows platform ...
I'm going to start on a different angle of 001: complete automation from the command line. I'm writing it in plain-vanilla Java in Eclipse, so it should be cross-platform if all goes well. That project is in my bugzilla as "001".
Now that I have Bugzilla going, I want to get a remote CVS repository set up. Just my luck, my hosting service has CVS and SSH installed already.
Also interesting is the Subversion project, a self-proclaimed "next version of CVS". More reading necessary here.
An interesting article on Steve Ballmer, Microsoft's CEO.
Maybe it's just me, but reading between the lines I see a company in a bit of trouble in the coming years ...
# Wayback Machine
Having some fun with the Wayback Machine, which has archives of some of my old sites. I'll download them and post them on this site this weekend, because the WM site is pretty slow. Should be fun looking back 5 years. :)
I also found my old ICQ number (1952879) but apparently the account has been deactivated. An ICQ number that low can get you some serious street cred. heh
# Go Sens Go
I got Bugzilla working!
# To Move or Not to Move
Let's see. I could move back downtown on my own or crash at my Dad's for another 4 months. Moving out on my own would be about $1000 CAN more expensive PER MONTH!. Which begs the question: why bother?
Living downtown PROS
Living downtown CONS
# McCusker's ip
David McCusker has an interesting take on his intellectual property and work.
# CM Tools
# LOTR DVDv2
Has anyone seen the extended version of Lord of the Rings: Fellowship of the Ring yet? I want to know if it's worth buying ...
# Dancing Elephants
I just finished reading Who Says Elephants Can't Dance? by ex-IBM CEO Lou Gerstner Jr.. He did a great job boiling it down into a readable account of the whats and whys. It's almost blog-like in style and formality in some parts. It provides useful insights on executive management as well as an insider look at IBM (through the eyes of an admitted outsider). Highly recommended.
# Four Kinds of People
THERE ARE FOUR KINDS OF PEOPLE:
THOSE WHO MAKE THINGS HAPPEN.
# Piracy is not About Ethics
Paul Boutin says"Music piracy is not about ethics. It just seems that way, because the RIAA and the free music mafia have framed it in those terms. On planet Earth, however, song-swappers aren�t looking to strike a blow against the evil record industry. At least, I�m not � I�m just sick of high album prices and limited availability, which defy sense in the Internet age." Amen brother.
# A Server for Every Occasion
HRDC's $16M computer bungle: "Ms. Milne explains that, between 1993 and 1998, when the rapidly expanding department bought 'a lot of UNIX servers,' the machines could only run one program each, so HRDC had to buy a new server for every program.
"Peter Choynowski, manager of technical operations at Carleton University's School of Computer Science, bursts out laughing when told of this explanation."
The servers in question aren't cheap, either. They range in price from $20k to $1M.
# My xUnit Wishlist
1. Automatic unit tests.
For example, if one or more (in) parameters passed to a function is null, what does the function do? This check should be automatic in unit testing and should not have to be written explicitly save for the result. If a test isn't written at all, the unit tester should complain.
2. Tests for specific defects.
A defect is opened. To close it, you need to write a test that replicates the defect and make sure it fails with the current code. Then you change (refactor/repair) the program code until it passes. Now you have a regression test for this defect and if the test fails you know the defect is back.
3. Built-in code coverage analysis
If you are truly doing test-driven development, at any given time all lines in the program code should be executed by all tests. If this is not true, develop tests to exercise these lines or, even better, get rid of the superfluous lines.
4. A user-interface library that supports verification.
How can I be sure that the user interface is correct at any given time without manually verifying it? The UI library should be written so that any element in the UI can be programmatically checked for properties such as visibility, position, etc. To see how involved this task can be, check out Liar Views.
5. User-interface can be controlled programmatically
Any defect replicated in the field must be able to be replicated programmatically for a unit test.
# Abstractulate Yourself
Know your limits and abstractulate (abstract/encapsulate) yourself from security problems. Read The Peon's Guide to Secure System Development. Just to be clear, I don't agree with many of his points, but it does add to the discussion.
# Objecting to Objects
It's true that you have to have some balance between flexbility and encapsulation/abstraction. The more you abstract, the more you tie yourself down. Object-zealots used to preach that you could go infinitely into the object universe abstracting layer by layer, but this does you no good if something breaks on a lower layer and you don't know how to fix it, let alone recognize it is broken.
Maybe what is really needed are some reliable abstraction layers. Many of these already exist for Internet communication protocols. What if there was a single abstraction for a buffer? Couldn't we guarantee that software using this buffer wouldn't have buffer overflow errors?
Of course there's the issue of languages, and performance. Sometimes fast performance trumps explicit checking. But we could be getting into an age of software development now where performance takes a back seat to security and reliablility for once. Not for games or graphics obviously, but mainstream software development could benefit from it.
# I C UR IM
Tools for monitoring instant messaging (IM) have been around for a while, but now AOL itself is selling the AIM Enterprise Gateway to completely control and record incoming IMs.
IM protocols are fairly easy to read so this is a relatively easy thing to develop, especially by the company that wrote the protocol. They are planning on releasing an IM client with encryption next year. Probably for a price.
What's next, an AIM Enterprise Gateway that can decrypt messages from the encrypted clients? *shudder* A pretty good business model though, I must admit.
Here's the XRE project page.
To see what direction this might be heading in, check out the the work already done on the Gecko Runtime Environment (GRE).
# Five Worlds
Found some client-side style switching code. IE is a bit wonky with it though. Maybe I'll file a bug. :|
# In Rotation
What's new in rotation ...
# Office Paradigm
Do personal computers need a new paradigm?** The "office" paradigm is a bit dated and redone over and over again. Data is organized in files, files are in folders. Everything starts at the desktop. Programs are "windows" that are layered, opened and closed.
**BTW, don't be confused by the title. The author of the article is proposing a new UI not ditching the underlying OS, which is required to interface hardware.
# The Moving Platform
I mentioned before that Mozilla development is difficult because of the fact that it is constantly under development. What I have to do is choose a static release version and develop for that version only (ie. Mozilla 1.0 or 1.1). They keep different trees for each 1.x version, so it's not too difficult to do this.
The WWW has always been about establishing links. Now there are people that do that full time with their blogs. Dave's site is a good example of this. I just have one question: where do they find the time?
# MQNM screenshot
Picture of the Mozilla QNM as a separate app. I can launch it from a shortcut (it's just a command line option on the mozilla EXE).
The inaugural ryanlowe.ca project: 001.
# <iBook status="drool" />
Apple just knocked off $200 CAN from their cheap iBook. Tempting.
# I am slowly ...
... going crazy. 1 2 3 4 5 6 ...
# Mozilla Integration
Three words on Mozilla application integration: what a pain. I don't know who's idea it was to use these contents.rdf files, but there must be something easier. I ended up having to put everything in one directory (/content) for it to work.
... but it did, finally. I didn't check the RAM numbers, but it loads on its own without Mozilla (I'll post a screenshot). There's probably quite a bit of overhead for such a small app.
Another disadvantage, and this applies to web browsing as well, is that Mozilla is a moving target. You never know what a user is going to have installed. It's fine to develop for Mozilla 1.0, but if the user has 1.2, can the two versions co-exist or will your code work on both? I had some problems using examples (especially the RDF files and integration) out of the book (published in Sept, 2002) because they were already outdated. Unless you are in the thick of things, you never know how your application can break. This is not a good thing.
Like HTML, a WYSIWYG XUL editor might be more of a hinderance than a convenience, but it's likely one will be developed anyway. One integrated into an IDE would be pretty nice.
If you're wondering what all of this Quake name business is, here goes an attempt at explaining it. Every player in a game of Quake has a maximum 15 character ASCII name which usually entered in the menu of the game. When you use the menu you can only enter characters on the keyboard (less than half of the 256 in ASCII).
You can also set your player's name in a startup script, where you can use all 256 ASCII characters. This small app generates those whacked out characters for this script. Fun eh?
The next step is getting it integrated into Mozilla itself like the mail and chat clients. From what I've been reading, it shouldn't be too bad. </famousLastWords>
# The Big V
# mad skillz
Updated the layout of my resume. Mostly the Skills section.
# index schmindex
The code for my index page borked this morning for a very simple reason: I had no posts in November. Now that I have one, it should work.
update 11:38 AM Nope, it didn't. The "1" was zero-padded and the script missed it.
What the script does is start at the current day and checks to see if a post exists. If not, it goes back day by day until it finds one. The main problem with my old code is that once it hit the start of the month on its way back, it didn't go to the end of the previous month. The same thing will happen if it reaches the start of a year (maybe I should put that code in now?).