|« April 2003||June 2003 »|
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
email@example.com 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
# Browsing Zenith Upon Us?
Microsoft presumably can't justify further development or expense on IE6 development. They are a money-making business and they've moved on. The idiosyncrasies of the browser are well known, or at least should be given how long its been out, to the development community. Changing IE6 now would break these code workarounds, making people angry at MSFT.
There are a few UI enhancements that wouldn't break the DHTML code rendering and would only improve the "browsing experience". Tabbed browsing and pop-up blocking are probably the two that are most requested.
I don't think Microsoft will add tabbed browsing for two reasons: 1) is that it's not intuitive GUI, as I said in my comments last week and 2) it would require a major rewrite of IE. You can't mash in something major like tabs. It's like adding browser support for frames: instead of dealing with one thing you are dealing with n things.
Pop-up blocking is a code interpretation hack because popups are perfectly valid DHTML. It works in Mozilla because Mozilla users know what a pop-up is on a technical level. Most users of IE6 don't and as a result could miss important web site functionality because of it -- especially on (corporate intranet) web sites that use pop-ups as a way to simulate modal dialogs on web applications. Yes, gross.
I think Paul missed part of what the Microsoft employee meant by "Further improvements to IE will require enhancements to the underlying OS." They aren't just talking about eye-candy GUI improvements. They are talking about having access to Longhorn's (still rumoured? I can't keep up) SQL Server-based file system for easier file system searching and other low-level technical enhancements. These additions to the underlying OS will improve the next IE's UI experience by adding the possibility for unique features not possible on WinXP. The flying and fluttering windows are just gravy .... I guess.
Forget about the browser GUI. If you want to talk about zeniths, then DHTML has reached its practical zenith. People are doing UI things with browsers today that just seem unnatural -- and I'm not talking web pages here (though there are many weird ones out there), I'm talking corporate web applications. Sure it's easier to maintain so-called "thin" client application (or easier to break it, depending on who you ask) but if the UI tools (DHTML) you have available to you don't measure up, use something else -- don't kludge it.
Update 12:12 Tim Bray adds to his comments that CSS ain't Rocket Science. I agree with a lot of what he says, but I'm going to explain my earlier statement about using DHTML improperly to add to his arguments.
You can't control what people will do with your UI toolkit. VB programmers suck at making GUIs because they generally have no formal training -- you can't help this. Web pages solve the problem in one dimension by limiting what you can do on one page ... and as a result web applications are cleaner but sometimes require more clicks. Usability improves on look and feel, but suffers when speed is important.
Some WinForm widgets are more dense and complex. The slider, for example, does something you'd never be able to do well on a web site. Same with tabs. You can kludge tabs in DHTML, but in WinForms they are just there. Managing that density is a job that requires skill and is generally not something a programmer can do well without help from someone with usability training.
The other side of the coin is when you want your application to be GUI dense and client-server. You can't have it both ways -- in that case you must use WinForms or you will suffer in browser development hell. Believe me, I've been there.
# More-on Layout
Let me explain my "off-symmetry" logic.
I wanted the blog to be on the left-most side of the page so it dominates the view. What makes this a little strange to look at is that it takes up exactly 50% of the full width, so it's almost like you're reading a two-sided newspaper. Above all I wanted it to be distinctive and not like the other menu-blog-menu indexes out there. *cough*Roy*cough*
The reason why the thin column is in the middle is because it's related to the blog. The miniblog is on it's own and shouldn't split the blog and its links. The widths were originally 25% each but the links took up less space and the miniblog has longer lines so I increased the miniblog width to 30%.
Personally I'm liking the blog and the links but I find the media miniblog a little distracting, probably due to its text density and bold date font. This is the best attempt I could muster at 3AM, the time I happened to be inspired. Give me some time to pull out my T-square and perfect rectangles.
I moved from the MT <div>-based layout to the more traditional <table>-based layout because I was getting some ugly overlap problems, especially when I increased the font size in Mozilla (Ctrl-+). Tables don't seem to have these problems at all. As well I set the three columns to percent sizes, which is a bit more difficult to do with <div>s. Keep it simple, stupid.
# Microsoft Feels The AOLove
Microsoft and AOL are buddies again. Does this mean that AOL can dump Netscape/Mozilla? Maybe. AOL might be getting a free browser for seven years but that doesn't mean they still shouldn't hedge their bets with their own browser -- especially one that's gaining in popularity. I think AOL will hold onto Netscape/Mozilla.
That said, if AOL did sell Netscape full-time Mozilla contributors (I think it's safe to assume they exist) would come with the deal. Red Hat (which recently switched to Mozilla as the default browser) would be a good candidate to buy Netscape/Mozilla to keep the project going at a good pace. But it's good to know that even if Netscape dies Mozilla will live on!
The guys that should be scared are the people at Nullsoft, which was bought by AOL in 1999. Unless they can implement the DRM Microsoft will be using in their forthcoming music download service, AOL users will have no choice but to use Windows Media Player. Then Winamp becomes expendible.
Come to think of it, does AOL even use Winamp? I wonder what value Nullsoft adds to AOL's bottom line. The old Time Warner execs might be thinking the same thing.
Update May 30 03:55 Speak of the devil: Roy points out that a second (after GNUtella) Peer-to-Peer program called Waste has been released by Nullsoft only to be quickly yanked (presumably) by AOL/Time Warner officials.
Update May 30 17:44 A News.com article answers the "is Nullsoft useful to AOL/TW?" question. They may be useful but are they worth the hassle?
# Virus ABCs
The University of Calgary is going to teach students how to write viruses. This has sparked a debate about the ethical issues.
Forget the ethical issues and look at the practical ones for just a minute because the Internet has shown us that if there's a security hole, people will take advantage of it regardless. Software license agreements aside, if it's possible for me to write a virus there must be an exploitable hole in software. That hole was left there by the company or individual that wrote it. Common business thinking is that it's the virus writer's fault that this hole is exploitable and they took advantage of it. If the company took security holes more seriously, there wouldn't even be a virus in the first place.
Think of these wild viruses as active test cases against your product. The software makers are failing these tests. Software companies need to take a little more accountability for their holes, instead of saying "Here's a bunch of software. We don't guarantee that it will work and if it breaks something, it's not our fault." When a virus costs millions of dollars in damage, they blame the script kiddie that wrote it (or used it, thanks Roy). That seems pretty backwards to me.
Obviously, open source projects cannot take corporate responsiblity for their security holes, but they usually plug serious ones quickly anyway to preserve the reputation of the product. (The logic there being that people can easily choose one free software product over another, so reputation is more important). Companies need to be careful about the software they release and above all, accountable. And that doesn't mean releasing patches every day either, the software they release in the first place should be secure.
# Glug Glug
# The Internet is Surfing
I don't buy IE going away completely. Even if "webapplications" start looking like native windows apps, you still need something to "surf" with -- roam aimlessly and discover new things. People will always want to do that.
Web browsers (and HTML) are the glue that binds all of the Net's different protocols together. You can click on an news:// link to get your news, a mailto: link to email (and on and on) all from a browser. When you take surfing and linking away the Internet seems limited and the protocols more separated. So you'll need navigation glue to tie these webapplications together too.
Some might say "we can use a search engine to find what we want -- we don't need to surf". But you are limiting yourself to whatever the search engine gives you -- do you really want to give the search engines that much power? We need to be able to establish our community of links with web pages.
The text web will live on, despite webapplications. In fact I have a feeling that web pages will probably be cleaner when developers can use familiar widgets instead of squeezing UI in HTML that was never meant to be there. The line between webapplications and web pages will be clearer -- which is good.
My prediction of IE7 goes something like this:
# Sheesh ...
My computer just crashed with the new power supply, same as before. *sigh*
# Judging Blogging Tools
Why don't a small number of users of the popular weblog tools work together to create an authoritative review of the category and show us how the products compare.Tell you what, I'll do a review of at least six different blogging tools (I've personally used three already in the last two years) on a bunch of different criteria if:
Number 3 would be a lot easier if Dave had trackback on his blog, no? :) We'll see if Google catches me in time. I may be a kid (though my classmates and coworkers would disagree -- they call me the old man) but I know my web stuff. I'll be tough but fair.
# Backing Up
Jim says: "I don't know how people do it who wipe their drives every 6 months".
Backups, my friend, backups. I burn documents to disc every month or so -- everything in my "My Documents" folder and whatever I was working on that month. Really I should be doing it every week. Everything else on my hard drives is expendible (nice thought, eh?). No, it's because it's backed up already and it just on my hard drive for convenience, like my MP3s.
So now I can lose my whole system completely and be back up and running in less than a day like nothing happened.
I also back up my iBook monthly because I download all of my email on it. Incidentally, Mac OS X Mail allows me to keep mail on the server for 30 days until it's deleted, so I have a backup there too. The side bonus is that I can read my mail anywhere with the web email client because it's still on the server. But I digress ....
Laptops are even more important to back up because you can lose them at any time. Stolen, dropped, thrown, drowned in coffee ... you never know. Put your CD burner to good use and make backups!
# New Case
The hardware move to the new case was time consuming but the machine seems to work. I'm not going to say it "runs well" yet -- I'll wait 72 hours. It won't get the "all clear" until I go a month without a crash with the extra 100 watts.
One thing I didn't bet on -- the motherboard move wiped my CMOS memory and all of the settings were reset. I had to tweak a few of them to get the machine working *at all* before .... and I have no idea which ones they were. That was about a year ago. The machine seems to run fine now anyway. *shrug*
So I decided to skip the RAM even though it's cheap. I don't need more RAM and I somehow convinced myself of that.
Crap, not again.
I've added two new blogs to reduce clutter on my main blog but still give people out there an idea of what I'm up to (heh, as if you cared - but let's pretend, shall we?).
The first is the words blog on the left margin. I occassionally run into words that I've heard but don't know the exact meaning, have interesting origins or I've never heard at all. After many failed attempts to learn a second language I figured I might as well know my first better instead, so there we have it.
The second blog on the right margin I call the media blog. I'll put interesting stuff I saw that day in this list. Probably not every article read or TV show I see, but the good ones will get a mention and songs I like will be there as well. I'm categorizing them as they go in, so later I may add icons or colours to differentiate the media types.
# Shhhhh ... I'm Hunting Wabbits
Thinking about getting a new case and power supply for my Wintel box. The motherboard I bought a year ago (ABIT KR7A-RAID) is a bit flakey and likes to crash randomly. At first I thought it was the video card (nope) and then a hard drive (nope). At least a crash doesn't munge partitions any more (after the BIOS update last fall). Crashes are also getting farther in between but they still happen -- and on any OS, not just Windows XP or 2000.
The crashing may have to do with the fact that I'm running the motherboard with two hard drives, a DVD drive and a CD-R drive all on 250W. I'm going to see if increased wattage helps me out. The case I have now is alright, but it has three fans in it and it's LOUD. I really really really don't want to put my computer on the floor either, especially after the flood that happened earlier this year. That and computers tend to suck in more dust if they are on the floor, shortening their life.
I might also snag more RAM while it's cheap. Can't beat 512MB of DDR for less than 100 CAN$. Did I miss anything? How about a keg tap? :)
# Star Wars Kid
You've probably all seen the video that leaked onto the 'Net of the "Star Wars kid" pretending to light saber fight in front of a camera. jish.nu interviewed the guy and is accepting donations. They've raised over $3700 so far for the guy. Incredible.
Update May 21 6:48PM: The final tally.
Update May 21 10:20PM: Why? Because he was publicly humiliated on a massive scale and people feel sorry for and/or can relate to him. The video has been downloaded over a million times .... yikes.
# The What Reloaded?
No, I haven't seen The Matrix Reloaded yet. No I don't have a day set aside to see it yet. I'll see it when I see it. It's been four years for crying out loud, I can wait another week or two for the hype to die down so I can get a decent seat this time. :) Yes, that's all I care about frankly ... and I'm not willing to wait in line for an hour to get one.
Crap, I just got two geek demerit points.
# Down with Paper Widgets
Joel Spolsky talks about how ineffective software prototypes are and how paper can help. The truth is that the guys at the helm can't make informed decisions with a bunch of paper. They like to see drags, clicks and resizes -- even if it's smoke and mirrors. Paper is good for small stuff, but who wants to shuffle through a ream to "see" a demo? blah
What's happening is that the prototype starts as a great idea in someone's head. Once a few people like it the software comes together from 20 different people's ideas and a roll of duct tape. Then management is left with two choices: 1. like the prototype and agree to build the "real" version starting from scratch or 2. do nothing. Either way the prototype gets thrown in the circular file.
The first example Joel gave could have been solved by a little incremental development. Instead of making a whole new prototype, branch what you have and build off it. If it took the "programmer in charge" a week to do, it might have taken the interns 4 times as long to whip up a prototype on that base of code. You like the feature, you get the pro to do it on the trunk. You chuck the intern's code anyway, but still save 3 months. And as a side bonus, the intern gets to look at a lot of professional code ... lucky kid.
So why don't more companies do this? Aren't they testing the code well enough to know when the intern breaks something (even in a prototype)? It makes you wonder. Otherwise, what you already have makes a great base for a prototype ... and you don't have to worry about your customer's ability to imagine widgets to get funding.
Agile development could also solve these prototype problems ... but don't even get me started on that one today. :)
# "Blognoise" Again
It doesn't matter if Orlowski's speculation about removing blogs from the main search is true or not. What's definitely true is that Google has a blog problem on their hands. But this is the great thing about the Internet -- just when a company thinks they have it all staked out, the 'Net changes the rules.
What is also true is that I'm not the best person to talk about "NIH Syndrome", even though Google thought so for about two weeks. But not to worry -- my subsequent post about strange Googling now ranks higher than the original. Clearly, there's a temporal variable at work somewhere ... or maybe they have fixed the problem already. Kudos to them for being so responsive.
Google is notorious for coming up with neat stuff. I wouldn't expect their solution to this problem to be any different.
# Bring on the Cottages
Back to reality from the cottage life. I tell ya, driving in Quebec is fun I just wish I had a better car to tear up the roads. It sure does make you appreciate Ontario roads though ... much wider, straighter for some reason. And don't even get me started on the 4-lane highways ...
We did the regular cottage stuff. Checked out the lake (freeeeeezing), played volleyball, drank some beer, played cards and played HORSESHOES. That's right kiddies! Overall it was pretty chillaxed ... a great start to the summer.
# SWT/JFace Wiki
# Enabling Reuse
Andrew talks about lots of software engineering-related stuff but his comments on code reuse got my attention.
What we really need as software engineers is a way to say succinctly what a function does - what goes in and comes out. Then you need the tests to back up that this function actually does this and other software engineers can then independently verify it.
If we have a system people can depend on we'll probably find that there will be more code reuse. As it is now no one can trust anything anyone else does.
As for code ownership -- you need some variant of it. One person has to be able to control what goes in and out of any given part of the code or there will be anarchy. I'm personality an advocate of code supervision ... people can change everyone's code, but they better not piss any of the supervisors off along the way. Accountability is an important aspect of group work -- it keeps people in check -- and it also works very well for open source projects.
# Eclipse 3.0?
I don't know when this was announced but I just noticed that the Eclipse project may make the next version of Eclipse 3.0 instead of 2.2. The major verson number increase signifies API incompatibility with 2.1 plugins.
Eclipse is changing its API so it can move from an IDE to a "rich client platform" so that ordinary applications may take advantage of the services Eclipse provides.
The more agressive proposal comes a few months after the Eclipse Project DRAFT 2.2 Plan was released December 20, 2002.
# SWT Samples
I finally found some good SWT sample code for specific UI elements.
# The Matrix Rerated
# Google Blog Noise
Google is going to have a blog search soon to deal wth "blog noise". Apparently Google's algorithm wasn't expecting the high amount of interlinking that goes on between blogs -- understandable -- which is giving blog posts high rankings in Google. Blog noise has been getting me 20 or so Google hits a day. I noticed it a few weeks ago.
# CLR v. JVM
Scott Hanselman explains how the .NET common language runtime (CLR) calls lower-level functions and how that compares to the Java virtual machine (JVM).
# Play Counts
Count Rank 1. Intro/Come Back Home 10 10 2. Crystal Village 12 6 3. Carlos 12 6 4. Pass Me By 12 6 5. Committed 15 2 6. Long Way Down 8 12 7. When You See the Light 14 3 8. Turn of the Century 10 11 9. Burrito 17 1 10. Man in Uniform 13 4 11. All At Once 12 6 12. So Much Work 13 4
I definitely recommend it if you liked the first CD, musicforthemorningafter. Most of the time I listen to the CD straight through, but the play counts catch all of the times I cheat and skip a song (like poor #6). It's like a cummulative CD mood indicator. Ha, OK I don't know what that means either.
What would be nice in the future is if iTunes could clean itself by deleting music that you haven't listened to in a while. I'm already gathering cruft around the edges of my collection on my iBook. If you downloaded the music (ie. from iTunes Music Store), iTunes would be smart enough to ask you if you wanted to burn that old music first before it deleted it. Of course that means iTunes has to keep track of what you've burned and where *hint Apple!*. Then you can keep your collection recent as well as save space on laptops and iPods (and other portables).
# RHCP Concert
I haven't been to many concerts in my life (surprising, considering how much I like music) but the Red Hot Chili Pepper's at the Corel Centre was one of the best I've seen.
First off, you have to get a floor "seat". General admission. You can't rock to the Chilis glued to a chair. You have to funk it out with Flea and John ... and the floor was funked out. It was great.
The first opening act was a bit strange ... I'll try to find their names somewhere. The lead singer immitated Robert Plant and the lead guitarist imitated Keith Richards (except they both had big white-boy fros) and the band as a whole was so over-the-top, they probably thought they were the best rock band in the world. You have to earn that title, boys ... so go make some good music and call me in a few years. The lead singer kept throwing his mic around, jumping off the drumset and speakers, doing the James Brown shuffle (yea, it looked as bad as it sounds) and throwing the mic so it wrapped around his neck and then unwrapped. It just got tiring watching it. Their drummer saved their asses from a completely boring show. As it stood it was about 1/4 boring -- all of the songs sounded the same.
Queens of the Stone Age were the opening act. They were awesome (I'm going to pick up their CD because of it) and actually left my hearing more temporarily damaged than the much longer RHCP show did. I'm still trying to figure out if that's a good thing. They had a guest singer for two songs who kind of looked like the lead singer for Tea Party but not really ... I'll find out who he was, because he was great too. It would have been nice if they could have played longer, because the gap in between them and the Chilis was about 30 minutes and seemed long. To pass the time the crowd started the wave and it went around about a dozen times.
So RCHP comes on. We ended up pretty close, better than center ice (yes, the boards were up but not the glass) and the stage only took up about 1/4 of the arena. So we were maybe 75 feet away. Chad was wearing a personalized Ottawa Senators jersey with the arms cut off and the crowd went nuts. They played stuff mostly from the last two albums, By The Way and Californication and I was pleasantly surprised to hear many (about 4 or 5) older songs from Blood Sugar Sex Magic and earlier. I wonder if I can find a playlist online ... I'll try to find it.
In the middle of the set, John went acoustic with an old song - Eighteen by Alice Cooper - and that was great. From some of his older solo material it sounds like maybe John can't sing but he really belted out this one.
They came back for an encore after the crowd continuously cheered for 10 minutes and played "Under the Bridge" and a few others. By the end I had lost most of my voice and some of my hearing. Great show! :D
# MS Gets Scobleized
# SWT Resources and Sleak
Now that I have to write my own SWT GUI, I read SWT: Managing Operating System Resources. It explains why SWT doesn't automatically garbage collect some UI resources. I also saw a free tool called Sleak that monitors graphics resources for you. Nice.
# Winer: Microsofting of RSS
Good to hear people learned things from Netscape's defeat when that community lost control of HTML. Where are we today with that though? The W3C has standards and Netscape (via Mozilla) has some of the best web standards support out there. Mozilla has some truly great customer-driven features (like popup blocking). IE6 is broken, prone to security hacks, prone to invasive (annoying, etc.) adware and spyware, and rarely ever updated with new features.
Who is the winner? The communities will always win eventually, even if the general public isn't conscious of it yet. Too bad it took 4 plus years to do it ... I can't blame Dave for wanting to not go through that mess.
# Blast from the Past
9:05pm - Another one Interview: The Eclipse code donation
# More Spam Talk
This can't be a new idea, but how about this for a spam-fighter ...
Spammers probably have lists of millions of addresses. If they want to know who to spam more than once (to save money on bandwidth) they'll probably spam all of the people and see who doesn't bounce.
So what if SMTP (mail sending) servers sent back fake email bounces? If I get a spam email I tell my mail client it's spam and the mail client contacts the SMTP server with the original mail, indicating its spam. The SMTP server then sends a reply back to the spammer saying the account the spam was sent to doesn't exist.
You would still get a lot of first spams, but at least you wouldn't be put on "good email" lists. Spamming would be a one-shot thing, instead of multiple times from the same spammer. Larger organizations like Hotmail could use people-marked spam to filter email for other users at the SMTP level (again sending "account does not exist messages"). Possible? Thoughts?
# Performance and Mutability
From IBM developerWorks:
# Bloch on Java 1.5
Joshua Bloch is interviewed about the new features in Java 1.5, due in late 2003. He also wrote the book Effective Java, which has saved me who knows how many hours already. The Slashdot comments are also interesting.
# First Week
My job has been good so far. My development is in Eclipse with Java and SWT/JFace. I am working by myself and trying to mostly use a test-first development (TFD) strategy with JUnit.
Test-first is getting easier and easier the more I do it. Every time I go off and randomly hack (usually just to "try something") I get way off track and end up at a dead end with crappy code. It's slowly sinking in that this kind of hacking gets me nowhere. I figure I'll do less and less of this as time goes on.
My unit tests have become an integral part of my code. I have supreme confidence in the methods I have tested, and I can't say that about anything else I've ever written. The unit tests are like code-contracts I have to abide by or problems I have to solve. How I do it is up to my creativity as long as I abide by the contract. Now I know why the XP guys love TFD.
The hardest part so far because of the speed I'm cranking out code has been keeping track of "things to do". I don't want to distract myself from what I'm doing right now but on the other hand I don't want to forget what just popped into my head. I definitely don't have time to write a test. Usually I just pop into the code affected by the new idea and write a TODO comment and let those tasks pile up for later.
Here are some stats for my first week at work (approximate because I forgot the paper with the numbers) I added up for fun. Next week's code name will be Yowza.
Lines of class code: 965
Total lines written: 2174
(I'll fix the numbers when I get that sheet back next week)
Since I'm refactoring a lot, a number that would be interesting is some sort of daily/weekly code turnover rate. I don't have a CVS right now, but even if I did how could I figure out that kind of number?
Disclaimer: Counting lines of code is like counting spackles on a ceiling ... it's useless, but it'll help you sleep at night. Especially if you are a manager. :)
# Hackers and Painters
Everyone by now presumably knows about the danger of premature optimization. I think we should be just as worried about premature design-- deciding too early what a program should do.
When a piece of code is being hacked by three or four different people, no one of whom really owns it, it will end up being like a common-room. It will tend to feel bleak and abandoned, and accumulate cruft. The right way to collaborate, I think, is to divide projects into sharply defined modules, each with a definite owner, and with interfaces between them that are as carefully designed and, if possible, as articulated as programming languages.
His ideas about a loosely typed language allowing for increased changability made sense but I wonder if that wouldn't just increase problems at debugging time instead of compile time. Probably not if you had good tests.
If you are using an agile-type methodology to implement a Java interface you won't be able to implement all of the required methods at once. But the compiler will complain if you don't have the functions there, so you need stubs. Eclipse leaves nice stubs with TODO comments but the functions return default values (ie. null, 0).
On Jim's Comments: An exception won't be thrown unless you use the unimplemented method. Having your program crap out is exactly what you want to do.
Now if you put code in the stub to simulate functionality then you'd take the exception out, obviously. But when it's completely unimplemented, you need to know that. Using it is a programming error and that's exactly what runtime exceptions are for.
As well, you can't "pay attention to the TODOs" if you are using a class like a black box or abstraction, which is the whole point of OOP.
# Images in Hotmail Junk Mail
Hotmail has finally deactivated outside images by default on junk email. This is important because spammers can use outside images - and by outside I mean requested from a web site and not included with the email - to track who is reading their spam emails. This gives them a list of "active" email addresses to spam further. Here's a trivial example:
When Joe views the spam, this image will be requested and the querystring on the end of the picture filename will be processed by the web server. The web server will then know that firstname.lastname@example.org is a valid email address and store this information for later.
Most spammers obfuscate this a bit. For example, they may use a code number in place of the email address and IP numbers instead of a domain name. So an image tag can end up looking like:
Which of course makes it harder to track exactly what's going on there and who it's coming from if the spammer changes IPs a lot. Most people don't even realise its happening or the fact that the images are not contained in the email. Email written in HTML definitely has its share of problems.
I already block outside images from automatically downloading and appearing in the Mac Mail client. Kudos to Microsoft for implementing this in a free service! Though reducing spam to hotmail.com accounts - which lessens excess load on their servers - is probably the central motivation, it's good either way. Is it in Outlook yet? I don't use it regularly.
I had Indian food today for lunch at Taj Mahal on Bank Street. It was pretty spicey but good ... especially the Beef Curry or Curried Beef, I can't remember. Lunch buffets are always good news.
Also went indoor "rock" climbing today after work and dang my fingers hurt like a mofo. The vertical walls aren't too bad, but once the walls go past vertical I'm screwed. :)
# One Million Songs Sold
Apple sells over one million songs via iTunes Music Store in its first week. I can hear the Windows people out there drooling! Heck, I'm drooling too ... Canadians can't use the iTunes Music Store yet.
Update: Actually we can, we just can't buy anything. I knew that I just didn't word it well. :) I watched the Queens of the Stone Age - Go With the Flow video on there. We can listen to the 30 second previews of the "unreleased" tracks too. Neat.
# First Day
Today is my first day of work at the Canadian Customs and Revenue Agency, Canada's equivalent to U.S. Customs and the IRS except merged together. I will be working for the customs side writing software.
# I, rLowe
"Cleaning up code" is a terrible thing. Redesigning WORKING code into different WORKING code (also known as refactoring) is terrible. The reason is that once you touch WORKING code, it becomes NON-WORKING code, and the changes you make (once you get it working again) will never be known. It is basically a programmerís ego trip and nothing else. Cleaning up code, which generally does not occur in nature, is a prime example of amateur Open Source software.It's obvious here that Cringely has no idea what REFACTORING is and why people do it. Maybe he should spend some time over at XProgramming.com before he formulates an opinion on it.
Number one, you cannot effectively REFACTOR without tests. You have tests to prove that your code is working the way you expect it to. You REFACTOR and then run those tests again to prove the code still works. Did I just break the code? No, I didn't.
Number two, REFACTORING is used effectively in agile development processes. In those processes developers strive to implement the minimum functionality required to complete a feature. Many times this gives code that cannot be expanded on later, it just does the job it has to do right now to solve the problem. It often does not incorporate a large amount of software design.
However, on the next development iteration if the developer needed more from the code and at that time wanted to incorporate more "design", he would have to REFACTOR the code. REFACTORING involves changing the old code so that it can accomodate the new feature. But no new features have been added yet! When all of the tests pass after the REFACTORING you are ready to add the new feature, which by that time is probably a walk in the park.
Now, let's call a spade a spade. Developers fiddling with their code because they were on a caffeine high the night before does not constitute REFACTORING. Developers will always do this because most are perfectionist-types. Without proper testing, it is not REFACTORING!
# Learning from Mistakes
For the humour impaired, yesterday's rant was mostly a joke. While I can't fix your software problems, figuring out why they happen to customers is an important part of software engineering - learning from mistakes.
I find that software designers tend to make the same mistakes over and over in different products instead of using their previous knowledge. Probably because they think in their infinite wisdom that everyone is a bleeding-edger like them and will prefer their new and improved way. No, regular people like the expected and learning something new (especially on a computer) takes effort.
The Winamp version 3 rewrite was a great example of this -- it made people scratch their heads. But what are you going to do, it's free.
When I try to help people and can't find a solution some of them think I've somehow wasted the last six years of my life on my education. It confounds me that they could draw such a conclusion, but whatever ... I can't help what other people think. :)
# No, I will not fix your computer
<rant>Are car designers mechanics? Are architects construction workers? No, I don't think so. Like the car designer and architect, I'm a knowledge worker. So when you ask me about your problems with Windows/AOL/anything don't get all flustered when I don't know the answer. I am not a tech support agent. "Well what are they teaching you in school anyway, if you don't know how to fix this?"
I don't have time to explain the intricacies of software engineering to you, but to simplify: I make the software that you bitch about - I don't help people use it. Ha. ;)</rant>
# Instantly Crash IE
# Compete to Make Apple Rich!
We can assume that Apple will publish an XML-based API for buying a tune once they've got a few more bugs shaken out, then they can stand back and let the programmers of the world compete for ways to send them money.Sounds a lot like Amazon's referrer business model -- very smart. AudioMan is my group's university software project and it organises your music collection. We are planning on releasing something soon ...
# Students Settle with RIAA
Students being sued by the RIAA for setting up massive file-sharing systems on university resources have have settled for amounts between $12,000 and $17,000. I shook my head when I read this from the article:
Despite the settlements, the students did not admit any guilt. "I don't believe that I did anything wrong," 18-year-old Peng said in a statement. "I am glad that the case has been settled amicably, and I hope that, for the sake of artists, the larger issues can soon be resolved."These kids had many many thousands of files shared on these systems. Just because they disagree with the way record companies share their revenues with artists doesn't justify breaking the law. If they're going to share files illegally the least they can do is not hide behind some bogus excuse -- own up to it.
If they said "we wanted to impress girls with our l33t collection!" then I would accept that. But these systems were just ridiculous - you'd never be able to listen to all of that music in a lifetime. Count your lucky stars boys and girls, you got off easy.
# More Work on xNote Today
xNote takes another step towards being an OPML outliner. Here's what I added:
Some issues that are left:
... and from before:
I just recently added:
So now it's less a browser and more like an editor. You can only edit the top-most document, not documents loaded by inclusion links (blue folders).
Still on the TODO list:
Here's a question that wasn't answered by the spec: can links have comments? In the implementation of xNote so far, they can. Here's what that looks like in OPML markup:
<outline text="This is a demo directory">