web 2.0

Antec P280 Computer Chassis

I make my living writing computer software, but computer hardware is actually my first love. I LOVE HARDWARE! Motherboards, CPUs, video cards and hard drives. Nothing gets me quite as giddy as when the UPS man delivers a package from my favorite on-line computer store. And so it was last week that I received TWO packages - an Antec P280 chassis and a Seasonic Platinum 860W power supply (PSU).

I've been using an Antec P180 (the original Performance One model) chassis since just about the time they first came out. I can't be certain, but something tells me that was in 2005. Seven years is a long time to hang on to the same computer chassis, but the P180 was such a stellar performer that there never really was any reason to replace it. For about the same amount of time, I've also had a Corsair HX620W modular PSU. The Corsair may have worked fine for a year or two, I'm not sure, but I returned several new hard drives that had the "click of death" before I realized that my PSU was the real culprit. I was able to keep limping along with the Corsair fine for the most part, moving my hard drive to a different modular connector, but I was still plagued with flickering white levels on my monitors. I originally blamed my Radeon 5870 for this before once again pointing the finger at the Corsair.

I decided that I wanted to wait and get both a new chassis and new PSU at the same time. (Actually, I was waiting to get a whole new Ivy Bridge system but decided to get the chassis and PSU now.) But there really wasn't anything compelling in the chassis department. I could have moved to Antec's P183, but it was so close in design to the P180 that it didn't seem like a worthwhile upgrade. Silverstone has their FT02 which is a VERY nice, elegant design but is quite a bit larger than the Antec cases, and also significantly more expensive. I was also impressed by Fractal's Define R3 chassis, but at the time it lacked USB 3.0 ports and there was some concern over fan noise. So I waited and waited. And then finally, the P280 was announced late last year and I knew it was my next chassis. Still very similar in design to the original P180 including the "270-degree" fold-back front door, but now with front USB 3.0 ports which have also been moved to the top of the case where they are much more convenient. Also more convenient are the power and reset buttons on the top, no longer requiring me to open the front door where they are hidden away half-way down on the P180. Minor enhancements to be sure, but welcomed. Of far greater note are the superior cable routing capability, much quieter fans, and generally improved cooling performance (see below - CPU and GPU temps are 2 to 4 degrees better, while the motherboard and hard drive temps edge a little higher).

 

P180 temps - click to enlarge
P180 Temperatures
P280 temps
P280 Temperatures

 

Working inside the P280 is an absolute delight. Gone from P180 is the separate "power supply zone" baffle and the interior is now wide open. Add to that the cable routing ability behind the motherboard (which has become a standard feature these days) and you have an environment that is no longer cramped and confined, but rather one that is open, clean, and organized. Here is a look at the insides of my P180 compared to the P280. Note that in the P180 I had moved my hard drive to a rather sloppy, unsecured position just sitting on the PSU zone divider. This was a "frustration" move to get the drive closer to a different power connector, since sharing one with my SSD drive in the bottom drive cage was causing the "click of death" I mentioned above. But even without the hard drive, you can see the mess of cables everywhere and how difficult it is to route cables, especially from the PSU to various points on the motherboard, graphics card, and drives. A look at the insides transplanted to the P280 is comparitively-speaking a work of art! Everything is neat and tidy, greatly improving air-flow and making maintenance a breeze, too.

 

Antec P180 - click to enlarge
P180 - Messy
Antec P280 - click to enlarge
P280 - Tidy

 

Other ease-of-use changes in the P280 include the tool-less install of 5.25" drives, like my LG Blu-Ray writer. Just slide the drive in and it locks in place via a cantilevered plastic locking tab. I further secured it with a couple of screws, but you can only do that on the right side - there are no screw holes on the left side. Still, with the two right-side screws, it's secured in there pretty solid. One screw secures my 2.5" SSD in the top 2.5" drive cage (there's room for one more) and my 1.5TB hard drive is secured via four screws to a platic caddy (with silcone grommets for vibration isolation) that slides into the main drive cage. Of course, the PSU is on the bottom of the chassis, in the same place as the P180 but without any separating baffle this time. There's also a vent right below the power supply to aid with PSU cooling. Also of note is the use of thumb screws for both side panels, and the expansion (PCI) slot covers.

Chassis cooling is provided via three 120mm Antec "TwoCool" fans - 2 on top and one on the back. The speed of each fan can be adjusted individually via switches on the back of the case. There is a low and high speed setting, and I have mine set on low. The fans are significantly less noisy than the P180's three "Tri-Cool" fans which I had all set on "Medium". I also had a 120mm orange Nexus fan on the front of my P180 to draw air in. Though you can mount up to two 120mm fans on the front of the P280 and/or another two 120mm fans on the other side of the main drive cage, I find that the provided fans offer the same cooling power as my P180 - but with one less fan and much less noise. In fact, the unit is all but silent from my sitting position about three feet away. There is still an intermittent resonant hum from the case which I expect will prove little problem to eliminate once I get the chance to spend a little time tracking it down.

