<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>RickGaribay.NET</title>
        <link>http://rickgaribay.net/Default.aspx</link>
        <description>.NET, WCF, SOA, Phoenix Connected Systems User Group, and miscellaneous discussions on software engineering, process and practices.</description>
        <language>en-US</language>
        <copyright>Rick G. Garibay</copyright>
        <managingEditor>rick@rickgaribay.net</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <image>
            <title>RickGaribay.NET</title>
            <url>http://rickgaribay.net/images/RSS2Image.gif</url>
            <link>http://rickgaribay.net/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>November PCSUG Meeting on WF 3.5 - Recap + Late Breaking Update on WF 4.0</title>
            <category>Events</category>
            <category>NETFX 4.0</category>
            <category>Phoenix Connected Systems User Group</category>
            <category>WCF</category>
            <category>WF</category>
            <link>http://rickgaribay.net/archive/2008/11/20/november-pcsug-meeting-on-wf-3.5---recap--late.aspx</link>
            <description>&lt;p&gt;If you attended the Phoenix Connected System User Group meeting last week you know what a great talk it was. For those who attended and would like a summary, and for those that were not able to make it, here's what you missed.&lt;/p&gt;  &lt;h3&gt;Recap&lt;/h3&gt;  &lt;p&gt;Rob Wisehart, Technical Team Lead at DriveTime Sales &amp;amp; Finance did a fantastic job introducing the group to WF 3.5. He provided an Overview and Essentials of WF and really did a great job of explaining why WF is important and why it matters. People are visual. &lt;a href="http://rickgaribay.net/Images/CustomContent/NovemberPCSUGMeetingonWF3.5Recap_61C1/PB130030.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="184" alt="PB130030" src="http://rickgaribay.net/Images/CustomContent/NovemberPCSUGMeetingonWF3.5Recap_61C1/PB130030_thumb.jpg" width="244" align="right" border="0" /&gt;&lt;/a&gt; We've learned thousands of languages since the beginning of time, but our Neanderthal ancestors had it right. We still communicate best with drawings and pictures. At least I do. Rob went on to talk about Sequential and State Machine Workflows and when each is appropriate. Rob really showed his experience with WF applications here, talking about the pros/cons of each worklfow type. Discussed as well was Hosting and Services. Just like WCF, WF needs hosting love too. In fact, any CLR process can host a WF service, and the models are quite similar.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/NovemberPCSUGMeetingonWF3.5Recap_61C1/PB130034.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="184" alt="PB130034" src="http://rickgaribay.net/Images/CustomContent/NovemberPCSUGMeetingonWF3.5Recap_61C1/PB130034_thumb.jpg" width="244" align="left" border="0" /&gt;&lt;/a&gt;My favorite part of the talk was on Custom Activities. Rob did an awesome job talking about why Custom Activities should be the preferred way to build WF applications. He really hit the nail on the head, talking about how, at DriveTime, they color code their Custom Activities, so that users (developers, and analysts) start to build that emotional connection with the software. For example, brown Custom Activities are always queue based activities while blue might be database related.&lt;/p&gt;  &lt;p&gt;Of course, Rob closed out with a discussion on using WF as a WCF Service. While in 3.0 this required heroics, the story got better in 3.5, and today, if you are building a WCF service, using WF to orchestrate the logic should be compelling. On this topic, I believe that .NET 4.0 will really focus on WF from a marketing perspective, and WCF will be somewhat in the shadows of WF. This is OK, because .NET 3.0  and 3.5 was really all about WCF because it was a) a tremendous accomplishment that *will* change your life as a developer and b) fully baked. WF 4.0 will focus much more on the modeling aspects of building service-oriented applications, relegating WCF as a utility player. Of course, anyone that knows WCF understands that this could be further from the truth due to the incredible robustness and richness of the framework, but when a technology becomes commoditized, its a clear sign of success, both as a technology and from an adoption perspective. To say that WCF will commoditize cross-process communication between WF 4.0 applications is a very good thing indeed.&lt;/p&gt;  &lt;h3&gt;The Goods&lt;/h3&gt;  &lt;p&gt;Rob's deck can be downloaded from SkyDrive here:&lt;/p&gt; &lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/PCSUG/Nov%202008/WF%20Presentation.pptx" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Rob's code can be downloaded from SkyDrive here:&lt;/p&gt; &lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-df930ee6f91132fd.skydrive.live.com/embedrowdetail.aspx/Public/PCSUG/Nov%202008/WF%20Presentation%20Demos.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;h3&gt;Swag&lt;/h3&gt;  &lt;p&gt;We closed the event with some great handouts, including WF+WCF 4.0 T-shirts courtesy of the Connected Systems Division, some laptop stickers and a group photo for folks that were lucky enough to get a sticker.&lt;a href="http://rickgaribay.net/Images/CustomContent/NovemberPCSUGMeetingonWF3.5Recap_61C1/PB130035.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="184" alt="PB130035" src="http://rickgaribay.net/Images/CustomContent/NovemberPCSUGMeetingonWF3.5Recap_61C1/PB130035_thumb.jpg" width="244" align="right" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font size="4"&gt;&lt;strong&gt;Late Breaking Update on WF 4.0&lt;/strong&gt;&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;I also took about 5 minutes to talk about some of the changes that are coming in WF 4.0. Most of this content is a combination of what I learned at PDC along with a draft of a whitepaper that Kenny Wolf shared with me. While I've been asked not to circulate the paper until it is fully baked, I provided some of the biggest highlights and key points. &lt;/p&gt;  &lt;p&gt;As I've discussed in &lt;strong&gt;earlier posts (&lt;a title="http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx" href="http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx"&gt;http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx&lt;/a&gt;, &lt;a title="http://rickgaribay.net/archive/2008/10/30/more-on-wf-4.0.aspx" href="http://rickgaribay.net/archive/2008/10/30/more-on-wf-4.0.aspx"&gt;http://rickgaribay.net/archive/2008/10/30/more-on-wf-4.0.aspx&lt;/a&gt;)&lt;/strong&gt;, there are several new features and key changes coming in WF 4.0:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;WF 4.0 ships with a completely new designer which very much resembles the look and feel that is being demo' d in Quadrant. &lt;/li&gt;    &lt;li&gt;WF 4.0 provides full declaration of activities using XAML. While this is the same XAML that is used in WPF and WF 3.0/3.5, the file extension has been changed from .xoml to .xamlx. &lt;/li&gt;    &lt;li&gt;There is a new activity model which makes all WF 4.0 artifacts activities. There is no longer the concept of distinguishing between Workflows and activities. In WF 4.0, all artifacts *are* are activities, and this includes Sequential Workflow Activities, State Machine Activities and a new Flowchart Activity. The key is that activities are the root of everything in WF 4.0 and activities compose other activities, be they custom activities or workflow activities. &lt;/li&gt;    &lt;li&gt;Significant runtime performance, between 10% and 100%. &lt;/li&gt;    &lt;li&gt;Better persistence and re-hydration performance largely due to the fact that the entire workflow need not be persisted as is the case in 3.0/3.5, but instead, because the XAML model is extended to every aspect of the workflow application, persistence can be managed at the activity level (see, there is a method building here). &lt;/li&gt;    &lt;li&gt;Code Activities are dead. Don't write them anymore. Seriously, no Code Activities in WF 4.0. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These are just a few of the major improvements/changes coming our way. The next thing we talked about is what do to to prepare and what the migration story is.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;WF 3.0/3.5 will run side-by-side with WF 4.0. WF 3.0/3.5 will run in the 2.0 CLR and WF 4.0 will run in the 4.0 CLR. What?! You didn't know there is a brand, spanking new CLR coming in NET FX 4.0? Better start coming to PCSUG meetings! &lt;/li&gt;    &lt;li&gt;WF 3.0/3.5 can be composed within WF 4.0 activities using the Interop Activity. I joked &lt;strong&gt;&lt;a href="http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx" target="_blank"&gt;here&lt;/a&gt; &lt;/strong&gt;that this is like the P-Invoke of WF, and I don't mean that in a critical way, it's just necessary. If you look at how we pass variables around in WF 3.0/3.5 and the fact that in WF 4.0, variables are just neatly bound at the activity level with in/out semantics (and thus, different signatures) you need a bridge. The Interop Activity is that bridge. &lt;/li&gt;    &lt;li&gt;There is no support for the Code Activity. Is there an echo in the room? Stop using them and start writing Custom Activities. &lt;/li&gt;    &lt;li&gt;There will be a migration tool to port from 3.0/3.5 to 4.0, but like any tool, CSD will try their best but it won't be perfect. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Start preparing for WF 4.0 now by:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Choosing the fully declarative workflow template in 3.5 &lt;/li&gt;    &lt;li&gt;Do not use Activity.Initialize to initialize your activity, instead use Activity.Execute. The former goes away in 4.0. &lt;/li&gt;    &lt;li&gt;Being diligent about scoping your variables within your 3.5 activities. &lt;/li&gt;    &lt;li&gt;Think in terms of activities. Think in terms of your domain. Build activities. &lt;/li&gt;    &lt;li&gt;Using WCF Send/Receive Activities in 3.5 &lt;/li&gt;    &lt;li&gt;Stop using Code Activities (there's that echo again) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;As promised before, as soon as the guidance whitepaper becomes public, I will post it here.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note: There will be no PCSUG meeting in December as we will be participating at the &lt;/strong&gt;&lt;a href="http://rickgaribay.net/archive/2008/11/18/msdn-unleashed-presents-the-best-of-pdc.aspx" target="_blank"&gt;&lt;strong&gt;MSDN Unleashed Presents: The Best of PDC&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; event on December 10th. Be sure to register for this event as seating is limited and when you arrive, be sure to fill out our PCSUG registration card so we can stay connected and inform you of what's coming in 2009.&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/216.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/11/20/november-pcsug-meeting-on-wf-3.5---recap--late.aspx</guid>
            <pubDate>Thu, 20 Nov 2008 15:09:34 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/216.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/11/20/november-pcsug-meeting-on-wf-3.5---recap--late.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/216.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/216.aspx</trackback:ping>
        </item>
        <item>
            <title>MSDN Unleashed Presents: The Best of PDC</title>
            <link>http://rickgaribay.net/archive/2008/11/18/msdn-unleashed-presents-the-best-of-pdc.aspx</link>
            <description>&lt;p&gt;The local DE team is putting on an event on 12/10 to recap some of the highlights of PDC.&lt;/p&gt;  &lt;p&gt;This is a good opportunity to educate our selves on what's coming and start to prepare now, so please register for the event using the link below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032395730&amp;amp;Culture=en-US"&gt;http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032395730&amp;amp;Culture=en-US&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Some may ask &lt;strong&gt;"Why would I want to go to this event when I can see all of the sessions online?"&lt;/strong&gt; The answer is COMMUNITY. Did you know that Phoenix has over a dozen user groups, including the AZ.NET User Group, South East Valley .NET User Group, Tucson .NET User Group and Phoenix Connected Systems User Group? These user groups cannot be successful without YOU. Without YOU, events like this aren't possible. &lt;/p&gt;  &lt;p&gt;Only YOU make it possible for the community to host more great events like the Scott Guthrie events AZGroups has sponsored and more opportunities to meet and get to know your local developer evangelists. Why not get off the coach (or come out of the cubicle) and join your local DE team and other peers for a great day of learning and networking? You never know who you might meet or what you might learn.&lt;/p&gt;  &lt;p&gt;Plus, Rob Bagby designed a cool shirt for the event with a REST and WCF theme, and who couldn't use another cool shirt?&lt;/p&gt;  &lt;p&gt;Hope to see you there!&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/215.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/11/18/msdn-unleashed-presents-the-best-of-pdc.aspx</guid>
            <pubDate>Tue, 18 Nov 2008 14:17:02 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/215.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/11/18/msdn-unleashed-presents-the-best-of-pdc.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/215.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/215.aspx</trackback:ping>
        </item>
        <item>
            <title>November PCSUG Meeting on WF 3.5 Next Thursday 11/13</title>
            <category>WF</category>
            <category>Phoenix Connected Systems User Group</category>
            <link>http://rickgaribay.net/archive/2008/11/08/november-pcsug-meeting-on-wf-3.5-next-thursday-1113.aspx</link>
            <description>&lt;p&gt;Join the Phoenix Connected Systems User Group at the Phoenix Microsoft office for an introduction to Windows Workflow 3.5 on November 13th.&lt;/p&gt;
