<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>microsoftnet &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/microsoftnet/</link>
	<description>Feed of posts on WordPress.com tagged "microsoftnet"</description>
	<pubDate>Thu, 10 Dec 2009 08:17:23 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Getting Started with Visual Studio Command Window]]></title>
<link>http://lancecontreras.wordpress.com/2009/11/10/having-fun-with-visual-studio-command-window/</link>
<pubDate>Tue, 10 Nov 2009 04:08:41 +0000</pubDate>
<dc:creator>lawrencecontreras</dc:creator>
<guid>http://lancecontreras.wordpress.com/2009/11/10/having-fun-with-visual-studio-command-window/</guid>
<description><![CDATA[Command window helps developers to save number of mouse clicks. First thing I looked for is the key ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Command window helps developers to save number of mouse clicks. First thing I looked for is the key binding that puts the focus to my command window, Ctrl + W, A.</p>
<p>If you are wondering what commands are you going to invoke, just look at the menu bar. For example, the command View.SolutionExplore. Accessing the solution explorer using the View menu takes up  to 2 mouse clicks(although we have a keybinding for SE, which is faster than command, some items in the menu does not have a key binding).</p>
<p>The Command Window comes with intellisense so don&#8217;t worry about memorizing long commands.</p>
<p>Alias is the heart of the commanding it could be a shortcut for a command. To see the list of default aliases, just type alias in the command window. The beauty of alias is that you can create your own custom alias.</p>
<p>Create Alias<br />
<code>alias vse View.SolutionExplorer</code><br />
<br />
This command will create a new alias. so that you just have to type <code>vse</code> instead of typing <code>View.SolutionExplorer</code>.</p>
<p>And of course you can also delete your alias if it is not needed anymore.</p>
<p>Delete Alias<br />
<code>alias vse /delete</code><br />
<br />
I think using commands together with macros will be very helpful when it comes to automating your IDE. </p>
<p>Useful links:</p>
<p><a href="http://ondotnet.com/pub/a/dotnet/excerpt/vshacks_chap1/index.html">http://ondotnet.com/pub/a/dotnet/excerpt/vshacks_chap1/index.html</a></p>
<p><a href="http://www.codeproject.com/KB/macros/vstogglewindow.aspx?display=PrintAll">http://www.codeproject.com/KB/macros/vstogglewindow.aspx?display=PrintAll</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/c3a0kd3x.aspx">http://msdn.microsoft.com/en-us/library/c3a0kd3x.aspx</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to speed up your ASP.NET web application]]></title>
<link>http://blog.richard.parker.name/2009/08/05/how-to-speed-up-your-asp-net-web-application/</link>
<pubDate>Wed, 05 Aug 2009 21:40:20 +0000</pubDate>
<dc:creator>Richard</dc:creator>
<guid>http://blog.richard.parker.name/2009/08/05/how-to-speed-up-your-asp-net-web-application/</guid>
<description><![CDATA[If your web site is slow, it&#8217;s annoying to your customers. It&#8217;s annoying because nobody ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>If your web site is slow, it&#8217;s annoying to your customers. It&#8217;s annoying because nobody likes to wait: we wait all day in the physical world: in queues at the shops, at the restaurant and even on the telephone. We&#8217;re always looking for &#8216;faster&#8217;, because in our web consumer minds, &#8220;faster equals better&#8221;. In my personal experience as a software developer, most users share at least one principle:</p>
<blockquote><p><strong>Better responsiveness equals a better product<br />
</strong>- A. Customer</p></blockquote>
<p>If your application is simple and responsive, people will use it. If it is clunky and slow to load, people are forced to wait. Think of your application (it doesn&#8217;t matter if it&#8217;s a web or a desktop application) as a racing car. As the manufacturer of that car, you&#8217;ll want customers to come and test drive it. You&#8217;ll hope that they&#8217;ll fall in love with it after driving it, and want to buy it. If that test drive is a good experience, they&#8217;ll hopefully part with some of their hard earned cash to pay for it &#8211; and bingo, you&#8217;ve done what you needed to do: make the sale. </p>
<p>The same principle applies to software: if you deliver a fast, responsive application with a quick user interface, your users are more likely to think you&#8217;ve built a better product &#8211; (whether that&#8217;s right or technically wrong), because to Mr and Mrs User, a slow application is a bad one.</p>
<blockquote><p><strong>You can optimise your web site in just a few steps</strong></p></blockquote>
<p>As an ASP.NET developer, here&#8217;s a look (or a reminder) at some of the things you can look at doing before deciding it&#8217;s time to dig under the hood and start to make more fundamental changes in your application:</p>
<h2>Disable debugging in your web.config</h2>
<p>When you release an application in debug mode, ASP.NET forces certain files to be sent to the client with each request, instead of allowing the browser to cache them. Most people forget to switch debug mode off when they release. This creates an overhead for your server, and a longer wait for the client. Debug mode also causes other changes in your web application: think of it as a bloaty way to release because it has to include data and various hooks to allow you to debug the application that aren&#8217;t necessary in order to run it:</p>
<pre class="brush: xml;">&lt;compilation debug=&quot;false&quot;/&gt;</pre>
<p>You&#8217;ll find the above line in your web.config file.</p>
<h2>Enable IIS Request Compression</h2>
<p>Request compression is a feature of Internet Information Services 6 and above that causes content to be compressed before transmission to the client, and then decompressed by the browser. Most modern browsers support this, and enabling it requires no modification to your web site at all. Do bear in mind that request compression will force your web server to work harder because it has to first compress data before sending it. This creates a small spike in CPU usage, for low to medium traffic web sites that really need a performance boost the extra CPU usage will more than likely be absorbed just fine.</p>
<p><strong>In Internet Information Services 6:</strong></p>
<ol>
<li>Launch IIS Manager</li>
<li>Right-click the &#8220;Web Sites&#8221; node</li>
<li>Click &#8220;Properties&#8221;</li>
<li>Select the &#8220;Service&#8221; tab</li>
<li>Tick &#8220;Compress application files&#8221; and &#8220;Compress static files&#8221;. Be sure to specify a temporary directory with sufficient free resources and consider adding a maximum limit to the temporary directory size.</li>
<li>Click &#8220;Apply&#8221;</li>
<li>Click &#8220;OK&#8221;</li>
</ol>
<p>Request compression isn&#8217;t for everybody &#8211; be sure to weigh the pro&#8217;s and con&#8217;s for your particular environment.</p>
<h2>Use page output caching</h2>
<p>By default, IIS thinks that your ASP.NET page is dynamic. In many applications, however, not all the pages actually are. Even if they do rely on a database for content, oftentimes it&#8217;s not necessary to hit the database on each request to the page. Output caching can be enabled on a particular page by adding one line of code to the top of your ASPX file. It is a directive that informs .NET to keep a copy of the rendered page, and serve the copy (rather than the original) from disk each time it is called. This would include, for example, any database generated content from controls on the page itself, or any embedded user controls.</p>
<pre class="brush: xml;">&lt;%@ OutputCache Duration=&quot;10&quot; VaryByParam=&quot;none&quot;%&gt;</pre>
<p>Page output caching can be an extremely effective way to improve your web site&#8217;s performance and responsiveness. It&#8217;s a lot more flexible than I&#8217;ve explained here, and you should be aware that there are all manner of ways in which you can control the cached version of the page (for instance, you can modify the directive to have different cached versions of the page based on a URL parameter). For more information, see the <a href="http://msdn.microsoft.com/en-us/library/ms972362.aspx">MSDN documentation</a>.</p>
<h2>Next steps</h2>
<p>When you&#8217;ve done these things, if your application could still use a boost, it&#8217;s time to start profiling. You&#8217;ve tried the &#8216;quick fixes&#8217; &#8211; the 10 minute jobs that are more-than-likely going to make things better, but there&#8217;s always a chance the problem isn&#8217;t with your application per sé. The next step is to figure out what&#8217;s causing the problem. First identify the scope: is it limited to one user, or a bunch of users in a particular geographic region, or is it everybody? If it&#8217;s only a small bunch of people, it might be that your ISP is having routing issues and you need do nothing at all. On the other hand, you might find that everyone is affected by the issue.</p>
<p>In that case what you need to do is to investigate <em>where</em> your bottleneck is occurring. Is it your database? Is it your disks? Or is it, yes, hold on a second &#8211; more than likely it&#8217;s the things you&#8217;ve probably overlooked: your images and other media files.</p>
<h3>Optimising your images</h3>
<p>Many people, particularly in smaller teams, overlook image optimisation. Most image editing programs will optimise for you &#8211; and this can often reduce a file&#8217;s size anywhere between 5% and 20%, and sometimes more. With today&#8217;s media rich sites, look at what you can do to ease the burden.</p>
<h3>Using a content delivery network</h3>
<p>As your web site grows ever more popular, sometimes the best way to get a performance boost is to let somebody else handle delivery of your &#8216;resource files&#8217; &#8211; these are your static images, scripts, movies, SWF files, etc. One option is to purchase more bandwidth from your supplier. Another is to enlist the support of a Content Delivery Network &#8211; kind of like a private, global internet with public endpoints close to your customers.</p>
<p>The benefit of a CDN is that you are effectively outsourcing the delivery of your static files onto another &#8211; usually much faster &#8211; network. Often this will result in an ability for your server to handle more connections than before, since it no longer has to worry about serving up the big files over and over again.</p>
<p>Going direct to one of the big networks can cost anywhere from about $1,000 per month upwards, but there are companies who provide full CDN integration for a fraction of the price.</p>
<p> Good luck with your web site optimisation and please feel free to leave comments and tips for others.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Учимся проектировать на основе предметной области (DDD: Domain Driven Design)]]></title>
<link>http://butaji.wordpress.com/2009/06/06/%d1%83%d1%87%d0%b8%d0%bc%d1%81%d1%8f-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d1%82%d1%8c-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-%d0%bf%d1%80%d0%b5%d0%b4%d0%bc/</link>
<pubDate>Sat, 06 Jun 2009 18:48:15 +0000</pubDate>
<dc:creator>butaji</dc:creator>
<guid>http://butaji.wordpress.com/2009/06/06/%d1%83%d1%87%d0%b8%d0%bc%d1%81%d1%8f-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d1%82%d1%8c-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-%d0%bf%d1%80%d0%b5%d0%b4%d0%bc/</guid>
<description><![CDATA[1. Введение В данной статье я хотел бы рассказать об этих трёх буквах, постоянно находящихся на слух]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h2>1. Введение</h2>
<p>В данной статье я хотел бы рассказать об этих трёх буквах, постоянно находящихся на слуху, но для многих являющихся тайной за семью печатями, а так же привести ряд ресурсов, с которыми неплохо было бы познакомиться при желании продолжить развитие в проектировании на основе предметной области (DDD: Domain Driven Design). </p>
<h2>2. Так почему же DDD?</h2>
<p>Есть несколько шаблонов реализации предметной области (Domain Logic) или бизнес-логики (Business Logic):</p>
<p>1) <a href="http://martinfowler.com/eaaCatalog/tableModule.html">Table Module</a> – представляет собой объект, в единственном экземпляре, обрабатывающий бизнес логику для всех записей в таблице базы данных, либо представления.</p>
<p>2) <a href="http://martinfowler.com/eaaCatalog/transactionScript.html">Transaction Script</a> – организует взаимодействие с бизнес-логикой посредствам процедур, принимающих запросы с уровня представления.</p>
<p>3) <a href="http://martinfowler.com/eaaCatalog/domainModel.html">Domain Model</a> – непосредственно, объектная модель предметной области, включающая в себя как поведение, так и данные.</p>
<p><img style="display:inline;margin:10px 10px 0 0;" align="left" src="http://www.books.ru/img/156126.jpg" />Эти шаблоны описаны более подробно <a href="http://martinfowler.com/">Мартином Фаулером</a>, в его книге “<a href="http://www.books.ru/shop/books/156126?partner=butaji">Архитектура корпоративных программных приложений. Шаблоны корпоративных приложений</a>” <b><a href="http://martinfowler.com/books.html#eaa">(Patterns of Enterprise Application Architecture (P of EAA)</a>)</b>. В данной книге он показывает, что первые два шаблона более привлекательны в начале работы с предметной областью, однако так же обращает внимание, что при наращивании сложности логики предметной области стоит больше внимания уделять сопровождению инфраструктуры, используя первые два подхода, это время можно уменьшить, если обратиться в своём решении к третьему из вышеперечисленных шаблонов, так называемой “Модели предметной области”. </p>
<p>На основе этого сделаем небольшой вывод о том, что данный шаблон (“<a href="http://www.sbras.ru/Report2006/Report321/node14.html">Модель предметной области</a>”) лучше всего подойдёт, к примеру, для такой непростой области, как финансовый рынок. Большинство, создаваемого в наши дни программного обеспечения предназначено для различных нужд бизнеса, следовательно какие-то абстрактные, обобщенные решения находят своё место на рынке (с довольно таки высокой конкуренцией) всё реже и реже. <strong>К чему я пишу про всё это? </strong>Потому что DDD – это не только качественное проектирование, но так же и показательный пример того, как следует выделить предметную область в программном обеспечении, для того, чтобы проще преодолевать сложности, частые изменения, проблемы коммуникации и прочие недуги предметной области, вместо того чтобы разрабатывать уродливую, сложную для понимания систему, в которой любое изменение или исправление способно обрушить на вас лавину всё новых и новых дефектов.</p>
<p>DDD ни в коем случае не отрицает наследия практик разработки, таких как: </p>
<ul>
<li>
<p><a href="http://ru.wikipedia.org/wiki/Объектно-ориентированное_проектирование">Объектно-ориентированное проектирование</a></p>
</li>
<li>
<p><a href="http://ru.wikipedia.org/wiki/Шаблоны_проектирования">Шаблоны проектирования</a> (Design Patterns) (в том числе всем известные <a href="http://en.wikipedia.org/wiki/Design_Patterns_(book)">GoF</a>)</p>
</li>
<li>
<p>Так называемый ряд принципов проектирования <a href="http://www.lostechies.com/blogs/chad_myers/archive/2008/03/07/pablo-s-topic-of-the-month-march-solid-principles.aspx">S.O.L.I.D</a>, собранных <a href="http://www.objectmentor.com/omTeam/martin_r.html">Робертом “Uncle Bob” Мартином</a>.</p>
</li>
<li>
<p><a href="http://ru.wikipedia.org/wiki/Разработка_через_тестирование">Разработка по средствам тестирования</a> (TDD: <a href="http://www.agiledata.org/essays/tdd.html">Test-Driven Development</a>) </p>
</li>
</ul>
<p>DDD лишь дополняет их. Поиск подходящей модели и абстракций в сложных сценариях требует значительных знаний в сфере объектно-ориентированного подхода, и достаточного опыта применения различных принципов, шаблонов и практик, а не просто DDD, как может показаться.</p>
<h2>3. С чего можно начать?</h2>
<p>Если мой “нудный PR”&#160; проектирования на основе предметной области (DDD) вас до сих пор не утомил, то думаю нам стоит продолжить, если же иначе, то посмотрите хотя бы ссылки на материалы.</p>
<p><img style="display:inline;margin:10px 10px 10px 0;" align="left" src="http://domaindrivendesign.org/sites/default/files/images/cover_small.jpg" />Первой книгой пролившей свет на DDD для широкой публики была так называемая “Большая синяя книга” (мем. BBB: Big Blue Book): <a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215"><strong>Domain-Driven Design: Tackling Complexity in the Heart of Software</strong></a><strong>&#160;</strong>by<strong> </strong><a href="http://www.infoq.com/articles/eric-evans-ddd-matters-today"><strong>Eric Evans</strong></a><strong>&#160;</strong>(на русский язык пока не переведена). </p>
<p>Книга довольна подробно рассказывает о том, что из себя представляет DDD, и все связанные аспекты, такие как: язык предметной области, шаблоны, практики проектирования, рефакторинг, моделирование, как сделать <a href="http://ru.wikipedia.org/wiki/Гибкая_методология_разработки">разработку гибкой</a> и многое другое. Но даже если вы ознакомитесь со всеми вопросами, поднятыми в книге (что является не совсем простым занятием), вы обратите внимание, что вопросы рассматриваются только с теоретической точки зрения, оставляя весь простор для практики (книга не привязана к конкретной платформе разработки). <img style="display:inline;margin:10px 10px 0;" align="right" src="http://www.infoq.com/resource/news/2006/12/domain-driven-design/en/resources/http://www.infoq.com/resource/minibooks/domain-driven-design-quickly/en/smallimage/coversmall.jpg" />Для большинства из нас чтение чистой теории, без подкрепления практическими примерами не нравится, в связи с этим можно обратить своё внимание на сокращенную (и свободную для доступа) версию этой книги, подготовленную порталом <a href="http://www.infoq.com/">InfoQ</a>: <a href="http://www.infoq.com/news/2006/12/domain-driven-design"><b>Domain Driven Design Quickly</b></a>.</p>
<p>Есть так же несколько хороших презентаций Эрика Ивенса (Eric Evans), с которых можно начать:</p>
<p>1) <a href="http://www.infoq.com/presentations/model-to-work-evans">DDD: putting the model to work</a></p>
<p>2) <a href="http://www.infoq.com/presentations/strategic-design-evans">Eric Evans on DDD: Strategic Design</a></p>
<p>На портале <a href="http://www.infoq.com/">InfoQ</a> можно найти множество других <a href="http://www.infoq.com/domain-driven-design">презентаций, статей и интервью</a>, посвященных DDD.</p>
<p><img style="display:inline;margin:10px 10px 0 0;" align="left" src="http://tbn3.google.com/images?q=tbn:yo93K63P4ozz5M:http://www.diesel-ebooks.com/mas_assets/full/0470384026.jpg" />Итак, с теоретической частью мы разобрались, где же можно найти <strong>примеры практического применения DDD? </strong>Отличной книгой для этого является <a href="http://www.amazon.com/NET-Domain-Driven-Design-Solution-Programmer/dp/0470147563"><strong>.NET Domain-Driven</strong> Design with C#, Problem – Design – Solution</a> написанная Tim McCarthy.&#160; </p>
<p>В этой книге вы наёдете практические примеры:</p>
<p>1) Как проходит процесс проектирования и разработки, от определения требований, до написания кода</p>
<p>2) Как организовывать архитектурные слои в своих решениях</p>
<p>3) Как применять шаблоны и практики DDD</p>
<p>4) Как построить небольшой каркас для DDD</p>
<p>5) Как изолировать домен предметной области от модели</p>
<p>6) Современные паттерны представления данных и взаимодействия с ними (Model-View-ViewModel) в такой среде как WPF (так же применимы к Silverlight) в практики.</p>
<p>Эта книга – отличный практикум по DDD, содержащий очень широкий пласт идей. Начинается книга с разработки требований, а заканчивается реализацией промышленного приложения, исходные коды которого доступны на <a href="http://www.codeplex.com/dddpds">Codeplex</a>.</p>
<p>Вся концепция книги построена на 3 книгах-столпах DDD: </p>
<ol>
<li>PoEAA Мартина Фаулера </li>
<li>DDD Эрика Ивенса </li>
<li>Applying Domain &#8211; Driven Design and Patterns by Jimmy Nilsson’s <a href="http://www.books.ru/shop/books/536846?partner=butaji">(“Применение шаблонов проектирования: проблемно-ориентированное проектирование приложений с примерами на C# и .NET” Джимми Нильссона )</a> </li>
</ol>
<p> <img style="display:inline;margin:10px 10px 10px 0;" align="left" src="http://www.books.ru/img/536846.jpg" width="134" height="196" />
<p>В этой книге поверхностно рассмотрены все вопросы, техники и паттерны, применяемые в DDD, все примеры сопровождаются кодом, что упрощает понимание. Книга превосходная, однако русский перевод подкачал, поэтому, рекомендую прочитать оригинал.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Однако DDD – это не просто практические решения или шаблоны, это мышление и подход, и есть великое множество нюансов, которые необходимо учитывать, если вы решили следовать DDD, таких как: фокусирование на высокий приоритет отдается модели, выработка языка предметной области, контекст модели, процесс моделирования, разделение знаний, рефакторинг, стратегический дизайн и т.д…это является&#160; основной причиной ознакомиться с книгой Эрика Ивенса, так как она даст вам более объемное и глубокое понимание философии DDD.</p>
<p><strong>DDD не привязанны к конкретной технологии, </strong>однако соблюдать DDD будет не так просто, без наличия хороших средств и практик в вашем арсенале, таких как: TDD-фреймворк, ORM, возможность реализации независимости сохраняемости (Persistence Ignorance), IoC-контейнер (Inversion of Control), и возможностей AOP (Аспектно-Ориентированного Программирования), конечно не значит, что все эти инструменты нам понадобятся, однако они приблизят нас к реализации DDD на практике. Практичная ценность этих средств в том, что они позволять изолировать модель предметной области, что является ключевой целью DDD. Книга Джимми Нильссона может познакомить вас с возможностями и видами данных инструментов. Джимми так же показывает как использовать <a href="http://martinfowler.com/eaaCatalog/index.html">шаблоны реализации корпоративных приложений</a>, и строить, благодаря им, цельное решение, основанное на современных инструментах и практиках.</p>
<p>Некоторые реализации шаблонов DDD на Ruby On Rails:</p>
<h4><a href="http://www.simplewebapp.de/2008/09/some-ddd-domain-driven-design-concepts-implemented-in-rails/">Some DDD (Domain Driven Design) Concepts implemented in Rails</a></h4>
<h2>4. Актуальные вопросы DDD</h2>
<p>C DDD так же тесно связана такая тема, как DDDD: Distributed Domain Driven Design (Распределенный DDD). DDDD – это DDD в распределенных сценариях. В настоящее время существует не так много ресурсов, посвященных DDDD, в нескольких словах о DDDD: покрывает проблему реализации сообщений и DDD, разделение команд и запросов (<a href="http://en.wikipedia.org/wiki/Command-Query_Separation">Command Query Separation (CQS)</a>) помогает реализовать данный подход. Грег Янг (<a href="http://codebetter.com/blogs/gregyoung/">Greg Young</a>) сообщил, что готовит <a href="http://www.infoq.com/interviews/greg-young-ddd">книгу, посвященную DDDD</a>.</p>
<p><a href="http://ru.wikipedia.org/wiki/Сервисно-ориентированная_архитектура">SOA</a> и DDD – это ещё одна объемная тема, часто обсуждаемая <a href="http://www.udidahan.com/">Udi Dahan</a></p>
<h2>5. DDD шаблоны, концепции и понятия</h2>
<p>В промышленных приложениях DDD использует ряд шаблонов, часть которых описана в книге Эрика Ивенса, но, это не отменяет применение объектно-ориентированного подхода, включающего <a href="http://en.wikipedia.org/wiki/Design_Patterns">GoF-шаблоны</a>,&#160; <a href="http://martinfowler.com/eaaCatalog/index.html">шаблоны Мартина Фаулера, описанные в его PoEAA</a>, <a href="http://www.enterpriseintegrationpatterns.com/">Шаблоны интеграции корпоративных приложений</a> и т.д.…</p>
<p>Вот некоторые из них:</p>
<ul>
<li><a href="http://domaindrivendesign.org/node/135">Value Object</a> </li>
<li><a href="http://www.martinfowler.com/bliki/EvansClassification.html">Entity</a> </li>
<li><a href="http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/08/21/services-in-domain-driven-design.aspx">Service</a> </li>
<li><a href="http://codeidol.com/csharp/domain-driven-design/A-Model-Expressed-in-Software/a.-Packages)/">Module</a> </li>
<li><a href="http://domaindrivendesign.org/node/88">Aggregate</a> </li>
<li><a href="http://martinfowler.com/eaaCatalog/repository.html">Repository</a> </li>
<li><a href="http://blogs.interknowlogy.com/timmccarthy/archive/2007/01/22/10863.aspx">Specification</a> </li>
<li><a href="http://martinfowler.com/eaaCatalog/layerSupertype.html">Layer Supertype</a> </li>
<li><a href="http://martinfowler.com/eaaCatalog/identityMap.html">Identity Map</a> </li>
<li><a href="http://domaindrivendesign.org/discussion/messageboardarchive/Factories.html">Factories</a> </li>
<li><a href="http://martinfowler.com/eaaCatalog/unitOfWork.html">Unit of Work(UoW)</a> </li>
<li><a href="http://msdn.microsoft.com/en-us/library/cc707904.aspx">Inversion of Control(IoC)</a> </li>
<li><a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">Aspect Oriented Programming(AOP)</a> </li>
<li><a href="http://domaindrivendesign.org/node/91">Bounded Context</a> </li>
<li><a href="http://domaindrivendesign.org/node/132">Ubiquities language</a> </li>
<li><a href="http://en.wikipedia.org/wiki/Object-relational_mapping">Object-relational mapping(ORM)</a> </li>
<li><a href="http://www.martinfowler.com/bliki/AnemicDomainModel.html">Anemic Domain Model anti pattern</a> </li>
</ul>
<h2>6. Примеры приложений</h2>
<p>Найти хорошие примеры реализации DDD очень сложно, не потому что их не существует, а потому что реальная сила DDD реализуется в приложениях, используемых в довольно сложных областях, и, как правило, являющихся коммерческими проектами. Однако можно найти несколько неплохих проектов, в которых можно проследить некоторые идеи реализации шаблонов DDD.</p>
<p>Вот они:</p>
<p>1) Приложение Тима Маккарти <a href="http://www.codeplex.com/dddpds">его проект</a>, описанный в деталях в его книге. Он описывает не только применение шаблонов, но так же акцентирует внимание в разработке модели предметной области с точки зрения DDD.</p>
<p>Проект так же интересен тем, что построен на .NET 3.5 и демонстрирует всю силу современного подхода связывания данных с моделью предметной области (data binding, реализация шаблона MVVM). Так же его стиль примечателен умением выделять абстракции и повторно используемый код.&#160;&#160;&#160;&#160;&#160;&#160; </p>
<p>2) Следующий проект, на который следует обратить внимание – это <a href="http://www.goeleven.com/resources/architecture/DDD/DDDSeries-Example.zip">приложение</a> разработанное <a href="http://www.goeleven.com/">Yves Goeleven</a>, создание данного приложения описано в его <a href="http://www.goeleven.com/blog/entryDetail.aspx?entry=89">блоге</a> (так же посвященному основным концептам DDD). Другим его приложением является <a href="http://www.goeleven.com/resources/architecture/DDD/DDDSeries-Framework.zip">DDD-каркас</a>. Следует обратить внимание на его реализацию взаимодействия шаблонов <a href="http://www.martinfowler.com/eaaCatalog/repository.html">Repository</a> и <a href="http://en.wikipedia.org/wiki/Specification_pattern">Specification</a>.&#160; </p>
<p>3) Billy McCafferty разрабатывает потрясающий open source фреймворк, сфокусированный на DDD, под названием <a href="http://code.google.com/p/sharp-architecture/">S#arp Architecture</a>. У него есть очень хорошее <a href="http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx">описание</a>, включающее в себя описание шаблонов и подходов, заключенных в фреймворке. Фреймворк нацелен на разработку ASP.NET MVC приложений с применением NHibernate. </p>
<p>4) <a href="http://code.google.com/p/ndddsample/">C# Domain-Driven Design sample application ( ndddsample )</a>, это приложение, разрабатываемое Джимми Нильссоном, демонстрирует разбиение приложения на ключевые слои с точки зрения DDD. Так же демонстрируется практическое применение шаблонов <a href="http://www.informit.com/articles/article.aspx?p=598888">building block</a> в предметной области перевозки грузов, описанной в его книге. </p>
<p>Этот проект основан на совместной работе компании Эрика Ивенса “Domain Language” и шведской консалтинговой компании “Citerus”.</p>
<p>Цель этого проекта:</p>
<ul>
<li>Показать практическое применение использования DDD с применением .NET. </li>
<li>Использование актуальных утилит, технологий и методологий разработки в области .NET, обсуждаемых <a href="http://butaji.wordpress.com/2009/01/21/что-такое-altnet/">ALT.NET</a>-коммунити. </li>
<li>Привести практические примеры реализации типовых DDD приложений. </li>
<li>Показать способ реализации DDD на конкретной платформе, что позволит без труда осуществить тоже самое на любой другой платформе. </li>
<li>Помочь в выборе реализуемых практик. Различные подходы позволят сообществу обсудить их и выбрать соответствующий для конкретной реализации. </li>
</ul>
<p><a href="http://code.google.com/p/ndddsample/">здесь более подробная информация</a>.</p>
<h2>7. Ресурсы по Domain Driven Design</h2>
<blockquote><p>Официальный сайт &#8211; <a href="http://domaindrivendesign.org/">http://domaindrivendesign.org/</a></p>
<p>Группа обсуждений &#8211; <a href="http://tech.groups.yahoo.com/group/domaindrivendesign/">http://tech.groups.yahoo.com/group/domaindrivendesign/</a> это взрослая группа, очень хороший источник идей, место для обсуждений всех видов проблем в области DDD. В ней на ваши вопросы могут ответить опытные в DDD люди, даже Эрик Ивенс <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Блог Jimmy Bogard’а &#8211; <a href="http://www.lostechies.com/blogs/jimmy_bogard/default.aspx">http://www.lostechies.com/blogs/jimmy_bogard/default.aspx</a></p>
<p>Блог Colin Jack’а &#8211; <a href="http://colinjack.blogspot.com/">http://colinjack.blogspot.com/</a></p>
<p>Блог Greg Young’а &#8211; <a href="http://codebetter.com/blogs/gregyoung/default.aspx">http://codebetter.com/blogs/gregyoung/default.aspx</a></p>
<p>Блог Casey Charlton’а &#8211; <a href="http://devlicio.us/blogs/casey/">http://devlicio.us/blogs/casey/</a></p>
<p>Блог Udi Dahan’а &#8211; <a href="http://www.udidahan.com/">http://www.udidahan.com/</a></p>
<p>Введение в Domain-Driven Design &#8211; <a href="http://msdn.microsoft.com/ru-ru/magazine/dd419654.aspx">http://msdn.microsoft.com/ru-ru/magazine/dd419654.aspx</a></p>
</blockquote>
<h2>8. Заключение</h2>
<p>Если вы заинтересованы в расширении ваших “объектно-ориентированных горизонтов” в сложных корпоративных системах и изучении новых способов разработки и проектирования, то DDD – именно то что нужно. </p>
<p><a href="http://weblogs.asp.net/arturtrosin/archive/2009/02/09/domain-driven-design-learning.aspx">http://weblogs.asp.net/arturtrosin/archive/2009/02/09/domain-driven-design-learning.aspx</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[First Days As An Intern]]></title>
<link>http://2009summer.wordpress.com/2009/04/20/first-days-appsource/</link>
<pubDate>Sun, 19 Apr 2009 17:13:47 +0000</pubDate>
<dc:creator>mlpnavarro</dc:creator>
<guid>http://2009summer.wordpress.com/2009/04/20/first-days-appsource/</guid>
<description><![CDATA[Last Thursday was the start of my internship at AppSource. As usual, my heart was pounding like craz]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Last Thursday was the start of my internship at AppSource. As usual, my heart was pounding like crazy. While wiping the sweat from my forehead, I mustered enough courage to enter the Robinsons Equitable Tower at Ortigas, where their office was located.</p>
<div id="attachment_705" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-705" title="AppSource" src="http://2009summer.wordpress.com/files/2009/04/image010.jpg?w=300" alt="AppSource" width="300" height="225" /><p class="wp-caption-text">AppSource</p></div>
<p><!--more--></p>
<p>At the office, Sir Myki Cantero briefed us about what we would do during our stay at the company. <a href="http://msdn.microsoft.com/en-us/vcsharp/aa336809.aspx" target="_blank">C#</a> and <a href="http://www.microsoft.com/NET/" target="_blank">Microsoft.NET</a> and <a href="http://www.asp.net/" target="_blank">ASP.NET</a> would be included in the things that I would need to learn. I would also need to learn how to use <a href="http://msdn.microsoft.com/en-us/vstudio/default.aspx" target="_blank">Microsoft Visual Studio</a> since it would be the IDE that we would actually use. We had our own workstations and our very own company email accounts which we would use to communicate with each other. We were also allowed to borrow some books and download e-books from the company&#8217;s site to help us with our endeavors.</p>
<div id="attachment_702" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-702" title="My Workstation" src="http://2009summer.wordpress.com/files/2009/04/image0061.jpg?w=300" alt="My Workstation" width="300" height="225" /><p class="wp-caption-text">My Workstation</p></div>
<p>Since the project that we would work on was still undecided, to warm us up on the first 2 days, we were told to come up with a recommendation of what <a href="http://www.linux.org/" target="_blank">Linux</a> distribution to use for a group of computers that would be donated to schools in Zambales. The said distro should have an interface that would really be suited for <a href="http://en.wikipedia.org/wiki/E-learning" target="_blank">e-learning</a> especially for newbies in using computers (i.e at startup, a menu would pop-up and display icons on different subjects like math, etc). Of course, the software included in the distro should not contain pirated software, so basically we should just look for <a href="http://en.wikipedia.org/wiki/Free_and_open_source_software" target="_blank">FOSS</a>.</p>
<p>As I am not a Linux buff, I really did not know any other Linux distros aside from the ones discussed in our CS 140 class (Ubuntu, Redhat, Knoppix, Fedora, etc). Finally after long hours of &#8216;google-ing&#8217; and downloading ISOs to test using <a href="http://www.microsoft.com/windows/downloads/virtualpc/default.mspx" target="_blank">Microsoft Virtual PC</a>, we finally made our choices down to 2, <a href="http://www.linpus.com/products_1.php" target="_blank">Linpus Linux Lite</a> and <a href="http://www.canonical.com/projects/ubuntu/unr" target="_blank">Ubuntu Netbook Remix</a> (Since they had a menu-like desktop interface which was exactly what we need).</p>
<div class="wp-caption aligncenter" style="width: 346px"><img title="Linpus Linux Lite" src="http://farm3.static.flickr.com/2032/2324135485_7e2d3baccc.jpg" alt="Linpus Linux Lite" width="336" height="250" /><p class="wp-caption-text">Linpus Linux Lite!</p></div>
<div class="wp-caption aligncenter" style="width: 373px"><img title="Ubuntu Netbook Remix" src="http://farm4.static.flickr.com/3271/2548177765_416a8db059.jpg" alt="Ubuntu Netbook Remix" width="363" height="211" /><p class="wp-caption-text">Ubuntu Netbook Remix!</p></div>
<p>Actually, since our privileges in our user accounts was limited (installation was restricted), some of the Linux distros that we found like <a href="http://knosciences.tuxfamily.org/doku.php?id=knosciences:welcome">Knosciences</a> and Linpus Linux Lite didn&#8217;t work quite well on the MS Virtual PC (we could not install the VM Additions for Linux which I think would enable some features like mouse integration in the virtual machine).</p>
<p>We decided to recommend the Ubuntu Netbook Remix instead of Linpus Linux Lite since Ubuntu had <a href="http://edubuntu.org/">Edubuntu</a> (which already contained a bundle of educational suites like the <a href="http://edu.kde.org/" target="_blank">KDE Education Suite</a>, <a href="http://gcompris.net/" target="_blank">GCompris</a> and <a href="http://http://www.geekcomix.com/tux4kids/">Tux4Kids</a> which are really intended for school use) unlike in Linpus Linux Lite where we need to install the education suites one by one. We thought this would be a hassle for the students and teachers who would be using the computers (if for some reason, they need to re-install the OS again). We also recommended a Bible software, <a href="http://www.bibletime.info/" target="_blank">BibleTime</a>, which generally lets you browse the bible quickly and make notes, which was requested by Sir Myki.</p>
<p>That&#8217;s generally what we did during our first 2 days. There were many times of indecisiveness and nerve-wrecking moments. But we had our laughs and triumphs. I can&#8217;t wait to start working on our &#8216;not yet decided&#8217; project next week.</p>
<p>~Mel</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[IGEFI Selects Epicor Global Financial Management Solution]]></title>
<link>http://businesswithoutbarriers.wordpress.com/2009/04/06/igefi-selects-epicor-global-financial-management-solution/</link>
<pubDate>Mon, 06 Apr 2009 13:51:15 +0000</pubDate>
<dc:creator>businesswithoutbarriers</dc:creator>
<guid>http://businesswithoutbarriers.wordpress.com/2009/04/06/igefi-selects-epicor-global-financial-management-solution/</guid>
<description><![CDATA[Epicor today announced that leading fund software solutions provider IGEFI has selected Epicor for S]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p class="MsoBodyTextIndent2"><span lang="EN-US">Epicor today announced </span><span>that leading </span><span>fund software solutions provider IGEFI</span><span> has selected Epicor for Service Enterprises—an industry defining enterprise resource planning (ERP) solution designed to stimulate global collaboration and financial management in support of IGEFI’s projected double digit growth in 2009.<span>  </span></span></p>
<p class="MsoBodyTextIndent2"><strong><span>Local Outsourcing to a Single Global Solution</span></strong></p>
<p class="MsoNormal"><span>IGEFI is deploying Epicor’s global financial management solution at its eight offices worldwide. The Epicor solution replaces IGEFI’s local legacy systems supported by outsourced accountancy functions in each country and it will provide accurate, transparent views of IGEFI’s business, resourcing, financial planning and profitability. </span></p>
<p class="MsoNormal"><span>The Epicor solution manages and automates every aspect of business—from software and service bid management to engagement delivery and resource management to project accounting, portfolio management and global financial management—within a single solution. </span></p>
<p class="MsoNormal"><span>Based on Microsoft .NET technology, the Epicor solution is designed to be accessed by the user in real time over the Web, giving a dashboard style overview of key business metrics. IGEFI chose this approach to replace Excel® spreadsheets which will enable the firm to reduce operational costs within months of deployment.<span>  </span>By centralising data and making it more collaborative across the regional offices, IGEFI will have the power to gain greater control of its finances. IGEFI is expecting return on investment within three years.</span></p>
<p class="MsoNormal"><strong>Financial Regulation Challenges Simplified</strong></p>
<p class="MsoNormal"><span lang="EN-US">IGEFI anticipates the Epicor implementation will help it surmount the challenges faced by companies operating cross-geography in terms of differing financial regulations around accounting and technology. The Epicor solution is being integrated with IGEFI’s existing technology to speed up the processes involved in local taxation, employment legislation combination pricing models and payment terms. </span></p>
<p class="MsoNormal"><span>In addition to improving its </span><span lang="EN-US">financial accounting practices with the Epicor solution, IGEFI will also benefit from Epicor’s delivery of comprehensive project reporting to meet the needs of <a name="OLE_LINK2"></a><a name="OLE_LINK1"></a>.<span> </span></span></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Silverlight Makes Version 3]]></title>
<link>http://ziqbalbh.wordpress.com/2009/03/19/silverlight-makes-version-3/</link>
<pubDate>Thu, 19 Mar 2009 08:18:02 +0000</pubDate>
<dc:creator>ziqbalbh</dc:creator>
<guid>http://ziqbalbh.wordpress.com/2009/03/19/silverlight-makes-version-3/</guid>
<description><![CDATA[Here we are at MIX &#8216;09, and like the past couple of MIX events, Silverlight, this time v3, has]]></description>
<content:encoded><![CDATA[Here we are at MIX &#8216;09, and like the past couple of MIX events, Silverlight, this time v3, has]]></content:encoded>
</item>
<item>
<title><![CDATA[Tips : FM Real Time Editor FM 2009 v9.1]]></title>
<link>http://artupoke.wordpress.com/2009/02/27/tips-fm-real-time-editor/</link>
<pubDate>Fri, 27 Feb 2009 18:39:22 +0000</pubDate>
<dc:creator>Ekoputra Arif Budiman</dc:creator>
<guid>http://artupoke.wordpress.com/2009/02/27/tips-fm-real-time-editor/</guid>
<description><![CDATA[Hehehe&#8230;&#8230; Sekarang ada tools bagus lagi, kalo yang untuk udah bosen maen. Atau udah mumet]]></description>
<content:encoded><![CDATA[Hehehe&#8230;&#8230; Sekarang ada tools bagus lagi, kalo yang untuk udah bosen maen. Atau udah mumet]]></content:encoded>
</item>
<item>
<title><![CDATA[Что такое ALT.NET?]]></title>
<link>http://butaji.wordpress.com/2009/01/21/%d1%87%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5-altnet/</link>
<pubDate>Wed, 21 Jan 2009 07:54:31 +0000</pubDate>
<dc:creator>butaji</dc:creator>
<guid>http://butaji.wordpress.com/2009/01/21/%d1%87%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5-altnet/</guid>
<description><![CDATA[Введение По многочисленным WTF от коллег, хотел бы вкратце прояснить, а что же это такое. А дальше р]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h2 style="width:488px;height:28px;">Введение</h2>
<p>По многочисленным WTF от коллег, хотел бы вкратце прояснить, а что же это такое. А дальше решайте сами, интересно Вам это или нет.</p>
<h2 style="width:480px;height:28px;">
<p>Содержание</p>
</h2>
<p>&#160;</p>
<p>ALT.NET &#8211; Альтернативные инструменты и подходы к разработке на .NET.</p>
<p>Инструменты и подходы перечислены ниже в табличке HOTorNOT. </p>
<div align="center">
<table border="1" cellspacing="2" cellpadding="2" width="400" align="center">
<tbody>
<tr>
<td valign="top" width="200"><strong><font color="#ff0000" size="3">Hot</font></strong></td>
<td valign="top" width="200"><strong><font color="#808080" size="3">Not</font></strong></td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://www.castleproject.org">Castle, ActiveRecord</a>,             <br /><a href="http://www.nhibernate.org/">NHibernate</a></td>
<td valign="top" width="200">DataSets, Dataset Designer, Entity Framework, MS Application Blocks</td>
</tr>
<tr>
<td valign="top" width="200">MVC,<a href="http://www.nunit.org">NUnit</a>,<a href="http://www.castleproject.org">MonoRail</a></td>
<td valign="top" width="200">Web Forms, SCSF, VSTS, MSTest</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://www.xProgramming.com">XP, TDD</a>, <a href="http://www.controlChaos.com">Scrum</a></td>
<td valign="top" width="200">MSF Agile, MSF For CMMI</td>
</tr>
<tr>
<td valign="top" width="200">Evolutionary Design and Development</td>
<td valign="top" width="200">Big Design Up Front</td>
</tr>
<tr>
<td valign="top" width="200">Ruby + IronRuby, Python + IronPyton, <a href="http://en.wikipedia.org/wiki/Dynamic_Language_Runtime">DLR</a>, Silverlight(?)</td>
<td valign="top" width="200">?</td>
</tr>
<tr>
<td valign="top" width="200">OR\M (NHibernate, LLBLGen&#160; etc..)</td>
<td valign="top" width="200">DLinq, Data Access Block, DataSets, Plain ADO. NET</td>
</tr>
<tr>
<td valign="top" width="200">Open Source (Mono, SourceForge)</td>
<td valign="top" width="200">Application Blocks, CodePlex</td>
</tr>
<tr>
<td valign="top" width="200">MVC and MVP (RoR, MonoRail..)</td>
<td valign="top" width="200">Web Forms, CAB, Smart Client Factory</td>
</tr>
<tr>
<td valign="top" width="200">CVS, SVN</td>
<td valign="top" width="200">VSS, VSTS Source Control</td>
</tr>
<tr>
<td valign="top" width="200">Build Automation and CI            <br />(CI Factory, NAnt, FinalBuilder, CruiseControl..)</td>
<td valign="top" width="200">Team Build</td>
</tr>
<tr>
<td valign="top" width="200">TDD and Unit Testing            <br />NUnit, MbUnit, RhinoMocks, NMock, TypeMock</td>
<td valign="top" width="200">MSTest for unit testing, VSTS</td>
</tr>
<tr>
<td valign="top" width="200">Subtext, DasBlog, WordPress, TypePad, Blogger, FeedBurner</td>
<td valign="top" width="200">Microsoft MSN Spaces, Community Server(?)</td>
</tr>
<tr>
<td valign="top" width="200">Simplicity in Design</td>
<td valign="top" width="200">P&#38;P</td>
</tr>
<tr>
<td valign="top" width="200">Working at Google</td>
<td valign="top" width="200">Working at MS</td>
</tr>
<tr>
<td valign="top" width="200">Google Gears</td>
<td valign="top" width="200">Smart Client, MS Ajax</td>
</tr>
<tr>
<td valign="top" width="200">.NET 3.X (WF, WPF. Silverlight)</td>
<td valign="top" width="200">.NET 2.0</td>
</tr>
<tr>
<td valign="top" width="200">DI, IoC, Spring for .NET </td>
<td valign="top" width="200">Object Builder</td>
</tr>
<tr>
<td valign="top" width="200">Conferences:            <br />OSCon, RubyCon, Code Camps, DevTeach..</td>
<td valign="top" width="200">VSLive, TechEd, DevConnections..</td>
</tr>
</tbody>
</table></div>
<p>Считаю, что необходимо как минимум ознакомиться со всеми перечисленными понятиями как в правой, так и в левой колонках, следуя принципу анализ-синтез-best practices.</p>
<h2 style="width:456px;height:28px;">Материалы по теме</h2>
</p>
<p>&#160;</p>
<ol>
<li>Табличка любезно позаимствована здесь <a title="http://weblogs.asp.net/rosherove/archive/2007/06/04/alt-net-alternative-tools-and-approaches-to-mainstream-net.aspx" href="http://weblogs.asp.net/rosherove/archive/2007/06/04/alt-net-alternative-tools-and-approaches-to-mainstream-net.aspx">http://weblogs.asp.net/rosherove/archive/2007/06/04/alt-net-alternative-tools-and-approaches-to-mainstream-net.aspx</a> </li>
<li>Страница сообщества ALT.NET <a title="http://altdotnet.org/" href="http://altdotnet.org/">http://altdotnet.org/</a> </li>
<li>Статья в журнале MSDN “Что такое ALT .NET?” by Джереми Д. Миллер (Jeremy D. Miller) <a title="http://msdn.microsoft.com/ru-ru/magazine/cc337902.aspx" href="http://msdn.microsoft.com/ru-ru/magazine/cc337902.aspx">http://msdn.microsoft.com/ru-ru/magazine/cc337902.aspx</a> </li>
<li>Активно развивающаяся группа ALT.NET на Yahoo Groups <a title="http://tech.groups.yahoo.com/group/altdotnet/" href="http://tech.groups.yahoo.com/group/altdotnet/">http://tech.groups.yahoo.com/group/altdotnet/</a> </li>
</ol>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Головоломки на C# (Ответы)]]></title>
<link>http://butaji.wordpress.com/2009/01/11/%d0%b3%d0%be%d0%bb%d0%be%d0%b2%d0%be%d0%bb%d0%be%d0%bc%d0%ba%d0%b8-%d0%bd%d0%b0-c-%d0%be%d1%82%d0%b2%d0%b5%d1%82%d1%8b/</link>
<pubDate>Sun, 11 Jan 2009 08:21:21 +0000</pubDate>
<dc:creator>butaji</dc:creator>
<guid>http://butaji.wordpress.com/2009/01/11/%d0%b3%d0%be%d0%bb%d0%be%d0%b2%d0%be%d0%bb%d0%be%d0%bc%d0%ba%d0%b8-%d0%bd%d0%b0-c-%d0%be%d1%82%d0%b2%d0%b5%d1%82%d1%8b/</guid>
<description><![CDATA[Введение Итак, в предыдущем посте мною были приведены 6 вариантов необычного поведения языковых конс]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h2 style="width:482px;height:28px;">Введение</h2>
<p>Итак, в <a target="_blank" href="http://butaji.wordpress.com/2009/01/06/головоломки-на-c/">предыдущем посте</a> мною были приведены 6 вариантов необычного поведения языковых конструкций на C#. В этом посте я постараюсь дать более-менее внятное объяснение данных особенностей происходящего.</p>
<h2 style="width:479px;height:28px;">Ответы </h2>
<p>Далее я продублирую приведенные фрагменты кода, а так же дополню их описанием нюансов</p>
<ol>
<li>
<h3>Перегрузка</h3>
<p>Как вы думаете что выведет данный код и почему?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;

<span style="color:#0000ff;">class</span> Base
{
    <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">virtual</span> <span style="color:#0000ff;">void</span> Foo(<span style="color:#0000ff;">int</span> x)
    {
        Console.WriteLine (&#34;<span style="color:#8b0000;">Base.Foo(int)</span>&#34;);
    }
}

<span style="color:#0000ff;">class</span> Derived : Base
{
    <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">override</span> <span style="color:#0000ff;">void</span> Foo(<span style="color:#0000ff;">int</span> x)
    {
        Console.WriteLine (&#34;<span style="color:#8b0000;">Derived.Foo(int)</span>&#34;);
    }

    <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Foo(<span style="color:#0000ff;">object</span> o)
    {
        Console.WriteLine (&#34;<span style="color:#8b0000;">Derived.Foo(object)</span>&#34;);
    }
}

<span style="color:#0000ff;">class</span> Test
{
    <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        Derived d = <span style="color:#0000ff;">new</span> Derived();
        <span style="color:#0000ff;">int</span> i = 10;
        d.Foo(i);
    }
}</pre>
<p><font color="#ff0000">Результат:</font> <code>Derived.Foo(object).</code>Мы получили его таким, т.к. при выборе подходящего перегруженного метода в наследуемом типе компилятор игнорирует определенный в базовом типе метод, даже если он был переопределен в наследуемом!</p>
</li>
<li>
<h3>Порядок! Порядок!</h3>
<p>В каком порядке напечатаются строки на экране?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;

<span style="color:#0000ff;">class</span> Foo
{
    <span style="color:#0000ff;">static</span> Foo()
    {
        Console.WriteLine (&#34;<span style="color:#8b0000;">Foo</span>&#34;);
    }
}

<span style="color:#0000ff;">class</span> Bar
{
    <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">int</span> i = Init();

    <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">int</span> Init()
    {
        Console.WriteLine(&#34;<span style="color:#8b0000;">Bar</span>&#34;);
        <span style="color:#0000ff;">return</span> 0;
    }
}

<span style="color:#0000ff;">class</span> Test
{
    <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        Foo f = <span style="color:#0000ff;">new</span> Foo();
        Bar b = <span style="color:#0000ff;">new</span> Bar();
    }
} </pre>
<p><font color="#ff0000">Результат:</font> В <a href="http://www.yoda.arachsys.com/csharp/teasers-answers.html">варианте Джона</a> он получает следующую последовательность: “Bar, Foo”, однако при воспроизведении на своей машине у меня получилось: “Foo, Bar”. Я думаю, что причина различий лежит в разнице версий исполняющей среды (CLR, я исполнял код на версии 2.0.50727.3053). Он объясняет свои результаты тем, что у Foo конструктор статический, следовательно он не будет выполнен до точки первой инициализации этого класса. У Bar же нет статического конструктора, что позволяет CLR инициализировать его раньше. Однако, нет гарантии, что Bar будет напечатан вовсе, так как в нашем примере у CLR в принципе нет надобности инициализировать это статическое поле. Более подробно все эти нюансы описаны <a href="http://www.yoda.arachsys.com/csharp/beforefieldinit.html">здесь</a>!</p>
</li>
<li>
<h3>“Глупая” арифметика</h3>
<p>Компьютеры призваны помочь нам с арифметическими вычислениями, но почему тогда это выражение выводит false?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">double</span> d1 = 1.000001;
<span style="color:#0000ff;">double</span> d2 = 0.000001;
Console.WriteLine((d1-d2)==1.0); </pre>
<p>А такой вариант?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">double</span> sum = 0;
<span style="color:#0000ff;">for</span> (<span style="color:#0000ff;">int</span> i =0;i&#60;10 ;i++ )
{
  sum+=0.1;
}
Console.WriteLine(sum==1.0); </pre>
<p><font color="#ff0000">Результат:</font> Все значения в данных примерах хранятся в двоичном виде, хотя 1.0 может хранится как точное значение, 1.000001 будет храниться примерно как 1.0000009999999999177333620536956004798412322998046875, и 0.000001 так же будет сохранено в виде 0.000000999999999999999954748111825886258685613938723690807819366455078125. В связи с этим нельзя утверждать о равенстве в предыдущих примерах. <a href="http://www.yoda.arachsys.com/floatingpoint.html">Почитать подробнее о числах с плавающей точкой</a>.</p>
<p><font color="#ff0000">На заметку:</font> В связи с указанными выше особенностями работы с типами с плавающей точкой, однозначно рекомендуют не использовать их при работе с денежными единицами, в данном случае рекомендуют определять <a href="http://martinfowler.com/eaaCatalog/money.html">собственные денежные типы</a> (так называемые типы объект-значение [Object-Value]) с собственной логикой округления и прочих арифметических операций, а так же <a href="http://martinfowler.com/ap2/moneyBag.html">межвалютных операций</a>.</p>
</li>
<li>
<h3>Печать, печать, печать</h3>
<p>Ниже приведен код, использующий анонимные методы, каков будет результат его исполнения?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;
<span style="color:#0000ff;">using</span> System.Collections.Generic;

<span style="color:#0000ff;">class</span> Test
{
    <span style="color:#0000ff;">delegate</span> <span style="color:#0000ff;">void</span> Printer();

    <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        List&#60;Printer&#62; printers = <span style="color:#0000ff;">new</span> List&#60;Printer&#62;();
        <span style="color:#0000ff;">for</span> (<span style="color:#0000ff;">int</span> i=0; i &#60; 10; i++)
        {
            printers.Add(<span style="color:#0000ff;">delegate</span> { Console.WriteLine(i); });
        }

        <span style="color:#0000ff;">foreach</span> (Printer printer <span style="color:#0000ff;">in</span> printers)
        {
            printer();
        }
    }
} </pre>
<p><font color="#ff0000">Результат:</font> О эта радость от <a href="http://www.yoda.arachsys.com/csharp2/delegates.html#captured.variables">фиксированных переменных</a>. В данном примере всего одна переменная и её значение изменяется при каждой итерации в цикле. Анонимные методы фиксируют переменную, а не её значение, следовательно в результате мы получим десть раз число 10 на выводе!</p>
</li>
<li>
<h3>Ничего странного с компилятором тут не случилось</h3>
<p>Этот код скомпилится? Как это? Что бы это значило?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;

<span style="color:#0000ff;">class</span> Test
{
    <span style="color:#0000ff;">enum</span> Foo { Bar, Baz };

    <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        Foo f = 0.0;
        Console.WriteLine(f);
    }
}</pre>
<p><font color="#ff0000"><font color="#ff0000">Результат</font>:</font> Это не должно компилироваться, однако это происходит. Это не должно копилироваться, в связи с тем, что только значение 0 может быть конвертированно в значение по умолчанию для enum. В примере же значение 0.0 имеет место быть корректным в связи с небольшой недоработкой компилятора. В результате будет напечатано <code>Bar</code>, т.к. 0 будет значением <code>Foo</code>.</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;

<span style="color:#0000ff;">class</span> Test
{
    <span style="color:#0000ff;">enum</span> Foo { Bar, Baz };

    <span style="color:#0000ff;">const</span> <span style="color:#0000ff;">int</span> One = 1;
    <span style="color:#0000ff;">const</span> <span style="color:#0000ff;">int</span> Une = 1;

    <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        Foo f = One-Une;
        Console.WriteLine(f);
    }
} </pre>
<p><font color="#ff0000"><font color="#ff0000">Результат</font>:</font> Данный пример не будет компилироваться под C#2.0, но прекрасно компилируется под C#3.0. Это известная особенность, объяснить это можно тем, что оптимизированный алгоритм выполняет вычисления значения One-Une раньше, а следовательно перечисление даёт своё значение по-умолчанию 0.</p>
</li>
<li>
<h3>Вывод типа</h3>
<p>Какой же вариант будет выведен на экран?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;

<span style="color:#0000ff;">class</span> Test
{
    <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        Foo(&#34;<span style="color:#8b0000;">Hello</span>&#34;);
    }

    <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Foo(<span style="color:#0000ff;">object</span> x)
    {
        Console.WriteLine(&#34;<span style="color:#8b0000;">object</span>&#34;);
    }

    <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Foo&#60;T&#62;(<span style="color:#0000ff;">params</span> T[] x)
    {
        Console.WriteLine(&#34;<span style="color:#8b0000;">params T[]</span>&#34;);
    }
} </pre>
<p><font color="#ff0000"><font color="#ff0000">Результат</font>:</font> <code>params T[]</code> будет напечатан. Но почему же компилятор выбирает создание массива, хотя в этом нет надобности? Этому есть две причины. Во-первых при выборе перегруженных методов <code>T</code> будет рассматриваться как <code>System.String</code>. Ничего страшного пока в этом нет. </p>
<p>Однако при выборе “лучшего” метода среди параметров <code>string x</code> and <code>params string[],<code>x </code></code>формально будет приоритетнее. Однако с нашей точки зрения эффективности выбор между <code>object x</code> и <code>params string[] x </code>падёт на метод с <code>params string[] x </code>в связи с тем, что он не требует преобразований типов.</p>
</li>
</ol>
<h2 style="width:454px;height:28px;">Материалы</h2>
<p>&#160;</p>
<ol>
<li>Подготовлено по материалам <a title="http://www.yoda.arachsys.com/csharp/teasers-answers.html" href="http://www.yoda.arachsys.com/csharp/teasers-answers.html">http://www.yoda.arachsys.com/csharp/teasers-answers.html</a> </li>
<li>А так же <a title="http://martinfowler.com/" href="http://martinfowler.com/">http://martinfowler.com/</a> </li>
</ol>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Головоломки на C#]]></title>
<link>http://butaji.wordpress.com/2009/01/06/%d0%b3%d0%be%d0%bb%d0%be%d0%b2%d0%be%d0%bb%d0%be%d0%bc%d0%ba%d0%b8-%d0%bd%d0%b0-c/</link>
<pubDate>Mon, 05 Jan 2009 21:34:09 +0000</pubDate>
<dc:creator>butaji</dc:creator>
<guid>http://butaji.wordpress.com/2009/01/06/%d0%b3%d0%be%d0%bb%d0%be%d0%b2%d0%be%d0%bb%d0%be%d0%bc%d0%ba%d0%b8-%d0%bd%d0%b0-c/</guid>
<description><![CDATA[Вступление &#160; Казалось бы, что столько уже написано строк кода на C#, что не может быть уже ниче]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h2>Вступление</h2>
<p>&#160;</p>
<p><img style="display:inline;margin:0 10px 0 0;" alt="" align="left" src="http://bp0.blogger.com/_u337ThvlyDw/RsPsQdMaYUI/AAAAAAAAAjM/qnhqI5x5aCo/s320/Intelligence+test.jpg" width="157" height="180" /></p>
<p>Казалось бы, что столько уже написано строк кода на C#, что не может быть уже ничего непредсказуемого, но язык всё равно оставляет за собой приятные неожиданности и сюрпризы, которые заставляют извилины встрепенуться и немножечко поработать в новом направлении.</p>
</p>
<p>В данной статье я хочу привести несколько примеров немного неожиданного поведения конструкций на C#.</p>
<h2 style="width:475px;height:28px;">Примеры</h2>
<p>Ниже приведены 6 примеров немного нестандартных ситуаций, но довольно интересные для ознакомления:</p>
<ol>
<li>
<h3>Перегрузка</h3>
<p>Как вы думаете что выведет данный код и почему?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;
<span style="color:#0000ff;">class</span> Base
{
<span style="color:#0000ff;">public</span> <span style="color:#0000ff;">virtual</span> <span style="color:#0000ff;">void</span> Foo(<span style="color:#0000ff;">int</span> x)
    {
        Console.WriteLine (&#34;<span style="color:#8b0000;">Base.Foo(int)</span>&#34;);
    }
}
<span style="color:#0000ff;">class</span> Derived : Base
{
<span style="color:#0000ff;">public</span> <span style="color:#0000ff;">override</span> <span style="color:#0000ff;">void</span> Foo(<span style="color:#0000ff;">int</span> x)
    {
        Console.WriteLine (&#34;<span style="color:#8b0000;">Derived.Foo(int)</span>&#34;);
    }
<span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Foo(<span style="color:#0000ff;">object</span> o)
    {
        Console.WriteLine (&#34;<span style="color:#8b0000;">Derived.Foo(object)</span>&#34;);
    }
}
<span style="color:#0000ff;">class</span> Test
{
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        Derived d = <span style="color:#0000ff;">new</span> Derived();
<span style="color:#0000ff;">int</span> i = 10;
        d.Foo(i);
    }
}</pre>
</li>
<li>
<h3>Порядок! Порядок!</h3>
<p>В каком порядке напечатаются строки на экране?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;
<span style="color:#0000ff;">class</span> Foo
{
<span style="color:#0000ff;">static</span> Foo()
    {
        Console.WriteLine (&#34;<span style="color:#8b0000;">Foo</span>&#34;);
    }
}
<span style="color:#0000ff;">class</span> Bar
{
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">int</span> i = Init();
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">int</span> Init()
    {
        Console.WriteLine(&#34;<span style="color:#8b0000;">Bar</span>&#34;);
<span style="color:#0000ff;">return</span> 0;
    }
}
<span style="color:#0000ff;">class</span> Test
{
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        Foo f = <span style="color:#0000ff;">new</span> Foo();
        Bar b = <span style="color:#0000ff;">new</span> Bar();
    }
}</pre>
</li>
<li>
<h3>“Глупая” арифметика</h3>
<p>Компьютеры призваны помочь нам с арифметическими вычислениями, но почему тогда это выражение выводит false?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">double</span> d1 = 1.000001;
<span style="color:#0000ff;">double</span> d2 = 0.000001;
Console.WriteLine((d1-d2)==1.0);</pre>
<p>
      <br />А такой вариант? </p>
<p></p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">double</span> sum = 0;
<span style="color:#0000ff;">for</span> (<span style="color:#0000ff;">int</span> i =0;i&#60;10 ;i++ )
{
  sum+=0.1;
}
Console.WriteLine(sum==1.0);</pre>
</li>
<li>
<h3>Печать, печать, печать</h3>
<p>Ниже приведен код, использующий анонимные методы, каков будет результат его исполнения?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;
<span style="color:#0000ff;">using</span> System.Collections.Generic;
<span style="color:#0000ff;">class</span> Test
{
<span style="color:#0000ff;">delegate</span> <span style="color:#0000ff;">void</span> Printer();
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        List&#60;Printer&#62; printers = <span style="color:#0000ff;">new</span> List&#60;Printer&#62;();
<span style="color:#0000ff;">for</span> (<span style="color:#0000ff;">int</span> i=0; i &#60; 10; i++)
        {
            printers.Add(<span style="color:#0000ff;">delegate</span> { Console.WriteLine(i); });
        }
<span style="color:#0000ff;">foreach</span> (Printer printer <span style="color:#0000ff;">in</span> printers)
        {
            printer();
        }
    }
}</pre>
</li>
<li>
<h3>Ничего странного с компилятором тут не случилось</h3>
<p>Этот код скомпилится? Как это? Что бы это значило?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;
<span style="color:#0000ff;">class</span> Test
{
<span style="color:#0000ff;">enum</span> Foo { Bar, Baz };
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        Foo f = 0.0;
        Console.WriteLine(f);
    }
}</pre>
<p>
      <br />А как Вам такой вариант? </p>
<p></p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;
<span style="color:#0000ff;">class</span> Test
{
<span style="color:#0000ff;">enum</span> Foo { Bar, Baz };
<span style="color:#0000ff;">const</span> <span style="color:#0000ff;">int</span> One = 1;
<span style="color:#0000ff;">const</span> <span style="color:#0000ff;">int</span> Une = 1;
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        Foo f = One-Une;
        Console.WriteLine(f);
    }
}</pre>
</li>
<li>
<h3>Вывод типа</h3>
<p>Какой же вариант будет выведен на экран?</p>
<pre style="background-color:black;font-size:14px;padding:10px;"><span style="color:#0000ff;">using</span> System;
<span style="color:#0000ff;">class</span> Test
{
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main()
    {
        Foo(&#34;<span style="color:#8b0000;">Hello</span>&#34;);
    }
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Foo(<span style="color:#0000ff;">object</span> x)
    {
        Console.WriteLine(&#34;<span style="color:#8b0000;">object</span>&#34;);
    }
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Foo&#60;T&#62;(<span style="color:#0000ff;">params</span> T[] x)
    {
        Console.WriteLine(&#34;<span style="color:#8b0000;">params T[]</span>&#34;);
    }
}</pre>
</li>
</ol>
<h2>Материалы</h2>
<p>Подготовлено по материалам <a title="http://www.yoda.arachsys.com/csharp/teasers.html" href="http://www.yoda.arachsys.com/csharp/teasers.html">http://www.yoda.arachsys.com/csharp/teasers.html</a></p>
<p>Ответы на поставленные задачи будут в <a target="_blank" href="http://butaji.wordpress.com/2009/01/11/головоломки-на-c-ответы/">следующем посте</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Lazy Computation in C# (Ленивые вычисления в C#)]]></title>
<link>http://butaji.wordpress.com/2009/01/02/lazy-computation-in-c-%d0%bb%d0%b5%d0%bd%d0%b8%d0%b2%d1%8b%d0%b5-%d0%b2%d1%8b%d1%87%d0%b8%d1%81%d0%bb%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b2-c/</link>
<pubDate>Fri, 02 Jan 2009 11:11:40 +0000</pubDate>
<dc:creator>butaji</dc:creator>
<guid>http://butaji.wordpress.com/2009/01/02/lazy-computation-in-c-%d0%bb%d0%b5%d0%bd%d0%b8%d0%b2%d1%8b%d0%b5-%d0%b2%d1%8b%d1%87%d0%b8%d1%81%d0%bb%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b2-c/</guid>
<description><![CDATA[Немного теории. Большинство современных языков разработки, используемых на практике (таких как C#, V]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h2 style="width:459px;height:28px;">Немного теории.</h2>
<p>Большинство современных языков разработки, используемых на практике (таких как C#, VB.NET, C++, Python и Java) реализуют так называемые <a href="http://en.wikipedia.org/wiki/Eager_evaluation">немедленные вычисления</a>, это означает, что операция выполняется, так только становятся известны значения её операндов. Однако, ясно, что немедленное вычисление многих функций не всегда необходимо и рационально с точки зрения производительности, поэтому само собой напрашивается решение, позволяющее отложить эти вычисления на тот момент, когда они нам будут действительно нужны.</p>
<p>Мартин Фаулер в свой книге <a href="http://www.books.ru/shop/books/156126?partner=butaji">PoEAA</a> вводит понятие паттерна <a href="http://martinfowler.com/eaaCatalog/lazyLoad.html">Lazy Load</a> (загрузка по требованию, ленивая загрузка), суть которого состоит в том, что объект не содержит данные, но знает где их взять, если они ему станут нужны. Это как раз то, о чём мы и ведем речь, следовательно воспользуемся этим шаблоном.</p>
<p>Реализовать данный шаблон можно несколькими различными вариантами:</p>
<ol>
<li><a href="http://en.wikipedia.org/wiki/Lazy_loading#Lazy_initialization">Lazy Initialization</a> – Инициализация по требованию. Это самый простой способ – реализовать проверку поля на null и в случае необходимости заполнять его данными. </li>
<li><a href="http://en.wikipedia.org/wiki/Lazy_loading#Virtual_proxy">Virtual Proxy</a> – Виртуальный прокси-объект. Метод несколько усложнен проблемой идентификации объектов, т.к. вместо них, до инициализации, выступают заменители. </li>
<li><a href="http://en.wikipedia.org/wiki/Lazy_loading#Ghost">Ghost</a> – Фиктивный объект, Призрак. Это реальный объект с неполным состоянием. </li>
<li><a href="http://en.wikipedia.org/wiki/Lazy_loading#Value_holder">Value Holder</a> – Диспетчер значения. Объект является оболочкой для некоторого значения. Так же не самый лучший вариант в связи с проблемами типизации. </li>
</ol>
<h2 style="width:445px;height:28px;">Примеры реализации.</h2>
<p>В рассмотренном ниже примере мы воспользуемся первым способом, как наиболее наглядным и простым в реализации.</p>
<p>Мы напишем обобщенный класс Lazy&#60;T&#62;, который будет представлять загрузку по требованию, а так же кэшировать результат вычислений для дальнейших обращений к ним.</p>
<pre style="font-size:14px;"><span style="color:#0000ff;">using</span> System.Linq;
<span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> Lazy&#60;T&#62; {
<span style="color:#0000ff;">private</span> Func&#60;T&#62; func;
<span style="color:#0000ff;">private</span> T result;
<span style="color:#0000ff;">private</span> <span style="color:#0000ff;">bool</span> hasValue;
<span style="color:#0000ff;">public</span> Lazy(Func&#60;T&#62; func) {
<span style="color:#0000ff;">this</span>.func = func;
<span style="color:#0000ff;">this</span>.hasValue = <span style="color:#0000ff;">false</span>;
  }
<span style="color:#0000ff;">public</span> T Value {
<span style="color:#0000ff;">get</span> {
<span style="color:#0000ff;">if</span> (!<span style="color:#0000ff;">this</span>.hasValue) {
<span style="color:#0000ff;">this</span>.result = <span style="color:#0000ff;">this</span>.func();
<span style="color:#0000ff;">this</span>.hasValue = <span style="color:#0000ff;">true</span>;
      }
<span style="color:#0000ff;">return</span> <span style="color:#0000ff;">this</span>.result;
    }
  }
}</pre>
<p>Данный класс имеет три поля:</p>
<ul>
<li>func – делегат Func&#60;T&#62; инкапсулирующего передаваемый метод (находится в пространстве имён Linq, используется для инкапсуляции метода без параметров); </li>
<li>result – поле для хранения результата вычислений; </li>
<li>hasValue – флаг для обозначния, производились ли уже вычисления. </li>
</ul>
<p>Как же можно использовать данный класс</p>
<pre style="font-size:14px;">Lazy&#60;<span style="color:#0000ff;">int</span>&#62; lazy = <span style="color:#0000ff;">new</span> Lazy&#60;<span style="color:#0000ff;">int</span>&#62;(() =&#62; {
    Console.WriteLine(&#34;<span style="color:#8b0000;">calculating...</span>&#34;);
<span style="color:#0000ff;">return</span> 42;
  });
Console.WriteLine(&#34;<span style="color:#8b0000;">starting...</span>&#34;);
Console.WriteLine(&#34;<span style="color:#8b0000;">result = {0}</span>&#34;, lazy.Value);
Console.WriteLine(&#34;<span style="color:#8b0000;">result (again) = {0}</span>&#34;, lazy.Value);</pre>
<p>Результат работы программы:</p>
<p>starting&#8230;</p>
<p>calculating&#8230;</p>
<p>result = 42</p>
<p>result (again) = 42</p>
<p>Мы наглядно видим, как в поле func заносится лямба-выражение, результат которого выводится после вызова свойства Value. Причём повторный вызов свойства выводит кэшированные данные.</p>
<p>Далее, думаю стоит написать обертку-помощник для нашего класса, с целью повышения наглядности работы с ним.</p>
<pre style="font-size:14px;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">class</span> Lazy {
<span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> Lazy&#60;T&#62; New&#60;T&#62;(Func&#60;T&#62; func) {
<span style="color:#0000ff;">return</span> <span style="color:#0000ff;">new</span> Lazy&#60;T&#62;(func);
  }
}</pre>
<p>Будет он выглядеть примерно так. Кстати, примерно также выглядит System.Nullable (один из стандартных классов .NET).</p>
<p>Используя класс Lazy мы можем создать экземпляр нашего типа, вызвав метод Lazy.New вместо написания new Lazy&#60;int&#62; к примеру. Для ещё пущего повышения наглядности будем использовать атрибут var.</p>
<pre style="font-size:14px;"><span style="color:#0000ff;">int</span> a = 22, b = 20;
var lazy = Lazy.New(() =&#62; {
    Console.WriteLine(&#34;<span style="color:#8b0000;">calculating...</span>&#34;);
<span style="color:#0000ff;">return</span> <span style="color:#0000ff;">new</span> { Mul = a*b, Sum = a+b };
  });
Console.WriteLine(&#34;<span style="color:#8b0000;">Mul = {0}, Sum = {1}</span>&#34;,
  lazy.Value.Mul, lazy.Value.Sum);</pre>
<p>Все наши приобритения продемонстрированы Выше в примере, расчитывающий сумму и произведения двух чисел.</p>
<p>Далее хотелось бы рассмотреть пример со значениями аргументов в качестве значений, инициализируемых по требованию, что несомненно очень удобно при использовании такого языка, как C#, в котором инициализация аргументов происходит немедленно.</p>
<pre style="font-size:14px;"><span style="color:#0000ff;">static</span> Random rnd = <span style="color:#0000ff;">new</span> Random();
<span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> UseRandomArgument(Lazy&#60;<span style="color:#0000ff;">int</span>&#62; a0, Lazy&#60;<span style="color:#0000ff;">int</span>&#62; a1) {
<span style="color:#0000ff;">int</span> res;
<span style="color:#0000ff;">if</span> (rnd.Next(2) == 0)
    res = a0.Value;
<span style="color:#0000ff;">else</span>
    res = a1.Value;
  Console.WriteLine(&#34;<span style="color:#8b0000;">result = {0}</span>&#34;, res);
}</pre>
<p>Как хорошо видно в данном примере, один из аргументов метода может не использоваться вовсе.</p>
<pre style="font-size:14px;">var calc1 = Lazy.New(() =&#62; {
    Console.WriteLine(&#34;<span style="color:#8b0000;">Calculating #1</span>&#34;);
<span style="color:#0000ff;">return</span> 42;
  });
var calc2 = Lazy.New(() =&#62; {
    Console.WriteLine(&#34;<span style="color:#8b0000;">Calculating #2</span>&#34;);
<span style="color:#0000ff;">return</span> 44;
  });
UseRandomArgument(calc1, calc2);
UseRandomArgument(calc1, calc2);</pre>
<p>Напишем обработчик для данного метода и посмотрим, какие из аргументов будут проинициализированы:</p>
<pre style="font-size:14px;">Calculating #1
Result = 42
Result = 42</pre>
<p>Повторим запуск приложения:</p>
<pre style="font-size:14px;">Calculating #1
Result = 42
Calculating #2
Result = 44</pre>
<p><strong></strong></p>
<h2 style="width:473px;height:29px;">Пример: Список шрифтов с предосмотром.</h2>
<p>&#160;</p>
<p>На картинке ниже представлен эскиз нашего будущего приложения. Он содержит выпадающий список с наименованиями шрифтов, а так же область, в которой будет выводится изображение для выбранного шрифта. Как не трудно догадаться при заполнении списка не очень бы хотелось инициализировать все картинки в память компьютера, в связи с чем мы воспользуемся созданным нами классом Lazy&#60;T&#62;.</p>
<p><img alt="" src="http://i.msdn.microsoft.com/bb870976.Figure1(en-us).png" /></p>
<p>Наш класс для хранения информации о шрифтах будет следующим:</p>
<pre style="font-size:14px;"><span style="color:#0000ff;">private</span> <span style="color:#0000ff;">class</span> FontInfo {
<span style="color:#0000ff;">public</span> Lazy&#60;Bitmap&#62; Preview { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }
<span style="color:#0000ff;">public</span> <span style="color:#0000ff;">string</span> Name { <span style="color:#0000ff;">get</span>; <span style="color:#0000ff;">set</span>; }
}</pre>
<p>Метод для генерации и отрисовки изображения шрифта:</p>
<pre style="font-size:14px;"><span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> DrawFontPreview(FontFamily f, Bitmap bmp) {
  Rectangle rc = <span style="color:#0000ff;">new</span> Rectangle(0, 0, 300, 200);
  StringFormat sf = <span style="color:#0000ff;">new</span> StringFormat();
  sf.Alignment = StringAlignment.Center;
  sf.LineAlignment = StringAlignment.Center;
<span style="color:#0000ff;">string</span> lipsum = &#34;<span style="color:#8b0000;">Lorem ipsum dolor sit amet, consectetuer </span>&#34; +
    &#34;<span style="color:#8b0000;">adipiscing elit. Etiam ut mi blandit turpis euismod malesuada. </span>&#34; +
    &#34;<span style="color:#8b0000;">Mauris congue pede vitae lectus. Ut faucibus dignissim diam. </span>&#34;;
<span style="color:#0000ff;">using</span> (Font fnt = <span style="color:#0000ff;">new</span> Font(f, 15, FontStyle.Regular))
<span style="color:#0000ff;">using</span> (Graphics gr = Graphics.FromImage(bmp)) {
    gr.FillRectangle(Brushes.White, rc);
    gr.DrawString(lipsum, fnt, Brushes.Black, rc, sf);
  }
}</pre>
<p>На загрузке формы нашего приложения связываем наши значения с методом выбора шрифта из списка.</p>
<pre style="font-size:14px;"><span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> FontForm_Load(<span style="color:#0000ff;">object</span> sender, EventArgs e) {
  var fontInfo = FontFamily.Families.Select(f =&#62; {
<span style="color:#008000;">// Создаем значение по требованию для картинки</span>
      var preview = Lazy.New(() =&#62; {
          Bitmap bmp = <span style="color:#0000ff;">new</span> Bitmap(300, 200);
          DrawFontPreview(f, bmp);
<span style="color:#0000ff;">return</span> bmp;
        });
<span style="color:#008000;">// Возвращаем шрифт с названием и превьюшкой</span>
      <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">new</span> FontInfo { Name = f.Name, Preview = preview };
    });
<span style="color:#008000;">// Используем дата-байдинг для заполнения списка</span>
  fontCombo.DataSource = fontInfo.ToList();
  fontCombo.DisplayMember = &#34;<span style="color:#8b0000;">Name</span>&#34;;
}</pre>
<p>При изменении выбранного шрифта перерисовываем изображение:</p>
<pre style="font-size:14px;"><span style="color:#0000ff;">private</span> <span style="color:#0000ff;">void</span> fontCombo_SelectedIndexChanged(<span style="color:#0000ff;">object</span> sender, EventArgs e) {
  FontInfo fnt = (FontInfo)fontCombo.SelectedItem;
  fontPreview.Image = fnt.Preview.Value;
}</pre>
<h2 style="width:450px;height:28px;">Заключение</h2>
<p>В данной статье Вы ознакомились с реализацией паттерна “загрузка по требованию” на языке C#, данный шаблон предоставляет великолепные возможности откладывать вычисления до того момента, пока они не будут действительно необходимы. Так же вспомнили те возможности C# версии 3.0, которые делают код нагляднее, а его написание проще (Неявное объявление типов, анонимные методы и лямбда-выражения, операторы запросов, и анонимные типы)</p>
<h2 style="width:485px;height:29px;">Материалы</h2>
<p>&#160; </p>
<ol>
<li><a href="http://msdn.microsoft.com/en-us/vcsharp/bb870976.aspx">http://msdn.microsoft.com/en-us/vcsharp/bb870976.aspx</a> (При написании данной статьи я руководствовался данной работой, все рассмотренные примеры, взяты там же) </li>
<li><a href="http://www.books.ru/shop/books/156126?partner=butaji">Мартин Фаулер “Архитектура корпоративных приложений”</a> (Идея данного паттерна изложена М. Фаулером в этой книге) </li>
</ol>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Обзор языка Boo! &ndash; как средства организации DSL Вашего приложения]]></title>
<link>http://butaji.wordpress.com/2008/12/28/%d0%be%d0%b1%d0%b7%d0%be%d1%80-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0-boo-%d0%ba%d0%b0%d0%ba-%d1%81%d1%80%d0%b5%d0%b4%d1%81%d1%82%d0%b2%d0%b0-%d0%be%d1%80%d0%b3%d0%b0%d0%bd%d0%b8%d0%b7%d0%b0%d1%86/</link>
<pubDate>Sun, 28 Dec 2008 20:11:28 +0000</pubDate>
<dc:creator>butaji</dc:creator>
<guid>http://butaji.wordpress.com/2008/12/28/%d0%be%d0%b1%d0%b7%d0%be%d1%80-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0-boo-%d0%ba%d0%b0%d0%ba-%d1%81%d1%80%d0%b5%d0%b4%d1%81%d1%82%d0%b2%d0%b0-%d0%be%d1%80%d0%b3%d0%b0%d0%bd%d0%b8%d0%b7%d0%b0%d1%86/</guid>
<description><![CDATA[Одна из вещей, как известно, способная помочь вам стать лучше в качестве разработчика, заключается в]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://butaji.files.wordpress.com/2008/12/boologo128-med.png"><img style="display:inline;border-width:0;margin:0 20px 20px;" title="boo-logo-128_med" src="http://butaji.files.wordpress.com/2008/12/boologo128-med-thumb.png?w=64&#038;h=85" border="0" alt="boo-logo-128_med" width="64" height="85" align="left" /></a></p>
<p>Одна из вещей, как известно, способная помочь вам стать лучше в качестве разработчика, заключается в изучении нового языка. Даже если Вы никогда не будете пользоваться этим языком в Вашей повседневной трудовой деятельности, он поможет Вам лучше понять языки, с которыми Вы работаете.</p>
<p>В последнее время меня так и тянет насесть на какой-нибудь новенький язык программирования, особенно что-нибудь на типа Ruby или Python, но в связи с моей привязанностью среде разработки (Visual Studio, неверно это не очень хорошо – зависеть от IDE <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) и затруднительной ситуацией с разработкой на ней на динамических языках (надеюсь это временное затруднение) от них пока пришлось отказаться. В то же время меня интересуют такие области как метапрограммирование и реализация DSL (Domain-Specific Language == проблемно-ориентированный язык приложения), и в этой связи видится мне, что Boo является весьма интересным языком. К тому же Boo &#8211; язык CLR, что очень даже не плохо для изучения.</p>
<p>Поэтому я решил, что когда я узнаю Boo и когда почувствую уверенность в Boo, я попробую реализовать DSL и реализовать именно на Boo для своего ближайшего проекта.</p>
<p><strong>Что такое Boo?</strong></p>
<p>Boo представляет собой open-source объектно-ориентированный статически типизированный язык программирования для CLR с Python’о-подобным синтаксисом, язык увидел свет в 2004 году из-под рук Rodrigo B. de Oliveira. В настоящее время последняя версия 0.8.2, но даже если нет еще версии 1.0, это действительно очень стабильной и зрелый язык, который можно использовать на производстве.</p>
<p>Основные концепции в Boo:</p>
<ol>
<li>Дать компилятору сделать большую часть работы, для того чтобы помочь языку выглядеть более динамическим с автоматическим объявлением переменных, выводом и приведением типов.</li>
<li>В то же время он предоставляет возможности для выполнения статической компиляции, проверку ошибок во время компиляции.</li>
<li>Boo также предоставляет функциональную составляющую в том, что функции могут использоваться в качестве возвращаемого значения, как аргументы, хранимые в переменных, а так же как объекты.</li>
<li>Boo имеет первоклассные генераторы, это конструкций, способные производить более одного значения при использовании итерации цикла (“return a for a in apples if a.IsRipe”).</li>
<li>Boo также поддерживает утиную типизацию (Duck Typing), которая позволяет отказаться от обеспечения безопасности статических типов и принимать любой объект, который просто имеет соответствующие методы и свойства, определяемые во время выполнения.</li>
<li>Boo также имеет расширения методов и свойств (extension methods and extension properties).</li>
</ol>
<p>Одним из наиболее интересных функций Boo является расширяемость процесса компиляции, которая позволяет управлять компиляцией и изменять или добавлять функции. Можно добавить подпрограмм для проверки конвенции кода, генерирования отчётов или преобразовывания кода. То, что Вы сможете сделать в C# с помощью тулзы посткомпиляции такой, как <a href="http://www.postsharp.org/">PostSharp</a> и только ограниченный набор действий. В Boo Вы могли бы например автоматически преобразовать класс в одноэкземплярный (pattern Singleton), просто добавив атрибут следующим образом:</p>
<pre style="font-size:14px;">[singleton]
<span style="color:#0000ff;">class</span> MySingleton: pass</pre>
<p>PostSharp просто не смог бы сделать этого, свойство экземпляра было бы обработано поздно. Это действительно открывает множество возможностей и Вы ограничиваетесь только Вашим пониманием внутренней функциональности компилятора и набора его возможностей.</p>
<p>В Boo пробелы имеют важное значение как в python, но есть возможность включить режим “Whitespace Agnostic”, позволяющий оканчивать выражение с помощью “end”, который избавит Вас от возможных проблем с пробелами.</p>
<p><strong>Что нужно для начала работы с Boo?</strong></p>
<p>Главным образом если Вы хотите узнать Boo, достаточно иметь <a href="http://devtalk.dk/ct.ashx?id=538a5c29-d805-4598-b21b-0e23226a87a7&#38;url=http%3a%2f%2fdist.codehaus.org%2fboo%2fdistributions%2f%3fC%3dM%3bO%3dD">последнюю версию Boo</a> . В папке bin, Вы найдете файл “Booish.exe”, являющийся интерпретатором командной строки Boo, которая позволяет проиграться с синтаксисом языка.<img style="display:block;margin-left:auto;margin-right:auto;border:0 none #000000;" title="image" src="http://devtalk.dk/content/binary/WindowsLiveWriter/LearningLanguageBOOPart1GettingStarted_14EC8/image_thumb.png" border="0" alt="image" width="244" height="137" /></p>
<p>Для разработки нам необходима IDE, и следовательно у нас два варианта.</p>
<p>Большинство Boo разработчиков работают с <a href="http://devtalk.dk/ct.ashx?id=538a5c29-d805-4598-b21b-0e23226a87a7&#38;url=http%3a%2f%2fsourceforge.net%2fprojects%2fsharpdevelop">SharpDevelop</a> , и если Вы скачаете последнюю версию, в ней будет Boo полностью готовый к использованию. Эта IDE имеет преимущество, с точки зрения создания DSL, так как в ней легче добавить функции автозавершения кода и подсветки синтаксиса, в Visual Studio же потребуются написать лексер и парсер; в SharpDevelop можно сделать это с помощью XML-файла.</p>
<p>Но с другой стороны Visual Studio является зрелой IDE, и с <a href="http://devtalk.dk/ct.ashx?id=538a5c29-d805-4598-b21b-0e23226a87a7&#38;url=http%3a%2f%2fcodeplex.com%2fboolangstudio">BooLangStudio</a> вы получите Boo интегрированный в Visual Studio. Люди жалуются, что проект является нестабильным и это лишь альфа выпуск<span style="text-decoration:line-through;">, так же я встретился в нём с проблемами уникода (UTF8), которые пока не смог разрешить,</span> но у меня пока нет весомых замечаний.</p>
<p>В настоящее время я буду пользоваться Visual Studio в силу привычки, но я могу изменить свой взгляд при продолжении этой статьи.</p>
<p>При написании данного поста я руководствовался <a href="http://devtalk.dk/2008/10/02/learning+boo+and+dsl+part+1+getting+started.aspx">данной работой</a>, можно даже сказать переводил, но перевод очень личный и свободный.</p>
<p>Продолжение следует…</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ASP.NET 2.0 Architecture ]]></title>
<link>http://praveensunsetpoint.wordpress.com/2008/11/13/aspnet-20-architecture/</link>
<pubDate>Thu, 13 Nov 2008 10:50:58 +0000</pubDate>
<dc:creator>muradabbas</dc:creator>
<guid>http://praveensunsetpoint.wordpress.com/2008/11/13/aspnet-20-architecture/</guid>
<description><![CDATA[ASP.NET 2.0 Architecture Article 01: In this article ASP.NET 2.0 Architecture is being discussed whi]]></description>
<content:encoded><![CDATA[ASP.NET 2.0 Architecture Article 01: In this article ASP.NET 2.0 Architecture is being discussed whi]]></content:encoded>
</item>
<item>
<title><![CDATA[Enterprise Library 4.1 released]]></title>
<link>http://ziqbalbh.wordpress.com/2008/11/10/enterprise-library-41-released/</link>
<pubDate>Mon, 10 Nov 2008 06:39:19 +0000</pubDate>
<dc:creator>ziqbalbh</dc:creator>
<guid>http://ziqbalbh.wordpress.com/2008/11/10/enterprise-library-41-released/</guid>
<description><![CDATA[Don&#8217;t forget to download Enterprise Library 4.1, which was recently released by Microsoft Patt]]></description>
<content:encoded><![CDATA[Don&#8217;t forget to download Enterprise Library 4.1, which was recently released by Microsoft Patt]]></content:encoded>
</item>
<item>
<title><![CDATA[Encriptar Querystring]]></title>
<link>http://jorgesaavedra.wordpress.com/2008/10/29/encriptar-querystring/</link>
<pubDate>Wed, 29 Oct 2008 14:53:48 +0000</pubDate>
<dc:creator>saavedranet</dc:creator>
<guid>http://jorgesaavedra.wordpress.com/2008/10/29/encriptar-querystring/</guid>
<description><![CDATA[Despues de casi 6 meses que habia dejado de escribir en mi blog, ahora vuelvo con un articulo que me]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Despues de casi 6 meses que habia dejado de escribir en mi blog, ahora vuelvo con un articulo que me parecio bastante interesante&#8230;<br />
Lo que hace este pequeño codigo es encriptar el querystring de una URL,bueno espero que les sea util este articulo.</p>
<pre>
<pre class="code"><span style="color:#0000ff;">Imports</span> <span style="color:#008080;">System</span>
<span style="color:#0000ff;">Imports</span> <span style="color:#008080;">System</span><span style="color:#000000;">.</span><span style="color:#008080;">IO</span>
<span style="color:#0000ff;">Imports</span> <span style="color:#008080;">System</span><span style="color:#000000;">.</span><span style="color:#008080;">Xml</span>
<span style="color:#0000ff;">Imports</span> <span style="color:#008080;">System</span><span style="color:#000000;">.</span><span style="color:#000000;">Text</span>
<span style="color:#0000ff;">Imports</span> <span style="color:#008080;">System</span><span style="color:#000000;">.</span><span style="color:#000000;">Security</span><span style="color:#000000;">.</span><span style="color:#000000;">Cryptography</span>

<span style="color:#0000ff;">Public</span> <span style="color:#0000ff;">Class</span> <span style="color:#000000;">Encryption64</span>
<span style="color:#0000ff;">Private</span> <span style="color:#000000;">key</span><span style="color:#000000;">() </span><span style="color:#0000ff;">As</span> <span style="color:#008080;">Byte</span> <span style="color:#804040;">=</span> <span style="color:#000000;">{}</span>
<span style="color:#0000ff;">Private</span> <span style="color:#000000;">IV</span><span style="color:#000000;">() </span><span style="color:#0000ff;">As</span> <span style="color:#008080;">Byte</span> <span style="color:#804040;">=</span> <span style="color:#000000;">{&#38;H12</span><span style="color:#000000;">, </span><span style="color:#000000;">&#38;H34</span><span style="color:#000000;">, </span><span style="color:#000000;">&#38;H56</span><span style="color:#000000;">, </span><span style="color:#000000;">&#38;H78</span><span style="color:#000000;">, </span><span style="color:#000000;">&#38;H90</span><span style="color:#000000;">, </span><span style="color:#000000;">&#38;HAB</span><span style="color:#000000;">, </span><span style="color:#000000;">&#38;HCD</span><span style="color:#000000;">, </span><span style="color:#000000;">&#38;HEF}</span>

 <span style="color:#0000ff;">Public</span> <span style="color:#0000ff;">Function</span> <span style="color:#000000;">Decrypt</span><span style="color:#000000;">(</span><span style="color:#0000ff;">ByVal</span> <span style="color:#000000;">stringToDecrypt</span> <span style="color:#0000ff;">As</span> <span style="color:#008080;">String</span><span style="color:#000000;">, </span><span style="color:#000000;">_</span>
      <span style="color:#0000ff;">ByVal</span> <span style="color:#000000;">sEncryptionKey</span> <span style="color:#0000ff;">As</span> <span style="color:#008080;">String</span><span style="color:#000000;">) </span><span style="color:#0000ff;">As</span> <span style="color:#008080;">String</span>
      <span style="color:#0000ff;">Dim</span> <span style="color:#000000;">inputByteArray</span><span style="color:#000000;">(</span><span style="color:#000000;">stringToDecrypt</span><span style="color:#000000;">.</span><span style="color:#000000;">Length</span><span style="color:#000000;">) </span><span style="color:#0000ff;">As</span> <span style="color:#008080;">Byte</span>
       <span style="color:#0000ff;">Try</span>
      <span style="color:#000000;">key</span> <span style="color:#804040;">=</span> <span style="color:#008080;">System</span><span style="color:#000000;">.</span><span style="color:#000000;">Text</span><span style="color:#000000;">.</span><span style="color:#000000;">Encoding</span><span style="color:#000000;">.</span><span style="color:#000000;">UTF8</span><span style="color:#000000;">.</span><span style="color:#000000;">GetBytes</span><span style="color:#000000;">(</span><span style="color:#000080;">Left</span><span style="color:#000000;">(</span><span style="color:#000000;">sEncryptionKey</span><span style="color:#000000;">, </span><span style="color:#000000;">8</span><span style="color:#000000;">))</span>
       <span style="color:#0000ff;">Dim</span> <span style="color:#000000;">des</span> <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">New</span> <span style="color:#000000;">DESCryptoServiceProvider</span><span style="color:#000000;">()</span>
       <span style="color:#000000;">inputByteArray</span> <span style="color:#804040;">=</span> <span style="color:#008080;">Convert</span><span style="color:#000000;">.</span><span style="color:#000000;">FromBase64String</span><span style="color:#000000;">(</span><span style="color:#000000;">stringToDecrypt</span><span style="color:#000000;">)</span>
       <span style="color:#0000ff;">Dim</span> <span style="color:#000000;">ms</span> <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">New</span> <span style="color:#008080;">MemoryStream</span><span style="color:#000000;">()</span>
       <span style="color:#0000ff;">Dim</span> <span style="color:#000000;">cs</span> <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">New</span> <span style="color:#000000;">CryptoStream</span><span style="color:#000000;">(</span><span style="color:#000000;">ms</span><span style="color:#000000;">, </span><span style="color:#000000;">des</span><span style="color:#000000;">.</span><span style="color:#000000;">CreateDecryptor</span><span style="color:#000000;">(</span><span style="color:#000000;">key</span><span style="color:#000000;">, </span><span style="color:#000000;">IV</span><span style="color:#000000;">), </span><span style="color:#000000;">_</span>
         <span style="color:#000000;">CryptoStreamMode</span><span style="color:#000000;">.</span><span style="color:#000000;">Write</span><span style="color:#000000;">)</span>
          <span style="color:#000000;">cs</span><span style="color:#000000;">.</span><span style="color:#000000;">Write</span><span style="color:#000000;">(</span><span style="color:#000000;">inputByteArray</span><span style="color:#000000;">, </span><span style="color:#000000;">0</span><span style="color:#000000;">, </span><span style="color:#000000;">inputByteArray</span><span style="color:#000000;">.</span><span style="color:#000000;">Length</span><span style="color:#000000;">)</span>
          <span style="color:#000000;">cs</span><span style="color:#000000;">.</span><span style="color:#000000;">FlushFinalBlock</span><span style="color:#000000;">()</span>
      <span style="color:#0000ff;">Dim</span> <span style="color:#000000;">encoding</span> <span style="color:#0000ff;">As</span> <span style="color:#008080;">System</span><span style="color:#000000;">.</span><span style="color:#000000;">Text</span><span style="color:#000000;">.</span><span style="color:#000000;">Encoding</span> <span style="color:#804040;">=</span> <span style="color:#008080;">System</span><span style="color:#000000;">.</span><span style="color:#000000;">Text</span><span style="color:#000000;">.</span><span style="color:#000000;">Encoding</span><span style="color:#000000;">.</span><span style="color:#000000;">UTF8</span>
          <span style="color:#0000ff;">Return</span> <span style="color:#000000;">encoding</span><span style="color:#000000;">.</span><span style="color:#000000;">GetString</span><span style="color:#000000;">(</span><span style="color:#000000;">ms</span><span style="color:#000000;">.</span><span style="color:#000000;">ToArray</span><span style="color:#000000;">())</span>
      <span style="color:#0000ff;">Catch</span> <span style="color:#000000;">e</span> <span style="color:#0000ff;">As</span> <span style="color:#008080;">Exception</span>
          <span style="color:#0000ff;">Return</span> <span style="color:#000000;">e</span><span style="color:#000000;">.</span><span style="color:#008080;">Message</span>
      <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Try</span>
   <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Function</span>

   <span style="color:#0000ff;">Public</span> <span style="color:#0000ff;">Function</span> <span style="color:#000000;">Encrypt</span><span style="color:#000000;">(</span><span style="color:#0000ff;">ByVal</span> <span style="color:#000000;">stringToEncrypt</span> <span style="color:#0000ff;">As</span> <span style="color:#008080;">String</span><span style="color:#000000;">, </span><span style="color:#000000;">_</span>
       <span style="color:#0000ff;">ByVal</span> <span style="color:#000000;">SEncryptionKey</span> <span style="color:#0000ff;">As</span> <span style="color:#008080;">String</span><span style="color:#000000;">) </span><span style="color:#0000ff;">As</span> <span style="color:#008080;">String</span>
       <span style="color:#0000ff;">Try</span>
      <span style="color:#000000;">key</span> <span style="color:#804040;">=</span> <span style="color:#008080;">System</span><span style="color:#000000;">.</span><span style="color:#000000;">Text</span><span style="color:#000000;">.</span><span style="color:#000000;">Encoding</span><span style="color:#000000;">.</span><span style="color:#000000;">UTF8</span><span style="color:#000000;">.</span><span style="color:#000000;">GetBytes</span><span style="color:#000000;">(</span><span style="color:#000080;">Left</span><span style="color:#000000;">(</span><span style="color:#000000;">SEncryptionKey</span><span style="color:#000000;">, </span><span style="color:#000000;">8</span><span style="color:#000000;">))</span>
          <span style="color:#0000ff;">Dim</span> <span style="color:#000000;">des</span> <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">New</span> <span style="color:#000000;">DESCryptoServiceProvider</span><span style="color:#000000;">()</span>
          <span style="color:#0000ff;">Dim</span> <span style="color:#000000;">inputByteArray</span><span style="color:#000000;">() </span><span style="color:#0000ff;">As</span> <span style="color:#008080;">Byte</span> <span style="color:#804040;">=</span> <span style="color:#000000;">Encoding</span><span style="color:#000000;">.</span><span style="color:#000000;">UTF8</span><span style="color:#000000;">.</span><span style="color:#000000;">GetBytes</span><span style="color:#000000;">( </span><span style="color:#000000;">_</span>
              <span style="color:#000000;">stringToEncrypt</span><span style="color:#000000;">)</span>
          <span style="color:#0000ff;">Dim</span> <span style="color:#000000;">ms</span> <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">New</span> <span style="color:#008080;">MemoryStream</span><span style="color:#000000;">()</span>
        <span style="color:#0000ff;">Dim</span> <span style="color:#000000;">cs</span> <span style="color:#0000ff;">As</span> <span style="color:#0000ff;">New</span> <span style="color:#000000;">CryptoStream</span><span style="color:#000000;">(</span><span style="color:#000000;">ms</span><span style="color:#000000;">, </span><span style="color:#000000;">des</span><span style="color:#000000;">.</span><span style="color:#000000;">CreateEncryptor</span><span style="color:#000000;">(</span><span style="color:#000000;">key</span><span style="color:#000000;">, </span><span style="color:#000000;">IV</span><span style="color:#000000;">), </span><span style="color:#000000;">_</span>
              <span style="color:#000000;">CryptoStreamMode</span><span style="color:#000000;">.</span><span style="color:#000000;">Write</span><span style="color:#000000;">)</span>
          <span style="color:#000000;">cs</span><span style="color:#000000;">.</span><span style="color:#000000;">Write</span><span style="color:#000000;">(</span><span style="color:#000000;">inputByteArray</span><span style="color:#000000;">, </span><span style="color:#000000;">0</span><span style="color:#000000;">, </span><span style="color:#000000;">inputByteArray</span><span style="color:#000000;">.</span><span style="color:#000000;">Length</span><span style="color:#000000;">)</span>
          <span style="color:#000000;">cs</span><span style="color:#000000;">.</span><span style="color:#000000;">FlushFinalBlock</span><span style="color:#000000;">()</span>
          <span style="color:#0000ff;">Return</span> <span style="color:#008080;">Convert</span><span style="color:#000000;">.</span><span style="color:#000000;">ToBase64String</span><span style="color:#000000;">(</span><span style="color:#000000;">ms</span><span style="color:#000000;">.</span><span style="color:#000000;">ToArray</span><span style="color:#000000;">())</span>
      <span style="color:#0000ff;">Catch</span> <span style="color:#000000;">e</span> <span style="color:#0000ff;">As</span> <span style="color:#008080;">Exception</span>
          <span style="color:#0000ff;">Return</span> <span style="color:#000000;">e</span><span style="color:#000000;">.</span><span style="color:#008080;">Message</span>
      <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Try</span>
   <span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Function</span>

<span style="color:#0000ff;">End</span> <span style="color:#0000ff;">Class</span></pre>
</pre>
<p><!-- END                                   http://www.vbcity.com/encoder --></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Про поиск на примере SQL Server 2008 Express Edition и Search Server 2008 Express Edition]]></title>
<link>http://butaji.wordpress.com/2008/10/28/%d0%bf%d1%80%d0%be-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%bd%d0%b0-%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80%d0%b5-sql-server-2008-express-edition-%d0%b8-search-server-2008-express-edition/</link>
<pubDate>Tue, 28 Oct 2008 09:31:53 +0000</pubDate>
<dc:creator>butaji</dc:creator>
<guid>http://butaji.wordpress.com/2008/10/28/%d0%bf%d1%80%d0%be-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%bd%d0%b0-%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80%d0%b5-sql-server-2008-express-edition-%d0%b8-search-server-2008-express-edition/</guid>
<description><![CDATA[Примерно 1,5 года назад баловался с full-text search на SQL Server 2005 Express Edition with Advance]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Примерно 1,5 года назад баловался с full-text search на SQL Server 2005 Express Edition with Advanced Tools. Тогда столкнулся с очень большими проблемами настройки того самого full-text search для русского языка. На днях передо мной снова встала задача использования полнотекстовых запросов, для этого я решил поставить (для установки мне потребовались net 3.5 sp1, msi 4.5, powershell [, vs2008sp1]) SQL Server 2008 Express Edition with Advanced Tools (отличается от Express Edition тем, что включает в себе функции полнотекстового поиска и службы репликации), и не встретил никаких проблем по данному вопросу. Всё очень замечательно и удобно. А если в связке с ним использовать Search Server 2008 Express Edition (базируется на WSS3.0SP1), то мы получаем отличную поисковую платформу с обширным функционалом в масштабах предприятия или веб-сервера.</p>
<p>Напомню, про ограничения Express версии SQL Server, они не изменились со времен 2005-ой версии:</p>
<ul>
<li>1 поддерживаемый процессор (но может быть установлен на любой сервер)</li>
<li>1 Гб адресуемой памяти</li>
<li>4 Гб максимальный размер базы</li>
</ul>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Microsoft .NET com novo logo]]></title>
<link>http://marlonpalmas.wordpress.com/2008/10/26/microsoft-net-com-novo-logo/</link>
<pubDate>Sun, 26 Oct 2008 12:50:54 +0000</pubDate>
<dc:creator>Marlon Medeiros</dc:creator>
<guid>http://marlonpalmas.wordpress.com/2008/10/26/microsoft-net-com-novo-logo/</guid>
<description><![CDATA[A Microsoft apresentou o novo logo do .NET, um Framework semelhante ao Java. Confira. O logo antigo ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>A Microsoft apresentou o novo logo do .NET, um Framework semelhante ao Java. Confira.</p>
<p><!--more--></p>
<p><img class="aligncenter size-full wp-image-4191" src="http://marlonpalmas.wordpress.com/files/2008/10/comparacao.png" alt="" width="435" height="254" /></p>
<p>O logo antigo realmente já não se encaixava nos padrões atuais, já o novo, na minha opinião, não poderia ter ficado melhor. Confira as razões para mudar o logo, tradução do <a href="http://www.winajuda.ig.com.br/2008/10/26/net-ganha-novo-logo/">Ghedin</a>:</p>
<blockquote><p><em>Precisávamos que estivesse em sincronia com os valores-chave que queremos passar com o .NET: consistência, robustez e uma ótima experiência de usuário. Também queríamos um logo em conformidade com os princípios de design que guiam a evolução da identidade visual da Microsoft, algo que pode ser visto nos logos do Silverlight, Surface, etc. Finalmente, precisávamos de um logo melhor alinhado com o portifólio de marcas às quais o .NET está mais próximo: Silverlight, Visual Studio e produtos para servidor.</em></p></blockquote>
<p>O que vocês acharam?</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[MSMQ]]></title>
<link>http://praveensunsetpoint.wordpress.com/2008/10/10/msmq/</link>
<pubDate>Fri, 10 Oct 2008 09:00:40 +0000</pubDate>
<dc:creator>muradabbas</dc:creator>
<guid>http://praveensunsetpoint.wordpress.com/2008/10/10/msmq/</guid>
<description><![CDATA[Microsoft Message Queue server written by Muraad Abbas(Sr. Associate Technology) MSMQ comes as part ]]></description>
<content:encoded><![CDATA[Microsoft Message Queue server written by Muraad Abbas(Sr. Associate Technology) MSMQ comes as part ]]></content:encoded>
</item>

</channel>
</rss>