The P280 is substantially less heavy than the P180 "beast" that it is replacing (the P180 was 14kg while the P280 weighs in at only 10.2kg), it doesn't really feel less sturdy. The P280 is ever-so-slightly larger, too, but not enough to make a fuss about. It's worth the extra room for the cable routing ability. However, I do miss the "DeLorean" look of the aluminum side panels on my P180 (see image gallery below) but I suppose there's nothing wrong with flat black.

Overall, I am very satisfied with the Antec P280 and I look forward to owning it for another seven years. Highly recommended.

Tags:

Hardware | Tech

Making The Jump To LightSpeed - Bell Aliant FibreOP

Ever since Bell Aliant began their rollout of FibreOP in New Brunswick two years ago, I've been anxiously awaiting its arrival in the Halifax area. Early this year, it was announced they would be rolling out the service in HRM over the summer months. Summer came and went, and while FibreOP was deployed in my neighbourhood in August, my cul-de-sac street was passed over. Well, ultimately in mid-October it became available to my address and I made the appointment. A week and a half later, I finally had my 70/30 internet connection and the FibreOP TV package.

I've always been an eager beaver when it comes to faster internet speeds. Back in 1998 I was torturing the phone company (then called MT&T) on a regular basis to bring their ADSL offering to my town so I could get off dial-up. That eventually happened, of course, and while the DSL speed was increased over the years, it finally topped out at about 6.5 Mbps downstream, and only 0.5 Mbps upstream. It was serviceable, but way behind the times especially with Eastlink offering a 40 Mbps service. Still, I had my Sympatico email address that I didn't want to give up, so I stuck it out with Bell Aliant.

Installation

On the day of the appointment, I got up bright and early to await the arrival of the FibreOP tech, who would be here "between 8am and 6pm". After much hand-wringing all morning thinking the appointment might be cancelled, the techs (2 of them) arrived at about 1:30. They got right to work stringing a fiber-optic cable from the telephone pole to my house, and preparing the ONT (Optical Network Terminal) inside my house. About 3 hours later, they were all done and I had 70/30 internet and FibreOP TV.

Connecting the fibre optic line.
Hooray! He's here!


Internet

First off, the internet speed is a world of difference from the High-Speed Ultra DSL service I had been using. I wasn't sure if regular web browsing would be much different, but it is noticeably more responsive. Of course, it depends on the site you're using, but most popular sites now completely load in sub 1-second speed. Some even feel nearly instantaneous. Since I never used Eastlink's internet offering, I can't compare the experience with them, but it is a much better experience than DSL. As for file transfer rates, as you might expect, it is an order-of-magnitude difference. With DSL, my downloads would max out at around 0.8 MB per second (800 KB/s). When I can find a server with big enough pipes, my FibreOP downloads will sometimes reach 8 MB/s, though 5 MB/s seems to be more common. This makes a tremendous difference with usability, since as a Microsoft developer I am often downloading large installers from MSDN which I previously had to let run overnight, but can now run pretty much on-demand, as even a 1.5 GB download will take only 15 minutes. Oh, and my wife's web-browsing experience is unaffected when I'm downloading large files, which wasn't the case on High-Speed Ultra.

Upload speeds are also in a completely different class. This is extremely important with the advent of "cloud computing" and the internet-based backing-up of files. If you upload files regularly (such as using Carbonite or Mozy for backup, or even say uploading images to blog posts), you'll definitely appreciate the 30 Mpbs upstream capability of FibreOP.

The new "modem" is an ActionTEC R1000H (bottom) that dwarfs my old DSL modem (top).

FibreOP TV

Moving on the TV service, well, I had my reservations about moving off Eastlink to FibreOP TV. My thinking was that Eastlink has been doing TV for decades, and Bell Aliant has only recently gotten into that game. I like the "phone company" for my telephone, and the "cable company" for my TV (I have too many trees around my property for satellite service to be an option). Of course, both companies now offer pretty much the exact same services, and their pricing structure is such that, financially, it makes little sense to divide your services between the two. The "bundle" pricing from both companies is designed to ensure you are very motivated to keep all your services with that one provider, and FibreOP is no different. Even with the $15/month upgrade to 70 Mbps downstream, and opting for the "Best" bundle offering which includes the movie channels and HBO, I'll be saving somewhere in the neighbourhood of $75 a month (after the 3-month promotional price of $99 per month) versus having my cable service separately with Eastlink. So I decided to take a leap of faith and switch my TV to FibreOP and cancel my Eastlink account.

