<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>.NET</title>
        <link>http://geekswithblogs.net/gpro/category/7738.aspx</link>
        <description>.NET</description>
        <language>en-US</language>
        <copyright>Gary Pronych</copyright>
        <managingEditor>gary.pronych@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Affordable SQL Server High Availability</title>
            <link>http://geekswithblogs.net/gpro/archive/2009/01/09/affordable-sql-server-high-availability.aspx</link>
            <description>&lt;p&gt;SQL server high availability comes in 2 basic categories.&lt;/p&gt;
&lt;p&gt;1) Clustering using a SAN drive and multiple physical servers attached to the disk storage &lt;br /&gt;
2) Stand alone equipment acting in parallel&lt;/p&gt;
&lt;p&gt;A SAN configuration is an expensive solution; typically a disk storage array needs to be purchased with high speed communication channels (typically fibre). &lt;br /&gt;
Therefore #2 is often the recommended configuration for smaller shops and less critical databases. &lt;br /&gt;
Awareness of this topic is important for developers to be able 'talk the talk' and provide recommendations so I will expand on this topic today.&lt;/p&gt;
&lt;p&gt;First, let me define some of the terminology used so we are all on the same page&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Redundant &lt;/strong&gt;- Not to be confused with high availability (see &lt;a target="_blank" href="http://www.merriam-webster.com/dictionary/redundant"&gt;redundant&lt;/a&gt;); meaning having more than necessary (ie. Redundant power supplies mean there are 2 power supplies or more). &lt;br /&gt;
&lt;strong&gt;High Available &lt;/strong&gt;- Meaning &lt;a target="_blank" href="http://en.wikipedia.org/wiki/High_availability"&gt;available often&lt;/a&gt;, unaffected by failures and downtime. &lt;br /&gt;
&lt;strong&gt;High Performance Mode (asynchronous)&lt;/strong&gt; - Transactions are commit without waiting for the mirrored servers to commit, which maximizes performance. &lt;br /&gt;
&lt;strong&gt;High Safety Mode (synchronous)&lt;/strong&gt; - A committed transaction is committed on all systems in replication before the next transaction is processed, but at the risk of increased transaction latency (I have tested up to a 30% performance hit). &lt;br /&gt;
&lt;strong&gt;Replication &lt;/strong&gt;- Making a copy &lt;br /&gt;
&lt;strong&gt;Failover &lt;/strong&gt;- The capability of switching to another system&lt;br /&gt;
&lt;strong&gt;Quorum &lt;/strong&gt;- A group of servers required; in this topic, a Principal, Partner and Witness are required &lt;br /&gt;
&lt;strong&gt;Principal &lt;/strong&gt;- The server or database instance that is processing transactions &lt;br /&gt;
&lt;strong&gt;Partner &lt;/strong&gt;- The server that is being replicated to and is available for failover &lt;br /&gt;
&lt;strong&gt;Witness &lt;/strong&gt;- Required to decide if a failover is required (participates in a quorum 'vote') &lt;br /&gt;
&lt;strong&gt;Split Brain &lt;/strong&gt;- Principal and Partner databases become out of sync &lt;br /&gt;
&lt;strong&gt;Load Balancing &lt;/strong&gt;- Share the transaction load between multiple servers &lt;br /&gt;
&lt;strong&gt;Automatic Recovery &lt;/strong&gt;- System is able to process any missed transactions during failover / downtime&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Principal and Partner&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/gpro/9395/o_Principal.Partner.png" /&gt; &lt;/p&gt;
&lt;p&gt;Pros: High Availability, both servers could be available for queries (great for Business Intelligence(BI)) &lt;br /&gt;
Cons: Manual Failover* (see programming considerations), manual recovery is required&lt;/p&gt;
&lt;p&gt;Description: &lt;br /&gt;
2 servers are required; you can replicate to as many servers as you wish. &lt;br /&gt;
I know about environments replicating to 10+ environments to provide &lt;a href="http://en.wikipedia.org/wiki/Slowly_Changing_Dimension"&gt;Slowly Changing Dimensions&lt;/a&gt; (SCD)  to remote sites; I will cover my recommendations on using the &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/sync/bb887608.aspx"&gt;ADO.NET Sync Services&lt;/a&gt; in a future post and a community presentation. &lt;br /&gt;
In this diagram, YTSdb1 is the principal server and is replicating to YTSdb2.&lt;/p&gt;
&lt;p&gt;This model suffers from split brain, as it is can allow transactions written directly to the partner. &lt;br /&gt;
Recovery from split brain (because of failures, downtime, etc) is a manual process as you can see the information flow is one-way; from the principal to the partner.&lt;/p&gt;
&lt;p&gt;*Note: You cannot query the Partner database if you are using the Mirror configuration as it is unavailable. Only when using replication methods such as log shipping are you able to access the replicated tables. &lt;br /&gt;
Log Shipping allows you to replicate to many databases as the Partner database consumes transaction log files.&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Peer-to-Peer (P2P) Replication &lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/gpro/9395/r_P2P.Replication.png" /&gt; &lt;/p&gt;
&lt;p&gt;Pros: Allows load balancing (manual), Automatic Recovery &lt;br /&gt;
Cons: Asynchronous transactions, Manual failover* (see programming considerations), not the next P2P Kazaa&lt;/p&gt;
&lt;p&gt;Description: &lt;br /&gt;
2 or more servers act in asynchronous replication, each database is known as a node. &lt;br /&gt;
In a non-clustered environment, this is the only method that can provide load balancing. Load balancing would be configured by the developer utilizing different servers in their connection strings. &lt;br /&gt;
Transactions are asynchronous; if you are using this method for load balancing there is a risk that not all the servers have been replicated to all servers. &lt;br /&gt;
Recovery is automatic; once the failed server comes back online, the missed transactions are replicated.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Principal, Partner and Witness Quorum&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/gpro/9395/o_Principal.Partner.Quorum.png" /&gt; &lt;/p&gt;
&lt;p&gt;Pros: Can run in Safety or Performance Mode, Automatic Failover* (see programming considerations), Automatic Recovery &lt;br /&gt;
Cons: Witness is required but I can be any version SQL, Partner is not available for queries&lt;/p&gt;
&lt;p&gt;Description: &lt;br /&gt;
This is the most powerful configuration for High Availability. &lt;br /&gt;
YTSdb1 is the principal in this diagram, if it fails, a vote is taken place to see if the Partner should be promoted. Once YTSdb1 is back online, it will be given all the missed transactions and it will assume the role of Partner. If YTSdb2 then fails, then YTSdb1 will then be restore back to the Principal.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Programming Considerations &lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;ADO.NET 2.0+ (Visual Studio 2005+) supports a Failover Partner configuration in the connection string as shown below.&lt;/p&gt;
&lt;pre&gt;&lt;em&gt;Data Source=SQLA\INST1;&lt;strong&gt;&lt;u&gt;Failover Partner&lt;/u&gt;&lt;/strong&gt;=SQLB\INST1;Initial Catalog=DBMTest;Integrated Security=True&lt;/em&gt;&lt;/pre&gt;
&lt;p&gt;This attribute allows both manual and automatic failover since the application then becomes aware of the principal / partner configuration.&lt;/p&gt;
&lt;p&gt;Automatic failover will happen when connected to a Quorum configuration. &lt;br /&gt;
If even there is no Partner set in the configuration file, the ADO.NET provider will be sent the partner connection information and cache it. If a failure happens during application processing, the application will then failover to the new principal once the failover has been completed. My tests have shown a 20 second delay in failover; this may depend on your timeout configuration. &lt;br /&gt;
You can prevent any transactions from being lost by implementing retry logic into your applications, otherwise there is a risk of losing 1 transaction per client.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;All the above I have tested so these are my notes on my research and tests. &lt;br /&gt;
I completed these tests using SQL Server 2008; I would suspect most of these configurations can apply to SQL 2005.&lt;/p&gt;
&lt;p&gt;I can certainly go into more depth and include additional strategies, but the purpose of the post is for awareness of these methods.&lt;/p&gt;
&lt;p&gt;Hope this help you in your SQL Server configurations, &lt;br /&gt;
Gary Pronych&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128512"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128512" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gpro/aggbug/128512.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gary Pronych</dc:creator>
            <guid>http://geekswithblogs.net/gpro/archive/2009/01/09/affordable-sql-server-high-availability.aspx</guid>
            <pubDate>Fri, 09 Jan 2009 16:20:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gpro/comments/128512.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gpro/archive/2009/01/09/affordable-sql-server-high-availability.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gpro/comments/commentRss/128512.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gpro/services/trackbacks/128512.aspx</trackback:ping>
        </item>
        <item>
            <title>SharePoint Patterns and Practices Announced</title>
            <link>http://geekswithblogs.net/gpro/archive/2008/11/13/sharepoint-patterns-and-practices-announced.aspx</link>
            <description>&lt;link rel="File-List" href="file:///C:\Users\GARYPR~1\AppData\Local\Temp\msohtmlclip1\01\clip_filelist.xml" /&gt;
