<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Shawn Oster</title>
  <icon>http://shawnoster.com/Content/icons/flame.ico</icon>
  <logo>http://shawnoster.com/Content/icons/flame.png</logo>
  <updated>2010-02-11T15:21:38.997</updated>
  <subtitle type="html">Silverlight, Music, Gaming, Development</subtitle>
  <id>http://shawnoster.com/atom</id>
  <link rel="alternate" type="text/html" hreflang="en" href="/atom"/>
  <link rel="self" type="application/atom+xml" href="http://shawnoster.com/ATOM"/>
  <generator uri="http://oxite.net" version="1.0">Oxite</generator>
  <entry>
    <title type="html">Getting Excited for MIX10</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Getting-Excited-for-MIX10"/>
    <id>http://shawnoster.com/Blog/Getting-Excited-for-MIX10</id>
    <updated>2010-02-11T22:23:33.13</updated>
    <published>2010-02-11T15:21:38.997</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Microsoft" />
    <content type="html" xml:lang="en">
      &lt;p&gt;&lt;a href=&quot;http://live.visitmix.com/&quot; target=&quot;_blank&quot;&gt;MIX&lt;/a&gt; is by far my favorite Microsoft event, and not just because it’s in &lt;a href=&quot;http://www.bing.com/search?q=las+vegas&quot; target=&quot;_blank&quot;&gt;Las Vegas&lt;/a&gt;.&amp;#160; It’s the mix of designers and developers, about learning cool stuff and just getting the creative juices flowing.&amp;#160; Whether I’m there in person or just watching the keynote via the web it has a rejuvenating effect on me and gets me excited to make cool stuff.&lt;/p&gt;  &lt;p&gt;This year I’m also excited for two reasons: first it looks like I’ll get to speak (link to my talk to be posted once it’s on the schedule) and two because as a gadget and code nerd we get to learn about &lt;a href=&quot;http://live.visitmix.com/News/Windows-Phone-at-MIX10&quot; target=&quot;_blank&quot;&gt;the development story of the upcoming Windows Phone&lt;/a&gt;!&amp;#160; Per the MIX website a few weeks back:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Yes, at MIX10 you’ll learn about developing applications and games for the next generation of Windows Phone. Yes, we’ll have Phone sessions, and we can’t say more…yet.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;One thing I think people outside Microsoft don’t realize, at least I know I didn’t before working here, is that there is so much going on inside the company and we get so focused on whatever our project is that announcements like this are just as exciting for people inside the company as out!&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/GettingExcitedforMIX10_C9EC/Mix10_SeeYou_blk_240.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;Mix10_SeeYou_blk_240&quot; border=&quot;0&quot; alt=&quot;Mix10_SeeYou_blk_240&quot; src=&quot;http://shawnoster.com/Content/images/GettingExcitedforMIX10_C9EC/Mix10_SeeYou_blk_240_thumb.jpg&quot; width=&quot;244&quot; height=&quot;324&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Updated Mp3tag Sources for Zune 4.0</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Updated-Mp3tag-Sources-for-Zune-40"/>
    <id>http://shawnoster.com/Blog/Updated-Mp3tag-Sources-for-Zune-40</id>
    <updated>2009-12-02T18:21:25.833</updated>
    <published>2009-10-05T16:36:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Music" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;A new Zune release, a new updated set of &lt;a href=&quot;http://shawnoster.com/Blog/zune-marketplace-as-mp3tag-source&quot;&gt;sources for Mp3tag&lt;/a&gt;.&amp;#160; The instructions are the same as always:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Download the latest Mp3tag Zune Marketplace Sources: &lt;a href=&quot;http://shawnoster.com/Content/ZuneMarketplace.zip&quot;&gt;ZuneMarketplace.zip&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Unzip the two .src files into %appdata%\Mp3tag\data\sources&lt;/li&gt;    &lt;li&gt;Click the Sources button in Mp3tag and you’re ready to rock!&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/UpdatedMp3tagSourcesforZune4.0_E97F/image.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/UpdatedMp3tagSourcesforZune4.0_E97F/image_thumb.png&quot; width=&quot;339&quot; height=&quot;216&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Two notes about this update:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;I renamed the sources to “Zune Marketplace” from just “Marketplace”, mostly to put it at the bottom of the list making it faster to select as well as giving Zune some branding love.&lt;/li&gt;    &lt;li&gt;Now this change may be a bummer for some, I no longer have a good end-point for the 800x800 album art.&amp;#160; I used to be able to do a little dance and grab the nice hi-res album art but no longer.&amp;#160; I’m still poking around to see if I can’t find a better source but for now you’re stuck with 200x200.&lt;/li&gt; &lt;/ol&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Zune.net Now Using Silverlight 3.0</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Zunenet-Now-Using-Silverlight-30"/>
    <id>http://shawnoster.com/Blog/Zunenet-Now-Using-Silverlight-30</id>
    <updated>2009-09-16T01:48:47.653</updated>
    <published>2009-09-15T18:46:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Microsoft" />
    <category term="Zune" />
    <category term="Media" />
    <category term="Silverlight" />
    <content type="html" xml:lang="en">
      &lt;p&gt;One criticism we get as a company is that on the day Silverlight 1.0 was launched we didn’t do a massive refactoring of all Microsoft media-based or media-containing sites to use Silverlight.&amp;#160; Since dry humor doesn’t often translate via blog I’m poking some fun at our critics with that statement.&amp;#160; Any technology transition takes time, even one we believe strongly in like Silverlight.&amp;#160; Given skill sets, market requirements and different time-frames it was never that surprising that the previous Zune.net still used Flash.&amp;#160; It just made sense at the time.&lt;/p&gt;  &lt;p&gt;Today is a different story though, today we can count one more site as having come into the Silverlight fold, &lt;a href=&quot;http://zune.net&quot;&gt;Zune.net&lt;/a&gt;.&amp;#160; If you &lt;a title=&quot;Shawn Oster&amp;#39;s Zune Profile | MonocularJack&quot; href=&quot;http://social.zune.net/member/MonocularJack&quot;&gt;visit my Zune profile&lt;/a&gt; and do the right-click dance you’ll see the lovely “Silverlight” popup (circled in red below).&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/Zune.netNowUsingSilverlight3.0_1081B/image.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/Zune.netNowUsingSilverlight3.0_1081B/image_thumb.png&quot; width=&quot;534&quot; height=&quot;484&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In fact Silverlight is used twice on the page, first as the portion that shows recent plays, badges and the artists a member is following as well as the media player on the bottom of the page.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/Zune.netNowUsingSilverlight3.0_1081B/image_3.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/Zune.netNowUsingSilverlight3.0_1081B/image_thumb_3.png&quot; width=&quot;569&quot; height=&quot;92&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;That little player is pretty nice for playing 30-second previews but it’s even better when paired with a Zune Pass.&amp;#160; If you’re logged in and you have a Zune Pass then you can stream the full length track of anything in the Zune catalog.&amp;#160; You don’t even need the Zune client software installed to listen to full albums.&amp;#160; To give iTunes a friendly little dig you have install the software just to search their catalog.&lt;/p&gt;  &lt;p&gt;Two great tastes together at last Zune and Silverlight.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Things I Heart About the Zune 4.0 Software</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Things-I-Heart-About-the-Zune-40-Software"/>
    <id>http://shawnoster.com/Blog/Things-I-Heart-About-the-Zune-40-Software</id>
    <updated>2009-09-16T01:25:10.643</updated>
    <published>2009-09-15T18:25:10.55</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;The next generation of Zune is here and as someone that has been fortunate enough to play with both the new software and a ZuneHD I wanted to share some of my favorite things in the new software.&amp;#160; More details on the ZuneHD itself to come, as while I wrote this post the software features kept piling up so I’ll save the hardware focused one for tomorrow.&lt;/p&gt;  &lt;h3&gt;Quickplay&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb.png&quot; width=&quot;644&quot; height=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is the new landing page when you first open the software and you’re instantly given a rich, media-centric view that shows new items, your most recently listened to items as well as anything you’ve pinned to the Quickplay menu.&amp;#160; One of my favorite things about the Zune software is the fact that the UI adds to the media experience instead of just being a database of media.&lt;/p&gt;  &lt;p&gt;While Quickplay is a nice, big, in-your-face feature there are quite a few little details I’d like to call out that you may miss.&lt;/p&gt;  &lt;h3&gt;Smart DJ&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_3.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb_3.png&quot; width=&quot;227&quot; height=&quot;484&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;OK, so this isn’t really a subtle, little detail and many will argue that this is &lt;strong&gt;the&lt;/strong&gt; feature that makes Zune 4.0 worthy.&amp;#160; &lt;a href=&quot;http://www.zune.net/en-us/products/software/default.htm&quot;&gt;Smart DJ&lt;/a&gt; is like the &lt;a href=&quot;http://www.apple.com/itunes/features/&quot;&gt;iTunes Genius&lt;/a&gt; feature married to &lt;a href=&quot;http://www.pandora.com&quot;&gt;Pandora&lt;/a&gt;, able to create a never-ending stream of music based on an artist or song.&amp;#160; Where this really shines is when you couple it with a Zune Pass because now you can pull music not just from your collection but from the entire Zune catalog.&amp;#160; I’ve already discovered a ton of great music this way with the added benefit of being able to save these Smart DJ recommendations to playlists that I can then put on my device.&lt;/p&gt;  &lt;h3&gt;Remaining Credits &amp;amp; Expiration Date&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_4.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb_4.png&quot; width=&quot;168&quot; height=&quot;46&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Your Zune Pass gives you 10 free songs month but they don’t roll over so it’s nice to know when you’re entering “use ‘em or lose ‘em” territory. Now as their expiration date grows close the number of credits you have left turns a bolded pink and the credit’s expiration date is shown, calling out that you better use them soon.&amp;#160; Given that I’m not close to my date it’s hard to screen capture this feature :)&lt;/p&gt;  &lt;h3&gt;Suggested Songs&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_5.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb_5.png&quot; width=&quot;244&quot; height=&quot;63&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you click on your remaining credits you’ll be offered a list of suggested songs you might want to own, another great feature because invariably right when you need to pick exactly 10 songs is when you completely blank on all the music you’ve listened to, ever, and you end up either wasting the free songs or buying something you didn’t really want.&lt;/p&gt;  &lt;h3&gt;Content Filtering&lt;/h3&gt;  &lt;p&gt;If you’re a Zune Pass subscriber you’ve probably found yourself asking, “what music do I actually own and what is from my Zune Pass?”&amp;#160; Wonder no more with the ability to filter your content:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_6.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb_6.png&quot; width=&quot;225&quot; height=&quot;127&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;New Backgrounds&lt;/h3&gt;  &lt;p&gt;Silly as it is every new release I look to see what new backgrounds are available and they didn’t disappoint, my favorite new one is Geisha.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_7.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb_7.png&quot; width=&quot;644&quot; height=&quot;482&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Windows 7 Support&lt;/h3&gt;  &lt;h4&gt;AeroSnap&lt;/h4&gt;  &lt;p&gt;One of the best UX features in Windows 7 to me is AeroSnap, the ability to use Win+Left/Right Arrow to automatically position a window at 50% of your screen.&amp;#160; The Zune 3.0 software didn’t work with it, 4.0 gives us the snap love.&lt;/p&gt;  &lt;h4&gt;Taskbar Thumbnails&lt;/h4&gt;  &lt;p&gt;Full support for taskbar thumbnails, including a nice way to quickly pause and rate the current song.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_8.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb_8.png&quot; width=&quot;244&quot; height=&quot;242&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Jump Lists&lt;/h4&gt;  &lt;p&gt;Another great Windows 7 feature that you slowly come to depend on is Jump Lists, now fully supported with Zune 4.0, offering quick access to your Quickplay pinned items and Smart DJ lists.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_9.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb_9.png&quot; width=&quot;258&quot; height=&quot;469&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;New Now Playing Layout&lt;/h3&gt;  &lt;p&gt;Another thing I’ve always loved about the Zune software is that instead of going the 1980’s route of WinAmp-style visualizations (sorry candy kids) it went for an artistic mashup of colors, art and metadata.&amp;#160; That combined with some typographic treatment has really made the Now Playing screen one of my favorites in the software and something that I’d love to see on my 50” plasma during a cocktail party vs. the seizure-inducing XBox or WinAmp fractural crackfest.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_10.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb_10.png&quot; width=&quot;324&quot; height=&quot;404&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_11.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb_11.png&quot; width=&quot;324&quot; height=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here is Now Playing when there isn’t any hi-res art to use.&amp;#160; Previously all the album covers were the same size, with 4.0 they’re varied giving the UI a more organic feel.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_12.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/ThingsIHeartAbouttheZune4.0Software_1022A/image_thumb_12.png&quot; width=&quot;644&quot; height=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Whew, and that’s just off the top of my head while I’m waiting for my bus :)&amp;#160; Needless to say the Zune 4.0 brings a host of new features and improvements on existing ones that makes this release exciting even without the ZuneHD.&amp;#160; Of course the ZuneHD is here and as I’ll blog about later it’s a beauty.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Huh, Where Am I? (Redirecting enginefour to shawnoster)</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Moving-Blog-to-shawnostercom"/>
    <id>http://shawnoster.com/Blog/Moving-Blog-to-shawnostercom</id>
    <updated>2009-09-10T19:15:03.49</updated>
    <published>2009-09-10T12:14:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;If you were expecting enginefour.com and are now on shawnoster.com don’t worry, it’s all part of my mad plan.&amp;#160; Mad as in these little things really shouldn’t take as long as they do sometimes.&lt;/p&gt;  &lt;p&gt;I’m redirecting all my old enginefour.com blog traffic over to shawnoster.com (which is where you should now be).&amp;#160; This is also a sneaky way to make sure all my old slugs (the bit after the domain name that uniquely identifies each post) have a corresponding one on my new site.&lt;/p&gt;  &lt;p&gt;I created a “Hey I’m moving” post over there that will now redirect to *this* post here if all the regex’s line up :)&amp;#160; Back to our regularly scheduled broadcast.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Silverlight TreeView Connecting Lines And Blend 3 Support for HierarchicalDataTemplates</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Silverlight-TreeView-Connecting-Lines-And-Blend-3-Support-for-HierarchicalDataTemplates"/>
    <id>http://shawnoster.com/Blog/Silverlight-TreeView-Connecting-Lines-And-Blend-3-Support-for-HierarchicalDataTemplates</id>
    <updated>2009-08-26T00:07:49.643</updated>
    <published>2009-08-25T16:55:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Microsoft" />
    <category term="Silverlight" />
    <content type="html" xml:lang="en">
      &lt;p&gt;The &lt;a href=&quot;http://www.codeplex.com/Silverlight/Release/ProjectReleases.aspx&quot;&gt;July 2009 release of the Silverlight Toolkit&lt;/a&gt; has a bunch of great things in it but a few of them require just a little digging.&amp;#160; A common request in the forums and on CodePlex is &lt;a href=&quot;http://silverlight.codeplex.com/WorkItem/View.aspx?WorkItemId=851&quot;&gt;how to add connecting lines to the standard TreeView&lt;/a&gt;.&amp;#160; Well, thanks to TreeViewExtensions and a pre-built template it’s now an easy request to fulfill.&lt;/p&gt;  &lt;p&gt;I’m going to show you how to add connecting lines using Blend 3 but it’s not a requirement.&amp;#160; Grab a copy of &lt;a href=&quot;http://www.microsoft.com/expression/&quot;&gt;Expression Studio 3&lt;/a&gt; if you don’t already have Blend installed.&amp;#160; There were a lot of great enhancements with the last release so I encourage you to give it a go.&lt;/p&gt;  &lt;h3&gt;Prerequisites&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;Make sure you’ve installed the July 2009 release of the Silverlight Toolkit &lt;/li&gt;    &lt;li&gt;Start a new Silverlight project in Blend 3 &lt;/li&gt;    &lt;li&gt;While you &lt;strong&gt;could&lt;/strong&gt; start by dragging a TreeView from the Asset pane onto the design surface I want to show off Blend’s support for sample data and editing the HierarchialDataTemplate. &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Define Sample Data&lt;/h3&gt;  &lt;p&gt;One of the more annoying things when trying a do a little research into how you can tweak a control is having to come up with some kind of mock data to work with, especially when working with a TreeView because of its hierarchical nature.&amp;#160; Blend 3 introduced a huge time-saving feature, Sample Data, that we’ll take advantage of.&lt;/p&gt;  &lt;p&gt;For this example I want to end up with a common TreeView UI pattern, an icon followed by some text, similar to a basic file browser.&amp;#160; With those requirements in mind lets create some sample data.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Switch to the Data panel &lt;/li&gt;    &lt;li&gt;Click on the ‘Add sample data source’ icon (circled below) and choose ‘Define New Sample Data…’      &lt;br /&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; margin: 4px 0px 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;Define New Sample Data&quot; border=&quot;0&quot; alt=&quot;Define New Sample Data&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb.png&quot; width=&quot;282&quot; height=&quot;100&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;Go with all the defaults and click OK &lt;/li&gt;    &lt;li&gt;Presto, magic sample data! &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;At this point you can drag the SampleDataSource onto the design surface and Blend will create a ListBox with fields properly bound to the control and fully interactive sample data.&amp;#160; Very useful but we need to do a just a little more tweaking to get it where we want it.&lt;/p&gt;  &lt;p&gt;Change the property type of Property1 to an Image and Property2 to a String.&amp;#160; You do this via the property type dialog accessed by clicking on the icon to the right of property name (circled below).&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_3.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb_3.png&quot; width=&quot;283&quot; height=&quot;219&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Almost there.&amp;#160; We now have an image and some text but it’s missing that hierarchical nature.&amp;#160; Easy enough to fix.&amp;#160; Click on the drop down to the right of the Collection and click “Convert to Hierarchical Collection”:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_4.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb_4.png&quot; width=&quot;279&quot; height=&quot;227&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;At this point you’ll have a collection that contains a collection that contains a collection that… you get my drift.&amp;#160; Grab the first Collection underneath SampleDataSource and drag it onto the Blend design surface and watch the magic happen!&lt;/p&gt;  &lt;p&gt;You’ll end up with something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_5.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb_5.png&quot; width=&quot;210&quot; height=&quot;312&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Pretty awesome considering you didn’t have to create a single mock object, mess with any XAML or write any code.&lt;/p&gt;  &lt;h3&gt;Customizing the HierarchialDataTemplate in Blend&lt;/h3&gt;  &lt;p&gt;OK, now that the rush of excitement has worn off (if it hasn’t don’t worry, just take a few deep breaths, take a walk and come back when you’ve got your heart rate under control) the harsh reality creeps in that this doesn’t look exactly like your basic file browser.&amp;#160; Image is a bit big and the text is underneath it the icon.&lt;/p&gt;  &lt;p&gt;Easy enough to fix:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Select the TreeView &lt;/li&gt;    &lt;li&gt;There are at least three ways to navigate to the Edit Current Template menu but I find the fastest is clicking on the TreeView breadcrumb underneath the MainPage.xaml tab (illustrated below)      &lt;br /&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_13.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb_13.png&quot; width=&quot;607&quot; height=&quot;162&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;At this point you have a very simple template to work with, a basic StackPanel containing an Image and TextBlock&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_7.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb_7.png&quot; width=&quot;279&quot; height=&quot;95&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Go ahead and tweak the template into something a little more like what you’d expect from a file browser:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Change the orientation of the StackPanel to Horizontal &lt;/li&gt;    &lt;li&gt;Change the Width and Height of the Image to 16 x 16 &lt;/li&gt;    &lt;li&gt;Change the VerticalAlignment of the TextBlock to Center &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Now we have something much more useful:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_8.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb_8.png&quot; width=&quot;249&quot; height=&quot;268&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;(I changed my sample data generation on the string to only create one word with a maximum of 12 characters)&lt;/p&gt;  &lt;h3&gt;Where Are Those Connecting Lines?&lt;/h3&gt;  &lt;p&gt;I know what you’re thinking, I brought you all this way, are we ever going to get to the connecting lines part?&amp;#160; Well, the grand revel is here!&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Add a reference to System.Windows.Controls.Toolkit (if you went with the default install it should be in C:\Program Files\Microsoft SDKs\Silverlight\v3.0\Toolkit\Jul09\Bin) &lt;/li&gt;    &lt;li&gt;Download &lt;a href=&quot;http://s3.amazonaws.com:80/enginefour/TreeViewConnectingLines.xaml&quot;&gt;TreeViewConnectingLines.xaml&lt;/a&gt; and add it to your project &lt;/li&gt;    &lt;li&gt;Switch to the Resources panel and expand TreeViewConnectingLines.xaml, it’ll look like this:      &lt;br /&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_9.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; margin: 4px 0px 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb_9.png&quot; width=&quot;356&quot; height=&quot;159&quot; /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;There is a style for both the TreeView itself and the TreeViewItems that it contains. &lt;/li&gt;    &lt;li&gt;Drag ConnectingLinesTreeView onto the TreeView and when prompted select “Select property on “[TreeView]” Style      &lt;br /&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_10.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; margin: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb_10.png&quot; width=&quot;194&quot; height=&quot;100&quot; /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Switch to the Properties panel for the TreeView &lt;/li&gt;    &lt;li&gt;Scroll down to ItemContainerStyle (in Miscellaneous section) &lt;/li&gt;    &lt;li&gt;Click the Advanced property button to the right of the property (circled below)      &lt;br /&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_11.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; margin: 4px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb_11.png&quot; width=&quot;302&quot; height=&quot;30&quot; /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Select Local Resource –&amp;gt; ConnectingLinesTreeViewItem &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;And there you go!&amp;#160; You now have connecting lines, with a plus/plus icon showing expansion state.&amp;#160; It even shows inside of Blend so you see exactly what you get but it’s more fun to run it and see it in all its connecting line glory!&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_12.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://shawnoster.com/Content/images/SilverlightTreeViewConnectingLinesAndBle_ECDC/image_thumb_12.png&quot; width=&quot;250&quot; height=&quot;268&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Epilogue&lt;/h3&gt;  &lt;p&gt;To be honest I could have just started with adding the connecting lines and you’d be on your way but I really wanted to show off sample data for TreeView, converting that sample data into a hierarchy and editing the HierarchicalDataTemplate in Blend 3.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Trying Out Oxite</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Trying-Out-Oxite"/>
    <id>http://shawnoster.com/Blog/Trying-Out-Oxite</id>
    <updated>2009-08-19T21:56:16.153</updated>
    <published>2009-08-19T14:55:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;Been quite on my blog lately and of all reasons it was because I just wasn’t happy with my old theme.&amp;#160; Lame I know yet if I’m not excited about how it looks then I’m not really compelled to write.&amp;#160; So I went searching for a cool theme for my old blog engine &lt;a href=&quot;http://www.dotnetblogengine.net/&quot;&gt;BlogEngine.NET&lt;/a&gt; and while a few grabbed me they all had some pretty basic flaws.&amp;#160; I believe using bulleted lists, quotes, proper headings, etc. help in the digestion of information and if the formatting for those items are off then a simple post can look like a train wreck, at least to my eyes.&lt;/p&gt;  &lt;p&gt;Long story short I keep bumping up against the &lt;a href=&quot;http://oxite.codeplex.com/&quot;&gt;Oxite&lt;/a&gt; “theme” and decided the best way to get that theme was to switch to Oxite as my engine.&amp;#160; I’ve been super busy lately with all sorts of ninja projects and so every time I hit a roadblock in installing Oxite on GoDaddy I’d stop and move onto real work.&lt;/p&gt;  &lt;p&gt;Well, today I finally got it all working and I can start flooding my blog with new posts once again.&amp;#160; The irony being of course that most people just use a feed reader (&lt;a href=&quot;http://www.feeddemon.com/&quot;&gt;FeedDemon&lt;/a&gt; being my favorite) to read blog entries so all of that deep theme searching was probably in vain.&lt;/p&gt;  &lt;p&gt;I want to note that nothing is wrong with BlogEngine.NET and if I had spent as much time fixing the CSS of the themes I liked as I did installing Oxite then I’d still be using it.&amp;#160; I’m also addicted to updates and while BlogEngine.NET development hasn’t exactly stalled things over there seem a bit stale.&amp;#160; For example the official release is 1.5 yet the home page still calls it a RC.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Your Inner Remembrance One</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Your-Inner-Remembrance-One"/>
    <id>http://shawnoster.com/Blog/Your-Inner-Remembrance-One</id>
    <updated>2009-08-10T23:47:07.657</updated>
    <published>2009-06-17T15:44:17</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;Part of my personal daily rounds is catching up on all the gaming news which means hitting up &lt;a href=&quot;http://www.engadget.com/&quot;&gt;Engadget&lt;/a&gt; and &lt;a href=&quot;http://www.joystiq.com/&quot;&gt;Joystiq&lt;/a&gt;.&amp;#160; I was reading a &lt;a href=&quot;http://www.engadget.com/2009/06/17/xbox-360-jasper-motherboard-with-512mb-storage-hitting-us-stores/&quot;&gt;recent tidbit&lt;/a&gt; about how new XBox 360’s are starting to show up with both the Jasper motherboard and 512MB of internal memory, something some of you may or may not be as excited about as I am.&lt;/p&gt;  &lt;p&gt;The part that really caught my eye though was when I did a &lt;a href=&quot;http://www.bing.com&quot;&gt;Bing&lt;/a&gt; search for “xbox jasper”, in an effort to catch up on my XBox motherboard goodness, and stumbled across the exact same Engadget article on another site with some slightly different phrasing.&amp;#160; This isn’t surprising in itself since it’s a pretty common ad trap to scrap content from a popular website and surround it with ads hoping people will click on them but the fun part was this site tried to make the content more unique by running it through a thesaurus.&amp;#160; Most of it ended up sounding like a drunk pedantic linguistics professor muttering to himself but here is the choice bit that had me rolling on the floor (ok, chuckling softly to myself like a crazed madman but you get the idea):&lt;/p&gt;  &lt;p&gt;Original:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;That's twice the size of the old one, giving the equivalent of a 512MB internal memory unit.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;New And Improved!&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;That’s two times the bigness of the rich person, giving the tantamount of a 512MB inner remembrance one.&lt;/p&gt;&lt;/blockquote&gt;
    </content>
  </entry>
  <entry>
    <title type="html">MIX ‘09 &amp; The Silverlight Toolkit March 2009 Release</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/MIX-e2809809-The-Silverlight-Toolkit-March-2009-Release"/>
    <id>http://shawnoster.com/Blog/MIX-e2809809-The-Silverlight-Toolkit-March-2009-Release</id>
    <updated>2009-08-21T23:32:42.477</updated>
    <published>2009-03-22T13:07:13</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Silverlight" />
    <content type="html" xml:lang="en">
      &lt;p&gt;It has been an action packed last week, a lot getting announced, released and talked about.&amp;#160; What happened?&lt;/p&gt;  &lt;h3&gt;MIX ‘09&lt;/h3&gt;  &lt;p&gt;&lt;a href=&quot;http://live.visitmix.com/&quot;&gt;MIX09&lt;/a&gt; was awesome, first because it was the first one I’ve ever been able to attend and second because of all the great announcements and energy of the people.&amp;#160; I met great people, had amazing conversations and the energy was so high that I didn’t even notice that I lived off of Red Bull and a couple of hours a sleep a night.&lt;/p&gt;  &lt;p&gt;No, the Adobe guy and I didn’t fight as people kept asking me :).&amp;#160; We had a great conversation though I do forget his name (drop me a line if you read this cool Adobe guy).&amp;#160; That’s in fact one of the reasons I love MIX, it’s bringing together different people inside the industry all focused on making rich interactive experiences for the web denizens.&amp;#160; It’s saying here are all these cool tools and technologies but instead of focusing on whether a site is Rails or ASP.NET MVC lets talk about how to give users something useful.&lt;/p&gt;  &lt;p&gt;I was asked a great question by my sound guy (thanks for making me sound good!) after my talk:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“As a consumer, as someone that uses the web, why should I care about Silverlight?”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A lot of reasons went through my head and I tried to imagine what a good marketing peep would say but perhaps due to the lack of sleep I instead spoke the first thing that came to my mind which is that “You shouldn’t care about Silverlight, you should care about the great applications these people are creating with it.”&amp;#160; That really goes for any technology, at the end of the day people don’t care about Flash or Silverlight or whether your site is 100,000 lines of spaghetti code being spit out by CGI scripts, they just want it to work easily without getting in their way while providing a rockstar experience.&lt;/p&gt;  &lt;p&gt;I talked with people from all over the industry, from companies that are often our competition but at the end of the day we all want to provide a killer experience for the people that just want to watch a little bit of &lt;a href=&quot;http://mmod.ncaa.com/&quot;&gt;March Madness&lt;/a&gt; online :)&amp;#160; See what I did there, I just made someone in marketing happy but I’m also highlighting that the web is about providing an experience, not what technology is used.&amp;#160; You can watch March Madness in SD using the Flash player or in HD with Silverlight.&amp;#160; By the way if you haven’t watched a game in HD in your browser I encourage you to do so, it’s awesome.&amp;#160; I don’t even really like basketball but I find myself watching it amazed at the quality that’s being live streamed.&lt;/p&gt;  &lt;h3&gt;Silverlight Toolkit March 2009&lt;/h3&gt;  &lt;p&gt;To coincide with MIX we released a new version of the toolkit, officially known as the &lt;a href=&quot;http://silverlight.codeplex.com/&quot;&gt;Silverlight Toolkit March 2009&lt;/a&gt; release.&amp;#160; As a team that focuses on bringing new controls to everyone this release initially felt ‘light’, because with every release we want to bring as many controls as possible and to fix every bug under the sun but as I was preparing for my MIX talk we realized there is a ton of stuff in this release.&amp;#160; It was a true forest for the trees moment.&amp;#160; You can find all the goods in the &lt;a href=&quot;http://silverlight.codeplex.com/Wiki/View.aspx?title=Silverlight%20Toolkit%20March%202009%20change%20list&quot;&gt;official release notes&lt;/a&gt; but here are just a few highlights:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;New Controls&lt;/strong&gt;: Accordion, DomainUpDown, TimeUpDown, TimePicker, LayoutTransformer, TransitioningContentControl, AreaSeries (for charting).&amp;#160; Check out the DomainUpDown sample showcasing Jesse Liberties tutorial videos.&amp;#160; Pure hotness. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Silverlight 3 Beta Controls&lt;/strong&gt;: DataPager, ChildWindow, Frame/Page, DataForm, Validation controls (ErrorSummary, FieldLabel, DescriptionViewer) and DataGrid enhancements. &lt;/li&gt;    &lt;li&gt;Bug fixes as always. &lt;/li&gt;    &lt;li&gt;VB.NET versions of all the samples!&amp;#160; The community spoke and we listened so now we have full VB.NET samples. &lt;/li&gt;    &lt;li&gt;A real installer that puts the controls right into the Visual Studio and Blend toolbox.&amp;#160; The less monkey work you have to do to get off the ground with the controls the better. &lt;/li&gt;    &lt;li&gt;New source!&amp;#160; Now the full source for Calendar, DatePicker, GridSplitter and TabControl are in the toolkit.&amp;#160; No more needing crack those open using Reflector, you can go straight to the source, comments and all. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;High-Speed RIA Development Talk&lt;/h3&gt;  &lt;p&gt;If you were at my talk at MIX and had a question I left you hanging with ask it in the comments or forums, we’ll get your questions answered.&amp;#160; Also any feedback you want to give would be great.&amp;#160; I have a thick skin, I can take it :)&amp;#160; I want to make sure that my next talks address your needs better and also to help shape future blog posts about what things you may want to hear about and see.&lt;/p&gt;  &lt;h3&gt;My MIX Talk Online&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; If you want to tease, scoff or hear about what’s new in the Silverlight Toolkit you can &lt;a href=&quot;http://videos.visitmix.com/MIX09/T15F&quot;&gt;watch my session online&lt;/a&gt;.&amp;#160; If you want to learn more about sharing skills and code between Silverlight &amp;amp; WPF check out my &lt;a href=&quot;http://videos.visitmix.com/MIX09/T87F&quot;&gt;team mates Jeff Wilcox’s talk&lt;/a&gt;.&lt;/p&gt; &lt;object data=&quot;data:application/x-silverlight-2,&quot; type=&quot;application/x-silverlight-2&quot; width=&quot;480&quot; height=&quot;270&quot;&gt; &lt;param name=&quot;source&quot; value=&quot;http://videos.visitmix.com/Skins/mixvideos/Styles/players/VideoPlayer2009_02_11.xap&quot; /&gt; &lt;param name=&quot;initParams&quot; value=&quot;m=http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t15f.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://videos.visitmix.com/Skins/mixvideos/Styles/players/VideoPlayer2009_02_11.xap, postid=0&quot; /&gt; &lt;param name=&quot;background&quot; value=&quot;#00FFFFFF&quot; /&gt; &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkID=124807&quot; style=&quot;text-decoration: none;&quot;&gt; &lt;img src=&quot;http://go.microsoft.com/fwlink/?LinkId=108181&quot; alt=&quot;Get Microsoft Silverlight&quot; style=&quot;border-style: none&quot; /&gt; &lt;/a&gt; &lt;/object&gt;
    </content>
  </entry>
  <entry>
    <title type="html">MVP Summit Talk: Silverlight Toolkit: Past, Present &amp; Future</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/MVP-Summit-Talk-Silverlight-Toolkit-Past-Present-Future"/>
    <id>http://shawnoster.com/Blog/MVP-Summit-Talk-Silverlight-Toolkit-Past-Present-Future</id>
    <updated>2009-08-21T23:33:59.933</updated>
    <published>2009-03-03T12:36:55</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Silverlight" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Today I’m giving a talk at Microsoft’s &lt;a href=&quot;https://www.mvpsummit2009.com/&quot;&gt;2009 MVP Global Summit&lt;/a&gt; here on campus.&amp;#160; The title of the talk is “Silverlight Toolkit: Past, Present &amp;amp; Future” and I’ll be talking a little bit about where the &lt;a href=&quot;http://silverlight.codeplex.com/&quot;&gt;Silverlight Toolkit&lt;/a&gt; came from, what’s going on with it right now and what we’re planning in future versions.&amp;#160; Pretty self-explanatory actually :)&amp;#160; I’m done a few dry-runs and once it came out at 30 minutes, the next at an hour and 15 minutes so I’m hoping I’ll find a nice average and nail the 45 minute window I have.&lt;/p&gt;  &lt;p&gt;We’ve done a lot with the toolkit in a very short time and we’re not done yet.&amp;#160; There are some really great things shipping in the &lt;a href=&quot;http://2009.visitmix.com/&quot;&gt;MIX09&lt;/a&gt; time-frame and I’m lucky enough to get to speak about them at MIX09 as well.&lt;/p&gt;  &lt;p&gt;For anyone coming to my talk today I look forward to sharing our plans with you and if you were there feel free to drop me a line with any follow up questions.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Adding Silverlight Toolkit Controls to the Visual Studio and Blend Toolbox</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Adding-Silverlight-Toolkit-Controls-to-the-Visual-Studio-and-Blend-Toolbox"/>
    <id>http://shawnoster.com/Blog/Adding-Silverlight-Toolkit-Controls-to-the-Visual-Studio-and-Blend-Toolbox</id>
    <updated>2009-08-10T23:47:09.95</updated>
    <published>2009-02-04T13:30:41</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;Now that title is a mouth-full.&amp;#160; I’ve seen a few questions in the &lt;a href=&quot;http://silverlight.net/forums/35.aspx&quot;&gt;Silverlight.net forums&lt;/a&gt; asking how to get the &lt;a href=&quot;http://www.codeplex.com/Silverlight&quot;&gt;Silverlight Toolkit&lt;/a&gt; controls into the toolbox/asset library of Visual Studio 2008 and/or &lt;a href=&quot;http://www.microsoft.com/expression/products/Overview.aspx?key=blend&quot;&gt;Expression Blend 2&lt;/a&gt;.&amp;#160; There are a bunch of great posts scattered among the tubes on how to do this but I wanted to explain both Visual Studio 2008 and Blend 2 in one post.&amp;#160; Plus it’ll segue nicely into an upcoming post :)&lt;/p&gt;  &lt;h3&gt;Download the Silverlight Toolkit&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;Download the latest release of the &lt;a href=&quot;http://www.codeplex.com/Silverlight/Release/ProjectReleases.aspx?ReleaseId=19172&quot;&gt;Silverlight Toolkit&lt;/a&gt; (December 2008 as of this post). &lt;/li&gt;    &lt;li&gt;Unzip to a folder of your liking (I use the highly imaginative C:\Source\Silverlight Toolkit December 2008). &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Adding to the Visual Studio 2008 Toolbox&lt;/h3&gt;  &lt;p&gt;You can add the controls to any tab in the Toolbox you like, for this example I'm going to create a new tab, Silverlight Toolkit. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Right-click anywhere in the Toolbox and select &lt;strong&gt;Add Tab&lt;/strong&gt;, name it Silverlight Toolkit. &lt;/li&gt;    &lt;li&gt;Right-click in the empty space of the Silverlight Toolkit group and select &lt;strong&gt;Choose Items&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Select the Silverlight Components tab. &lt;/li&gt;    &lt;li&gt;Click Browse and browse to \Binaries folder, adding &lt;strong&gt;Microsoft.Windows.Controls&lt;/strong&gt;, &lt;strong&gt;Microsoft.Windows.Controls.Input&lt;/strong&gt; and &lt;strong&gt;Microsoft.Windows.Controls.DataVisualization&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;The controls will now appear in your Toolbox.      &lt;p&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;Silverlight Toolkit controls in Visual Studio 2008 toolbox&quot; border=&quot;0&quot; alt=&quot;Silverlight Toolkit controls in Visual Studio 2008 toolbox&quot; src=&quot;http://s3.amazonaws.com:80/enginefour/Silverlight Toolkit controls in Visual Studio 2008 Toolbox.png&quot; width=&quot;181&quot; height=&quot;496&quot; /&gt; &lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Adding to Expression Blend 2 Asset Library &lt;/h3&gt;  &lt;p&gt;Adding controls to Blend is even easier, though you do have to repeat this process for each new project.&amp;#160; Also because making controls available in Blend requires you to add references to your project, thus increasing your download size, you should only add references to the assemblies you need.&amp;#160; Bit of a chicken and egg issue.&amp;#160; To help you decide which assemblies to add I included a breakdown of which controls are in what assembly after these instructions.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;In your Project pane right-click on References, select Add Reference…. &lt;/li&gt;    &lt;li&gt;Add references to Microsoft.Windows.Controls, Microsoft.Windows.Controls.DataVisualization, Microsoft.Windows.Controls.Input.      &lt;p&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;Blend 2 Project Pane&quot; border=&quot;0&quot; alt=&quot;Blend 2 Project Pane&quot; src=&quot;http://enginefour.s3.amazonaws.com/Blend Project Pane.PNG&quot; width=&quot;336&quot; height=&quot;363&quot; /&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;The controls will now appear in the Custom Controls section of the Asset Library.      &lt;p&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;Blend 2 Asset Library&quot; border=&quot;0&quot; alt=&quot;Blend 2 Asset Library&quot; src=&quot;http://enginefour.s3.amazonaws.com/Blend 2 Asset Library.PNG&quot; width=&quot;640&quot; height=&quot;317&quot; /&gt;&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;What’s In Each Assembly?&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Microsoft.Windows.Controls&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;AutoCompleteBox &lt;/li&gt;    &lt;li&gt;DockPanel &lt;/li&gt;    &lt;li&gt;Expander &lt;/li&gt;    &lt;li&gt;HeaderedContentControl &lt;/li&gt;    &lt;li&gt;HeaderedItemsControls &lt;/li&gt;    &lt;li&gt;Label &lt;/li&gt;    &lt;li&gt;TreeView &lt;/li&gt;    &lt;li&gt;TreeViewItem &lt;/li&gt;    &lt;li&gt;Viewbox &lt;/li&gt;    &lt;li&gt;WrapPanel &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Microsoft.Windows.Controls.Input&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ButtonSpinner &lt;/li&gt;    &lt;li&gt;NumericUpDown &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Microsoft.Windows.Controls.DataVisualization&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Charting (with associated Axis, DataPoint and Series). &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Getting Support, Offering Feedback&lt;/h3&gt;  &lt;p&gt;As always the best place to get support for the Silverlight Toolkit is to post in &lt;a href=&quot;http://silverlight.net/forums/35.aspx&quot;&gt;our forum on Silverlight.net&lt;/a&gt;.&amp;#160; If you have a feature request or bug please file it in our &lt;a href=&quot;http://www.codeplex.com/Silverlight/WorkItem/List.aspx&quot;&gt;Issue Tracker&lt;/a&gt; and get some votes behind it.&amp;#160; We look carefully at those numbers when we decide how to prioritize the bug fixes.&lt;/p&gt;  &lt;p&gt;(Updated to include warning about adding assemblies you don’t need in Blend and what controls are in each assembly, plus fixed the title tag on a few images)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Working with Units of Measure in a NumericUpDown</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Creating-a-LengthUpDown-from-a-NumericUpDown"/>
    <id>http://shawnoster.com/Blog/Creating-a-LengthUpDown-from-a-NumericUpDown</id>
    <updated>2009-08-24T01:34:06.103</updated>
    <published>2008-12-11T03:10:58</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Silverlight" />
    <content type="html" xml:lang="en">
      &lt;p&gt;One of the great controls released with the &lt;a href=&quot;http://www.codeplex.com/Silverlight&quot;&gt;Silverlight Toolkit&lt;/a&gt; is the NumericUpDown.&amp;#160; Sure it may seem like just a basic textbox that allows user input with the added glory of a spinner that makes it easy to nudge values up or down with a click, which in and of itself is a great benefit, but there is also some lesser known plumbing that allows users to easily extend this control to provide some great user experiences.&lt;/p&gt;  &lt;p&gt;One of my favorite user experiences is the way the UpDowns, or spinners as some call them, work in Microsoft Word when you’re adjusting your margins.&amp;#160; The first great thing is that you see a suffix indicating your current unit of measure.&amp;#160; The second, and cooler, thing is if your default measurement unit is inches and you type 10mm it’ll automatically convert 10 millimeters into inches for you, which I think is brilliant especially considering how often UpDowns are used to represent measurements.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://blog.enginefour.com/blog/image.axd?picture=WindowsLiveWriter/CreatingaMeasurementUpDownfromaNumericUp_10111/image_8.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://blog.enginefour.com/blog/image.axd?picture=WindowsLiveWriter/CreatingaMeasurementUpDownfromaNumericUp_10111/image_thumb_3.png&quot; width=&quot;401&quot; height=&quot;123&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Using two handy virtuals in NumericUpDown, FormatValue and ParseValue, the same functionality can be created in Silverlight.&amp;#160; I show you how to get started and leave the monkey work of length conversion to you :)&lt;/p&gt;  &lt;h3&gt;Step 1: Reference the Silverlight Toolkit&lt;/h3&gt;  &lt;p&gt;The first step is to download the &lt;a href=&quot;http://www.codeplex.com/Silverlight&quot;&gt;Silverlight Toolkit&lt;/a&gt; if you haven’t already, unzip it, create a new Silverlight Application project (I called mine PageLayout because I was inspired by the Page Layout section in Word)&amp;#160; and add a reference to Microsoft.Windows.Controls.Input.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://blog.enginefour.com/blog/image.axd?picture=WindowsLiveWriter/CreatingaMeasurementUpDownfromaNumericUp_10111/image_2.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;Microsoft.Windows.Controls.Input Reference&quot; border=&quot;0&quot; alt=&quot;Microsoft.Windows.Controls.Input Reference&quot; src=&quot;http://blog.enginefour.com/blog/image.axd?picture=WindowsLiveWriter/CreatingaMeasurementUpDownfromaNumericUp_10111/image_thumb.png&quot; width=&quot;288&quot; height=&quot;74&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Step 2: Create The LengthUpDown Class&lt;/h3&gt;  &lt;p&gt;Do the usual right-click Add Class dance and name it LengthUpDown.cs.&amp;#160; We want to descend LengthUpDown from NumericUpDown so add a using statement referencing the toolkit namespace: Microsoft.Windows.Controls.&amp;#160; At this point you should have:&lt;/p&gt;  &lt;pre class=&quot;brush: csharp; gutter: false;&quot;&gt;using Microsoft.Windows.Controls;

