


<rss version="2.0">
   <channel>
    <title>Ни дня без кода</title>
    <link>http://www.shkolovy.com/</link>
    <description>Персональный блог Школового Артема</description>
    <language>en-us</language>
    <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
 
    <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
    <docs>http://www.shkolovy.com/</docs>
    <generator>Weblog Editor 2.0</generator>
    <managingEditor>support@shkolovy.com</managingEditor>
    <webMaster>support@shkolovy.com</webMaster>
 
 
 
 
 
    <item>
    
      <title>Рисуем капчу</title>
      <link>http://www.shkolovy.com/blog/article/1</link>
      <description>Я вообще очень негативно отношусь к капчам, но в некоторыхситуациях без них просто не обойтись. Я решил быть оригинальным и нарисовал ее сам. &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold; &quot;&gt;Фон&lt;/span&gt;&lt;br /&gt;
&lt;img src=&quot;http://img.picsa.ru/pictures/0/000/012/464/12464.png&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold; &quot;&gt;Цифры&lt;/span&gt;&lt;br /&gt;
&lt;img src=&quot;http://img.picsa.ru/pictures/0/000/012/465/12465.png&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
           Вместо цыфр могут быть буквы, слова, рисунки.&lt;br /&gt;
&lt;br /&gt;&lt;span id=more&gt;&lt;/span&gt;
           Теперь нужно сделать чтобы цифры появлялись в произвольном порядке:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;color:#2b91af;mso-no-proof:yes&quot;&gt;Bitmap&lt;/span&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt; objBitmap= &lt;span style=&quot;color:blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;Bitmap&lt;/span&gt;(260,50);&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:10.0pt;line-height:115%;font-family:courier new;color:#2b91af;mso-no-proof:yes&quot;&gt;Graphics&lt;/span&gt;&lt;span style=&quot;font-size:10.0pt;line-height:115%;font-family:courier new;mso-no-proof:yes&quot;&gt; objGraphics = &lt;span style=&quot;color:#2b91af&quot;&gt;Graphics&lt;/span&gt;.FromImage(objBitmap);&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:10.0pt;line-height:115%;font-family:courier new;color:#2b91af;mso-no-proof:yes&quot;&gt;Bitmap&lt;/span&gt;&lt;span style=&quot;font-size:10.0pt;line-height:115%;font-family:courier new;mso-no-proof:yes&quot;&gt; map = &lt;span style=&quot;color:blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;Bitmap&lt;/span&gt;(Server.MapPath(&lt;span style=&quot;color:#a31515&quot;&gt;&amp;quot;fon.png&amp;quot;&lt;/span&gt;));&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;color:blue;mso-no-proof:yes&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt; mw =map.Width;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;color:blue;mso-no-proof:yes&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt; mh =map.Height;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:10.0pt;line-height:115%;font-family:courier new;mso-no-proof:yes&quot;&gt;objGraphics.DrawImage(map, &lt;span style=&quot;color:blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;Rectangle&lt;/span&gt;(0,0, mw, mh));&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;/p&gt;&lt;/div&gt;Далее нужно сделать чтобы цыфры все время менялись:&lt;o:p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;color:#2b91af;mso-no-proof:yes&quot;&gt;Random&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;RandomClass = &lt;span style=&quot;color:blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;Random&lt;/span&gt;();&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-family: courier new; &quot;&gt;&amp;nbsp;int a =0;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(i&amp;lt; 5)&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intdig1 = RandomClass.Next(0, 10);&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dig1 == 1) line = 0;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dig1 == 2) line = 50;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dig1 == 3) line = 100;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dig1 == 4) line = 140;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dig1 == 5) line = 190;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dig1 == 6) line = 235;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dig1 == 7) line = 280;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dig1 == 8) line = 330;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (dig1 ==9) line = 370;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dig1 == 0) line = 420;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;font face=&quot;'Courier New'&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;objGraphics.DrawImage(dig, &lt;span style=&quot;color:blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;Rectangle&lt;/span&gt;(5 +a, 5, 50, 50),&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&lt;span style=&quot;color:blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#2b91af&quot;&gt;Rectangle&lt;/span&gt;(line, 0, 50, 50), &lt;span style=&quot;color:#2b91af&quot;&gt;GraphicsUnit&lt;/span&gt;.Pixel);&amp;nbsp; &lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;font color=&quot;#008000&quot; face=&quot;'Courier New'&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = i + 1;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal;mso-layout-grid-align:none;text-autospace:none&quot;&gt;&lt;span style=&quot;font-size:10.0pt;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = a + 50;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:10.0pt;line-height:115%;font-family:courier new;mso-no-proof:yes&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;font face=&quot;'Courier New'&quot;&gt;&lt;span style=&quot;line-height: 14px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt; Ну и в заключении  
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-size:10.0pt;line-height:115%;font-family:courier new;mso-no-proof:yes&quot;&gt;objBitmap.Save(Response.OutputStream, &lt;span style=&quot;color:#2b91af&quot;&gt;ImageFormat&lt;/span&gt;.Jpeg);&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;mso-ansi-language:en-us&quot;&gt;&lt;o:p /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;font face=&quot;'Courier New'&quot;&gt;&lt;span style=&quot;line-height: 14px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/o:p&gt;Смотрим что получилось:&lt;br /&gt;
&lt;img src=&quot;http://img-fotki.yandex.ru/get/3900/artemdude.12/0_2892e_2169bae1_L.jpg&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
 скачать рабочую капчу можно &lt;a href=&quot;http://code.google.com/p/painted-captcha/downloads/list&quot; target=&quot;_self&quot;&gt;здесь&lt;/a&gt;.</description>
      <pubDate>11/24/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Реализация Ajax в ASP.NET Web Form</title>
      <link>http://www.shkolovy.com/blog/article/2</link>
      <description>Хочу рассказать о том как передать и обработать информацию на сервере не перегружая страницу. В ASP.NET уже существуют такие инструменты в виде UpdatePanel и т.д, которые дают большие возможности, причем не имея абсолютно никаких знаний. Достаточно поиграться с этими инструментами полчаса и вуаля, готово! Но как показал мне горький опыт вместо того чтобы ускорить работу, все стало еще больше тормозить (использовался дешевый windows хостинг).&lt;br /&gt;
     &lt;br /&gt;
    Итак начнем. &lt;br /&gt;
   Идем &lt;a href=&quot;http://jquery.com/&quot; target=&quot;_self&quot;&gt;сюда&lt;/a&gt; и качаем библиотеку jquery (можно использовать и другие фреймворки, по вкусу) создаем новый сайт и самую простую форму:&lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;color: #000000; font-family: monospace; font-size: 11px; line-height: 20px; &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;input&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;id&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;some_text&amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;text&amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;br /&gt;
    &amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;input&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;id&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;some_button&amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;button&amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;value&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;OK&amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;div&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;id&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;some_div&amp;quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;div&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt; не забываем подключить библиотеку jquery&lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;color: #000000; font-family: monospace; font-size: 11px; line-height: 20px; &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;script&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;src&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;jquery-1.3.2.js&amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;text/javascript&amp;quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;script&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;теперь сам клиентский код который сначала отправит данные на сервер а потом их получит    
&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;color: #000000; font-family: monospace; font-size: 11px; line-height: 20px; &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;script&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;language&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;javascript&amp;quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;font color=&quot;#0000ff&quot;&gt;document&lt;/font&gt;).ready(&lt;font color=&quot;#0000ff&quot;&gt;function&lt;/font&gt;() {&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;font color=&quot;#A31515&quot;&gt;'#some_button'&lt;/font&gt;).click(&lt;font color=&quot;#0000ff&quot;&gt;function&lt;/font&gt;() {&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;send();&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
    &amp;nbsp;&amp;nbsp; });&amp;nbsp;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#0000ff&quot;&gt;function&lt;/font&gt;&amp;nbsp;send()&lt;br /&gt;
    {&lt;br /&gt;
    $.get(&lt;font color=&quot;#A31515&quot;&gt;&amp;quot;some_handler.ashx&amp;quot;&lt;/font&gt;, { text: $(&lt;font color=&quot;#A31515&quot;&gt;&amp;quot;#some_text&amp;quot;&lt;/font&gt;).val()},&lt;br /&gt;
    &amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;function&lt;/font&gt;(data){&lt;br /&gt;
    &amp;nbsp; $(&lt;font color=&quot;#A31515&quot;&gt;&amp;quot;#some_div&amp;quot;&lt;/font&gt;).html(data);&lt;br /&gt;
    &amp;nbsp;});&lt;br /&gt;
    }&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;script&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;с помощью метода GET мы отправляем данные с текстового поля в &lt;b&gt;some_handler.ashx&lt;/b&gt;.    
&lt;span id=&quot;more&quot;&gt;&lt;/span&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000; font-family: monospace; font-size: 11px; line-height: 20px; &quot;&gt;
&lt;ol style=&quot;margin-top: 1.5em; margin-right: 1em; margin-bottom: 1.5em; margin-left: 3em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: decimal; list-style-position: initial; list-style-image: initial; &quot;&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;using&lt;/font&gt;&amp;nbsp;System;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;using&lt;/font&gt;&amp;nbsp;System.Web;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;class&lt;/font&gt;&amp;nbsp;some_handler : IHttpHandler {&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;void&lt;/font&gt;&amp;nbsp;ProcessRequest (&lt;font color=&quot;#2B91AF&quot;&gt;HttpContext&lt;/font&gt;&amp;nbsp;context) {&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt;&amp;nbsp;somecomment = context.Request[&lt;font color=&quot;#A31515&quot;&gt;&amp;quot;text&amp;quot;&lt;/font&gt;];&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context.Response.Write(some_class.some_method(somecomment));&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;bool&lt;/font&gt;&amp;nbsp;IsReusable {&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;get&lt;/font&gt;&amp;nbsp;{&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;false&lt;/font&gt;;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;Дальше нужно создать класс some_class со статическим методом some_method который будет обрабатывать полученные данные    
&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;color: #000000; font-family: monospace; font-size: 11px; line-height: 20px; &quot;&gt;
&lt;ol style=&quot;margin-top: 1.5em; margin-right: 1em; margin-bottom: 1.5em; margin-left: 3em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: decimal; list-style-position: initial; list-style-image: initial; &quot;&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;class&lt;/font&gt;&amp;nbsp;some_class&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;{&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;static&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt;&amp;nbsp;some_method(&lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt;&amp;nbsp;some_string)&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;some_string =&amp;nbsp;&lt;font color=&quot;#A31515&quot;&gt;&amp;quot;Привет &amp;lt;b&amp;gt;&amp;quot;&lt;/font&gt;&amp;nbsp;+ some_string +&amp;nbsp;&lt;font color=&quot;#A31515&quot;&gt;&amp;quot;&amp;lt;/b&amp;gt; с сервера!!!&amp;quot;&lt;/font&gt;;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt;&amp;nbsp;some_string;&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;
&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; &quot;&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;/div&gt;</description>
      <pubDate>11/24/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Тестим RegExp</title>
      <link>http://www.shkolovy.com/blog/article/3</link>
      <description>Потрясающий сервис для проверки регулярных выражений. Также есть набор уже готовых наиболее часто нужных, например &lt;span style=&quot;font-weight: bold; &quot;&gt;/(https?://)?(www\.)?([a-zA-Z0-9_%]*)\b\.[a-z]{2,4}(\.[a-z]{2})?((/[a-zA-Z0-9_%]*)+)?(\.[a-z]*)?/g&lt;/span&gt; для поиска ссылок. Можно добавлять свои выражения и оценивать чужие.&lt;br /&gt;
&lt;img src=&quot;http://img.picsa.ru/pictures/0/000/012/475/12475.png&quot; /&gt;&lt;br /&gt;
 &lt;br /&gt;
Заходим и пользуемся&amp;nbsp;&lt;a href=&quot;http://gskinner.com/RegExr/&quot; target=&quot;_self&quot;&gt;http://gskinner.com/RegExr/&lt;/a&gt;</description>
      <pubDate>11/24/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Использование URL Rewrite в IIS7</title>
      <link>http://www.shkolovy.com/blog/article/4</link>
      <description>Основное назначение данного модуля это превратить ссылки типа&lt;br /&gt;
&lt;b&gt;http://yoursite.com/article.aspx?id=23&amp;amp;title=big_problem&lt;/b&gt;&lt;br /&gt;
в &lt;br /&gt;
&lt;b&gt;http://www.yoursite.com/article/23/big_problem&lt;/b&gt;&lt;br /&gt;
Думаю не стоит объяснять что это хорошо как для пользователя, так для поисковых систем.&lt;br /&gt;
Скачать данный модуль, а также ознакомиться с основой документацией можно на сайте производителя&amp;nbsp;&lt;a href=&quot;http://learn.iis.net/page.aspx/460/using-url-rewrite-module/&quot;&gt;http://learn.iis.net/page.aspx/460/using-url-rewrite-module/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Преимущества данного модуля в том, что вам не нужно беспокоиться о том поддерживает ли ваш хостинг Rewriting или нет, так как у любого нормального хостинга работающего на базе IIS7 этот модуль установлен и настроен. С вашей же стороны нужно прсто настроить &lt;b&gt;web.config&lt;/b&gt;.&lt;br /&gt;
 &lt;br /&gt;
&lt;span style=&quot;text-decoration: underline; &quot;&gt;Применение&lt;/span&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;system.webServer&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rewrite&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt; &lt;br /&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rules&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/font&gt;&lt;font class=&quot;rem&quot;&gt;&amp;lt;!-- Сдесь будут правила например yoursite.com to www.yoursite.com --&amp;gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rule&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;Redirect to WWW&amp;quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;stopProcessing&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;true&amp;quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;br /&gt;
&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;match&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;url&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;.*&amp;quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;br /&gt;
&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;conditions&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;br /&gt;
&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;add&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;input&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;{HTTP_HOST}&amp;quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;pattern&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;^yoursite.com$&amp;quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;br /&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;conditions&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;br /&gt;
&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;action&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;Redirect&amp;quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;url&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;http://www.yoursite.com /{R:0}&amp;quot;&lt;/font&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;redirectType&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;Permanent&amp;quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt; &lt;br /&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rule&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;br /&gt;
&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rules&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rewrite&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt; &lt;br /&gt;
&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;system.webServer&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt;
&lt;span id=&quot;more&quot;&gt;&lt;/span&gt;
Следующий пример на использования параметров (&lt;span style=&quot;font-weight: bold; &quot;&gt;yoursite.com/blog/article.aspx?id=34&lt;/span&gt; станет &lt;span style=&quot;font-weight: bold; &quot;&gt;yoursite.com/blog/article/34&lt;/span&gt;):
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rule&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;Query String Rewrite&amp;quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;br /&gt;
&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;match&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;url&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;blog/article/(.*)&amp;quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;action&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;Rewrite&amp;quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;url&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;blog/article.aspx?id={R:1}&amp;quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;appendQueryString&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;false&amp;quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rule&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt;Предположим что вы по каким то причинам не можете поменять свои ссылки, тогда вам нужно чтобы сначала выполнялся редирект, а только после этого реврайтинг: 
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rule&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;contacts redirect&amp;quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;br /&gt;
&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;match&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;url&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;contacts.aspx&amp;quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;br /&gt;
&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;action&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;Redirect&amp;quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;url&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;contacts&amp;quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;br /&gt;
&lt;/font&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rule&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;br /&gt;
&lt;/font&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rule&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;contacts Rewrite &amp;quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;br /&gt;
&lt;/font&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;match&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;url&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;contacts&amp;quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;action&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;Rewrite&amp;quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;url&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&amp;quot;contacts.aspx&amp;quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;rule&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt; Если ваш хостинг не поддерживает &lt;b&gt;URL Rewrite Module&lt;/b&gt;, то можно воспользоваться аналогами, которые работаю с более поздними версиями IIS:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.urlrewriting.net/&quot; target=&quot;_self&quot;&gt;http://www.urlrewriting.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://urlrewriter.net/&quot;&gt;http://urlrewriter.net/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>11/24/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Размещение Google Talk на своем сайте</title>
      <link>http://www.shkolovy.com/blog/article/5</link>
      <description>&lt;img src=&quot;http://www.google.com/talk/images/talk_logo.gif&quot; align=&quot;left&quot; style=&quot;margin-right:15px&quot; /&gt;С появлением виджета Gtalk ваш читатель может пообщаться с вами прямо с сайта, даже не имея аккаунта на Gmail. &lt;br /&gt;
 Сделать это просто, нужно настроить внешний вид и разместить полученную ссылку у себя на сайте или блоге. &lt;br /&gt;
 Выгладить это будет примерно так:&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://img-kiev.fotki.yandex.ru/get/4101/artemdude.12/0_28df1_4b25fe95_orig&quot; /&gt;&lt;br /&gt;
  Если вы находетесь онлайн, пользователь может нажать по ссылке и поговорить с вами:&lt;br /&gt;
&lt;img src=&quot;http://img-fotki.yandex.ru/get/4101/artemdude.12/0_29176_1f44003f_L.jpg&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.google.com/talk/service/badge/New&quot;&gt;http://www.google.com/talk/service/badge/New&lt;/a&gt;</description>
      <pubDate>11/26/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Проблемы с postback при использовании URL rewriting</title>
      <link>http://www.shkolovy.com/blog/article/7</link>
      <description>Проблемы с postback при использовании URL rewriting По своей природе ASP.NET Web Form использует &lt;span style=&quot;font-weight: bold; &quot;&gt;PostBack&lt;/span&gt; при взаимодействии с сервером. Например при событии нажатия на кнопку   
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;protected&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;void&lt;/font&gt; Button1_Click(&lt;font color=&quot;#0000ff&quot;&gt;object&lt;/font&gt; sender, &lt;font color=&quot;#2B91AF&quot;&gt;EventArgs&lt;/font&gt; e) &lt;br /&gt;
  &amp;nbsp; { &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt;  Если мы используем прописанные правила URL rewriting, то после &lt;span style=&quot;font-weight: bold; &quot;&gt;postback&lt;/span&gt; идет посылание на переписанную страницу, которой не существует(например на &lt;span style=&quot;font-weight: bold; &quot;&gt;main/&lt;/span&gt; вместо &lt;span style=&quot;font-weight: bold; &quot;&gt;Default.aspx&lt;/span&gt;), из за чего событие просто не находиться.  Начиная с  Framework 3.5 SP1 это проблему можно легко решить.  Для того чтобы назначить postback URL используется свойство &lt;span style=&quot;font-weight: bold; &quot;&gt;Action&lt;/span&gt;, которое позволить дать ответ браузеру до переписывания URL. Для этого нужно просто вставить этот код на страницу:   
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;protected&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;void&lt;/font&gt; Page_Load(&lt;font color=&quot;#0000ff&quot;&gt;object&lt;/font&gt; sender, &lt;font color=&quot;#2B91AF&quot;&gt;EventArgs&lt;/font&gt; e)&amp;nbsp;&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;{&amp;nbsp; &amp;nbsp;&lt;br /&gt;
  &amp;nbsp;form1.Action = Request.RawUrl;&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt; &lt;/div&gt;</description>
      <pubDate>11/28/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Проблема с дублированием меток</title>
      <link>http://www.shkolovy.com/blog/article/16</link>
      <description>Реализация меток на сайте стало очень распостраненным, это помогает более быстро и легко найти нужную информацию, а также это дает дополнительное индексирования ваших статей поисковыми системами. Обычно реализовуют это следующим образом, нужно ввести через кому все относящиеся к статье по вашему мнению теги, напрмер:&lt;br /&gt;
&lt;br /&gt;
 &lt;span style=&quot;font-weight: bold; &quot;&gt;Интернет, asp.net, c#&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
 Разделение тегов я решаю с помощью регулярных выражений: &lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt;Match m = Regex.Match(tagBox.Text, &lt;font color=&quot;#A31515&quot;&gt;@&amp;quot;([\w\. ]*),&amp;quot;&lt;/font&gt;, RegexOptions.IgnoreCase | RegexOptions.Compiled);&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt;  Данное регулярное выражение найдет слова(символы, пробелы) после которых соит кома, это позволит разбить вводимую строку на нужные нам теги и поочереди занести их в базу.
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;while&lt;/font&gt; (m.Success)&lt;br /&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&lt;font color=&quot;#008000&quot;&gt;//Заносим в базу&lt;br /&gt;
&lt;/font&gt;m = m.NextMatch(); &lt;font color=&quot;#008000&quot;&gt;//переходим к следующей метке&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt;Но при реализации может возникнуть несколько проблем, так как записи типа &lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;Пример 1. Интернет , asp.net , c# ,&lt;br /&gt;
 Пример 2. &amp;nbsp; Интернет,asp.net,c#&lt;br /&gt;
 Пример 3. Интернет, asp.net, c#,&lt;br /&gt;
&lt;/div&gt; Означают не одно и тоже, например тег &lt;span style=&quot;font-weight: bold; &quot;&gt;Интернет&lt;/span&gt; продублируэться в базе аж 3 раза из за пробелов стоящих то до то после самого слова. А во втором примере метка C# вовсе не попадет в базу, так как после нету комы. Исправить можно следующим образом:
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt; text = &lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt;.Empty;&lt;br /&gt;
 Match m1 = Regex.Match(text, &lt;font color=&quot;#A31515&quot;&gt;@&amp;quot;(.)*,&amp;quot;&lt;/font&gt;, RegexOptions.IgnoreCase | RegexOptions.Compiled);&amp;nbsp;&lt;span style=&quot;color: #008000; &quot;&gt;// находим есть ли в конце кома&lt;/span&gt;&lt;br /&gt;
 &lt;font color=&quot;#0000ff&quot;&gt;&lt;br /&gt;
if&lt;/font&gt; (m1.Success) &amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;text = tagBox.Text.Replace(&lt;font color=&quot;#A31515&quot;&gt;&amp;quot; &amp;quot;&lt;/font&gt;, &lt;font color=&quot;#A31515&quot;&gt;&amp;quot;&amp;quot;&lt;/font&gt;);&lt;font color=&quot;#008000&quot;&gt;// Replace(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;) означает что мы убираем все пробелы, чтобы избежать дублиорвания тегов&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; } &amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;else&lt;/font&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;text = tagBox.Text.Replace(&lt;font color=&quot;#A31515&quot;&gt;&amp;quot; &amp;quot;&lt;/font&gt;, &lt;font color=&quot;#A31515&quot;&gt;&amp;quot;&amp;quot;&lt;/font&gt;) + &lt;font color=&quot;#A31515&quot;&gt;&amp;quot;,&amp;quot;&lt;/font&gt;; &amp;nbsp;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #008000; &quot;&gt;// если комы нет, добавляем ее&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br /&gt;</description>
      <pubDate>11/28/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Реализация звездного рейтинга на ASP.NET</title>
      <link>http://www.shkolovy.com/blog/article/17</link>
      <description>Должно получиться довольно шустрое ajax голосование(у меня на обработку ушло 13ms).&lt;img src=&quot;http://img-kiev.fotki.yandex.ru/get/4005/artemdude.12/0_296b1_e8fa4f18_orig&quot; /&gt; &lt;br /&gt;
&lt;br /&gt;
       Для реализации рейтинга будтем использовать уже готовый Jquey плагин.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold; &quot;&gt;Что нам потребуеться:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://jquery.com/&quot;&gt;http://jquery.com/&lt;/a&gt;&amp;nbsp;-&amp;nbsp;собственно сам фреймворк&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.m3nt0r.de/devel/raterDemo/jquery.rater-1.0.zip&quot; target=&quot;_self&quot;&gt;http://www.m3nt0r.de/devel/raterDemo/jquery.rater-1.0.zip&lt;/a&gt;&amp;nbsp;-&amp;nbsp;плагин&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.m3nt0r.de/devel/raterDemo/&quot; target=&quot;_self&quot;&gt;http://www.m3nt0r.de/devel/raterDemo/&lt;/a&gt;&amp;nbsp;- глянуть как работает&lt;/li&gt;&lt;/ul&gt;  К примеру реализуем рейтинг состоящий из 20 маленьких звездочек, каждый голос должен заноситься в базу без перезагрузки страницы.  &lt;span id=&quot;more&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold; &quot;&gt;default.aspx&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt;$(&lt;font color=&quot;#A31515&quot;&gt;'#demo2'&lt;/font&gt;).rater(&lt;font color=&quot;#A31515&quot;&gt;'Handler.ashx'&lt;/font&gt;, {maxvalue:20, style: &lt;font color=&quot;#A31515&quot;&gt;'small'&lt;/font&gt;});&lt;br /&gt;
         &amp;lt;span id=&lt;font color=&quot;#A31515&quot;&gt;&amp;quot;demo2&amp;quot;&lt;/font&gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;nbsp;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt;через хендлер &lt;span style=&quot;font-weight: bold; &quot;&gt;Handler.ashx&lt;/span&gt; передаем наш голос класу &lt;span style=&quot;font-weight: bold; &quot;&gt;starClass.cs&lt;br /&gt;
&lt;/span&gt;        
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt; &lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt; somerating = context.Request[&lt;font color=&quot;#A31515&quot;&gt;&amp;quot;rating&amp;quot;&lt;/font&gt;]; context.Response.Write(starClass.starMethod(somerating));&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt;  &lt;br /&gt;
       в классе &lt;span style=&quot;font-weight: bold; &quot;&gt;starClass.cs&lt;/span&gt; происходит его обработака и возврат результата:&lt;br /&gt;
        &lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size=&quot;2&quot; face=&quot;Courier New&quot; color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;class&lt;/font&gt; starClass&lt;br /&gt;
        {&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt; starMethod(&lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt; rat)&lt;br /&gt;
        &amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt; _result = &lt;font color=&quot;#A31515&quot;&gt;&amp;quot;&amp;quot;&lt;/font&gt;; &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;try&lt;/font&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;{ &amp;nbsp;&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlConnection conn = &lt;font color=&quot;#0000ff&quot;&gt;new&lt;/font&gt; SqlConnection(&lt;font color=&quot;#2B91AF&quot;&gt;ConfigurationManager&lt;/font&gt;.ConnectionStrings[&lt;font color=&quot;#A31515&quot;&gt;&amp;quot;ConnectionString&amp;quot;&lt;/font&gt;].ConnectionString); &lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt; sql = &lt;font color=&quot;#A31515&quot;&gt;&amp;quot;INSERT INTO [starT] ([value_star]) VALUES (@value_star)&amp;quot;&lt;/font&gt;; &amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;conn.Open(); &lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#2B91AF&quot;&gt;SqlCommand&lt;/font&gt; cmd = &lt;font color=&quot;#0000ff&quot;&gt;new&lt;/font&gt; &lt;font color=&quot;#2B91AF&quot;&gt;SqlCommand&lt;/font&gt;(sql, conn); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.Parameters.AddWithValue(&lt;font color=&quot;#A31515&quot;&gt;&amp;quot;@value_star&amp;quot;&lt;/font&gt;, rat); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandType = CommandType.Text;&lt;br /&gt;
        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.ExecuteNonQuery(); &lt;br /&gt;
       &amp;nbsp;&lt;br /&gt;
       &amp;nbsp;conn.Close(); &lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;_result = &lt;font color=&quot;#A31515&quot;&gt;&amp;quot;Ваш голос принят! оценка &amp;quot;&lt;/font&gt; + rat; &amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;catch&lt;/font&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;_result = &lt;font color=&quot;#A31515&quot;&gt;&amp;quot;error&amp;quot;&lt;/font&gt;; &amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
       &amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt; _result; &amp;nbsp;&lt;br /&gt;
       &amp;nbsp;} &lt;br /&gt;
&lt;br /&gt;
       }&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br /&gt;
       Все, рейтинг готов :) &lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/ajax-rating-star/downloads/list&quot;&gt;http://code.google.com/p/ajax-rating-star/downloads/list&lt;/a&gt;&amp;nbsp;- скачать рабочий пример</description>
      <pubDate>11/29/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Подсветка исходного кода</title>
      <link>http://www.shkolovy.com/blog/article/18</link>
      <description>При написании статей я столкнулся с проблемой подсветки исходного кода. Решением стало&amp;nbsp;&lt;a href=&quot;http://source.virtser.net/&quot;&gt;http://source.virtser.net/&lt;/a&gt;. Вбрасываем туда нужный код, и получаем уже обработанный и подсвеченный код. Затем все эти иероглифы нужно было засунуть в статью, добавить span с классом code который делал бы фон серым и темную полоску слева. Очень неудобно и долго :(&lt;br /&gt;
&lt;br /&gt;
             Нашел другой способ&amp;nbsp;&lt;a href=&quot;http://code.google.com/p/syntaxhighlighter/&quot;&gt;http://code.google.com/p/syntaxhighlighter/&lt;/a&gt;. Код&amp;nbsp;подсвечиваться&amp;nbsp;уже на стороне клиента, то есть работает полностью на &lt;span style=&quot;font-weight: bold; &quot;&gt;javascript&lt;/span&gt;. По моему очень удобная штука ;)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Что получиться:&lt;/b&gt;&lt;br /&gt;
                        
&lt;pre class=&quot;brush: c-sharp;&quot;&gt;  
 protected void Page_Load(object sender, EventArgs e)   
                                    {  
                     Response.Write(&amp;quot;Hello World&amp;quot;);     
                                   }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
        Для установки качаем скрипты и размещаем на странице. Кистей много, практически для всех языков программирования, ставьте только те которыми будете пользоваться чтобы не перегружать страницу.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold; &quot;&gt;Пример использования:&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush: c-sharp;&quot;&gt;
  &amp;lt;pre class=&amp;quot;brush: c-sharp; toolbar: false;&amp;quot;&amp;gt;    
       protected void Page_Load(object sender, EventArgs e)    
                  {                       
     Response.Write(&amp;amp;quot;Hello World&amp;amp;quot;);      
                   }    
  &amp;lt;/pre&amp;gt; 
 &lt;/pre&gt;
&lt;span id=&quot;more&quot;&gt;&lt;/span&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://alexgorbatchev.com/wiki/SyntaxHighlighter:Download&quot; rel=&quot;nofollow&quot;
target=&quot;_self&quot;&gt;http://alexgorbatchev.com/wiki/SyntaxHighlighter:Download&lt;/a&gt;&amp;nbsp;- скачать плагин&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot;
href=&quot;http://alexgorbatchev.com/wiki/SyntaxHighlighter:Configuration&quot;&gt;http://alexgorbatchev.com/wiki/SyntaxHighlighter:Configuration&lt;/a&gt;&amp;nbsp;- перечень основных настроек&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot;
href=&quot;http://alexgorbatchev.com/wiki/SyntaxHighlighter:Brushes&quot;&gt;http://alexgorbatchev.com/wiki/SyntaxHighlighter:Brushes&lt;/a&gt;&amp;nbsp;- кисти&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot;
href=&quot;http://alexgorbatchev.com/wiki/SyntaxHighlighter:Themes&quot;&gt;http://alexgorbatchev.com/wiki/SyntaxHighlighter:Themes&lt;/a&gt;&amp;nbsp;- темы&lt;/li&gt;&lt;/ul&gt; &lt;span style=&quot;font-weight: bold; &quot;&gt;Несколько основных настроек:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
         &lt;span style=&quot;font-weight: bold; &quot;&gt;gutter: false;&lt;/span&gt; убрать нумерацию &lt;br /&gt;
&lt;span style=&quot;font-weight: bold; &quot;&gt;toolbar: false;&lt;/span&gt; убрать панель помощи&lt;br /&gt;
         &lt;span style=&quot;font-weight: bold; &quot;&gt;wrap-lines: true;&lt;/span&gt; включить полосу прокрутки(если длинный код)&lt;br /&gt;
         &lt;span style=&quot;font-weight: bold; &quot;&gt;auto-links: true;&lt;/span&gt; ссылка в коде становиться кликабельной&lt;br /&gt;
         &lt;span style=&quot;font-weight: bold; &quot;&gt;first-line: 10;&lt;/span&gt; начинаем номирацию с 10&lt;br /&gt;
         &lt;span style=&quot;font-weight: bold; &quot;&gt;collapse: true;&lt;/span&gt; свернутый код</description>
      <pubDate>11/30/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Шпаргалка по LINQ to SQL</title>
      <link>http://www.shkolovy.com/blog/article/21</link>
      <description>Отличная шпаргалка LINQ to SQL разработанная Damien Guard на C# и VB.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://images.damieng.com/blog/LINQToSQLCheatSheet.png&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
 Качаем в &lt;span style=&quot;font-weight: bold;&quot;&gt;pdf&lt;/span&gt; формате :)&lt;br /&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;http://damieng.com/blog/2009/08/12/linq-to-sql-cheat-sheet&quot;&gt;http://damieng.com/blog/2009/08/12/linq-to-sql-cheat-sheet&lt;/a&gt;</description>
      <pubDate>12/2/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Периодическое обновление с помощью Jquery</title>
      <link>http://www.shkolovy.com/blog/article/22</link>
      <description>Данный пример можно использовать как угодно, например для смены рекламного баннера без перезагрузки страницы или для получения мгновенных сообщений. Пример взял самый простой, каждые 3 секунды число &lt;b&gt;i&lt;/b&gt; становиться больше на 1.

&lt;pre class=&quot;brush:js;&quot;&gt;
 &lt;script language=javascript&gt;
   var i = 0;
   $(document).ready(function(){

  setInterval(&quot;count()&quot;, 3000);

     });
     
      function count()
{
i = i + 1;
 $(&quot;#Div1&quot;).html(i);
}
&lt;/script&gt;
&lt;/pre&gt;</description>
      <pubDate>12/2/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Последние фото с Flickr на своем сайте</title>
      <link>http://www.shkolovy.com/blog/article/23</link>
      <description>Простой метод загрузить на свой сайт или блог ваших последних фотографий  не используя дополнительных плагинов. У Flickr есть очень удобная фича &lt;b&gt;Flickr JSONP API&lt;/b&gt;. Любое фото можно получить в виде JSON объекта.&lt;br /&gt;
&lt;br /&gt;
 Например можно глянуть все фото с тегом &lt;b&gt;internet&lt;/b&gt; по адресу http://api.flickr.com/services/feeds/photos_public.gne?tags=internet&amp;amp;tagmode=any&amp;amp;format=json&amp;amp;jsoncallback=?&lt;br /&gt;
&lt;br /&gt;
 Используя jquery получаем последние 4 фото:&lt;br /&gt;
&lt;pre class=&quot;brush:js; auto-links: false;&quot;&gt; &amp;lt;script language=javascript&amp;gt;
 $.getJSON(&amp;quot;http://api.flickr.com/services/feeds/photos_public.gne?tags=internet&amp;amp;tagmode=any&amp;amp;format=json&amp;amp;jsoncallback=?&amp;quot;,
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function(data){
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.each(data.items, function(i,item){
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&amp;quot;&amp;lt;img/&amp;gt;&amp;quot;).attr(&amp;quot;src&amp;quot;, item.media.m).appendTo(&amp;quot;#images&amp;quot;);
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( i == 3 ) return false;&lt;br /&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
 &amp;lt;/script&amp;gt;
&amp;lt;div id=&amp;quot;images&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Для получения своих фото нужно использовать другой адрес:&lt;br /&gt;
...photos_public.gne?id=10401522@N05&amp;amp;lang=en-us&amp;amp;format=json&amp;amp;jsoncallback=?&lt;br /&gt;
где id=ваш_айди&lt;br /&gt;</description>
      <pubDate>12/2/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Проверка логина на уникальность</title>
      <link>http://www.shkolovy.com/blog/article/24</link>
      <description>Часто на различных сайтах при вводе любимого логина вам пишет &amp;quot;&lt;span style=&quot;font-style: italic; &quot;&gt;такой пользователь уже зарегистрирован&lt;/span&gt;&amp;quot;. На &lt;span style=&quot;font-weight: bold; &quot;&gt;asp.net&lt;/span&gt; тоже реализована такая функция, но  только после перезагрузки страницы, да еще и поле с паролем очищаться(лично меня очень раздражает). &lt;br /&gt;
&lt;br /&gt;
В примере ниже я покажу как сделать проверку уникальности логина без перезагрузки страницы. &lt;img src=&quot;http://img-kiev.fotki.yandex.ru/get/4105/artemdude.12/0_2a28d_44d2feb1_orig&quot; /&gt;
&lt;br /&gt;
Как всегда для передачи данных на сервер используем jquery&lt;span id=&quot;more&quot;&gt;&lt;/span&gt;
&lt;pre class=&quot;brush:js; toolbar: false; gutter: false; &quot;&gt;
&lt;script src=&quot;jquery-1.3.2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script language=&quot;javascript&quot;&gt;
   
   $(document).ready(function() {
    $('#some_button').click(function() {
    send();
    
   }); 
});

function send()
{
$.get(&quot;Handler.ashx&quot;, { text: $(&quot;#some_text&quot;).val()},
 function(data){
  $(&quot;#some_span&quot;).html(data);
 });
}
  &lt;/script&gt;
    &lt;/pre&gt;
&lt;pre class=&quot;brush:xml; toolbar: false; gutter: false;&quot;&gt;
 &lt;input id=&quot;some_text&quot; type=&quot;text&quot; /&gt;
 &lt;input id=&quot;some_button&quot; type=&quot;button&quot; value=&quot;проверить&quot; style=&quot;font-weight: bold&quot; /&gt;
 &lt;span id=&quot;some_span&quot;&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Handler.ashx&lt;/b&gt;
&lt;pre class=&quot;brush:c-sharp; &quot;&gt;
string text = context.Request[&quot;text&quot;];
context.Response.Write(match_login.match_loginM(text));
&lt;/pre&gt;
&lt;b&gt;match_login.cs&lt;/b&gt;
&lt;pre class=&quot;brush:c-sharp; wrap-lines: true&quot;&gt;
public class match_login
{
	public static string match_loginM(string login_name)
	{
        string _value = string.Empty;

        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[&quot;ConnStr&quot;].ConnectionString);
        SqlCommand command = new SqlCommand(&quot;SELECT * FROM [vw_aspnet_Users] WHERE UserName like @login&quot;, conn);
        conn.Open();
        command.Parameters.Add(new SqlParameter(&quot;@login&quot;, login_name));
        SqlDataReader dr = command.ExecuteReader();

        if (!dr.HasRows)
          
            _value = &quot;&lt;font color='green'&gt;такого логина еще нету&lt;/font&gt;&quot;;
        else
            _value = &quot;&lt;font color='red'&gt;такой логин уже используется&lt;/font&gt;&quot;;

        dr.Close();
        conn.Close();

        return _value;
	}
}
&lt;/pre&gt;
&lt;br /&gt;
скачать рабочий пример &lt;a href=&quot;http://code.google.com/p/shkolovy-code/downloads/list&quot;&gt;http://code.google.com/p/shkolovy-code/downloads/list&lt;/a&gt;</description>
      <pubDate>12/3/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title> Форма отправки почты на ASP.NET</title>
      <link>http://www.shkolovy.com/blog/article/25</link>
      <description>Пример самой простой формы отправки почты:&lt;br /&gt;
&lt;img 

src=&quot;http://img-kiev.fotki.yandex.ru/get/4100/artemdude.12/0_2a390_14cbfc95_ori

g&quot; /&gt;&lt;br /&gt;

&lt;b&gt;Default.aspx&lt;/b&gt;
&lt;pre class=&quot;brush:html;toolbar: false;&quot;&gt;
 Ваше имя&lt;br /&gt;
&lt;asp:TextBox ID=&quot;boxname&quot; MaxLength=&quot;50&quot;  runat=&quot;server&quot;&gt;&lt;/asp:TextBox&gt;
Эл. почта&lt;br /&gt;
&lt;asp:TextBox ID=&quot;boxmail&quot;  MaxLength=&quot;30&quot; runat=&quot;server&quot;&gt;&lt;/asp:TextBox&gt;
Сообщение&lt;br /&gt;
&lt;asp:TextBox ID=&quot;boxbody&quot; runat=&quot;server&quot; TextMode=&quot;MultiLine&quot;&gt;&lt;/asp:TextBox&gt;
&lt;asp:Button ID=&quot;Button1&quot; runat=&quot;server&quot; Text=&quot;Отправить&quot; onclick=&quot;Button1_Click&quot; &gt;&lt;/asp:Button&gt;
&lt;asp:Label ID=&quot;sent&quot; runat=&quot;server&quot; &gt;&lt;/asp:Label&gt;
&lt;/pre&gt;

&lt;b&gt;Default.aspx.cs&lt;/b&gt;
&lt;pre class=&quot;brush:c-sharp;toolbar: false;&quot;&gt;
protected void Button1_Click(object sender, EventArgs e)
    {

        SendMail();
    }

    private void SendMail()
    {
        MailMessage emailMessage;
        emailMessage = new MailMessage();
        emailMessage.From = boxname.Text + &quot;&lt;&quot; + boxmail.Text + &quot;&gt;&quot;;
        emailMessage.To = &quot;support@yourdomain.com&quot;;
        emailMessage.Subject = &quot;your subject&quot;;
        emailMessage.Body = boxbody.Text;
        SmtpMail.SmtpServer = &quot;mail.yourdomain.com&quot;;


        try
        {
            SmtpMail.Send(emailMessage);
            sent.Text = &quot;Сообщение успешно отправлено&quot;;
        }
        catch (Exception ex)
        {
            sent.Text = &quot;error:&quot; + ex.Message;

        }


    }
&lt;/pre&gt;

&lt;a href=&quot;http://code.google.com/p/shkolovy-code/downloads/list&quot;&gt;Скачать пример&lt;/a&gt;</description>
      <pubDate>12/4/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Фильтр html тегов</title>
      <link>http://www.shkolovy.com/blog/article/26</link>
      <description>Суть в том чтобы оставить только нужные нам теги. Например тег &amp;lt;script&amp;gt; должен записаться как &amp;amp;lt;script&amp;amp;gt;, а тег &amp;lt;b&amp;gt;text&amp;lt;/b&amp;gt; так и останется. Это можно использовать в форме для отправки комментария, когда вы хотите разрешить только самые основные теги(например жирный, подчеркнутый, наклоненный текст). Остальные теги нужно отображать в том виде в котором их вводили, к примеру кто то захотел в комментариях продемонстрировать свой JavaScript код.&lt;br /&gt;
&lt;img src=&quot;http://img-kiev.fotki.yandex.ru/get/3903/artemdude.12/0_2a60e_980b2541_orig&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span id=&quot;more&quot;&gt;&lt;/span&gt;
&lt;b&gt;Форма отправки:&lt;/b&gt;
&lt;pre class=&quot;brush:html&quot; &gt; 
&lt;asp:TextBox ID=&quot;TextBox1&quot; runat=&quot;server&quot;  TextMode=&quot;MultiLine&quot;   Width=&quot;257px&quot;&gt;&lt;/asp:TextBox&gt;&lt;br /&gt;
&lt;asp:Button ID=&quot;Button1&quot; runat=&quot;server&quot; onclick=&quot;Button1_Click&quot; Text=&quot;отправить&quot; &gt;&lt;/asp:Button&gt;
&lt;br /&gt;
&lt;asp:Label ID=&quot;Label1&quot; runat=&quot;server&quot; &gt;&lt;/asp:Label&gt;
&lt;/pre&gt;

Суть метода достаточно проста, избавляемся от всех тегов заменяя &lt;span style=&quot;font-weight: bold; &quot;&gt;&amp;lt;&lt;/span&gt; и &lt;span style=&quot;font-weight: bold; &quot;&gt;&amp;gt;&lt;/span&gt; на&amp;nbsp;&lt;span style=&quot;color: #000000; white-space: pre-wrap; font-weight: bold; &quot;&gt;&amp;amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000; white-space: pre-wrap; &quot;&gt; и &lt;span style=&quot;font-weight: bold; &quot;&gt;&amp;amp;gt;&lt;/span&gt;&lt;/span&gt;

после этого ищем разрешенные теги и делаем обратное действие.
&lt;pre class=&quot;brush:csharp; collapse: true;&quot; &gt;  
 private string FormatLinkBits(Match m)
    {
        if (m.Groups[&quot;theTags&quot;].Success) 
        {
            string bb = m.Groups[&quot;theTags&quot;].Value;
            Regex re1 = new Regex(@&quot;\&amp;lt;(i|b|u|strike)\&amp;gt;&quot;);
            bb = re1.Replace(bb, &quot;&lt;$1&gt;&quot;);
            return bb;

        }

        if (m.Groups[&quot;theTagsClose&quot;].Success)  
        {
            string bbc = m.Groups[&quot;theTagsClose&quot;].Value;
            Regex re12 = new Regex(@&quot;\&amp;lt;\/(i|b|u|strike)\&amp;gt;&quot;);
            bbc = re12.Replace(bbc, &quot;&lt;/$1&gt;&quot;);
            return bbc;


        }

        if (m.Groups[&quot;br&quot;].Success)   
        {
            string bbc = m.Groups[&quot;br&quot;].Value;
            Regex re12 = new Regex(@&quot;\r&quot;);
            bbc = re12.Replace(bbc, &quot;&lt;br /&gt;&quot;);
            return bbc;


        }


        if (m.Groups[&quot;quote&quot;].Success)   
        {
            string theQuote = m.Groups[&quot;quote&quot;].Value;
            Regex re1 = new Regex(@&quot;\&amp;lt;blockquote\&amp;gt;&quot;);
            theQuote = re1.Replace(theQuote, &quot;&lt;blockquote&gt;&quot;);
            return theQuote;
        }

        if (m.Groups[&quot;quoteclose&quot;].Success)  
        {
            string theQuote = m.Groups[&quot;quoteclose&quot;].Value;
            Regex re1 = new Regex(@&quot;\&amp;lt;\/blockquote\&amp;gt;&quot;);
            theQuote = re1.Replace(theQuote, &quot;&lt;/blockquote&gt;&quot;);
            return theQuote;
        }


        if (m.Groups[&quot;img&quot;].Success)   
        {
            string theQuote = m.Groups[&quot;img&quot;].Value;
            Regex re1 = new Regex(@&quot;\&amp;lt;img (.*) \/\&amp;gt;&quot;);
            theQuote = re1.Replace(theQuote, &quot;&lt;img $1 /&gt;&quot;);
            return theQuote;
        }

        if (m.Groups[&quot;link&quot;].Success)  
        {
            string theLink = m.Groups[&quot;link&quot;].Value;
            Regex re1 = new Regex(@&quot;\&amp;lt;link (.*)\&amp;gt;(.*)\&amp;lt;\/link\&amp;gt;&quot;);        //\&amp;lt;a href=&quot;.*&quot; * \&amp;gt;.*\&amp;lt;\/a\&amp;gt;)
            theLink = re1.Replace(theLink, &quot;&lt;a href='$1'&gt;$2&lt;/a&gt;&quot;);
            return theLink;
        }

        return m.Value;
    }
&lt;/pre&gt;
&lt;pre class=&quot;brush:csharp; collapse: true; first-line: 68;&quot; &gt; 
    private string convert(Match m)
    {
        if (m.Groups[&quot;l&quot;].Success)
        {
            string bb = m.Groups[&quot;l&quot;].Value;
            Regex re1 = new Regex(@&quot;&lt;&quot;);
            bb = re1.Replace(bb, &quot;&amp;lt;&quot;);
            return bb;


        }
        else
        {

            if (m.Groups[&quot;r&quot;].Success)
            {
                string theSmile = m.Groups[&quot;r&quot;].Value;
                Regex re1 = new Regex(@&quot;&gt;&quot;);
                theSmile = re1.Replace(theSmile, &quot;&amp;gt;&quot;);
                return theSmile;
            }


        }
        return m.Value;
    }
&lt;/pre&gt;
&lt;pre class=&quot;brush:csharp; collapse: true; first-line: 94;&quot; &gt; 
 protected void Button1_Click(object sender, EventArgs e)
    {
        string inputStr = TextBox1.Text;
        string outStr = string.Empty;

        Regex del = new Regex(@&quot;(?'l'&lt;)|(?'r'&gt;)&quot;);
        Regex re = new Regex(@&quot;(?'theTags'\&amp;lt;(i|b|u|strike)\&amp;gt;)|(?'theTagsClose'\&amp;lt;\/(i|b|u|strike)\&amp;gt;)|(?'img'\&amp;lt;img .* \/\&amp;gt;)|(?'link'\&amp;lt;link (.*)\&amp;gt;(.*)\&amp;lt;\/link\&amp;gt;)|(?'quote'\&amp;lt;blockquote\&amp;gt;)|(?'quoteclose'\&amp;lt;\/blockquote\&amp;gt;)|(?'br'\r)&quot;);
        outStr = re.Replace(del.Replace(inputStr, new MatchEvaluator(convert)), new MatchEvaluator(FormatLinkBits));

        Label1.Text = outStr;

        TextBox1.Text = &quot;&quot;;
    }
&lt;/pre&gt;
 
&lt;a href=&quot;http://shkolovy-code.googlecode.com/files/html-filtr.rar&quot;&gt;Скачать рабочий пример&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;PS.&lt;/b&gt; кстати на этом сайте используется данный фильтр при отправке комментариев, можете попробовать, о найденных багаг пишите :)</description>
      <pubDate>12/5/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Поисковая форма без кнопки</title>
      <link>http://www.shkolovy.com/blog/article/27</link>
      <description>Многие из нас уже привыкли при вводе чего то в поле поиска нажимать Enter, а не мышкою по кнопке &lt;b&gt;&quot;Найти&quot;&lt;/b&gt;. Так зачем тогда нужна эта кнопка :)&lt;br /&gt;&lt;br /&gt;
На помощь как всегда приходит фреймворк &lt;b&gt;Jquery&lt;/b&gt;.

&lt;pre class=&quot;brush:js; gutter: false; toolbar: false; auto-links: false;&quot;&gt;
&lt;script src=&quot;http://code.jquery.com/jquery-latest.js&quot;&gt;&lt;/script&gt;
  
 &lt;script&gt;
  $(document).ready(function(){   
    $(&quot;#input&quot;).keypress(function (e) {
      if (e.which == 13) {
        location.href = 'search.aspx?text=' +  document.getElementById(&quot;input&quot;).value ;
      }
    });
  });
 &lt;/script&gt;
&lt;/pre&gt;
Ну и не забываем за само текстовое поле
&lt;pre class=&quot;brush:html; gutter: false; toolbar: false; auto-links: true;&quot;&gt;
&amp;lt;input id=&amp;quot;input&amp;quot; type=&amp;quot;text&amp;quot; /&amp;gt;
&lt;/pre&gt;</description>
      <pubDate>12/5/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Делаем водяной знак на изображении</title>
      <link>http://www.shkolovy.com/blog/article/28</link>
      <description>В избежании незаконного копирования ваших уникальных фотографий можно на каждое фото размещать свой персональный знак или логотип вашего сайта. Лучше когда он немного прозрачный, что бы не отвлекал от самого фото.

&lt;br /&gt;
&lt;img src=&quot;http://img-kiev.fotki.yandex.ru/get/4102/artemdude.12/0_2a6b3_54983bcc_orig&quot; /&gt;
&lt;br /&gt;&lt;br /&gt;

&lt;pre class=&quot;brush:csharp;&quot;&gt;
Image backImg = Image.FromFile(Server.MapPath(&quot;chess.jpg&quot;));  // исходная картинка
Image waterImg = Image.FromFile(Server.MapPath(&quot;google_wave_logo.png&quot;)); // водяной знак
Graphics g = Graphics.FromImage(backImg);


Bitmap transparentWater = new Bitmap(waterImg.Width, waterImg.Height);
Graphics transGraphics = Graphics.FromImage(transparentWater);
ColorMatrix tranMatrix = new ColorMatrix();
tranMatrix.Matrix33 = 0.39F;  // устанавливаем прозрачность

ImageAttributes transparentAtt = new ImageAttributes();
transparentAtt.SetColorMatrix(tranMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
transGraphics.DrawImage(waterImg, new Rectangle(0, 0, transparentWater.Width, transparentWater.Height), 0, 0, transparentWater.Width, transparentWater.Height, GraphicsUnit.Pixel, transparentAtt);
transGraphics.Dispose();

g.DrawImage(transparentWater, 350, 350); // размещение водяного знака
backImg.Save(Server.MapPath(&quot;chess_w.jpg&quot;));
&lt;/pre&gt;
&lt;a href=&quot;http://shkolovy-code.googlecode.com/files/WaterMark.rar&quot;&gt;Скачать рабочий пример&lt;/a&gt;</description>
      <pubDate>12/6/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Пишем плагин для Хабра на ASP.NET</title>
      <link>http://www.shkolovy.com/blog/article/29</link>
      <description>Что будет делать плагин? да ничего особенного, вводим любой ник и смотрим есть ли такой юзер, если есть то какая у него карма и какой он в рейтинге. Если у вас большие достижение в этой соцсети вы можете этим хвастаться разместив этот плагин у себя на страничке где другие всегда смогут узнать ваш текущий рейтинг.&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.shkolovy.com/api/habr/&quot;&gt;Глянуть как работает&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-size: 14pt; &quot;&gt;Как это выглядит&lt;/span&gt;&lt;img src=&quot;http://img-kiev.fotki.yandex.ru/get/4003/artemdude.12/0_2ab3d_414c9a79_orig&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;

&lt;span id='more'&gt;&lt;/span&gt;

&lt;pre class=&quot;brush:csharp; auto-links: false;&quot;&gt;
        WebRequest request = WebRequest.Create(&quot;http://habrahabr.ru/api/profile/username&quot;);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();
        _html = responseFromServer;
        reader.Close();
        dataStream.Close();
        response.Close();

        GetTitle();
&lt;/pre&gt;
Вместо &lt;b&gt;username&lt;/b&gt; вставляете свой ник либо &lt;b&gt;TextBox&lt;/b&gt; для ввода любого ника

&lt;pre class=&quot;brush:csharp; auto-links: false;&quot;&gt;
 private void GetTitle()
    {
        Regex re = new Regex(@&quot;(?'karma'&lt;karma&gt;([\d-?\.]*)&lt;/karma&gt;)&quot;); 
        Label1.Text = re.Replace(_html, new MatchEvaluator(FormatLinkBits));
    }
&lt;/pre&gt;
В примере рассматриваю только получения кармы, для получения рейтинга и позиции делаем по аналогии, то есть @&quot;(?'karma'?&amp;lt;karma&amp;gt;([\d-?\.]*)&amp;lt;/karma&amp;gt;)|(?'rating'&amp;lt;rating&amp;gt;([\d-?\.]*).......&quot;
&lt;pre class=&quot;brush:csharp; auto-links: false;&quot;&gt;
 private string FormatLinkBits(Match m)
    {
      
  if (m.Groups[&quot;karma&quot;].Success)
        {
            string karma = m.Groups[&quot;karma&quot;].Value;
            Regex karmastring = new Regex(@&quot;&lt;karma&gt;([\d-?\.]*)&lt;/karma&gt;&quot;);
            karma = karmastring.Replace(karma, &quot;карма $1&quot;);

            return karma;
        }

        return m.Value;

    }
&lt;/pre&gt;

Ну и не забываем за статическую переменную _html
&lt;pre class=&quot;brush:csharp;&quot;&gt;
 public static string _html = string.Empty;
&lt;/pre&gt;</description>
      <pubDate>12/7/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Watermark in TextBox</title>
      <link>http://www.shkolovy.com/blog/article/30</link>
      <description>Обычно Watermark используют когда нужно сэкономить место на странице, таким образом мы можем указать на поле не подписывая его сбоку. Например:&lt;br /&gt;
 &lt;input type=&quot;text&quot;  onblur=&quot;if(this.value=='') this.value='поиск';&quot;
                    onfocus=&quot;if(this.value=='поиск') this.value='';&quot; value=&quot;поиск&quot; /&gt;&lt;br /&gt;&lt;br /&gt;
Есть много способов реализовать такое, вот один из самых простых:
&lt;pre class=&quot;brush:html&quot;&gt;
&lt;input type=&quot;text&quot;  onblur=&quot;if(this.value=='') this.value='поиск';&quot;
 onfocus=&quot;if(this.value=='поиск') this.value='';&quot; value=&quot;поиск&quot; /&gt;
&lt;/pre&gt;</description>
      <pubDate>12/11/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Живой поиск</title>
      <link>http://www.shkolovy.com/blog/article/31</link>
      <description>Данный элемент очень широко используется в социальных сетях, где мы можем к примеру ввести первые 3 буквы друга и через секунду он будет уже найден. Я попробовал реализовать что то похожее для быстрого поиска статей по заголовкам на своем сайте. 

&lt;img src=&quot;http://img-kiev.fotki.yandex.ru/get/3901/artemdude.12/0_2b0dc_57934edb_orig&quot; /&gt;
&lt;br /&gt;&lt;br /&gt;
Глянуть как работает можно &lt;a href=&quot;http://www.shkolovy.com/blog/search.aspx&quot;&gt;здесь&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;

&lt;span id=&quot;more&quot;&gt;&lt;/span&gt;

Перейдем к реализации. Сначала ловим нажатия клавиши и передаем введенный текст на сервер для дальнейшей обработки
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Default.aspx&lt;/b&gt;
&lt;pre class=&quot;brush:html&quot;&gt;
   &lt;script type=&quot;text/javascript&quot;&gt;

 $(document).ready(function(){   
    $(&quot;#inp&quot;).keydown(function () {
   var o =  document.getElementById(&quot;inp&quot;);
     
      if( o.value.length &gt;= 2 )
       {
            $.ajax({
                type: &quot;get&quot;,
                url: &quot;search.ashx&quot;,
                data: &quot;val=&quot; + encodeURI(o.value),
                success: function(returnData) {     
                $('#div').html(returnData);
                },
                error: function() { 
                 $('#div').html(&quot;error&quot;);}
            });
            }
            else
            $('#div').html(&quot;&quot;);
    });
  });
  
&lt;/script&gt;

&lt;input id=&quot;inp&quot;  type=&quot;text&quot;  /&gt;&lt;br /&gt;
&lt;div id=&quot;div&quot;&gt;&lt;/div&gt;
&lt;/pre&gt;
С помощью оператора LIKE ищем совпадения в базе и возвращаем клиенту найденное значение, которое будет выведено через див.&lt;br /&gt;

&lt;b&gt;серверная часть&lt;/b&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;
public static string automet(string _val)
	{

        string _gotvalue = string.Empty;

        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[&quot;CS&quot;].ConnectionString);
        SqlCommand command = new SqlCommand(&quot;SELECT * FROM [Table1] WHERE value like '%' + REPLACE(ltrim(rtrim(@value)),' ', '%') + '%'&quot;, conn);
        conn.Open();
        command.Parameters.Add(new SqlParameter(&quot;@value&quot;, _val));
       
       SqlDataReader dr = command.ExecuteReader();
       while (dr.Read())
       {
           _gotvalue += dr[&quot;value&quot;].ToString()&quot;;
       }
        dr.Close();
        conn.Close();

        return _gotvalue;
	}
&lt;/pre&gt;</description>
      <pubDate>12/11/2009 5:24:00 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Обновления каптчи без перезагрузки страницы</title>
      <link>http://www.shkolovy.com/blog/article/32</link>
      <description>Иногда символы на капче получаются не читабельными и приходиться обновлять страницу чтобы разглядеть их. Можно поступить проще и сделать кнопочку обновления изображения. Делается все с помощью одной  javascript функции:

&lt;pre class=&quot;brush:js&quot;&gt;
   &lt;script language=&quot;javascript&quot;&gt; 
    function refresh()
    {
   
document.getElementById(&quot;captcha&quot;).src=&quot;cap.aspx?now=&quot;+escape(new Date()); 
return false;

    }
     &lt;/script&gt; 
&lt;/pre&gt;

Это можно реализовать и по другому, принцип в том, чтобы заменить имя изображения на клиенте.
&lt;br /&gt;
Для тех кто не понимает что здесь делает &lt;b&gt;cap.aspx&lt;/b&gt; советую почитать статью о &lt;a href=&quot;http://www.shkolovy.com/blog/article/1&quot;&gt;принципе создания капч&lt;/a&gt; на ASP.NET.</description>
      <pubDate>12/12/2009 11:48:34 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Всегда последняя версия Jquery</title>
      <link>http://www.shkolovy.com/blog/article/33</link>
      <description>Если вы часто используете в своих проектах фреймворк Jquery, то совсем не обезательно все время скачивать последнюю версию, можно брать ее с официального сайта.

&lt;pre class=&quot;brush:js&quot;&gt;
&amp;lt;script src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;</description>
      <pubDate>12/13/2009 11:40:26 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Предосмотр в реальном времени</title>
      <link>http://www.shkolovy.com/blog/article/34</link>
      <description>Отличие живого предосмотра от обычного лишь в том, что в обычном чтобы увидеть что у нас получилось нужно нажать на кнопку, а здесь все отображается пока вы еще пишите, то есть текст обновляется при каждом нажатии клавиши.

&lt;pre class=&quot;brush: js&quot;&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;                                         
  $(document).ready(function() {
   $(&quot;#TextArea1&quot;).keyup(function() {
    var str = $(this).val();
     $(&quot;#preview&quot;).html(str); 
    
     });
 });
    &lt;/script&gt;

 &lt;textarea id=&quot;TextArea1&quot; cols=&quot;20&quot; rows=&quot;2&quot;&gt;&lt;/textarea&gt;
 &lt;div id=&quot;preview&quot;&gt;&lt;/div&gt;
&lt;/pre&gt;</description>
      <pubDate>12/13/2009 12:32:09 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Создание облака тегов на ASP.NET C#</title>
      <link>http://www.shkolovy.com/blog/article/35</link>
      <description>&lt;a href=&quot;http://ru.wikipedia.org/wiki/Облако_тегов&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Облако тегов&lt;/a&gt;  стало обязательным атрибутом сайтов где большое количество тегов, категорий и т.д. Оно способствует лучшему индексированию ваших статей и облегчает пользователю поиск нужной статьи. Предлагаю свой вариант создания облака на ASP.NET C#. При создании я не использовал базу данных, так как хотел просто показать принцип его создания, сделать его пропорциональным и симпатичным.
&lt;br /&gt;&lt;br /&gt;
Вот что вышло у меня:&lt;br /&gt;&lt;center&gt;
&lt;img src=&quot;http://r-img.fotki.yandex.ru/get/4114/artemdude.12/0_2becf_108b769d_orig&quot; /&gt;
&lt;/center&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;
       
//клас для генерации случайных чисел, будет использоваться в качестве количества статей в категории
Random RandomClass = new Random(); 

//массив с категориями
        string[] category = { &quot;ASP.NET&quot;, &quot;Jquery&quot;, &quot;html&quot;, &quot;javascript&quot;, &quot;php&quot;, &quot;C#&quot;, &quot;VB&quot;, &quot;Objects&quot;, &quot;RexExp&quot;, &quot;cloud&quot;, &quot;hello world&quot;, &quot;yahoo&quot;, &quot;Shkolovy&quot;, &quot;SQL&quot;, &quot;ado.net&quot;, &quot;LINQ&quot; };

//массив с количеством статей в категориях, заполняется случайным образом
        int[] countcategory = new int[category.Length];

        for (int i = 0; i &lt; countcategory.Length; i++)
        {
            int ran = RandomClass.Next(1, 20);
            countcategory[i] = ran;
        }
       
 //находим максимальное значение, то есть категорию где больше всего статей, далее эта величина будет использоваться для подсчета процента остальных категорий 

        double max = 0;
        foreach (int b in countcategory)
        {
            if (b &gt; max)
                max = b;
        }

        int fontsize = 0;   //размер шрифта
        double part = 0;   
       
        int m = 0;
      foreach (string i in category)
      {
         //исходя из результата полученного из этой формулы получаем размер шрифта
          part = (countcategory[m] / max) * 100;

          if (part &gt;= 98)
          { fontsize = 24; }

          else if (part &gt;= 70)
          { fontsize = 19; }

          else if (part &gt;= 50)
          { fontsize = 15; }

          else if (part &gt;= 30)
          { fontsize = 14; }

          else if (part &gt;= 10)
          { fontsize = 8; }

          else if (part &lt; 10)
          { fontsize = 6; }

//отображение облака с применением различных стилей
          Label1.Text += &quot;&lt;span style='color:#005296; font-size:&quot; + fontsize + &quot;pt'&gt;&quot; + i.ToString() + &quot;&lt;/span&gt;&lt;sub&gt;&lt;span style='color:#cc0000; font-size:7pt;'&gt;&quot; + countcategory[m] + &quot;&lt;/span&gt;&lt;/sub&gt; &quot;;
       
          m = m + 1;
      }
&lt;/pre&gt;

Для того чтобы вытаскивать данные из базы нужно поменять пару строк:
&lt;ul&gt;
&lt;li&gt;Работа с базой данных &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close.aspx&quot; rel=&quot;nofollow&quot; &gt;System.Data.SqlClient&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Подсчет количества статей &lt;a href=&quot;http://msdn.microsoft.com/ru-ru/library/ms175997(SQL.90).aspx&quot; rel=&quot;nofollow&quot; &gt;Функция COUNT (Transact-SQL)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Определение максимального значения &lt;a href=&quot;http://msdn.microsoft.com/ru-ru/library/ms187751(SQL.90).aspx&quot; rel=&quot;nofollow&quot;  &gt;MAX (Transact-SQL)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>12/18/2009 10:57:29 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Создание аватарки без копирайтов</title>
      <link>http://www.shkolovy.com/blog/article/36</link>
      <description>Новый сервис для создания длинных аватарок. &lt;br /&gt;Протестировать можно &lt;font size=&quot;11pt&quot;&gt;&lt;a href=&quot;http://www.shkolovy.com/api/ava/&quot;&gt;здесь&lt;/a&gt;&lt;/font&gt;.
&lt;img src=&quot;http://img-kiev.fotki.yandex.ru/get/4103/artemdude.12/0_2c919_ea895525_orig&quot; /&gt;</description>
      <pubDate>12/23/2009 6:38:02 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Десериализация JSON</title>
      <link>http://www.shkolovy.com/blog/article/37</link>
      <description>Задача следующая: необходимо извлечь из строки &lt;span style=&quot;color: #009900; &quot;&gt;{id: ['34', '23', '1'], text: 'prosto text!'}&lt;/span&gt; (строка представлена в виде &lt;a href=&quot;http://ru.wikipedia.org/wiki/JSON&quot; target=&quot;_self&quot;&gt;JSON&lt;/a&gt; обьекта) данные &lt;b&gt;id&lt;/b&gt; и &lt;b&gt;text&lt;/b&gt;. Для решения данной задачи будем использовать класс &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx&quot; target=&quot;_blank&quot;&gt;JavaScriptSerializer&lt;/a&gt;. Данный процесс называется десериализация.&lt;br /&gt;
&lt;br /&gt;
 Отправляем строку JSON &lt;br /&gt;
 &lt;span style=&quot;font-weight: bold; &quot;&gt;Default.aspx&lt;/span&gt;   
&lt;pre class=&quot;brush:html&quot;&gt;
 &amp;lt;%= json_sear.fromJSON(&amp;quot;{id: ['34', '23', '1'], text: 'prosto text!'}&amp;quot;) %&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;json_sear.cs&lt;/b&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;

public class RequestData
{

    public int[] id { get; set; }
    public string text { get; set; }

} 

public class json_sear
{


    public static string fromJSON(string jsonstring)
    {
  
        RequestData request = new RequestData();
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        request = serializer.Deserialize&amp;lt;RequestData&amp;gt;(jsonstring);

        int[] num = request.id;
        string str = request.text;

        return &quot;id = &quot; + num[1] + &quot;&lt;br /&gt; text = &quot; + str;
    }

}
&lt;/pre&gt;
Получаем  &lt;span style=&quot;color: #009900; &quot;&gt;id = 23 text = prosto text!   &lt;/span&gt; </description>
      <pubDate>1/28/2010 3:22:34 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Кнопка Skype - будь на связи</title>
      <link>http://www.shkolovy.com/blog/article/38</link>
      <description>Кнопки Skype можно использовать на своем сайте, блоге или даже добавить их в блок подписи для твоих электронных сообщений. Это даст возможность другим людям звонить и писать тебе всего лишь одним нажатием кнопки.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://img-kiev.fotki.yandex.ru/get/3908/artemdude.12/0_313dd_43ec7668_orig&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
  Получить кнопку можно &lt;a href=&quot;http://www.skype.com/intl/ru/share/buttons/&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
С помощью &lt;a href=&quot;http://www.skype.com/intl/ru/share/buttons/wizard.html&quot; target=&quot;_self&quot;&gt;мастера&lt;/a&gt; настройки кнопок Skype можно выбрать варианты цвета, функций и стиля.  О подобном гаджете я уже писал: &lt;a href=&quot;http://www.shkolovy.com/blog/article/5&quot; target=&quot;_self&quot;&gt;размещение Google Talk на своем сайте&lt;/a&gt;.</description>
      <pubDate>1/29/2010 12:07:31 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Шпаргалка по Jquery 1.4</title>
      <link>http://www.shkolovy.com/blog/article/39</link>
      <description>Шпаргалка по новой версии популярного фреймворка Jquery 1.4&lt;br /&gt;
Есть &lt;a href=&quot;http://www.futurecolors.ru/jquery/&quot; target=&quot;_self&quot;&gt;online-версия&lt;/a&gt; и &lt;a href=&quot;http://www.futurecolors.ru/jquery/jquery.cheatsheet.1.4.pdf&quot; target=&quot;_self&quot;&gt;pdf&lt;/a&gt; для скачивания.
&lt;div class=&quot;space&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www.futurecolors.ru/blog/wp-content/uploads/2010/01/post1.jpg&quot; /&gt;&lt;br /&gt;
 &lt;br /&gt;
Также online-версия содержит ссылки на официальную документацию. </description>
      <pubDate>2/4/2010 3:42:38 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Поиск в MasterPage</title>
      <link>http://www.shkolovy.com/blog/article/40</link>
      <description>Иногда нужно добраться из страницы пренодлежащей определенному &lt;span style=&quot;font-family:courier new;color:#2b91af;&quot;&gt;MasterPage&lt;/span&gt;, к элементу, на пример к&amp;nbsp;&lt;span style=&quot;font-family:courier new;color:#2b91af;&quot;&gt;Label&lt;/span&gt; который находиться в MasterPage.
&lt;br /&gt;&lt;br /&gt;
В любом событии пишем:
&lt;pre class=&quot;brush:csharp&quot;&gt;
      MasterPage MyMaster = (MasterPage) Master;
      Label MyLabel = MyMaster.FindControl(&quot;Label1&quot;) as Label;
      MyLabel.Text = &quot;Доступ к Label в MasterPage.master&quot;;
&lt;/pre&gt;</description>
      <pubDate>2/16/2010 1:16:55 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Хранение и передача данных через Session, ViewState, QueryString, Cookies</title>
      <link>http://www.shkolovy.com/blog/article/41</link>
      <description>Хранить и передавать информацию можно по разному, и каждый из этих методов имеет свои преимущества и недостатки.

&lt;h4&gt;Cookies&lt;/h4&gt;
Данный вид передачи данных возможен только если ваш браузер поддерживает Cookies. Строк хранения можно указать с помощью команды Expires. Так как данные храниться на вашем жестком диске их можно найти и прочитать, потому не  рекомендуется использовать Cookies для хранения секретной информации.
&lt;pre class=&quot;brush:csharp&quot;&gt;
// cookies
        if (!IsPostBack) 
            if (Request.Browser.Cookies) 
                if (Request.Cookies[&quot;UserName&quot;] != null) 
                { 
                    Session[&quot;User&quot;] = Request.Cookies[&quot;UserName&quot;].Value;
                     string Value = Request.Cookies[&quot;userName&quot;].Value;
                } 
                else 
                {
                    HttpCookie uname = new HttpCookie(&quot;UserName&quot;);
                    uname.Value = &quot;Artem Shkolovy&quot;;
                    Response.Cookies.Add(uname);
                    uname.Expires = DateTime.Now.AddYears(1);
                   
                   //удаляет кукис принудительнло                    
                   //uname.Expires = DateTime.Now.AddDays(-1); 
                }
            else
                 string Value = (&quot;Ваш Браузер не поддерживает cookies&quot;); 
&lt;/pre&gt;

&lt;h4&gt;ViewState&lt;/h4&gt;
ViewState целесообразно использовать в том случае, когда необходимо  организовать хранение данных в пределах одной страницы. Все данные хранятся на самой странице в скрытом поле в зашифрованном (При желании эти данные можно расшифровать) виде. Это очень удобно так как нет никакой нагрузки на сервер, но это плохо влияет на поисковые системы.

&lt;pre class=&quot;brush:csharp&quot;&gt;
        // ViewState
        ViewState[&quot;text&quot;] = &quot;Artem Shkolovy&quot;; 
         string Value = (string)ViewState[&quot;name&quot;];
&lt;/pre&gt;
&lt;h4&gt;Session&lt;/h4&gt;
Объект &lt;b&gt;Session&lt;/b&gt; предназначен для хранения данных между запросами Web страниц. Этот механизм часто используют интернет магазины, в виде корзины куда можно складывать товары. &lt;br /&gt;
При подключении пользователя  к приложению, создается отдельный  сеанс и отдельная коллекция данных. Эти данные хранятся в оперативной памяти компьютера. Очистить сессию можно либо принудительно либо закрыв браузер. &lt;br /&gt;
Недостаток в том, что при больших количествах открытых сессий есть угроза быстродействию сервера. Также очень часто на серверах стоит ограничение на сессию в несколько минут, что делает практически невозможным ее использование. 

&lt;pre class=&quot;brush:csharp&quot;&gt;
        // Session
      Session[&quot;MyName&quot;] = &quot;Artem&quot;;
       string Value = (string)Session[&quot;MyName&quot;];
     // Принудительное удаление сессии
     // Session.Abandon(); 
&lt;/pre&gt;
&lt;h4&gt;Строка запроса&lt;/h4&gt;
Это наиболее распространенный способ передачи данных от одной страницы к другой, а также при переходе на другой сайт. Данные передаються в виде ссылки (пр. http://site.com?text=передаваемый_текст&amp;id=45)
&lt;pre class=&quot;brush:csharp&quot;&gt;
       // Строка запроса
      if (Request.QueryString[&quot;name&quot;] != null)
    string Value = Request.QueryString[&quot;name&quot;];
    else
       string Value = &quot;Empty&quot;;
&lt;/pre&gt;</description>
      <pubDate>2/16/2010 1:28:40 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Примеры SQL injection</title>
      <link>http://www.shkolovy.com/blog/article/42</link>
      <description>SQL инъекции это один из самых распостраненных способов взлома сайтов. Принцып его заключаеться в том чтобы через входные параметры изменить или дописать SQL запрос. С помощью данной атаки можно как испортить базу данных так и обезобразить страницу(добавив немного html кода). В следующем примере я покажу как можно с помощью SQL инъекции удалить все данные из базы и добавить свои. &lt;br /&gt;По аналогии можно также увидеть недоступные для просмотра данные или обновить их. &lt;br /&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;
SqlCommand command = new SqlCommand(&amp;quot;DELETE from [Table] where id = &amp;quot;  
+ Request.QueryString[&amp;quot;id&amp;quot;], conn);
 conn.Open();
 command.ExecuteNonQuery(); 
 conn.Close(); &lt;/pre&gt;
&lt;br /&gt;
&lt;span style=&quot;font-style: italic; &quot;&gt;Пример 1.&lt;/span&gt;&lt;br /&gt;
При чтении &lt;span style=&quot;font-weight: bold; &quot;&gt;id&lt;/span&gt; из строки ввода, запрос удаляет одну запись. Но&amp;nbsp;вместо&amp;nbsp;&lt;span style=&quot;font-weight: bold; &quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;цифры&amp;nbsp;&lt;/span&gt;http://localhost:1475/injections/Default.aspx?id=&lt;span style=&quot;background-color: #ffcc99; &quot;&gt;35&lt;/span&gt;&lt;/span&gt; введем следующее &lt;span style=&quot;font-weight: bold; &quot;&gt;http://localhost:1475/injections/Default.aspx?id=&lt;span style=&quot;background-color: #ffcc99; &quot;&gt;id&lt;/span&gt;&lt;/span&gt;, таким образом все данные из таблицы&amp;nbsp;Table будут удалены.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-style: italic; &quot;&gt;Пример 2.&lt;/span&gt;&lt;br /&gt;
Теперь допишем в строку еще один запрос, который добавит в данную таблицу какие то  данные (дописать запрос можно поставив точку с запитой):&lt;br /&gt;
&lt;span style=&quot;font-weight: bold; &quot;&gt;http://localhost:1475/injections/Default.aspx?id=35&lt;span style=&quot;background-color: #ffcc99; &quot;&gt;;+INSERT+INTO+[Table]+([title],+[body])+VALUES+('тебя хакнули',+'ахахахахааа')&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;i&gt;Как бороться?&lt;/i&gt;&lt;br /&gt;
Наиболее простой способ это использовать параметризованные запросы. Перепишем указанный выше код следующим образом:&lt;br /&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;
SqlCommand command = new SqlCommand(&amp;quot;DELETE from [Table] where id = @id&amp;quot;, conn);
 command.Parameters.Add(new SqlParameter(&amp;quot;@id&amp;quot;, Request.QueryString[&amp;quot;id&amp;quot;]));  conn.Open(); 
command.ExecuteNonQuery();
conn.Close();&lt;/pre&gt;
&lt;br /&gt;
Теперь же при внедрении своего запроса сработает исключение:&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-family: arial, helvetica, geneva, sunsans-regular, sans-serif; font-size: 11px; &quot;&gt;Conversion failed when converting the nvarchar value '35; INSERT INTO [Table] ([title], [body]) VALUES ('тебя хакнули', 'ахахахаааа')' to data type int.&lt;/span&gt;</description>
      <pubDate>3/9/2010 6:10:17 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Пример написания своего Action Filter в ASP MVC</title>
      <link>http://www.shkolovy.com/blog/article/43</link>
      <description>Фильтр действий обычно является атрибутом, который реализует абстрактный класс &lt;span class=&quot;shap_class&quot;&gt;ActionFilterAttribute&lt;/span&gt;. Данный класс имплементирует два интерфейса  &lt;span class=&quot;shap_class&quot;&gt;IActionFilter&lt;/span&gt; и  &lt;span class=&quot;shap_class&quot;&gt;IresultFilter&lt;/span&gt;.
&lt;br /&gt;&lt;br /&gt;
 &lt;span class=&quot;shap_class&quot;&gt;ActionFilterAttribute&lt;/span&gt; имеет следующие методы которые можно переопределить:

&lt;ul&gt;
&lt;li&gt; &lt;b&gt;OnActionExecuting&lt;/b&gt; –  данный метод вызывается перед исполнением экшена.&lt;br /&gt;
&lt;li&gt;&lt;b&gt;OnActionExecuted&lt;/b&gt; – вызывается после исполнения экшена.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OnResultExecuting&lt;/b&gt; – вызывается перед выполнением  результата экшена.&lt;/li&gt; &lt;li&gt; &lt;b&gt;OnResultExecuted&lt;/b&gt; – вызывается после выполнения  результата экшена.&lt;/li&gt;&lt;/ul&gt;
Для того что бы продемонстрировать это, создадим фильтр, который будет перехватывать все исключения в экшене котроллера и заносить их лог. Так как пример показательный, то системой логирования будет консоль Визуал студии.

&lt;pre class=&quot;brush:csharp&quot;&gt;
public class CustomErrorAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            if (filterContext.Exception != null)
            {
                Log(filterContext.RouteData.Values[&quot;Action&quot;].ToString(), filterContext.Exception.Message); 
            }
        }
 
          private void Log(string methodName, string errorMessage)
          {
              Debug.WriteLine(string.Format(&quot;Log: {0} in {1}&quot;, errorMessage, methodName));
          }
    }
&lt;/pre&gt;

Как я писал выше, класс должен быть наследован абстрактным классом &lt;span class=&quot;shap_class&quot;&gt;ActionFilterAttribute&lt;/span&gt;. После чего мы переопределили метод &lt;span class=&quot;shap_class&quot;&gt;OnActionExecuted&lt;/span&gt;. Это значит что данный метод будет срабатывать сразу после выполнения экшена котроллера.
 
Для использования нужно просто указать атрибут &lt;span class=&quot;shap_class&quot;&gt;CustomError&lt;/span&gt; перед экшеном:
 &lt;pre class=&quot;brush:csharp&quot;&gt;

       [CustomError]
       public ActionResult Index()
      {
            ViewData[&quot;Message&quot;] = &quot;Welcome to ASP.NET MVC!&quot;;
            throw new Exception(&quot;Some exeption&quot;);
 
            return View();
      }
&lt;/pre&gt;
&lt;br/&gt;
&lt;a href=&quot;http://shkolovy-code.googlecode.com/files/ActionFilter.rar&quot;&gt;Скачать пример&lt;/a&gt;  </description>
      <pubDate>2/6/2011 11:30:36 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>LINQPad это утилита для выполнения LINQ запросов </title>
      <link>http://www.shkolovy.com/blog/article/44</link>
      <description>&lt;b&gt;LINQPad&lt;/b&gt; это утилита для выполнения LINQ запросов к базе данных, XML документам или объектам. Программа включает в себя большое количество примеров, которые можно просмотреть нажав &lt;i&gt;Help -&gt; View Samples&lt;/i&gt;.
LINQPad очень удобен для обучения. Для примера я выбрал базу Northwind и написал Linq запрос 
  &lt;pre class=&quot;brush:csharp&quot;&gt;
from c in Products
where c.ProductName == &quot;Chang&quot;
select c
&lt;/pre&gt;

&lt;img alt=&quot;LINQ PAD&quot; src=&quot;http://shkolovy.com/img/blog/LINQ_PAD/2.png&quot;&gt;

В результате можно посмотреть данные таблицы, а также запрос в виде SQL или лямбда выражения.

&lt;img alt=&quot;LINQ PAD&quot;  src=&quot;http://shkolovy.com/img/blog/LINQ_PAD/1.png&quot;&gt;

&lt;pre class=&quot;brush:sql&quot;&gt;
SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
FROM [Products] AS [t0]
WHERE [t0].[ProductName] = @p0
&lt;/pre&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;
Products.Where (c =&gt; (c.ProductName == &quot;Chang&quot;))
&lt;/pre&gt;</description>
      <pubDate>2/6/2011 11:47:44 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Реализация RSS на ASP MVC 2</title>
      <link>http://www.shkolovy.com/blog/article/45</link>
      <description>Для создания RSS будем использовать класс &lt;span class=&quot;shap_class&quot;&gt;SyndicationFeed&lt;/span&gt;, который и будт формировать XML в нужном для нас формате. Что бы с ним работать нужно добавить сбору &lt;b&gt;System.ServiceModel.Web&lt;/b&gt; в проект.
 &lt;div&gt;&lt;/div&gt;
&lt;img src=&quot;http://shkolovy.com/img/blog/Rss/1.png&quot; /&gt;
 &lt;div&gt;&lt;/div&gt;&lt;br/&gt;
Создаем класс &lt;span class=&quot;shap_class&quot;&gt;RssActionResult&lt;/span&gt; унаследованный от &lt;span class=&quot;shap_class&quot;&gt;ActionResult&lt;/span&gt;:

 &lt;pre class=&quot;brush:csharp&quot;&gt;
public class RssActionResult : ActionResult  
    {
        public RssActionResult(SyndicationFeed feed)
        {
            RssFeed = feed;
        }

        public SyndicationFeed RssFeed { get; set; }

        public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.ContentType = &quot;application/rss+xml&quot;;

            var rssFormatter = new Rss20FeedFormatter(RssFeed);

            using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output))
            {
                rssFormatter.WriteTo(writer);
            }
        }
    }
&lt;/pre&gt;

&lt;span id=&quot;more&quot;&gt;&lt;/span&gt;

Также создадим тестовою модель &lt;span class=&quot;shap_class&quot;&gt;Product&lt;/span&gt;, и заполним ее тестовыми данными.

&lt;pre class=&quot;brush:csharp&quot;&gt;
    internal class Product
    {
       public int Id { get; set; }
       public string Name { get; set;}
       public float Price { get; set; }
    }

    private static Collection&lt;Product&gt; GetProducts()
        {
            return new Collection&lt;Product&gt;()
                       {
                           new Product(){Id = 1, Name = &quot;Keyboard&quot;, Price = 20},
                           new Product(){Id = 2, Name = &quot;Mouse&quot;, Price = 12},
                           new Product(){Id = 3, Name = &quot;Display&quot;, Price = 120},
                       };
        }
&lt;/pre&gt;

После этого в котроллере нужно создать метод &lt;span class=&quot;shap_class&quot;&gt;Rss&lt;/span&gt;, который будет возвращать созданный ранее &lt;span class=&quot;shap_class&quot;&gt;RssActionResult&lt;/span&gt;.

&lt;pre class=&quot;brush:csharp&quot;&gt;
public RssActionResult Rss()
        {
            SyndicationFeed feed =
                new SyndicationFeed(&quot;Some RSS&quot;,
                                    &quot;подписка на товары&quot;,
                                    new Uri(&quot;http://site.com/Rss&quot;),
                                    &quot;articleId&quot;,
                                    DateTime.Now);

            ICollection&lt;Product&gt; contents = GetProducts();

            List&lt;SyndicationItem&gt; items = new List&lt;SyndicationItem&gt;();

            foreach (var content in contents)
            {
                SyndicationItem item =
                new SyndicationItem(content.Name,
                                    string.Format(&quot;описание продукта {0}&quot;, content.Name),
                                    new Uri(&quot;http://site.com/Product/&quot; + content.Id),
                                    content.Id.ToString(),
                                    DateTime.Now);

                items.Add(item);
            }

            feed.Items = items;

            return new RssActionResult(feed);
        }
&lt;/pre&gt;

Готово. 
&lt;img src=&quot;http://shkolovy.com/img/blog/Rss/2.png&quot; /&gt;
&lt;div class=&quot;space10&quot;&gt;&lt;/div&gt;

Наш Rss доступен по адресу: &lt;i&gt;http://localhost:1229/Home/Rss&lt;/i&gt;
Для того что бы адрес был более простым, например &lt;i&gt;http://localhost:1229/Rss&lt;/i&gt;, нужно добавить роут.

 &lt;pre class=&quot;brush:csharp&quot;&gt;  
 routes.MapRoute(
             &quot;Home/Rss&quot;, 
             &quot;Rss&quot;, 
             new { controller = &quot;Home&quot;, action = &quot;Rss&quot; }
             );
 &lt;/pre&gt;
&lt;br/&gt;
&lt;a href=&quot;http://shkolovy-code.googlecode.com/files/Rss.rar&quot;&gt;Скачать пример&lt;/a&gt;</description>
      <pubDate>2/6/2011 12:27:14 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Использование ckeditor в ASP MVC приложении</title>
      <link>http://www.shkolovy.com/blog/article/46</link>
      <description>&lt;img src=&quot;http://www.shkolovy.com/img/blog/ckeditor/1.png&quot; /&gt;
&lt;div class=&quot;space10&quot;&gt;&lt;/div&gt;

Что бы использовать ckeditor,на странице подключаем файл &lt;b&gt;ckeditor.js&lt;/b&gt;. (&lt;a href=&quot;http://sourceforge.net/projects/fckeditor/files/FCKeditor/2.6.6/FCKeditor_2.6.6.zip/download&quot;&gt;Скачать&lt;/a&gt;)&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;&lt;%= ResolveUrl(&quot;~/Scripts/CKeditor/ckeditor.js&quot;) %&gt;&quot;
        type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
Далее в представлении с помощью html хелпера создаем TextArea.
  &lt;pre class=&quot;brush:html&quot;&gt; 
&lt;%= Html.TextAreaFor(m =&gt; Model.Category.Body, new { id=&quot;Body&quot;})%&gt;
 &lt;/pre&gt;

Указыаем Id созданной TextArea и тему (в скачанном пакете их три: office2003, kama и v2)

 &lt;pre class=&quot;brush:js&quot;&gt; 
&lt;script type=&quot;text/javascript&quot;&gt;
                //&lt;![CDATA[
                CKEDITOR.replace('Body',
                {
                    skin: 'kama'
                });
                //]]&gt;
&lt;/script&gt;
&lt;/pre&gt;
Все, готово :)&lt;br/&gt;
В файле &lt;b&gt;config.js&lt;/b&gt; можно указать цвет панели, ее максимальную высоту/ширину и другие настройки. Также можно переопределить набор инструментов ckeditor.
&lt;div class=&quot;space10&quot;&gt;&lt;/div&gt;
Мой пример панели инструментов:
 &lt;pre class=&quot;brush:js&quot;&gt; 
 config.toolbar_myBasic =
    [
    ['Source', '-', 'Preview'], ['Styles', 'Format', 'Font', 'FontSize'], ['TextColor', 'BGColor', '-','RemoveFormat'],
    '/',
    ['Bold', 'Italic', 'Underline', 'Strike', '-', 'Subscript', 'Superscript'],
    ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'],
    ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote'],
    ['Link', 'Unlink', '-', 'Image', 'Table', 'SpecialChar'],


    ];

    config.toolbar = 'myBasic';
&lt;/pre&gt;</description>
      <pubDate>2/6/2011 12:41:45 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>ASP MVC Route Debugger</title>
      <link>http://www.shkolovy.com/blog/article/47</link>
      <description>Недавно  натолкнулся на интересную утилиту, с ее помощью можно тестировать написанные в приложении маршруты.

&lt;img src=&quot;http://shkolovy.com/img/blog/RouteDebugger/2.png&quot; /&gt;
&lt;span id=&quot;more&quot;&gt;&lt;/span&gt;

 Что бы использовать нужно в файле Global.asax  немного изменить  метод &lt;span class=&quot;shap_class&quot;&gt;Application_Start&lt;/span&gt;:

  &lt;pre class=&quot;brush:csharp&quot;&gt;
protected void Application_Start(object sender, EventArgs e)
{
  RegisterRoutes(RouteTable.Routes);
  RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}
 &lt;/pre&gt;

Также нужно &lt;a href=&quot;http://code.haacked.com/mvc-1.0/RouteDebug-Binary.zip&quot;&gt;скачать&lt;/a&gt; саму библиотеку и добавить ее в проект.
 &lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
&lt;img src=&quot;http://shkolovy.com/img/blog/RouteDebugger/1.png&quot; /&gt;
 &lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Далее просто вводим нужный вам URL. RouteDebug сравнит введенный URL с маршрутами и покажет совпадения.</description>
      <pubDate>2/6/2011 12:57:05 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Строго типизированные модели для представлений ASP MVC</title>
      <link>http://www.shkolovy.com/blog/article/48</link>
      <description>Одна их хороших практик в ASP MVC это использовать строго типизированную модель для передачи данных с котроллера в представление.
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;

Для того что бы понять преимущества строго типизированных моделей представлений, нужно сначала рассмотреть недостатки других способов передачи данных контроллера представлению.
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Наиболее простой способ это передать данные через ViewData.
  &lt;pre class=&quot;brush:csharp&quot;&gt;   
        public ActionResult ShowProduct()
        {
            ViewData[&quot;Product&quot;] = new Product()
                                      {
                                          Name = &quot;Клавиатура Logitech G19 Gaming USB&quot;,
                                          Price = 1494,
                                          Description = &quot;Logitech G19 Gaming одна из лучших игровых клавиатур ......&quot;
                                      };
            return View();
        }
&lt;/pre&gt;
Минус этого подхода в том что мы передаем данные используя ключ &quot;Product&quot;, а что если допустить грамматическую ошибку? Визуал студия не сможет нам этого подсказать. 
&lt;span id=&quot;more&quot;&gt;&lt;/span&gt;

&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Второй способ, это использование модели сущности
  &lt;pre class=&quot;brush:csharp&quot;&gt;
    public ActionResult ShowProduct1()
        {
           Product product = new Product()
            {
                Name = &quot;Клавиатура Logitech G19 Gaming USB&quot;,
                Price = 1494,
                Description = &quot;Logitech G19 Gaming одна из лучших игровых клавиатур ......&quot;
            };

           return View(product);
        }
&lt;/pre&gt;
При создании представления нужно указать созданную модель. Если в списке нету вашей модели, попробуйте перекомпилировать проект.

&lt;img src=&quot;http://shkolovy.com/img/blog/StrongTypeViewModel/1.png&quot; /&gt; 
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
  &lt;pre class=&quot;brush:html&quot;&gt;
 Название товара  &lt;%= Model.Name %&gt;
  &lt;/pre&gt;
Этот подход уже лучше, но что если нам нужно передать несколько моделей?
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Для того чтобы создать строго типизированную модель, в папочке Models я создал папку ViewModels, куда складываю все модели представлений.&lt;br /&gt;
К примеру нам нужно отобразить на одной странице данные о клиенте и о товаре.
  &lt;pre class=&quot;brush:csharp&quot;&gt;
        public ActionResult ShowProductAndClient()
        {
            var model = new ShowProductAndClientViewModel();

            model.Client = new Client()
            {
                Name = &quot;Artem&quot;,
                Age = 22,
                Country = &quot;Ukraine&quot;
            };

            model.Product = new Product()
                                {
                                    Name = &quot;Клавиатура Logitech G19 Gaming USB&quot;,
                                    Price = 1494,
                                    Description = &quot;Logitech G19 Gaming одна из лучших игровых клавиатур ......&quot;      
                                };

            return View(model);
        }
 &lt;/pre&gt;

&lt;img src=&quot;http://shkolovy.com/img/blog/StrongTypeViewModel/2.png&quot; /&gt;
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
В представлении это будет выглядеть так:

  &lt;pre class=&quot;brush:html&quot;&gt;
Имя продукта: &lt;%= Model.Product.Name %&gt; &lt;br /&gt;
Имя клиента: &lt;%= Model.Client.Name %&gt;
&lt;/pre&gt;

 &lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
&lt;img src=&quot;http://shkolovy.com/img/blog/StrongTypeViewModel/3.png&quot; /&gt;
 &lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
&lt;a href=&quot;http://shkolovy-code.googlecode.com/files/StrongTypeViewModel.rar&quot;&gt;Скачать пример&lt;/a&gt;</description>
      <pubDate>2/6/2011 1:24:28 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Meta теги в ASP MVC 2 </title>
      <link>http://www.shkolovy.com/blog/article/49</link>
      <description>Для указания Meta тегов в MVC2 приложениях я использую очень простой подход. Так как для большинства страниц на сайте Мета теги будут одинаковые, а Titles разные, я помещаю их в отдельные контейнеры MasterPage:

&lt;pre class=&quot;brush:html&quot;&gt;


&amp;lt;title&amp;gt;&amp;lt;asp:ContentPlaceHolder ID=&quot;TitleContainer&quot; runat=&quot;server&quot; /&amp;gt;&amp;lt;/title&amp;gt;
&amp;lt;asp:ContentPlaceHolder ID=&quot;HeadContainer&quot; runat=&quot;server&quot;&amp;gt;
    &amp;lt;meta name=&quot;description&quot; content=&quot;Default Description&quot; /&amp;gt;
    &amp;lt;meta name=&quot;keywords&quot; content=&quot;Default Keywords&quot; /&amp;gt;
&amp;lt;/asp:ContentPlaceHolder&amp;gt;

 &lt;/pre&gt;
Если нужно на какой то из страниц указать специфические Meta теги, просто переопределяем &lt;b&gt;headContent&lt;/b&gt;.

&lt;pre class=&quot;brush:html&quot;&gt;

&amp;lt;asp:Content ID=&quot;headContent&quot; ContentPlaceHolderID= HeadContainer&quot; runat=&quot;server&quot;&amp;gt;
    &amp;lt;meta name=&quot;description&quot; content=&quot;конкретное описание страницы&quot; /&amp;gt;
    &amp;lt;meta name=&quot;keywords&quot; content=&quot;конкретные ключевые слова&quot; /&amp;gt;
&amp;lt;/asp:Content&amp;gt;
&lt;/pre&gt;
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Title нужно писать на каждой странице.

&lt;pre class=&quot;brush:html&quot;&gt;

&lt;asp:Content ID=&quot;TitleContent&quot; ContentPlaceHolderID=&quot;TitleContainer&quot; runat=&quot;server&quot;&gt;
	Название страницы
&lt;/asp:Content&gt;
&lt;/pre&gt;</description>
      <pubDate>2/7/2011 8:57:44 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Редирект по таймеру на JavaScript</title>
      <link>http://www.shkolovy.com/blog/article/50</link>
      <description>&lt;pre class=&quot;brush: js;&quot;&gt;
 &lt;script src=&quot;http://code.jquery.com/jquery-latest.js&quot;&gt;&lt;/script&gt;
   
 &lt;script type=&quot;text/javascript&quot;&gt;
    
        var counter = 10;
        var redirectTo;

        function StartCounter(url) {

            $('#counter').text('10');
            redirectTo = url;

            CountDown();
        }

        function CountDown() {

         setTimeout(function () {
                counter--;

                $('#counter').text(counter);

                if (counter != 0) {
                    CountDown();
                }
                else {
                    location = redirectTo;
                }

            }, 1000);
        }

    &lt;/script&gt;

&lt;input type=&quot;button&quot; value=&quot;Go&quot; onclick=&quot;StartCounter(somePage.htm)&quot; &gt;

До редиректа осталось &lt;span id=&quot;counter&quot;&gt;&lt;/span&gt;
&lt;/pre&gt;</description>
      <pubDate>2/7/2011 9:08:27 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>NET Reflector утилита для просмотра кода сборок</title>
      <link>http://www.shkolovy.com/blog/article/51</link>
      <description>&lt;b&gt;NET Reflector&lt;/b&gt; – это бесплатная  утилита которую можно использовать для дебага, просмотра или анализа сборок. Так же можно использовать как плагин по Visual studio.

&lt;img alt=&quot;net reflector&quot; src=&quot;http://shkolovy.com/img/blog/reflector/reflector.png&quot; /&gt;
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Лично для меня эта утилита стала полезна тем, что я смог посмотреть код некоторых стандартных методов .Net Framework.

&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Посмотреть видео по использованию &lt;a href=&quot;http://www.red-gate.com/products/dotnet-development/reflector/video&quot;&gt;http://www.red-gate.com/products/dotnet-development/reflector/video&lt;/a&gt;
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Скачать последнюю версию можно &lt;a href=&quot;http://reflector.red-gate.com/download.aspx?TreatAsUpdate=1&quot;&gt;здесь&lt;/a&gt;.</description>
      <pubDate>2/7/2011 9:15:31 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Добавление атрибутов id и class для Html.TextBoxFor в ASP MVC 2</title>
      <link>http://www.shkolovy.com/blog/article/52</link>
      <description>&lt;pre class=&quot;brush: csharp;&quot;&gt;&lt;%= Html.TextBoxFor(m =&gt; Model.SomeField)%&gt;&lt;/pre&gt;

В результате id будет таким же как и название поля, что в некоторых случаях может нас не устраивать.
&lt;pre class=&quot;brush: html;&quot;&gt;
&lt;input type=&quot;text&quot; value=&quot;&quot; name=&quot;SomeField&quot; id=&quot;SomeField&quot;&gt;
&lt;/pre&gt;

Переопределить id и добавить class можно таким способом:
&lt;pre class=&quot;brush: csharp;&quot;&gt;
&lt;%= Html.TextBoxFor(m =&gt; Model.SomeField, new { id = &quot;someId&quot;, @class = &quot;someCss&quot;})%&gt;
&lt;/pre&gt;

Либо так
&lt;pre class=&quot;brush: csharp;&quot;&gt;
&lt;%= Html.TextBoxFor(m =&gt; Model.SomeField, new Dictionary&lt;string, object&gt;{{&quot;class&quot;,&quot;someCss&quot;},{&quot;id&quot;,&quot;someId&quot;}})%&gt;
&lt;/pre&gt;

Получиться:
&lt;pre class=&quot;brush: html;&quot;&gt;
&lt;input type=&quot;text&quot; value=&quot;&quot; name=&quot;SomeField&quot; id=&quot;someId&quot; class=&quot;someCss&quot;&gt;&lt;/pre&gt;</description>
      <pubDate>2/7/2011 9:24:38 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Хранение параметров кеширования в Web.config ASP MVC 2</title>
      <link>http://www.shkolovy.com/blog/article/53</link>
      <description>Для того чтобы сделать кеширование более гибким рекомендую хранить параметры кеширования в Web.config файле. Это позволит нам легко изменить параметры &lt;b&gt;duration&lt;/b&gt; или &lt;b&gt;varyByParam&lt;/b&gt; не перекомпилируя весь проект. Так же мы можем просто отключить кеширование, для этого также не потребуется перекомпилировать проект.

Данную секцию нужно поместить в &lt;b&gt;&amp;lt;system.web&amp;gt;&lt;/b&gt;

&lt;pre class=&quot;brush: xml;&quot;&gt;
 &lt;caching&gt;
      &lt;outputCacheSettings&gt;
        &lt;outputCacheProfiles&gt;
          &lt;add name=&quot;CacheForHour&quot; duration=&quot;3600&quot; varyByParam=&quot;none&quot;/&gt;
        &lt;/outputCacheProfiles&gt;
      &lt;/outputCacheSettings&gt;
 &lt;/caching&gt;
&lt;/pre&gt;

Использование:
&lt;pre class=&quot;brush: csharp;&quot;&gt;
        [OutputCache(CacheProfile = &quot;CacheForHour&quot;)]
        public ActionResult Index()
        {
            return View();
        }
&lt;/pre&gt;</description>
      <pubDate>3/16/2011 9:35:01 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Шифрование данных в Web.config</title>
      <link>http://www.shkolovy.com/blog/article/54</link>
      <description>Для шифрования данных в Web.config можно использовать два метода: 

&lt;ul&gt;&lt;li&gt;&lt;b&gt;RSAProtectedConfigurationProvider&lt;/b&gt; – использует RSA algorithm для шифрования и расшифровывания.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DPAPIProtectedConfigurationProvider&lt;/b&gt; - использует  Data Protection API (DPAPI) для шифрования и расшифровывания.&lt;/li&gt;
&lt;/ul&gt;
Шифровать данные в Web.config можно как программным способом так и через командную стоку. Рассмотрим первый способ.

Будем шифровать &lt;b&gt;connectionStrings&lt;/b&gt;, так как там обычно содержаться логин и пароль к базе данных.
&lt;pre class=&quot;brush: xml;&quot;&gt;
 &lt;connectionStrings&gt;
        &lt;add name=&quot;ConnectionString&quot; connectionString=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True&quot;
            providerName=&quot;System.Data.SqlClient&quot; /&gt;
    &lt;/connectionStrings&gt;
&lt;/pre&gt;
Пишем в командной строке:
&lt;pre&gt;
aspnet_regiis.exe -pef section physical_directory -prov provider
c:\Windows\Microsoft.NET\Framework\v2.0.50727&gt;aspnet_regiis.exe -pef &quot;connection
Strings&quot; &quot;D:\.net\Cryp_Decrypt_webconfig&quot; -prov &quot;DataProtectionConfigurationProv
ider&quot;
Encrypting configuration section...
Succeeded!
&lt;/pre&gt;

Зашифрованный connectionStrings должен стать примерно таким:

&lt;pre class=&quot;brush: xml;&quot;&gt;
&lt;connectionStrings configProtectionProvider=&quot;DataProtectionConfigurationProvider&quot;&gt;
        &lt;EncryptedData&gt;
            &lt;CipherData&gt;
                &lt;CipherValue&gt;AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAAdLT7F5LQ0SAslVWf74DtgQAAAACAAAAAAAQZgAAAAEAACAAAAAl0mZe3Z/OrTxxRNyZ6DyJMALb9BbztbbQH7GEb5BlugAAAAAOgAAAAAIAACAAAAAnho7s3GhnJemFZ99tCbksT/8R3qiWTkxM/83kfxEppQACAACwGHlkGZjwukDbZ2nFzNYVq59aVuGjR3KYp2BJcTg3xtIctFT3UIIVe1k7nx034dQS0S1wKQtipbVRk0peam7JN7H3rSLoTT/64Rzmu+TRDhlxs7uN55rsf5TPXqsgtLuM3Zw3bZWZHdl1LjrmY4kSW9UHPxuZSkLst43TLi+CQ53pqoO24DdzOnUeE0iH0hEaMToRLO7i939DzZINlDzoPzxryXQ0CkFPm7dlyzhyV5wirmkKumeS3Mw9gsWBqMC/I168UgpIdcIc5Ga8Ffc8FtUKqH0Y9ZEdb2NLrWOSC46MKbv3NUWF+tYo7TyuVz0cw5cxldzeq6NAG30GS+j1J5lnCWQggCJm1FAbcO6PCzthLnPqhV+RlFpMm4zlAq5iWn12ba0anoh/0gdL/U8Ee7mqxaj5bGNBJLxFUBTiGCpA8xto0Y0MdanwRD7Z5yKGgtVmE2ma+zJBGhicgBK9kbxxgA0Hx7RvGGsNbkheZsZwYB6gCtyzbAbPZXZpRxwLWA1aGLLTa+o4Q3K5bUIGvrnucJVqDTAhPGh76SW6GkU/W/dnP9MTEJhNZ4XtI5SJeJYX/YC8JNB8Yr43KInBTohTxlstQ9gWMZAPfQAYPsAhGAT1xQkNj4CZsp5UjqojrnNXIkgLkigZneUyuFn5ZWAldeK0Q4ct2Jnl+LLtrEAAAABIuMASlLAL9W3pIxczhXqVqE73W+MXpxlZFY844G3aDlIJ7fVnb2oRYLlvU3Jq9rx1ChltUrkZ0M0VK9r/WZmr&lt;/CipherValue&gt;
            &lt;/CipherData&gt;
        &lt;/EncryptedData&gt;
    &lt;/connectionStrings&gt;
&lt;/pre&gt;
Делаем дешифрование:
&lt;pre&gt;
aspnet_regiis.exe -pdf section physical_directory
c:\Windows\Microsoft.NET\Framework\v2.0.50727&gt;aspnet_regiis.exe -pdf &quot;connectio
Strings&quot; &quot;D:\.net\Cryp_Decrypt_webconfig&quot;
Decrypting configuration section...
Succeeded!
&lt;/pre&gt;

Важно знать что шифрование нужно делать на том компьютере, на котором сайт будет стоять. Иначе IIS сервер при обращении к данному connectionStrings не сможет его расшифровать и считать данные.
Но, данное ограничение не распространяться на второй метод шифрования - RSAProtectedConfigurationProvider. Используя его можно экспортировать ключ. Рассмотрим и этот метод:
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Сперва нужно немного изменить Web.config добавив в него секцию &lt;b&gt;configprotecteddata&lt;/b&gt;(Подробнее о создании ключа можно почитать на &lt;a href=&quot;http://msdn.microsoft.com/ru-ru/library/2w117ede.aspx&quot; rel=&quot;nofollow&quot;&gt;MSDN&lt;/a&gt;):
&lt;pre class=&quot;brush: xml;&quot;&gt;
  &lt;configProtectedData&gt;
    &lt;providers&gt;
      &lt;add keyContainerName=&quot;CustomKeys&quot;
               useMachineContainer=&quot;true&quot;
               description=&quot;Uses RsaCryptoServiceProvider to encrypt and decrypt&quot;
               name=&quot;CustomProvider&quot;
           type=&quot;System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&quot; /&gt;
    &lt;/providers&gt;
  &lt;/configProtectedData&gt;

  &lt;connectionStrings&gt;
        &lt;add name=&quot;ConnectionString&quot; connectionString=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True&quot;
            providerName=&quot;System.Data.SqlClient&quot; /&gt;
    &lt;/connectionStrings&gt;
&lt;/pre&gt;


&lt;pre&gt;
c:\Windows\Microsoft.NET\Framework\v2.0.50727&gt;aspnet_regiis.exe -pef &quot;connectio
Strings&quot; &quot;D:\.net\Cryp_Decrypt_webconfig&quot; -prov &quot;CustomProvider&quot;
Encrypting configuration section...
Succeeded!
&lt;/pre&gt;

&lt;pre class=&quot;brush: xml;&quot;&gt;
&lt;connectionStrings configProtectionProvider=&quot;CustomProvider&quot;&gt;
    &lt;EncryptedData Type=&quot;http://www.w3.org/2001/04/xmlenc#Element&quot;
      xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot;&gt;
      &lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#tripledes-cbc&quot; /&gt;
      &lt;KeyInfo xmlns=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;
        &lt;EncryptedKey xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot;&gt;
          &lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#rsa-1_5&quot; /&gt;
          &lt;KeyInfo xmlns=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;
            &lt;KeyName&gt;Rsa Key&lt;/KeyName&gt;
          &lt;/KeyInfo&gt;
          &lt;CipherData&gt;
            &lt;CipherValue&gt;Ld0hMWPv1rKFPEoihf9EXf+WEy+pJ02KDhv73wNCqjREAfbpG0SWKzGPRi0BzzjCipHI0+paBQRekv7oVjOf4fClG3sP+HQmnagIObGSGZhCUBS2ebXLTSBpSkIvV/YpIdaZCwdCUMeqOe5bW27I/RGhsBN/ZTalbrPHY7l7fVs=&lt;/CipherValue&gt;
          &lt;/CipherData&gt;
        &lt;/EncryptedKey&gt;
      &lt;/KeyInfo&gt;
      &lt;CipherData&gt;
        &lt;CipherValue&gt;hjMynHgou/zMbl69AlfK7RMktmY17+rCx1KG+2UqkmzvD8nEB6ANWTvJeRD2VIZdg1vqg5S7Ac8FdoYOBuazQwGOlegIEoQkwOYliHzHs+oB8RkqgjQF4XTxVkMU7A/6RaiWFntvX5+rqwr1+JNq2KeUnO++34T7rbgoqVue6iYlZNvj09X/niYC/+38qek5jU2t4eyfOIUYbv+eibn6nojvgBDO8wy2DlesTpIxLfXBPx36GOqi7l8xcvwHtx08/e+Pp0oPQ5UigmYgqo82hLXUOHTTdL4bjzqRKNo57KhL3ocKOcYA40Ge4NUSjWTzs0VdFF6XuJrgRtaFLsHf9NQoJKpVe4Hu&lt;/CipherValue&gt;
      &lt;/CipherData&gt;
    &lt;/EncryptedData&gt;
  &lt;/connectionStrings&gt;
&lt;/pre&gt;</description>
      <pubDate>3/16/2011 10:00:25 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Отправка почты через Google Apps</title>
      <link>http://www.shkolovy.com/blog/article/55</link>
      <description>Если Вы используете сервисы &lt;a href=&quot;http://www.google.com/apps/intl/ru/business/index.html&quot; rel=&quot;nofollow&quot;&gt;Google Apps&lt;/a&gt; то несомненно Вам может понадобиться отправлять почту используя Smtp клиент от gmal. Это может быть простая feedback форма на вашем сайте, или рассылка последних новостей.
Для этого Вам нужно иметь зарегистрированную почту на Google Apps, она должна выгледеть примерно так &lt;i&gt;mailbox@mydomain.com&lt;/i&gt;.
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Настройки SMTP клиента:

&lt;style&gt;
#t
{
border-collapse:collapse;
}

#t td
{
border: solid 1px #ccc;
padding:5px;
}
&lt;/style&gt;

&lt;table id=&quot;t&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SMTPHost&lt;/b&gt;&lt;/td&gt;
&lt;td&gt; smtp.gmail.com&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SMTPPort&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;587&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Ssl&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SMTPUsername&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;mailbox@mydomain.com&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SMTPPassword&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;************&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Класс для отправки письма:

&lt;pre class=&quot;brush: csharp;&quot;&gt;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Net;
using System.Net.Mail;

public class Mail
{
    public static void Send(string subject, string body, string sender, IEnumerable&lt;string&gt; recipients, Attachment attachment)
    {
        MailMessage message = new MailMessage();

        foreach (string recipient in recipients)
        {
            message.To.Add(recipient);
        }

        message.From = new MailAddress(sender);
        message.Subject = subject;
        message.IsBodyHtml = true;
        message.Body = body;

        if (attachment != null)
        {
            message.Attachments.Add(attachment);
        }

        // Configure SMTP client
        SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings[&quot;SMTPHost&quot;]);

        if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings[&quot;SMTPHost&quot;]))
        {
            client.EnableSsl = bool.Parse(ConfigurationManager.AppSettings[&quot;EnableSsl&quot;]);
        }


        if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings[&quot;SMTPPort&quot;]))
        {
            client.Port = int.Parse(ConfigurationManager.AppSettings[&quot;SMTPPort&quot;]);
        }

        if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings[&quot;SMTPUsername&quot;]))
        {
            client.Credentials = new NetworkCredential(ConfigurationManager.AppSettings[&quot;SMTPUsername&quot;], ConfigurationManager.AppSettings[&quot;SMTPPassword&quot;]);
        }

        client.Send(message);
    }

}
&lt;/pre&gt;

Настройки Smtp клиента были вынесены в Web.config:
&lt;pre class=&quot;brush: html;&quot;&gt;

	&lt;appSettings&gt;
        &lt;add key=&quot;SMTPHost&quot; value=&quot;smtp.gmail.com&quot;&gt;&lt;/add&gt;
        &lt;add key=&quot;SMTPPort&quot; value=&quot;587&quot;&gt;&lt;/add&gt;
        &lt;add key=&quot;EnableSsl&quot; value=&quot;true&quot;&gt;&lt;/add&gt;
        &lt;add key=&quot;SMTPUsername&quot; value=&quot;mailbox@ mydomain.com&quot;&gt;&lt;/add&gt;
        &lt;add key=&quot;SMTPPassword&quot; value=&quot;************&quot;&gt;&lt;/add&gt;  
	&lt;/appSettings&gt;
&lt;/pre&gt;</description>
      <pubDate>3/23/2011 9:49:17 PM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Image lazy loader ASP MVC 2</title>
      <link>http://www.shkolovy.com/blog/article/56</link>
      <description>&lt;img src=&quot;http://shkolovy.com/img/blog/ImageLazyLoader/1.png&quot; alt=&quot;image lazy loader&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Контрол ImageLazyLoader предназначен для ленивой подзагрузки картинок. Запрос на сервер идет как только картинка попадает в зону видимости окна браузра. Это позволит в разы увеличить скорость загрузки страницы с большим количеством картинок или фотографий.
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
&lt;img src=&quot;http://shkolovy.com/img/blog/ImageLazyLoader/2.png&quot; alt=&quot;image lazy loader&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Контрол написан под ASP MVC 2, и используеться как html helper.
Для начала нужно подключить библиотеку &lt;b&gt;ImageLazyLoader.dll&lt;/b&gt;
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
&lt;img src=&quot;http://shkolovy.com/img/blog/ImageLazyLoader/3.png&quot; alt=&quot;image lazy loader&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
Затем подключить jquery и ImageLazyLoader.js
&lt;div class=&quot;paragraph&quot;&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: html;&quot;&gt;
   &lt;script src=&quot;../../ImageLazyLoader/Script/jquery-1.4.1.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
   &lt;script src=&quot;../../ImageLazyLoader/Script/ImageLazyLoader.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/pre&gt;

Сама картина прописываеться так:

&lt;pre class=&quot;brush: csharp;&quot;&gt;
&lt;%= Html.ImageLazy(&quot;/Images/yahooo.jpg&quot;, new {width = &quot;100&quot;, height = &quot;100&quot;, @class = &quot;img-lazy-bg&quot;}) %&gt;
&lt;/pre&gt;
Или так:
&lt;pre class=&quot;brush: csharp;&quot;&gt;
&lt;%= Html.ImageLazy(&quot;/Images/yahooo.jpg&quot;) %&gt;&lt;/pre&gt;
Для того чтобы картинка грузилась сразу при загрузке страницы(например лого сайта или рекламный баннер) пишем:
&lt;pre class=&quot;brush: csharp;&quot;&gt;
&lt;%= Html.Image (&quot;/Images/yahooo.jpg&quot;) %&gt;&lt;/pre&gt;
Ну или просто 
&lt;pre class=&quot;brush: html;&quot;&gt;
&lt;img alt=&quot;yahooo&quot; src=&quot;/Images/yahooo.jpg&quot; /&gt;&lt;/pre&gt;
Пример можно скачать &lt;a href=&quot;http://shkolovy-code.googlecode.com/files/ImageLazyLoader_Example_MVC2.rar&quot;&gt;здесь&lt;/a&gt;.</description>
      <pubDate>3/26/2011 10:58:46 AM</pubDate>
      
    </item>
    
   
    <item>
    
      <title>Пример использование ItextSharp для создания Pdf документов</title>
      <link>http://www.shkolovy.com/blog/article/57</link>
      <description>Здесь будет рассмотрен простой пример работы с ItextSharp с приминением таблиц, шрифтов, ссылок и картинок.
После запуска программы будет создан bender.pdf документ.
&lt;div class=&quot;pharagraph&quot;&gt;&lt;/div&gt;
&lt;img alt=&quot;ItextSharp_example&quot; src=&quot;http://shkolovy.com/img/blog/ItextSharpBender/1.jpg&quot;&gt;

Качаем библиотеку &lt;a href=&quot;&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/projects/itextsharp/&lt;/a&gt; и добавляем ее проект.

&lt;pre class=&quot;brush:csharp;&quot;&gt;
var doc = new Document();

            const string pdfTicketFileName = &quot;bender.pdf&quot;;
            var fileStream = new FileStream(GetPath(@&quot;pdf/&quot;) + pdfTicketFileName, FileMode.Create);

            try
            {
                PdfWriter.GetInstance(doc, fileStream);

                doc.Open();

                //Init fonts
                //Очень важно указывать шрифт вручную, иначе кирилица не будет отображатся в Pdf документе
                BaseFont customfont = BaseFont.CreateFont(GetPath(@&quot;fonts/&quot;) + &quot;arial.ttf&quot;, BaseFont.IDENTITY_H,
                                                          BaseFont.NOT_EMBEDDED);

                var defaultFont = new Font(customfont, 10, Font.NORMAL, BaseColor.BLACK);
                var italicFont = new Font(customfont, 10, Font.ITALIC, BaseColor.BLACK);
                var titleFont = new Font(customfont, 15, Font.NORMAL, BaseColor.BLACK);


                //Init main table
                var mainTable = new PdfPTable(2);

                mainTable.SetWidths(new[] {2, 4});
                mainTable.DefaultCell.BorderWidth = 2;
                mainTable.TotalWidth = 500f;
                mainTable.LockedWidth = true;
                mainTable.DefaultCell.BorderColor = BaseColor.LIGHT_GRAY;
                mainTable.DefaultCell.Padding = 5f;

                Image photo = Image.GetInstance(GetPath(@&quot;img/bender.jpg&quot;));

                mainTable.AddCell(photo);


                var infoTable = new PdfPTable(1);
                infoTable.DefaultCell.BorderWidth = 0;

                infoTable.AddCell(new Phrase(&quot;Бендер Сгибальщик Родригес\n \n&quot;, titleFont));
                infoTable.AddCell(new Phrase(&quot;Бендер — комический герой (а если совсем точнее, антигерой), &quot; +
                                             &quot; сквернослов, алкоголик(алкоголь является топливом, а также нужен для  &quot; +
                                             &quot; смазки, иначе голова Бендера ржавеет в виде характерной ржавой щетины) &quot; +
                                             &quot; и заядлый курильщик сигар, почитатель порнографии для роботов (в виде электрических схем),  &quot; +
                                             &quot; клептоман, повар (его еда в большинстве случаев по меньшей мере несъедобна, часто опасна  &quot; +
                                             &quot;  для жизни). В критической ситуации зачастую единственный, кто впадает в панику.\n \n&quot;,
                                             defaultFont));


                var anchor = new Anchor(&quot;Взято с Википедии&quot;, italicFont);

                anchor.Reference = &quot;http://ru.wikipedia.org/&quot;;

                infoTable.AddCell(anchor);

                mainTable.AddCell(infoTable);

                doc.Add(new Phrase(&quot;Визитка Бендера\n&quot;, titleFont));

                doc.Add(mainTable);
            }
            catch (DocumentException dex)
            {
                throw (dex);
            }

            catch (IOException ioex)
            {
                throw (ioex);
            }
            finally
            {
                doc.Close();
            }
&lt;/pre&gt;

Скачать пример полностью можно &lt;a rel=&quot;nofollow&quot; href=&quot;http://shkolovy-code.googlecode.com/files/ItextSharpExample1.rar&quot;&gt;здесь&lt;/a&gt;.</description>
      <pubDate>3/27/2011 2:44:41 PM</pubDate>
      
    </item>
    
   
   
   
  </channel>
</rss>