&lt;link rel="themeData" href="file:///C:\Users\GARYPR~1\AppData\Local\Temp\msohtmlclip1\01\clip_themedata.thmx" /&gt;
&lt;link rel="colorSchemeMapping" href="file:///C:\Users\GARYPR~1\AppData\Local\Temp\msohtmlclip1\01\clip_colorschememapping.xml" /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;w:WordDocument&gt;
&lt;w:View&gt;Normal&lt;/w:View&gt;
&lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
&lt;w:TrackMoves /&gt;
&lt;w:TrackFormatting /&gt;
&lt;w:PunctuationKerning /&gt;
&lt;w:ValidateAgainstSchemas /&gt;
&lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
&lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
&lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
&lt;w:DoNotPromoteQF /&gt;
&lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
&lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
&lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
&lt;w:Compatibility&gt;
&lt;w:BreakWrappedTables /&gt;
&lt;w:SnapToGridInCell /&gt;
&lt;w:WrapTextWithPunct /&gt;
&lt;w:UseAsianBreakRules /&gt;
&lt;w:DontGrowAutofit /&gt;
&lt;w:SplitPgBreakAndParaMark /&gt;
&lt;w:DontVertAlignCellWithSp /&gt;
&lt;w:DontBreakConstrainedForcedTables /&gt;
&lt;w:DontVertAlignInTxbx /&gt;
&lt;w:Word11KerningPairs /&gt;
&lt;w:CachedColBalance /&gt;
&lt;/w:Compatibility&gt;
&lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
&lt;m:mathPr&gt;
&lt;m:mathFont m:val="Cambria Math" /&gt;
&lt;m:brkBin m:val="before" /&gt;
&lt;m:brkBinSub m:val="&amp;#45;-" /&gt;
&lt;m:smallFrac m:val="off" /&gt;
&lt;m:dispDef /&gt;
&lt;m:lMargin m:val="0" /&gt;
&lt;m:rMargin m:val="0" /&gt;
&lt;m:defJc m:val="centerGroup" /&gt;
&lt;m:wrapIndent m:val="1440" /&gt;
&lt;m:intLim m:val="subSup" /&gt;
&lt;m:naryLim m:val="undOvr" /&gt;
&lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267"&gt;
&lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal" /&gt;
&lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 1" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 2" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 3" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 4" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 5" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 6" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 7" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 8" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 9" /&gt;
&lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /&gt;
&lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title" /&gt;
&lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /&gt;
&lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /&gt;
&lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong" /&gt;
&lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid" /&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /&gt;
&lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /&gt;
&lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /&gt;
&lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote" /&gt;
&lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /&gt;
&lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /&gt;
&lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title" /&gt;
&lt;w:LsdException Locked="false" Priority="37" Name="Bibliography" /&gt;
&lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /&gt;
&lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;style type="text/css"&gt;&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:0 0 0 0 0 0 0 0 0 0;
	mso-font-charset:1;
	mso-generic-font-family:roman;
	mso-font-format:other;
	mso-font-pitch:variable;
	mso-font-signature:0 0 0 0 0 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0in;
	margin-right:0in;
	margin-bottom:10.0pt;
	margin-left:0in;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	mso-themecolor:hyperlink;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	mso-themecolor:followedhyperlink;
	text-decoration:underline;
	text-underline:single;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:10.0pt;
	margin-left:.5in;
	mso-add-space:auto;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-type:export-only;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:.5in;
	margin-bottom:.0001pt;
	mso-add-space:auto;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-type:export-only;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:.5in;
	margin-bottom:.0001pt;
	mso-add-space:auto;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast
	{mso-style-priority:34;
	mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-type:export-only;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:10.0pt;
	margin-left:.5in;
	mso-add-space:auto;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoPapDefault
	{mso-style-type:export-only;
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
 /* List Definitions */
 @list l0
	{mso-list-id:358942610;
	mso-list-type:hybrid;
	mso-list-template-ids:1174841170 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
	{mso-level-tab-stop:none;
	mso-level-number-position:left;
	margin-left:37.5pt;
	text-indent:-.25in;}
ol
	{margin-bottom:0in;}
ul
	{margin-bottom:0in;}
--&gt;&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;p class="MsoNormal"&gt;Microsoft has announced the launch Patterns and Practices for SharePoint at &lt;a href="http://www.devconnections.com/"&gt;DevConnections&lt;/a&gt; Las Vegas.&lt;br /&gt;
&lt;a href="http://www.codeplex.com/spg"&gt;http://www.codeplex.com/spg&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The MOSS P&amp;amp;P launch affirms that MOSS will be around for some time.&lt;br /&gt;
Microsoft has been pushing MOSS as their portal solution; Intranet and Internet. It is becoming clear that MOSS is becoming much more than a portal solution.&lt;br /&gt;
The director of SharePoint, Thomas Rizzo, wouldn’t comment on the release date of SP1 but he did recommend that all SharePoint users should install the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=256CE3C3-6A42-4953-8E1B-E0BF27FD465B&amp;amp;displaylang=en"&gt;infrastructure update&lt;/a&gt;.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Recently I have been working on a Business Intelligence (BI) planning team; we are looking to migrate to SQL 2008 as a BI platform.&lt;br /&gt;
A part of our process was to have a webcast with some Microsoft team members to showcase some of the features with company stakeholders.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Our agenda was to discuss reporting services in particular (SSRS). When it came time for the webcast, the demonstration focused more on &lt;a href="http://office.microsoft.com/en-us/performancepoint/FX101680481033.aspx"&gt;Performance Point 2007&lt;/a&gt; than SSRS.&lt;br /&gt;
One of the requirements for Performance Point is that it must run on SharePoint 2007.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;To summarize, in order to get to ‘the &lt;span style="font-style: italic;"&gt;Microsoft&lt;/span&gt; recommend BI platform’ you need to purchase.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="margin-left: 37.5pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;SQL 2008&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin-left: 37.5pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;2.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;MOSS&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="margin-left: 37.5pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Performance Point 2007&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I think it is great that all 3 of these products work well together, but that also means our budget and resource requirements multiply by 3x plus.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127004"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127004" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gpro/aggbug/127004.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gary Pronych</dc:creator>
            <guid>http://geekswithblogs.net/gpro/archive/2008/11/13/sharepoint-patterns-and-practices-announced.aspx</guid>
            <pubDate>Thu, 13 Nov 2008 22:03:47 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gpro/comments/127004.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gpro/archive/2008/11/13/sharepoint-patterns-and-practices-announced.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gpro/comments/commentRss/127004.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gpro/services/trackbacks/127004.aspx</trackback:ping>
        </item>
        <item>
            <title>ClickOnce: Restore a Previous Version of an Application</title>
            <link>http://geekswithblogs.net/gpro/archive/2008/10/30/clickonce-restore-previous-version.aspx</link>
            <description>&lt;p&gt;As a standard, we use ClickOnce to deploy all of our applications.&lt;br /&gt;
&lt;br /&gt;
I don't want to get into all the benefits as I have discussed some in a &lt;a href="http://geekswithblogs.net/gpro/archive/2008/03/16/clickonce-winforms-deployment-part-1.aspx"&gt;previous post&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
To summarize my scenario, I do software development for a 24 x 7 x 365 manufacturing plant.&lt;br /&gt;
Our systems must always be online and we must provide after hours support.&lt;br /&gt;
&lt;br /&gt;
This week, one of our developers deployed an update to his end users.&lt;br /&gt;
It was not until 7 PM that the end user determined there was a significant bug in the application that could cause a mill delay. (Bad!)&lt;br /&gt;
I was on call and I was not at all familiar with this application, luckily the developer notified the team of this update and the fixes included. The bug was a part of one of these fixes, so I knew I could rollback to the previous version so the end user can continue his job and this new bug can be resolved during the next business day.&lt;br /&gt;
&lt;br /&gt;
As a developer, you may consider something like &lt;br /&gt;
'grabbing the source code for the previous version, build it, and deploy'; which can be time time consuming.&lt;br /&gt;
With ClickOnce, you have 2 easy to use options.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;1) Change the Version on the Client&lt;/span&gt;&lt;br /&gt;
- Ask the end user (or remote control) to navigate to the CONTROL PANEL -&amp;gt; ADD REMOVE PROGRAMS&lt;br /&gt;
- Scroll down the list of applications until you find your application name, in my case it is called RSA&lt;br /&gt;
- Click Change/Remove&lt;br /&gt;
- You will then have two options&lt;br /&gt;
a) Restore the application to its previous state&lt;br /&gt;
b) Remove the application from this computer&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/geekswithblogs_net/gpro/7676/r_ClickOnce_Add.Remove_Restore.JPG" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
Select a) and the previous build will become the current version.&lt;br /&gt;
The caveat is the user must use Start -&amp;gt; All Programs -&amp;gt; Your Application Folder -&amp;gt; Your Application Name &amp;lt;RSA&amp;gt; to load the previous version.&lt;br /&gt;
They must run the application from the install folder to get the newest update.&lt;br /&gt;
&lt;br /&gt;
This option works for a single client and is a temporary solution, what if a permanant rolback is required?&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;2) Change the Current Application Version&lt;/span&gt;&lt;br /&gt;
You have likely published a number of version of your application so you ClickOnce publish folder may look like this.&lt;br /&gt;
&lt;br /&gt;
&lt;img height="646" width="546" src="/images/geekswithblogs_net/gpro/7676/o_ClickOnce_On.Network.JPG" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
You will see in this picture, there are a number of &amp;lt;ApplicationName&amp;gt;_&amp;lt;version&amp;gt;.application files as well as folders.&lt;br /&gt;
There is only 1 application with the name &amp;lt;ApplicationName&amp;gt;.application, in this my scenario it is called RSA.application.&lt;br /&gt;
&lt;br /&gt;
My latest build is 1_1_0_14, to restore to 1_1_0_12 I need to follow these steps&lt;br /&gt;
- delete RSA.application&lt;br /&gt;
- Make a copy of RSA_1_1_0_12.application and rename it RSA.application&lt;br /&gt;
&lt;br /&gt;
The next time a user of this application attempts to load their application, they will be notified of an update. Once they select OK, they will be rolled back to 1_1_0_12.&lt;br /&gt;
&lt;br /&gt;
Hope this helps,&lt;br /&gt;
Gary Pronych&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126407"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126407" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gpro/aggbug/126407.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gary Pronych</dc:creator>
            <guid>http://geekswithblogs.net/gpro/archive/2008/10/30/clickonce-restore-previous-version.aspx</guid>
            <pubDate>Thu, 30 Oct 2008 18:37:09 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gpro/comments/126407.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gpro/archive/2008/10/30/clickonce-restore-previous-version.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gpro/comments/commentRss/126407.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gpro/services/trackbacks/126407.aspx</trackback:ping>
        </item>
        <item>
            <title>DevConnections November 10 - 13th</title>
            <link>http://geekswithblogs.net/gpro/archive/2008/08/27/devconnections-november-10---13th-again.aspx</link>
            <description>I have decided I will be attending DevConnections November 10 - 13th in Las Vegas, NV&lt;br /&gt;