&lt;p&gt;Rob Wisehart, technical team lead for internal systems at DriveTime will provide a foundational introduction to WF, Microsoft’s premier framework for building workflow-enabled applications and services. This session will focus covering workflow types, basic activities, custom activities and demonstrating how to workflow enable a WCF service and compose it with other WCF services hosted in different runtimes.&lt;/p&gt;
&lt;p&gt;In addition, I will be providing a whitepaper on what you need to know and how to prepare for changes coming your way in WF 4.0.&lt;/p&gt;
&lt;p&gt;We will also have a bunch of cool swag from PDC 2008, courtesy of the Connected Systems Division. WF + WCF 4.0 and Oslo T-shirts, laptop stickers, and other cool stuff will be available on a first-come first-serve basis. In addition, I will have a few books on "M" Oslo's new modeling language which is only available in limited release.&lt;/p&gt;
&lt;p&gt;As always, details regarding location and logistics can be found at &lt;a href="http://www.azgroups.org"&gt;www.azgroups.org&lt;/a&gt; or &lt;a href="http://www.pcsug.org"&gt;www.pcsug.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See you there!&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/214.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/11/08/november-pcsug-meeting-on-wf-3.5-next-thursday-1113.aspx</guid>
            <pubDate>Sat, 08 Nov 2008 14:32:12 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/214.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/11/08/november-pcsug-meeting-on-wf-3.5-next-thursday-1113.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/214.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/214.aspx</trackback:ping>
        </item>
        <item>
            <title>Windows Mobile 6.1 for Samsung BlackJack II</title>
            <link>http://rickgaribay.net/archive/2008/11/01/windows-mobile-6.1-for-samsung-blackjack-ii.aspx</link>
            <description>&lt;p&gt;I have been wanting to upgrade my phone since April of this year when Windows Mobile 6.1 was in pre-release. Even months after the new OS went CTP, ATT&amp;amp;T dragged its heels in providing even a modicum of support. Each and every in-store rep was completely and utterly clueless when I inquired once about every month. Alas, I was able to get my hands on the upgrade package for my BlackJack II directly from Samsung.&lt;/p&gt;  &lt;p&gt;The upgrade process was pretty straight forward, and for BlackJack II users running Windows Vista, you should have no problems performing the upgrade if you go by the numbers: &lt;a title="http://ars.samsung.com/customer/usa/jsp/faqs/faqs_view.jsp?SITE_ID=22&amp;amp;PG_ID=557&amp;amp;PROD_SUB_ID=558&amp;amp;PROD_ID=957&amp;amp;AT_ID=132707%20" href="http://ars.samsung.com/customer/usa/jsp/faqs/faqs_view.jsp?SITE_ID=22&amp;amp;PG_ID=557&amp;amp;PROD_SUB_ID=558&amp;amp;PROD_ID=957&amp;amp;AT_ID=132707%20"&gt;http://ars.samsung.com/customer/usa/jsp/faqs/faqs_view.jsp?SITE_ID=22&amp;amp;PG_ID=557&amp;amp;PROD_SUB_ID=558&amp;amp;PROD_ID=957&amp;amp;AT_ID=132707%20&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There are oodles of new features in Windows Mobile 6.1, and you can find a great feature comparison here: &lt;a title="http://www.microsoft.com/windowsmobile/en-us/meet/version-compare.mspx" href="http://www.microsoft.com/windowsmobile/en-us/meet/version-compare.mspx"&gt;http://www.microsoft.com/windowsmobile/en-us/meet/version-compare.mspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Kudos to Samsung for doing the right thing for the consumer.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/213.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/11/01/windows-mobile-6.1-for-samsung-blackjack-ii.aspx</guid>
            <pubDate>Sat, 01 Nov 2008 22:45:15 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/213.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/11/01/windows-mobile-6.1-for-samsung-blackjack-ii.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/213.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/213.aspx</trackback:ping>
        </item>
        <item>
            <title>David Chappell on WF 4.0, Oslo &amp;amp; Dublin</title>
            <link>http://rickgaribay.net/archive/2008/10/30/david-chappell-on-wf-4.0-oslo-amp-dublin.aspx</link>
            <description>&lt;p&gt;Very timely brand spankin' new whitepaper has been published on MSDN: &lt;a title="http://msdn.microsoft.com/en-us/library/dd200919.aspx" href="http://msdn.microsoft.com/en-us/library/dd200919.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd200919.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nice job of tying WF, Oslo and Dublin together for the big picture. You will notice what I think is becoming a theme in messaging around 4.0 marketing which is placing a much bigger emphasis on WF than WCF. That is probably fair, as WCF owned the spotlight in the .NET 3.0 release, but I believe we will see more and more focus on WF as WCF takes a back seat in this release. To be sure, however there are great improvements in WCF coming our way including full schematization ala WF, new bindings and performance/persistence patterns. &lt;/p&gt;  &lt;p&gt;David does a great job covering Dublin. My synopsis is that Dublin is COM+ application server (throttling, persistence) and BizTalk admin (tracking, HAT, etc) packaged up for WCF and WF and integrated into IIS 7 management tools.&lt;/p&gt;  &lt;p&gt;More to come! &lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/212.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/10/30/david-chappell-on-wf-4.0-oslo-amp-dublin.aspx</guid>
            <pubDate>Fri, 31 Oct 2008 03:52:12 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/212.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/10/30/david-chappell-on-wf-4.0-oslo-amp-dublin.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/212.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/212.aspx</trackback:ping>
        </item>
        <item>
            <title>More on WF 4.0</title>
            <category>.NET 3.5</category>
            <category>NETFX 4.0</category>
            <category>WCF</category>
            <category>WF</category>
            <link>http://rickgaribay.net/archive/2008/10/30/more-on-wf-4.0.aspx</link>
            <description>&lt;p&gt;Per my &lt;a href="http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx"&gt;last post&lt;/a&gt; I have been eagerly pursuing more information on the impact of the changes to WF 4.0, and specifically, what these changes mean for applications written in 3.5 and new composable applications.&lt;/p&gt;  &lt;p&gt;I had a great conversation with Cliff Simpkins, Technical Product Manager for the WF team who was able to answer a lot of my questions and provide some clarity as to what specifically has changed, why and how it affects WF applications.&lt;/p&gt;  &lt;p&gt;Let's circle back to the points that Kenny Wolf made when we discussed the changes at a higher level and use these as talking points.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;"First is delivering a truly model-based framework that allows every aspect of the WF to be represented declaratively."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In WF 4.0, all aspects of an activity are represented as XAML. Most importantly, this includes variables within each activity which are bound as input/output parameters from one activity to another. This is a significant change from 3.5 because variables are no longer scoped at the global workflow level, but instead are scoped to the activity level. And this is an important point. In WF 4.0, the paradigm is based on Activities, Runtime and Tooling. Activities form a logical workflow as a consequence of their composition. The focus is on the activities which consist of a root activity and child activities. The root activity is the orchestration of the child activities, and all activities exist as a logical workflow but are truly autonomous. They gain this autonomy by not being dependant on variables and state at the global level, but instead at each corresponding activity scope. This is huge when it comes to persistence as I'll discuss shortly.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;"Second, was being able to truly participate in the repository ecosystem, which is key for deployment, management and operations scenarios."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This one should be obvious. XAML is the key to being able to serialize services and workflows in the repository. Reengineering how variables are managed by scoping them to the activity (I'll post some sample code soon) completes the picture. WF 4.0 (and incidentally WCF 4.0) will be repository ready, and this is the gestalt of the Oslo vision. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;"And last, but not least was performance."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I don't yet have a full picture of how the performance improvements were attained. I suspect that there has been some runtime tuning, and I am eager to learn more here. However, a major positive consequence of the full schematization of the logical workflow is that the entire workflow does not need to be persisted, but instead, only the relevant activities. For example, if you have a workflow with 4 activities and the first two complete and the third activity waits for a stimulus before it resumes work, only the third and forth activity need to be persisted as opposed to the entire worklfow. I do still have questions about atomic versus long-running behavior, and this, along with other details will soon come to light.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Some more stuff&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Another thing that you will immediately notice is that the designer has been completely redesigned, and there is a definite Quadrant influence. What is very cool is that both Quadrant and WF designer are using WPF. On this topic, I have to be honest. The design initially struck me as very drab. If you look at the picture I snapped in my &lt;a href="http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx"&gt;original post&lt;/a&gt; you'll see a severe departure from the 3.0/3.5 aesthetic. The interesting thing though, is that as I sat in more sessions and touched and felt the designer it really grew on me. At the risk of sounding cliche, the simplicity of the designer makes for a very fluid user experience, perhaps less is more. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What about WF 3.5?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is a logical burning question. First, let us all agree that WF 3.0 is not relevant to service developers, so I will ignore it, pretending it doesn't exist. The marriage of WF and WCF in WF 3.5 finally makes WF a compelling tool for composing services and this, by the way is going to be a common theme in the NET 4.0 timeframe and beyond. &lt;/p&gt;  &lt;p&gt;So what about 3.5?  Should we continue to build composable service-oriented applications with WF 3.5 or bite the bullet and build on early WF 4.0 bits? Well, according to Cliff, Office 14 is shipping with 3.5, and if Microsoft is willing to invest this heavily in 3.5 in a brand new product that hasn't shipped, you can imagine that it should be suitable for LOB applications as well as the enterprise. A better question is probably how bad the pain will be in upgrading from 3.5 to 4.0. I talked about the Interop activity which will be the bridge from 3.5 to 4.0, but we can't be so naive to assume it will solve all compatibility issues. I spoke with Jurgen Willis who commited to the early guidance paper &lt;a href="http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx"&gt;I mentioned&lt;/a&gt; very soon. As promised, when I get it, you'll have it here.&lt;/p&gt;  &lt;p&gt;In the meantime, if you want to watch live recordings of the following PDC sessions on WF, I've provided the links below:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;WF 4.0: A First Look: &lt;a title="http://channel9.msdn.com/pdc2008/TL17/" href="http://channel9.msdn.com/pdc2008/TL17/"&gt;http://channel9.msdn.com/pdc2008/TL17/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;WCF 4.0: Building WCF Services with WF in Microsoft .NET 4.0: &lt;a title="http://channel9.msdn.com/pdc2008/TL06/" href="http://channel9.msdn.com/pdc2008/TL06/"&gt;http://channel9.msdn.com/pdc2008/TL06/&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://rickgaribay.net/aggbug/211.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/10/30/more-on-wf-4.0.aspx</guid>
            <pubDate>Fri, 31 Oct 2008 03:38:23 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/211.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/10/30/more-on-wf-4.0.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/211.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/211.aspx</trackback:ping>
        </item>
        <item>
            <title>WF 4.0: Big Changes Ahead</title>
            <category>.NET 3.5</category>
            <category>SOA</category>
            <category>WCF</category>
            <category>WF</category>
            <category>NETFX 4.0</category>
            <link>http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx</link>
            <description>&lt;p&gt;If attendees in Kenny W's session on WF 4.0 yesterday at PDC 08 are like me, they are both elated, shocked and awed in the lead architect's discussion on major, major changes heading our way in Windows Workflow 4. &lt;/p&gt;
&lt;p&gt;When I attended the WCF and WF SDRs in Redmond back in April, Kenny, Ed Pinto and his team talked to us about new workflow types and activities and sought our feedback. It was evident that these improvements that were afoot were positive, and building on a foundation that I had only recently grown to love having been primarily focused on WCF for the last 2 years. In fact, I have pretty much shifted my focus completely from BizTalk Server to WF, WCF and service bus technologies.&lt;a href="http://rickgaribay.net/Images/CustomContent/WFBigChangesAhead_789B/PIC0638.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0638" width="244" align="right" border="0" src="http://rickgaribay.net/Images/CustomContent/WFBigChangesAhead_789B/PIC0638_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Anyway, among the improvements/features discussed were changes to existing workflow types and new workflow styles including sequential, flowchart, state machine and a unification of activities and rules. Also reviewed were improvements to XAML support for modeling and deployment. So, I was very interested to see how far these committed improvements had gone since April, but I was not prepared for such a big surprise. &lt;/p&gt;
&lt;p&gt;A framework for writing workflow applications, now in its second release (WF 3.5) is being completely overhauled, from the ground up. Kenny asserted that these drastic changes were necessary to deliver on the changes the team had already been discussing for months, but had expertly kept the details of just what that meant safe within the walls of building 43.&lt;/p&gt;
&lt;p&gt;So what does this mean?! This is a question anyone working today with WF is asking. How drastic is the impact to my applications? What should I know about what's coming so that my existing and future investment in WF can be leveraged. Is this another ".NET Remoting has been deprecated" situation?&lt;/p&gt;
&lt;p&gt;I couldn't wait for public messaging to address this burning concern, so I talked to Kenny after his session and asked a number of questions, which he was, as usual, very open and willing to answering.&lt;a href="http://rickgaribay.net/Images/CustomContent/WFBigChangesAhead_789B/PIC0640.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 5px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0640" width="244" align="left" border="0" src="http://rickgaribay.net/Images/CustomContent/WFBigChangesAhead_789B/PIC0640_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;My first question was around the impetus for such a major overhaul. Kenny shared that they focused very, very deeply on key customer requests and opportunities based on earlier versions of the framework. There were 3 feature types that resonated most. First, is delivering a truly model-based framework that allows every aspect of the WF to be represented declaratively. Second, was being able to truly participate in the repository ecosystem, which is key for deployment, management and operations scenarios. And last, but not least was performance.&lt;/p&gt;
&lt;p&gt;Earlier in his talk, Kenny cited intriguing improvements, including 10x to 100x performance improvements and persisted workflows becoming essentially "free" with WF 4.0. In our more one-on-one discussion after his talk, he used the analogy of swinging at a baseball with a wooden baseball bat. While the wooden baseball bat is effective, it feels a bit heavy, if not clunky at times. When you pick up an aluminum baseball bat, it is markedly lighter, and feels significantly more aerodynamic. WF 3.0 and 3.5 work, but WF 4 is a new and improved aluminum baseball bat.&lt;a href="http://rickgaribay.net/Images/CustomContent/WFBigChangesAhead_789B/PIC0641.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0641" width="244" align="right" border="0" src="http://rickgaribay.net/Images/CustomContent/WFBigChangesAhead_789B/PIC0641_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While the metaphor was effective, of course, I wanted to know what, specifically I should stop/start doing immediately and ensure my clients receive this guidance. Kenny had partially addressed this earlier in his public talk by pretty much prescribing that WF developers should stop using custom code activities and opt for custom activities instead. In fact, he demo'd a new "Interop" activity that allows your WF 3.0/3.5 custom activities to talk to WF 4.0 activities and workflows. I must admit that this does feel a bit like a P-Invoke for WF, and I don't mean that to be critical, it is just an observation.&lt;/p&gt;
&lt;p&gt;Obviously, there are many more questions to be answered, but the first takeaway is to stop using custom code activities and focus existing efforts on developing custom activities, which are really the way we should be developing for WF anyway. To help answer some of the other burning questions we all undoubtedly have, Kenny committed to do his best to provide some prescriptive guidance by the end of the week to fill in the rest of the gaps, or at least provide some early guidance to get begin to prepare.  &lt;/p&gt;
&lt;p&gt;As soon as I get my hands on it, I will post it, along with any other gems of wisdom here.&lt;/p&gt;
&lt;p&gt;On a final note, lest my prose present me as stoic, of course these changes make me nervous. I have yet to appreciate the full impact of these changes, and am eager to learn more. This said, I have to applaud Microsoft CSD for doing what is right, even when it is painful. We've seen this happen before (.NET Remoting) and will likely see it again. It is both the cost and benefit of forward progress in our great field of software engineering.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/210.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx</guid>
            <pubDate>Tue, 28 Oct 2008 16:42:38 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/210.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/10/28/wf-4.0-big-changes-ahead.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/210.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/210.aspx</trackback:ping>
        </item>
        <item>
            <title>New Article in Nov/Dec 2008 Issue of CoDe Magazine</title>
            <link>http://rickgaribay.net/archive/2008/10/24/new-article-in-novdec-2008-issue-of-code-magazine.aspx</link>
            <description>&lt;p&gt;My new article on Microsoft BRE is out in the Nov/Dec issue of CoDe Magazine.&lt;/p&gt;  &lt;p&gt;You can find CoDe Magazine at bookstores like Barnes and Noble, or you can read the article here: &lt;a title="http://www.code-magazine.com/Article.aspx?quickid=0811071" href="http://www.code-magazine.com/Article.aspx?quickid=0811071"&gt;http://www.code-magazine.com/Article.aspx?quickid=0811071&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As always, I'd appreciate any feedback you may have. I would also like to thank &lt;a href="http://geekswithblogs.net/cyoung/Default.aspx"&gt;Charles Young&lt;/a&gt; for his time and knowledge in providing a technical review during the editing process.&lt;/p&gt;  &lt;p&gt;If you are not a subscriber, and you like this, or any other articles at Component Developer Magazine, I hope you will consider subscribing: &lt;a title="https://www.code-magazine.com/Subscription.aspx" href="https://www.code-magazine.com/Subscription.aspx"&gt;https://www.code-magazine.com/Subscription.aspx&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is a truly exceptional team to work with, and despite their headquarters being severely impacted by hurricane Ike, they still shipped this issue (that was in production during the storm) on time.&lt;/p&gt;  &lt;p&gt;On a related note, if you will be attending the AZ .NET User Group or Phoenix Connected Systems User Group meeting in November (info here: &lt;a href="http://www.azgroups.org"&gt;www.azgroups.org&lt;/a&gt;) Scott and I will have complimentary issues available as usual. Just another example of how dedicated the CoDe team is to the developer community!&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/209.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/10/24/new-article-in-novdec-2008-issue-of-code-magazine.aspx</guid>
            <pubDate>Fri, 24 Oct 2008 14:10:50 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/209.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/10/24/new-article-in-novdec-2008-issue-of-code-magazine.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/209.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/209.aspx</trackback:ping>
        </item>
        <item>
            <title>Building Service-Oriented Applications with Windows Communication Foundation</title>
            <category>.NET 3.5</category>
            <category>SOA</category>
            <category>Speaking Events</category>
            <category>WCF</category>
            <link>http://rickgaribay.net/archive/2008/10/20/building-service-oriented-applications-with-windows-communication-foundation.aspx</link>
            <description>&lt;p&gt;Thanks to everyone who came out to my talk at the Phoenix Connected Systems User Group meeting last week. &lt;/p&gt;
&lt;p&gt;As promised, here are the links to the &lt;a target="_blank" href="http://cid-df930ee6f91132fd.skydrive.live.com/self.aspx/Public/Talks/20081009%20PCSUG%20SOA%20WCF/Service-Oriented%20Architecture%20|5SOA|6%20with%20Windows%20Communication%20Foundation%20|5WCF|6.pdf"&gt;presentation&lt;/a&gt; materials and &lt;a target="_blank" href="http://cid-df930ee6f91132fd.skydrive.live.com/self.aspx/Public/Talks/20081009%20PCSUG%20SOA%20WCF/Service-Oriented%20Architecture%20|5SOA|6%20with%20Windows%20Communication%20Foundation%20|5WCF|6.pdf"&gt;solution&lt;/a&gt; download. &lt;/p&gt;
&lt;p&gt;Be sure to join us on November 13th for a foundational discussion on Windows Workflow Foundation (WF). Abstract to follow soon.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/208.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/10/20/building-service-oriented-applications-with-windows-communication-foundation.aspx</guid>
            <pubDate>Tue, 21 Oct 2008 04:50:15 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/208.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/10/20/building-service-oriented-applications-with-windows-communication-foundation.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/208.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/208.aspx</trackback:ping>
        </item>
        <item>
            <title>Not a Typical Day at Work</title>
            <link>http://rickgaribay.net/archive/2008/10/20/not-a-typical-day-at-work.aspx</link>
            <description>&lt;p&gt;Not every day you get to come into work to find a movie being shot across the street, especially in Phoenix.&lt;/p&gt;
&lt;p&gt;I came into the client site this morning to find a live crew shooting a scene from the new file “Middle Men” staring Luke Wilson, Robert Forrester and James Caan among others: &lt;a href="http://www.imdb.com/title/tt1251757/"&gt;http://www.imdb.com/title/tt1251757/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This picture is from the parking garage directly behind the movie set. They had Monroe street blocked off from Central and backwards, so I was able to squeeze in a few shots from my phone, this being among the better ones. The scene below is in the alley next to a favorite downtown watering hole called Seamus McCaffrey's. On the left, near the edge is Luke Wilson who approaches Robert Forrester who has the trunk of a Cadillac open and is holding a bat. After a few seconds of discussion, Luke Wilson appears to capitulate and then runs off towards stage left.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/MiddleMen.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="Middle Men" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/MiddleMen_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Apparently, the film is about the beginning of a certain lucrative business that has some roots in Phoenix- go figure.&lt;/p&gt;
&lt;p&gt;For those interested in viewing a sequential frame-by-frame sequence of the scene, you can save the following shots to your local machine and use a slide viewer feature to see the action (row 1, left to right, followed by row 2). &lt;/p&gt;
&lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0619.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0619" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0619_thumb.jpg" /&gt;&lt;/a&gt; &lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0620.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0620" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0620_thumb.jpg" /&gt;&lt;/a&gt; &lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0621.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0621" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0621_thumb.jpg" /&gt;&lt;/a&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0622.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0622" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0622_thumb.jpg" /&gt;&lt;/a&gt; &lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0623.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0623" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0623_thumb.jpg" /&gt;&lt;/a&gt; &lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0624.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0624" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0624_thumb.jpg" /&gt;&lt;/a&gt; &lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0625.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0625" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0625_thumb.jpg" /&gt;&lt;/a&gt; &lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0626.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0626" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0626_thumb.jpg" /&gt;&lt;/a&gt; &lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0627.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0627" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0627_thumb.jpg" /&gt;&lt;/a&gt; &lt;a href="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0628.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="184" alt="PIC-0628" width="244" border="0" src="http://rickgaribay.net/Images/CustomContent/NotaTypicalDayatWork_12FD8/PIC0628_thumb.jpg" /&gt;&lt;/a&gt;&lt;img src="http://rickgaribay.net/aggbug/207.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/10/20/not-a-typical-day-at-work.aspx</guid>
            <pubDate>Tue, 21 Oct 2008 04:44:23 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/207.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/10/20/not-a-typical-day-at-work.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/207.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/207.aspx</trackback:ping>
        </item>
        <item>
            <title>Paul Newman Jan 26, 1925 - Sept 26, 2008</title>
            <category>Misc.</category>
            <link>http://rickgaribay.net/archive/2008/09/27/paul-newman-jan-26-1925---sept-26-2008.aspx</link>
            <description>&lt;p&gt;I very seldom write on personal topics here, but I am very saddened to make an exception today.&lt;/p&gt;  &lt;p&gt;Paul Newman was a remarkable human being that I have admired as long as I can remember. His wit, charm, kindness and humility are traits that I have always looked up to him for (OK, he was very, very cool too). &lt;/p&gt;  &lt;p&gt;In addition to being a fantastic actor, starring in some of my favorite films such as "Butch Cassidy and the Sundance Kid", "Cool Hand Luke" and "The Sting" (if you haven't seen these, I highly recommend you do one day), he was an avid philanthropist, founding The &lt;a href="http://newmansown.com"&gt;Newman's Own Foundation&lt;/a&gt; in 1982. The Newman's Own Foundation oversees the "&lt;a href="http://newmansown.com"&gt;Newman's Own&lt;/a&gt;" product line which donates every dime of profit to charity, with donations in excess of $250 million. He also founded the "&lt;a href="http://www.holeinthewallcamps.org/"&gt;Hole in the Wall Camps&lt;/a&gt;", which offers a respite for very ill children who can go to camp to forget about their illness and just be kids for a few days.&lt;/p&gt;  &lt;p&gt;I remember watching an interview on Letterman a couple of years ago. David was asking him about some of his passions, which included automobile racing and beer. In that interview, Paul referred to beer as "the common man's drink". This is what always impressed me the most about Paul Newman. Despite his tremendous success as an actor in the hay day of Hollywood, he never lost touch with himself, his family or his place on this earth. He had this keen awareness that in addition to very hard work, success can be attributed to luck just as much as one's own efforts.&lt;/p&gt;  &lt;p&gt;So today, with great sadness, I raise a pint to celebrate the life and light of Paul Newman who despite being deeply missed, has left a lasting impression in my life and a legacy that will continue to give for years to come.  &lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/205.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/09/27/paul-newman-jan-26-1925---sept-26-2008.aspx</guid>
            <pubDate>Sat, 27 Sep 2008 15:53:08 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/205.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/09/27/paul-newman-jan-26-1925---sept-26-2008.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/205.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/205.aspx</trackback:ping>
        </item>
        <item>
            <title>Using PowerShell to Manage Network Interfaces and Windows Services</title>
            <category>.NET 3.5</category>
            <category>Misc.</category>
            <link>http://rickgaribay.net/archive/2008/09/26/using-powershell-to-manage-network-interfaces-and-windows-services.aspx</link>
            <description>&lt;p&gt;PowerShell is a new scripting language that allows you to interact with applications, services and objects as objects. It is a .NET application which shells commands out on your behalf. This is very powerful, because it allows you to leverage the strengths of an object oriented model within your scripting tasks with a very terse, yet simple scripting language. Because it is written in .NET, you can access .NET types, objects and WMI objects from a command prompt.&lt;/p&gt;  &lt;p&gt;My current workstation runs Windows Server 2008 Standard Edition with Hyper-V. I use the host/parent partition as my office, and have a number of child partitions that are integrated into a Windows Server 2008 Domain. Needless to say, this configuration gives me everything I need to develop, test and integrate multiple Server OS', platforms and technologies, and is my environment of choice for developing production code. It still amazes me how far we've come in such a short period of time. Not too long ago, I remember setting up similar lab environments at home running Windows NT 4 and Windows Server 2000 on dedicated physical machines.&lt;/p&gt;  &lt;p&gt;Anyway, I have to say that I am absolutely delighted with my environment, but it took me some time and effort to learn how to tune Server 2008, and this is all well documented in previous posts. One of the the things that I do to keep performance high is that I only have the 3 services required for Hyper-V running when I need them. In other words, if I am only working with email and writing documents or design drawings, I don't need to have the Hyper-V services running because they are resource intensive. In addition, I only want my loopback adapter (that provides me with a virtual LAN for all of the child partitions on my domain to communicate) enabled when I need it to be. One reason for this, is that if I leave my loopback on and reboot, boot times can take up to 10 minutes because the loopback is configured to use my domain controller as the primary DNS server, which is a VM. Because the DNS Server only runs when my Domain Controller VM  is up and running, the VM will only come up when I start it. As a result, Windows tries and tries to reach the DNS server for the Loopback adapter until it finally gives up (If anyone knows how to change this timeout, please shoot me a note or post a comment).&lt;/p&gt;  &lt;p&gt;So, I only want Hyper-V services running when I need to work in my development environment, and I don't want my loopback enabled unless it needs to be. For a while, I was managing this as follows...&lt;/p&gt;  &lt;p&gt;First, I set the following services to "Manual", so that they do not start automatically:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;vmms: Hyper-V Virtual Machine Management &lt;/li&gt;    &lt;li&gt;vhdsvc: Hyper-V Image Management Service &lt;/li&gt;    &lt;li&gt;nvspwmi: Hyper-V Networking Management Service &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The service names are a bit obscure, but the "friendly" names are pretty self explanatory. When I need to start my development environment, I would go into Server Manager, and start each service one by one.&lt;/p&gt;  &lt;p&gt;Next, I would enable my loopback adapter so that my child partitions can communicate with each other.&lt;/p&gt;  &lt;p&gt;All together, this resulted in a number of clicks, which was somewhat mundane to do every time. Worse, once I enabled the loopback, I often would forget to disable it before shutting down (remember, servers running Hyper-V do not support hibernation). For a while, I thought about writing myself a sticky note and posting it to my forehead so that I would not forget to disable the loopback, and finally, I decided to create an easy button for starting and stopping my development environment.&lt;/p&gt;  &lt;p&gt;This is where Powershell comes in.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Using PowerShell to Query and Manage Network Adapters&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The first thing I did was figure out how to talk to my network adapters so that I could enable and disable my loopback as needed. It turns out that Microsoft provides a WMI object called &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa394216(VS.85).aspx"&gt;Win32_NetworkAdapter&lt;/a&gt;. &lt;/strong&gt;The object exposes a bunch of properties for working with an instance of a Win32_NetworkAdapter:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="358" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In addition, there are 4 public methods that are exposed, and well &lt;a href="http://msdn.microsoft.com/en-us/library/aa394216(VS.85).aspx"&gt;documented&lt;/a&gt; as shown below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_3.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="100" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_3.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To enumerate all network adapters on my host/parent partition, I issued the following command:&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; Get-wmiobject win32_NetworkAdapter | format-table &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;PowerShell lists each adapter and certain properties in a tabular format because I added a pipe and format-table parameter:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="265" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_4.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;To identify the instance that corresponds to my loopback, I simply need to find the "Internal VLAN" instance above, which has a DeviceID of 17:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_5.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="155" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_5.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Next, I want to retrieve an instance of the adapter with a DeviceId of 17, so I issue the following statement:&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; Get-WmiObject win32_networkadapter | where {$_.DeviceId -eq 17}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The where keyword uses a bracketed expression to evaluate the condition. The "$" is a temporary variable, which is similar to the "this" keyword in C#, which provides context for the current instance. The "-eq" operator is the equality operator in PowerShell. So, we are querying all adapters for the adapter with a DeviceID equal to 17. The above command returns the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="171" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_6.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Notice that each property is an actual documented property of the WIN32_NetworkAdapter object. If we have access to properties, it would be helpful to determine if the adapter is enabled or disabled. To do this, I assign the adapter to a variable called $adapter as shown below, and then I get the value of the Availability property:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_7.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="62" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_7.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The value of the Availability property is 3. Referring to the WIN32_NetworkAdapter documentation, I can see that a status of 3 indicates that adapter is on, and running on full power.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="421" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_8.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Are you getting the hang of it yet? Hopefully, the interaction with PowerShell should feel object-oriented because it is! We are getting a reference to the WMI shell of the adapter and then using it's get accessors to get the value of the public properties. So, if we can get a reference to the adapter, get properties, we should be able to call methods on it, right?&lt;/p&gt;

&lt;p&gt;To disable the adapter, I simply call the Disable() method on my $adapter variable:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_9.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="247" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_9.png" width="360" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, to confirm that the adapter is disabled, you can look at Network Connections and you will see that the Status is in fact Disabled. To do this programmatically via PowerShell, you can use the ConfigManagerErrorCode property which is also documented. Get a new instance of the adapter, and call the ConfigManagerErrorCode property on it as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="74" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_10.png" width="471" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;A return code of 22 can be matched to the table in the MSDN documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_11.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="51" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_11.png" width="625" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, enable the adapter by calling the Enable() method:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_12.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="209" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_12.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;A return code of 0 indicates that the adapter is enabled, and working properly:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_13.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="141" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_13.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;As you can see, PowerShell is a very easy to use, yet powerful tool for managing system objects in an object-oriented manner. You don't need to worry about writing VBScript or C# to accomplish simple administrative tasks such as enabling and disabling a network adapter. As you might imagine, the real power comes in being able to run a series of PowerShell commands in a batch, perhaps at the click of the button. This is exactly what I'll cover next. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Using PowerShell to Query and Manage Windows Services&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You'll recall that I only want the 3 Hyper-V services to run when I need them, so what I want to do is create an "easy button" to toeggle my development environment on and off.&lt;/p&gt;

&lt;p&gt;The "On" should:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Enable my Internal VLAN Adapter &lt;/li&gt;

  &lt;li&gt;Start the Hyper-V Virtual Machine Management &lt;/li&gt;

  &lt;li&gt;Start the Hyper-V Image Management Service &lt;/li&gt;

  &lt;li&gt;Start the Hyper-V Networking Management Service &lt;/li&gt;

  &lt;li&gt;Get me a cup of Starbucks coffee &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "Off" Button should:&lt;/p&gt;

&lt;li&gt;Disable my Internal VLAN Adapter &lt;/li&gt;

&lt;li&gt;Disable the Hyper-V Virtual Machine Management &lt;/li&gt;

&lt;li&gt;Disable the Hyper-V Image Management Service &lt;/li&gt;

&lt;li&gt;Disable the Hyper-V Networking Management Service 
  &lt;p&gt; &lt;/p&gt;

  &lt;p&gt;I've already covered how to manage network adapters using PowerShell as a primer, so I'll jump right into working with Windows Services. As with any program, sometimes it is helpful to group commands into a subroutine. In PowerShell, these functions are referred to as cmdlets (prounounced "commandlets"). You may not realize this, but you've already been working with cmdlets if you've tried the commands I covered above on your own machine. The get-wmiobject command is actually a cmdlet that provides a reference to the WMI object specified as the parameter. You could accomplish this without the cmdlet, but why would you want to?&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
  &lt;p&gt;Fortunately, a cmdlet is also available for working with Windows Services: get-service.&lt;/p&gt;

  &lt;p&gt;To get information about a particular service, simply call get-service with the service name. The actual service name of the Hyper-V Virtual Machine Management service is "vmms", so issuing the get-service vmms command returns a few properties including the Name, DisplayName and Status of the service.&lt;/p&gt;

  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="92" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_14.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

  &lt;p&gt;Starting and stopping the Hyper-V Virtual Machine Management service is as simple as calling the appropriate method: Stop() to stop the service and Start() to start it. While you could use a variable called $service to store the reference to the service object, an abbreviated way to accomplish this is shown below:&lt;/p&gt;

  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
    &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
      &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; (get-service vmms).Stop()&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;p&gt; &lt;/p&gt;

  &lt;p&gt;Now, when you issue the get-service vmms command, you can see that the Status property is "Stopped":&lt;/p&gt;

  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_15.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="165" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_15.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

  &lt;p&gt;Starting the service back up is as simple as calling Start() on the cmdlet expression:&lt;/p&gt;

  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_16.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="123" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_16.png" width="510" border="0" /&gt;&lt;/a&gt;  &lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Building the "Easy Buttons"&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;There may very well be a more sophisticated way to do this, but I created two batch files, one called "Start.bat" and the other called "Stop.bat" and placed them in my documents folder. Each file contains the appropriate PowerShell syntax as shown below:&lt;/p&gt;

  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_17.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="107" alt="image" src="http://rickgaribay.net/Images/CustomContent/UsingPowerShelltoManageNetworkInterfaces_10DB3/image_thumb_17.png" width="716" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

  &lt;p&gt;&lt;font size="1"&gt;Note, to re-use variables across PowerShell sessions, you must first configure a PowerShell profile: &lt;/font&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/bb613488(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/bb613488(VS.85).aspx"&gt;&lt;font size="1"&gt;http://msdn.microsoft.com/en-us/library/bb613488(VS.85).aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;Next I created two desktop shortcuts, appropriately named "Start" and "Stop" and set the target to each corresponding file.&lt;/p&gt;

  &lt;p&gt;Now, I have two "Easy Buttons" for toggling my development environment on and off. While I can't guarantee that I won't forget to press the "off  button" before shutting down, it is a heck of a lot easier than going through the contortions manually.&lt;/p&gt;

  &lt;p&gt;One last note. If anyone finds or builds a cmdlet that runs to Startbucks and picks up a medium drip with 1.5 Sweet &amp;amp; Low and delivers it to my client site, please let me know :-)&lt;/p&gt;
&lt;/li&gt;&lt;img src="http://rickgaribay.net/aggbug/204.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/09/26/using-powershell-to-manage-network-interfaces-and-windows-services.aspx</guid>
            <pubDate>Fri, 26 Sep 2008 22:02:26 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/204.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/09/26/using-powershell-to-manage-network-interfaces-and-windows-services.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/204.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/204.aspx</trackback:ping>
        </item>
        <item>
            <title>Comparing WCF Binary Encoding to .NET Serialization</title>
            <category>.NET 3.5</category>
            <category>WCF</category>
            <link>http://rickgaribay.net/archive/2008/09/19/comparing-wcf-binary-encoding-to-.net-serialization.aspx</link>
            <description>&lt;p&gt;A common question that I get from folks at my talks as well as clients is how binary performance of WCF stacks up against .NET Remoting. To quickly level-set, the lingua franca for all messages that WCF exchanges is SOAP/XML. However, out of the box, WCF provides 3 means for representing the message payload on the wire:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Binary&lt;/li&gt;    &lt;li&gt;Text&lt;/li&gt;    &lt;li&gt;MTOM&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Of the encodings above, only Text and MTOM are interoperable (and I'll cover these in upcoming posts), but sometimes, in a .NET to .NET messaging scenario, encoding the message in a binary representation will yield smaller payloads and thus more efficient message transfer (especially when pairing a binary message with TCP). It is important to note that regardless of the encoding used to serialize the message, the message itself is SOAP and thus can be de-serialized according to the SOAP standard in use on the client and server stack.&lt;/p&gt;  &lt;p&gt;It is widely documented that the System.Runtime.Serialization assembly introduces an optimized byte representation for packaging XML/SOAP via the XmlDictonaryWriter which can be found in the &lt;strong&gt;System.Xml&lt;/strong&gt; namespace within the System.Runtime.Serialization.dll. &lt;/p&gt;  &lt;p&gt;In short, WCF leverages the XmlDictionaryWriter which provides a factory method for getting a binary writer which is capable of taking an XML document and serializing it to a proprietary binary format:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div class="csharpcode-wrapper"&gt;     &lt;div class="csharpcode-wrapper"&gt;       &lt;pre class="csharpcode"&gt;XmlDocument doc = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument(); 
doc.Load(from); 

FileStream stream = &lt;span class="kwrd"&gt;new&lt;/span&gt; FileStream(to, FileMode.OpenOrCreate); 

XmlDictionaryWriter binaryWriter = XmlDictionaryWriter.CreateBinaryWriter(stream); 
doc.WriteContentTo(binaryWriter); 

binaryWriter.Flush();&lt;/pre&gt;
    &lt;/div&gt;

    &lt;p&gt;&lt;/p&gt;
    &lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/div&gt;

  &lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The code above takes a file containing the following XML and loads it into an instance of the XmlDocument:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/WCFBinaryEncodingversusBinaryFormatter_12F49/image.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="163" alt="image" src="http://rickgaribay.net/Images/CustomContent/WCFBinaryEncodingversusBinaryFormatter_12F49/image_thumb.png" width="487" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Then, using the binary encoder, the stream is written to a file called "CustomerWCF.bin" on disk, which when opened looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/WCFBinaryEncodingversusBinaryFormatter_12F49/image_3.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="118" alt="image" src="http://rickgaribay.net/Images/CustomContent/WCFBinaryEncodingversusBinaryFormatter_12F49/image_thumb_3.png" width="634" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Similarly, if I want to use the "legacy" BinaryFormatter, which ships in the &lt;b&gt;System.Runtime.Serialization.Formatters&lt;/b&gt; namespace of mscorlib, I can write the following code which loads and serializes the same Customer.xml file:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;div class="csharpcode-wrapper"&gt;
    &lt;pre class="csharpcode"&gt;XmlDocument doc = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument(); 
doc.Load(from); 

FileStream stream = &lt;span class="kwrd"&gt;new&lt;/span&gt; FileStream(to, FileMode.OpenOrCreate); 

BinaryFormatter formatter = &lt;span class="kwrd"&gt;new&lt;/span&gt; BinaryFormatter(); 
formatter.Serialize(stream, doc.InnerXml);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;This time, the contents is written to a file called CustomerNET.bin which resembles the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/WCFBinaryEncodingversusBinaryFormatter_12F49/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="198" alt="image" src="http://rickgaribay.net/Images/CustomContent/WCFBinaryEncodingversusBinaryFormatter_12F49/image_thumb_4.png" width="645" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Of course, both of these files are encoded in binary, so when you open them in notepad or some other tool (in this case I am using Visual Studio) you will see some semblance of the original message with corresponding octal representation for each byte of data. It is evident, in just looking at the octal representation that the CustomerNET.bin is larger.&lt;/p&gt;

&lt;p&gt;In fact, it turns out that the CustomerWCF.bin file has a size of 98 bytes, compared to the CustomerNET.bin file that has a size of 205 bytes.&lt;/p&gt;

&lt;p&gt;Customer.WCF.bin:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/WCFBinaryEncodingversusBinaryFormatter_12F49/image_5.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="131" alt="image" src="http://rickgaribay.net/Images/CustomContent/WCFBinaryEncodingversusBinaryFormatter_12F49/image_thumb_5.png" width="496" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;CustomerNET.bin:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/WCFBinaryEncodingversusBinaryFormatter_12F49/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="130" alt="image" src="http://rickgaribay.net/Images/CustomContent/WCFBinaryEncodingversusBinaryFormatter_12F49/image_thumb_6.png" width="494" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Given this very simple example, you could say that the WCF binary encoder produces a payload that is roughly half the size of the BinaryFormatter!&lt;/p&gt;

&lt;p&gt;It is important to note that the these are different binary representations, that are each proprietary and therefore not interoperable outside of the .NET Framework. In fact, the WCF version of the Customer.xml contents is only supported within .NET 3.0 and later, and is naturally the encoder that is used when exchanging binary messages with WCF. The cool thing is that you can leverage this encoding outside of WCF, provided you have .NET 3.0+ on both sides of the wire.&lt;/p&gt;

&lt;p&gt;Forthcoming: Exploring Text and MTOM message representations.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/203.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/09/19/comparing-wcf-binary-encoding-to-.net-serialization.aspx</guid>
            <pubDate>Fri, 19 Sep 2008 14:42:03 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/203.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/09/19/comparing-wcf-binary-encoding-to-.net-serialization.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/203.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/203.aspx</trackback:ping>
        </item>
        <item>
            <title>Comprehensive Series on WCF &amp;amp; REST</title>
            <category>SOA</category>
            <category>WCF</category>
            <link>http://rickgaribay.net/archive/2008/09/08/comprehensive-series-on-wcf-amp-rest.aspx</link>
            <description>&lt;p&gt;My friend Rob Bagby has done an excellent job putting together a series of primers on REST with WCF. &lt;/p&gt;  &lt;p&gt;REST is gaining more and more attention recently as a great way to expose services over HTTP that do not require WS-* features. I think if you spend some time with REST, you will not only learn an alternate way of working with services, but you will also learn or re-learn the fundamentals of the HTTP protocol, which will be helpful regardless of what approach you take to building Web Services.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Rob's blog series can be found below:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/bags/archive/2008/05/28/rest-in-wcf-part-i-rest-overview.aspx"&gt;REST in WCF - Part I (REST Overview)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bags/archive/2008/05/29/rest-in-wcf-part-ii-ajax-friendly-services-creating-the-service.aspx"&gt;REST in WCF - Part II (AJAX Friendly Services, Creating The Service)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bags/archive/2008/05/30/rest-in-wcf-part-iii-ajax-friendly-services-consuming-the-service.aspx"&gt;REST in WCF - Part III (AJAX Friendly Services, Consuming The Service)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bags/archive/2008/06/09/rest-in-wcf-part-iv-hi-rest-exposing-a-service-via-get-configuring-the-service.aspx"&gt;REST in WCF - Part IV (HI-REST - Exposing a service via GET - Configuring the service)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bags/archive/2008/06/10/rest-in-wcf-part-v-hi-rest-exposing-a-service-via-get-the-servicecontract-and-implementation.aspx"&gt;REST in WCF - Part V (HI-REST - Exposing a service via GET - The ServiceContract and Implementation)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bags/archive/2008/06/12/rest-in-wcf-part-vi-hi-rest-consuming-our-get-service-via-ajax.aspx"&gt;REST in WCF - Part VI (HI-REST - Consuming our GET service via AJAX)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bags/archive/2008/06/12/rest-in-wcf-part-vii-hi-rest-implementing-insert-and-update.aspx"&gt;REST in WCF - Part VII (HI-REST - Implementing Insert and Update&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bags/archive/2008/06/14/rest-in-wcf-part-viii-hi-rest-implementing-delete.aspx"&gt;REST in WCF - Part VIII (HI-REST - Implementing Delete)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bags/archive/2008/08/22/rest-in-wcf-part-ix-controlling-the-uri.aspx"&gt;REST in WCF - Part IX - Controlling the URI&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/bags/archive/2008/08/28/rest-in-wcf-part-x-supporting-caching-and-conditional-get.aspx"&gt;REST in WCF - Part X - Supporting Caching and Conditional GET&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Rob has also put together a series of screen casts on the subject which can be viewed here: &lt;/p&gt;  &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/rojacobs/endpointtv-Controlling-the-URI-in-RESTful-WCF-with-Rob-Bagby/"&gt;endpoint.tv - Controlling the URI in RESTful WCF with Rob Bagby&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/RobBagby/deCast-Creating-a-HI-REST-GET-Service-with-WCF-35/"&gt;deCast - Creating a HI-REST GET Service with WCF 3.5&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/RobBagby/deCast-Consuming-a-HI-REST-GET-Service-From-Silverlight-2-Beta-2/"&gt;deCast - Consuming a HI-REST GET Service From Silverlight 2 (Beta 2)&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/rojacobs/endpointtv-Caching-and-Conditional-Get-with-Rob-Bagby/"&gt;endpoint.tv - Caching and Conditional Get with Rob Bagby&lt;/a&gt;&lt;/li&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;To catch up with Rob, be sure to check out his upcoming live events here: &lt;a title="http://blogs.msdn.com/bags" href="http://blogs.msdn.com/bags"&gt;http://blogs.msdn.com/bags&lt;/a&gt;&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/202.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/09/08/comprehensive-series-on-wcf-amp-rest.aspx</guid>
            <pubDate>Mon, 08 Sep 2008 18:35:23 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/202.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/09/08/comprehensive-series-on-wcf-amp-rest.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/202.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/202.aspx</trackback:ping>
        </item>
        <item>
            <title>Hyper-V Parent Partition Filesytem Access Not Working?</title>
            <category>Hardware</category>
            <category>Misc.</category>
            <link>http://rickgaribay.net/archive/2008/09/05/hyper-v-parent-partition-filesytem-access-not-working.aspx</link>
            <description>&lt;p&gt;With Hyper-v, if you want to access the parent partition (host) file system, or attached USB drives, the only way to do so is through a UNC or IP connection from the child partition (guest) to the parent (host). To do so, you will have to create a network and bind it. You can read about how to setup an Internal Network in a previous post.&lt;/p&gt;  &lt;p&gt;At times, you may find that despite being able to ping the parent from the child, and even resolve DNS names, you get a networking error:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://rickgaribay.net/Images/CustomContent/HyperVParentPartitionNetworking_845E/image.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="76" alt="image" src="http://rickgaribay.net/Images/CustomContent/HyperVParentPartitionNetworking_845E/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For whatever reason, I have found that restarting the "Server" service on the parent resolves the issue. As you might imagine, the Server service is responsible for managing file sharing, among other things.  What is strange is that it is already running, but every time I run into this issue, restarting the service is the fix.&lt;/p&gt;  &lt;p&gt;Hope this helps someone out who could otherwise spend hours pulling their hair out debugging networking issues.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/201.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2008/09/05/hyper-v-parent-partition-filesytem-access-not-working.aspx</guid>
            <pubDate>Fri, 05 Sep 2008 16:30:27 GMT</pubDate>
            <wfw:comment>http://rickgaribay.net/comments/201.aspx</wfw:comment>
            <comments>http://rickgaribay.net/archive/2008/09/05/hyper-v-parent-partition-filesytem-access-not-working.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/201.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/201.aspx</trackback:ping>
        </item>
    </channel>
</rss>