namespace PageLayout
{
    public class LengthUpDown : NumericUpDown
    {

    }
}&lt;/pre&gt;

&lt;h3&gt;Step 3: FormatValue &amp;amp; ParseValue&lt;/h3&gt;

&lt;p&gt;So far everything has been prep, let’s do something interesting.&amp;#160; UpDownBase, the class NumericUpDown base derives from, exposes two useful virtual methods: FormatValue and ParseValue.&amp;#160; &lt;/p&gt;

&lt;p&gt;FormatValue is responsible for formatting the actual Value as a string for the user.&amp;#160; It is purely for display purposes so you can format it however you like.&amp;#160; You could return the word “three” for the value 3 or in our case append a suffix representing the current measurement unit, such as “mm”.&lt;/p&gt;

&lt;p&gt;ParseValue goes the other direction, it takes the user-entered string and converts it back to a double.&amp;#160; This is where you could for example take the word “three” and convert it to 3 or in our case scan the string to see if there is a unit suffix such as mm, cm, pt or px and do the appropriate conversion before returning the value.&lt;/p&gt;

&lt;p&gt;The basic skeleton for our LengthUpDown starts something like this:&lt;/p&gt;

&lt;pre class=&quot;brush: csharp; gutter: false;&quot;&gt;using System;
using Microsoft.Windows.Controls;

namespace PageLayout
{
    public class LengthUpDown : NumericUpDown
    {
        /// &lt;summary&gt;
        /// Formats the value for display in the control.
        /// &lt;returns&gt;&lt;/returns&gt;
        protected override string FormatValue()
        {
            string suffix = DetermineMeasurementSuffix();
            return base.FormatValue() + suffix;
        }

        private string DetermineMeasurementSuffix()
        {
            throw new NotImplementedException();
        }

        /// &lt;summary&gt;
        /// Parses the value the user entered and converts it to the
        /// correct value.
        /// &lt;returns&gt;&lt;/returns&gt;
        protected override double ParseValue(string text)
        {
            double length = ConvertLength(text);
            return length;
        }

        private double ConvertLength(string text)
        {
            throw new NotImplementedException();
        }
    }
}&lt;/pre&gt;

&lt;h3&gt;Step 4: Length Conversion&lt;/h3&gt;

&lt;p&gt;In an effort not to introduce too many concepts at once and to keep the code samples short I’ve omitted all the actual conversion logic.&amp;#160; In the next few days I’ll post a fully working version that converts between common units of linear measure.&amp;#160; If you’re bored or ambitious go ahead and implement them, they’re fairly easy for a limited number of measurement units.&amp;#160; Here is a little peak at a fun little fluent-interface conversion class that I created (and that will be included in the upcoming project):&lt;/p&gt;