I've only had FibreOP for five days, but the TV service actually does seem to be adequate. Some individuals on internet forums had been reporting that the picture quality with FibreOP TV was a bit "soft" or less sharp than Eastlink. This may be true, but if it is the difference is very subtle. And it would surely be noticeable to me, as my "TV" is actually a 120-inch front-projector (smaller TV sizes are better at hiding signal flaws). And while the picture may not be as sharp (I haven't really decided yet if it is or isn't), what does seem to be gone, or at least much less prevalent, is the "macro blocking" on high-definition stations that was so frequent on Eastlink. Macro blocking is the pixilation effect you see on a video image when there is a lot of motion on the screen, and the video compression is turned up rather high by the provider. If my research is correct, this may be because Eastlink uses MPEG-2 compression while FibreOP uses MPEG-4 (H.264). MPEG-2 is good (it's the compression used on Blu-ray discs) but requires almost twice the bandwidth that MPEG-4 needs for similar image quality. So, perhaps FibreOP doesn't have to compress the signal as much due to the lower bandwidth requirements, but I'm really just guessing and I'm not very sure of my facts here. One thing that I am sure of, however, is the irritating lack of proper lip-synchronization on at least one channel (CityTV) with FibreOP. I'm not sure what the root cause of this is and I haven't spent any time trying to fix it yet, but it's a problem I didn't have with CityTV on Eastlink.

The ONT (Optical Network Terminal) attached to a joist in my basement.

The PVR that FibreOP uses is the Motorola VIP1216 running Mircosoft's MediaRoom IPTV software. It's a much smaller unit than Eastlink's Motorola DCX3400 unit and while the features are similar, the user interface looks completely different. Instead of the colourful, opaque UI on the Eastlink box, MediaRoom uses a translucent overlay on top of the video that's currently playing. I don't find either interface to be inherently better, but the MediaRoom fonts are much more smooth (no jaggies) and the TV listings show a 2-hour window instead of Eastlink's 90-minute window. Also, the FibreOP unit is nearly silent compared to the constant hard-drive spinning and clicking you hear from the Eastlink unit. In fact, I had to double-check that the FibreOP box even came with a hard drive because I couldn't hear it at all! The recording options are slightly more impressive than the Eastlink PVR I was using, too. The FibreOP unit can record up to four programs at once, although only two of those can be high-def. FibreOP's PVR is also "whole-home" capable, essentially acting as a kind of media server for all the TVs in your house. Eastlink also has a "whole-home" PVR option, though I've never tried either service - I only have one TV.

Not everything is rosy with the FibreOP machine, though. Eastlink's is definitely more responsive - I've found the FibreOP box hesitates more often, frequently requiring an extra second or two before it will process a command from the remote. Not a big difference, but noticeable. Also, Eastlink's PVR allowed me to plug in an external 1GB eSATA hard drive to obtain a vastly increased storage capacity. The FibreOP PVR only has a USB port but it currently serves no function. I'm not even sure if USB 2 can support the speed necessary for real-time recording of high-def video anyway. The hard drive in the FibreOP unit is a measly 160 GB (using a quaint IDE interface instead of SATA), but the MPEG-4 efficiency allows it to store just about the same amount as the bigger Eastlink drive. Still, not being able to expand the storage capacity of the unit is a definite disadvantage. Also, on occasion I've used the Firewire port on the Eastlink machine to record material to my computer for longer-term storage. No such ability exists with the FibreOP unit.

FibreOP TV has a robust offering of "video on-demand" (VOD) services, and so did Eastlink. I haven't bothered much with either, but I'm completely aghast at FibreOP's $7 price-tag for "rented" movies using VOD. Sorry, but that's way too much to charge for a movie rental. I'll be giving this feature a big miss.

Lastly, there are some differences in the channel line-up, both in available packages and stations. Moving from Eastlink, I've lost AMC, History HD and MovieTime HD (FibreOP doesn't offer AMC at all, History is in standard-def only and MovieTime is only available in standard-def in a $5/month theme pack) but FibreOP's movie package includes MPix, which was an additional charge with Eastlink. There are likely other differences (say, with Sports programming, but I'm not much of a sports fan anyway) but by and large, I'm satisfied with the FibreOP channel offerings.

Conclusion

Overall, I am extremely happy with my move to Bell Aliant's FibreOP services. I mostly made the move for the high-speed internet service, and opted to include the TV service only for the cost savings over a separate Eastlink account. Naturally, the internet offering blows pretty much everything else out of the water, while the TV option isn't bad at all. If you can live without AMC or some of the other channels only available on Eastlink, I would definitely suggest you consider FibreOP TV. As a bundled service, I would highly recommend it.

Tags:

Entertainment | Tech

Left High 'n' Dry By OnHop.ca

