Sunday, August 29, 2004
So last night was our last night in Shanghai, so we decided to have a bit of a night on the town, Asian style.
We went to this cool restaurant called Gong De Lin which serves vegetarian food with a twist - the twist being that all of the dishes pretend to be meat. So there is tofu pretending to be chicken (they somehow give it a similar taste and texture), there was tofu skin pretending (very successfully) to be chicken skin etc. There was also this sliced thing that tasted just like duck, but none of us could tell what the heck it was made from.
Being a guy out on the town with 4 girls, the inevitable then happened. No no, the other inevitable - we all ended up at karaoke. One of the girls had found this karaoke box place called "Big Echo" on a main shopping street. We still needed to lube up a little, and courage came in the form of a liter bottle of Jose Cuervo. One of the girls baled, so the remaining 4 of us then finished off the tequila and another half-bottle, while we killed a stream of karaoke classics - We Will Rock You (turns out we only knew the chorus), Wake me up before you go-go (nobody knew the timing) and various others.
I knew it was time to go home when I started with the lounge singer thing, translating the words into Japanese (horribly no doubt) and killing the songs that way. Thankfully we'd all had the same to drink, so all was forgiven in the morning.
What I learned is that a bottle-and-a-half of tequila is a lot, and today I've been getting episodes where parts of my field of vision start washing back and forth like ocean waves. In the words of The Streets, "In future I need to abstain".
Yeah right.
We went to this cool restaurant called Gong De Lin which serves vegetarian food with a twist - the twist being that all of the dishes pretend to be meat. So there is tofu pretending to be chicken (they somehow give it a similar taste and texture), there was tofu skin pretending (very successfully) to be chicken skin etc. There was also this sliced thing that tasted just like duck, but none of us could tell what the heck it was made from.
Being a guy out on the town with 4 girls, the inevitable then happened. No no, the other inevitable - we all ended up at karaoke. One of the girls had found this karaoke box place called "Big Echo" on a main shopping street. We still needed to lube up a little, and courage came in the form of a liter bottle of Jose Cuervo. One of the girls baled, so the remaining 4 of us then finished off the tequila and another half-bottle, while we killed a stream of karaoke classics - We Will Rock You (turns out we only knew the chorus), Wake me up before you go-go (nobody knew the timing) and various others.
I knew it was time to go home when I started with the lounge singer thing, translating the words into Japanese (horribly no doubt) and killing the songs that way. Thankfully we'd all had the same to drink, so all was forgiven in the morning.
What I learned is that a bottle-and-a-half of tequila is a lot, and today I've been getting episodes where parts of my field of vision start washing back and forth like ocean waves. In the words of The Streets, "In future I need to abstain".
Yeah right.
Thursday, August 26, 2004
So the past week has been fun...
I spent a couple of days in Hong Kong, and got to hook up with my sister, who has been living there for several years. Last time I was there was in 1995 before it was handed back, and I couldn't see much of a difference this time - the place still felt much the same.
After Hong Kong we went to Xiamen in Fujian Province. Dell has its China manufacturing there, as well as the local telesales teams. Xiamen was a really interesting mix of modern buildings and road chaos. We would be in a taxi driving along a 6 lane highway and suddenly there'd be some guy crossing the road, or someone stopped on a bicycle. The lane markings seem to only be an advisory there, as most of the cab drivers would drive between lanes as often as in them.
I'm now in Shanghai. We've been working the past two days, and we get two days off from tomorrow (because we worked through the last weekend). Shanghai is interesting compared to Xiamen, if only because you could arrive here and not be able to tell it apart from any major Western city (except for all the bicycles here).
Shanghai is also surprising for all the skyscrapers here. There are the landmark buildings you would see on postcards, but there are also lots of large hotels, business and apartment buildings too.
Another surprise was that all the hotels I've stayed at since I arrived all had broadband access - even the one in Xiamen. And while the government supposedly blocks access to certain sites, its not really affected any of the sites I would want to visit. For example, I am able to access Blogger with no problem, which quite surprised me.
I spent a couple of days in Hong Kong, and got to hook up with my sister, who has been living there for several years. Last time I was there was in 1995 before it was handed back, and I couldn't see much of a difference this time - the place still felt much the same.
After Hong Kong we went to Xiamen in Fujian Province. Dell has its China manufacturing there, as well as the local telesales teams. Xiamen was a really interesting mix of modern buildings and road chaos. We would be in a taxi driving along a 6 lane highway and suddenly there'd be some guy crossing the road, or someone stopped on a bicycle. The lane markings seem to only be an advisory there, as most of the cab drivers would drive between lanes as often as in them.
I'm now in Shanghai. We've been working the past two days, and we get two days off from tomorrow (because we worked through the last weekend). Shanghai is interesting compared to Xiamen, if only because you could arrive here and not be able to tell it apart from any major Western city (except for all the bicycles here).
Shanghai is also surprising for all the skyscrapers here. There are the landmark buildings you would see on postcards, but there are also lots of large hotels, business and apartment buildings too.
Another surprise was that all the hotels I've stayed at since I arrived all had broadband access - even the one in Xiamen. And while the government supposedly blocks access to certain sites, its not really affected any of the sites I would want to visit. For example, I am able to access Blogger with no problem, which quite surprised me.
Wednesday, August 18, 2004
I've made a change to the iComic page. Its moved to a new location and the plugins page is now managed via Blogger.
New iComic location
What this latter change means is that I can nominate editors to add and maintain the list of plugins.
This is especially important now, as the iComic forum just disappeared prematurely (I wasn't expecting that until September).
Being a Blogger page, you can also post comments on plugins. And there is a post where you can request other plugins. Posting to that message is a stop-gap until I can get my own forum set up.
New iComic location
What this latter change means is that I can nominate editors to add and maintain the list of plugins.
This is especially important now, as the iComic forum just disappeared prematurely (I wasn't expecting that until September).
Being a Blogger page, you can also post comments on plugins. And there is a post where you can request other plugins. Posting to that message is a stop-gap until I can get my own forum set up.
Friday, August 13, 2004
Went to Radio Shack this afternoon and got the 1/8" to 3 RCA cable I needed to hook the analog sound output from the Audigy 2 over to my receiver's 7.1 direct inputs. It took a bit of faffing about to get the right channels in the right ports but the Creative software helped as it let me send test tones to each channel.
I told Windows I have 7.1 speakers, but it seems Doom 3 doesn't like that. When I told Windows it was only 5.1, all was good.
I also switched on 4x FSAA (full scene anti-aliasing), and am still getting 40fps at 1280x720, which is good enough.
Its almost too much now, with the surround sound working properly and the graphics filling up your field of view (it is going to a 105" screen after all).
Maybe I'm just too much of a lightweight, but I still jump out of the seat when an unseen monster jumps out at me, and creeping around in the dark makes my skin crawl. Brrrr
I told Windows I have 7.1 speakers, but it seems Doom 3 doesn't like that. When I told Windows it was only 5.1, all was good.
I also switched on 4x FSAA (full scene anti-aliasing), and am still getting 40fps at 1280x720, which is good enough.
Its almost too much now, with the surround sound working properly and the graphics filling up your field of view (it is going to a 105" screen after all).
Maybe I'm just too much of a lightweight, but I still jump out of the seat when an unseen monster jumps out at me, and creeping around in the dark makes my skin crawl. Brrrr
Thursday, August 12, 2004
So I received the Leadtek 6800GT.
Started by connecting the PC up to a CRT monitor (so I could see what I was doing!)... took out the 9800 Pro, dropped in the Leadtek, installed the drivers. So far so good.
Then I told XP I wanted 1280x720... Squishy on the CRT, but ok. Then I shut down and connected up to the projector and fired her up... and "it just worked". I couldn't believe it.
I then went into the Doom CFG file, set the res for widescreen, fired it and and "it just worked" too. Played enough Doom 3 for half and hour... got a nasty shock a few times... died, of course.
So I went back to the menu to recheck the settings. Seemed I'd forgotted the 4x FSAA... no biggy - it still looked awesome.
Then I noticed the surround sound was off, and it wouldn't turn on. So the next project appears to be to monkey around with getting the necessary SPDIF adapter to connect the PC's Audigy 2 ZS up to my receiver...
I mean, there's no point playing Doom 3 in stereo when you be in 7.1 surround :p
Started by connecting the PC up to a CRT monitor (so I could see what I was doing!)... took out the 9800 Pro, dropped in the Leadtek, installed the drivers. So far so good.
Then I told XP I wanted 1280x720... Squishy on the CRT, but ok. Then I shut down and connected up to the projector and fired her up... and "it just worked". I couldn't believe it.
I then went into the Doom CFG file, set the res for widescreen, fired it and and "it just worked" too. Played enough Doom 3 for half and hour... got a nasty shock a few times... died, of course.
So I went back to the menu to recheck the settings. Seemed I'd forgotted the 4x FSAA... no biggy - it still looked awesome.
Then I noticed the surround sound was off, and it wouldn't turn on. So the next project appears to be to monkey around with getting the necessary SPDIF adapter to connect the PC's Audigy 2 ZS up to my receiver...
I mean, there's no point playing Doom 3 in stereo when you be in 7.1 surround :p
The 6800 GT is waiting patiently at home, enticing me to go home early. Sadly Thursdays are when I have my Chinese class (I've been learning Mandarin for a couple of months now), so by the time I get out of here and get home it'll be late and my brain will be fried.
不好 (it sucks)
不好 (it sucks)
Wednesday, August 11, 2004
Media room PC: Into the final stretch
Things to a turn for the better today. I found another company that had the Leadtek 6800 GT in stock - something almost unheard of as it turns out.
Not wanting to be a total git, I called Atacom and asked if my order had shipped. No. Any idea it will ship? "We should get a shipment in by the end of this week. Or next week". Er... Then he asks if I can wait another week? Well, no, I can't - I'll be away on business, so I'd like to cancel my order.
I can't help feeling like they tried to bait and switch me by saying they had stock, then trying to get to upgrade to the Ultra instead... so I don't feel too sorry for them.
Anyway, I placed my order at 4pm and it will be here before 10:30 tomorrow. After all the fun and games it took to find it, I didn't want to risk having it go through Fedex system for a few days and getting here in poor shape. Besides, its not a cheap card, so the shipping cost didn't seem such a big deal.
Not wanting to be a total git, I called Atacom and asked if my order had shipped. No. Any idea it will ship? "We should get a shipment in by the end of this week. Or next week". Er... Then he asks if I can wait another week? Well, no, I can't - I'll be away on business, so I'd like to cancel my order.
I can't help feeling like they tried to bait and switch me by saying they had stock, then trying to get to upgrade to the Ultra instead... so I don't feel too sorry for them.
Anyway, I placed my order at 4pm and it will be here before 10:30 tomorrow. After all the fun and games it took to find it, I didn't want to risk having it go through Fedex system for a few days and getting here in poor shape. Besides, its not a cheap card, so the shipping cost didn't seem such a big deal.
<optimism type="blind">
... and I'll drop it into my PC, connect it to the projector, and it will work first time
</optimism>Tuesday, August 10, 2004
Media room PC: The rollercoaster ride continues
So today I went down to Frys (again) with Rich and Fraize and picked up a shiny new 250GB SATA drive to replace the last of my old IDE drives. Took the old IDE drives out, put the SATA drive in, rebooted, worked first time. Yay!
Today's annoyance was calling Atacom to find out where my GeForce 6800 GT was at. When I placed the order Sunday it was In Stock (thats why I ordered it from them). When I called they told me they were waiting for stock. "When are you expecting them in?" asks I. "I have no idea". Nice. I haven't cancelled yet - I'll wait until NewEgg has stock and see if I can catch it that way.
What bugged me was that they guy I spoke to said "we have 5 of the Ultra cards in stock...". Yeah... and they're $250 more expensive. There's something about paying $700 for a graphics card that even I can't stomach.
In any case, at this rate I'm sure I'll end up receiving the card the day before my China trip (which is only a week away!) and not have a chance to play Doom 3 on it.
Other fun facts: it takes over 3 hours to format a 250GB drive :o
Today's annoyance was calling Atacom to find out where my GeForce 6800 GT was at. When I placed the order Sunday it was In Stock (thats why I ordered it from them). When I called they told me they were waiting for stock. "When are you expecting them in?" asks I. "I have no idea". Nice. I haven't cancelled yet - I'll wait until NewEgg has stock and see if I can catch it that way.
What bugged me was that they guy I spoke to said "we have 5 of the Ultra cards in stock...". Yeah... and they're $250 more expensive. There's something about paying $700 for a graphics card that even I can't stomach.
In any case, at this rate I'm sure I'll end up receiving the card the day before my China trip (which is only a week away!) and not have a chance to play Doom 3 on it.
Other fun facts: it takes over 3 hours to format a 250GB drive :o
Media room PC: Episode III - The Revenge of the IDE
Last night I was in Frys to pick up a second SATA drive to replace the working one...
(Just to recap, given that I can only have two SATA drives and two IDE drives, and one of the IDE drives is my CDROM, and my IDE cable can't make it from my working HD to the CDROM as master-and-slave, both of my IDE hard drives are now useless including the one that still works...)
... so I picked up the drive - 7200RPM, 200GB... that should do it. Then it occured to me that I had a 160GB USB hard drive that I'm not doing much with. Why not use that as my second drive? I could temporarily attach my working drive to the IDE cable (disconnecting the CD-ROM), copy my files over, then reconnect the CD-ROM.
Except when I did that Windows wouldn't boot.
I've also decided to build a Firewire dual-drive enclosure for the old IDE drives. I found a bunch at http://www.cooldrives.com/firen.html.
Will my system be subsumed by the Dark Side, or will good triumph? Stay tuned!
(Just to recap, given that I can only have two SATA drives and two IDE drives, and one of the IDE drives is my CDROM, and my IDE cable can't make it from my working HD to the CDROM as master-and-slave, both of my IDE hard drives are now useless including the one that still works...)
... so I picked up the drive - 7200RPM, 200GB... that should do it. Then it occured to me that I had a 160GB USB hard drive that I'm not doing much with. Why not use that as my second drive? I could temporarily attach my working drive to the IDE cable (disconnecting the CD-ROM), copy my files over, then reconnect the CD-ROM.
Except when I did that Windows wouldn't boot.
INVALID SYSTEM DISK. Nice. So today I'm going back to Frys. That place is becoming like a second home.I've also decided to build a Firewire dual-drive enclosure for the old IDE drives. I found a bunch at http://www.cooldrives.com/firen.html.
Will my system be subsumed by the Dark Side, or will good triumph? Stay tuned!
Monday, August 09, 2004
So I'm back in business... sort of.
As the motherboard in my PC (an ABIT IC7-Max3) supports Serial ATA, I thought it might be a good idea to get a SATA hard disk to replace the one that was failing.
I went to Frys and found one that was 36GB (good enough for a boot disk) at 10,000RPM... which means faster boot times, and better performance all round (Windows apps, .NET runtime and swap disk will all be on the speedy drive, and my work files on the other (I always run with two drives so my boot drive doesn't get slowed down with lots of changeable apps and documents)
Anyhoo, I got the drive in, and used opportunity to tidy up inside the PC... I have two fans on the back but one was off because I didn't have a Molex connector close enough, so I reworked all the power routing to the drives to free a connector up close to the fan. One of the fans didn't have its sensor cable connected, so I managed to get that sorted out too, and I made sure I would have the two free Molex connectors and enough space next to the AGP slot that I would need for the 6800GT (as you can see below, its a bit of a porker)

So I got it done, and connected the new drive up. The manual said I'd need to enable SATA in the bios, so I powered up and did that... and told it that the the SATA drive was first in the boot sequence. I then fired up the machine and went into the XP setup. XP didn't seem to care about my boot order. It still saw my broken drive first, and locked up as before. So disabled that drive by pulling its power and IDE cables out). After some more messing about in the BIOS I get XP to begin the install and I go off to do some chores.
When I come back I have a black screen. Wierd. So I reboot. Black screen. So I go back in to the XP install and it tells me my XP install is "damaged". So I run it all again. It gets all the to the end (thank god the machine is so fast that XP installs in 15 minutes) then reboots normally... then black screen. It seems there is an incompability between the boot disk (IDE) and the drive where Windows is (SATA).
The solution would seem to be to make it see the SATA drive first, but there are only two ways to do that in the BIOS screens: run in "combined" mode, where my SATA is treated as being on IDE-1, or run only SATA (so no second drive, but worse, no CD-ROM). So I set combined mode. Turns out this disables the first IDE controller, so I lose my other IDE drive. However, when I installed XP now, it all works fine.
So after 7 hours of futzing with it (getting all the drivers I needed off the ABIT site), I got Doom 3 up and running at 11pm or so. But only on a VGA monitor. I won't hook it up to the projector until the 6800GT gets here.
Now to finish up, I have to buy a second SATA drive, hook my old still-working IDE drive to IDE Controller 2 (so no CD-ROM), copy all my files off of there onto the new SATA drive, then take the old IDE drive out of the machine entirely so I can reconnect the CD-ROM back up.
I'm really glad I built my own PC -- I'm not sure I could have done all this with a Dell because the BIOS is more limited. Plus it made me get on and learn how it all works (last time I knew was with the PC/AT and things have moved on since then).
And seeing Doom 3 running on there made it all worth it. What a gorgeous looking game.
As the motherboard in my PC (an ABIT IC7-Max3) supports Serial ATA, I thought it might be a good idea to get a SATA hard disk to replace the one that was failing.
I went to Frys and found one that was 36GB (good enough for a boot disk) at 10,000RPM... which means faster boot times, and better performance all round (Windows apps, .NET runtime and swap disk will all be on the speedy drive, and my work files on the other (I always run with two drives so my boot drive doesn't get slowed down with lots of changeable apps and documents)
Anyhoo, I got the drive in, and used opportunity to tidy up inside the PC... I have two fans on the back but one was off because I didn't have a Molex connector close enough, so I reworked all the power routing to the drives to free a connector up close to the fan. One of the fans didn't have its sensor cable connected, so I managed to get that sorted out too, and I made sure I would have the two free Molex connectors and enough space next to the AGP slot that I would need for the 6800GT (as you can see below, its a bit of a porker)

So I got it done, and connected the new drive up. The manual said I'd need to enable SATA in the bios, so I powered up and did that... and told it that the the SATA drive was first in the boot sequence. I then fired up the machine and went into the XP setup. XP didn't seem to care about my boot order. It still saw my broken drive first, and locked up as before. So disabled that drive by pulling its power and IDE cables out). After some more messing about in the BIOS I get XP to begin the install and I go off to do some chores.
When I come back I have a black screen. Wierd. So I reboot. Black screen. So I go back in to the XP install and it tells me my XP install is "damaged". So I run it all again. It gets all the to the end (thank god the machine is so fast that XP installs in 15 minutes) then reboots normally... then black screen. It seems there is an incompability between the boot disk (IDE) and the drive where Windows is (SATA).
The solution would seem to be to make it see the SATA drive first, but there are only two ways to do that in the BIOS screens: run in "combined" mode, where my SATA is treated as being on IDE-1, or run only SATA (so no second drive, but worse, no CD-ROM). So I set combined mode. Turns out this disables the first IDE controller, so I lose my other IDE drive. However, when I installed XP now, it all works fine.
So after 7 hours of futzing with it (getting all the drivers I needed off the ABIT site), I got Doom 3 up and running at 11pm or so. But only on a VGA monitor. I won't hook it up to the projector until the 6800GT gets here.
Now to finish up, I have to buy a second SATA drive, hook my old still-working IDE drive to IDE Controller 2 (so no CD-ROM), copy all my files off of there onto the new SATA drive, then take the old IDE drive out of the machine entirely so I can reconnect the CD-ROM back up.
I'm really glad I built my own PC -- I'm not sure I could have done all this with a Dell because the BIOS is more limited. Plus it made me get on and learn how it all works (last time I knew was with the PC/AT and things have moved on since then).
And seeing Doom 3 running on there made it all worth it. What a gorgeous looking game.
Saturday, August 07, 2004
How my Doom 3 hell began before the game arrived
So last night I decided to get my PC working properly before Doom 3 arrived (I ordered it on Amazon a year ago and forgot I'd done so)...
My main system at home is my PowerMac, but I have a ninja PC I use for .NET work (such as RUnit) and for playing the occasional game. The system is actually in my media room hooked up via a DVI cable to a projector that goes to a 105" screen. The system is also hooked up to a 180W per channel 7.1 THX surround system. If there was ever a place to play Doom 3 it would be that room.
The problem is that the ATI 9800 Pro video I have in there never liked talking to the projector over DVI, and I could never get it working over VGA. The DVI thing can be made to work using a piece of software called Powerstrip, but its very fiddly to get it working, as I have to use component outputs to reconfigure the system (so I can see what I'm doing on screen), then flip it to DVI and pray to the video gods. And if I screw it up, I get nothing on screen, and I have to switch the machine off (ever tried rebooting a system with no display?)
And why do I need to keep doing this? When I do .NET development, I still use my PowerMac, and then I use Remote Desktop to access the PC. I use PCs 12 hours a day, 5 days a week, so sitting down at one in my spare time doesn't interest me, but I get a perverse pleasure from using one from my Mac. Problem is that accessing the PC that way seems to zonk the video settings so I can't use DVI on the PC anymore. Thank god I don't play games on the PC too often (Xbox to the rescue!)
So, after several failed attempts and powerswitch shutdowns, the system wouldn't boot, telling me a critical system file was corrupted. The message suggested I use Repair in the XP setup, but when I did that it asked me which install to repair. I choice C:\Windows and the system froze. Damn!
So I tried to reinstall Windows. It got to the part where the setup says "Searching for previous versions of Windows" and froze.
I suspect either the Windows install is so hosed that the setup gets confused and loops... or the drive has a circular cross-link that takes it down a bottomless rabbit hole... like it cross-linked the drive into having a directory that has itself as a child... or else the drive has simply failed.
This third option seems the least likely given that it must be partly booting in order to tell me that Windows is buggered... In any case it looks like I'll need to buy a new hard drive if only so I can reinstall Windows and reboot the system.
Those that know me won't be surprised that I took this as a perfect opportunity to also solve the ATI 9800 / projector mismatch problem but ordering a new graphics card. Spending $450 on a NVidia 6800 GT (I'm convinced the problem is with ATIs drivers as much as anything else) seemed like a better bet than replacing a $5000 projector (and far less likely to compromise my marriage).
So now I'm without a system until I can get a new hard disk. The video card should be here by mid-week... And just to make sure I keep my eye on the prize, Doom 3 arrived in the mail this afternoon...
I'll be posting in a few days as to whether any of this made a blind bit of difference.
And whether I'm too much of a weeny to play Doom 3 for more than 5 minutes at a time.
My main system at home is my PowerMac, but I have a ninja PC I use for .NET work (such as RUnit) and for playing the occasional game. The system is actually in my media room hooked up via a DVI cable to a projector that goes to a 105" screen. The system is also hooked up to a 180W per channel 7.1 THX surround system. If there was ever a place to play Doom 3 it would be that room.
The problem is that the ATI 9800 Pro video I have in there never liked talking to the projector over DVI, and I could never get it working over VGA. The DVI thing can be made to work using a piece of software called Powerstrip, but its very fiddly to get it working, as I have to use component outputs to reconfigure the system (so I can see what I'm doing on screen), then flip it to DVI and pray to the video gods. And if I screw it up, I get nothing on screen, and I have to switch the machine off (ever tried rebooting a system with no display?)
And why do I need to keep doing this? When I do .NET development, I still use my PowerMac, and then I use Remote Desktop to access the PC. I use PCs 12 hours a day, 5 days a week, so sitting down at one in my spare time doesn't interest me, but I get a perverse pleasure from using one from my Mac. Problem is that accessing the PC that way seems to zonk the video settings so I can't use DVI on the PC anymore. Thank god I don't play games on the PC too often (Xbox to the rescue!)
So, after several failed attempts and powerswitch shutdowns, the system wouldn't boot, telling me a critical system file was corrupted. The message suggested I use Repair in the XP setup, but when I did that it asked me which install to repair. I choice C:\Windows and the system froze. Damn!
So I tried to reinstall Windows. It got to the part where the setup says "Searching for previous versions of Windows" and froze.
I suspect either the Windows install is so hosed that the setup gets confused and loops... or the drive has a circular cross-link that takes it down a bottomless rabbit hole... like it cross-linked the drive into having a directory that has itself as a child... or else the drive has simply failed.
This third option seems the least likely given that it must be partly booting in order to tell me that Windows is buggered... In any case it looks like I'll need to buy a new hard drive if only so I can reinstall Windows and reboot the system.
Those that know me won't be surprised that I took this as a perfect opportunity to also solve the ATI 9800 / projector mismatch problem but ordering a new graphics card. Spending $450 on a NVidia 6800 GT (I'm convinced the problem is with ATIs drivers as much as anything else) seemed like a better bet than replacing a $5000 projector (and far less likely to compromise my marriage).
So now I'm without a system until I can get a new hard disk. The video card should be here by mid-week... And just to make sure I keep my eye on the prize, Doom 3 arrived in the mail this afternoon...
I'll be posting in a few days as to whether any of this made a blind bit of difference.
And whether I'm too much of a weeny to play Doom 3 for more than 5 minutes at a time.
Sunday, August 01, 2004
Thin vs Rich, and The Smart Client Pendulum
When Adam Bosworth moved to Google recently, Dare wondered if they weren't finally working on sorting out the Thin vs Rich vs Smart client thing once and for all.
Adam was quite vocal on this last year, for example describing how he wished he could properly browse offline (even though what he describes sounds much like a service providing a hierarchy of RSS feeds).
Adam just posted a follow up that lends some credence to Dare's theory...
I find the whole debate quite timely. One of the challenges we face at work (and I'm sure we're not alone) is balancing the whole thin vs rich thing. For years the pendulum was firmly in the "thin" camp, but last year it swung and much of the new thinking is going into the "rich" camp, being WinForms.
Thin works great for transactional pages, where information comes back (or you fill in some form) then click to perform an action, then another unit of work is delivered and so on. But it falls down on two fronts:
At the thin end, Using an ActiveX for state persistence. By deploying an ActiveX that does client-side state persistence, you can get a rich interactivity model that follows you from page to page without having to marshall a lot of state back and forth from client to server. You then access your client state directly using JavaScript at the client.
Next up, Using an ActiveX as a server conduit. By deploying an ActiveX that acts as a conduit to your server, you modify your server interactivity to channel through this conduit (say to a web service). Now if you write your conduit appropriately, its not hard to disconnect your web client and run it interactively from cache. This model should work with Java components too.
Moving up, Run your Rich Client as an ActiveX. Here you get all the benefits of a rich client (it is a rich client!), but you host in the browser and let the browser take care of downloading new version of the hosted control if it changes. This model works great, but has some issues, notably the browser won't pull down your dependencies, so you'd better not have any! I've seen workarounds for this, notably Mercury Interactive's TestDirector. TestDirector has a stub ActiveX that functions much like the ClickOnce feature of Whidbey, where the stub pulls down a manifest that tells it what other components it needs to load. It compares what it already has in its cache, downloads any next bits, then fires up what is a highly complex application, inside the browser. This model doesn't work in Java because of the Java sandbox.
Moving beyond the browser, .NET supports Web-based WinForm execution. In this model, you run a WinForms app from a url, and it brings down the components it needs and runs on the client. In this model, .NET takes care of the deployment issues (up to a point - that point being it only does what it sees through the assembly manifest - it won't install Oracle drivers if your client needs them). The biggest downside of this model is that you are constrained by .NET's trust model and specifically Code Access Security, so you can't just go writing to the disk or adding to the Windows registry.
So what do I think the answer is? The model I think works best is the one that TestDirector uses. From one perspective you might also consider it the same model that Windows Updates uses. A stub component is installed (which doesn't change all that often, so the user doesn't keep seeing the Authenticode permissions dialog). This component then gets a list of bits it needs, compares with what it already has, and pulls down what it needs. Of course, there are problems with this model too. What if the client never restarts the stub? How then can you get new components to them? TestDirector seems to solve this by using an RPC channel to talk to its server component, which allows it to break the client out of its happy bubble and restart (though obviously you'd wait until the middle of the night to do such a thing).
Still, all things considered, this seems to be the best of all worlds. As Windows Update has shown, you can have the stub run .msi installs to get whatever drivers and local evilness you need to install and not bother the user with any of it except a progress dialog while the stub does its thing.
As there's always new techology and new ideas, this will be a pendulum that keeps on swinging. I'm hedging my bets for now with Xanadu (ours, not Ted Nelson's), where I can write an app that has zero lines of UI code (only UI metadata that describes the controls you want and their behavior) and can be run as thin (DHTML) client or a rich (WinForm) client with no visible difference to the client. Allow the server to build a manifest from Xanadu's code components and metadata (easy to do, as Xanadu's XML parser supports document discovery) and use a stub to pull it all down, and you've got a pretty compelling rich client solution. The good thing about Xanadu with this approach is that if it doesn't work out and we need to go back to a thin client, there's little or no work to make it happen, as Xanadu can render DHTML just as well, and all we lose is the ability to run the client disconnected.
Adam was quite vocal on this last year, for example describing how he wished he could properly browse offline (even though what he describes sounds much like a service providing a hierarchy of RSS feeds).
Adam just posted a follow up that lends some credence to Dare's theory...
I find the whole debate quite timely. One of the challenges we face at work (and I'm sure we're not alone) is balancing the whole thin vs rich thing. For years the pendulum was firmly in the "thin" camp, but last year it swung and much of the new thinking is going into the "rich" camp, being WinForms.
Thin works great for transactional pages, where information comes back (or you fill in some form) then click to perform an action, then another unit of work is delivered and so on. But it falls down on two fronts:
- You can't use the model in a disconnected form (out of the box)
- You can't (or it would be too hard) do complex ui interactions. For example, building fuzzy logic in to guide your workflow based on what you type as you type it... not fun to do in JavaScript/DHTML)
- Deployment (especially on-demand, or on-change deployment) will kill you
- Supporting all the different combinations of client system configurations and troubleshooting client issues is a b*tch
At the thin end, Using an ActiveX for state persistence. By deploying an ActiveX that does client-side state persistence, you can get a rich interactivity model that follows you from page to page without having to marshall a lot of state back and forth from client to server. You then access your client state directly using JavaScript at the client.
Next up, Using an ActiveX as a server conduit. By deploying an ActiveX that acts as a conduit to your server, you modify your server interactivity to channel through this conduit (say to a web service). Now if you write your conduit appropriately, its not hard to disconnect your web client and run it interactively from cache. This model should work with Java components too.
Moving up, Run your Rich Client as an ActiveX. Here you get all the benefits of a rich client (it is a rich client!), but you host in the browser and let the browser take care of downloading new version of the hosted control if it changes. This model works great, but has some issues, notably the browser won't pull down your dependencies, so you'd better not have any! I've seen workarounds for this, notably Mercury Interactive's TestDirector. TestDirector has a stub ActiveX that functions much like the ClickOnce feature of Whidbey, where the stub pulls down a manifest that tells it what other components it needs to load. It compares what it already has in its cache, downloads any next bits, then fires up what is a highly complex application, inside the browser. This model doesn't work in Java because of the Java sandbox.
Moving beyond the browser, .NET supports Web-based WinForm execution. In this model, you run a WinForms app from a url, and it brings down the components it needs and runs on the client. In this model, .NET takes care of the deployment issues (up to a point - that point being it only does what it sees through the assembly manifest - it won't install Oracle drivers if your client needs them). The biggest downside of this model is that you are constrained by .NET's trust model and specifically Code Access Security, so you can't just go writing to the disk or adding to the Windows registry.
So what do I think the answer is? The model I think works best is the one that TestDirector uses. From one perspective you might also consider it the same model that Windows Updates uses. A stub component is installed (which doesn't change all that often, so the user doesn't keep seeing the Authenticode permissions dialog). This component then gets a list of bits it needs, compares with what it already has, and pulls down what it needs. Of course, there are problems with this model too. What if the client never restarts the stub? How then can you get new components to them? TestDirector seems to solve this by using an RPC channel to talk to its server component, which allows it to break the client out of its happy bubble and restart (though obviously you'd wait until the middle of the night to do such a thing).
Still, all things considered, this seems to be the best of all worlds. As Windows Update has shown, you can have the stub run .msi installs to get whatever drivers and local evilness you need to install and not bother the user with any of it except a progress dialog while the stub does its thing.
As there's always new techology and new ideas, this will be a pendulum that keeps on swinging. I'm hedging my bets for now with Xanadu (ours, not Ted Nelson's), where I can write an app that has zero lines of UI code (only UI metadata that describes the controls you want and their behavior) and can be run as thin (DHTML) client or a rich (WinForm) client with no visible difference to the client. Allow the server to build a manifest from Xanadu's code components and metadata (easy to do, as Xanadu's XML parser supports document discovery) and use a stub to pull it all down, and you've got a pretty compelling rich client solution. The good thing about Xanadu with this approach is that if it doesn't work out and we need to go back to a thin client, there's little or no work to make it happen, as Xanadu can render DHTML just as well, and all we lose is the ability to run the client disconnected.