&lt;pre class=&quot;brush: csharp; gutter: false;&quot;&gt;if (suffix != String.Empty)
{
    
    LengthUnit fromUnit = SuffixToLengthUnit(suffix);
    return new ConvertLength(length).From(fromUnit).To(DefaultLengthUnit);
}&lt;/pre&gt;

&lt;h3&gt;Step 5: Using It&lt;/h3&gt;

&lt;p&gt;Once you’ve implemented your conversion logic, hopefully in another class to maximize unit testing, then you’ll want to actually use your new control. For my example I created the control directly in the project so it’s easy to get it rocking in the application.&lt;/p&gt;

&lt;p&gt;Open the page.xaml and add the project’s namespace to the XAML so you can use your new control and plop down an instance of it, leaving you with:&lt;/p&gt;

&lt;pre class=&quot;brush: xml; gutter: false;&quot;&gt;&amp;lt;UserControl x:Class=&amp;quot;PageLayout.Page&amp;quot;
    xmlns=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot; 
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot; 
    xmlns:local=&amp;quot;clr-namespace:PageLayout&amp;quot;
    Width=&amp;quot;400&amp;quot; Height=&amp;quot;300&amp;quot;&amp;gt;
    
    &amp;lt;Grid x:Name=&amp;quot;LayoutRoot&amp;quot; Background=&amp;quot;White&amp;quot;&amp;gt;
        &amp;lt;local:LengthUpDown Value=&amp;quot;10&amp;quot; /&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/UserControl&amp;gt;&lt;/pre&gt;

&lt;p&gt;Run the project and you should see a LengthUpDown looking control in the middle of the page.&lt;/p&gt;

&lt;h3&gt;Step 6: The Next Step&lt;/h3&gt;

&lt;p&gt;As I mentioned I’ll be posting a more completely control in the coming days but for now you have everything you need to add custom prefixes and suffixes to numeric values in your UpDown controls. &lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">ZunePass Just Got Upgraded</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Zune-Pass-Just-Got-Upgraded"/>
    <id>http://shawnoster.com/Blog/Zune-Pass-Just-Got-Upgraded</id>
    <updated>2009-08-21T23:27:27.33</updated>
    <published>2008-11-23T17:11:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <content type="html" xml:lang="en">
      &lt;p&gt;One of my passions is music, especially the discovery of new music.&amp;nbsp; Back in the day I used to walk into &lt;a href=&quot;http://www.waxtraxrecords.com/&quot;&gt;Wax Trax Records&lt;/a&gt; in Denver or &lt;a href=&quot;http://www.myspace.com/albums&quot;&gt;Albums on the Hill&lt;/a&gt; in Boulder and walk out with a stack of CDs that I’d grabbed for no other reason than I liked the album art or the tight-pants wearing clerk behind the counter nodded vaguely in its direction.&amp;nbsp; Sometimes it worked out; &lt;a href=&quot;http://social.zune.net/album/Mentallo++the+Fixer/Where+Angels+Fear+To+Tread/89153a00-0100-11db-89ca-0019b92a3933/details&quot;&gt;Mentallo &amp;amp; The Fixer&lt;/a&gt;, &lt;a href=&quot;http://social.zune.net/artist/Arctic+Monkeys/775c0b00-0600-11db-89ca-0019b92a3933/overview&quot;&gt;Arctic Monkeys&lt;/a&gt; (before they were big, bought only because the word Monkey was in their name), and a few others.&amp;nbsp; Other times it was a huge waste of money.&lt;/p&gt; &lt;p&gt;That is one reason I love the Zune Pass, I no longer have to waste $30 to $80 a month just to discover if I like an album or not.&amp;nbsp; I can give it a listen a few times and then I decide if it’s worth my hard earned coin.&amp;nbsp; Yes, even though I have an all-you-can-eat music subscription I still buy all my music as MP3s in the end.&amp;nbsp; Oddly enough I’m still saving money compared to my previous random sampling method, because sometimes that tight-pants wearing bloke likes some right proper shite.&lt;/p&gt; &lt;p&gt;Enter the new &lt;a href=&quot;http://www.zune.net/en-us/software/zunepass/default.htm&quot;&gt;Zune Pass upgrade&lt;/a&gt;, which is that you can still listen to everything in their catalog but you now get 10 tracks free a month.&amp;nbsp; No DRM, you own them even if you cancel you Zune Pass, they are yours.&amp;nbsp; This is awesome, it’s like free money and I believe it’s the first of its kind of all the online services.&amp;nbsp; When you break it down you’re really only paying $5 a month to have full listening access to the entire Zune catalog.&lt;/p&gt; &lt;p&gt;I’m also a member of &lt;a href=&quot;http://www.emusic.com&quot;&gt;eMusic&lt;/a&gt; (which rocks and makes a nice compliment to Zune, especially now that they’ve added audio books), which has a similar concept of paying a fixed price for a fixed number of tracks per month but they only offer 30-second clips of the songs.&amp;nbsp; Next are the iTunes/Amazon but again, 30-second previews.&amp;nbsp; Being able to fully absorb an album as well as own 10 of them free and clear, well, I just saved myself $10 a month.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Dynamic Icons in the Silverlight TreeView</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Dynamic-Icons-in-the-Silverlight-TreeView"/>
    <id>http://shawnoster.com/Blog/Dynamic-Icons-in-the-Silverlight-TreeView</id>
    <updated>2009-08-24T01:30:35.857</updated>
    <published>2008-11-06T15:35:58</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Silverlight" />
    <content type="html" xml:lang="en">
      &lt;p&gt;A common question in the &lt;a href=&quot;http://silverlight.net/forums/35.aspx&quot;&gt;forums&lt;/a&gt; has been how to get dynamic icons in the &lt;a href=&quot;http://www.codeplex.com/Silverlight&quot;&gt;Silverlight Toolkit&lt;/a&gt; TreeView and luckily there are quite a few options.&lt;/p&gt;  &lt;h3&gt;The Icon&lt;/h3&gt;  &lt;p&gt;Before you can make the icon dynamic you need a place to put it.&amp;#160; The basic idea is to create a HierarchicalDataTemplate and make room for an image:&lt;/p&gt;  &lt;pre class=&quot;brush: xml; gutter: false;&quot;&gt;&amp;lt;stackpanel.resources&amp;gt;
    &amp;lt;controls:hierarchicaldatatemplate 
        x:key=&amp;quot;TaxonomyTemplate&amp;quot; 
        itemssource=&amp;quot;{Binding Subclasses}&amp;quot;&amp;gt;
        &amp;lt;stackpanel orientation=&amp;quot;Horizontal&amp;quot;&amp;gt;
            &amp;lt;contentpresenter margin=&amp;quot;0 0 4 0&amp;quot; content=&amp;quot;???&amp;quot; /&amp;gt;
            &amp;lt;textblock text=&amp;quot;{Binding Classification}&amp;quot; /&amp;gt;
        &amp;lt;/stackpanel&amp;gt;
    &amp;lt;/controls:hierarchicaldatatemplate&amp;gt;
&amp;lt;/stackpanel.resources&amp;gt;

&amp;lt;controls:treeview 
    x:name=&amp;quot;MasterTree&amp;quot; 
    itemtemplate=&amp;quot;{StaticResource TaxonomyTemplate}&amp;quot; /&amp;gt;&lt;/pre&gt;

&lt;p&gt;I've added a ContentPresenter and the Content is what we're interested in setting dynamically.&lt;/p&gt;

&lt;h3&gt;Option #1 – The Fixed Template&lt;/h3&gt;

&lt;p&gt;If you have a rigidly defined hierarchy where you know the exact icon you want at each level you’re in luck, there is already a sample showing how to do just that in the NestedHierarchicalDataTemplate scenario, using three separate HierarchicalDataTemplates, one for each level.&amp;#160; This has the advantage of being easy for your designers to style the icons independent of the code, the obvious downside is it’s a fixed structure.&lt;/p&gt;

&lt;h3&gt;Option #2 – Binding to a Property&lt;/h3&gt;

&lt;p&gt;Another option is to add an Icon property to your object and bind the Content directly to it, like this:&lt;/p&gt;

&lt;pre class=&quot;brush: xml; gutter: false;&quot;&gt;&amp;lt;contentpresenter margin=&amp;quot;0 0 4 0&amp;quot; content=&amp;quot;{Binding Icon}&amp;quot; /&amp;gt;&lt;/pre&gt;

&lt;p&gt;In your descendent classes you can override the Icon property and return the appropriate image for that class.&amp;#160; You can even go further and return different images based on state, such as availability, status, quantity, etc.&amp;#160; &lt;/p&gt;

&lt;p&gt;Object model purists may be frothing at the mouth, since I dared put UI information into my objects, and in some scenarios I’d completely agree but what we’re doing here is creating UI model objects, not business model objects.&amp;#160; It’s a common pattern and has the great benefit of making your UI testable from inside unit tests instead of having to rely solely on UI macro recorder/playback frameworks.&amp;#160; I go so far as to recommend that if you’re doing a lot with states like icons, if something checked, multi-selection, color-coding, etc. that you create objects that sit between your business object and the actual UI elements.&lt;/p&gt;

&lt;p&gt;Anytime you find yourself trying to get directly at a control to set/check state ask yourself if there is something you could be binding to instead.&lt;/p&gt;

&lt;h3&gt;Option #3 – The ValueConverter&lt;/h3&gt;

&lt;p&gt;If you’re binding directly to business objects or really don’t like the idea of adding an Icon property to your objects (you know who you are) then you can take all that logic and roll it up into a value converter.&amp;#160; IValueConverters are these great things that convert between two different types of values (I know, shocking).&amp;#160; A classic example is &lt;a href=&quot;http://www.jeff.wilcox.name/2008/07/13/visibility-type-converter/&quot;&gt;converting between a boolean and the Visibility enum&lt;/a&gt;.&amp;#160; We’re going to apply the same concept but this time convert between a type (our business object) and an icon.&lt;/p&gt;

&lt;p&gt;First, we need a ValueConverter, what I’m calling the IconConverter:&lt;/p&gt;