I recently decided to build myself a brand new computer system based on the new Intel P55 chipset and a Core i7 860 processor (I'll be blogging about that entire experience shortly). While I was at it, I decided I would dive into the wonderfully speedy world of SSD drives, too. Unfortunately, my local retailer wasn't able to source my preferred drive (an OCZ Vertex 120GB) and my usual online retailer (ncix.com) had no stock.

I decided to try OnHop.ca since they had the lowest price on PriceCanada.com and they had stock. They also have favourable reviews on PriceCanada, so I figured I was safe. The product page for the drive listed the item as "in stock" and a delivery estimate of 1 to 2 days. I ordered the drive late on a Tuesday night, so I figured it would arrive by Friday which would have worked out great since I had put aside the entire weekend to build my machine.

But Friday arrived and there was no drive. Boo. I was disappointed but well, these things happen so I decided to be patient. By the following Tuesday there was still no drive, so I sent an inquiry to OnHop to ask about my order. Wednesday morning I got a response back claiming that the shipping company had "lost" the order, and that OnHop was shipping out a new unit immediately, and that I would have it the following day. Thursday came and went, and so did Friday - no drive. So, weekend number 2 and I'm still unable to assemble my system.

At this point, I'd had enough and dispatched a strongly worded (but not abusive) email to OnHop demanding my money back, since their order fulfillment process was apparently horribly broken. Naturally, I had to wait until Monday afternoon for a reply, and while they complied and immediately refunded my purchase, I was rather shocked by their laissez-faire attitude about the whole matter. They claimed my order had been "delayed" because the item they had in stock was a "defective unit." I guess they only had the one defective item as stock, but why would a defective unit count against their sales inventory? And why did it take almost 2 weeks to discover the error? I was expecting a bit more along the lines of "sorry we screwed up - please allow us to fix it and keep you as a customer" but no, here's your money back, now get lost.

Anyway, I'll never order from OnHop again, and I've since reordered the drive from trusty ol' NCIX since they now list it back in stock. Here's hoping it arrives by THIS Friday.

Tags:

Tech | Toys

Working with Active Directory in .NET 3.5

Many projects that I’ve worked on over the years have required some kind of interface with Active Directory. Back in the good ol’ ASP days, there was ADSI (Active Directory Services Interface), and .NET uses the System.DirectoryServices namespace to essentially wrap ADSI with managed code. It’s been a long time since I worked directly with ADSI, but working with AD up to and including the .NET Framework 2.0 was never a very straight-forward task.

Take for example the classic requirement of simply obtaining the current user’s full name from AD. Say you have a web site that uses either IIS/NTFS to protect pages using ACLs, or uses ASP.NET Forms Authentication with an AD Provider. Obtaining the user’s login name is relatively easy, using the Page’s User object:

string loginName = User.Identity.Name;

But getting the user’s full name from AD requires several lines of code involving DirectorySearcher and SearchResult objects:

string firstName = null;

string lastName = null;

 

DirectoryEntry entry = new DirectoryEntry();

DirectorySearcher searcher = new DirectorySearcher(entry);

searcher.PropertiesToLoad.Add("givenName");

searcher.PropertiesToLoad.Add("sn");

searcher.Filter = "(&(objectCategory=person)(samAccountName=jsmith))";

SearchResult result = searcher.FindOne();

if (result.Properties["givenName"].Count > 0) firstName = result.Properties["givenName"][0].ToString();

if (result.Properties["sn"].Count > 0) lastName = result.Properties["sn"][0].ToString();

Ick. Thankfully, .NET 3.5 has added the System.DirectoryServices.AccountManagement namespace which abstracts most of this code and makes it super-easy to deal with AD Principals in a strongly-typed manner:

PrincipalContext pc = new PrincipalContext(ContextType.Domain);

UserPrincipal user = UserPrincipal.FindByIdentity(pc, "jsmith");

string firstName = user.GivenName;

string lastName = user.Surname;

Gotta love progress!  :-)

Tags:

Tech

HTC Touch As An iPhone Replacement

In January of this year (2008), I was getting the itch to buy something to replace both my cell phone and my Palm PDA (I used the Palm as my MP3 player). I wanted an all-in-one solution so I wouldn't have to carry around two pieces of technology with me. Being the geek that I am, I was naturally interested in the iPhone but at that time it still wasn't available in Canada, and wouldn't be available at all through my preferred mobility provider which uses a CDMA network. So entranced was I by this new Apple technology that I seriously considered getting an iPod Touch and just keeping my old cell phone. I'd still have two items to carry around, but at least one of them would be super-cool.

In doing some research, I came across an interesting Windows Mobile phone from HTC called the "Touch." It has no number or key pad and instead relies almost completely on its touch sensitive screen for controlling the device (much like the iPhone). Windows Mobile was never designed to be operated by a touch screen, so HTC includes this glitzy little interface called Touch Flo which is neat enough, but doesn't really replace the standard Windows Mobile interface. However, the real advantage of the HTC Touch was the network fee - it came with an UNLIMITED data plan for only $7 a month! For replacing my MP3 playing Palm, the HTC Touch uses a microSD card, so I could at least approximate the storage capacity of an 8GB iPod Touch.

So that's what I did. I bought the HTC Touch with an 8GB microSD card and I've been mostly happy with it. Unlike the iPod or iPhone, the HTC has both regular and stereo bluetooth, so I also bought a pair of Motorola S9 bluetooth headphones, which work and sound pretty darn good. So, things have been good - mostly. There are some serious downsides to this solution, however.

First, I've mentioned that Windows Mobile is not really a mobile OS designed for touch screens so it has nowhere near the usability or cool flashiness of the iPod Touch/iPhone. Second, the battery life is atrocious - with the bluetooth radio on all the time and playing MP3s for about an hour a day, the device won't last 24 hours without a recharge. These aren't deal-breakers mind you, just a little annoying. What is more than just a little annoying is the fact that the HTC tends to corrupt the contents of the microSD card every once in a while (a couple of times a month on average). This is a known issue all over several Internet forums, but no one knows why and a fix is not forthcoming from HTC. So I just live with it, growling when it happens and re-copying my MP3s over when it does. I expect this doesn't happen on the iPhone.