&lt;br /&gt;
DevConnections has a number of events running at the same time, with registration, you can attend any of these events&lt;br /&gt;
- ASP.NET Connections&lt;br /&gt;
- VS.NET Connections&lt;br /&gt;
- SharePoint Connections&lt;br /&gt;
- SQL Connections&lt;br /&gt;
- DNN Connections&lt;br /&gt;
- Exchange Connections&lt;br /&gt;
- Unified Connections&lt;br /&gt;
- Windows Connections&lt;br /&gt;
&lt;br /&gt;
Some of the speakers include&lt;br /&gt;
Dino Esposito, Rick Strahl, Markus Egger, Robert Howard, Miguel Castro, John Papa, Julie Lerman, Juval Lowry, Kathleen Dollard, Itzik Ben-Gan&lt;br /&gt;
&lt;br /&gt;
There are so many topics, I will refer you to the brochure as it has 50+ listed.&lt;br /&gt;
DevConnections, Fall 2008, Las Vegas Brochure &lt;br /&gt;
http://www.devconnections.com/shows/images/brochurepdfs/F08_DevBroc.pdf&lt;br /&gt;
&lt;br /&gt;
For me, I am most interested attending these preliminary session topics (and sharing on this blog and in the community)&lt;br /&gt;
- Best practices for LINQ N-Tier&lt;br /&gt;
- Entity Framework Futures&lt;br /&gt;
- ADO.NET Data Services Application Patterns&lt;br /&gt;
- Productive WCF&lt;br /&gt;
- WF, Service-Ortiented Workflows and SOA&lt;br /&gt;
&lt;br /&gt;
I received a User Group coupon for $50 I wanted to share&lt;br /&gt;
Coupon (case insensitive): &lt;span style="font-weight: bold;"&gt;Regina&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The conference cost is $1395 USD if booked by August 27th; $1495 USD after.&lt;br /&gt;
If you stay at Mandalay Bay and book before September 8th, you receive a free night stay (free night will be assign to Tuesday Nov 11th); the other nights are at $229 night.&lt;br /&gt;
&lt;br /&gt;
If you are going to be in Las Vegas or at this conference Nov 9 - 13th, be sure to reply to this post or contact me via this blog.&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/gpro/7676/r_FALL2008DEVCELL04.jpg" alt="DevConnections" /&gt;&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
Gary Pronych&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124720"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124720" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gpro/aggbug/124720.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gary Pronych</dc:creator>
            <guid>http://geekswithblogs.net/gpro/archive/2008/08/27/devconnections-november-10---13th-again.aspx</guid>
            <pubDate>Wed, 27 Aug 2008 08:40:58 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gpro/comments/124720.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gpro/archive/2008/08/27/devconnections-november-10---13th-again.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gpro/comments/commentRss/124720.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gpro/services/trackbacks/124720.aspx</trackback:ping>
        </item>
        <item>
            <title>Determine .NET Framework Version of an Application</title>
            <link>http://geekswithblogs.net/gpro/archive/2008/08/27/determine-.net-framework-version-of-an-application.aspx</link>
            <description>I needed to find the version of .NET framework required for a vendor provided application in short order; there was no documentation (of course), the vendor was not available and the super user was not available.&lt;br /&gt;
