<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GeekTieGuy &#187; WPF</title>
	<atom:link href="http://www.geektieguy.com/category/wpf/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.geektieguy.com</link>
	<description>News and views from the geek tie guy.</description>
	<lastBuildDate>Sat, 04 Feb 2012 18:16:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>A brief history of five TouchSmart generations&#8211;pioneering ideas for Windows 8</title>
		<link>http://www.geektieguy.com/2011/09/26/a-brief-history-of-five-touchsmart-generationspioneering-ideas-for-windows-8/</link>
		<comments>http://www.geektieguy.com/2011/09/26/a-brief-history-of-five-touchsmart-generationspioneering-ideas-for-windows-8/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 17:15:00 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[HP TouchSmart]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows 8]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2011/09/26/a-brief-history-of-five-touchsmart-generationspioneering-ideas-for-windows-8/</guid>
		<description><![CDATA[A few weeks ago I attended Microsoft’s BUILD conference to get ready for what’s coming in Windows 8. As I was sitting in the first day’s keynotes and big picture sessions, I couldn’t help but think back on the work HP has done with its TouchSmart software and notice areas where the TouchSmart software pioneered [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I attended Microsoft’s <a href="http://www.buildwindows.com" target="_blank">BUILD</a> conference to get ready for what’s coming in Windows 8. As I was sitting in the first day’s keynotes and big picture sessions, I couldn’t help but think back on the work HP has done with its TouchSmart software and notice areas where the TouchSmart software pioneered ideas that Microsoft is now building into Windows 8 for the new Metro style of programming and the new touch-first Start screen. I decided to dig a little deeper and give you a brief tour of the history of TouchSmart and highlight some of the ideas now in Windows 8 that we put into the TouchSmart software a long time ago. I’ll put a [+Win8] marker by the ideas as I go along. Let’s get started!</p>
<h2>TouchSmart 1, aka SmartCenter, aka LaunchPad (January 2007)</h2>
<p>The first version of TouchSmart was not called that. It was named SmartCenter and shipped with the very first modern all-in-one touch-enabled PC, the HP TouchSmart IQ770.</p>
<p><img src="http://t2.gstatic.com/images?q=tbn:ANd9GcSVeH0JQN-rnjtLp8t9UGHxyx86YGJMJRHTymkZWVrPCQOWh-0M" alt="" width="128" height="214" />                <img src="http://t1.gstatic.com/images?q=tbn:ANd9GcS-bl_301aTIEQbnQaFz9g95iWebNXJXIAVAvYC5i6v8MciYDonpg" alt="" width="225" height="225" /></p>
<p>This machine was one of the so-called “Dream PCs” for Microsoft’s introduction of Windows Vista in January of 2007. <a href="http://www.geektieguy.com/2008/04/04/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-1/" target="_blank">I’ve written about this version of SmartCenter before</a>, so I won’t repeat much of that here.</p>
<p><strong>Touch-first [+Win8]</strong></p>
<p>Of course, the main point of even embarking on a project such as the SmartCenter software was that Windows wasn’t even remotely ready for touch interactions. Every app on the Windows Desktop requires the precision that the mouse pointer provides. Fingers and touch can’t hit the tiny controls accurately enough. So SmartCenter was designed with that in mind, and as a result had large targets all throughout its user interface. Here are some sample screenshots:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Home.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SmartCenter_1_Home" src="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Home_thumb.png" alt="SmartCenter_1_Home" width="304" height="192" border="0" /></a><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Personalize_1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SmartCenter_1_Personalize_1" src="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Personalize_1_thumb.png" alt="SmartCenter_1_Personalize_1" width="304" height="192" border="0" /></a><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Personalize_2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SmartCenter_1_Personalize_2" src="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Personalize_2_thumb.png" alt="SmartCenter_1_Personalize_2" width="304" height="192" border="0" /></a><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Personalize_3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SmartCenter_1_Personalize_3" src="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Personalize_3_thumb.png" alt="SmartCenter_1_Personalize_3" width="304" height="192" border="0" /></a><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Weather_2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SmartCenter_1_Weather_2" src="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Weather_2_thumb.png" alt="SmartCenter_1_Weather_2" width="304" height="192" border="0" /></a><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Weather_3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SmartCenter_1_Weather_3" src="http://www.geektieguy.com/wp-content/uploads/2011/09/SmartCenter_1_Weather_3_thumb.png" alt="SmartCenter_1_Weather_3" width="304" height="192" border="0" /></a></p>
<p>Note that all buttons, checkboxes, radio buttons, scrollbars, etc. are large enough to be easily tapped with a finger. Note also that, for example, the on-screen keyboard that is used for entering a ZIP code in the Weather app defaults to the correct layout, i.e. the numeric one.</p>
<p><strong>Live app data in shortcuts [+Win8]</strong></p>
<p>This idea wasn’t really all that new, of course. Snippets of live app data displayed in a mini-view of sorts had been introduced with Windows Sidebar gadgets and other widget-like UIs on other operating systems, but SmartCenter was the first to use live data as part of the shortcut that launches an app. You could say the shortcuts were more like mini-versions of the full app. Live data is of course hard to demo with screenshots, so here is a small video clip of the SmartCenter home screen (or start screen, if you will), showing shortcuts that update their information as time passes:</p>
<p><iframe style="background-color: #fcfcfc; width: 320px; height: 199px; padding: 0px;" title="Preview" src="https://skydrive.live.com/embedphoto.aspx/.Public/Videos%20for%20Blog%20posts/TouchSmart%20history/TouchSmart1.4^_3.mp4?cid=8bf3893855b5d3ae&amp;sc=documents" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="320" height="240"></iframe></p>
<p>This major version of the SmartCenter software was delivered with four total releases: 1.0, 1.1, 1.2, and 1.4. Towards the final delivery of version 1.0, it became clear that a standardized way of getting the live information from the apps was needed. This became a major area of investigation and investment for the next major version of the software.</p>
<p>&nbsp;</p>
<h2>TouchSmart 2 (June 2008)</h2>
<p>The second generation of TouchSmart software, 2.x, was introduced with IQ500/IQ800 series hardware. These two hardware models marked the beginning of the monitor-like appearance of the TouchSmart PCs. The IQ770 was a “multi-volume” chassis – these new models had a “single volume” design, supported by the “easel” style feet that were used in the follow-on generation as well.</p>
<p><img src="http://t3.gstatic.com/images?q=tbn:ANd9GcSoRytlIFNYpKmd5pBl6GfxNHzou74v1yKkgsW41RuRTWqGHgCcKA" alt="" width="223" height="226" />          <img src="http://t2.gstatic.com/images?q=tbn:ANd9GcQw7L7CkRZpY9t-PD10yDYzvjnpWBL2k3c9efoAWCBGf6qwC35kAA" alt="" width="233" height="217" /></p>
<p>The 2.x series of software was released in three versions: 2.0, 2.5 and 2.8.</p>
<p><strong>Fixed layouts for apps [+Win8]</strong></p>
<p>With SmartCenter 2.0, we introduced the concept of fixed sized layouts for the TouchSmart apps. We initially picked three: small, medium and large. You can see two of the three illustrated by this screenshot:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb.png" alt="image" width="644" height="404" border="0" /></a></p>
<p>The Tutorials, Canvas and Calendar apps are shown in medium size, while the remaining apps are shown in small size. By tapping on an app, you would go to the large size:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb1.png" alt="image" width="644" height="404" border="0" /></a></p>
<p>This layout is purposely not called full screen, since there is a reserved area at the top of the screen for navigation, app name/time and music playback controls.</p>
<p><strong>Tiles concept [+Win8]</strong></p>
<p>In order to make it clear that the app representations in SmartCenter were not just icons, we decided to call them tiles, or rather “live tiles.” This term was used in the developer documentation that was produced to help other people plug their apps into SmartCenter, and so we had “small tiles,” “medium tiles” and “large tiles.” For each tile size we gave guidance about how to use it appropriately. We introduced the term “layouts” to suggest that each tile size should use a different layout of basically the same content or information. As you notice from the screenshots above, when the Weather tile is small, it shows only basic information. In the large tile, the information is more full-featured and also provides access to settings for the Weather app. The medium tile for Weather looks like this:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/Medium.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Medium" src="http://www.geektieguy.com/wp-content/uploads/2011/09/Medium_thumb.png" alt="Medium" width="644" height="404" border="0" /></a></p>
<p>As you can see, this layout for Weather includes only the current conditions and the forecast for the day.</p>
<p>With TouchSmart 2.0, a big investment was made to produce media consumption applications: Music, Video and Photo (often shortened to “MVP”) as well as a WebCam and DVD app. The screenshot above shows other apps that were published later (Netflix and Recipe Box, for example), but that just goes to show that following development guidelines has benefits: newer apps can work with older SmartCenter versions…</p>
<p>Other changes from the 1.0 version include the top and bottom row of “tile scrollers” and the music playback control set (aka. “media plate”) that I already mentioned. The tile scrollers had two different behaviors, depending on how full they were. If enough tiles were present, the scroller would become an infinitely looping container. If not enough tiles were present, it would have “snap-to” endpoints.</p>
<p>The TouchSmart 2.0 software was unveiled at a big press event in Berlin, Germany. Several of my colleagues were invited to attend to make sure everything went smoothly from a technical perspective. The most nerve-wracking part was that the TouchSmart IQ500 was to come out of a pedestal on stage after sitting inside said pedestal for an extended period of time before its unveiling. People were not sure the thermals were designed to handle as little exchange of air as this posed. Here’s a video from the introduction to give you a better idea of what I’m talking about (skip towards 1:18 or so to see the pedestal and the TouchSmart lifting out of it):</p>
<div id="scid:53357c8b-5919-4e32-8c25-305d27c17a37:9e415f70-27e7-4be9-9a2d-e122c944cd95" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;"><object width="425" height="350" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/6K3XBC6gH1g&amp;rel=0" /><param name="wmode" value="transparent" /><embed width="425" height="350" type="application/x-shockwave-flash" src="http://www.youtube.com/v/6K3XBC6gH1g&amp;rel=0" wmode="transparent" /></object></div>
<p>As you can see, everything worked out pretty well. This was the biggest introduction ever made for a TouchSmart PC line. No event after that had that much effort put into it.</p>
<p>&nbsp;</p>
<h2>TouchSmart 3 (October 2009)</h2>
<p>With the third generation of SmartCenter, we piggybacked onto the 600/300 series of hardware. The enclosures still used the easel stand design with three feet for support, and the exterior was tweaked a bit along with the screen aspect ratio (now 16:9 instead of 16:10).</p>
<p><img src="http://t3.gstatic.com/images?q=tbn:ANd9GcR1kS5T4LL4BiWT-bNXlaOpDLkvFw2lraVj6w5fTCSs9BvhH81sLA" alt="" width="178" height="283" />          <img src="http://t3.gstatic.com/images?q=tbn:ANd9GcT-UPF_83O9CdfL2QdhKj43zOcZ5FU3S94be845fjQRQfFBCyfH2Q" alt="" width="267" height="189" /></p>
<p>Generally, though the concept was largely the same, except for the software. A big investment was made to produce more apps for the TouchSmart software suite, and this brought us apps like Canvas, Twitter, Hulu, Live TV, Link, Movie Store, Recipe Box and a bunch of others. The TouchSmart software development guidelines were augmented with more of a proper SDK with app samples, installer samples and more guidance.</p>
<p><strong>New layout</strong></p>
<p>SmartCenter 3.0 introduced another layout that we called wide-interactive. You see, in SmartCenter 2.x there was no way to interact with the medium sized tiles in the upper tile scroller (except for in the browser, but that’s a small detail). In this version we wanted to provide interaction with the app in the upper scroller. In order to do that properly we needed a bigger size tile and a new layout to have enough space for interaction to make sense. Here’s a screenshot of 3.0 (running on a 16:10 screen, not the aspect ratio it was designed for – so circular elements are “squished”):</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb2.png" alt="image" width="644" height="404" border="0" /></a></p>
<p>In SmartCenter 3.0 the touch scrollers no longer “looped” infinitely, but each had a “snap to” end regardless of how many tiles were present; each wide-interactive tile was given a colored title bar to add a little splash of variety and visual interest. In addition, the “media plate” and other control elements on the home screen were redesigned to appear a bit lighter than before. Also, standard button glyphs were introduced for closing and minimizing SmartCenter. Oh, and the clock was moved around and given a day of the week display. Phew – at least the Personalize button stayed almost in place…</p>
<p>The final big change was that tiles in the bottom scroller no longer used the small layout. They were simply icons to launch the app into large layout directly. This was done to improve performance and load less stuff at the startup of SmartCenter.</p>
<p>&nbsp;</p>
<h2>TouchSmart 4 (September 2010)</h2>
<p>Okay, so here we are, almost at the last chapter of this brief history (which is turning out not so brief after all…) TouchSmart 4.0 was introduced with the TouchSmart 310 (and 610) series of hardware. These departed from the easel-type stand and went to a single-foot design (I know there’s a better term for it, I just can’t think of it at the moment).</p>
<p><img src="http://t2.gstatic.com/images?q=tbn:ANd9GcQHWV_WEWdK950GupTCW0B-y8siZSw69WByfokdnZpbJNP6u6pz" alt="" width="105" height="226" />          <img src="http://t3.gstatic.com/images?q=tbn:ANd9GcT-rqxf9gb5s2ARWvhjq5mVK9FuthTyoNOCz09cTxCdgmQ1Ez6TYw" alt="" width="225" height="225" /></p>
<p><img src="http://t0.gstatic.com/images?q=tbn:ANd9GcRQ9aIpbPXpAnh8bKtjyeSButfLXCPBQqnwz5GWdJxf4Nqpifz7" alt="" width="155" height="324" /><img src="data:image/jpg;base64,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" alt="" width="214" height="236" /><img src="http://t3.gstatic.com/images?q=tbn:ANd9GcRsb905ukxjDnuMuFW59XdAxsRErnQn5bwJYWBNv6Cosj8fucM40g" alt="" width="292" height="172" /></p>
<p>TouchSmart 4 didn’t see much investment in new apps, but focused on new capabilities provided by the SmartCenter framework.</p>
<p><strong>Infinite Canvas [+Win8, sort of, on the Metro Start screen]</strong></p>
<p>A major goal of the SmartCenter framework software had been to provide an almost limitless space for apps to live in. With SmartCenter 4.0 that goal was finally realized. Not only did the framework provide for an infinitely expanding space for hosted apps to live in, it also did away with the upper tile scroller and let the apps be positioned freely on the canvas. This is what TouchSmart 4.0 looks like after initial startup:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb3.png" alt="image" width="644" height="404" border="0" /></a></p>
<p>And once again, things were moved around on screen: The clock from lower left to lower right (and it was given a function: click to show a mini-calendar), personalize from lower right to lower left (and the word personalize removed). The “media plate” music playback controls were removed and put into the music app instead. The volume control was separated out from the media plate and put in the upper left. The bottom carousel was redesigned and had the infinite looping re-introduced (to allow for a bit of visual and interactive playfulness). Tapping a tile launches the corresponding app:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image4.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb4.png" alt="image" width="644" height="404" border="0" /></a></p>
<p>Apps can be moved around freely and the carousel shows a colored highlight for each running app:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image5.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb5.png" alt="image" width="644" height="404" border="0" /></a></p>
<p>If you look at the above shot closely, you&#8217;ll notice the Weather app in what looks like another layout. What&#8217;s happening there is not a new layout, though. It&#8217;s simply the wide-interactive layout, shrunk down to an &#8220;inactive&#8221; size. Thus we called it &#8220;shrunk layout&#8221; or &#8220;shrunk view&#8221;.</p>
<p>The button next to personalize in the lower left can be used if the app you’re looking for in the carousel is hard to find: QuickLaunch is sorted alphabetically:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image6.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb6.png" alt="image" width="644" height="404" border="0" /></a></p>
<p><strong>Parallax background [+Win8, sort of, on the Metro Start screen]</strong></p>
<p>Scrolling the canvas (or panning it, if you prefer) is done by grabbing empty space (with mouse or touch) and moving from side to side. To add a little visual interest to this, and to demonstrate the departure from the 3.0 tile scrollers, we added a parallax effect to the background to give you the illusion of looking into the distance on your screen. Several sets of parallax backgrounds were developed for variety’s sake, to be picked in the personalize area.</p>
<p><strong>Magnets</strong></p>
<p>Another major feature of SmartCenter 4.0 was the introduction of something we called “magnets”. These represent active content that originally came either from an app or from SmartCenter itself (in the case of Graffiti magnets). Magnets eliminate the need to start an app when you want to enjoy a favorite piece of content, be it a photo, video or some music you want to keep handy for quick enjoyment. Here are a few magnets placed on the canvas (they can be “pinned” so they always stay visible or “unpinned” to scroll with the canvas):</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image7.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb7.png" alt="image" width="644" height="404" border="0" /></a></p>
<p>Here’s what it looks like after panning a bit (while playing the fireplace video):</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image8.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb8.png" alt="image" width="644" height="404" border="0" /></a></p>
<p>You can see the pinned magnets haven’t moved and the background looks slightly different (the islands have moved at different paces to give the illusion of depth as they’re moving).</p>
<p>Okay, let’s see what it looks like in action:</p>
<p><iframe style="background-color: #fcfcfc; width: 320px; height: 187px; padding: 0px;" title="Preview" src="https://skydrive.live.com/embedphoto.aspx/.Public/Videos%20for%20Blog%20posts/TouchSmart%20history/TouchSmart4.0^_2.mp4?cid=8bf3893855b5d3ae&amp;sc=documents" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="320" height="240"></iframe></p>
<p>&nbsp;</p>
<h2>TouchSmart 5 (September 2011)</h2>
<p>And that brings us to the latest generation of SmartCenter (as of this date), i.e. 5.0. This version of the TouchSmart framework software was brought to market with the just recently introduced 520/420/320 series of TouchSmart PCs. The exterior of the machines has been updated once more to keep up with design trends, but otherwise the single-volume enclosure is still the chosen form.</p>
<p><img src="http://t3.gstatic.com/images?q=tbn:ANd9GcT2FOVSBPmi3M2h9WJbvKnsTXMyiLwvEUVmc8-2IIq9jW32YS8M" alt="" width="275" height="183" />             <img src="http://t3.gstatic.com/images?q=tbn:ANd9GcQYC2d6dXlc0FSq7w7ybkDRoyvPTLqZ368gmz68pZ_GqnDslro8" alt="" width="177" height="184" /></p>
<p><strong>Integration of Windows apps, desktop icons</strong></p>
<p>The biggest change in SmartCenter 5.0 regards the blending of the two environments that were previously separated: SmartCenter and the Windows Desktop. This means you no longer need to exit the SmartCenter environment when you want to run Windows apps. Here’s a screenshot of SmartCenter 5.0:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image9.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb9.png" alt="image" width="644" height="404" border="0" /></a></p>
<p>Note that the Windows 7 taskbar is fully visible and that you can use it for launching apps and seeing what apps are running. The SmartCenter app carousel now has the icon highlight turned on permanently and only shows a short animated starburst as an app is launched. You also see all your desktop icons represented on the SmartCenter canvas. As you can see, the magnets overlap the desktop icons, which can be a bit of a clutter issue. No worries, you can turn off the desktop icons via Settings, if you don’t like them on the canvas. Or you can rearrange your magnets so they occupy different space:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2011/09/image10.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.geektieguy.com/wp-content/uploads/2011/09/image_thumb10.png" alt="image" width="644" height="404" border="0" /></a></p>
<p>In general, SmartCenter 5.0 attempts to bring the touch-first environment of past generations together with the traditional, mouse-centric desktop. That’s a value-proposition you don’t have in Windows 8, which is most likely not available until sometime in late 2012 anyway…</p>
<p><strong>Automatic panning/scrolling</strong></p>
<p>One additional thing SmartCenter 5.0 does is automatic panning of the canvas/desktop whenever an app is launched. This removes the need for you to have to rearrange app windows frequently when you want to switch from one app to another. The canvas pans automatically to make more room for every app you start. To return to an app, you just click on it in the taskbar or the app carousel. Another video might explain it a bit better:</p>
<p><iframe style="background-color: #fcfcfc; width: 320px; height: 187px; padding: 0px;" title="Preview" src="https://skydrive.live.com/embedphoto.aspx/.Public/Videos%20for%20Blog%20posts/TouchSmart%20history/TouchSmart5.0^_1.mp4?cid=8bf3893855b5d3ae&amp;sc=documents" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="320" height="240"></iframe></p>
<p>This behavior can be turned off in Settings as well, in case it’s not useful to you. There are many, many areas that I haven&#8217;t touched on in this post, such as all the personalization and customization aspects that SmartCenter contains and how they changed over time. Or the fact that you can make your own parallax backgrounds (not documented anywhere, unfortunately, but pretty easy to figure out for enterprising souls). Or the easter eggs, oh yes&#8230;</p>
<p>Let me make some general remarks about the last four generations of SmartCenter: Any apps written to observe the guidelines of SmartCenter 2.0 are able to run on SmartCenter 2.0 through 5.0. A nice compatibility feature. Of course, older versions of apps needed updates as new SmartCenter functionality was introduced (or removed, as with the media plate removal in 4.0), but as you’ve seen, the Netflix app (which was published with SmartCenter 3.0) runs just fine in SmartCenter 2.0 and 5.0 as well. What’s more, if you know what you’re doing, you can have all the versions of SmartCenter 2.0 – 5.0 running on the same system. That’s how I was able to collect screenshots and videos for this post. Oh, and the technology underlying all these versions of SmartCenter is Microsoft’s Windows Presentation Foundation (WPF), 3.0, 3.5, and 4.0. The various apps were written in anything from compiled-to-native-code-Python to WPF to Adobe Flash. The software development process used since about SmartCenter 2.5 is anchored in Scrum, an Agile software development framework.</p>
<p>This concludes my brief history of the TouchSmart software. As you have seen, Windows 8 definitely picked up a lot of the features that the SmartCenter framework pioneered: Live tiles, fixed layout sizes for apps, parallax scrolling with an expandable space and touch-first design. Until Windows 8 is available, the TouchSmart 5.0 software suite is most likely the best alternative for touch &#8211; combined with new thinking on how to add something more to the the desktop environment &#8211; that you’ll find on an all-in-one PC anywhere.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2011/09/26/a-brief-history-of-five-touchsmart-generationspioneering-ideas-for-windows-8/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>HP TouchSmart SDK 3.0 &#8211; Giveaways at PDC 09</title>
		<link>http://www.geektieguy.com/2009/11/17/hp-touchsmart-sdk-3-0-giveaways-at-pdc-09/</link>
		<comments>http://www.geektieguy.com/2009/11/17/hp-touchsmart-sdk-3-0-giveaways-at-pdc-09/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 16:00:00 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[HP TouchSmart]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2009/11/17/hp-touchsmart-sdk-3-0-giveaways-at-pdc-09/</guid>
		<description><![CDATA[To mark the release of the TouchSmart 3.0 SDK, HP has a goodie to give away at the Microsoft PDC 09: A super-slim 2 GB USB memory stick (embedded in a hard-plastic business card with a nice imprint). It contains the new SDK and a few documents about a software development partner program HP is [...]]]></description>
			<content:encoded><![CDATA[<p>To mark the release of the TouchSmart 3.0 SDK, HP has a goodie to give away at the Microsoft PDC 09: A super-slim 2 GB USB memory stick (embedded in a hard-plastic business card with a nice imprint). It contains the new SDK and a few documents about a software development partner program HP is starting.</p>
<p>If you see me at PDC, say hi, and I may be able to hand you one of these puppies. I only have a limited supply, though. 15 to be precise.</p>
<p>Check out the pictures:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2009/11/IMG_3135.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_3135" border="0" alt="IMG_3135" src="http://www.geektieguy.com/wp-content/uploads/2009/11/IMG_3135_thumb.jpg" width="644" height="484" /></a></p>
<p>Front of the card</p>
<p>&#160;</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2009/11/IMG_3136.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_3136" border="0" alt="IMG_3136" src="http://www.geektieguy.com/wp-content/uploads/2009/11/IMG_3136_thumb.jpg" width="644" height="484" /></a></p>
<p>Back of the card</p>
<p>&#160;</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2009/11/IMG_3137.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_3137" border="0" alt="IMG_3137" src="http://www.geektieguy.com/wp-content/uploads/2009/11/IMG_3137_thumb.jpg" width="644" height="484" /></a></p>
<p>Back of the card with USB memory stick flipped open/out </p>
<p>&#160;</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2009/11/IMG_3138.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_3138" border="0" alt="IMG_3138" src="http://www.geektieguy.com/wp-content/uploads/2009/11/IMG_3138_thumb.jpg" width="644" height="484" /></a>&#160;</p>
<p>Front of the card with USB memory stick flipped open/out</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2009/11/17/hp-touchsmart-sdk-3-0-giveaways-at-pdc-09/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New SDK for HP TouchSmart software development &#8211; out now!</title>
		<link>http://www.geektieguy.com/2009/11/16/new-sdk-for-hp-touchsmart-software-development-out-now/</link>
		<comments>http://www.geektieguy.com/2009/11/16/new-sdk-for-hp-touchsmart-software-development-out-now/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 15:30:00 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[HP TouchSmart]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2009/11/16/new-sdk-for-hp-touchsmart-software-development-out-now/</guid>
		<description><![CDATA[Today HP is announcing a new Software Development Kit for helping you write apps that play well in the HP TouchSmart “shell” environment. The new SDK still contains the general guidelines that outline both what makes a good app that’s optimized for touch interaction and the general rules you have to play by in order [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK01.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TS3SDK01" src="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK01_thumb.png" border="0" alt="TS3SDK01" width="513" height="402" /></a></p>
<p>Today HP is announcing a new Software Development Kit for helping you write apps that play well in the HP TouchSmart “shell” environment. The new SDK still contains the general guidelines that outline both what makes a good app that’s optimized for touch interaction and the general rules you have to play by in order to “fit” into the HP TouchSmart shell.</p>
<p>But this time around there’s more: For the first time there is also documentation for a WPF library that you can use to more quickly write an app that heeds all of the rules that need to be followed. This library has actually existed for a few releases already, but it was not documented until now (for HP TouchSmart 3.0).</p>
<p>There are also two sample applications. One that demonstrates the basics of the WPF library (and that shows you what the shell does to the apps on a pretty detailed level – it’s great for seeing what registered messages are sent to the app, how the app gets sized, etc.) and one that’s a little game. To round out things, there’s some skeleton sample app code as well, so you can get started quickly with your app idea.</p>
<p>Here are a few screenshots of the two sample apps:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK03.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TS3SDK03" src="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK03_thumb.png" border="0" alt="TS3SDK03" width="504" height="316" /></a></p>
<p>“Hello world” Wide-interactive tile</p>
<p> </p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK08.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TS3SDK08" src="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK08_thumb.png" border="0" alt="TS3SDK08" width="504" height="316" /></a></p>
<p>“Hello world” Large tile</p>
<p> </p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK10.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TS3SDK10" src="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK10_thumb.png" border="0" alt="TS3SDK10" width="644" height="161" /></a></p>
<p>Notification with CircleX icon</p>
<p> </p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK11.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TS3SDK11" src="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK11_thumb.png" border="0" alt="TS3SDK11" width="644" height="160" /></a></p>
<p>Notification with CircleCheck icon</p>
<p> </p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK02.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TS3SDK02" src="http://www.geektieguy.com/wp-content/uploads/2009/11/TS3SDK02_thumb.png" border="0" alt="TS3SDK02" width="504" height="316" /></a> </p>
<p>“Hello Mole” Wide-interactive tile</p>
<p> </p>
<p>The documentation is provided in two forms: PDF for easy printing and reading offline as well as in Windows Help format for easy searching and looking at class library details.</p>
<p>You’ll notice that most of this only applies to WPF development. If you’re not using WPF yet (why aren’t you? – it’s a great platform), the general guidelines still apply and work. The shell is actually technology agnostic, since all it cares about, really, is the window (handle) your app produces. As long as your technology stack produces a Win32 window, you can “play”. The essence of that is <a href="http://www.geektieguy.com/2009/09/24/hp-touchsmart-application-development-in-a-nutshell/" target="_blank">something I’ve talked about before</a>.</p>
<p>So where can you get this newfangled contraption? Head right over to <a href="http://www.touchsmartdevzone.com/download/file/2074-27" target="_blank">http://www.touchsmartdevzone.com/download/file/2074-27</a> to start downloading. There’s still a license agreement in the installer (to make the lawyers happy), but I believe you can now download the thing without having to consent to the agreement first.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2009/11/16/new-sdk-for-hp-touchsmart-software-development-out-now/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>New HP TouchSmart 600 and 300: choice quotes on the software</title>
		<link>http://www.geektieguy.com/2009/10/13/new-hp-touchsmart-600-and-300-choice-quotes-on-the-software/</link>
		<comments>http://www.geektieguy.com/2009/10/13/new-hp-touchsmart-600-and-300-choice-quotes-on-the-software/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 15:23:26 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[HP TouchSmart]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2009/10/13/new-hp-touchsmart-600-and-300-choice-quotes-on-the-software/</guid>
		<description><![CDATA[PCMag.com: This third-generation TouchSmart PC is boosted by Windows 7&#8242;s gesture support, but HP&#8217;s custom multitouch software is even more impressive. But as with the earlier models, on the TouchSmart 600 it&#8217;s HP&#8217;s custom software that really shines. Version 3.0 is a significant upgrade, offering touch-friendly versions of Hulu, Netflix, Twitter […] And the HP [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.engadget.com/photos/hp-touchsmart-300-and-600-press-shots/2359457/"><img title="" alt="" src="http://www.blogcdn.com/www.engadget.com/media/2009/10/hp-touchsmart-pr-17.jpg" width="320" height="258" /></a><a href="http://www.engadget.com/photos/hp-touchsmart-300-and-600-press-shots/2359449/"><img alt="" src="http://www.blogcdn.com/www.engadget.com/media/2009/10/hp-touchsmart-pr-11.jpg" width="320" height="265" /></a></p>
<p align="left"><a href="http://www.pcworld.com/reviews/product/302502/review/touchsmart_600.html" target="_blank">PCMag.com</a>:</p>
<blockquote><p align="left">This third-generation TouchSmart PC is boosted by Windows 7&#8242;s gesture support, but HP&#8217;s custom multitouch software is even more impressive.</p>
</blockquote>
<blockquote><p align="left">But as with the earlier models, on the TouchSmart 600 it&#8217;s HP&#8217;s custom software that really shines. Version 3.0 is a significant upgrade, offering touch-friendly versions of Hulu, Netflix, Twitter<span style="color: #333333"> […]</span></p>
</blockquote>
<blockquote><p align="left">And the HP apps now multitask, letting you hop back and forth by sliding them around with a fingertip. The interface is responsive, and is the benchmark for <a href="http://www.pcworld.com/article/168576-2/allinone_pcs_with_a_touch_of_style.html">upcoming</a> Windows 7 all-in-one PCs from Acer, Asus, Dell, Gateway, and MSI.</p>
</blockquote>
<p align="left">&#160;<a href="http://www.engadget.com/2009/10/13/hp-touchsmart-300-and-600-bump-the-software-to-the-next-level-t/" target="_blank">Engadget</a>:</p>
<blockquote><p align="left">[…], but more important is what HP is doing with its own TouchSmart application. It&#8217;s added panes for Hulu, Netflix, Twitter and an HP Music Store powered by Rhapsody, which work in nicely with the rest of the touch-friendly apps onboard and a bit of underlying Microsoft technology keeping things humming &#8212; like a nice big handwriting pane for quick Rhapsody searches. There&#8217;s also a voice controlled recipe app that can capture recipes from popular recipe sites and read them out loud to you, and the photo app can hook up with a phone over Bluetooth and pull off photos.</p>
</blockquote>
<p align="left"><a href="http://gizmodo.com/5380088/hp-touchsmart-600-review-multitouch-multimedia-mogul" target="_blank">Gizmodo</a>:</p>
<blockquote><p align="left">But to really take advantage of the system, you&#8217;ll want to use the TouchSmart interface and the wonderful, custom apps.</p>
</blockquote>
<blockquote><p align="left">The one downfall here is that HP has designed TouchSmart to run all of the bundled apps at once. You&#8217;re truly multitasking, and that means stacking HDTV, Hulu, Netflix, photo editing, a browser, Twitter, and even more video playback. The system generally handles itself admirably, but the TV tuning definitely tips the scales on occasion (just watch the video for interface stutters). If I were to use the system as my DVR on a regular basis, I&#8217;d probably cut down the fat on HP&#8217;s apps and buy myself some resources.</p>
</blockquote>
<blockquote><p align="left">I want to love the TouchSmart 600, but I just really, really like it a lot. The functionality is all there; no one can question the full media suite of apps, like Netflix, Hulu, and Twitter, let alone the full Windows 7 OS sitting right behind HP&#8217;s optional software. It&#8217;s the light performance hiccups coupled with a less than 100% touch interface that stop me from screaming at the top of my lungs, &quot;YOU SHOULD BUY THIS RIGHT NOW OR GIVE UP ON LIFE COMPLETELY.&quot;</p>
</blockquote>
<p align="left"><a href="http://reviews.cnet.com/desktops/hp-touchsmart-600/4505-3118_7-33775796.html?tag=centerColumnArea1.1" target="_blank">CNet.com</a>:</p>
<blockquote><p align="left">While HP has clearly borrowed from Sony in its wall-mounting and video input capabilities, the software designed for its touch interface is unique and just as compelling.</p>
</blockquote>
<blockquote><p align="left">As promising as we find HP&#8217;s new touch programs, Recipe Box in particular, we found the touch interface unresponsive at times, and the main touch software carousel can be slow to load.</p>
</blockquote>
<blockquote><p align="left">Neither Sony nor Gateway have put as much effort into their respective touch software as HP has.</p>
</blockquote>
<blockquote><p align="left">You might also appreciate the numerous video tutorials included with the system to help you navigate the new touch software.</p>
</blockquote>
<p align="left"><a href="http://howtohackstuff.com/2009/10/12/hp-goes-multitouch-crazy-with-touchsmart-all-in-ones-and-tx2-updates-hp/" target="_blank">Howtohackstuff.com</a>:</p>
<blockquote><p>HP continues to put its TouchSmart user interface on top of Windows 7 and it is one of the best I have seen. The new stuff comes in the way of applications; there are now loads of new third party applications, including Hulu, Twitter and Netflix. The interface is as smooth as a baby&#8217;s bottom and the main set of tiles fan across the screen and you can easily flick to toggle them. Again, check out the full review of the TouchSmart 600 to get a glimpse of how it really works. HP may just have a method to its touch madness.</p>
</blockquote>
<p align="left"><a href="http://blog.laptopmag.com/video-hands-on-newish-hp-touchsmart-tx2-offers-touch-twitter-hulu-apps" target="_blank">Laptopmag.com</a>:</p>
<blockquote><p>Not only is the touch interface on the refreshed tx2 much better than anything else we’ve used on a notebook, HP is adding cool new apps like Twitter and Hulu, with more to come.</p>
</blockquote>
<blockquote><p>What makes the “new” tx2 stand out is what it does with touch.</p>
</blockquote>
<blockquote><p>Unlike the very limited MediaSmart software HP bundled previously, this machine has HP’s full TouchSmart treatment, which means it has the same slick tile interface and nearly all the same applications. These include <a href="http://blog.laptopmag.com/video-hands-on-newish-hp-touchsmart-tx2-offers-touch-twitter-hulu-apps#">photos</a>, music, weather, notes, games, a touch-friendly Web browser, and more. Just like on the desktop, you can move smaller menu items to the main menu by dragging the tiles up, or vice versa.</p>
</blockquote>
<p><a href="http://www.chipchick.com/2009/10/hp-touchsmart-600.html" target="_blank">ChipChick.com</a>:</p>
<blockquote><p><a href="http://www.shopping.hp.com/webapp/shopping/series_can.do;HHOJSID=kJFBKJLFjLVzq6vBg1vFGVZs1CGn1GBcWnh2VWG8RJnsyPsK24hn!-1463697170?storeName=computer_store&amp;landing=desktops&amp;a1=Category&amp;v1=All-in-One+PCs">HP</a> has released two new TouchSmart All-in-one PCs and these latest models come preloaded with an&#160; impressive, and very much improved upon set of built-for-touch applications.</p>
</blockquote>
<p><span style="color: #777777"><a href="http://www.gottabemobile.com/2009/10/13/video-demos-of-new-hp-touchsmart-apps-touch-interface" target="_blank">GottaBeMobile.com</a>:</span></p>
<blockquote><p>HP’s new all-in-one TouchSmart PCs come with an improved touch interface and some new apps. I really like Recipe Box, an application that organizes all of your online recipes. The application can be controlled with your fingers or through a Bluetooth headset. I rarely cook, but I’d probably be willing to spend more time in the kitchen if I had something like this.</p>
</blockquote>
<blockquote><p>The new TouchSmart PCs have a touch interface that’s a lot more lively than previous versions.</p>
</blockquote>
<blockquote><p>The new TouchSmart PCs come with touch applications for Hulu, Netflix and Twitter. Consumers may have fun with these applications, but I found the business applications HP had on display much more compelling.</p>
</blockquote>
<p>Edit [adding more stuff just because]:</p>
<p><a href="http://www.crunchgear.com/2009/10/13/this-years-laptop-and-pc-lines-are-touch-gasmic-but-why/" target="_blank">CrunchGear</a>:</p>
<blockquote><p>I will hand it to HP and Sony: their interfaces are gorgeous. The HP interface I saw last week has a number of simple tools – a recipe box, for example, that can take recipes from the web and import them into a private database – as well as the standard stretch’n&#8217;drag photo and note-taking applications that make touch actually compelling.</p>
</blockquote>
<p>I’m sure there will be more, and there will be more criticism too. Developing software is always about trade-offs, and sometimes customers want other trade-offs to be made; that’s why software is never “done”.</p>
<p>But these first few reviews make me feel it was worth the time, working on the TouchSmart software. And yes, the “shell” that hosts all the various applications is still written in WPF. WPF rocks!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2009/10/13/new-hp-touchsmart-600-and-300-choice-quotes-on-the-software/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Digitial photo metadata: What a mess! Tools disagree on what is what.</title>
		<link>http://www.geektieguy.com/2008/12/26/digitial-photo-metadata-what-a-mess-tools-disagree-on-what-is-what/</link>
		<comments>http://www.geektieguy.com/2008/12/26/digitial-photo-metadata-what-a-mess-tools-disagree-on-what-is-what/#comments</comments>
		<pubDate>Fri, 26 Dec 2008 07:52:43 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2008/12/26/digitial-photo-metadata-what-a-mess-tools-disagree-on-what-is-what/</guid>
		<description><![CDATA[Part of the motivation to write my Simple Photo Tagger program was to make sure that when I put a caption on a picture, it will be embedded in the picture in all the various &#8220;locations&#8221; (I have no better word for it) that the various tools out there use. And let me tell you, [...]]]></description>
			<content:encoded><![CDATA[<p>Part of the motivation to write my <a href="http://www.geektieguy.com/simple-photo-tagger" target="_blank">Simple Photo Tagger</a> program was to make sure that when I put a caption on a picture, it will be embedded in the picture in all the various &#8220;locations&#8221; (I have no better word for it) that the various tools out there use.</p>
<p>And let me tell you, it&#8217;s a big mess! To illustrate, let me use the WIC query notation for metadata that Microsoft uses and list which program uses what locations to store &#8220;caption&#8221; (and &#8220;select&#8221; other) information:</p>
<p><b>Adobe Photoshop Elements 6.0 Organizer<br /></b>/app1/ifd/{uint=270}<br />/xmp/dc:description/x-default<br />/app13/irb/8bimiptc/iptc/Caption</p>
<p><b>Windows Live Photo Gallery 12.0.1347.718</b> <br />/xmp/dc:title/x-default</p>
<p><b>Google Picasa 3.1.0 (build 70.71, 0)</b> <br />/app13/irb/8bimiptc/iptc/Caption</p>
<p><b>Microsoft Pro Photo Tools 1.0</b> <br /><em>Title</em> <br />/app1/ifd/{uint=270}<br />/xmp/dc:title/x-default<br />/app13/irb/8bimiptc/iptc/Object Name</p>
<p><em>Headline </em><br />/xmp/dc:description/x-default<br />/app13/irb/8bimiptc/iptc/Caption</p>
<p><strong>Adobe Photoshop 7.0.1</strong> <br /><em>Caption</em> <br />/app1/ifd/{uint=270}<br />/xmp/dc:description/x-default<br />/app13/irb/8bimiptc/iptc/Caption</p>
<p><em>Title</em> <br />/xmp/dc:title/x-default<br />/app13/irb/8bimiptc/iptc/Object Name</p>
<p>I actually used Simple Photo Tagger to discover these differences, since it will query most of the above locations and display any that have data &#8220;in them&#8221;. The ones that don&#8217;t have data, will not be shown.</p>
<p>So if you want to make sure that no matter which tool you use to work on your digital photos, they will pick up your caption properly, use <a href="http://www.geektieguy.com/simple-photo-tagger" target="_blank">Simple Photo Tagger</a>. It will make sure to write your caption to as many locations as the various other tools out there seem to use.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2008/12/26/digitial-photo-metadata-what-a-mess-tools-disagree-on-what-is-what/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Photo Tagger &#8211; A simple, fast and efficient tool for adding comments to digital pictures</title>
		<link>http://www.geektieguy.com/2008/12/24/simple-photo-tagger-a-simple-fast-and-efficient-tool-for-adding-comments-to-digital-pictures/</link>
		<comments>http://www.geektieguy.com/2008/12/24/simple-photo-tagger-a-simple-fast-and-efficient-tool-for-adding-comments-to-digital-pictures/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 22:28:08 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/?p=327</guid>
		<description><![CDATA[You may have seen the CardSharkV program I&#8217;ve published here previously. So far it hasn&#8217;t met with much interest out there. Maybe this one will: Simple Photo Tagger.          I&#8217;ve been looking for a program that will help me work through commenting on thousands of my digital photos. I haven&#8217;t found anything that&#8217;s focused solely on this one [...]]]></description>
			<content:encoded><![CDATA[<p>You may have seen the <a href="http://www.geektieguy.com/products/" target="_blank">CardSharkV program</a> I&#8217;ve published here previously. So far it hasn&#8217;t met with much interest out there. Maybe this one will: Simple Photo Tagger.</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2008/12/shot1.png"><img class="alignnone size-medium wp-image-320" title="SimplePhotoTagger1" src="http://www.geektieguy.com/wp-content/uploads/2008/12/shot1-300x236.png" alt="SimplePhotoTagger1" width="300" height="236" /></a>         <a href="http://www.geektieguy.com/wp-content/uploads/2008/12/shot2.png"><img class="alignnone size-medium wp-image-332" title="SimplePhotoTagger2" src="http://www.geektieguy.com/wp-content/uploads/2008/12/shot2-300x236.png" alt="SimplePhotoTagger2" width="300" height="236" /></a></p>
<p>I&#8217;ve been looking for a program that will help me work through commenting on thousands of my digital photos. I haven&#8217;t found anything that&#8217;s focused solely on this one task that I consider essential for adding value to my collection. So, like any developer not finding what he/she wants, I rolled my own.</p>
<p>I&#8217;m making the result <a href="http://www.geektieguy.com/simple-photo-tagger" target="_blank">available to you</a>, in case you&#8217;re interested. It&#8217;s written in WPF 3.5 SP1, in case you&#8217;re curious about such details. I&#8217;m looking for testers and feedback, so for a while I&#8217;ll waive the nominal charge for a license key.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2008/12/24/simple-photo-tagger-a-simple-fast-and-efficient-tool-for-adding-comments-to-digital-pictures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WIC metadata in .NET: Getting around &quot;Property cannot be found&quot; / System.ArgumentException /&quot;Exception from HRESULT: 0x88982F40&quot;</title>
		<link>http://www.geektieguy.com/2008/11/16/wic-metadata-in-net-getting-around-property-cannot-be-found-systemargumentexception-exception-from-hresult-0x88982f40/</link>
		<comments>http://www.geektieguy.com/2008/11/16/wic-metadata-in-net-getting-around-property-cannot-be-found-systemargumentexception-exception-from-hresult-0x88982f40/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 04:39:37 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Software development]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2008/11/16/wic-metadata-in-net-getting-around-property-cannot-be-found-systemargumentexception-exception-from-hresult-0x88982f40/</guid>
		<description><![CDATA[Here&#8217;s a bit of an obscure error message I&#8217;ve run into while working with WIC (Windows Imaging Component) on .NET/WPF, trying to write XMP metadata into an image: &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; So far, a search on Google has yielded few usable results. I hope this post will change [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a bit of an obscure error message I&#8217;ve run into while working with WIC (Windows Imaging Component) on .NET/WPF, trying to write XMP metadata into an image:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2008/11/image.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="368" alt="image" src="http://www.geektieguy.com/wp-content/uploads/2008/11/image-thumb.png" width="644" align="left" border="0"/></a> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>So far, a search on Google has yielded few usable results. I hope this post will change that, yielding at least one useful thing. </p>
<p>The Exception message tells you that you&#8217;re trying to write data to a property that doesn&#8217;t exist in the file. <a href="http://www.microsoft.com/Downloads/details.aspx?FamilyID=a6d6ec6a-e4f2-405e-842d-7c3bcb5b1390&amp;displaylang=en" target="_blank">Microsoft has a tool called WICExplorer</a> that can show you the metadata like this:</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2008/11/wic-before.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="503" alt="WIC_Before" src="http://www.geektieguy.com/wp-content/uploads/2008/11/wic-before-thumb.png" width="715" border="0"/></a> </p>
<p>The above shows an image in WICExplorer directly after coming off of my digital camera. Notice that there is no &#8220;XMP Reader&#8221; node, which would represent XMP metadata. So if you want to put new XMP metadata into the picture, you need to know two things: how to create a new metadata node and what the correct syntax is for doing so.</p>
<p>What helped me figure those two things out were these pages:</p>
<p><a title="http://social.msdn.microsoft.com/forums/en-US/wpf/thread/8f297b11-99ba-459c-b085-1ff3ae526487/" href="http://social.msdn.microsoft.com/forums/en-US/wpf/thread/8f297b11-99ba-459c-b085-1ff3ae526487/">http://social.msdn.microsoft.com/forums/en-US/wpf/thread/8f297b11-99ba-459c-b085-1ff3ae526487/</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/bb643802.aspx">http://msdn.microsoft.com/en-us/library/bb643802.aspx</a></p>
<p>The first one showed how one can create new metadata objects using WIC, the second showed the needed syntax for some of the queries.</p>
<p>So here&#8217;s an example of how to create XMP metadata in an image that doesn&#8217;t have XMP metadata embedded yet:</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 280px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 280px; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> <span style="color: #0000ff">string</span> file = <span style="color: #006080">"C:\Temp\IMG_1687.JPG"</span>;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span> BitmapCreateOptions createOptions = BitmapCreateOptions.PreservePixelFormat | BitmapCreateOptions.IgnoreColorProfile;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span> Stream originalFile = File.Open(file, FileMode.Open, FileAccess.ReadWrite)</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span> BitmapDecoder original = BitmapDecoder.Create(originalFile, createOptions, BitmapCacheOption.None);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   5:</span> BitmapMetadata metadata = original.Frames[0].Metadata.Clone() <span style="color: #0000ff">as</span> BitmapMetadata;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   6:</span>&nbsp; </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   7:</span> <span style="color: #0000ff">string</span> q = <span style="color: #006080">"/xmp/exif:UserComment/x-default"</span>;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   8:</span> <span style="color: #0000ff">if</span> (metadata.ContainsQuery(q))</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   9:</span> {</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  10:</span>   metadata.SetQuery(q, comment);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  11:</span> }</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  12:</span> <span style="color: #0000ff">else</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  13:</span> {</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  14:</span>   metadata.SetQuery(<span style="color: #006080">"/xmp/exif:UserComment"</span>, <span style="color: #0000ff">new</span> BitmapMetadata(<span style="color: #006080">"xmpalt"</span>));</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  15:</span>   metadata.SetQuery(q, comment);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  16:</span> }</pre>
</div>
</div>
<p>The keys are in line 7, where the initial metadata query is shown and in line 8, where the code tests if the metadata is already present. If not, line 14 shows how to create a new XMP metadata node, which then gets populated in line 15. The writing of the data can be done using a JpegBitmapEncoder according to <a href="http://blogs.msdn.com/rwlodarc/archive/2007/07/18/using-wpf-s-inplacebitmapmetadatawriter.aspx" target="_blank">Robert Wlodarczyk&#8217;s blog post</a> (without the InPlaceBitmapMetadataWriter piece.)</p>
<p>After running code like this, you&#8217;ll now have the metadata in the file, as shown by this WICExplorer screenshot (I added &#8220;App0 Reader&#8221; metadata to this image as well):</p>
<p><a href="http://www.geektieguy.com/wp-content/uploads/2008/11/wic-after.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="503" alt="WIC_After" src="http://www.geektieguy.com/wp-content/uploads/2008/11/wic-after-thumb.png" width="715" border="0"/></a> </p>
<p>Hopefully this is useful to some folks out there. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2008/11/16/wic-metadata-in-net-getting-around-property-cannot-be-found-systemargumentexception-exception-from-hresult-0x88982f40/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Inside the HP TouchSmart PC software: HP SmartCenter &#8211; Part 4</title>
		<link>http://www.geektieguy.com/2008/04/24/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-4/</link>
		<comments>http://www.geektieguy.com/2008/04/24/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-4/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 02:33:00 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/?p=215</guid>
		<description><![CDATA[This is part 4 of the mini-series on the HP SmartCenter software. Hear about the team&#8217;s reaction to the Engadget leak and the launch plans at CES 2007. If you missed the first three parts, they are here, here and here. &#8212; One of the really unsettling events before the launch of the TouchSmart PC [...]]]></description>
			<content:encoded><![CDATA[<p>This is part 4 of the mini-series on the HP SmartCenter software. Hear about the team&#8217;s reaction to the Engadget leak and the launch plans at CES 2007. If you missed the first three parts, they are <a href="http://www.geektieguy.com/2008/04/04/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-1/" target="_blank">here</a>, <a href="http://www.geektieguy.com/2008/04/10/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-2/" target="_blank">here</a> and <a href="http://www.geektieguy.com/2008/04/17/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-3/" target="_blank">here</a>.</p>
<p>&#8212;</p>
<p>One of the really unsettling events before the launch of the TouchSmart PC was that Engadget somehow got a hold of some pictures that had been prepared for the launch in early 2007 at the Consumer Electronics Show. It was billed in the first sentence as &#8220;AMD&#8217;s sweet new rig&#8221;, which was a little bit of a slap in the face, since most of the real work fell outside of AMDs realm. I remember the team meeting when our program manager came in and told us about the &#8220;leak&#8221;. He had heard it from Microsoft just a few moments before joining the meeting. The mood in the room instantly turned. People started feeling both mad at the leaked information (and the leaker) and depressed about the potential impact this would have on our launch at CES. Microsoft especially was disappointed, since the TouchSmart PC represented a big investment on their part, carrying some of the Vista messaging. The TouchSmart PC was to be billed as one of a few &#8220;dream&#8221; PCs at CES. Having gone through an experience like that, I now always think about how the people involved must feel when I see &#8220;leaked&#8221; information about upcoming products. It&#8217;s not fun to have it happen to you.</p>
<p>On a happier note, the TouchSmart PC seemed to make quite a splash at CES. At the last minute I was asked to attend the show to help with technical support on the show floor. This was my first time attending CES and going to Las Vegas, and I quite enjoyed the experience. I ran into quite a few of the people that had worked with us on the project, and it was fun to see the crowds milling about the TouchSmart PCs at the HP and Microsoft booths. Having backstage access was a unique thing, but it involved a lot of walking around, helping the people doing demos by making sure the software was installed properly.</p>
<p>Since then, the HP TouchSmart PC has received numerous awards (including spot number seven on PC World&#8217;s list of most innovative products of 2007) and for a short while even had a fan website, the HP TouchSmart Owner&#8217;s Club.</p>
<p>&#8212;</p>
<p>This is the tentative end of the series. If you&#8217;re curious about other aspects, let me know, and if I can talk about it, I&#8217;ll see if I can accommodate your curiosity.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2008/04/24/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-4/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Inside the HP TouchSmart PC software: HP SmartCenter &#8211; Part 3</title>
		<link>http://www.geektieguy.com/2008/04/17/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-3/</link>
		<comments>http://www.geektieguy.com/2008/04/17/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-3/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 02:30:48 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/?p=214</guid>
		<description><![CDATA[Welcome to part 3 of this mini-series. Last time around you heard a little bit about the early prototypes and how things progressed from there. This time I&#8217;ll talk a bit more about some of the functionality in HP SmartCenter and some of the things we were not able to address before having to ship. &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome to part 3 of this mini-series. <a href="http://www.geektieguy.com/2008/04/10/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-2/" target="_blank">Last time</a> around you heard a little bit about the early prototypes and how things progressed from there. This time I&#8217;ll talk a bit more about some of the functionality in HP SmartCenter and some of the things we were not able to address before having to ship.</p>
<p>&#8212;</p>
<p>The guiding principles for HP SmartCenter and the other touch-optimized applications were to provide quick, &#8220;transactional&#8221; experiences, to have the applications be as intuitive as possible to use, and have them look polished and clean. HP SmartCenter was to be the &#8220;home page&#8221; for touch-based interactions with the PC. It had to easily give the user access to key Media Center experiences (TV, music, games) as well as two other touch-optimized programs HP was developing (HP SmartCalendar and HP Photosmart Touch). Finally the user had to have the ability to add access to a certain number of programs of their choice.</p>
<p>To enable some of the quick, &#8220;transactional&#8221; experiences using a touch screen, HP SmartCenter had to have large &#8220;target&#8221; areas that are easy to hit using a finger. This requirement helped making decisions about the layout of the &#8220;tiles&#8221; that the user touches to &#8220;launch&#8221; something.</p>
<p>We wanted to highlight a few of the key features of the TouchSmart suite of software. We decided that three tiles would be larger than the remaining ones, and that those three would be able to show more details from the underlying program than the smaller tiles. The calendar tile, for example, will pull three upcoming events out of the calendar program and display key information about those events right within the calendar tile. The Photosmart Touch tile will look for pictures in the My Pictures folder and display five of those in a rotation. The weather tile will display high and low temperatures expected for the day as well as the current temperature as reported by the weather service. The analog and digital clock tiles will display two additional clocks (probably configured for different time zones) in text form, in addition to the main clock, which is shown in a larger, graphical look.</p>
<p>The three user configurable tiles would be able to either start a program on the system or a web page, using Internet Explorer. We settled on only having three configurable items, since there was an overall limit in the graphical design at nine small tiles plus three large tiles, and we wanted to encourage people to stick with tiles that didn&#8217;t take you out of a touch-optimized / touch oriented environment.</p>
<p>Beyond picking a software development technology (WPF), our other challenges were the many changes in both Windows Vista and WPF as both matured. WPF introduced &#8220;breaking changes&#8221; several times in our short cycle, and we discovered numerous problems with the integration of WPF and Windows Media Center. We worked closely with Microsoft to get these addressed. But a few problems remained, one of which is that every time you start one of the programs we developed, the computer screen will go black for a few seconds. It gives you the unsettling feeling that something went wrong, but it&#8217;s actually a consequence of the interactions between certain software components that are controlling the graphics card (DirectX, WPF and Media Center). As much as we didn&#8217;t like it, we were out of time to address these problems by the time our shipping date came.</p>
<p>&#8212;</p>
<p>That&#8217;s a wrap for part 3. Next time you&#8217;ll hear about the reactions from the team when information about the TouchSmart PC was leaked to Engadget way before the actual launch event, and I&#8217;ll also talk a little about the launch at CES 2007.</p>
<p>Update (2008-04-30): Part <a href="http://www.geektieguy.com/2008/04/24/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-4/" target="_blank">four</a> is now posted.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2008/04/17/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inside the HP TouchSmart PC software: HP SmartCenter &#8211; Part 2</title>
		<link>http://www.geektieguy.com/2008/04/10/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-2/</link>
		<comments>http://www.geektieguy.com/2008/04/10/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-2/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 02:12:10 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2008/04/04/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-2/</guid>
		<description><![CDATA[In the first part of this mini-series, I introduced you to the early planning stages of HP SmartCenter. This time you&#8217;ll get a little more information on the early development, including a few screenshots of prototpyes. &#8212; I hacked together a very simple first version of HP SmartCenter (then codenamed LaunchPad, which still is the [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a href="http://www.geektieguy.com/2008/04/04/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-1/" target="_blank">first part</a> of this mini-series, I introduced you to the early planning stages of HP SmartCenter. This time you&#8217;ll get a little more information on the early development, including a few screenshots of prototpyes.</p>
<p>&#8212;</p>
<p>I hacked together a very simple first version of HP SmartCenter (then codenamed LaunchPad, which still is the name of the executable, incidentally) in HTML and my colleague Maguy added some rough graphical elements to give our design firm an idea of what we were looking for.</p>
<p><a title="launchpad1.png" href="http://www.geektieguy.com/wp-content/uploads/2007/04/launchpad1.png"></a><a title="launchpad1.png" href="http://www.geektieguy.com/wp-content/uploads/2007/04/launchpad1.png"></a></p>
<p style="text-align: center"><img src="http://www.geektieguy.com/wp-content/uploads/2007/04/launchpad1.thumbnail.png" alt="launchpad1.png" /><br />
My quick HTML mockup</p>
<p><a title="launchpad2.png" href="http://www.geektieguy.com/wp-content/uploads/2007/04/launchpad2.png"></a><a title="launchpad2.png" href="http://www.geektieguy.com/wp-content/uploads/2007/04/launchpad2.png"></a></p>
<p style="text-align: center"><img src="http://www.geektieguy.com/wp-content/uploads/2007/04/launchpad2.thumbnail.png" alt="launchpad2.png" /><br />
Improved graphics</p>
<p>From about February 2006 until April 2006 we then iterated with our design firm on the GUI and user experience design. Towards the end of May 2006 we took final delivery of the work from them. I was to turn their beautiful work into a living application with page navigation, drag-and-drop functionality, configuration options, and settings persistence. They had provided a solid foundation to build on, including well thought out namespaces, classes, animations and navigation design.</p>
<p>But there was still a lot of work to be done during the next three to four months. In addition to the application itself I was also responsible for delivering an installer, a supporting &#8220;touch optimization&#8221; program, and integration with our factory PC build process, including dealing with the &#8220;sealing&#8221; process that prepares the master hard drive for replication.</p>
<p>We participated in Microsoft&#8217;s early adopter program for Windows Presentation Foundation and Windows Vista, which gave us access to builds of the WPF bits, with a seemingly never-ending stream of Community Technology Preview versions. Windows Vista was in a similar state of flux, and I had my hands full, wiping out and reinstalling test machines and updating my developer machine to keep up with the changes.</p>
<p>At the same time I climbed the learning curve for WPF (which <a href="http://psiman.spaces.live.com/blog/cns!5BCA275B0A537D6B!639.entry">Simon Middlemiss</a> once described as more of a cliff), trying to figure out how to get the mostly fixed-content XAML pages that the design company had delivered turned into malleable components and re-configurable layouts.</p>
<p>The initial design from the outside company included two components that pull information from the web: weather and stocks. We had to drop the stocks piece for business reasons early on, and had big challenges working out the business issues for the weather feed integration. We wanted our own high-quality images to illustrate the weather conditions and had to get approval from the owner of the feed data. I thought several times that the weather feature was dead, but stubbornness overcame pessimism, and we pulled all the right people from several companies together to get our images approved within 24 hours before the final code submittal deadline. I remember pulling a work-at-home weekend to fine-tune the weather feature where I had to stop working because I was hit with the flu. I was out for three days. After something like that happens you don&#8217;t give up a feature without a fight.</p>
<p>One benefit of being part of the early adopter program for WPF and Vista was that Microsoft arranged for training and troubleshooting sessions. I made two trips to Redmond under this program, once to get more in-depth training on WPF and Vista, and once to get help with troubleshooting <a href="http://www.geektieguy.com/2006/08/23/compositiontargetrendering-can-be-a-cpu-hog/" target="_blank">performance issues</a> we had run into. That&#8217;s when I learned that there is such a thing as a &#8220;<a href="http://www.geektieguy.com/2006/08/07/remember-to-unhook-those-event-handlers/" target="_blank">managed memory leak</a>&#8220;, which can be introduced in WPF without the programmer necessarily realizing it. Towards the end of the program three of my colleagues and I got to spend a couple of days with Microsoft again, this time at their Platform Adoption lab (Building 20), going over some last minute design and performance questions with their WPF developers one-on-one. This especially helped with getting HP Photosmart Touch into better shape for final release. We got a lot of tips and strategies for dealing with images, collections and containers in these sessions.</p>
<p>&#8212;</p>
<p>That&#8217;s it for part 2. Next time I&#8217;ll dig a little more into the guiding principles that were used for the implementation of HP SmartCenter, as well as some of the challenges and problems I encountered on the way.</p>
<p>Update (2008-04-30): Parts <a href="http://www.geektieguy.com/2008/04/17/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-3/" target="_blank">three</a> and <a href="http://www.geektieguy.com/2008/04/24/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-4/" target="_blank">four</a> are now posted.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2008/04/10/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Inside the HP TouchSmart PC software: HP SmartCenter &#8211; Part 1</title>
		<link>http://www.geektieguy.com/2008/04/04/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-1/</link>
		<comments>http://www.geektieguy.com/2008/04/04/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-1/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 05:23:59 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2008/04/04/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-1/</guid>
		<description><![CDATA[I thought some people might enjoy reading a little &#8220;behind the scenes&#8221; story about the most high-profile piece of software I&#8217;ve been involved with so far. I feel pretty lucky to have had the chance to work on a unique product and to have what I helped work on be so central to the user [...]]]></description>
			<content:encoded><![CDATA[<p>I thought some people might enjoy reading a little &#8220;behind the scenes&#8221; story about the most high-profile piece of software I&#8217;ve been involved with so far. I feel pretty lucky to have had the chance to work on a unique product and to have what I helped work on be so central to the user experience as it is on the HP TouchSmart PC. You may interpret this post as highly egotistical and self-centered, and I suppose it is. But I feel like telling a story. My story. I will go over most of the non-confidential details of the events as I remember them. Since there&#8217;s a lot to talk about, I&#8217;ve decided to split the story into a mini-series. This is part one. Here we go.</p>
<p>My involvement with the HP TouchSmart PC began in about December of 2005. The decision was made to invest in software that would be best suited for the touchscreen that the unit would have. One of the results is HP SmartCenter as seen here (screenshot from my developer machine, not necessarily representative of the final product):</p>
<p style="text-align: center"><a href="http://www.geektieguy.com/wp-content/uploads/2007/01/WindowsLiveWriter/TheHPTouchSmartPC_757A/SmartCenter013.png"><br />
<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://www.geektieguy.com/wp-content/uploads/2007/01/WindowsLiveWriter/TheHPTouchSmartPC_757A/SmartCenter01_thumb1.png" border="0" alt="" width="444" height="249" /></a></p>
<p>We had tight deadlines. Our final bits would be due in about six months, around June / July 2006. Our product marketing folks decided they wanted the touch application to provide quick access to TV and music as primary features. Windows Media Center was our software of choice for delivering TV and music experiences, and so we made HP SmartCenter run within Windows Media Center. This helped to avoid waiting for Media Center to start up when the user wants to watch TV or listen to music. In other areas the choice created lots of challenges. The initial one was picking a software development technology.</p>
<p>I had just attended PDC05 and was pretty excited about <a href="http://wpf.netfx3.com/">Windows Presentation Foundation</a> (WPF) and the speed I could sense it would give developers and designers for rapidly creating exciting software. I had learned that Media Center in Windows Vista would support WPF, and my recommendation to use it for our apps to make the deadlines while delivering a polished user interface was accepted.</p>
<p>An interface developed in HTML would not have had the same quality (read: look-and-feel). Using the Media Center Markup Language (MCML / SplashFX) was not an option, since that was not going to be revealed in any useful detail until about March 2006, way too late for us to learn how to use it and produce a product.</p>
<p>At PDC05, it had been mentioned that a well-know design company had worked on some XAML styles for the show. We approached them to help out with the application design and asked them to deliver their stuff as working XAML / WPF code. They were pretty excited about the idea and signed on.</p>
<p>&#8212;</p>
<p>That&#8217;s it for now. Check back soon for the next installment of this mini-series, where I&#8217;ll show you a few screenshots of very early prototypes.</p>
<p>Update (2008-04-30): Parts <a href="http://www.geektieguy.com/2008/04/10/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-2/" target="_blank">two</a>, <a href="http://www.geektieguy.com/2008/04/17/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-3/" target="_blank">three</a> and <a href="http://www.geektieguy.com/2008/04/24/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-4/" target="_blank">four</a> are now posted.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2008/04/04/inside-the-hp-touchsmart-pc-software-hp-smartcenter-part-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Can&#8217;t install .NET 3.5 on Vista x64? Try uninstalling KB110806.</title>
		<link>http://www.geektieguy.com/2008/02/01/cant-install-net-35-on-vista-x64-try-uninstalling-kb110806/</link>
		<comments>http://www.geektieguy.com/2008/02/01/cant-install-net-35-on-vista-x64-try-uninstalling-kb110806/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 17:22:04 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2008/02/01/cant-install-net-35-on-vista-x64-try-uninstalling-kb110806/</guid>
		<description><![CDATA[The title says it all. Several attempts I&#8217;ve made at installing the .NET Framework 3.5 on x64 Vista boxes failed with Error 1603. After a prolonged Google search, I found a forum with someone mentioning to uninstall KB110806, which seems to be related to .NET 2.0 SP1. I forget the forum and the details. Anyway, if you&#8217;re having [...]]]></description>
			<content:encoded><![CDATA[<p>The title says it all. Several attempts I&#8217;ve made at installing the .NET Framework 3.5 on x64 Vista boxes failed with Error 1603. After a prolonged Google search, I found a forum with someone mentioning to uninstall KB110806, which seems to be related to .NET 2.0 SP1. I forget the forum and the details.</p>
<p>Anyway, if you&#8217;re having trouble with .NET 3.5 on Vista x64, try uninstalling the KB110806 update. I&#8217;m going to assume you know where to do that if you&#8217;re reading this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2008/02/01/cant-install-net-35-on-vista-x64-try-uninstalling-kb110806/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WPF ControlTemplate Trigger tip</title>
		<link>http://www.geektieguy.com/2008/01/05/wpf-controltemplate-trigger-tip/</link>
		<comments>http://www.geektieguy.com/2008/01/05/wpf-controltemplate-trigger-tip/#comments</comments>
		<pubDate>Sat, 05 Jan 2008 09:11:10 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Software development]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2008/01/05/wpf-controltemplate-trigger-tip/</guid>
		<description><![CDATA[I didn&#8217;t fully realize how ControlTemplate Triggers work (or don&#8217;t) until I solved a problem with a UserControl today, with the help of this post on the MSDN forums. A Triggers&#8217; EnterActions or ExitActions don&#8217;t seem to get fired when a UserControl is constructed. If you want, say, an animation in your control to start [...]]]></description>
			<content:encoded><![CDATA[<p>I didn&#8217;t fully realize how ControlTemplate Triggers work (or don&#8217;t) until I solved a problem with a UserControl today, with the help of <a href="http://207.46.236.188/MSDN/ShowPost.aspx?PostID=2115735&amp;SiteID=1">this post on the MSDN forums</a>.</p>
<p>A Triggers&#8217; EnterActions or ExitActions don&#8217;t seem to get fired when a UserControl is constructed. If you want, say, an animation in your control to start on a property change, you can put a BeginStoryboard element into a Trigger&#8217;s EnterActions and a reverse BeginStoryboard into the ExitActions.</p>
<p>But for the control to start out right at initialization you also need to have the right Setter element on the Trigger to set initial states (in addition to setting the opposite initial states on the elements to be animated/initialized.)</p>
<p>Here&#8217;s a tiny example:</p>
<p style="display: inline; float: none; margin: 0px; padding: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:58d52c37-3145-4c1b-863f-0f57715a3603" class="wlWriterSmartContent">
<pre style="overflow: auto; background-color: white; word-wrap: break-word"><!-- 

Code highlighting produced by Actipro CodeHighlighter (freeware) 

http://www.CodeHighlighter.com/

--><span style="color: #008080"> 1</span> <span style="color: #0000ff">&lt;</span><span style="color: #800000">UserControl</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> </span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> Namespaces omitted for brevity </span><span style="color: #008000">--&gt;</span><span style="color: #000000">
</span><span style="color: #008080"> 2</span> <span style="color: #000000">  </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Grid</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080"> 3</span> <span style="color: #000000">    </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ToggleButton </span><span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="Toggle"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080"> 4</span> <span style="color: #000000">      </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ToggleButton.Template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080"> 5</span> <span style="color: #000000">        </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ControlTemplate </span><span style="color: #ff0000">TargetType</span><span style="color: #0000ff">="</span><span style="color: #808000">{x:Type ToggleButton}</span><span style="color: #0000ff">"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080"> 6</span> <span style="color: #000000">          </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Grid</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080"> 7</span> <span style="color: #000000">            </span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> Initial opacity is 1 for the initially unchecked ToggleButton state. A trigger changes it to 0 for an initial checked state. </span><span style="color: #008000">--&gt;</span><span style="color: #000000">
</span><span style="color: #008080"> 8</span> <span style="color: #000000">            </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Grid </span><span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="HideMe"</span><span style="color: #ff0000"> Opacity</span><span style="color: #0000ff">="1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080"> 9</span> <span style="color: #000000">              </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TextBlock </span><span style="color: #ff0000">Text</span><span style="color: #0000ff">="Hidden"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">
</span><span style="color: #008080">10</span> <span style="color: #000000">            </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Grid</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">11</span> <span style="color: #000000">            </span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> Other parts of the control go here </span><span style="color: #008000">--&gt;</span><span style="color: #000000">
</span><span style="color: #008080">12</span> <span style="color: #000000">          </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Grid</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">13</span> <span style="color: #000000">          </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ControlTemplate.Triggers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">14</span> <span style="color: #000000">            </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Trigger </span><span style="color: #ff0000">Property</span><span style="color: #0000ff">="ToggleButton.IsChecked"</span><span style="color: #ff0000"> Value</span><span style="color: #0000ff">="True"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">15</span> <span style="color: #000000">              </span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> This setter hides the desired element when the ToggleButton's initial state is checked </span><span style="color: #008000">--&gt;</span><span style="color: #000000">
</span><span style="color: #008080">16</span> <span style="color: #000000">              </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Setter </span><span style="color: #ff0000">TargetName</span><span style="color: #0000ff">="HideMe"</span><span style="color: #ff0000"> Property</span><span style="color: #0000ff">="Opacity"</span><span style="color: #ff0000"> Value</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">
</span><span style="color: #008080">17</span> <span style="color: #000000">              </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Trigger.EnterActions</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">18</span> <span style="color: #000000">                </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BeginStoryboard</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">19</span> <span style="color: #000000">                  </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Storyboard</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">20</span> <span style="color: #000000">                    </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">DoubleAnimation </span><span style="color: #ff0000">BeginTime</span><span style="color: #0000ff">="00:00:00"</span><span style="color: #ff0000"> Duration</span><span style="color: #0000ff">="00:00:00.05"</span><span style="color: #ff0000"> Storyboard.TargetName</span><span style="color: #0000ff">="HideMe"</span><span style="color: #ff0000"> Storyboard.TargetProperty</span><span style="color: #0000ff">="(UIElement.Opacity)"</span><span style="color: #ff0000"> To</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">
</span><span style="color: #008080">21</span> <span style="color: #000000">                  </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Storyboard</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">22</span> <span style="color: #000000">                </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">BeginStoryboard</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">23</span> <span style="color: #000000">              </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Trigger.EnterActions</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">24</span> <span style="color: #000000">              </span><span style="color: #008000">&lt;!--</span><span style="color: #008000"> ExitActions go here to make the Grid with the TextBlock visible again </span><span style="color: #008000">--&gt;</span><span style="color: #000000">
</span><span style="color: #008080">25</span> <span style="color: #000000">            </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Trigger</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">26</span> <span style="color: #000000">          </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ControlTemplate.Triggers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">27</span> <span style="color: #000000">        </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ControlTemplate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">28</span> <span style="color: #000000">      </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ToggleButton.Template</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">29</span> <span style="color: #000000">    </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ToggleButton</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">30</span> <span style="color: #000000">  </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Grid</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">
</span><span style="color: #008080">31</span> <span style="color: #000000"></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">UserControl</span><span style="color: #0000ff">&gt;</span></pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></p>
<p>The ToggleButton contains a TextBlock in line 9 that I want hidden when the ToggleButton&#8217;s IsChecked state is True. The animation in line 18 takes care of doing that when the user interacts with the control, but when the control is initialized, I need the Setter in line 16 to hide the TextBlock initially if the ToggleButton is checked by default (through data binding, for example.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2008/01/05/wpf-controltemplate-trigger-tip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing CardSharkV</title>
		<link>http://www.geektieguy.com/2007/11/25/introducing-cardsharkv/</link>
		<comments>http://www.geektieguy.com/2007/11/25/introducing-cardsharkv/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 08:06:56 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2007/11/25/introducing-cardsharkv/</guid>
		<description><![CDATA[Check out this program I&#8217;ve developed, called CardSharkV. It&#8217;s a digital picture storage card/camera &#8220;downloader&#8221; with a twist. It&#8217;s a bit of an experiment, and I&#8217;m looking for some real-world &#8220;beta&#8221; testers. My plan is to try my hand at charging for the program. But to see if word will spread, I&#8217;m planning to give [...]]]></description>
			<content:encoded><![CDATA[<p>Check out this program I&#8217;ve developed, called CardSharkV. It&#8217;s a digital picture storage card/camera &#8220;downloader&#8221; with a twist.</p>
<p>It&#8217;s a bit of an experiment, and I&#8217;m looking for some real-world &#8220;beta&#8221; testers. My plan is to try my hand at charging for the program. But to see if word will spread, I&#8217;m planning to give out 50 or so licenses without charge while I work out any kinks that might be in the program.</p>
<p>If you&#8217;re interested in trying it out, download the program, install and run it, and then click the &#8220;Request License&#8221; button.</p>
<p>Read more about it on the <a href="http://www.geektieguy.com/products/">CardSharkV page</a>.</p>
<p>Update (2007-11-25): CardSharkV depends on the .NET Framework 3.0. It&#8217;s thus meant to be installed on Vista systems only. If you have XP and the .NET Framework 3.0, it should still work. Also, since I posted the whole thing Saturday night after a whole day of re-shaping my first, never published version, I didn&#8217;t test the install too well. I&#8217;ve since had a little time to test and found some issues, especially with the license mechanism. I&#8217;ve posted version 1.0.2.0 to correct those issues and to improve the installer as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2007/11/25/introducing-cardsharkv/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Microsoft deprecates support for XBAP WPF apps in version 5.3 of the Media Center SDK</title>
		<link>http://www.geektieguy.com/2007/11/19/microsoft-deprecates-support-for-xbap-wpf-apps-in-version-53-of-the-media-center-sdk/</link>
		<comments>http://www.geektieguy.com/2007/11/19/microsoft-deprecates-support-for-xbap-wpf-apps-in-version-53-of-the-media-center-sdk/#comments</comments>
		<pubDate>Tue, 20 Nov 2007 05:02:28 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2007/11/19/microsoft-deprecates-support-for-xbap-wpf-apps-in-version-53-of-the-media-center-sdk/</guid>
		<description><![CDATA[I downloaded and installed the latest version of the Media Center SDK just now, and was a bit surprised to see that WPF apps are now officially deprecated as a supported way of extending Windows Media Center on Vista. There&#8217;s no big announcement around this so far, it&#8217;s almost just a footnote in the &#8220;What&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I downloaded and installed the latest version of the Media Center SDK just now, and was a bit surprised to see that WPF apps are now officially deprecated as a supported way of extending Windows Media Center on Vista. There&#8217;s no big announcement around this so far, it&#8217;s almost just a footnote in the &#8220;What&#8217;s New&#8221; section:</p>
<blockquote><p><b>Deprecated features</b> </p>
<p>The following features have been deprecated:
<ul>
<li>Hosting for Microsoft .NET Framework 3.0 Extensible Application Markup Language (XAML) browser applications (XBAPs).  </li>
<li>The Triple-tap/Soft-keyboard ActiveX control for hosted HTML applications.  </li>
<li>Support for using alternative shells to run and host HTML applications.</li>
</ul>
</blockquote>
<p>The reason I&#8217;m surprised is that Microsoft announced the support for WPF based extensibility apps at PDC05 with some fanfare.</p>
<p>I guess interest among developers just hasn&#8217;t been there for WPF-based Media Center apps, and Microsoft needs to make judgment calls on where to invest in their extensibility platform. The rest of the deprecated features seem to have been made for the same reason: limited interest among developers for these features. In addition I think there might be issues of an architectural nature that just make the three things that got dropped too expensive to maintain or improve.</p>
<p>I&#8217;m sad about this development, mostly because I still don&#8217;t see a great set of development and design tools around for MCML. WPF seems to me to have a whole lot more momentum than MCML (WPF has the Expression suite of tools and has been billed as the &#8220;GDI for the next 20 years&#8221;), but who knows what may be coming for Windows 7, or even an earlier interim update for Media Center?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2007/11/19/microsoft-deprecates-support-for-xbap-wpf-apps-in-version-53-of-the-media-center-sdk/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Debugging XBAP applications on Vista using Visual Studio 2005</title>
		<link>http://www.geektieguy.com/2007/01/23/debugging-xbap-applications-on-vista-using-visual-studio-2005/</link>
		<comments>http://www.geektieguy.com/2007/01/23/debugging-xbap-applications-on-vista-using-visual-studio-2005/#comments</comments>
		<pubDate>Wed, 24 Jan 2007 00:35:27 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Software development]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2007/01/23/debugging-xbap-applications-on-vista-using-visual-studio-2005/</guid>
		<description><![CDATA[I ran into an interesting little quirk with Visual Studio 2005 on Vista yesterday. I was trying to start an XBAP debugging session from VS (using the F5 key), and none of my breakpoints got triggered. Upon exiting the IE instance that hosts PresentationHost.exe, VS considered the session as still &#8220;running&#8221;. I had set my [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into an interesting little quirk with Visual Studio 2005 on Vista yesterday. I was trying to start an XBAP debugging session from VS (using the F5 key), and none of my breakpoints got triggered. Upon exiting the IE instance that hosts PresentationHost.exe, VS considered the session as still &#8220;running&#8221;.</p>
<p>I had set my system up according to Tim Sneath&#8217;s post on <a href="http://blogs.msdn.com/tims/archive/2006/12/20/building-a-perfect-wpf-developer-workstation.aspx">the perfect WPF developer system,</a> including VS 2005 SP1 and the beta version of the Vista extensions for VS 2005. I was running VS &#8220;as administrator&#8221;.</p>
<p>As it turns out there are some technical details around starting XBAP debugging sessions from an elevated VS process that cause this behavior <strong>if you already have another instance of IE running when starting the debugging session</strong>.</p>
<p>Thanks to Tim Sneath and Chango Valtchev at Microsoft&nbsp;for helping in tracking this down!</p>
<p>Moral of the story: If you want to debug an XBAP from VS 2005 under Vista, run VS non-elevated, or make sure you have no other instances of IE running when you start the debugging session.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2007/01/23/debugging-xbap-applications-on-vista-using-visual-studio-2005/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Localizing an XBAP application without using LocBaml</title>
		<link>http://www.geektieguy.com/2006/12/12/localizing-an-xbap-application-without-using-locbaml/</link>
		<comments>http://www.geektieguy.com/2006/12/12/localizing-an-xbap-application-without-using-locbaml/#comments</comments>
		<pubDate>Tue, 12 Dec 2006 23:23:50 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Software development]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2006/12/12/localizing-an-xbap-application-without-using-locbaml/</guid>
		<description><![CDATA[Using the LocBaml sample application that Microsoft provides with the Windows SDK for Windows Presentation Foundation can be very frustrating. By default it seems to pick up a lot of things that clutter the resulting CSV file. If your application contains a lot of image resources, those will get duplicated in the localized resource dlls [...]]]></description>
			<content:encoded><![CDATA[<p>Using the LocBaml sample application that Microsoft provides with the Windows SDK for Windows Presentation Foundation can be very frustrating. By default it seems to pick up a lot of things that clutter the resulting CSV file. If your application contains a lot of image resources, those will get duplicated in the localized resource dlls as well, increasing the space that your application occupies on the hard drive. And finally, getting an XBAP application to be deployable after localization with LocBaml requires opening up the application manifest and adding all the localized resource files to it. Otherwise a deployment error will bite you.</p>
<p>So with all those problems, we decided to take a different approach for our WPF XBAP applications. We put all our strings into a standalone XAML file, producing a ResourceDictionary. This way our application can pick up strings using Text=&#8221;{StaticResource strXYZ}&#8221; for XAML markup and/or use Application.Current.FindResource(&#8220;strXYZ&#8221;) for codebehind. We name the file &#8220;Strings_en-US.xaml&#8221;. We can localize this file nicely, and name the resulting set appropriately: &#8220;Strings_de-DE.xaml&#8221;, &#8220;Strings_fr-FR.xaml&#8221; and so on. These files can then be included as resources in the application. They can also be added as &#8220;loose&#8221; XAML files, so we can add languages or make corrections after compilation.</p>
<p>The string resource file looks something like this:<br />
<font size="1"></p>
<pre>
<code>

&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sys="clr-namespace:System;assembly=mscorlib"
&gt;
  &lt;sys:String x:Key="strButtonOK"&gt;OK&lt;/sys&gt;
  &lt;sys:String x:Key="strButtonCancel"&gt;Cancel&lt;/sys&gt;
&lt;/ResourceDictionary&gt;

</code>
</pre>
<p></font></p>
<p>At application load time, we look at the CurrentCulture and attempt to load the ResourceDictionary object like this:<br />
<font size="1"></p>
<pre>
<code>
ResourceDictionary rd = null;
System.Globalization.CultureInfo ci =
     System.Globalization.CultureInfo.CurrentCulture;
string langCountry = ci.Name;
string languageFile =
     string.Format("/Resources/Strings/Strings_{0}.xaml", langCountry);
try
{
  rd = (ResourceDictionary)Application.LoadComponent(
                              new Uri(languageFile, UriKind.RelativeOrAbsolute)
                                  );
}
</code>
</pre>
<p></font><br />
You can imagine this with some catch {} fallbacks for when a specific language-country combination doesn&#8217;t exist. We&#8217;ll fall back to a file that&#8217;s only language specific, and if that doesn&#8217;t work out, we&#8217;ll fall back to en-US. </p>
<p>We&#8217;re not using CurrentUICulture, since that seems to be tied to the UI language of Vista, and we want our apps to follow what the user sets in Control Panel. CurrentCulture seems to work for that.</p>
<p>To load the strings into the global resource dictionary, we just do</p>
<pre><code>
Application.Current.Resources.MergedDictionaries.Add(rd);
</code></pre>
<p>
To load loose XAML files that are not part of the application&#8217;s resources, we do something like this:<br />
<font size="1"></p>
<pre>
<code>
ResourceDictionary rd1 = null;
string languageFileLoose = string.Format(
         "pack://siteoforigin:,,,/Resources/Strings/Strings_{0}.xaml",
         langCountry
      );
Uri uri = new Uri(languageFileLoose, UriKind.Absolute);
System.Windows.Resources.StreamResourceInfo info;
System.Windows.Markup.XamlReader reader;
try {
  info = Application.GetRemoteStream(uri);
  reader = new System.Windows.Markup.XamlReader();
  rd1 = (ResourceDictionary)reader.LoadAsync(info.Stream);
}
</code>
</pre>
<p></font></p>
<p>Again, we extend this with catch {} blocks to fall back to a file that&#8217;s only language specific. We do the loose XAML loading after we&#8217;ve loaded embedded resources, so we can rely on a basic set of languages and strings, but can add languages, fix string translation errors or make improvements in the loose XAML after compiling things.</p>
<p>It may work for you as well, but ymmv.</p>
<p><strong>Update:</strong> Changed the first Uri to UriKind.RelativeOrAbsolute</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2006/12/12/localizing-an-xbap-application-without-using-locbaml/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Breaking all rules of software release management</title>
		<link>http://www.geektieguy.com/2006/11/13/breaking-all-rules-of-software-release-management/</link>
		<comments>http://www.geektieguy.com/2006/11/13/breaking-all-rules-of-software-release-management/#comments</comments>
		<pubDate>Tue, 14 Nov 2006 06:01:50 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2006/11/13/breaking-all-rules-of-software-release-management/</guid>
		<description><![CDATA[The project I&#8217;m currently working on is getting really close to being done, with Windows Vista having been &#8220;RTM&#8221;ed recently. We have a few more days to get last minute bugs ironed out and then it&#8217;s &#8220;off to the factories&#8221;&#8230; I can&#8217;t say much more about the project right now, but it&#8217;s a pretty significant and highly [...]]]></description>
			<content:encoded><![CDATA[<p>The project I&#8217;m currently working on is getting really close to being done, with Windows Vista having been &#8220;RTM&#8221;ed recently. We have a few more days to get last minute bugs ironed out and then it&#8217;s &#8220;off to the factories&#8221;&#8230; I can&#8217;t say much more about the project right now, but it&#8217;s a pretty significant and highly visible piece of software coming out somehwere around February 2007. I hope it does well. But I digress&#8230;</p>
<p>At this late a stage in a product&#8217;s delivery cycle it is common to make very few changes to the code in order not to create more bugs than one fixes. Ideally each change should be peer-reviewed and thouroughly tested before getting checked in (like with Windows Vista and the contortions people have to go through in the &#8220;shiproom&#8221; to get a bugfix approved). Too bad for me that I&#8217;m the only &#8220;peer&#8221; on the project (i.e. I&#8217;m the only developer). There&#8217;s nobody I can go to for a review.</p>
<p>And in the last few weeks I&#8217;ve broken the &#8220;as few changes as possible&#8221; rule a number of times. Why? Because I&#8217;m confident in the features that WPF provides. And because I do tend to run extensive tests before I check stuff in.</p>
<p>So what kinds of changes have I put in at the &#8220;last minute&#8221;? I&#8217;ve shuffled buttons around on the page, I&#8217;ve added code for drawing the user&#8217;s eyes to input fields containing invalid data, I&#8217;ve added data-bound and data-driven UI elements.</p>
<p>WPF has given me the confidence to be able to do this at the last minute. The fact that moving buttons around is a simple XAML markup change, for example, is just great for last minute UI adjustments.</p>
<p>But I&#8217;m not exactly proud of doing it. Oh well. So far everything seems to have worked out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2006/11/13/breaking-all-rules-of-software-release-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF XBAP apps and UAC</title>
		<link>http://www.geektieguy.com/2006/11/04/wpf-xbap-apps-and-uac/</link>
		<comments>http://www.geektieguy.com/2006/11/04/wpf-xbap-apps-and-uac/#comments</comments>
		<pubDate>Sat, 04 Nov 2006 19:40:44 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2006/11/04/wpf-xbap-apps-and-uac/</guid>
		<description><![CDATA[Here&#8217;s an interesting thing I learned the other day, which wasn&#8217;t obvious to me. If you have an XBAP WPF application that tries to access files at the location identified by CSIDL_COMMON_APPDATA (Environment.SpecialFolders.CommonApplicationData in .Net 2.0/3.0) they need to be marked with Read/Write permissions for &#8221;Everyone&#8221;. Otherwise File Virtualization kicks in and Vista creates copies of the [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s an interesting thing I learned the other day, which wasn&#8217;t obvious to me.</p>
<p>If you have an XBAP WPF application that tries to access files at the location identified by CSIDL_COMMON_APPDATA (Environment.SpecialFolders.CommonApplicationData in .Net 2.0/3.0) they need to be marked with Read/Write permissions for &#8221;Everyone&#8221;. Otherwise File Virtualization kicks in and Vista creates copies of the files in the VirtualStore.</p>
<p>This shouldn&#8217;t be a problem per se, but if you have data integrity issues with your application reading/writing files it&#8217;s nice to eliminate the virtualization for troubleshooting.</p>
<p>Also, if your application needs to share the same data among users you don&#8217;t want virtualization, since that is a per-user thing, and you&#8217;d end up with one set of data files for each user.</p>
<p>If you&#8217;re installing some default data files for the application using Windows Installer (which will run elevated), you need to make sure you change the permissions on the data files so &#8220;Everyone&#8221; gets read/write permissions. This can be done using the LockPermissions table of Windows Installer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2006/11/04/wpf-xbap-apps-and-uac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How did I end up working with Windows Presentation Foundation?</title>
		<link>http://www.geektieguy.com/2006/10/09/how-did-i-end-up-working-with-windows-presentation-foundation/</link>
		<comments>http://www.geektieguy.com/2006/10/09/how-did-i-end-up-working-with-windows-presentation-foundation/#comments</comments>
		<pubDate>Mon, 09 Oct 2006 14:20:32 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2006/10/09/how-did-i-end-up-working-with-windows-presentation-foundation/</guid>
		<description><![CDATA[In one of my past posts, I talked a little about my impressions of Vista as a platform for software developers. Here&#8217;s the story of how I got involved with WPF. My last two projects before starting on WPF were built around hosting IE in &#8220;something&#8221;. The first &#8220;something&#8221; was an exe hosting IE and adding a [...]]]></description>
			<content:encoded><![CDATA[<p>In one of my past posts, I talked a little about my impressions of Vista as a platform for software developers. Here&#8217;s the story of how I got involved with WPF.</p>
<p>My last two projects before starting on WPF were built around hosting IE in &#8220;something&#8221;.</p>
<p>The first &#8220;something&#8221; was an exe hosting IE and adding a bunch of window.external functionality. I took the lead in moving a somewhat old, pretty static UI infrastructure for presenting internet-updatable content to the XML/CSS/XSLT age. That involved a lot of using dynamic expressions to enable reflowing of the UI for different monitor sizes (the app was a fullscreen app). Towards the end of that project I started hearing about an XML-based application development thing coming from Microsoft, and I remember thinking &#8220;How cool! No more need for the mess of HTML / CSS / XSLT and JScript/dynamic expressions to glue it together.&#8221;</p>
<p> The second &#8220;something&#8221; was an application for Windows Media Center, which at the time only offered hosted IE as its application development model (with a bunch of window.external functionality thrown in to get at the Media Center stuff, similar to how our exe had worked). Three of us wrote a pretty interesting little application that shipped for about a year and then was discontinued when circumstances changed on us drastically. Around the time this happened, the XML-based app development thing from Microsoft, better known then as &#8220;Avalon&#8221;, took more shape.</p>
<p>I was lucky enough to get to experience the energy that Microsoft projected at PDC05. It felt like an explosion of enthusiasm around the newly re-christened &#8220;Windows Presentation Foundation&#8221;. My eyes were popping at Greg Schechter&#8217;s talk. Manuel Clement&#8217;s talk was chock-full infectious excitement. I wanted to work with this new stuff.</p>
<p>Luckily the project(s) we were given to work on next required a level of &#8220;polish&#8221; that I doubted we could achieve using HTML, WinForms or any other technology we were proficient in. I advocated strongly for using WPF, and for some reason management went along. One of the requirements for one of the projects was that it had to run under Vista and more specifically under Media Center to get a great user experience. The level of &#8220;polish&#8221; that was required pretty much ruled out using HTML. We could have done all ActiveX controls, I suppose, or an HTML/Flash hybrid, but none of us had the required expertise to implement that, and the time frame was extremely tight to begin with.</p>
<p>To me the only way to solve the problem was using the incredible leverage of WPF to &#8220;get things done&#8221;, even with the steep, steep initial learning curve. I worked on some throw-away applications just to show my manager that this new platform had incredible potential and that I would be able to pick it up quickly enough to work with it seriously. He liked what he saw. The rest is material for another post. Let me just say now that the devil is in the details, and we had lots of challenges on the project overall. Once it&#8217;s out there I can talk more about it, but not yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2006/10/09/how-did-i-end-up-working-with-windows-presentation-foundation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The WPF developer&#8217;s toolbelt</title>
		<link>http://www.geektieguy.com/2006/10/05/the-wpf-developers-toolbelt/</link>
		<comments>http://www.geektieguy.com/2006/10/05/the-wpf-developers-toolbelt/#comments</comments>
		<pubDate>Fri, 06 Oct 2006 05:32:05 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2006/10/05/the-wpf-developers-toolbelt/</guid>
		<description><![CDATA[This is a collection of tools that should be in every WPF developer&#8217;s toolbelt, if you ask me: XAMLPad (from the Windows SDK [Full ISO&#124;Express Web Download])Snoop (from Pete Blois)Perforator (from the Windows SDK) (Don&#8217;t forget to turn on the required debugging setting in the registry -&#160;mentioned in the article)CLR Profiler.Net Reflector (from Lutz Roeder) [...]]]></description>
			<content:encoded><![CDATA[<p>This is a collection of tools that should be in every WPF developer&#8217;s toolbelt, if you ask me:</p>
<p>XAMLPad (from the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=117ECFD3-98AD-4D67-87D2-E95A8407FA86&amp;displaylang=en">Windows SDK</a> [<a href="http://download.microsoft.com/download/3/0/8/308525e4-3193-4308-9a65-90c57e97495f/6.0.5536.0.2.WindowsSDK_Vista_RC1.DVD.Rel.img">Full ISO</a>|<a href="http://download.microsoft.com/download/2/5/5/255a13fe-c09b-4618-8473-4de26c33bd97/Setup.exe">Express Web Download</a>])<br /><a href="http://www.blois.us/Snoop/">Snoop</a> (from <a href="http://www.blois.us/blog/">Pete Blois</a>)<br /><a href="http://windowssdk.msdn.microsoft.com/en-us/library/ms742400.aspx">Perforator</a> (from the Windows SDK) (Don&#8217;t forget to turn on the required debugging setting in the registry -&nbsp;mentioned in the article)<br /><a href="http://www.microsoft.com/downloads/details.aspx?familyid=A362781C-3870-43BE-8926-862B40AA0CD0&amp;displaylang=en">CLR Profiler</a><br /><a href="http://www.aisto.com/roeder/dotnet/">.Net Reflector</a> (from <a href="http://www.aisto.com/roeder/">Lutz Roeder</a>)</p>
<p>If you&#8217;re a designer / developer you also want:</p>
<p><a href="http://www.microsoft.com/products/expression/en/interactive_designer/id_free_trial.aspx">Microsoft Expression</a>: <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=EBF7A3F3-4B55-4C2C-A43A-B977446A131A&amp;displaylang=en">Interactive Designer</a><br /><a href="http://www.mobiform.com/Eng/aurora.html">MOBIFORM Aurora XAML Designer</a><br /><a href="http://www.erain.com/Products/ZAM3D/DefaultPDC.asp">Electric Rain Zam3D</a></p>
<p>And of course the staples:</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c6636e90-26e6-44e0-8780-5d3ccd3d94ed&amp;DisplayLang=en">.Net Framework 3.0 September 2006 CTP</a>&nbsp;(I usually pick the complete installer to avoid download problems &#8211; it&#8217;s hidden a few paragraphs down under a link that says &#8220;for x86&#8243;)<br />Visual Studio 2005 / <a href="http://msdn.microsoft.com/vstudio/express/">Visual Studio 2005 Express</a><br /><a href="http://www.microsoft.com/downloads/details.aspx?familyid=935AABF9-D1D0-4FC9-B443-877D8EA6EAB8&amp;displaylang=en">&#8220;Cider&#8221; / &#8220;Orcas Preview for WPF&#8221;</a></p>
<p>Did I miss anything?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2006/10/05/the-wpf-developers-toolbelt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vista from a developer&#8217;s point of view</title>
		<link>http://www.geektieguy.com/2006/09/09/vista-from-a-developers-point-of-view/</link>
		<comments>http://www.geektieguy.com/2006/09/09/vista-from-a-developers-point-of-view/#comments</comments>
		<pubDate>Sun, 10 Sep 2006 01:05:26 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[Vista]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2006/09/09/vista-from-a-developers-point-of-view/</guid>
		<description><![CDATA[To me Windows Vista marks a great new milestone for software developers. Not just because Microsoft invested years of development into a new programming framework, but because that framework will be included out of the box. Until now, if you wanted to take advantage of the power of the .Net Framework (1.0, 1.1 and 2.0) [...]]]></description>
			<content:encoded><![CDATA[<p>To me Windows Vista marks a great new milestone for software developers. Not just because Microsoft invested years of development into a new programming framework, but because that framework will be <em>included out of the box</em>. Until now, if you wanted to take advantage of the power of the .Net Framework (1.0, 1.1 and 2.0) you had to either include the installer for the framework or create some other magic to get it on the user&#8217;s system (asking the user to please, please download and install it first?)</p>
<p>With Vista, not only do you get the .Net Framework 2.0 (much improved over the previous versions) in the box, but also the amazingly powerful Windows Presentation Foundation (which is what I&#8217;ve worked with), Windows Communication Foundation and Windows Workflow Foundation (two pieces I know nothing about yet).</p>
<p>This will lower the barrier to entry for applications developed using these powerful tools to zero. As long as you&#8217;re writing your application for Vista you can be sure the basic requirements are there.</p>
<p>There will be issues with certain features of WPF (rendering in software vs. hardware, especially for 3D), but the framework helps you detect these issues and makes it possible to adapt your application to lower its &#8220;flashyness&#8221; (RenderCapability.Tier, remember this needs to be shifted down by 16 bits if you want to use 0, 1 and 2 as the human readable values).</p>
<p>To me Windows Presentation Foundation is the most important technology to come out of Microsoft for a long time. I&#8217;ve never written too much actual Win32 or even MFC/ATL UI code for client applications, but I&#8217;ve done a lot of HTML / CSS stuff and pure business object stuff (COM/ATL). More about that in my next post. I don&#8217;t want this to get too long.</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2006/09/09/vista-from-a-developers-point-of-view/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>.Net Framework 3.0 RC1 issue with RenderCapability.Tier on Windows XP</title>
		<link>http://www.geektieguy.com/2006/09/05/net-framework-30-rc1-issue-with-rendercapabilitytier-on-windows-xp/</link>
		<comments>http://www.geektieguy.com/2006/09/05/net-framework-30-rc1-issue-with-rendercapabilitytier-on-windows-xp/#comments</comments>
		<pubDate>Tue, 05 Sep 2006 18:58:05 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2006/09/05/net-framework-30-rc1-issue-with-rendercapabilitytier-on-windows-xp/</guid>
		<description><![CDATA[I discovered that System.Windows.Media.RenderCapability.Tierreported a wrong tier (zero) after I upgraded my Windows XP dev box&#8217;s .Net Framework 3.0 installation to the RC1 release. My card used to be a tier two and I had just upgraded the drivers, too. I contacted Microsoft about it and they said this is a known issue with the [...]]]></description>
			<content:encoded><![CDATA[<p>I discovered that</p>
<p><font size="2"></font><font size="2">System.Windows.Media.</font><font color="#008080" size="2">RenderCapability</font>.Tier<font size="2"></font><font size="2">reported a wrong tier (zero) after I upgraded my Windows XP dev box&#8217;s .Net Framework 3.0 installation to the RC1 release. My card used to be a tier two and I had just upgraded the drivers, too. I contacted Microsoft about it and they said this is a known issue with the RC1 release and that it will be fixed in the upcoming RTM release.</font><font size="2"> </font><font size="2">The problem is <strong>only with this particular API</strong> and <strong>only happens on Windows XP</strong>. All the actual rendering is still done correctly based on the capabilities of the hardware. So the only problem is if your WPF application is built to behave differently based on the value of this API call.</font><font size="2">There is a workaround that has to do with changing the value type of a certain registry entry (the video memory size) from Binary to DWORD. I&#8217;ll point to more details once I get a URL from Microsoft to point to.</p>
<p><strong>Update:</strong> Here&#8217;s the link to the official release notes for this problem:</p>
<p><span style="font-size: 11pt; color: #1f497d; font-family: 'Calibri','sans-serif'"><a title="http://msdn.microsoft.com/windowsvista/support/relnotes/netfxRc1/default.aspx#topic6" href="http://msdn.microsoft.com/windowsvista/support/relnotes/netfxRc1/default.aspx#topic6">http://msdn.microsoft.com/windowsvista/support/relnotes/netfxRc1/default.aspx#topic6</a> </p>
<p></span>Also, I need to correct my statement about this only happening on XP. That&#8217;s not entirely correct. It happens with XPDM drivers, which you can have on Vista as well. It&#8217;s just more likely that you have XPDM drivers on XP.</p>
<p></font> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2006/09/05/net-framework-30-rc1-issue-with-rendercapabilitytier-on-windows-xp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CompositionTarget.Rendering can be a CPU hog</title>
		<link>http://www.geektieguy.com/2006/08/23/compositiontargetrendering-can-be-a-cpu-hog/</link>
		<comments>http://www.geektieguy.com/2006/08/23/compositiontargetrendering-can-be-a-cpu-hog/#comments</comments>
		<pubDate>Thu, 24 Aug 2006 04:12:43 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2006/08/23/compositiontargetrendering-can-be-a-cpu-hog/</guid>
		<description><![CDATA[I ran into an issue where my WPF application would consume about 20% of CPU time just sitting idle on a Page. A question from Tim Sneath led me to investigate an aspect of the app that uses the CompositionTarget.Rendering callback to do some animations that can&#8217;t be done in other ways in WPF right [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into an issue where my WPF application would consume about 20% of CPU time just sitting idle on a Page. A question from <a href="http://blogs.msdn.com/tims" target="_blank">Tim Sneath</a> led me to investigate an aspect of the app that uses the CompositionTarget.Rendering callback to do some animations that can&#8217;t be done in other ways in WPF right now.</p>
<p>I had several UIElements that each had the Rendering event hooked up, and the code in the event handler would do next to nothing most of the time, since the animation only was kicked off on a mouse up event. I modified the code, so that the event hookup doesn&#8217;t happen until the mouse up event comes in, and also so that an unhook happens when the animation is finished. This promptly took down the CPU load to the typical intermittent 1-2%.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2006/08/23/compositiontargetrendering-can-be-a-cpu-hog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Remember to unhook those event handlers!</title>
		<link>http://www.geektieguy.com/2006/08/07/remember-to-unhook-those-event-handlers/</link>
		<comments>http://www.geektieguy.com/2006/08/07/remember-to-unhook-those-event-handlers/#comments</comments>
		<pubDate>Mon, 07 Aug 2006 22:13:43 +0000</pubDate>
		<dc:creator>GeekTieGuy</dc:creator>
				<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.geektieguy.com/2006/08/07/remember-to-unhook-those-event-handlers/</guid>
		<description><![CDATA[I thought I&#8217;d make my first post not just a &#8220;hello out there&#8221;, but something that&#8217;s marginally useful to some people.  If you&#8217;re writing a Windows Presentation Foundation app that has just a little bit of complexity to it, you may do things like hook up UI Elements to event handlers. This could be for navigation, [...]]]></description>
			<content:encoded><![CDATA[<p>I thought I&#8217;d make my first post not just a &#8220;hello out there&#8221;, but something that&#8217;s marginally useful to some people. </p>
<p>If you&#8217;re writing a Windows Presentation Foundation app that has just a little bit of complexity to it, you may do things like hook up UI Elements to event handlers. This could be for navigation, reacting to data changes, timers etc.</p>
<p>An important thing to remember is to unhoook those event handlers when your UI Element is unloaded. Otherwise the event handler hangs on to the visual tree and the garbage collector will not let go of it. This results in memory consumption &#8220;problems&#8221;, which is a nice word for a &#8220;managed memory leak&#8221;.</p>
<p>So if you do something like this:</p>
<p>public MyElement()<br />
{<br />
  InitializeComponent();<br />
  Loaded += new EventHandler(OnLoaded);<br />
}</p>
<p>public void OnLoaded(object sender, EventArgs e)<br />
{<br />
  myTimer.Tick += new EventHandler(OnTick);<br />
}</p>
<p>Don&#8217;t forget to also hook the Unloaded event and do this in it:</p>
<p>public void Unloaded(object sender, EventArgs e)<br />
{<br />
  myTimer.Tick -= new EventHandler(OnTick);<br />
}</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektieguy.com/2006/08/07/remember-to-unhook-those-event-handlers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