UPDATE (March 2, 2009): After upgrading the HTC Touch to Windows Mobile 6.1 (a free upgrade) several months ago, I haven't experienced a single SD card corruption issue.

The latest "gotcha" with using the HTC as an iPhone replacement is with my car stereo, or pretty nearly any car stereo that supports "MP3 players." Usually this means they have an AUX jack that you can plug your MP3 player's headphone jack into. And I suppose that works well enough - it's certainly way better than using a tiny FM transmitter to do the same thing. But if you're lucky enough to have a decent car stereo, it will also come with an iPod dock connector so that you can completely control your iPod through the car stereo system! Playlists, artist names and song titles show up right on the car stereo display, and the iPod can be controlled with the steering-wheel radio controls, if your car is so equipped (mine is). But, if you don't have the magical device from Apple, all you've got is the AUX jack. Boo. (I understand that come vehicles also let you plug in any USB memory stick that contains MP3s and will work much like the iPod control - alas, my car does not have this option.)

So, do I buy an iPod so I can have the convenience (and cool) factor when I'm in my car (not to mention the absence of corrupted memory cards)? Do I go back to having two items of technology to lug around? I'm very tempted, though having everything on my cell phone is mighty handy. I suppose if it was really worth it to me, I could dump the HTC and switch mobility providers and get the iPhone now that it's available in Canada. Honestly though, paying $75 a month for the privilege isn't really enticing, not to mention the early termination fee I'd face with my existing provider. But I still have my eye on a new iPod. :)

Tags:

Tech | Toys

On The Edge (and falling off a cliff)

UPDATE (Feb. 19, 2008): If you're too busy to read the book, take a look at this 8 minute video - it gives a pretty decent summary! 

Ars Technica recently began running a series on the history of the Amiga, my favourite computer of all time. From the comments posted to this series I discovered that in 2005 a book was published on the entire history of Commodore. Well, the entire history starting from 1974, anyway. Through hours of interviews with various engineers and executives of Commodore, the book titled On the Edge: The Spectacular Rise and Fall of Commodore by Brian Bagnall tells the story of Commodore's pioneering role in the microcomputer industry, its rise to glory in the early to mid 1980's, and ending with its bankruptcy on April 29, 1994.

Commodore was actually founded in Toronto in 1958 by Jack Tramiel and Manfred Kapp as a typewriter manufacturer. After a stock scandal in the '60s, Commodore was bought by Canadian financier Irving Gould in 1966 who kept Jack Tramiel on as CEO to move Commodore into the then lucrative calculator sector. In the mid 70s, the calculator market was getting overcrowded, so Jack started looking for cheaper calculator parts. This lead to Commodore's purchase of MOS Technology, a semiconductor manufacturer. At the time, MOS had recently hired Chuck Peddle, who soon developed the legendary 6502 microprocessor. (Interesting side node: Chuck Peddle's parents hailed from the Canadian Maritime provinces, though the book does not detail from where specifically. A quick look at Canada411 shows a high concentration of Peddle's in Cape Breton, however.) The 6502 was extremely important to the nascent microcomputer industry because while the comparable 6800 from Motorola cost $300 (which Chuck Peddle was also involved with), the 6502 cost only $25. The 6502 became the processor in Commodore's first microcomputer, the PET 2001. It was also used in the Apple I and Apple II computers, and Atari's home computer models (the famous Atari 2600 game console used a variant of the 6502). The 6510 used in the world's top-selling computer model of all time, the Commodore 64, was a direct descendant of the 6502.

While I found this book to be a long read (it is 557 pages), I was thoroughly enthralled with it. While it did not focus too much on the personal lives of those involved (an aspect I enjoyed in another computer history book I recently read, Showstopper by G. Pascal Zachary), it did cover a lot of detail, including technical detail, which naturally I loved. It also detailed a lot of business transactions and, for me, illuminated much of how the business world works, or at least the dysfunctional business world of Commodore. Did you know that Steve Jobs offered to sell Apple to Commodore in the late 1970s? Jack turned them down because he thought $200,000 was an outlandish price. Oops. Of course, if Commodore had bought Apple, they'd be dead now, too. And did you know that the most successful microcomputer in 1977 was not from either Apple nor Commodore, but was in fact Tandy's TRS-80? Perhaps the most satisfying fact in the book is that Bill Gates learned his lesson on software licensing when Jack Tramiel negotiated a deal to use Microsoft's BASIC in Commodore computers. Jack sold tens of MILLIONS of computers with the same Microsoft BASIC in them and he only paid Microsoft a one-time fee of $10,000. Microsoft received absolutely no royalties on any Commodore computer sold in the late 70s to mid 80s. Ha!

