Saturday, May 16, 2009

The Good Old Days

Just read an entry on Scott Hanselman's blog called 10 Awesome Things I Remember About Computers. The comments on the entry closed May 1, so I thought I'd write my own entry and sort of chain off his. Feel free to leave your own memories!

10 Awesome Things I Remember About Computers (give or take...)

  1. Using my S100 CP/M based computer with CP/M DOS
  2. Using the same computer above, typing my school reports in WordStar (how I miss WordStar)
  3. Typing up BASIC (in that day, I used A-Basic, M-Basic, GW-Basic, and in the '90s, QBasic) game listings
  4. Upgraded to an IBM XT with a 40MB HDD (that was HUGE, and the largest available consumer HDD)
  5. DOS 3.x was out, and sub-directories were new. I didn't know about them/understand them (I was 11!). Anyway, I watched my dad type a command: del *.* and it deleted some files. Pretty cool. I accidentally wrote a file in the wrong spot. I couldn't get it deleted, so I tried this (not understanding directories, they didn't exist in DOS 2.0!): C:\> del *.*. Rebooted, nothing happened. Hmmm... "DAD! My computer won't boot." He said, "What did you do to it?" To which I said, "I don't know, it just wouldn't start." He wasn't too happy. ;) Luckily, it was only my computer, so none of his stuff was on it. Whew!
  6. Playing Tie Fighter on my 486 (this is now about 5 years later, about 1992 I'd say).
  7. Using DriveSpace on Windows95 to compress my 810MB HDD to get 2.4GB space. Boy was that a bad idea!
  8. Buying my first computer from scratch and putting it together myself (1997) for $2400: PII 350MHz w/ ABIT BX6 mobo, 256MB RAM, 12GB HDD (yeah baby!) and a LS-120 FDD (that was a total waste).
  9. One year later, bought another computer for $1100: PII 400MHz w/ 512MB RAM, ABIT BX6 Rev 2 mobo, Acer 40x CD-ROM, Yamaha 24/8/4 CD-RW drive and another 12GB HDD
  10. Windows 2000. Finally, a true 32-bit OS that worked well.
  11. Windows XP—so much better!
  12. One more for good kicks (though this is recent history)—Microsoft releases their second-most horrible OS (after ME), Vista. Can't wait for Windows 7!

Though I have some recent stuff on my list, I've been using computers since I was 8 (so just shy 25 years). I'd like to hear from you, too. What are some of your memories?

Thursday, May 14, 2009

Book Review: Microformats: Empowering Your Markup for Web 2.0

Microformats: giving birth to the semantic web

I just finished reading Microformats: Empowering Your Markup for Web 2.0. I've heard of microformats here and there over the last 3 or 4 years, but until now, I haven't really looked into them. I saw this book for sale on at a price I couldn't resist. It was high about time that I read about what this semantic web thing is all about.

I thought the semantic web was simply about using the appropriate XHTML when creating your web pages and being sure that you were meeting various other standards along the way, such as WCAG. The semantic web is that and much more.

Microformats give web content designers and developers a way to use existing XHTML to markup their content so that it can be easily read by humans but also easily read by machines. This has the advantage that, obviously, humans can read it, but that the content can be aggregated by various web services.

This book is one of the best organized books I have ever read and I highly recommend reading this book for a detailed, but quick introduction to microformats. In fact, microformats are so easy to use, an introduction is all you really need to begin using them. If you need more information, just check out

This review is written using the hReview format as discussed in the book. Since this is my first attempt at using this microformat, if there's anything wrong with it, please leave a comment. In any event, I give this book 5 stars out of 5.

FireFox 3.0.10 and IE8

Time for another, though much shorter, rant.

My Headaches with Firefox 3

I've had it with Firefox. I was late to jump on the Firefox bandwagon. I jumped on around 2.08 or so and upgraded all the way up to 3.0.10 as recently as two weeks ago. I upgrade Firefox as soon as I can, though I admit, I waited a bit to upgrade to Firefox 3; and it seems for good reason. At first, I was very impressed with Firefox 3. It provided better tab scrolling and seemed much more stable than Firefox 2. That is, until I "upgraded" to Firefox 3.0.9. Then everything came to a screeching halt.

You have to understand that I'm a power browser user. Some would say I'm just crazy. But I have so many things going on that I have a ton of tabs open (at current count, about 344) so that I can quickly get back to whatever else I was doing/researching within the past few weeks (ok, months). As Firefox has continued to release updates, its memory footprint continues to grow, rivaling Internet Explorer with it's famed JavaScript memory leak. At first, Firefox was crashing because I actually had 360+ tabs open and during loading all of the tabs, the process size reached 1.5GB, which is apparently the maximum process size on Windows even though each process has 3GB of memory space (go figure?). Ok, so that's my fault. But since then, I've closed unneeded tabs and had gotten as low as 320. My Firefox process size was around 600MB - 700MB. However, I experienced browser crashes 2 or 3 times a day.

Yay, Firefox came out with an update, 3.0.10. So I upgraded to that seeing that they fixed (yet another) memory corruption issue (how many of those things do they have??). I hoped that it would solve my problem. Nope. Firefox routinely continues to crash at least once a day, if not twice. I tried things like turning off Google Desktop Search (which is a huge memory waster anyway and should be uninstalled from every computer on earth because it puts its hooks into every single program that's opened on your computer). But to no avail. I've done some searching on this issue and have found that many are experiencing the same problem (I hear it can be much worse on Linux). This leads me into my next segment.

Enter Internet Explorer 8

OK, so Microsoft copies folks, but so far as I can tell, IE8 was in the works before Google Chrome hit (though, I can't be absolutely sure about this). Whatever the case may be, Chrome and IE8 use the same "memory model". Each browser tab is a separate process. This has advantages, and disadvantages. However, today, the disadvantages are smaller than they used to be.

When I first heard that Chrome used separate processes for tabs, I was not impressed. Sure, you have tab isolation, but at what price? Processes are heavy in terms of memory and creation time. However, what I didn't realize (and I was very surprised I had missed this fact!) was that in Windows 2000, a new type of process was created—called a job process. A job process is a new process, but it is related to some parent process. It's almost like a Unix fork, but not quite. In any event, these processes, while providing isolation, don't have as steep memory requirements or creation time. IE8 makes heavy use of the job process (as I'm sure Chrome does).

So I started playing around with IE8 last week. I must say I'm pretty impressed. It's stable, and if a tab crashes, it will attempt to reopen the tab. With IE8, you don't have to explicitly save your browsing session, just close the browser and all your tabs are remembered. Personally, I don't care for that. In fact, that's one thing I'm going to miss from Firefox, the Session Manager plug-in. I think one could be written for IE8, but I haven't seen one yet and I don't have time to write one. Anyway, IE8 only lets you save the last browsing session (since it's explicitly saved). You can't save multiple browsing sessions to open one up again at some later point. Too bad. That's a real short-sight. Another plus about IE8 is that it renders much better than it ever used to. I still have to put it through its paces though (and check out how much of ACID2 it passes). Overall, I'm very pleased with it and can't wait to ditch Firefox.

An Open Call (and Mind) to Mozilla

If you're going to release patches for a browser, especially a build update (e.g. 3.0.xxxx), you better do thorough regression testing to make sure you don't break the browser. That's what happened between 3.0.8 and 3.0.9. It just completely broke. 3.0.10 is better, but it's still broken. I think Firefox needs to get back to its roots as a browser: a low memory footprint, extensibility, and stability, and frankly, more cool features that just kill the browser market (tabbing was definitely a killer feature). I'm going to keep my eye on Firefox, but for now, I need stability, speed, and something that just plain works.


To the Microsoft haters and open source lovers and the passionate (or even fanatic) people out there: this post is meant as an open honest discussion of my findings in regards to the latest Firefox 3.0.10 browser, and not about the quality of FOSS software, in general. This is particular to Firefox. Also, note that I did not say that I hate Firefox, only that it has become unusable to me. I'm disappointed with it. I hope that the next major (or minor, 3.5, is it?) release will resolve many of the issues I and others have been having. I'm willing to give Firefox another shot, but until I can actually use it to work (without it freezing up every 30 seconds for 10 seconds at a time), I will have to stick with IE8.

Wednesday, May 13, 2009

ATI Catalyst 9.4 Is No Good for Business

Today's post is a bit of a rant. Also, it took me so long to write, that I didn't want to spend much more time formatting it. So, if it looks a bit messy, I'll try to get back and clean it up a bit later. If you've been reading my blog, you know that I'm in the process of a network deployment. Recently, we qualified for a (basically, free) computer form UPS. Unfortunately, all they had to offer were machines with AMD processors and chipsets. If you haven't guessed it by now, I'm an Intel guy. And now, I know why.

The Problem with AMD

Apparently, AMD doesn't want to make it easy for (particularly small) business to install their software. This is evidenced by the fact that they have completely non-standard Windows installers. They probably use InstallShield for some of their software (which, arguably, makes horrible installers, in my opinion, after having looked at just a few InstallShield MSIs with ORCA from Microsoft). However, their Catalyst Display Driver package uses something called Monet, which until last week, I've never heard of before. And let me say that I hope I never hear of it again, as it caused me nothing but trouble this week.

The idea is that I'm using the Microsoft Deployment Toolkit 2008 to deploy my clients. This driver comes with software that I would like to have installed on the machine, so I decided to go ahead and install the whole package (minus a few items that I really don't need). But it turned out to be a real chore. To start, there is the lack of documentation. Here's the help documentation from Setup.exe and InstallManagerApp.exe, which are responsible for the GUI installation:

Figure 1. Setup.exe/InstalManagerApp.exe command-line switches

Well, I'm confused already. But here's what happens. If you use the slash (/) switches, you can get an unattended GUI install. What do I mean? What I mean is, if you use the right combination of switches, you can achieve an unattended install that still shows a GUI. Ok, that's not so bad. Let's step through these switches a bit. By specifying /UNATTENDED_INSTALL, you would think that would be all I have to do to achieve my goal. Well, you would be wrong. Even when using this switch, the installer stops on the very first wizard page to ask what language you want. Why do I need to choose a language if I'm doing an unattended install? (More precisely, if no language is specified on the command line, English ought to be the default and installation should proceed unattended.) So, in order to get around this, we need to pass the /FORCE_HIDE_FIRST_RUN switch, which does just that—it skips the language selection step. So you run the new command and now the wizard appears to stop in its tracks on the last page and just sits there. That's because even during an "unattended" install, the setup program expects you to click the Finish button. Stupid. So we need to pass the /FORCE_CLOSE_WHEN_DONE switch. Just to be extra cautious, I pass the /AUTOACCEPT_ALL switch, which automatically accepts all EULAs (which according to AMD is supposed to be unpublished, hehe). I also pass the /ON_REBOOT_MESSAGE:NO switch to make sure the installer doesn't tell the operating system to reboot, a big no-no when using the Microsoft Deployment Toolkit. So our final command looks like this: setup.exe /UNATTENDED_INSTALL /FORCE_HIDE_FIRST_RUN /FORCE_CLOSE_WHEN_DONE /AUTOACCEPT_ALL /ON_REBOOT_MESSAGE:NO.

Well now there are three problems. In older releases of the Catalyst Display Driver package, HydraVision was installed with everything else and the Windows Vista Experience Index score was also updated so that the Aero user interface would be enabled. This no longer happens in the 9.4 release of the package. It turns out they have a few errors in their new install routine. The lack of installation of HydraVision (a multi-desktop or even desktop spitting application) can be gotten around by replacing /UNATTENDED_INSTALL with /UNATTENDED_INSTALL:"\Packaes\Apps\CCC\HydraVision-Full\ccc-hv-full.msi;<driver_folder>\Packgaes".

Enabling the Aero user interface (in an unattended manner) is also similarly easy. In previous releases, there was an MSI called EnableAero.msi. At first, I was including this in the installation, but I soon realized that all the MSI was doing is running the following command: C:\Windows\System32\WinSat features C:\Windows\System32\WinSAT formal. So, number one, the EnableAero.msi installer is completely unnecessary. Secondly, the way they are running the command is also unnecessary. Instead, there is a command line switch that enables you to only update the graphics and restart the Display Window Manager: C:\Windows\System32\WinSAT dwm.

Now we have achieved the following: an unattended installation (though, still showing a GUI) that installs HydraVision and enables the Aero user interface in Vista. But what if we want a truly silent install? Is this possible? Yes, it is. There are two ways of doing this.

First, there is a file called ATISetup.exe in the Bin{64} folder of the Catalyst Display Driver package. If you run this file without any command line options, you will see the following command line options (there are more, but for brevity, which it's already too late for, I'll omit the unimportant ones):

Performs a silent install
-uninstall [all]
Performs a silent uninstall ([all] uninstalls all hidden packages)
-output screen [detail]
Screen outputs basic information to the console while including detail will output more verbose information. Useful for debugging.
-h #### -v #### -b ## -j ###[ddc]
Sets the horizontal resolution, vertical resolution, color depth (or bits per pixel (a/k/a bits per pel)), and vertical refresh rate. Using DDC for the vertical refresh rate tells the driver to get the information from the monitor via DDC or EDID, if the monitor supports it. Most LCDs in use do, as do most CRTs that are left in use. Also, be aware that the documentation for these switches is incorrect: -b only takes 2 digits, and -j can take 3. They have this reversed on their display of the help options (and thus, you can specify 120Hz refresh rate for your CRT if it supports it).

Here's the kicker: you try to run the following command: ATISetup -install -h 1280 -v 1024 -b 32 -j ddc, and it doesn't work. The install occurs, but again, HydraVision is not installed, and when you reboot, the display defaults to a resolution of 800 x 600 @ 32-bits. Again, the problem with HydraVision can be fixed and the installer used, but not the screen resolution. For me, this is back to square one. Why did I go through all of this? To save you the trouble—and to pick on AMD.

So how do I get the driver to install, with all the companion applications, and have the screen resolution set to the desired size and enable the Aero user interface? It comes down to two lowly batch files (or in Vista world, a .cmd file).

First, we need to write the batch (or command) file that will install the driver and companion applications. Apparently, what really happens when you run the Setup.exe file in the root driver package with the -install switch, it just passes it onto the .\Bin{64}\ATISetup.exe installer. If you use the slash (/) switches, then the GUI installer is used (e.g. the GUI installer is shown, but is unattended if you use the switches I outlined above).

Here's the install batch file (I named it install.cmd):

NOTE: You may freely copy and use the batch file source code contained in Figures 2 and 3 of this blog entry without needing to give attribution. I hope someone may find it useful.

Figure 2. Install.cmd source code.

This will (more or less) silently install the driver and all accompanying software that you chose. (NOTE: I removed the following folders from the \Packages\Apps directory: CatalystRegistration (a registration nag-ware) and Blizzard (an Internet shortcut to download a trial version of the game World of Warcraft.) Once this batch file has been executed, you need to restart the computer. (NOTE: if you are using the Microsoft Deployment Toolkit to deploy your operating system, you must tell MDT that the application requires a reboot and let MDT reboot the computer or you will mess up the automated deployment.)

Once the computer has rebooted, your video resolution will be 800x600 @ 32-bit. Unfortunately, Windows still does not have a way to "script" the video resolution through an API. No Windows Script interface, no WMI, no PowerShell. So we are left to "hacking" the Windows registry. Please note that the batch file below has only been tested on Windows Vista. For any other operating system, verify the keys that need to be set (perhaps the resolution switches only work for Windows XP and below?).

Figure 3. SetVideoRes.cmd source code.

The > nul makes the batch script not output anything to the screen since REG.exe and WinSAT probably use stdout or stderr bypassing the @ECHO OFF command in the batch file. I called this batch file SetVideoRes.cmd. It first uses REG QUERY to determine the GUID of the video card and stores it in a variable. Then it creates several registry entries in the registry pertaining to the display resolution. Finally, it runs the Windows System Assessment Tool to enable the Aero user interface. Once this script has run, the computer needs to be rebooted again so that Windows picks up the new display resolution settings. And finally, there you have it, a completely unattended installation of the Catalyst Display Driver package. Too much work. For Intel, this would have been as easy as calling setup /s /v/qn if it's an InstallShield installer or <driver_installer>.msi /qn /norestart if it were an actual Windows MSI.

I hope this helps someone out there. It took me a whole week, installing the operating system about 25 times to figure this all out. What a pain! I did contact AMD Customer Care, but they basically told me that they provided limited unattended install support and that they only supported unattended installs on Windows Vista for particular ATi products. Poor business practice, in my opinion. Not everyone is a Hewlett-Packard or a Microsoft.

One final note, I just finished a book on microformats on the web. This blog entry is long enough, so suffice it to say, I've tried my hand at a few hCard entries in this post. Not every company mentioned has an hCard entry. I may go back and update this entry later. I mention this only for those who may be looking. I'm going to write more about that in another post.

That's it for now. Sorry it was so long. Take care.


  • 2009-05-14 - Fixed code in SetVideoRes.cmd in figure 3: Added quotes around the registry key because the keyname has a space. Also removed the warning about testing on Vista. I have tested the code and it does work. However, it should go without saying that anything you take off the Internet should be tested in a secure, isolated environment before being put into production. Also fixed my SetVideoRes.cmd batch file to call C:\Windows\System32\WinSAT formal to make sure that the experience score actually gets updated in the System display window.

Saturday, May 9, 2009

It's been a while...

Hello everyone. Well, don't say I didn't give you fair warning about the frequency of posting on this blog.

Anyway, call it bad timing, but I started this blog about 8 weeks before the end of the semester. Four weeks later, of course, all the professors are cramming assignments down our throat trying to get in as much as they can because they realized that the semester is nearly over! To their credit, this semester was extremely compressed, partly due to the way the calendar fell this year and partly due to other reasons which I'm not going to expound upon at this time.

So the last five weeks were really busy and this was my first week back at work in a while as well. In addition, I've been meaning to continue my series of blog posts on the network infrastructure upgrade at work, but issues with VMware have kept me from making any progress on that front as well. I think I have those issues worked out now so that I can document the process.

Coming up...

I don't know how long it's going to take me before I post my next entry (hopefully no longer than a week) nor how long it may be in between posts, but, I hope to keep them coming. Here's what I plan on writing about in the near-term.

Installation of Windows 2003 SBS R2 Premium with SP2

I plan on detailing my implementation of Windows SBS 2003 Premium R2. Why SBS 2003? Well, a couple of reasons:

  • This is my first ever ground-up network infrastructure deployment. This means that it's taking me a lot longer than it would for an experienced network engineer, especially since I'm figuring this stuff out all for myself. However, I have plenty of networking experience and feel confident in my ability. But if you should see anything that I'm doing wrong or feel I should do differently, I would love to hear from you.
  • I started with Windows 2003 SBS R2 and have it installed in a testing environment right now. I can't very well just throw everything away to start over with Windows 2008 SBS, even though I would love to. Luckily, my hardware is 64-bit (Pentium D).
  • I'm writing this blog on a 64-bit Toshiba laptop, but dumb Toshiba only installs 32-bit Vista OSes on their machines (as of late 2008). What gives?? Don't get me wrong, I love this laptop, I just wish I would have had a choice. In addition, the processor in this laptop does not have Intel's VMI, so I can't run a 64-bit guest OS on a 32-bit host. You know how it is, you load up a machine with all your apps (Visual Studio, Office, every other development/networking tool on the planet) and it would take you months to get your machine back to the way it is now if you have to reload (the only way to "upgrade" to a 64-bit OS).
So, I'm stuck with Windows SBS 2003. However, in a later series of posts, I may detail the installation of Windows 2008 SBS when/if I reload. Having said that, at this point, I think I'm going to wait for Windows 7 to come out to upgrade to that. So, then I might as well detail Windows 7 SBS. But that's at least a year out, and by then, I may not be doing anything regarding networking because I'm more of a coder.

Installing/Using Microsoft Deployment Toolkit 2008 (or 2010)

Once I detail my implementation of the core installation of Windows 2003 SBS, I'm going to delve into using the MDT 2008 (formerly BDD 2007) or MDT 2010, if it's out by then, for deploying Microsoft Windows Vista with SP1.

So that's it in a nutshell. That's what you can look forward to over the next few posts.