&lt;pre class=&quot;brush: csharp; gutter: false;&quot;&gt;public class IconConverter : IValueConverter
{
    public object Convert(
        object value, 
        Type targetType, 
        object parameter, 
        CultureInfo culture)
    {
        if (value is Domain)
        {
            // return icon for Domain
        }

        if (value is Family)
        {
            // return icon for Family
        }

        if (value is Genus)
        {
            // return icon for Genus
        }

        return null;
    }

    public object ConvertBack(
        object value, 
        Type targetType, 
        object parameter, 
        CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}&lt;/pre&gt;

&lt;p&gt;Next, add it as a resource in your application so you can use it in your XAML (you will probably also need to add your project’s namespace to the XAML, that is where “local” comes from in my sample):&lt;/p&gt;

&lt;pre class=&quot;brush: xml; gutter: false;&quot;&gt;&amp;lt;usercontrol.resources&amp;gt;
    &amp;lt;local:iconconverter x:key=&amp;quot;IconConverter&amp;quot; /&amp;gt;
&amp;lt;/usercontrol.resources&amp;gt;&lt;/pre&gt;

&lt;p&gt;Last, set the binding on the content presenter so it knows to use the converter when trying to determine the icon:&lt;/p&gt;

&lt;pre class=&quot;brush: xml; gutter: false;&quot;&gt;&amp;lt;controls:hierarchicaldatatemplate 
    x:key=&amp;quot;TaxonomyTemplate&amp;quot; 
    itemssource=&amp;quot;{Binding Subclasses}&amp;quot;&amp;gt;
    &amp;lt;stackpanel orientation=&amp;quot;Horizontal&amp;quot;&amp;gt;
        &amp;lt;contentpresenter 
            margin=&amp;quot;0 0 4 0&amp;quot;
            content=&amp;quot;{Binding Converter={StaticResource IconConverter}}&amp;quot; /&amp;gt;
        &amp;lt;textblock text=&amp;quot;{Binding Classification}&amp;quot; /&amp;gt;
    &amp;lt;/stackpanel&amp;gt;
&amp;lt;/controls:hierarchicaldatatemplate&amp;gt;&lt;/pre&gt;

&lt;p&gt;This technique has the advantage of centralizing everything as well as being usable on any type of object you’re using in your TreeView, whether they all descend from a common base-type or not and if you put it in the application’s resources you can use it throughout your application.&amp;#160; It is also still very testable from a unit test, which is always a plus.&lt;/p&gt;

&lt;p&gt;The downside is that the &lt;strong&gt;is&lt;/strong&gt; operator is expensive in terms of performance so if you have a lot of different classes you’re checking against, with a lot of items in the tree you may hit some perf issues.&amp;#160; This can be mitigated by keying off of other data that may be unique to your class-hierarchy.&lt;/p&gt;

&lt;h3&gt;DataType&lt;/h3&gt;

&lt;p&gt;The WPF crowd is probably jumping up and down saying, “But wait, wait, what about DataTarget?!”&amp;#160; In WPF one way you’d handle dynamic icons is to create a HierarchialDataTemplate per class you wanted to style and set its DataType property so when that Type appeared in the TreeView it would get its custom style.&amp;#160; It works great and is a tasty way to handle these situations but alas it’s not supported in Silverlight.&amp;#160; Personally I actually prefer option #2 and #3 if all you’re doing is changing icons.&lt;/p&gt;

&lt;h3&gt;Limitless Options&lt;/h3&gt;

&lt;p&gt;For every option I’ve proposed here there are probably a dozen others based on your specific needs, business objects and user interface.&amp;#160; If you come up with a great solution or have a situation that you don’t feel is covered here then please either leave a comment or visit us in the &lt;a href=&quot;http://silverlight.net/forums/35.aspx&quot;&gt;forums&lt;/a&gt;.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">The Silverlight Toolkit and You</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/The-Silverlight-Toolkit-and-You"/>
    <id>http://shawnoster.com/Blog/The-Silverlight-Toolkit-and-You</id>
    <updated>2009-08-24T01:35:42.72</updated>
    <published>2008-10-28T12:10:30</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Silverlight" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Ever since joining Microsoft back in August 2008 this blog has been pretty quiet and not just because I’ve been rolling around in the autumn leaves on campus but because of this gem, the &lt;a href=&quot;http://www.codeplex.com/Silverlight&quot;&gt;Silverlight Toolkit&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;At its highest level the Silverlight Toolkit is a collection of great controls and utilities that are continually being improved and polished until they are of the highest and most useful caliber.&amp;nbsp; You can find all the great details about this release over on my &lt;a href=&quot;http://blogs.msdn.com/sburke/archive/2008/10/28/silverlight-toolkit-now-available-for-download.aspx&quot;&gt;fearless leader’s blog&lt;/a&gt; and I highly recommend you check it out because beyond saying what the Silverlight Toolkit contains he also explains how it was built, how it will continue to be built and how it will be released in a very agile, very feedback-centric way.&lt;/p&gt; &lt;p&gt;One thing I want to stress is how important you, the developers, designers and those of uncertain vocation, are to this process.&amp;nbsp; Saying your feedback is valuable isn’t just lip service; we are watching the &lt;a href=&quot;http://www.codeplex.com/Silverlight/WorkItem/List.aspx&quot;&gt;Issue Tracker&lt;/a&gt;, we are reading &lt;strong&gt;and responding&lt;/strong&gt; in the &lt;a href=&quot;http://silverlight.net/forums/35.aspx&quot;&gt;Silverlight Controls forum&lt;/a&gt;, we are reading blog comments, in short we are listening to the people who use these controls day in and day out.&lt;/p&gt; &lt;p&gt;One of the features I love most about the Silverlight Toolkit is its iterative nature: We look at feedback, rub our brain cells together, roll up our sleeves and six to eight weeks later we have new controls that are ready to be previewed by the community or existing ones that have been polished to a high sheen by your feedback and &lt;a href=&quot;http://code.msdn.microsoft.com/silverlightut/&quot;&gt;continued testing&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I’m really looking forward to seeing what people do with these controls as well as what feedback is out there.&amp;nbsp; I’ll see everyone in &lt;a href=&quot;http://silverlight.net/forums/35.aspx&quot;&gt;the forums&lt;/a&gt; :)&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt;Listening To &lt;/font&gt;&lt;/em&gt;&lt;a href=&quot;http://social.zune.net/my/ContentRedirect.ashx?mtype=Album&amp;amp;src=MyZune&amp;amp;mid=ab61b500-0100-11db-89ca-0019b92a3933&quot;&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt;Robot Rock/Oh Yeah&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt; by &lt;/font&gt;&lt;/em&gt;&lt;a href=&quot;http://social.zune.net/my/ContentRedirect.ashx?mtype=Artist&amp;amp;src=MyZune&amp;amp;mid=57930200-0600-11db-89ca-0019b92a3933&quot;&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt;Daft Punk&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font size=&quot;2&quot;&gt; on &lt;b&gt;&lt;a href=&quot;http://social.zune.net/my/ContentRedirect.ashx?mtype=Album&amp;amp;src=MyZune&amp;amp;mid=ab61b500-0100-11db-89ca-0019b92a3933&quot;&gt;Alive: 2007 (Live)&lt;/a&gt;&lt;/b&gt; in honor of how hard we all worked on this release.&amp;nbsp; Worked in fact… like robots.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Updated Mp3Tag source for Zune 3.0</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Updated-Mp3Tag-source-for-Zune-30"/>
    <id>http://shawnoster.com/Blog/Updated-Mp3Tag-source-for-Zune-30</id>
    <updated>2009-08-24T01:40:23.297</updated>
    <published>2008-09-21T21:23:42</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;With the release of the new coolness otherwise known as the &lt;a href=&quot;http://zune.net/&quot;&gt;Zune 3.0&lt;/a&gt; update a few people have let me know that my &lt;a href=&quot;http://mp3tag.de/en/index.html&quot;&gt;Mp3tag&lt;/a&gt; sources that &lt;a href=&quot;http://blog.enginefour.com/blog/post/zune-marketplace-as-mp3tag-source.aspx&quot;&gt;hook into Marketplace data&lt;/a&gt; no longer work.&amp;nbsp; After a little digging the problem was that the Zune team put everything into a namespace thus breaking all the tags I was searching on.&amp;nbsp; A little search and replace magic and now we have an updated Marketplace.zip.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://enginefour.com/downloads/Marketplace.zip&quot;&gt;Get it while it’s hot!&lt;/a&gt;&lt;/p&gt; &lt;p&gt;As an aside I was at the EMP, the Experience Music Project in Seattle which is like a huge museum/learning center centered around all things music and I discovered that the Zune team is actually one of the sponsors.&amp;nbsp; Very cool &lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Seattle: The First Weekend</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Seattle-The-First-Weekend"/>
    <id>http://shawnoster.com/Blog/Seattle-The-First-Weekend</id>
    <updated>2009-08-10T23:47:20.2</updated>
    <published>2008-08-10T21:14:37</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;My first weekend living in Seattle is drawing to a close and as the sun very, very slowly sets I figured I'd give a wee status report.&lt;/p&gt; &lt;p&gt;Right now I'm living in an apartment provided so nicely by Microsoft in an area of downtown Seattle called Belltown in a place &lt;a href=&quot;http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=2201+4th+Ave,+Seattle,+WA+98121&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=42.766543,58.447266&amp;amp;ie=UTF8&amp;amp;ll=47.614828,-122.34302&amp;amp;spn=0.008925,0.014269&amp;amp;z=16&amp;amp;iwloc=addr&quot;&gt;The Shelby&lt;/a&gt;.&amp;nbsp; It's a fairly modern, clean, &lt;a href=&quot;http://theshelby.com/melrose.html&quot;&gt;1 bedroom place&lt;/a&gt; with a kitchen and dinning nook that fits two people rather well.&amp;nbsp; Fully furnished though someone should talk to whomever outfitted this place, we need more towel racks, seriously people.&amp;nbsp; Towel racks.&lt;/p&gt; &lt;p&gt;The area is pretty much full of hipster kids, upscale restaurants, hidden gems, halfway houses and the fire station.&amp;nbsp; Lot's of scooters go zipping around the place as well so scooter mania has hit here hard as well.&amp;nbsp; I can walk five blocks into the heart of downtown, six blocks and I'm in the famous Pike's Market, three blocks to a killer Mediterranean restaurant, eight blocks to the Puget Sound waterfront and most importantly one block to my new favorite watering hole, Two Bells.&amp;nbsp; From the front door I can see the Space Needle just a few blocks away.&lt;/p&gt; &lt;p&gt;First, the food.&amp;nbsp; The food here is amazing, we have yet to eat at a bad place in downtown Seattle.&amp;nbsp; First day lunch was at the &lt;a href=&quot;http://www.zeitooncafe.com/&quot;&gt;Zeitoon Cafe&lt;/a&gt; where I had a killer panini, dinner at a great sushi place that had items I've never seen before plus three Japanese business men were dinning which is always a good sign.&amp;nbsp; Next night was pizza at &lt;a href=&quot;http://www.tomdouglas.com/serious/index.html&quot;&gt;Serious Pie&lt;/a&gt;, a small, quaint upscale pizzeria where everyone sits at shared tables while enjoying entirely unique appetizers and pizzas.&amp;nbsp; A warning though for my purist friends (Jeremy, I'm looking at you) there is no classic New York or Chicago style pizza on the menu so I'm still on a quest for the best New York slice in Seattle.&amp;nbsp; Tonight's dinner was at Two Bells, a bar &amp;amp; grill that captured my heart and stomach.&amp;nbsp; Low-key, no pretension bar &amp;amp; grill with killer hamburgers, Guinness on tap and a great mix of people from tattoo'd lasses to couples in Dockers.&amp;nbsp; It's only a block away from The Shelby and has a high probability of becoming my favorite local watering hole.&amp;nbsp; Kevin, Billy, Ben, Sean, this is where we'd meet for a pint after work.&amp;nbsp; I wish like hell we could.&lt;/p&gt; &lt;p&gt;The weather has been great, only the smallest amount of rain, comfortable temps and sunshine.&amp;nbsp; In fact the first day here I was missing our nice AC unit back in Colorado.&amp;nbsp; Even downtown there are trees everywhere and when walking by Bell &amp;amp; 4th (one block over) you can look right down to the Sound, or turn your head a bit and on a clear day make out the mountains.&amp;nbsp; All in all it's a beautiful city and I can see why so many people love it.&amp;nbsp; I'll report back tomorrow about the traffic though, I'm sure all these people equals one huge traffic problem of evil.&amp;nbsp; &lt;/p&gt; &lt;p&gt;In fact I'm surprised there is no cohesive public transportation.&amp;nbsp; There are a half dozen small networks but nothing like the London Underground or D.C. subway system.&amp;nbsp; A nice gentleman on the plane who bought be my Jack &amp;amp; Ginger attributed this to all the tree huggers who quite literally can't bare to part with a single tree to make way for unified light rail or subway system.&amp;nbsp; It's the classic curse of the West, since it was developed so much later than the East more people could afford personal transport and so the need was never as great.&amp;nbsp; Plus the West wasn't exactly settled by socialites and debutantes so finding a nice communal way for everyone to get around probably wasn't on the top of any of these anti-social explorer's lists.&lt;/p&gt; &lt;p&gt;This is my first time as a true Urbanite, living downtown, walking to the local market (Ralph's), being able to stumble home from the bar (Two Bells), walking to the bus for work (The 545 Express), hitting up the clubs (I hear them at night so I know they're around) and generally enjoying not having to fire up the car or spend money on gas to get to 90% of what I need to.&amp;nbsp; I'm sure once the constant rain and snow hits I won't be whistling such a merry little tune but I'll let the city court me a little while longer.&lt;/p&gt; &lt;p&gt;It still feels surreal, like I'm on some huge extended vacation and that I'm just staying in a suite at some hotel for awhile but I have a feeling after tomorrow that illusion will come crashing down.&amp;nbsp; A few days of work I'm sure will bring me right back down to Earth :)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Full Disclosure</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Full-Disclosure"/>
    <id>http://shawnoster.com/Blog/Full-Disclosure</id>
    <updated>2009-08-24T01:36:43.623</updated>
    <published>2008-08-07T18:49:29</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Microsoft" />
    <category term="Silverlight" />
    <content type="html" xml:lang="en">
      &lt;p&gt;It's all about the snappy opening line, watch any classic movie from the 40's and you'll realize the importance of the opening line.&amp;nbsp; If you need some evidence check out '&lt;a href=&quot;http://www.imdb.com/title/tt0032599/&quot;&gt;His Girl Friday&lt;/a&gt;', at least the first 20 minutes, for some of what I consider some of the back &amp;amp; forth dialog around.&amp;nbsp; Of course the classic for lines from the 40's is arguably '&lt;a href=&quot;http://www.imdb.com/title/tt0034583/&quot;&gt;Casablanca&lt;/a&gt;' and if you've never seen it you owe it to yourself to watch it with a bottle and some friends, you'll be amazed at how many lines come from just that one movie.&lt;/p&gt; &lt;p&gt;The point, if I must make one, is that I've been trying to figure out a snappy black and white, soft focus opening line that says, &quot;Well kids, seems the Universe has called my bluff and it's time to put my money where my mouth is when it comes to Microsoft.&quot;&amp;nbsp; Starting August 11th, 2008 I'll be an official Microsoft employee working as a program manager on the &lt;a href=&quot;http://silverlight.net/default.aspx&quot;&gt;Silverlight&lt;/a&gt; team in Seattle, WA.&lt;/p&gt; &lt;p&gt;I'm not sure exactly what that means except that I hear rumors from my new boss &lt;a href=&quot;http://blogs.msdn.com/sburke/&quot;&gt;Shawn Burke&lt;/a&gt; that it's something to do with controls and being open and agile and designing these fancy little usability bundles of love.&amp;nbsp; Even though my title says &quot;Program Manager&quot; I have a feeling I'm still going to be very code heavy, since code is and always will be my #1 passion and I'll do everything I can to make sure I'm still slinging lines of code on a daily basis like a monkey flings poo.&amp;nbsp; They probably won't be the production lines of code but that's OK, I can finally admit that while I think my coding kung fu is deadly I have this odd tendency to drop a project once I figure out the core problem.&amp;nbsp; After that it's just typing and I get a much bigger thrill out of problem solving than solution implementing.&lt;/p&gt; &lt;p&gt;Oddly enough the whole Silverlight mumbo-jumbo isn't what I want to talk about (though I'm sure I will soon enough), it's the uprooting of my life from Denver, CO to Seattle, WA.&amp;nbsp; It's leaving a job I worked at for 14 years, where I had a team of friends that were more like brothers that oddly enough gave me free rein to try out any crazy design idea that popped into my head.&amp;nbsp; It's leaving friends that I could count on for anything from making me iced coffee to helping me tow a clutchless car home from &lt;a href=&quot;http://maps.live.com/?q=lusk%2c+wy&amp;amp;mkt=en-US&amp;amp;FORM=BYRE&quot;&gt;Lusk, Wyoming&lt;/a&gt; and everything in between.&amp;nbsp; A huge family, aye, more a clan, that made every family gathering something to be looked forward to rather than dreaded, with everything from some of the best food you've ever tasted to &lt;a href=&quot;http://www.flickr.com/photos/oster/183137901/&quot;&gt;Irish&lt;/a&gt; &lt;a href=&quot;http://www.flickr.com/photos/oster/25984152/&quot;&gt;step-dancing&lt;/a&gt; to &lt;a href=&quot;http://www.papajuke.com/&quot;&gt;smoking Blues&lt;/a&gt; to ballet to a nephew that's obsessed with any kind of construction equipment, preferably in 'Tear Shit Up' yellow.&amp;nbsp; To all those still in Denver I love you, dearly and deeply.&lt;/p&gt; &lt;p&gt;I will miss Denver, the people, friends, family, the exploding cultural scene, the moments that can't be captured over XBox Live, and yet I'm also excited to be in Seattle, at Microsoft, trying something new, creating new stories, meeting new people, finding new dive bars, playing host to all my visiting friends and family, bringing whatever it is I am to Microsoft (which is usually only bad singing and a love of strong drink) and generally starting a new chapter in my life.&lt;/p&gt; &lt;p&gt;Today is my first day in Seattle, let the adventure begin!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Lame Support for XML Code Snippets Visual Studio 2008</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Lame-Support-for-XML-Code-Snippets-Visual-Studio-2008"/>
    <id>http://shawnoster.com/Blog/Lame-Support-for-XML-Code-Snippets-Visual-Studio-2008</id>
    <updated>2009-08-24T01:37:56.62</updated>
    <published>2008-07-09T13:48:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Microsoft" />
    <content type="html" xml:lang="en">
      &lt;p&gt; As I&amp;#39;ve been working my way through the Silverlight &amp;amp; XAML landscape inside of Visual Studio I&amp;#39;ve come to realize how much better tools like &lt;a href=&quot;http://macromates.com/&quot;&gt;TextMate&lt;/a&gt;, &lt;a href=&quot;http://intype.info/home/index.php&quot;&gt;InType&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://www.e-texteditor.com/&quot;&gt;E&lt;/a&gt; are at editing straight text.&amp;nbsp;  &lt;/p&gt; &lt;p&gt; I was reminded of this today when I was trying to create a simple code snippet for XAML.&amp;nbsp; I whipped up a quick little snippet and went to use it how I always do, by typing the shortcut then pressing TAB.&amp;nbsp; Well, I tabbed and nothing happened.&amp;nbsp; OK, something happened, I got a tab, which I didn&amp;#39;t expect at all.&amp;nbsp; It should have expanded my code snippet.&amp;nbsp; TAB TAB just got me two tabs and while I could get it using the highly awkward Ctrl + K, Ctrl + X that seemed just as much work as actually typing it so I ignored that. &lt;/p&gt; &lt;p&gt; After much searching I discovered that I need to put the angle bracket first and then I could get my tab completion to work.&amp;nbsp; This about blows my fragile little mind since one of the best uses of snippets is to avoid typing those silly brackets in the first place.&amp;nbsp; I can almost see how the decision was made to require a bracket but it only makes sense from a engineering stand-point, not a usability one.&amp;nbsp; It completely ignores the fact that angle brackets are not the easiest things to type quickly. &lt;/p&gt; &lt;p&gt; My solution to all of this is two-fold.&amp;nbsp; First, once I get to Microsoft I&amp;#39;m going to hunt down the XAML IDE team and second to stop using Visual Studio 2008 for editing XAML.&amp;nbsp; I&amp;#39;ve setup a good handful of snippets in InType and discovered something odd yet not all that surprising: I can build a full XAML UI by hand in Intype faster than I can do it in Blend and much faster than using Visual Studio.&amp;nbsp; Anyone that hand-codes HTML won&amp;#39;t be too shocked by this because it&amp;#39;s fairly common knowledge that a skilled HTML coder can bust out a page faster in a good text editor than in Dreamweaver. &lt;/p&gt; &lt;p&gt; I really hope the Visual Studio IDE team is looking hard at the new wave of tools like Intype &amp;amp; E, they really are that much more productive. &lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Observing Silverlight From a Speeding Car</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Observing-Silverlight-From-a-Speeding-Car"/>
    <id>http://shawnoster.com/Blog/Observing-Silverlight-From-a-Speeding-Car</id>
    <updated>2009-08-24T01:39:07.01</updated>
    <published>2008-06-04T15:38:03</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Microsoft" />
    <category term="Silverlight" />
    <content type="html" xml:lang="en">
      &lt;p&gt;I've been putting myself through a crash course on Silverlight\WPF these last few days and here are a few random thoughts.&amp;nbsp; All of this is after a 60 minute breakneck tour of WPF\Silverlight so I'm more than likely missing a whole bunch of things and probably doing things bass-ackwards but hey, that's why they call it learning.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;There are three stock layout managers (used for placing controls): Canvas, Stack &amp;amp; Grid.&amp;nbsp; Where is the CSS-style panel?&amp;nbsp; If designing web pages has taught us anything it's that the grid quickly gets cumbersome.&amp;nbsp; Note to self if I get hired at Microsoft: Create a CSSLayoutPanel that uses stock CSS to position the controls.  &lt;li&gt;I forgot how painful an experience it is to enter XML in Visual Studio.&amp;nbsp; I've been spoiled by &lt;a href=&quot;http://intype.info/home/index.php&quot;&gt;Intype&lt;/a&gt; and &lt;a href=&quot;http://www.e-texteditor.com/&quot;&gt;E TextEditor&lt;/a&gt; where you don't need to enter the opening angle bracket to get code completion.&amp;nbsp; Also, I must be doing something wrong because entering XML attributes is downright painful in Visual Studio.&amp;nbsp; This is where I'm stuck:  &lt;ul&gt; &lt;li&gt;Type &quot;&amp;lt;ColumnDefinition &quot;  &lt;li&gt;Type &quot;W&quot;, brings up Intellisense  &lt;li&gt;Tab to complete, you now have Width=&quot;&quot;  &lt;li&gt;Type &quot;50&quot;  &lt;li&gt;Now what?&amp;nbsp; How do I get beyond the ending quote without a lot of keyboard gymnastics?&amp;nbsp; I can press Right Arrow or End but they're not quickly reachable from the home row.&amp;nbsp; I can just type another quote but instead that'll just add a second ending quote which isn't what we want.&amp;nbsp; What should really happen is that I should be able to press Tab to tab out of quotes and put the caret one space past the ending quote.&amp;nbsp; This is how TextMate, Intype and E all handle this and it works wonderfully.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;There needs to be a nice bundle of XAML specific code-snippets.&amp;nbsp; The argument that all &quot;real&quot; design work is usually done in something like Blend is crap because even with all the great GUI builders like Delphi, Visual Studio, Dreamweaver, etc. people are still constantly dropping down to the code to get that pixel perfect design so might as well offer up some snippets to make it easier. &lt;li&gt;I'd like to talk to the person that decided that Silverlight's margin property should list margin in &quot;L T R B&quot; order while CSS defines it as &quot;T R B L&quot;.&amp;nbsp; It's not exactly a horrible idea but why pollute the knowledge space needlessly and make people remember two almost identical things?&amp;nbsp; There are obviously a lot of similarities between XAML and semantic XHTML yet instead of easing the transition by reusing common usage patterns they decided&amp;nbsp; to make things just a little different.&amp;nbsp; Annoying. &lt;li&gt;For all my whinging defining UI via a markup-style language is definitely a plus, regardless of the angle bracket tax. &lt;li&gt;I wonder if you could represent XAML or WPF as YAML instead?&amp;nbsp; Staring at all the XML about breaks my head in two. &lt;li&gt;Printing, is that even a possibility with Silverlight?&amp;nbsp; How many times have I printed something from a web page with zero control over margins, headers, footers, etc.&amp;nbsp; Seems some very cool label printing applications could be whipped up in Silverlight as well, CD labels, shipping, etc.&lt;/li&gt;&lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title type="html">ZuneKeys Updated for Zune 2.5 / Zune 3.0</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/ZuneKeys-Updated-for-Zune-25"/>
    <id>http://shawnoster.com/Blog/ZuneKeys-Updated-for-Zune-25</id>
    <updated>2009-09-09T18:16:01.69</updated>
    <published>2008-05-07T17:02:49</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Another new Zune client update, another &lt;a href=&quot;http://blog.enginefour.com/blog/post/ZuneKeys-Global-Hotkey-Support-for-Zune.aspx&quot;&gt;ZuneKeys&lt;/a&gt;.&amp;#160; For those that don't know ZuneKeys gives you a few hotkeys to control playing and pausing the Zune software from any application (hence why they're called global hotkeys).&amp;#160; I stole the idea from WinAmp because I'm always needing to pause or skip tracks and it's much easier to do it with a quick Ctrl + Alt + Home rather than opening up the software and finding the pause button.&lt;/p&gt;  &lt;p&gt;It's a super-tiny 31k app.&amp;#160; Just unzip and run and it sits in your tray listening for a hotkey.&amp;#160; Uou can play, pause, stop, skip tracks or adjust the volume.&amp;#160; If anyone on the Zune team reads this I'd love to know if there are any official messages I can send to the application for control because right now I'm faking it by sending the same messages those fancy (and bulky) multimedia keyboards send.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://enginefour.com/downloads/ZuneKeys25.zip&quot;&gt;Download ZuneKeys&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Updating this post to reflect the fact that this version of ZuneKeys also works with Zune 3.0 and on Windows 7.&amp;#160; I’m even 99% sure it’ll work on the &lt;a href=&quot;http://www.engadget.com/2009/09/03/zune-software-update-coming-september-15th-alongside-zune-hd-lau/&quot;&gt;updated software coming on September 15th, 2009&lt;/a&gt;.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Hello Zune, We Meet Again</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Hello-Zune2c-We-Meet-Again"/>
    <id>http://shawnoster.com/Blog/Hello-Zune2c-We-Meet-Again</id>
    <updated>2009-08-24T01:44:06.213</updated>
    <published>2008-05-06T19:53:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;So &quot;Meet Again&quot; is a bit of a misnomer since I use my Zune everyday but each time an update comes out it always feels like I'm relearning the Zune all over again.&amp;nbsp; This time it's the Zune 2.5 Spring 2008 Update and like every previous update I have a love/hate relationship with it.&lt;/p&gt; &lt;h3&gt;The Love&lt;/h3&gt; &lt;p&gt;This is an interesting update because they've actually added a ton of new features but they're not all immediately obvious.&amp;nbsp; The feature that jumps out the most is the new video section in the marketplace which currently has TV episode purchases but I'm assuming will eventually expand to include movie rentals and purchases.&amp;nbsp; This helps bring the Zune in line with iTunes and the XBox's version of the Marketplace and really helps round out the media experience.&lt;/p&gt; &lt;p&gt;They've listened to the community because some of the most demanded features are there, namely auto-playlists, gapless playback and browsing by genre.&amp;nbsp; They've also really started taking the whole &quot;Social&quot; more seriously since you can finally view ZuneCards inside the software and get directly to your friend's (and their friends) play list.&amp;nbsp; I'd love to see these ideas explored even more, perhaps creating an API that allows you to import your play information from other players and the ability to create custom playlists that can be featured on your ZuneCard. &lt;/p&gt; &lt;p&gt;Another big area that has been improved that's not immediately obvious is metadata editing.&amp;nbsp; The amount of editing allowed before was so limited as to not exist whereas now they have a solid story in place that allows full editing as well as album info lookup with 800x800 album art.&amp;nbsp; Metadata is near and dear to me so I've used almost everything out there to edit with and I'd say the user experience is up there in the Top 5.&lt;/p&gt; &lt;p&gt;Of course there are still a few issues with it, for example I have Fischerspooner's '&lt;a href=&quot;http://social.zune.net/AlbumDetails.aspx?aid=e718d100-0100-11db-89ca-0019b92a3933&quot;&gt;Danse En France&lt;/a&gt;' maxi-single and while I can easily find it in the Marketplace the 'Find album info' command comes back with everything else but the right album and that happens more often then I'd like.&amp;nbsp; Also it's easy to get a 100+ result set back and there aren't any good tools to narrowing that down.&lt;/p&gt; &lt;p&gt;There are quite a few little UI adjustments as well; different font sizes, album art is now displayed next to progress bar, the 'Now playing' allows you to always hide the track listing, there is a nice &quot;Save as playlist&quot; option when viewing your now playing queue, and a ton of other great little additions.&lt;/p&gt; &lt;h3&gt;The Hate&lt;/h3&gt; &lt;p&gt;Perhaps 'Hate' is too strong a word but there are still some quirky things about the Zune that frustrate me.&amp;nbsp; My biggest one is that you can't use the device when it's connected to your computer.&amp;nbsp; There is a whole laundry list of frustrations on that front:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;You can't play music directly off your Zune, you have to copy it off first.  &lt;li&gt;You can't copy a playlist off the Zune.  &lt;li&gt;You can't copy a podcast off the Zune.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;What's ironic is that if the reason you can't play directly from the device is because of DRM concerns then having to copy it off before playing it only encourages piracy.&lt;/p&gt; &lt;p&gt;With 2.5 they've nicely reduced some of the UI element's font sizes yet they've made others HUGE, such as the track number.&amp;nbsp; The track number has all the visual focus while the more important information, the track title, is dwarfed and forgotten in the shadow of THE HUGE NUMBER.&amp;nbsp; People don't care about track numbers nearly as much these days yet somehow that gets all the focus?&amp;nbsp; I'm completely baffled.&amp;nbsp; Check it out:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://blog.enginefour.com/blog/image.axd?picture=WindowsLiveWriter/HelloZuneWeMeetAgain_125BD/zune-huge-numbers_2.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;188&quot; alt=&quot;zune-huge-numbers&quot; src=&quot;http://blog.enginefour.com/blog/image.axd?picture=WindowsLiveWriter/HelloZuneWeMeetAgain_125BD/zune-huge-numbers_thumb.png&quot; width=&quot;194&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Besides your eyes being assaulted by the huge numbers did you notice the bonus UI bug?&amp;nbsp; That's right, it says &quot;11 songs by album&quot;.&amp;nbsp; Umm, no, sorry, this is actually being sorted by track number.&lt;/p&gt; &lt;p&gt;Besides the track number travesty they seem to have really cranked up the bold knob, everything is now &lt;strong&gt;very important&lt;/strong&gt;.&amp;nbsp; If you look at the properties tab for a song it's like you just walked into a political debate, &lt;strong&gt;everything&lt;/strong&gt; is &lt;strong&gt;really important&lt;/strong&gt; and &lt;strong&gt;demands&lt;/strong&gt; your &lt;strong&gt;attention&lt;/strong&gt;, right &lt;strong&gt;now&lt;/strong&gt;.&amp;nbsp; It about sets my brain on fire.&amp;nbsp; Also, it's very curious that you can't get to the metadata editing screen from the properties dialog.&amp;nbsp; It seems someone with very bad eyesight that hasn't been to the opthamologist in about a decade got put in charge of the UI team.&lt;/p&gt; &lt;p&gt;&lt;strike&gt;I saved the best for last... while I applaud the new metadata editing features there is a huge glaring problem with it, it doesn't actually edit the real metadata.&amp;nbsp; It may look lovely in your Zune but all your other applications, such as Winamp, Sonos, your mobile phone, iTunes, etc. will still see the same old busted metadata.&amp;nbsp; Instead of correctly updating the underlying ID3 information it just makes some tweaks to the Zune database.&amp;nbsp; Imagine when you get a new PC and you reinstall the Zune software, happily re-importing all your tracks only to discover all that painstaking metadata updating you did is gone.&amp;nbsp; Or you want to show off all the album art you've added to all your tracks on your Sonos or Roku Soundbridge, only to see empty little lonely squares.&lt;/strike&gt;&lt;/p&gt; &lt;p&gt;&lt;strike&gt;For this reason alone I'd suggest that you don't use the Zune 2.5 metadata editing features.&amp;nbsp; Don't touch it, don't look at it, don't pass go.&amp;nbsp; Don't even think about it.&amp;nbsp; If you want your metadata to really be updated then follow &lt;/strike&gt;&lt;a href=&quot;http://enginefour.com/blog/post/zune-marketplace-as-mp3tag-source.aspx&quot;&gt;&lt;strike&gt;my suggestions here&lt;/strike&gt;&lt;/a&gt;&lt;strike&gt;.&lt;/strike&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; I was &lt;a href=&quot;http://forums.zune.net/226308/ShowPost.aspx&quot;&gt;corrected on this issue&lt;/a&gt; by Zach Johnson, the Zune Client Development Lead.&amp;nbsp; Seems the client uses a background thread to handle the actual writing of the ID3 tags.&amp;nbsp; Of course this isn't the most helpful if you want your changes to take place instantly but it's better than I had thought.&amp;nbsp; Also, while the ID3 data does eventually get updated the embedded album art doesn't, which poses an issue for all your non-Zune applications.&amp;nbsp; &lt;/p&gt; &lt;h3&gt;The Rest&lt;/h3&gt; &lt;p&gt;This is by and large a great update, bringing a lot of new features, fixing some old bugs and really polishing up the experience yet it seems for every bug or feature they fixed they managed to really bungle up some other ones.&amp;nbsp; Metadata editing is very pretty and has a nice user experience, &lt;strike&gt;it's just worthless&lt;/strike&gt;.&amp;nbsp; The UI has been polished, except for the spots where they just punted.&amp;nbsp; Closer, you're getting closer Zune team.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Internet Pet Peeves</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Internet-Pet-Peeves"/>
    <id>http://shawnoster.com/Blog/Internet-Pet-Peeves</id>
    <updated>2009-08-10T23:47:23.007</updated>
    <published>2008-05-01T14:05:53</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;Usually I post my pet peeves and various net grumblings to Twitter but I've encountered too many in the last few days to fit inside a 140 character limit.&amp;nbsp; Also I think if you're going to complain about something you should also provide a solution so it doesn't seem like you're just a bitter, crazy, no-pants wearing old man that lives to kill the dreams of others.&lt;/p&gt; &lt;h3&gt;Company Blogs That Go Dark&lt;/h3&gt; &lt;p&gt;A few times a week I encounter some company blog that hasn't been updated in more than six months, thus leaving a very bad impression about exactly what the blog is for in the first place.&amp;nbsp; What's ironic is that I see this most often with self-styled Web 2.0 companies that start with a flurry of almost daily blog posts then suddenly it's as if the reality of running a company hits and the blog goes silent.&lt;/p&gt; &lt;p&gt;While a silent personal blog is no big deal a company blog is meant to give users a warm fuzzy that things are still moving right along and that their investment, whether it be with their time, data or attention, is still safe.&amp;nbsp; Given the frenetic pace of the Internet and how fast things change even going a month without a post can make users start to wonder if the chef is still in the kitchen.&amp;nbsp; The posts don't even have to be earth shattering, they can simply be, &quot;Yes, we're still here and still working on things&quot; or &quot;We made these very minor changes recently that you probably don't care about but show we do care.&quot;&lt;/p&gt; &lt;h3&gt;Year Old &quot;New Features&quot;&lt;/h3&gt; &lt;p&gt;This is really an extension of the above.&amp;nbsp; While some may not care how often a company blog is updated (crazy people for sure) it's really annoying to go to a site day after day and see the same &quot;Just Added!&quot; call-out on a feature that's almost two years old.&amp;nbsp; &lt;a href=&quot;http://www.blinksale.com/&quot;&gt;Blinksale&lt;/a&gt; I'm looking at you with your &quot;Just Added!&quot; Basecamp integration.&amp;nbsp; It's now May 2008 and that just added feature came out in November of 2006.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I completely understand getting busy and not updating a site due to time constraints but why not future-proof yourself and instead of always doing &quot;Just Added&quot; start with &quot;Newest Feature!&quot; instead, which is a timeless statement.&lt;/p&gt; &lt;h3&gt;Cramped Lists&lt;/h3&gt; &lt;p&gt;Aren't bulleted lists supposed to make reading easier?&amp;nbsp; Then why is it so many blog templates completely ignore the styling of ordered/unordered lists and instead create this clumped indented mass of text?&amp;nbsp; In fact poorly styled bulleted lists is one reason I migrated away from blogger.com templates in the first place.&amp;nbsp; If you're creating a blog or site template please include well spaced li elements in your CSS.&lt;/p&gt; &lt;h3&gt;Reunion.Com&lt;/h3&gt; &lt;p&gt;For anyone on my gmail contact list I sincerely apologize by any spam you received from Reunion.com.&amp;nbsp; I was fooled into thinking they had the same feature that Facebook does, point Reunion at your address book and it'll automatically link you with any of your friends that are also on Reunion.com.&amp;nbsp; Instead it uses some slippery wording and a link from Facebook to mass spam everyone on your contact list.&amp;nbsp; I can't think of a single person that actually wants their entire contact list mailed carte blache so this lands Reunion.com squarely on the Spam Site list.&lt;/p&gt; &lt;p&gt;And &lt;a href=&quot;http://en.wikipedia.org/wiki/Bob's_your_uncle&quot;&gt;Bob's Yer Uncle&lt;/a&gt;.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Springloops for Web Site Deployment</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Springloops-for-Web-Site-Deployment"/>
    <id>http://shawnoster.com/Blog/Springloops-for-Web-Site-Deployment</id>
    <updated>2009-08-10T23:47:23.29</updated>
    <published>2008-04-23T15:30:21</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;One of my clients recently switched hosting providers which threw me for a loop because I was doing all their web site deployment using Subversion.&amp;nbsp; I'd make a change on my development box, commit it, ssh over to their host and issue a matching svn update.&amp;nbsp; It worked great and gave me a big warm fuzzy.&lt;/p&gt; &lt;p&gt;The new host sadly doesn't have svn installed and while I could probably bug them to install it for me I thought I'd see what others out there were doing when it came to shared hosting.&amp;nbsp; Seems svn+rsync is a popular choice along with variations on that theme but I wanted something simpler.&amp;nbsp; Enter Springloops.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://springloops.com/&quot;&gt;Springloops&lt;/a&gt; is basically a hosted svn repository that will push your changes via FTP to a deployment server, but that doesn't truly convey just how smooth an experience it really is.&amp;nbsp; Getting set up is a snap, the interface is well thought out and has a great aesthetic.&amp;nbsp; You know there is a svn repository behind the interface but it's presented in a very non-threatening for the non-nerd way.&lt;/p&gt; &lt;p&gt;Once you've imported all your files, using whatever svn client you like, you setup a deployment server, giving it your FTP host, path and log in information and from that point on deployment is as simple as a button click.&amp;nbsp; All of this for free and if you step up to one of their paid plans you get automatic deployment, large storage, more deployment servers and more depending on the level you pick.&lt;/p&gt; &lt;p&gt;All in all I actually like this solution better than what I had before because it's easier for others to interact with your site as well as push deployments.&amp;nbsp; Anyone looking for a way to use version control (you are using version control, right?) with shared hosting should definitely give Springloops a try.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Windows Home Server Rocks</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Windows-Home-Server-Rocks"/>
    <id>http://shawnoster.com/Blog/Windows-Home-Server-Rocks</id>
    <updated>2009-08-10T23:47:23.943</updated>
    <published>2008-04-23T12:02:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;
At the end of last year I picked up &lt;a href=&quot;http://www.shopping.hp.com/store/product/product_detail/GG795AA%2523ABA&quot;&gt;HP&amp;#39;s MediaSmart Server&lt;/a&gt; because while playing the &lt;a href=&quot;http://en.wikipedia.org/wiki/3_card_monty&quot;&gt;three computer Monte&lt;/a&gt; at home I managed to lose 10 years worth of documents which really shook me up.&amp;nbsp; It&amp;#39;s a small, energy-efficient, quiet little box running &lt;a href=&quot;http://www.microsoft.com/windows/products/winfamily/windowshomeserver/default.mspx&quot;&gt;Windows Home Server&lt;/a&gt; and frankly it rocks.&amp;nbsp; It automatically backs up my laptop, my desktop and my wife&amp;#39;s laptop fully every night and it&amp;#39;s pants-wearing-monkey simple to get setup.
&lt;/p&gt;
&lt;p&gt;
I bought the 500GB version but decided I also wanted to move my entire video and music collection over to WHS so last week I picked up another 500GB drive from Amazon (via &lt;a href=&quot;http://www.giveness.com/&quot;&gt;Giveness&lt;/a&gt;) and it arrived yesterday so last night I set about installing the puppy and suffice to say I have never had such an amazing experience installing any piece of hardware other than say an USB flash drive.
&lt;/p&gt;
&lt;p&gt;
Installing a new internal drive is as simple as swinging open the front cover, sliding out a tray, popping the new drive into it and sliding it back in, all while the computer is still running.&amp;nbsp; After closing the front cover I got a little prompt that new storage was available and asking if it should include it in it&amp;#39;s &amp;quot;cloud&amp;quot; of storage.&amp;nbsp; It was that simple.&amp;nbsp; It took me longer to unpack the drive than to install it and I have every confidence that I could have easily walked my wife, mother or 2 year-old nephew through the same process.
&lt;/p&gt;
&lt;p&gt;
On a site note, a lot of people give WHS a big &amp;quot;meh&amp;quot;, saying you can easily duplicate all that functionality with free software and while that&amp;#39;s entirely true I highly doubt it can be reproduced as easily or cheaply.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
By easy I mean that I have confidence that even households without a power geek could quickly setup it up out of the box and that my wife doesn&amp;#39;t need me around to do a complete restore or to pick individual files out of an old backup.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
By cheap I mean that my time is money, every hour I spend fiddling with a backup server is an hour I&amp;#39;m not writing new and interesting code, spending with my wife or improving my XBox Live Gamerscore.&amp;nbsp; Once WHS is running I don&amp;#39;t have to do anything, no maintenance or patching since Windows Update takes care of all that.&amp;nbsp; No monthly fee to a backup provider like &lt;a href=&quot;http://www.jungledisk.com/&quot;&gt;Jungle Disk&lt;/a&gt; (though if you don&amp;#39;t have a backup server I suggest you look at one of the S3-backed providers like Jungle Disk).&amp;nbsp; No time wasted as I try to pull down a 4 gig image via the wire.
&lt;/p&gt;
&lt;p&gt;
I continue to be impressed by WHS and the ability to hot-swap a new drive just bumped it up even further in my opinion.&amp;nbsp; The fact that it&amp;#39;s such a great product at 1.0 means it can only get better from here.&amp;nbsp; In the future I&amp;#39;d like to see better integration with Media Center and I&amp;#39;m seeing all kinds of options if you combined it with &lt;a href=&quot;https://www.mesh.com/Welcome/Welcome.aspx&quot;&gt;Live Mesh&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
For any household with multiple computers with data you just don&amp;#39;t want to lose I can&amp;#39;t recommend WHS enough.
&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Don't Break Your Blog</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Dont-Break-Your-Blog"/>
    <id>http://shawnoster.com/Blog/Dont-Break-Your-Blog</id>
    <updated>2009-08-10T23:47:24.38</updated>
    <published>2008-04-21T19:22:37</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;I recently moved my blog from blogger.com to GoDaddy with &lt;a href=&quot;http://www.dotnetblogengine.net/&quot;&gt;BlogEngine.NET&lt;/a&gt; as my blog engine and so far everything has been pretty smooth once I figured out how to move all my old posts from blogger into BlogEngine.NET.&amp;nbsp; Once I got a basic template up and most of the data over I considered it &quot;good enough&quot; but it's always bothered me that I have duplicate data hanging around out there so today I rolled up my sleeves.&lt;/p&gt; &lt;p&gt;I really hate broken links so didn't want to pull my old blog entirely incase anyone was linked to it but I did want them redirected to the new hotness and so after some searching I came across a great link, &lt;a href=&quot;http://laffers.net/howtos/howto-redirect-blogger-to-wordpress&quot;&gt;How To Redirect Blogger Beta To Wordpress.com&lt;/a&gt;, and that got me about 90% of the way there.&amp;nbsp; I only ran into a few issues.&lt;/p&gt; &lt;p&gt;The first issue was that his script assumes a Wordpress permalink format (obviously, based on the post) so I had to adjust the regex to BlogEngine.NET style.&amp;nbsp; After some tweaking and having to once again remember regex I got that working which led me into my next issue.&lt;/p&gt; &lt;p&gt;The second problem was that blogger doesn't use the entire post title for the slug, it stops at a certain character limit whereas BlogEngine.NET uses the full Monty.&amp;nbsp; I didn't have a magic fix for this so instead I fired up Google Analytics, looked at my top 10 posts and manually adjusted the slug in BlogEngine to match what was coming through blogger and now the redirects come over like butta.&lt;/p&gt; &lt;p&gt;Another minor issue was that the auto-generated sitemap has a lastmod date of 0001-01-01, which really pisses web crawlers off.&amp;nbsp; At first I thought it was just a few posts and was manually updating them but then realized it was pretty much everything.&amp;nbsp; I'll probably spin through the posts and set the last modified to the post date but I was a little disappointed that BlogEngine.NET didn't have this logic already built in.&lt;/p&gt; &lt;p&gt;All in all I've been very happy with BlogEngine.NET and I like knowing I can start mucking up the code if I feel really creative.&amp;nbsp; For another perspective on switching check out &lt;a href=&quot;http://www.stevetrefethen.com/blog/ConsideringASwitchFromDasBlogToBlogEngineNET.aspx&quot;&gt;Steve Trefethen's thoughts&lt;/a&gt; on BlogEngine.NET.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Migrations In SubSonic</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Migrations-In-SubSonic"/>
    <id>http://shawnoster.com/Blog/Migrations-In-SubSonic</id>
    <updated>2009-08-10T23:47:24.833</updated>
    <published>2008-04-12T16:13:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;A few weeks ago &lt;a href=&quot;http://blog.wekeroad.com/&quot;&gt;Rob Conery&lt;/a&gt; foolishly tapped me to help get migrations in SubSonic up to snuff and I've been working on them ever since trying to sneak them into the latest &lt;a href=&quot;http://blog.wekeroad.com/blog/subsonic-2-1-beta-3-is-ready/&quot;&gt;SubSonic beta&lt;/a&gt;.&amp;nbsp; I've changed the way they're implemented slightly from when Rob first talked about them so here's a quick re-introduction to migrations. &lt;/p&gt; &lt;p&gt;Migrations are a way to create and version your database schema using code rather than having to rely on SQL scripts or compare and sync tools.&amp;nbsp; They allow you to quickly rollback schema changes as well migrate schema changes from your development database to staging and then on to production.&amp;nbsp; In a nutshell they rock when it comes to database maintaince, versioning and deployment. &lt;/p&gt; &lt;h3&gt;Migration Breakdown&lt;/h3&gt; &lt;p&gt;A migration is a class that descends from SubSonic.Migration and overrides both the Up() and Down() methods.&amp;nbsp; Up() is used when going up a version and Down() is used to restore the database schema to the pre-Up() state.&amp;nbsp; Anything you do in the Up() should be undone in your Down().&amp;nbsp; &lt;/p&gt; &lt;p&gt;By convention they are put in a Migrations folder off the root of your project folder.&amp;nbsp; While the actual name of the class isn't important the name of the file is critical because this is how SubSonic determines which version the migration represents.&amp;nbsp; The naming convention is 000_MigrationName.cs (or .vb) with the version number represented by leading three numerics, starting at '001' and working your way up.&amp;nbsp; Currently it's pretty particular about that naming convention so make sure it's exactly three numerics, padded with zeros if needed.&amp;nbsp; It's convention to name your migration file something descriptive and to also not repeat names, such as: &lt;/p&gt; &lt;p&gt;001_AddExerciseTable.cs &lt;/p&gt; &lt;h3&gt;An Example&lt;/h3&gt; &lt;p&gt;Let's start with a simple example and break it down: &lt;/p&gt; &lt;pre name=&quot;code&quot; class=&quot;c-sharp&quot;&gt;using System;
using System.Collections.Generic;
using System.Text;
using SubSonic;

namespace SubSonic {
  public class Migration001:Migration {

    public override void Up() {
      TableSchema.Table t = CreateTable(&quot;Flights&quot;);
      t.AddColumn(&quot;Name&quot;, System.Data.DbType.String);
      t.AddColumn(&quot;FlightNumber&quot;, System.Data.DbType.String, 100);
      t.AddColumn(&quot;DateTraveling&quot;, System.Data.DbType.DateTime, 0, false, &quot;getdate()&quot;); 
      AddSubSonicStateColumns(t);
    }
  
    public override void Down() {
      DropTable(&quot;Flights&quot;);
    }
  }
}&lt;/pre&gt;
&lt;p&gt;In the example the 'Flights' table is created, then three columns are added to it, followed by the standard SubSonic state columns.&amp;nbsp; If you don't specify a primary key one will be created for you with the pattern of 'TableNameID', so that's one less thing to worry about.&amp;nbsp; The Down() method undoes everything we did in the Up() by dropping the 'Flights' table. &lt;/p&gt;
&lt;h3&gt;Available Methods&lt;/h3&gt;
&lt;p&gt;Currently the methods available from inside your migration are: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CreateTable(string tableName) - This creates and returns a table schema to which you can add your columns, as seen in the example. 
&lt;li&gt;DropTable(string tableName) - Does exactly what it says.&amp;nbsp; If your Up() has a CreateTable() you'll need a corresponding DropTable(). 
&lt;li&gt;AddColumn(string tableName, string columnName, ...) - Used to add a new column to an existing table.&amp;nbsp; It has all the same overloads as TableSchema.Table.AddColumn() except the first parameter is the name of the table you'll be adding columns to. 
&lt;li&gt;RemoveColumn(string tableName, string columnName) - You only get one guess that this does :) 
&lt;li&gt;AlterColumn(string tableName, string columnName, ...) - Used to alter an existing column, again, the same overloads as AddColumn. 
&lt;li&gt;AddSubSonicStateColumns(TableSchema.Table table) - Adds the conventional SubSonic state columns to your table.&amp;nbsp; I'll be adding another overload that just takes a tableName if you want to add those columns to an existing table. &lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;Running your Migrations&lt;/h3&gt;
&lt;p&gt;To run your migrations you'll use SubCommander, the same tool used to generate your models but with the 'migrate' command.&amp;nbsp; The simplest usage is: &lt;/p&gt;
&lt;p&gt;sonic migrate &lt;/p&gt;
&lt;p&gt;That's it.&amp;nbsp; It'll use your default provider, look for your migrations in &amp;lt;project&amp;gt;\Migrations and run every migration Up() starting at your database's current migration up the last one found in the Migrations folder.&amp;nbsp; You can also specify the provider, migration directory and version at the command line like this: &lt;/p&gt;
&lt;p&gt;sonic migrate /provider &quot;Northwind&quot; /migrationDirectory &quot;D:\Testing\Migrations&quot; /version 4 &lt;/p&gt;
&lt;p&gt;A few things to remember: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Migrations by convention are looked for in a \Migrations folder off the root of your project, though this can be changed via the command line. (/migrationDirectory &quot;D:\Migrations&quot;) 
&lt;li&gt;You run a migration against a single provider at a time, there is no support for specifying the provider inside the migration.&amp;nbsp; The main reason is portability, often you'll be running this migrations against different databases and hardcoding the provider name in the migration destroys their usefulness. 
&lt;li&gt;Migrations will run against the default provider unless otherwise specified via the command line (/provider &quot;Northwind&quot;) 
&lt;li&gt;By default migrations will try to go up to the latest version found in the migrations folder.&amp;nbsp;&amp;nbsp; To go up or down to a specific version use /version X to indicate which version. 
&lt;li&gt;To enable migration support a new table 'SubSonicSchemaInfo' will be created in your database, so don't delete it and tell your DBA that it's OK :) &lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;TODO&lt;/h3&gt;
&lt;p&gt;These are things you *should* see before the next beta drop, but don't hold me to it :) &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ability to generate your migration code skeleton using sonic.exe. 
&lt;li&gt;Add RenameTable() 
&lt;li&gt;Add RenameColumn() 
&lt;li&gt;Add ability to execute ad-hoc sql, for creating stored procs, views, creating roles, users, etc. 
&lt;li&gt;Add constraints 
&lt;li&gt;Add foreign keys &lt;/li&gt;&lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title type="html">So You Want To Be a Web Developer</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/So-You-Want-To-Be-a-Web-Developer"/>
    <id>http://shawnoster.com/Blog/So-You-Want-To-Be-a-Web-Developer</id>
    <updated>2009-08-10T23:47:25.347</updated>
    <published>2008-04-02T19:45:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;I just had a friend at work ask that most innocuous of questions, &quot;So, what should I learn if I want to be web developer?&quot; which led us into a pretty good discussion about all things web related and to give him (Hi Nat!) a place to reference my ramblings I thought I'd jot down what I suggested. &lt;/p&gt; &lt;h3&gt;Define &quot;Web Developer&quot;&lt;/h3&gt; &lt;p&gt;Web developer can pretty much mean anything these days so I find it best to ask yourself what it is you really want to do.&amp;nbsp; I've been in shops where web developer meant just HTML/CSS while in others the dev does it all, from comps to HTML to database interaction.&amp;nbsp; In my friend's case it meant creating a dynamic database-driven website from nothing more than a designer's comps and the napkin the business leaders scribbled on in between rounds of golf.&amp;nbsp; Which was good because that's how I define it. &lt;/p&gt; &lt;h3&gt;Stage 1 - Learn HTML/CSS&lt;/h3&gt; &lt;p&gt;You've gotta learn the basic currency of the web before you can get fancy pants on it so getting a solid understanding of good, standards-based semantic HTML and CSS (vs. table tag soup) is key.&amp;nbsp; Regardless of which whiz-bang rocket framework you use in the end it all comes down to pushing HTML so you need to know how to craft good basic pages. &lt;/p&gt; &lt;p&gt;I also suggest forgetting about Dreamweaver, FrontPage or any other HTML editor, for now.&amp;nbsp; In fact I'd suggest using just a really solid text editor like &lt;a href=&quot;http://www.textpad.com/&quot;&gt;TextPad&lt;/a&gt;, &lt;a href=&quot;http://intype.info/home/index.php&quot;&gt;InType&lt;/a&gt; or &lt;a href=&quot;http://www.e-texteditor.com/&quot;&gt;E&lt;/a&gt;.&amp;nbsp; My current favorite is InType because it doesn't require the cygwin install like E yet it has better syntax highlighting and snippet expansion than TextPad.&amp;nbsp; When learning HTML you want to be as close to the metal as possible. &lt;/p&gt; &lt;p&gt;There are a ton of great books and websites out there teaching this stuff.&amp;nbsp; Two of my favorites are &lt;a href=&quot;http://www.simplebits.com/publications/bulletproof/&quot;&gt;&quot;Bulletproof Web Design&quot;&lt;/a&gt; and &lt;a href=&quot;/blog/admin/Pages/Web%20Standards%20Solutions&quot;&gt;&quot;Web Standards Solutions&quot;&lt;/a&gt;, both by &lt;a href=&quot;http://www.simplebits.com/&quot;&gt;Dan Cederholm&lt;/a&gt;, who presents web design (as in the HTML, not Photoshop comp work) in a real-world, useful manner.&amp;nbsp; Good stuff. &lt;/p&gt; &lt;h3&gt;Stage 2 - Learn JavaScript&lt;/h3&gt; &lt;p&gt;I'm still iffy on this one since you could argue that JavaScript could come later but I feel it's best to at least get a rudimentary understanding of JavaScript to learn the basics like client-side validation, confirmation boxes and how to use one of the various JavaScript libraries out there like &lt;a href=&quot;http://www.prototypejs.org/&quot;&gt;Prototype&lt;/a&gt;, &lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt;, &lt;a href=&quot;http://extjs.com/&quot;&gt;ExtJS&lt;/a&gt;.&amp;nbsp; Most server-side frameworks try to color the basic way you use JavaScript which I feel can dilute a person's understanding of just what client-side coding is all about. &lt;/p&gt; &lt;h3&gt;Stage 3 - Pick Your Poison (Server-Side Framework)&lt;/h3&gt; &lt;p&gt;Ahh, the golden ring, the big prize, what it's all about, at least for me, the server-side framework that makes all the magic happen when it comes to dynamic page generation.&amp;nbsp; This was probably the hardest thing to guide him on because I've worked with most of the major frameworks and they all have pros and cons.&amp;nbsp; The big three to me are &lt;a href=&quot;http://asp.net/&quot;&gt;ASP.NET&lt;/a&gt;, &lt;a href=&quot;http://www.rubyonrails.org/&quot;&gt;Rails&lt;/a&gt; and &lt;a href=&quot;http://www.php.net/&quot;&gt;PHP&lt;/a&gt;.&amp;nbsp; They all have great support, vibrant communities and very active development.&amp;nbsp; There is also Java, but I was badly scarred when I learned Java's AWT and Swing frameworks so I'm going to completely ignore it since even thinking about it again makes me whimper :)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://asp.net/&quot;&gt;ASP.NET&lt;/a&gt; - I'm a little biased towards .NET because it offers a great springboard in terms further types of development.&amp;nbsp; Want to do create a desktop application?&amp;nbsp; No problem, you already know the IDE and C# (OK, or Visual Basic).&amp;nbsp; Feel like being more creative and want to do something Flashy?&amp;nbsp; .NET has you covered with &lt;a href=&quot;http://silverlight.net/&quot;&gt;Silverlight&lt;/a&gt;.&amp;nbsp; It's like a gateway drug of development, especially once you start factoring in things like &lt;a href=&quot;http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython&quot;&gt;IronPython&lt;/a&gt;, &lt;a href=&quot;http://www.ironruby.net/&quot;&gt;IronRuby&lt;/a&gt; and &lt;a href=&quot;http://www.asp.net/mvc/&quot;&gt;MVC&lt;/a&gt;.&amp;nbsp; And despite what some people say ASP.NET isn't just for corporate drones, there's no Web 2.0 site out there that can't be coded in .NET.&amp;nbsp; Downsides are that it's a little more complex to get started and that it'll warp your fragile little mind when it comes to the bastard child that is WebForms. &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.rubyonrails.org/&quot;&gt;Rails&lt;/a&gt; - I think learning &lt;a href=&quot;http://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt; (the language of Rails) is a great addition to any developer's knowledge, regardless of what they code in by day.&amp;nbsp; If someone is interested strictly in single focus, highly dynamic web sites and really has an aversion to Microsoft this is where I'd steer them.&amp;nbsp; It's a much better abstraction of the web than .NET's WebForms and you can really get rocking quickly without having to understand much with Rails.&amp;nbsp; The downside is finding jobs in your area looking for entry-level Rails devs. &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.php.net/&quot;&gt;PHP&lt;/a&gt; - This is sort of the monkey in the middle.&amp;nbsp; There are a ton of great PHP jobs but it's lost a little of it's hipster sizzle, which isn't exactly a bad thing.&amp;nbsp; PHP is a great choice for the newbie consultant looking to work with small to medium-sized companies because there are a lot of CMS packages in PHP and you can get solid PHP hosting for a song.&lt;/p&gt; &lt;p&gt;In the end I suggested that he go through job descriptions he was interested in (shhh, don't tell his boss) and see what they were asking for in terms of knowledge.&amp;nbsp; This brings up another good point, why do you want to be a web developer?&amp;nbsp; If it's just for a better job then I stand by my suggestion.&amp;nbsp; On the other hand if it's because you want to do Website X or Project Y then that completely changes the game and makes it easier.&amp;nbsp; You pick the technology and learning curve that will get you quickest to your goal.&amp;nbsp; In the end users could care less if your site is in Rails, .NET or PHP.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">New Blog Address</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/New-Blog-Address"/>
    <id>http://shawnoster.com/Blog/New-Blog-Address</id>
    <updated>2009-08-10T23:47:25.863</updated>
    <published>2008-03-20T01:07:42</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;I decided to self-host my blog over on my own domain, &lt;a href=&quot;http://blog.enginefour.com&quot;&gt;blog.enginefour.com&lt;/a&gt;. I figured I've been paying for it I may as well put it to good use :) I decided to go with &lt;a href=&quot;http://www.dotnetblogengine.net/&quot;&gt;BlogEngine.NET&lt;/a&gt;, mostly because it was super simple to get setup and seemed to have pretty active development. I think I've ported most of the articles and comments over though a few stragglers may be around. I'll be posting all my pearls and nuggets over there so update to the &lt;a href=&quot;http://enginefour.com/blog/syndication.axd&quot;&gt;new RSS address&lt;/a&gt;. &lt;p&gt;I know some of the layout may seem funky, I'm currently porting a free CSS template from a fixed-width layout to a fluid one instead and I haven't pushed everything yet. For the record I used &lt;a href=&quot;http://developer.yahoo.com/yui/grids/&quot;&gt;Yahoo's grid builder&lt;/a&gt; to come up with the CSS layout and it's damn snazzy. Usually I build up my divs by hand or crib one of my prior fluid layouts but this time I tried something different and I'm impressed. Clean CSS/HTML, though I could use a little more verbose id and class selectors.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Cheat Sheet Needed for ASP.NET MVC</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Cheat-Sheet-Needed-for-ASPNET-MVC"/>
    <id>http://shawnoster.com/Blog/Cheat-Sheet-Needed-for-ASPNET-MVC</id>
    <updated>2009-08-10T23:47:26.363</updated>
    <published>2008-02-27T21:18:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;The cool kids over on the other side of the fence always make these really cool &amp;quot;cheat sheets&amp;quot; for whatever bit of tech kit they're using and I fully expect someone with some good design skills to produce one for ASP.NET MVC.&lt;/p&gt;  &lt;p&gt;You hear that Rob Conery?&amp;#160; Scott Hanselman?&amp;#160; How about you Phil Haack?&amp;#160; I fully expect Scott Guthrie, who is a Word among Bytes, to conscript some stylish hipster graphic designer to produce a masterful, stylish and yes, useful cheat sheet for the MVC masses at Mix '08, an event I sadly won't be attending because my company considers computers and those that make them work to be second class citizens.&amp;#160; I'm lucky if I get&amp;#160; to upgrade my IDE before the next one comes out much less attend an actual conference.&amp;#160; I've heard of conference swag but I've never actually received any of this mythical bounty.&lt;/p&gt;  &lt;p&gt;Still, I desire, want and dare I say expect said cool cheat sheet.&lt;/p&gt;  &lt;p&gt;Here are some examples for those that need some prompting and design ideas and to figure out just what in the hell I'm talking about:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf&quot;&gt;REST Cheat Sheet&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://attic.scripteka.com/prototype_cheatsheet_1.6.0.2.pdf&quot;&gt;Prototype.js Cheat Sheet&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://www.ilovejackdaniels.com/ruby_on_rails_cheat_sheet.png&quot;&gt;Rails Cheat Sheet&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://www.ahoyhere.com/cheats/rails_files_cheatsheet.pdf&quot;&gt;What Goes Where&lt;/a&gt; (Ruby on Rails cheat sheet by Amy Hoy)&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://www.ahoyhere.com/cheats/form_helpers.pdf&quot;&gt;Form Helpers&lt;/a&gt; (Ruby on Rails cheat sheet by Amy Hoy)&lt;/li&gt; &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title type="html">CopySourceAsHtml for Visual Studio 2008</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/CopySourceAsHtml-for-Visual-Studio-2008"/>
    <id>http://shawnoster.com/Blog/CopySourceAsHtml-for-Visual-Studio-2008</id>
    <updated>2009-08-10T23:47:27.5</updated>
    <published>2008-02-25T18:45:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;I ported the &lt;a href=&quot;http://www.jtleigh.com/people/colin/software/CopySourceAsHtml/&quot;&gt;CopySourceAsHtml&lt;/a&gt; to work with Visual Studio 2008.&amp;nbsp; There are &lt;a href=&quot;http://diditwith.net/2007/08/16/CopySourceAsHtmlInVisualStudio2008.aspx&quot;&gt;some workarounds&lt;/a&gt; to get the existing addin to work with Visual Studio 2008 but they all assume you have 2005 installed, which I don't.&amp;nbsp; I recompiled from source, built against .NET 3.0, removed some crufty code thanks to FxCop and removed a call into olepro32.dll that wasn't needed.&amp;nbsp; I'll provide the updated source if anyone cares, this is just a quick posting as I'm flying out the door :) &lt;/p&gt; &lt;h3&gt;To Install&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;Download the &lt;a href=&quot;http://enginefour.com/downloads/CopySourceAsHtml.zip&quot;&gt;CopySourceAsHtml AddIn zip&lt;/a&gt;.  &lt;li&gt;Unzip to \My Documents\Visual Studio 2008\Addins, if the Addins folder doesn't exist just create it.  &lt;li&gt;Restart Visual Studio (you did close it first right?)  &lt;li&gt;Right-click some selected code and you'll have a new Copy As HTML... menu item, that's the gold, click it.&amp;nbsp; &lt;li&gt;Check the boxes in the dialog that comes up to your delight and then paste into your blog software or forum post.  &lt;li&gt;&lt;strong&gt;IMPORTANT&lt;/strong&gt;: This Addin generates HTML code, so remember to switch into the HTML view in your blog software or forum edit box.&amp;nbsp; &lt;li&gt;Bob's yer uncle &lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;Sample&lt;/h3&gt; &lt;p&gt;This is how a chuck of code looks when pasted (you'll notice it uses your exact color and font settings): &lt;/p&gt; &lt;div style=&quot;font-size: 8pt; background: #282828 0% 50%; color: white; font-family: consolas; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial&quot;&gt;&lt;pre style=&quot;margin: 0px&quot;&gt;[&lt;span style=&quot;color: yellow&quot;&gt;Test&lt;/span&gt;]