Much of the book pays special attention to Commodore's founder and CEO until 1984, Jack Tramiel. Jack had a couple of battle cries that were interesting: "Business is War", and "Computers for the masses, not the classes." The first quote refers to Jack's belief that you didn't succeed by competing with competitors, you succeeded by destroying them completely. The second was Jack's continual insistence on driving down the cost of computers. There are many stories in the book that illustrate this. For instance, the original case design for the PET was to be made as a futuristic-looking molded plastic design. However, Commodore at the time owned an office supply company in Toronto, so they instead used an angular sheet-metal case because it cost less. The case for the C-64 is the exact same one as the VIC-20, because Jack didn't want to spend money designing a new case, which actually ended up causing the engineers to lose weeks worth of time trying to cram the C-64 guts into the VIC-20 case. Jack had some interesting characteristics, many of which I've noticed in other "successful" businessmen. However, what makes a successful businessman doesn't appear to be totally compatible with what makes a successful human being, in my humble opinion. One case in point is the fact that when Chuck Peddle left Commodore in the 1980s to begin his own start-up, out of spite Jack filed a lawsuit that completely destroyed Chuck needlessly (Jack and Chuck had once been very good friends). A hero of the microcomputer era struck down by a mean-spirited, greedy CEO.

Still, I have to wonder if Commodore would ever have succeeded as much without a guy like Jack at the helm. Another very interesting, but oddly secretive character in the Commodore saga was its owner, Irving Gould. The book paints this man as a mostly absent father-figure, who, when his CEOs would become successful with his company, he would fire them out of fear they were gaining too much power. After Jack took Commodore to a billion-dollar company with the C-64, Irving fired him in 1984. After Commodore lost hundreds of millions over the next several quarters, ex-Pepsi executive Tom Rattigan was put in place as the company's CEO and he turned it around in a matter of months! Once Commodore was successful again, Rattigan was let go by Gould, too. Commodore never recovered after this, and eventually failed at the inept hands of CEO Mehdi Ali (nicknamed the "speed bump" by Commodore engineers, who burned an effigy of him in Dave Haynie's Deathbed Vigil video) in 1994.

Commodore was the first company to put a microcomputer on the market, they were the first to sell over one millions units, and they were the first with a multimedia computer (the Amiga, R.I.P.) before the word "multimedia" existed. Despite all this, they self-destructed and have become pretty much just a footnote in the annals of the birth of the microcomputer industry. If you love computers as much as I do, and want to learn what it was like to be a computer engineer back in the heyday, you HAVE to read this book. If you're tired of the "revisionist history" that paints Apple as the founder of the microcomputer, you HAVE to read this book. If you ever look back nostalgically on that old Commodore computer you owned in the 1980s (and wonder why the 1541 disk drive was so slow), you HAVE to read this book. It will make you laugh, it will make you cry, and it will make you pound your fists in anger. What more can you ask from a book, especially a non-fiction one such as this?

Tags:

Tech

Rules for Checking In Code to Source Control

The golden rule of checking in code is:

Don't check in code that will break the build.

Nobody likes code that won't compile. Also see Scott Hanselman's First Rule of Software Development.

In order to help verify that your pending check-in will continue to result in a healthy build, you may wish to view the following rules and procedures that I find helpful.

  1. Try to work on small chunks of code and features at any given time. As Tim Stall points out, "It's easier to integrate 5 small things than 1 big thing."

  2. Before checking in anything, perform a "get latest" on your entire solution's code-base. Resolve any version conflicts before proceeding.

  3. If you have any web sites in your solution that have references to web services, make sure you update all web references.

  4. Perform a build on your entire solution. Obviously, fix any compilation errors.

  5. Database scripts. Ahhh, these are lovely, aren't they? Unless you're fortunate enough to be using some cool database tools (like Visual Studio for Database Professionals), you don't likely have any compile-time error checking for your database scripts. It is essential that you ensure all your database scripts for changing the schema, updating the programming (e.g., stored procs), and inserting default foundation data work properly. If they don't, you'll soon have a swarm of angry developers beating down your door. The best way to do this is to run the update scripts on your machine and test the software. Update scripts should be written in such a way that they first check to see if a particular update has been applied first before trying to apply it again. This makes it much easier to test, and for other developers to apply to their database copies.

  6. Check in ALL files you have checked out. This is a tricky one, since perhaps you know that a particular file doesn't work properly, even though it will compile properly. Unfortunately, you may not know what dependencies exist on this file from some of the other files that you're checking in. So, while you may think you're doing a favour for the rest of your development team by not checking in a file you know to not work properly, you may actually be more causing grief by checking in code that won't build!

Even if you use a fancy-shmancy tool that performs delayed commit or source integration (such as TeamCity), as a professional developer you should really follow these guidelines to save yourself (and your team) pain and suffering.

Tags:

Tech | Source Control

XBox 360 Fun