Your typical support scenario.&lt;br /&gt;
&lt;br /&gt;
When you try to run a .NET EXE on a computer that does not have the framework, your application informs you with a prompt along the lines of 'The Application Requires .NET framework version x.x'&lt;br /&gt;
If you have the framework installed, it does not prompt you (of course).&lt;br /&gt;
&lt;br /&gt;
I figured it should be as easy as right clicking the EXE and selecting properties or something similar, but no.&lt;br /&gt;
The easiest way I found was by using the MSIL Disassembler ildasm.exe&lt;br /&gt;
If you have installed the 2.0 SDK you can find ILDASM.exe in this location&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;c:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The steps to get the .NET framework version are as follows:&lt;br /&gt;
1) Execute ILDASM.EXE from the SDK folder noted above&lt;br /&gt;
2) In ILDASM select the File | Open menu&lt;br /&gt;
3) Select the EXE or DLL you want to disassemble&lt;br /&gt;
&lt;br /&gt;
ILDASM will now show you the file you selected in #3. You will want to double click the MANIFEST and it will load the manifest in a notepad-like editor.&lt;br /&gt;
The top line will read //Medata version: vX.X.XXXX&lt;br /&gt;
Where the X.X.XXXX is your .NET framework version.&lt;br /&gt;
&lt;br /&gt;
See the image below&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/gpro/7676/r_ILDASM.PNG" alt="ILDASM.exe" /&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124719"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124719" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gpro/aggbug/124719.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gary Pronych</dc:creator>
            <guid>http://geekswithblogs.net/gpro/archive/2008/08/27/determine-.net-framework-version-of-an-application.aspx</guid>
            <pubDate>Wed, 27 Aug 2008 08:39:31 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gpro/comments/124719.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gpro/archive/2008/08/27/determine-.net-framework-version-of-an-application.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gpro/comments/commentRss/124719.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gpro/services/trackbacks/124719.aspx</trackback:ping>
        </item>
        <item>
            <title>First Chance Exceptions</title>
            <link>http://geekswithblogs.net/gpro/archive/2008/06/24/first-chance-exceptions.aspx</link>
            <description>&lt;p&gt;Recently I was working on an application that uses utilities provided by  another DLL. The function I was using creates a custom connection manager based on the  destination database.&lt;br /&gt;
