<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title><![CDATA[GotDotNet.Ru: новые статьи]]></title>
    <link>http://www.gotdotnet.ru/rss/</link>
    <description><![CDATA[Новые статьи в блогах сайта "GotDotNet.Ru"]]></description>
    <language>ru-RU</language>
    <lastBuildDate>Fri, 30 Jul 2010 06:01:52 UT</lastBuildDate>
    <generator><![CDATA[bitrix::blog.rss]]></generator>
    <docs>http://cyber.law.harvard.edu/rss/rss.html</docs>
    <item>
      <title><![CDATA[Локализация ASP.NET приложений. ReSharper]]></title>
      <link>http://www.gotdotnet.ru/blogs/mvcdev/8387/</link>
      <description><![CDATA[<p style="text-align: justify">Локализация приложения и работа с ресурсами это рутинный и скучный процесс. Поэтому замечательно, что существуют такие инструменты как <i><!--noindex--><a href="http://www.jetbrains.com/resharper/index.html" rel="nofollow">ReSharper</a><!--/noindex--></i>, которые позволяют разработчикам избежать нудной работы, сэкономить время и деньги. В этой статье я на примерах опишу возможности <i>ReSharper</i>, которые упрощают локализацию <i>ASP.NET</i> приложений и работу с ресурсами.</p> <p style="text-align: justify">Итак. Откройте <i>aspx<span style="font-style: normal"> или&#160;</span>ascx</i> файл. Первое что можно сделать, это выделить любой кусок <i>HTML</i> кода (не серверного) и нажать <i>Alt+Enter</i>. Команда <i>Move HTML to resource</i> переместит выделенный фрагмент текста в локальный ресурс и добавит на страницу элемент управления <i><!--noindex--><a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.localize(VS.80).aspx" rel="nofollow">Localize</a><!--/noindex--></i>.</p> <p><img src="http://www.gotdotnet.ru/upload/blog/mvcdev/577/00.png" border="0"/></p> <p style="text-align: justify">Для локализации серверных элементов управления установите курсор на значении нужного свойства и нажмите <i>Ctrl+Shift+R</i>.</p> <p>&#160;<img src="http://www.gotdotnet.ru/upload/blog/mvcdev/bf4/01.png" border="0"/></p> <p style="text-align: justify">После этого откроется окно, в котором можно выбрать файл и имя ресурса. Также можно поставить соответствующую опцию и мастер найдет все вхождения строки на странице.</p> <p>&#160;<img src="http://www.gotdotnet.ru/upload/blog/mvcdev/6ce/02.png" border="0"/></p> <p style="text-align: justify">И вот элемент управления локализован. Теперь, если установить курсор на имени ресурса (<i>SomeText</i>) и нажать <i>F12</i>, то <i>ReSharper</i> перейдет в <i>resx</i> файл и установит курсор на искомом ресурсе.</p> <p>&#160;<img src="http://www.gotdotnet.ru/upload/blog/mvcdev/791/03.png" border="0"/></p> <p style="text-align: justify">Если то же самое проделать (нажать <i>F12</i>) на значении атрибута <!--noindex--><a href="http://www.gotdotnet.ru/blogs/mvcdev/8240/" rel="nofollow"><i>meta:resourcekey</i></a><!--/noindex-->, то в открывшемся меню будут показаны все локализованные свойства, привязанные к этому элементу управления.&#160;</p> <p>&#160;<img src="http://www.gotdotnet.ru/upload/blog/mvcdev/348/04.png" border="0"/></p> <p style="text-align: justify"><i>ReSharper</i> открывает файлы ресурсов в текстовом режиме (как <i>XML</i>). Обратите внимание на левую границу окна. Здесь, для строки, которая переведена на другой язык, показывается специальная иконка, щелкнув &#160;по которой можно попасть в соответствующий файл.</p> <p>&#160;<img src="http://www.gotdotnet.ru/upload/blog/mvcdev/f5e/05.png" border="0"/></p> <p style="text-align: justify">Имя ресурса как бы кликабельно. Нажмите <i>Ctrl+Shift+R</i> для получения доступа к командам.</p> <p>&#160;<img src="http://www.gotdotnet.ru/upload/blog/mvcdev/e31/06.png" border="0"/></p> <p style="text-align: justify">Обратите внимание, что некоторые строки подчеркнуты синей волнистой линией. Для этих строк нет перевода. Нажав <i>Alt+Enter</i> можно легко создать строку в файле ресурсов с другой локалью.</p> <p>&#160;<img src="http://www.gotdotnet.ru/upload/blog/mvcdev/4cc/07.png" border="0"/></p> <p style="text-align: justify">Теперь перейдем в <i>codebehind</i> файл.</p> <p>&#160;<img src="http://www.gotdotnet.ru/upload/blog/mvcdev/629/08.png" border="0"/></p> <p style="text-align: justify">Обратите внимание, что на предыдущем рисунке вторая строка подчеркнута синей волнистой линией, а первая строка - нет. <i>ReSharper</i> подсвечивает только те строки, которые напрямую используются в интерфейсе пользователя (они помечены атрибутом <i><!--noindex--><a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.localizableattribute.aspx" rel="nofollow">Localizable(true)</a><!--/noindex--></i>). Как например свойство <i>Text</i> элемента управления <i>Label</i>. Изменить это можно установив в свойство проекта <i>Localizable Inspector</i> в значение <i>Pessimistic</i>. В этом режиме помечаться как локализуемые будут все строки. По умолчанию оно имеет значение <i>Optimistic</i>.</p> <p>&#160;<img src="http://www.gotdotnet.ru/upload/blog/mvcdev/b46/09.png" border="0"/></p> <p style="text-align: justify">А сейчас подчеркнута строка, которой нет в файле локальных ресурсов. Создать нужный ресурс можно нажав <i>Alt+Enter</i>.</p> <p>&#160;<img src="http://www.gotdotnet.ru/upload/blog/mvcdev/647/10.png" border="0"/></p> <p style="text-align: justify">Ну, в общем, вы поняли, что <i>ReSharper</i> может почти все. Достаточно запомнить два сочетания: &#160;<i>Alt+Enter</i> и <i>Ctrl+Shift+R</i>. Или скачать&#160;<!--noindex--><a href="http://www.jetbrains.com/resharper/documentation/documentation.html" rel="nofollow"><i>ReSharper Keymap</i></a><!--/noindex-->.</p> <p style="text-align: justify">P.S. Советую посмотреть <!--noindex--><a href="http://hadihariri.com/blogengine/post/2010/02/16/Localizing-your-Applications-with-ReSharper-5.aspx" rel="nofollow">видео</a><!--/noindex--> <i>Hadi Hariri</i> на эту тему. <br/>
</p> <p style="text-align: justify">P.P.S.&#160;Так же можете прочитать одну из моих предыдущих статей, посвященных локализации <i>ASP.NET</i> приложений:</p> <ul><li><!--noindex--><a href="http://www.gotdotnet.ru/blogs/mvcdev/8210/" rel="nofollow">Локализация <i>ASP.NET</i> приложений. Стиль кодирования</a><!--/noindex--></li>
 <li><!--noindex--><a href="http://www.gotdotnet.ru/blogs/mvcdev/8210/" rel="nofollow"></a><!--/noindex--><!--noindex--><a href="http://www.gotdotnet.ru/blogs/mvcdev/8240/" rel="nofollow">Локализация <i>ASP.NET</i> приложений. Синтаксис</a><!--/noindex--> <br/>
</li>
 </ul> ]]></description>
      <author><![CDATA[mvcdev]]></author>
      <category><![CDATA[asp.net]]></category>
      <category><![CDATA[c#]]></category>
      <category><![CDATA[localization]]></category>
      <category><![CDATA[resharper]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8387</guid>
      <pubDate>Thu, 29 Jul 2010 01:57:56 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Совместимость OData с .NET, Java, PHP, iPhone]]></title>
      <link>http://www.gotdotnet.ru/blogs/sashaeve/8373/</link>
      <description><![CDATA[<p>На MIX10 был анонсирован протокол обмена данными Open Data Protocol (OData), а на сайте <!--noindex--><a href="http://odata.org/" rel="nofollow">http://odata.org</a><!--/noindex--> уже доступны SDK для PHP, Java, Objective-C (iPhone &amp; Mac,) и JavaScript (AJAX и Palm WebOS).</p> <p>Новая версия OData SDK for PHP (ранее она называлась Toolkit for PHP with ADO.NET/WCF Data Services) позволяет работать с большими наборами данных, содержит механизм автоматической разбивки страниц и новый пример на базе каталога Netflix.</p> <p><!--noindex--><a href="http://msug.vn.ua/blogs/akrakovetsky/archive/2010/07/23/odata-interoperability-with-dotnet-java-php-iphone-and-more.aspx" rel="nofollow">Читать полностью</a><!--/noindex--> <br/>
</p>]]></description>
      <author><![CDATA[sashaeve]]></author>
      <category><![CDATA[odata]]></category>
      <category><![CDATA[php]]></category>
      <category><![CDATA[java]]></category>
      <category><![CDATA[iphone]]></category>
      <category><![CDATA[.net]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8373</guid>
      <pubDate>Sat, 24 Jul 2010 19:38:25 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Система контроля версий для базы данных]]></title>
      <link>http://www.gotdotnet.ru/blogs/k0stya/8342/</link>
      <description><![CDATA[<h1>Предисловие</h1><br/>
В этом топике я опишу свою практику использования Database Project-a и некоторых возможностей VS, которая будет полезна, прежде всего: командам разработчиков, в которых с базой данных работает несколько девелоперов (изменяют схему, заполняют словари и т.д.).<br/>
<br/>
<a name="habracut" rel="nofollow"></a><br/>
<h1>Зачем нам это нужно?</h1><p>Хочу обратить внимание на следующие <!--noindex--><a href="http://odetocode.com/blogs/scott/archive/2008/01/30/three-rules-for-database-work.aspx" rel="nofollow">три правила</a><!--/noindex-->, которые должны повысить продуктивность командной работы с базой данных</p> <ol><li>Не использовать общую базу данных.<p>Пример негативной практики: Изменения в схеме одним из разработчиков вынуждает ждать остальных актуального ORM.</p></li>
 <li>Всегда должно быть место для хранения скриптов создания базы.<p>Лучшим местом для хранение скриптов безусловно является система контроля версий, которая дает ряд преимуществ, в частности возможность взять, в любое время, скрипты для развертывания базы, относящиеся к одному из предыдущих билдов и исправить баг записанный на этот билд…</p></li>
 <li>Не забывать чекинить/комитить изменения в скриптах</li>
 </ol><br/>
&#160; <h1>Кратко о Database project и его структуре</h1><p>До того как переходить к практической части, поговорим о самом Database project.</p> Я бы определил DB project, как гибко-конфигурируемое хранилище хорошо-структурированных sql скриптов с большим числом возможностей для их использования (развертывание, сравнение, тестирование и т.д.).<br/>
Структура проекта выглядит следующим образом:<br/>
<ul><li>Properties Files<br/>
Содержит набор файлов для конфигурации базы, процесса развертывания, SQLCMD переменные и DataBase permissions.</li>
 <li>Data Generation Plan <br/>
Содержит информацию о процессе генерирования тестовых данных для наполнения базы.</li>
 <li>Schema Comparisons<br/>
Содержит файлы с планами сравнения проекта с другими базами или проектами.</li>
 <li>Schema Objects<br/>
Содержаться файлы с DDL скриптами для генерации объектов базы (в большинстве случаев одному файлу соответствует один объект).</li>
 <li>scriptsСодержит pre-deployment и post-deployment скрипты.</li>
 </ul><p>Особое внимание уделим свойствам (4 файла с папки Properties), что поможет нам представить, каким огромным потенциалом обладает этот тип проекта:<br/>
Database.sqlcmdvars — содержит список SQLCMD переменных проекта. Вы можете создать больше одного .sqlcmdvars файла и ассоциировать их к разным проектам.</p> <!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=sqlcmdvariables.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/sqlcmdvariables.jpg" alt="Database.sqlcmdvars" border="0"/></a><!--/noindex--><br/>
Database.sqldeployment – содержит настройки развертывания, такие как строка подключения, имя базы данных…<br/>
<!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=deploymentsettings_1.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/deploymentsettings_1.jpg" alt="Database.sqldeployment" border="0"/></a><!--/noindex--><br/>
Database.sqlsettings – содержит настройки базы, такие как backup policy и collation<br/>
<!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=sqlsettings.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/sqlsettings.jpg" alt="Database.sqlsettings" border="0"/></a><!--/noindex--><br/>
Database.sqlpermissions – содержит GRANT и DENY выражения для определения прав доступа к объектам базы данных.<br/>
<h1>Практика</h1><br/>
Предположим, что у нас уже есть развернутая база данных, которую мы хотим положить под систему контроля версий (для примера я взял базу сгенерированную с помощью <!--noindex--><a href="http://msdn.microsoft.com/en-us/library/ms229862(VS.80).aspx" rel="nofollow">aspnet_regsql</a><!--/noindex-->).<br/>
<ol><li>Для начала создадим пустой Database Project<p><!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=newproject.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/newproject.jpg" alt="New Project" border="0"/></a><!--/noindex--></p></li>
 <li>Синхронизируем схему проекта с нашей базой, для этого нам понадобиться замечательная возможность VS сравнивать схемы: идем меню: Data — Schema Compare – New Schema Comparison<p><!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=menuschemacompare.png" rel="nofollow"><img src="http://imgboot.com/images/k0stya/menuschemacompare.png" alt="Schema compare" border="0"/></a><!--/noindex--><br/>
Настраиваем сравнение следующим образом:</p> Target Schema — наш Database Project<br/>
<br/>
Source Schema – база данных, для которой мы организовываем систему контроля версий<br/>
<!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=newschemacomparison.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/newschemacomparison.jpg" alt="Compare options" border="0"/></a><!--/noindex--><p>Как результат выполненного сравнения, нам будет предложено добавить в проект скрипты для создания всех объектов базы, что обозначается словом Create в колонке Update Action.</p> <!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=compared.png" rel="nofollow"><img src="http://imgboot.com/images/k0stya/compared.png" alt="Compare results" border="0"/></a><!--/noindex--><p>Подтвердим изменения в нашем проекте нажав на Write Updates:</p> <!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=writeupdates.png" rel="nofollow"><img src="http://imgboot.com/images/k0stya/writeupdates.png" alt="Write Updates" border="0"/></a><!--/noindex--><p>Если мы сделали все правильно, то в проекте мы увидим примерно следующие файлы:</p> <!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=solutionexplorer.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/solutionexplorer.jpg" alt="Solution explorer" border="0"/></a><!--/noindex--></li>
 <li>Следующим немаловажным этапом будет подготовка нашего проекта к быстрому развертыванию на машинах разработчиков (для развертывания в другой среде, как правило, нужно изменить только строку подключения):<br/>
<ul><li>После того, как мы синхронизировали объекты проекта с базой, в нем появились два файла с путями к фалу БД и ее логу соответственно:<br/>
<!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=storagefiles.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/storagefiles.jpg" alt="Storage files" border="0"/></a><!--/noindex--><br/>
Для того, чтобы не привязываться к конкретной конфигурации, изменим в обоих файлах параметр FileName следующим образом:<br/>
<code>FILENAME = '$(DefaultDataPath)$(DatabaseName).mdf'</code><br/>
и <br/>
<code>FILENAME = '$(DefaultDataPath)$(DatabaseName)_log.ldf'</code><br/>
соответственно.<br/>
<em>Примечание: В дальнейшем, после сравнения нужно отменять изменения в этих файлах:</em><br/>
<!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=sqlfiles.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/sqlfiles.jpg" alt="Undo changes" border="0"/></a><!--/noindex--></li>
 <li>Перейдем к настройке строки подключения (в нашем случае локальная база). Зайдем в свойства проекта на вкладку Deploy и найдем там Target connection (Правой клавишей по проекту – Properties. Переходим на вкладку Deploy — Target connection — Edit...)<br/>
<!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=connectionproperties.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/connectionproperties.jpg" alt="Target connection" border="0"/></a><!--/noindex--><br/>
По умолчанию Database проект, во время развертывания (Deploy), генерирует скрипт с кодом создания объектов базы, но не выполняет его (опция Create a deployment script (.sql)), нам же, чтобы сэкономить время, желательно его сразу выполнять.<p>Для этого в проекте предусмотрен второй режим — Create a deployment script (.sql) and deploy to the database:</p> <!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=deployaction.png" rel="nofollow"><img src="http://imgboot.com/images/k0stya/deployaction.png" alt="Deploy action" border="0"/></a><!--/noindex--><br/>
Последний штрих – включим <!--noindex--><a href="http://msdn.microsoft.com/ru-ru/library/aa259202(v=SQL.80).aspx" rel="nofollow">CONCAT_NULL_YIELDS_NULL</a><!--/noindex--> в файле Database.sqlsettings<p><!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=concatnullyieldsnull.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/concatnullyieldsnull.jpg" alt="CONCAT_NULL_YIELDS_NULL" border="0"/></a><!--/noindex--></p></li>
 </ul><p>Наш проект уже готов к использованию другими разработчикам. Все что для этого нужно, взять проект с системы контроля версий и выполнить Deploy, и разработчик получит ожидаемую локальную копию базы.</p><p>В большинстве случаев в базе присутствуют различные словари, которые нужны для нормальной работы приложений которые используют базу. Для хранения данных в нашем проекте нам придет на помощь возможность VS — сравнивать данные (Data compare).</p></li>
 <li>Добавим в проект пустой файл Data.sql, где и будут храниться наши DML скрипты<p><!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=data.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/data.jpg" alt="Data.sql" border="0"/></a><!--/noindex--></p><p>Развернем наш проект в временную базу с именем DatabaseUnderVersionControlEmpty</p> <!--noindex--><a href="http://imgboot.com/image.php?u=k0stya&amp;i=emptydatabase.jpg" rel="nofollow"><img src="http://imgboot.com/images/k0stya/emptydatabase.jpg" alt="Empty database name" border="0"/></a><!--/noindex--><p>Увидев в Output-е следующее</p> <div class="blog-code-box"><pre>========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
========== Deploy: 1 succeeded, 0 failed, 0 skipped ==========
</pre></div><br/>
выполним сравнение данных базы DatabaseUnderVersionControlEmpty с DatabaseUnderVersionControl и результат сохраним в созданный нами файл Data.sql<br/>
Добавим строку в post-deployment скрипт (находиться в каталоге вместе с Data.sql):<br/>
<code>:r .\Data.sql</code><br/>
которая будет выполнять наш Data.sql во время развертывания.<br/>
<em>Примечание: эту строку нужно будет комитить каждый раз, когда мы хотим развернуть пустую базу. Незабываем менять имя целевой базы обратно на DatabaseUnderVersionControl.</em></li>
 </ol><p>Готово. Теперь при каждом изменении в базе нужно будет просто выполнить сравнение базы с проектом и подтвердить их нажатием одной клавиши.</p> <h1>Ссылки:</h1><br/>
<!--noindex--><a href="http://blogs.msdn.com/b/gertd/" rel="nofollow">Data Dude</a><!--/noindex--><br/>
<!--noindex--><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed" rel="nofollow">Плагин к VS 2008 </a><!--/noindex-->]]></description>
      <author><![CDATA[k0stya]]></author>
      <category><![CDATA[Visual Studio 2010]]></category>
      <category><![CDATA[Database project]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8342</guid>
      <pubDate>Thu, 22 Jul 2010 17:11:43 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Перемещение логинов с одного экземпляра SQL Server на другой]]></title>
      <link>http://www.gotdotnet.ru/blogs/sashaeve/8331/</link>
      <description><![CDATA[В SQL Server, да и в любой другой СУБД существует понятие пользователь базы данных – <em>users</em>, и логин сервера – <em>logins</em>. Логин служит точкой входа пользователя базы, он (логин) создается на уровне SQL Server, а пользователи на уровне базы данных. <br/>
<br/>
<!--noindex--><a href="http://msug.vn.ua/blogs/datamining/archive/2010/07/20/sql-serevr.aspx" rel="nofollow">Читать полностью</a><!--/noindex--> <br/>
]]></description>
      <author><![CDATA[sashaeve]]></author>
      <category><![CDATA[sql server]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8331</guid>
      <pubDate>Wed, 21 Jul 2010 11:02:06 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Visual Studio 2010 Productivity Power Tools]]></title>
      <link>http://www.gotdotnet.ru/blogs/klubs/8330/</link>
      <description><![CDATA[<img src="http://habreffect.ru/files/300/73271961b/logo.jpg" alt="image" border="0" align="right"/> <br/>
<b><!--noindex--><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef" rel="nofollow">Productivity Power Tools</a><!--/noindex--></b> это набор расширений для Visual Studio Professional (и выше), которые улучшают производительность разработчиков. В новой версии расширения были добавленные такие вещи: <br/>
<ul> <li>Настройки расширений </li>
 <li>Solution Navigator </li>
 <li>Quick Access </li>
 <li>Обновление и исправление ошибок &#171;Searchable Add Reference&#187;, &#171;Document Tab Well&#187; и других расширений. </li>
 </ul> <br/>
Много картинок <br/>
 <h4>Настройки расширений</h4> <br/>
По многочисленным просьбам было создано расширение, позволяющее включать/выключать и настраивать отдельные компоненты Productivity Power Tools. <br/>
<br/>
<img src="http://habreffect.ru/files/ebe/9318d503d/001.jpg" alt="image" border="0"/> <br/>
<br/>
<h4>Solution Navigator</h4> <br/>
Это новый инструмент, который сливается с функционалом <b>Solution Explorer, Class View, Object Browser, Call Hierarchy, Navigate To, и Find Symbol References</b>. Последняя версия входит в <!--noindex--><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef" rel="nofollow">Productivity Power Tools</a><!--/noindex-->. <br/>
<br/>
Solution Navigator позволяет: <br/>
<br/>
<b>Развернуть файл с кодом</b> чтобы переходить по классам и по членам классов. <br/>
<br/>
<img src="http://habreffect.ru/files/8c3/221914864/002.jpg" alt="image" border="0"/> <br/>
<br/>
<b>Поиск</b> во всем решении, вплоть до членов классов. <br/>
<br/>
Результаты поиска представлены в виде фильтра в дереве <b>Solution Navigator</b>, выделены соответствующие видимые элементы (например, папку, содержащую результаты поиска — серым) и искомая фраза в файлах и классах. <br/>
<br/>
<img src="http://habreffect.ru/files/801/9d4a90b17/003.jpg" alt="image" border="0"/> <br/>
<br/>
<b>Фильтровать</b> файлы и проекты в решении чтобы видеть только открытые файлы или несохраненные и т.п. <br/>
<br/>
Быстро <b>просматривать</b> изображения, наведя на них мышкой. Или смотреть дополнительную информацию (документацию) также наведя мышкой. <br/>
<br/>
<img src="http://habreffect.ru/files/0a7/5f6368124/004.jpg" alt="image" border="0"/> <br/>
<br/>
<b>Сузить область просмотра</b> на проект или на папку, или на файл. Создать несколько вариантов просмотра решения, к которым можно всегда вернуться. Кнопкной &#171;<i>New Window</i>&#187; создается новое окно с Solution Navigator. <br/>
<br/>
<b>Интерактивные подсказки</b> <br/>
Наведя мышь на <u>BaseViewModel</u> появится вот такая подсказка <br/>
<br/>
<img src="http://habreffect.ru/files/63e/2114195b8/005.jpg" alt="image" border="0"/> <br/>
<br/>
А нажав мышкой можно посмотреть продвинутую подсказку от Solution Navigator. В дополнительную подсказку входит поиск, анализ отношения между классами и членами а также можно посмотреть структуру класса. <br/>
<br/>
<img src="http://habreffect.ru/files/56e/c98254fd6/006.jpg" alt="image" border="0"/> <br/>
<br/>
<h4>Вкладки Well UI</h4> <br/>
В этом расширении вкладки с файлами раскрашиваются по проектно, т.е. файлы каждого проекта имеют свой цвет. Вкладки отсортированы по проектам. <br/>
<br/>
<img src="http://habreffect.ru/files/d73/491e92d1c/007.jpg" alt="image" border="0"/> <br/>
<br/>
Можно включить отображение вкладок вертикально. Этот список похож на предыдущий, но вкладки отображаются вертикально. Это позволяет показывать больше вкладок, чем это обычно возможно, когда они расположены горизонтально. <br/>
<br/>
<img src="http://habreffect.ru/files/ddc/4d245b87d/008.jpg" alt="image" border="0"/> <br/>
<br/>
Полностью расширение называется <b>Document Well 2010</b> и имеет отдельную вкладку с настройками <br/>
<br/>
<img src="http://habreffect.ru/files/99d/c3fe4fbe7/009.jpg" alt="image" border="0"/> <br/>
<br/>
<h4>Поиск в окне добавления ссылок</h4> <br/>
При первом открытии &#171;<b>Add Reference Dialog</b>&#187;, вы заметите небольшую подсказку процесса во всплывающем окне. Создается кеш текущих ссылок. Это может происходить немного медленно, но как только вся информацию закешируется окно будет открываться мгновенно. Ссылки обновляются только когда это необходимо: при первом использовании, после установки нового SDK, после обновления Productivity Power Tools. <br/>
<br/>
<img src="http://habreffect.ru/files/edc/20e6f3294/010.jpg" alt="image" border="0"/> <br/>
<br/>
В правом верхнем углу есть спасение от утомительного поиска по огромному списку установленных dll. Это <b>поиск</b>! <br/>
<br/>
<img src="http://habreffect.ru/files/bda/e13a90396/011.jpg" alt="image" border="0"/> <br/>
<br/>
<h4>Прочие радости</h4> <br/>
<h5>Подсветка текущей линии</h5> <br/>
Так как разрешения мониторов все время увеличивается, становится труднее отыскать маленькую каретку в редакторе кода. Выделение текущей строки позволяет моментально найти ее. <br/>
<br/>
<h5>Тройной клик</h5> <br/>
Все просто! Тройным кликом мыши выделяется вся строка. <br/>
<br/>
<h5>Ctrl + Click Go To Definition</h5> <br/>
Этот модуль добавляет в редактор элемент веб-браузера, добавив интерактивные ссылки в код. Удерживая клавишу Ctrl + Клик – попадем к определению класса или объявлению переменной. <br/>
<br/>
<h5>Размещение кода (Align Assignments)</h5> <br/>
Это расширение является полезным для организации кода в более читаемый вид, включается <b>Ctrl + Alt +]</b>. Превращает код из такого: <br/>
<img src="http://habreffect.ru/files/57b/342312593/012.jpg" alt="image" border="0"/> <br/>
В такой: <br/>
<img src="http://habreffect.ru/files/119/9f84d0917/013.jpg" alt="image" border="0"/> <br/>
<i>Это расширение может конфликтовать со стандартным форматированием кода, когда студия сама форматирует и убирает лишние пробелы. Необходимо отключить Tools-&gt;Options-&gt;Text Editor-&gt;C#-&gt;Formatting-&gt;Spacing-&gt;&#171;Ignore spaces in declaration statements&#187;</i> <br/>
<br/>
<h4>Мое мнение</h4> <br/>
После целого дня использования этого расширения сложно судить о всех нововведениях. Но, мне определенно нравится новый Solution Navigator с его фильтрами и поиском. Раскрашенные вкладки помогают быстрее понять на какой файл нужно переключиться, но я пока использую не все возможности (или не знаю). Поиск в добавлении ссылок избавил от безумной прокрутки в сотне ссылок. Пока не использовал новую возможность <b>Quick Access</b> и <!--noindex--><a href="http://blogs.msdn.com/b/kirillosenkov/archive/2010/06/07/copy-code-in-html-format-with-visual-studio-2010.aspx" rel="nofollow">HTML Copy</a><!--/noindex-->. <br/>
<br/>
Как оно сказалось на производительности? Может быть самую малость, но тут уже мне нужно отключить ненужные расширения и закрыть ненужные окна. Так что расширение имеет полное право присутствовать в коробке с инструментами каждого разработчика, тем более что оно <b>бесплатное</b>. <br/>
<br/>
<h4>Литература</h4> <ul> <li><!--noindex--><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef" rel="nofollow">Официальная страница</a><!--/noindex--> с расширением Productivity Power Tools </li>
 <li>Подробная инструкция о <!--noindex--><a href="http://blogs.msdn.com/b/visualstudio/archive/2010/07/20/solution-navigator-blog-post.aspx" rel="nofollow">Solution Navigator</a><!--/noindex--> в блоге VS </li>
 <li><!--noindex--><a href="http://blogs.msdn.com/b/visualstudio/archive/2010/06/10/document-well-2010-plus.aspx" rel="nofollow">Document Well 2010 Plus</a><!--/noindex--> в блоге VS </li>
 <li><!--noindex--><a href="http://blogs.msdn.com/b/visualstudio/archive/2010/06/22/what-s-next-for-the-productivity-power-tools.aspx" rel="nofollow">Add Reference Dialog</a><!--/noindex--> </li>
 <li><!--noindex--><a href="http://weblogs.asp.net/scottgu/archive/2010/07/19/vs-2010-productivity-power-tools-update-with-some-cool-new-features.aspx" rel="nofollow">VS 2010 Productivity Power Tools Update</a><!--/noindex--> в блоге ScottGu </li>
 </ul> ]]></description>
      <author><![CDATA[Oxozle]]></author>
      <category><![CDATA[Productivity Power Tools]]></category>
      <category><![CDATA[vs2010]]></category>
      <category><![CDATA[расширения]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8330</guid>
      <pubDate>Wed, 21 Jul 2010 06:52:41 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Обзор безопасности Silverlight 4 приложений. Часть 2]]></title>
      <link>http://www.gotdotnet.ru/blogs/klubs/8321/</link>
      <description><![CDATA[<img src="http://habreffect.ru/files/486/d128982e8/Untitled-1.jpg" alt="image" border="0" align="left"/> В продолжению к первой части, в которой мы рассмотрели как Silverlight защищает конечного пользователя. В этой части рассмотрим как создавать безопасные сайты с использованием Silverlight. Все ссылки в конце топика. <br/>
 <br/>
<h4>Создание безопасных веб-сайтов использованием Silverlight</h4> <br/>
Сайты, использующие Silverlight имеют те же самые проблемы в безопасности, что и обычные сайты не использующие его. <br/>
<br/>
<h5>Cross Site scripting (XSS)</h5> <br/>
Как и в обычных HTML сайтах, Silverlight разработчикам нужно внимательно относиться к проблеме XSS. XSS позволяет злоумышленнику запускать программный код на компьютере клиента. Это дает злоумышленнику доступ к Cookies и другой конфиденциальной информации. Обладание этой информацией по разному влияет на безопасность. Для интернет-магазинов злоумышленник может заказать товары на имя пользователя. В банках можно сделать другие плохие вещи. <br/>
<br/>
В Silverlight возможны XSS проблемы, но они менее вероятны чем в традиционных HTML. Проблемы возникают, когда злоумышленник посылает опасную строку в неконтролируемое поле. Вот некоторые примеры, когда возможна XSS уязвимость: <br/>
<ul> <li>Вызов <u>XamlReader.Load ()</u> на строку, переданную злоумышленником. Нельзя вызывать этот метод, предварительно не проверив строку на XSS. </li>
 <li>Вызов <u>Assembly.Load ()</u> на вредную DLL </li>
 <li><u>Создание XML</u> путем объединения строк, например, для того, чтобы отправить запрос на REST сервис. (System.Xml обеспечивает более эффективные способы создания XML, в том числе и System.Xml.XmlWriter System.Xml.Linq.XElement) </li>
 <li>Использованием Silverlight для создания HTML через System.Windows.Browser </li>
 <li>Использование System.Windows.Controls.WebBrowser.NavigateToString () в браузере из приложения. </li>
 <li>Файлы .xap, загруженные пользователями. </li>
 </ul> <br/>
<br/>
<h5>Изоляция Silverlight с HTML / Javascript</h5> <br/>
Silverlight запускается как часть HTML страницы, но что произойдет, если приложение не будет доверять HTML или наоборот? Silverlight позволяет заблокировать связь в обоих направлениях. По умолчанию заблокировано, когда .XAP и HTML загружаются с разных доменов. <br/>
<br/>
Свойство <b>EnableHtmlAccess</b> позвоялет .XAP вызывать Javascript методы и изменять HTML страницы. EnableHtmlAccess указывается в теге &lt;object&gt; при вставке Silverlight. Если .XAP и HTML из одного домена, то по умолчанию свойство включено иначе — нет. <br/>
<br/>
Свойство <b>ExternalCallersFromCrossDomain</b> и атрибуты <b>[scriptableTypeAttribute]</b> / <b>[scriptableMemberAttribute]</b> указываются .XAP и позволяют контролировать, возможен ли вызов этих методов из Javascript. Для того, чтобы Javascript мог вызвать эти методы, он должен пройти проверку ExternalCallersFromCrossDomain и класс должен быть оформлен [scriptableTypeAttribute], а данный метод — [scriptableMemberAttribute]. Javascript может вызывать только методы классов, указанных в приложении. ExternalCallersFromCrossDomain имеет две настройки, scriptableOnly и NoAccess с NoAccess умолчанию. <br/>
<br/>
<h5>Изоляция Silverlight кода из другого Silverlight кода</h5> <br/>
Для того чтобы изолировать код Silverlight от другого кода Silverlight, необходимо запустить их в отдельных приложениях, размещенных на отдельных доменах. <br/>
<br/>
<h5>Передача данных между приложениями Silverlight</h5> <br/>
Silverlight приложения, работающих в отдельных тегах &lt;object&gt; могут общаться либо с помощью Javascript либо с помощью System.Windows.Messaging.LocalMessageReceiver / LocalMessageSender. Обмен сообщениями позволяет приложениям отправить сообщения, а другим приложениям и получать их. По умолчанию отправители посылают, а получатели принимают сообщения только из тех приложений, что расположены на одном и том же домене. Можно добавить доверенные домена для отправителей и получателей. Клиенты могут использовать Глобальный охват. Им следует пользоваться осторожно, так как отправитель и получатель могут быть из любого домена. Нет возможности проверить на какой домен отсылается сообщение, однако получатель знает какой домен его отправил. <br/>
<br/>
<h5>Предотвращение несанкционированного повторного использования файла. XAP</h5> <br/>
Чтобы проверить, что на странице размещается ваше .XAP, то нужно включить следующий код XAP в startup: <br/>
<div class="blog-code-box"><pre class="csharp">            If (App.Current.Host.Settings.EnableHTMLAccess == false)
                throw new Exception();
            string htmlurl = System.Windows.Browser.HtmlPage.Document.DocumentUri.ToString();
            if (htmlurl != “http://foo.com/mypage.html”) 
                throw new Exception();
</pre></div> <br/>
<br/>
<h5>Валидация на сервере</h5> <br/>
Приложения Silverlight не меняют способ проверки подлинности запросов на сервер. <br/>
<br/>
<b>Проверка входящих данных</b> – как и не-Silverlight сайтов, на сервере необходимо убедиться, что входные данные не содержат команды SQL, HTML / Javascript, которые впоследствии будут отображаться на странице. Имейте в виду, что злоумышленник может и не использовать Silverlight приложение, а напрямую отправить HTTP запросу серверу обойдя приложение. <br/>
<br/>
<b>Обеспечение безопасности сервисов</b> — Silverlight приложения часто используют сервисы как связь между приложением и сервером. Эти интерфейсы должны быть защищены и проверены. <br/>
<br/>
<b>Подделка Кросс-доменных запросов (CSRF)</b> – Веб серверы должны проверять, что запросы приходят с правильной страницы. Например посмотрим файл политики безопасности Microsoft <!--noindex--><a href="http://microsoft.com/clientaccesspolicy.xml" rel="nofollow">http://microsoft.com/clientaccesspolicy.xml.</a><!--/noindex--> Сайт указывает, какие URL могут делать кросс-доменные запросы. <br/>
<br/>
<h5>Защита информации внутри. XAP</h5> <br/>
Хранение конфиденциальной информации (например, паролей, ключей, или собственных алгоритмов), в .XAP файле является проблематичным. В общем случае, не возможно защитить такую информацию от злоумышленника. Библиотеки могут быть закодированы с использованием .NET обфускаторов. Однако пока обфускация может замедлить злоумышленника, но не может помешать. Поиск также выдает, что есть и <!--noindex--><a href="http://www.google.com/search?client=opera&amp;rls=ru&amp;q=xaml+obfuscation&amp;sourceid=opera&amp;ie=utf-8&amp;oe=utf-8" rel="nofollow">обфускаторы XAML разметки</a><!--/noindex-->. <br/>
<br/>
<h5>API для безопасности</h5> <br/>
Silverlight предлагает целый ряд служб безопасности и интерфейсов API для обеспечения целостности и конфиденциальности данных, передаваемых по сети. <br/>
<br/>
<b>Поддерживается HTTPS </b>как для .XAP так и для любых запросов, которые он посылает. В Silverlight 4 Beta добавлена поддержка заголовка <b>Referer</b>, что позволяет серверу знать, откуда пришел пользователь. Нужно быть осторожным, используя заголовок Referer и не использовать его для проверки безопасности т.к. злоумышленник может установить любое значение в этот заголовок. <br/>
<br/>
System.Security.Cryptography содержит интерфейсы для <b>AES шифрования с закрытым ключом</b>, <b>SHA1</b> и <b>SHA256 хэширования</b> и <b>цифровых подписей HMAC</b>. (В Silverlight не входит шифрование с открытым ключом) <br/>
<br/>
Silverlight поддерживает <b>PlayReady digital rights management (DRM)</b> для управления доступом к медиа-файлам. В Silverlight 4 Beta добавлена поддержка защиты <b>H.264</b> и защиты оффлайн сценариев. <br/>
<br/>
<h4>Заключение</h4> <br/>
Silverlight была построена с нуля с безопасностью в качестве первоочередной задачи. Silverlight изолирует веб-приложения, чтобы обезопасить пользователей от вредоносных веб-сайтов. Silverlight также помогает поддерживать ваш веб-сайт в безопасности от нападения, обеспечивая настройками по умолчанию и делая XSS ошибки труднореализуемыми. Понимание модели безопасности Silverlight помогает создавать безопасные веб-сайты, которые используют Silverlight. <br/>
<br/>
<h4>Литература и ссылки</h4> <br/>
<ul> <li><!--noindex--><a href="http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx" rel="nofollow">Making a Service Available Across Domain Boundaries</a><!--/noindex--> </li>
 <li><!--noindex--><a href="http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx" rel="nofollow">Network Security Access Restrictions in Silverlight</a><!--/noindex--> </li>
 <li><!--noindex--><a href="http://www.microsoft.com/security/sdl/default.aspx" rel="nofollow">Microsoft Security Development Lifecycle</a><!--/noindex--> </li>
 <li><!--noindex--><a href="http://msdn.microsoft.com/en-us/library/dd470128(VS.95).aspx" rel="nofollow">Silverlight Application Security Model </a><!--/noindex--></li>
 <li><!--noindex--><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7cef15a8-8ae6-48eb-9621-ee35c2547773&amp;displaylang=en" rel="nofollow">Security Guidance for Writing and Deploying Silverlight Applications.docx</a><!--/noindex--> </li>
 <li><!--noindex--><a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-09-92-59-48/Silverlight-security-overview.doc" rel="nofollow">Silverlight 4 Security Overview.doc </a><!--/noindex--></li>
 <li><!--noindex--><a href="http://wpl.codeplex.com/" rel="nofollow">Microsoft Web Protection Library</a><!--/noindex--> — отличная библиотека для работы с XSS. Ее также можно использовать и в ASP.NET сайтах. </li>
 </ul> ]]></description>
      <author><![CDATA[Oxozle]]></author>
      <category><![CDATA[silverlight]]></category>
      <category><![CDATA[security]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8321</guid>
      <pubDate>Tue, 20 Jul 2010 08:21:31 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Анонс книг 07'2010]]></title>
      <link>http://www.gotdotnet.ru/blogs/SergeyT/8315/</link>
      <description><![CDATA[Российские и зарубежные издательства трудятся во всю на благо простых разработчиков и выпускают десятки книг в месяц из самых разных областей компьютерной науки. При этом, как и во многих других областях, процент качественного товара остается на определенном (не слишком высоком) уровне. Прежде чем пойти в магазин и купить книгу (да, я в этом вопросе старомоден и не понимаю, как можно читать хорошую техническую книгу в электронном виде) приходится потратить солидное время на изучение того, стоит ли она потраченных средств и усилий. <br/>
<br/>
<!--noindex--><a href="http://sergeyteplyakov.blogspot.com/2010/07/07.html" rel="nofollow">Подробности...</a><!--/noindex--> <br/>
]]></description>
      <author><![CDATA[SergeyT.]]></author>
      <category><![CDATA[books[technical]]]></category>
      <category><![CDATA[oop]]></category>
      <category><![CDATA[c#]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8315</guid>
      <pubDate>Tue, 20 Jul 2010 03:41:52 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Управление колонками таблиц в Silverlight: DataGrid (RadGridView) + Columns + MVVM.]]></title>
      <link>http://www.gotdotnet.ru/blogs/calabonga/8288/</link>
      <description><![CDATA[<p>Совершенно недавно при разработки очередного проекта на Silverlight возникла некоторая проблема. В силу того, что проект пишется с использованием шаблона программирования под названием Model-View-ViewModel (MVVM), а компонент RadGridView не имеет DependencyProperty под названием ColumnCollection, пришлось искать простоe и ,главное, быстрое решение данной проблемы. <br/>
<!--noindex--><a href="http://musorka.spaces.live.com/blog/cns!6B2F8B568B4803E7!4556.entry" rel="nofollow">Читать дальше</a><!--/noindex-->...</p>]]></description>
      <author><![CDATA[Calabonga]]></author>
      <category><![CDATA[silverlight 4]]></category>
      <category><![CDATA[datagrid]]></category>
      <category><![CDATA[telerik]]></category>
      <category><![CDATA[mvvm]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8288</guid>
      <pubDate>Wed, 14 Jul 2010 21:18:10 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Строгие перечисления на С++]]></title>
      <link>http://www.gotdotnet.ru/blogs/SergeyT/8286/</link>
      <description><![CDATA[<p><em>Эта статья опубликована в журнале RSDN Magazine 4, 2009 в соавторстве с Дмитрием Вьюковым (a.k.a. remark).</em> </p> <h4 align="justify">Проблема </h4> <p align="justify">Перечисления (enumerations) в языках программирования С и С++ имеют ряд особенностей, которые могут оказать влияние (иногда весьма неприятное) на работу как индивидуального разработчика, так и команды целиком. </p> <p align="justify">Основные проблемы перечислений в этих языках следующие: </p> <p align="justify">Во-первых, имена своих констант перечисление вносит в окружающее пространство имен, поэтому внутри одного и того же класса, структуры или пространства имен нельзя определить два перечисления с одинаковыми значениями литеральных констант. Но даже если конфликтов имен не происходит, то перечисление все равно &#171;загрязняет&#187; внешнее пространство имен, что негативно сказывается на работе с кодом, в частности на работе таких инструментов как IntelliSence. </p> <p align="justify">Во-вторых, отсутствует строгая типизация. Переменная перечислимого типа может быть неявно преобразована к int; перечислению можно присваивать любые интегральные константы, а также безболезненно (без каких-либо предупреждений) сравнивать с другими переменными интегрального типа и другими значениями перечислений. <br/>
</p> <p align="justify"><!--noindex--><a href="http://sergeyteplyakov.blogspot.com/2010/07/c.html" rel="nofollow">Подробнее...</a><!--/noindex--> <br/>
</p>]]></description>
      <author><![CDATA[SergeyT.]]></author>
      <category><![CDATA[С++]]></category>
      <category><![CDATA[метапрограммирование]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8286</guid>
      <pubDate>Wed, 14 Jul 2010 14:43:47 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[NerdDinner. Шаг 2: Создание базы данных]]></title>
      <link>http://www.gotdotnet.ru/blogs/jeje/8266/</link>
      <description><![CDATA[<p><i>Это второй шаг <!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Intro.htm" rel="nofollow">бесплатного руководства &#171;NerdDinner&#187;</a><!--/noindex--></i><i>, которое показывает, как построить маленькое, но полноценное веб-приложение, используя </i><i>ASP.</i><i>NET </i><i>MVC.</i></p> <p>Мы будем использовать базу данных, для хранения информации о Dinner и RSVP , для нашего NerdDinner приложения.</p> <p>Ниже представлены шаги создания базы данных, используя бесплатную версию SQL Server Express, которую можно легко поставить через Microsoft Web Platform Installer. Весь код, который мы напишем, работает как под SQL Server Express, так и под полной версией SQL Server.</p> <h3>Создание новой SQL Server Express базы данных</h3> <p>Мы начнем с нажатия правой кнопкой на нашем проекте в панели “Solution Explorer” и выберем Add&gt;New Item:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image024.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image024.png" alt="clip_image001" title="clip_image001" width="350px" height="346px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p>  <p>В окне &#171;Add New Item&#187; отфильтруем по категории &#171;Data&#187; и выберем “SQL Server Database”:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image025.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image025.png" alt="clip_image002" title="clip_image002" width="500px" height="336px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Мы назовем базу данных &#171;NerdDinner.mdf&#187;. Visual Studio спросит нас, хотим ли мы добавить данный файл в директорию \App_Data, которая уже создана с правами чтения и записи в ACL.</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image026.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image026.png" alt="clip_image003" title="clip_image003" width="496px" height="199px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Мы конечно согласимся, и наша новая база будет создана и добавлена в Solution Explorer:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image027.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image027.png" alt="clip_image004" title="clip_image004" width="219px" height="368px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <h3>Создаем таблицы в базе данных</h3> <p>Теперь у нас есть пустая база данных. Давайте же создадим несколько таблиц.</p> <p>Для этого, переместитесь в закладку &#171;Solution Explorer&#187;, которая позволяет нам управлять базами данных и серверами. База SQL Server Express, хранящаяся в папке \App_Data , автоматически появится в списке Server Explorer. Мы можем воспользоваться и “Connect to Database” для подключения к локальным или удаленным базам:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image028.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image028.png" alt="clip_image005" title="clip_image005" width="214px" height="282px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Мы добавим две таблицы в нашу базу NerdDinner: одну для хранения ужинов, вторую для отслеживания RSVP одобрений. Мы можем создать новую таблицу, нажав правой кнопкой на папку &#171;Tables&#187;в нашей базе данных и выбрав пункт &#171;Add New Table&#187;:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image029.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image029.png" alt="clip_image006" title="clip_image006" width="287px" height="267px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Данное действие приведет к открытию конструктор для настройки схемы нашей таблицы. Для таблицы &#171;Dinners&#187; мы добавим 10 колонок:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image030.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image030.png" alt="clip_image007" title="clip_image007" width="497px" height="395px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Мы хотим, чтобы колонка &#171;DinnerID&#187; была уникальным первичным ключем для таблицы. Настроить это можно, нажав правой кнопкой по колонке &#171;DinnerID&#187; и выбрав пункт &#171;Set Primary Key&#187;:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image031.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image031.png" alt="clip_image008" title="clip_image008" width="500px" height="456px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Вдобавок, делая DinnerID первичным ключём, мы также хотим настроить его как &#171;identity&#187; колонку, чье значение автоматически увеличивается с добавлением новой строчки в таблице.</p> <p>Выбрав &#171;DinnerID&#187; и далее, используя редактор &#171;Column Properties&#187;, установить свойству &#171;(Is Identity)&#187; - “Yes”. Мы будем использовать стандартные настройки identity (начинать с 1, увеличивать на 1 с каждой новой строчкой в Dinner):</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image032.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image032.png" alt="clip_image009" title="clip_image009" width="545px" height="184px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Далее сохраним нашу таблицу, нажав Ctrl+S или <b>File&gt;</b><b>Save</b>. От нас потребуется только ввести имя новой таблицы – &#171;Dinners&#187;:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image033.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image033.png" alt="clip_image010" title="clip_image010" width="399px" height="147px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Новая таблица Dinners готова и теперь отображается в списке Tables в Server Explorer нашей базы данных.</p> <p>Проделаем те же шаги для создания таблицы &#171;RSVP&#187;. Эта таблица будет состоять их 3 колонок. Установим колонку RsvpID, как первичный ключ, а также сделаем из него indetity колонку:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image034.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image034.png" alt="clip_image011" title="clip_image011" width="413px" height="287px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Сохраним таблицу с именем &#171;RSVP&#187;.</p> <h3>Настройка внешних ключей между таблицами</h3> <p>У нас уже есть две таблицы в нашей базе данных. Наш последний шаг в проектировании будет создать связь &#171;один-ко-многим&#187; между двумя таблицами, чтобы мы могли связывать каждую строчку таблицы Dinner с 0 или более строчек таблицы RSVP. Сделаем мы это, задав колонке “DinnerID” таблицы RSVP связь через внешний ключ с колонкой &#171;DinnerID&#187; таблицы “Dinners”.</p> <p>Для этого откроем таблицу RSVP в конструкторе таблиц двойным нажатием в Server Explorer. Далее выберем правой кнопкой колонку &#171;DinnerID&#187; и пункт “Relationships…”:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image035.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image035.png" alt="clip_image012" title="clip_image012" width="461px" height="333px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Появится окно, которое используется для настройки связей между таблицами:</p> <p>&#160;<img src="http://nerddinnerbook.s3.amazonaws.com/Images/image036.png" border="0"/> </p> <p>Нажмем на “Add” и добавим новую связь. После добавления связи мы раскроем ветвь дерева &#171;Tables and Column Specification&#187; в правой части окна и нажмем на копке &#171;…&#187;:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image037.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image037.png" alt="clip_image013" title="clip_image013" width="500px" height="316px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>В появившемся окне, мы сможем указать таблицу и колонку, которая участвует в связи, также позволяя задать для нее имя:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image038.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image038.png" alt="clip_image014" title="clip_image014" width="500px" height="374px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>В итоге, каждая строчка таблицы RSVP будет связана со строчкой таблицы Dinner. SQL Server будет сохранять ссылочную целостность для нас и препятствовать в добавлении новой RSVP строки, если она не указывает на существующую строку таблицы Dinner. Он будет также препятствовать удалению строки с таблицы Dinner, если существуют ссылающиеся на нее строки с таблицы RSVP.</p> <h3>Наполнение данными наши таблицы</h3> <p>Давайте закончим этот шаг добавлением данных в таблицу Dinners. Для этого, нажимаем правой кнопкой по таблице в Server Explorer и выбираем пункт “Show Table Data”:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image039.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image039.png" alt="clip_image015" title="clip_image015" width="349px" height="355px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <p>Мы добавим несколько строк для дальнейшего использования, как только начнем реализацию приложения:</p> <p><!--noindex--><a href="http://nerddinnerbook.s3.amazonaws.com/Images/image040.png" rel="nofollow"><img src="http://nerddinnerbook.s3.amazonaws.com/Images/image040.png" alt="clip_image016" title="clip_image016" width="650px" height="287px" border="0" style="border-width: 0px; display: inline"/></a><!--/noindex--></p> <h3>Следующий шаг</h3> <p>Мы закончили создавать нашу базу данных. Теперь давайте создадим классы моделей, которые можно использовать для запросов и обновлений.</p> ]]></description>
      <author><![CDATA[Jeje]]></author>
      <category><![CDATA[asp.net mvc]]></category>
      <category><![CDATA[sql]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8266</guid>
      <pubDate>Tue, 13 Jul 2010 10:32:46 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Как использовать виртуальную машину на Hyper-V и Windows Virtual PC]]></title>
      <link>http://www.gotdotnet.ru/blogs/alexeylyubko/8264/</link>
      <description><![CDATA[<p>В процессе тестирования и демонстрации одной системы, возникла задача - иметь возможность таскать с собой виртуальную машину, которая изначально жила на Hyper-V сервере. При этом надо иметь возможность перенести ее обратно. </p> <p>Казалось бы, простая задача, но покопавшись появился ряд проблем. Одной из них стала задача использования различных сервисов интеграции для<strong> Hyper-V и Windows Virtual PC</strong>.</p> <p>В Сети можно найти большое количество постов, как удалять сервисы Hyper-V (подключаем ISO с сервисами, и запускаем setup.exe /uninstall -&gt; ребут), но есть еще одно решение.</p> <p>После инсталляции интеграции Hyper-V в системе появляется 5 системных сервисов:</p> <p><img src="http://it-arts.com/4habr/Disable Hyper-V services.png" border="0"/></p> <p>Если теперь эту машину (не забыл сделать Snapshot merge), запустить на Windows Virtual PC и попытаться поставить сервисы интеграции, ничего хорошего не выйдет.</p> <p>Для решения этой проблемы необходимо:</p> <p>- Остановить все сервисы служб интеграции Hyper-V:</p> <p><div class="blog-code-box"><pre class="text">set-service vmickvpexchange -startuptype disabled
set-service vmicshutdown -startuptype disabled
set-service vmicheartbeat -startuptype disabled
set-service vmictimesync -startuptype disabled
set-service vmicvss -startuptype disabled
</pre></div> <br/>
- Перезапустить машину и установить штатно сервисы интеграции с Windows Virtual PC.</p> <p>Теперь на машине есть как сервисы интеграции Hyper-V, Так и сервисы интеграции Windows Virtual PC. В процессе установки могут быть проблемы с драйверами - это не фатально. Reboot должен все исправить.</p> <p>Далее делаем два скрипта на виртуальной машине, для включения одних сервисов интеграции и выключения других, для переноса с Hyper-V на Vitrual PC.</p> <p>Если машина переезжает на Hyper-V, запускаем скрипт:</p> <p><div class="blog-code-box"><pre class="text">set-service 1-vmsrvc -startuptype disabled

set-service vmickvpexchange -startuptype Automatic
set-service vmicshutdown -startuptype Automatic
set-service vmicheartbeat -startuptype Automatic
set-service vmictimesync -startuptype Automatic
set-service vmicvss -startuptype Automatic</pre></div></p> <p>Если машина должна запускаться на Windows Virtual PC, то запускаем второй скрипт:</p> <p><div class="blog-code-box"><pre class="text">set-service vmickvpexchange -startuptype disabled
set-service vmicshutdown -startuptype disabled
set-service vmicheartbeat -startuptype disabled
set-service vmictimesync -startuptype disabled
set-service vmicvss -startuptype disabled

set-service 1-vmsrvc -startuptype Automatic
</pre></div></p> <p>Вот и все. Удачного переезда. :)</p> <p><br/>
</p>]]></description>
      <author><![CDATA[Sveer]]></author>
      <category><![CDATA[Hyper-V]]></category>
      <category><![CDATA[microsoft]]></category>
      <category><![CDATA[Windows Virtual PC]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8264</guid>
      <pubDate>Tue, 13 Jul 2010 07:59:54 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Расширение Regex Tester для Visual Studio 2010]]></title>
      <link>http://www.gotdotnet.ru/blogs/sharomank/8258/</link>
      <description><![CDATA[<span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">Недавно у меня на работе кончилась пробная версия редактора регулярных выражений</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">&#160;</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><!--noindex--><a href="http://www.regexbuddy.com/" rel="nofollow" style="color: rgb(153, 0, 153)">RegexBuddy</a><!--/noindex--></span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">. У нас с лицензиями всё строго, и я сразу удалил данную программу. Товарищи посоветовали попробовать онлайн редакторы в частности&#160;</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><!--noindex--><a href="http://gskinner.com/RegExr/" rel="nofollow" style="color: rgb(153, 0, 153)">RegExr</a><!--/noindex--></span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">, он мне не понравился и я нашел другой</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">&#160;</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><!--noindex--><a href="http://regexhero.net/tester/" rel="nofollow" style="color: rgb(153, 0, 153)">RegexHero</a><!--/noindex--></span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">.</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">Но как то у нас временно не работала сеть и тогда я решил написать для себя маленькую утилиту для разбора текста с помощью регулярных выражений, создал WPF приложение, а для разбора текста использовать стал всем известный класс&#160;</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><!--noindex--><a href="http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx" rel="nofollow" style="color: rgb(153, 0, 153)">Regex</a><!--/noindex--></span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">, и уже через пол часа я воспользовался первой версией данной утилиты. Потом в течении двух недель я её доработал по мере необходимости и ловле мелких багов :). После выходных на работе поделился с коллегами, но все восприняли без комментариев очередную утилиту, которую нужно копировать или запускать по сети, кроме одного старшего(не по возрасту) товарища, который сказал, что было бы хорошо сделать её в виде расширения для Visual Studio 2010. И я начал думать о реализации своего расширения…</span> <br/>
<div><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span></div> <div><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">&#160; <h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(153, 153, 153); font-family: Verdana, sans-serif; font-weight: normal; font-size: 16px">Создание расширения</h4> <br/>
Я уже слышал и читал, что делать плагины для VS 2010 легко. Но решил что сначала доведу до ума утилиту в текущем виде, а потом уже буду переносить её, прошла ещё неделя и я был готов. Cначала скачал&#160;<!--noindex--><a href="http://visualstudiogallery.msdn.microsoft.com/ru-ru/25622469-19d8-4959-8e5c-4025d1c9183d" rel="nofollow" style="color: rgb(153, 0, 153)">Visual Studio 2010 SDK</a><!--/noindex-->, потом немного почитал на&#160;<!--noindex--><a href="http://www.codeproject.com/" rel="nofollow" style="color: rgb(153, 0, 153)">www.codeproject.com</a><!--/noindex-->&#160;кто как создавал расширения и конечно почитал MSDN. <br/>
<br/>
Решил использовать тип проекта &#171;Visual Studio Package&#187;, который как раз подходил к моим ожиданиям о легком переносе. При создании проекта открылся простой и понятный мастер(Wizard), в котором я выбрал добавление функциональности &#171;Tool Window&#187;, проекты для тестирования я убрал, так как утилита у меня простая. После создания открылся проект: <div><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span></div> <div style="text-align: center"><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><img src="http://habreffect.ru/files/d9d/db12291df/CreatedProject.png" border="0"/> <br/>
</span></div> <div><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span></div> <div><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">Я сразу обрадовался, как только увидел XAML и быстро скопировал из своего WPF приложения GUI и его CS часть и форма отобразилось в дизайнере, я нажал F5 и открылась&#160;<u>экспериментальная студия</u>, где я смог проверить своё расширение, которое нашел в&#160;<u>View -&gt; Other Windows -&gt; Regex Test</u>. В итоге оно работало абсолютно идентично: <br/>
</span></div> <div style="text-align: center"><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span></div> <div style="text-align: center"><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><img src="http://habreffect.ru/files/697/591191a33/FirstDebug.png" border="0"/> <br/>
</span></div> <div><br/>
</div> <div><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">При выделении из 9-и предложенных вариантов позиционирования, мне больше всего нравится по центру, т.е. в виде обычной вкладки.</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">Созданное мною расширение я использовал в течении 1 недели и дополнительно сделал:</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">— обработку в фоновом потоке, в процессе обработки окно расширения становится не активным.</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">— сделал сочетание горячих клавиш(по</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">&#160;</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><!--noindex--><a href="http://msdn.microsoft.com/en-us/library/cc138589.aspx" rel="nofollow" style="color: rgb(153, 0, 153)">документации</a><!--/noindex--></span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">) для быстрого открытия окна утилиты по</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">&#160;</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><b>Shift+Alt+R</b></span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">, единственное которое было не занято из подходящих :)</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">— нарисовал иконку и сделал превью картинку для расширения</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">— заполнил source.extension.vsixmanifest в проекте, который открывается в удобном дизайнере.</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">И расширение для Visual Studio 2010 готово, назвал его просто:</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">&#160;</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><!--noindex--><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/16b9d664-d88c-460e-84a5-700ab40ba452" rel="nofollow" style="color: rgb(153, 0, 153)">Regex Tester</a><!--/noindex--></span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">.</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span> <h4 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(153, 153, 153); font-family: Verdana, sans-serif; font-weight: normal; font-size: 16px; line-height: 20px">Особенности:</h4> <span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">Могу выделить две особенности(фичи):</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">— Снизу слева есть ползунок для изменения размеров шрифтов для всего расширения.</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">— При использовании Match режима, можно дополнительно задать формат вывода результатов.</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">Например с помощью рег.выражения Вы вывели список городов, которые Вам необходимо вставить в XML в виде элементов. Вот скриншот интерфейса расширения в VS 2010 с описанным примером.</span> <br/>
</div> <div style="text-align: center"><br/>
</div> <div style="text-align: center"><img src="http://habreffect.ru/files/3a1/108d96ad8/RegexTester.png" border="0"/> <br/>
</div> <div><br/>
</div> <div><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">Буду очень рад, если данное</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">&#160;</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><!--noindex--><a href="http://visualstudiogallery.msdn.microsoft.com/en-us/16b9d664-d88c-460e-84a5-700ab40ba452" rel="nofollow" style="color: rgb(153, 0, 153)">расширение</a><!--/noindex--></span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">&#160;</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">будет кому-нибудь полезно, пользуйтесь на здоровье!</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px"><br/>
</span><span style="font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px">Всем спасибо за внимание!</span> <br/>
</div> </span></div>]]></description>
      <author><![CDATA[Sharomank]]></author>
      <category><![CDATA[visual studio 2010]]></category>
      <category><![CDATA[Extensions]]></category>
      <category><![CDATA[regular expressions]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8258</guid>
      <pubDate>Mon, 12 Jul 2010 15:39:16 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Синтаксис Razor]]></title>
      <link>http://www.gotdotnet.ru/blogs/olegaxenow/8254/</link>
      <description><![CDATA[<span style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; FONT: medium &quot;Times New Roman&quot;; LETTER-SPACING: normal; COLOR: rgb(0, 0, 0); WORD-SPACING: 0px"><span style="TEXT-ALIGN: left; FONT-FAMILY: &quot;Trebuchet MS&quot;, Trebuchet, sans-serif; COLOR: rgb(51, 51, 51); FONT-SIZE: 13px"><div style="LINE-HEIGHT: 1.6em; MARGIN: 0px 0px .75em"><div>После того, как я <!--noindex--><a href="http://www.olegaxenow.com/2010/07/webmatrix.html" rel="nofollow">установил WebMatrix</a><!--/noindex-->, первым делом захотелось попробовать именно Razor. Как вы наверняка знаете, Razor – это новый View Engine ASP.NET. Некоторые говорят, что это View Engine для MVC – но это немного не так – движок для MVC обязательно будет, только он еще не выпущен (хотя кто знает – может, пока пишу, уже выпустили). Лирики, думаю, достаточно, теперь – к впечатлениям.</div> <div><!--noindex--><a href="http://www.olegaxenow.com/2010/07/razor.html" rel="nofollow">Читать на оригинальном сайте</a><!--/noindex-->.</div> </div> </span></span>]]></description>
      <author><![CDATA[OlegAxenow]]></author>
      <category><![CDATA[ASP.NET]]></category>
      <category><![CDATA[Razor]]></category>
      <category><![CDATA[WebMatrix]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8254</guid>
      <pubDate>Mon, 12 Jul 2010 07:00:58 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Тюнинг производительности для ASP.NET. Часть 1]]></title>
      <link>http://www.gotdotnet.ru/blogs/jeje/8249/</link>
      <description><![CDATA[<p><!--noindex--><a href="http://www.gotdotnet.ru/upload/blog/jeje/ef7/Untitled-1_2.png" rel="nofollow"><img src="http://www.gotdotnet.ru/upload/blog/jeje/d71/Untitled-1_thumb.png" alt="Untitled-1" title="Untitled-1" width="355px" height="96px" hspace="15" vspace="10" border="0" align="left"/></a><!--/noindex-->В первой части уловок с производительностью для ASP.NET и IIS7 мы рассмотрим некоторые простые, но тем не менее мощные возможности web.config файла. Используя некоторые трюки мы увеличим производительность любого нового или существующего веб-сайта, не изменяя ничего, кроме web.config файла.</p> <p>Следующие XML-сниппеты <strong>должны </strong>быть помещены в секцию &lt;system.webServer&gt; в web.config.</p> <h3>HTTP-сжатие</h3> <p>На практике, вы обычно можете настроить сжатие по HTTP в ASP.NET, используя <!--noindex--><a href="http://blowery.org/httpcompress/" rel="nofollow">сторонние</a><!--/noindex--> или собственные библиотеки. С IIS7 вы можете отбросит все это и использовать встроенный компрессор, доступный с web.config. Добавьте следующую строчку кода для включения HTTP-компрессии:</p> <div class="blog-code-box"><pre>&lt;urlCompression doDynamicCompression=&quot;true&quot; doStaticCompression=&quot;true&quot; dynamicCompressionBeforeCache=&quot;true&quot;/&gt;
</pre></div> <p>По умолчанию, сжиматься могут только текстовые типы данных.</p> <h4>doDynamicCompression</h4> <p>Установите данный атрибут в true и вы получите сжатие для таких динамически созданных данных, как страницы, представления, обработчики. Ничто не мешает это сделать. <br/>
</p> <h4>doStaticCompression</h4> <p>Данный атрибут позволяет выбирать, хотите ли вы или нет сжимать статические файлы: стили и скрипты. Изображения и другие не текстовые данные по умолчанию не сжимаются. Советую включить данную опцию.</p> <h4>dynamicCompressionBeforeCache</h4> <p>Если вы делаете кэширование вывода страниц в ASP.NET сайтах, то вы можете попросить IIS7 сжимать результат перед тем, как поместить в кэш. Проблемы могут возникнуть только если у вас собственный механизм кэширования вывода. Попробуйте активировать данную возможность и протестировать приложение. Если все отлично работает, то почему бы не оставить его включенным?</p> <h4>Заметка</h4> <p>По умолчанию, только текстовые типы содержимого подлежат сжатию. Это означает, что если вы посылаете application/x-javascript, как тип содержимого, то вам следует изменить его на text/javascript. Если вы используете собственные модули на сайтах, тогда возможно у вас будут конфликты с IIS7 компрессией.</p> <h4>Ресурсы</h4> <ul><li><!--noindex--><a href="http://www.west-wind.com/weblog/posts/98538.aspx" rel="nofollow">Add new mime-types for compression</a><!--/noindex--> </li>
 <li><!--noindex--><a href="http://technet.microsoft.com/en-us/library/cc771003(WS.10).aspx" rel="nofollow">Configure HTTP compression in IIS 7 (Technet)</a><!--/noindex--> </li>
 </ul> <h3>Кеширование статических файлов</h3> <p>Для увеличения скорости загрузки важно, чтобы все, что могло кэшироваться браузером, <u>кэшировалось</u> браузером. Сюда входят такие статические файлы, как изображения, стили, скрипты. Позволив браузеру кэшировать все эти файлы, ему не придется запрашивать их заново на протяжении периода кэша. Это сохраняет много трафика вам и вашим посетителям, делая загрузку страниц быстрее. Правильно настроенный первичный кэш браузера гораздо быстрее вызовет события <em>load</em> и <em>DOMContentLoaded</em>.</p> <p>Добавив данный сниппет в ваш web.config, все статические файлы будут кэшированы браузером на год:</p> <div class="blog-code-box"><pre>&lt;staticContent&gt;
   &lt;clientCache cacheControlMode=&quot;UseMaxAge&quot; cacheControlMaxAge=&quot;365.00:00:00&quot;/&gt;
&lt;/staticContent&gt;
</pre></div> <p>Данные настройки устанавливают срок годности файлов на один год вперед. Происходит это, когда IIS указывает в HTTP-заголовке уструкции для браузера, в данном случае он просит о добавлении файла в кэш. Если же вы нажмете F5 или Ctrl+F5, браузер запросит файлы вне зависимости от их даты истечения.</p> <p>Главной проблемой кэширования на клиентской стороне – это изменение статических файлов до истечения срока годности. Посетитель со старой версией в кэше не увидит новых файлов, пока не очистит кэш браузера, нажав F5. Поэтому данные настройки нужно использовать с осторожностью и, думаю, следует сократить срок годности. Во второй части я рассмотрю данную проблему и предложу простой способ для её решения.</p> <h4>Заметка</h4> <p>Убедитесь, что важные пользовательские данные не кэшируются браузером. Иначе они будут доступны другим пользователям, использующие данный браузер.</p> <h4>Ресурсы</h4> <ul><li><!--noindex--><a href="http://www.iis.net/ConfigReference/system.webServer/staticContent/clientCache" rel="nofollow">Client Cache &lt;clientCache&gt; (iis.net)</a><!--/noindex--> </li>
 </ul> <!--noindex--><a href="http://progg.ru/Тюнинг-производительности-для-ASPNET-Часть-1-microgeek" rel="nofollow"><img src="http://progg.ru/image.axd?url=http://microgeek.ru/blogs/aspnet/215/" alt="Progg it" border="0"/></a><!--/noindex--> ]]></description>
      <author><![CDATA[Jeje]]></author>
      <category><![CDATA[asp.net]]></category>
      <category><![CDATA[iis7]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8249</guid>
      <pubDate>Sat, 10 Jul 2010 15:07:18 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Быстрые шаги по отображению данных в PivotViewer и Silverlight]]></title>
      <link>http://www.gotdotnet.ru/blogs/jeje/8247/</link>
      <description><![CDATA[<img src="http://www.getpivot.com/images/logo-pivot.png" hspace="15" vspace="10" border="0" align="left"/> <p>Недавно был выпущен элемент управления <!--noindex--><a href="http://silverlight.net/learn/pivotviewer/" rel="nofollow">PivotViewer</a><!--/noindex-->, от команды Microsoft LiveLabs. Он является элементом управления <!--noindex--><a href="http://www.silverlight.net/" rel="nofollow">Silverlight</a><!--/noindex-->, который позволяет визуализировать информацию, используя технологию DeepZoom. Если вы до сих пор не видели, как оно работает, советую пройти в <!--noindex--><a href="http://silverlight.net/learn/pivotviewer/" rel="nofollow">отдел изучения PivotViewer</a><!--/noindex--></p> <p>На прошлой неделе я получил письмо, с просьбой показать более простой пример “how to”, используя данный инструмент. В конце концов это элемент управления Silverlight и он требует определенной реализации. И я подумал записать в свои заметки создание простейшей формы данных и отображения, используя PivotViewer. Я говорю “простой”, потому что вы можете получить гораздо сложнее вариант, но я хочу все же просто показать быстрые шаги реализации.</p> <p>Вначале запомните, что Pivot-коллекции представляют из себя комбинацию изображения и метаданных, которые описывают изображение. Если вы заходили на сайт <!--noindex--><a href="http://memorabilia.hardrock.com/" rel="nofollow">Hard Rock Memorabilia</a><!--/noindex-->, то это простой концепт, реализованный ранее на Silverlight.</p> <h3>Шаг 1 – Получите PivotViewer</h3> <p>Я предполагаю, что у вас <em>уже стоит Visual Studio 2010 и Silverlight 4 Tools.</em> Загрузить PivotViewer SDK можно в <!--noindex--><a href="http://silverlight.net/learn/pivotviewer" rel="nofollow">разделе обучения PivotViewer</a><!--/noindex--> на сайте Silverlight сообщества. После запуска инсталлятора, установка произведется по адресу %ProgramFiles%\Microsoft SDKs\Silverlight\v4.0\PivotViewer\&lt;RELEASE&gt;. В наличии папка с примерами исходных кодов, вы можете свободно с ними ознакомится, но скорее всего вам не понадобятся собственные действия и другие возможности. Мои шаги ниже – “PivotViewer 101” для получения простых коллекций. </p> <h3>Шаг 2 – Получите инструмент построения Pivot-коллекции</h3> <p>Для того, чтобы воспользоваться элементом управления, у вас должен быть источник данных для Pivot-коллекции. Это определенный формат данных в формате XML, который понимает PivotViewer и полноценный клиент Pivot. Документация по XML-схеме может быть найдена тут - <!--noindex--><a href="http://www.silverlight.net/learn/pivotviewer/collection-xml-schema/" rel="nofollow">PivotViewer Collection XML Schema</a><!--/noindex-->.&#160; Как видите она очень простая. Вы можете её сделать полностью руками, но зачем, если есть несколько инструментов, которые вам помогут!</p> <p>Существует 3 способа, чтобы создать источник для коллекции: командная строка, библиотека кода и Excel. Первые два, распространены в случае динамического источника. Это несколько вариантов в виде кода для различных типов источников, добавления метаданных и создания динамических на лету или с помощью JIT коллекций.</p> <p>Последний же – Excel, является самым простым. Команда LiveLabs создала простое дополнение для создания коллекции данных, используя знакомый интерфейс, не требуя явно копаться в схеме коллекции. Как только вы его установите, у вас появится новая закладка в Excel:</p> <p><img src="http://storage2.timheuer.com/pivot-viewer-tab.png" alt="Excel PivotViewer collection tool" title="Excel PivotViewer collection tool" border="0"/></p> <p>Когда вы нажмете на кнопку <em>New Collection, </em>то получите простую таблицу для начала построения собственного источника данных для коллекции.</p> <h3>Шаг 3 – Начинаем создавать данные для коллекции</h3> <p>Для моего примера, я собираюсь использовать обои от Bing, из последней Windows 7 темы “Bing’s Best”. У меня уже открыт Excel и я нажал на New Collection. Теперь я могу использовать функцию <em>Import Images</em>, чтобы загрузить кучу картинок. Но не буду этого делать. Я буду добавлять картинки выборочно, используя <em>Choose Image.</em></p> <p>Далее я хочу разнести все по разным колонкам, чтобы пользователь мог фильтровать по категориям. Я использовал функцию <em>Inset Column</em>, и передавал ей заголовок Category. Данные колонки трансформировались в Facets и согласно <!--noindex--><a href="http://www.silverlight.net/learn/pivotviewer/collection-xml-schema/" rel="nofollow">диаграмме схемы определения</a><!--/noindex--> они визуально преобразовываются в элементе управления - фильтры.</p> <p><img src="http://storage2.timheuer.com/pivot-viewer-tab2.png" alt="Building collection data" title="Building collection data" border="0"/></p> <p>Добавляйте данные пока не убедитесь,&#160; что таблица отображает все нужное. Я добавил всего одну колонку, но вы можете и больше. Итак я завершил заполнение и теперь выберу <em>Publish </em>для публикации коллекции.</p> <p>Результатом публикации будет CXML файл и папка с вашими нарезанными для DeepZoom изображениями. Запомните расположения ваших данных.</p> <h3>Шаг 4 – Создание Silverlight-приложения с реализацией PivotViewer</h3> <p>Учитывая, то у вас установлен SDK, запустите новый Silverlight-проект в Visual Studio. После проделайте простые действия:</p> <p>Добавьте ссылку на <em>Systen.Windows.Pivot,</em> так как в данной библиотеке находится PivotViewer.</p> <p>В MainPage.xaml добавьте XMLNS-объявления для пространства имен и реализации элемента управления:</p> <div class="blog-code-box"><pre>&lt;UserControl x:Class=&quot;SilverlightApplication164.MainPage&quot;
     xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
     xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
     xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
     xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;
     xmlns:pivot=&quot;clr-namespace:System.Windows.Pivot;assembly=System.Windows.Pivot&quot;
     mc:Ignorable=&quot;d&quot;
     d:DesignHeight=&quot;300&quot; d:DesignWidth=&quot;400&quot;&gt;
      
     &lt;Grid x:Name=&quot;LayoutRoot&quot; Background=&quot;White&quot;&gt;
        &lt;pivot:PivotViewer x:Name=&quot;MainPivotViewer&quot; /&gt;
     &lt;/Grid&gt;
&lt;/UserControl&gt;</pre></div> <p>Это все, что нужно сделать со стороны пользовательского интерфейса.</p> <p>Следующей задачей, которую я хочу проделать – сделать просмоторщик динамическим. Я хочу, что бы тот же XAP использовал мою коллекцию данных. В моем файле MainPage.xaml.cs, в событии Loaded, я использую API PivotViewer и вызываю функцию LoadCollection():</p> <div class="blog-code-box"><pre>public MainPage() 
{ 
    InitializeComponent(); 
    Loaded += new RoutedEventHandler(MainPage_Loaded); 
}
void MainPage_Loaded(object sender, RoutedEventArgs e) 
{
    string collection = App.Current.Host.InitParams[&quot;collection&quot;].ToString();  
    MainPivotViewer.LoadCollection(collection, string.Empty); 
} 
</pre></div> <p>Вы, наверное, обратили внимание, что я получаю значение из модели Silverligt InitParams. Это позволяет мне динамически отправлять URL коллекции на HTML страницу:</p> <div class="blog-code-box"><pre>&lt;object data=&quot;data:application/x-silverlight-2,&quot; type=&quot;application/x-silverlight-2&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;
  &lt;param name=&quot;source&quot; value=&quot;ClientBin/SilverlightApplication164.xap&quot;/&gt; 
  &lt;param name=&quot;onError&quot; value=&quot;onSilverlightError&quot; /&gt; 
  &lt;param name=&quot;background&quot; value=&quot;white&quot; /&gt; 
  &lt;param name=&quot;minRuntimeVersion&quot; value=&quot;4.0.50424.0&quot; /&gt; 
  &lt;param name=&quot;autoUpgrade&quot; value=&quot;true&quot; /&gt; 
  &lt;param name=&quot;initParams&quot; value=&quot;collection=URL_TO_CXML&quot; /&gt; 
  &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=4.0.50424.0&quot; rel=&quot;nofollow&quot; style=&quot;text-decoration: none&quot;&gt; 
    &lt;img src=&quot;http://go.microsoft.com/fwlink/?LinkId=161376&quot; __bxsrc=&quot;http://go.microsoft.com/fwlink/?LinkId=161376&quot; alt=&quot;Get Microsoft Silverlight&quot; border=&quot;0&quot; style=&quot;border-style: none&quot;/&gt; 
  &lt;/a&gt; 
&lt;/object&gt;</pre></div> <p>Так что я могу заново использовать XAP в различных местах и только менять значение initParams в теге &lt;object&gt;. Я закончил с XAP и теперь могу размещать его где угодно.</p> <h3>Шаг 5 – Публикуем результат</h3> <p>Последним шагом является публикация. Помните CXML файл и папку с изображениями? Они должны где-то размещаться. А вот два очень важных момента:</p> <ul><li>Если CXMK файл и изображения размещены не рядом с XAP файлом, тогда должны быть указаны кросс-доменные политики безопасности (clientaccesspolicy.xml). Иначе ничего работать <u>не будет</u>. PivotViewer делает сетевой запрос и данная политика нужна Silverlight для кросс-доменных ситуаций. </li>
 <li><em>Возможно</em>, вам придется добавить привязку MIME-типа на своем сервере, для работы CXML файлов. Мне пришлось (на Windows 2003). Я просто добавил привязку MIME-типа для .cxml и задал тип содержимого <em>text/xml,</em> все заработало. </li>
 </ul> <p>Как только я произвел все нужные действия, я могу приступить к размещению XAP на HTML странице и нацеливанию на работу с моей коллекцией данных. Как пример, полюбуйтесь на результат&#160; - <!--noindex--><a href="http://timheuer.com/silverlight/bingbest" rel="nofollow">Bing’s Best Pivot Collection</a><!--/noindex-->. Обратите внимание, как отображается колонка Category в виде фильтра слева. Сделал бы больше колонок, увидел бы больше фильтров. Я так же мог добавить больше метаданных и задать параметр HREF, для ссылания на определенные данные.</p> <p>Вы можете ознакомиться с другими примерами схем на сайте <!--noindex--><a href="http://www.getpivot.com/developer-info/#Kinds_of_Collections" rel="nofollow">GetPivot</a><!--/noindex-->:</p> <ul><li><!--noindex--><a href="http://content.getpivot.com/Collections/dogbreeds/dogbreeds.cxml" rel="nofollow">http://content.getpivot.com/Collections/dogbreeds/dogbreeds.cxml</a><!--/noindex--> </li>
 <li><!--noindex--><a href="http://content.getpivot.com/Collections/sportsillustrated/sportsillustrated.cxml" rel="nofollow">http://content.getpivot.com/Collections/sportsillustrated/sportsillustrated.cxml</a><!--/noindex--> </li>
 <li><!--noindex--><a href="http://content.getpivot.com/Collections/2009nflteams/2009nflteams.cxml" rel="nofollow">http://content.getpivot.com/Collections/2009nflteams/2009nflteams.cxml</a><!--/noindex--> </li>
 </ul> <p>Используя свой проект, я могу просто вводить URL в initParams для изменения коллекции, на какую захочу. Я также могу использовать <!--noindex--><a href="http://www.liveside.net/main/archive/2009/11/29/creating-the-microsoft-executive-pivot-we-play-and-you-can-too.aspx" rel="nofollow">Microsoft Organization Pivot Collection</a><!--/noindex-->, которую создала LiveSide, ничего не меняя: <!--noindex--><a href="http://timheuer.com/silverlight/msorgpivot/" rel="nofollow">MSFT Organization Pivot in Silverlight</a><!--/noindex-->.</p> <h3>Подытожим</h3> <p>Потратив всего несколько минут на элемент управления, вы получите простейший сценарий отображения данных. Фактически, создание источника данных для коллекции является самым сложным, определить все метаданные и т.п….</p> <p>Вы можете загрузить мой пример отсюда - <!--noindex--><a href="http://storage2.timheuer.com/PivotViewerSimpleSample.zip" rel="nofollow">PivotViewerSimpleSample.zip</a><!--/noindex--></p> <p>Источник – <!--noindex--><a href="http://timheuer.com/blog/archive/2010/07/09/data-visualization-with-silverlight-and-pivot-viewer-quickstart.aspx" rel="nofollow">Tim Heuer</a><!--/noindex--></p> ]]></description>
      <author><![CDATA[Jeje]]></author>
      <category><![CDATA[silverlight]]></category>
      <category><![CDATA[pivot]]></category>
      <category><![CDATA[excel]]></category>
      <guid isPermaLink="false">urn:bitrix:blog:post:8247</guid>
      <pubDate>Fri, 09 Jul 2010 21:13:55 UT</pubDate>
    </item>
  </channel>
</rss>