<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Sean McLeod</title>
	<atom:link href="http://mcleodsean.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mcleodsean.wordpress.com</link>
	<description>Just another WordPress.com site</description>
	<lastBuildDate>Tue, 15 Mar 2011 07:50:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mcleodsean.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Sean McLeod</title>
		<link>http://mcleodsean.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mcleodsean.wordpress.com/osd.xml" title="Sean McLeod" />
	<atom:link rel='hub' href='http://mcleodsean.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Hello world!</title>
		<link>http://mcleodsean.wordpress.com/2010/11/19/hello-world/</link>
		<comments>http://mcleodsean.wordpress.com/2010/11/19/hello-world/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 12:41:15 +0000</pubDate>
		<dc:creator>mcleodsean</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mcleodsean.wordpress.com/?p=1</guid>
		<description><![CDATA[Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=1&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Welcome to <a href="https://wordpress.com/">WordPress.com</a>. This is your first post. Edit or delete it and start blogging!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mcleodsean.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcleodsean.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mcleodsean.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcleodsean.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mcleodsean.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mcleodsean.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mcleodsean.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mcleodsean.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mcleodsean.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcleodsean.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mcleodsean.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcleodsean.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mcleodsean.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcleodsean.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=1&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mcleodsean.wordpress.com/2010/11/19/hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e4ef5b9d25e31acdb13abdf82649531a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mcleodsean</media:title>
		</media:content>
	</item>
		<item>
		<title>Live Photo Gallery People Tags</title>
		<link>http://mcleodsean.wordpress.com/2008/10/08/live-photo-gallery-people-tags/</link>
		<comments>http://mcleodsean.wordpress.com/2008/10/08/live-photo-gallery-people-tags/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 20:20:52 +0000</pubDate>
		<dc:creator>mcleodsean</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mcleodsean.wordpress.com/2008/10/08/live-photo-gallery-people-tags</guid>
		<description><![CDATA[I’ve used the tagging feature in the original Windows Vista Photo Gallery and the Windows Live Photo Gallery versions for tagging people in photos and the location of the photo. The latest version of Windows Live Photo Gallery now includes &#8230; <a href="http://mcleodsean.wordpress.com/2008/10/08/live-photo-gallery-people-tags/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=4&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!B5D803CBC24E8221!294" class="bvMsg">
<p>I’ve used the tagging feature in the original Windows Vista Photo Gallery and the Windows Live Photo Gallery versions for tagging people in photos and the location of the photo.</p>
<p><a href="http://byfiles.storage.msn.com/y1pfN_aTvSnRiyLz9jAA18HbIHiFwmGxc3vhMQeQRUu7_ReGq3zHE2lpW3DW1BK2EZS?PARTNER=WRITER"><img border="0" src="http://byfiles.storage.msn.com/y1p-8bk35LJ2umBLYu61ZVuXdldPJotXWQpQX4jnXdE__RRlAkZHjdiNyGcZXq6o98LWYk0IXSlv8w?PARTNER=WRITER" /></a></p>
<p>The latest version of Windows Live Photo Gallery now includes a specific ‘People’ category separate from the generic tags category for identifying people in photos. In addition it includes a feature to automatically identify faces in photos and to associate the ‘People’ tags with specific faces in the photo.</p>
<p>The sample below taken from the Windows Live Photo blog shows the new face tagging features. You can also manually draw a rectangle over a face and tag it if the Photo Gallery doesn’t automatically detect the face.</p>
<p><img src="https://blogs.msdn.com/blogfiles/pix/WindowsLiveWriter/Whypeopletags_D9DE/tag-flow_2.gif" /> </p>
<p> One issue I’ve noticed is that the new people tags aren’t indexed by Windows Search. I often use Windows Search to search for photos based on my people and location tags and the new people tags aren’t found. So at the moment you have to search or filter photos based on the new people tags in Live Photo Gallery itself.</p>
<p>I took a look at the XMP meta-data that is stored by the new people tagging feature in the associated photos.</p>
<p>In the snippet below you can see how the rectangular region for the relevant face is stored if there is one plus the <strong>PersonDisplayName</strong>. There are APIs in WIC plus associated .Net wrappers in the .Net Framework that allow you to read this meta-data so you could make use of the rectangular regions in your own application that may want to display photos and show the tagged faces etc.</p>
<pre><span style="color:blue;">&lt;</span><span style="color:#a31515;">rdf:Description </span><span style="color:red;">xmlns:prefix0</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/</span>&quot;<span style="color:blue;">&gt;
  &lt;</span><span style="color:#a31515;">prefix0:RegionInfo</span><span style="color:blue;">&gt;
    &lt;</span><span style="color:#a31515;">rdf:Description </span><span style="color:red;">xmlns:rdf</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span>&quot;<span style="color:blue;">&gt;
      &lt;</span><span style="color:#a31515;">prefix1:Regions </span><span style="color:red;">xmlns:prefix1</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/t/RegionInfo#</span>&quot;<span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">rdf:Bag </span><span style="color:red;">xmlns:rdf</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span>&quot;<span style="color:blue;">&gt;
          &lt;</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
            &lt;</span><span style="color:#a31515;">rdf:Description </span><span style="color:red;">xmlns:rdf</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span>&quot;<span style="color:blue;">&gt;
              &lt;</span><span style="color:#a31515;">prefix2:Rectangle </span><span style="color:red;">xmlns:prefix2</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/t/Region#</span>&quot;<span style="color:blue;">&gt;</span>0.209985, 0.526367, 0.167401, 0.111328<span style="color:blue;">&lt;/</span><span style="color:#a31515;">prefix2:Rectangle</span><span style="color:blue;">&gt;
              &lt;</span><span style="color:#a31515;">prefix3:PersonDisplayName </span><span style="color:red;">xmlns:prefix3</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/t/Region#</span>&quot;<span style="color:blue;">&gt;</span>Sarah McLeod<span style="color:blue;">&lt;/</span><span style="color:#a31515;">prefix3:PersonDisplayName</span><span style="color:blue;">&gt;
            &lt;/</span><span style="color:#a31515;">rdf:Description</span><span style="color:blue;">&gt;
          &lt;/</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
          &lt;</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
            &lt;</span><span style="color:#a31515;">rdf:Description </span><span style="color:red;">xmlns:rdf</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span>&quot;<span style="color:blue;">&gt;
              &lt;</span><span style="color:#a31515;">prefix4:Rectangle </span><span style="color:red;">xmlns:prefix4</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/t/Region#</span>&quot;<span style="color:blue;">&gt;</span>0.430250, 0.148438, 0.284875, 0.189453<span style="color:blue;">&lt;/</span><span style="color:#a31515;">prefix4:Rectangle</span><span style="color:blue;">&gt;
              &lt;</span><span style="color:#a31515;">prefix5:PersonDisplayName </span><span style="color:red;">xmlns:prefix5</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/t/Region#</span>&quot;<span style="color:blue;">&gt;</span>Gwen De Roubaix<span style="color:blue;">&lt;/</span><span style="color:#a31515;">prefix5:PersonDisplayName</span><span style="color:blue;">&gt;
            &lt;/</span><span style="color:#a31515;">rdf:Description</span><span style="color:blue;">&gt;
          &lt;/</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
          &lt;</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
            &lt;</span><span style="color:#a31515;">rdf:Description </span><span style="color:red;">xmlns:rdf</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span>&quot;<span style="color:blue;">&gt;
              &lt;</span><span style="color:#a31515;">prefix6:PersonDisplayName </span><span style="color:red;">xmlns:prefix6</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/t/Region#</span>&quot;<span style="color:blue;">&gt;</span>Marcelle De Roubaix<span style="color:blue;">&lt;/</span><span style="color:#a31515;">prefix6:PersonDisplayName</span><span style="color:blue;">&gt;
            &lt;/</span><span style="color:#a31515;">rdf:Description</span><span style="color:blue;">&gt;
          &lt;/</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
        &lt;/</span><span style="color:#a31515;">rdf:Bag</span><span style="color:blue;">&gt;
      &lt;/</span><span style="color:#a31515;">prefix1:Regions</span><span style="color:blue;">&gt;
    &lt;/</span><span style="color:#a31515;">rdf:Description</span><span style="color:blue;">&gt;
  &lt;/</span><span style="color:#a31515;">prefix0:RegionInfo</span><span style="color:blue;">&gt;
&lt;/</span><span style="color:#a31515;">rdf:Description</span><span style="color:blue;">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>The following snippet shows the XMP meta-data that is stored if you tag one of your Messenger contacts as a People tag.</p>
<pre><span style="color:blue;">&lt;</span><span style="color:#a31515;">rdf:Description </span><span style="color:red;">rdf:about</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b</span>&quot; <span style="color:red;">xmlns:prefix0</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/</span>&quot;<span style="color:blue;">&gt;
  &lt;</span><span style="color:#a31515;">prefix0:RegionInfo</span><span style="color:blue;">&gt;
    &lt;</span><span style="color:#a31515;">rdf:Description </span><span style="color:red;">xmlns:rdf</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span>&quot;<span style="color:blue;">&gt;
      &lt;</span><span style="color:#a31515;">prefix1:Regions </span><span style="color:red;">xmlns:prefix1</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/t/RegionInfo#</span>&quot;<span style="color:blue;">&gt;
        &lt;</span><span style="color:#a31515;">rdf:Bag </span><span style="color:red;">xmlns:rdf</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span>&quot;<span style="color:blue;">&gt;
          &lt;</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
            &lt;</span><span style="color:#a31515;">rdf:Description </span><span style="color:red;">xmlns:rdf</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span>&quot;<span style="color:blue;">&gt;
              &lt;</span><span style="color:#a31515;">prefix2:PersonDisplayName </span><span style="color:red;">xmlns:prefix2</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/t/Region#</span>&quot;<span style="color:blue;">&gt;</span>gerhard<span style="color:blue;">&lt;/</span><span style="color:#a31515;">prefix2:PersonDisplayName</span><span style="color:blue;">&gt;
              &lt;</span><span style="color:#a31515;">prefix3:PersonEmailDigest </span><span style="color:red;">xmlns:prefix3</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/t/Region#</span>&quot;<span style="color:blue;">&gt;</span>89C386678731AB3D7DEE0E14E11E633387FBDBCD<span style="color:blue;">&lt;/</span><span style="color:#a31515;">prefix3:PersonEmailDigest</span><span style="color:blue;">&gt;
              &lt;</span><span style="color:#a31515;">prefix4:PersonLiveIdCID </span><span style="color:red;">xmlns:prefix4</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.2/t/Region#</span>&quot;<span style="color:blue;">&gt;</span>8765613456339678115<span style="color:blue;">&lt;/</span><span style="color:#a31515;">prefix4:PersonLiveIdCID</span><span style="color:blue;">&gt;
            &lt;/</span><span style="color:#a31515;">rdf:Description</span><span style="color:blue;">&gt;
          &lt;/</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
        &lt;/</span><span style="color:#a31515;">rdf:Bag</span><span style="color:blue;">&gt;
      &lt;/</span><span style="color:#a31515;">prefix1:Regions</span><span style="color:blue;">&gt;
    &lt;/</span><span style="color:#a31515;">rdf:Description</span><span style="color:blue;">&gt;
  &lt;/</span><span style="color:#a31515;">prefix0:RegionInfo</span><span style="color:blue;">&gt;
&lt;/</span><span style="color:#a31515;">rdf:Description</span><span style="color:blue;">&gt;
</span></pre>
<p><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a></p>
<p>And lastly a snippet showing how the regular tags which are indexed by Windows Search are stored, basically in a <strong>&lt;dc:subject&gt;</strong> element and in a <strong>&lt;MicrosoftPhoto:LastKeywordXMP&gt;</strong> element.</p>
<pre><span style="color:blue;">&lt;</span><span style="color:#a31515;">rdf:Description </span><span style="color:red;">xmlns:dc</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://purl.org/dc/elements/1.1/</span>&quot;<span style="color:blue;">&gt;
  &lt;</span><span style="color:#a31515;">dc:subject</span><span style="color:blue;">&gt;
    &lt;</span><span style="color:#a31515;">rdf:Bag </span><span style="color:red;">xmlns:rdf</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span>&quot;<span style="color:blue;">&gt;
      &lt;</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;</span>Party<span style="color:blue;">&lt;/</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
      &lt;</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;</span>People/Sarah McLeod<span style="color:blue;">&lt;/</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
    &lt;/</span><span style="color:#a31515;">rdf:Bag</span><span style="color:blue;">&gt;
  &lt;/</span><span style="color:#a31515;">dc:subject</span><span style="color:blue;">&gt;
&lt;/</span><span style="color:#a31515;">rdf:Description</span><span style="color:blue;">&gt;
&lt;</span><span style="color:#a31515;">rdf:Description </span><span style="color:red;">xmlns:MicrosoftPhoto</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://ns.microsoft.com/photo/1.0</span>&quot;<span style="color:blue;">&gt;
  &lt;</span><span style="color:#a31515;">MicrosoftPhoto:LastKeywordXMP</span><span style="color:blue;">&gt;
    &lt;</span><span style="color:#a31515;">rdf:Bag </span><span style="color:red;">xmlns:rdf</span><span style="color:blue;">=</span>&quot;<span style="color:blue;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span>&quot;<span style="color:blue;">&gt;
      &lt;</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;</span>Party<span style="color:blue;">&lt;/</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
      &lt;</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;</span>People/Sarah McLeod<span style="color:blue;">&lt;/</span><span style="color:#a31515;">rdf:li</span><span style="color:blue;">&gt;
    &lt;/</span><span style="color:#a31515;">rdf:Bag</span><span style="color:blue;">&gt;
  &lt;/</span><span style="color:#a31515;">MicrosoftPhoto:LastKeywordXMP</span><span style="color:blue;">&gt;
&lt;/</span><span style="color:#a31515;">rdf:Description</span><span style="color:blue;">&gt;
</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mcleodsean.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcleodsean.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mcleodsean.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcleodsean.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mcleodsean.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mcleodsean.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mcleodsean.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mcleodsean.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mcleodsean.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcleodsean.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mcleodsean.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcleodsean.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mcleodsean.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcleodsean.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=4&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mcleodsean.wordpress.com/2008/10/08/live-photo-gallery-people-tags/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e4ef5b9d25e31acdb13abdf82649531a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mcleodsean</media:title>
		</media:content>

		<media:content url="http://byfiles.storage.msn.com/y1p-8bk35LJ2umBLYu61ZVuXdldPJotXWQpQX4jnXdE__RRlAkZHjdiNyGcZXq6o98LWYk0IXSlv8w?PARTNER=WRITER" medium="image" />

		<media:content url="//blogs.msdn.com/blogfiles/pix/WindowsLiveWriter/Whypeopletags_D9DE/tag-flow_2.gif" medium="image" />
	</item>
		<item>
		<title>Bitmap snapshots of WPF Visuals</title>
		<link>http://mcleodsean.wordpress.com/2008/10/07/bitmap-snapshots-of-wpf-visuals/</link>
		<comments>http://mcleodsean.wordpress.com/2008/10/07/bitmap-snapshots-of-wpf-visuals/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 18:18:01 +0000</pubDate>
		<dc:creator>mcleodsean</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mcleodsean.wordpress.com/2008/10/07/bitmap-snapshots-of-wpf-visuals</guid>
		<description><![CDATA[Recently I needed to create a bitmap of some WPF controls to be used in another program. Doing a quick search turned up references to the RenderTargetBitmap class in WPF with sample code along the lines of: RenderTargetBitmap bmp = &#8230; <a href="http://mcleodsean.wordpress.com/2008/10/07/bitmap-snapshots-of-wpf-visuals/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=8&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!B5D803CBC24E8221!291" class="bvMsg">
<p>Recently I needed to create a bitmap of some WPF controls to be used in another program. Doing a quick search turned up references to the <strong>RenderTargetBitmap</strong> class in WPF with sample code along the lines of:</p>
<pre><span style="color:#2b91af;">RenderTargetBitmap </span>bmp = <span style="color:blue;">new </span><span style="color:#2b91af;">RenderTargetBitmap</span>((<span style="color:blue;">int</span>)element.Width, (<span style="color:blue;">int</span>)element.Height, 96, 96, <span style="color:#2b91af;">PixelFormats</span>.Pbgra32);
bmp.Render(element);
</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>However if the WPF control had a <strong>margin</strong> then the rendered bitmap had transparent pixels for the margin area. As an example here is a button inside a <strong>StackPanel</strong> with a <strong>margin</strong> applied.</p>
<p><a href="http://byfiles.storage.msn.com/y1pesWDfcrKnXi9mfs4D4RLvoQTpuTiUxotB0RZbtljNkZDjtME-GUXG3zGMehEawF1?PARTNER=WRITER"><img border="0" src="http://byfiles.storage.msn.com/y1p5dtyWvttZU36S-Rz-AN4mu1aNfMJFsNGQtHGrj5N2I9lorL0iP2A7w0hQS93lblDSOjPHFuAmPU?PARTNER=WRITER" /></a>  </p>
<p>And the following is the bitmap that is created via the sample code above:</p>
<p><a href="http://byfiles.storage.msn.com/y1pHKPHltRNqPiQeeAPc93W_vPBN6RAEkfwvY3YVbEl1EEfSDb0vqtCD3SRd_5epu_nzfmUNyFaIKI?PARTNER=WRITER"><img border="0" src="http://byfiles.storage.msn.com/y1pBCYlBVU4YhfPM0LE5eJWgHuBQtcaRbsGxz_mMZdeVa3fakNwYHNKYAMRJu1qmV14HpQ3cErF2LQ?PARTNER=WRITER" /></a> </p>
<p>Doing some more searching turned up the following code which creates a <strong>VisualBrush</strong> from the target <strong>Visual</strong> and then renders that into a <strong>DrawingVisual</strong> and then finally uses <strong>RenderTargetBitmap</strong> to take a snapshot of the <strong>DrawingVisual</strong>. Using this approach the <strong>margins</strong> are ignored and the bitmap only consists of the target WPF control/visual as shown below:</p>
<p><a href="http://byfiles.storage.msn.com/y1pQQrwRkIS3gTGlr-ygdCcukSSzYvl_cMUkePxRnn7r8_ACIydbpNoSvlcsHhtP4QR2tuL7hiO4rc?PARTNER=WRITER"><img border="0" src="http://byfiles.storage.msn.com/y1pPqGcd1yTYlbMHoh-y6PW26QEwnmdY9afLu8Lx7_hiTl0bVKWy5KS1bBbxULQqp6fWVMxMov-VCQ?PARTNER=WRITER" /></a> </p>
<pre><span style="color:blue;">void </span>CreateBitmapFromVisual(<span style="color:#2b91af;">Visual </span>target, <span style="color:blue;">string </span>filename)
&#123;
    <span style="color:blue;">if </span>(target == <span style="color:blue;">null</span>)
        <span style="color:blue;">return</span>; 

    <span style="color:#2b91af;">Rect </span>bounds = <span style="color:#2b91af;">VisualTreeHelper</span>.GetDescendantBounds(target);

    <span style="color:#2b91af;">RenderTargetBitmap </span>rtb = <span style="color:blue;">new </span><span style="color:#2b91af;">RenderTargetBitmap</span>((<span style="color:#2b91af;">Int32</span>)bounds.Width, (<span style="color:#2b91af;">Int32</span>)bounds.Height, 96, 96, <span style="color:#2b91af;">PixelFormats</span>.Pbgra32); 

    <span style="color:#2b91af;">DrawingVisual </span>dv = <span style="color:blue;">new </span><span style="color:#2b91af;">DrawingVisual</span>(); 

    <span style="color:blue;">using </span>(<span style="color:#2b91af;">DrawingContext </span>dc = dv.RenderOpen())
    &#123;
        <span style="color:#2b91af;">VisualBrush </span>vb = <span style="color:blue;">new </span><span style="color:#2b91af;">VisualBrush</span>(target);
        dc.DrawRectangle(vb, <span style="color:blue;">null</span>, <span style="color:blue;">new </span><span style="color:#2b91af;">Rect</span>(<span style="color:blue;">new </span><span style="color:#2b91af;">Point</span>(), bounds.Size));
    &#125; 

    rtb.Render(dv);

    <span style="color:#2b91af;">PngBitmapEncoder </span>png = <span style="color:blue;">new </span><span style="color:#2b91af;">PngBitmapEncoder</span>();

    png.Frames.Add(<span style="color:#2b91af;">BitmapFrame</span>.Create(rtb));

    <span style="color:blue;">using </span>(<span style="color:#2b91af;">Stream </span>stm = <span style="color:#2b91af;">File</span>.Create(filename))
    &#123;
        png.Save(stm);
    &#125;
&#125;
</pre>
<p><a href="http://11011.net/software/vspaste"></a></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mcleodsean.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcleodsean.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mcleodsean.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcleodsean.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mcleodsean.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mcleodsean.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mcleodsean.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mcleodsean.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mcleodsean.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcleodsean.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mcleodsean.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcleodsean.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mcleodsean.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcleodsean.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=8&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mcleodsean.wordpress.com/2008/10/07/bitmap-snapshots-of-wpf-visuals/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e4ef5b9d25e31acdb13abdf82649531a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mcleodsean</media:title>
		</media:content>

		<media:content url="http://byfiles.storage.msn.com/y1p5dtyWvttZU36S-Rz-AN4mu1aNfMJFsNGQtHGrj5N2I9lorL0iP2A7w0hQS93lblDSOjPHFuAmPU?PARTNER=WRITER" medium="image" />

		<media:content url="http://byfiles.storage.msn.com/y1pBCYlBVU4YhfPM0LE5eJWgHuBQtcaRbsGxz_mMZdeVa3fakNwYHNKYAMRJu1qmV14HpQ3cErF2LQ?PARTNER=WRITER" medium="image" />

		<media:content url="http://byfiles.storage.msn.com/y1pPqGcd1yTYlbMHoh-y6PW26QEwnmdY9afLu8Lx7_hiTl0bVKWy5KS1bBbxULQqp6fWVMxMov-VCQ?PARTNER=WRITER" medium="image" />
	</item>
		<item>
		<title>Geeks and Fast Jets</title>
		<link>http://mcleodsean.wordpress.com/2008/06/08/geeks-and-fast-jets/</link>
		<comments>http://mcleodsean.wordpress.com/2008/06/08/geeks-and-fast-jets/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 21:45:36 +0000</pubDate>
		<dc:creator>mcleodsean</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mcleodsean.wordpress.com/2008/06/08/geeks-and-fast-jets</guid>
		<description><![CDATA[I was approached recently to help develop some Flight Test Instrumentation (FTI) for a Hawker Hunter jet to be used during a test pilot course involving high angle of attack manoeuvres and spinning. The following data needed to be recorded: &#8230; <a href="http://mcleodsean.wordpress.com/2008/06/08/geeks-and-fast-jets/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=7&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!B5D803CBC24E8221!264" class="bvMsg">
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p4N2AHwbtmRe4wxzyrOfJli5Gnvsr_1aSsj7Zrf-OvPGbH0zIuQTr0cVKcqd7xZbk9xaYxia4jeYadPA4Y2Iugg?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNopM9mflSnOBEY-0ItVBsdvH9IG9PrZnkkLNkOqrrGrrLQAZ5DOSsaYfNJIVj7Dq1Hw9GK8g943-wUAqxG5RLNwe?PARTNER=WRITER" border="0" /></a> </p>
<p>I was approached recently to help develop some Flight Test Instrumentation (FTI) for a Hawker Hunter jet to be used during a test pilot course involving high angle of attack manoeuvres and spinning.</p>
<p>The following data needed to be recorded:</p>
<ul>
<li>Angle of Attack (AoA)
<li>Sideslip angle
<li>Attitude (pitch, roll and heading)
<li>Indicated airspeed and altitude
<li>Stick and rudder position
<li>GPS
<li>Video</li>
</li>
</ul>
<p>In addition to recording all the data listed above they also wanted to display a subset of the data in the cockpit as an aid for spin recovery.</p>
<h4><strong>Sensors</strong></h4>
<p><strong>AoA and sideslip &#8211; </strong>basically small weather vanes that act as potentiometers were ordered and then physically mounted on a pitot/static boom which was then mounted on the front of the Hawker Hunter&#8217;s nose. One minor issue was finding a route for the wires from the vanes to the PC in the avionics bay that didn&#8217;t have to pass through the cockpit&#8217;s pressure capsule.</p>
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoqXv7YcIF2p8x9_tgfoQqynMHYEMFJ-8R4ork5UD9xAHYteXol0N6Wj-hk_HC1KmucdECjjfeJ94ZtRbc707zN4?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoqhxXUpTUdKHsCYOvbgbCtvFwSxNNxlza7Ig4dWxzVDg4jKPS1Qb-ruISh-OxySCzRO9V2dZEZdWywkgGhrcUoK?PARTNER=WRITER" border="0" /></a> </p>
<p><strong>Attitude</strong> &#8211; ordered an Attitude and Heading Reference System (AHRS) from Crossbow that uses solid state sensors and outputs at 25Hz. Ideally the AHRS needs to be mounted as close as possible to the centre of gravity. Luckily the avionics bay is fairly close to the centre of gravity, just slightly forward but there was space to mount it quite easily and definitely on the centre line of the aircraft.</p>
<p><strong>GPS </strong>- the Crossbow AHRS also includes a built-in GPS which it uses for aiding it&#8217;s attitude solution and also outputs standard NMEA data via a second serial port. Mounted the GPS antenna on the spine of the aircraft behind the cockpit with a fairly short vertical run for the GPS antenna cable to the avionics bay.</p>
<p><strong>Air data</strong> &#8211; used an existing unit we had from MGL Avionics that we had been using on the Ikarus C-42. Wasn&#8217;t ideal since it&#8217;s maximum indicated airspeed is 217kt which means it was maxed out a lot of the time. However the stall speed was generally below 217kt so it did provide useful data during the stall and spin.</p>
<table cellspacing="0" cellpadding="2" width="811" border="0">
<tbody>
<tr>
<td valign="top" width="404"><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNopT0Av7ruQM2PDVSm-U0msHfbssREY0LtAI4WKC9dOWiuYioKHwoJYm1RKShrc6DCIEr5H4E5uosbyKrFxXaeju?PARTNER=WRITER"><img src="http://by1.storage.msn.com/y1p3wBjJkX0LX6BEXM1Tc6inorg2nXEPFL-Xj89Xw8uBq4-f6amhlSPxaeugLK9IEWXIoB3o4-lEjxcJTx8JgIAxAaCb5MJsZA4?PARTNER=WRITER" border="0" /></a> </td>
<td valign="top" width="405"><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoqagCO3733Y6Bw0dyWWzp8J3FArZj3L-a1WU9Ek-vccTYW2uljUZ6NW7onIFv4LXArs_hjb7ytNc-Zyfpr4gPzT?PARTNER=WRITER"><img src="http://by1.storage.msn.com/y1p3wBjJkX0LX5ivonPDz_8ydPg6W6aogr9Uc0grE9xfAbKrgjb8Zreqm2WW7UiodITvTrEABC2-OiJlsgwhlLsbirrdoYRoE0v?PARTNER=WRITER" border="0" /></a> </td>
</tr>
</tbody>
</table>
<p><strong>Control positions</strong> &#8211; we ordered 3 linear transducers which basically have a shaft that moves in and out and it acts as a potentiometer. They were mounted and attached to the 3 control rods that pass through the spine of the aircraft behind the cockpit. It was again a fairly short straight drop down into the avionics for the wires.</p>
<h4>PC</h4>
<p>We needed a PC on fairly short notice that was fairly ruggedized in terms of handling vibration and also fairly cold operating temperatures since it was going to be mounted in an unpressurized and unheated avionics bay and the spins would normally be starting at 35,000ft.</p>
<p>The only real change we made to the embedded PC we found was to replace the hard drive with a CF card and to run everything off the CF card. In addition to the high dynamics during the spin plus regular vibration causing problems for a normal hard drive most hard drives aren&#8217;t rated to operate above 10,000ft pressure altitude anyway.</p>
<p>We used XP Embedded and it&#8217;s Enhanced Writer Filter (EWF) to turn the system partition into a read-only volume so it couldn&#8217;t be corrupted during power down since the power was simply going to switched off with no proper shutdown. The data from the sensors was logged to a separate partition on the CF card.</p>
<p>The embedded PC also came with 4 onboard RS232 ports which we needed in order to connect to all the RS232 based sensors (AHRS, GPS, air data). To read the analog data from the AoA, sideslip and control position sensors we installed an A/D card into the single PCI slot.</p>
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoq1XSafnZCI1mt4weqjG1yorJkwEzzqKgIv3yE9tZ0Z9SJ7cTd9KIBy_nxosMWlUCZb2MhjVfk-kZJ4FrP11odn?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoq8tkvUBVrJdENudRSPesLXf0cMGjIU211OEmlv2ETM634ZNoYeZsAkcgI7W4EBYpNKZXBr74p2Xvd9kykMxQua?PARTNER=WRITER" border="0" /></a> </p>
<h4>Display</h4>
<p>For the in cockpit display of &#8216;spinning panel&#8217; which mainly consisted of displaying the AoA and sideslip angles plus the control positions we initially developed a Pocket PC application which was connected to the embedded PC via an RS232 connection. However after some concerns regarding it&#8217;s sunlight readability and some concerns about physically mounting it in the cockpit the Pocket PC was only used on 2 initial test flights. </p>
<p>We then bought a 6&quot; LCD which was rated at 1200nits for sunlight readability and removed the gunsight to mount the LCD in it&#8217;s place on the student&#8217;s side of the cockpit. The software for the &#8216;spin panel&#8217; was then modified to run on the embedded PC that we were using for data capture and to connect it to the LCD using a VGA connection.</p>
<p>The one issue or complication with the &#8216;spin panel&#8217; display being mounted in the cockpit was the need to have wires passing through the pressure bulkhead from the avionics bay into the cockpit. Special bulkhead connectors have to be used in order to pass the wires through without causing a pressure leak.</p>
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNorZB0rfQ1LNFma2MPcoLD32R-Ph_7wR6pCEBnwfSMdZjzmRQqnMdmaogNI71t6Os8GS9PLbDcjq1R0R9bcobiik?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNooHsBR_XI33Jftoployzx17KdpjB3Hs7NqrtRWdd9fCEZ_7Z-yFYfneXG-20SfIMT6Jxuhjv3ILgZsLe2y-Su32?PARTNER=WRITER" border="0" /></a> </p>
<table cellspacing="0" cellpadding="2" width="810" border="0">
<tbody>
<tr>
<td valign="top" width="405"><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNopyXBk150bJUo4YGZlm7upBRxf6017j3sLmjeoPic6zriAVDjfIu5ef7zjK0hGV96Pu-uI4jTLY6XvSJiocRvA3?PARTNER=WRITER"><img src="http://by1.storage.msn.com/y1p3wBjJkX0LX7UyGzNgV_1VnCLgiHmzZts0x7Ec7snMSTSM9nuVCvDgeAeLMmthhhaCp0OTrWRx_xZ-wUI_p0WOs07B0MDLsDR?PARTNER=WRITER" border="0" /></a> </td>
<td valign="top" width="405"><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNop78KejByfVvY728a_PhX4U3WbhjlAiVTCc-0GAkD_SZtuiam-oV5fXCSk8iZxFx-xwA17rTKDgsHQNlI0lvMWc?PARTNER=WRITER"><img src="http://by1.storage.msn.com/y1p3wBjJkX0LX7243w9iFGr3Z5psgbjfkrj3N5wUFiuUe2iIxfQIf97XWXKmIvoRRbkfal-3FT4nWdfC5ZRHYN6_78uU4ZnTUXU?PARTNER=WRITER" border="0" /></a> </td>
</tr>
</tbody>
</table>
<h4>Video</h4>
<p>An SD based video camera recorder with a remote lens was mounted in the cockpit and used to capture video footage of the flight. </p>
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p4N2AHwbtmRcwKRgM0kf5iRl2yuoWXENjXfyfdRrJNw62oi9bj08J0t9aw8hPQt2iRwpghHJmvvqzo9zcKbXLLw?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoqE6Zo9PX5zwKTTkRQuAerwbYseHwU1qUZoMQrqfJGpptTS_Asa_Sz5jcSxD1hY2BCXOAByYi9ffvnR84r66g6Q?PARTNER=WRITER" border="0" /></a> </p>
<h4>Playback</h4>
<p>The last part of the project involved the development of a playback system to take the captured data from the sensors and from the video camera and allow the data to be played back and analysed by the pilots and flight test engineers.</p>
<p>The attitude data and air data are displayed as part of a standard Primary Flight Display (PFD). The spin panel display that is used in the cockpit is also rendered plus playback of the video. Lastly we have line graphs displaying the current, past and future data for each of the recorded parameters.</p>
<p>All of the data including the video is synchronised during playback and can be paused, seeked and played back at different speeds, i.e. various slow motion and fast motion playback speeds. The playback application is a Windows Presentation Foundation (WPF) application and makes heavy use of the animation framework within WPF.</p>
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoqs1V1iPdnRd8Oyrc3dwzlY0Sw8-ks3k5hw-ibHvg6hmgX645C69M7ki7XQBxXlpYTPesq8EQ1xgmm8ga8DRL78?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNorJS8KCQzxQ4bFbAoK3-QyRatg-wID43vDCDoBwG6zPj6V5F1yXZxpBSOUjqZYeKrjLqtklZGg1RxKRhmtdm3C1?PARTNER=WRITER" border="0" /></a> </p>
<p>And finally getting ready for the last of the 34 sorties on a glorious Cape Town winter&#8217;s day.</p>
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p4N2AHwbtmRcaVqMw21kcMZaytvT0QAxQMY0pt-IT5n8lG-Ago4ZF_rlkkqYL9arWNmJKnTdU2PxHX5qXR1xmaQ?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p4N2AHwbtmRepsiVJP8w7bggxYsGtD9SFjwgfMvhVJWzSmxex63GvO1ia45NH6G_blFb6O2nvZezLh4QURDFzhA?PARTNER=WRITER" border="0" /></a></p>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mcleodsean.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mcleodsean.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mcleodsean.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcleodsean.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mcleodsean.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcleodsean.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mcleodsean.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mcleodsean.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mcleodsean.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mcleodsean.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mcleodsean.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcleodsean.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mcleodsean.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcleodsean.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mcleodsean.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcleodsean.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=7&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mcleodsean.wordpress.com/2008/06/08/geeks-and-fast-jets/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e4ef5b9d25e31acdb13abdf82649531a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mcleodsean</media:title>
		</media:content>

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNopM9mflSnOBEY-0ItVBsdvH9IG9PrZnkkLNkOqrrGrrLQAZ5DOSsaYfNJIVj7Dq1Hw9GK8g943-wUAqxG5RLNwe?PARTNER=WRITER" medium="image" />

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoqhxXUpTUdKHsCYOvbgbCtvFwSxNNxlza7Ig4dWxzVDg4jKPS1Qb-ruISh-OxySCzRO9V2dZEZdWywkgGhrcUoK?PARTNER=WRITER" medium="image" />

		<media:content url="http://by1.storage.msn.com/y1p3wBjJkX0LX6BEXM1Tc6inorg2nXEPFL-Xj89Xw8uBq4-f6amhlSPxaeugLK9IEWXIoB3o4-lEjxcJTx8JgIAxAaCb5MJsZA4?PARTNER=WRITER" medium="image" />

		<media:content url="http://by1.storage.msn.com/y1p3wBjJkX0LX5ivonPDz_8ydPg6W6aogr9Uc0grE9xfAbKrgjb8Zreqm2WW7UiodITvTrEABC2-OiJlsgwhlLsbirrdoYRoE0v?PARTNER=WRITER" medium="image" />

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoq8tkvUBVrJdENudRSPesLXf0cMGjIU211OEmlv2ETM634ZNoYeZsAkcgI7W4EBYpNKZXBr74p2Xvd9kykMxQua?PARTNER=WRITER" medium="image" />

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNooHsBR_XI33Jftoployzx17KdpjB3Hs7NqrtRWdd9fCEZ_7Z-yFYfneXG-20SfIMT6Jxuhjv3ILgZsLe2y-Su32?PARTNER=WRITER" medium="image" />

		<media:content url="http://by1.storage.msn.com/y1p3wBjJkX0LX7UyGzNgV_1VnCLgiHmzZts0x7Ec7snMSTSM9nuVCvDgeAeLMmthhhaCp0OTrWRx_xZ-wUI_p0WOs07B0MDLsDR?PARTNER=WRITER" medium="image" />

		<media:content url="http://by1.storage.msn.com/y1p3wBjJkX0LX7243w9iFGr3Z5psgbjfkrj3N5wUFiuUe2iIxfQIf97XWXKmIvoRRbkfal-3FT4nWdfC5ZRHYN6_78uU4ZnTUXU?PARTNER=WRITER" medium="image" />

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoqE6Zo9PX5zwKTTkRQuAerwbYseHwU1qUZoMQrqfJGpptTS_Asa_Sz5jcSxD1hY2BCXOAByYi9ffvnR84r66g6Q?PARTNER=WRITER" medium="image" />

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNorJS8KCQzxQ4bFbAoK3-QyRatg-wID43vDCDoBwG6zPj6V5F1yXZxpBSOUjqZYeKrjLqtklZGg1RxKRhmtdm3C1?PARTNER=WRITER" medium="image" />

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p4N2AHwbtmRepsiVJP8w7bggxYsGtD9SFjwgfMvhVJWzSmxex63GvO1ia45NH6G_blFb6O2nvZezLh4QURDFzhA?PARTNER=WRITER" medium="image" />
	</item>
		<item>
		<title>MapReduce implementation using C# generics</title>
		<link>http://mcleodsean.wordpress.com/2008/01/23/mapreduce-implementation-using-c-generics/</link>
		<comments>http://mcleodsean.wordpress.com/2008/01/23/mapreduce-implementation-using-c-generics/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 20:25:26 +0000</pubDate>
		<dc:creator>mcleodsean</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mcleodsean.wordpress.com/2008/01/23/mapreduce-implementation-using-c-generics</guid>
		<description><![CDATA[I came across the Google paper on MapReduce again the other day and decided to try a simple implementation using C# generics allowing you to specify specific types for the keys and values as opposed to being forced to use &#8230; <a href="http://mcleodsean.wordpress.com/2008/01/23/mapreduce-implementation-using-c-generics/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=12&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!B5D803CBC24E8221!233" class="bvMsg">
<p>I came across the Google paper on <a href="http://www.usenix.org/events/osdi04/tech/full_papers/dean/dean.pdf">MapReduce</a> again the other day and decided to try a simple implementation using C# generics allowing you to specify specific types for the keys and values as opposed to being forced to use strings for all keys and values.</p>
<p>The initial version doesn&#8217;t include any automatic parallelism across multiple CPUs or clusters of machines.</p>
<p>The core implementation below is only about 50-60 lines of code. I&#8217;ve also included sample map and reduce functions making use of this library and mirroring some of the sample applications mentioned in the Google paper.</p>
<div style="display:inline;float:none;margin:0;padding:0;">
<pre style="background-color:White;">
<div><span style="color:#0000FF;">using</span><span style="color:#000000;"> System;
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> System.Collections.Generic;

</span><span style="color:#008000;">//</span><span style="color:#008000;"> Common shortcut where both keys and both values are strings</span><span style="color:#008000;">
</span><span style="color:#0000FF;">using</span><span style="color:#000000;"> MapReduceAllStrings </span><span style="color:#000000;">=</span><span style="color:#000000;"> MapReduce.MapReduce</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">;

</span><span style="color:#0000FF;">namespace</span><span style="color:#000000;"> MapReduce
&#123;

</span><span style="color:#008000;">//</span><span style="color:#008000;"> Map delegate</span><span style="color:#008000;">
</span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">delegate</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2,V2</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> Map</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K,V,K2,V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K,V</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> input);

</span><span style="color:#008000;">//</span><span style="color:#008000;"> Reduce delegate</span><span style="color:#008000;">
</span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">delegate</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> Reduce</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2,V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> input);

</span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">class</span><span style="color:#000000;"> MapReduce</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K, V, K2, V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">
&#123;
    </span><span style="color:#008000;">//</span><span style="color:#008000;"> Process input data using user supplied map and reduce delegates</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;&gt;&gt;</span><span style="color:#000000;"> Process(</span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K,V</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> input, Map</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K,V,K2,V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> map, Reduce</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2,V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> reduce)
    &#123;
        </span><span style="color:#008000;">//</span><span style="color:#008000;"> Use dictionary to store intermdiate data - (k2, list(v2))</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#2B91AF;">Dictionary</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> intermediateData </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">Dictionary</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;">();

        </span><span style="color:#008000;">//</span><span style="color:#008000;"> Perform map over all input</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K, V</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> inputItem </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> input)
        &#123;
            </span><span style="color:#008000;">//</span><span style="color:#008000;"> Add map results to intermediate dictionary</span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;">(</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2,V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> mapOutput </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> map(inputItem))
            &#123;
                </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> enumerableList;

                </span><span style="color:#008000;">//</span><span style="color:#008000;"> If k2 already exists in dictionary then just add this v2 to it's list(v2)</span><span style="color:#008000;">
</span><span style="color:#000000;">                </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (intermediateData.TryGetValue(mapOutput.Key, </span><span style="color:#0000FF;">out</span><span style="color:#000000;"> enumerableList))
                &#123;
                    </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> v2List </span><span style="color:#000000;">=</span><span style="color:#000000;"> (</span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">)enumerableList;
                    v2List.Add(mapOutput.Value);
                &#125;
                </span><span style="color:#0000FF;">else</span><span style="color:#000000;">
                &#123;
                    </span><span style="color:#008000;">//</span><span style="color:#008000;"> Add new k2 to dictionary and create initial list(v2) with this v2 value</span><span style="color:#008000;">
</span><span style="color:#000000;">                    </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> v2List </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">();
                    v2List.Add(mapOutput.Value);
                    intermediateData.Add(mapOutput.Key, v2List);
                &#125;
            &#125;
        &#125;

        </span><span style="color:#008000;">//</span><span style="color:#008000;"> Setup final output data structure</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;&gt;&gt;</span><span style="color:#000000;"> finalOutput </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2,</span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;&gt;&gt;</span><span style="color:#000000;">();

        </span><span style="color:#008000;">//</span><span style="color:#008000;"> Perform reduce over all intermediate data</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> intermediateVal </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> intermediateData)
        &#123;
            </span><span style="color:#008000;">//</span><span style="color:#008000;"> Setup final output value, i.e. k2 and an empty list(v2) in preparation for reduce operation</span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> outputVal </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;">(intermediateVal.Key, </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">());
            finalOutput.Add(outputVal);

            </span><span style="color:#008000;">//</span><span style="color:#008000;"> Perform reduce over all intermediate data</span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (V2 val </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> reduce(intermediateVal))
            &#123;
                </span><span style="color:#008000;">//</span><span style="color:#008000;"> Add resultant values from reduce to final output list(v2)</span><span style="color:#008000;">
</span><span style="color:#000000;">                ((</span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">)(outputVal.Value)).Add(val);
            &#125;
        &#125;

        </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> finalOutput;
    &#125;

    </span><span style="color:#0000FF;">public</span><span style="color:#000000;"> </span><span style="color:#0000FF;">static</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> IdentityReduce(</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K2, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> input)
    &#123;
        </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> output </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V2</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">();

        </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (V2 val </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> input.Value)
        &#123;
            output.Add(val);
        &#125;

        </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> output;
    &#125;
&#125;

</span><span style="color:#0000FF;">class</span><span style="color:#000000;"> MapReduceTest
&#123;
    </span><span style="color:#0000FF;">static</span><span style="color:#000000;"> </span><span style="color:#0000FF;">void</span><span style="color:#000000;"> Main(</span><span style="color:#0000FF;">string</span><span style="color:#000000;">[] args)
    &#123;
        WordCountTest();

        ReverseWebLinkGraph();
    &#125;

    </span><span style="color:#808080;">//////////////////</span><span style="color:#008000;">/ - WordCount test</span><span style="color:#808080;">
</span><span style="color:#000000;">
    </span><span style="color:#0000FF;">static</span><span style="color:#000000;"> </span><span style="color:#0000FF;">void</span><span style="color:#000000;"> WordCountTest()
    &#123;
        </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> input </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;">
            &#123;
                </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">a</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">, </span><span style="color:#000000;">&quot;</span><span style="color:#000000;">the quick brown fox jumps over the log</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">),
                </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">b</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">, </span><span style="color:#000000;">&quot;</span><span style="color:#000000;">while the mokey jumps on the fox</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">),
                </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">c</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">, </span><span style="color:#000000;">&quot;</span><span style="color:#000000;">and the cow jumps over the moon</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">)
            &#125;;

        MapReduce</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> WordCount </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> MapReduce</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">();

        </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;">(</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> val </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> WordCount.Process(input, WordCountMap, WordCountReduce))
        &#123;
            PrintResult</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(val);
        &#125;
    &#125;

    </span><span style="color:#0000FF;">static</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> WordCountMap(</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> input)
    &#123;
        </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> output </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;">();

        </span><span style="color:#0000FF;">string</span><span style="color:#000000;">[] words </span><span style="color:#000000;">=</span><span style="color:#000000;"> input.Value.Split(</span><span style="color:#000000;">'</span><span style="color:#000000;"> </span><span style="color:#000000;">'</span><span style="color:#000000;">);

        </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#0000FF;">string</span><span style="color:#000000;"> word </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> words)
        &#123;
            output.Add(</span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(word, </span><span style="color:#000000;">1</span><span style="color:#000000;">));
        &#125;

        </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> output;
    &#125;

    </span><span style="color:#0000FF;">static</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> WordCountReduce(</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> input)
    &#123;
        </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> output </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">int</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">();

        </span><span style="color:#0000FF;">int</span><span style="color:#000000;"> total </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">0</span><span style="color:#000000;">;
        </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#0000FF;">int</span><span style="color:#000000;"> wc </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> input.Value)
        &#123;
            total </span><span style="color:#000000;">+=</span><span style="color:#000000;"> wc;
        &#125;

        output.Add(total);

        </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> output;
    &#125;

    </span><span style="color:#808080;">//////////////////</span><span style="color:#008000;">/ - Reverse web link graph test</span><span style="color:#808080;">
</span><span style="color:#000000;">
    </span><span style="color:#0000FF;">static</span><span style="color:#000000;"> </span><span style="color:#0000FF;">void</span><span style="color:#000000;"> ReverseWebLinkGraph()
    &#123;
        </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> input </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;">
            &#123;
                </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">abc.com</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">, </span><span style="color:#000000;">&quot;</span><span style="color:#000000;">cnn.com ibm.com dti.com</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">),
                </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">cnn.com</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">, </span><span style="color:#000000;">&quot;</span><span style="color:#000000;">ms.com slashdot.org abc.com iol.com dti.com</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">),
                </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">,</span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">dti.com</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">, </span><span style="color:#000000;">&quot;</span><span style="color:#000000;">ibm.com avd.com abc.com</span><span style="color:#000000;">&quot;</span><span style="color:#000000;">)
            &#125;;

        MapReduceAllStrings ReverseWebLinks </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> MapReduceAllStrings();

        </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> val </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> ReverseWebLinks.Process(input, ReverseWebLinksMap, MapReduceAllStrings.IdentityReduce))
        &#123;
            PrintResult</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(val);
        &#125;
    &#125;

    </span><span style="color:#0000FF;">static</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> ReverseWebLinksMap(</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;"> input)
    &#123;
        </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> output </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">List</span><span style="color:#000000;">&lt;</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;">();

        </span><span style="color:#0000FF;">string</span><span style="color:#000000;">[] targets </span><span style="color:#000000;">=</span><span style="color:#000000;"> input.Value.Split(</span><span style="color:#000000;">'</span><span style="color:#000000;"> </span><span style="color:#000000;">'</span><span style="color:#000000;">);

        </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#0000FF;">string</span><span style="color:#000000;"> target </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> targets)
        &#123;
            output.Add(</span><span style="color:#0000FF;">new</span><span style="color:#000000;"> </span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#0000FF;">string</span><span style="color:#000000;">, </span><span style="color:#0000FF;">string</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(target, input.Key));
        &#125;

        </span><span style="color:#0000FF;">return</span><span style="color:#000000;"> output;
    &#125;

    </span><span style="color:#808080;">//////////////////</span><span style="color:#008000;">/ - Helper</span><span style="color:#808080;">
</span><span style="color:#000000;">
    </span><span style="color:#0000FF;">static</span><span style="color:#000000;"> </span><span style="color:#0000FF;">void</span><span style="color:#000000;"> PrintResult</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K,V</span><span style="color:#000000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#2B91AF;">KeyValuePair</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">K, </span><span style="color:#2B91AF;">IEnumerable</span><span style="color:#000000;">&lt;</span><span style="color:#000000;">V</span><span style="color:#000000;">&gt;&gt;</span><span style="color:#000000;"> result)
    &#123;
        </span><span style="color:#2B91AF;">Console</span><span style="color:#000000;">.Write(result.Key.ToString());
        </span><span style="color:#2B91AF;">Console</span><span style="color:#000000;">.Write(</span><span style="color:#000000;">&quot;</span><span style="color:#000000;"> - </span><span style="color:#000000;">&quot;</span><span style="color:#000000;">);
        </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;">(V val </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> result.Value)
        &#123;
            </span><span style="color:#2B91AF;">Console</span><span style="color:#000000;">.Write(val.ToString());
            </span><span style="color:#2B91AF;">Console</span><span style="color:#000000;">.Write(</span><span style="color:#000000;">&quot;</span><span style="color:#000000;"> </span><span style="color:#000000;">&quot;</span><span style="color:#000000;">);
        &#125;
        </span><span style="color:#2B91AF;">Console</span><span style="color:#000000;">.WriteLine(</span><span style="color:#000000;">&quot;&quot;</span><span style="color:#000000;">);
    &#125;

&#125;

&#125;

</span></div>
</pre>
</div>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mcleodsean.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mcleodsean.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mcleodsean.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcleodsean.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mcleodsean.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcleodsean.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mcleodsean.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mcleodsean.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mcleodsean.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mcleodsean.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mcleodsean.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcleodsean.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mcleodsean.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcleodsean.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mcleodsean.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcleodsean.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=12&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mcleodsean.wordpress.com/2008/01/23/mapreduce-implementation-using-c-generics/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e4ef5b9d25e31acdb13abdf82649531a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mcleodsean</media:title>
		</media:content>
	</item>
		<item>
		<title>High Dynamic Range (HDR) Photo Test</title>
		<link>http://mcleodsean.wordpress.com/2007/12/31/high-dynamic-range-hdr-photo-test/</link>
		<comments>http://mcleodsean.wordpress.com/2007/12/31/high-dynamic-range-hdr-photo-test/#comments</comments>
		<pubDate>Mon, 31 Dec 2007 13:31:32 +0000</pubDate>
		<dc:creator>mcleodsean</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mcleodsean.wordpress.com/2007/12/31/high-dynamic-range-hdr-photo-test</guid>
		<description><![CDATA[I started playing around with generating HDR photos. Here is one of my first attempts using our Pentax DSLR. I&#8217;m using a trial version of Photomatix to perform the HDR processing and tone mapping which is why you&#8217;ll notice their &#8230; <a href="http://mcleodsean.wordpress.com/2007/12/31/high-dynamic-range-hdr-photo-test/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=16&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!B5D803CBC24E8221!227" class="bvMsg">
<p>I started playing around with generating HDR photos. Here is one of my first attempts using our Pentax DSLR.</p>
<p>I&#8217;m using a trial version of Photomatix to perform the HDR processing and tone mapping which is why you&#8217;ll notice their watermark in the HDR image below. </p>
<p>I set the auto-bracketing option on the camera to shoot a normal exposure, a -2 stop exposure and a +2 stop exposure. </p>
<p>This is the resultant HDR image.</p>
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoo-JPfoBQothMHJI4Ae2sL3nRetDA8eKlFlhIcJX-3Z1zOlicmSabL1D-Zrljx6LqfW81AHsSWZ1fwNKYJARM4N?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNopuTSeO9g4Rytt_MRwnEWcVhJtPIEL6XyONAN0yG1pohKiHnOE_bzA9mkqF9ekmbZirVEtaadixJbNeB59bOgbf?PARTNER=WRITER" border="0" /></a> </p>
<p>Next up is the camera&#8217;s normal exposure, so effectively what you would end up with if you weren&#8217;t doing any HDR processing. Camera selected f/9.5 and 1/60 sec.</p>
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNooG8y1moOzAiG9Jj1LDpHN9rr9ZXyg-6l4dbwf8NRP9axaKIza6hKit0m7KN0qIcsW_Px89dHOUQW9sRnX90zVW?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNor7eV9HbRKyL4HhkdBp7FnVQZW07mRiZl8bmihWrX-CmDfDyAWf-nL3Z5-IY9ocWKpdo4Y-8D4wXoIYF0nt3I7C?PARTNER=WRITER" border="0" /></a> </p>
<p>Now the -2 stop image, so f/9.5 1/250 sec.</p>
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNopE8F-o1dSm8VqnLcO4wrddnPefM2KrNvf22Z0D1JhH-KWvXwVLV_WZ4s3ceF_MWOdUtBqlHqvmkkhYpC53YbOI?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNor9ZoieXq3jxfxBdMMkwIC2CupkxGVdkYWYXUKE8sTpdWOhhb8MIc8aRuC1-L6ROhprICaq6TmrKpen5P--5F76?PARTNER=WRITER" border="0" /></a> </p>
<p>And lastly the +2 stop image, so f/9.5 1/15 sec.</p>
<p><a href="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNoqxelB1OMAbwJ3i0N0qJqQXfPsybui5Zbkseqx4wYwRLx15M5lFFxHAET91dX1EE62VTpDy78VLId2PokmjLTAJ?PARTNER=WRITER"><img src="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNorQ6qXxcCgyvQagDVWKwF6B_0uFFju1bfAy6PCfVt5N3IRa6NWXo6JLcg0VQabDvaqdGkvNm1_5-FwNpWFFgVOG?PARTNER=WRITER" border="0" /></a></p>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mcleodsean.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mcleodsean.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mcleodsean.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcleodsean.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mcleodsean.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcleodsean.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mcleodsean.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mcleodsean.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mcleodsean.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mcleodsean.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mcleodsean.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcleodsean.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mcleodsean.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcleodsean.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mcleodsean.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcleodsean.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=16&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mcleodsean.wordpress.com/2007/12/31/high-dynamic-range-hdr-photo-test/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e4ef5b9d25e31acdb13abdf82649531a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mcleodsean</media:title>
		</media:content>

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNopuTSeO9g4Rytt_MRwnEWcVhJtPIEL6XyONAN0yG1pohKiHnOE_bzA9mkqF9ekmbZirVEtaadixJbNeB59bOgbf?PARTNER=WRITER" medium="image" />

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNor7eV9HbRKyL4HhkdBp7FnVQZW07mRiZl8bmihWrX-CmDfDyAWf-nL3Z5-IY9ocWKpdo4Y-8D4wXoIYF0nt3I7C?PARTNER=WRITER" medium="image" />

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNor9ZoieXq3jxfxBdMMkwIC2CupkxGVdkYWYXUKE8sTpdWOhhb8MIc8aRuC1-L6ROhprICaq6TmrKpen5P--5F76?PARTNER=WRITER" medium="image" />

		<media:content url="http://ic3iqw.bay.livefilestore.com/y1p6qE_XeJRNorQ6qXxcCgyvQagDVWKwF6B_0uFFju1bfAy6PCfVt5N3IRa6NWXo6JLcg0VQabDvaqdGkvNm1_5-FwNpWFFgVOG?PARTNER=WRITER" medium="image" />
	</item>
		<item>
		<title>Windows Desktop Search Powershell Cmdlet</title>
		<link>http://mcleodsean.wordpress.com/2006/07/31/windows-desktop-search-powershell-cmdlet/</link>
		<comments>http://mcleodsean.wordpress.com/2006/07/31/windows-desktop-search-powershell-cmdlet/#comments</comments>
		<pubDate>Mon, 31 Jul 2006 09:40:42 +0000</pubDate>
		<dc:creator>mcleodsean</dc:creator>
				<category><![CDATA[Computers and Internet]]></category>

		<guid isPermaLink="false">http://mcleodsean.wordpress.com/2006/07/31/windows-desktop-search-powershell-cmdlet</guid>
		<description><![CDATA[  Microsoft are introducing a new command line shell named PowerShell, previously known as Monad. The main difference between PowerShell and other shells like cmd, bash, ksh etc. is the pipelining and processing of objects as opposed to plain text. &#8230; <a href="http://mcleodsean.wordpress.com/2006/07/31/windows-desktop-search-powershell-cmdlet/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=5&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!B5D803CBC24E8221!133" class="bvMsg">
<div> </div>
<div>Microsoft are introducing a new command line shell named PowerShell, previously known as Monad. The main difference between PowerShell and other shells like cmd, bash, ksh etc. is the pipelining and processing of objects as opposed to plain text.</div>
<div> </div>
<div>I had previously used the Windows Desktop Search API to write a music browser and thought it would be useful to create a Windows Desktop Search Powershell cmdlet to allow users to query their search index from the command line. The results of the query can then be pipelined to further cmdlets to act on the results or to simply display the result set.</div>
<div> </div>
<div>A more detailed write up with the source code available for download is available at <a href="http://www.codeproject.com/useritems/wdscmdlet.asp">CodeProject</a>.</div>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mcleodsean.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mcleodsean.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mcleodsean.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcleodsean.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mcleodsean.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcleodsean.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mcleodsean.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mcleodsean.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mcleodsean.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mcleodsean.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mcleodsean.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcleodsean.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mcleodsean.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcleodsean.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mcleodsean.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcleodsean.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=5&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mcleodsean.wordpress.com/2006/07/31/windows-desktop-search-powershell-cmdlet/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e4ef5b9d25e31acdb13abdf82649531a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mcleodsean</media:title>
		</media:content>
	</item>
		<item>
		<title>Sedgefield Holiday</title>
		<link>http://mcleodsean.wordpress.com/2006/07/20/sedgefield-holiday/</link>
		<comments>http://mcleodsean.wordpress.com/2006/07/20/sedgefield-holiday/#comments</comments>
		<pubDate>Thu, 20 Jul 2006 20:24:31 +0000</pubDate>
		<dc:creator>mcleodsean</dc:creator>
				<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://mcleodsean.wordpress.com/2006/07/20/sedgefield-holiday</guid>
		<description><![CDATA[  View from the front of the holiday home we stayed in Sedgefield.   IMGP1446 Hosted on Zooomr<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=6&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!B5D803CBC24E8221!132" class="bvMsg">
<p> </p>
<p>View from the front of the holiday home we stayed in Sedgefield.</p>
<p> </p>
<div style="width:500px;text-align:right;"><a title="Zooomr :: Photo Sharing" href="http://beta.zooomr.com/photos/13857@Z01/83846/"><img src="http://static.zooomr.com/images/aad62b39e4359318dfa2dbeabe5299f7dc1cfd7c.jpg" border="0" /> </a><span style="float:left;">IMGP1446</span> Hosted on <strong>Zooom<span style="color:#9eae15;">r</span> </strong></div>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mcleodsean.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mcleodsean.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mcleodsean.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcleodsean.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mcleodsean.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcleodsean.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mcleodsean.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mcleodsean.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mcleodsean.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mcleodsean.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mcleodsean.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcleodsean.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mcleodsean.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcleodsean.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mcleodsean.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcleodsean.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=6&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mcleodsean.wordpress.com/2006/07/20/sedgefield-holiday/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e4ef5b9d25e31acdb13abdf82649531a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mcleodsean</media:title>
		</media:content>

		<media:content url="http://static.zooomr.com/images/aad62b39e4359318dfa2dbeabe5299f7dc1cfd7c.jpg" medium="image" />
	</item>
		<item>
		<title>VirtualEarth add-in for Windows Media Center with geocoded pictures</title>
		<link>http://mcleodsean.wordpress.com/2005/11/10/virtualearth-add-in-for-windows-media-center-with-geocoded-pictures/</link>
		<comments>http://mcleodsean.wordpress.com/2005/11/10/virtualearth-add-in-for-windows-media-center-with-geocoded-pictures/#comments</comments>
		<pubDate>Wed, 09 Nov 2005 22:51:13 +0000</pubDate>
		<dc:creator>mcleodsean</dc:creator>
				<category><![CDATA[Computers and Internet]]></category>

		<guid isPermaLink="false">http://mcleodsean.wordpress.com/2005/11/10/virtualearth-add-in-for-windows-media-center-with-geocoded-pictures</guid>
		<description><![CDATA[As I mentioned in my previous post I have a basic Virtual Earth add-in for Windows Media Center that works within the Media Center UI and is usable with the remote control.   I&#8217;ve now added support for integrating geocoded &#8230; <a href="http://mcleodsean.wordpress.com/2005/11/10/virtualearth-add-in-for-windows-media-center-with-geocoded-pictures/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=9&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!B5D803CBC24E8221!122" class="bvMsg">
<div>As I mentioned in my <a href="http://spaces.msn.com/members/seanmcleod/Blog/cns!1pC_K0hKOTPOd-hSoTxSOeeQ!119.entry">previous post</a> I have a basic Virtual Earth add-in for Windows Media Center that works within the Media Center UI and is usable with the remote control.</div>
<div> </div>
<div>I&#8217;ve now added support for integrating geocoded pictures with the Virtual Earth add-in. So next time someone asks you where a particular photo was taken while watching a slide show you can pop-up the Virtual Earth add-in which will center the map on the photo&#8217;s location and show a pushpin on the map. This functionality relies on the availability of GPS coordinates in the digital image.</div>
<div> </div>
<div>There are a number of software packages available that will tag your digital photos with GPS coordinates using either an associated GPS track or allowing you to manually enter the coordinates.</div>
<div> </div>
<div>For more details, screenshots, download and source code see the article I wrote up on <a href="http://www.codeproject.com/bitmap/VirtualEarthMCE.asp">CodeProject</a>.</div>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mcleodsean.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mcleodsean.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mcleodsean.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcleodsean.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mcleodsean.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcleodsean.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mcleodsean.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mcleodsean.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mcleodsean.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mcleodsean.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mcleodsean.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcleodsean.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mcleodsean.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcleodsean.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mcleodsean.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcleodsean.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=9&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mcleodsean.wordpress.com/2005/11/10/virtualearth-add-in-for-windows-media-center-with-geocoded-pictures/feed/</wfw:commentRss>
		<slash:comments>67</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e4ef5b9d25e31acdb13abdf82649531a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mcleodsean</media:title>
		</media:content>
	</item>
		<item>
		<title>Virtual Earth Media Center Add-in</title>
		<link>http://mcleodsean.wordpress.com/2005/11/05/virtual-earth-media-center-add-in/</link>
		<comments>http://mcleodsean.wordpress.com/2005/11/05/virtual-earth-media-center-add-in/#comments</comments>
		<pubDate>Sat, 05 Nov 2005 11:22:29 +0000</pubDate>
		<dc:creator>mcleodsean</dc:creator>
				<category><![CDATA[Computers and Internet]]></category>

		<guid isPermaLink="false">http://mcleodsean.wordpress.com/2005/11/05/virtual-earth-media-center-add-in</guid>
		<description><![CDATA[I&#8217;ve been playing around with a VirtualEarth HTML add-in for Windows Media Center. I&#8217;ve got a number of features lined up but I&#8217;ve been side tracked with other work so I&#8217;ve only got the basics implemented so far.   Remote &#8230; <a href="http://mcleodsean.wordpress.com/2005/11/05/virtual-earth-media-center-add-in/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=13&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="msgcns!B5D803CBC24E8221!119" class="bvMsg">
<div>I&#8217;ve been playing around with a VirtualEarth HTML add-in for Windows Media Center. I&#8217;ve got a number of features lined up but I&#8217;ve been side tracked with other work so I&#8217;ve only got the basics implemented so far.</div>
<div> </div>
<div>Remote control keys:</div>
<div> </div>
<div>Panning &#8211; use the arrow keys</div>
<div>Zooming &#8211; use the channel +- keys</div>
<div>Map Style &#8211; use the 1,2,3 keys to toggle map styles between road, aerial and hybrid</div>
<div> </div>
<div>In addition since the text labels on the map have been sized for viewing on a regular monitor with a 2 foot experience I&#8217;ve added a local zoom option. Use the 4,5,6 remote control keys to change the zoom factor, especially if you&#8217;re running MCE on a CRT TV.</div>
<div> </div>
<div>To install download this small <a href="http://www.thegreenbutton.com/community/download.aspx?id=1912&amp;MessageID=140046">zip file</a>.</div>
<div> </div>
<div>The zip file contains:</div>
<div> </div>
<div>MapControl.js &#8211; standard VirtualEarth implementation from MSN</div>
<div>VirtualEarth.html &#8211; MCE HTML add-in page with handlers for the remote control</div>
<div>VirtualEarthLogo.png &#8211; logo to use in MCE</div>
<div>VirtualEarth.mcl &#8211; MCE shortcut registration file</div>
<div> </div>
<div>To install unzip to:</div>
<div> </div>
<div>%Documents and Settings%\All Users\Start Menu\Programs\Accessories\Media Center\Media Center Programs</div>
<div> </div>
<div>Or unzip to a directory of your choice and place a shortcut file in the directory above pointing to the VirtualEarth.mcl file.</div>
<div> </div>
<div>For more details on using the VirtualEarth JavaScript API take a look at the <a href="http://www.viavirtualearth.com">ViaVirtualEarth website</a>.</div>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mcleodsean.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mcleodsean.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mcleodsean.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mcleodsean.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mcleodsean.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mcleodsean.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mcleodsean.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mcleodsean.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mcleodsean.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mcleodsean.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mcleodsean.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mcleodsean.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mcleodsean.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mcleodsean.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mcleodsean.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mcleodsean.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mcleodsean.wordpress.com&amp;blog=17824520&amp;post=13&amp;subd=mcleodsean&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mcleodsean.wordpress.com/2005/11/05/virtual-earth-media-center-add-in/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e4ef5b9d25e31acdb13abdf82649531a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mcleodsean</media:title>
		</media:content>
	</item>
	</channel>
</rss>