&lt;/pre&gt;&lt;pre style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: #ff8000&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #ff8000&quot;&gt;void&lt;/span&gt; Select_ColumnList_Specified()
&lt;/pre&gt;&lt;pre style=&quot;margin: 0px&quot;&gt;{
&lt;/pre&gt;&lt;pre style=&quot;margin: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: yellow&quot;&gt;SqlQuery&lt;/span&gt; qry = &lt;span style=&quot;color: #ff8000&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: yellow&quot;&gt;Select&lt;/span&gt;(&lt;span style=&quot;color: lime&quot;&gt;&quot;productid&quot;&lt;/span&gt;, &lt;span style=&quot;color: lime&quot;&gt;&quot;productname&quot;&lt;/span&gt;).From(Northwind.&lt;span style=&quot;color: yellow&quot;&gt;Product&lt;/span&gt;.Schema);
&lt;/pre&gt;&lt;pre style=&quot;margin: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: yellow&quot;&gt;ANSISqlGenerator&lt;/span&gt; gen = &lt;span style=&quot;color: #ff8000&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: yellow&quot;&gt;ANSISqlGenerator&lt;/span&gt;(qry);
&lt;/pre&gt;&lt;pre style=&quot;margin: 0px&quot;&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;margin: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #ff8000&quot;&gt;string&lt;/span&gt; selectList = gen.GenerateCommandLine();
&lt;/pre&gt;&lt;pre style=&quot;margin: 0px&quot;&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style=&quot;margin: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: yellow&quot;&gt;Assert&lt;/span&gt;.IsTrue(selectList == &lt;span style=&quot;color: lime&quot;&gt;&quot;SELECT [dbo].[Products].[ProductID], [dbo].[Products].[ProductName]\r\n&quot;&lt;/span&gt;);
&lt;/pre&gt;&lt;pre style=&quot;margin: 0px&quot;&gt;}
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;The Source&lt;/h3&gt;
&lt;p&gt;UPDATE: I've finally zipped up the source and uploaded it by request.&amp;nbsp; Remember, I'm not the original author so all the good credit goes to someone else, I'm just the monkey that made it work on Visual Studio 2008.&amp;nbsp; Here it is for your enjoyment:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://enginefour.com/downloads/CopySourceAsHtml-2.1.0-Source.zip&quot;&gt;CopySourceAsHtml-2.1.0-Source.zip&lt;/a&gt;&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Mp3tag 2.40 Released</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Mp3tag-240-Released"/>
    <id>http://shawnoster.com/Blog/Mp3tag-240-Released</id>
    <updated>2009-08-24T01:44:39.02</updated>
    <published>2008-02-25T13:39:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;
