<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-5387140</atom:id><lastBuildDate>Wed, 17 Aug 2011 03:02:20 +0000</lastBuildDate><category>Back To Basics</category><category>Gaming</category><category>MicrosoftBusinessProcessConference</category><category>Script</category><category>movies</category><category>books</category><category>Software Development</category><category>BizTalk</category><category>Workflow</category><category>Windows</category><category>Vacation</category><category>IIS</category><category>SOA</category><category>XAML</category><category>Testing</category><category>Guitar</category><category>Life</category><category>Xml</category><category>PDC2008</category><category>Windbg</category><category>WCF</category><category>Ruby</category><category>Enterprise Library</category><category>SilkPerformer</category><category>DallasBizTalkUsersGroup</category><category>MicrosoftWebExperience</category><category>J.D. Edwards</category><category>Tools</category><category>Debugging</category><category>Mary Kay</category><category>User Group</category><category>Service Broker</category><category>work</category><category>WPF</category><category>Shanghai</category><category>Cloud</category><category>Silverlight</category><category>.NET</category><title>Zach Bonham</title><description>Relating experiences with Microsoft solution stacks: Sql Server, BizTalk, .NET and ASP.NET, with a little spice of life thrown in along the way!</description><link>http://zachbonham.blogspot.com/</link><managingEditor>noreply@blogger.com (Zach Bonham)</managingEditor><generator>Blogger</generator><openSearch:totalResults>168</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ZachBonham" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="zachbonham" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>33.092846</geo:lat><geo:long>-96.624475</geo:long><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-1398013557925219043</guid><pubDate>Sat, 16 Oct 2010 13:55:00 +0000</pubDate><atom:updated>2010-10-16T08:55:57.975-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">WCF</category><title>Getting Started with WCF Routing Service, Part 1</title><description>&lt;blockquote&gt; &lt;p&gt;"Change is inevitable. Change is constant." &lt;br&gt;&amp;nbsp; --&amp;nbsp; Benjamin Disraeli &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font size="3"&gt;In software development, everyone expects change.&amp;nbsp; Change is inevitable. Its constant. Its the law of the land. The Disraeli Principal and all that.&amp;nbsp; This is true through the &lt;em&gt;&lt;strong&gt;development&lt;/strong&gt;&lt;/em&gt; of software.&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;Once software reaches maturity, and is released, then our expectations of change shift radically. A new law takes effect, one almost diametrically opposed to the first:&lt;/font&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"Users hate change." &lt;br&gt;&amp;nbsp; --&amp;nbsp; anonymous &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font size="3"&gt;How we manage that change can make all the difference in the world.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;In developing WCF services, we have a new option for mitigating change to a service endpoint, contract or behavior: &lt;a href="http://msdn.microsoft.com/en-us/library/ee517421.aspx" target="_blank"&gt;the WCF Routing Service&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;The WCF Routing Service is available with Microsoft .NET 4.0 and can be best described as a out of the box soap router for WCF.&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;What can I do with a soap router you might ask?&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;With a intermediate software router you can perform:&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size="3"&gt;Protocol Bridging&lt;/font&gt;  &lt;li&gt;&lt;font size="3"&gt;Content Based Routing&lt;/font&gt;  &lt;li&gt;&lt;font size="3"&gt;Access Control&lt;/font&gt;  &lt;li&gt;&lt;font size="3"&gt;Unified Exception Handling&lt;/font&gt;  &lt;li&gt;&lt;font size="3"&gt;Logging&lt;/font&gt;  &lt;li&gt;&lt;font size="3"&gt;Load Distribution / Balancing&lt;/font&gt;  &lt;li&gt;&lt;font size="3"&gt;just about anything you can think of, both good and bad&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size="3"&gt;Over the next few posts, I’ll be introducing myself to the scenarios supported by the WCF Routing Service and sharing what I find along the way, along with how I might use them in the real world scenarios I’m currently working in.&amp;nbsp; The features I’m most interested in are:&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font size="3"&gt;Part 2: Protocol Bridging&lt;/font&gt;  &lt;li&gt;&lt;font size="3"&gt;Part 3: Content Based Routing&lt;/font&gt;  &lt;li&gt;&lt;font size="3"&gt;Part 4: Access Control&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size="3"&gt;If your looking for something &lt;strong&gt;now&lt;/strong&gt; go check out the documentation on the &lt;a href="http://msdn.microsoft.com/en-us/library/ee517423.aspx" target="_blank"&gt;WCF Routing Service&lt;/a&gt;.&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;If your looking at how to kick it old school, then check out &lt;/font&gt;&lt;font size="3"&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc500646.aspx" target="_blank"&gt;Building a WCF Router, Part 1&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc546553.aspx" target="_blank"&gt;Part 2&lt;/a&gt; by &lt;a href="http://dasblonde.net/" target="_blank"&gt;Michele Bustamante&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-1398013557925219043?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/UZEf0gptqXY" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2010/10/getting-started-with-wcf-routing.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-7602575529446566012</guid><pubDate>Fri, 06 Aug 2010 19:43:00 +0000</pubDate><atom:updated>2010-08-06T14:43:22.676-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tools</category><title>[TestMethod] Code Snippet</title><description>&lt;p&gt;Writing lots of tests today and I found myself typing a lot of repetitive code just inserting test methods, so I created the ‘&lt;strong&gt;tm’&lt;/strong&gt; code snippet.&lt;/p&gt;  &lt;p&gt;Of course, as I installed it, I realized that there was already a ‘&lt;strong&gt;testm’&lt;/strong&gt; code snippet to do almost exactly the same thing.&amp;#160; I could/should have modified the original ‘&lt;strong&gt;testm’&lt;/strong&gt; to follow the naming convention for our tests.&amp;#160; The moral of that story is look before you leap.&lt;/p&gt;  &lt;p&gt;This gist:&lt;/p&gt; &lt;script src="http://gist.github.com/511865.js?file=tm.snippet"&gt;&lt;/script&gt;  &lt;p&gt;Will generate the following code snippet: &lt;/p&gt;  &lt;p&gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]     &lt;br /&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;TestSuite_TestCondition_Assertion()     &lt;br /&gt;{     &lt;br /&gt;    &lt;br /&gt;}     &lt;br /&gt;&lt;/p&gt; &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-7602575529446566012?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/tKmbVK3yJoI" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2010/08/testmethod-code-snippet.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-2559713521516676118</guid><pubDate>Fri, 09 Apr 2010 03:11:00 +0000</pubDate><atom:updated>2010-04-08T22:14:19.209-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Ruby</category><title>GetSmarx C# vs. Ruby (and something about Shaving a Yak)</title><description>&lt;p&gt;&lt;a href="http://blog.smarx.com/" target="_blank"&gt;Steve Marx&lt;/a&gt;, of &lt;a href="http://msdn.microsoft.com/en-us/azure/cc994380.aspx" target="_blank"&gt;Windows Azure&lt;/a&gt; fame, recently posted “&lt;a title="annoy.smarx.com: Letting the Internet Choose My Wallpaper" href="http://blog.smarx.com/posts/annoy-smarx-com-letting-the-internet-choose-my-wallpaper" target="_blank"&gt;annoy.smarx.com: Letting the Internet Choose My Wallpaper&lt;/a&gt;”, on how he allows the Internet to choose his wallpaper using Windows Azure and Service Bus.&amp;#160; Somewhat cool use of the technology showcased in a very easy to follow manner.&amp;#160; &lt;/p&gt;  &lt;p&gt;Of course, the little devil in me thought how easy it would be to write a snippet of code to create an Azure Worker role to randomly change his wallpaper – anything worth doing is worth automating, right?&amp;#160; &lt;/p&gt;  &lt;p&gt;The requirements were pretty simple.&amp;#160; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;http GET &lt;a title="http://annoysmarx.cloudapp.net/" href="http://annoysmarx.cloudapp.net/"&gt;http://annoysmarx.cloudapp.net/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Parse the xhtml response (thanks, Steve!) &lt;/li&gt;    &lt;li&gt;Identify the wall paper links &lt;/li&gt;    &lt;li&gt;Randomly select a single link resource &lt;/li&gt;    &lt;li&gt;https GET of the resource (e.g. &lt;a title="https://annoysmarx.servicebus.windows.net/AnnoySmarx/SetWallpaper?id=ac21c047-f437-4e01-a0d1-25ee47e128b3" href="https://annoysmarx.servicebus.windows.net/AnnoySmarx/SetWallpaper?id=ac21c047-f437-4e01-a0d1-25ee47e128b3"&gt;https://annoysmarx.servicebus.windows.net/AnnoySmarx/SetWallpaper?id=ac21c047-f437-4e01-a0d1-25ee47e128b3&lt;/a&gt;) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Then I realized I don’t have the money to shell out just to poke Steve Marx, whom I don’t know.&amp;#160; Then I thought, well, I *&lt;strong&gt;do&lt;/strong&gt;* have &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" target="_blank"&gt;VS2010 Ultimate RC1&lt;/a&gt; running, including the Testers edition (which rocks, btw), so then I thought I’d just plopped the code into a virtual user (VU) and let it (or multiple VU’s!) run every hour.&amp;#160; &lt;/p&gt;  &lt;p&gt;But, you see, I’ve been hearing so much about Ruby, and how what an awesome language it is.&amp;#160; I’ve even started noodling with it on the side (shhh….don’t tell C#).&amp;#160; I do kind of like Ruby, but it can be raw.&amp;#160; Kinda of like how I view Linux – on the surface it looks great, especially now, but it can get rough quick if your anything more than just a casual user.&lt;/p&gt;  &lt;p&gt;Anywayz….I then got distracted with creating a snippet of Ruby code to do the same thing I did in C# just to see if life was better.&amp;#160; &lt;/p&gt;  &lt;p&gt;So, just like your optometrist…which do &lt;font size="4"&gt;&lt;strong&gt;you&lt;/strong&gt;&lt;/font&gt; like better?&lt;/p&gt;  &lt;h5&gt;1)&amp;#160; GetSmarx.cs&lt;/h5&gt; &lt;script src="http://gist.github.com/360821.js?file=getsmarx.cs"&gt;&lt;/script&gt;  &lt;p&gt;or&lt;/p&gt;  &lt;h5&gt;2) GetSmarx.rb&lt;/h5&gt; &lt;script src="http://gist.github.com/360818.js?file=getsmarx.rb"&gt;&lt;/script&gt;  &lt;p&gt;Of course, the C# version took about as long as it took to type it.&amp;#160; The Ruby version took &lt;strong&gt;much&lt;/strong&gt; longer as I had to consult the almighty Google for much of it.&amp;#160; Its times like these (&lt;a href="http://www.foofighters.com/us/home" target="_blank"&gt;Foo Fighters&lt;/a&gt; FTW!) that makes the heart all warm when you realize what a rich ecosystem Ruby has underneath it.&lt;/p&gt;  &lt;p&gt;And that is how Steve Marx was saved from being sent into an epileptic coma by his constantly changing desktop background due to my being so worn out by &lt;a href="http://sethgodin.typepad.com/seths_blog/2005/03/dont_shave_that.html" target="_blank"&gt;Shaving a Yak&lt;/a&gt; tonight that I just plain lost interest.&lt;/p&gt;  &lt;p&gt;Good night, Steve.&amp;#160; Thanks for the Azure content.&amp;#160; Keep it coming!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-2559713521516676118?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/4m3WG80CSqA" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2010/04/getsmarx-c-vs-ruby-and-something-about.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-7522824425636944848</guid><pubDate>Thu, 08 Apr 2010 21:38:00 +0000</pubDate><atom:updated>2010-04-08T16:47:20.081-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">XAML</category><title>Organize XAML Namespace Declarations with XmlnsDefinitionAttribute</title><description>&lt;p&gt;Microsoft does it and you can do it, too!&lt;/p&gt;  &lt;p&gt;Whenever you need to use a control from an assembly you need to provide an xml namespace for it to avoid any collisions with existing types.  By default, you need to specifically reference the namespace for each control you need access to in your XAML. &lt;/p&gt;  &lt;p&gt;This might lead to declarations like this in your XAML:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl&lt;br /&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;treeView&lt;/span&gt;&lt;span style="color:blue;"&gt;="clr-namespace:MaryKay.SamPortal.Common.UI.TreeView.Views;assembly=MaryKay.SamPortal.Common.UI"&lt;br /&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;infoBar&lt;/span&gt;&lt;span style="color:blue;"&gt;="clr-namespace:MaryKay.SamPortal.Common.UI.InfoBar.Views;assembly=MaryKay.SamPortal.Common.UI"&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This can get ugly pretty fast if you have lots of controls in your XAML view!&lt;/p&gt;&lt;p&gt;However, notice how clean the &lt;em&gt;Microsoft&lt;/em&gt; xml namespaces are?  You get a lot of controls brought into scope by leveraging those simple namespaces.  This is accomplished by using the assembly &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.markup.xmlnsdefinitionattribute.aspx" target="_blank"&gt;XmlnsDefinitionAttribute&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;From MSDN&lt;/p&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Specifies a mapping in an assembly between an XML namespace and a CLR namespace.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;Which means it allows us to provide a facade, or an alias, for a namespace, or group of namespaces within an assembly.  This makes it much easier to bring all the controls in a control library into scope.&lt;/p&gt;&lt;p&gt;For example, in the &lt;strong&gt;MaryKay.SamPortal.Common.UI&lt;/strong&gt; library, all of the controls are surfaced through the namespace alias &lt;strong&gt;“urn:marykay-samportal-common-ui”&lt;/strong&gt; using &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.markup.xmlnsdefinitionattribute.aspx" target="_blank"&gt;XmlnsDefinition&lt;/a&gt; in the assemblies &lt;strong&gt;AssemblyInfo.cs&lt;/strong&gt;:&lt;/p&gt;&lt;pre class="code"&gt;[&lt;span style="color:blue;"&gt;assembly&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;XmlnsDefinition&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"urn:marykay-samportal-common-ui"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;"MaryKay.SamPortal.Common.UI.InfoBar.Views"&lt;/span&gt;)]&lt;br /&gt;[&lt;span style="color:blue;"&gt;assembly&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;XmlnsDefinition&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"urn:marykay-samportal-common-ui"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;"MaryKay.SamPortal.Common.UI.RoleGroupPicker.Views"&lt;/span&gt;)]&lt;br /&gt;[&lt;span style="color:blue;"&gt;assembly&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;XmlnsDefinition&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"urn:marykay-samportal-common-ui"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;"MaryKay.SamPortal.Common.UI.BetterPopup"&lt;/span&gt;)]&lt;br /&gt;[&lt;span style="color:blue;"&gt;assembly&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;XmlnsDefinition&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"urn:marykay-samportal-common-ui"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;"MaryKay.SamPortal.Common.UI.TextEditor"&lt;/span&gt;)]&lt;br /&gt;[&lt;span style="color:blue;"&gt;assembly&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;XmlnsDefinition&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"urn:marykay-samportal-common-ui"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;"MaryKay.SamPortal.Common.UI.Converters"&lt;/span&gt;)]&lt;br /&gt;[&lt;span style="color:blue;"&gt;assembly&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;XmlnsDefinition&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"urn:marykay-samportal-common-ui"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;"MaryKay.SamPortal.Common.UI.Documents"&lt;/span&gt;)]&lt;br /&gt;[&lt;span style="color:blue;"&gt;assembly&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;XmlnsDefinition&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"urn:marykay-samportal-common-ui"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;"MaryKay.SamPortal.Common.UI.SplashScreen"&lt;/span&gt;)]&lt;br /&gt;[&lt;span style="color:blue;"&gt;assembly&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;XmlnsDefinition&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"urn:marykay-samportal-common-ui"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;"MaryKay.SamPortal.Common.UI.TemplateSelector"&lt;/span&gt;)]&lt;br /&gt;[&lt;span style="color:blue;"&gt;assembly&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;XmlnsDefinition&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"urn:marykay-samportal-common-ui"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;"MaryKay.SamPortal.Common.UI.ModalDialog"&lt;/span&gt;)]&lt;br /&gt;[&lt;span style="color:blue;"&gt;assembly&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;XmlnsDefinition&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"urn:marykay-samportal-common-ui"&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;"MaryKay.SamPortal.Common.UI.ConsultantSearch.Views"&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;and so forth..&lt;br /&gt;&lt;br /&gt;&lt;div&gt;This cleans up our required XAML declarations to simply:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; white-space: pre; "&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; white-space: pre; "&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color:#a31515;"&gt;  &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;commonUI&lt;/span&gt;&lt;span style="color:blue;"&gt;="urn:marykay-samportal-common-ui"&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;commonUI&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;InformationBar &lt;/span&gt;&lt;span style="color:red;"&gt;DataContext&lt;/span&gt;&lt;span style="color:blue;"&gt;="{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding &lt;/span&gt;&lt;span style="color:red;"&gt;InfoBar&lt;/span&gt;&lt;span style="color:blue;"&gt;}"/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Which makes our XAML much cleaner and easier to work with.  It even supports intellisense!&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-7522824425636944848?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/HD2J9wbF6p4" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2010/04/organize-xaml-namespace-declarations.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-3292411577342179390</guid><pubDate>Thu, 01 Apr 2010 03:03:00 +0000</pubDate><atom:updated>2010-03-31T22:03:54.005-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>PANDA – Packaging ANd Deployment Automation</title><description>&lt;p&gt;Just read “&lt;a href="http://blogs.zdnet.com/microsoft/?p=5762&amp;amp;utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+zdnet/microsoft+(ZDNet+All+About+Microsoft)" target="_blank"&gt;CoApp: An open-source package management system for Windows&lt;/a&gt;”. &lt;/p&gt;  &lt;p&gt;I really respect what &lt;a href="https://launchpad.net/coapp" target="_blank"&gt;CoApp&lt;/a&gt; is trying to do.&amp;#160; It can be amazingly difficult, and tedious, to deploy various applications types on the Windows platform.&amp;#160; Its not like the problem hasn’t been solved.&amp;#160; Its unfortunately been solved too many times, by too many.&lt;/p&gt;  &lt;p&gt;Of course, anytime you have something amazingly tedious and difficult it needs to be automated. The Windows platform has needed this forever.&amp;#160; &lt;/p&gt;  &lt;p&gt;Unfortunately, what Windows users got, at least for the desktop, was Windows Installer technology.&amp;#160; I never really liked this technology, for a variety of different reasons, but the biggest problem I have with them are that I just don’t care.&amp;#160; I don’t care to see your company’s logo, I don’t care to see a progress bar going across the screen, I don’t care to plug in options – I just don’t care.&amp;#160; I got frustrated that it would take someone with a PhD in Windows Installer technology to be able to produce a package you could install.&amp;#160; &lt;/p&gt;  &lt;p&gt;There have been advancements recently, most notably &lt;a href="http://www.iis.net/expand/WebDeploy" target="_blank"&gt;MSDeploy&lt;/a&gt;, that seem like they should be able to fit the bill, but they still seem focused on web projects only.&amp;#160; I still have hopes for an extensibility model for MSDeploy that is something we can build on.&amp;#160; The &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx" target="_blank"&gt;Web Platform Installer&lt;/a&gt; is also a huge step forward – again, would be nice if it were opened up, which is where I think CoApp might come in.&lt;/p&gt;  &lt;p&gt;You know your data center operations teams have also solved this problem of packaging, deployment, and dependency management, but its still likely to be focused on a couple of notable application types: web applications and Windows services.&lt;/p&gt;  &lt;p&gt;I work for corporate America - which has a plethora of bad practices, some I probably perpetuate, and many I'm not proud of, but every once and a while we go and do something worthwhile.&amp;#160; For us, it was the development of &lt;strong&gt;PANDA&lt;/strong&gt;.&amp;#160; PANDA, &lt;b&gt;P&lt;/b&gt;ackaging&lt;b&gt; an&lt;/b&gt;d &lt;b&gt;D&lt;/b&gt;eployment &lt;b&gt;A&lt;/b&gt;utomation, is as much process as it is actual tooling.&lt;/p&gt;  &lt;p&gt;PANDA actually started with the requirement of a repeatable deployment for web sites, windows services, click once applications and just basic file copies.&amp;#160; To solve this problem, we chose to rely heavily on convention, with a sprinkle of configuration metadata.&lt;/p&gt;  &lt;p&gt;The idea of a PANDA ‘package’ was born, and that package had a specific structure.&amp;#160;&amp;#160; In addition, it was decided that all applications would have specific target locations, based on conventions set by our operations team.&amp;#160;&amp;#160; A PANDA package, being heavily file centric, might look like this:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;/WindowsServices/{service}&lt;/li&gt;    &lt;li&gt;/Web/{website}/{virtual root}&lt;/li&gt;    &lt;li&gt;/ClickOnce/{app}&lt;/li&gt;    &lt;li&gt;/Config&lt;/li&gt;    &lt;li&gt;/Workflows&lt;/li&gt;    &lt;li&gt;/Files/{bucket}&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This package structure, combined with some magical application metadata, would allow us to write generic MSBuild scripts that would simply know how to execute what was in the package.&amp;#160; Samples of application metadata for a Windows service might be: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;service name&lt;/li&gt;    &lt;li&gt;display name&lt;/li&gt;    &lt;li&gt;service account&lt;/li&gt;    &lt;li&gt;executable&lt;/li&gt;    &lt;li&gt;startup type&lt;/li&gt;    &lt;li&gt;restart properties&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The Windows service developer would include in their project, not an Installer project, but simply an xml file with a well known schema – a .deploy file.&amp;#160; In this case, it would be service.deploy.&amp;#160; Changing any of the properties of the service simply meant modifying the service.deploy file and executing the deployment.&amp;#160; The actual application code didn’t need to be recompiled each time.&lt;/p&gt;  &lt;p&gt;Other application types would have their own metadata schema.&lt;/p&gt;  &lt;p&gt;This PANDA package is then what all of our software builds produce.&amp;#160; We use Team Foundation Server, but instead of regular output from a build, build output gets rolled into a PANDA package.&amp;#160; If a developer needs to install those bits, either on their local machine, or a server, the experience is the same – they execute the deploy.bat found in the package.&lt;/p&gt;  &lt;p&gt;Assuming that the deployment package had a consistent structure, we then built MSBuild targets that knew how to install whatever happened to be in the package.&amp;#160; Our deployment tools, and scripts, really just reused some community task libraries and a single custom library that was essentially a data access layer for our PANDA package.&lt;/p&gt;  &lt;p&gt;The overall execution of the deployment had just a few high level MSBuild targets:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;PreDeploy&lt;/strong&gt; – users could provide their own MSBuild scripts, following the convention of *.predeploy and PANDA would execute them&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;StopServices&lt;/strong&gt; – can’t copy over files in use&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CopyFiles&lt;/strong&gt; – a top-level target that….copies files, it actually chains together other file copy operations&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;CopyConfig, CopyServices, CopyWebs,CopyClickOnces,CopyWorkflow&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;strong&gt;Uninstall Services&lt;/strong&gt; – it was easier to uninstall services&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Install Services&lt;/strong&gt; – since we uninstall, we pick up any changes to metadata (e.g. service name)&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Start Services&lt;/strong&gt; – respected the startup type in service metadata &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;PostDeploy&lt;/strong&gt; – users could provide their own MSBuild scripts, following convention of *.postdeploy&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Each target was smart enough that if there was nothing in the package that matched its criteria, then it didn’t do anything.&amp;#160; And that's it.&amp;#160; The MSBuild scripts just know how to execute the package, which has a consistent structure.&amp;#160; &lt;/p&gt;  &lt;p&gt;Here is the breakdown of *.deploy files:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;service.deploy – metadata for Windows services&lt;/li&gt;    &lt;li&gt;site.deploy – web site metadata&lt;/li&gt;    &lt;li&gt;apppool.deploy – app pool metadata&lt;/li&gt;    &lt;li&gt;webapp.deploy – virtual directory metadata&lt;/li&gt;    &lt;li&gt;clickonce.deploy- click once metadata&lt;/li&gt;    &lt;li&gt;files.deploy – files manifests.&amp;#160; Only required for copying files that didn’t already fall into an application archetype – usually one off&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A PANDA package could contain a single file, or single set of application components, or it could contain and aggregate of many application components, or indeed entire systems – all in a single PANDA package that has a one click installation (deploy.bat).&lt;/p&gt;  &lt;p&gt;Other features of PANDA (not exhaustive):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;application metadata can specify arbitrary target server role (e.g. ‘web server’, ‘app server’, ‘mylabenvironment’), so application bits only get copied and installed if target server role matches&lt;/li&gt;    &lt;li&gt;environmental overrides – e.g. use different service account name for DEV, QA, Staging and Production environments.&lt;/li&gt;    &lt;li&gt;use of hashed passwords – we request provisioning of service accounts by our security group.&amp;#160; We don’t actually receive a password, but the hash.&amp;#160; PANDA will decrypt the hash and install using actual accounts.&amp;#160; Passwords aren’t in the open and developers could care less what the actual value is.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Some notable PANDA shortfalls:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;PANDA packages are not zipped.&amp;#160; We have the actual step to insert into the packaging process to zip up the bits, we just aren’t using it because we are blessed with near infinite bandwidth in our data centers.&lt;/li&gt;    &lt;li&gt;PANDA tools need to be deployed to any server, or desktop, prior to attempting to execute a PANDA package.&amp;#160; We would like to eventually include the tools required for THAT package version&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I didn’t realize I had typed this much until just now.. My intention was not really to toot the horn (&lt;font size="4"&gt;toot! toot!&lt;/font&gt;) on PANDA – rather pointing out the need to have roll something like PANDA &lt;em&gt;at all&lt;/em&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;Granted, PANDA is in its infancy.&amp;#160; My preference is that it stay there and not any more time be spent on enhancing it.&amp;#160; It meets the current needs of several different teams.&amp;#160; I’d rather it was killed off by something supported by either Microsoft, or the community – we don’t want to maintain it indefinitely, but probably would with no other choice.&amp;#160;&amp;#160; I’ve often thought about approaching our management team about releasing PANDA into the community in hopes it would gain support there. &lt;/p&gt;  &lt;p&gt;Would anyone else use something like PANDA?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-3292411577342179390?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/7L2uAGjxrYY" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2010/03/panda-packaging-and-deployment.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-4867856174017617868</guid><pubDate>Wed, 10 Feb 2010 14:45:00 +0000</pubDate><atom:updated>2010-02-10T08:45:13.706-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Debugging</category><title>@ntdebugging Q&amp;A Question Opportunity</title><description>&lt;p&gt;The team responsible for the&amp;#160; &lt;a href="http://blogs.msdn.com/ntdebugging/default.aspx" target="_blank"&gt;Advanced Windows Debugging and Troubleshooting&lt;/a&gt; blog is looking for your “burning debug questions” that they hope to answer in an upcoming Q&amp;amp;A article.&amp;#160; You can tweet your questions to &lt;a href="http://twitter.com/ntdebugging" target="_blank"&gt;@ntdebugging&lt;/a&gt; for consideration for the article.&amp;#160; If your remotely interested in Windows debugging, and anything debugging related, I highly recommend checking them out!&lt;/p&gt;  &lt;p&gt;Unfortunately, I am finding it particularly hard to frame my question into &lt;a href="http://twitter.com/zachbonham" target="_blank"&gt;140 characters&lt;/a&gt; this morning, and short of a vertigo-like experience where I realize “&lt;a href="http://www.youtube.com/watch?v=SnHOi3f0tBA" target="_blank"&gt;I know Kung-Fu&lt;/a&gt;”, I thought I’d post my question here in hopes to get my question answered by the team that &lt;strong&gt;does&lt;/strong&gt; know kung fu.&lt;/p&gt;  &lt;p&gt;Realize that anything posted here, especially if false, is due to my imperfect understanding of &lt;a href="http://zachbonham.blogspot.com/search/label/Debugging" target="_blank"&gt;experiences&lt;/a&gt; and knowledge imparted by &lt;a href="http://blogs.msdn.com/ntdebugging/default.aspx" target="_blank"&gt;Advanced Windows Debugging and Troubleshooting&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/tess/" target="_blank"&gt;Tess Ferrandez&lt;/a&gt; (and her many compatriots!), &lt;a href="http://www.wintellect.com/CS/blogs/jeffreyr/default.aspx" target="_blank"&gt;Jeffrey Richter&lt;/a&gt;,&amp;#160; and the &lt;a href="http://zachbonham.blogspot.com/2006/12/debugging-microsoftnet-20-applications.html" target="_blank"&gt;Godfather of the Debugger&lt;/a&gt;, &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/default.aspx" target="_blank"&gt;John Robbins&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;h5&gt;The Setup&lt;/h5&gt;  &lt;p&gt;.NET allocates memory for each generation’s heap (0, 1, 2, LOH) in segments to get a continuous block of memory when it attempts to satisfy an allocation request, after a collection, and can’t.&amp;#160; This memory for each heap will likely level off as the application “warms up”, except potentially for generation 2, and large object heap.&amp;#160; During a garbage collection, each heap (0, 1, 2) is swept and compacted, except for the large object heap (LOH), which is just swept.&amp;#160; &lt;/p&gt;  &lt;p&gt;I understand the ‘sweep’ part of a collection to mean that the GC identifies which objects are no longer rooted and are available for collection (or finalization) and that ‘compact’ means that the addresses that are still alive in a heap are reorganized so that the heap has more continuous memory available to it.&amp;#160;&amp;#160; As the budget for each segment within the heap is exceeded, .NET will allocate another segment in order to fulfill allocations if it can.&lt;/p&gt;  &lt;h5&gt;The Question&lt;/h5&gt;  &lt;p&gt;My question comes down to what happens to that memory in each heap, that might not be used by the application (committed) any longer, but is still reserved by .NET?&amp;#160; When is it released back to the OS?&amp;#160; &lt;/p&gt;  &lt;p&gt;I’ve heard of rituals such as forcing Windows itself into low memory condition so that it asks each process to give up any reserved memory, or minimizing a process, and then restoring it, which essentially does the same thing.&amp;#160; These are just rumors and I’d prefer to know.&amp;#160; &lt;/p&gt;  &lt;p&gt; There are also rumors of something involving chickens, but I’d rather not go there…no one likes rituals, they are unreliable and often messy (think of the chickens!). &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-4867856174017617868?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/9UIvd9pojwU" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2010/02/ntdebugging-q-question-opportunity.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-151092578545283255</guid><pubDate>Thu, 05 Nov 2009 20:54:00 +0000</pubDate><atom:updated>2009-11-05T14:55:59.161-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><title>Long Live the Guid!</title><description>&lt;p&gt;Guid generation came up earlier today and it struck me, as someone who loves automation, Guid generation is still a very manual process for me.   &lt;/p&gt;&lt;p&gt;It seems like forever that I have used the Visual Studio &lt;b&gt;Tools | Create GUID&lt;/b&gt; tool to generate new Guid’s, using the Registry Format option, and &lt;b&gt;then&lt;/b&gt; removing the squiggy braces from the end product.&lt;/p&gt;&lt;p&gt;Today I learned from &lt;a href="http://www.theimes.com/"&gt;Mr. Anderson&lt;/a&gt; that my Guid string can keep the squiggy braces:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;g = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"{10246A29-8E88-46DC-925A-6F4BCB31EB56}"&lt;/span&gt;);&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;p&gt;This code for Guid generation is just as valid as:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;g = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"10246A29-8E88-46DC-925A-6F4BCB31EB56"&lt;/span&gt;);&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;p&gt;I would have sworn there was a time not so long ago that the squiggy braces would have caused an issue.  &lt;/p&gt;&lt;p&gt;I also learned that &lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper&lt;/a&gt; has a built-in live template for generating GUID’s called ‘nguid’, much like a snippet.  However, it doesn’t generate the Guid with quotes around it – which is my &lt;strong&gt;99.999%&lt;/strong&gt; usage scenario when creating Guid’s.  Outside of COM IDL work, I haven’t had to generate a Guid that wasn’t a string in as long as I can remember.  Fortunately, ReSharper gives me a nice little UI editor for modifying their templates (snippets) and now ‘ngen’ works the way I wanted it to by inserting the text:&lt;/p&gt;&lt;p&gt;&lt;span style="color:#a31515;"&gt;"10246A29-8E88-46DC-925A-6F4BCB31EB56"&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;Of course, this got me to thinking surely Visual Studio can do this?  Of course it can.   Here is the macro I created to do the same thing, which I then promptly mapped to the keyboard shortcut CTRL-N,CTRL-G.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;Public Module &lt;/span&gt;CodeGeneration&lt;br /&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;Sub &lt;/span&gt;CreateGuid()&lt;br /&gt;       &lt;span style="color:blue;"&gt;Dim &lt;/span&gt;ts &lt;span style="color:blue;"&gt;As &lt;/span&gt;TextSelection = DTE.ActiveDocument.Selection&lt;br /&gt;       ts.Insert(&lt;span style="color:#a31515;"&gt;"""" &lt;/span&gt;+ Guid.NewGuid().ToString() + &lt;span style="color:#a31515;"&gt;""""&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;End Sub&lt;br /&gt;&lt;br /&gt;End Module&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;p&gt;So now I can burn through Guids with wild abandon and so can you!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-151092578545283255?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/a6EtzUvCaBM" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/11/long-live-guid.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-1892197042450275617</guid><pubDate>Tue, 27 Oct 2009 12:21:00 +0000</pubDate><atom:updated>2009-10-27T07:21:48.106-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Script</category><category domain="http://www.blogger.com/atom/ns#">Tools</category><title>MSMQ.VBS – Manage Private MSMQ Queues</title><description>&lt;p&gt;I have been migrating some scripts and what nots to hosting at &lt;a href="http://www.github.com"&gt;github&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;This script allows some &lt;em&gt;very&lt;/em&gt; basic management of MSMQ private queues.&amp;#160; I typically use this from some sort of controlling script, either MSBuild or Nant, using their respective ‘shell’ tasks to cscript.exe.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Set your default scripting engine to cscript.exe&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;cscript //X:CScript&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Run msmq from the command line to get syntax&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;script src="http://gist.github.com/219519.js"&gt;&lt;/script&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-1892197042450275617?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/C1ycTz-h42c" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/10/msmqvbs-manage-private-msmq-queues.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-1183924829448013328</guid><pubDate>Wed, 07 Oct 2009 03:34:00 +0000</pubDate><atom:updated>2009-10-06T22:36:08.971-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>Bitmasking – A Blast From the Past</title><description>&lt;p&gt;The topic of &lt;em&gt;bitmasking&lt;/em&gt; came up recently and nearly made me fall out of my chair!&amp;#160; Had to whip something up to see if I could remember how...haven't done it in years (since my C/C++ days).&amp;#160; This code snippet below is in C# and is not nearly as elegant as it was in C/C++, but then again I never really cared for bit masking.&amp;#160; :)&amp;#160; There is some awkward casting I have to do because of language constraints, but the end result is pretty much who we did it in 'the good old days'.&amp;#160; I can't remember the last time I had to worry about &lt;i&gt;bits&lt;/i&gt;, or &lt;i&gt;bytes&lt;/i&gt;.&amp;#160; In hindsight I can clean that up using const values instead of an enum, but there you go.&lt;/p&gt;  &lt;p&gt;&lt;a href="www.vipan.com" target="_blank"&gt;Vipan Singala&lt;/a&gt; has an excellent article titled &lt;a href="http://www.vipan.com/htdocs/bitwisehelp.html" target="_blank"&gt;Bitwise Operators and Masks&lt;/a&gt; which I can recommend if your interested in this sort of thing.&lt;/p&gt;  &lt;p&gt;The output of the sample below is as follows:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;We are moving...     &lt;br /&gt;We are moving faster...      &lt;br /&gt;Not moving faster than light yet.      &lt;br /&gt;NOW we are moving faster than the speed of light...      &lt;br /&gt;Uh oh, looks like we've dropped out of faster than light travel!      &lt;br /&gt;But we are still moving moving fast...      &lt;br /&gt;We are still moving...      &lt;br /&gt;Removing all other flags..      &lt;br /&gt;Now we have stopped.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System;    &lt;br /&gt;    &lt;br /&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;BitMasking    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Program     &lt;br /&gt;&amp;#160;&amp;#160; &lt;/span&gt;{    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;enum &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SpeedFlags &lt;/span&gt;: &lt;span style="color: blue"&gt;byte     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Stopped = 0x00000000,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Moving = 0x00000001,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Faster = 0x00000002,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FTL = 0x00000004    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;byte&lt;/span&gt;status = (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Stopped;    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// set the 'Moving' bit     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;status |= (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Moving;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// set the 'Faster' bit     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;status |= (&lt;span style="color: blue"&gt;byte&lt;/span&gt;) &lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Faster;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// status AND'ed with 'Moving' bit equals our 'Moving' bit, then its set     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;( (status &amp;amp; (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Moving) == (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Moving )    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;We are moving...&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// check if faster bit is set     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;( (status &amp;amp; (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Faster) == (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Faster)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;We are moving faster...&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// our FTL bit is not set yet!!     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;((status &amp;amp; (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.FTL) == (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.FTL)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;We are moving faster than the speed of light...&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;Not moving faster than light yet.&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// set the bit     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;status |= (&lt;span style="color: blue"&gt;byte&lt;/span&gt;) &lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.FTL;    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// check to see if we've got the bit set     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;((status &amp;amp; (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.FTL) == (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.FTL)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;NOW we are moving faster than the speed of light...&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; status ^= (&lt;span style="color: blue"&gt;byte&lt;/span&gt;) &lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.FTL;    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt;((status &amp;amp; (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.FTL) == (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.FTL)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;We are still moving faster than the speed of light...&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;Uh oh, looks like we've dropped out of faster than light travel!&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// check if faster bit is set     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;((status &amp;amp; (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Faster) == (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Faster)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;But we are still moving moving fast...&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// status AND'ed with 'Moving' bit equals our 'Moving' bit, then its set     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;((status &amp;amp; (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Moving) == (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Moving)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;We are still moving...&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;Removing all other flags..&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; status ^= (&lt;span style="color: blue"&gt;byte&lt;/span&gt;) &lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Faster;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; status ^= (&lt;span style="color: blue"&gt;byte&lt;/span&gt;) &lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Moving;    &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt;((status &amp;amp; (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Stopped) == (&lt;span style="color: blue"&gt;byte&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;SpeedFlags&lt;/span&gt;.Stopped)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;Now we have stopped.&amp;quot;&lt;/span&gt;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;}    &lt;br /&gt;&lt;/p&gt; &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-1183924829448013328?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/4-AXf9jxpW4" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/10/bitmasking-blast-from-past.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-1928402256545747172</guid><pubDate>Mon, 28 Sep 2009 13:49:00 +0000</pubDate><atom:updated>2009-09-28T08:50:57.676-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>IDisposable is a Developer Convention</title><description>&lt;p&gt;Given the following bit of code, when does the &lt;strong&gt;Dispose&lt;/strong&gt; method of &lt;strong&gt;Trash&lt;/strong&gt; get called?&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;Dispose&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Trash &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;IDisposable&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;#region &lt;/span&gt;IDisposable Members&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;public void &lt;/span&gt;Dispose()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;I am being disposed&amp;quot;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;#endregion&lt;br /&gt;    &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: blue"&gt;class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Program&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color: blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: blue"&gt;var &lt;/span&gt;c = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Trash&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Answer&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Never&lt;/strong&gt;.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/system.idisposable.aspx" target="_blank"&gt;IDisposable&lt;/a&gt; interface is a &lt;em&gt;developer&lt;/em&gt; convention and is not enforced by the .NET runtime.&amp;#160; IDisposable &lt;strong&gt;is not&lt;/strong&gt; called by the .NET runtime on the developer behalf (at the time of this writing).&amp;#160; IDisposable exists to help model a more explicit (deterministic) method for releasing of memory for .NET developers.&amp;#160; See &lt;a href="http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx" target="_blank"&gt;Implementing Finalize and IDisposable to Clean Up Unmanaged Resources&lt;/a&gt;.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Some might say that it was a warm and fuzzy blanket used to swathe all the C++ programmers in as they transitioned into .NET.&amp;#160; That may be the case, but inevitably, as a developer, you will need a way to declare your &lt;em&gt;intent&lt;/em&gt; that your class has resources that need to be cleaned up &lt;em&gt;now&lt;/em&gt;. Traditionally, this has been to represent unmanaged resources but it doesn’t have to be.&amp;#160; So, if you see a class that implements IDisposable, consider it good form to go ahead and invoke Dispose as soon as your finished with the object.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;An Exception for Every Rule&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The exception to the rule is when working with WCF proxies.&amp;#160; This well known design pattern of IDisposable is broken in a bad way. For some good information as to why try a search &lt;a href="http://www.google.com/search?rlz=1C1GGLS_enUS299US304&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=WCF+IDisposable+is+broken" target="_blank"&gt;WCF IDisposable is broken&lt;/a&gt;.&amp;#160; The nut of which is if you call Dispose on a WCF proxy, and the channel has already been faulted, you’ll never see the originating fault because of the proxies implementation of Dispose just tries to Close the channel, which throws a new exception, and stomps all over the call stack of the original exception.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Your damned if you do call Dispose (might lose useful error information) and your damned if you don’t (hold server resources open longer than required).&amp;#160; Many of the links in the search query will return useful ways to get around the problem, but it would be nice if, as a community, we adopted one of these solutions.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This has been a .NET public service announcement.&amp;#160; You may now return to your regularly scheduled programming.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-1928402256545747172?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/9EzrkQiry_Y" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/09/idisposable-is-developer-convention.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-8453341902502669687</guid><pubDate>Sat, 26 Sep 2009 13:53:00 +0000</pubDate><atom:updated>2009-09-26T08:53:58.412-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">Xml</category><category domain="http://www.blogger.com/atom/ns#">books</category><title>Reviewing Beginning Xml with C# 2008: From Novice to Professional</title><description>&lt;p&gt;&lt;a href="http://www.amazon.com/Beginning-XML-2008-Professional-ebook/dp/B002FL44SG/ref=sr_1_2?ie=UTF8&amp;amp;qid=1252267386&amp;amp;sr=8-2" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" border="0" align="left" src="http://ecx.images-amazon.com/images/I/519wlZSvd7L._SL160_AA115_.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;First off, I would like to thank &lt;a href="http://www.amazon.com/Beginning-XML-2008-Professional-ebook/dp/B002FL44SG/ref=sr_1_2?ie=UTF8&amp;amp;qid=1252267386&amp;amp;sr=8-2" target="_blank"&gt;Apress Books&lt;/a&gt; for their supporting local user group communities by donating copies of their titles for review!&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;I would like to be upfront before jumping into the review: the first time I read the book, I did not like it.&amp;#160; There was not enough time spent with Xml best practices, not enough space dedicated to more Xml centric terminology and with a book weighing in at 600 pages, way too much information that is readily available via your favorite search engine.&amp;#160; So, I put the book down.&lt;/p&gt;  &lt;p&gt;After a bit of reflection though I realized what &lt;em&gt;should&lt;/em&gt; have been obvious: &lt;strong&gt;I was not the target market for this book&lt;/strong&gt;.&amp;#160; While I am likely not familiar with some of the more esoteric features of Xml, I am very comfortable with the day to day application of Xml, and Xml related technologies, so I re-read &lt;em&gt;Beginning Xml with C#: From Novice to Professional&lt;/em&gt; with a different perspective. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Xml can be a very wide topic just as ‘development’ can be a broad, as well as deep, topic. For sure, if you are a .NET developer today, you are virtually surrounded by Xml goo and its closing fast!&amp;#160; Xml might not always be in your face though, and its easy to ignore for a while.&amp;#160; It might be hiding behind some tooling, or buried in a configuration file, but its there nonetheless, just waiting to jump out of the shadows and club you over the head!&amp;#160; You can’t ignore Xml for forever, so don’t be a victim of xml, learn how to defend yourself today! &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;The Good&lt;/h3&gt;  &lt;p&gt;The author does a good job of uncovering all the nooks and crannies your likely to find Xml hiding: configuration files, serialization formats, Sql Server, and Windows Communication Foundation (WCF).&lt;/p&gt;  &lt;p&gt;There was well presented information around when to use XmlDocument v. XmlReader which was nice.&amp;#160; XmlDocument is so easy that its simple to overlook the fact that if you really only need read-only access to the data, then XmlReader is your better choice.&amp;#160; I even find myself doing this on many occasions.&lt;/p&gt;  &lt;p&gt;The chapter on using Xml with Sql Server was done well.&lt;/p&gt;  &lt;p&gt;I was puzzled that DTD (document type definitions) received as much attention as they did.&amp;#160; However, there is a remote possibility you might run into them, so +1 for covering them.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;The Bad&lt;/h3&gt;  &lt;p&gt;The author appears to make the assumption that Xml, without a namespace, is considered 'the norm'.&amp;#160; I say ‘appears’, as xml namespaces were pretty much ignored, and can’t be found in the index.&amp;#160; I'm reviewing to see if I just missed it, but working with Xml and Xml Namespaces are probably the first big hurdle a developer will run into.&lt;/p&gt;  &lt;p&gt;I, unfortunately, am pretty militant around namespaces, believing if your not using namespaces, well then that's analogous to C# without a namespace, and only acceptable in the most trivial examples.&amp;#160; How many Employee schema's do you think are out there?&amp;#160; How do you tell your Employee schema from another companies Employee schema?&amp;#160; Heck, most companies will have multiple schema's for similar types across departments (Orders, Inventory, Shipment, Customer, etc..).&amp;#160; Namespaces are how you tell yours from someone else's and give you a pivotal piece of metadata to key off of in your versioning strategy. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;The Ugly&lt;/h3&gt;  &lt;p&gt;My biggest complaints about the book, is also one mostly driven by yet another personal opinion, and that is the examples.&amp;#160; I’m not a fan of WinForm examples, unless your showing me an example that centers around WinForm development.&amp;#160; The best way to to show me Xml centric examples is with the good, old fashioned, console application.&amp;#160; Otherwise, there is too much technology mixing going on and key points might get lost in demo goo, not to mention consuming valuable page real estate that could be better used for more in-depth coverage of the topic.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;One might think that xml in the .NET world is ubiquitous enough that everyone who picks up Visual Studio will just learn through osmosis what they need to know about xml.&amp;#160; Some of this may even be true.&amp;#160; However, if you are new to developing for the .NET platform, having this book available could help jumpstart your development and keep you on task.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-8453341902502669687?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/ggN-qtRxDvM" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/09/reviewing-beginning-xml-with-c-2008.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-3792112033710969260</guid><pubDate>Fri, 04 Sep 2009 16:23:00 +0000</pubDate><atom:updated>2009-09-04T11:28:16.385-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>Observable Property Code Snippet</title><description>&lt;p&gt;I’ve been using the a new code snippet to create an ‘observable’ property when working with WPF and the &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" target="_blank"&gt;Model-View-ViewModel&lt;/a&gt; pattern.&amp;nbsp; This is really only useful if your class implements &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx" target="_blank"&gt;INotifyPropertyChanged&lt;/a&gt;, which our ViewModel base does. &lt;/p&gt; &lt;p&gt;The snippet generates the following block of code:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private string &lt;/span&gt;_name;&lt;br /&gt;&lt;span style="color: blue"&gt;public string &lt;/span&gt;Name&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: blue"&gt;get&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color: blue"&gt;return &lt;/span&gt;_name;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: blue"&gt;set&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue"&gt;if &lt;/span&gt;(_name != &lt;span style="color: blue"&gt;value&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            _name = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&lt;br /&gt;            OnPropertyChanged(&lt;span style="color: #a31515"&gt;"Name"&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;..and here is the snippet.&amp;nbsp; See my previous post on &lt;a href="http://zachbonham.blogspot.com/2008/12/datamember-code-snippet.html" target="_blank"&gt;[DataMember] Code Snippet&lt;/a&gt; on how to install snippets.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;" &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;" &lt;span style="color: blue"&gt;?&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CodeSnippets  &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CodeSnippet &lt;/span&gt;&lt;span style="color: red"&gt;Format&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0.0&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Header&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;oprop&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Shortcut&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;oprop&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Shortcut&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Code snippet for an automatically implemented observable property for any class that implements INotifyPropertyChanged.&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Author&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Your name here&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Author&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;SnippetTypes&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;SnippetType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Expansion&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;SnippetType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;SnippetTypes&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Header&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Snippet&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Declarations&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Literal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;type&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Property type&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Default&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;int&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Default&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Literal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Literal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;field&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Backing Field Name&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Default&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;_myProperty&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Default&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Literal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Literal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;property&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Property name&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Default&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MyProperty&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Default&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Literal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Declarations&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Code &lt;/span&gt;&lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;csharp&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;![CDATA[&lt;br /&gt;        &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: gray"&gt;private $type$ $field$;&lt;br /&gt;            public $type$ $property$ &lt;br /&gt;            { &lt;br /&gt;                get&lt;br /&gt;                {&lt;br /&gt;                  return $field$;&lt;br /&gt;                }&lt;br /&gt;                set&lt;br /&gt;                {&lt;br /&gt;                &lt;br /&gt;                  if ( $field$ != value )&lt;br /&gt;                  {&lt;br /&gt;                    $field$ = value;&lt;br /&gt;                    OnPropertyChanged("$property$");&lt;br /&gt;                  }&lt;br /&gt;                &lt;br /&gt;                }&lt;br /&gt;             }&lt;br /&gt;            $end$&lt;br /&gt;            &lt;br /&gt;            &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;]]&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Code&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Snippet&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CodeSnippet&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CodeSnippets&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-3792112033710969260?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/RugxGcD7Oag" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/09/observable.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-9193464686612827511</guid><pubDate>Sat, 11 Jul 2009 18:39:00 +0000</pubDate><atom:updated>2009-07-11T13:43:22.791-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Vacation</category><title>Ft. Walton Beach Vacation Summary</title><description>&lt;p&gt;Our family spent a week in Ft. Walton Beach, Florida, this year.&amp;#160; Below are my notes of each day’s events – Sally has kept her own journal, so there is no telling what additional detail I’ve left out!&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/5Ew0wqF8iHC0S0LWcs-pww?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_00rbDYG49Lg/SljCeU4OPjI/AAAAAAAAN0A/8UhcnUSJFpo/s288/DSC_0509.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-1.html" target="_blank"&gt;Day 1&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-2.html" target="_blank"&gt;Day 2&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-3.html" target="_blank"&gt;Day 3&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-4.html" target="_blank"&gt;Day 4&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-5.html" target="_blank"&gt;Day 5&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-6.html" target="_blank"&gt;Day 6&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The pictures can be found by following this link for &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009#" target="_blank"&gt;Fort Walton Beach Vacation&lt;/a&gt; pictures.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-9193464686612827511?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/crJ2s6EBoJQ" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-summary.html</link><author>noreply@blogger.com (Zach Bonham)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_00rbDYG49Lg/SljCeU4OPjI/AAAAAAAAN0A/8UhcnUSJFpo/s72-c/DSC_0509.JPG" height="72" width="72" /></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-8176504987868896006</guid><pubDate>Sat, 11 Jul 2009 18:35:00 +0000</pubDate><atom:updated>2009-07-11T13:35:27.167-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Vacation</category><title>Ft. Walton Beach Vacation, Day 6</title><description>&lt;p&gt;July 10th, 2009&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Up at 7:00AM, check out is at 10:00AM.&amp;#160;&amp;#160; We eat breakfast, finish packing, clean the condo and leave Gulf Dunes by 9:30AM!&lt;/p&gt;  &lt;p&gt;We stop at a “Tropical Department Store”, aka another tourist trap, for souvenirs.&amp;#160; &lt;/p&gt;  &lt;p&gt;On the road back to Texas by 10:00AM.&amp;#160; We wave bye to Ft. Walton Beach.&amp;#160; &lt;/p&gt;  &lt;p&gt;Stop in Covington, LA for lunch @ 2:00PM (right on schedule) – hey, its Chick-fil-a!&lt;/p&gt;  &lt;p&gt;Stop for gas, potty break, and change drivers in Alexandria, LA – but forgot the gas!&amp;#160; Of course, Josh had to try out the bathroom there.&amp;#160; Actually, very clean bathroom in the downtown Alexandria (we got lost – err, took the wrong exit).&amp;#160; Kudo’s to McDonalds!&amp;#160; I think its a first! &lt;/p&gt;  &lt;p&gt;Finally get gas on the other side of Shreveport, LA – nervously watching the gas gauge the whole way.&amp;#160; &lt;/p&gt;  &lt;p&gt;We pull into our driveway at 10:30PM.&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-8176504987868896006?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/pJMAam_6EJw" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-6.html</link><author>noreply@blogger.com (Zach Bonham)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-4289326900986606995</guid><pubDate>Sat, 11 Jul 2009 18:34:00 +0000</pubDate><atom:updated>2009-07-11T13:34:42.790-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Vacation</category><title>Ft. Walton Beach Vacation, Day 5</title><description>&lt;p&gt;July 9th, 2009&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This morning over coffee, I got to see some lifeguard trainees.&amp;#160; All girls.&amp;#160; Yay! &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dolphin-sstar.com/" target="_blank"&gt;Southern Star Dolphin Cruise&lt;/a&gt; today from 9AM – 11AM in Destin!&amp;#160; Destin is only 8 miles east of Ft. Walton Beach.&amp;#160; We parked in the public parking of the Emerald Grand and located the Southern Star’s stand along the harbor wall.&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/OnBPsAby60lygXBHcOwMug?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_00rbDYG49Lg/SljCcwmuIcI/AAAAAAAANws/4jeMOYr2P1I/s288/DSC_0502.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;The dolphin cruise was awesome!&amp;#160; Saw quite a few &lt;a href="http://picasaweb.google.com/lh/photo/3SJFi3_pOAz8Dpsk_v_Bvw?feat=directlink" target="_blank"&gt;dolphins&lt;/a&gt; and a &lt;a href="http://picasaweb.google.com/lh/photo/HVDGU5R0_mvBExLLcHQXrA?feat=directlink" target="_blank"&gt;spotted eagle ray&lt;/a&gt; – I think I saw a shark, but I missed the sea turtle (wrong side of the boat).&amp;#160; The glass bottom feature of the cruise was a bit overrated, even when you see fish, you can’t see colors, etc.&amp;#160; Usually the boat is moving too fast to see anything through the small port holes.&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/vF4EhGYIfGCsOIXWd0PUKQ?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_00rbDYG49Lg/SljCTrfUp_I/AAAAAAAANvQ/hehq_sP1dgA/s288/DSC_0358.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Unfortunately, both kids got sea sick.&amp;#160; Boo.&amp;#160; They didn’t throw up though, and didn’t really fuss much.&amp;#160; Very proud of what troopers they were considering it was a somewhat difficult situation.&lt;/p&gt;  &lt;p&gt;We ate at Pat O'Brien's (Destin) – had crawfish tacos, muffalata sandwich and the best caesar salad ever!&amp;#160; I think it was the freshly grated parmesan cheese that made it pop.&amp;#160; The kids, of course, had chicken fingers.&lt;/p&gt;  &lt;p&gt;We spend the afternoon on the beach, but pick up supplied for a movie and real popcorn (Rico’s Popcorn) for bedtime.&amp;#160; &lt;/p&gt;  &lt;p&gt;Kids decided they wanted tattoos to remind them of the trip, so we walked down to Fudpuckers to get inked!&amp;#160; Hannah got a bear with hearts and Josh got a tank.&amp;#160; Sally’s tattoo washed off in the sudden downpour we got caught in while there.&amp;#160; This was the first real rain we’ve had since arriving at Ft. Walton Beach.&amp;#160; We wait it out under a patio umbrella until its light enough to walk back.&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/PIkC4ET9dlPQShJawzwNuQ?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_00rbDYG49Lg/SljCiObpSKI/AAAAAAAANxU/EXY_3DSMNjc/s288/DSC_0560.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This is our last night here.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-4289326900986606995?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/63IApXgIBf0" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-5.html</link><author>noreply@blogger.com (Zach Bonham)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_00rbDYG49Lg/SljCcwmuIcI/AAAAAAAANws/4jeMOYr2P1I/s72-c/DSC_0502.JPG" height="72" width="72" /></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-1408303958279071381</guid><pubDate>Sat, 11 Jul 2009 18:34:00 +0000</pubDate><atom:updated>2009-07-11T13:34:00.790-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Vacation</category><title>Ft. Walton Beach Vacation, Day 4</title><description>&lt;p&gt;July 8th, 2009&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;First one up – before 8AM this time.&amp;#160; I go to the local stores looking for ‘sun shirts’ – those shirts that have some UV blocker in them and are basically 50 SPF by themselves.&amp;#160; Find one for Josh, but no one else.&lt;/p&gt;  &lt;p&gt;We spend the day playing in the surf, building sandcastles and picking up sea shells.&lt;/p&gt;  &lt;p&gt;Hannah and Josh really took to riding the “Gnarly Board”.&amp;#160; Hannah can go the distance on it, all the way to the beach!&amp;#160; Josh just makes it look good! &lt;/p&gt;  &lt;p&gt;I tried to help Josh with the board, explaining he had to lay down on it instead of just sitting on it like he wanted, but he wouldn’t listen.&amp;#160; First wave tipped him face first into the (soft) sand and rolled him in sand and water.&amp;#160; He refused to ride the board for a while stating that it was my fault (meaning Dad) for his wipe out.&amp;#160; He later rode the board again, but laying down on the board, and was successful in catching some waves!&amp;#160; He later came over to me and told me “Dad, you were right, I was wrong” – priceless! &lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/Rf_dNwWGVgLucuQ5Ff37NA?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_00rbDYG49Lg/SljCEwQ47BI/AAAAAAAANtA/rto36A6Af0I/s288/DSC_0132.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;The sea shells were really nothing more than fragments of sand dollars, but Hannah did manage to find a really nice one – looked like a conch shaped shell that a hermit crab might have lived in.&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/5bgU_4g7wooqotZR2rh0xA?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_00rbDYG49Lg/SljCQhP73xI/AAAAAAAANu0/MUWKFOMumG4/s288/DSC_0310.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Dad burns more but Josh is fine by slathering him in sunscreen and making him wear his shirt.&amp;#160; Hannah and Sally continue to work on their tans.&lt;/p&gt;  &lt;p&gt;Threatening rain today, but we don’t see any.&lt;/p&gt;  &lt;p&gt;Walk to Fudpuckers for dinner – its a complete tourist trap.&amp;#160; Not like I didn’t expect it.&amp;#160; There was also some questionable TV on in the background considering half the crowd there was under 10.&amp;#160; Commercials for the HBO series “Hung” is not appropriate.&amp;#160; I don’t want to explain to my 8 year old what that is – luckily, she didn’t see it.&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/bWvAog-JT0s3VJjXbX6Khg?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_00rbDYG49Lg/SljCSdt8h2I/AAAAAAAANvE/smy4z3yc9s4/s288/DSC_0345.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;We got our picture taken with a baby alligator – pretty cool.&amp;#160; Though you kind of feel sorry for the alligators. &lt;/p&gt;  &lt;p&gt;Everyone was crashed after dinner, but I had been seeing flashlights on the beach at night and I wanted to see what they were seeing.&amp;#160; So I hit the beach around 9:30PM with my flashlight.&amp;#160; Turns out that the whole event was probably started by someone who lost their watch – everyone I passed the conversation went like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Me - “What are you looking for”?&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;Them – '”Same thing you are, I guess”.&lt;/p&gt;    &lt;p&gt;Me - “I”m not sure what I’m looking for”?&lt;/p&gt;    &lt;p&gt;Them - “Oh, OK.&amp;#160; Have a good night”!&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I did see 3 crabs…kind of like horseshoe crabs, but they are very fast!&lt;/p&gt;  &lt;p&gt;Oh, yeah…Capital One disabled my credit card.&amp;#160; Seems I forgot to tell them I was travelling – since I’ve used this credit card all over the world (ok – China and US) and never had a problem it never occurred to me. I was fine with them disabling my card, appreciative really.&amp;#160;&amp;#160; What I was not happy with is that there was no easy way to re-enable it without navigating 5 levels deep of menu options on a crappy Black Jack II phone.&amp;#160; Once I got someone on the phone, it took confirming a few charges and we were back in party mode!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-1408303958279071381?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/AmfZ7vEwUs4" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-4.html</link><author>noreply@blogger.com (Zach Bonham)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_00rbDYG49Lg/SljCEwQ47BI/AAAAAAAANtA/rto36A6Af0I/s72-c/DSC_0132.JPG" height="72" width="72" /></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-1376426387482520585</guid><pubDate>Sat, 11 Jul 2009 18:30:00 +0000</pubDate><atom:updated>2009-07-11T13:30:27.897-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Vacation</category><title>Ft. Walton Beach Vacation, Day 3</title><description>&lt;p&gt;July 7, 2009&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Up at 8am – first one up.&amp;#160; Trend that continues for the rest of the week.&amp;#160; Spend every morning with coffee on the patio and listen to the surf and people watch.&lt;/p&gt;  &lt;p&gt;Sally took a walk on the beach while I waited for Josh to wake up so we can hit the beach!&lt;/p&gt;  &lt;p&gt;Spent all day on the beach, except for coming back up to the condo for lunch.&amp;#160; We had sandwiches for lunch and pizza for dinner, followed by a movie and popcorn.&amp;#160; Don’t think we went to bed until after 10PM every night.&lt;/p&gt;  &lt;p&gt;While on the beach, we built walls and imaginary castles and moats, only to have a rogue wave come in and tear it all down.&amp;#160; Fun!&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/FZ7neitMiJoVsWVW8gSA1w?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_00rbDYG49Lg/SljB_TfJnRI/AAAAAAAANsQ/p60QtypeA38/s288/DSC_0078.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Kids and Sally bury me in the sand, which evidently exhausted me because I was first in bed.&lt;/p&gt;  &lt;p&gt;Josh and I got sunburn on places we missed with sunscreen.&amp;#160; Ouch!&amp;#160;&amp;#160; Hannah and Sally just got deeper tans.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-1376426387482520585?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/jM4K7vb8IJg" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-3.html</link><author>noreply@blogger.com (Zach Bonham)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_00rbDYG49Lg/SljB_TfJnRI/AAAAAAAANsQ/p60QtypeA38/s72-c/DSC_0078.JPG" height="72" width="72" /></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-378248500997791697</guid><pubDate>Sat, 11 Jul 2009 18:27:00 +0000</pubDate><atom:updated>2009-07-11T13:29:51.088-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Vacation</category><title>Ft. Walton Beach Vacation, Day 2</title><description>&lt;p&gt;July 6th, 2009&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Woke by 9am, but got downstairs too late for the continental breakfast.&amp;#160; Ate breakfast at the Chick-fil-a in Covington, LA.&lt;/p&gt;  &lt;p&gt;We left Covington in the pouring rain!&amp;#160; It was seriously, stop on the side of the road (we didn’t) kind of rain.&amp;#160; Which probably explains why I ran over a tree top that had snapped off and blown onto the highway.&amp;#160; This went on for about 30 minutes of driving rain travelling between 10 and 20 mph.&lt;/p&gt;  &lt;p&gt;Before we knew it, we were finally out of Louisiana and in Mississippi.&amp;#160; There is an awesome bridge in Mississippi that I wish I had a picture of.&amp;#160; &lt;/p&gt;  &lt;p&gt;We blinked our eyes and less than 100 miles later we are in Alabama.&lt;/p&gt;  &lt;p&gt;Alabama was notable for the tunnel in Mobile and the &lt;a href="http://www.ussalabama.com/" target="_blank"&gt;U.S.S. Alabama&lt;/a&gt;, visible from the highway.&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/QLeJZWilm10hvOX5C7W7jw?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_00rbDYG49Lg/SljB7uqlRjI/AAAAAAAANro/jb4yXFHnOuM/s288/DSC_0019.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;We hit Florida by 2:30PM and Ft. Walton Beach by 3:30PM via exit 56!&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/7ogslMgLe0oiv_c2niKcrQ?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_00rbDYG49Lg/SljB7266j-I/AAAAAAAANrs/gXt0wus_0RQ/s288/DSC_0033.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Checked into the Gulf Dunes complex (#406) which was pretty nice – didn’t know what to expect beyond 1980’s style furniture!&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/_eH_ay4Z5XL2cx7HqGFocA?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_00rbDYG49Lg/SljB9kwz76I/AAAAAAAANr8/8gPRo8H53Nk/s288/DSC_0044.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;We didn’t bother to unpack, except for swimsuits and hit the beach.&amp;#160; &lt;/p&gt;  &lt;p&gt;The sand is everything that we’ve been told…talcum powder by the dunes and sugar by the water.&amp;#160; It was great!&amp;#160; Water was very clear but had little green algae looking organisms in the water that gave it a really green tint.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/Q3mzRDgdGkN_A3nlOZRPeA?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_00rbDYG49Lg/SljB9P0E_FI/AAAAAAAANr4/aAdA4KvIZrE/s288/DSC_0042.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;We play on the beach until after dark 30.&amp;#160; We are starving at this point and try &lt;a href="http://www.fudpuckers.com/ftwalton.htm" target="_blank"&gt;Fudpuckers&lt;/a&gt; but there is a 1 hour wait (there is always a 1 hour wait) so we head up the highway and find &lt;a href="http://www.myspace.com/floydsfwb" target="_blank"&gt;Floyd’s&lt;/a&gt;.&amp;#160; We ordered anything that sounded good off the menu:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Coco Loco Shrimp (sweet) &lt;/li&gt;    &lt;li&gt;Kicker Shrimp (spicy) &lt;/li&gt;    &lt;li&gt;Corn and Shrimp Chowder &lt;/li&gt;    &lt;li&gt;Tuna Rolls &lt;/li&gt;    &lt;li&gt;Shrimp Rolls &lt;/li&gt;    &lt;li&gt;Emerald Coast (adult beverage) &lt;/li&gt;    &lt;li&gt;Raspberry Daiquiri's &lt;/li&gt;    &lt;li&gt;Miller Light &lt;/li&gt;    &lt;li&gt;Chicken Fingers (of course) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We then hit Publix, a grocery store chain, and bought groceries for the week ($200 – ouch!).&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-378248500997791697?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/8JobTWU48dk" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-2.html</link><author>noreply@blogger.com (Zach Bonham)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_00rbDYG49Lg/SljB7uqlRjI/AAAAAAAANro/jb4yXFHnOuM/s72-c/DSC_0019.JPG" height="72" width="72" /></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-7418428341170620909</guid><pubDate>Sat, 11 Jul 2009 18:25:00 +0000</pubDate><atom:updated>2009-07-11T13:25:13.018-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Vacation</category><title>Ft. Walton Beach Vacation, Day 1</title><description>&lt;p&gt;July 5th, 2009&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Packed and left the house by 10:15am, which is no mean feat for our family!&lt;/p&gt;  &lt;p&gt;Took Hwy 75 to I-20E and hit Shreveport, LA by 2PM.&amp;#160; Seems like it took forever to leave Texas…that is, until we entered Louisiana, where we took I-49S towards Alexandria, LA.&amp;#160; There are NO bathrooms off of I-49 between Shreveport and Alexandria.&amp;#160; Well, there is one.&amp;#160; In &lt;a href="http://www.natchitoches.net/index.php" target="_blank"&gt;Natchitoches&lt;/a&gt;.&amp;#160; Don’t pass this one up!&amp;#160; Its the best place for a bathroom before Alexandria.&lt;/p&gt;  &lt;p&gt;Since we missed Natchitoches exit, we wound up stopping in a backwater gas station well off the freeway – it was essentially a mobile home (no wheels) and a gas pump.&amp;#160;&amp;#160; We had to buy something to use the restroom – silly me bought gas.&amp;#160; Of course, Josh can’t resist the Pavlovian response to a public bathroom and had to poop.&amp;#160; I could hear banjos the whole while…my only regret is that we didn’t get pictures.&lt;/p&gt;  &lt;p&gt;Stopped in Alexandria, LA at a McDonalds – bleh.&lt;/p&gt;  &lt;p&gt;Made it to Covington, LA by 6:30PM.&amp;#160; We stayed at a Courtyard by Marriot, room #311 and used points for it.&amp;#160; Total cost: $0.&lt;/p&gt;  &lt;p&gt;Ate at Acme for dinner…the red beans and rice were phenomenal, but the Bloody Mary sucks.&amp;#160; &lt;/p&gt;  &lt;table style="width: auto"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/pvDHwE8v-B3UocfraLh7lQ?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_00rbDYG49Lg/SljB6l7sV4I/AAAAAAAANrc/9y10RCq0jU4/s288/DSC_0002.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="text-align: right; font-family: arial,sans-serif; font-size: 11px"&gt;From &lt;a href="http://picasaweb.google.com/zachbonham/FtWaltonBeach2009?feat=embedwebsite"&gt;FtWaltonBeach2009&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;We spent a fortune here.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-7418428341170620909?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/MAmN6fZ4b4s" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/07/ft-walton-beach-vacation-day-1.html</link><author>noreply@blogger.com (Zach Bonham)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_00rbDYG49Lg/SljB6l7sV4I/AAAAAAAANrc/9y10RCq0jU4/s72-c/DSC_0002.JPG" height="72" width="72" /></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-2184553314164163122</guid><pubDate>Wed, 10 Jun 2009 12:54:00 +0000</pubDate><atom:updated>2009-06-10T07:54:36.977-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>How Windows Defender Helped Me Save Face</title><description>&lt;p&gt;This morning I received a direct message from my brother on Facebook (warning #1) with a link to a url that just looked 'crazy', I clicked (mistake #1). &lt;p&gt;I was redirected to a site that appeared to be hosting a video, but prompted that it "Required Adobe Flash Player 10" to continue and attempted a download of file "setup.exe".&amp;nbsp; I downloaded the file and ran it (mistake #2). &lt;p&gt;Luckily, I am running &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=435BFCE7-DA2B-4A6A-AFA4-F7F14E605A0D&amp;amp;displaylang=en" target="_blank"&gt;Windows Defender&lt;/a&gt;, which detected changes to my system and prompted me for approval before committing them.&amp;nbsp; Windows Defender prompting me after an install is not unusual, however, it gave me a critical moment to collect my thoughts (first cup o'coffee this am, after all) and review what was about to occur.&amp;nbsp; That's when I noticed that the "Adobe Flash Setup" had installed several Windows &lt;a href="http://www.microsoft.com/whdc/driver/default.mspx" target="_blank"&gt;drivers&lt;/a&gt;.&amp;nbsp; &lt;em&gt;Drivers&lt;/em&gt;?&amp;nbsp; Nothing from the browser should &lt;strong&gt;EVER&lt;/strong&gt; install a Windows &lt;strong&gt;driver&lt;/strong&gt;?! &lt;p&gt;I'm now suspicious (sharp as a spoon, I am) and decide to investigate a little further. &lt;p&gt;I reviewed the "setup.exe", and viewed its details, there was no manufacturer data.&amp;nbsp; I then navigated to &lt;a href="http://www.adobe.com" target="_blank"&gt;Adobe&lt;/a&gt; and downloaded its installation program for &lt;a href="http://get.adobe.com/flashplayer/" target="_blank"&gt;Adobe Flash 10&lt;/a&gt;.&amp;nbsp; The file name is "install_flash_player.exe" and when viewing the file details is stamped repeatedly that its from Adobe. &lt;p&gt;Windows Defender reported the following changes to my system.&lt;/p&gt; &lt;table border="1" cellspacing="0" cellpadding="2" width="572"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="570"&gt;&lt;strong&gt;Windows Defender Report&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="570"&gt; &lt;p&gt;Description:&lt;br&gt;This program has potentially unwanted behavior. &lt;/p&gt; &lt;p&gt;Advice:&lt;br&gt;Permit this detected item only if you trust the program or the software publisher.  &lt;p&gt;Resources:&lt;br&gt;driver:&lt;br&gt;podmenadrv  &lt;p&gt;file:&lt;br&gt;&lt;strong&gt;C:\Program Files\podmena\podmena.sys&lt;/strong&gt;  &lt;p&gt;Category:&lt;br&gt;Not Yet Classified &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="570"&gt; &lt;p&gt;Description:&lt;br&gt;This program has potentially unwanted behavior.  &lt;p&gt;Advice:&lt;br&gt;Permit this detected item only if you trust the program or the software publisher.  &lt;p&gt;Resources:&lt;br&gt;regkey:&lt;br&gt;HKLM\Software\Microsoft\Windows\CurrentVersion\Run\\sysfbtray  &lt;p&gt;runkey:&lt;br&gt;HKLM\Software\Microsoft\Windows\CurrentVersion\Run\\sysfbtray  &lt;p&gt;file:&lt;br&gt;&lt;strong&gt;c:\windows\freddy46.exe&lt;/strong&gt;  &lt;p&gt;Category:&lt;br&gt;Not Yet Classified &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="570"&gt; &lt;p&gt;Description:&lt;br&gt;This program has potentially unwanted behavior.  &lt;p&gt;Advice:&lt;br&gt;Permit this detected item only if you trust the program or the software publisher.  &lt;p&gt;Resources:&lt;br&gt;regkey:&lt;br&gt;HKLM\Software\Microsoft\Windows\CurrentVersion\Run\\sysldtray  &lt;p&gt;runkey:&lt;br&gt;HKLM\Software\Microsoft\Windows\CurrentVersion\Run\\sysldtray  &lt;p&gt;file:&lt;br&gt;&lt;strong&gt;c:\windows\ld09.exe&lt;/strong&gt;  &lt;p&gt;Category:&lt;br&gt;Not Yet Classified &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;That's enough for me...I &lt;strong&gt;deny&lt;/strong&gt; the changes in Windows Defender, which requires a reboot to rollback.&amp;nbsp; After the reboot, all is well in the 'verse. &lt;p&gt;Shortly afterwards this morning I got an email from my brother warning me about it - he wasn't so lucky. &lt;p&gt;This is not the first time Windows Defender has saved my bacon. If your running Vista, or Windows XP SP2/3, make sure your running Defender, or a good virus scanner.&amp;nbsp; Defender seems to be less intrusive than the actual virus scanners I've tried over the years.   &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-2184553314164163122?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/2K3nMj7toHY" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/06/how-windows-defender-helped-me-save.html</link><author>noreply@blogger.com (Zach Bonham)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-6882105519681941189</guid><pubDate>Wed, 06 May 2009 12:40:00 +0000</pubDate><atom:updated>2009-05-06T07:40:45.262-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">User Group</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">WCF</category><title>[DFWCSUG] WCF and Silverlight</title><description>&lt;p&gt;The &lt;a href="http://www.dfwcsug.com" target="_blank"&gt;Dallas/Fort Worth Connected Systems User Group&lt;/a&gt; presentation this month is titled &lt;em&gt;&lt;strong&gt;"WCF and Silverlight"&lt;/strong&gt;&lt;/em&gt;.&amp;nbsp; Come join us as Amir Rajan (Sogeti) talks about:&lt;/p&gt; &lt;li&gt;Silverlight (crash course) &lt;li&gt;Walk-through of a simple Silverlight application using WCF  &lt;li&gt;Pros and Cons of using WCF with Silverlight  &lt;li&gt;Walk-through of a more complicated budgeting application that leverages Silverlight and WCF&lt;/li&gt; &lt;p&gt;As always, there will be free food and prizes!&lt;/p&gt; &lt;p&gt;Hope to see you there!&lt;/p&gt; &lt;p&gt;Z&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-6882105519681941189?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/PDskyOM-ew4" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/05/dfwcsug-wcf-and-silverlight.html</link><author>noreply@blogger.com (Zach Bonham)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-6510945398389336450</guid><pubDate>Tue, 20 Jan 2009 13:45:00 +0000</pubDate><atom:updated>2009-01-20T07:45:23.759-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>MSBuild</title><description>&lt;p&gt;Recently I posted a little about what I was calling the &lt;a href="http://zachbonham.blogspot.com/2008/12/msbuild-blah.html" target="_blank"&gt;MSBuild Blahs&lt;/a&gt;, but probably more aptly titled “How I spent my Christmas Vacation”, and thought that it needed a follow up.&lt;/p&gt;  &lt;p&gt;I continued to &lt;a href="#twiddle"&gt;[1]&lt;/a&gt; twiddle with MSBuild until I was able to build something that met our needs for deployment – ok, should meet our needs. It goes into our development environment this week to work any kinks out.&amp;#160; I’ve definitely reached the ‘stage’ of learning that you could call (0ver) confidence with the language (is it a language, or a tool?).&amp;#160; You definitely have to change the way you think about accomplishing a task.&lt;/p&gt;  &lt;p&gt;The push that got me ‘over the hump’ (besides just head banging)?&amp;#160; I read on a blog/MSDN post about XSLT being “the language of XML” and that “MSBuild was built on XML”, so therefore, the “idea of batching targets was taken from XSLT”.&lt;/p&gt;  &lt;p&gt;Once I started thinking of everything as ‘batching’ targets, things started falling into place.&amp;#160;&amp;#160; I found the post that helped me make the leap, by Jeff C. in the &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/994761a3-ea9d-40c7-8d4f-4c208b2023f6/" target="_blank"&gt;MSBuild v. Nant&lt;/a&gt; in the MSDN MSBuild forum.&amp;#160; Other helpful articles/posts I can be linked back to &lt;a href="http://www.sedodream.com/default.aspx" target="_blank"&gt;Sayed Ibrahim Hashimi&lt;/a&gt; or the &lt;a href="http://blogs.msdn.com/msbuild" target="_blank"&gt;MSBuild Team&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;You can be successful with either tool.&amp;#160; If your just starting to develop your package and deployment scripts,&amp;#160; and target the Windows platform, then checkout MSBuild.&amp;#160;&amp;#160; If you’ve got existing Nant scripts, target non-Windows platforms, or use open source tools, your likely to get better synergy out of using Nant.&amp;#160; With anything, your mileage may vary.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Con&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Yes, I’m starting with the Cons, sue me.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Learning Curve&lt;/strong&gt; – I personally had a higher learning curve for MSBuild than I did with Nant.&amp;#160; This is primarily due to lack of intuitiveness about batching, and transformations – two important concepts in MSBuild, which leads to… &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Batching&lt;/strong&gt; – this concept is reportedly borrowed from XSLT – &lt;em&gt;&lt;strong&gt;really&lt;/strong&gt;&lt;/em&gt;?&amp;#160; Because of the 30 developers I could probably name off the top of my head only &lt;em&gt;two&lt;/em&gt; are what I’d call well versed in XSLT, and one is technically a manager now so I’m not sure he counts!&amp;#160; My XSLT skills are the equivalent of using flint to start a fire.&amp;#160; Yeah, I can do it but its probably going to take a while and I might even get hurt along the way. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Quirky Syntax&lt;/strong&gt; – @ is for collections (ItemGroup), % is to address an item in that collection (ItemGroup) and $ is for addressing a value in a PropertyGroup.&amp;#160; Ok, then lets throw in that % is really like using an MSBuild transform which uses the syntax of @(property-&amp;gt;’%(itemmetadata)’).&amp;#160; Do we need to say more?&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;PropertyGroup trumps ItemGroup&lt;/strong&gt; – if you happen to have an ItemGroup name that collides with a PropertyGroup, the PropertyGroup takes precedent, so you may spin wheels trying to figure out why that shiny new target you just built is spitting out the wrong information (or none at all). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;ItemGroup Scope&lt;/strong&gt; – I discovered that if I created an item group at a ‘global’ level called ‘Servers’ and then used the CreateItem task to create another group (or as an Output from a custom task) and it, too, was named ‘Servers’ then the values were appended to the global instance of ‘Servers’.&amp;#160; I’d like to be able to have variable declarations be aware of scope.&amp;#160;&amp;#160; This cuts down on me having to be too creative on variable naming. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;These Cons are offset by the absolute coolness of:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;ItemMetadata&lt;/strong&gt; – Creating an ItemGroup and then applying pieces of metadata as necessary to describe the item, thats nice.&amp;#160; The one thing is that there is no real enforcement of separation of ‘data’ and ‘logic’, which I’ve tried to do in our scripts.&amp;#160; I didn’t like that my item metadata (e.g. servers collection, or services collection) might be mixed in with the ‘logic’ of working with that collection.&amp;#160; This is true regardless of using MSBuild or Nant and both have constructs for allowing separation.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Batching&lt;/strong&gt; – Ok, I know I listed this in ‘Cons’ column, but there is something to be said about eliminating foreach loops, which is what batching does, at the cost of some intuitiveness.&amp;#160; It did shorten my scripts somewhat.&amp;#160;&amp;#160; Again, while nice, it requires getting over a learning curve that I’m not sure is worth it – maybe its more mentionable as a side effect? &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;At the end of the day, I’ve come to like MSBuild (yes, me eating crow), but things could definitely be done to help smooth out the learning curve.&amp;#160; &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;When asked why don’t you use batch files, PowerShell, etc…and why use MSBuild, or NAnt, at all, think of it like this:&amp;#160; MSBuild, or NAnt, is like your workflow runtime.&amp;#160; You get richer error handling, conditional decisions and some other gooey goodness that make it worth your while to adopt one, or the other.&amp;#160; Your Targets are then akin to activities.&amp;#160; If you want your activity to invoke a batch file, power shell script, vbscript, you absolutely can.&amp;#160; &lt;/p&gt;  &lt;p&gt;Don’t forget to take advantage of the community supported MSBuild Task libraries out there.&amp;#160; There are three that I’ve found which are fairly solid – my only complaint is that the help files don’t always match up to the Task (e.g. property names), but a quick dive into Reflector and your good to go.&amp;#160; As always, if the shoe doesn’t fit, don’t hesitate to jump in and make a better shoe, err custom task.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a name="twiddle"&gt;[1]&lt;/a&gt; – twiddle, a polite term for a the &lt;a href="http://en.wikipedia.org/wiki/Mad_Max_Beyond_Thunderdome" target="_blank"&gt;Thunderdome&lt;/a&gt; style cage fight between myself and MSBuild.&amp;#160; Since I’m here to write this story, you know I’m clearly the winner.&amp;#160; Ignore the new eye patch, its just a flesh wound.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-6510945398389336450?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/2nfAuQlSkag" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/01/msbuild.html</link><author>noreply@blogger.com (Zach Bonham)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-6789345695095211420</guid><pubDate>Mon, 05 Jan 2009 16:59:00 +0000</pubDate><atom:updated>2009-01-05T10:59:14.303-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">books</category><title>Lords of Dus: Lawrence Watt-Evans</title><description>&lt;p&gt;This is one of the classic trilogies that fed the imagination growing up.&amp;#160;&amp;#160;&amp;#160; I think I picked these up about the same time I found the “&lt;a href="http://www.amazon.com/WIZARD-EARTHSEA-Ursula-K-LeGuin/dp/B000SECS76/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1231174480&amp;amp;sr=1-2" target="_blank"&gt;Wizard of Earthsea&lt;/a&gt;” trilogy – way back in the day.&amp;#160; Anyway, flood, friends, and the ravages of time had destroyed my copies but through the wonders of the Internet I was able to pick up copies of all three (in excellent condition).&lt;/p&gt;  &lt;p&gt;The “Lure of the Basilisk” image below is not the original cover art that I remember from my collection, but the rest are.&amp;#160; This series spawned many adventurous subplots in various worlds across the (sometimes seemingly empty) expanse of my mind.&amp;#160; They are excellent, easy reads if you can find them.&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://g-ecx.images-amazon.com/images/G/01/ciu/10/9a/a3e662e89da0d524e1a64110._AA240_.L.jpg" /&gt; &lt;img src="http://g-ecx.images-amazon.com/images/G/01/ciu/44/e7/584a820dd7a0e0c28382e010._AA240_.L.jpg" /&gt; &lt;img src="http://ecx.images-amazon.com/images/I/51D0mfot3zL._SL500_AA240_.jpg" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-6789345695095211420?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/17miovBleXk" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2009/01/lords-of-dus-lawrence-watt-evans.html</link><author>noreply@blogger.com (Zach Bonham)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-8027530213120358506</guid><pubDate>Sat, 27 Dec 2008 16:00:00 +0000</pubDate><atom:updated>2008-12-27T10:05:43.231-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tools</category><title>MSBuild Blah's</title><description>&lt;p&gt;I did get to spend more time with MSBuild and I've got to say as a build tool for Microsoft its spiffy.&amp;nbsp; As a scripting tool/language for either automating packaging, or deployment, it comes in as just 'ok'.&amp;nbsp; There are two constraints with MSBuild that require a slightly different way of thinking when approaching how to automate different parts of the package and deployment process: lack of foreach and item collections (ItemGroup) conditions are only evaluated once when determining whether a Task executes for that ItemGroup (for performance).&amp;nbsp; &lt;/p&gt; &lt;p&gt;Neither is insurmountable.&amp;nbsp; The first is slightly problematic for me - I just seem to be wired to think in 'foreach'. The second part of the item collections only being evaluated once means that if I've got an ItemGroup with different metadata values, I can't just throw the ItemGroup at a Task and let the Conditional on the Task determine what executes - only the first item(s) to match the condition will execute (or not) - the rest won't be re-evaluated, even if their values are different.&amp;nbsp; This means I've got to cruft up a dynamic ItemGroup to throw at the Task. Nant does foreach very well - its a first class language construct.&lt;/p&gt; &lt;p&gt;Oh, I'd like to throw a third in there as well - easily iterating child folders of a parent.&amp;nbsp; There seem to be workarounds: parsing dir command output, custom task, or third party community tasks.&amp;nbsp; None of which are intuitive enough for me.&amp;nbsp; Nant has a 'Folder' collection that works well in this scenario.&lt;/p&gt; &lt;p&gt;The other thing that just stands out is that I have never, as in EVER, lost any time figuring out how to accomplish something with Nant.&amp;nbsp; Even back when getting started I don't remember being stymied in getting something done.&amp;nbsp; Just set 'em up and knock them out.&amp;nbsp; With MSBuild, its par for the course.&amp;nbsp; Make some progress, get stymied for an hour or three, make some progress, roll back that progress, rinse and repeat.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Clunky - but doable.&amp;nbsp; I'm getting it, I just don't like it.&lt;/p&gt; &lt;p&gt;What still amazes me is that people, myself included for which I am still slightly embarrassed, keep trying to justify using one tool or the other.&amp;nbsp; Because we are primarily a Microsoft shop, Microsoft tools tend to get a priority they may not rightly deserve.&amp;nbsp; In any case, with time == money, if I can accomplish a task in half the time (or less in some cases) why keep pushing for the 'breakthrough' with a different tool?&amp;nbsp; It just doesn't make sense.&amp;nbsp;&amp;nbsp; I think it comes back to pride/ego: I &lt;strong&gt;&lt;em&gt;can &lt;/em&gt;&lt;/strong&gt;do this.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Make sure you've got the right reasons for tool selection.&amp;nbsp; Vendor preference is not necessarily the right one.&amp;nbsp; Not having to distribute the runtime is such a minor inconvenience as to not be mentioned - especially something as file copy centric as Nant.&amp;nbsp; Integration with TFS?&amp;nbsp; TFS can kick off just about any process - Nant is just fine.&amp;nbsp; Nant can call MSBuild just fine (and vice versa).&amp;nbsp; There are really two considerations: development and maintenance.&amp;nbsp; How fast can you get something done and how easy is it to maintain when you need to fix/enhance?&lt;/p&gt; &lt;p&gt;One co-worker's mantra is "build with MSBuild, but automate with Nant" - he should know.&amp;nbsp; I asked him to walk this path (2 years ago?) and had him automate our package and deployment process with MSBuild - for the wrong reason. He did it, but it took him much longer than expected for many of the same reasons I've mentioned here - and when he did it there wasn't a whole lot of blog content to fall back on either.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Don't get me wrong - MSBuild will work. I &lt;strong&gt;really&lt;/strong&gt; do like the Item metadata feature of MSBuild and I am *that* much closer to the breakthrough that I'm probably not going to stop now - its a matter of pride, stupid pride.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-8027530213120358506?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/IW8n0nHUKwA" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2008/12/msbuild-blah.html</link><author>noreply@blogger.com (Zach Bonham)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5387140.post-4642726111317594894</guid><pubDate>Thu, 18 Dec 2008 22:29:00 +0000</pubDate><atom:updated>2008-12-18T16:29:38.476-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tools</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>[DataMember] Code Snippet</title><description>&lt;p&gt;So I am sitting here, feeding the cold I’ve had, and I found myself creating a &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractattribute.aspx" target="_blank"&gt;DataContract&lt;/a&gt; – something that got even easier with the introduction of &lt;a href="http://msdn.microsoft.com/en-us/library/bb384054.aspx" target="_blank"&gt;Automatic Properties&lt;/a&gt; in .NET 3.0. &lt;/p&gt;  &lt;p&gt;I tend to forget about the Visual Studio feature of &lt;a href="http://msdn.microsoft.com/en-us/library/ms165393(VS.80).aspx" target="_blank"&gt;Code Snippets&lt;/a&gt;, but I am usually reminded again anytime I see a presentation by an experienced technical presenter – then I forget again.&lt;/p&gt;  &lt;p&gt;Today, I happened to remember &lt;a href="http://www.odetocode.com/" target="_blank"&gt;our last instructor&lt;/a&gt; making heavy use of the ‘&lt;strong&gt;prop’&lt;/strong&gt; expanding code snippet during demos and thought - “Hey, I bet they have one for automagically creating properties marked with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.aspx" target="_blank"&gt;DataMember&lt;/a&gt; attribute”.&amp;#160; Well, I didn’t immediately see it and asking the great information oracle didn’t reveal anything interesting, so I set out to copy the existing ‘&lt;strong&gt;prop’&lt;/strong&gt; code snippet.&lt;/p&gt;  &lt;p&gt;Turns out it was even easier than I expected – it took longer to write this post than it did to create the snippet.&lt;/p&gt;  &lt;p&gt;Save the following into a file named dmprop.snippet (or something suitable) and drop it into your &lt;strong&gt;C:\Users\xxxxx\Documents\Visual Studio 2008\Code Snippets\Visual C#\My Code Snippets&lt;/strong&gt; folder, and voila!&amp;#160; Visual Studio should automatically detect the new snippet.&amp;#160; If not, you can add manually via &lt;strong&gt;Tools | Code Snippets Manager&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Now you can type ‘&lt;strong&gt;dmprop’&lt;/strong&gt; [tab] [tab] and get the same property expansion code snippet as &lt;strong&gt;‘prop’&lt;/strong&gt;, but marked with a &lt;strong&gt;DataMember&lt;/strong&gt; attribute.&amp;#160; Cheesy, but I figured it was appropriate as I was snacking on some sharp cheddar..&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color: blue"&gt;?&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CodeSnippets  &lt;/span&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;CodeSnippet &lt;/span&gt;&lt;span style="color: red"&gt;Format&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0.0&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Header&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;dmprop&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Shortcut&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;dmprop&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Shortcut&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Code snippet for an automatically implemented [DataMember] property&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Description&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Author&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Your name here&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Author&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;SnippetTypes&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;SnippetType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Expansion&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;SnippetType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;SnippetTypes&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Header&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Snippet&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Declarations&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Literal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;type&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Property type&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Default&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;int&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Default&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Literal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Literal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;property&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Property name&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ToolTip&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Default&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;MyProperty&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Default&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Literal&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Declarations&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Code &lt;/span&gt;&lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;csharp&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;![CDATA[&lt;/span&gt;&lt;span style="color: gray"&gt;[DataMember]&lt;br /&gt;            public $type$ $property$ { get; set; }$end$&lt;/span&gt;&lt;span style="color: blue"&gt;]]&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Code&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Snippet&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CodeSnippet&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;CodeSnippets&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5387140-4642726111317594894?l=zachbonham.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ZachBonham/~4/IalltSwziKg" height="1" width="1"/&gt;</description><link>http://zachbonham.blogspot.com/2008/12/datamember-code-snippet.html</link><author>noreply@blogger.com (Zach Bonham)</author><thr:total>1</thr:total></item></channel></rss>

