<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://icelava.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Software Development</title><link>http://icelava.net/forums/24/ShowForum.aspx</link><description>Programming, application design, web development, etc.</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61019.2)</generator><item><title>How to add separators between buttons in Visual Studio toolbars</title><link>http://icelava.net/forums/thread/4411.aspx</link><pubDate>Thu, 04 Sep 2008 06:02:09 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:4411</guid><dc:creator>icelava</dc:creator><slash:comments>5</slash:comments><comments>http://icelava.net/forums/thread/4411.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=4411</wfw:commentRss><description>&lt;P&gt;How is it that I forget the steps to accomplish such a simple task so frequently? Do I have a poor memory, or is Visual Studio's method for adding separators beween toolbar buttons just plain unintuitive? I blame Visual Studio.&lt;/P&gt;
&lt;P&gt;Here are the steps to once and for all prevent me from forgetting&lt;/P&gt;
&lt;P&gt;1. Open the &lt;STRONG&gt;Customize&lt;/STRONG&gt; dialog box for toolbars.&lt;BR&gt;2. select a button that is already present in the toolbar. The &lt;STRONG&gt;Modify Selection&lt;/STRONG&gt; drop-down button should become enabled.&lt;BR&gt;3. Its pop-up menu has a &lt;STRONG&gt;Begin a Group&lt;/STRONG&gt; check item at the bottom; use that to insert a separator before the button.&lt;/P&gt;
&lt;P&gt;&lt;A title="Add separator to Visual Studio toolbar by icelava, on Flickr" href="http://www.flickr.com/photos/icelava/2826566801/"&gt;&lt;IMG height=461 alt="Add separator to Visual Studio toolbar" src="http://farm4.static.flickr.com/3221/2826566801_62bdcf3f18_o.jpg" width=314&gt;&lt;/A&gt;&lt;/P&gt;</description></item><item><title>Error 112 Unknown server tag 'asp:ScriptManager' 'asp:UpdatePanel' on Windows 7</title><link>http://icelava.net/forums/thread/11687.aspx</link><pubDate>Thu, 22 Dec 2011 10:56:07 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:11687</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/11687.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=11687</wfw:commentRss><description>&lt;p&gt;Ah, the joys of running legacy code on a modern computing environment.&lt;/p&gt;&lt;p&gt;Roughly every three years we get laptop refreshes, which may sound just about right from hardware progression timelines. The natural and unavoidable side effect of that is operating system is &lt;em&gt;clean&lt;/em&gt; again. Meaning, we lose all those years of custom software installations and configurations that made our development "work" previously. So this time round with a 8GB dual-core HyperThreading x64 Windows 7. I only loaded in Visual Studios 2008 and 2010; do we still &lt;em&gt;care&lt;/em&gt; about 2005?&lt;/p&gt;&lt;p&gt;Now at this point I am trying to learn Web Client Software Factory 2010 (WCSF) as that is the web framework being implemented for a project I might stand to support. Does anybody out there actually use WCSF? Regardless, I want to know it, so I am &lt;em&gt;not lost&lt;/em&gt; when I look at the outcome system. But understanding WCSF is not an easy task as it is a sophisticated (or complex depending on your view) conglomerate of frameworks and design patterns that can attack you from multiple angles. It is tough finding current practical materials on it so I fell back on pnpguidance.net for the &lt;a href="http://pnpguidance.net/Download/WebClientSoftwareFactory11SampleDownload.aspx"&gt;first version tutorial and&amp;nbsp;sample&lt;/a&gt;.&amp;nbsp;I converted the solution in VS2008 and attempted to run the web site,&lt;/p&gt;&lt;p&gt;&lt;font face="courier new,courier"&gt;Error 112 Unknown server tag 'asp:ScriptManager'&lt;br&gt;Error 112 Unknown server tag 'asp:UpdatePanel'&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Seriously? How can those controls be &lt;em&gt;unknown&lt;/em&gt;???&lt;/p&gt;&lt;p&gt;If you look at any &lt;a href="http://geekswithblogs.net/influent1/archive/2007/05/16/112544.aspx"&gt;search result on this matter&lt;/a&gt; the issue appears to be a lack of the additional tag declaration for ASP.NET AJAX controls.&lt;/p&gt;&lt;p style="margin:0in 0in 0pt;padding:0in;border:currentColor;mso-border-alt:solid windowtext .5pt;tab-stops:.25in .5in .75in 1.0in 1.25in 1.5in 1.75in 2.0in 2.25in 2.5in 2.75in 3.0in;mso-padding-alt:6.0pt 4.0pt 6.0pt 4.0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:4;"&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;pages&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0in 0in 0pt;padding:0in;border:currentColor;mso-border-alt:solid windowtext .5pt;tab-stops:.25in .5in .75in 1.0in 1.25in 1.5in 1.75in 2.0in 2.25in 2.5in 2.75in 3.0in;mso-padding-alt:6.0pt 4.0pt 6.0pt 4.0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:4;"&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;controls&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0in 0in 0pt;padding:0in;border:currentColor;mso-border-alt:solid windowtext .5pt;tab-stops:.25in .5in .75in 1.0in 1.25in 1.5in 1.75in 2.0in 2.25in 2.5in 2.75in 3.0in;mso-padding-alt:6.0pt 4.0pt 6.0pt 4.0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:5;"&gt;               &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;add&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;tagPrefix&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&lt;font color="#000000"&gt;"&lt;/font&gt;&lt;span style="color:blue;"&gt;asp&lt;/span&gt;&lt;font color="#000000"&gt;"&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#000000"&gt;"&lt;/font&gt;&lt;span style="color:blue;"&gt;System.Web.UI&lt;/span&gt;&lt;font color="#000000"&gt;"&lt;/font&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;assembly&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;font color="#000000"&gt;"&lt;/font&gt;&lt;span style="color:blue;"&gt;System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&lt;/span&gt;&lt;font color="#000000"&gt;"&lt;/font&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0in 0in 0pt;padding:0in;border:currentColor;mso-border-alt:solid windowtext .5pt;tab-stops:.25in .5in .75in 1.0in 1.25in 1.5in 1.75in 2.0in 2.25in 2.5in 2.75in 3.0in;mso-padding-alt:6.0pt 4.0pt 6.0pt 4.0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:4;"&gt;      &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;controls&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0in 0in 0pt;padding:0in;border:currentColor;mso-border-alt:solid windowtext .5pt;tab-stops:.25in .5in .75in 1.0in 1.25in 1.5in 1.75in 2.0in 2.25in 2.5in 2.75in 3.0in;mso-padding-alt:6.0pt 4.0pt 6.0pt 4.0pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-tab-count:3;"&gt;  &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;pages&lt;/span&gt;&lt;span style="font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;But wait a minute, it is &lt;em&gt;right there&lt;/em&gt; in web.config. Don't joke with me, ASP.NET!&lt;/p&gt;&lt;p&gt;The problem is, as hinted above, this is a &lt;em&gt;Windows 7&lt;/em&gt; system. It comes with .NET Framework 3.5 out of the box. And ASP.NET 3.5 already has the AJAX extensions assembly system.web.extensions built in; I was all happy with that and took it for granted. But this sample is an ASP.NET &lt;em&gt;2.0&lt;/em&gt; app. ASP.NET 2.0 &lt;em&gt;did not&lt;/em&gt; have AJAX extensions on release. Thus it was referencing an assembly version that did not exist in my computer.&lt;/p&gt;&lt;p&gt;So I scrambled to download the missing component in the puzzle - &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=883"&gt;ASP.NET AJAX 1.0&lt;/a&gt; - so that a "traditional" ASP.NET 2.0 app that had no reliance on 3.5 assemblies can continue to run.&lt;/p&gt;&lt;p&gt;Ah, the joys of running legacy code on a modern computing environment.&lt;/p&gt;</description></item><item><title>Cannot open IIS 7 applicationHost.config in 64-bit Windows with 32-bit text editor</title><link>http://icelava.net/forums/thread/5391.aspx</link><pubDate>Sat, 21 Feb 2009 08:34:29 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:5391</guid><dc:creator>icelava</dc:creator><slash:comments>4</slash:comments><comments>http://icelava.net/forums/thread/5391.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=5391</wfw:commentRss><description>&lt;P&gt;Every once in awhile, the very act of deviating from the norm to use a *gasp* 64-bit operating system meets with heavenly punishment. So much so that the most rudimentary tasks of &lt;EM&gt;opening a text file in a text editor&lt;/EM&gt; is met with disapproval. I have already encountered this a few times&amp;nbsp;ever since I installed x64 Windows Vista onto my &lt;A href="http://icelava.net/mycomputers.aspx#DIABLO"&gt;home's main workstation&lt;/A&gt;; trying to work with IIS 7.0's new array of configuration files were a hassle.&amp;nbsp;They are right there&amp;nbsp;happily living in Windows Explorer.&amp;nbsp;Opening them with Notepad is all fine and dandy. &lt;EM&gt;Like any normal operation should&lt;/EM&gt;. But Visual Studio 2005 or 2008, or other Notepad replacements for the matter, fail mightily in their attempts to open those config files sitting innocently at C:\windows\system32\inetsrv\config. They consistently report being unable to find those files. They are right there, dammit! Are you &lt;EM&gt;blind&lt;/EM&gt;?&lt;/P&gt;
&lt;P&gt;Except, they aren't as "innocent" as one may think they are.&lt;/P&gt;
&lt;P&gt;The problem with x64 Windows is certain paths are designated as 64-bit paths, and a 32-bit process, like Visual Studio, is being redirected by Windows to the 32-bit path at C:\windows\SysWOW64 whenever C:\windows\system32 is referenced. The 32-bit process thinks it is looking at C:\windows\system32\inetsrv\config when it has been given C:\windows\SysWOW64\inetsrv\config; which indeed contain none of those configuration files we are after.&lt;/P&gt;
&lt;P&gt;It sure sucked using Notepad to edit those files. I want all the sugary goodness of Visual Studio!&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://farm4.static.flickr.com/3348/3296343785_c9390e73e7_o.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Luckily, Robert McMurray came along&amp;nbsp;more than&amp;nbsp;a year later to explain &lt;A href="http://blogs.msdn.com/robert_mcmurray/archive/2008/10/27/using-visual-studio-2008-on-a-64-bit-computer-to-edit-applicationhost-config.aspx"&gt;what needs to be done in order to "double trick" 32-bit processes back into the original config directory&lt;/A&gt;. To summarise the steps in case the knowledge is lost on the other side, open a 64-bit command prompt and execute the following commands&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;cd /d "%systemdrive%\windows\syswow64\inetsrv"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;move config configx86&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;MKLINK&amp;nbsp;/d Config "%systemdrive%\windows\system32\inetsrv\Config"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;It should report &lt;FONT face="courier new,courier"&gt;symbolic link created for Config &amp;lt;&amp;lt;===&amp;gt;&amp;gt; C:\windows\system32\inetsrv\Config&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This effectively&amp;nbsp;renames the 32-bit config directory so a symbolic link of that name can take its place to redirect back to the 64-bit path which we are really interested in.&lt;/P&gt;</description></item><item><title>Perusing HUGE XML content with structure intact</title><link>http://icelava.net/forums/thread/1289.aspx</link><pubDate>Tue, 14 Mar 2006 07:50:15 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:1289</guid><dc:creator>icelava</dc:creator><slash:comments>2</slash:comments><comments>http://icelava.net/forums/thread/1289.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=1289</wfw:commentRss><description>In a recent bid to tune performance when it came to processing huge XML files that can size 90-200MB, I was extremely annoyed and distressed that the regular programs I use to view XML data structured to their schema (as opposed to viewing as plain text) were all simply unable to deal with such magnitude.&lt;br /&gt;&lt;br /&gt;Internet Explorer, Visual Studio, FrontPage, Firefox, all sent the CPU hurtling like a fireball (literally, given the CPU heat) consuming as much RAM as they can to recreate the entire DOM. And that is even for a 700KB odd XML file. Even &lt;a href="http://www.altova.com/"&gt;XMLspy&lt;/a&gt; chokes to death.&lt;br /&gt;&lt;br /&gt;Sometimes, the most useful utilities are those with little hype and branding. Asking around, one of my global colleagues recommended &lt;b&gt;&lt;a href="http://www.firstobject.com/dn_editor.htm"&gt;firstobject XML editor&lt;/a&gt;&lt;/b&gt;. They are not lying when they claim "high performance"; this program wisely avoids the conventional XML DOM approach and efficiently recreates the structure without shooting the computer with tranquilizers.&lt;br /&gt;&lt;br /&gt;Sweet.&lt;br /&gt;</description></item><item><title>Why do WSE 3.0 projects in x64 Windows Vista generate SoapHttpClientProtocol instead of WebServicesClientProtocol?</title><link>http://icelava.net/forums/thread/5224.aspx</link><pubDate>Thu, 15 Jan 2009 07:24:03 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:5224</guid><dc:creator>icelava</dc:creator><slash:comments>3</slash:comments><comments>http://icelava.net/forums/thread/5224.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=5224</wfw:commentRss><description>&lt;P&gt;In effort to upgrade my certification to MCPD-EA status, I have been retrograding to older&amp;nbsp;frameworks I never had the chance to work on in the past three years. That means putting down that shiny WCF book and dusting off the WSE 3.0 MSDN documentation.&lt;/P&gt;
&lt;P&gt;One of the IDE-incorporated features for WSE - which was long present in Visual Studio .NET 2003 -&amp;nbsp;is to get Visual Studio 2005&amp;nbsp;to generate service proxies based on the &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.services3.webservicesclientprotocol.aspx"&gt;Microsoft.Web.Services3.WebServicesClientProtocol&lt;/A&gt; class when the project is WSE-enabled. This class provides the base for all the tasty WSE functionality. However, on my main workstation, I consistently witness Visual Studio generating the stock SoapHttpClientProtocol. Manually editting the inheritance to WebServicesClientProtocol is a mere&amp;nbsp;ephemeral accomplishment, since every attempt to &lt;STRONG&gt;Update Web Reference&lt;/STRONG&gt; would&amp;nbsp;just result in Visual Studio running the regular wsdl.exe generator.&lt;/P&gt;
&lt;P&gt;But it sure worked fine on a laptop I have. The only major difference is the laptop is x86 Windows Vista. My main desktop workstation is x64 Windows Vista. That &lt;EM&gt;cannot&lt;/EM&gt; be the problem, correct? Why, of course it is.&lt;/P&gt;
&lt;P&gt;Straight after the launch of .NET Framework 2.0, Microsoft was visibily eager to concentrate on WCF (and .NET Framework 3.0 overall). That was a time when very few developers were &lt;A href="http://icelava.net/forums/thread/1476.aspx"&gt;even close to hitting the 4GB limit to realise they had to move on to x64 operating systems&lt;/A&gt;. Even as of now there are still &lt;A href="http://icelava.net/forums/thread/4776.aspx"&gt;not enough developers making the switch into 64-bit territory&lt;/A&gt;. I can see just how "much" attention WSE 3.0 got from an x64 perspective. Casting nets across various communities yield practically zero experience on what's happening here. It certainly took long enough for me to alter my choices in words to finally &lt;A href="http://social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/05d08930-171c-4326-a3e2-53fb7c720c40/"&gt;dig out the truth&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The WSE 3.0 installer fails to alter Visual Studio 2005's config file &lt;STRONG&gt;C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\devenv.exe.config&lt;/STRONG&gt; with the following entry.&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;configuration&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;system.web&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;webServices&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;soapExtensionImporterTypes&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;add&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;type&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;Microsoft.Web.Services3.Description.WseExtensionImporter, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;soapExtensionImporterTypes&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;webServices&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;system.web&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;configuration&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;Plug that in, and Visual Studio wakes up from its trance to realise there is a better world out there.&lt;/P&gt;</description></item><item><title>Multiple app.config files for deploying to different environments</title><link>http://icelava.net/forums/thread/2920.aspx</link><pubDate>Fri, 09 May 2008 11:14:21 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:2920</guid><dc:creator>icelava</dc:creator><slash:comments>6</slash:comments><comments>http://icelava.net/forums/thread/2920.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=2920</wfw:commentRss><description>&lt;P&gt;One of the many great strides the ASP.NET team has taken to improve web developers' experience with Visual Studio came in the manifestation of the &lt;A class="" href="http://msdn.microsoft.com/en-us/asp.net/aa336619.aspx" target=_blank&gt;Web Deployment Project&lt;/A&gt;. The most important feature, at least in my eyes, is &lt;A class="" href="http://weblogs.asp.net/scottgu/archive/2005/11/06/429723.aspx" target=_blank&gt;configuration section replacement&lt;/A&gt;. Keeping settings meant for different environments having it all consolidated into the &lt;EM&gt;correct&lt;/EM&gt; web.config just got a whole lot more efficient and less error prone. This &lt;EM&gt;should&lt;/EM&gt; have been in VS .NET 2002 right at the beginning of time, but I was just overjoyed nonetheless to finally have an "official" tool for that.&lt;/P&gt;
&lt;P&gt;The problem is, that only applies to &lt;EM&gt;web sites&lt;/EM&gt;. We develop more than just web sites here; Windows Forms client applications, background Windows services, or just plain old command-line console programs. How are we going to continue coping with these types of projects?&amp;nbsp;There are actually a variety of different (yet similar) ways development teams are practising out there. I am not&amp;nbsp;too sure why the method I discovered has not&amp;nbsp;been done and discussed by others before, so I&amp;nbsp;thought I'd log it down first for others' benefit of reviewing and comparison with other methods.&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;Know your destination environments&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;First thing is to identify the target environments your project outputs need to be deployed at. In this scenario we are just going to take the regular Debug and Release configurations as those used by developers to build and test on their local workstations. In addition, we will just determine that there are two external environments needing deployment - SIT and UAT.&lt;/P&gt;
&lt;P&gt;This calls for separate app.config files carrying appropriate settings for the respective SIT and UAT servers.&amp;nbsp;We are not looking at section replacement or external source reference here. This method simply duplicates the entire app.config file and changes the settings that need to be different. As such we shall name these files SIT.config and UAT.config. Fastest way is simply to copy and paste app.config directly back into the project, and rename the files. They can then be editted for their destination&amp;nbsp;environments accordingly. &lt;A class="" href="http://icelava.net/forums/post/1477.aspx"&gt;Maintaining the uniformity of their structure should not be a problem&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Next, the solution and output projects need to create new configuration choices with the &lt;EM&gt;exact same names&lt;/EM&gt; as those given to the .config files.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:500px;HEIGHT:314px;" height=314 src="http://farm3.static.flickr.com/2350/2478129282_4f010dd1c1.jpg?v=0" width=500&gt;&lt;/P&gt;
&lt;P&gt;As with the screen shot, I have created "SIT" and "UAT" configurations for a number of Windows service projects, as well as for the solution itself. Remember that the solution configuration is &lt;EM&gt;independent&lt;/EM&gt; from projects, and one can mix and match as required. That is why in the screenshot you can see a further "SIT_deploy" configuration for the solution;&amp;nbsp;the projects themselves do not have that, and continue to use their own "SIT" configuration.&lt;/P&gt;
&lt;P&gt;In actuality, it is optional for the solution to have these configurations defined, but absolutely required for the projects. This will become apparent as we explore the backend mechanism that is helping us build our projects in the first place - MSBuild.&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;MSBuild&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;If you have not realised,&amp;nbsp;.NET Framework 2.0 introduced MSBuild, a "brand new" build engine that can compile Visual Studio 2005 projects without Visual Studio itself. It resembles NAnt really closely, a favoured open-source build engine with the flexibility for highly customised build processes and sequences. The cool thing is 2005 project files are actually MSBuild files themselves, and learning to understand and edit their XML structure instead of relying on the visual Visual Studio properties interface will reap great power. I will not write anything further about MSBuild per se - that is too huge a topic for this post. You should refer to the MSDN site for a conceptual introduction to MSBuild and its features. What I want to achieve here is the steps to accomplish deploying the appropriate app.config file.&lt;/P&gt;
&lt;P&gt;Right click on one of the output projects, and select the Unload Project option. This will bring the project "offline", and it can be right-clicked again to expose the Edit function. This allows opening the project file in XML mode.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.flickr.com/photos/icelava/2477317623/"&gt;&lt;IMG src="http://farm3.static.flickr.com/2019/2477317623_51818b2e53_o_d.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Scroll all the way down. There should be two commented out MSBuild targets there. One of them is called AfterBuild. Uncomment the AfterBuild&amp;nbsp;node and edit it to look like this&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Target&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;AfterBuild&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Condition&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;'$(Configuration)' == 'SIT' Or '$(Configuration)' == 'UAT'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Delete&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;Files&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;$(TargetDir)$(TargetFileName).config&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Copy&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;SourceFiles&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;$(ProjectDir)$(Configuration).config&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#ff0000 size=2&gt;DestinationFiles&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;$(TargetDir)$(TargetFileName).config&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Target&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;What this does is to executed the AfterBuild task only if the configuration is "SIT" or "UAT". What did I state previously&amp;nbsp;about naming the files and configurations exactly? So after a build is complete, the regular app.config file would have been placed in the output directory, renamed as &amp;lt;projectname&amp;gt;.exe.config. We should delete that file, since it is inappropriate for the SIT or UAT server. The moniker of &lt;STRONG&gt;$(TargetDir)$(TargetFileName).config&lt;/STRONG&gt; will readily locate this file in the Delete task, and remove it. After that, we have to take the appropriate .config file based on the current configuration and convert that to replace the recently-deleted $(TargetDir)$(TargetFileName).config file. That is where &lt;STRONG&gt;$(ProjectDir)$(Configuration).config&lt;/STRONG&gt; comes in to locate the file sitting in our project directory, and copy it to the current output directory.&lt;/P&gt;
&lt;P&gt;Once done, save and Reload the project. Attempt a build using the SIT or UAT configuration. The output should be similar to this sample pattern&lt;/P&gt;&lt;FONT size=1&gt;
&lt;P&gt;&lt;FONT face="trebuchet ms,geneva" size=2&gt;------ Build started: Project: afterbuild, Configuration: &lt;STRONG&gt;UAT&lt;/STRONG&gt; Any CPU ------&lt;BR&gt;Build started 9/5/2008 18:07:53.&lt;BR&gt;Target CoreResGen:&lt;BR&gt;No resources are out of date with respect to their source files. Skipping resource generation.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="trebuchet ms,geneva" size=2&gt;Target _CopyAppConfigFile:&lt;BR&gt;Skipping target "_CopyAppConfigFile" because all output files are up-to-date with respect to the input files.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="trebuchet ms,geneva" size=2&gt;Target CopyFilesToOutputDirectory:&lt;BR&gt;afterbuild -&amp;gt; C:\Projects\experiments\afterbuild\bin\UAT\afterbuild.exe&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="trebuchet ms,geneva" size=2&gt;Target AfterBuild:&lt;BR&gt;Deleting file "C:\Projects\experiments\afterbuild\bin\UAT\afterbuild.exe.config".&lt;BR&gt;Copying file from "C:\Projects\experiments\afterbuild\UAT.config" to "C:\Projects\experiments\afterbuild\bin\UAT\afterbuild.exe.config".&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Inspect the new &amp;lt;projectname&amp;gt;.exe.config and see if it contains the settings defined in UAT.config or SIT.config. Of course the MSBuild target could be expanded further to carry out more elaborate activities, but the straightforward method should suffice for a great number of build needs.&lt;/P&gt;</description></item><item><title>Signs your colleague may not be a good developer #8</title><link>http://icelava.net/forums/thread/7086.aspx</link><pubDate>Wed, 01 Sep 2010 04:15:36 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:7086</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/7086.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=7086</wfw:commentRss><description>&lt;P&gt;&lt;FONT color=#009900 face="trebuchet ms,geneva"&gt;catch (Exception ex)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; if (IsWrongPassword(ex))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "INCORRECT_PASSWORD";&lt;BR&gt;&lt;BR&gt;&amp;nbsp; throw new Exception(ex.Message, ex);&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;It's such a pity that a person who wisely makes meaningful method names, does not know that an Exception object is rethrowable.&lt;/P&gt;</description></item><item><title>Getting NDepend to cope with too many DataSet assemblies </title><link>http://icelava.net/forums/thread/6703.aspx</link><pubDate>Wed, 28 Apr 2010 09:23:06 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:6703</guid><dc:creator>icelava</dc:creator><slash:comments>3</slash:comments><comments>http://icelava.net/forums/thread/6703.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=6703</wfw:commentRss><description>&lt;P&gt;Previously I was all happy and impressed by&amp;nbsp;the &lt;A href="http://icelava.net/forums/thread/6623.aspx"&gt;performance and stability of NDepend v3.0&lt;/A&gt;. I still am, but alas, the fact remains that &lt;A href="http://twitter.com/icelava/status/10973157131"&gt;no matter how well you design and build something, there will always be something much more horrid to make your work crumble to pieces&lt;/A&gt;. When I started moving onto the &lt;EM&gt;larger&lt;/EM&gt; deployments in the enterprise - numbering near 2000 assemblies - the &lt;EM&gt;several hundred&lt;/EM&gt; DataSet assemblies reared their ugly heads again and utterly crushed NDepend with the weight of all their fatty members. This is no fault of NDepend, really, but just one of many signs that the architects who envisioned such&amp;nbsp;work need to be burnt at the stake. With aircraft-grade jet fuel.&lt;/P&gt;
&lt;P&gt;So how should one deal with when being faced with such gigantic .NET solutions? The most apparent workaround is simply to point out the DataSet assemblies and exclude them completely from analysis. But this prevents NDepend from gaining awareness of elements in those assemblies; crucial CQL queries regarding how DataSets and DataTables are being utilised cannot be fully realised.&lt;/P&gt;
&lt;P&gt;Thankfully, there is an alternative - make the DataSet assemblies &lt;STRONG&gt;tier assemblies&lt;/STRONG&gt; (blue) instead of application-level assemblies. How to do that? I discovered this by accident, when i originally &lt;EM&gt;moved all DataSet assemblies to a separate sub-directory&lt;/EM&gt;. I did so to avoid selecting them with a Select-all operation during the assembly-selection process for Analysis. Of course, this only ended up with the above situation since my original intention was to exlcude the DataSet assemblies totally. The trick came when I actually &lt;STRONG&gt;&lt;EM&gt;re-added&lt;/EM&gt; them into the (application) assembly list for analysis, and subsequently &lt;EM&gt;removed&lt;/EM&gt; them&lt;/STRONG&gt;. NDepend, knowing that those assemblies were being referenced and made use of,&lt;STRONG&gt; shifted their entries from the application column over to the tier column&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;With such a setup, analysis of ~1500 application assemblies with ~300 tier DataSet assemblies was possible without OutOfMemoryException blowing up. With this manner of analysis completed, I was able to query out names of DataSets/DataTables being used&amp;nbsp;within stacks of method calls, satisfying most of our data-related questions about our code base. Hopefully this tactic can help others faced with monolithtic systems manage a little better when attempting to do some untangling study with NDepend.&lt;/P&gt;</description></item><item><title>Visual Studio 2010 add-ons to make life easier</title><link>http://icelava.net/forums/thread/6794.aspx</link><pubDate>Tue, 08 Jun 2010 14:12:36 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:6794</guid><dc:creator>icelava</dc:creator><slash:comments>2</slash:comments><comments>http://icelava.net/forums/thread/6794.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=6794</wfw:commentRss><description>&lt;P&gt;Now that .NET 4.0 and Visual Studio 2010 are in full swing, I think it's wise to open a page to jot down the useful add-ons that can enhance the developer experience. As time goes by, this list will get updated.&lt;/P&gt;
&lt;H3&gt;&lt;A href="http://support.microsoft.com/kb/981741"&gt;Windows Automation API 3.0&lt;/A&gt;&lt;/H3&gt;
&lt;P&gt;"Visual Studio 2010 runs faster when the Windows Automation API 3.0 is installed ..... Applications that use Windows Automation APIs can significantly decrease Microsoft Visual Studio IntelliSense performance if Windows Automation API 3.0 is not installed. For example, the Windows pen and touch services can significantly decrease Visual Studio IntelliSense performance if Windows Automation API 3.0 is not installed."&lt;/P&gt;
&lt;H3&gt;&lt;A href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef"&gt;Visual Studio 2010 Productivity Power Tools&lt;/A&gt;&lt;/H3&gt;
&lt;P&gt;"A set of extensions to Visual Studio Professional (and above) which improves developer productivity."&lt;/P&gt;</description></item><item><title>How to tell what CPU platform .NET assemblies target</title><link>http://icelava.net/forums/thread/6500.aspx</link><pubDate>Mon, 15 Mar 2010 09:39:45 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:6500</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/6500.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=6500</wfw:commentRss><description>&lt;P&gt;I had previously ranted about the lack of information and education concerning the &lt;A href="http://icelava.net/forums/thread/4776.aspx"&gt;32-bit-to-64-bit development transition&lt;/A&gt;, and to this day still seems to remain a&amp;nbsp;significant worry from what I observe of the developer community. In recent activity to look up 64-bit development issues, I came across Arthur C Clarke's blog entry which&amp;nbsp;explains some "initimate" details about .NET assemblies.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://chillicode.wordpress.com/2009/10/26/moving-asp-net-web-application-from-32-bit-to-64-bit/"&gt;http://chillicode.wordpress.com/2009/10/26/moving-asp-net-web-application-from-32-bit-to-64-bit/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Thought I'd just add this to my collection of notes. Worth a read.&lt;/P&gt;</description></item><item><title>Uninstall .NET Framework 4.0 Beta 1 - the self-mutilating way</title><link>http://icelava.net/forums/thread/6357.aspx</link><pubDate>Wed, 10 Feb 2010 18:50:47 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:6357</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/6357.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=6357</wfw:commentRss><description>&lt;P&gt;I know&amp;nbsp;I'm late to the game, but the virtual machine that was running my copy of .NET Framework 4.0 Beta 1 was "locked down" for several months because my previous hosting laptop &lt;A href="http://icelava.net/forums/thread/6125.aspx"&gt;got brutalised by Dell technicians last year&lt;/A&gt;. It was only recently did I manage to revive the virtual machine to carry out a complete uninstall of Beta 1 to make way for the younger, slimmer, sexier sister of Beta 2. But like any jealous sister, it was&amp;nbsp;made clear to me that attempts to get rid of&amp;nbsp;Beta 1 were just&amp;nbsp;gonna be extremely difficult tasks:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#cc0033&gt;&lt;STRONG&gt;Microsoft Common Language Runtime native compiler has stopped working&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;What???&lt;/P&gt;
&lt;P&gt;In reading around pages of dicussions from developers experiencing similar pains in their to ditching Beta 1, it appeared I committed great sin in the eyes of the bible of pre-release software procedures - &lt;STRONG&gt;I picked what to uninstall first by my own unwise uneducated judgement&lt;/STRONG&gt;. Silly me forgot the track record of past .NET Framework betas having extremely horrid uninstall experiences; &lt;A href="http://blogs.msdn.com/astebnner/archive/2009/10/19/9909489.aspx"&gt;there is a particular order in which the various software packages must be uninstalled&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;So I got screwed big time. Not only couldn't I remove, neither could I &lt;EM&gt;repair&lt;/EM&gt; the installation like others suggested as the solution.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#cc0033&gt;Repair did not succeed. Fatal error during installation.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A title="Cannot repair! by icelava, on Flickr" href="http://www.flickr.com/photos/icelava/4348696424/"&gt;&lt;IMG alt="Cannot repair!" src="http://farm3.static.flickr.com/2693/4348696424_61bd013065_o.png" width=550 height=572&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Thankfully, I found a &lt;A href="https://connect.microsoft.com/VisualStudio/feedback/details/462367/net-4-0-beta-1-uninstall-fails-and-leaves-system-unstable?wa=wsignin1.0"&gt;discussion at Microsoft Connect&lt;/A&gt; that details what's the problem in my case: I uninstalled &lt;STRONG&gt;Microsoft Visual C++ 2010 Beta 1 x86 Runtime 10.0.20506&lt;/STRONG&gt; before uninstalling .NET Framework 4.0 itself. .NET Framework relies on this package to provide lower-level functionality. This has to be reinstalled using the following method (launching the .msi alone is not effective):&lt;/P&gt;
&lt;P&gt;Navigate to &amp;lt;VS2010 beta 1 DVD drive&amp;gt;:\WCU\VCRuntimes\x86&lt;/P&gt;
&lt;P&gt;Key in &lt;STRONG&gt;msiexec /i vc_runtime_x86.msi ADDEPLOY=1&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This will allow the separate installtion of the C++ runtime binaries, and allow .NET Framework installation to carry out the Remove process.&lt;/P&gt;
&lt;P&gt;Adios! And good riddance.&lt;/P&gt;
&lt;P&gt;&lt;A title="Finally, good riddance! by icelava, on Flickr" href="http://www.flickr.com/photos/icelava/4348696472/"&gt;&lt;IMG alt="Finally, good riddance!" src="http://farm5.static.flickr.com/4029/4348696472_03e9975ca9_o.png" width=613 height=492&gt;&lt;/A&gt;&lt;/P&gt;</description></item><item><title>How to tell if your bank is up to date with their web development</title><link>http://icelava.net/forums/thread/6189.aspx</link><pubDate>Thu, 29 Oct 2009 03:45:34 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:6189</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/6189.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=6189</wfw:commentRss><description>&lt;P&gt;Welcome to Q4 2009! Forget about Web 2.0, AJAX, and whatever dynamic browser interaction fluff other fancy sites offer. We are serious about backward browser compatibility here!&lt;/P&gt;
&lt;P&gt;&lt;A title="Time to update your Help page, UOB by icelava, on Flickr" href="http://www.flickr.com/photos/icelava/4052347651/"&gt;&lt;IMG alt="Time to update your Help page, UOB" src="http://farm3.static.flickr.com/2659/4052347651_7833de6e0f_o.png" width=466 height=485&gt;&lt;/A&gt;&lt;/P&gt;</description></item><item><title>Signs your colleague may not be a good developer #7</title><link>http://icelava.net/forums/thread/6016.aspx</link><pubDate>Tue, 15 Sep 2009 08:39:27 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:6016</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/6016.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=6016</wfw:commentRss><description>&lt;P&gt;Entire logic and workflow of the program takes place &lt;EM&gt;within the constructor&lt;/EM&gt; of a class.&lt;/P&gt;
&lt;P&gt;Job done upon instantiation! Now &lt;EM&gt;who&lt;/EM&gt; does not want that?&lt;/P&gt;</description></item><item><title>Signs your colleague may not be a good developer #6</title><link>http://icelava.net/forums/thread/6004.aspx</link><pubDate>Mon, 14 Sep 2009 08:08:09 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:6004</guid><dc:creator>icelava</dc:creator><slash:comments>1</slash:comments><comments>http://icelava.net/forums/thread/6004.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=6004</wfw:commentRss><description>&lt;P&gt;Highly adept at using code Regions, totally forgotten how to use different classes and methods/functions.&lt;/P&gt;
&lt;P&gt;Enough said.&lt;/P&gt;</description></item><item><title>Directory Service is busy : Active Directory may not always provide the appropriate error message</title><link>http://icelava.net/forums/thread/5588.aspx</link><pubDate>Wed, 08 Apr 2009 04:21:00 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:5588</guid><dc:creator>icelava</dc:creator><slash:comments>1</slash:comments><comments>http://icelava.net/forums/thread/5588.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=5588</wfw:commentRss><description>&lt;P&gt;In the past month, I have been helping out our customer look into some troubles their user account provisioning jobs have been encountering. One particular job is to take employee data files generated&amp;nbsp;from their SAP system and determine the changes and provisioning the Active Directory domain accordingly. (i.e. update particulars, move OUs, set expiry dates, etc). This job of late has been &lt;EM&gt;terminated abruptly every morning&lt;/EM&gt; as it crosses its five-hour execution limit, meaning it has not successfully completed its run. Catastrophic for the account administrators, as they have to provision user accounts manually upon user complaints.&lt;/P&gt;
&lt;P&gt;This account provisioning module is a custom .NET program developed back in 2004 (In other words, &lt;EM&gt;.NET Framework 1.1&lt;/EM&gt;). And naturally, makes use of the System.DirectoryServices namespace. From the error logs, we observed this slow processing was due to repeated "Directory Service is busy" errors that blow up when attempting to update a user's properties.&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#990000 size=1 face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; “The Directory service is Busy”&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.DirectoryServices.Interop.IAds.SetInfo()&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.DirectoryServices.DirectoryEntry.CommitChanges()&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;When I was originally just given this error message alone by my colleage, I searched around the Internet and was rather surprised at just how little information there is regarding this situation. I was equally dismayed when nobody could offer any accurate insight on AD or Directory Services communities. Fearful that we won't be able to quickly determine the actual cause of the errors and be entrenched in the problem for a long time, I did a fundamental thing - &lt;EM&gt;asked for a copy of the error log file&lt;/EM&gt;. With the full details at hand, I began to observe vital information:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The "Directory service is busy" error always happens at the same line of code. (CommitChanges())&lt;/LI&gt;
&lt;LI&gt;The block of logic before CommitChanges() deals with unassigning the &lt;EM&gt;Manager&lt;/EM&gt; property of a user, if it is found that a user has no supervisor.&lt;/LI&gt;
&lt;LI&gt;Matching up with the SAP employee data file, users who are throwing those errors are users with no supervisors.&lt;/LI&gt;
&lt;LI&gt;Each "Directory service is busy" error occurred around half a minute apart from each other, which suggested why the whole job took so long to run.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The code written to "unassign" a user's manager goes like&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;updateUser.Properties["manager"].Value = " ";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;When I tested such a pattern on my home domain, it threw up the exact "Directory service is busy" error, after a similar half-minute delay. Interesting. On further study of this particular property, it turns out that an AD user's Manager has to be defined in the format of a &lt;A href="http://msdn.microsoft.com/en-us/library/aa366101(VS.85).aspx"&gt;Distinguished Name&lt;/A&gt; (DN). &lt;STRONG&gt;It has to point to another valid user object in the AD store&lt;/STRONG&gt;. Giving a single " " space value probably sends the domain controller into a confused state looking for "void" before it gives up thinking it is simply too busy to find the real location. You know, like using a mirror to look into another mirror ad infinitum.&lt;/P&gt;
&lt;P&gt;Why doesn't the domain controller return an &lt;EM&gt;immediate&lt;/EM&gt; "Invalid DN for Manager" error message is beyond me.&lt;/P&gt;
&lt;P&gt;By adjusting the code to be more respectful of AD conventions, I managed to eliminate the error.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;if (updateUser.Properties.Contains("manager"))&lt;BR&gt;&amp;nbsp; updateUser.Properties["manager"].RemoveAt(0);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;But then everybody would probably be asking, did the previous developers even tested the code before rolling out to production? How could they blindly assign a mere " " space? Indeed we all asked. To cut long story short, it turns out that &lt;STRONG&gt;back in those Windows 2003 &lt;EM&gt;RTM&lt;/EM&gt; days, a domain controller would happily accept a nonsenscial " " space for a user's Manager property&lt;/STRONG&gt;. Since the original developers did not encounter any errors with that type of logic, they probably assumed all the world was at peace with each other.&lt;/P&gt;
&lt;P&gt;After patching it to at least Service Pack 1, the "Directory service is busy" error comes into play. The latter problem is actually better, though. Because storing an invalid DN value in the Manager property would later induce unsavoury error and behaviour when attempting to edit the user's properties under the &lt;STRONG&gt;Active Directory Users and Computers&lt;/STRONG&gt; administrative console. It was essentially corrupting the AD user data.&lt;/P&gt;
&lt;P&gt;So if you are witnessing this error message in your ADSI code, take care no funky values are being offered to the domain controller. Do not feed your goldfish junk.&lt;/P&gt;</description></item><item><title>Visual Studio .NET 2003 web projects: Unable to retrieve folder information from the server</title><link>http://icelava.net/forums/thread/5935.aspx</link><pubDate>Sun, 23 Aug 2009 17:03:35 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:5935</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/5935.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=5935</wfw:commentRss><description>&lt;P&gt;Just the other day I was attempting to relook at an old web project stuck in ASP.NET 1.1 and Visual Studio .NET 2003. Have retrieved the source files from my Subversion repository into a separate Windows&amp;nbsp;XP machine, I hit an error attempting to open up the web project.&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#990000&gt;Unable to retrieve folder information from the server&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;I looked around the Internet and found no relevant resolution to my situation. I eventually did, but &lt;EM&gt;totally forgot&lt;/EM&gt; to log down the reason. It was not until &lt;A href="http://weblogs.asp.net/Plip/"&gt;Plip&lt;/A&gt; hit the same problem did I make it a point to jot this down once and for all.&lt;/P&gt;
&lt;P&gt;The problem is due to TortoiseSVN - the supreme Windows client for Subversion - defaulting to a convention of using ".svn" directories for version control tracking purposes on local directories. Visual Studio .NET 2003 is rather unhappy with the presence of such directories and throws the above &lt;STRIKE&gt;tantrum&lt;/STRIKE&gt; error. In order to work around this, TortoiseSVN settings has an option to use the convention of "_svn" instead, which serves to keep Visual Studio .NET pacified and working properly.&lt;/P&gt;</description></item><item><title>Review: Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build</title><link>http://icelava.net/forums/thread/5850.aspx</link><pubDate>Fri, 17 Jul 2009 07:12:16 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:5850</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/5850.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=5850</wfw:commentRss><description>&lt;P&gt;When the Microsoft Developer Division sat down to consider the future of .NET development from v2.0 onwards, they recognised the build process in Visual Studio .NET was primitive in its facilities. It had to be re-architected to provide a much more flexible and extensible mechanism. Thus the re-engineering endeavour that brought us MSBuild. Although it was modeled after NAnt and featured some intriguing concepts, widespread adoption was not achieved. As in, &lt;EM&gt;conscious&lt;/EM&gt; manipulation and customisation.&lt;/P&gt;
&lt;P&gt;Sure, most developers simply think Ctrl-Shift-B when "build" is mentioned; it remains an invisible compile tool in Visual Studio in their eyes. But for those who did knew the advent of MSBuild, the &lt;STRONG&gt;woefully inadequate documentation&lt;/STRONG&gt; prevented many from properly understanding the arcane concepts it brings to the table. Lack of understanding directly affects &lt;EM&gt;utilisation&lt;/EM&gt;. I was one such individual who struggled last year to find relevant material to explain what I needed to know and do to achieve what I thought were pretty common build steps. Suffice to state I was disillusioned and disappointed.&lt;/P&gt;
&lt;P&gt;Which brings me to this executive summary: &lt;EM&gt;I wished &lt;/EM&gt;&lt;STRONG&gt;&lt;EM&gt;Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build&lt;/EM&gt;&lt;/STRONG&gt;&lt;EM&gt; was published last year when I needed it&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A title="Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build by icelava, on Flickr" href="http://www.flickr.com/photos/icelava/3774516850/"&gt;&lt;IMG alt="Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build" src="http://farm3.static.flickr.com/2672/3774516850_1efd0a41e6_o.jpg" width=720 height=480&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This book is what the stock documentation should have been. Sayed Ibrahim Hashimi and William Bartholomew must have realised that - developers were not getting &lt;EM&gt;much&lt;/EM&gt; out of those materials - and wrote the first three chapters of Part 1 to slowly and meticulously explain the concepts and important elements one works with in MSBuild. When necessary, line-by-line details are elaborated, and the MSBuild samples are always accompanied by sample prints of the console screen output as well to illustrate the point. While this is no excuse for relieving folks from trying things out themselves, it runs the extra mile to help me understand the theory since &lt;A href="http://icelava.net/forums/permalink/705/705/ShowThread.aspx#705"&gt;I tend to read while commuting&lt;/A&gt;. Being able to finally grasp those elusive concepts was a joyous event.&lt;/P&gt;
&lt;P&gt;The book also covers extensibility avenues, teaching the underlying framework and showing how to develop custom tasks and loggers, even how to refactor the MSBuild project elements into smaller files; they give a clearer picture how all these pieces combine together to form the entire build workflow and possible extensibility points for one to inject custom targets and tasks. But this book is not just about the official stock product either; the authors recognise weak points in the current implementation and devote a &lt;EM&gt;significant&lt;/EM&gt; portion of the book to suggest a variety of alternative solutions from third-party add-ons from CodePlex or Tigris to overcome problems that may be commonly encountered by build teams. Differences between MSBuild 2.0 and 3.5 are also noted to provide readers with heightened awareness of what they can or cannot do with a particular version. The last Part that details working with Team Foundation Build is also an extremely helpful segment that I have been dying to know how builds are implemented and managed in Team Foundation Server.&lt;/P&gt;
&lt;P&gt;As much as I love this book for filling &lt;EM&gt;critical&lt;/EM&gt; gaps in my MSBuild knowledge, one thing that I did find lacking was a full-fledge demonstration of how to define an end-to-end build project that does different things all based on conditions from the previous steps. Like, invoking code analysis only if unit tests all pass, building and deployment release configuration only if debug configuration passes tests, emailing to the team the statistics or status of deployment, etc. Many of the demonstrations are isolated in their demonstration.&amp;nbsp;While the content has done a fine job explaining the individual concepts, MSBuild as an XML-based semantic still remains highly arcane; more unified samples would have helped many. There is no mention of CruiseControl.NET either, which probably means it is not as popular as I was led to think.&lt;/P&gt;
&lt;P&gt;Any build engineer or developing tinkering with project builds, absolutely needs to read this book. It will fill many of the blanks the standard documentation never provided, and widen your search for better ideas to improve your build.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Overall rating: 9/10&lt;BR&gt;&lt;img src="http://icelava.net/emoticons/emotion-21.gif" alt="Yes" /&gt; Must-have supplement to SDK docs; meticulous explanations; liberal alternative recommendations&lt;BR&gt;&lt;img src="http://icelava.net/emoticons/emotion-45.gif" alt="No" /&gt; could have demonstrated more unified, sophisticated build sequences with conditional paths; no CruiseControl.NET&lt;/STRONG&gt;&lt;/P&gt;</description></item><item><title>Authorization Manager with ADAM: 0x80070002</title><link>http://icelava.net/forums/thread/1554.aspx</link><pubDate>Thu, 12 Jul 2007 17:01:05 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:1554</guid><dc:creator>icelava</dc:creator><slash:comments>5</slash:comments><comments>http://icelava.net/forums/thread/1554.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=1554</wfw:commentRss><description>&lt;P&gt;&lt;A target=_blank href="http://technet2.microsoft.com/windowsserver/en/library/72b55950-86cc-4c7f-8fbf-3063276cd0b61033.mspx"&gt;Authorization Manager&lt;/A&gt; (AzMan) is an incredibly&amp;nbsp;helpful feature of Windows 2003 for any development team who&amp;nbsp;seeks to deliver a &lt;EM&gt;solid and&amp;nbsp;fluid&lt;/EM&gt; security framework in their applications.&amp;nbsp;I have experienced its benefits in a past project, allowing dynamic designation of roles and authorized tasks to manage an entire enterprise of users' rights to the system. However, that was not on a web front.&lt;/P&gt;
&lt;P&gt;In some upcoming projects, we stand a chance of re-staging AzMan as the bouncer for the ASP.NET web applications we are to develop. The catch, though, is we may not get permission to stash the AzMan policy store directly in the corporate domain. The obvious alternative is to &lt;A target=_blank href="http://msdn2.microsoft.com/en-us/library/ms998331.aspx"&gt;get ASP.NET to refer to an AzMan store located in an ADAM partition&lt;/A&gt;. That tutorial was pretty straightforward to execute, when I was using Visual Studio's file-based web site to it; with&amp;nbsp;the built-in&amp;nbsp;WebDev server running as my administrator account.&amp;nbsp;When I took the next step of setting up the site to operate off IIS (5.1), it would bail when I tried to use the Roles class.&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#cc0000&gt;System.IO.FileNotFoundException: The system cannot find the file specified. (Exception from HRESULT: 0x80070002)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Despite me assigning the ASPNET account as an Administrator of the AzMan store, I could not overcome this error. I sought high and low for that divine revelation that would explain why ADAM had fallen from grace in this situation, and it was many days later did I obtain a &lt;A target=_blank href="http://forums.techarena.in/showthread.php?t=666296"&gt;subtle hint&lt;/A&gt; as to just what&amp;nbsp;was serving as the road block.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Open up ADAM ADSI Edit. (&lt;STRONG&gt;All Programs &amp;gt; ADAM &amp;gt; ADAM ADSI Edit&lt;/STRONG&gt;)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Connect to...&lt;/STRONG&gt; the ADAM partition that contains the AzMan store. In my case, a DN of &lt;STRONG&gt;CN=Authorization,DC=group,DC=testdomain,DC=org&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Once connected, it should expose a node &lt;STRONG&gt;CN=Roles&lt;/STRONG&gt;. Click on it.&lt;/LI&gt;
&lt;LI&gt;The right pane should list three roles, CN=Administrators, CN=Readers, CN=Users. Right-click &lt;STRONG&gt;CN=Readers&lt;/STRONG&gt;&amp;nbsp;and select &lt;STRONG&gt;Properties&lt;/STRONG&gt; in the context menu.&lt;/LI&gt;
&lt;LI&gt;The Properties dialog box will expose an &lt;STRONG&gt;Attributes&lt;/STRONG&gt; grid. Locate the &lt;STRONG&gt;members&lt;/STRONG&gt; property in it and double click the entry.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Multi-valued Distinguished Name With Security Principal Editor&lt;/STRONG&gt; dialog appears. Click &lt;STRONG&gt;Add Windows Account...&lt;/STRONG&gt; and add in the ASPNET account.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;ASPNET, as the ASP.NET worker process, should now be able to &lt;EM&gt;read through&lt;/EM&gt; the ADAM partition to access the AzMan store within.&lt;/P&gt;</description></item><item><title>Signs your colleague may not be a good developer #5</title><link>http://icelava.net/forums/thread/5771.aspx</link><pubDate>Thu, 11 Jun 2009 01:53:06 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:5771</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/5771.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=5771</wfw:commentRss><description>&lt;P&gt;Critical enterprise batch controller application is called&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ConsoleApplication1.exe&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;End of story.&lt;/P&gt;</description></item><item><title>Signs your colleague may not be a good developer #4</title><link>http://icelava.net/forums/thread/5741.aspx</link><pubDate>Tue, 02 Jun 2009 06:32:39 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:5741</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/5741.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=5741</wfw:commentRss><description>&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;INPUT class="button" id="fpUploadFile" type="file" size="50" name="fpUploadFile" runat="server"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;What does the HTML tag above represent? That's right, a control for a user to tell the browser to upload a file on his/her computer to the web server on page submit.&lt;/P&gt;
&lt;P&gt;Now, how should you react when the web developer taking care of this page thinks all that the browser is submitting to the web server (IIS in this case) is merely the file system path string of the file, and the web server would &lt;EM&gt;subsequently go back and retrieve the file from the user's computer&lt;/EM&gt;? Because, you know, the web server knows &lt;EM&gt;exactly where&lt;/EM&gt; the file is on the client's computer.&lt;/P&gt;
&lt;P&gt;I struggled hard to explain to her how the HTTP request-response model works. And then it appeared she was likely not the only one who has a distorted perception on the mechanics of the world wide web.... Anybody have a handkerchief? I have tears&amp;nbsp;I need to wipe.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;UPDATE&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;For those who asked, these are developers who have been around for years. They are not fresh grads.&lt;/P&gt;</description></item><item><title>System.EntryPointNotFoundException Unable to find an entry point named GetPropertyHandle in DLL wminet_utils.dll</title><link>http://icelava.net/forums/thread/5564.aspx</link><pubDate>Wed, 01 Apr 2009 02:53:07 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:5564</guid><dc:creator>icelava</dc:creator><slash:comments>2</slash:comments><comments>http://icelava.net/forums/thread/5564.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=5564</wfw:commentRss><description>&lt;P&gt;So here I am stationed with a &lt;EM&gt;huge&lt;/EM&gt; customer, with a &lt;EM&gt;huge&lt;/EM&gt; legacy .NET 1.1 application base. Oops, did I just call .NET 1.1 "legacy"....??? When one regularly travels at the speed of light, everything else appears to be in perpetual standstill. The rate of progression with Microsoft software is so &lt;EM&gt;incredibly swift&lt;/EM&gt; that those of us who (attempt to) keep up with their pace of development and release sooner or later will &lt;EM&gt;forget&lt;/EM&gt; that the rest of the world have &lt;STRONG&gt;real business objectives to meet&lt;/STRONG&gt; rather than blindly upgrade for the sake of upgrade.&lt;/P&gt;
&lt;P&gt;But I digress. I do not truly mean whine and bitch. I already do that enough on a daily basis for a variety of other reasons. The main issue I raise here is, with the Internet &lt;EM&gt;already moving past .NET Framework 2.0&lt;/EM&gt; and into the shiniest of .NET Framework 3.5 SP1 and the luxurious and juicy goods promised in the upcoming 4.0, the amount of information pertaining to .NET 1.1 seems to be evaporating as folks aren't bothered to secure the lid anymore.&lt;/P&gt;
&lt;P&gt;And then, ah, the usual software voodoo happens again.&lt;/P&gt;
&lt;P&gt;In an attempt to troubleshoot a particular .NET module that has been giving the customer problems since Day One (that is, back in 2004) I attempted to step-run it on my workstation. As with many other .NET applications around here, this one is built on top of a framework asset that my company regularly utilises to speed development by providing all the plumbing functionality. But I hit an odd never-seen-before error:&lt;/P&gt;&lt;FONT color=#990000 size=1 face="courier new,courier"&gt;An unhandled exception of type 'System.EntryPointNotFoundException' occurred in 4imprbcy&lt;BR&gt;Additional information: Unable to find an entry point named GetPropertyHandle in DLL wminet_utils.dll.&lt;/FONT&gt; 
&lt;P&gt;In further digging, the framework itself also logged more details in the Event viewer log.&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#990000 size=1 face="courier new,courier"&gt;Event Type: Error&lt;BR&gt;Event Source:&amp;nbsp;Framework Instrumentaion&lt;BR&gt;Event Category: None&lt;BR&gt;Event ID: 0&lt;BR&gt;Date:&amp;nbsp; 3/31/2009&lt;BR&gt;Time:&amp;nbsp; 10:26:48 AM&lt;BR&gt;User:&amp;nbsp; N/A&lt;BR&gt;Computer: MYWORKSTATION&lt;BR&gt;Description:&lt;BR&gt;Failed to fire the WMI event 'LoggingLogDistributedEvent'.&amp;nbsp; Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&amp;gt; System.TypeInitializationException: The type initializer for "ConvertClass_3" threw an exception. ---&amp;gt; System.EntryPointNotFoundException: Unable to find an entry point named GetPropertyHandle in DLL wminet_utils.dll.&lt;BR&gt;&amp;nbsp;&amp;nbsp; at IWOA.GetPropertyHandle_f27(Int32 vFunc, IntPtr pWbemClassObject, String wszPropertyName, Int32&amp;amp; pType, Int32&amp;amp; plHandle)&lt;BR&gt;&amp;nbsp;&amp;nbsp; at ConvertClass_3..cctor()&lt;BR&gt;&amp;nbsp;&amp;nbsp; --- End of inner exception stack trace ---&lt;BR&gt;&amp;nbsp;&amp;nbsp; --- End of inner exception stack trace ---&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly)&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Activator.CreateInstance(Type type, Boolean nonPublic)&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Activator.CreateInstance(Type type)&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Management.Instrumentation.TypeInfo..ctor(EventSource source, SchemaNaming naming, Type converterType)&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Management.Instrumentation.InstrumentedAssembly.GetTypeInfo(Type t)&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Management.Instrumentation.InstrumentedAssembly.Fire(Type t, Object o)&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Management.Instrumentation.InstrumentedAssembly.Fire(Object o)&lt;BR&gt;&amp;nbsp;&amp;nbsp; at System.Management.Instrumentation.BaseEvent.Fire()&lt;BR&gt;&amp;nbsp;&amp;nbsp; at Organisation.Framework.Instrumentation.InstrumentedEvent._FireWMIEvent(BaseEvent event_)&lt;BR&gt;-----------------------------------&lt;BR&gt;The type initializer for "ConvertClass_3" threw an exception.&lt;BR&gt;-----------------------------------&lt;BR&gt;Unable to find an entry point named GetPropertyHandle in DLL wminet_utils.dll..&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Attempting to search for more details on what &lt;STRONG&gt;wminet_utils.dll&lt;/STRONG&gt; is about has been difficult. All I see are archive sites that provide a copy of the file just in case &lt;EM&gt;yours get corrupted&lt;/EM&gt;. Looking at the error message it would appear mine is. This appears to be a unmanaged helper DLL that comes as part of the .NET Framework, located at c:\Windows\Microsoft.NET\Framework\v1.1.4322&lt;/P&gt;
&lt;P&gt;I copied over the file located in a Windows 2003 server, which showed a different date and version, but the error still persisted. I tried to match it closer by copying wminet_utils.dll&amp;nbsp;from my colleague's workstation to no avail. For the matter, my colleague's workstation is able to run it without throwing such an exceptional error. Patching to .NET Framework 1.1 SP1 did not help either. Wait a minute, I couldn't even tell from the Add/Remove control panel whether SP1 was already installed previously.&lt;/P&gt;
&lt;P&gt;In the end, I decided to uninstall .NET Framework 1.1 this morning and reinstall afresh. "Voom" the sound of the problem being sucked away by the vacuum cleaner as I clear the old debris. The new installation of .NET Framework 1.1 got it running again. Now was it really corrupted? &lt;STRONG&gt;I subsequently applied .NET Framework 1.1 SP1 again and smacked into the same error again&lt;/STRONG&gt;. Hmmm, what is it about SP1 that may cause System.Management.Instrumentation.InstrumentedAssembly or TypeInfo to have a misunderstanding with wminet_utils.dll?&lt;/P&gt;
&lt;P&gt;Unfortunately, I do not know and I do not have the time as of now to look into this further. I have problems to fix for my customer.&lt;/P&gt;</description></item><item><title>Timeout deploying assembly to SQL Server 2005</title><link>http://icelava.net/forums/thread/1430.aspx</link><pubDate>Thu, 28 Dec 2006 14:36:06 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:1430</guid><dc:creator>icelava</dc:creator><slash:comments>1</slash:comments><comments>http://icelava.net/forums/thread/1430.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=1430</wfw:commentRss><description>&lt;P&gt;Developers who begin to bloat the size of their assemblies destined for CLR-enabled SQL Server instances may be hit with the following timeout problem when attempting to deploy from Visual Studio to a remote server:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;Timeout expired.&amp;nbsp; The timeout period elapsed prior to completion of the operation or the server is not responding.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This happens&amp;nbsp;when SQL Server cannot&amp;nbsp;complete the first statement to&amp;nbsp;drop the old assembly (a very lengthy statement) within the 30 seconds Visual Studio gives it with LOCK_TIMEOUT. Run a Profiler trace on the server when&amp;nbsp;the deployment takes place to witness this. What I could not&amp;nbsp;easily find was how&amp;nbsp;to adjust this timeout tolerance; it certainly does not exist in the database project's Database or Deploy sections, or any other for the matter.&lt;/P&gt;
&lt;P&gt;And here is a case when one has to step out of the "Google/MSN comfort zone"&amp;nbsp;and manually search forum boards that search engines have not crawled well. &lt;A class="" href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=70411&amp;amp;SiteID=1" target=_blank&gt;One MSDN Forums thread&lt;/A&gt; talks of this very issue and the place to get Visual Studio to give some slack:&lt;/P&gt;
&lt;P&gt;From the menu Tools &amp;gt; Options...&lt;/P&gt;
&lt;P&gt;Expand Database Tools &amp;gt; Query and View Designers&lt;/P&gt;
&lt;P&gt;for &lt;U&gt;Cancel long running query&lt;/U&gt;, either uncheck it, or set &lt;U&gt;Cancel after&lt;/U&gt; to a longer period.&lt;/P&gt;</description></item><item><title>Counting queue items in MSMQ</title><link>http://icelava.net/forums/thread/1034.aspx</link><pubDate>Fri, 03 Jun 2005 16:02:09 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:1034</guid><dc:creator>icelava</dc:creator><slash:comments>1</slash:comments><comments>http://icelava.net/forums/thread/1034.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=1034</wfw:commentRss><description>Don't you just &amp;lt;tone type="sarcasm"&amp;gt;&lt;i&gt;love&lt;/i&gt;&amp;lt;/tone&amp;gt; it when the .NET Framework fails to provide some functionality that you need in order to accomplish a simple task?&lt;br /&gt; &lt;br /&gt; In the project I'm working on currently, I am looking to implement &lt;a href="http://www.microsoft.com/windows2000/technologies/communications/msmq/default.asp"&gt;MSMQ (Microsoft Message Queuing)&lt;/a&gt;, touted by many to be one of the most underrated but useful technologies, as a reliable back-logging mechanism for items that cannot be written to database should the network connection fail.&lt;br /&gt; &lt;br /&gt; The .NET Framework has a wonderful System.Messaging namespace with the classes required to send/receive messages to/from queues, but the problem is there is no facility for me to even check if a private queue has items in the first place, much like how the MSMQ MMC console represents. Woah. Talk about over turning your car because of a small stone.&lt;br /&gt; &lt;br /&gt; It is at such a time where one has to painfully revert to the APIs of old and muck around in unfamiliar WIN32 or COM territory. Having become a professional developer only with .NET, these situations become frustratingly time-consuming activities for me - I've been there more times than I like. Thanks be to God, we still have our world of legacy (ok, maybe that's a harsh word) developers who are willing to share these information.&lt;br /&gt; &lt;br /&gt; I (or Google, actually) managed to hit almost on the dot with the &lt;a href="http://spaces.msn.com/members/msmq/Blog/cns%211pGjsZEQBluYM9y4YjJoNkTg%21121.entry"&gt;blog of this MSMQ guru, Yoel&lt;/a&gt;. Three options he gives, and I decide to take the second idea (with Microsoft Message Queue 3.0 Object Library) since it appears to be more elegant than the first, and actually having some code over the third. Hey, .NET is suppose to make COM InterOp [almost] seamless so it shouldn't be too hard!&lt;br /&gt; &lt;br /&gt; Well it's gonna take more effort on my part if this is going to work as I need it too. First of all I don't even know what the code is really trying to do. If you Google for "&lt;span id="BlogViewId"&gt;MSMQManagementClass" the &lt;i&gt;only 2 results&lt;/i&gt; returned are Yoel's own blog pages. Looks like MSMQ is &lt;i&gt;really&lt;/i&gt; underrated. I had a tough time trying to figure out what those "o" parameter variables refer to.&lt;br /&gt; &lt;br /&gt; Of course, the truth is one should be searching for "&lt;/span&gt;&lt;span id="BlogViewId"&gt;MSMQManagement"; the prior is a COM InterOp wrapper name. Once I got some proper &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msmq/msmq_ref_management_5oqc.asp"&gt;Platform SDK reference&lt;/a&gt; I trialed and errored with the parameters (since I only wanted to work with a specific queue) until I could reliably grab the queue without provoking any COMException and "generic COM errors".&lt;br /&gt; &lt;br /&gt; Some hours gone by so I can settle down on this code. Just so i can &lt;i&gt;count&lt;/i&gt;.&lt;br /&gt; &lt;br /&gt; &lt;/span&gt;&lt;font face="Courier New"&gt;&lt;span id="BlogViewId"&gt;object machineName = Type.Missing; // Set this to make parameter optional.&lt;/span&gt;&lt;br /&gt; &lt;span id="BlogViewId"&gt;object noFormat = Type.Missing; &lt;/span&gt;&lt;span id="BlogViewId"&gt;// Set this to make parameter optional.&lt;/span&gt;&lt;br /&gt; &lt;span id="BlogViewId"&gt;object pathName = @".\private$\QueueName";&lt;/span&gt;&lt;br /&gt; &lt;span id="BlogViewId"&gt;MSMQ.MSMQManagementClass msmqMgmt = new MSMQManagementClass();&lt;/span&gt;&lt;br /&gt; &lt;span id="BlogViewId"&gt;msmqMgmt.Init(ref machineName, ref pathName, ref noFormat);&lt;/span&gt;&lt;br /&gt; &lt;span id="BlogViewId"&gt;&lt;/span&gt;&lt;br /&gt; &lt;span id="BlogViewId"&gt;MessageBox.Show(msmqMgmt.MessageCount.ToString() + " items");&lt;/span&gt;&lt;/font&gt;&lt;br /&gt; &lt;span id="BlogViewId"&gt;&lt;/span&gt;&lt;span id="BlogViewId"&gt;&lt;/span&gt;</description></item><item><title>Signs your colleague may not be a good developer #3</title><link>http://icelava.net/forums/thread/5530.aspx</link><pubDate>Sun, 22 Mar 2009 15:50:07 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:5530</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/5530.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=5530</wfw:commentRss><description>&lt;P&gt;It has long been my suspicion, that many organisations do not permit their application source code to be copied out of their premises, not because of security or IP reasons, but to just save themselves from sheer embarassment.&lt;/P&gt;
&lt;P&gt;Honourary members of the court, allow me to present exhibit A&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;For obvious reasons, I am not allowed to expose more of the evidence. So let me fill in the details and explain that is at line 565 of a C# method. Yeap, &lt;EM&gt;seven&lt;/EM&gt; levels of branching code logic. But wait, there's more! That is only half way through the method; it continues for some three hundred lines more. Seriously, &lt;A href="http://icelava.net/forums/thread/1040.aspx"&gt;this is not the first time I have had to deal with such labyrinths of code&lt;/A&gt;. I have seem worse in past projects. And I know &lt;A href="http://community.sgdotnet.org/forums/t/11964.aspx"&gt;I have also not seen the &lt;EM&gt;worst&lt;/EM&gt; of technical debts yet&lt;/A&gt;. This has been a problem since the beginning of software development, and its recurrence to this day is still&amp;nbsp;oh so&amp;nbsp;common. Unfathomable.&lt;/P&gt;
&lt;P&gt;But you know what the real problem is? &lt;STRONG&gt;No matter how many times I deal with and fix such abhorring, criminal&amp;nbsp;works, it has not gotten one bit easier for me to read and understand what were going on with the original programmers' minds&lt;/STRONG&gt;. Messy complex code continues to remain messy complex code. Unlike the processes of nature, they do not erode and decompose into simpler substances over time. I am highly distressed that no matter how much I learn to write high-quality readable code, it does not help me to read&amp;nbsp;rubbish code. Like what really can an expert chef do for rotten food. In the absence of original requirements documents, it is near impossible to figure what the code is trying to do, &lt;EM&gt;for what reason&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;If your colleague's toolbox only contains primitive implemnets of if-else, switch-case, nested for-loops for unending ArrayLists and DataSets, &lt;EM&gt;beware&lt;/EM&gt;. It is safer to socialise with lepers. For such programmers produce ultra contamination that strike deeper than gamma rays can into your brain the moment you read their code and train of thought. Thoughts that &lt;EM&gt;never&lt;/EM&gt; consider how to make this simpler and easier to read. Thoughts that do not&amp;nbsp;figure how to slice the concerns and abstractions into bite-size chunks so they can be dealt with individually. &lt;A href="http://howtocable.com/dataCabling/"&gt;How one slots and organises his/her thoughts is of critical importance&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Just so, you know, that you may have to read the code &lt;EM&gt;again&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.refactoring.com/"&gt;Refactoring&lt;/A&gt;? Well let me inform there are more flaws to the logic and design than a couple of code rearrangements can fix. Therefore it still boils down to my die-hard opinion that interviews need to include some practical programming exercise so that candidates' programming styles and mentalities can be&amp;nbsp;observed and assessed. When you hire hands to do work, you jolly well better test the very skills that pertain to the work that must be done. Would you hire a violin player without hearing him/her play?&lt;/P&gt;</description></item><item><title>Review: Simple Architectures for Complex Enterprises</title><link>http://icelava.net/forums/thread/5300.aspx</link><pubDate>Sat, 31 Jan 2009 07:12:16 GMT</pubDate><guid isPermaLink="false">b5ede4db-7277-4f66-971e-849c7a9a2fd5:5300</guid><dc:creator>icelava</dc:creator><slash:comments>0</slash:comments><comments>http://icelava.net/forums/thread/5300.aspx</comments><wfw:commentRss>http://icelava.net/forums/commentrss.aspx?SectionID=24&amp;PostID=5300</wfw:commentRss><description>The general approach to any grand IT problem is to break it down to smaller manageable pieces. Pieces that our pathetically puny brains can contain and work on at a time. Any decent software developer would have known that. And yet, we still continue to produce massive, monstrous, monolithic code that is a complete beast to interpret, comprehend, and modify. In other words, a mesh of &lt;STRONG&gt;unmanageable complexity&lt;/STRONG&gt;. There is without a doubt such technical misshaping contribute significantly to the schedule and budget overrun in way too many large projects, and ultimate &lt;EM&gt;failure&lt;/EM&gt;. 
&lt;P&gt;But what am I talking about? This book is &lt;EM&gt;not&lt;/EM&gt; about software applications. As an enterprise architect, Author Roger Sessions takes us up several floors to show us where he believes all these complexity evil germinates - the failure to control the complexity of IT inter-system communication across the organisation. He writes this volume to explain the problem of complexity can be illustrated via mathematical models, and purports that the application these mathematical exercises and further concepts of organisation will help divide the enterprise into simple easy pieces.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;That&lt;/EM&gt; is a rather mighty claim. Is this for real?&lt;/P&gt;
&lt;P&gt;Roger Sessions starts out strong. He begins mentioning existing methodologies and frameworks used to organise architectures in the present industry and highlights rather glaringly the missing piece in all of them - &lt;STRONG&gt;the deliberate effort to ensure the output of the work is simple&lt;/STRONG&gt;. The next two chapters quickly move on present some simple real-world scenarios (like a rubik's cube, chess games, team and store organisation, etc) and then the math behind them, on how dividing them - &lt;STRONG&gt;partitioning&lt;/STRONG&gt; - into smaller pieces of a bigger whole helps to solve the problem they present in a much less troublesome manner. The mathematics introduced is simple enough to understand and convincing. But somehow the lessons would be re-taught every now and then; I found the repeated explanations to be redundant and approaching incessant. It is almost as though the author fears the readers may not be convinced enough and needed reminders. Or there is the assumption the intended audience largely failed elementary math in school.&lt;/P&gt;
&lt;P&gt;As convincing as the principles behind the math are, my disappointment set in when the transition from pure math theory into real-world business modeling began. If you think it sounded too good to be true that real-world architecture can be tackled with simplistic mathematical models, well, it is. Even Roger Sessions himself admits that real-world circumstances is in fact, not that simple. The problem with the absolute black-white nature of mathematical theory is it excludes many (grey) inter-object relationships or channels that real-world organisations would inherently possess; they cannot be blindly ignored. Take for example, the Five Laws of Partitions&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;First Law of Partitions - Partitions must be true partitions.&lt;/LI&gt;
&lt;LI&gt;Second Law of Partitions - Partition definitions must be appropriate to the problem at hand.&lt;/LI&gt;
&lt;LI&gt;Third Law of Partitions - The number of subsets in a partition must be appropriate.&lt;/LI&gt;
&lt;LI&gt;Fourth Law of Partitions - The size of the subsets in a partition must be roughly equal.&lt;/LI&gt;
&lt;LI&gt;Fifth Law of Partitions - The interactions between subsets in the partitions must be minimal and well defined.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;With such vague "laws" I predict a chasm of opportunities for unending subjective debates over what "appropriate", "equal size", "minimal", or "well defined" can truly mean when it comes to discussing how to partition a real organisation into smaller units. Therefore the fourth chapter's technique of Autonomous Business Capabilities (ABC) did not resonate well with me as I pondered how this applies to real departments and divisions. It is just not that simple. However, Roger Sessions' intention is squarely - and rightfully - focused on breaking things down simple enough to benefit the &lt;EM&gt;business&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;On a side note, I found his deliberate avoidance to discuss application systems somewhat isolative. As a software developer, I find many of the principles he puts forth are directly applicable, and even taught, at the level of software architecture and design. Like it or not, the lifeblood of any enterprise &lt;EM&gt;is&lt;/EM&gt; the myriad of software applications; keeping their design simple is as important as keeping the enterprise simple. In fact the SIP (Simple Iterative Partitions) process he recommends resembles Agile practices a lot. Somehow, I get the feeling Roger Sessions has forgotten failure in IT projects is contributed by many things happening at &lt;EM&gt;all levels&lt;/EM&gt;, not just enterprise architecture alone.&lt;/P&gt;
&lt;P&gt;It is difficult to label this book as truly seminal; due to the various falling pieces, I cannot feel the utter greatness. But don't be deceived - it has been a &lt;EM&gt;good mind-stretching&lt;/EM&gt; exercise (not mind-blowing). Roger Sessions has presented some eye-opening ideas that allowed me to gain new light in this argument for simplicity. His message is clear - &lt;EM&gt;there not enough people consciously considering simplifying things they work on; and accomplishing things by smaller projects of iterative sequence&lt;/EM&gt;. I wholeheartedly agree on this. If the word "simplicity" never flashed across your mind (are you reading this, CIOs, CTOs, and architects???) while you were thinking through architecture or design, you need this book to yaw yourself in the right direction.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Overall rating: 7/10&lt;BR&gt;&lt;img src="http://icelava.net/emoticons/emotion-21.gif" alt="Yes" /&gt; Refreshing perspective; interesting model &amp;amp; approach for architecture; gets the point across&lt;BR&gt;&lt;img src="http://icelava.net/emoticons/emotion-45.gif" alt="No" /&gt; Repetitive; model not 100% mapped to real world; concept not 100% new; the IT problem spans across more than one area&lt;/STRONG&gt;&lt;/P&gt;</description></item></channel></rss>