Anyone that&amp;#39;s using my Zune Marketplace Mp3tag source will probably want to upgrade to the latest version of Mp3tag, which as of today is 2.40!&amp;nbsp; I&amp;#39;ve been using the beta version for awhile and the tagging dialog is much better than in the original 2.39 release, easier to tag those albums where you only have a few of the tracks. 
&lt;/p&gt;
&lt;p&gt;
Get it from the &lt;a href=&quot;http://www.mp3tag.de/en/download.html&quot;&gt;official download site&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
In a related note I&amp;#39;ve been using Mp3tag for about 2 years and I finally pulled the trigger and donated some dosh to this excellent &lt;strong&gt;free&lt;/strong&gt; program.&amp;nbsp; Thanks to Florian Heidenreich for continuing to create such a great product! 
&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">What ASP.NET MVC Can Learn About REST from Rails</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/What-ASPNET-MVC-Can-Learn-About-REST-from-Rails"/>
    <id>http://shawnoster.com/Blog/What-ASPNET-MVC-Can-Learn-About-REST-from-Rails</id>
    <updated>2009-08-10T23:47:28.263</updated>
    <published>2008-02-19T14:47:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;
I&amp;#39;m starting to see more ASP.NET MVC samples and questions come out and I&amp;#39;m realizing that a large portion of the ASP.NET crowd doesn&amp;#39;t even realize that a huge reason for the MVC movement is because of the Ruby on Rails framework.&amp;nbsp; A lot of new .NET MVC developers are struggling with architectural questions that have already been debated and answered in the Rails community, which makes Rails a great resource for when you&amp;#39;re first starting out or you&amp;#39;re curious how to handle certain situations, like nested resources or how to structure your controllers. 
&lt;/p&gt;
&lt;p&gt;
Speaking of controllers one great thing from Rails that I hope more MVC developers embrace is REST.&amp;nbsp; Instead of repeating everything just watch David Heinemeier Hansson&amp;#39;s keynote speech from RailsConf back in 2006.&amp;nbsp; Sure, it&amp;#39;s almost two years but for ASP.NET developers it may as well be yesterday.&amp;nbsp; I&amp;#39;d suggest starting from the second part since the first segment is just normal conference ra-ra-ra. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.scribemedia.org/2006/07/09/dhh&quot;&gt;Check it out here&lt;/a&gt; (don&amp;#39;t forget to download the slides that he refers to &lt;a href=&quot;http://downloads.scribemedia.net/rails2006/worldofresources.pdf&quot;&gt;here&lt;/a&gt;). 
&lt;/p&gt;
&lt;h3&gt;Note&lt;/h3&gt;
&lt;p&gt;
He talks about using a semi-colon in the URL to denote an aspect/action of a controller, like this: 
&lt;/p&gt;
&lt;p&gt;
/people/1;edit 
&lt;/p&gt;
&lt;p&gt;
Well, you can ignore that and just assume he *really* meant to say: 
&lt;/p&gt;
&lt;p&gt;
/people/1/edit 
&lt;/p&gt;
&lt;p&gt;
They dropped that semi-colon silliness in Rails 2.0 and it feels much cleaner. 
&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Nested Resources In ASP.NET MVC</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Nested-Resources-In-ASPNET-MVC"/>
    <id>http://shawnoster.com/Blog/Nested-Resources-In-ASPNET-MVC</id>
    <updated>2009-08-10T23:47:28.763</updated>
    <published>2008-02-08T01:08:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;
Often you&amp;#39;ll need to represent some hierarchical or parent-child relationship in your application and one thing you&amp;#39;ll struggle with is how to cleanly mesh both the parent and child controllers yet keep them nice and RESTful.&amp;nbsp; The secret is in good routing. 
&lt;/p&gt;
&lt;h2&gt;The problem&lt;/h2&gt;
&lt;p&gt;
A popular example is tickets belonging to events (event as in Burning Man, not OnClick) and you want to get all the tickets for a certain event, as well as be able to work with just tickets or events.&amp;nbsp; You want nice and pretty urls as well, so you&amp;#39;re hoping for something like this: 
&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;400&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td width=&quot;200&quot; valign=&quot;top&quot;&gt;/events/1/tickets&lt;/td&gt;
			&lt;td width=&quot;200&quot; valign=&quot;top&quot;&gt;all tickets for event 1&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width=&quot;200&quot; valign=&quot;top&quot;&gt;/events/1/tickets/new&lt;/td&gt;
			&lt;td width=&quot;200&quot; valign=&quot;top&quot;&gt;add a new ticket for event 1&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width=&quot;200&quot; valign=&quot;top&quot;&gt;/tickets/list&lt;/td&gt;
			&lt;td width=&quot;200&quot; valign=&quot;top&quot;&gt;all tickets for all events&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h2&gt;The Messy Way&lt;/h2&gt;
