<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://laflour.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2flaflour.spaces.live.com%2fcategory%2fArticles%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Michael's Coding Den: Articles</title><description /><link>http://laflour.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catArticles</link><language>en-US</language><pubDate>Wed, 08 Oct 2008 03:53:23 GMT</pubDate><lastBuildDate>Wed, 08 Oct 2008 03:53:23 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://laflour.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>8463920662804772276</live:id><live:alias>laflour</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Era of pure software developers comes to an end</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!953.entry</link><description>&lt;p&gt;In last years I've started to note that there is no place for the pure developers in Computer Science world - their era comes to end. By &amp;quot;pure software developers&amp;quot; I mean those who speciality is just writing code and nothing else. 
&lt;p&gt;I'd say I mean geeks. I'm not blaming them, because I consider myself being a geek a bit, but I reckon geeks are not valuable now as they were before - about 5 years ago. 
&lt;p&gt;There are some changes happened in IT world. Looking around I found that IT became mature - we are not in infancy stage. We started to develop not for the sake of developing but for others. We are trying to automate the businesses, routines and we put software wherever it possible. It's hard to find the place where we don't use PC. We even finally started not the business for software, but software for business. 
&lt;p&gt;Infancy has been ended.  
&lt;p&gt;Now we need to think what to do with all that crap we created and how to resolve existed problems 
&lt;p&gt;We are on the threshold to come on another level of abstractions, but we can't go further being on the same boat - we need paradigm shift. We need to be on the next level of maturity to solve current problems. 
&lt;p&gt;Looking at the existed problems in all areas, like prediction systems, data mining, robotics end etc we see that everything is really good engineered - good architectures and good models, but it doesn't work as we expected, because we are missing the humane factor. 
&lt;p&gt;I mean that existed Computer Science engineers can't solve existed problems, because they think in machine terms, losing the humanity. We resolve problems building machine algorithms, not the psychology algorithms. 
&lt;p&gt;Just a simple example, when you bought something on Amazon they record your purchasing and then when you return back they try to predict your taste, suggesting new items based on what is already bought - just standard &amp;quot;prediction system&amp;quot;. It's good example which shows the power of machine perspective, where everything is easy predicted. But fails from human point of view.  Half year ago I bought comics on Amazon as a present to my friend. Since then whenever I come to the Amazon they always suggest me different comics :( I don't want them. I don't even like comics. That purchase was exceptional for me, I only interesting in IT books.  System is not able to track such behaviour which is natural to people. 
&lt;p&gt;I reckon that nowadays we should bring the psychological engineers to Computer Science world, who build the psycho logic algorithms based on the human actions. We should predict people behaviour not the results of behaviour. 
&lt;p&gt;This psychology in Computer Science will be that factor (paradigm shift) which allows us to go on the next level in Computer Science, and helps to solve existed problems. 
&lt;p&gt;We already made the first step in that direction - &amp;quot;usability engineers&amp;quot;, who are actually good psychologists, and who help us to develop for people, not for machines. But I hardly know about 5-10 products which were developed with &amp;quot;usability engineers&amp;quot; assistance. 
&lt;p&gt;We are still too far to build the &amp;quot;psychological&amp;quot; software. 
&lt;p&gt;Footnote: this post was written after I found the &lt;a href="http://www.netflixprize.com/"&gt;http://www.netflixprize.com/&lt;/a&gt; competition, where DVD store suggested 1 million for those who improve their prediction system. The most confusing is that contest began October 2, 2006 and continues &lt;strong&gt;at least October 2, 2011&lt;/strong&gt;. 5(!) years to find the solution. It's exactly what I wrote about. These guys really understand the problems with existed computer science where no humanity exists. And they hope that psychological factor will be introduced and properly implemented in the next 5 years. 
&lt;p&gt;Mirror: &lt;a href="http://msmvps.com/blogs/laflour/archive/2008/03/06/era-of-pure-software-developers-comes-to-an-end.aspx"&gt;Era of pure software developers comes to an end&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Era+of+pure+software+developers+comes+to+an+end&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!953.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!953.entry</guid><pubDate>Thu, 06 Mar 2008 11:22:06 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!953/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!953.entry#comment</wfw:comment><dcterms:modified>2008-04-28T04:59:30Z</dcterms:modified></item><item><title>User interfaces design and development guideline from Microsoft</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!678.entry</link><description>&lt;p&gt;Microsoft &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=b996e1e7-a83a-4cae-936b-2a9d94b11bc5&amp;amp;displaylang=en&amp;amp;tm" target="_blank"&gt;published&lt;/a&gt; the usability guide to design applications which run with Windows. Document describes the best practices in designing interfaces, visual and functional consistency, and usability. 
&lt;p&gt;This documents doesn't describe how to design proper components - it only covers the overall usability of your applications. 
&lt;p&gt;Checklists are provided 
&lt;p&gt;Some notes from me, which are not covered by this guideline: 
&lt;p&gt;&lt;strong&gt;Installers&lt;/strong&gt; 
&lt;p&gt;I've seen no installers which allow users to find out whether installing application is already installed somewhere in harddrives. Check not only the default directory, but also the other hard-drivers and to be smart to check other potential directories. In result, as time goes and windows is reinstalled on several drives, number of copies of application are appeared on different drives. (For example on my home PC I have 2 hard drives and 4 logical drives. Recently I've noted that I have 4 copies of GoogleTalk on all drives :)  It's awkward) 
&lt;p&gt;&lt;strong&gt;Keyboard support&lt;/strong&gt; 
&lt;p&gt;Many apps have hot-keys, but this schema is hide into options - no printed version is provided by default.  Moreover, menus have the hot-key label, but sometimes it's not showed in popup. 
&lt;p&gt;&lt;strong&gt;Consistency:&lt;/strong&gt; 
&lt;p&gt;Luckily, windows apps use the standard keyboard layout for the most common actions, but not the games - where each game has it's own keyboard layout, notwithstanding the fact that the set of actions is standard from game to game. 
&lt;p&gt;I really can't understand why there is no standards on keyboard layout among gamedevs companies. 
&lt;p&gt;&lt;strong&gt;Drag-&amp;amp;-Drops&lt;/strong&gt; 
&lt;p&gt;Why not to avoid this or suggest alternative solution for those who is on laptop? Dragging smth is really sucks when u are in way and works on notebook (for example resizing frames in window is rarely supported with the keyboard, especially in web) 
&lt;p&gt;&lt;strong&gt;Feedback&lt;/strong&gt; 
&lt;p&gt;No usable way to send the feedback to developers. Some provide feedback by email, I really don't like this - why not to provide textbox or redirect to the site (without opening 5 pages before feedback one) where feedback can by typed and sent? I have no email client at home and each time when I tried to send feedback the new window is opened, suggesting me to set up accounts for outlook. Damn, I just want to send feedback not to set my accounts and etc. 
&lt;p&gt;&lt;strong&gt;What annoys me the most:&lt;/strong&gt; 
&lt;p&gt;Lack of multiple monitor supports - when the main windows is on second monitor and dialog box popup on the first. Damn, sometimes I wanna kill that developers :( 
&lt;p&gt;  
&lt;p&gt;It would be great if Microsoft implements their own guidelines as template for all application. Smart Client Software Factory is far from this. Everything we need is the windows template (or the set of plugins to extend the existed windows/web pages functionality to meet these requirements) 
&lt;p&gt;Moreover, to provide the tool which can validate the UI and says what doesn't conform the guidelines.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+User+interfaces+design+and+development+guideline+from+Microsoft&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!678.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!678.entry</guid><pubDate>Thu, 22 Mar 2007 22:28:41 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!678/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!678.entry#comment</wfw:comment><dcterms:modified>2007-03-22T22:30:20Z</dcterms:modified></item><item><title>MVC vs MVP: Model View Controller vs Model View Presenter</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!650.entry</link><description>&lt;p&gt;Alex and I wrote the &lt;a href="http://ameleta.spaces.live.com/blog/cns!5F6316345A821420!163.entry"&gt;&lt;u&gt;article&lt;/u&gt;&lt;/a&gt; about MVP (Model View Presenter) and MVC (Model View Controller). &lt;p&gt;PS: This decision came to us when we crossed, the n-times, that few people understand what MVP/MVC are and use of them. Not saying that we never met the reality of using MVP :) &lt;p&gt;PPS: BTW, in our current project MVP lived about one week ;) Then was refactored to the Active MVC :)&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+MVC+vs+MVP%3a+Model+View+Controller+vs+Model+View+Presenter&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!650.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!650.entry</guid><pubDate>Tue, 16 Jan 2007 22:19:49 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!650/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!650.entry#comment</wfw:comment><dcterms:modified>2007-01-16T22:28:27Z</dcterms:modified></item><item><title>Architecture-Driven Process</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!642.entry</link><description>&lt;p&gt;There are several processes and methodologies which are used nowadays in development cycle but they are more or less directed to the developers not the architects. The Architecture-Driven Process (ADP) helps architects to determinate the switching between phases of development providing necessary pre- and post- requisites for each phase. &lt;p&gt;The ADP checklist is: &lt;ul&gt; &lt;li&gt;Role of project focused on the enterprise architecture  &lt;li&gt;Established long-term vision for the enterprise architecture  &lt;li&gt;Established deliverables for each of the transition  &lt;li&gt;No transition if deliverables are not completed&lt;/ul&gt; &lt;p&gt;Tailoring the architecture-driven process is consisted in 4 phases. &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Stage:&lt;/strong&gt; &lt;u&gt;&lt;em&gt;Envisioning/Requirements Definition&lt;/em&gt;&lt;/u&gt; - where we consume the patterns, services, frameworks, guidelines for our new application. &lt;br&gt;&lt;strong&gt;Output:&lt;/strong&gt; architecture document which includes: architecture strategy overview (component consumption, architecture variants, architecture patterns) &lt;br&gt; &lt;li&gt;&lt;strong&gt;Stage:&lt;/strong&gt; &lt;u&gt;&lt;em&gt;Detailed design&lt;/em&gt;&lt;/u&gt; - realizing high level design (HLD) architecture (new patterns, components may be revealed&lt;br&gt;&lt;strong&gt;Output:&lt;/strong&gt; Revised architecture strategy &lt;br&gt; &lt;li&gt;&lt;strong&gt;Stage:&lt;/strong&gt; &lt;u&gt;&lt;em&gt;Construction&lt;/em&gt;&lt;/u&gt; - document success and failure, focusing on quality of built application; document the usage of patterns and components&lt;br&gt;&lt;strong&gt;Output:&lt;/strong&gt; Reusability, cost analysis &lt;br&gt; &lt;li&gt;&lt;strong&gt;Stage:&lt;/strong&gt; &lt;em&gt;&lt;u&gt;Stabilization&lt;/u&gt;&lt;/em&gt; - analyze the app to promote best practice; perform cross-training;&lt;br&gt;&lt;strong&gt;Output:&lt;/strong&gt; Enterprise education - architecture library catalog, best practice white pages and sessions, training materials.&lt;/ol&gt; &lt;p&gt;Applying the current architecture-driven process brings the maturity to the current and all further projects, and prepare us to the next generation of the software development. &lt;p&gt;PS: I'd recommend to familiarize with the &lt;a title="Model-Driven Development" href="http://msdn2.microsoft.com/en-us/library/aa964145.aspx" rel=MDD&gt;&lt;u&gt;Model-Driven Development&lt;/u&gt;&lt;/a&gt; (MDD) before trying to apply ADP in your project, because MDD is tightly intertwined with ADP &lt;p&gt;Resources: &lt;a title="Model-Driven Development" href="http://msdn2.microsoft.com/en-us/library/aa964145.aspx"&gt;&lt;u&gt;1&lt;/u&gt;&lt;/a&gt;, &lt;a title="A Foundation for the Pillars of Software Factories" href="http://www.architecturejournal.net/2006/issue9/F4_Foundation/"&gt;&lt;u&gt;2&lt;/u&gt;&lt;/a&gt; &lt;p&gt; &lt;div&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Software Architecture" rel=tag&gt;Software Architecture&lt;/a&gt;, &lt;a href="http://technorati.com/tags/MDD" rel=tag&gt;MDD&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Architecture-Driven+Process&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!642.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!642.entry</guid><pubDate>Wed, 13 Dec 2006 20:40:09 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!642/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!642.entry#comment</wfw:comment><dcterms:modified>2006-12-21T22:26:51Z</dcterms:modified></item><item><title>CLR Instantiation</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!393.entry</link><description>&lt;div&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif" color="#000000"&gt;Installing&lt;br&gt;Starting&lt;br&gt;Initialization&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;strong&gt;&lt;font size=2&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;Installing&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;/strong&gt;Process of installing of .NET Framework is shown on the picture below&lt;br&gt; &lt;/div&gt;
&lt;p align=center&gt;&lt;img src="http://myriadsoftware.al.ru/temp/CLR.png"&gt;
&lt;p&gt;
&lt;p&gt; 
&lt;div&gt;&lt;em&gt;&lt;strong&gt;Registry&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;During installing .NET Framework all related information is recorded into HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\ This information includes info about major, minor and build versions of CLR and class libraries. Major and minor version keys (like 1.1, 2.0) are version of the CLR, where build version (like 4322) is version of the class libraries.&lt;/div&gt;
&lt;div&gt;Registry is the place to determine the version of the .NET (this is one of the most frequent question on the microsoft.public.dotnet.languages.csharp newsgroup and that encouraged me to write this article).&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;em&gt;Windows Directory&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;All .NET FW files, core and class libraries are copied into Windows directory under Microsoft.NET\Framework\ folder. The folder subdirectories names are maps directly to the structure of the records into registry for the reliability reason to check the CLR existence.&lt;br&gt; &lt;br&gt;&lt;em&gt;&lt;strong&gt;GAC&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;All class libraries, once more, are copied into GAC, where several versions of one assembly could coexist side-by-side (take into account that the versions of components installed into GAC are different from the CLR, because into GAC you see the Win32 file version, not the assembly version). The idea to have class libraries into GAC and into Windows directory leads from the compiler design – compiler cannot compile against the files into GAC. Compile scenario uses component from Windows directory and runtime scenario uses GAC.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif" size=2&gt;Starting&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;Each time you starts managed application the default host is started. This host has ability to determine which CLR version was used in building assembly. Host checks the registry for the version existence and delegates call to the mscoree.dll. Take into account that in case of COM Interoperability the latest version of CLR starts.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif" size=2&gt;Initialization&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;There are several unmanaged dlls providing API to start CLR. The most important dll responding for starting CLR is mscoree.dll (startup shim). Each machine has only one copy of mscoree.dll. When new application starts all requests of loading the CLR comes to the mscoree.dll, which then directs requests to the required version of the CLR. Default CLR host or custom host looks in the assembly to get the version which was used in building application. The main work of mscoree.dll is to find the path to the correct version of mscorwks.dll (CLR engine). Steps below performs by mscoree.dll&lt;br&gt;1) reading information from the registry about physical path to the .Net folder under windows directory;&lt;br&gt;2) reading info from registry about major, minor, and build version of .net framework;&lt;br&gt;3) combine read values to create path like C:\Windows\Microsoft\.NETFramework\v1.1.4322\mscorwks.dll;&lt;br&gt;4) check path and file existence;&lt;br&gt;5) load mscorwks.dll&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;MSCORWKS.dll is a central point of .net (for workstation), it loads all related core components like JIT compiler, class libraries and etc. from the current directory. &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align=right&gt;&lt;font color="#c0c0c0"&gt;Document version: 0.1&lt;/font&gt;&lt;/div&gt;
&lt;div align=right&gt;&lt;font color="#c0c0c0"&gt;Last update: May 26, 2006&lt;/font&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+CLR+Instantiation&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!393.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!393.entry</guid><pubDate>Tue, 16 May 2006 20:28:55 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!393/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!393.entry#comment</wfw:comment><dcterms:modified>2006-05-26T08:19:42Z</dcterms:modified></item><item><title>Shared Session State in ASP.NET 1.1</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!355.entry</link><description>&lt;p&gt;&lt;font color="#333333"&gt;Intro&lt;br&gt;Synchronized ASP.net Cache&lt;br&gt;Custom State Server&lt;/font&gt; 
&lt;p&gt;&lt;br&gt;&lt;font size=2&gt;&lt;strong&gt;Intro&lt;br&gt;&lt;/strong&gt;&lt;/font&gt;“Everything that can be invented has been invented”, only we need careful scrutinizing of the subject and proper googling to find info and to put these pieces together. This approach allows you to save your time, and it works well in my practice. &lt;br&gt;Recently I was bumped into idea how to replicate ASP.NET 1.1 session state in WebFarm cluster for our project. We need to keep user's UI settings shared among cluster and provide data integrity for fail-over and fail-back. There are several cases for this - using Session State Server, SQL Server or 3rd part tools. 
&lt;p&gt;• Session State Server (standard asp.net 1.1 one) doesn't guarantee required level of data reliability, because State Server isn't scalable - there is only one instance per cluster. &lt;br&gt;• SQL Server and 3rd part tools, like NCache and ScaleOut, were put away due to design constraints. 
&lt;p&gt;This brought me to implementation of custom solution to meet our requirements, and googling has been started :) Below I'll describe several solutions I’ve found. 
&lt;p&gt;  
&lt;p&gt;&lt;strong&gt;&lt;font size=2&gt;Synchronized ASP.net Cache&lt;/font&gt;&lt;/strong&gt; 
&lt;p&gt;The idea of cache replication (shared cache) in clusters was proposed by Peter Bromberg in his article &lt;a href="http://www.eggheadcafe.com/articles/20030420.asp"&gt;&lt;u&gt;http://www.eggheadcafe.com/articles/20030420.asp&lt;/u&gt;&lt;/a&gt;&lt;br&gt;He suggested to create &lt;font color="#333333"&gt;&lt;strong&gt;CacheHolder&lt;/strong&gt;&lt;/font&gt; class that will watch the application cache, and fire event on each change of cache that will update all caches in cluster nodes with &lt;font color="#333333"&gt;&lt;strong&gt;HttpRequest &lt;/strong&gt;&lt;/font&gt;call. 
&lt;p align=center&gt;&lt;a href="http://myriadsoftware.al.ru/temp/Synchronized_ASP.net_Cache.jpg"&gt;&lt;img src="http://myriadsoftware.al.ru/temp/Synchronized_ASP.net_Cache_small.jpg" border=0&gt;&lt;/a&gt;&lt;br&gt;&lt;font color="#808080" size=1&gt;(click to zoom)&lt;/font&gt; 
&lt;p&gt;
&lt;p&gt;Scrutinizing this approach I’ve found that it doesn’t work if you are working in the EAI environment where several dependencies on the other code and components have a place. (In my case it means that it’s not suitable to change code of existed WebFarm's sites to support this model) 
&lt;p&gt;  
&lt;p&gt;&lt;font size=2&gt;&lt;strong&gt;Custom State Server&lt;/strong&gt;&lt;/font&gt; 
&lt;p&gt;Working of session state in ASP.NET 1.1 was described in John Papa article &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/aspnetsessionstate.asp"&gt;&lt;u&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/aspnetsessionstate.asp&lt;/u&gt;&lt;/a&gt;&lt;br&gt;where he explained aspect of Session State. 
&lt;p&gt;&lt;img src="http://msdn2.microsoft.com/en-us/library/Aa479041.aspnetsessionstate_fig01(en-us,MSDN.10).gif" width=380&gt; 
&lt;p&gt;The key idea is “&lt;em&gt;&lt;font color="#808080"&gt;...&lt;/font&gt;&lt;font color="#808080"&gt;A state provider completely encapsulates the session-state data and communicates with the rest of the world through the methods of the IStateClientManager interface...&lt;/font&gt;&lt;/em&gt;” – &lt;strong&gt;ta-da&lt;/strong&gt; – we do know what to do to write custom State Server (and what have been done successfully afterwards), just implement a custom class derived from &lt;font color="#333333"&gt;&lt;strong&gt;System.Web.SessionState.IStateClientManager &lt;/strong&gt;&lt;/font&gt;interface. Having worked on this idea I found out that I’m on the beaten path. Thanks to Sergey Sorokin who did the same stuff 2 months earlier: &lt;a href="http://www.codeproject.com/aspnet/StateHijack.asp"&gt;&lt;u&gt;http://www.codeproject.com/aspnet/StateHijack.asp&lt;/u&gt;&lt;/a&gt; 
&lt;p&gt;  
&lt;p&gt;Combining this idea with previous one we get reliable and scalable session state based on custom replicable state server. It’s that what I’m working on now. 
&lt;p&gt;  
&lt;p&gt;&lt;font color="#ff0000"&gt;Update&lt;/font&gt;: Sergey published his &amp;quot;&lt;a href="http://sourceforge.net/projects/statemirror"&gt;&lt;u&gt;StateMirror&lt;/u&gt;&lt;/a&gt;&amp;quot; code on the sourceForge. Great work, man. (Apr-14, 2006) 
&lt;p&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+Shared+Session+State+in+ASP.NET+1.1&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!355.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!355.entry</guid><pubDate>Sun, 05 Mar 2006 00:35:19 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!355/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!355.entry#comment</wfw:comment><dcterms:modified>2007-05-04T10:14:11Z</dcterms:modified></item><item><title>.NET Tips &amp; Tricks</title><link>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!279.entry</link><description>&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Current document is published there:&lt;/strong&gt;&lt;/font&gt; &lt;a href="http://msmvps.com/blogs/laflour/pages/net-tips-amp-tricks.aspx"&gt;http://msmvps.com/blogs/laflour/pages/net-tips-amp-tricks.aspx&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=8463920662804772276&amp;page=RSS%3a+.NET+Tips+%26+Tricks&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=laflour.spaces.live.com&amp;amp;GT1=laflour"&gt;</description><comments>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!279.entry#comment</comments><guid isPermaLink="true">http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!279.entry</guid><pubDate>Thu, 22 Dec 2005 19:53:30 GMT</pubDate><slash:comments>31</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://laflour.spaces.live.com/blog/cns!7575E2FFC19135B4!279/comments/feed.rss</wfw:commentRss><wfw:comment>http://laflour.spaces.live.com/Blog/cns!7575E2FFC19135B4!279.entry#comment</wfw:comment><dcterms:modified>2007-06-17T09:07:03Z</dcterms:modified></item></channel></rss>