<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>MikeKelly's WebLog</title><link>http://blogs.msdn.com/mikekelly/default.aspx</link><description>From my Office to Yours</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>DevDays Seattle – Scott Hanselman</title><link>http://blogs.msdn.com/mikekelly/archive/2009/10/21/devdays-seattle-scott-hanselman.aspx</link><pubDate>Wed, 21 Oct 2009 17:55:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9910768</guid><dc:creator>MikeKelly</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/9910768.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=9910768</wfw:commentRss><description>&lt;p&gt;Lolcode.net – funny site with a domain-specific language that mimics IM syntax.&amp;#160; Actual code&lt;/p&gt;  &lt;p&gt;MVC&lt;/p&gt;  &lt;p&gt;When you create an MVC project, you get default code for controllers and views but nothing for the model. ASP.Net MVC lets you use nHibernate, Linq to SQL, whatever for your data access.&lt;/p&gt;  &lt;p&gt;The URL hierarchy is a form of user interface and in MVC the .aspx extension is gone. MVC uses the URLs to do routing - it's convention over configuration, i.e. there is no big file that defines the URL namespace - it's a convention that the URL is a controller action and there should be a controller named that.&lt;/p&gt;  &lt;p&gt;MVC is just built on top of System.Web - there is a transition to System.Web.Mvc. WebForms is still there. It's like the difference between motorcycle and mini-van - one isn't better than the other, they are just different and for different purposes.&lt;/p&gt;  &lt;p&gt;In the controller could create a viewmodel that goes to the database and pass that to the view. Framework doesn't require a ViewModel for a Model but it's typical to do it that way.&lt;/p&gt;  &lt;p&gt;&amp;lt;%: in the view does an HTML.encode whereas &amp;lt;%= doesn't.&lt;/p&gt;  &lt;p&gt;Views can be done using an .aspx extension - but no code behind anymore.&lt;/p&gt;  &lt;p&gt;Create a model and can create a view that is strongly-typed linked to the model and will generate the details view for that. Code Templates let you change the default code generated from the wizard - using T4, the VS code generation engine.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.nerddinner.com"&gt;www.nerddinner.com&lt;/a&gt; - if you hit it from an iPhone, detects that and the controllers and models are the same but the views are different. Code at &lt;a href="http://tinyurl.com/aspnetmvc"&gt;http://tinyurl.com/aspnetmvc&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9910768" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/development/default.aspx">development</category><category domain="http://blogs.msdn.com/mikekelly/archive/tags/Stack+Overflow/default.aspx">Stack Overflow</category></item><item><title>DevDays Seattle – Joel Spolsky</title><link>http://blogs.msdn.com/mikekelly/archive/2009/10/21/devdays-seattle-joel-spolsky.aspx</link><pubDate>Wed, 21 Oct 2009 16:48:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9910718</guid><dc:creator>MikeKelly</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/9910718.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=9910718</wfw:commentRss><description>&lt;p&gt;We get interrupted too much by a computer that has an agenda of its own for ourselves.&lt;/p&gt;  &lt;p&gt;Examples: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Windows updates&lt;/li&gt;    &lt;li&gt;Outlook: Any exceptions associated with the recurring appointment will be cancelled. Is this OK? &amp;lt;OK&amp;gt; &amp;lt;CANCEL&amp;gt; but Cancel doesn't mean cancel the appointments, it means cancel the change.&lt;/li&gt;    &lt;li&gt;Even shutting down your computer involves a decision - shut down, restart, hibernate, sleep, …&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Why are these called dialog boxes? They are an imaginary dialog between the programmer and the user. The programmer believes that users care about this dialog, but they don't. What you care about as a programmer is getting the parameter to some function you need to call and the user doesn't really care about giving you that answer. You should just figure it out. You as a programmer never have the right to put up a modal dialog box while the user is trying to do something.&lt;/p&gt;  &lt;p&gt;Really comes down to simplicity versus power. Swiss Army knife version of software.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.columbia.edu/~ss957/whenchoice.html"&gt;www.columbia.edu/~ss957/whenchoice.html&lt;/a&gt; - When Choice is Too Much&lt;/p&gt;  &lt;p&gt;When there were 24 flavors of jam to choose among, only 3% purchased a jam. When there were 6 flavors, 30% - ten times as many - bought jam. People abdicate when too many choices are presented.&lt;/p&gt;  &lt;p&gt;37signals - getting real - fewer options in software.&lt;/p&gt;  &lt;p&gt;My manager at Microsoft, Andrew Kwatinetz, taught me every time you have an option in a dialog box, you're asking someone to make a decision.&lt;/p&gt;  &lt;p&gt;Gmail - has a choice &amp;quot;Always display external content (e.g. images) sent by trusted senders.&amp;quot; Not sure as a user why they're asking you, but as a programmer I understand the security risk of displaying an image - but even I don't know who are trusted senders.&lt;/p&gt;  &lt;p&gt;Software excuses itself so that when someone does something natural that causes a problem, they feel stupid. This is what all these &amp;quot;Are you sure?&amp;quot; dialogs are about - so people blame themselves.&lt;/p&gt;  &lt;p&gt;So why isn't software just simple?&lt;/p&gt;  &lt;p&gt;When you show the V1 simple software, everyone loves the simplicity - but could they just have this one feature - why isn't there search? Why can't I add a picture to a bug?&lt;/p&gt;  &lt;p&gt;What you find is as you solve the customer problems by adding features, you have more sales - so you're adding features to drive those sales. Yes, people only use 20% or so of features, but it's a different 20% for each person.&lt;/p&gt;  &lt;p&gt;So how do you solve this conundrum?&lt;/p&gt;  &lt;p&gt;Design is the act of making decisions, and designing well is making the right decisions. When you have failed at design, you are punting to the user. A designer knows he has achieved his task not when there is nothing left to add, but nothing left to take away.&lt;/p&gt;  &lt;p&gt;A piece of architecture is best when it has the modesty not to draw attention to the obstacles it has overcome.&lt;/p&gt;  &lt;p&gt;Nokia E71 phone - four choices for silent: meeting, outdoor, silent, vibrate. The four choices require a complicated menu. If you just have two choices - silent/ring, you can do what the iPhone does and have a physical switch.&lt;/p&gt;  &lt;p&gt;We realize we don't need checkout, we can buy now with 1click. We don't need pause/stop - we can just have stop. Pause exists because of reel-to-reel tape where the difference between stop and pause was whether the heads disengaged. In a digital world, we don't need the distinction.&lt;/p&gt;  &lt;p&gt;Simple is hard. Think of all the extra work the Amazon codebase has to do to make one-click work. They have to hold the order for 30 minutes in case it was a mistake so it can be cancelled - but proceeding is the mainstream case and the case that is optimized - you only have to do extra things if you want to stop the order.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9910718" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/development/default.aspx">development</category><category domain="http://blogs.msdn.com/mikekelly/archive/tags/Stack+Overflow/default.aspx">Stack Overflow</category></item><item><title>DevDays Seattle</title><link>http://blogs.msdn.com/mikekelly/archive/2009/10/21/devdays-seattle.aspx</link><pubDate>Wed, 21 Oct 2009 15:53:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9910674</guid><dc:creator>MikeKelly</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/9910674.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=9910674</wfw:commentRss><description>&lt;p&gt;I’m at &lt;a href="http://stackoverflow.carsonified.com/events/seattle"&gt;DevDays Seattle&lt;/a&gt;, an event sponsored by &lt;a href="http://www.stackoverflow.com"&gt;Stack Overflow&lt;/a&gt; and Microsoft.&amp;#160; I look at it as a day of seeing “how the other half codes”, i.e. those not using the Microsoft stack (IIS, ASP.Net, Azure, C#, etc.) but more open source tools like jQuery, mySQL, etc.&amp;#160; One of my favorite tech bloggers, &lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt;, is behind this and speaking, which I’m looking forward to.&amp;#160; I’ll post updates during the day; topics include ASP.Net-MVC (after all, Microsoft &lt;strong&gt;&lt;em&gt;is&lt;/em&gt;&lt;/strong&gt; a co-sponsor, so I guess it’s not all about “the other half” :)), iPhone apps, Python, and Google App Engine.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9910674" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/development/default.aspx">development</category><category domain="http://blogs.msdn.com/mikekelly/archive/tags/Stack+Overflow/default.aspx">Stack Overflow</category></item><item><title>Azure Service: Moving Storage from Development (local) to the Cloud</title><link>http://blogs.msdn.com/mikekelly/archive/2009/10/13/azure-service-moving-storage-from-development-local-to-the-cloud.aspx</link><pubDate>Tue, 13 Oct 2009 23:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9906900</guid><dc:creator>MikeKelly</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/9906900.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=9906900</wfw:commentRss><description>&lt;P&gt;As part of the process of moving my Azure test service from running entirely locally (on what's called "Development Fabric" and "Development Storage", i.e. for development on your local machine) to the Cloud, I followed the &lt;A href="http://msdn.microsoft.com/en-us/library/dd203057.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd203057.aspx"&gt;steps on MSDN&lt;/A&gt; which suggest moving to the Cloud in two steps:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Run your service locally (on "development fabric") connecting to cloud-based storage.&lt;/LI&gt;
&lt;LI&gt;Once that's working, move your service to the cloud fabric.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;So how do you get your local service to talk to cloud-based storage?&amp;nbsp; Turns out the hardest part is getting the storage table created on the Cloud (or is it "in the Cloud"? :))&lt;/P&gt;
&lt;P&gt;The old way suggested having a method in your DataContext which you call to check if the tables are created and if not create them.&amp;nbsp; But a more &lt;A href="http://blog.smarx.com/posts/try-to-create-tables-only-once" mce_href="http://blog.smarx.com/posts/try-to-create-tables-only-once"&gt;recent post from Steve Marx&lt;/A&gt; points out that this is very inefficient.&amp;nbsp; He proposes adding a new entry point to do this, but &lt;A href="http://blogs.msdn.com/ploeh/archive/2008/12/04/creating-azure-tables-from-script.aspx" mce_href="http://blogs.msdn.com/ploeh/archive/2008/12/04/creating-azure-tables-from-script.aspx"&gt;another post&lt;/A&gt; from Mark Seemann proposed an even more elegant solution: write a Powershell script to invoke the method to create the table(s)&amp;nbsp;&lt;STRONG&gt;&lt;EM&gt;once&lt;/EM&gt;&lt;/STRONG&gt; out of band of any running service code.&amp;nbsp; Since I'd been meaning to play around a bit with Powershell anyway, this approach had an extra benefit.&lt;/P&gt;
&lt;P&gt;Using Mark's script as a model, I eventually got this working and now have my service connected to the cloud storage.&lt;/P&gt;
&lt;P&gt;The changes I had to make were:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Make sure your Data Context class which inherits from the StorageClient &lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;TableStorageDataServiceContext &lt;FONT color=#000000&gt;class is &lt;STRONG&gt;public&lt;/STRONG&gt;.&amp;nbsp; Otherwise, the PowerShell script won't be able to load it.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;Make sure it has two constructors (here are mine:&lt;/LI&gt;&lt;/UL&gt;&lt;FONT size=2&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; FerryContext() : &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;base&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;() { }&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; FerryContext(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;StorageAccountInfo&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; info) : &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;base&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(info) { }&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;&lt;/FONT&gt;
&lt;UL&gt;
&lt;LI&gt;These are needed by the PowerShell script but not by my previous service code.&lt;/LI&gt;
&lt;LI&gt;The other customizations are specified in Mark's blog post referenced above.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9906900" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/Azure/default.aspx">Azure</category></item><item><title>MVC and CSS</title><link>http://blogs.msdn.com/mikekelly/archive/2009/10/12/mvc-and-css.aspx</link><pubDate>Mon, 12 Oct 2009 22:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9906324</guid><dc:creator>MikeKelly</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/9906324.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=9906324</wfw:commentRss><description>&lt;P&gt;I've spent some time trying to figure out why my simple MVC site (built on Azure) isn't rendering correctly on my development machine, and of course tracked it down to the CSS file not loading.&amp;nbsp; I spent time playing around with paths, etc., but finally found a simple solution:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;You have to enable "Static Content"&amp;nbsp;for your Internet Information Services for CSS to work on the development machine.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;To do this (on Windows 7),&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Go to Control Panel&lt;/LI&gt;
&lt;LI&gt;Select Programs.&lt;/LI&gt;
&lt;LI&gt;Select "Turn Windows Features on or off"&lt;/LI&gt;
&lt;LI&gt;Scroll down to the box for "Internet Information Services"; expand it&lt;/LI&gt;
&lt;LI&gt;Expand the box "World Wide Web Services"&lt;/LI&gt;
&lt;LI&gt;Expand the box "Common HTTP Features"&lt;/LI&gt;
&lt;LI&gt;Make sure "Static Content" is checked; if not check it.&lt;/LI&gt;
&lt;LI&gt;Hit OK.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;CSS will now work for you.&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9906324" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/Azure/default.aspx">Azure</category></item><item><title>Simple Azure Service Experience</title><link>http://blogs.msdn.com/mikekelly/archive/2009/10/08/simple-azure-service-experience.aspx</link><pubDate>Fri, 09 Oct 2009 00:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9905176</guid><dc:creator>MikeKelly</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/9905176.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=9905176</wfw:commentRss><description>&lt;P&gt;I started a couple of days ago working on my first Azure service and have learned a lot.&amp;nbsp; It's a cliche, but there is a ton of good information on the web on this.&amp;nbsp; One of the challenges is wading through it all and piecing together the great information in one blog (but which leaves out a key part) and the good information in another (which fills in that missing piece).&lt;/P&gt;
&lt;P&gt;A few things that may be obvious, but weren't to me...&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If you're using Azure storage, you want to get the StorageClient API - it makes it a lot easier to deal with the Azure storage REST APIs and provides a framework for wrapping these as normal ADO.NET objects.&lt;/LI&gt;
&lt;LI&gt;I'm planning on using the table storage from both my "worker role" (think traditional background service on Windows) and "web role" (web-based UI) Azure services, so wasn't quite sure how to get that connected.&amp;nbsp; The idea is that the background "worker role" will populate the data which the web role will read.&amp;nbsp; There are a bunch of classes you set up just to enable access to table storage, including:&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;One class per &lt;EM&gt;entitity&lt;/EM&gt; (think of this as like a table in SQL) that models the values in the entity and provides each value as a typed property.&amp;nbsp; This is how rows are delivered to and from the table storage.&lt;/LI&gt;
&lt;LI&gt;One class that provides a &lt;EM&gt;data context&lt;/EM&gt;.&amp;nbsp; which inherits from the Azure StorageClient class &lt;STRONG&gt;TableStorageDataServiceContext&lt;/STRONG&gt;.&amp;nbsp; This is the Azure equivalent of the ADO DataServiceContext class which provides cached state information.&lt;/LI&gt;
&lt;LI&gt;Finally, a class which uses these first two to provide high-level CRUD (create, retrieve, update, delete) methods against the table storage.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;At first, since I was writing the code to populate the tables, I just added these classes to the Azure Worker Role project in my solution, but as I said, I realized this wasn't ideal since I would need to use them from both the worker and the web role.&amp;nbsp; I then came across &lt;A href="http://blog.einbu.no/2009/08/howto-use-windows-azure-table-storage/" mce_href="http://blog.einbu.no/2009/08/howto-use-windows-azure-table-storage/"&gt;Arjan Einbu's blog post&lt;/A&gt; on creating a class encapsulating these which would be shared by worker and web role - doh!&amp;nbsp; Of course that's what I wanted.&amp;nbsp; With a bit of moving around files, I was able to create a XxxServiceData class project (File / New / Project / Windows / Class Library) in my solution which encapsulates just the data access, then reference that from the Worker and Web role code.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Some good links are (in addition to those above):&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Rob Bagby's &lt;A href="http://blogs.msdn.com/bags/archive/2009/04/04/azure-table-storage-the-rest-and-ado-net-data-services-story.aspx" mce_href="http://blogs.msdn.com/bags/archive/2009/04/04/azure-table-storage-the-rest-and-ado-net-data-services-story.aspx"&gt;Demystifying the Code post on Azure storage and ADO.NET&lt;/A&gt;&amp;nbsp;and his also quite good &lt;A href="http://blogs.msdn.com/bags/archive/2009/04/14/azure-application-part-2-access-azure-table-storage.aspx" mce_href="http://blogs.msdn.com/bags/archive/2009/04/14/azure-application-part-2-access-azure-table-storage.aspx"&gt;Demystifying the Code post on the nuts and bolts of using Storage Client&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN class=fn&gt;Maarten Balliauw's&lt;/SPAN&gt; &lt;A href="http://blog.maartenballiauw.be/post/2008/12/09/CarTrackr-on-Windows-Azure-Part-2-Cloud-enabling-CarTrackr.aspx" mce_href="http://blog.maartenballiauw.be/post/2008/12/09/CarTrackr-on-Windows-Azure-Part-2-Cloud-enabling-CarTrackr.aspx"&gt;post on porting his web app CarTrackr to Azure&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9905176" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/Azure/default.aspx">Azure</category></item><item><title>PDC 2009</title><link>http://blogs.msdn.com/mikekelly/archive/2009/09/14/pdc-2009.aspx</link><pubDate>Mon, 14 Sep 2009 10:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9894858</guid><dc:creator>MikeKelly</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/9894858.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=9894858</wfw:commentRss><description>&lt;P&gt;I registered for &lt;A href="http://microsoftpdc.com/" mce_href="http://microsoftpdc.com"&gt;PDC 2009&lt;/A&gt; today, getting in under the wire for the pre-September 15 discount.&amp;nbsp; Looking forward to seeing more about the Windows 7 app features and of course &lt;A href="http://www.microsoft.com/azure" mce_href="http://www.microsoft.com/azure"&gt;Azure&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=9894858" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/pdc/default.aspx">pdc</category></item><item><title>Unix Time and Windows Time</title><link>http://blogs.msdn.com/mikekelly/archive/2009/01/17/unix-time-and-windows-time.aspx</link><pubDate>Sat, 17 Jan 2009 20:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9336289</guid><dc:creator>MikeKelly</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/9336289.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=9336289</wfw:commentRss><description>&lt;P&gt;A little note in Portfolio magazine caught my attention: On Friday, February 13, at 23:31:30, the Unix time value with be 1234567890.&amp;nbsp; This got me thinking about when the Windows time value will reach that serendipitous number, and led to some research on &lt;A href="http://msdn.microsoft.com/" mce_href="http://msdn.microsoft.com"&gt;MSDN&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Time is a complicated topic - part of it is that there are so many different MSDN-documented interfaces that return time, including SQL, Java Script, WBEM, MFC, .NET, etc.&amp;nbsp; I found &lt;A href="http://msdn.microsoft.com/en-us/library/ms724962(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms724962(VS.85).aspx"&gt;this topic&lt;/A&gt; which gives a good overview of the various types of times in Windows.&amp;nbsp; Unlike Unix, where there is pretty much a simple time_t structure that contains a 32-bit signed number.&amp;nbsp; It might seem odd that Unix chooses to reduce the span of time it can represent by half by making the value signed rather than unsigned, but this is an artifact of the baseline used&amp;nbsp;- January 1, 1970.&amp;nbsp; So allowing for negative values allows times prior to 1970 to be represented on Unix (an &lt;A href="http://www.answers.com/topic/unix-time" mce_href="http://www.answers.com/topic/unix-time"&gt;interesting article&lt;/A&gt; about Unix time notes that Unix co-inventor Dennis Ritchies birthtime is the Unix time value -893,400,000).&lt;/P&gt;
&lt;P&gt;The basic idea of representing time on computers is pretty simple - pick a baseline date/time and then count some increment of nanoseconds, milliseconds, or seconds since then as a numerical value.&amp;nbsp; The trick is in picking the baseline, and accounting for all the oddities of leap years, leap seconds, changes in calendar, etc.&amp;nbsp; But basically it comes down to some number of time units from the baseline, so when Portfolio said the Unix time will be 1234567890, it means it will have been 1,234,567,890 seconds since the Unix baseline of January 1, 1970 on February 13 of this year.&amp;nbsp; Boy, how those billion plus seconds just flew by!&lt;/P&gt;
&lt;P&gt;But Windows is more complicated (&lt;EM&gt;natch, &lt;/EM&gt;some would cynically say).&amp;nbsp; MSDN notes: "There are five time formats. Time-related functions return time in one of these formats. You can also use the time functions to convert between time formats for ease of comparison and display. The following table summarizes the time formats.&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH&gt;Format&lt;/TH&gt;
&lt;TH&gt;Type&lt;/TH&gt;
&lt;TH&gt;Description&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;System&lt;/TD&gt;
&lt;TD&gt;&lt;A id=ctl00_rs1_mainContentContainer_ctl01 onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl01',this);" href="http://msdn.microsoft.com/en-us/library/ms724950(VS.85).aspx"&gt;&lt;STRONG&gt;SYSTEMTIME&lt;/STRONG&gt;&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;Year, month, day, hour, second, and millisecond, taken from the internal hardware clock.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;File&lt;/TD&gt;
&lt;TD&gt;&lt;A id=ctl00_rs1_mainContentContainer_ctl02 onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl02',this);" href="http://msdn.microsoft.com/en-us/library/ms724284(VS.85).aspx"&gt;&lt;STRONG&gt;FILETIME&lt;/STRONG&gt;&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;100-nanosecond intervals since January 1, 1601.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Local&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;SYSTEMTIME&lt;/STRONG&gt; or &lt;STRONG&gt;FILETIME&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;A system time or file time converted to the system's local time zone.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;MS-DOS&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;WORD&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;A packed word for the date, another for the time.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Windows&lt;/TD&gt;
&lt;TD&gt;&lt;STRONG&gt;DWORD&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD&gt;The number of milliseconds since the system booted; a quantity that cycles every 49.7 days.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;BR&gt;So what is called here Windows time (and so sounds like the parallel to Unix time) actually is dependent on when you booted your computer - so if you leave your machine running for a bit over two weeks, your Windows time will reach the magic 1234567890 value (actually at 14 days, 6 hours, 56 minutes).&lt;/P&gt;
&lt;P&gt;The System time (which in usage is actually parallel to how Unix uses time_t and what the article is calling Unix time) is a structure on Windows, broken into WORD (16-bit on Win32) values for each component, i.e. hour, minute, etc.&amp;nbsp; The system queries the realtime clock built into the processor and generates this structure from it; how exactly the CPU maintains that value is processor-dependent (part of the BIOS is making that translation).&lt;/P&gt;
&lt;P&gt;So the closest thing to Unix time - the idea of a single number representing actual date and time, and so could reach a "magic value" like 1234567890 - is FILETIME. This is what is stored in the filesystem.&amp;nbsp; I suspect it was created because it is less efficient to just store a SYSTEMTIME structure on disk (since it is composed of eight 16-bit values, or 128 bits of data, while FILETIME is a 64-bit value; doesn't sound like a lot of difference, but when you have millions of files, those bits add up... :))&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ms724284(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms724284(VS.85).aspx"&gt;FILETIME&lt;/A&gt; "contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC)."&amp;nbsp; So here very visibly is the difference between a 32-bit value and a 64-bit value.&amp;nbsp; Remember Unix is counting seconds since January 1, 1970; Windows is counting &lt;EM&gt;nanoseconds&lt;/EM&gt; (a billionth of a second - nine orders of magnitude more precise than the Unix time) since a date over three centuries earlier - and still can store it in a single integer value because it's using a 64-bit value rather than a 32-bit value.&amp;nbsp; The power of exponential growth right there, ladies and gentlemen.&lt;/P&gt;
&lt;P&gt;So&amp;nbsp;when did&amp;nbsp;this 64-bit value reach 1,234,567,890?&amp;nbsp; Well, recall that it is measured in 100 nanosecond intervals, which are a one hundred billionths of a second, and the magic value is roughly a billion - so in fact, Windows FILETIME reached the magic value Unix will reach on Friday February 13 a&amp;nbsp;little more than a one hundred seconds, or about two minutes,&amp;nbsp;after midnight on January 1, 1601.&amp;nbsp; &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9336289" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/vista/default.aspx">vista</category><category domain="http://blogs.msdn.com/mikekelly/archive/tags/development/default.aspx">development</category><category domain="http://blogs.msdn.com/mikekelly/archive/tags/windows/default.aspx">windows</category></item><item><title>Excel Conditional Formatting Against a Goal Value</title><link>http://blogs.msdn.com/mikekelly/archive/2008/12/30/excel-conditional-formatting-against-a-goal-value.aspx</link><pubDate>Wed, 31 Dec 2008 02:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9257773</guid><dc:creator>MikeKelly</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/9257773.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=9257773</wfw:commentRss><description>&lt;P&gt;Today, for a metrics worksheet I'm doing, I had a conditional formatting problem with Excel.&amp;nbsp; I suspect this is a pretty common problem.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I had a column of numbers showing the monthly results for a set of metrics (the rows) for this fiscal year, and I had an annual goal for each metric.&amp;nbsp; I summed up the values across the months that have passed in this FY (our FY starts in July).&amp;nbsp; I hid the columns for the months that haven't come yet.&amp;nbsp; Then I have an annual goal for each metric.&lt;/P&gt;
&lt;P&gt;I want to use conditional formatting to show whether I am on track to meet the metric.&amp;nbsp; An Icon Set format should do nicely, but at first I was puzzled because it looked like I could only use an icon set against the value itself - but in fact, I wanted to compare the value to the goal.&lt;/P&gt;
&lt;P&gt;I realized after playing around a bit that the trick is to add a column for the icon and use a formula in that column to compare the value so far against the goal, and then format that column with the icon set, chosing "Show Icon Only" in the conditional formatting dialog.&amp;nbsp; What I end up with is something like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.romascokelly.com/images/ExcelConditionalFormatExample.JPG" mce_src="http://www.romascokelly.com/images/ExcelConditionalFormatExample.JPG"&gt;&lt;/P&gt;
&lt;P&gt;Because the value in the Total column (I'm not dealing with conditional formatting for the metrics where I'm showing averages) is only for a part of the FY, but the total goal is for the entire year, I need to scale the comparison to say whether we are on track or not.&amp;nbsp; This involves a bit of date arithmetic to figure out how far into the year we are.&amp;nbsp; Here's the formula; this complex parenthesized expression is basically figuring out how far we are into the FY, as a fraction from 0 to 1 (i.e. in the first month, we will be at 1/12).&amp;nbsp; Note that I am using TODAY() to get today's date; if instead, you wanted to make this be a specific date, i.e. the end of the month, you could create another named cell into which you enter the date for which metrics are current and refer to that in this formula instead of TODAY().&lt;/P&gt;
&lt;P&gt;&amp;nbsp;=(((YEAR(TODAY())-YEAR(FYStart))*12+(MONTH(TODAY())-MONTH(FYStart)+1)/12)&lt;/P&gt;
&lt;P&gt;I created a workbook with two named cells, one with the starting date of the Fiscal Year (which I named FYStart) and below it a cell with this formula in it, which I named PercentOfYear.&amp;nbsp; I can then refer to those named cells in formulas elsewhere.&amp;nbsp; This lets me reuse this sheet next year by just changing the FY start date.&lt;/P&gt;
&lt;P&gt;Now to figuring out how far off I am from the goal.&amp;nbsp; For each row,&amp;nbsp;column "N"&amp;nbsp;is the value so far, i.e. the total of the values for all the months that have passed in this FY.&amp;nbsp; The "O" column will contain the icon showing on track or not.&amp;nbsp; The "P" column has the goal.&amp;nbsp; The formula for the icon column (O) is:&lt;/P&gt;
&lt;P&gt;=(N4-PercentOfYear*P4)/(PercentOfYear*P4)&lt;/P&gt;
&lt;P&gt;This scales the entire FY goal to what it should be this month if we are on track (this assumes the metric increases linearly each month).&amp;nbsp; We then subtract the scaled goal from the actual value, which gives us a positive value if we are ahead of the FY goal at this point, a negative number if we are below the goal at this point, and zero if we are right on target for the goal.&amp;nbsp; We then scale how far we are off from the goal by the scaled goal - so for instance, if the metric value is "2" and the goal is "5" and we are in December, we will should be at 2.5; because we are at 2, we are off by .5 or 20% of the scaled goal.&lt;/P&gt;
&lt;P&gt;Finally, we apply conditional formatting to the cells using a custom rule.&amp;nbsp; That looks like this:&lt;/P&gt;&lt;IMG src="http://www.romascokelly.com/images/ExcelConditionalFormatExample2.JPG" mce_src="http://www.romascokelly.com/images/ExcelConditionalFormatExample2.JPG"&gt; &lt;BR&gt;
&lt;P mce_keep="true"&gt;This applies a green icon if the value is zero or positive - i.e. we are on track for the goal; yellow if the value is not less than 25% below the goal at this point; red if we are further below the goal than that.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9257773" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/excel/default.aspx">excel</category></item><item><title>Business Contact Manager and Outlook 2007</title><link>http://blogs.msdn.com/mikekelly/archive/2008/11/26/business-contact-manager-and-outlook-2007.aspx</link><pubDate>Thu, 27 Nov 2008 01:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9145408</guid><dc:creator>MikeKelly</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/9145408.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=9145408</wfw:commentRss><description>&lt;P&gt;My group at work has decided to use &lt;A href="http://office.microsoft.com/en-us/contactmanager/" mce_href="http://office.microsoft.com/en-us/contactmanager/"&gt;Business Contact Manager&lt;/A&gt;&amp;nbsp;(BCM) for tracking engagements we're doing with other product groups here at Microsoft. My team is a sort of internal consulting organization focused on software development processes and tools at Microsoft.&lt;/P&gt;
&lt;P&gt;So I went to setup BCM on my machine to play around with it.&amp;nbsp; It's been a bit of a twisty path, so I thought I'd document some of what I learned in case others run into this.&amp;nbsp; Interestingly, most of the rest of my team was able to set up without encountering this, so it's probably something weird on my machine that is causing these problems.&amp;nbsp; But it's a big world out there, so there probably are other machines that will run into some of these issues.&lt;/P&gt;
&lt;P&gt;I'll also describe how I troubleshot some of these issues and eventually ended up with everything running.&lt;/P&gt;
&lt;P&gt;1. Problem 1 - during install of BCM, I got the error "Setup failed to install the required component Microsoft SQL Server 2005 Express (MSSMLBIZ)".&amp;nbsp; This turned out to be that SQL Server 2005 Express was already installed on my machine (as part of Visual Studio 2008 - I suspect a number of my problems were the result of having installed VS 2008 previously) and a separate install of an unrelated product had been done with a pending reboot needed.&amp;nbsp; I had not rebooted the machine in several days and had forgotten that I had installed whatever the other thing was. When BCM comes along and sees that SQLServer 2005 Express is already installed, it invokes the SQL Server installer to set up the new instance for MSSMLBIZ - but SQL Server install refused to run because there was a pending reboot. Rebooting the computer fixed this one.&amp;nbsp; I found this by running SQL Server 2005 Express install myself (from add/remove programs in control panel) intending to remove SQL Server 2005 Express and let BCM reinstall it.&amp;nbsp; It turns out that would have worked - because I would have rebooted after doing this - but in fact was not necessary.&amp;nbsp; When I ran the SQL Server 2005 Express install from add/remove, it told me it couldn't run because of the pending reboot action - and a lightbulb went off.&amp;nbsp; I realized this was probably why BCM install couldn't run the SQLServer install either.&amp;nbsp; So I rebooted and this one was resolved.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;2. Next problem was the Office 2007 Primary Interop Assemblies (PIAs).&amp;nbsp; These are some glue between Office and .NET applications.&amp;nbsp; They also had previously been installed as part of VS 2008, so again, this shouldn't have been a problem for BCM - it should have gone to install them, seen that they were already there, and just moved on.&amp;nbsp; But there is a problem with the name of the installer file that BCM uses for these PIAs and the name that VS 2008 uses - this is described in more detail at &lt;A href="http://jlchereau.blogspot.com/2008_04_01_archive.html"&gt;http://jlchereau.blogspot.com/2008_04_01_archive.html&lt;/A&gt;.&amp;nbsp; The net effect is that BCM is trying to access O2007PIA.MSI on its installation media for these PIAs, but in fact the file that BCM ships for these is PIARedist.MSI.&amp;nbsp; If I uninstalled the PIAs and reran BCM setup, I'm sure it would work (which is probably why it works for most people), but I didn't want to do that.&amp;nbsp; Instead, I copied the entire installation tree from BCM locally to my %TEMP% directory (I was installing from a network share, but you could also do this from the CD if you're installing from CD) and then in the "OFFICE" subdirectory, I just copied the PIARedist.MSI file and made a copy named O2007PIA.MSI.&amp;nbsp; Now both files were on the installation media, and when BCM install went looking to install the PIAs that were already installed and the installer said, OK, they must have been installed from a file called O2007PIA.MSI - that file was there.&amp;nbsp; Problem resolved.&lt;/P&gt;
&lt;P&gt;3. The next problem was a configuration error on our side - the shared BCM database on our server wasn't set up for all the users to access it.&amp;nbsp; I didn't fix that, but the guy on my team who set up the SQL Server database added our accounts to the SQL Server permissions and that solved that problem.&lt;/P&gt;
&lt;P&gt;4. The final problem was a local database creation problem.&amp;nbsp; BCM uses SQL Server 2005 Express edition to keep a local copy of the database.&amp;nbsp; That way, if you're not able to connect to the server (e.g. you're at home, or on the road) it can still reference and make changes in the database cached locally.&amp;nbsp; Then it syncs these changes when you reconnect.&amp;nbsp; The error I received when I ran the BCM Wizard on starting Outlook after installing BCM was "Database creation was unsuccessful."&amp;nbsp; I figured this was likely a permissions error (since I know SQL Server is running fine - I confirmed that the MSSMLBIZ instance is running by going to Start / Computer, right clicking and selecting "Manage...".&amp;nbsp; From there, I looked at Services and Applications / SQL Server Configuration Manager and I see the SQL Server (MSSMLBIZ) showing as running.&amp;nbsp; I note that it is running under the account "NT AUTHORITY\NetworkService".&amp;nbsp; I went back into Outlook and tried again to to create the offline database (by clicking "OK" in the "Configure database for offline use" wizard screen) and confimed the error still occured.&amp;nbsp; I then went to start / Run and ran "EventVwr" and navigated to the Windows Logs / Application log file.&amp;nbsp; I noticed two recent errors from MSSQL$MSSMLBIZ which is my instance of local SQL Server 2005 Express running.&amp;nbsp; The error was: "CREATE FILE encountered operating system error 5(Access is denied.) while attemptin to open or create the physical file "C:\users\mike\AppData\Local\Microsoft\Business Contact Manager\MSSmallBusinessOutlook_offline.mdf'."&amp;nbsp; So that tells me that SQL Server is having permission problems with the directory C:\users\mike\AppData\Local\Microsoft\Business Contact Manager.&amp;nbsp; This is probably because it's running under NetworkService and that account doesn't have write permission in this directory.&amp;nbsp; I went back to the Start taskbar, selected Run and pasted in "C:\users\mike\AppData\Local\Microsoft" to open the containing folder.&amp;nbsp; I right clicked on the "Business Contact Manager" subfolder in this folder and clicked on Properties, then went to the Security tab.&amp;nbsp; Sure enough, no entries for NetworkService - so it will just inherit permissions based on the group hierarchy.&amp;nbsp; I'm pretty sure NetworkService isn't SYSTEM, and I doubt it's me (which is the next permission list) so it's probably getting either the Everyone or MIKE\Users permissions.&amp;nbsp; I clicked on "Users" and cliked Edit, added "Modify" permission for this group (full disclosure: I have now given every user on my machine write permission into an area of my local profile, but since it's just the BCM folder I'm not too concerned) and OKed out of these.&amp;nbsp; Went back to Outlook, clicked Next in the wizard - and voila, the database is created.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9145408" width="1" height="1"&gt;</description></item><item><title>Don't Forget Those Passports!</title><link>http://blogs.msdn.com/mikekelly/archive/2008/01/15/don-t-forget-those-passports.aspx</link><pubDate>Tue, 15 Jan 2008 19:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7118879</guid><dc:creator>MikeKelly</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/7118879.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=7118879</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;As an experienced international traveler, I am embarrassed to admit that on a trip this weekend, I forgot my passport on an international trip.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;This past weekend was my wife’s 50&lt;SUP&gt;th&lt;/SUP&gt; birthday and we decided to celebrate it on Vancouver Island, at the &lt;/FONT&gt;&lt;A href="http://www.wickinn.com/"&gt;&lt;FONT face=Calibri size=3&gt;Wickinannish Inn&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;We thought enough about the border crossing that we planned to drive up Friday evening and stay just south of the US – Canadian border at the Peace Arch Crossing at Blaine, WA.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We stayed at the Semiahmoo Friday night, and had a wonderful evening.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;On Saturday morning, my wife, Lisa, suddenly looked at me and asked, “Do you have our passports?”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We both quickly realized that despite numerous international trips, and despite having thought enough about the border crossing to want to be close to the border on Saturday AM to avoid any delays, neither of us had remembered the all-important documents.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;A quick check on the &lt;/FONT&gt;&lt;A href="http://www.blainechamber.com/border.html"&gt;&lt;FONT face=Calibri size=3&gt;web&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; showed that Canada doesn’t require a passport for entry, although they do like to have proof of citizenship.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We were able to talk our way past the very friendly Canadian border control agent by admitting we had forgotten our passports and showing our Washington State drivers licenses.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However, we realized we probably would not have such an easy time returning to the U.S.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Thus began a flurry of calls to try to get our passports sent to us in Canada.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Since we weren’t returning to the U.S. until Monday (and it was Saturday morning) we thought this would be no problem.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;We were able to call our next-door neighbors and get them to retrieve the passports from our house.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Now all we needed was for them to FedEx them up to our hotel in Canada to arrive by Monday AM and we were good to return.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Thus began the fun.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;On Bainbridge Island, where we live, there is a UPS store – I called that store and found that because we were talking about an international shipment to Canada, they couldn’t guarantee delivery until Tuesday morning – and the cost would be $86, which seemed high just for an envelope containing two passports, but we needed the passports and would gladly pay it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But Tuesday delivery was a non-starter for us – we have children, and while we had arranged childcare for them through Monday, we were reluctant to extend that another day.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Maybe FedEx could do better – I called the 800 number and found that, yes, they could get them to Canada by noon Monday if we dropped them off at a staffed FedEx facility by 5 PM Saturday.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However, while UPS has such a facility on Bainbridge, FedEx does not – it meant finding someone to get them to Seattle.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Meanwhile, other ideas flew around – could we get someone to just drive them up to the border on Monday and meet us at the duty-free?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Who could do that?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;What about a FAX of the passports – would that do?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The first morning of my wife’s birthday weekend was spent with our friends, Steve and Jody, brainstorming all this.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;We found a neighbor’s daughter who was willing to take them across on the ferry to Seattle to have them&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;sent via FedEx to us – but to where?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Tofino, on Vancouver Island, is pretty isolated (one reason we picked it for this weekend) – could we be sure of the FedEx delivery getting there?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Maybe better to have them delivered to the airport counter for Orca Airways at Vancouver Airport – we were flying Orca from Vancouver to Tofino on Saturday, and flying back on Monday afternoon.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It seemed safer to send them there than the hotel.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However, the counter is usually not staffed until just before their daily flight to Tofino, so what would FedEx do if there was no one there to accept the delivery?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Another call to FedEx – and another wrinkle.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;While FedEx could guarantee delivery by noon to Canadian customs, it could not guarantee deli very beyond that.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;“They could stay a day or two at customs; it just depends,” the FedEx rep told me.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This didn’t seem like a good idea – we could be stuck in Canada waiting for passports to clear customs.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;(An aside – I once waited a long time for a shipment to clear customs in France and learned that there actually is a French verb, &lt;I style="mso-bidi-font-style: normal"&gt;dédouaner&lt;/I&gt;, which means “to get something out of customs” – when a language has an entire verb dedicated to this, you know you’re in trouble…) &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;We finally decided to just try to rely on a color copy of the passport, which our neighbors emailed to us.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Perhaps the customs agents would be able to use the numerous identifying numbers on the color copy – as well as photos of us – to allow us to cross.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;That settled, we drove out to Vancouver airport for our 40 minute flight to Tofino, on the west coast of Vancouver Island.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Thus began the next challenge for this weekend.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;Tofino is often socked in, something that neither the Wick nor the airline told us when we booked this several months ago.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;“So what happens if we can’t land,” we asked.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;“We’ll get you to Nainamo, on the east coast of Vancouver Island, and drive you across – about 2.5 to 3 hours.”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;My wife, who is easily motion sick, turned pale at this – first a bumpy flight in a small turboprop plane, then a nearly three-hour drive across the island?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Let’s hope we can land.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We took off from Vancouver Airport about 12:30 PM, and though the flight was a bit bumpy, we were close to Tofino about 1 PM.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;One of the charming things about these small aircraft is there are no secrets – you can see all the instruments and out the pilot’s windowpane.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I watched as the altimeter descended from nearly 8,000 feet through 4,000 to about 2,500 – and then started rising again.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I also watched the “Distance to Destination” readout change from less than a mile to 70.5 miles – clearly we weren’t landing in Tofino.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;“The weather’s really deteriorated in Tofino,” the co-pilot turned around to tell us.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;“We’re going to try Nainamo, but it doesn’t look good there either – if we can’t do that, we’ll go to Victoria – it’s beautiful in Victoria.”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Victoria – by my reckoning, a good five hour drive from our hotel in Tofino.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Things got bumpier as we flew towards Nainamo, and my wife took full advantage of the airsickness bags provided.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Happy Birthday!&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We finally landed in Victoria about 2:45 – over two hours after leaving Vancouver.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There was no way we were going to get in a car for another five hour ride up to Tofino – in addition to wondering what might happen in two days, when we would return.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;So with the help of our friends, Steve and Jody, we called around to hotels in Victoria and found a beautiful inn – &lt;A class="" href="http://www.brentwoodbaylodge.com/" mce_href="http://www.brentwoodbaylodge.com/"&gt;Brentwood Bay Lodge&lt;/A&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;They offered us a “day of” discount on two rooms with water view.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So we settled in for a relaxing evening and Sunday there; highly recommended place, we'll definitely be back.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;But how to get back from Victoria?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We could ferry from Victoria to Vancouver, but our car was parked at the Vancouver Airport – not at the ferry terminal, 20 miles away.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We’d need another taxi back to the airport.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We got on the phone to &lt;A class="" href="http://www.flyorcaair.com/" mce_href="http://www.flyorcaair.com/"&gt;Orca Airways&lt;/A&gt;, the carrier, and convinced them to change our return flight to come from Victoria – where they dropped us – rather than Tofino, where we were supposed to be.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It was quite nice this morning when we arrived at the small private aviation terminal at Victoria Airport – parked our rental car right out front, walked in and there was the plane sitting right outside.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;No check-in; no security; no hassles.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Looking longingly at the Citation II parked next to our turboprop, I thought, “this is the way to fly.”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Fifteen bumpy minutes later, we were in Vancouver, loading our car – one hour after having departed our Victoria hotel.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Wow!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 3pt 0in"&gt;&lt;FONT face=Calibri size=3&gt;Oh – and the passports?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;When we arrived at the border, we handed over the color copies our neighbors had emailed, along with a driver’s license.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The very friendly US border agent gave us no problem – we got the traditional “Welcome Home!”&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7118879" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/travel/default.aspx">travel</category></item><item><title>HP LaserJet printer hung "processing job"</title><link>http://blogs.msdn.com/mikekelly/archive/2007/12/27/hp-laserjet-printer-hung-processing-job.aspx</link><pubDate>Thu, 27 Dec 2007 21:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6879278</guid><dc:creator>MikeKelly</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/6879278.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=6879278</wfw:commentRss><description>&lt;P&gt;Vista makes it very easy to add a network printer.&amp;nbsp; A friend bought an HP laptop and wanted it set up on her LAN to print to a HP LaserJet 5N printer attached to her desktop.&amp;nbsp; So I went into Visa's 'Add Printer' wizard on the laptop and it discovered the shared printer on the LAN, installed it and said it was installing the driver by querying the printer.&amp;nbsp; So far, so good.&amp;nbsp; But printing always caused the LaserJet to hang with a "Processing Job" message displayed on its LED screen.&amp;nbsp; Only a power cycle on the printer would clear this.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;I tried visiting the HP site, and found this page &lt;A href="http://www.hp.com/cpso-support-new/SDD/main.htm?cc=us&amp;amp;lang=en" mce_href="http://www.hp.com/cpso-support-new/SDD/main.htm?cc=us&amp;amp;lang=en"&gt;http://www.hp.com/cpso-support-new/SDD/main.htm?cc=us&amp;amp;lang=en&lt;/A&gt;&amp;nbsp;which claims to install an ActiveX control that will detect whether the correct driver is installed.&amp;nbsp; I suspected a driver problem, so that seemed just the ticket.&amp;nbsp; It installed and claimed the wrong driver was installed and that it fixed it.&amp;nbsp; I rebooted, reprinted - and no cigar - still "Processing Job".&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;I thought maybe the HP site hadn't installed the right driver after all.&amp;nbsp; Going back to the HP site, and searching manually for the Vista driver for the (discontinued) LaserJet 5N, I found a page that claimed the correct driver ships with Vista and there is no download available.&amp;nbsp; Hmm...&lt;/P&gt;
&lt;P mce_keep="true"&gt;I went to the Printers control panel, right clicked on the printer and selected "Properties" from the "Adminisrator"&amp;nbsp;submenu in the context menu.&amp;nbsp; This showed me that in fact the HP LaserJet 6N driver was installed - not the 5N.&amp;nbsp; Ah ha!&amp;nbsp; So I clicked the "New Driver" button, navigated the control that came up with printer manufacturers listed on the left and model on the right - found the "LaserJet 5N" driver and installed that.&amp;nbsp; Rebooted.&amp;nbsp; And it worked!&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;So the advice - don't believe either HP or&amp;nbsp;Vista if they claim to have found and installed the correct driver.&amp;nbsp; It's like the old journalistic saw: "If your mother says she loves you - check it out."&amp;nbsp; The devil is (usually) in the details - in this case, the difference between a 5N and a 6N.&amp;nbsp; :)&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6879278" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/vista/default.aspx">vista</category></item><item><title>Lost Vista Password</title><link>http://blogs.msdn.com/mikekelly/archive/2007/11/25/lost-vista-password.aspx</link><pubDate>Sun, 25 Nov 2007 19:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6518715</guid><dc:creator>MikeKelly</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/6518715.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=6518715</wfw:commentRss><description>&lt;P&gt;My son has an HP laptop and playing around, changed his password and then couldn't get into his account.&amp;nbsp; There were a number of problems here, any of which we could have fixed had we been paying more attention earlier on (like soon after he got his laptop):&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;We could have &lt;A class="" href="http://support.microsoft.com/kb/930381/" mce_href="http://support.microsoft.com/kb/930381/"&gt;created a password recovery disk&lt;/A&gt; (which can also be on a USB keyfob) - but we didn't.&lt;/LI&gt;
&lt;LI&gt;We could have created a secondary administrative account on the machine with a password known only to me, his dad - but we didn't.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;We've now done both of these things since we were able to restore access to the machine under his previous password.&amp;nbsp; But it was a bit of a trick to get access under the previous password.&amp;nbsp; I figured we were going to have to reinstall Vista, using the File and Settings transfer program to first grab his old settings and files, and then reinstall all the programs - probably a 3-4 hour undertaking.&amp;nbsp; But then I had another thought.&lt;/P&gt;
&lt;P&gt;The key here was using Vista's &lt;A class="" href="http://windowshelp.microsoft.com/Windows/en-US/Help/9f6d755a-74bb-4a7d-a625-d762dd8e79e51033.mspx" mce_href="http://windowshelp.microsoft.com/Windows/en-US/Help/9f6d755a-74bb-4a7d-a625-d762dd8e79e51033.mspx"&gt;System Restore&lt;/A&gt; feature. The exact steps will probably vary on your machine (and this is from my memory on his HP laptop, having just done this) but roughly what we did was:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Harangue him for a few hours to try to remember his password, try different variations (with and without caps lock on, for instance) and try omitting characters he might have thought he typed when he changed the password but didn't.&amp;nbsp; That didn't work. :)&lt;/LI&gt;
&lt;LI&gt;Reboot the machine and press F11 while it's booting - on HP machines, this gets into the "recovery console" which is thoughfully put on the system disk in a separate partition by HP.&lt;/LI&gt;
&lt;LI&gt;Select to restore the system (note: not restore to it's original factory condition - that will reformat your main partition and wipe out your files, which we really wanted to avoid).&lt;/LI&gt;
&lt;LI&gt;Chose to reset to an early restore point - in his case, there was a restore point just four days old.&amp;nbsp; Vista creates these restore points regularly.&amp;nbsp; The only thing he had done in the last four days was reset his password, so I thought there was a chance that Vista might reset the old password along with the restore point.&amp;nbsp; I wasn't sure it would, but I thought it was worth a try.&lt;/LI&gt;
&lt;LI&gt;It took about ten minutes for Vista to do this and it then rebooted - and he was thrilled that he was able to log in with his old password!&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;I've used System Restore in other cases to get rid of really wierd behavior, and it always works like a charm. This is yet another use.&lt;/P&gt;
&lt;P&gt;Oh, yeah, and we then created a secondary administrative account on the machine.&amp;nbsp; Do that right now if you have a laptop with just one admin account - then squirrel away the password somewhere safe at home and you'll thank yourself one day.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6518715" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/vista/default.aspx">vista</category></item><item><title>Windows C++ Exception Handling</title><link>http://blogs.msdn.com/mikekelly/archive/2007/10/11/windows-c-exception-handling.aspx</link><pubDate>Thu, 11 Oct 2007 20:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5403003</guid><dc:creator>MikeKelly</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/5403003.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=5403003</wfw:commentRss><description>Good post on how to see the stack when an exception is thrown on Windows at &lt;A href="http://blogs.msdn.com/slavao/archive/2005/01/30/363428.aspx"&gt;http://blogs.msdn.com/slavao/archive/2005/01/30/363428.aspx&lt;/A&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5403003" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mikekelly/archive/tags/development/default.aspx">development</category></item><item><title>Update on Windows XP Install over Windows Server 2003</title><link>http://blogs.msdn.com/mikekelly/archive/2007/10/11/update-on-windows-xp-install-over-windows-server-2003.aspx</link><pubDate>Thu, 11 Oct 2007 20:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5402992</guid><dc:creator>MikeKelly</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mikekelly/comments/5402992.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mikekelly/commentrss.aspx?PostID=5402992</wfw:commentRss><description>&lt;P&gt;I wrote about most of the issues I encountered with installing Windows XP on a machine that previously had Windows Server 2003 on it (as part of Windows Small Business Server) in the previous post.&amp;nbsp; But there was one more wrinkle I thought I would call out since others may run into this.&lt;/P&gt;
&lt;P&gt;The XP install ran fine and at some point near the end, it rebooted - I think at this point most of the setup was done and it was "starting Windows for the first time..." as it says.&amp;nbsp; But on reboot, I got a blank screen.&amp;nbsp; I waited for 5, 10, 15 minutes - and it became clear that that screen was going to be black forever.&amp;nbsp; So I did what the clinically insane do - tried again.&amp;nbsp; Redid Windows XP setup (I was watching a football game during this, so it's not like I was sitting there the whole time and it only takes about thirty minutes...)&amp;nbsp; And of course, the same thing happened - black screen after reboot.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;At this point -&amp;nbsp; you'd think I'd learn to do this earlier, wouldn't you? - I stopped to think about what might be happening and I remembered that this machine had both a built-in video controller (on board - Intel Graphics blah blah blah) and a separate video card that I'd installed.&amp;nbsp; Unplugged video cable from the onboard video to the separate card - &lt;EM&gt;et voila&lt;/EM&gt;, as they say.&amp;nbsp; Windows had on its own decided to use the &lt;STRONG&gt;other&lt;/STRONG&gt; video card, even though it used the onboard video during setup. Go figure.&amp;nbsp; Thought I'd write this up in case this happens to you - if you have multiple video out ports, make sure Windows isn't talking to one you didn't think it was before giving up and pulling out your hair.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5402992" width="1" height="1"&gt;</description></item></channel></rss>