<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>I [heart] code!</title>
        <link>http://geekswithblogs.net/KirstinJ/Default.aspx</link>
        <description>.NET musings from the chick side</description>
        <language>en-US</language>
        <copyright>Kirstin Juhl</copyright>
        <managingEditor>kirstin@juhlnet.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>I [heart] code!</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/KirstinJ/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Learning WPF With BabySmash - Redux: See Drewbie in Action!</title>
            <link>http://geekswithblogs.net/KirstinJ/archive/2008/11/03/learning-wpf-with-babysmash---redux-see-drewbie-in-action.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://web.mac.com/bmeland/http%3A__gallery.mac.com_bmeland/Media/Computer.mov" target="_blank"&gt;Here is a video&lt;/a&gt; of Drew using his SmartNav and special switch to play on the computer!&lt;/p&gt;  &lt;p&gt;*Note: SFW, But there is sound with this video.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126579"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126579" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/KirstinJ/aggbug/126579.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kirstin Juhl</dc:creator>
            <guid>http://geekswithblogs.net/KirstinJ/archive/2008/11/03/learning-wpf-with-babysmash---redux-see-drewbie-in-action.aspx</guid>
            <pubDate>Mon, 03 Nov 2008 17:27:49 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/KirstinJ/comments/126579.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/KirstinJ/archive/2008/11/03/learning-wpf-with-babysmash---redux-see-drewbie-in-action.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/KirstinJ/comments/commentRss/126579.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Learning WPF With BabySmash: Redux. BabySmash KeyBoard Click Events in WPF</title>
            <link>http://geekswithblogs.net/KirstinJ/archive/2008/10/27/learning-wpf-with-babysmash-redux.-babysmash-keyboard-click-events-in.aspx</link>
            <description>&lt;p&gt;Now that I had my Amazing Qwerty KeyBoard, I had to hook it up. BabySmash uses the OnKeyUp event in the MainScreen as its hook to the business logic:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;public partial class MainWindow : Window     &lt;br /&gt;{      &lt;br /&gt;    private readonly Controller controller;      &lt;br /&gt;    public Controller Controller { get { return controller; } }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;public MainWindow(Controller c)     &lt;br /&gt;{      &lt;br /&gt;    this.controller = c;      &lt;br /&gt;    this.DataContext = controller;      &lt;br /&gt;    InitializeComponent();&lt;/font&gt;&lt;font color="#0000ff"&gt;     &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;....&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;protected override void OnKeyUp(KeyEventArgs e)     &lt;br /&gt;{      &lt;br /&gt;    base.OnKeyUp(e);      &lt;br /&gt;    e.Handled = true;      &lt;br /&gt;    controller.ProcessKey(this, e);      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;...&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Since I wanted to mimic the existing behavior as closely as possible, I had to create a corresponding event for my on-screen key board, and then have the MainWindow handle it in the same manner.&lt;/p&gt;  &lt;p&gt;My keys are &amp;lt;Button/&amp;gt;s, so I used the "Click" event on all of my keys:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ff0000"&gt;Button Name&lt;/font&gt;&lt;font color="#0000ff"&gt;="Q"&lt;/font&gt; &lt;font color="#ff0000"&gt;Grid.Column&lt;/font&gt;&lt;font color="#0000ff"&gt;="0"&lt;/font&gt; &lt;font color="#ff0000"&gt;Grid.Row&lt;/font&gt;&lt;font color="#0000ff"&gt;="0"&lt;/font&gt; &lt;font color="#ff0000"&gt;Click="&lt;/font&gt;&lt;font color="#0000ff"&gt;HandleKeyBoardClick" &amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ff0000"&gt;Button Name&lt;/font&gt;&lt;font color="#0000ff"&gt;="W"&lt;/font&gt; &lt;font color="#ff0000"&gt;Grid.Column&lt;/font&gt;&lt;font color="#0000ff"&gt;="1"&lt;/font&gt; &lt;font color="#ff0000"&gt;Grid.Row&lt;/font&gt;&lt;font color="#0000ff"&gt;="0"&lt;/font&gt; &lt;font color="#ff0000"&gt;Click="&lt;/font&gt;&lt;font color="#0000ff"&gt;HandleKeyBoardClick" &amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;...&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ff0000"&gt;Button Name&lt;/font&gt;&lt;font color="#0000ff"&gt;="M"&lt;/font&gt; &lt;font color="#ff0000"&gt;Grid.Column&lt;/font&gt;&lt;font color="#0000ff"&gt;="2"&lt;/font&gt; &lt;font color="#ff0000"&gt;Grid.Row&lt;/font&gt;&lt;font color="#0000ff"&gt;="6"&lt;/font&gt; &lt;font color="#ff0000"&gt;Click="&lt;/font&gt;&lt;font color="#0000ff"&gt;HandleKeyBoardClick" &amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I then implemented the "HandleKeyBoardClick" class in the code behind:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;    protected void HandleKeyBoardClick(object sender, RoutedEventArgs e)     &lt;br /&gt;    {      &lt;br /&gt;        Button b = (Button) sender;      &lt;br /&gt;        NewKeyBoardClick(b.Name);      &lt;br /&gt;    }&lt;/font&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;I abstracted the actual logic of the event raising in case I ever wanted to raise the event in a different way. My NewKeyBoardClick method takes the desired key as a plain-text string (ie: "Q"). I chose not to convert back and forth from ascii codes because I really didn't see any value in doing so.&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;public void NewKeyBoardClick(string keyName)     &lt;br /&gt;{      &lt;br /&gt;    //Raise a key click event for the specified key      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Now I needed a KeyClick event. After much googling and pain (It was during this activity that my KeyBoard user control briefly became a custom control before it was reincarnated back in it's present form.) I not only needed a custom event, I needed a custom event argument (which key was clicked).&lt;/p&gt;  &lt;p&gt;Here is what I came up with:&lt;/p&gt;  &lt;p&gt;First, I created my custom argument:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;public class KeyBoardClickArgs : EventArgs     &lt;br /&gt;{      &lt;br /&gt;    public string KeyName { get; set; }      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Then I created the delegate for my event:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;public delegate void KeyboardClickHandler(Object sender, KeyBoardClickArgs args);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Then I created my event:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;public event KeyboardClickHandler KeyBoardClick;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Now, I needed to raise the event with the proper argument in my NewKeyBoardClick class. First I instantiated my KeyClickArgs and set the keyName property. Then I check for any subscribers to my event, and if I find any, I raise my event:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;public void NewKeyBoardClick(string keyName)     &lt;br /&gt;{      &lt;br /&gt;    KeyBoardClickArgs e = new KeyBoardClickArgs();      &lt;br /&gt;    e.KeyName = keyName;      &lt;br /&gt;    if (KeyBoardClick != null)      &lt;br /&gt;    {      &lt;br /&gt;        KeyBoardClick(this, e);      &lt;br /&gt;    }      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Now my control is ready to go! (I know, I haven't implemented the size property yet - that came later.)&lt;/p&gt;  &lt;p&gt;I added the KeyBoard control the the MainPage window:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;xmlns:local="clr-namespace:BabySmash"&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;Canvas Name="figuresCanvas"&amp;gt;&amp;lt;local:Keyboard3 x:Name="KeyBoardC" Visibility="Hidden"/&amp;gt;&amp;lt;/Canvas&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I set it to "Hidden" because I only want to display it if we are in "drewbie mode".&lt;/p&gt;  &lt;p&gt;Now I just needed to hook up the new event:&lt;/p&gt;  &lt;p&gt;First I added it to the MainWindow constructor:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;KeyBoardC.KeyBoardClick += new Keyboard3.KeyboardClickHandler(KeyBoardC_KeyBoardClick);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Then I used the event in the same way that MainScreen uses its OnKeyUp event:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;void KeyBoardC_KeyBoardClick(object sender, KeyBoardClickArgs e)     &lt;br /&gt; {      &lt;br /&gt;     controller.ProcessKey(this, e.KeyName);      &lt;br /&gt; }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Success!! The MainWindow is responding to keyboard clicks from either the real keyboard or my on-screen keyboard control in exactly the same way! Now I can go ahead with modifying BabySmash and implementing new "DrewbieSmash" features without thinking about the input mechanism.&lt;/p&gt;  &lt;p&gt;I'll work on getting the source code available. Until then, email me.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126228"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126228" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/KirstinJ/aggbug/126228.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kirstin Juhl</dc:creator>
            <guid>http://geekswithblogs.net/KirstinJ/archive/2008/10/27/learning-wpf-with-babysmash-redux.-babysmash-keyboard-click-events-in.aspx</guid>
            <pubDate>Mon, 27 Oct 2008 17:09:42 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/KirstinJ/comments/126228.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/KirstinJ/archive/2008/10/27/learning-wpf-with-babysmash-redux.-babysmash-keyboard-click-events-in.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/KirstinJ/comments/commentRss/126228.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Learning WPF With BabySmash: Redux. My Amazing BabySmash Qwerty Keyboard</title>
            <link>http://geekswithblogs.net/KirstinJ/archive/2008/10/27/learning-wpf-with-babysmash-redux.-my-amazing-babysmash-qwerty-keyboard.aspx</link>
            <description>&lt;p&gt;The first thing I did after downloading BabySmash was to begin building an on-screen keyboard. I installed Microsoft Expressions, but quickly became frustrated. That was a surprise to me because I am a Photoshop pro!! (On portraits anyway). Despite the admonishing of many, I switched over to Visual Studio and began coding my keyboard by hand. Now I was on much more familiar territory! I do plan to return someday to Expressions when I have a more open mind. But for now, I want to build DrewbieSmash! &lt;/p&gt;  &lt;p&gt;The following are my requirements for my keyboard:&lt;/p&gt;  &lt;p&gt;1. Appears in the bottom right corner of the BabySmash main window when BabySmash is in "drewbie mode".&lt;/p&gt;  &lt;p&gt;2. Is resizable.&lt;/p&gt;  &lt;p&gt;3. Sends a key-click event to the main window when a key is clicked on. I wanted to reuse as much code as possible, and hook the on-screen keyboard right into where the real keyboard is hooked in.&lt;/p&gt;  &lt;p&gt;I tried many things... first I made my keyboard a &amp;lt;Window /&amp;gt;. Mainly because the sample xaml files I was working with were all &amp;lt;window /&amp;gt; s, and I was just trying to do some cut-and-paste development to get my feet wet with WPF. Getting my window to render inside the main window as I wanted it to appear was problematic - probably because I didn't know what I was doing. And probably because putting a window inside another window is probably a dumb idea. &lt;/p&gt;  &lt;p&gt;Then there was this challenge... BabySmash is architected so that all logic is executed by a controller class. The controller class requires a FrameworkElement argument and uses this for where it performs the animation. The original BabySmash main window was both the input and the action window, so it just used "this". Since my events were coming from the KeyBoard window, I had to get a reference to the Main window before I could execute the animations in the MainWindow via the controller class. Furthermore, it was apparent to me that BabySmash was really architected around having a single main window, and by continuing down this path I would likely run into additional challenges when trying to work with a second window. &lt;/p&gt;  &lt;p&gt;So I took a step back and realized that in a .NET application, I would make the keyboard a &amp;lt;usercontrol /&amp;gt;, and give it a "KeyClicked" event. &lt;/p&gt;  &lt;p&gt;Since the keyboard object doesn't know anything about the size and real-estate concerns of the containing object, the keyboard was coded to size itself relative to the parent window. There were no pixel values coded into the Keyboard xaml. So originally I thought that the Keyboard size could be entirely controlled by the parent window. However, I soon realized that I have to change the font size as the key board is resized. So I added a "size" property to the KeyBoard control. I didn't want to use explicit pixel values because we still don't know what is going on with the parent. So I made the KeyBoard accept 4 sizes: Large, Medium, Small, Standard. (Standard being the smallest and the size of the on-screen keyboard that ships with the Windows OS. If someone has a better name for that one, please let me know!!!!)&lt;/p&gt;  &lt;p&gt;Now, even though I don't know what the actual size of the KeyBoard will be, I can make a guess as to the size the font should be. And this works very well.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Here is a screen shot of my Amazing BabySmash keyboard. You can see by the name of the control that this is my third attempt at creating a keyboard. The next blog post will be about how I coded the KeyClicked event and how I modified the BabySmash application to use it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/Learnin.MyAmazingBabySmashQwertyKeyboard_92BE/ScreenHunter_01%20Oct.%2027%2009.50_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="359" alt="ScreenHunter_01 Oct. 27 09.50" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/Learnin.MyAmazingBabySmashQwertyKeyboard_92BE/ScreenHunter_01%20Oct.%2027%2009.50_thumb.jpg" width="505" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126221"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126221" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/KirstinJ/aggbug/126221.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kirstin Juhl</dc:creator>
            <guid>http://geekswithblogs.net/KirstinJ/archive/2008/10/27/learning-wpf-with-babysmash-redux.-my-amazing-babysmash-qwerty-keyboard.aspx</guid>
            <pubDate>Mon, 27 Oct 2008 16:10:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/KirstinJ/comments/126221.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/KirstinJ/archive/2008/10/27/learning-wpf-with-babysmash-redux.-my-amazing-babysmash-qwerty-keyboard.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/KirstinJ/comments/commentRss/126221.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Learning WPF With BabySmash: Redux</title>
            <link>http://geekswithblogs.net/KirstinJ/archive/2008/10/25/learning-wpf-with-babysmash-redux.aspx</link>
            <description>&lt;p&gt;A long, long time ago in a galaxy far far away, a developer at Microsoft named &lt;a href="http://www.hanselman.com/blog/" target="_blank"&gt;Scott Hanselman&lt;/a&gt; decided to learn WPF. And so he set out upon the &lt;a href="http://www.hanselman.com/blog/IntroducingBabySmashAWPFExperiment.aspx" target="_blank"&gt;Great BabySmash Experiment&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Meanwhile, in another galaxy, a developer at &lt;a href="http://www.magenic.com/" target="_blank"&gt;Magenic&lt;/a&gt; named Kirstin decided to learn WPF. By this time, the Great BabySmash Experiment had achieved fame far and wide, and so Kirstin &lt;a href="http://www.codeplex.com/babysmash/SourceControl/ListDownloadableCommits.aspx" target="_blank"&gt;downloaded the source code&lt;/a&gt; and created DrewbieSmash.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Who is Drewbie?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Drew is my five-year-old nephew and is very special in many ways. When he was about one year old we learned that he has SMA. &lt;a href="http://www.fsma.org" target="_blank"&gt;Spinal Muscular Atrophy&lt;/a&gt; is a form of Muscular Dystrophy. SMA is the reason he can’t walk or sit unsupported. However, please don’t worry about him. He has a scooter that he can drive like a pro. Besides, he's really smart. Best of all, he's one of the happiest five year olds you’ll ever meet! As you can see in his picture, he gives his life a double thumbs-up!&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/LearningWPFWithBabySmashRedux_1DD/IMG_6264_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="166" alt="IMG_6264" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/LearningWPFWithBabySmashRedux_1DD/IMG_6264_thumb.jpg" width="247" border="0" /&gt;   &lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="243" alt="shapeimage_1" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/LearningWPFWithBabySmashRedux_1DD/shapeimage_1_thumb.jpg" width="184" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Few things will be more important for Drew than access to computers. Using a mouse is too difficult for him. When we were struggling with a way for Drew to access the computer I found a wonderful piece of equipment called the &lt;a href="http://www.naturalpoint.com/smartnav/" target="_blank"&gt;SmartNav&lt;/a&gt;. Drew puts a small ring on his finger to mouse and uses a switch to click. Drew will use an on-screen keyboard with his SmartNav for keyboard input.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DrewbieSmash&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ideally Drew will be able to use the on-screen keyboard that ships with the OS, so as to minimize the adaptations that need to be made to any PC he wants to use. (The SmartNav and the switch use a USB port and the SmartNav software must be installed.) However, the on-screen keyboards are quite small and require precise control of the mouse, something that Drew is working to master with his SmartNav.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;When I saw BabySmash, I had an idea for a modification that could transform it into a platform for Drew (or any other toddler) to master the keyboard as well as learn letters and words. Instead of displaying whatever letter the user happens to "smash", why not have a word displayed that the child would then key in? If the correct letter was pressed, the letter would come dancing out and settle into place into its proper spot below the word. For Drew, I would create an on-screen keyboard as part of DrewbieSmash that could start out large with big keys and gradually be made smaller and smaller as his skill at clicking on the correct letter improves. Eventually he will be able to use the regular on-screen keyboard.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Learning WPF&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;And so here begins my adventure in learning WPF. Never having had any exposure whatsoever to WPF, yet eager to get going, I eschewed all preliminary research on the topic and decided to go the old-fashioned route: reverse engineering BabySmash and coding by Google. I will blog about my progress and what I learn along the way. If anyone has any helpful comments, PLEASE add your two cents. Scott has graciously offered to make whatever I come up with available as part of the BabySmash repository. Thanks for riding along with me!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126101"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126101" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/KirstinJ/aggbug/126101.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kirstin Juhl</dc:creator>
            <guid>http://geekswithblogs.net/KirstinJ/archive/2008/10/25/learning-wpf-with-babysmash-redux.aspx</guid>
            <pubDate>Sat, 25 Oct 2008 05:53:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/KirstinJ/comments/126101.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/KirstinJ/archive/2008/10/25/learning-wpf-with-babysmash-redux.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/KirstinJ/comments/commentRss/126101.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Everything old is new again</title>
            <link>http://geekswithblogs.net/KirstinJ/archive/2008/08/21/everything-old-is-new-again.aspx</link>
            <description>&lt;p&gt;Last I attended a TFS User Group meeting in Minneapolis. Bill Maurer explained how Microsoft used Team Foundation Server to build the next release of Visual Studio.&lt;/p&gt;  &lt;p&gt;It was really interesting to hear how the development team used TFS to track their own work. The most interesting thing to me was to hear about how TFS is being used to manage Java projects (Not at Microsoft of course!) Previously it had not occurred to me to consider TFS as anything other than a .NET development tool. But, of, course, data is data, and it makes perfect sense now that TFS would be used to track any type of project.&lt;/p&gt;  &lt;p&gt;Bill mentioned that quite frequently, the software development team doesn't want management to have this detailed kind of visibility into the process. "If they knew how bad things really were, we would get fired!" Ten years ago I started putting Manufacturing Execution Systems into factories in my previous life as a Chemical Engineer. The operators nearly staged a mutiny over the fact that their actions would be tracked down to every operation they performed on every item. One plant was a union plant and the union was looking into whether or not the contract even allowed this type of data to be tracked! Management was also unsure... they were spending millions to dollars to implement systems that had no direct affect on the product.&lt;/p&gt;  &lt;p&gt;Now, of course, you cannot imagine a manufacturing plant that does not have traceability down through the process for each unit produced. The operators work in an environment of reasonable expectations and an optimized process. No one thinks twice about logging into a system and then scanning each unit as it comes down the line.&lt;/p&gt;  &lt;p&gt;Similarly, I think that one day no one will believe that we actually tried to build software without tracking this kind of data. The value of the data will be many times the cost of purchasing and implementing the system that supports it. Bill's comment to the teams that are concerned about giving management an actual picture of what is going on is that management will finally understand what can actually be accomplished, and remove bottlenecks if performance is unsatisfactory. "The working environment for the software team will actually improve", Bill says.&lt;/p&gt;  &lt;p&gt;I do believe in the promised of optimized performance through Defining metrics, measuring what matters, analyzing the data, and improving and controlling the process. I have lived it in my years as a manufacturing engineer. TFS promises to be a huge asset to the teams that choose to use it for this purpose. I am anxious for Microsoft to give us a hint as to what Rosario will do. Perhaps at the upcoming PDC. I guess we will just have to wait.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124620"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124620" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/KirstinJ/aggbug/124620.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kirstin Juhl</dc:creator>
            <guid>http://geekswithblogs.net/KirstinJ/archive/2008/08/21/everything-old-is-new-again.aspx</guid>
            <pubDate>Fri, 22 Aug 2008 00:35:32 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/KirstinJ/comments/124620.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/KirstinJ/archive/2008/08/21/everything-old-is-new-again.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/KirstinJ/comments/commentRss/124620.aspx</wfw:commentRss>
        </item>
        <item>
            <title>TechEd US Sessions online</title>
            <link>http://geekswithblogs.net/KirstinJ/archive/2008/08/21/teched-us-sessions-online.aspx</link>
            <description>&lt;p&gt;Blogging so that I can find these again when I have time to watch them...:)&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=985"&gt;&lt;b&gt;Introduction to Microsoft Dynamics CRM&lt;/b&gt;&lt;/a&gt;&lt;b&gt;, &lt;/b&gt;Susan Sauls&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=982"&gt;&lt;b&gt;Intro to SQL Server Data Services&lt;/b&gt;&lt;/a&gt;&lt;b&gt;,  &lt;/b&gt;Soumitra Sengupta&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=990"&gt;&lt;b&gt;The Spy Who Hacked Me!&lt;/b&gt;&lt;/a&gt;&lt;b&gt; ,&lt;/b&gt; Alex Smolen, Rudolph Araujo&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=983"&gt;&lt;b&gt;How Microsoft SQL Server Helps You to Lower Your Cost of Storage,&lt;/b&gt;&lt;/a&gt; Torsten Grabs&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=997"&gt;&lt;b&gt;Microsoft System Centre Virtual Machine Manager 2008: Overview&lt;/b&gt;&lt;/a&gt;&lt;b&gt;, &lt;/b&gt;Edwin Yeun&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=989"&gt;&lt;b&gt;A Hackers Diary: How I Can Hack Your Vulnerable Services and How You Can Stop Me&lt;/b&gt;&lt;/a&gt;&lt;b&gt;,&lt;/b&gt; Marcus Murray&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=984"&gt;&lt;b&gt;Advances Microsoft SQL Server PowerShell Tips and Tricks&lt;/b&gt;&lt;/a&gt;&lt;b&gt;,&lt;/b&gt; Dan Jones&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=987"&gt;&lt;b&gt;Technical Introduction to Microsoft System Center Data Protection Manager 2007&lt;/b&gt;&lt;/a&gt;&lt;b&gt;,&lt;/b&gt; Jason Buffington&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=992"&gt;&lt;b&gt;Introduction to Microsoft Forefront Code Name "Stirling",&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;Brad Wright&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=1000"&gt;&lt;b&gt;Hyper-V Architecture, Scenarios and Networking&lt;/b&gt;&lt;/a&gt;&lt;b&gt;, &lt;/b&gt;Jeff Woolsey, Mike Sterling&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=996"&gt;&lt;b&gt;Windows, PowerShell, and Windows Management Instrumentation: Unveiling Microsoft's Best Kept Secret&lt;/b&gt;&lt;/a&gt;&lt;b&gt;,  &lt;/b&gt;Ben Pearce&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=995"&gt;&lt;b&gt;Windows Logins Revealed&lt;/b&gt;&lt;/a&gt;&lt;b&gt;, &lt;/b&gt;Mark Minasi&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=991"&gt;&lt;b&gt;Virtualization and Security: What Does it Mean For Me?&lt;/b&gt;&lt;/a&gt; Steve Riley&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=993"&gt;&lt;b&gt;Windows Security Boundaries&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;Mark Russinovich&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=994"&gt;&lt;b&gt;How to Build Your next Generation IT Infrastructure Using Windows Server 2008, &lt;/b&gt;&lt;/a&gt;Corey Hynes&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=999"&gt;&lt;b&gt;Deploying Windows Server 2008 Hyper V and System Centre Virtual Machine Manager 2008 Best Practices&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;Edwin Yeun, Alan Stewart&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=986"&gt;&lt;b&gt;Deploying Microsoft Dynamics CRM&lt;/b&gt;&lt;/a&gt;&lt;b&gt;, &lt;/b&gt;Ryan Casey&lt;b&gt; &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=988"&gt;&lt;b&gt;Microsoft System Centre Service Manager&lt;/b&gt; &lt;/a&gt;Paul Ross, Travis Wright &lt;/p&gt;  &lt;p&gt;Ø &lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=998"&gt;&lt;b&gt;Windows Server 2008 Hyper-V: Scripting &amp;amp; Programmatic Management for Fun &amp;amp; Profit (VBS &amp;amp; PowerShell&lt;/b&gt;&lt;/a&gt;&lt;b&gt;), &lt;/b&gt;John Kelbley, Alexander Lash&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124613"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124613" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/KirstinJ/aggbug/124613.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kirstin Juhl</dc:creator>
            <guid>http://geekswithblogs.net/KirstinJ/archive/2008/08/21/teched-us-sessions-online.aspx</guid>
            <pubDate>Thu, 21 Aug 2008 21:07:29 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/KirstinJ/comments/124613.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/KirstinJ/archive/2008/08/21/teched-us-sessions-online.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/KirstinJ/comments/commentRss/124613.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Charity Fragathon</title>
            <link>http://geekswithblogs.net/KirstinJ/archive/2008/08/02/charity-fragathon.aspx</link>
            <description>&lt;p&gt;A colleague of mine is organizing a community event to benefit &lt;a href="http://www.childrensmn.org"&gt;Children's Hospitals and Clinics of Minnesota&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.charityfragathon.com/" target="_blank"&gt;Charity Fragathon&lt;/a&gt; will be held September 24, 2008 at the Microsoft office in Bloomington.&lt;/p&gt;  &lt;p&gt;This is an amazing hospital, not only due to the world-class health care, but for the family experience they provide. &lt;/p&gt;  &lt;p&gt;So come on out, have some fun, and benefit this great cause!&lt;/p&gt;  &lt;p&gt;I'll be there, and I don't even game!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124200"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124200" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/KirstinJ/aggbug/124200.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kirstin Juhl</dc:creator>
            <guid>http://geekswithblogs.net/KirstinJ/archive/2008/08/02/charity-fragathon.aspx</guid>
            <pubDate>Sat, 02 Aug 2008 17:50:44 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/KirstinJ/comments/124200.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/KirstinJ/archive/2008/08/02/charity-fragathon.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/KirstinJ/comments/commentRss/124200.aspx</wfw:commentRss>
        </item>
        <item>
            <title>I'm on DimeCasts.NET!!!</title>
            <link>http://geekswithblogs.net/KirstinJ/archive/2008/07/31/im-on-dimecasts.net.aspx</link>
            <description>&lt;p&gt;There is a &lt;a href="http://www.dimecasts.net/" target="_blank"&gt;great new site&lt;/a&gt; dedicated to educating developers on all sorts of topics. It is run by developers, and the contributors are developers.&lt;/p&gt;  &lt;p&gt;My first episode had been released: &lt;a href="http://www.dimecasts.net/Casts/CastDetails/24"&gt;Creating a Project in Team Foundation Server&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;I am really excited to be a part of this great project... look for more episodes from me coming soon!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124164"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124164" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/KirstinJ/aggbug/124164.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kirstin Juhl</dc:creator>
            <guid>http://geekswithblogs.net/KirstinJ/archive/2008/07/31/im-on-dimecasts.net.aspx</guid>
            <pubDate>Fri, 01 Aug 2008 00:49:10 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/KirstinJ/comments/124164.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/KirstinJ/archive/2008/07/31/im-on-dimecasts.net.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/KirstinJ/comments/commentRss/124164.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Planning for &amp;quot;Duh!&amp;quot;</title>
            <link>http://geekswithblogs.net/KirstinJ/archive/2008/07/03/planning-for-quotduhquot.aspx</link>
            <description>&lt;p&gt;We've all done it. More often than we'd like to admit. Yesterday I spent half a day working on an issue where the end result turned out to be SO SIMPLE as to make me ashamed to call myself a developer. There was the feeling as I slogged through the problem that "This shouldn't be this difficult". When the problem resolved with 4 simple lines of code, my giddiness with solving the problem was tempered by my feeling like a complete idiot for having spent half a day producing those four lines. Hearing that I was the third person to tackle this issue, that two others had tried and failed made me feel only marginally better.&lt;/p&gt;  &lt;p&gt;Software development is extremely rewarding and mind-numbingly frustrating at the same time. You can go for days, even weeks, where progress is steady and the project marches along right on schedule, maybe even a bit ahead. And then you hit it. The problem you can't solve - the functionality you can't quite implement, the bug that you just can't fix. And there you sit, working on one stupid little thing for hours, perhaps a day or more. You go home feeling as if you have made no progress, as if you have produced nothing for all your laboring at the keyboard.  Then you finally solve the problem, and all you have to say is "Duh!" And the task that was supposed to take 4 hours has morphed into a two-day effort. And  now you're behind schedule.&lt;/p&gt;  &lt;p&gt;When estimating projects, I know to add 30% to whatever number I come up with. This is my "fudge factor". A fudge factor that allows for the inevitable "Duh" moments not accounted for up front, even if I make an effort to be conservative as to the anticipated productivity in my estimate. Breathing room for the things that pop up during a project.&lt;/p&gt;  &lt;p&gt;Thirty percent sounds like a lot. And it is. I always feel as if I am padding the estimate. It is tempting to to be the hero who can deliver the project in an impressively timely manner. But the stress and loss of credibility of delivering late more than cancels that out. And time and time again, I am grateful for that thirty percent. I am glad that I planned for "Duh!"&lt;/p&gt;  &lt;p&gt;What was my latest "Duh!" you ask?&lt;/p&gt;  &lt;p&gt;I was working on a web application that was using the asp menu control. One section of the app was to function as a wizard, with "Continue" and "Back" buttons serving as the navigation, and the menu simply indicating which step of the wizard the user is at for non-authenticated users. The desired behavior for a non-authenticated user was that the menu be completely disabled, with the menu items indicating which step the user is at by which one is selected. An authenticated user would be have the ability to use the menu to land on which ever step (page) they desire. Hmm, that's easy. Just make the menu disabled for non-authenticated users. Oops, now the page won't load because it can't reference the selected item in a group that is disabled. Move this to the end of the Page Load. Now the page loads fine, but the menu item of the current step does not appear as selected. Assumption: Setting the Enabled &lt;strong&gt;or Selectable&lt;/strong&gt; properties of the menu &lt;strong&gt;or the menu items&lt;/strong&gt; would cause the menu to be rendered with no item appearing as selected when the page finished loading. DID NOT TEST ASSUMPTION. Onto another path. Playing with style sheets. Playing with the controls' methods. Playing with javascript because we don't even want to post back if the user clicks on the menu. Getting another set of eyes to look at the problem, and demonstrating to him that setting the Selectable property of the menu items to false at the end of Page Load renders the menu with nothing selected. Umm... it's working as I need it to. The menu is disabled and non-clickable, but the current selection is highlighted on the menu. Click through the wizard, and the highlighted menu item changes. My assumption held true only for the menu control and it's enabled property, not the selectable property of the menu items.&lt;/p&gt;  &lt;p&gt;protected void Page_Load(object sender, EventArgs e)    &lt;br /&gt;{&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;//snip...&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;if (!User.Identity.IsAuthenticated)      &lt;br /&gt;    {       &lt;br /&gt;        LeftMenu.Items[0].Selectable = false;       &lt;br /&gt;        LeftMenu.Items[1].Selectable = false;       &lt;br /&gt;        LeftMenu.Items[2].Selectable = false;       &lt;br /&gt;    }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Duh!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Four hours. Four lines of code.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Update: I should point out that the 30% addition applies only to the development phase, not the estimate in its entirety.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123556"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123556" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/KirstinJ/aggbug/123556.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kirstin Juhl</dc:creator>
            <guid>http://geekswithblogs.net/KirstinJ/archive/2008/07/03/planning-for-quotduhquot.aspx</guid>
            <pubDate>Thu, 03 Jul 2008 15:30:28 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/KirstinJ/comments/123556.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/KirstinJ/archive/2008/07/03/planning-for-quotduhquot.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/KirstinJ/comments/commentRss/123556.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Customize your TFS Template</title>
            <link>http://geekswithblogs.net/KirstinJ/archive/2008/06/23/customize-your-tfs-template.aspx</link>
            <description>&lt;p&gt;One of the questions that came out of my TFS talk at the Magenic Technology Summit was:&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;How do you go about customizing one of the existing templates provided for TFS, such as MSF Agile? We may want to add new types for Work Items, for example, or add new states that work items can be in.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The easiest way to do this is through the &lt;a href="http://msdn.microsoft.com/en-us/tfs2008/bb980963.aspx"&gt;Visual Studio Team System 2008 Team Foundation Server Power Tools&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;If you do not have the Power Tools installed, you can still do this by editing the XML that makes up the templates.&lt;/p&gt;  &lt;p&gt;First, get the existing template that you want to customize by clicking Team  &amp;gt; Team Foundation Server Settings &amp;gt; Process Template Manager. Select the template you want to customize by selecting it and click "Download".&lt;/p&gt;  &lt;p&gt; &lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_01%20Jun.%2023%2021.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="197" alt="ScreenHunter_01 Jun. 23 21" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_01%20Jun.%2023%2021_thumb.png" width="336" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_02%20Jun.%2023%2021.17_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="257" alt="ScreenHunter_02 Jun. 23 21.17" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_02%20Jun.%2023%2021.17_thumb.jpg" width="317" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The process template will be downloaded to the specified directory. The process template is nothing more than a set of XML files organized into folders by function. The top-level folder is the name of the template.&lt;/p&gt;  &lt;p&gt;In this case, I have downloaded the MSF for Agile Software Development - v4.2:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_03%20Jun.%2023%2021.37_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="257" alt="ScreenHunter_03 Jun. 23 21.37" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_03%20Jun.%2023%2021.37_thumb.jpg" width="477" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I HIGHLY suggest changing the name of the template as your first modification, so that if you mess up the template (easy to do), you can start over by downloading the unchanged vanilla template. A this point I also change the name of the top-level directory for the Process Template.&lt;/p&gt;  &lt;p&gt;In ProcessTemplate.xml, make the following changes:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;?&lt;/font&gt;&lt;font color="#800000"&gt;xml &lt;/font&gt;&lt;font color="#ff0000"&gt;version&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;1.0&lt;/font&gt;" &lt;font color="#ff0000"&gt;encoding&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;utf-8&lt;/font&gt;" &lt;font color="#0000ff"&gt;?&amp;gt;&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;ProcessTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;     &lt;br /&gt;  &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;metadata&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;     &lt;br /&gt;    &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;MSF for Agile Software Development - v4.2 - MODIFIED&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Now you are ready to create a new type of work item.&lt;/p&gt;  &lt;p&gt;First, open workitems.xml and add your new work item type:&lt;/p&gt;  &lt;p&gt;  - &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;task&lt;/font&gt; &lt;font color="#ff0000"&gt;id&lt;/font&gt;="&lt;font color="#0000ff"&gt;WITs&lt;/font&gt;" &lt;font color="#ff0000"&gt;name&lt;/font&gt;="&lt;font color="#0000ff"&gt;WorkItemType definitions&lt;/font&gt;" &lt;font color="#ff0000"&gt;plugin&lt;/font&gt;="&lt;font color="#0000ff"&gt;Microsoft.ProjectCreationWizard.WorkItemTracking&lt;/font&gt;"         &lt;font color="#ff0000"&gt;completionMessage&lt;/font&gt;="&lt;font color="#0000ff"&gt;Work item types created&lt;/font&gt;"&amp;gt;     &lt;br /&gt;-     &lt;font color="#0000ff"&gt;&amp;lt;&lt;font color="#800000"&gt;taskXml&lt;/font&gt;&amp;gt;       &lt;br /&gt;&lt;/font&gt;-         &lt;font color="#0000ff"&gt;&amp;lt;&lt;font color="#800000"&gt;WORKITEMTYPES&lt;/font&gt;&amp;gt;&lt;/font&gt;     &lt;br /&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;WORKITEMTYPE&lt;/font&gt; &lt;font color="#ff0000"&gt;fileName&lt;/font&gt;="&lt;font color="#0000ff"&gt;WorkItem Tracking\TypeDefinitions\Bug.xml&lt;/font&gt;"&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;     &lt;br /&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;WORKITEMTYPE&lt;/font&gt; &lt;font color="#ff0000"&gt;fileName&lt;/font&gt;="&lt;font color="#0000ff"&gt;WorkItem Tracking\TypeDefinitions\Task.xml&lt;/font&gt;"&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;     &lt;br /&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;WORKITEMTYPE&lt;/font&gt; &lt;font color="#ff0000"&gt;fileName&lt;/font&gt;="&lt;font color="#0000ff"&gt;WorkItem Tracking\TypeDefinitions\Qos.xml&lt;/font&gt;"&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;     &lt;br /&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;WORKITEMTYPE&lt;/font&gt; &lt;font color="#ff0000"&gt;fileName&lt;/font&gt;="&lt;font color="#0000ff"&gt;WorkItem Tracking\TypeDefinitions\Scenario.xml&lt;/font&gt;"&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;     &lt;br /&gt;            &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;WORKITEMTYPE&lt;/font&gt; &lt;font color="#ff0000"&gt;fileName&lt;/font&gt;="&lt;font color="#0000ff"&gt;WorkItem Tracking\TypeDefinitions\Risk.xml&lt;/font&gt;"&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;WORKITEMTYPE&lt;/font&gt; &lt;font color="#ff0000"&gt;fileName&lt;/font&gt;="&lt;font color="#0000ff"&gt;WorkItem Tracking\TypeDefinitions\NewWorkItemType .xml&lt;/font&gt;"&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt; &lt;font color="#0000ff"&gt;&amp;lt;/&lt;font color="#800000"&gt;WORKITEMTYPES&lt;/font&gt;&amp;gt;&lt;/font&gt;       &lt;br /&gt;    &lt;font color="#0000ff"&gt;&amp;lt;/&lt;font color="#800000"&gt;taskXml&lt;/font&gt;&amp;gt;&lt;/font&gt;       &lt;br /&gt;  &lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;task&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Next you need to create the template for your work item type: in the TypeDefinitions folder, open the XML for the work item most like the new one that you are creating.&lt;/p&gt;  &lt;p&gt;The FIRST step is to save this XML document with the new name. The name is the what you typed into the ProcessTemplate.xml, in this case, "NewWorkItemType.xml"&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;After you have saved the new template, you can make the modifications that you need.&lt;/p&gt;  &lt;p&gt;In the &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;FIELDS&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; section, you can delete, modify, or add the fields that you want to appear on your new work item type.&lt;/p&gt;  &lt;p&gt;In the &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;WORKFLOW&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; section, you can add, modify, or delete states for your new work item.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;For example: to add a new state called "Estimate", you would add the following xml to the &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;WORKFLOW&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;STATES&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; &lt;/font&gt;section:&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;STATE&lt;/font&gt; &lt;font color="#ff0000"&gt;value&lt;/font&gt;="&lt;font color="#0000ff"&gt;Estimate&lt;/font&gt;"&lt;font color="#0000ff"&gt; /&amp;gt; &amp;lt;/&lt;font color="#800000"&gt;STATE&lt;/font&gt;&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;Here, you can also set field values and transition behavior - topics that will be covered in a future post.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;When you are finished with your modifications, you can Upload the process template the same way that you downloaded it, by browsing to the new folder and clicking "Upload".&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Here you can see my Process Template Dialog after a successful Process Template upload:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_05%20Jun.%2023%2022.39_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="299" alt="ScreenHunter_05 Jun. 23 22.39" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_05%20Jun.%2023%2022.39_thumb.jpg" width="408" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;This template is now available for me to create a project from:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_06%20Jun.%2023%2022.40_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="371" alt="ScreenHunter_06 Jun. 23 22.40" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_06%20Jun.%2023%2022.40_thumb.jpg" width="425" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;When I select the new template for my new project, I can see the new work item type:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_07%20Jun.%2023%2023.02_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="207" alt="ScreenHunter_07 Jun. 23 23.02" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_07%20Jun.%2023%2023.02_thumb.jpg" width="517" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Using the Power Tools gives us a graphical interface to the process templates: A few screen shots are shown, but we will not go into using the Power Tools here. Using the Power Tools is a much easier and safer way to modify your process templates, and I highly recommend that you download them and give them a whirl!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_08%20Jun.%2023%2023.09_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="311" alt="ScreenHunter_08 Jun. 23 23.09" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_08%20Jun.%2023%2023.09_thumb.jpg" width="586" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_09%20Jun.%2023%2023.09_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="402" alt="ScreenHunter_09 Jun. 23 23.09" src="http://geekswithblogs.net/images/geekswithblogs_net/KirstinJ/WindowsLiveWriter/CustomizeyourTFSTemplate_12909/ScreenHunter_09%20Jun.%2023%2023.09_thumb.jpg" width="583" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Update: Your TFS User or Group must have been granted the "Manage process template" permission in order to customize the templates.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123114"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123114" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/KirstinJ/aggbug/123114.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Kirstin Juhl</dc:creator>
            <guid>http://geekswithblogs.net/KirstinJ/archive/2008/06/23/customize-your-tfs-template.aspx</guid>
            <pubDate>Tue, 24 Jun 2008 04:14:01 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/KirstinJ/comments/123114.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/KirstinJ/archive/2008/06/23/customize-your-tfs-template.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/KirstinJ/comments/commentRss/123114.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>