It seemed every time the connection manager was  invoked, it would generate this error.&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
A first chance exception of  type 'System.InvalidOperationException' occurred in System.dll&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;A 'first chance exception' message notifies you there was an exception in one of your intervening layers. The exception was handled in the layer; therefore it was handled at the first chance.&lt;br /&gt;
If you debugger gets a second chance exception, your application will typically crash.&lt;br /&gt;
&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;105675"&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;105675&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; My  application was running as expected, but generated the above message in my immediate  window; obviously annoying. &lt;br /&gt;
I stepped through the code and didn't notice any anomalies, at first I thought  this was generated erroneously.&lt;br /&gt;
My application is a procedural audit utility  to verify data at different times in a manufacturing process, therefore I use this function 40+ times per application execution; it would generate this error on every execution.&lt;br /&gt;
As a result of my testing, I thought about disabling the output to the immediate window since the exception appeared to be handled inside the function.&lt;br /&gt;
&lt;a href="http://www.helixoft.com/blog/archives/24"&gt;http://www.helixoft.com/blog/archives/24&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
On second thought, I wanted to know exactly what was generating this  message and see if this could be avoided; who knows what pain this exception may  cause in the future.&lt;br /&gt;
I had access to the source code, so I changed my DLL  reference to a project reference so I could walk through the code.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;As it turned out, the function was doing a call looking for a AppKey in my  App.config. &lt;br /&gt;
If the key didn't exist in the App.config, ithe code threw an  exception, then the exception would assign a default value.&lt;br /&gt;
&amp;lt;exception  code&amp;gt;&lt;/p&gt;
&lt;p&gt;try&lt;br /&gt;
    Dim boolRunMe As Boolean&lt;br /&gt;
    'below causes a  NullReferenceException when calling .ToString on an empty Configuration  attribute&lt;br /&gt;
    boolRunMe = CType(ConfigurationManager.AppSettings("RunMe").ToString, Boolean)&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;catch ex as Exception&lt;br /&gt;
    boolRunMe = False&lt;br /&gt;
end Try &lt;/p&gt;
&lt;p&gt;&amp;lt;/exception code&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
For some people setting this value in a exception may be a suitable  solution; but what if something else threw the exception? In this case, the least of my  worries would be to assign a default value. In this case, you may want to catch  specific exceptions.&lt;br /&gt;
For me, I want to avoid an exception at this point since  this function is called many times; throwing exceptions at this frequency is  less efficient than other methods (we have run internal tests on multiple exception throwing).&lt;br /&gt;
&lt;br /&gt;
The code  I implemented to verify the key rather than forcing an exception to handle this  scenario&lt;/p&gt;
&lt;p&gt;&amp;lt;AppSetting key test code&amp;gt;&lt;br /&gt;
Dim boolRunMe As Boolean&lt;br /&gt;
'Avoid an  exception by check for the existence of the attribute  &lt;br /&gt;
            If  String.IsNullOrEmpty(ConfigurationManager.AppSettings("RunMe"))  Then&lt;br /&gt;
                boolRunMe = False&lt;br /&gt;
            Else&lt;br /&gt;
                 boolRunMe = CType(ConfigurationManager.AppSettings("RunMe").ToString, Boolean)&lt;br /&gt;
            End  If&lt;br /&gt;
&amp;lt;/AppSetting key test code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lesson learnt:&lt;br /&gt;
I have seen my  share of Visual Studio bugs so I was quick to write this off as 'by  design'.&lt;br /&gt;
If you have access to any suspect code, do yourself and your team a  favor; walk through the code to review if this odd behavior is by 'your  design'.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Cheers&lt;br /&gt;
Gary Pronych&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123133"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123133" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gpro/aggbug/123133.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gary Pronych</dc:creator>
            <guid>http://geekswithblogs.net/gpro/archive/2008/06/24/first-chance-exceptions.aspx</guid>
            <pubDate>Tue, 24 Jun 2008 17:46:18 GMT</pubDate>
            <comments>http://geekswithblogs.net/gpro/archive/2008/06/24/first-chance-exceptions.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gpro/comments/commentRss/123133.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gpro/services/trackbacks/123133.aspx</trackback:ping>
        </item>
        <item>
            <title>Community Launch Post-Op</title>
            <link>http://geekswithblogs.net/gpro/archive/2008/05/04/community-launch-post-op.aspx</link>
            <description>&lt;p&gt;April 30th Regina.NET and Regina IT Pro held the hereos community launch event.   &lt;br /&gt;
