March 2009 - Posts

Clone VHD, MSDTC and SID Trouble!!

Eh, without going into too much detail, if you are cloning a VHD (Hyper-V / VPC / Virtual Server) to create a new VM, make sure to run NEWSID Sysinternal tool after you run the VM the first time to avoid headache.  Ran into this while trying to use MSDTC on the cloned VHD.

Basically, I decided to create a common base VHD with Windows 2008 installed on it and then cloned the VHD (copied it) and create new VM using the cloned VHD.

MSDTC apparently does not like the identical SID on multiple systems.

Share this post: | | | |
Posted by Jimmy Chandra | 3 comment(s)
Filed under: ,

MMORPG Tactics = Software Architecture???

I used to play a high level cleric a while back in an MMORPG game called EverQuest.   As with most high level characters, I was in a raiding guild.  For those who didn’t know what a raid is like, basically, you get together with other players (usually in the same guild), usually around 20+ players with different skill sets and you work together to kill high level NPCs that required a whole lot of different tactics and cooperation between the raid members.

One aspect of this game that fascinates me is the tactics / strategies that are required for the raid to be a successful raid (minimal casualties and goal reached / NPC killed).

For example, as a cleric one of my main task is to keep our main tank alive (a tank is a primary punching bag for the NPC mob).  If you miss casting your healing spell because you’re out of mana (magic energy) or you didn’t use the right healing spell (takes too long or doesn’t have enough healing power), your tank will most likely will dead in no time and most likely everyone else in the raid will die as well.

Amazingly, the system work in the smaller scale (2 to 6 people group) as well as in larger scale (20+ people raid).   However, at a larger scale (raid), you need to adjust your tactic.  For example, a single cleric will not be sufficient to heal the main tank by his / herself, due to healing spell speed, maximum mana constraint, etc.  So you need to have a cleric chain / queue, in which 2 or more clerics take turns healing the main tank in turn.  Sometimes you also need to have spot healers (with quick, casting time wise, healing spells ready) just in case the main tank is suffering too much damage.  Here you can see, similarly in software architecture, depending on the software, you will need different scaling strategy between small scale system and large highly scalable system.  In a web application, you can think of this as a web farm / cluster sort of thing.

Even this sometimes is not enough due to the constraint of maximum mana pool per cleric.  In this case, the game have other specialized classes like mage who can create a mana injector rod and necromancer who can regenerate mana faster than any other classes at the expense of their own health and transfer them to whoever they wish / need it.  So you can see here that the cleric chain is being served by additional chain of mages and necromancers (to supply them with mana so they can continue healing the main tank).  Here, you can make a connection to one layer of service is depending on a lower level service to feed them data / information, sort of like tier / layer separation.

Sometimes the raid will require redundancy just in case.  For example, the raid leader will nominate a primary tank (the one that is getting hit the most by the NPC mob) and also a secondary tank just in case the primary tank goes down / die.  Can you say active / passive cluster failover?

Communication can be served in different channels.  For example, the raid clerics will have their own channel so they can communicate effectively.  I.e. Notified the rest of the cleric chain that they are out of the rotation due to out of mana quickly before their turn to heal so the next cleric in chain can take up the responsibility.  Or to notify the next cleric that his / her turn is up next.  A different channel is being used to announce to the other support classes like necromancer that a particular cleric is in need of rapid mana transfer.  Or a one to one / many mapping between a particular cleric with his / her own support staffs (mage / necromancer) can be established when needed as well.  You can easily make a similar analogy to this in software architecture… let say… Enterprise Service Bus / Publish Subcribe mechanism where each cleric in the chain subscribe (join) to a particular communication channel and they can publish (send their message / notification) to that channel so other clerics / interested party can react to it in whatever manner they deem necessary.

Execution order is also part of the strategy.  For example, the main tank will start hitting the NPC mob, and then when he is down to 50% of his health, the first cleric in the chain start healing.  This is kind of similar to that of an SLA in software / service architecture, where a certain service level agreement is establish that the tank should never fall below 30% of his / her health (which depends on the mob that is being raid) and for him / her to not fall below that number, the cleric should start healing when they can monitor that the tank is at 50% of his health.

Just food for thought… Isn’t that fun? Hehehe.

Share this post: | | | |
Posted by Jimmy Chandra | with no comments
Filed under: ,

Windows 7 64-bit & Fuji Xerox Document Centre 236 Printer Driver

Long story short, when I started at Microsoft, I was given a loaner laptop (a Toshiba Tablet PC).  I sort of miss the old loaner tablet PC now after I got a Lenovo T61p, finally.  The loaner has a very crappy battery live, like 5 minutes worth of battery only and then it just shutdown on you *LOL*.  Well, so much about being mobile… you basically have to tie yourself up to an electric outlet to use that thing.  However, I was getting used to the small keyboard and the tablet PC aspect of it.  Although it was not powerful enough to do any serious programming exploratory stuffs, it was very nice for note taking.  The sucker only had 2GB of RAM and meager 40GB hard disk space.  Yeah, not enough to spawn and support multiple virtual machines.  I wonder if that’s a long or short story…anyhow…

So, now that I got my “new” aka slightly used (or was it heavily used) Lenovo T61p notebook (someone quit and they handed it down to me, hehehe).  Nice machine.  4GB of RAM and quite plenty of space.  Too bad it didn’t come with 8GB of RAM…That would kick ass :).  Looked around for a 4GB SODIMM online and that thing cost a fortune, gah.. USD 340 each, and you will need two of them.  Maybe later… Guess I’ll live with 4GB for now.

So… I decided to install Windows 7 Beta (Build 7000) 64-bit on it.  It installed smoothly enough.  With standard install without scrounging for other drivers I was able to use most of the stuffs that I need, meaning video driver and audio driver straight from Windows Update.

I went online hunting for whatever drivers that I was missing and got most of them, including the UPEK fingerprint biometric driver and some other stuffs from Lenovo website (which have a pretty neat System Update utility, sort of similar to Windows Update).

At the end, I was still missing a couple of necessary 64-bit drivers, one for printer (Fuji Xerox Document Centre 236) and another for my IM2 broadband modem (ZTE MF622).  Basically I was looking for either Windows Server 2008 / Windows Vista 64-bit drivers.

After downloading a bunch of drivers from Fuji Xerox website and trying them (which amount to a hill of printed garbage, well, exaggerating here, but that’s how I feel).  I finally settled down on  a Fuji Xerox FX DC-II 5010 PCL that came with Windows 7 itself, which seems to work just fine for me.  Fuji Xerox website itself recommended a 64-bit PostScript driver that are available from their website (for W2K8 / Vista 64-bit), but that didn’t work for me.

Now… the only 64-bit driver that I’m still missing is my IM2 ZTE MF622 3.5G modem.  Anyone got any clue on this one?

Share this post: | | | |
Posted by Jimmy Chandra | 8 comment(s)
Filed under: