<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.wintellect.com/CS/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>Wintellog</title><link>http://www.wintellect.com/CS/blogs/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>NetMassDownloader 1.5 Has Complete Support for VS 2008 SP1</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/08/31/netmassdownloader-1-5-has-complete-support-for-vs-2008-sp1.aspx</link><pubDate>Sun, 31 Aug 2008 04:30:48 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6991</guid><dc:creator>jrobbins</dc:creator><slash:comments>6</slash:comments><description>&lt;p&gt;Now that the .NET Reference Source Code for .NET 3.5 SP1 has made it up to Microsoft's servers, Kerem Kusmezer and  I updated &lt;a href="http://www.codeplex.com/NetMassDownloader"&gt;NetMassDownloader&lt;/a&gt; to support populating your symbol server cache directory with all the source code and symbols. Microsoft did some tweaks to the debugger with SP1 and the symbols are expected to be in a MicrosoftPublicSymbols directory under your symbol cache in order to download the reference source files in the debugger. I also cleaned up the program output, fixed a problem where NetMassDownloader wasn't delete temporary files correctly, and handled the case where the download PDB files have source server information but is missing the HTTP download info.
&lt;/p&gt;&lt;p&gt;If you've used a prior version of NetMassDownloader, it's probably best if you delete your cache directory and start fresh. Also note that NetMassDownloader 1.5 assumes that if you are using VS 2008 you have applied SP1. VS 2005 and CodeGear are still supported as they were before.
&lt;/p&gt;&lt;p&gt;If you're like me and want to use both the reference source code server (&lt;a href="http://referencesource.microsoft.com/symbols"&gt;http://referencesource.microsoft.com/symbols&lt;/a&gt;) as well as Microsoft's normal public PDB server (&lt;a href="http://msdl.microsoft.com/download/symbols"&gt;http://msdl.microsoft.com/download/symbols&lt;/a&gt;) so you can get the public symbols for the operating system and the other things you debug, you'll find that the debugger downloads the symbols to both your symbol cache directory and the MicrosoftPublicSymbols directory underneath it.  Since not everyone uses both Microsoft symbol servers, I didn't add the support to NetMassDownloader to copy the symbol files from the MicrosoftPublicSymbols to the main symbol server cache. I manually copied the folders after running NetMassDownloader and the debugger is happy.
&lt;/p&gt;&lt;p&gt;With the recursive directory support in NetMassDownloader, it's trivial to grab all the .NET 3.5 SP1 reference source. Here's the command line I used on Vista x64 to grab both the 32-bit and 64-bit .NET binaries:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;Netmassdownloader –d c:\windows\Microsoft.NET –d "c:\Program Files\Reference Assemblies"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;With an empty symbol cache, it'll take a while so you might want to let the command run over lunch. If it's still running when you get back, there's always Solitaire.
&lt;/p&gt;&lt;p&gt;As always, please file bug reports and features request as the &lt;a href="http://www.codeplex.com/NetMassDownloader"&gt;NetMassDownloader&lt;/a&gt; page on CodePlex.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6991" width="1" height="1"&gt;</description></item><item><title>So You Want To Set a Windows Journal Recording Hook on Vista? It’s Not Nearly as Easy as You Think!</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/08/30/so-you-want-to-set-a-windows-journal-recording-hook-on-vista-it-s-not-nearly-as-easy-as-you-think.aspx</link><pubDate>Sat, 30 Aug 2008 01:37:09 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6982</guid><dc:creator>jrobbins</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;Eons ago in Internet years, I wrote what proved to be a very popular tool, &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc301453.aspx"&gt;Tester&lt;/a&gt;, the latest edition appeared in my second book. With it you could record and playback UI automation scripts. While Tester wasn't perfect, the number of companies using it as their automation tool of choice was very gratifying. In fact, there were so many, I probably should have made a business out of updating and supporting the tool. At least it was very gratifying to know I'd produced something useful!
&lt;/p&gt;&lt;p&gt;Since I rarely do any UI development, I don't need Tester that much myself. Today, I had a need so grabbed the code with the thought of giving it a quick dusting off so I could use it on Vista x64. After 20 minutes of some tweaks and adjustments to move the application to 64 bits, the real work started. My debug builds were always asserting because &lt;a href="http://msdn.microsoft.com/en-us/library/ms644990.aspx"&gt;SetWindowsHookEx&lt;/a&gt; was returning false when my recorder application tried to set the WH_JOURNALRECORD  &lt;a href="http://msdn.microsoft.com/en-us/library/ms644983(VS.85).aspx"&gt;journal recorder&lt;/a&gt; to record all the mouse and keystrokes. The last error value was access denied so I simply thought that I needed to run the recorder process with elevated rights. If only it were that easy, because I still got the access denied when running with high integrity as well.
&lt;/p&gt;&lt;p&gt;It turns out lots of &lt;a href="http://forums.microsoft.com/msdn/showpost.aspx?postid=133455&amp;amp;siteid=1&amp;amp;sb=0&amp;amp;d=1&amp;amp;at=7&amp;amp;ft=11&amp;amp;tf=0&amp;amp;pageid=0"&gt;people&lt;/a&gt; were reporting the same issue, but all the reports were from way back in the Vista beta days. After several hours of searching I'd run across several articles where there were discussion about how the journal recording hook was used by key loggers and other nefarious programs so Microsoft was making changes in Vista to close that hole. While I was all in favor of closing the hole, how in the heck was I going to get my simple recorder application to work? 
&lt;/p&gt;&lt;p&gt;According to some of the forum reading it looked like people got journal recording working by turning off UAC. That was totally unacceptable to me as I have written &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/07/10/in-defense-of-vista-and-the-challenges-facing-windows-7.aspx"&gt;before&lt;/a&gt; I like UAC. Anyway, turning off UAC just for journal recording was the easy way out and made me feel dirty. I dug in for battle and fired up the search engines hard. As I never found this information in one spot, I thought I'd put it here in case someone else wants to use a journal recording hook.
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Your program's manifest has to be set to requireAdministrator for the execution level. Because a journal recording hook falls into the accessibility portion of windows, the uiAccess must be set to true. Here's how you'll set those up in the Linker, Manifest File section of the property page:&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/083008_0145_SoYouWantTo1.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;The output binary must be digitally signed with a valid certificate. Read about how and where you can get reasonably priced certificates &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/12/21/code-signing-it-s-cheaper-and-easier-than-you-thought.aspx"&gt;here&lt;/a&gt;.
&lt;/li&gt;&lt;li&gt;You won't be able to run your application where you built it. This was the hardest item for me to figure out and it wasn't until I ran across a random forum &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2614000&amp;amp;SiteID=1"&gt;entry&lt;/a&gt; that provided the missing clue. You must copy the binary that sets the recording hook into a directory under the C:\Program Files directory. That's the only acceptable place for accessibility applications to run. By copying the binary, you can run the application and get your hook set. Of course, if you are going to distribute your application, you'll need to have your installation put it in the C:\Program Files directory and not allow the user to change it.
&lt;/li&gt;&lt;li&gt;You won't be able to start your binary under the debugger even if it's properly located in the C:\Program Files and you've started the environment with elevated rights. Visual Studio will give you the following error:&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/083008_0145_SoYouWantTo2.png" alt="" /&gt;&lt;br /&gt;Unfortunately, clicking on the Help button brings you to a "Information Not Found" page so it's a mystery. For you WinDBG users out there, the uiAccess set to true bothers WinDBG as well if you try to start the application from the debugger:&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/083008_0145_SoYouWantTo3.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;To debug your journal recording application, you'll have to start it and attach the debugger. You'll want to make sure your application gives you a chance to attach before you start doing a lot of work.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Since this took three hours of my life to figure out I thought I'd share the solution in case someone else needed the information. While it would have been nice to have all this information in the &lt;a href="http://msdn.microsoft.com/en-us/library/ms644983(VS.85).aspx"&gt;journal recorder&lt;/a&gt; documentation, I'm really glad Microsoft shut down the security hole!&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6982" width="1" height="1"&gt;</description></item><item><title>Photosynth</title><link>http://www.wintellect.com/CS/blogs/rrobinson/archive/2008/08/28/photosynth.aspx</link><pubDate>Thu, 28 Aug 2008 14:01:28 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6976</guid><dc:creator>r2 musings - rants, raves, and research (mostly on .NET topics) from rik robinson</dc:creator><slash:comments>0</slash:comments><description>For those that missed the announcement last week, PhotoSynth is live and after a pretty bumpy start looks like you can at least play around with it now.&amp;#160; I've managed to load two of my sets of photos from a trip to the High Sierras a couple of years ago.&amp;#160; It definitely still has its bumps as I had to cancel and restart the synth several times as it would hang indefinitely.&amp;#160; I didn't get really high &amp;quot;synthy&amp;quot; scores as I wasn't taking the photos with PhotoSynth in mind at the...(&lt;a href="http://www.wintellect.com/CS/blogs/rrobinson/archive/2008/08/28/photosynth.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6976" width="1" height="1"&gt;</description></item><item><title>devLink Conference</title><link>http://www.wintellect.com/CS/blogs/rrobinson/archive/2008/08/27/devlink-conference.aspx</link><pubDate>Wed, 27 Aug 2008 13:29:59 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6973</guid><dc:creator>r2 musings - rants, raves, and research (mostly on .NET topics) from rik robinson</dc:creator><slash:comments>0</slash:comments><description>This past weekend a few of us Wintellectuals made the trek Atlanta to Murfreesboro TN to present at the annual devLink conference.&amp;#160; I really can't say enough about the level of professionalism and obvious preparation that went into devLink .&amp;#160; John Kellar , Tommy Norman , and Leanna Baker and the entire team that made it happen are well deserving of accolades for their accomplishment.&amp;#160; The conference was held on the campus of Middle Tennessee State University which was also perfectly...(&lt;a href="http://www.wintellect.com/CS/blogs/rrobinson/archive/2008/08/27/devlink-conference.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6973" width="1" height="1"&gt;</description></item><item><title>All Roads Lead to Silverlight 2</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2008/08/25/all-roads-point-to-silverlight-2.aspx</link><pubDate>Mon, 25 Aug 2008 21:53:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6968</guid><dc:creator>jprosise</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt;It may be the dog days of summer, but things are hopping here at Wintellect. We just finished another successful &lt;A class="" title=Devscovery href="http://www.devscovery.com/" target=_blank&gt;Devscovery Redmond&lt;/A&gt;, where attendees soaked in lots of Silverlight love and also made a run on the Microsoft company store. If you've never attended a Devscovery in Redmond, it's worth the price of admission just to shop in the company store at employee prices. A big thanks to Microsoft for hosting Devscovery on campus and making all the Wintellect and Infragistics folks and the attendees feel right at home.&lt;/P&gt;
&lt;P&gt;We see many of the same faces each year at Devscovery, and this year was no exception. Long-time Devscovery devotee George Handlin made the trip to the west coast and brought along&amp;nbsp;his pal&amp;nbsp;Mik. I think Mik is the first moose (?) to ever attend Devscovery, but I'm not sure. We didn't charge Mik admission. Animals are free at Devscovery.&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Jeff, George, and Mik" alt="Jeff, George, and Mik" src="http://www.wintellect.com/CS/photos/prosise/images/6967/500x375.aspx"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I got tickled during a 1-on-1 (special sessions we do at Devscovery in which attendees schedule 1-on-1 time with the speakers)&amp;nbsp;from one of our Russian attendees. She&amp;nbsp;shared with me that&amp;nbsp;"both of my sons are developers. One works for Microsoft.&amp;nbsp;The other programs Linux. We call him our little communist." It was all I could do to not bust out laughing.&lt;/P&gt;
&lt;P&gt;Silverlight 2 successfully withstood the Beijing Olympics and is well on the road to RTM. I'm not at liberty to divulge dates, but Microsoft has publicly said that Silverlight 2 will ship this year, and I'm confident that they'll make it. Most of my work these days involves Silverlight, and I can honestly say it's been a long time since I've had this much fun as a developer. One of the things I've been doing is writing new code samples and porting some of my Silverlight 1.0 samples to Silverlight 2. The latest port (pictured below) is my Silverlight Magnifier sample. You can download a version written against Beta 2 &lt;A class="" title="Magnifier 2" href="http://www.wintellect.com/Downloads/Magnifier2.zip"&gt;here&lt;/A&gt;. Just click the left mouse button over the page to display the magnifying glass and drag the mouse to move the glass. Pretty cool effect, especially given that it's done without WPF's handy VisualBrush. This sample and others like it will be featured in my next Wicked Code column in &lt;A class="" title="MSDN Magazine" href="http://msdn.microsoft.com/en-us/magazine/default.aspx" target=_blank&gt;MSDN Magazine&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Magnifier 2" style="WIDTH:368px;HEIGHT:375px;" height=375 alt="Magnifier 2" src="http://www.wintellect.com/CS/photos/prosise/images/6966/368x375.aspx" width=368&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a lot of trips coming up, including one to the PDC in October, where I'll be doing a &lt;A class="" title="Silverlight Precon at PDC" href="http://www.microsoftpdc.com/Agenda/Preconference.aspx#creating-rich-internet-applications-with-silverlight" target=_blank&gt;precon on Silverlight 2&lt;/A&gt; on Sunday, Oct. 26. If you come to L.A. for the PDC, I'd love to see you at the precon. I have some fun stuff to show and you never know what surprises may await you. It's Halloween week, and we might be able to talk Richter into wearing a cute ballerina costume. He modeled a bikini for us at this year's company retreat and it was...well...memorable. Male software developers generally don't look very good in bikinis, but Jeffrey is exceptional in more ways than one.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6968" width="1" height="1"&gt;</description></item><item><title>AsyncEnumerator and SynchronizationContext</title><link>http://www.wintellect.com/CS/blogs/jeffreyr/archive/2008/08/21/asyncenumerator-and-synchronizationcontext.aspx</link><pubDate>Thu, 21 Aug 2008 12:01:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6953</guid><dc:creator>JeffreyR</dc:creator><slash:comments>1</slash:comments><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT face="Times New Roman" size=3&gt;I am presenting at Wintellect’s &lt;/FONT&gt;&lt;A href="http://www.devscovery.com/"&gt;&lt;FONT face="Times New Roman" size=3&gt;Devscovery conference&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt; this week. At this conference, the attendees are able to set up 1-on-1 sessions with any of the speakers. One attendees wanted to ask me some questions about my Power Threading’s AsyncEnumerator class. They were using this class in a Windows Form project of theirs and I thought it would be best if I discussed what is going on in this forum.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT face="Times New Roman" size=3&gt;In .NET 2.0, the CLR team added a &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.threading.synchronizationcontext.aspx"&gt;&lt;FONT face="Times New Roman" color=#0000ff size=3&gt;System.Threading.SynchronizationContext class&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;. This class provides a way for an application model (like Windows Forms, WPF, or ASP.NET) to describe its threading model (such as how to marshal work to a Windows Forms/WPF GUI thread). My AsyncEnumerator class takes advantage of this automatically so that iterator code executes on the GUI thread for Windows Forms and WPF apps. For ASP.NET, this allows my AsyncEnumerator to associate the client’s culture and IPrincipal information to thread pool thread that will eventually call into your iterator code.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;When you construct an AsyncEnumerator, its constructor grabs a reference to the SynchronizationConext-derived object associated with the calling thread and saves this reference in a private field. Then, whenever my AsyncEnumerator calls into your iterator, it always does this via the SynchronizationContext-derived object. For Windows Forms/WPF, this means that your iterator gets invoked by queuing a request on your GUI thread’s message queue. This means, that your GUI thread MUST pump messages in order for your iterator to execute its code. The Devscovery attendee was calling AsyncEnumerator’s Execute method (instead of the preferred BeginExecute method) from their application’s GUI thread. The Execute method blocks until the iterator completes running and since this method was called form the GUI thread, the iterator was unable to run and so a deadlock occurred. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;This behavior is by-design as the whole purpose of the AsyncEnumerator is to execute code asynchronously and, in a GUI application, to keep the UI responsive. In fact, I always discourage calling Execute at all. The only reason why the AsyncEnumerator even offers the Execute method is for testing or to demonstrate functionality. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;However, I’d also like to point out that the AsyncEnumerator offers a SyncContext property and so, the Windows Forms/WPF developer can construct an AsyncEnumerator and then set its SyncContext property to null before calling Execute. This will allow thread pool threads (as opposed to the GUI thread) to call into your iterator – just make sure the code in your iterator doesn’t try to update any GUI controls. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;Finally,&amp;nbsp; I’d like to point out that an iterator can change its AsyncEnumerator’s SyncContext property within the iterator itself. This can be useful if you have some code in the iterator that can be run on any kind of thread and some code that must be run on the GUI thread (to update UI controls). In fact, in order to support this better, I’ve added a feature to the August 20&lt;SUP&gt;th&lt;/SUP&gt;, 2008 version of the library. With this new version, within an iterator, you can change the SyncContext property and execute a “yield return 0”.&amp;nbsp; When you do this, I will internally call ThreadPool.QueueUserWorkItem to have a thread pool thread continue your iterator. However, the thread pool thread will execute your iterator via the current SyncContext property. &amp;nbsp;Another user wanted this feature so that they could improve the performance of their iterator code where some code needs to update the GUI and some other code needs to just do some compute-bound work (which doesn’t have to be on the GUI thread). &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6953" width="1" height="1"&gt;</description></item><item><title>Random Thoughts on Visual Studio 2008 SP1</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/08/12/random-thoughts-on-visual-studio-2008-sp1.aspx</link><pubDate>Tue, 12 Aug 2008 05:23:04 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6920</guid><dc:creator>jrobbins</dc:creator><slash:comments>6</slash:comments><description>&lt;p&gt;As the world knows, Visual Studio 2008 SP1 is &lt;a href="http://blogs.msdn.com/bharry/archive/2008/08/11/vs-vsts-tfs-net-3-5-sp1-is-shipping.aspx"&gt;out&lt;/a&gt; so start your download engines. I've installed it on one machine so far and I thought I'd mention a few things I found interesting.
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The install took exactly an hour for me and was far better than the Visual Studio 2005 SP1 torture. After the first Next click I just let it run and didn't have to baby sit it. I installed off the &lt;a href="http://go.microsoft.com/fwlink/?LinkId=122095"&gt;ISO&lt;/a&gt; version as I didn't want to take any chances. I wanted all the bits with me as I was more afraid of a partial or corrupt install with the "piece at a time" download. The machine I installed on had the Team Suite edition so I knew I'd need everything anyway.
&lt;/li&gt;&lt;li&gt;While many Microsoft folks have blogged about their team's particular adds to SP1, you can find the complete list of added features and bug fixes in Knowledge Base article &lt;a href="http://support.microsoft.com/kb/945140"&gt;945140&lt;/a&gt;. Based on the number of features added, the version number really needs to change. However, I'm not complaining!
&lt;/li&gt;&lt;li&gt;All my .NET applications certainly feel much faster because of the .NET Framework 3.5 SP1 speedups. I wish I would have taken some startup timing statistics because even WPF applications start reasonably quickly now.
&lt;/li&gt;&lt;li&gt;Visual Studio has a new icon! I guess that will make it easier for us to tell the difference between Dev 9 and the rapidly approaching Dev 10.&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/081208_0530_RandomThoug1.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;Is there a story behind the option dialog UI change? Notice that the checkboxes are now flat instead of 3-d.&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/081208_0530_RandomThoug2.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;I love the new debugger option to cancel Symbol Server PDB file downloads. This is a great option on slower connections:&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/081208_0530_RandomThoug3.jpg" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;Another favorite debugger feature is that on managed code the debugger looks when you are stepping into a method and if it's a small property or operator, it turns the step into a step over. Now you don't have to apply the &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggerstepthroughattribute.aspx"&gt;DebuggerStepThroughAttribute&lt;/a&gt; to all your one line methods.
&lt;/li&gt;&lt;li&gt;Now the debugger knows about the &lt;a href="http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx"&gt;.NET Reference Source Code&lt;/a&gt; out of the box. Unfortunately, as far as I can tell, Microsoft has not posted the correct PDB files for the .NET 3.5 SP1 release. There are PDB files up on the public symbol servers, but they do not contain any of the Source Server indexing. The previous version of System.PDB was 6.68 MB. Now it's 595 KB and definitely contains none of the appropriate reference strings. Also, my &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/02/06/download-all-the-net-reference-source-code-at-once-with-net-mass-downloader.aspx"&gt;NetMassDownloader&lt;/a&gt; just returns Bad Request when trying to access the code. I'll let you know what I find out from Microsoft.
&lt;/li&gt;&lt;li&gt;My personal favorite new feature is that Step Into Specific has finally made it to managed code. Say you have a line of code like the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;OuterMethod ( InnerMethod ( ) );&lt;br /&gt;&lt;/span&gt;Prior to SP1, if you did a Step Into, you always stepped into InnerMethod whether you liked it or not. Now, if you want to step into OuterMethod, right click on the line and behold the magic of Step Into Specific:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/081208_0530_RandomThoug4.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;The TFS updates are totally dreamy. Brian Harry has the complete list &lt;a href="http://blogs.msdn.com/bharry/archive/2008/04/28/team-foundation-server-2008-sp1.aspx"&gt;here&lt;/a&gt;.
&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6920" width="1" height="1"&gt;</description></item><item><title>Silverlight Controls and the Visual State Manager</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2008/08/07/silverlight-controls-and-the-visual-state-manager.aspx</link><pubDate>Thu, 07 Aug 2008 13:30:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6906</guid><dc:creator>jprosise</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;If you're interested in writing custom controls for Silverlight but need a step-by-step tutorial to get you started, check out my latest column in MSDN Magazine: &lt;A class="" title="Craft Custom Controls for Silverlight 2" href="http://msdn.microsoft.com/en-us/magazine/cc721611.aspx" target=_blank&gt;Craft Custom Controls for Silverlight 2&lt;/A&gt;. I had a load of fun writing this one and wrote it because there is so precious little information out there about Silverlight custom controls. The model is pretty simple once you get your arms around it, but as I said in the article, it can seem pretty confusing if you've never built controls for Silverlight or WPF before.&lt;/P&gt;
&lt;P&gt;My explanation of Silverlight's Visual State Manager (VSM) in the article was somewhat light because 1) magazine space is limited, and 2) I had to scramble at the last minute to&amp;nbsp;add VSM converage. The article had already been edited and was about to go to print when I learned about the VSM. We considered just leaving the article as-is (as-was?) and putting a big "Beta 1" warning label on the first page. But I couldn't sleep at night knowing the article would be obsolete before it was printed. So, with the support of&amp;nbsp;my editors at MSDN Magazine,&amp;nbsp;I stretched the deadline and did some 11th-hour rewriting. Now that the article is live, I'm really glad I did.&lt;/P&gt;
&lt;P&gt;If you'd like to learn more about the VSM, let me suggest an EXCELLENT 4-part tutorial by Silverlight UX guru Karen Corby entitled &lt;A class="" title="Visual State Manager" href="http://scorbs.com/2008/06/11/parts-states-model-with-visualstatemanager-part-1-of" target=_blank&gt;Parts &amp;amp; States Model with VisualStateManager&lt;/A&gt;. Karen's prose is sweet as honey. I wish I could write like Karen!&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6906" width="1" height="1"&gt;</description></item><item><title>Just Where Did Those Performance Counters Go?</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/08/01/just-where-did-those-performance-counters-go.aspx</link><pubDate>Fri, 01 Aug 2008 21:53:41 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6893</guid><dc:creator>jrobbins</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;On a particular Vista machine, I was setting up a PerfMon view to monitor the .NET memory performance of an application and ran into a problem. The.NET Memory # Bytes in All Heaps Performance Counter wasn't in the list of performance counters. That was quite odd so I checked if that Performance Counter was there in &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;Process Explorer&lt;/a&gt; by adding it to the main window display. Since Process Explorer has all the Performance Counter names hard coded, that would tell me if the problem was with the Performance Counter Library itself as PerfMon builds the list dynamically.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/080108_2201_JustWhereDi1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;After pressing OK, Process Explorer showed no values at all in the columns. That pretty much proved that there was something seriously wrong with the Performance Counters on that particular machine. Without those performance counters it's pretty hard to do monitoring and performance tuning! Comparing two machines side by side, I noticed that the problem machine was missing a metric ton of other Performance Counters.
&lt;/p&gt;&lt;p&gt;A few quick internet searches got me to the Microsoft KB article &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;300956"&gt;300956&lt;/a&gt;, which discusses how to manually rebuild Performance Counter Libraries. If you read over that article, you start to get very scared very quickly because it tells you to manually replace files on the machine with the files from the installation CD, a bunch of manual registry editing, and so on. Fortunately, at the end of the article, they mention that running LODCTR /R from an elevated prompt (note the /R uppercase is required) will rebuild the Performance Counter Library including third party and extension performance counters.
&lt;/p&gt;&lt;p&gt;Figuring I had nothing left to lose, I gave it a run. After shutting down PerfMon and Process Explorer, I restarted both and was very happy to see all the Performance Counters reappeared. After a big sigh of relief, I thought I'd write up what worked in case you are missing some Performance Counters. Of course, this advice comes with the usual Internet warning: Worked on My Machine ™.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6893" width="1" height="1"&gt;</description></item><item><title>Debugger Settings Visual Studio Add In– Easily Copy Breakpoints between Machines</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/07/21/debugger-settings-visual-studio-add-in-easily-copy-breakpoints-between-machines.aspx</link><pubDate>Mon, 21 Jul 2008 02:45:18 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6858</guid><dc:creator>jrobbins</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;So there I was knee deep in a great debugging challenge. On one machine, I had set up somewhere around 15 advanced breakpoints that had all sorts of properties set such as conditionals, hit counts, and so on. As I was feeling like I was getting close to the bug, I wanted to set up an identical debugging session with those breakpoints on another machine. While I could have manually recreated all those advanced breakpoints, I tried to cheat. Your breakpoints, along with Watch window variables, window layout, and other session state items are stored in a hidden file, &amp;lt;Solution Name&amp;gt;.SUO. I copied that file over to the other machine and opened the solution file. Visual Studio promptly crashed.
&lt;/p&gt;&lt;p&gt;The .SUO file is the bane of your existence. Nearly all the problems you encounter with Visual Studio are the result of a corrupt .SUO file. Sadly, it seems all it takes to corrupt the .SUO file is your heart beating. In other words, whenever you have Visual Studio crash, refuse to debug, or behave strangely it's the .SUO file's fault. Whenever anyone asks me about strange Visual Studio behavior, my instantaneous response is "Delete the .SUO!" When it comes to Visual Studio hygiene, deleting the .SUO file is right up there with cancer screenings.
&lt;/p&gt;&lt;p&gt;As I am tired of manually setting my breakpoints again on other machines and sick of the .SUO corruption bug I decided to solve it once and for all. I wrote a Visual Studio 2008 add-in, Debugger Settings, which makes it easy to save and restore your solution's breakpoints. It also makes it easy to create and apply different breakpoint sets on a solution, which is something I've wanted in Visual Studio for a long time. You can download the code for Debugger Settings &lt;a href="http://www.wintellect.com/CS/files/folders/6857/download.aspx"&gt;here&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Debugger Settings is at version 1.0 and I would love to hear your feedback. Please note that I've only done my testing on Visual Studio Team Suite, but Professional Edition and above should have no trouble. Debugger Settings will not work with the Expression versions as they do not support extensibility.
&lt;/p&gt;&lt;p&gt;Debugger Settings currently only saves and restores breakpoints but does work with both .NET and native C++ projects. I would love to be able to get and set the Watch window variables, but it does not look like that can be done without extensive reverse engineering. However, if there's enough demand, I might be persuaded to give it a go. Another feature I'd like to add is the ability to save and restore custom Exceptions added to the debugger's Exception dialog. &lt;strong&gt;Please&lt;/strong&gt; let me know if you have other features or find problems.
&lt;/p&gt;&lt;h2&gt;Installing Debugger Settings
&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;After downloading the zipped code, unzip it keeping the directory structure intact.  
&lt;/li&gt;&lt;li&gt;You may not need to do this step, but I've always had problems with Visual Studio not loading my add-ins correctly if I put them in the defalt Documents\Visual Studio 2008\AddIns directory. That may be because I've got my Documents directory in a domain redirected folder. If you get a FileNotFoundException with a code of 0x80131047 attempting to load Debugger Settings, you'll want to add the &amp;lt;unzip dir&amp;gt;\DebuggerSettings\Debug directory to the Add-in file paths by going to the Options dialog, Environment, Add-in/Macros Security dialog:&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/072108_0252_DebuggerSet1.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;Because Visual Studio has a problem finding assemblies in the same directory as the .AddIn file, you'll need to edit &amp;lt;unzip dir&amp;gt;\DebuggerSettings\Debug\DebuggerSettings.AddIn and in the Assembly elements, enter the complete path to DebuggerSettings.DLL.
&lt;/li&gt;&lt;li&gt;Restart Visual Studio.
&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;Using Debugger Settings
&lt;/h2&gt;&lt;p&gt;Debugger Settings works mainly in the background, but you can set its options in the Options dialog.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/072108_0252_DebuggerSet2.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;By default, Debugger Settings will save any breakpoints you have set when you close a solution to a .DebuggerSettings file in the same directory as the solution. When you open a solution, Debugger Settings will look for the .DebuggerSettings file and reset any breakpoints that were not set from an existing .SUO file.
&lt;/p&gt;&lt;p&gt;Debugger Settings adds four commands to the IDE, which should be self explanatory: 
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;DebuggerSettings.RestoreFromFile
&lt;/li&gt;&lt;li&gt;DebuggerSettings.RestoreSolution
&lt;/li&gt;&lt;li&gt;DebuggerSettings.SaveToFile
&lt;/li&gt;&lt;li&gt;DebuggerSettings.SaveSolution
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;As an example, to save a set of breakpoints to a named file, you'll go to the Command window and execute the DebuggerSettings.SaveToFile command. If you don't specify a filename as the parameter to the command, you'll be prompted for the filename with the File Save dialog.
&lt;/p&gt;&lt;p&gt;There are four types of breakpoints that Visual Studio supports: &lt;a href="http://msdn.microsoft.com/en-us/library/k80ex6de.aspx"&gt;file&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/15d1wtaf.aspx"&gt;function&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/fyt8fbcy.aspx"&gt;address&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/350dyxd0.aspx"&gt;data&lt;/a&gt; (for native C++ development). My original intent was to support all the breakpoint types, but when you attempt to set an address or data breakpoint through the Visual Studio automation model, the breakpoint is immediately set to disabled. Hopefully a future version of Visual Studio will let us automate setting those two breakpoints. The good news is that file and function breakpoints are the huge majority of breakpoints. I implemented the work to set address and data breakpoints in case this gets fixed in the upcoming Visual Studio 2008 Service Pack 1.
&lt;/p&gt;&lt;p&gt;One other limitation of the Visual Studio automation model is that there's no way to know if a &lt;a href="http://msdn.microsoft.com/en-us/library/232dxah7.aspx"&gt;Tracepoint&lt;/a&gt; has the message disabled. The &lt;a href="http://msdn.microsoft.com/en-us/library/envdte80.breakpoint2.message(VS.80).aspx"&gt;Breakpoint2.Message&lt;/a&gt; property is always set to the default string value. Thus, if you have a Tracepoint set to execute a macro, but not output the trace string, as shown below, Debugger Settings will enable the Print a message checkbox simply by setting the Message property.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/072108_0252_DebuggerSet3.png" alt="" /&gt;
	&lt;/p&gt;&lt;h2&gt;Wrap up
&lt;/h2&gt;&lt;p&gt;The implementation of Debugger Settings is very straight forward. The only moderately interesting technique I used was to work around the fact that the &lt;a href="http://msdn.microsoft.com/en-us/library/envdte.breakpoints.add(VS.80).aspx"&gt;Breakpoints.Add&lt;/a&gt; method does not support setting Tracepoints directly. Visual Studio's code metrics reports only 467 lines of code so far in Debugger Settings. If I can figure out how to get the Watch window variables, I'm sure the code size will grow exponentially.
&lt;/p&gt;&lt;p&gt;Let me know either in comments to this entry or through email (john at this company's domain) if you find Debugger Settings helpful or find problems. Also, any feature requests strongly considered.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6858" width="1" height="1"&gt;</description></item><item><title>Me Meme</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2008/07/12/me-meme.aspx</link><pubDate>Sat, 12 Jul 2008 23:05:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6826</guid><dc:creator>jprosise</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;&lt;A class="" title=Petzold href="http://www.charlespetzold.com/blog/blog.xml" target=_blank&gt;Charles Petzold tagged me&lt;/A&gt;&amp;nbsp;and challenged me to answer the following questions as part of a software development meme that's going around.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How old were you when you first started programming?&lt;/STRONG&gt;&lt;BR&gt;I had a couple of programming courses in college, but I didn’t really start programming until I got out of school and bought my first computer (a Commodore 64). I was 23 at the time.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How did you get started in programming? &lt;/STRONG&gt;&lt;BR&gt;Writing games for the Commodore 64. I tried to sell some of them, but was never successful.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What was your first language?&lt;/STRONG&gt; &lt;BR&gt;BASIC. I had a class in BASIC in college, I believe at the end of my freshman year.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What was the first real program you wrote? &lt;/STRONG&gt;&lt;BR&gt;As best I recall, a game for the Commodore 64. It was called “747” and was essentially a 2-dimensional version of Lunar Lander. I also wrote a version of it for the TI-59 calculator and got in a bit of trouble when scientists and engineers at Oak Ridge National Laboratory where I worked started playing it for hours at a time. For a short time, productivity at ORNL probably dropped 10%. :-)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What languages have you used since you started programming? &lt;/STRONG&gt;&lt;BR&gt;BASIC, FORTRAN, 6502/6510 assembler, 8086/8088 assembler, Pascal, C, C++, and C#.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What was your first professional programming gig? &lt;/STRONG&gt;&lt;BR&gt;Writing an accounting program for a local cable company. I did the work without a signed contract and wrote the whole thing (which mimicked the look of Lotus 1-2-3) in assembly language—in part because I wanted it to be lightning fast, and in part because I didn’t really know any high-level languages. I never got paid for the job. But I did learn that you couldn’t make a living turning out contract software using assembly language. That was about the time Turbo Pascal started making a splash, so I went out and bought a copy and spent the next couple of years writing lots of Pascal.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;If you knew then what you know now, would you have started programming? &lt;/STRONG&gt;&lt;BR&gt;Absolutely. If I weren’t a programmer, I’d have to get a job.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;If there is one thing you learned along the way that you would tell new developers, what would it be? &lt;/STRONG&gt;&lt;BR&gt;Be curious and inquisitive. Learn new stuff. I run into so many developers who are so beset with deadlines that they can’t—or don’t—take time to look up and see what’s happening in the world around them. For example, if you’re a Web developer right now, you should be learning about Silverlight. Lack of time isn’t an excuse. If you’re not playing with new technologies at night, then you’re a worker bee rather than a difference maker. Be passionate! If you can’t be passionate, then maybe you’re in the wrong line of work.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What's the most fun you've ever had ... programming? &lt;/STRONG&gt;&lt;BR&gt;Probably working a job a couple of years ago with Kenn Scribner. We had an impossible job to do with an impossible deadline and a team of two to do it. We worked crazy hours for two months building a cool site with ASP.NET and ASP.NET AJAX (then known as “Atlas”) and didn’t get the final functional requirements until a few hours before the go-live deadline. But it worked, and it had never even been tested against the production database it was designed to go against. When it comes to hard-core trench warfare, there’s no one I’d rather go into battle with than Kenn. Send the guy an e-mail at 2:00 a.m. and if you haven’t heard back by 2:01, his house is probably on fire.&lt;/P&gt;
&lt;P&gt;A close second was writing DOS utilities for PC Magazine in the 1980s. I met some amazing people back then (Bill Machrone, Paul Somerson, Neil Rubenking, Charles Petzold, Phillipe Kahn, Steve Ballmer, and Bill Gates, to name a few) and really got a feel for what our industry was all about. I’d work all day as an engineer, then rush home and put on my programmer’s cap and work on my latest utility. As soon as I’d finish one, I’d start on the next, and PC Magazine would pay for as many as I could write. I paid off my first house that way. More importantly, I ultimately realized that I had more passion (and talent) as a programmer than as an engineer. Giving up engineering was the scariest thing that I ever did, but it was also the smartest.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;So Who's Next? &lt;/STRONG&gt;&lt;BR&gt;I tag…Kenn Scribner!&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6826" width="1" height="1"&gt;</description></item><item><title>Paraffin 1.04 – A New Switch and Easier Updates</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/07/11/paraffin-1-04-a-new-switch-and-easier-updates.aspx</link><pubDate>Fri, 11 Jul 2008 22:42:19 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6822</guid><dc:creator>jrobbins</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;If you're using &lt;a href="http://wix.sourceforge.net"&gt;WiX&lt;/a&gt; 2.0, my Paraffin tool can help you automate some of your setup chores. To read more about Paraffin, see the three part article, &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/10/18/wix-hints-for-new-users-part-1-of-3.aspx"&gt;Part 1&lt;/a&gt;, &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/10/19/wix-the-pain-of-wix-part-2-of-3.aspx"&gt;Part 2&lt;/a&gt;, and &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/10/21/wix-a-better-tallow-paraffin.aspx"&gt;Part 3&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Thanks to Matthew Goos who sent me the patch, there's a new –dirref when creating the initial .WXS file. That allows you specify the DirectoryRef element Id value. The default is INSTALLDIR.
&lt;/p&gt;&lt;p&gt;When updating an existing file, I now allow you to specify both –ext and –direXclude switches so you can add additional extensions and directories to ignore. Any new ignored extensions or directories are added into the output file comment section so they are there the next time you update.
&lt;/p&gt;&lt;p&gt;Thanks to all of you who have downloaded Paraffin. If you're using Paraffin, please let me know as I'm curious if others find it useful. Numerous people have asked if there's a WiX 3.0 compatible version on Paraffin. Right now there isn't but I'll update Paraffin to support WiX 3.0 as soon as the WiX team declares a stable 3.0.
&lt;/p&gt;&lt;p&gt;Grab the latest Paraffin &lt;a href="http://www.wintellect.com/cs/files/folders/4332/download.aspx"&gt;here&lt;/a&gt;. As always, let me know if there are any features you'd like to see or bugs that need squashing.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6822" width="1" height="1"&gt;</description></item><item><title>Microsoft, Open Source, and the Meaning of Life</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2008/07/11/microsoft-open-source-and-the-meaning-of-life.aspx</link><pubDate>Fri, 11 Jul 2008 06:29:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6813</guid><dc:creator>jprosise</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;Jeff Atwood wrote a &lt;A class="" title="Coding Horror" href="http://www.codinghorror.com/blog/archives/001144.html" target=_blank&gt;great blog post&lt;/A&gt; about why Microsoft can't use open source in their products. Jon Galloway wrote a &lt;A class="" title="Jon Galloway" href="http://weblogs.asp.net/jgalloway/archive/2007/05/02/why-microsoft-can-t-ship-open-source-code.aspx" target=_blank&gt;complementary post&lt;/A&gt; providing some specifics from a Microsoft insider explaining why Microsoft can't use open source. One of Jon's salient points is as follows:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Let's say Microsoft took my advice and shipped Paint.NET as a Windows Vista Ultimate Extra. Unbeknownst to Microsoft - or even the Paint.NET project leads - a project contributor had copied some GPL code and included it in a patch submission (either out of ignorance or as with malice aforethought). Two years later, a competitor runs a binary scan for GPL code and serves Microsoft with a lawsuit for copyright infringement. Microsoft is forced to pay eleventy bajillion dollars and damages. Perhaps even worse, they're hit with an injunction which prevents selling the offending application, which requires recalling shrinkwrapped boxes and working with computer vendors who've got the software pre-installed on computers in their inventory. All for shipping a simple paint program.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;This "nightmare scenario," as Jon calls it, is more real than you might think. In my various roles as a Microsoft contractor and Wintellect cofounder, I have been involved, directly or indirectly, in a handful of lawsuits lodged against Microsoft over the years. And some of them have blown my mind. A few years ago, Wintellect took on the expert witness role when a gentleman sued Microsoft claiming that he invented Minesweeper and Microsoft stole it from him. The plaintiff wanted a royalty for every copy of Windows ever sold with Minesweeper! You can imagine how this went over with the brass at Microsoft.&lt;/P&gt;
&lt;P&gt;Developers at Microsoft often joke that Microsoft has more attorneys than developers, or that "there's an attorney for every programmer." It's not quite true, but it sometimes seem as if it is. I personally know of three groups at Microsoft that wanted to use controls from the AJAX Control Toolkit in their projects and were told by Legal that they couldn't since the Toolkit is now open-source and contains code not written by Microsoft. Is Legal just being stodgy? Not given the long history of frivolous lawsuits filed against Microsoft by people hoping Microsoft will throw them some cash to go away. That's one attribute of Bill Gates that I've always admired: when he thinks he's right, he'd rather spend a million dollars defending his position than one dollar in hush money.&lt;/P&gt;
&lt;P&gt;It would be nice if Microsoft &lt;EM&gt;could&lt;/EM&gt; use open source. But given today's legal climate, there's no way that they--or any other company that sells software--can afford to.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6813" width="1" height="1"&gt;</description></item><item><title>In Defense of Vista and the Challenges Facing Windows 7</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/07/10/in-defense-of-vista-and-the-challenges-facing-windows-7.aspx</link><pubDate>Thu, 10 Jul 2008 06:13:45 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6803</guid><dc:creator>jrobbins</dc:creator><slash:comments>18</slash:comments><description>&lt;p&gt;Perception is everything. That applies to everything in life and certainly applies to Vista. It doesn't take much web searching to find plenty of commentary indicating that Vista has not been well received and is often downright hated. In a lot of ways, I think Vista's been given a bad rap, and my opinion is that it is quite a bit better than it gets credit for. In this article I want to talk about what I think Microsoft did right with Vista. Is it perfect?--of course not, but no software ever is. Additionally, I want to address where I think many of the Vista problems are coming from. Finally, I want to also discuss what I see are the challenges Microsoft faces with Win7 given the Vista perception and how Microsoft can negate them. 
&lt;/p&gt;&lt;p&gt;Before I start, I need to say that I'm definitely not either a marketing person or much of a business person. I'm software developer who's bet my whole career on developing for Microsoft operating systems. I started with DOS 5.0 and switched to Windows 3.0 as soon as it came out. While some of you will say that makes me old, I prefer to think that means I have a long term perspective on Microsoft and its position in the developer mindshare. As a reminder, these opinions are my personal opinions. 
&lt;/p&gt;&lt;p&gt;Vista, especially after SP1, is definitely better than Windows XP. Every time I have to use Windows XP or Server 2003, I find myself really missing some of the features and abilities I've grown to love in Vista. As I was reading yet another screed against Vista, I jotted down the six key things I find invaluable about Vista. There are many more, but these are the ones that are important to me as a user and developer.
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;&lt;strong&gt;User Access Control (UAC)
&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;The most important point Vista has is that it is the most secure operating system Microsoft has ever released. The reason for that is UAC finally keeps people from running with administrator credentials by default. Having run as a non-admin on XP and Server 2003 for nearly nine years, I'm much happier than I was being forced to use the RUNAS tricks. I can honestly say I've never found the UAC pop ups annoying or too frequent. 
&lt;/p&gt;&lt;p&gt;While many people have complained that Microsoft should have implemented something like UNIX security, I think UAC is the best compromise for the reality of the Windows world. Microsoft has to deal with a ton of poorly written software from third party developers who assumed everyone was an admin just like they were. While some of this fault lies with Microsoft, a majority of it belongs to developers who won't or can't follow the design guidance. Microsoft has been issuing recommendations and steps for years on how to correctly write software, but developers certainly haven't been listening. 
&lt;/p&gt;&lt;p&gt;What always bothers me is when I see someone recommending that you turn off UAC. If you turn off UAC and run all processes with administrator rights, you deserve all the viruses and slowdowns you'll get. Microsoft does a good deed working to make the OS secure and these "experts" go off and completely ruin the security. I wish Microsoft had not allowed UAC to be turned off.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;strong&gt;Mobile Computing
&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;Another Vista feature that makes my life better is that mobile computing finally works consistently and reliably. Back when I had Windows XP and Windows 2000 on my laptops, it was always an adventure opening a sleeping laptop. You just never knew if it was going to wake up. With Vista on multiple laptops, it's just works.  
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;strong&gt;Search on the Start Menu
&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;The search in the Start menu is simply brilliant. I've become addicted to it and whenever I go back to Windows XP or Server 2003, I'm always stumbling over how to open files or start programs. The OS now gets out of my way and doesn't interrupt my thoughts nearly as much.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;strong&gt;Ink Input
&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;As a Tablet PC fanatic, I love how Vista has made ink and the pen first class input for the OS compared to how it seemed to always be a tacked on feature in previous releases. I work best by writing things down by hand and Vista's trainable handwriting recognition means I easily get 98% to 99% accuracy when searching for things in my beloved OneNote. It's very sad how few people have gotten to use a Tablet PC because Bill Gates is right: a pen is a wonderful way to interact with a computer.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;strong&gt;Better Scalability
&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;In my opinion, Vista scales better than previous Microsoft operating systems. In the past, I was always in the habit of shutting down applications unless I was actively using them. As a developer, I always gave most of the machine to development tools because the more programs you had running the slower everything got. With Vista, I'm rarely shutting anything down and running tons more applications. Right now on this Vista x64 machine there are five instances of Visual Studio 2008, five PowerShell windows, Winamp with &lt;a href="http://www.soundspectrum.com/g-force/index.html?src=home"&gt;G-Force&lt;/a&gt;, three Internet Explorer sessions, OneNote, Outlook, Word, Process Explorer, and those are the just the open windows. I do more on a machine than 95% of users do, and Vista handles it easily.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;strong&gt;Fewer Reboots
&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;Finally, I never reboot. What's the old developer answer to everything on Windows? Reboot. Back on Windows 2000, I rebooted three to five times a day. On Windows XP, I generally rebooted every day. With Vista, I only seem to reboot on patch Tuesday. Both my desktops and notebooks running Vista go weeks between reboots.
&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;There are many other positives to Vista, such as Media Center, and so on. Having felt Vista was pretty good, I wanted to give it credit given all the negative reports floating around. I'm definitely not discounting the bad press, because a lot of it is true. What I want to turn to now is where I think the blame lies for the perceptions around Vista.
&lt;/p&gt;&lt;p&gt;Many of the problems with Vista have been entirely self-inflicted by Microsoft. From the beginning, they "over promised and under delivered." What it looks like to me is that almost nothing we were promised at the 2003 Longhorn PDC was actually delivered. The stream of announcements saying this feature and that feature were being cut started the Vista perception long before it ever shipped. I know I'm stating the obvious here, but I think it's one of the major issues that affects perception with Vista.
&lt;/p&gt;&lt;p&gt;The whole "&lt;a href="http://seattlepi.nwsource.com/business/352442_vista23.html"&gt;Vista Capable&lt;/a&gt;" fiasco certainly didn't help. The story is that Microsoft labeled computers with Intel integrated graphic chips as able to run Vista, when they clearly could not. (Am I the only one who thinks it's ironic that Microsoft did this to help out Intel, but Intel decides to repay Microsoft by refusing to &lt;a href="http://bits.blogs.nytimes.com/2008/06/25/et-tu-intel/index.html?ref=technologyhttp://bits.blogs.nytimes.com/2008/06/25/et-tu-intel/index.html?ref=technology"&gt;upgrade&lt;/a&gt; its corporate machines to Vista? Wow!) My father got stuck with one of these machines from a major manufacturer and even I couldn't get Vista running well on it. The only sliver of good that would come out of this is if Microsoft really learns a lesson.
&lt;/p&gt;&lt;p&gt;While everyone's taken Microsoft to task over Vista, part of the blame also belongs to the computer Original Equipment Manufacturers (OEMs) such as &lt;a href="http://www.yorkspace.com/2006/04/38"&gt;Dell&lt;/a&gt;, HP, Toshiba, and Lenovo. It's not like the manufacturers didn't have sufficient warning Vista was coming, but many of the problems people attribute to Microsoft are the direct fault of bad drivers for just about all &lt;a href="http://blog.seattlepi.nwsource.com/microsoft/archives/141343.asp"&gt;devices&lt;/a&gt;. Add in the horrible out-of-box experience you have with your average computer that comes with Vista installed and it's no wonder Vista looks bad. 
&lt;/p&gt;&lt;p&gt;Most of you reading this are developers. What do we do when we get a new machine? Completely wipe it out and reinstall the OS. We're fortunate enough to have things like our MSDN subscriptions so we have the real OS DVDs we can use along with the technical expertise to get things working. Your average person is scared to death to do that because they don't know how to get rid of the garbage on the machine so they suffer with it. Even the machine has a backup partition where they can reinstall the OS, that image contains all the garbage the user wants to get rid of in the first place. I'm annoyed that Microsoft has allowed this to happen.
&lt;/p&gt;&lt;p&gt;At least there's something average users can do today to avoid this mess: buy Apple hardware. I've &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/02/15/vista-x64-on-a-mac-pro-totally-awesome-dude.aspx"&gt;blogged&lt;/a&gt; about how I put Vista x64 on my Mac Pro long before it was officially supported by Apple. Based on the traffic and comments in that entry, there are quite a few people doing the same thing because they want to control the machine and not just deal with the garbage from traditional PC manufactures. 
&lt;/p&gt;&lt;p&gt;You'll see in a second why Apple makes the best Vista machines, but first compare my experience with the Mac Pro with the &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/03/24/a-squeaky-clean-thinkpad-x60-tablet-with-no-craplets.aspx"&gt;hell&lt;/a&gt; I had to go through with my Lenovo X60 Tablet PC. As a super experienced Windows developer who has done everything from drivers out on Windows, it took me eight hours to figure out what was the minimum set of driver software I needed to use the machine. Why can't Lenovo (or Dell, or HP) give me a single install that puts on &lt;strong&gt;&lt;em&gt;nothing&lt;/em&gt;&lt;/strong&gt; but the minimum drivers necessary? Apple can do it, why can't the others? I sent a bill to Lenovo for my time getting the machine in the state that it should have been delivered. Unfortunately, I have never heard anything back. Maybe I should turn them over to a collection agency. In Lenovo's favor, they have started allowing us to uninstall some, but not all, of the garbage with their latest machines.
&lt;/p&gt;&lt;p&gt;What makes Vista x64 so stable and wonderful on my Apple Mac Pro is that all the core drivers &lt;strong&gt;come from Microsoft out of the box&lt;/strong&gt;. If you can avoid any drivers from a manufacturer and just use those in the Microsoft install, you'll have much better luck because they are so much better tested. I highly recommend never installing any drivers from Windows update that come from any manufacturer. Yes, that includes video manufacturers. Based on my experience over the years I think little or no driver testing is done outside Microsoft. If Microsoft includes it with the OS, it's been really tested and you can trust it.
&lt;/p&gt;&lt;p&gt;So this is where we are with Vista today, but Microsoft is hard at work on Windows 7. Microsoft will finally have to deliver "Wow" when they ship Windows 7. They have to under promise and totally over deliver in order to remove the perception problems with the operating system. This is going to be hard, but if any company can do it, Microsoft can. They have great people; they just need to be turned loose.
&lt;/p&gt;&lt;p&gt;In my opinion, there are two key things that must be at the forefront for Windows 7 development. The first is that Microsoft has to seriously crack down on the OEMs.  They've tried to do this in the past with the Windows Logo program, but it's basically a joke. For the first time Windows Logo must be something with teeth that ensures that drivers and user mode software works correctly. I feel Microsoft must require that every computer manufacturer delivering Windows 7 includes the Windows 7 install disk and a single install that installs &lt;strong&gt;nothing&lt;/strong&gt; but the minimum drivers necessary to make the machine work.  
&lt;/p&gt;&lt;p&gt;In order to ensure the drivers for everything are solid and workable, Microsoft has to spend some of that pile of cash they have to help anyone developing a driver to get the driver right. This could mean continuing to force more drivers into user mode or it could mean providing even more developer support. It will definitely include developing testing resources to ensure the drivers are beat to death and earn the improved Windows Logo before they can be shipped. It's obvious the device manufacturers are not doing sufficient testing, so Microsoft will have to help them do it.
&lt;/p&gt;&lt;p&gt;In the final part of the OEM crackdown, Microsoft also must completely own the initial out-of-box experience for the operating system. Based on how bad it was when I initially booted my Lenovo, where there were actual ads when I logged in the first time, there's no way anyone will think anything favorable about Microsoft. Those initial impressions are critical, and Microsoft can't trust them to anyone else.
&lt;/p&gt;&lt;p&gt; The other thing that Microsoft needs to do with Windows 7 is to target &lt;strong&gt;today's&lt;/strong&gt; hardware, not the top of the line hardware for 2010 when it's expected to ship. The relentless focus of the whole development effort needs to be on speed. The average user should go "Wow! I installed Windows 7 on my machine and it feels so much faster now." That's what it will take to completely eliminate the "Vista's a big fat pig" perception that exists today. 
&lt;/p&gt;&lt;p&gt;Even though I make my living with Windows, I use OS X on a Mac Book Pro for basically one application: iPhoto. I've found nothing on Windows that works as well as it does. I'm not a professional photographer; I just enjoy taking pictures of my vacations and life. iPhoto does exactly what I need to make my photo management simple and easy. I've been using OS X since 10.1 so I've seen a few operating system upgrades from Apple. Each upgrade of the OS &lt;strong&gt;always&lt;/strong&gt; feels faster and seems to do more with less memory. With Windows and Vista today you just know that you have to buy a new computer in order to make the operating system work as advertised. This is Microsoft's last chance to change the perception, so it's absolutely critical.
&lt;/p&gt;&lt;p&gt;One of the hard lessons I've learned in my many years of Microsoft operating systems development is "small code is good code." At the World Wide Developer's Conference in June, 2008, Apple announced &lt;a href="http://www.apple.com/macosx/snowleopard/"&gt;Snow Leopard&lt;/a&gt;, OS X 10.6. You can read more about the feature list in Snow Leopard at &lt;a href="http://www.roughlydrafted.com/2008/06/23/ten-big-new-features-in-mac-os-x-snow-leopard/"&gt;Roughly Drafted&lt;/a&gt;. What's most interesting to me is that Steve Jobs specifically said that the features are for developers and not the end user.
&lt;/p&gt;&lt;p&gt;At first I thought the features in Snow Leopard were interesting, and then word trickled out about the shrinking size of applications under Snow Leopard. The following chart, with full credit to Roughly Drafted, really caught my attention.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/071008_0620_InDefenseof1.jpg" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Apple's doing many things to shrink down the binaries, but it's blindingly obvious that they are focusing on making everything fast and efficient. That's exactly what Microsoft has to do with Windows 7 to keep in the game. The rumors are that the same version of OS X will run on a small iPhone as well as a maxed out Mac Pro desktop. If that's the case, Microsoft needs to be very worried.
&lt;/p&gt;&lt;p&gt;Microsoft really has their work cut out for them with Windows 7. Vista is actually quite good, but the general perception is such that they have to execute to perfection in order to eliminate the negativisms thrown their way. Microsoft has responded very well in the past when they have real competition. With Apple's OS X market &lt;a href="http://www.informationweek.com/news/software/operatingsystems/showArticle.jhtml?articleID=208802203"&gt;share&lt;/a&gt; nearly 8%, it's high time for the Windows team and executive management to unleash the creative forces inside Microsoft.
&lt;/p&gt;&lt;p&gt;I'm very curious what other developers feel about Vista and what the challenges are for Windows 7. Do you disagree with my good assessment of Vista? What do you think Microsoft needs to deliver with Windows 7? Write in the comments or your own blog entry.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6803" width="1" height="1"&gt;</description></item><item><title>Software Development Meme</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/07/10/software-development-meme.aspx</link><pubDate>Thu, 10 Jul 2008 05:44:02 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6801</guid><dc:creator>jrobbins</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;So Charles Petzold &lt;a href="http://www.charlespetzold.com/blog/2008/07/Software-Development-Meme.html"&gt;tagged&lt;/a&gt; me for this Software Development Meme and did that hurt. Just kidding. &lt;span style="font-family:Wingdings;"&gt;J&lt;/span&gt; It's the first time I've been tagged since I was like five years old. Anyway, here goes:
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;How old were you when you first started programming? 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;26. Yes, I was a really late bloomer. In fact, that's positively decrepit in the computer world. I'm amazed they even let me use a computer at that age.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;How did you get started in programming? 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;As my first job was Special Operations Communications Sergeant (AKA a &lt;a href="http://www.goarmy.com/JobDetail.do?id=30"&gt;Green Beret&lt;/a&gt;) the only civilian skills I had qualified me as a night watchman or a member of Tony Soprano's mob crew. Fortunately, I got hired as a manual laborer at an environmental research firm who gave me more than enough rope to hang myself. I needed to track ambient air sampling canisters I was shipping out so I wrote a big Lotus 123 macro driven spreadsheet to help. My bosses were impressed with it and kept giving more and more programming work to do.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What was your first language? 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;English, which I learned that as a child. Oh, you meant computer programming language, sorry. That would be &lt;a href="http://www.sas.com/"&gt;SAS&lt;/a&gt; when I was at the environmental company doing statistical analysis for Non Methane Organic Compound (NMOC) research.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What was the first real program you wrote? 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In college at &lt;a href="http://www.ncsu.edu/"&gt;NCSU&lt;/a&gt;, I wrote an embedded debugger for an Intel 8051 CPU for the Computer Organization and Logic 311 (Electrical Engineering for CS majors), the "death" class in the CS program. That's what sparked my interest in debuggers and solid code.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What languages have you used since you started programming? 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;SAS, Lotus 123, Quattro Pro, Turbo Pascal, x86 Assembler, Visual Basic, C, C++, x64 Assembler, C#, and VB .NET.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What was your first professional programming gig? 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;While in college, I had a full time software engineering job where I wrote a Windows 3.0 GUI application for the Center for Disease Control so AIDS researchers could share information better. It was one of the most motivating projects I ever worked on.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;If you knew then what you know now, would you have started programming? 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Absolutely! It sure beats getting shot at in the jungle. I feel extremely fortunate that I got started before Windows took over the world and I was able to ride that wild train. I was extremely lucky and was able to start my 32-bit development career the day Windows NT 3.1 Beta 1 shipped in 1992, which made me one of the first outside Microsoft doing NT development. I think that bet paid off.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;If there is one thing you learned along the way that you would tell new developers, what would it be? 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Learn the insides! If you don't know how the environment you're using works, you have zero hope of understanding how to effectively use it. By knowing how things fit together makes it much easier to figure out when things go wrong as well.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What's the most fun you've ever had ... programming? 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Pretty much every time I help solve a bug that has someone stuck. I just get such a thrill out of digging in and fixing a horrific problem. That intensity and focus while you're working with others on hard problems is pure joy.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;So Who's Next? 
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I shall tag my fellow Wintellectuals: Keith Rome, Steve Porter, Sergio Loscialo, Rik Robinson, and Andy Hopper. 
&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6801" width="1" height="1"&gt;</description></item><item><title>Hear My Interview on Debugging</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/07/09/hear-my-interview-on-debugging.aspx</link><pubDate>Wed, 09 Jul 2008 05:03:44 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6798</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&lt;a href="http://polymorphicpodcast.com/about/"&gt;Craig Shoemaker&lt;/a&gt; recently interviewed me about my favorite topic, debugging, of course, for &lt;a href="http://pixel8.infragistics.com/shows/debug.aspx"&gt;Pixel 8&lt;/a&gt;. We had a great time on the interview and I even got to tell one of my favorite debugging war stories. We also talked about all the parts of .NET that every developer should know. Head on over to &lt;a href="http://pixel8.infragistics.com/shows/debug.aspx"&gt;Pixel 8&lt;/a&gt; and grab the download for your Zune/iPod/MP3 Player and hear me laugh a lot.
&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6798" width="1" height="1"&gt;</description></item><item><title>More on Regular Expressions</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/06/30/more-on-regular-expressions.aspx</link><pubDate>Mon, 30 Jun 2008 22:27:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6762</guid><dc:creator>jrobbins</dc:creator><slash:comments>7</slash:comments><description>&lt;P&gt;The always enjoyable Jeff Atwood wrote an excellent &lt;A href="http://www.codinghorror.com/blog/archives/001016.html"&gt;discussion&lt;/A&gt; about regular expressions that everyone should read. Having seen many times where a developer will write a full blown parser instead of a regular expression, it's critical every developer spend a little time learning regular expressions. It goes without saying that the more code you write the more bugs you have. Regular expressions aren't too hard, but like anything else us developers deal with, you do need to take the time to learn the basics so you can scale that learning curve. I wanted to chime in with a few additional thoughts on regular expression that have helped me and mention something extremely important I thought Jeff left out. &lt;/P&gt;
&lt;P&gt;While there are references and documentation on the web about learning regular expressions, absolutely nothing tops Jeffrey E. F. Friedl's book &lt;A href="http://www.amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/0596528124/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1214861249&amp;amp;sr=8-1"&gt;Mastering Regular Expressions&lt;/A&gt;. This is a topic you need to spend some time thinking about to ensure you really have that "aha!" moment of understanding. While it's sad in today's Internet world no one seems to read books anymore, if you don't read Jeffrey's book, you'll be doing the equivalent of sky diving without a parachute. Playing with regular expressions will be fun, but eventually you will be in extreme pain. &lt;/P&gt;
&lt;P&gt;Like learning any technology, it helps to see examples. Jeffrey's book is full of examples, but to see how others have solved many problems using regular expressions, I've always liked &lt;A href="http://www.regexlib.com/"&gt;RegExLib.com&lt;/A&gt;. It's a great list of all sorts of regular expressions, many of which you can use directly. More importantly, you can see all sorts of tips and tricks. My one complaint with RegExLib.com is that they don't follow Jeff Atwood's advice and apply good white spacing and comments in the actual regular expressions. &lt;/P&gt;
&lt;P&gt;When I got to the end of Jeff Atwood's blog post, I realized he forgot one of the most important pieces of advice about regular expressions. While you can use a web site to develop and test a regular expression, I highly recommend a standalone tool that runs on your machine. The key reason is that those tools will allow you to save the regular expression to a file &lt;STRONG&gt;so you can check that file into version control&lt;/STRONG&gt;. I can't stress enough that if you're using regular expressions, the file you used to build a regular expression absolutely has to be part of the source code. With the regular expression tool file in version control, future maintenance developers, which will include you, can easily tweak and fix any problems in the expression in a controlled environment. All the standalone tools you can use support including the test data in the saved file which makes it easy for others to see what you were testing with. &lt;/P&gt;
&lt;P&gt;There are numerous tools available but the two I find best are the free &lt;A href="http://www.ultrapico.com/Expresso.htm"&gt;Expresso&lt;/A&gt;, and the commercial &lt;A href="http://www.regexbuddy.com/"&gt;RegexBuddy&lt;/A&gt;&amp;nbsp;(which Jeff highly recommends as well). If you can pay the $40.00 USD for RegexBuddy, you'll have the best tool on the market. I especially like the Debug option which makes it easy to see exactly what's matching when in an expression. In the screen shot below, I've executed one of the example regular expressions to look for the different parts of a URL. In the Debug tab, I've selected www.wintellect.com (highlighted in yellow) and the regular expression window is showing me exactly what matched in the upper window (highlighted in blue). &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.wintellect.com/CS/blogs/jrobbins/063008_2233_MoreonRegul1.png"&gt; &lt;/P&gt;
&lt;P&gt;One thing I found a little confusing about RegexBuddy when I started using it was creating a file that contains just the regular expression and the test data as it does not use a document metaphor like nearly any other application in the world. What you'll do is click on the Library tab, and click the far left button that looks like a blank document. This creates a blank library file. Next highlight the expression from the History window you want to add, and click the Add button making sure to select "Add Regex with Test Subject" from the popup menu. The following screenshot shows you what to click. One thing I especially like about RegexBuddy's files is that they are straight XML so once it's in your version control of choice, you can compare and diff the files all you want. &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.wintellect.com/CS/blogs/jrobbins/063008_2233_MoreonRegul2.png"&gt; &lt;/P&gt;
&lt;P&gt;While RegexBuddy is very good, but I still test my regular expressions with Expresso as well. That's because Expresso has a timer in it so you can get an idea of how fast an expression takes to resolve. This is especially nice if you're working with greedy expressions with lots of possible matching. &lt;/P&gt;
&lt;P&gt;Don't worry, regular expressions may look hard, but with a little effort, they really are not that bad. Consider them one of the most important tools in your toolbox!&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6762" width="1" height="1"&gt;</description></item><item><title>Lightning Strike, Silverlight 2 Beta 2, and Winamac</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2008/06/30/lightning-strike-silverloght-2-beta-2-and-winamac.aspx</link><pubDate>Mon, 30 Jun 2008 11:22:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6758</guid><dc:creator>jprosise</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;You may have noticed that our blog was down for a couple of days last week. Lightning struck our server and our IT folks worked around the clock to get wintellect.com back online. Most of the site is back to normal now and we're working on the last 2% or so. A few blog entries were lost forever, including one I posted just before the storm detailing some recent updates to my downloadable Silverlight code samples. I wanted to post those again so everyone's aware that they're there.&lt;/P&gt;
&lt;P&gt;A while back I published a &lt;A class="" title="Silverlight Page-Turn Framework" href="http://msdn.microsoft.com/en-us/magazine/cc507644.aspx" target=_blank&gt;Silverlight 1.0 page-turning framework&lt;/A&gt; in MSDN Magazine. Silverlight 2 Beta 2 exposed a bug in my code that has since been fixed. You can download a revised version of the source code &lt;A class="" title="Silverlight Page-Turn Framework Source Code" href="http://www.wintellect.com/Downloads/PageTurnDemo.zip"&gt;here&lt;/A&gt;. If you used my framework to build page-turning apps of your own, simply replace the old copy of PageTurn.js with the new and you'll be good to go.&lt;/P&gt;
&lt;P&gt;I have also updated &lt;A class="" title=SilverLife href="http://www.wintellect.com/Downloads/SilverLife.zip"&gt;SilverLife&lt;/A&gt; and my &lt;A class="" title="Silverlight Interop" href="http://www.wintellect.com/Downloads/SilverlightInterop.zip"&gt;Silverlight interop demo&lt;/A&gt; for Beta 2. I'll be posting more updated samples this week.&lt;/P&gt;
&lt;P&gt;I took Thursday and Friday of last week off and drove up to Winamac, IN for a jet event called &lt;A class="" title="Jets Over the Heartland" href="http://www.rcuniverse.com/forum/m_7494880/mpage_6/key_/tm.htm" target=_blank&gt;Jets Over the Heartland&lt;/A&gt;. It's one of the most popular summertime RC jet meets and is held at one of the country's premier RC flying fields. The 800' x 50' runway can handle all but the very largest RC jets, and the surrounding terrain is flat and wide open. I did some flying of my own and spent a lot of time admiring the other jets, which included &lt;A class="" title="Lewis Patton" href="http://www.rcuvideos.com/item/L4TPCXVLQ2WSF2DB" target=_blank&gt;Lewis Patton's big beautiful F-18&lt;/A&gt;, Larry Kramer's hopped-up KingCat, Bob Violett's award-winning F-86 Sabre, and many more. I also came home with a new ride of my own:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Bob, Jeff, Dustin, and the Bandit" style="WIDTH:500px;HEIGHT:375px;" height=375 alt="Bob, Jeff, Dustin, and the Bandit" src="http://www.wintellect.com/CS/photos/prosise/images/6759/500x375.aspx" width=500&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That's Bob Violett, designer of the aircraft, on the left, and Dustin Buescher, who built the aircraft, on the right. Dustin taught me how to fly jets last year and continues to mentor me as I progress from jet rookie to jet pilot. Dustin is one of the best RC pilots I've ever seen and is a member of the U.S. national team that competed in the &lt;A class="" title=http://www.jwm2007.com/ href="http://www.wintellect.com/CS/controlpanel/blogs/Jet%20World%20Masters" target=_blank&gt;2007 Jet World Masters&lt;/A&gt;&amp;nbsp;last year in Ireland.&amp;nbsp;The aircraft in the foregound is a BVM Bandit. The pitot tube sticking out of the nose is wired into the ECU (the unit that controls the turbine) to speed-limit the jet to 200 mph. Otherwise, the jet could fly so fast that sudden movements might rip the wings off. It's a kick to fly and maybe one day I'll be able to do 200 mph slow rolls 3 feet above the runway like Dustin. (Yeah, right!)&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6758" width="1" height="1"&gt;</description></item><item><title>Yahoo Group Set-up for Power Threading Library</title><link>http://www.wintellect.com/CS/blogs/jeffreyr/archive/2008/06/26/yahoo-group-set-up-for-power-threading-library.aspx</link><pubDate>Thu, 26 Jun 2008 07:21:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6745</guid><dc:creator>JeffreyR</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;I have set up a Yahoo group for people interested in using my Power Threading Library. Currently, the group is public so anyone can join. I am the moderator of the group and so I can answer questions, offer comments/suggestions on the library's use, and address and bugs or feature requests. I will also make new version announcements via the group as well.&lt;/P&gt;
&lt;P&gt;Here is the group information:&lt;/P&gt;
&lt;P&gt;Library Link: &lt;A href="http://wintellect.com/PowerThreading.aspx"&gt;http://wintellect.com/PowerThreading.aspx&lt;/A&gt; &lt;BR&gt;Group link:&amp;nbsp;&amp;nbsp; &lt;A href="http://tech.groups.yahoo.com/group/PowerThreading/"&gt;http://tech.groups.yahoo.com/group/PowerThreading/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Post message: &lt;A href="mailto:PowerThreading@yahoogroups.com"&gt;PowerThreading@yahoogroups.com&lt;/A&gt; &lt;BR&gt;Subscribe:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:PowerThreading-subscribe@yahoogroups.com"&gt;PowerThreading-subscribe@yahoogroups.com&lt;/A&gt; &lt;BR&gt;Unsubscribe:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:PowerThreading-unsubscribe@yahoogroups.com"&gt;PowerThreading-unsubscribe@yahoogroups.com&lt;/A&gt; &lt;BR&gt;&lt;BR&gt;I&amp;nbsp;look forward to meeting all of you in the group.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6745" width="1" height="1"&gt;</description></item><item><title>The Case of the Access Denied</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/06/26/the-case-of-the-access-denied.aspx</link><pubDate>Thu, 26 Jun 2008 06:51:03 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6744</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;After coming back from vacation, I powered on my laptop, named BERLIN, and it took an inordinate amount of time to login. After much disk grinding, the desktop finally loaded and it wasn't my normal desktop, but a temporary desktop and Vista reported that my profile couldn't be loaded. After a very heavy sigh, I looked at the Event log and the error was "Windows cannot load the locally stored profile. Possible causes of this error included insufficient security rights or a corrupt local profile. DETAIL – The process cannot access the file because it is being used by another process."
&lt;/p&gt;&lt;p&gt;Guessing that this error was possibly because of a corrupt file or a bad hard disk, I initiated a check disk on the reboot. No errors were reported and when I logged in again, my user account loaded correctly. Poking around nothing seemed to be remiss. All the group policies had run, I could access my servers and the internet. Now my sigh was one of relief.
&lt;/p&gt;&lt;p&gt;Needing to copy over a few files from my desktop machine to BERLIN, I popped over to PowerShell and initiated the copy and immediately got an access denied. Switching over to BERLIN, I verified the share was there and my account had read and write access. Back on my desktop machine, I tried a NET VIEW BERLIN command and got the access denied again. Double checking with Explorer, I could see BERLIN, but accessing it always gave me an access denied error. As I was logged into both machines with the same domain account, I thought that was very strange.
&lt;/p&gt;&lt;p&gt;Logging into my server with the domain administrator account, I ran a NET VIEW BERLIN and could see all the shares on the machine. Additionally, I could copy files to and from BERLIN just fine. Wondering if the problem was on BERLIN, I checked if I could see and access shares from it. Of course, that worked.
&lt;/p&gt;&lt;p&gt;Figuring this might have been something with the user profile problem, I rebooted BERLIN. After it restarted, I didn't log in but tried to access the shares from my desktop machine. Again, it was access denied. After logging in with my normal user account, I started poking around on BERLIN.
&lt;/p&gt;&lt;p&gt;Since Mark Russinovich's excellent &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx"&gt;Process Monitor&lt;/a&gt; shows everything happening on the machine, I fired it up and turned off all filters. From my desktop machine, I attempted to access the shares. Digging through the Process Monitor log, I didn't see anything related to my shares or the network. It was like the traffic never made it into the machine.
&lt;/p&gt;&lt;p&gt;Now I started suspecting that the problem was on my desktop machine so I rebooted it. After logging in again, I sadly verified that the access denied was still there. Looking at the event log on my desktop, I saw the following:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/062208_0010_TheCaseofth1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;That's one surreal error message. Clicking on the Event Log Online Help link took me to a &lt;a href="http://technet2.microsoft.com/windowsserver2008/en/library/52ddf7d9-a0e7-4c9d-be3c-3c35219f2d691033.mspx?mfr=true"&gt;page&lt;/a&gt; that discussed deleting the unused computer account in Active Directory. Given that nearly every single event log error you look up looks like the following, I was just happy to have a real page, even if the information it reported was worthless!
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/062208_0010_TheCaseofth2.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Leaving the Event Viewer open, I ran another NET VIEW BERLIN and saw the same Event 4 show up. I could run PING BERLIN and that worked, but everything reported access denied when attempting to get to the shares. I tried to use Remote Access to the machine and that reported access denied as well. Running Process Monitor on my desktop machine didn't turn up anything interesting either.
&lt;/p&gt;&lt;p&gt;Sitting there completely out of ideas on how to proceed, I was tapping my foot furiously. Feeling something hit the top of my foot, I looked under my desk and it was my cat batting at the movement. That's when I realized she was laying on top of the network hub my laptop plugs into. Chasing her off so it didn't overheat, I found the solution to the access denied: she'd managed to unplug the network cable. Plugging that in, I had complete access to the laptop again.
&lt;/p&gt;&lt;p&gt;Without the wired connection, I was using the wireless connection, which defaults to not allowing shares to be accessed my non administrators. The failure to load my user profile was a &lt;a href="http://en.wikipedia.org/wiki/Red_herring_%28narrative%29"&gt;red herring&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Cased closed with the moral: always check the obvious first!&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6744" width="1" height="1"&gt;</description></item><item><title>An interview with me about The Performance of Everyday Things</title><link>http://www.wintellect.com/CS/blogs/jeffreyr/archive/2008/06/26/an-interview-with-me-about-the-performance-of-everyday-things.aspx</link><pubDate>Thu, 26 Jun 2008 03:15:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6743</guid><dc:creator>JeffreyR</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;At the April 2008 Devscovery (&lt;A href="http://www.devscovery.com/"&gt;http://www.Devscovery.com&lt;/A&gt;) event in New York, I recently did a new talk entitled "The Performance of Everyday Things". The talk is about the performance of using everyday constructs in .NET/C# such as method calls, arrays, loops, garbage collection, and much more. I will be repeating this popular talk at the Redmond, WA Devscovery event in August 2008. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;After the talk April presentation, I did a small interview related to this topic. The interview can be found here: &lt;A href="http://getpixel8ed.com/shows/everything"&gt;http://getpixel8ed.com/shows/everything&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6743" width="1" height="1"&gt;</description></item><item><title>More about Windows SideShow</title><link>http://www.wintellect.com/CS/blogs/jeffreyr/archive/2008/06/26/more-about-windows-sideshow.aspx</link><pubDate>Thu, 26 Jun 2008 03:13:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6742</guid><dc:creator>JeffreyR</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;In addition to releasing the .NET Windows SideShow API that I created, the Windows SideShow team has also just released the Windows SideShow for Windows Mobile Developer Preview:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=79f19684-f862-4e02-a2b0-0003b4565f34&amp;amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=79f19684-f862-4e02-a2b0-0003b4565f34&amp;amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Install Instructions: &lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3432560&amp;amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3432560&amp;amp;amp;SiteID=1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;In addition, the Windows SideShow team has announced in conjunction with nVidia a contest for the best SideShow gadgets produced in the next month or so; prizes are trips to nVidia’s nVision conference and a SideShow-enabled Dell XPS 420. For more info, see this web site: &lt;A href="http://www.nzone.com/object/nzone_prefacecontest_home.html"&gt;http://www.nzone.com/object/nzone_prefacecontest_home.html&lt;/A&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6742" width="1" height="1"&gt;</description></item><item><title>Windows 2008 + MacBook Pro == Happy Andy</title><link>http://www.wintellect.com/CS/blogs/ahopper/archive/2008/06/02/windows-2008-macbook-pro-happy-andy.aspx</link><pubDate>Tue, 03 Jun 2008 00:07:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6660</guid><dc:creator>ahopper</dc:creator><slash:comments>4</slash:comments><description>&lt;TABLE class=""&gt;

&lt;TR&gt;
&lt;TD class=""&gt;
&lt;P&gt;I have now been running Windows 2008 on a MacBook Pro for over a month, and I have to report that it's the only way to fly. This thing is ever so shiny, light, and FAST. I'm running the x64 flavor of 2008, and it truly is Vista the way Vista should have been.&lt;/P&gt;
&lt;P&gt;However, being a dev, I can't just leave it at that; I must complain about &lt;EM&gt;&lt;U&gt;something!&lt;/U&gt;&lt;/EM&gt; While Boot Camp has done a great job at providing drivers for the hardware, there are some notable hiccups; the Bluetooth drivers appear to be out of date (I've checked; the hardware IDs for my MBP's hardware&amp;nbsp;look to be from a newer version of the hardware than the drivers know to look for), tap to click is AWOL, and S3 sleep sometimes decides to fail (the machine refuses to sleep and the screen blacks out - and will remain so until a hard reboot). All that being said, I still highly recommend it.&lt;BR&gt;&lt;BR&gt;Now, if I can just find a way to replace that glowing Apple logo on the back of the LCD with a Windows logo...&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;IMG title="Hi, I'm a MaaAAAAAIIIEEEE!!!" style="BORDER-RIGHT:gray thin solid;BORDER-TOP:gray thin solid;BORDER-LEFT:gray thin solid;BORDER-BOTTOM:gray thin solid;HEIGHT:260px;" height=260 alt="Hi, I'm a MaaAAAAAIIIEEEE!!!" hspace=0 src="http://www.wintellect.com/cs/photos/ahopper/images/6659/original.aspx" width=259 border=0&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6660" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/ahopper/archive/tags/Apple/default.aspx">Apple</category><category domain="http://www.wintellect.com/CS/blogs/ahopper/archive/tags/Windows+2008/default.aspx">Windows 2008</category></item><item><title>It's TechEd Time!</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2008/05/31/it-s-teched-time.aspx</link><pubDate>Sat, 31 May 2008 22:43:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6652</guid><dc:creator>jprosise</dc:creator><slash:comments>12</slash:comments><description>&lt;P&gt;TechEd was split into two weeks this year--one for developers and one for IT folks (a formula that has worked well at TechEd Europe the last couple of years)--and Monday morning TechEd Developers begins with a slate of full-day pre-conference sessions. I'm doing a &lt;A class="" title="Silverlight Precon" href="https://www1.msteched.com/dev/public/precons.aspx" target=_blank&gt;precon on Silverlight&lt;/A&gt;, so if you plan to be at TechEd, stop&amp;nbsp;by and join the party! It's going to be fun. I have lots of slides to show, but more importantly, I have plenty of&amp;nbsp;demos prepared. If you've heard about Silverlight but haven't yet had the opportunity to dive into it, Monday's&amp;nbsp;precon is a great way to get started. We'll start at square one and build up until you've seen most of the features of Silverlight 2.&lt;/P&gt;
&lt;P&gt;I'm doing breakout sessions Wednesday and Thursday on Silverlight, asynchronous ASP.NET programming, and ASP.NET AJAX. Hope to see you there!&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6652" width="1" height="1"&gt;</description></item><item><title>Fantastic news from the development tools front!</title><link>http://www.wintellect.com/CS/blogs/ahopper/archive/2008/05/29/fantastic-news-from-the-development-tools-front.aspx</link><pubDate>Thu, 29 May 2008 11:52:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:6636</guid><dc:creator>ahopper</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;When I left Microsoft, I felt pretty sad. Not only would I leave a bunch of great friends behind (and REALLY good benefits) - I was leaving my beloved Toolbox behind! (Toolbox is an internal site that has TONS of tools and apps written by Microsoft employees) So, imagine my intense happiness when some of my favorite tools finally surfaced for public consumption!&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/sourceanalysis/archive/2008/05/23/announcing-the-release-of-microsoft-source-analysis.aspx"&gt;Microsoft Source Analysis for C#&lt;/A&gt; - This was called StyleCop inside the walls of Microsoft. What is it? It's a source-code analysis tool that you can use to ensure that everybody in your org is adhering to your coding guidelines. It can be a bit (ok, VERY) pedantic sometimes, but you can dial down the level of nitpick.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://robmensching.com/blog/archive/2008/05/16/Deployment-Tools-Foundation-joins-the-WiX-toolset.aspx"&gt;Deployment Tools Foundation&lt;/A&gt; - At MSFT, whenever I needed to do something in managed code during setup, I'd reach for this great internal tool for creating managed custom actions. It worked fairly well, even if it did hit many of the issues Rob Mensching had enumerated for why &lt;A href="http://robmensching.com/blog/archive/2007/04/19/Managed-Code-CustomActions-no-support-on-the-way-and-heres.aspx"&gt;WiX had no roadmap for managed custom actions&lt;/A&gt; a year or so ago. Well, Jason's a smart fellow, and he addressed those issues in the latest version, which has become DTF.&lt;/P&gt;
&lt;P&gt;Lastly, Bob Arnson has released &lt;A class="" title="New WiX feature: Firewall extension" href="http://www.joyofsetup.com/2008/05/17/new-wix-feature-firewall-extension/"&gt;a great WiX extension for creating exceptions&lt;/A&gt; in Windows Firewall by adding a couple of new elements to your WiX code.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=6636" width="1" height="1"&gt;</description></item></channel></rss>