As far as I know, this was going to be the largest locally run (local speakers, facilities and sponsorship) IT community event.    &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;We booked 3 - 100 person classrooms and we had 3 speakers providing sessions that run concurrently, then repeated.   &lt;br /&gt;
The schedule looked like this    &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;   &lt;/p&gt;
&lt;table cellspacing="1" cellpadding="1" border="1" style="width: 641px; height: 108px;" summary=""&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td&gt;Windows Server 2008; Room X&lt;/td&gt;
            &lt;td&gt;SQL Server 2008; Room Y&lt;/td&gt;
            &lt;td&gt;Visual Studio 2008; Room Z&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;6:30&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; color: black; line-height: 115%;"&gt;&lt;span style="font-size: 11pt; color: black; line-height: 115%;"&gt;AD, Hyper-V&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; color: black; line-height: 115%;"&gt;&lt;span style="font-size: 11pt; color: black; line-height: 115%;"&gt;New Datatypes, Resource Governer&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; color: black; line-height: 115%;"&gt;&lt;span style="font-size: 11pt; color: black; line-height: 115%;"&gt;LINQ, AJAX&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;7:30&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; color: black; line-height: 115%;"&gt;AD, Hyper-V&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; color: black; line-height: 115%;"&gt;New Datatypes, Resource Governer&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; color: black; line-height: 115%;"&gt;LINQ, AJAX              &lt;br /&gt;
            &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;   &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;We had 80 people sign up online and at least that many actually attend!   &lt;br /&gt;
We worked on this event for weeks, when it came to game time, this event was a lot of fun.&lt;/p&gt;
&lt;p&gt;At 8:30 we all got together in a larger classroom and we gave away Xbox toys, retail copies of Vista and 3 technet plus subscriptions.   &lt;br /&gt;
&lt;a href="http://www.groovewest.ca/blog/" target="_blank"&gt;Will Craddock&lt;/a&gt; who hosted &lt;a href="http://geekswithblogs.net/gpro/archive/2008/03/19/regina-community-connection-event-post-op.aspx" target="_blank"&gt;Regina's community connection&lt;/a&gt; event came through with a lot of these prizes; he had a lot of left over launch kits so we gave these away at the end of the event.&lt;/p&gt;
&lt;h3&gt;Post-Op&lt;/h3&gt;
&lt;p&gt;I provided the Visual Studio 2008 sessions; I had a lot of fun sharing what I learnt. The number 1 problem I had was that I demonstrated a product that I had very little experience with.   &lt;br /&gt;
I had been playing with LINQ and AJAX for a couple weeks so I felt confident in my abilities, where I stumbled at times was implementing the correct syntax. I recovered by referring to my cheat sheet and explaining the 'gotcha' I hit and explaining what that feature did.    &lt;br /&gt;
The evaluation forms where also favorable; comments included too much material, not enough time.&lt;/p&gt;
&lt;p&gt;Running concurrent sessions then duplicating was an interesting idea; after reviewing the material feedback was 50% positive.   &lt;br /&gt;
My first session had approximately 40 people attend; my second session had 20 people so I saw a sharp drop off. I suspect people who wanted to attend my session came first, the second session included people that had a secondary interest in VS 2008.    &lt;br /&gt;
I will definitely be interested in hosting an event like this again; we had Developers, DBA's and SysAdmins attend 1 event. A number of people showed up early and there was a lot of networking going on. A comment I received was 'Man, I haven't seen Dave in months, he is always at his client site. It was good to chat'.&lt;/p&gt;
&lt;p&gt;Some comments included 'start on time!'; we didn't allocate anytime for a break. When attendees changed sessions some people ended up hanging out in the hallway, Q &amp;amp; A was extended, etc; Note taken, allocate at least 15 minutes between sessions or else bring a cattle prong. &lt;/p&gt;
&lt;p&gt;Below is a picture taken during setup; we had great facilities at the &lt;a href="http://www.uregina.ca/" target="_blank"&gt;University of Regina&lt;/a&gt;, built-in projector, screens, instructor stations.    &lt;br /&gt;
The U of R has been going through some major renovations due to growth, so parking was definitely an issue.     &lt;br /&gt;
As a result, feedback from attendees is that this location is inconvenient (50% or so) and I agree. The facilities were donated by the U of R, I cannot do better than that so I will have to work to make this convenient. Maybe reimburse parking fees or use the education building which is closer to parking.&lt;/p&gt;
&lt;p&gt;As a personal post-op; this event was a lot of fun!   &lt;br /&gt;
1 hour sessions where great for me as a first time public speaker.    &lt;br /&gt;
If there is anyone out there that wants to share your knowledge in a field, 'Just do It'. Contact your local user group and I am sure they would love to assist you in anyway.&lt;/p&gt;
&lt;p&gt;   &lt;br /&gt;
Going forward, I am thinking about providing a deep dive in the fall; attendees loved the material presented in my sessions. My focus was to hit a number of areas where attendees can easily take advantage of VS 2008 today. Hopefully in the fall more developers will be using VS 2008 so the deep dive will be relative for them.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img width="636" height="477" alt="" src="http://geekswithblogs.net//images/geekswithblogs_net/gpro/7676/o_Gary.Pronych_CommunityLaunch2008.jpg" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121885"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121885" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gpro/aggbug/121885.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gary Pronych</dc:creator>
            <guid>http://geekswithblogs.net/gpro/archive/2008/05/04/community-launch-post-op.aspx</guid>
            <pubDate>Sun, 04 May 2008 14:21:19 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gpro/comments/121885.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gpro/archive/2008/05/04/community-launch-post-op.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gpro/comments/commentRss/121885.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gpro/services/trackbacks/121885.aspx</trackback:ping>
        </item>
        <item>
            <title>Community Launch Hits Regina, SK</title>
            <link>http://geekswithblogs.net/gpro/archive/2008/04/17/community-launch-hits-regina-sk.aspx</link>
            <description>&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;&lt;img width="704" height="68" alt="" src="/images/geekswithblogs_net/gpro/7676/o_Heroes.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
