<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Russ Nemhauser</title><subtitle type="html">Made Fresh Daily!</subtitle><id>http://weblogs.asp.net/russnem/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/russnem/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2007-01-17T08:49:00Z</updated><entry><title>Vista Default User Profile</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2008/04/09/vista-default-user-profile.aspx" /><id>http://weblogs.asp.net/russnem/archive/2008/04/09/vista-default-user-profile.aspx</id><published>2008-04-09T20:10:00Z</published><updated>2008-04-09T20:10:00Z</updated><content type="html">I created a user and customized tons of settings, then copied that user to the Default user from the System control panel. However, some of my settings didn't take. For example, my start menu items and colors are all there, but I hid the Sidebar - only it still shows up when I create a new account and log in! Also, all those icons in the systray that I hid appear for the new user as well. The default home page in the IE7 (google.com) and the default search provider (Google) didn't work for the new user based on my new profile either - they went back to msn.com and Live Search.

I want EVERYTHING that I did to be used for EVERY new user created on the box - not just a few of my customizations. Can anyone offer any assistance?

FYI, the machine is not on a domain.&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6079869" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="Microsoft" scheme="http://weblogs.asp.net/russnem/archive/tags/Microsoft/default.aspx" /><category term="Vista" scheme="http://weblogs.asp.net/russnem/archive/tags/Vista/default.aspx" /></entry><entry><title>Thoughts on Mix, Ballmer, and the iPhone SDK</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2008/03/10/thoughts-on-mix-ballmer-and-the-iphone-sdk.aspx" /><id>http://weblogs.asp.net/russnem/archive/2008/03/10/thoughts-on-mix-ballmer-and-the-iphone-sdk.aspx</id><published>2008-03-10T23:04:00Z</published><updated>2008-03-10T23:04:00Z</updated><content type="html">&lt;P&gt;I am a software developer and architect (currently using Microsoft technologies) so of course I was interested to watch the sessions from the MIX conference that just happened last week in Las Vegas.&lt;/P&gt;
&lt;P&gt;Incidentally, I visited the on-demand web site for MIX using my default browser (Safari on Mac) and of course the page wouldn't load. Go figure - a web page written by Microsoft that doesn't work in Safari, a standards-compliant browser. But I digress.&lt;/P&gt;
&lt;P&gt;Ray Ozzie is just not a good public speaker. He didn't seem excited at all (and he sure didn't get ME excited with his subject matter). His talk sounded like he was reading a newspaper article, not engaging the audience. In addition, his slides had whole movies playing with demos while he was speaking. This is confusing because your mind wants to see what's going on in the movie. So you can hear Ray speaking but your mind isn't listening to him because it's trying to figure out what it is seeing in the movie.&lt;/P&gt;
&lt;P&gt;FINALLY Scott Guthrie came on. I have always really liked Scott, ever since the first session I saw him give. In my opinion, Scott is simply the best bet Microsoft has and has had for a couple of years now, regardless of product group or division. Unfortunately he wasn't on too long before he introduced the IE8 guy, but I know he'll be back, and I hope he's the one giving the demos later!&lt;/P&gt;
&lt;P&gt;I like the Developer Tools that the guy demo'd for IE8. Those will be useful.&lt;/P&gt;
&lt;P&gt;Web Slices is an interesting concept, and obviously born from the Web Clip functionality introduced in Safari about a year ago now. But unfortunately the implementation of Web Slices is very sub-par. At this point (and I could very well be premature and/or incorrect on this point), there appears to be no operating system integration at all, like Apple gave us in Leopard. In other words, if you want to see updated Web Slices, you have to open IE8 and then click on each and every one that you have to view it. I also have to admit that I'm not sure, as a developer, I would want to add extra code to my pages or my site if I want to support Web Slices. The code would be IE8 only, and I think we all know what writing IE-only code has gotten us in the past when we wanted to support more than just IE.&lt;/P&gt;
&lt;P&gt;One of the first things Scott did with regard to Silverlight was to show a movie montage of some of the live usage of Silverlight on the Internet. I have to say that I only found 2 or 3 of those particular examples compelling. Most of the other ones you'd never know were Silverlight at all. Could have just been embedded videos or animated images. I would be curious to see a REAL demo real of Silverlight in use today. And, note to Microsoft: We get that it can play videos.&lt;/P&gt;
&lt;P&gt;I thought it was really funny when the Cirque de Soleil employee came on the stage and was holding that big tablet PC with the web cam strapped on to it. So 2001.&lt;/P&gt;
&lt;P&gt;There were a few demos of Silerlight on mobile devices, and I have to say that after watching &lt;A class="" title=Video href="http://www.apple.com/quicktime/qtv/iphoneroadmap" mce_href="http://www.apple.com/quicktime/qtv/iphoneroadmap"&gt;this video&lt;/A&gt; the other day, I was not excited at all. The Silverlight mobile applications looked jumpy during animations; slow to respond, and honestly, a little outdated already. I don't think this is a limitation of Silverlight. I believe it's a limitation of the hardware capabilities of the devices they showed – some of which are quite new.&lt;/P&gt;
&lt;P&gt;All in all I'd say that Silverlight is good for the web, but (contrary to what Rocky Lhotka said in his recent blog post) Silverlight is not the future of the web. It will be a part of it, but that will be about it. Only time will tell if I'm right.&lt;/P&gt;
&lt;P&gt;Next, I watched the keynote where Steve Ballmer was interviewed by Guy Kawasaki. I thought it was great, for the most part. Steve Ballmer used to be my favorite speaker to watch. After I watched Steve talk about something I'd want to go right out and buy it or try it or develop on it or install it. This all changed for me over the past two years when I realized that Steve Ballmer is perhaps one of the world's best salesmen. That's what he does, and that's what he's supposed to do: sell Microsoft to people every hour of every day of every year.&lt;/P&gt;
&lt;P&gt;After I tried Macintosh computers, iPods, and iPhones, however, I realized that talk is cheap. There was a reason why I had been frustrated a lot. I just thought that was a cost of using a computer. I didn't realize it was merely a cost of using Microsoft products until I actually tried other ones.&lt;/P&gt;
&lt;P&gt;That being said, one of the things Steve said in the interview with Guy Kawasaki at Mix was really just ignorant, incorrect, and a feeble attempt to deflect the potential impact of what the iPhone SDK and selling your iPhone applications on the iTunes store really means to developers.&lt;/P&gt;
&lt;P&gt;Of Apple's announcements of the iPhone SDK, Ballmer said, "They just announced a new runtime today, yesterday, and it sure seems they're trying to charge a whole lot more money for it than anybody else on the face of the planet. I think they want to take 30% of every bit of revenue that you'd collect on their runtime. I'm not sure a lot of the software developers that I know are going to be very interested in that, but it may mean that Apple is not welcoming open, royalty-free runtimes on their platform, we'll have to wait and see." I'd like to set the record straight, and then you can judge Ballmer's statement for yourself.&lt;/P&gt;
&lt;P&gt;First, I can download the Apple SDK for free and develop all I want. If I choose to, I can pay $99 to join Apple's Developer program, which gives me things like support and resources that I wouldn't have if I didn't join. I'd like to reiterate – it includes support. If I want developer support from Microsoft, I have to pay something like $200 per incident (at least that's what it was a couple of years ago the last time I used it). So Ballmer's statement that Apple is charging money for the new runtime, and charging more than anybody else on the face of the planet, is just a lie. There WILL be a nominal charge if iPod Touch users want to upgrade, but the new runtime (called 2.0) will be available to all iPhone users as a free download.&lt;/P&gt;
&lt;P&gt;Second, as an iPhone and iPod Touch developer, I can sell my application on the iTunes store, thereby reaching every single owner of an iPod Touch and and iPhone in a single place. That is millions and millions of people. And I don't pay a cent for this, either. The only time I pay Apple is if someone buys my application, and I'm even responsible for setting the price. If somebody buys it, iTunes takes 30% of that sale. I get 70%. I pay no credit card fees, no hosting fees and no bandwidth fees. Ever. In fact, I can even choose to make my application available for FREE, in which case I pay nothing.&lt;/P&gt;
&lt;P&gt;Paying nothing to get my app in front of every owner of my target platform, and then keeping 70% of the revenue sure seems like a pretty incredible deal to me. There's no business for me to run. There's no hosting issues for me to deal with. All I have to do is focus on what I do best – developing software and depositing checks into my bank account on a monthly basis. So I put the question to you all, especially anyone who has ever written an application they wanted to sell. Do you think 30% is unfair and demonstrative of Apple being unwelcoming to mobile software developers, as Ballmer does?&lt;/P&gt;
&lt;P&gt;I have one final thought on watching these two keynotes. Because they chose to make these videos available in Silverlight only, I was forced to watch the stuff from my web browser, sitting at my desk. I couldn't watch it on my big living room TV like I can with the Apple conference sessions using iTunes and Apple TV. Unfortunately Microsoft's disconnect within itself proves frustrating yet again. I couldn't even watch this on my living room TV on my Xbox 360 if I had that whole Media Center PC / Extender thing going on in my house. This is over 3 hours of video that I had to watch, sitting at my desk. And I haven't even gotten to the sessions yet. Not exactly a good delivery mechanism for lots of content. I shutter to think what it's going to be like to sit at your computer and watch the Olympic events that aren't televised.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5946805" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="MIX" scheme="http://weblogs.asp.net/russnem/archive/tags/MIX/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/russnem/archive/tags/General+Software+Development/default.aspx" /><category term="Internet Explorer" scheme="http://weblogs.asp.net/russnem/archive/tags/Internet+Explorer/default.aspx" /><category term="Mobile" scheme="http://weblogs.asp.net/russnem/archive/tags/Mobile/default.aspx" /><category term="Silverlight" scheme="http://weblogs.asp.net/russnem/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Code Analysis or Check-In Policy for Warnings</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2008/01/08/code-analysis-or-check-in-policy-for-warnings.aspx" /><id>http://weblogs.asp.net/russnem/archive/2008/01/08/code-analysis-or-check-in-policy-for-warnings.aspx</id><published>2008-01-08T22:50:00Z</published><updated>2008-01-08T22:50:00Z</updated><content type="html">I've been doing a bunch of Google searches today trying to figure out how I might be able to raise a violation if somebody tries to do a check-in when there are more than 100 warnings in the solution. Because (as far as I know, anyway) the only object available to you in a check-in policy is the PendingCheckin, I'm finding it difficult to implement this. 

Does anyone know how I can approach this? I'm aware that Visual Studio will raise a violation when the number of warnings reaches a certain number, but this number is way too high for us.

I thought of doing it as a Code Analysis policy, but several questions came up with that approach as well. First, in order to write a custom code analysis policy, I have to use th FxCop SDK 1.35, don't I? There isn't a "CheckInPolicy" abstract base class that I can just subclass, is there?
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5571910" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/russnem/archive/tags/General+Software+Development/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/russnem/archive/tags/Visual+Studio/default.aspx" /></entry><entry><title>Visual Studio 2008: November of THIS Year?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/11/05/visual-studio-2008-november-of-this-year.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/11/05/visual-studio-2008-november-of-this-year.aspx</id><published>2007-11-06T06:41:00Z</published><updated>2007-11-06T06:41:00Z</updated><content type="html">It was formally announced by Microsoft today that Visual Studio 2008 will be released at the end of this month.

The only thing I'm going to say at this point is that it seems WAY too soon to me. I'll make blog posts after the release and we'll see if my gut feeling was right or wrong (and I have absolutely no problem being wrong).&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4915705" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="Microsoft" scheme="http://weblogs.asp.net/russnem/archive/tags/Microsoft/default.aspx" /><category term="Orcas" scheme="http://weblogs.asp.net/russnem/archive/tags/Orcas/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/russnem/archive/tags/Visual+Studio/default.aspx" /></entry><entry><title>More Content</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/10/11/more-content.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/10/11/more-content.aspx</id><published>2007-10-12T05:40:00Z</published><updated>2007-10-12T05:40:00Z</updated><content type="html">Given that I'm blogging much more on my new blog, I thought I'd write a "reminder" post on here to make sure that those who want to read my non-dev entries can. 

http://russology.com/
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4531735" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author></entry><entry><title>Multiple Sitemap Index Files in Robots.txt</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/09/21/multiple-sitemap-index-files-in-robots-txt.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/09/21/multiple-sitemap-index-files-in-robots-txt.aspx</id><published>2007-09-21T23:00:00Z</published><updated>2007-09-21T23:00:00Z</updated><content type="html">&lt;p&gt;I have been searching around using Google but I can't find an answer to this question.&lt;/p&gt;&lt;p&gt;A robots.txt file can contain the following line:&lt;/p&gt;&lt;p&gt;Sitemap: http://www.mysite.com/sitemapindex.xml&lt;/p&gt;&lt;p&gt;but is it possible to specify MULTIPLE sitemap index files in the robots.txt and have the search engines recognize that and crawl ALL of the sitemaps referenced in each sitemap index file? For example, will this work:&lt;/p&gt;&lt;p&gt;Sitemap: http://www.mysite.com/sitemapindex1.xml&lt;br&gt;Sitemap: http://www.mysite.com/sitemapindex2.xml&lt;br&gt;Sitemap: http://www.mysite.com/sitemapindex3.xml&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;p&gt;Thanks in advance to anyone who can help.&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4018531" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/russnem/archive/tags/General+Software+Development/default.aspx" /></entry><entry><title>Internet Explorer's Reign of Mediocrity</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/09/07/internet-explorer-s-reign-of-mediocrity.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/09/07/internet-explorer-s-reign-of-mediocrity.aspx</id><published>2007-09-08T03:42:00Z</published><updated>2007-09-08T03:42:00Z</updated><content type="html">I saw this on digg.com today and I have to admit that I am one of the (apparently THOUSANDS) of people who are tired of having to tweak their standards-based code just so that IE 6 and 7 (MIcrosoft's browsers which do NOT adhere to web standards) can display their web pages the way the developer or designer originally intended.

With IE's reduced market share due to the success of Firefox, Safari, and Opera, combined with Microsoft's several-year development cycle to release IE 7 - a browser that doesn't even bring IE up to date with the competition - I think people are really just starting to say, "You know what? Screw you." What do YOU think?

http://digg.com/programming/Digg_this_if_you_re_tired_of_IE_costing_you_money_no_ads_involved

Please comment! Opinions are welcome. &lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=3787766" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/russnem/archive/tags/General+Software+Development/default.aspx" /><category term="Internet Explorer" scheme="http://weblogs.asp.net/russnem/archive/tags/Internet+Explorer/default.aspx" /></entry><entry><title>Windows Forced Restarts</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/08/12/windows-forced-restarts.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/08/12/windows-forced-restarts.aspx</id><published>2007-08-13T06:44:00Z</published><updated>2007-08-13T06:44:00Z</updated><content type="html">Recently I came in to work to find that my computer had restarted some time during the night. I thought there was a power outage, but that wasn't the case. Apparently an automatic update was installed, which forced a restart of the computer.&lt;br&gt;&lt;br&gt;

How can Microsoft allow this? How can they simply restart the computer no matter what the user might have open or what long-running jobs happen to be executing? There was no warning whatsoever.&lt;br&gt;&lt;br&gt;

If you ask me, this kind of crap is absolutely unacceptable. I asked around and others agree - they said they've lost work because Microsoft forced their computer to reboot. My opinion is that Microsoft needs to release a hotfix that prevents this from happening. I don't mind restarting Windows (when I have to use Windows), but it should happen when it's convenient for ME, not for Microsoft. &lt;br&gt;&lt;br&gt;

There are people who will tell me that there are frequent security updates to Windows that, if not activated by restarting, put the whole network at risk. Well that's fine. Just disable the network and don't let me reconnect to it until I've restarted. But shutting down the whole computer? Come on. Is this still the 90's and no one told me?
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=3489883" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author></entry><entry><title>MySpace &amp; Me</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/08/08/myspace-amp-me.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/08/08/myspace-amp-me.aspx</id><published>2007-08-09T04:31:00Z</published><updated>2007-08-09T04:31:00Z</updated><content type="html">I'm very excited to announce that Monday I joined MySpace as a Software Architect. 

This is a site that has 200,000,000 members and something like four billion page views a week. I can't back this up with paperwork, but I'm fairly sure this is one of (if not THE) most visited site on the entire internet. They don't have hundreds of servers, they have thousands. I'm very much looking forward to learning a lot here and offering whatever I can to the team. 

MySpace uses ASP.NET and SQL Server - quite the interesting case study for these technologies. We use Team Foundation Server for source code control. Each contributor uses Visual Studio 2005, and many projects follow an agile methodology called Scrum.

Anyone who is a member and has ideas for new features or functionality is welcome to email me at rnemhauser (myspace.com is the domain). PLEASE do not email me with errors or problems. Tom, the first friend any new member has, receives these messages and they ARE read. I'm interested in new, out-of-the-box ideas, no matter how crazy.

Check out my MySpace profile at http://www.myspace.com/russnem
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=3443993" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/russnem/archive/tags/General+Software+Development/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/russnem/archive/tags/.NET/default.aspx" /><category term="Agile" scheme="http://weblogs.asp.net/russnem/archive/tags/Agile/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/russnem/archive/tags/ASP.NET/default.aspx" /><category term="Team Foundation Server" scheme="http://weblogs.asp.net/russnem/archive/tags/Team+Foundation+Server/default.aspx" /><category term="Team System" scheme="http://weblogs.asp.net/russnem/archive/tags/Team+System/default.aspx" /><category term="Visual Studio" scheme="http://weblogs.asp.net/russnem/archive/tags/Visual+Studio/default.aspx" /><category term="SQL Server" scheme="http://weblogs.asp.net/russnem/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>Backups in Today's World</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/06/10/backups-in-today-s-world.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/06/10/backups-in-today-s-world.aspx</id><published>2007-06-11T01:30:00Z</published><updated>2007-06-11T01:30:00Z</updated><content type="html">Like many people in today's world I have an absolutely enormous amount of data stored on my various hard drives. Aside from my 320 GB+ of iTunes music and video, there's a significant number of photographs and well over 150 gigs of captured and rendered video. There's also the code for almost every software development project I've ever worked on. The databases for my current projects will also exist and some are so large that a local backup would be far more beneficial that trying to FTP 5 gigs of data down.

All this stuff needs to be backed up, but of course DVDs are out (even the dual layer ones) because they store less than 10 gigs each. Even with two dual layer DVD burners in my Mac Pro I'd have to sit here for who knows how long putting in almost 50 blank discs every month.

I'm very curious. What are most people with hundreds of gigs of stuff using to back up their data? Is tape backup still around these days? Would a 750 GB or 1 TB drive in an external FireWire 800 enclosure be my best bet?

Any advice would be appreciated.&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2780531" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/russnem/archive/tags/General+Software+Development/default.aspx" /></entry><entry><title>Disconnecting WM5 Device From Exchange Server</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/05/25/disconnecting-wm5-device-from-exchange-server.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/05/25/disconnecting-wm5-device-from-exchange-server.aspx</id><published>2007-05-25T22:52:00Z</published><updated>2007-05-25T22:52:00Z</updated><content type="html">My Windows Mobile 5 phone currently is set to synchronize with Exchange Server. When I set it up, I had to agree to a corporate security policy that put an automatic key lock on my phone every time it wasn't used for 15 minutes. I guess they think they have secrets to keep. I have to enter my password to unlock the phone.

Now I want to get that email off my phone but I can't figure out how to do this. I can't key this automatic key lock off my own phone. I have nothing selected in the Exchange Server settings - not contacts, tasks, email, etc. I've even changed the URL to the email server, but nothing seems to work.

Can anyone help me out on this?&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2660014" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author></entry><entry><title>Xeon Price Cuts: Should I Wait?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/05/23/xeon-price-cuts-should-i-wait.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/05/23/xeon-price-cuts-should-i-wait.aspx</id><published>2007-05-24T02:14:00Z</published><updated>2007-05-24T02:14:00Z</updated><content type="html">According to the following article, Intel is scheduled to reduce prices on its Xeon processors on July 22nd. I was going to buy a Mac Pro in mid July to replace the PowerMac G5 that I just sold, but do you think I should wait a month or so and see if Apple will cut prices on their Mac Pros? Does anyone have an idea of how long it takes Apple to react to price cuts?

http://digitimes.com/mobos/a20070521PD201.html&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2647450" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author></entry><entry><title>My New Blog</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/04/27/my-new-blog.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/04/27/my-new-blog.aspx</id><published>2007-04-27T18:25:00Z</published><updated>2007-04-27T18:25:00Z</updated><content type="html">Over the past year or so my blog posts have spanned subjects much more diverse than just Microsoft technologies and developing in a Microsoft world. To that end, I have created a more general-purpose blog that I hope my current subscribers will check out.&lt;div&gt;&lt;br class="khtml-block-placeholder" /&gt;&lt;/div&gt;&lt;div&gt;http://www.russology.com&lt;div&gt;&lt;br class="khtml-block-placeholder" /&gt;&lt;/div&gt;&lt;div&gt;This is obviously still a great place for my posts about Microsoft technologies, so please be sure to keep this feed too!&lt;/div&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2406479" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/russnem/archive/tags/General+Software+Development/default.aspx" /></entry><entry><title>My New Blackjack</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/01/17/my-new-blackjack.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/01/17/my-new-blackjack.aspx</id><published>2007-01-18T05:54:00Z</published><updated>2007-01-18T05:54:00Z</updated><content type="html">&lt;p style="font: normal normal normal 12px/normal Helvetica; margin: 0px"&gt;I recently purchased the Samsung Blackjack when the joystick on my Cingular 2125 phone died and I&amp;#39;m pretty happy with it. The screen is pretty nice, as is the QWERTY keyboard. The numbers (i.e. dialing a phone number) take a little getting used to. It&amp;#39;s extremely hard to dial by touch. But all in all the phone is much zippier (read: faster) than the 2125 and due to the fact that it&amp;#39;s much thinner than the 2125 the Blackjack actually feels smaller in my pocket.&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; min-height: 14px; margin: 0px"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; margin: 0px"&gt;I know what you&amp;#39;re thinking - why didn&amp;#39;t I wait until the iPhone came out? Well, that doesn&amp;#39;t get released for six months, and I was a little disappointed about three things in particular: 1) only 8 gigs. Very low for a guy who travels all the time and wants lots of TV shows and movies to watch. If it maybe had 16 or 24 gigs I could get by without the 80 gigs that the video iPod currently has, but 8 is just too little.&amp;nbsp; 2) No 3G (yet). Why this wasn&amp;#39;t put in I have no idea. 3) No developer support. I was really anxious for this particular ability. Don&amp;#39;t misunderstand - I love what Apple has done and I do absolutely want one. I&amp;#39;m just going to wait for the next model since they&amp;#39;re so expensive. &amp;nbsp;&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; min-height: 14px; margin: 0px"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; margin: 0px"&gt;Any-hoo, back to my Blackjack. Something very cool that I stumbled upon was David Ciccone&amp;#39;s narrative, which taught me how easy it was to use my Blackjack as a high-speed internet connection (3G) for my MacBook Pro when there&amp;#39;s no WiFi around (or I&amp;#39;m in a place that only offers pay-as-you-go WiFi).&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; min-height: 14px; margin: 0px"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; margin: 0px"&gt;One thing I did notice, however, is that there doesn&amp;#39;t appear to be any way to save an email attachment to the phone&amp;#39;s file system. I emailed myself a JPG file to use as a background, and all I could do was view the image - I couldn&amp;#39;t save it. I had to use my Mac to &amp;quot;beam&amp;quot; the image to my phone using Bluetooth. I&amp;#39;m trying to discover if I just can&amp;#39;t figure out how to save an email attachment or if there really is no way to do it that&amp;#39;s built in to WM5. If the later is true, doesn&amp;#39;t that seem like an enormous oversight?&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; min-height: 14px; margin: 0px"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; margin: 0px"&gt;Also, I can&amp;#39;t seem to find an easy way to get to the Bluetooth setting so I can turn it on and off without having to click Start -&amp;gt; Up -&amp;gt; Settings -&amp;gt; Connections -&amp;gt; Bluetooth -&amp;gt; Bluetooth -&amp;gt; Turn Bluetooth On? I&amp;#39;d love to assign it to a speed dial or a soft key, but I can&amp;#39;t figure out how to do it.&amp;nbsp;&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; min-height: 14px; margin: 0px"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; margin: 0px"&gt;Does anyone know of a way to (correct me if I&amp;#39;m using the wrong term here) unlock the phone so I can remove a bunch of the Cingular crap that&amp;#39;s on there? Most pressing is my desire to remove their startup and shutdown &amp;quot;splash&amp;quot; screens. You see, Cingular has decided (for reasons beyond my comprehension) to add sound to these now. So if you&amp;#39;re in a movie theater or it&amp;#39;s late at night and you want to shut off your phone, you have no choice but to listen to their sound effect. In addition, I KNOW that I have Cingular. There&amp;#39;s no need to advertise it to me each and every time I turn on or off the phone for no apparent reason. I pay the bill every month. So these animated startup and shutdown screens are annoying to me.&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; min-height: 14px; margin: 0px"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font: normal normal normal 12px/normal Helvetica; margin: 0px"&gt;There&amp;#39;s also this app on the Connections menu called &amp;quot;Wireless Manager&amp;quot;, but when I go in there all I can do is turn the bluetooth or phone wireless on or off. Why would this app exist if I can do that from the Connections menu directly? Is it an app just to have another app?&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1429515" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="Mobile" scheme="http://weblogs.asp.net/russnem/archive/tags/Mobile/default.aspx" /></entry><entry><title>Shaking Things Up: Scrum, Agile, and TDD</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/russnem/archive/2007/01/17/shaking-things-up-scrum-agile-and-tdd.aspx" /><id>http://weblogs.asp.net/russnem/archive/2007/01/17/shaking-things-up-scrum-agile-and-tdd.aspx</id><published>2007-01-17T16:49:00Z</published><updated>2007-01-17T16:49:00Z</updated><content type="html">&lt;p style="margin: 0px; font: 12px Helvetica"&gt;In mid September I started working as a vendor for Microsoft. The majority of my time involves coding. Prior to September I had only a vague idea of what scrum and test-driven development were. Scrum aside, I just couldn&amp;#39;t understand why anyone would want to spend time writing all these tests and THEN code their application. My philosophy was, &amp;quot;Let me get some code together that needs to be tested. THEN I&amp;#39;ll write the tests.&amp;quot; Of course, as you&amp;#39;ve probably already guessed, the tests were seldom written.&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;I&amp;#39;ve learned a great deal since that September day, and I continue to do so. The entire project I&amp;#39;m on follows agile methodologies, uses scrum, and is coded by way of test-driven development. It was a shock to my system. Not all software development at Microsoft is handled this way, incidentally. I consider myself one of the lucky ones to be exposed to it.&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;I come from the &amp;quot;old school&amp;quot; way of thinking. That is, project managers and business analysts would spend months and months (if not years) writing up specifications and project plans. More frequently than not, no development was done until the business owners signed off on these specifications. In addition, because very little (if anything) functional was put in front of the stake-holders during this entire time, the specifications were frequently revised and edited many times, to the point where they were often vaguely identifiable from their originals.&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;This is the type of management approach that caused the project at my last employer to fail. The client demanded that full specifications be completed as one of the requisites of my employer getting paid. The development team would start to implement as much as we could due to pending deadlines - only to find obvious holes or errors in the logic once we put usable features in front of the people in the middle of writing the specs. We were literally developing to a moving target. One of the systems, a workflow API, was redesigned four times because the requirements kept changing as we delivered what was documented. So we were faced with pending deadlines to deliver functional specifications for several modules as well as pending deadlines for development - in parallel. You do the math. Because the director had staffed up so much to get all these specifications done (for a while there were 15 people on the PM team), and because it took almost a year, the money ran out. &amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;Now, with that in mind, imagine a methodology whereby you could put useful functionality in the hands of the stake-holders on a regular basis (perhaps monthly) right from the start. Each month you deliver functionality, and you get instant feedback on that delivered functionality so you can make it better the next month while you&amp;#39;re continuing to build the system. By stake-holders, I mean the actual client - the people you&amp;#39;re building the system for, not the project managers or business analysts caught in the middle who are trying to gather requirements.&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;This doesn&amp;#39;t solve the problem of some clients requiring large functional specification documents, but it does offer at least one potential change to the way they&amp;#39;re written: the functional specification can be written AFTER the majority of functionality has been developed and delivered. This is a huge step toward an accurate specification and it also drastically reduces the amount of time it takes to write the document. In addition, every month the development team is getting direct input to keep the application&amp;#39;s business usefulness on track. Granted, there are cases in which business owners will not release budgetary dollars for development until these specifications are signed off, but that is a case for another blog entry.&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;When I was reading about scrum and agile methodologies I found myself approaching it with skepticism. I was so used to spending the time to create complete logical and physical models before a line of code was written that I just couldn&amp;#39;t understand how anyone could possibly set all that aside and only code what was required for that particular month. It only took about two months for me to truly see how this new approach works so much better for everyone right from the start. The hardest part is often convincing the die-hard old-schoolers that it&amp;#39;s time for a change.&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;With the help of &lt;a href="http://blogs.msdn.com/dseven" title="Doug Seven" target="_blank"&gt;Doug Seven&lt;/a&gt;, &lt;a href="http://www.agileprogrammer.com/dotnetguy" title="Brad Wilson" target="_blank"&gt;Brad Wilson&lt;/a&gt;, and &lt;a href="http://blogs.msdn.com/scottdensmore/default.aspx" title="Scott Densmore" target="_blank"&gt;Scott Densmore&lt;/a&gt; I am also now a big proponent of test-driven development. For those who are unfamiliar, here is a simple example.&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;I was asked to create new methods on a class, and these methods would allow someone to add and delete a shortcut from one group to or from another.&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;With test-driven development, you write your test first, then you write just enough code to make the test pass. The theory is that you could spend hours, weeks, or months trying to account for every possible (real and theoretical) scenario as you design an object model or database. Instead of spending so much time on that, you write some tests that validate the one immediate goal you have.&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;To fulfill the requirement given to me, the first thing I typed was the following code:&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span&gt;&lt;span class="Apple-style-span" style="color: #3a7e7e"&gt;TestMethod&lt;/span&gt;&lt;/span&gt;]&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;void&lt;/span&gt;&lt;/span&gt; AddShortCutWithTwoExistingIdsReturnsTrue()&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #3a7e7e"&gt;Guid&lt;/span&gt;&lt;/span&gt;&lt;span&gt; toGroupId = &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #3a7e7e"&gt;Guid&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #6e1111"&gt;&amp;quot;{45722B64-0354-4ed4-A813-1BD67926EAA0}&amp;quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #3a7e7e"&gt;Guid&lt;/span&gt;&lt;/span&gt;&lt;span&gt; foreignGroupId = &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #3a7e7e"&gt;Guid&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #6e1111"&gt;&amp;quot;{F4B729C4-B922-42bc-BED9-C70D9F0A8C36}&amp;quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;bool&lt;/span&gt;&lt;/span&gt; result;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = disco.AddShortcut(toGroupId, foreignGroupId);&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #3a7e7e"&gt;Assert&lt;/span&gt;&lt;/span&gt;.IsTrue(result, &lt;span&gt;&lt;span class="Apple-style-span" style="color: #6e1111"&gt;&amp;quot;AddShortcut failed.&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;// AddShortcutWithNonExistentToGroupIdThrows&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;// AddShortcutWithInvalidToGroupIdThrows&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;// AddShortcutWithInvalidForeignGroupIdThrows&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;// AddShortcutWithNonExistentForeignGroupIdThrows&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;// DeleteShortcutWithNonExistentFromGroupIdThrows&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;// DeleteShortcutWithInvalidFromGroupIdThrows&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;// DeleteShortcutWithNonExistentForeignGroupIdThrows&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;// DeleteShortcutWithInvalidForeignGroupIdThrows&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;// DeleteShortcutWithTwoValidIdsReturnsTrue&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span class="Apple-style-span" style="color: #3c7c23"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;I came up with 10 unit tests, all of which validate 2 little methods &amp;ndash; AddShortcut and DeleteShortcut. Now it&amp;rsquo;s my job to write one test, as I did above, and then write just enough code to get that test to pass. The following is actually too much (all I needed was a method that returned true, but I thought that would be too simple for this example):&lt;/p&gt;&lt;p style="margin: 0px; font: 13px Arial"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;bool&lt;/span&gt;&lt;/span&gt; AddShortcut(&lt;span&gt;&lt;span class="Apple-style-span" style="color: #3a7e7e"&gt;Guid&lt;/span&gt;&lt;/span&gt; toGroupId, &lt;span&gt;&lt;span class="Apple-style-span" style="color: #3a7e7e"&gt;Guid&lt;/span&gt;&lt;/span&gt; foreignGroupId)&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span&gt; (toGroupId == &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #3a7e7e"&gt;Guid&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #6e1111"&gt;&amp;quot;{45722B64-0354-4ed4-A813-1BD67926EAA0}&amp;quot;&lt;/span&gt;&lt;span&gt;) &amp;amp;&amp;amp;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreignGroupId == &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="color: #3a7e7e"&gt;Guid&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #6e1111"&gt;&amp;quot;{F4B729C4-B922-42bc-BED9-C70D9F0A8C36}&amp;quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;true&lt;/span&gt;&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span&gt;&lt;span class="Apple-style-span" style="color: #0022ed"&gt;false&lt;/span&gt;&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px; font: 10px Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px; font: 13px Arial"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;Note the hard-coded Guids. That is because I don&amp;rsquo;t need any more code in order to make the test pass. As I write the other 9 tests, my code will look more and more like you&amp;rsquo;d be used to, but before I would have spent possibly an hour thinking about how I wanted to implement these two methods. Instead, in one hour I have all my code written, and there are at least 10 unit tests that validate that the code works the way it should.&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;A side effect of this test-driven development is a specification for my method - in code. In other words, someone who needed to write a spec could examine my tests and gain a huge amount of information to accurately document what this particular method of the class does.&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;Now consider the effect on the project if every developer did this, especially in a scrum / agile environment. We have just a couple dozen classes in our project and well over 300 unit tests. I can now feel much more confident in updating my code (or adding new code) because I have the ability to run all unit tests that were written by all developers on the project to insure I haven&amp;#39;t made any breaking changes.&lt;/p&gt;&lt;p style="min-height: 14px; margin: 0px; font: 12px Helvetica"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px; font: 12px Helvetica"&gt;Thanks to my new team of mentors for teaching me this. It&amp;#39;s funny how in just a couple of months I&amp;#39;m at a point now where I shutter to think of writing code without having a test that I&amp;#39;m trying to satisfy first!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1423930" width="1" height="1"&gt;</content><author><name>russnem</name><uri>http://weblogs.asp.net/members/russnem.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/russnem/archive/tags/General+Software+Development/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/russnem/archive/tags/.NET/default.aspx" /><category term="Agile" scheme="http://weblogs.asp.net/russnem/archive/tags/Agile/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/russnem/archive/tags/C_2300_/default.aspx" /></entry></feed>