I had been holding off buying an XBox 360 since I'm really not that much of a gamer and when I do play I totally suck anyway. For us non-gamer types, the XBox Live Marketplace sounds interesting since it offers high-definition movies, but alas as a Canadian I am deprived of such a useful feature (though Microsoft has said this will be available in Canada by the end of 2007). However, with last week's release of Halo 3, I really had no choice but to break down and get myself one. Halo is just about the only video game I've played in, oh, ten years so once again I bought an expensive piece of hardware just so I could play this damn intoxicating game.

I decided to get an XBox Elite primary for the larger hard drive, since outside of Halo I expect my only primary use of the machine will be for buying and watching high-def content. I ordered my machine through Dell Canada and got a deal where Halo 3 was included for free (I also got $30 off an extra controller with the play and charge kit). For a company that almost exclusively sells their stuff through an on-line web site, their on-line order tracking is really poor. I placed my order 2 weeks before Halo 3 was scheduled to ship. I got an email stating an "expected ship date" of September 21st (the Friday before Halo's release). However, when I clicked on the order number to go directly to Dell's site for an update, it said the order (or more presicely a single line-item on the order) wouldn't ship until the 27th. The other line item had no details for the ship date, so was the first line item's ship date also for the entire order?

Naturally, being the instant gratification freak that is typical of my generation, I checked the site for updates several times a day. I even called Dell in an attempt to gain clarification. I was told that this deal was extremely popular, but that it probably wouldn't ship until a day or two AFTER Halo's release. Grrrr.....  But then, on the 21st (this was the original "expected ship date") something went haywire on Dell's order tracking site and it now said an "expected DELIVERY date" of the 24th! Woo-hoo! Hours later, however, and it was back to a SHIP date of the 27th. Boo. I checked again on the morning of the 25th to find that it had actually shipped the day before (though no notification email was sent to me). They shipped it by air, and it actually arrived on the 25th! So, good marks for execution but an F for a rather useless order tracking system.

Anyway, I hooked up my new toy that evening and was relieved to find the cooling fan was much more quiet than my original XBox. I used my original XBox with XBox Media Center to stream video from my PC to my television in the living room and the fan was always distracting. The DVD drive is another story - it is quite noisy when it's in use even though it's the vaunted Benq drive which is supposed to be the most quite DVD drive in the 360s. I'd hate to hear what the noisy ones sound like.

I won't bore you with a review of Halo 3 since the entire gaming community has already given it plenty of thumbs-up. I haven't even played it much yet, though it looks like Halo, feels like Halo, and sounds like Halo. That's a good thing. Since I totally suck, I play on the "easy" setting but in Halo 3 it is way TOO easy - I haven't died yet! I think I'll restart on the normal difficulty setting and see how I fare. Oh, and the new hammer weapon totally rocks!

One thing that I wasn't looking forward to about the 360 was the fact that while it can play video from a PC, it only supports WMV and MPEG video formats. My original XBox with XBMC plays just about every video format on the planet and I like it that way. Thankfully, some clever programmers developed an ingenious (and free, let's not forget free) piece of software that allows you to play just about any video format on the 360. It's called Tversity and what it basically does is "transcode" a video file on-the-fly to an XBox 360 supported format. Since I just upgraded my rig to a quad-core system, I can easily transcode high-def material without breaking too much of a sweat. This is great stuff.

So, I'm quite happy with my new Halo 3 Machine (let's call it what it really is). Hell, I might even try to do the XBox Live multi-player thing too if I can think up a decent gamer tag. My usual nicknames are all taken, so this might take a while. (UPDATE: I am now known as UnhingedBeaker.)

Tags:

Tech | Entertainment | Toys

SQL Server 2005 Syntax Incompatible with SQL Server 2000