WoW, it took a couple weeks to get everything in order; but we are excited to be hosting &lt;/span&gt;&lt;a href="https://www.clicktoattend.com/invitation.aspx?code=127735"&gt;Heroes Happen {Regina}&lt;/a&gt; April 30th in Regina, Sask, Canada.&lt;br /&gt;
&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;I worked with the local IT Pro user group to create this night of community run technology sessions.&lt;br /&gt;
&lt;br /&gt;
What is interesting, is that we are holding 3 sessions concurrently, then we are running the same session again so attendees can participate in 2 of our 3 sessions.&lt;br /&gt;
They layout will look like this&lt;br /&gt;
&lt;br /&gt;
&lt;table cellspacing="1" cellpadding="1" border="1" align="" style="width: 641px; height: 108px;" summary=""&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
            &lt;td&gt;Windows Server 2008; Room X&lt;/td&gt;
            &lt;td&gt;SQL Server 2008; Room Y&lt;/td&gt;
            &lt;td&gt;Visual Studio 2008; Room Z&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;6:30&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;AD, Hyper-V&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;New Datatypes, Resource Governer&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;LINQ, AJAX&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;7:30&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;AD, Hyper-V&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;New Datatypes, Resource Governer&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;LINQ, AJAX&lt;br /&gt;
            &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
We thought about doing it code camp style; 3 session rooms, 2 unique sessions.&lt;br /&gt;
We decided against this because attendees are often torn 'Man, I want to be in room Y but room Z sounds sweet'.&lt;br /&gt;
Stress no longer my friends.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.groovewest.ca/blog/"&gt;Will Craddock&lt;/a&gt; will be providing the Windows Server 2008 sessions.&lt;br /&gt;
Vance Petriew will be providing the SQL Server 2008 sessions.&lt;br /&gt;
&lt;br /&gt;
Yes, I am trying to hide my session since this will be my &lt;span style="font-weight: bold;"&gt;*first*&lt;/span&gt; public presentation; I might be a little nervous and possibly a lot drunk. ;)&lt;br /&gt;
I will be providing the Visual Studio 2008 sessions.&lt;br /&gt;
I am pretty excited actually, I am hoping to provide a couple more sessions this year.&lt;br /&gt;
&lt;br /&gt;
If you are in the local area, I hope to see you out.&lt;br /&gt;
Registration can be found here &lt;br /&gt;
&lt;a href="http://www.clicktoattend.com/invitation.aspx?code=127735"&gt;http://www.clicktoattend.com/invitation.aspx?code=127735&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;/span&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121334"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121334" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gpro/aggbug/121334.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gary Pronych</dc:creator>
            <guid>http://geekswithblogs.net/gpro/archive/2008/04/17/community-launch-hits-regina-sk.aspx</guid>
            <pubDate>Fri, 18 Apr 2008 03:37:04 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gpro/comments/121334.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gpro/archive/2008/04/17/community-launch-hits-regina-sk.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/gpro/comments/commentRss/121334.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gpro/services/trackbacks/121334.aspx</trackback:ping>
        </item>
        <item>
            <title>The Shortcomings of Windows 2008 Server Core</title>
            <link>http://geekswithblogs.net/gpro/archive/2008/04/05/the-shortcomings-of-windows-2008-server-core.aspx</link>
            <description>I spent a couple hours today installing Windows Server 2008 on my home server.&lt;br /&gt;
I have to admit, this was the easiest and fastest Windows OS software install I &lt;span style="font-weight: bold;"&gt;*EVER*&lt;/span&gt; completed. &lt;img src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/omg_smile.gif" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
My goal was to build a Windows 2008 Server as a VPC host using Hyper-V; I literally spent more time installing the Hyper-V Role than installing the Win2k8 OS (I suppose this is the benefit of Role based installations). &lt;br /&gt;
Do yourself a favor and download this &lt;a href="http://www.grc.com/securable.htm"&gt;utility (http://www.grc.com/securable.htm)&lt;/a&gt; to verify your BIOS is configured properly if you are going to use Hyper-V.&lt;br /&gt;
They do a good job in explaining WTF these features are, and how to enable them.&lt;br /&gt;
&lt;br /&gt;
Now I had my VPC host running, my next task was to answer this question, 'What is all the buzz about Windows 2008 Server Core... and could it make my life easier?'&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;The simple answer (as a .NET user / developer)? No&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The concept of a Server Core is solid;&lt;br /&gt;
- Smaller footprint, smaller attack surface&lt;br /&gt;
- Install only the features you need in the form of Roles&lt;br /&gt;
&lt;br /&gt;
Why Server Core sucks?&lt;br /&gt;
1) I am a Windows guy, not a *nix guy, so the lack of GUI was going to make my life difficult&lt;br /&gt;
2) None of these features currently work in Server Core (&lt;a href="http://technet2.microsoft.com/windowsserver2008/en/library/47a23a74-e13c-46de-8d30-ad0afb1eaffc1033.mspx?mfr=true"&gt;Known Issues&lt;/a&gt;)&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;IIS-ASPNET&lt;/li&gt;
    &lt;li&gt;IIS-NetFxExtensibility&lt;/li&gt;
    &lt;li&gt;IIS-ManagementConsole&lt;/li&gt;
    &lt;li&gt;IIS-ManagementService&lt;/li&gt;
    &lt;li&gt;IIS-LegacySnapIn&lt;/li&gt;
    &lt;li&gt;IIS-FTPManagement&lt;/li&gt;
    &lt;li&gt;WAS-NetFxEnvironment&lt;/li&gt;
    &lt;li&gt;WAS-ConfigurationAPI&lt;/li&gt;
