<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US"><title type="html">Sriram Krishnan</title><subtitle type="html">Visual Studio for Devices.Virtual Machines. Search Engines.
Blogging from the India Development Center </subtitle><id>http://blogs.msdn.com/sriram/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/sriram/default.aspx" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2006-02-06T07:44:00Z</updated><link rel="self" href="http://feeds.feedburner.com/msdn/sriram" type="application/atom+xml" /><entry><title>Moved to http://www.sriramkrishnan.com/blog</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/nhN7P652aOw/moved-to-http-www-sriramkrishnan-com-blog.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/12/02/moved-to-http-www-sriramkrishnan-com-blog.aspx</id><published>2006-12-02T17:24:00Z</published><updated>2006-12-02T17:24:00Z</updated><content type="html">&lt;P&gt;I've stopped posting here and have moved to &lt;A href="http://www.sriramkrishnan.com/blog"&gt;http://www.sriramkrishnan.com/blog&lt;/A&gt; - please point your aggregators to &lt;A href="http://www.sriramkrishnan.com/blog/atom.xml"&gt;http://www.sriramkrishnan.com/blog/atom.xml&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1193932" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=nhN7P652aOw:CG4nYqxrmIg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=nhN7P652aOw:CG4nYqxrmIg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=nhN7P652aOw:CG4nYqxrmIg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=nhN7P652aOw:CG4nYqxrmIg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=nhN7P652aOw:CG4nYqxrmIg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=nhN7P652aOw:CG4nYqxrmIg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=nhN7P652aOw:CG4nYqxrmIg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/nhN7P652aOw" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/12/02/moved-to-http-www-sriramkrishnan-com-blog.aspx</feedburner:origLink></entry><entry><title>P0</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/nSMjPYgYoJs/672042.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/07/20/672042.aspx</id><published>2006-07-20T00:38:00Z</published><updated>2006-07-20T00:38:00Z</updated><content type="html">I recently completed a year at Microsoft. I thought I’d take the chance
to write about some of the fun anecdotes from my one year here. Blood,
sweat, screams tears and joy – I’ve lived through them all in my short
stint here.&lt;br&gt;&lt;br&gt;Nothing in Microsoft is feared as much as a P0 bug.
P0, which stands for Priority 0, is the highest importance a bug can be
given. You’ll usually see a P0 bug if there is a build break i.e. for
some reason, the build didn’t complete or the smoke tests on the new
build didn’t pass.&lt;br&gt;&lt;br&gt;For a Microsoft developer, life stops if you
get a P0 bug assigned to you. To quote a colleague, “a P0 means that
you drop whatever you’re doing, forget about the outside world, and
stop breathing even. The only thing that matters in your life now is
that P0 bug”.&lt;br&gt;&lt;br&gt;As a Program Manager, dealing with coding bugs is
usually not a part of my day-to-day work– therefore I’ve never had to
deal with P0 bugs for quite a while. Until one late night in August.&lt;br&gt;&lt;br&gt;August
2005 was a stressful period. We were in the final stages of shipping
Visual Studio 2005. This meant that we spent all our time fixing late
bugs and cleaning up the product to get it out the door for it’s late
October release.&lt;br&gt;&lt;br&gt;At such a late point in the product’s cycle,
there was always the fear that a showstopper bug might come at you from
nowhere. Of course, there was no logical reasoning for this fear – the
number of bugs being found was dropping drastically. But still, there
was Murphy’s Law and the gnawing fear that something might dramatically
fail at the last moment.&lt;br&gt;&lt;br&gt;This particular night, I was up late at
office looking at some bug. Finally done with that bug, I packed up my
stuff and prepared to head home when a developer on my team asked me if
I was free. He had a problem – he was investigating a couple of P0
issues and all of a sudden, a third P0 issue had been assigned to him.&lt;br&gt;&lt;br&gt;Assigning
the bug to myself, I unpacked my bags again and pulled up to my
computer. I wasn’t worried – a large number of P0 issues are false
alarms and are caused due to some weirdness in the machine running the
test or in the automated test code. I’ve rarely seen P0 bugs due to
actual issues in the code.&lt;br&gt;&lt;br&gt;This bug sounded relatively benign.
The toolbox was failing to load its controls when you opened a device
project. My guess was that it was due to an unclean machine where
someone hadn’t uninstalled the previous raw build cleanly.&lt;br&gt;&lt;br&gt;Let
me explain some terminology here. When we did Whidbey, we had two
builds of Visual Studio. One was the layout build which we (and you)
use with the nice graphical installer and everything. The other build
was the ‘raw’ build which just registered the binaries, some debug
tools and registry keys. With raw builds, you could build with debug
information and with optimizations turned off and debug your
way through easily.&lt;br&gt;&lt;br&gt;In this particular case, our internal
testing tools had just installed the raw build on this machine and were
running through their usually battery of tests. Everything was
hunky-dory until they tried to create a device project, at which point
everything came down in flames since there was nothing in the toolbox.&lt;br&gt;&lt;br&gt;I
poked around in the debugger in a bit. After spending 30 minutes or so
in the debugger, I knew why the toolbox wasn’t getting populated. For
the simple reason that .Net Compact Framework wasn’t installed on the
machine.&lt;br&gt;&lt;br&gt;This was weird – NetCF gets installed along with the rest of Visual Studio and there was no reason for it not to be installed.&lt;br&gt;&lt;br&gt;I
broke into a cold sweat. Not finding NetCF was a pretty serious problem
– it would render useless most of the device stuff. Had somebody
checked in code which broke the setup? This was a ship stopper bug if I
had ever seen one.&lt;br&gt;&lt;br&gt;I poked through the logs of the raw build’s
setup (essentially spew from a huge batch file) and the plot thickened.
The log file indicated that the NetCF setup had been run just like the
setup for every other part of Visual Studio. But for some weird reason,
the files weren’t there. It was as if the setup had never happened. I
looked through the event logs and they were a mystery – they told me
that NetCF’s installation was kicked off. But for some reason, they
never recorded the successful completion or any error.&lt;br&gt;&lt;br&gt;I tried
rerunning setup and voila! – NetCF installed perfectly and all tests
passed successfully. I was confused – what had happened that first
time? I tried rerunning setup a few times but couldn’t spot the
problem. Beaten, I told the tester that I couldn’t ‘repro’ the bug and
went home – but not before leaving a note in the bug asking people to
assign any similar bugs to me. If this happened again, I wanted to know
about it.&lt;br&gt;&lt;br&gt;I didn’t have to wait long. 24 hours later, there was
a mail in my inbox from another tester. A new build had exhibited the
same issue. The toolbox wasn’t loading controls.&lt;br&gt;&lt;br&gt;I plonked
myself down and logged in remotely into the test machine. The scene of
the crime was identical to the last time. No NetCF. Logs indicating the
successful installation of NetCF.&lt;br&gt;&lt;br&gt;I started poking around in the
event logs of the machine. What was happening in the machine around the
time of the incident? Was there a hardware failure? Was there a network
outage?&lt;br&gt;&lt;br&gt;The event logs didn’t reveal much. However, one entry
caught my eye – just before the entry documenting the NetCF setup,
there was an entry about a Systems Management Server operation on the
machine. SMS is how we deploy updates to Windows and other internal
tools inside Microsoft and they’re very routine around here. However,
the reason this caught my eye was due to the fact that I had seen a
similar entry in the previous machine.&lt;br&gt;&lt;br&gt;On both machines, SMS was doing something a few minutes before NetCF’s setup was kicked off.&lt;br&gt;&lt;br&gt;This
was the clincher – I now had a good hunch as to what was happening. I
checked in a piece of code to add logging of NetCF’s setup (basically
the verbose logging option of msiexec). My code also checked now to see
whether the setup failed and if so, it bailed out.&lt;br&gt;&lt;br&gt;Hardly a day
later was my guess vindicated. NetCF installation failed on another
machine – but this time, my logs had documented the sequence of events.&lt;br&gt;&lt;br&gt;For
those of you who know the innards of msiexec, you would know that only
one setup can happen at any point of time. Msiexec.exe tries to grab a
global mutex – if another instance is already holding the mutex, it
fails. The reasoning is simple – you don’t want two setup programs to
be making changes to the system at the same time as they could trample
all over each other.&lt;br&gt;&lt;br&gt;Visual Studio 2005 setup is made up a few
monolithic MSIs and smaller MSIs such as NetCF which are installed as
part of the installation process. There is no one huge Visual Studio
2005 .msi file.&lt;br&gt;&lt;br&gt;Some readers might have spotted the ending now.
What was happening was a freak occurrence. In the infinitesimally small
time gap between the end of the previous msi’s setup and the beginning
of NetCF’s setup, the machine was unlucky enough to encounter a setup
request from Systems Management Server. This was causing the NetCF
installation to fail and things went rapidly downhill from thereon. The
difference this time was that my log files had faithfully recorded all
this.&lt;br&gt;&lt;br&gt;Whew!&lt;br&gt;&lt;br&gt;I shot off a mail off to the folks running
the build machines to make sure the SMS updates happened before and we
thankfully never had to deal with this again. We never did find out why
this bug had never occurred earlier with other parts of setup. My guess
is that something in SMS was changed&lt;br&gt;&lt;br&gt;Moral of the story – I
really don’t have a moral actually. Except maybe, that shipping a
product is an incredibly fun and stressful experience all at once. &lt;br&gt;&lt;i&gt;&lt;br&gt;[Please post comments at &lt;a href="http://www.sriramkrishnan.com/blog/2006/07/p0.html"&gt;http://www.sriramkrishnan.com/blog/2006/07/p0.html&lt;/a&gt; ]&lt;/i&gt;&lt;br&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=672042" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=nSMjPYgYoJs:2gaQljafXUI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=nSMjPYgYoJs:2gaQljafXUI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=nSMjPYgYoJs:2gaQljafXUI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=nSMjPYgYoJs:2gaQljafXUI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=nSMjPYgYoJs:2gaQljafXUI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=nSMjPYgYoJs:2gaQljafXUI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=nSMjPYgYoJs:2gaQljafXUI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/nSMjPYgYoJs" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/07/20/672042.aspx</feedburner:origLink></entry><entry><title>The Microsoft Device Emulator goes Shared Source</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/WfeC9Sp8sXM/668551.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/07/17/668551.aspx</id><published>2006-07-17T17:39:00Z</published><updated>2006-07-17T17:39:00Z</updated><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;At BarCamp yesterday,
someone asked about the ability to see the source code for the
emulator. I was *so* tempted to talk about this but restrained myself.&lt;/p&gt;  &lt;p&gt;Well - no more restraining myself.&lt;/p&gt;  &lt;p&gt;The Shared Source Device Emulator 1.0 is now available for &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=faa8c81d-7316-4461-a0ed-6c95b261ddcd&amp;amp;DisplayLang=en"&gt;download&lt;/a&gt; under this &lt;a href="http://msdn.microsoft.com/vstudio/license/de_academic.aspx"&gt;license&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Check out Barry's blog post on the emulator at &lt;a href="../../barrybo/archive/2006/07/17/668492.aspx"&gt;http://blogs.msdn.com/barrybo/archive/2006/07/17/668492.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Note: You need to download libpng and zlib separately and extract it
into the right folders before you can build. Read the 'How to Build'
file in the docs folder&lt;/p&gt;&lt;p&gt;&lt;i&gt;[Cross posted at http://www.sriramkrishnan.com/blog/2006/07/microsoft-device-emulator-goes-shared.html . Please post comments there. You might want to subscribe too :-)]&lt;/i&gt;&lt;br&gt; &lt;/p&gt;
  &lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=668551" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=WfeC9Sp8sXM:ySz-XtBubhI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=WfeC9Sp8sXM:ySz-XtBubhI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=WfeC9Sp8sXM:ySz-XtBubhI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=WfeC9Sp8sXM:ySz-XtBubhI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=WfeC9Sp8sXM:ySz-XtBubhI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=WfeC9Sp8sXM:ySz-XtBubhI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=WfeC9Sp8sXM:ySz-XtBubhI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/WfeC9Sp8sXM" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/07/17/668551.aspx</feedburner:origLink></entry><entry><title>Feed mess</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/N6IER4P2MLk/666813.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/07/15/666813.aspx</id><published>2006-07-15T20:14:00Z</published><updated>2006-07-15T20:14:00Z</updated><content type="html">&lt;P&gt;Something I've been working on at work deals with feeds - I have to read, parse and derive meaning out of RSS and Atom feeds in the wild.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;And it's not been fun.&lt;/P&gt;
&lt;P&gt;The Universal Feed Parser is nice and everything but I'm still being forced to debug through weird Unicode issues. Or issues like some Feedburner feeds having the original permalink in feedburner:origLink &lt;/P&gt;
&lt;P&gt;Well, atleast I'm not the only one facing these issues. Sam Ruby maintains a list &lt;A href="http://www.intertwingly.net/blog/2006/03/13/Common-Feed-Errors"&gt;here&lt;/A&gt; and the Google Reader team talks of the &lt;A href="http://googlereader.blogspot.com/2005/12/xml-errors-in-feeds.html"&gt;problems&lt;/A&gt; they've run into (and I've run into a lot of them as well)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;EM&gt;[Cross posted at my new blog at &lt;A href="http://www.sriramkrishnan.com/blog/2006/07/feed-mess.html"&gt;http://www.sriramkrishnan.com/blog/2006/07/feed-mess.html&lt;/A&gt;. Post comments over there. Subscribe if you feel like it too :-)]&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=666813" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=N6IER4P2MLk:qYxK3sZ4-7E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=N6IER4P2MLk:qYxK3sZ4-7E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=N6IER4P2MLk:qYxK3sZ4-7E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=N6IER4P2MLk:qYxK3sZ4-7E:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=N6IER4P2MLk:qYxK3sZ4-7E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=N6IER4P2MLk:qYxK3sZ4-7E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=N6IER4P2MLk:qYxK3sZ4-7E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/N6IER4P2MLk" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/07/15/666813.aspx</feedburner:origLink></entry><entry><title>Moving to http://www.sriramkrishnan.com/blog</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/FdFfR4AknlM/646098.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/06/24/646098.aspx</id><published>2006-06-24T22:45:00Z</published><updated>2006-06-24T22:45:00Z</updated><content type="html">After several years, I've finally found the time to get off my lazy backside and get myself a domain and some webspace. Henceforth, I'm going to be blogging at &lt;A href="http://www.sriramkrishnan.com/blog"&gt;www.sriramkrishnan.com/blog&lt;/A&gt; 
&lt;P&gt;Does this mean I'm going to stop blogging here? Yes and no. I'm going to post all Microsoft related items and technical items on both blogs. However, everything else (non-technical content, non-Microsoft content,etc) will be at the new blog alone.So if you're feeling lazy and don't want to hear about my experiments with random software, stay right here :-) &lt;/P&gt;
&lt;P&gt;You can see the first ever post at &lt;A href="http://www.sriramkrishnan.com/blog/2006/06/brand-new-day.html"&gt;my new blog&lt;/A&gt; &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=646098" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=FdFfR4AknlM:0bY1X5ZeMno:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=FdFfR4AknlM:0bY1X5ZeMno:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=FdFfR4AknlM:0bY1X5ZeMno:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=FdFfR4AknlM:0bY1X5ZeMno:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=FdFfR4AknlM:0bY1X5ZeMno:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=FdFfR4AknlM:0bY1X5ZeMno:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=FdFfR4AknlM:0bY1X5ZeMno:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/FdFfR4AknlM" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/06/24/646098.aspx</feedburner:origLink></entry><entry><title>So long Robert</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/T67RvcJCeLE/627033.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/06/12/627033.aspx</id><published>2006-06-12T00:20:00Z</published><updated>2006-06-12T00:20:00Z</updated><content type="html">&lt;P&gt;Good luck to you in your new &lt;A href="http://scobleizer.wordpress.com/2006/06/10/correcting-the-record-about-microsoft/"&gt;gig&lt;/A&gt;. You'll be missed around here.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=627033" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=T67RvcJCeLE:2MXHvcovXlg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=T67RvcJCeLE:2MXHvcovXlg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=T67RvcJCeLE:2MXHvcovXlg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=T67RvcJCeLE:2MXHvcovXlg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=T67RvcJCeLE:2MXHvcovXlg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=T67RvcJCeLE:2MXHvcovXlg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=T67RvcJCeLE:2MXHvcovXlg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/T67RvcJCeLE" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/06/12/627033.aspx</feedburner:origLink></entry><entry><title>Sheer beauty - how do you poll?</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/pHIuK9rhNQk/621542.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/06/08/621542.aspx</id><published>2006-06-08T04:38:00Z</published><updated>2006-06-08T04:38:00Z</updated><content type="html">  &lt;body&gt;

&lt;p&gt;
From time to time, you see an algorithm or a technique that makes you marvel at the sheer beauty of it.
&lt;/p&gt;

&lt;p&gt;
Barry Bond(who is our in-house emulation God, architect and chief troublemaker all rolled into one :-)) &lt;a HREF="/barrybo/archive/2006/05/23/605314.aspx"&gt;posted&lt;/a&gt; about the improvements that he and his team made to the emulator to speed it up by a whopping &lt;strong&gt;40%&lt;/strong&gt; from its first version to the second.
&lt;/p&gt;
&lt;p&gt;
As a part of the team, I've been privileged enough to see check-in after check-in and to see the emulator team  chip away at performance hotspots.  For anyone interested in profiling or just in making their code faster, definitely go read that post.
&lt;/p&gt;

&lt;p&gt;
There's a little innocuous section where Barry talks about how they poll for interrupts so much faster now.
&lt;/p&gt;

&lt;p&gt;
The problem is simple - you have some stuff that can happen asynchronously. How do you poll(assume that polling is the only option for a variety of other reasons) and see whether anything has happened or not? What is the fastest way to poll? How frequently do you poll?
&lt;/p&gt;

&lt;p&gt;
The typical implementation is what Barry and his team used in V1 of the emulator. The mainline code runs this code at a pre-determined granularity (at ARM instruction boundaries in the emulator's case) and the asynchronous event(the interrupt firing in the emulator case) is in charge of toggling fSomethingHappened (which is usually volatile since this is typically a multi-threaded scenario). I've listed the assembly I got after compiling this with full optimization. I've stopped the DoSomething function from getting inlined for the purpose of making this clearer.
&lt;/p&gt;
&lt;pre&gt;
    volatile bool fSomethingHappened=0;


int _tmain(int argc, _TCHAR* argv[])
{
	
	if(fSomethingHappened)
	{
		DoSomething();
	}
	
	return 0;
}


  mov         al,byte ptr [fSomethingHappened (40336Ch)] 
  test        al,al 
  je          wmain+0Eh (40174Eh) 
  call        DoSomething (401730h) 
  xor         eax,eax 

&lt;/pre&gt;

&lt;p&gt;
You have a compare and a jump. Now, jumps are expensive and generally a bad thing. How do we get rid of the jump? In fact, how do we poll..without using *any* instructions at all?
&lt;/p&gt;

&lt;p&gt;
Let's say I gave you a guarantee - that the stuff you need to do inside DoSomething when something happens is going to take a lot of time - so you don't need to optimize for that case. You only need to optimize for the common case - that is nothing happening and fSomethingHappened being false.
&lt;/p&gt;

&lt;p&gt;
In this case, we can do something really interesting - we can make the code in the asynchronous event firing responsible for *adding* the code to handle it as well.
&lt;/p&gt;
How? See below
&lt;pre&gt;

__declspec(naked) void DoSomething()
{
	__asm
	{
	 ret;
	}
}



int _tmain(int argc, _TCHAR* argv[])
{
	
	DoSomething();
	
	return 0;
}

DoSomething:
 ret

wmain:
 call        DoSomething (401730h) 
 xor         eax,eax 

&lt;/pre&gt;

&lt;p&gt;
This seems really weird at first glance - you have empty functions that are not doing anything. That's because &lt;em&gt;the event patches the function with the code required to handle the interrupt&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
Here's the flow
&lt;ol&gt;
&lt;li&gt;
 Thread 1 calls DoSomething. Returns instantly.
&lt;/li&gt;&lt;li&gt;
 Event fires on Thread 2 - so the event firing code patches DoSomething with a jump to the right code/the right code itself.
&lt;/li&gt;&lt;li&gt;
 Thread 1 merrily tries to poll again - calls DoSomething and handles the event. Life is good.
&lt;/li&gt;&lt;/ol&gt;
&lt;/p&gt;


&lt;p&gt;
Check out how low cost the polling is in the normal case -when no event is being fired, we just do a call and a ret. But I hear some of you screaming - but you're still using 2 instructions.And why a call and a ret when you are not doing anything on the stack? You said you'll use no instructions! Well, you see, we actually are using 0 instructions.
&lt;/p&gt;

&lt;p&gt;
It is due to the way processors speculate and look-ahead. All modern processors will look at the 'call' and see that it hits a 'ret' directly. They'll be smart enough to figure out that a call followed by a ret is effectively a nop - and therefore, turn the 2 instructions into a nop.
&lt;/p&gt;

So in the normal case, the body of wmain for us is effectively this

&lt;pre&gt;
wmain:
 nop
&lt;/pre&gt;

&lt;p&gt;
When the event fires and patches the DoSomething function, processors realize that they cannot speculate anymore - and so they do the right thing.
&lt;/p&gt;

&lt;p&gt;
Awesome, isn't it? Polling without actually executing the code to poll. Just sheer beauty - something that totally blew me away when Barry explained how this works.
&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
Notes:
&lt;br/&gt;

&lt;ol&gt;&lt;li&gt; You shouldn't be worrying about optimizations like this unless you are writing an emulator :-)
&lt;/li&gt;&lt;li&gt;The code for actually patching the function with the right code is left as an exercise to the reader :-)&lt;/li&gt;
&lt;li&gt;This code doesn't deal with issues like memory fences, atomic patching,etc &lt;/li&gt;
&lt;li&gt; Barry explained this to me when we were walking the Strip at Las Vegas. I know what you are thinking :-) &lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=621542" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=pHIuK9rhNQk:IPUqVBjkngc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=pHIuK9rhNQk:IPUqVBjkngc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=pHIuK9rhNQk:IPUqVBjkngc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=pHIuK9rhNQk:IPUqVBjkngc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=pHIuK9rhNQk:IPUqVBjkngc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=pHIuK9rhNQk:IPUqVBjkngc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=pHIuK9rhNQk:IPUqVBjkngc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/pHIuK9rhNQk" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/06/08/621542.aspx</feedburner:origLink></entry><entry><title>Done with my talk</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/f49P2ybZkjU/594881.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/05/10/594881.aspx</id><published>2006-05-10T21:42:00Z</published><updated>2006-05-10T21:42:00Z</updated><content type="html">&lt;P&gt;I'm finally done with my MEDC talk. It went really well though it was the last talk of the day. I'll probably blog about it in detail later&lt;/P&gt;
&lt;P&gt;MEDC Attendees Only&amp;nbsp;- If you came to this blog after watching my session to find the code, you'll have to wait a bit. I'll get it up here in a day or two. The slides should already be up on Commnet (accessible from &lt;A href="http://content.medc2006.com"&gt;http://content.medc2006.com&lt;/A&gt; )&lt;/P&gt;
&lt;P&gt;In case you want to mail me, shoot it to sriramk [at] microsoft.com&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=594881" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=f49P2ybZkjU:LtPlXQ0YRqc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=f49P2ybZkjU:LtPlXQ0YRqc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=f49P2ybZkjU:LtPlXQ0YRqc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=f49P2ybZkjU:LtPlXQ0YRqc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=f49P2ybZkjU:LtPlXQ0YRqc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=f49P2ybZkjU:LtPlXQ0YRqc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=f49P2ybZkjU:LtPlXQ0YRqc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/f49P2ybZkjU" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/05/10/594881.aspx</feedburner:origLink></entry><entry><title>Finally at Redmond</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/yVcrFq2lgiw/587705.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/05/01/587705.aspx</id><published>2006-05-01T18:01:00Z</published><updated>2006-05-01T18:01:00Z</updated><content type="html">&lt;P&gt;3 long flights and an equal number of adventures later, I'm finally at Redmond at Microsoft campus. If anyone wants to meet up, shoot me a mail at &lt;A href="mailto:sriramk@youknowwhere.com"&gt;sriramk@youknowwhere.com&lt;/A&gt;. Right now, I'm working out of this &lt;A href="http://local.live.com/?v=2&amp;amp;sp=aN.47.637628_-122.132947_Bldng%2041_ "&gt;place&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Some observations about Seattle&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;This place is cold! For someone like me coming from 40+ degrees Celsius, getting used to 40 degrees is Fahrenheit is proving a bit hard.&lt;/LI&gt;
&lt;LI&gt;India and the US are different on so many levels - I get caught up in the most unexpected of places. This morning, I had real trouble crossing a road. The process is *very different* from what we have back in India!&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=587705" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=yVcrFq2lgiw:-Iz9wCrYkw0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=yVcrFq2lgiw:-Iz9wCrYkw0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=yVcrFq2lgiw:-Iz9wCrYkw0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=yVcrFq2lgiw:-Iz9wCrYkw0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=yVcrFq2lgiw:-Iz9wCrYkw0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=yVcrFq2lgiw:-Iz9wCrYkw0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=yVcrFq2lgiw:-Iz9wCrYkw0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/yVcrFq2lgiw" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/05/01/587705.aspx</feedburner:origLink></entry><entry><title>A Haskell programmer becomes a fan of...Visual Basic</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/3ny2NZfhDEc/573731.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/04/11/573731.aspx</id><published>2006-04-11T22:30:00Z</published><updated>2006-04-11T22:30:00Z</updated><content type="html">Even though I'm a hardcore VB fan, I never thought I'd see the day when I'd see this happen. Go, Erik, go! &lt;br&gt;

&lt;a href="http://research.microsoft.com/~emeijer/Papers/ICFP06.pdf"&gt;Confessions of a used programming language salesman (PDF Link)&lt;/a&gt;

&lt;br/&gt;

Who's going to be the first Lisper to move to VB? :-)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=573731" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=3ny2NZfhDEc:vxzvtpHbA-0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=3ny2NZfhDEc:vxzvtpHbA-0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=3ny2NZfhDEc:vxzvtpHbA-0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=3ny2NZfhDEc:vxzvtpHbA-0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=3ny2NZfhDEc:vxzvtpHbA-0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=3ny2NZfhDEc:vxzvtpHbA-0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=3ny2NZfhDEc:vxzvtpHbA-0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/3ny2NZfhDEc" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/04/11/573731.aspx</feedburner:origLink></entry><entry><title>Location in the Regional and Languages options control panel</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/4WbDwHcsZlk/573640.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/04/11/573640.aspx</id><published>2006-04-11T20:20:00Z</published><updated>2006-04-11T20:20:00Z</updated><content type="html">&lt;P&gt;One of the free perks of working for Microsoft - when you want to know why a feature in a Microsoft product was done a particular way, you can always chase down the right people. Not that this is not possible outside Microsoft but it sure is a lot easier inside. In fact, a lot of times you see threads internally of the form "Why was foo in Windows done in that way?" and there'll instantly be a couple of response from the developer on the feature enumerating all the reasons why.&lt;/P&gt;&lt;IMG alt="Regional and Language Settings" src="/photos/sriram/images/573639/original.aspx"&gt; 
&lt;P&gt;Ever wondered what this part of the 'Regional and Language Options' part of the Control Panel applet did? I sure did! For a long time, it wasn't obvious to me what that combo box actually did. I didn't recall seeing any app giving me any extra services. And almost no app actually recognizes which country I'm in. I was also curious as to how I can get at that information through a documented API instead of poking through the registry.&lt;/P&gt;
&lt;P&gt;A couple of emails and a few of Michael Kaplan's blog posts later, I was set straight - that combo box sets the GeoId for your system. Here's a small snippet of code which prints out what your current GeoId is&lt;/P&gt;&lt;PRE&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;windows.h&amp;gt;


int wmain(int argc, wchar_t* argv[])
{
	GEOID currentGeoId = GetUserGeoID(GEOCLASS_NATION);

	if(GEOID_NOT_AVAILABLE != currentGeoId)
	{
		wchar_t wszBuffer[100];

		if(0!= GetGeoInfo(currentGeoId, GEO_FRIENDLYNAME, wszBuffer,
			sizeof(wszBuffer)/sizeof(wchar_t), 0))
		{
			
			wprintf(wszBuffer);			
		}
	}

	return 0;
}

&lt;/PRE&gt;
&lt;P&gt;Michael Kaplan has blogged about this extensively &lt;A HREF="/michkap/archive/2005/02/04/366922.aspx"&gt;here&lt;/A&gt;, &lt;A HREF="/michkap/archive/2005/10/12/479817.aspx"&gt;here&lt;/A&gt; and &lt;A HREF="/michkap/archive/2005/06/01/424067.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=573640" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=4WbDwHcsZlk:9BuOPPVi8Tw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=4WbDwHcsZlk:9BuOPPVi8Tw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=4WbDwHcsZlk:9BuOPPVi8Tw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=4WbDwHcsZlk:9BuOPPVi8Tw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=4WbDwHcsZlk:9BuOPPVi8Tw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=4WbDwHcsZlk:9BuOPPVi8Tw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=4WbDwHcsZlk:9BuOPPVi8Tw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/4WbDwHcsZlk" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/04/11/573640.aspx</feedburner:origLink></entry><entry><title>Random Things</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/xM0ubEFBrtk/573602.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/04/11/573602.aspx</id><published>2006-04-11T19:19:00Z</published><updated>2006-04-11T19:19:00Z</updated><content type="html">&lt;UL&gt;
&lt;LI&gt;Hacked together a prototype for my Orcas feature over a weekend. Not bad for a PM,eh? :-). Sorry, I can't tell you what it is...yet.&lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Spent a week at MEDC India at Bangalore and had an absolute blast. I did a data demo as part of the keynote which went well - though some of my jokes fell flat. Here's a photo of me and the rest of the Visual Studio for Devices gang at MEDC. Quite an attractive bunch, aren't we?&lt;BR&gt;&lt;IMG alt="VSD Team at MEDC Bangalore" src="/photos/sriram/images/573600/500x375.aspx"&gt; &amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;I'm travelling to Redmond and Las Vegas the end of the month. So if you're anywhere near the Seattle area, drop me a mail and we can meet up. I'm going to Las Vegas to do a talk at &lt;A href="http://www.medc2006.com/"&gt;&amp;nbsp;MEDC 2006&lt;/A&gt;. I'm doing APP320 - Web 2.0 and Mobile Devices. But more on that in later posts.&lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Hyderabad is getting really, really hot. Literally. When I stepped out of the flight from Bangalore, my body took a while to get used to heat. Who expects the temperature to be 38 degrees Celsius at 9 in the night?&lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;I'm finally getting to contribute to some virtual machine development in Microsoft. Not in any official capacity, but it's really cool all the same.&lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A HREF="/stevelasker/archive/2006/04/10/SqlEverywhereInfo.aspx"&gt;Sql Everywhere&lt;/A&gt; is wicked. As in, really wicked. &lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Software engineering. At Microsoft, you really do understand what the word 'engineering' stands for. Example problem I'm faced with - you have a platform underneath you and you have to build something on top of that platform. How do you build both at the same time? And do so in a month?&lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;My body clock is seriously out of whack. Too many late nights on the computer in the last year or so have resulted in my being unable to sleep till 4 AM in the morning. I've tried everything under the sun to get myself to sleep on time. But it really doesn't help counting sheep when you start thinking of how a search engine can use blog links and track conversations on the 5th sheep.&lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;I need to come up with an excuse to meet &lt;A HREF="/oldnewthing"&gt;this guy&lt;/A&gt; while I'm in Redmond. Though he doesn't know me :-)&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=573602" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=xM0ubEFBrtk:uISUi0tM7BQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=xM0ubEFBrtk:uISUi0tM7BQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=xM0ubEFBrtk:uISUi0tM7BQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=xM0ubEFBrtk:uISUi0tM7BQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=xM0ubEFBrtk:uISUi0tM7BQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=xM0ubEFBrtk:uISUi0tM7BQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=xM0ubEFBrtk:uISUi0tM7BQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/xM0ubEFBrtk" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/04/11/573602.aspx</feedburner:origLink></entry><entry><title>The MySpace generation</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/t92rw5vm9Ps/535058.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/02/19/535058.aspx</id><published>2006-02-19T15:41:00Z</published><updated>2006-02-19T15:41:00Z</updated><content type="html">&lt;P&gt;I really have to blame Russell Beattie for all this.&lt;/P&gt;
&lt;P&gt;First he posted this entry called &lt;A href="http://www.russellbeattie.com/notebook/1008820.html"&gt;"Why MySpace scares the cr*p out of me"&lt;/A&gt; where he says&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;"Why? Because I just don’t get it. I wish I did, but I don’t. Those crazy kids today, and all that. I mean, I get the components of it all - community, pictures, messages, music, social networking, yada-yada, but I don’t *get* why MySpace in particular is popular. I don’t grok it down deep. Or Facebook for that matter (not that I’ve ever seen Facebook - what a competitive advantage, hey? If you’re out of school you can’t even see what the hell the site does!). Why did these sites get such traction when others didn’t?"&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The scary thing is - I feel the same way. Though I'm half of Russell's age and the same age as most of MySpace's users.&lt;/P&gt;
&lt;P&gt;Today, I went and did the unthinkable - I created a MySpace profile for myself. You can find it &lt;A href="http://www.myspace.com/sriramkrishnan" rel="nofollow"&gt;here&lt;/A&gt;&amp;nbsp;(stole some of the CSS off Russell's profile to make mine look...less chaotic than the other profiles out there :-) . The sheer freedom offered is incredible-&amp;nbsp; pretty much any html and css goes. And boy, do the users exploit that!&lt;/P&gt;
&lt;P&gt;I spent some time exploring MySpace - the sheer chaos there is incredible. Like I told someone "MySpace makes Orkut seem like an old-fashioned British tea party". I'm badly out of touch with the users of MySpace - though I'm probably the same age or a&amp;nbsp; couple of years older than most of them.&lt;/P&gt;
&lt;P&gt;Russell sums it up very well in this &lt;A href="http://www.russellbeattie.com/notebook/1008824.html"&gt;post&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;This disconnect scares me - for I have to create great software for these people and I don't understand them one bit.&lt;/P&gt;
&lt;P&gt;Like Russell says, "I'm just a geek".&lt;/P&gt;
&lt;P&gt;Amen&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=535058" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=t92rw5vm9Ps:iXml_0C7EBM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=t92rw5vm9Ps:iXml_0C7EBM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=t92rw5vm9Ps:iXml_0C7EBM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=t92rw5vm9Ps:iXml_0C7EBM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=t92rw5vm9Ps:iXml_0C7EBM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=t92rw5vm9Ps:iXml_0C7EBM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=t92rw5vm9Ps:iXml_0C7EBM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/t92rw5vm9Ps" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/02/19/535058.aspx</feedburner:origLink></entry><entry><title>Ship-It!</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/3RM6uKwTPCQ/531827.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/02/14/531827.aspx</id><published>2006-02-14T15:46:00Z</published><updated>2006-02-14T15:46:00Z</updated><content type="html">&lt;P&gt;I finally picked up my Ship-It plaque for VS 2005 today (it had been languishing in my mail for sometime). You have to be a Microsoft employee to know how awesome it feels. :-)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;A title="Ship-it award" href="http://www.flickr.com/photos/sriramkrishnan/99652821/" ?&gt;&lt;IMG height=375 alt="Ship-it award" src="http://static.flickr.com/24/99652821_cd22fb3565.jpg" width=500&gt;&lt;/A&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=531827" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=3RM6uKwTPCQ:hvP6ctJYrrY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=3RM6uKwTPCQ:hvP6ctJYrrY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=3RM6uKwTPCQ:hvP6ctJYrrY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=3RM6uKwTPCQ:hvP6ctJYrrY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=3RM6uKwTPCQ:hvP6ctJYrrY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=3RM6uKwTPCQ:hvP6ctJYrrY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=3RM6uKwTPCQ:hvP6ctJYrrY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/3RM6uKwTPCQ" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/02/14/531827.aspx</feedburner:origLink></entry><entry><title>It's raining tennis balls</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/msdn/sriram/~3/CbIhcRDswrw/525479.aspx" /><id>http://blogs.msdn.com/sriram/archive/2006/02/06/525479.aspx</id><published>2006-02-06T07:44:00Z</published><updated>2006-02-06T07:44:00Z</updated><content type="html">Microsoft has weird people. When you stroll through the corridors here, you’ll find people’s offices decked up in the weirdest of ways – posters, weird little gadgets,etc. You’ll also find lots of sports equipment – cricket bats, tennis balls and smelly basketball sneakers which haven’t been cleaned in weeks.
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;If you’re visiting the Microsoft office, be prepared to run into some of this weirdness as well. Like one poor soul found out today…&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;After intensely pounding away at my keyboard for hours, I went for a walk on my floor with&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;this &lt;a href="http://spaces.msn.com/aarthi"&gt;person&lt;/a&gt;. The ground floor here is slightly staggered from the rest of the floors – if you drop something from the 3&lt;sup&gt;rd&lt;/sup&gt; floor, it’ll fall into the visitor’s waiting area.&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Which is exactly what happened today.&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;She was playing around with a tennis ball and it ‘accidentally’ rolled off the 3&lt;sup&gt;rd&lt;/sup&gt; floor, underneath the railing. It fell 3 floors…right onto an unsuspecting visitor.&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Not a pleasant thing to do to your visitors.&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I wish I could tell you what happened next – but in a fit of cowardice, we ran away from the scene of the crime – like a couple of kids who had broken a window.&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;To the poor soul who had a close encounter with a tennis ball today. We are sorry. We really are. But can we have our ball back now?&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=525479" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=CbIhcRDswrw:Ywd_zNApzR8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=CbIhcRDswrw:Ywd_zNApzR8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=CbIhcRDswrw:Ywd_zNApzR8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=CbIhcRDswrw:Ywd_zNApzR8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=CbIhcRDswrw:Ywd_zNApzR8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?i=CbIhcRDswrw:Ywd_zNApzR8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/msdn/sriram?a=CbIhcRDswrw:Ywd_zNApzR8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/msdn/sriram?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/msdn/sriram/~4/CbIhcRDswrw" height="1" width="1"/&gt;</content><author><name>sriram</name><uri>http://blogs.msdn.com/members/sriram.aspx</uri></author><feedburner:origLink>http://blogs.msdn.com/sriram/archive/2006/02/06/525479.aspx</feedburner:origLink></entry></feed>
