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

<channel>
	<title>Bryon Brewer</title>
	<atom:link href="http://www.bryonbrewer.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.bryonbrewer.com</link>
	<description>Project Management, Visual Studio Team System, SharePoint, ASP.NET, Family, Fun, Fitness, More...</description>
	<lastBuildDate>Thu, 19 Aug 2010 02:28:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>ASP.NET 4.0 Threading &#8211; High speed file crawler</title>
		<link>http://www.bryonbrewer.com/?p=224</link>
		<comments>http://www.bryonbrewer.com/?p=224#comments</comments>
		<pubDate>Thu, 19 Aug 2010 02:27:20 +0000</pubDate>
		<dc:creator>Bryon</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.bryonbrewer.com/?p=224</guid>
		<description><![CDATA[Multi-threaded applications have traditional been complex to build.&#160; However, ASP.NET 4.0 framework has greatly simplified the process of creating threaded applications.&#160; Given that most machines today are using multiple processor cores, it is especially important to start writing applications that take full advantage of the processor power.&#160; The example below uses the “System.Threading.Tasks.Parallel” class to [...]]]></description>
			<content:encoded><![CDATA[<p>Multi-threaded applications have traditional been complex to build.&#160; However, ASP.NET 4.0 framework has greatly simplified the process of creating threaded applications.&#160; Given that most machines today are using multiple processor cores, it is especially important to start writing applications that take full advantage of the processor power.&#160; The example below uses the “System.Threading.Tasks.Parallel” class to report on file usage across a file system.&#160; This was written for a client who wanted to report on several pieces of information related to file shares allocated to company departments:</p>
<ol>
<li>Number of files and kilobytes used per file owner (who is using the same) </li>
<li>Number of files per file extension and kilobytes (useful to determine how many audio files, video files, Office documents, etc…) </li>
<li>Age of files grouped into several buckets (0 to 6 months, 6 to 12 months, 12 to 24 months, and over 24 months) </li>
</ol>
<p>The first method, “CrawlDirectories”, accepts the root directory you want to start crawling, any directories you want to exclude, and if you want to retrieve file owner information for each file.</p>
<blockquote><p>private void CrawlDirectories(string RootDirectory, bool getFileOwners)      <br />{       <br />&#160;&#160;&#160; // get a directory object       <br />&#160;&#160;&#160; try       <br />&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; DirectoryInfo di = new DirectoryInfo(RootDirectory); </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; // loop through directories and look at files      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; try       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; DirectoryInfo[] myDi = di.GetDirectories(); </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#ff0000">Parallel.ForEach(myDi, folder =&gt;        <br /></font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //look at files       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; AddFiles(folder.GetFiles(), getFileOwners); </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //see if subdirectories to crawl      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; CrawlDirectories(folder.FullName, excludeDirectory, getFileOwners);&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; });       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; catch (Exception ex)      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; myLog(&quot;Error getting subdirectories: &quot; + di.FullName + &quot;; &quot; + ex.Message, true);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160; }       <br />&#160;&#160;&#160; catch (Exception ex)       <br />&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; myLog(&quot;Error getting directory Info: &quot; + RootDirectory + &quot;; error: &quot; + ex.Message, true);       <br />&#160;&#160;&#160; }       <br />} </p>
</blockquote>
<p>Notice the For loop using the new “Parallel” class above (in red).&#160; This defines a parallel loop.&#160; The application will spin up multiple threads to crawl through the directories.&#160; Within this loop, we are calling the “Addfiles” method which loop through the files within the current directory, and then it calls itself to recursively crawl any subdirectories within the current directory.&#160; Monitoring my machine resources, I can see on average 70 threads spin up to crawl the directories.&#160; <em>All of these is handled automatically by the framework!</em></p>
<p>The next method, “AddFiles”, will use a parallel loop to report on the files within the directories.&#160; When you are using arrays or other types of collections in a multi-threaded application, you must use thread-safe collections!&#160; I have chosen to use “System.Collections.Concurrent.ConcurrentDictionary” to store the file data I’m collecting.&#160; This is basically a key, value pair that is thread-safe and can be accessed by multiple threads concurrently.</p>
<blockquote><p>private void AddFiles(FileInfo[] filesInDir, bool getFileOwners)      <br />{       <br />&#160;&#160;&#160; string ownerName = &quot;&quot;;       <br />&#160;&#160;&#160; string fileExtension = &quot;&quot;;       <br /><font color="#ff0000">&#160;&#160;&#160; Parallel.ForEach(filesInDir, fi =&gt;        <br /></font>&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; try       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //calculate # of files and bytes per file owner&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (getFileOwners)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IdentityReference NTAccountName = fi.GetAccessControl(AccessControlSections.Owner).GetOwner(Type.GetType(&quot;System.Security.Principal.NTAccount&quot;));       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ownerName = NTAccountName.Value.ToUpper();       <br /><font color="#ff0000">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ownerBytesDC.AddOrUpdate</font>(ownerName, fi.Length, (key, old) =&gt; old + fi.Length);       <br /><font color="#ff0000">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ownerCountDC.AddOrUpdate</font>(ownerName, 1, (key, old) =&gt; old + 1);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //calculate file extension # of files and bytes      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; fileExtension = fi.Extension.Replace(&quot;.&quot;, &quot;&quot;).Replace(&quot;,&quot;, &quot;&quot;).ToUpper();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; extensionBytesDC.AddOrUpdate(fileExtension, fi.Length, (key, old) =&gt; old + fi.Length);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; extensionCountDC.AddOrUpdate(fileExtension, 1, (key, old) =&gt; old + 1); </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //calculate ages of files      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (fi.LastAccessTime &gt;= DateTime.Now.AddMonths(-6))       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.Threading.Interlocked.Add(ref TotalByte0to6mo, fi.Length);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.Threading.Interlocked.Add(ref NumberOfFiles0to6mo, 1);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else if (fi.LastAccessTime &lt; DateTime.Now.AddMonths(-6) &amp;&amp; fi.LastAccessTime &gt;= DateTime.Now.AddMonths(-12))       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.Threading.Interlocked.Add(ref TotalByte6to12mo, fi.Length);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.Threading.Interlocked.Add(ref NumberOfFiles6to12mo, 1);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else if (fi.LastAccessTime &lt; DateTime.Now.AddMonths(-12) &amp;&amp; fi.LastAccessTime &gt;= DateTime.Now.AddMonths(-24))       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.Threading.Interlocked.Add(ref TotalByte12to24mo, fi.Length);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.Threading.Interlocked.Add(ref NumberOfFilee12to24mo, 1); </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else if (fi.LastAccessTime &lt; DateTime.Now.AddMonths(-24))       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.Threading.Interlocked.Add(ref TotalByteOver24mo, fi.Length);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.Threading.Interlocked.Add(ref NumberOfFilesOver24mo, 1);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; catch (Exception ex)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; myLog(&quot;Cannot report on file: &quot; + fi.FullName + &quot;; error: &quot; + ex.Message, true);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160; });       <br />} </p>
</blockquote>
<p>We end up with several key, value pair collections:</p>
<ol>
<li>ownerBytesDC and ownerCountDC.&#160; These collections both have a key of the user name, and the value of the kilobytes total for that user and the count of files.&#160; </li>
<li>extensionBytesDC and extensionCountDC.&#160; Key is the file extension, with values of total bytes and file count. </li>
<li>The remaining data is stored in Int64 variables for the age of files in each age bucket. </li>
</ol>
<p>ASP.NET 4.0 framework provides a great way to update a collection in thread-safe manner.&#160; The collection has a method “AddOrUpdate()” that will add the key if it doesn’t exist in collection, or update it if it’s already there.</p>
<p>You may be wondering why we have the “getFileOwners” boolean parameter on the method.&#160; Getting the file owner of a file requires a call to the “GetAccessControl” method – which is part of the file security methods within Windows.&#160; This operation is expensive!&#160; It slows down the crawl by several-fold.&#160; Thus, if you don’t require this information, you can turn it off.</p>
<p>This application can crawl through about two million files and three terabytes of data per hour (tested on a two-proc VMware machine).&#160; More robust hardware could speed this up.</p>
<p><strong>Easy multi-threaded applications – finally! </strong></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.bryonbrewer.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.bryonbrewer.com/?feed=rss2&amp;p=224</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solution: VMWare Guest Shutdowns very slow</title>
		<link>http://www.bryonbrewer.com/?p=223</link>
		<comments>http://www.bryonbrewer.com/?p=223#comments</comments>
		<pubDate>Mon, 02 Aug 2010 22:07:29 +0000</pubDate>
		<dc:creator>Bryon</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.bryonbrewer.com/?p=223</guid>
		<description><![CDATA[In certain scenarios, you may find that shutting down a VM is very slow for no apparent reason.&#160; I found this to be true under the condition I’m running: Windows 7 64-Bit Utilizing an external USB drive to host the guest VHD 8GB RAM Using a Dell laptop (tried on a D630 and Precision M4500) [...]]]></description>
			<content:encoded><![CDATA[<p>In certain scenarios, you may find that shutting down a VM is very slow for no apparent reason.&#160; I found this to be true under the condition I’m running:</p>
<ol>
<li>Windows 7 64-Bit </li>
<li>Utilizing an external USB drive to host the guest VHD </li>
<li>8GB RAM </li>
<li>Using a Dell laptop (tried on a D630 and Precision M4500) </li>
</ol>
<p>To fix this issue, navigate to the following file and add these settings:</p>
<p>C:\ProgramData\VMware\VMware Workstation\config.ini AND C:\ProgramData\VMware\VMware Player</p>
<blockquote><p>prefvmx.minVmMemPct = &quot;100&quot;      <br />mainMem.useNamedFile = &quot;FALSE&quot;       <br />mainMem.partialLazySave = &quot;FALSE&quot;       <br />mainMem.partialLazyRestore = &quot;FALSE&quot;</p>
</blockquote>
<p>You should notice immediate improvement in shutdown speed.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.bryonbrewer.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.bryonbrewer.com/?feed=rss2&amp;p=223</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reading book &#8216;Think Twice&#8217;</title>
		<link>http://www.bryonbrewer.com/?p=208</link>
		<comments>http://www.bryonbrewer.com/?p=208#comments</comments>
		<pubDate>Tue, 19 Jan 2010 06:02:21 +0000</pubDate>
		<dc:creator>Bryon</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.bryonbrewer.com/?p=208</guid>
		<description><![CDATA[Interesting book by by Michael J. Mauboussin on how to recognize and avoid common mistakes when making decisions.  Review coming soon&#8230;]]></description>
			<content:encoded><![CDATA[<p>Interesting book by by Michael J. Mauboussin on how to recognize and avoid common mistakes when making decisions.  Review coming soon&#8230;</p>
<p><a href="http://www.amazon.com/Think-Twice-Harnessing-Power-Counterintuition/dp/1422176754/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1263880588&amp;sr=1-1#noop"><img class="size-full wp-image-209 alignnone" title="thinktwice" src="http://www.bryonbrewer.com/wp-content/uploads/2010/01/thinktwice.jpg" alt="" width="240" height="240" /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.bryonbrewer.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.bryonbrewer.com/?feed=rss2&amp;p=208</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy Thanksgiving!</title>
		<link>http://www.bryonbrewer.com/?p=207</link>
		<comments>http://www.bryonbrewer.com/?p=207#comments</comments>
		<pubDate>Thu, 26 Nov 2009 05:03:58 +0000</pubDate>
		<dc:creator>Bryon</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.bryonbrewer.com/?p=207</guid>
		<description><![CDATA[TWAS THE NIGHT OF THANKSGIVING, BUT I JUST COULDN&#8217;T SLEEP. I TRIED COUNTING BACKWARDS, I TRIED COUNTING SHEEP. THE LEFTOVERS BECKONED - THE DARK MEAT AND WHITE, BUT I FOUGHT THE TEMPTATION WITH ALL OF MY MIGHT. TOSSING AND TURNING WITH ANTICIPATION, THE THOUGHT OF A SNACK BECAME INFATUATION. SO, I RACED TO THE KITCHEN, [...]]]></description>
			<content:encoded><![CDATA[<p>TWAS THE NIGHT OF THANKSGIVING,<br />
BUT I JUST COULDN&#8217;T SLEEP.<br />
I TRIED COUNTING BACKWARDS,<br />
I TRIED COUNTING SHEEP.</p>
<p>THE LEFTOVERS BECKONED -<br />
THE DARK MEAT AND WHITE,<br />
BUT I FOUGHT THE TEMPTATION<br />
WITH ALL OF MY MIGHT.</p>
<p>TOSSING AND TURNING WITH ANTICIPATION,<br />
THE THOUGHT OF A SNACK BECAME INFATUATION.<br />
SO, I RACED TO THE KITCHEN, FLUNG OPEN THE DOOR,<br />
AND GAZED AT THE FRIDGE, FULL OF GOODIES GALORE.<br />
GOBBLED UP TURKEY AND BUTTERED POTATOES,<br />
PICKLES AND CARROTS, BEANS AND TOMATOES.</p>
<p>I FELT MYSELF SWELLING SO PLUMP AND SO ROUND,<br />
&#8216;TIL ALL OF A SUDDEN, I ROSE OFF THE GROUND.<br />
I CRASHED THROUGH THE CEILING, FLOATING INTO THE SKY,<br />
WITH A MOUTHFUL OF PUDDING AND A HANDFUL OF PIE.<br />
BUT, I MANAGED TO YELL AS I SOARED PAST THE TREES&#8230;.<br />
HAPPY EATING TO ALL &#8211; PASS THE CRANBERRIES, PLEASE.</p>
<p>MAY YOUR STUFFING BE TASTY,<br />
MAY YOUR TURKEY BE PLUMP.<br />
MAY YOUR POTATOES &#8216;N GRAVY HAVE NARY A LUMP.<br />
MAY YOUR YAMS BE DELICIOUS.<br />
MAY YOUR PIES TAKE THE PRIZE,<br />
MAY YOUR THANKSGIVING DINNER STAY OFF OF YOUR THIGHS!!</p>
<p>HAPPY THANKSGIVING TO ALL</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.bryonbrewer.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.bryonbrewer.com/?feed=rss2&amp;p=207</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom Sorting for Work Items in Team Foundation Server 2008</title>
		<link>http://www.bryonbrewer.com/?p=204</link>
		<comments>http://www.bryonbrewer.com/?p=204#comments</comments>
		<pubDate>Thu, 24 Sep 2009 04:11:30 +0000</pubDate>
		<dc:creator>Bryon</dc:creator>
				<category><![CDATA[Team Foundation Server (TFS)]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.bryonbrewer.com/?p=204</guid>
		<description><![CDATA[TFS provides the WIQ Language (Work Item Query) to query work items.&#160; WIQ is very similar to standard SQL &#8212; you have a Select statement to pull back columns of data, a Where clause to filter data, and a Sort By clause.&#160; However, WIQ is much more limited than standard SQL. In particular, advanced sorting [...]]]></description>
			<content:encoded><![CDATA[<p>TFS provides the WIQ Language (Work Item Query) to query work items.&#160; WIQ is very similar to standard SQL &#8212; you have a Select statement to pull back columns of data, a Where clause to filter data, and a Sort By clause.&#160; However, WIQ is much more limited than standard SQL. In particular, advanced sorting logic is not supported.&#160; Thus, you may find yourself needing to implement some type of custom solution to sort your work items.&#160; A recent client had a pretty advanced sorting system in place in their old Mercury TestDirector system (they migrated over to TFS and got rid of TestDirector).&#160; You might need custom sorting if, for example, you need special logic to determine the priority of the defects/bugs.&#160; Developers will work on the queue of defects based on the order of the work items.&#160; Here are your options: </p>
<ol>
<li>Use WIQ.&#160; As stated above, this option is limited to basic sorting.&#160; You can sort by a single field, or multiple fields.&#160; Conditional logic or advanced grouping is not supported. </li>
<li>Develop a web service triggered by the Work Item Changed event.&#160; By adding a field to the work item definition (perhaps an integer field labeled &quot;SortOrder&quot;) you can evaluate the work item to determine what sort order it should be assigned.&#160; In our case, we identified 5 sort levels, so the &quot;SortOrder&quot; field was assigned a number between 1 and 5.&#160; Work Item queries were written to sort based on this field first, then by other fields to secondary sort the work items.
<p>The web service gets run after you save the work item.&#160; The web service event fires, evaluates the work item, assigns a value to the &quot;SortOrder&quot; field, and then saves the work item.       </p>
<p><strong>Sample code (this uses the TFSEvents framework available at <a href="http://www.codeplex.com/TFSEventHandler" target="_blank">Codeplex</a>): </strong>      </p>
<blockquote><p>public void Notify(string eventXml, string tfsIdentityXml)          <br />&#160;&#160;&#160; {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; WorkItemChangedEvent workItemChangedEvent = this.CreateInstance&lt;WorkItemChangedEvent&gt;(eventXml);           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; TFSIdentity tfsIdentity = this.CreateInstance&lt;TFSIdentity&gt;(tfsIdentityXml); </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; int WorkItemID = workItemChangedEvent.CoreFields.IntegerFields[0].NewValue;          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Microsoft.TeamFoundation.Client.TeamFoundationServer TFS = new TeamFoundationServer(tfsIdentity.Url);           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; TFS.Authenticate(); </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; WorkItemStore WIS = TFS.GetService(typeof(WorkItemStore)) as WorkItemStore;          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; WorkItem updatedWI = WIS.GetWorkItem(WorkItemID);           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; string priority = &quot;&quot;;           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; string environment = &quot;&quot;; </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (updatedWI.Fields.Contains(&quot;CustomFields.SortOrder&quot;))          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; priority = updatedWI.Fields[&quot;CustomFields.Priority&quot;].Value.ToString();           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; environment = updatedWI.Fields[&quot;CustomFields.FoundInEnvironment&quot;].Value.ToString(); </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (priority == &quot;1-Now&quot;)          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; updatedWI.Fields[&quot;CustomFields.SortOrder&quot;].Value = 1; </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else if (priority == &quot;2-ASAP&quot;)           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; updatedWI.Fields[&quot;CustomFields.SortOrder&quot;].Value = 2;           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else if (updatedWI.Fields[&quot;CustomFields.CRID&quot;].Value.ToString() != &quot;&quot; ||           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; (updatedWI.Fields[&quot;System.IterationID&quot;].Value.ToString() != &quot;154&quot; &amp;&amp;           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; updatedWI.Fields[&quot;System.IterationID&quot;].Value.ToString() != &quot;314&quot;))           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; updatedWI.Fields[&quot;CustomFields.SortOrder&quot;].Value = 3;           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else if (environment == &quot;2-PRE-PROD&quot; || environment == &quot;3-Test&quot; || environment == &quot;4-DEVL&quot;)           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; updatedWI.Fields[&quot;CustomFields.SortOrder&quot;].Value = 4;           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else if (environment == &quot;1-PROD&quot;)           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; updatedWI.Fields[&quot;CustomFields.SortOrder&quot;].Value = 5;           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (updatedWI.IsDirty)          <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; updatedWI.Save();           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }           <br />&#160;&#160;&#160; } </p>
</blockquote>
<p>A big disadvantage to this method &#8212; the work item gets updated by the web service, thus if a user has the work item loaded on their screen, makes a change, and tried to save, it will fail and notify the user the work item has been updated by another user.&#160; This scenario is very likely to happen since the user will have the work item on their screen during the initial save and may want to add additional data or update information on the work item.&#160; They are forced to close and reopen the work item after each save.&#160; For most organizations, this would be frustrating and probably disqualify this solution. </li>
<li>Develop a client-side custom control.&#160; This option is similar to the web service, but the logic lives on the client.&#160; Using a custom field such as &quot;SortOrder&quot; you can assign a sort value based on the work item information.&#160; The logic runs before the work item is saved, so only one update/save operation is required.&#160; The advantage to this method is you don&#8217;t have the update problem as you do with the web service.&#160; The disadvantage is that this control needs to be deployed to all your developer/client machines or else the sort logic won&#8217;t run and be assigned. </li>
</ol>
<p>Based on all these options, the best option if you require advanced sorting logic is to develop a client-side custom control.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.bryonbrewer.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.bryonbrewer.com/?feed=rss2&amp;p=204</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nicholas Loves Books</title>
		<link>http://www.bryonbrewer.com/?p=203</link>
		<comments>http://www.bryonbrewer.com/?p=203#comments</comments>
		<pubDate>Thu, 24 Sep 2009 04:11:18 +0000</pubDate>
		<dc:creator>Bryon</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.bryonbrewer.com/?p=203</guid>
		<description><![CDATA[We usually read Nicholas a book each night before bed… and he is always so excited!&#160; Here he is flipping through a favorite book.]]></description>
			<content:encoded><![CDATA[<p>We usually read Nicholas a book each night before bed… and he is always so excited!&#160; Here he is flipping through a favorite book.</p>
<p><a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo21.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="photo 2" border="0" alt="photo 2" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo2_thumb1.jpg" width="184" height="244" /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.bryonbrewer.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.bryonbrewer.com/?feed=rss2&amp;p=203</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Brotherly Love&#8230;</title>
		<link>http://www.bryonbrewer.com/?p=200</link>
		<comments>http://www.bryonbrewer.com/?p=200#comments</comments>
		<pubDate>Thu, 24 Sep 2009 04:10:41 +0000</pubDate>
		<dc:creator>Bryon</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.bryonbrewer.com/?p=200</guid>
		<description><![CDATA[Brendon hasn’t been feeling well the last couple days – I think it’s because he is teething right now.&#160; After Nikki told Nicholas that little Brendon wasn’t feeling good, Nicholas offered some love&#160; &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>Brendon hasn’t been feeling well the last couple days – I think it’s because he is teething right now.&#160; After Nikki told Nicholas that little Brendon wasn’t feeling good, Nicholas offered some love&#160; <img src='http://www.bryonbrewer.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> &#160; </p>
<p>&#160;</p>
<p><a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="photo" border="0" alt="photo" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo_thumb.jpg" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="photo 2" border="0" alt="photo 2" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo2_thumb.jpg" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo31.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="photo 3" border="0" alt="photo 3" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo3_thumb1.jpg" width="184" height="244" /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.bryonbrewer.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.bryonbrewer.com/?feed=rss2&amp;p=200</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Family Camping Trip</title>
		<link>http://www.bryonbrewer.com/?p=193</link>
		<comments>http://www.bryonbrewer.com/?p=193#comments</comments>
		<pubDate>Fri, 18 Sep 2009 16:31:44 +0000</pubDate>
		<dc:creator>Bryon</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.bryonbrewer.com/?p=193</guid>
		<description><![CDATA[We went on our first family camping trip last week!&#160; Yes, real camping in a tent.&#160; We went to Many, LA at Toledo Bend Lake.&#160; It was a pretty camp site – right there on the lake.&#160; Mom &#38; Dad brought their RV, while we had a tent.&#160; Everyone had a great time.&#160; It rained [...]]]></description>
			<content:encoded><![CDATA[<p>We went on our first family camping trip last week!&#160; Yes, real camping in a tent.&#160; We went to Many, LA at Toledo Bend Lake.&#160; It was a pretty camp site – right there on the lake.&#160; Mom &amp; Dad brought their RV, while we had a tent.&#160; Everyone had a great time.&#160; It rained most of the days we were out there, so we didn’t get to go fishing or do some of the activities we planned, but we still enjoyed it.&#160; I’m amazed at how well both Nicholas and Brendon did – especially considering all the rain.&#160; A few photos:</p>
<p><a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1997.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1997" border="0" alt="IMG_1997" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1997_thumb.jpg" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_2003.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_2003" border="0" alt="IMG_2003" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_2003_thumb.jpg" width="244" height="184" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_2022.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_2022" border="0" alt="IMG_2022" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_2022_thumb.jpg" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo3.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="photo 3" border="0" alt="photo 3" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo3_thumb.jpg" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo5.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="photo 5" border="0" alt="photo 5" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/photo5_thumb.jpg" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1976.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1976" border="0" alt="IMG_1976" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1976_thumb.jpg" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1986.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1986" border="0" alt="IMG_1986" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1986_thumb.jpg" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1990.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1990" border="0" alt="IMG_1990" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1990_thumb.jpg" width="184" height="244" /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.bryonbrewer.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.bryonbrewer.com/?feed=rss2&amp;p=193</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stonewall Fire Department</title>
		<link>http://www.bryonbrewer.com/?p=176</link>
		<comments>http://www.bryonbrewer.com/?p=176#comments</comments>
		<pubDate>Fri, 18 Sep 2009 16:20:00 +0000</pubDate>
		<dc:creator>Bryon</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.bryonbrewer.com/?p=176</guid>
		<description><![CDATA[We took the boys up to the fire department during our trip to Shreveport / Stonewall last week.&#160; Dad has been volunteer firefighter in Stonewall for many years now.&#160; Nicholas love his play fire trucks – but he was a little scared of the big fire trucks!]]></description>
			<content:encoded><![CDATA[<p>We took the boys up to the fire department during our trip to Shreveport / Stonewall last week.&#160; Dad has been volunteer firefighter in Stonewall for many years now.&#160; Nicholas love his play fire trucks – but he was a little scared of the big fire trucks!</p>
<p><a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1962.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1962" border="0" alt="IMG_1962" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1962_thumb.jpg" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1953.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1953" border="0" alt="IMG_1953" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1953_thumb.jpg" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1957.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1957" border="0" alt="IMG_1957" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1957_thumb.jpg" width="184" height="244" /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.bryonbrewer.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.bryonbrewer.com/?feed=rss2&amp;p=176</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brendon growing up</title>
		<link>http://www.bryonbrewer.com/?p=164</link>
		<comments>http://www.bryonbrewer.com/?p=164#comments</comments>
		<pubDate>Wed, 02 Sep 2009 03:44:48 +0000</pubDate>
		<dc:creator>Bryon</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Brendon]]></category>

		<guid isPermaLink="false">http://www.bryonbrewer.com/?p=164</guid>
		<description><![CDATA[Little Brendon is now crawling all over the place, pulling himself up and almost walking!  Just 8 months old and he seems so grown up.   Amazing how fast it has gone – and what a good baby he is…  never sick, eats like crazy, and is always happy and smiling.    ]]></description>
			<content:encoded><![CDATA[<p>Little Brendon is now crawling all over the place, pulling himself up and almost walking!  Just 8 months old and he seems so grown up.   Amazing how fast it has gone – and what a good baby he is…  never sick, eats like crazy, and is always happy and smiling.</p>
<p><a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1843.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1843" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1843_thumb.jpg" border="0" alt="IMG_1843" width="184" height="244" /></a><a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1852.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1852" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1852_thumb.jpg" border="0" alt="IMG_1852" width="184" height="244" /></a> <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1847.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1847" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1847_thumb.jpg" border="0" alt="IMG_1847" width="184" height="244" /></a>  <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1857.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1857" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1857_thumb.jpg" border="0" alt="IMG_1857" width="184" height="244" /></a>  <a href="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1854.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_1854" src="http://www.bryonbrewer.com/wp-content/uploads/2009/09/IMG_1854_thumb.jpg" border="0" alt="IMG_1854" width="184" height="244" /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.bryonbrewer.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.bryonbrewer.com/?feed=rss2&amp;p=164</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