&lt;/ul&gt;
The key reason for issue #2 is explained as&lt;br /&gt;
'&lt;span style="font-weight: bold; font-style: italic;"&gt;The Web Server (IIS) role does not support ASP.NET in Server Core installations.&lt;/span&gt;&lt;br style="font-weight: bold; font-style: italic;" /&gt;
&lt;span style="font-weight: bold; font-style: italic;"&gt;Because there is no support for managed code, the following IIS features are not available in Server Core installations&lt;/span&gt;'&lt;br /&gt;
&lt;br /&gt;
Now, read the second line carefully and say with me, "&lt;span style="font-weight: bold;"&gt;NO SUPPORT FOR MANAGED CODE&lt;/span&gt;".&lt;br /&gt;
&lt;br /&gt;
Yes folks, that means all .NET code, ASP.NET, WinForms, SQL 2005... any and ALL products build on .NET.&lt;br /&gt;
WoW, I have to catch my breath... no .NET support on a Microsoft product; I might as well install Windows NT 4.&lt;br /&gt;
Well, at least Server Core 2008 supports ASP and PHP (!)... well, so does NT 4.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.enusbaum.com/blog/2008/02/21/can-a-microsoft-virtual-pc-vhd-work-in-windows-2008-hyper-v/"&gt;At least I can convert my VPC / Virtual Server 2005 R2 VHD's to be Hyper-V compatible&lt;/a&gt;.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121066"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121066" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gpro/aggbug/121066.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gary Pronych</dc:creator>
            <guid>http://geekswithblogs.net/gpro/archive/2008/04/05/the-shortcomings-of-windows-2008-server-core.aspx</guid>
            <pubDate>Sat, 05 Apr 2008 17:46:31 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gpro/comments/121066.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gpro/archive/2008/04/05/the-shortcomings-of-windows-2008-server-core.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gpro/comments/commentRss/121066.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gpro/services/trackbacks/121066.aspx</trackback:ping>
        </item>
        <item>
            <title>ClickOnce: Winforms Deployment - Part 1</title>
            <link>http://geekswithblogs.net/gpro/archive/2008/03/16/clickonce-winforms-deployment-part-1.aspx</link>
            <description>Currently my client has a number of WinForm applications in development.&lt;br /&gt;
When it came time to deploy these solutions to end users in multiple facilities, discussions of xcopy installations started.&lt;br /&gt;
&lt;br /&gt;
Xcopy is not the best solution; in the past it has been servicable to meet this requirement, today we have better options.&lt;br /&gt;
&lt;br /&gt;
Some of the flaws of xcopy deployment include&lt;br /&gt;
- &lt;span style="font-weight: bold;"&gt;Network connectivity required&lt;/span&gt;: if the PC is off it will not get the update&lt;br /&gt;
- &lt;span style="font-weight: bold;"&gt;Installation Lists: &lt;/span&gt;You need to know which PC's have your software for when updates are available&lt;br /&gt;
- &lt;span style="font-weight: bold;"&gt;Versioning: &lt;/span&gt;Some clients may be running different versions which could damage your data integrity&lt;br /&gt;
- &lt;span style="font-weight: bold;"&gt;Dependencies: &lt;/span&gt;If your software requires any components, you will have to create an installer for each version&lt;br /&gt;
&lt;br /&gt;
Since Visual Studio 2005, including 2008, there is a feature built-in feature know as &lt;a href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx"&gt;ClickOnce&lt;/a&gt;.&lt;br /&gt;
It is my experience is that this 'out of the box' feature is under utilized or developers are not aware that this feature exists.&lt;br /&gt;
&lt;br /&gt;
ClickOnce Provides:&lt;br /&gt;
- &lt;span style="font-weight: bold;"&gt;Automatic Update: &lt;/span&gt;The application 'calls home' to check for the newest version, clients are prompted to update their version&lt;br /&gt;
- &lt;span style="font-weight: bold;"&gt;Rollback&lt;/span&gt;: The client can rollback using Add/Remove; the developer can also make the adjustments using the published version&lt;br /&gt;
&lt;br /&gt;
You can publish an application can be publish to&lt;br /&gt;
1) A URL&lt;br /&gt;
2) File location including on your network &lt;br /&gt;
&lt;br /&gt;
I won't get into the specifics of the options; they are pretty straight forward and there are articles on how to use the &lt;a href="http://msdn2.microsoft.com/en-us/library/31kztyey(VS.80).aspx"&gt;publish wizard&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
But what if you have to deploy and manage a legacy application, or a vendor provided application?&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Managing Other Windows Applications using ClickOnce&lt;/h3&gt;
After my client started seeing the benefits of ClickOnce, the next question was, 'Can I use this for my vendor provided applications?'.&lt;br /&gt;
This is actually very easy to implement.&lt;br /&gt;
&lt;br /&gt;
1) Create a new Visual Studio project&lt;br /&gt;
2) Copy your vendor provided components into your project &lt;br /&gt;
3) Call the application executable in your code&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
namespace AppLauncher&lt;br /&gt;
{&lt;br /&gt;
   class Program&lt;br /&gt;
   {&lt;br /&gt;
      static void Main(string[] args)&lt;br /&gt;
      {&lt;br /&gt;
         Process.Start("LegacyApp.exe"); //put your executable name here&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
4) Publish the application with the above publishing wizard.&lt;br /&gt;
&lt;br /&gt;
Anytime the vendor provides an update, overwrite the project files, increment the publish version and publish the update.&lt;br /&gt;
Next time your end user executes the Launcher application, they will be prompted to update their application.&lt;br /&gt;
&lt;br /&gt;
We have used this strategy for deploying applications to less than 20 internal users and it has worked well.&lt;br /&gt;
We looked into options of creating a 'Whats New' message on first load; which is something we may still look into for the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In part 2 of this series, I will describe some troubleshooting and advanced details that will assist you with ClickOnce.&lt;br /&gt;
&lt;br /&gt;
&lt;img width="797" height="706" src="/images/geekswithblogs_net/gpro/7676/o_ClickOnce.png" alt="" /&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120579"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120579" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/gpro/aggbug/120579.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gary Pronych</dc:creator>
            <guid>http://geekswithblogs.net/gpro/archive/2008/03/16/clickonce-winforms-deployment-part-1.aspx</guid>
            <pubDate>Sun, 16 Mar 2008 14:27:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/gpro/comments/120579.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/gpro/archive/2008/03/16/clickonce-winforms-deployment-part-1.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/gpro/comments/commentRss/120579.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/gpro/services/trackbacks/120579.aspx</trackback:ping>
        </item>
    </channel>
</rss>