On a recent project we use SQL Server 2005 for development but the product officially supports installation on both SQL Server 2005 and SQL Server 2000. During development we'll create tables in the database (using SQL 2005) using the GUI tools in either Visual Studio or Management Studio. When it comes time to create the installation scripts, we'll "Generate CREATE scripts" from these GUI tools. With SQL 2005 (well, at least the version we're using, which is SP2), the CREATE TABLE script will now use a SQL 2005 specific syntax that will not work on SQL 2000.
 
For example, here is an auto-generated script that runs on SQL 2005, but not on SQL 2000:
 
CREATE TABLE [dbo].[Order](
 [orderID] [int] NOT NULL,
 [customerID] [int] NOT NULL,
 [orderDate] [datetime] NOT NULL,
 [shipDate] [datetime] NOT NULL,
 [shipperID] [int] NOT NULL,
 [shipperTrackingNumber] [varchar](50) NULL,
 CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED
(
 [orderID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
 
If you try to run this on SQL 2000, you'll get the following error:
 
Server: Msg 170, Level 15, State 1, Line 11
Line 11: Incorrect syntax near '('.
 
It would appear as though SQL 2000 does not like the syntax of the primary key constraint included in the CREATE TABLE statement. Alternatively, the following script works on both SQL 2000 and SQL 2005:
 
CREATE TABLE [dbo].[Order] (
 [orderID] [int] NOT NULL ,
 [customerID] [int] NOT NULL ,
 [orderDate] [datetime] NOT NULL ,
 [shipDate] [datetime] NOT NULL ,
 [shipperID] [int] NOT NULL ,
 [shipperTrackingNumber] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
 
ALTER TABLE [dbo].[Order] ADD
 CONSTRAINT [PK_Order] PRIMARY KEY  CLUSTERED
 (
  [orderID]
 )  ON [PRIMARY]
GO
 
Now, if that was the only problem I could probably live with that. But wait! There's more! When you create an object in SQL Server, it's generally good practice to first make sure the object doesn't already exist. In my day-to-day use, my scripts will often check for general objects, or foreign-key constraints. SQL 2005 uses the following code for these operations:
 
IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Order_Customer]') AND parent_object_id = OBJECT_ID(N'[dbo].[Customer]'))
 
Run this on SQL 2000 and you'll get:
 
Server: Msg 208, Level 16, State 1, Line 1
Invalid object name 'sys.foreign_keys'.
 
Also, the following code is used by SQL 2005:
 
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Order]') AND type in (N'U'))
DROP TABLE [dbo].[Order]
GO
 
which will give you the following on SQL 2000:
 
Server: Msg 208, Level 16, State 1, Line 1
Invalid object name 'sys.objects'.
 
Microsoft changed the way that meta-data is stored in SQL 2005 to improve security, amongst other things, but this means that these scripts won't work on SQL 2000. Thankfully, however, they did provide "views" in SQL Server 2005 which mimic the old behavior on SQL 2000. To fix these errors on SQL 2000, you can use the following syntax which will work on both SQL 2005 and SQL 2000:
 
IF  EXISTS (SELECT * FROM dbo.sysforeignkeys WHERE fkeyid = OBJECT_ID(N'[dbo].[FK_Order_Customer]') AND rkeyid = OBJECT_ID(N'[dbo].[Order]'))
ALTER TABLE [dbo].[Order] DROP CONSTRAINT [FK_Order_Customer]
GO
 
IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[Order]') AND type in (N'U'))
DROP TABLE [dbo].[Order]
GO
 
Thankfully, there is a way around this if you're using SQL Management Studio. Instead of right-clicking on a table to generate a CREATE script, right-click on the Database and select Tasks -> Generate Scripts. This will open the Script Wizard dialog. On the Choose Script Options page, set the "Script for Server Version" property to "SQL Server 2000" and your CREATE scripts will now be fully compatible. A little more clicking is required, but at least your scripts will work on both server versions.
 

Tags:

SQL Server | Tech

A Cool ASP.NET 2.0 Feature (Well, Almost)

Whenever I start a new web project, one of the first things I do is create a "Base" class for all my ASPX code-beside ("code-behind" is so .NET 1.1) class declarations to inherit from. This makes it easy to have useful properties such as CurrentUser available in all pages automatically. Such a practice is quite common these days, and has been covered in several articles including this one.

Recently, I have found it useful to have some boolean properties on the base class which control the rendering of certain elements. For example, a current project I'm working on has the requirement to restrict the user's ability to navigate backwards by using the browser's "Back" button. This is accomplished via the use of the JavaScript "history.forward()" hack. Now, some pages in the application require this while others do not. So the best way to handle this is to have a base-class property called DisableBackButton and set it to "true" when I want to prevent the user from going back to the previous page. And, in fact, this is what I did and it works well.

However, setting such properties can only be achieved with programmatic code. For example, to turn this property "on" for a certain page, I would have to write "DisableBackButton = true;" in the Page_Load event handler. This is fine, but it feels "dirty" and unsophisticated to me. I would much prefer to set this property in a "declarative" fashion on the actual ASPX file rather than writing code to set it. Say, wouldn't it be cool if I could just add an attribute to the @Page directive that said DisableBackButton="True"? Well, it turns out that in ASP.NET 2.0, you can do exactly this!

Well, almost. If you read all the comments in that link you'll see that it isn't all that simple, unfortunately. First, if you're using a base class like I am, you also have to set the "CodeFileBaseClass" attribute in the @Page directive. Ick. I think this is something that the compiler can determine for itself without me having to tell it explicitly. Requiring me to add it manually just means there's another possible point-of-failure and yet something else that has to be maintained. Still, it's not a too terrible price to pay for the cool declarative property setting feature I'm trying to achieve. But, that isn't the only problem. While the project will now compile, you'll still get ASP.NET validation errors in all your pages saying that "DisableBackButton" is a not a valid attribute for the @Page directive. Grrrr. To stop this message from clogging your Visual Studio errors window, you have to open up Visual Studio's XML-based schema file and add the attribute. Now this is really a problem since this schema file is used for ALL Visual Studio web projects, not just the one you're working on right now. And it also means that if you share the code with someone else, you have to tell them to go modify their schema file, too. This is completely unacceptable.

In the end I decided to go the old-fashioned route and set this property programmatically in each page that needed it. While the declarative route would have been uber-cool, there are just too many road-bumps down that path. Here's hoping Orcas (or Shamu as my wife calls it) does something to address this problem.

Tags:

Tech