&lt;p&gt;
My first idea was to add a Tickets action to my Events controller so I could call EventsController.Tickets(int eventId) but that didn&amp;#39;t really help when I wanted to view all the tickets for all the events.&amp;nbsp; Plus it broke the whole REST idea and that&amp;#39;s bad for maintainability. 
&lt;/p&gt;
&lt;p&gt;
My second idea was a butt-ugly url along the lines of /tickets/list?event_id=1 but that just kicks the whole MVC, SEO-friendly url philosophy in the nuts.&amp;nbsp; Repeatedly. 
&lt;/p&gt;
&lt;h2&gt;The Routes Way&lt;/h2&gt;
&lt;p&gt;
A &lt;strong&gt;Big Thanks&lt;/strong&gt; goes to Adam Wiggins whose &lt;a href=&quot;http://adam.blog.heroku.com/past/2007/12/20/nested_resources_in_rails_2/&quot;&gt;post about nested resources&lt;/a&gt; finally set off the lightbulb in my brain.&amp;nbsp; Instead of trying to make my controllers do all the work why not take advantage of the actual mechanism that&amp;#39;s there to handle these sorts of things and put it to use.&amp;nbsp; That would be the routing mechanism that makes all your urls pretty and dictates which controller does what.&amp;nbsp; Here is the way to keep your urls pretty and to have both a separate Events and Tickets controller yet still maintain the cool parent/child relationship: 
&lt;/p&gt;
[code=csharp]RouteTable.Routes.Add(new Route { Url = &amp;quot;events/[eventId]/tickets/[action]/[id]&amp;quot;, Defaults = new { controller = &amp;quot;Tickets&amp;quot;, action = &amp;quot;List&amp;quot;, id = (string)null }, RouteHandler = typeof(MvcRouteHandler) });[/code] &lt;br /&gt;
&lt;p&gt;
(yes, I know, my code formatting sucks, I&amp;#39;ll update it this weekend) 
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
Once I discovered this I smacked myself on the forehead for not realizing just how simple this whole thing was. 
&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Microsoft Shareholder Value</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Microsoft-Shareholder-Value"/>
    <id>http://shawnoster.com/Blog/Microsoft-Shareholder-Value</id>
    <updated>2009-08-10T23:47:29.043</updated>
    <published>2008-02-05T12:36:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;I just saw a quote from Joe Rosenberg via the &lt;a href=&quot;http://msftextrememakeover.blogspot.com/2008/02/is-like-person-who-completely-lost-his.html&quot;&gt;MSFTextrememakeover&lt;/a&gt; that included one of the most asinine and scary things I've ever heard about Microsoft:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Rosenberg said. &quot;The company has lost sight of its principal focus, which is to produce value for shareholders.&quot;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;What's scary is that this is from a &quot;Chief Equity Strategist&quot; yet after this quote I wouldn't trust anything this guy has to say about money or investing because if there is one common theme among the most successful companies and individuals it's that their primary focus is to do what they love and to be the best at doing it.&amp;nbsp; Once you start chasing money for moneys sake the game is over and you're done ever making any type of substantial financial gains.&amp;nbsp; Rosenberg should know this and if he doesn't perhaps he needs to pick up a BusinessWeek and read this article, &quot;&lt;a href=&quot;http://www.businessweek.com/smallbiz/content/nov2007/sb20071121_372575.htm&quot;&gt;The Secret Behind Trump's Success&lt;/a&gt;&quot;.&lt;/p&gt; &lt;p&gt;So if you ever find yourself starting a venture simply because you think it'll net you millions or because you're secretly hoping you'll be bought out then stop, take a breath and get a grip on reality.&amp;nbsp; If you really want to make money find your passion and be the best at it, do everything you can with it, surround yourself with others who share the passion and push that passion, be uncompromising with it and don't change your vision to fit into a committee or shareholder view.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Zune Marketplace as a Mp3tag Source</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/zune-marketplace-as-mp3tag-source"/>
    <id>http://shawnoster.com/Blog/zune-marketplace-as-mp3tag-source</id>
    <updated>2009-08-24T02:19:14.79</updated>
    <published>2008-02-04T18:15:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;
Given that the current (and past) Zune software lacks any decent metadata editing I&amp;#39;ve been using &lt;a href=&quot;http://www.mp3tag.de/en/&quot;&gt;Mp3tag&lt;/a&gt; to adjust the various tags as well as grab album art.&amp;nbsp; One cool feature of Mp3tag is that you can look up album information from a variety of online sources, most notably Amazon.&amp;nbsp; From there you can grab track listings and album art to help flush out your metadata. 
&lt;/p&gt;
&lt;p&gt;
Only problem is that sometimes the Zune Marketplace files an album differently than Amazon which means it won&amp;#39;t show up correctly in your ZuneTag (see mine in the upper-right).&amp;nbsp; After poking around with Mp3tag&amp;#39;s extensible &amp;quot;web sources framework&amp;quot; and using Fiddler to watch the HTTP traffic to and from &lt;a href=&quot;http://www.zune.net/&quot;&gt;zune.net&lt;/a&gt; I cobbled together a Zune source that will pull down the exact album information as listed on the Marketplace as well as the album art. 
&lt;/p&gt;
&lt;p&gt;
There is a bonus as well, I believe zune.net just made their 800x800 album art available via the back-end service I&amp;#39;m using so now you can grab full 800x800 album art even on tracks you didn&amp;#39;t purchase directly from the Marketplace. 
&lt;/p&gt;
&lt;p&gt;
Just download Marketplace.zip and extract the single Marketplace.src into your %appdata%\Mp3tag\data\sources folder and you&amp;#39;ll be rocking! I&amp;#39;d also suggest you &lt;a href=&quot;http://www.anytag.de/forums/index.php?showtopic=57&quot;&gt;download the very latest&lt;/a&gt; beta of Mp3tag because the tag sources (what Marketplace plugs into) dialog is much easier to figure out for first timers, plus I always include the artist in the track listing and version 2.39n supports splitting this into the correct tags. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://enginefour.com/downloads/Marketplace.zip&quot;&gt;Download Marketplace.zip&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
If anyone actually uses this and needs help getting it up and running just drop a comment. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;UPDATE:&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
Thanks to Scott for catching something I should have mentioned but completely forgot.&amp;nbsp; The Zune software can&amp;#39;t read ID3v2.4 tags, instead it can only handle ID3v2.3 so after you first install Mp3tag follow these steps: 
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Go to Tools | Options&lt;/li&gt;
	&lt;li&gt;Navigate to the &amp;#39;Tags&amp;#39;, then Mpeg options in the left-hand tree&lt;/li&gt;
	&lt;li&gt;Set Write to ID3v2.3 UTF-16&lt;/li&gt;
	&lt;li&gt;For those that like pretty pictures:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.enginefour.com/images/ZuneMarketplaceasaMp3tagSource_FD65/Mp3tagOptions.png&quot;&gt;&lt;img style=&quot;border: 0px none &quot; src=&quot;http://www.enginefour.com/images/ZuneMarketplaceasaMp3tagSource_FD65/Mp3tagOptions_thumb.png&quot; border=&quot;0&quot; alt=&quot;Mp3tag Options&quot; width=&quot;544&quot; height=&quot;460&quot; /&gt;&lt;/a&gt; 
&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Getting SubSonic Setup in Visual Studio</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Getting-SubSonic-Setup-in-Visual-Studio"/>
    <id>http://shawnoster.com/Blog/Getting-SubSonic-Setup-in-Visual-Studio</id>
    <updated>2009-08-10T23:47:31.93</updated>
    <published>2008-02-03T14:44:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;I'm a big fan of &lt;a href=&quot;http://subsonicproject.com/default.aspx&quot;&gt;SubSonic&lt;/a&gt;, a ORM/DAL generator slash utility belt of goodness.&amp;nbsp; Like any tool there is a little configuration and setup you need to do to get everything rolling and while Rob Conery &lt;a href=&quot;http://subsonicproject.com/view/using-the-command-line-tool.aspx&quot;&gt;has some great podcasts&lt;/a&gt; on doing just this sometimes you just need to remember that one little option vs. wanting to watch a 10 minute podcast again, regardless of how melodic and sweet are the dulcet tones of Mr. Conery's voice.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. &lt;a href=&quot;http://subsonicproject.com/&quot;&gt;Download&lt;/a&gt; and Install SubSonic.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Seems simple but hey, some people need to be told everything :)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2. Create SubSonic DAL as an external tool&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Even though SubSonic supports Rails-style auto-gen of your DAL via build providers I like putting my model/DAL in a separate class library and sadly build providers don't play well with class libraries.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Go to Tools | Externals Tools... click &quot;Add&quot; and make it look like this:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://enginefour.com/images/GettingSubSonicSetupinVisualStudio_CF18/ExternalTools.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;480&quot; alt=&quot;External Tools&quot; src=&quot;http://enginefour.com/images/GettingSubSonicSetupinVisualStudio_CF18/ExternalTools_thumb.png&quot; width=&quot;493&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;That command is your path to &lt;strong&gt;sonic.exe&lt;/strong&gt;  &lt;li&gt;If you're working with the MVC Toolkit (and why aren't you?) then change &quot;App_Code\Generated&quot; to &quot;Models\Generated&quot; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;3. Create SubSonic DB as an external tool&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;SubSonic can also version and script your database, very useful for source control and distributing your application.&amp;nbsp; Same as above but make it look like this:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://enginefour.com/images/GettingSubSonicSetupinVisualStudio_CF18/ExternalTools2.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;480&quot; alt=&quot;External Tools (2)&quot; src=&quot;http://enginefour.com/images/GettingSubSonicSetupinVisualStudio_CF18/ExternalTools2_thumb.png&quot; width=&quot;493&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;4. Install SubSonic Schema&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I dislike any warnings during a build and one you'll get with SubSonic is it not knowing about the SubSonic config sections.&amp;nbsp;&amp;nbsp; I did a &lt;a href=&quot;http://a-simian-mind.blogspot.com/search/label/SubSonic&quot;&gt;blog post on how to fix this&lt;/a&gt; awhile back but I'm repeating here for the lazy (like myself):&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Download &lt;a href=&quot;http://enginefour.com/downloads/SubSonicSchema.xsd&quot;&gt;SubSonicSchema.xsd&lt;/a&gt; (if you right-click to download make sure you save it with an xsd extension)  &lt;li&gt;Put it in C:\Program Files\Microsoft Visual Studio 8.0\Xml\Schemas (adjust accordingly for VS2008)  &lt;li&gt;Edit DotNetConfig.xsd in the same folder and add the following line: &lt;br&gt;&lt;pre&gt;&lt;code&gt;&lt;xs:include schemalocation=&quot;SubSonicSchema.xsd&quot; /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;p&gt;(I added it right underneath the &amp;lt;xs:schema&amp;gt; opening tag, seems to work.&amp;nbsp; Also, if you're using &lt;strong&gt;Vista&lt;/strong&gt; you'll need to edit DotNetConfig.xsd in an editor that was started with right-click, Admin, otherwise it'll write a copy of the xsd into the Virutal Store and your changes will never take effect.&amp;nbsp; Trust me, I learned this the hard way.)&lt;/p&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;li&gt;Close Visual Studio if it's running, re-open, ta-da you now have IntelliSense as well as no more annoying &quot;Could not find schema information for...&quot; messages. &lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;5. Install SubSonic code snippets&lt;/strong&gt;&lt;/p&gt;&lt;br&gt;&lt;br&gt;
&lt;p&gt;You add various sections into your web.config to wire up the magic and nothing is more boring than typing the same poop over and over again.&amp;nbsp; I created some snippets that provide the various bits that you can download here (actually not quite yet since the bits are at work and my VPN is broken right now).&lt;/p&gt;&lt;br&gt;&lt;br&gt;
&lt;p&gt;And Bob's your Uncle, you have all the boring schtuff out of the way and now you're ready to start genning ya some code.&amp;nbsp; If you don't actually know how to start genning your code then I'd suggest watching some of those screencasts I mentioned above.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Software I Use Everyday</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Software-I-Use-Everyday"/>
    <id>http://shawnoster.com/Blog/Software-I-Use-Everyday</id>
    <updated>2009-08-10T23:47:34.397</updated>
    <published>2008-01-31T12:57:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;I'm one of those people that enjoy rebuilding their machines every so often, either for performance reasons or just because I like to tidy things up.&amp;nbsp; I rarely keep software installs around since there are usually newer versions by the time I re-pave my machine so this is my &quot;must have&quot; list of software I reinstall every time, in one easy place for my future self to grab the downloads from.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;General/Misc&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://www.ccleaner.com/download&quot;&gt;CCleaner&lt;/a&gt; - My favorite registry/file cleaner.&amp;nbsp; I run it at least a few times a week.  &lt;li&gt;&lt;a href=&quot;http://www.ceruleanstudios.com/&quot;&gt;Trillian&lt;/a&gt; - Pretty much the one and only IM client.&amp;nbsp; It supports all major IM networks and the 4.0 beta version eve handles GTalk and MySpace so there really is no need for anything else.  &lt;li&gt;&lt;a href=&quot;http://www.slysoft.com/en/virtual-clonedrive.html&quot;&gt;Virtual CloneDrive&lt;/a&gt; - It's what I use to mount ISO's on anything from XP to Vista, though I hear MagicDisc does a great job as well.  &lt;li&gt;&lt;a href=&quot;http://www.windowslive.com/&quot;&gt;Windows Live Writer&lt;/a&gt; - It's what I use to write my blog and it rocks, seriously easy.  &lt;li&gt;&lt;a href=&quot;http://www.windowslive.com/&quot;&gt;Windows Live Photo Gallery&lt;/a&gt; - Great for tagging photos and includes built-in flickr.com uploading support.&amp;nbsp; Really polished looking.  &lt;li&gt;&lt;a href=&quot;http://www.feeddemon.com/&quot;&gt;FeedDemon&lt;/a&gt; - My RSS reader of choice, if you only use Google Reader you're missing out on some really great features.&amp;nbsp; Awesome support for offline feeds and they just made it free!  &lt;li&gt;&lt;a href=&quot;http://www.bluemars.org/clipx/&quot;&gt;ClipX&lt;/a&gt; - Great clipboard history manager.  &lt;li&gt;&lt;a href=&quot;http://www.windowclippings.com/&quot;&gt;Window Clippings&lt;/a&gt; - I'm always taking screenshots for various things, either blogs or product help or just to send off to a client to show them what they should be seeing.&amp;nbsp; Free, easy and awesome.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;General Development&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://tortoisesvn.tigris.org/&quot;&gt;TortoiseSVN&lt;/a&gt; - Best subversion client I've used so far.  &lt;li&gt;&lt;a href=&quot;http://intype.info/home/index.php&quot;&gt;Intype&lt;/a&gt; - A TextMate-like clone text editor that I've started using more and more.  &lt;li&gt;&lt;a href=&quot;http://www.textpad.com/&quot;&gt;TextPad&lt;/a&gt; - Until Intype matures some more I still need a lot of the great features in this text editor.  &lt;li&gt;&lt;a href=&quot;http://technet.microsoft.com/en-us/sysinternals/0e18b180-9b7a-4c49-8120-c47c5a693683.aspx&quot;&gt;Sysinternals Suite&lt;/a&gt; - When you need to know exactly what's going on in your system these tools will help you explore the plumbing.  &lt;li&gt;&lt;a href=&quot;http://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt; - A beautiful scripting language that I find myself using more and more for little tasks that I used to write applications for.  &lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx&quot;&gt;Virtual PC 2007&lt;/a&gt; - Because sometimes you just need to test on a different or clean OS and this is even better than a lab full of machines.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;.NET Development&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://www.mbunit.com/&quot;&gt;mbUnit&lt;/a&gt; - I find myself preferring mbUnit to NUnit to unit testing.  &lt;li&gt;&lt;a href=&quot;http://www.ncover.com/&quot;&gt;NCover&lt;/a&gt; - Ever wonder just how much of your application is actually being tested?&amp;nbsp; Here you go.  &lt;li&gt;&lt;a href=&quot;http://www.testdriven.net/&quot;&gt;TestDriven.NET&lt;/a&gt; - Best way to run mbUnit, NCover, NUnit, etc. from inside of Visual Studio.  &lt;li&gt;&lt;a href=&quot;http://www.gotdotnet.com/Team/FxCop/&quot;&gt;FxCop&lt;/a&gt; - Because it's always nice to know what the framework team would think of your code.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Delphi Development&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://www.gexperts.org/&quot;&gt;GExperts&lt;/a&gt; - Best add-in for Delphi ever in my opinion.&amp;nbsp; Just the Ctrl-G makes it a must-have.  &lt;li&gt;QC Plus - When you want to submit Delphi bugs or just browse the current issues the CodeGear provided QC client app sucks.&amp;nbsp; QC Plus pretty much blows it out of the water.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Web&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://www.mozilla.com/en-US/firefox/&quot;&gt;Firefox&lt;/a&gt;  &lt;li&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/1843&quot;&gt;Firebug&lt;/a&gt; - Great developer add-on for Firefix  &lt;li&gt;&lt;a href=&quot;http://developer.yahoo.com/yslow/&quot;&gt;YSlow&lt;/a&gt; - Nice add-on (requires Firebug) that grades sites based on Yahoo's rules for high performance web sites.  &lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=E59C3964-672D-4511-BB3E-2D5E1DB91038&amp;amp;displaylang=en&quot;&gt;Internet Explorer Developer Toolbar&lt;/a&gt; - Not as full featured as Firebug but a must-have for doing any DOM/CSS debugging work in IE.  &lt;li&gt;&lt;a href=&quot;http://www.fiddlertool.com/fiddler/&quot;&gt;Fiddler&lt;/a&gt; - When you need to debug HTTP traffic this is the tool I reach for.  &lt;li&gt;&lt;a href=&quot;http://www.smartftp.com/&quot;&gt;SmartFTP&lt;/a&gt; -&amp;nbsp; I used to use Filezilla but honestly I'm a sucker for a good looking UI.  &lt;li&gt;&lt;a href=&quot;http://toolbar.google.com/gmail-helper/notifier_windows.html&quot;&gt;Gmail Notifier&lt;/a&gt; - Notifications of new Gmail messages in your tray.&amp;nbsp; Simple and useful.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;LAMP&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I still do a lot of PHP work for a few clients so these are my &quot;must have&quot; tools for working with the LAMP stack.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/putty/&quot;&gt;PuTTY&lt;/a&gt; - For telnet/SSH access into a site's shell  &lt;li&gt;&lt;a href=&quot;http://www.webyog.com/en/&quot;&gt;SQLyog&lt;/a&gt; - GUI for managing MySql databases  &lt;li&gt;&lt;a href=&quot;http://virtualappliances.net/products/lamp.php&quot;&gt;LAMP Virtual Appliance&lt;/a&gt; - A LAMP stack in a virtual machine, with images for VMware and Virtual PC/Virtual Server.&amp;nbsp; Great for testing&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Media&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://www.zune.net/en-us/products/zunesoftware/download.htm&quot;&gt;Zune Software&lt;/a&gt; - Because I have a Zune and I actually like the UI.  &lt;li&gt;&lt;a href=&quot;http://www.mp3tag.de/en/&quot;&gt;Mp3tag&lt;/a&gt; - My favorite metadata tag editor.  &lt;li&gt;&lt;a href=&quot;http://www.winamp.com/player&quot;&gt;Winamp&lt;/a&gt; - Still the most powerful media player out there, plus it rips better MP3's than the Zune software since it uses the LAME encoder.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Uh, now I realize why it takes me so long to reinstall my machine :)&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Don't Forget to Profile Your Code</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Dont-Forget-to-Profile-Your-Code"/>
    <id>http://shawnoster.com/Blog/Dont-Forget-to-Profile-Your-Code</id>
    <updated>2009-08-10T23:47:35.083</updated>
    <published>2008-01-27T18:56:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;Being a good developer is about a lot more than just slinging good code.&amp;nbsp; After you've compiled your application you've really just begun.&amp;nbsp; One important step that some developers forget is profiling.&lt;/p&gt; &lt;p&gt;If you're a .NET developer make sure you run &lt;a href=&quot;http://www.gotdotnet.com/Team/FxCop/&quot;&gt;FxCop&lt;/a&gt; over your code.&amp;nbsp; It's a free Microsoft tool that checks your code both for performance issues as well as basic coding standards such as avoiding Hungarian notation, correctly casing variables and basic good practices.&amp;nbsp; While FxCop is more geared towards framework developers it has some great performance checks and little insights into your code that can only make your applications better.&amp;nbsp; Some of my favorites are warnings about unused local variables and property collections with setters, which rarely make any sense on a collection yet are so easy to do when you're coding on auto-pilot.&lt;/p&gt; &lt;p&gt;If you're a .NET or Win32 developer a great must have tool for profiling and checking over your application is &lt;a href=&quot;http://www.automatedqa.com/products/aqtime/index.asp&quot;&gt;AQtime&lt;/a&gt;.&amp;nbsp; I've found more memory leaks and performance bottle-necks with this tool over the years that it's easily paid for itself many times over.&amp;nbsp; There is a lot to the tool and for the first year I used it I only used 5% of what this tool can do, and that was checking for memory leaks in our Delphi applications.&amp;nbsp; I finally explored it's profiling features when I was tweaking some XML parsing code and it really helps focus efforts one which lines of code you should really worry about vs. trying to optimize everything in sight.&lt;/p&gt; &lt;p&gt;Even if you don't have any coin to spend try running FxCop over your .NET code, you'll probably find a few interesting things and learn a bit about best practices.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">.NET Framework Guts Exposed</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/NET-Framework-Guts-Exposed"/>
    <id>http://shawnoster.com/Blog/NET-Framework-Guts-Exposed</id>
    <updated>2009-08-10T23:47:35.27</updated>
    <published>2008-01-16T23:45:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;Remember that scene in Star Wars when Luke (or was it Han Solo?) cuts open that crazy goat-beast thing's belly and slides inside for life-giving warmth?&amp;nbsp; Well the .NET guys have done the same today by making the &lt;a href=&quot;http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx&quot;&gt;.NET Framework Library source code available&lt;/a&gt; for nerdly enjoyment.&lt;/p&gt; &lt;p&gt;When I was learning CodeGear's &lt;a href=&quot;http://www.codegear.com/products/delphi/win32&quot;&gt;Delphi&lt;/a&gt; (still the best tool for creating native Win32 apps I must say) having the complete source to the VCL (the Delphi framework) was the best learning tool I could have asked for.&amp;nbsp; Whenever I was unsure of how to code up a certain pattern I went trolling through the source and found inspiration.&amp;nbsp;&amp;nbsp; Sometimes I just browsed it for fun and other times it was a life-saver when it came to debugging and tracking down hard to find issues.&lt;/p&gt; &lt;p&gt;Even if you don't think you'll use it for debugging download it anyway and just browse the developer comments to see how the crew aboard a big ship like Microsoft treats their code.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Why does ASP.NET WebForms hate the ID?</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Why-does-ASPNET-WebForms-hate-the-ID"/>
    <id>http://shawnoster.com/Blog/Why-does-ASPNET-WebForms-hate-the-ID</id>
    <updated>2009-08-10T23:47:35.427</updated>
    <published>2008-01-16T00:36:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;Just needed to reiterate my hate for the way ASP.NET WebForms munge the id attribute on rendered HTML controls.&amp;nbsp; Seriously, there is nothing more annoying than going to write a little JavaScript and wanting to grab an element by it's id and you can't because it's been turned into &quot;cntHolder1_cntHolder2_cxtPlaceholderArea98_lblButtonMaybe&quot;.&amp;nbsp; It's obvious that whomever designed WebForms had never actually worked with HTML or CSS before.&lt;/p&gt; &lt;p&gt;If someone has an easy solution I'd love to hear it but this is one of the reasons I'm so excited about ASP.NET MVC.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Books That Have Influenced Me</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Books-That-Have-Influenced-Me"/>
    <id>http://shawnoster.com/Blog/Books-That-Have-Influenced-Me</id>
    <updated>2009-08-10T23:47:35.94</updated>
    <published>2008-01-11T03:42:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;My wife gets 'O', the Oprah magazine, and I have a bad habit of reading whatever is near me while I'm having breakfast and so found myself perusing an article where some celebrity such-and-such listed off the top influential books in their life which got me thinking of what mine would be.&amp;nbsp; My list isn't as deep or grand as theirs but it's honest.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. &lt;a href=&quot;http://www.amazon.com/Stranger-Strange-Land-Robert-Heinlein/dp/0786174307/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200045211&amp;amp;sr=1-2&quot;&gt;Stranger In A Strange Land&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This book shaped a huge portion of how I view the world, religion, relationships, how to treated others and as a reminder to always question everything around me.&amp;nbsp; Oh, and to laugh because sometimes that's all we have.&amp;nbsp; It introduced the new verb 'grok' into the nerd lexicon and to this day you'll see it pop up anywhere nerds mingle.&amp;nbsp; Stranded on a desert isle with only one book, this is it.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2. &lt;a href=&quot;http://www.amazon.com/Perdido-Street-Station-China-Mieville/dp/0345459407/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200045183&amp;amp;sr=8-1&quot;&gt;Perdido Street Station&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;A rich tapestry of weird with fine political stitching.&amp;nbsp; A relatively new book compared to how long I've been reading but it still managed to work it's way under my skin.&amp;nbsp; It presented the concept of egalitarianism in a way that I hadn't considered before and so thoroughly mixed genres that it was a real adventure to read.&amp;nbsp; It came along at at time when I needed a jolt and this was just what the doctor ordered.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;3. &lt;a href=&quot;http://www.amazon.com/Hamlet-New-Folger-Library-Shakespeare/dp/074347712X/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200045234&amp;amp;sr=1-1&quot;&gt;Hamlet&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This will always hold a special place in my heart because of the memories I have of learning to read Shakespeare from my high school teacher Mr. Tosh.&amp;nbsp; I'm sure that without the guided tour through Shakespeare's language and the double and triple entendres I would have found this a rather dull read but instead I learned that just because something is old it doesn't mean there isn't bite or relevance and that some books should be read for their craftsmanship as well as their plot.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;4. Your First Basic Program&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://enginefour.com/images/BooksThatHaveInfluencedMe_33CE/YourFirstBASICProgram.jpg&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;205&quot; alt=&quot;Your First BASIC Program&quot; src=&quot;http://enginefour.com/images/BooksThatHaveInfluencedMe_33CE/YourFirstBASICProgram_thumb.jpg&quot; width=&quot;136&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;This was &lt;strong&gt;the&lt;/strong&gt; book that turned me into a software developer.&amp;nbsp; I still remember the day my dad took me to the book store and helped me pick it out.&amp;nbsp; I must have been all of 11 or 12 at the time and I'm pretty sure I picked it because of the really cool dragon illustrations on the inside and the big castle on the front.&amp;nbsp; I read it cover to cover, over and over, until it was tattered and creased, all while learning the classic control, flow and looping constructs that every developer still uses to this day.&amp;nbsp; In fact it wasn't until the Gang of Four's 'Design Patterns' that a single programming book had that much effect on me.&lt;/p&gt; &lt;p&gt;5. &lt;a href=&quot;http://www.amazon.com/Acid-House-Irvine-Welsh/dp/0393312801/ref=pd_bxgy_b_img_b&quot;&gt;Acid House&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Most people picking an Irvine Welsh book would probably go with Trainspotting but I never actually read Trainspotting, instead I read almost every other book he wrote and Acid House was the first one, the one I cut me teeth on learning to read his delightful written Scottish brogue.&amp;nbsp; It begs to be spoken and I'd entertain myself for hours just reading passages outloud, chewing through brogue and feeling myself slightly transported to gritty Edinburgh streets.&amp;nbsp; It was the first time a written brogue actually worked for me and I loved how much texture it added to the experience.&lt;/p&gt; &lt;p&gt;6. &lt;a href=&quot;http://www.amazon.com/Towing-Jehovah-Harvest-James-Morrow/dp/0156002108/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200046453&amp;amp;sr=1-1&quot;&gt;Towing Jehovah&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I picked this up on a whim, mostly because of the quirky title, and ended up not only enjoying the story but viewing people's relationships with religion in a different light.&amp;nbsp; Having no strong religious affiliation myself I was exposed to some of the issues others struggle with as well as some very scary realizations about how certain people could act if they lost their faith.&amp;nbsp; The concept of God being dead and having to be towed across the ocean was pretty much the perfect device to explore theology, culture and more without losing sight of the humor in life.&lt;/p&gt; &lt;p&gt;7. &lt;a href=&quot;http://www.amazon.com/How-Be-Good-Nick-Hornby/dp/1573229326/ref=pd_bbs_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200047369&amp;amp;sr=1-2&quot;&gt;How To Be Good&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I love this book because it highlights just how hypocritical we can be when we talk about how to cure the world of it's ills.&amp;nbsp; It slyly holds a mirror up to the reader with comical wit and satirical poking at what it means to be 'good' and how for as much as we talk about it how often we fail miserably.&amp;nbsp;&amp;nbsp; It got me thinking of my own actions and intentions and judgements and that maybe I shouldn't cry foul on others before giving myself a good hard look.&amp;nbsp; All done with of course the one element I need from any good book, humor.&lt;/p&gt; &lt;p&gt;I'm sure more will pop into my head but those are the ones that jumped out.&amp;nbsp; I could of course go on and on with various books that I loved or just found greatly enjoyable, but I tried to pick books that actually had some impact on me besides just being a good read.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Mp3tag Action to Populate Album Artist</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Mp3tag-Action-to-Populate-Album-Artist"/>
    <id>http://shawnoster.com/Blog/Mp3tag-Action-to-Populate-Album-Artist</id>
    <updated>2009-08-24T01:45:11.237</updated>
    <published>2008-01-08T16:11:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;My favorite tag editor is &lt;a href=&quot;http://www.mp3tag.de/en/&quot;&gt;Mp3tag&lt;/a&gt; and I use it at least a couple times a week to populate the album artist field that both WMP and Zune seem to depend upon for proper organization.&amp;nbsp; Instead of manually typing in each album artist field I use this handy script:&lt;/p&gt; &lt;p&gt;&lt;code&gt;$if(%band%,%band%,%artist%)&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Basically if the album artist field is already populated then I don't touch it, otherwise I transfer the value from the artist field into the album artist field.&amp;nbsp; Mp3tag calls the album artist field 'band' but I don't let that stop me.&amp;nbsp; If you feel like using it as well here is how to add a new action:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;On the menu select Convert -&amp;gt; Actions  &lt;li&gt;Click the 'New' icon in the upper right  &lt;li&gt;Give the action a name, I used 'Populate Album Artist'  &lt;li&gt;Click the 'New' icon again to add an action type  &lt;li&gt;Select the 'Format value' action type  &lt;li&gt;For field select 'BAND'  &lt;li&gt;For format string use: $if(%band%,%band%,%artist%)  &lt;li&gt;You'll end up with a dialog that looks like this:  &lt;p&gt;&lt;a href=&quot;http://www.enginefour.com/images/Mp3tagActiontoPopulateAlbumArtist_E308/Formatvalue.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;184&quot; alt=&quot;Format value&quot; src=&quot;http://www.enginefour.com/images/Mp3tagActiontoPopulateAlbumArtist_E308/Formatvalue_thumb.png&quot; width=&quot;334&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;OK your way through everything and now you have an action to automatically fill out that needed Album Artist field and help prevent the silly 'Unknown Artist' folder that Zune seems to like to create.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Thanks Oscar for pointing out that you need to remove the space before the %artist% portion of the formula.&amp;nbsp; I've updated the post to reflect that (still working on the screen cap though).&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Video Games that Should Be Made</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Video-Games-that-Should-Be-Made"/>
    <id>http://shawnoster.com/Blog/Video-Games-that-Should-Be-Made</id>
    <updated>2009-08-10T23:47:36.597</updated>
    <published>2008-01-02T16:11:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;
The media world is cannibalistic, &lt;a href=&quot;http://www.imdb.com/title/tt0241527/&quot;&gt;books become movies&lt;/a&gt;, &lt;a href=&quot;http://www.amazon.com/Star-Wars-Knights-Old-Republic/dp/B000067DPM/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=videogames&amp;amp;qid=1199313578&amp;amp;sr=8-2&quot;&gt;video games are based on movies&lt;/a&gt;, &lt;a href=&quot;http://www.amazon.com/Contact-Harvest-Halo-Joseph-Staten/dp/0765315696/ref=pd_bbs_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199313625&amp;amp;sr=8-1&quot;&gt;books are written for video games&lt;/a&gt; with every permutation in between.&amp;nbsp; Granted a large number of these tend to be real stinkers but every once in awhile something is actually gained in translation.&amp;nbsp; Over the years a few movies and books have really stood out as prime candidates for the video game treatment, some of which are below: 
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.imdb.com/title/tt0370032/&quot;&gt;&lt;strong&gt;&amp;quot;Ultraviolet&amp;quot;&lt;/strong&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
This 2006 movie came out to some pretty bad reviews but since I&amp;#39;m a sucker for anything Milla Jovovich I laid down my hard earned cash to see this on the silver screen and the only thought in my head as I walked out was how great a video game it would make.&amp;nbsp; It&amp;#39;s high on visuals and fast-paced combat with a smorgasbord of &amp;quot;future talk&amp;quot; vernacular while not overly stressing the plot which is high on drama, low on surprises.&amp;nbsp; In other words the perfect elements for a video game.&amp;nbsp; It comes with built-in factions and feuds, uneasy truces, a bevy of places to draw talents/skills/powers from, vehicles, gadgets and even some mini-game ideas like driving up the sides of buildings and quickly shifting the direction of gravity. 
&lt;/p&gt;
&lt;p&gt;
As much as the style was ridiculed in the gaming press I see this as Shadowrun-style game play, quick rounds with chances in between to upgrade abilities and powers.&amp;nbsp; It would need a single-player story though, there are just too many elements that wouldn&amp;#39;t multiplayer well yet would be great in a solo or co-op fashion.&amp;nbsp; Basically a slightly beefier Halo that&amp;#39;s not so static in the initial player load-out during multiplayer. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.amazon.com/Altered-Carbon-Takeshi-Kovacs-Novels/dp/0345457692/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199311954&amp;amp;sr=8-1&quot;&gt;&lt;strong&gt;Altered Carbon&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; by Richard K. Morgan&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
Anyone that&amp;#39;s read this book or any of the other Takeshi Kovacs novels, &lt;a href=&quot;http://www.amazon.com/Broken-Angels-Richard-K-Morgan/dp/0345457714/ref=pd_bbs_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199311954&amp;amp;sr=8-2&quot;&gt;Broken Angels&lt;/a&gt; and &lt;a href=&quot;http://www.amazon.com/Woken-Furies-Takeshi-Kovacs-Novel/dp/0345499778/ref=sr_1_5?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199312132&amp;amp;sr=1-5&quot;&gt;Woken Furies&lt;/a&gt;, probably harbors the same thought I do, that these books are just crying out to be turned into a video game.&amp;nbsp; There is already a great death handling mechanism in the form of &amp;quot;cortical stacks&amp;quot;, basically backups that can be used to slot you into a new &amp;quot;sleeve&amp;quot; or body, which is where you have a rich source of player upgrades and customizations.&amp;nbsp; There is even a black-ops force, Envoys, which work on either end of a game plot line, either starting as an Envoy and having to track down the baddies or working towards the ultimate goal of becoming an Envoy. 
&lt;/p&gt;
&lt;p&gt;
Given the detective anti-hero narrative of the books any game based on this franchise would need strong RPG elements, with a good plot, a bit of snooping yet a great combat system.&amp;nbsp; I&amp;#39;m thinking a mix between Gears of War and Mass Effect with a heavy upgrade and player customization system. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.amazon.com/Revelation-Space-Alastair-Reynolds/dp/0441009425/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199312298&amp;amp;sr=8-2&quot;&gt;&lt;strong&gt;Revelation Space&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; by Alastair Reynolds&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
This is the first book in one of most intelligent space operas I&amp;#39;ve read in a long time.&amp;nbsp; Great interweaving plots and layers of interactions are spread out across the books and there are some very distinct factions all with their own career and upgrade paths yet they do mix so you get some common equipment, plot and upgrade items.&amp;nbsp; The books span a huge range of time and there are a ton of great events to center a game around as well as enough unwritten history that new timeline slots could be opened up. 
&lt;/p&gt;
&lt;p&gt;
Given the shifting alliances, rich characters and plot thick aspect of these books a RPG in the vein of Oblivion and Mass Effect would be perfect.&amp;nbsp; A great twist would be to mix in some ship-to-ship combat and perhaps a sprinkling of the RTS genre, though I&amp;#39;d keep it grounded in RPG. 
&lt;/p&gt;
&lt;p&gt;
There are tons of books and movies that could be given the game treatment but these few I&amp;#39;ve listed seem like natural candidates, you can practically image the various selection screens and character creation systems.&amp;nbsp; Of course they&amp;#39;d need first class treatment vs. the usual rush job with the hopes that fans will buy anything as long as it has they&amp;#39;re favorite franchise name splashed across the front.&amp;nbsp; I&amp;#39;d even put good money that someone has already approached Richard K. Morgan about licensing his world for a video game. 
&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Zune Gadgets</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Zune-Gadgets"/>
    <id>http://shawnoster.com/Blog/Zune-Gadgets</id>
    <updated>2009-08-24T01:45:46.087</updated>
    <published>2007-12-15T13:43:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;
Playing with the new gadgets that were released with the latest Zune web-site update.&amp;nbsp; One thing I really like is that if you click an album or artist it&amp;#39;ll show the tracks and if the Zune Marketplace has them available you can preview the music.&amp;nbsp; It&amp;#39;s a pretty cool way to see what others are listening to and get a quick sample, all without needing to have the Zune software installed.&amp;nbsp; Here&amp;#39;s the big version of mine:
&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&quot; id=&quot;flashUserCard&quot; name=&quot;flashUserCard&quot; width=&quot;548&quot; height=&quot;260&quot;&gt;
	&lt;param name=&quot;id&quot; value=&quot;flashUserCard&quot; /&gt;
	&lt;param name=&quot;name&quot; value=&quot;flashUserCard&quot; /&gt;
	&lt;param name=&quot;width&quot; value=&quot;548&quot; /&gt;
	&lt;param name=&quot;height&quot; value=&quot;260&quot; /&gt;
	&lt;param name=&quot;bgcolor&quot; value=&quot;#FFF&quot; /&gt;
	&lt;param name=&quot;flashvars&quot; value=&quot;baseURL=http%3a%2f%2fzcards.zune.net%2fzcard%2fusercardservice.ashx%3fsrc%3dexternal%26zunetag%3dMonocularJack&quot; /&gt;
	&lt;param name=&quot;salign&quot; value=&quot;tl&quot; /&gt;
	&lt;param name=&quot;wmode&quot; value=&quot;opaque&quot; /&gt;
	&lt;param name=&quot;src&quot; value=&quot;http://zcards.zune.net/xweb/lx/swf/zunecard.swf&quot; /&gt;
	&lt;embed type=&quot;application/x-shockwave-flash&quot; id=&quot;flashUserCard&quot; name=&quot;flashUserCard&quot; width=&quot;548&quot; height=&quot;260&quot; bgcolor=&quot;#FFF&quot; flashvars=&quot;baseURL=http%3a%2f%2fzcards.zune.net%2fzcard%2fusercardservice.ashx%3fsrc%3dexternal%26zunetag%3dMonocularJack&quot; salign=&quot;tl&quot; wmode=&quot;opaque&quot; src=&quot;http://zcards.zune.net/xweb/lx/swf/zunecard.swf&quot;&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;/div&gt;
&lt;/div&gt;
    </content>
  </entry>
  <entry>
    <title type="html">ASP.NET MVC Makes .NET Fun Again</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/ASPNET-MVC-Makes-NET-Fun-Again"/>
    <id>http://shawnoster.com/Blog/ASPNET-MVC-Makes-NET-Fun-Again</id>
    <updated>2009-08-10T23:47:37.407</updated>
    <published>2007-12-13T17:27:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;
I&amp;#39;ve been dabbling in the Ruby on Rails world for awhile and I&amp;#39;ve always been drawn to the very clean separation of the Model-View-Controller framework, something Rails pretty much nailed in their implementation.&amp;nbsp; I&amp;#39;ve done a few small Rails sites here and there, played with it enough to be dangerous but I didn&amp;#39;t use it enough in my daily life to really get it under my belt.&amp;nbsp; At the same time I was doing a lot of ASP.NET work and felt like I was constantly fighting the WebForms architecture to get it to produce proper stateless standards-compliant web applications that were based around the concept of request/response.&amp;nbsp; I&amp;#39;d disable ViewState, override Inits(), hack into the page lifecycle and ignore server controls so I had real control the HTML output and get back my CSS id selectors.&amp;nbsp; In a very bad way WebForms reminded me of VB6 and all the hacks I had to do during my stint with that language.
&lt;/p&gt;
&lt;p&gt;
The most frustrating point came when the CSS Adapters were released and touted as some kind of panacea to those that cared about web standards when in reality they are more akin to giving a woman with a horrible breast job a big baggy sweater with a picture of a nice rack on the front.&amp;nbsp; Sure, it may be a pretty picture but the scar tissue and ugly layers are still there.
&lt;/p&gt;
&lt;p&gt;
I think I got some of my faith back after I started reading &lt;a href=&quot;http://blog.wekeroad.com/&quot;&gt;Rob Conery&amp;#39;s blog&lt;/a&gt; because in him I found a Rails enthusiast who still enjoyed the many good aspects of ASP.NET and C#.&amp;nbsp; Instead of just jumping ship he was bringing some of the better elements, and more importantly concepts, over to the .NET side with the &lt;a href=&quot;http://www.subsonicproject.com/&quot;&gt;SubSonic project&lt;/a&gt;.&amp;nbsp; Then he somehow got mixed up with some other crazy people like &lt;a href=&quot;http://haacked.com/&quot;&gt;Phil Haack&lt;/a&gt;, &lt;a href=&quot;http://weblogs.asp.net/scottgu/&quot;&gt;Scott Guthrie&lt;/a&gt; and &lt;a href=&quot;http://www.hanselman.com/blog/&quot;&gt;Scott Hanselman&lt;/a&gt; and now we have the &lt;a href=&quot;http://asp.net/downloads/3.5-extensions/&quot;&gt;ASP.NET 3.5 Extensions Preview&lt;/a&gt; which contains a juicy little nugget otherwise known as ASP.NET MVC.
&lt;/p&gt;
&lt;p&gt;
After wading through the bits, doing a few sample projects and generally taking their version of MVC for a walk-about I can say I&amp;#39;m once again excited about .NET.&amp;nbsp; Sure there are some rough spots and some areas that are a bit too &amp;quot;chewy&amp;quot; (you know a line of code that&amp;#39;s a 100 characters long and includes at least three generics and two type casts?&amp;nbsp; yeah, that&amp;#39;s chewy) and design decisions that some people are taking umbrage over but all in all it feels useful, feels clean and feels like real programming.
&lt;/p&gt;
&lt;p&gt;
In an odd way I have the same feeling I had back in the day when I switched from Visual Basic to &lt;a href=&quot;http://www.codegear.com/products/delphi/win32&quot;&gt;Delphi&lt;/a&gt; (which I still think is the best tool for creating native Win32 applications), like I once again have control.
&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Music I'm Not Buying</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Music-Im-Not-Buying"/>
    <id>http://shawnoster.com/Blog/Music-Im-Not-Buying</id>
    <updated>2009-08-24T01:46:16.383</updated>
    <published>2007-12-03T01:54:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;
While looking for some mellow music for a late night coding session that wouldn&amp;#39;t disturb my wife I remembered an album I used to listen to quite a bit,&amp;nbsp; &amp;#39;&lt;a href=&quot;http://social.zune.net/my/ContentRedirect.ashx?mtype=Album&amp;amp;src=MyZune&amp;amp;mid=3b856700-0100-11db-89ca-0019b92a3933&quot; target=&quot;_blank&quot;&gt;Far Away Trains Passing By&lt;/a&gt;&amp;#39; by &lt;a href=&quot;http://social.zune.net/my/ContentRedirect.ashx?mtype=Artist&amp;amp;src=MyZune&amp;amp;mid=28df0700-0600-11db-89ca-0019b92a3933&quot; target=&quot;_blank&quot;&gt;Ulrich Schnauss&lt;/a&gt;, and wondered if he had something new out for me to enjoy.&amp;nbsp; Seems he&amp;#39;s been busy since I first picked up that album in 2001 with at least four other releases so after listening to some samples I figured I&amp;#39;d pick up an album or two.&amp;nbsp; 
&lt;/p&gt;
  
&lt;p&gt;
I started first with Zune Marketplace which has become a viable option ever since they started offering DRM-free MP3s.&amp;nbsp; While they have all his albums none of them are in MP3 format which crosses it off my list.&amp;nbsp; Not to be daunted I hit up Amazon&amp;#39;s MP3 downloads but no dice there either, I can order the CD but I want satisfaction now.&amp;nbsp; Last on my list is eMusic, usually a great location for smaller or indie labels but I only found a scattering of his songs on compilations.&amp;nbsp; I thought about checking iTunes to see if it was available as a &amp;quot;Plus&amp;quot; track, meaning DRM-free, but you can&amp;#39;t browse their catalog online and I really can&amp;#39;t be bothered to install iTunes just to see if it may or may not be there.&amp;nbsp; I even toyed with using BitTorrent for some nefarious illegal song grabbing but honestly that&amp;#39;s entirely too much fussing just for a few songs.
&lt;/p&gt;
  
&lt;p&gt;
After all of this searching and disappointment I realized I&amp;#39;ll probably never buy another Ulrich Schnauss album, not out of some petulant pouting or idealistic, chest-beating stance against the horrors of DRM but because I had an impulse and now it&amp;#39;s gone.&amp;nbsp; Anyone that knows me knows that I&amp;#39;m slightly impulsive while at the same time I lose interest quickly so in a few days time it&amp;#39;s doubtful I&amp;#39;ll even remember Mr. Schnauss and instead I&amp;#39;ll be buying some DRM-free tracks that caught my ear on eMusic or something tasty I see come through Zune Marketplace.&amp;nbsp; 
&lt;/p&gt;
  
&lt;p&gt;
I&amp;#39;m not just not buying (neat) Ulrich Schnauss either, The new Dropkick Murphys album &amp;#39;&lt;a href=&quot;http://social.zune.net/AlbumDetails.aspx?aid=5374ad00-0100-11db-89ca-0019b92a3933&quot; target=&quot;_blank&quot;&gt;The Meanest of Times&lt;/a&gt;&amp;#39; hasn&amp;#39;t gotten any rotation from me and they&amp;#39;re one of my top 10 favorite bands.&amp;nbsp; There is just too much good music out there and my tastes are too varied for me to obsess over a single album.&amp;nbsp; These days if I can&amp;#39;t get it DRM-free it&amp;#39;s doubtful I&amp;#39;ll ever buy it or listen to it.
&lt;/p&gt;
  
&lt;p&gt;
A little note to Ulrich Schnauss&amp;#39;s label Domino USA, you really need to look at licensing&amp;nbsp; your music as DRM-free, whether it&amp;#39;s on eMusic, Amazon, Zune Marketplace or even iTunes.&amp;nbsp; You could have had some of my hard-earned dosh, instead I&amp;#39;m just cueing up some &amp;#39;Thievery Corporation&amp;#39; and calling it good.
&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Getting Artists to show up correctly in the Zune software</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/getting-artists-to-show-up-correctly-in"/>
    <id>http://shawnoster.com/Blog/getting-artists-to-show-up-correctly-in</id>
    <updated>2009-08-24T01:50:34.357</updated>
    <published>2007-11-30T10:21:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Ever have an artist not show up where you expected in the Zune software?&amp;#160; Ever swear it's correctly labeled 'Red Hot Chili Peppers' yet it's showing up under 'Unknown Artist' instead?&amp;#160; How about this one, you can find it in the software but under the Zune it's in the wrong place?&amp;#160; The culprit here is the Zune software's really weird use the artist and album artist metadata bundled inside the file.&amp;#160; I consider this a huge and highly annoying bug. &lt;/p&gt;  &lt;p&gt;A lot of tracks out there only have the 'Artist' field filled out while a second, less-used field 'Album Artist', sometimes called 'Band', is empty.&amp;#160; The Zune, instead of defaulting to the artist when it has an empty album artist, puts all those tracks under the dreaded 'Unknown Artist' section. &lt;/p&gt;  &lt;p&gt;I just had this comment on an older blog post showing just how frustrating this can be, Shad said... &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I am having a hell of a time getting CDs that I recorded in my commercial recording studio to show up as anything other than Unknown Artist. I finally got the folders that I have labeled (by right clicking and renaming them) to show up in the software but when I sync to my PC and update the Zune, they do not show up as &amp;quot;Unknown Artist&amp;quot; in the Zune. I cannot find them at all on the Zune. Any ideas?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I answered him in the comments but thought I'd repeat the steps I use to fix this issue here: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Download and install &lt;a href=&quot;http://mp3tag.de/en/index.html&quot;&gt;mp3tag&lt;/a&gt; or any other tag editing program. I just like this one because it's straight forward, free, and small in size. &lt;/li&gt;    &lt;li&gt;After you install it run the software. &lt;/li&gt;    &lt;li&gt;On the menu go to Tools, then Options. &lt;/li&gt;    &lt;li&gt;Select the 'Tag Panel' node on the left. &lt;/li&gt;    &lt;li&gt;Click the 'Add Field' icon on the right, looks like a rectangle with a star. &lt;/li&gt;    &lt;li&gt;Under 'Field' select BAND. &lt;/li&gt;    &lt;li&gt;Under 'Name' type 'Album Artist' or 'Band'. Doesn't matter, it's for your eyes only. &lt;/li&gt;    &lt;li&gt;OK out of everything. &lt;/li&gt;    &lt;li&gt;Drag &amp;amp; drop the files or folder of files you want to edit into the main white area of the app. &lt;/li&gt;    &lt;li&gt;You'll notice on the left side you can edit all the metadata about your tracks. Make sure to edit both 'Artist' and 'Album Artist' to be the same thing. &lt;/li&gt;    &lt;li&gt;Save. &lt;/li&gt;    &lt;li&gt;Sometimes the Zune software will pick up on your new information, sometimes you have to kick it a little by renaming the file. &lt;/li&gt;    &lt;li&gt;Everything should be rocking now! &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Another great thing about mp3tag is that it can rename your files using your metadata, can add cover art or look it up from Amazon and guess at what the metadata should be based on filename.&amp;#160; It supports pretty much every single audio format I've thrown at it as well that supports metadata.&amp;#160; The renaming is nice because the Zune software lacks the ability to customize how your files are named. &lt;/p&gt;  &lt;p&gt;Any questions drop them in the comments.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">'Tis The Season to Giveness.com</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/season-to-givenesscom"/>
    <id>http://shawnoster.com/Blog/season-to-givenesscom</id>
    <updated>2009-08-10T23:47:39.543</updated>
    <published>2007-11-21T14:35:00</published>
    <author>
      <name>Admin</name>
    </author>
    <content type="html" xml:lang="en">
      &lt;p&gt;
Black Friday, the perennial classic day of Christmas shopping and crowd control, is almost upon us which means I&amp;#39;ll be battening down the hatches, pulling up a warm mug of spiked egg-nog and doing the bulk of my holiday shopping online.
&lt;/p&gt;
&lt;p&gt;
Amazon.com is usually my go-to retailer for everything purchased online but this year I&amp;#39;m going to do something slightly different, instead of first going to Amazon I&amp;#39;m going to start at &lt;a href=&quot;http://www.giveness.com/&quot;&gt;giveness.com&lt;/a&gt;, which in turn gets me right back over to Amazon with a bit of giving along the way.&amp;nbsp; Huh?
&lt;/p&gt;
&lt;p&gt;
The short version is that if you&amp;#39;re going to be doing any online shopping this season make giveness.com your first stop.&amp;nbsp; You pick a non-profit you want to help out and then search one of the many supported stores, including Amazon, eBay, iTunes, Apple Store, Buy.com, eToys, NewEgg.&amp;nbsp; Once you find something you want you are redirected to the retailer&amp;#39;s site and do your normal Amazon (or whatever store you picked) thing, at the normal discounted price, the normal store shipping, safety and security.&amp;nbsp; Only difference is that now you&amp;#39;ve made a little extra money for a constantly under-funded and overworked organization and hopefully warmed your heart.
&lt;/p&gt;
&lt;p&gt;
The long version is that at it&amp;#39;s core giveness.com is a way to donate to charities and other non-profits (NPO&amp;#39;s to those that like to sound in the know) without much more effort than indulging in the wonderful past-time known as shopping.&amp;nbsp; They achieve this by a very clever use of the various affiliate programs that online retailers offer, such as Amazon, eBay and many more.&amp;nbsp; Most affiliate programs offer a commission for every purchase that you send their way and often increase the commission based on how much money you helped them generate.&amp;nbsp; Most individuals or NPO&amp;#39;s can&amp;#39;t generate enough traffic to push their commission percentage past the base rate and so don&amp;#39;t usually see much return and that&amp;#39;s where Giveness.com steps in.
&lt;/p&gt;
&lt;p&gt;
Giveness.com acts as a single affiliate helping to pool all the purchases, so while a lone NPO may only have a couple of purchases a month Giveness takes the purchases of all the NPO&amp;#39;s signed up and those determine what the commission rate is, helping to push it past the usual meager base rate which in turns means a much bigger commission for the NPO than they could usually get on their own.
&lt;/p&gt;
&lt;p&gt;
Oh, besides just being an amazing way to shop and help out Giveness is also a social network, with support for blogs, messages, comments, sharing videos, RSS feeds and recommending and reviewing fav products.&amp;nbsp; They have a very cool widget for sharing your recommended products and also sponsoring your chosen NPO.&amp;nbsp; All wrapped up in a clean web 2.0 UI.
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;m not the only one that thinks Giveness is a great idea either.&amp;nbsp; Amazon has featured them as a &lt;a href=&quot;http://www.amazon.com/b?ie=UTF8&amp;amp;node=390734011&quot;&gt;success story&lt;/a&gt;, so has&amp;nbsp; &lt;a href=&quot;http://online.wsj.com/article/SB114427510952218149.html?mod=googlewsj&quot;&gt;The Wall Street Journal&lt;/a&gt; (back then they were known as Givezilla) as well as &lt;a href=&quot;http://www.giveness.com/sp/givenessnews.aspx&quot;&gt;others&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The catch here of course is that the system only works if people use it and if people actually buy stuff.&amp;nbsp; So... go buy some stuff!&amp;nbsp; Christmas is the perfect season to both avoid the nightmare of malls while doing some giving along the way.&amp;nbsp; Great thing about Giveness is that it doesn&amp;#39;t actually cost you anything to give plus you still get all the same great deals, discounts, shipping, rates and selection your normally do.
&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title type="html">Updated ZuneKeys</title>
    <link rel="alternate" type="text/html" href="http://shawnoster.com/Blog/Updated-ZuneKeys"/>
    <id>http://shawnoster.com/Blog/Updated-ZuneKeys</id>
    <updated>2009-08-24T02:22:30.733</updated>
    <published>2007-11-15T16:51:00</published>
    <author>
      <name>Admin</name>
    </author>
    <category term="Zune" />
    <category term="Media" />
    <content type="html" xml:lang="en">
      &lt;p&gt;Awhile back I wrote a wee &lt;a href=&quot;http://a-simian-mind.blogspot.com/2007/07/zunekeys-global-hotkey-support-for-zune.html&quot;&gt;little Delphi application&lt;/a&gt; to mimic WinAmp's Global Hotkeys in the Zune software, call &lt;a href=&quot;http://www.enginefour.com/downloads/ZuneKeys.zip&quot;&gt;ZuneKeys&lt;/a&gt;.&amp;nbsp; With the new Zune software out I had to update ZuneKeys to work with it so if you're one of the three people that actually like global hotkeys go ahead and grab the new version from the above links.&lt;/p&gt; &lt;p&gt;For nerds that care I had to change the window class I was searching for from &quot;WMPlayerAppZune&quot; to &quot;UIX Render Window&quot;.&amp;nbsp; Long Zheng over on istartedsomething has some more interesting bits about this &lt;a href=&quot;http://www.istartedsomething.com/20071116/microsoft-iris-uix-framework-zune/&quot;&gt;whole &quot;UIX&quot; business&lt;/a&gt;.&lt;/p&gt;
    </content>
  </entry>
</feed>
