<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8772299484883455961</id><updated>2011-09-01T17:09:37.838+04:00</updated><category term='rsdn'/><category term='apache'/><category term='linux'/><category term='windows seven'/><category term='virtualization'/><category term='revenge'/><category term='mcp club'/><category term='tools'/><category term='visual studio 2008'/><category term='debugging'/><category term='security'/><category term='tips and tricks'/><category term='sqlite'/><category term='policy'/><category term='sql server'/><category term='libraries'/><category term='console'/><category term='trac'/><category term='windows forms'/><category term='windows 2008 server'/><category term='powershell'/><category term='epic fail'/><category term='optimization'/><category term='visual studio 2010'/><category term='video'/><category term='asp.net'/><category term='design'/><category term='.net'/><category term='automation'/><category term='x64'/><category term='subversion'/><title type='text'>adontz</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-1037815956808873356</id><published>2100-01-01T00:00:00.000+04:00</published><updated>2009-07-22T09:14:37.655+04:00</updated><title type='text'>Мои блоги</title><content type='html'>Блог для сопелок и пыхтелок - &lt;a href="http://adontz.livejournal.com/"&gt;http://adontz.livejournal.com/&lt;/a&gt;&lt;br /&gt;Блог для свистелок и перделок - &lt;a href="http://adontz.blogspot.com/"&gt;http://adontz.blogspot.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-1037815956808873356?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/1037815956808873356/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=1037815956808873356' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/1037815956808873356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/1037815956808873356'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/1999/01/httpadontz.html' title='Мои блоги'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-3036791281816205776</id><published>2011-08-06T12:31:00.002+04:00</published><updated>2011-08-06T12:33:29.068+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mcp club'/><title type='text'>MCP Club Tbilisi</title><content type='html'>&lt;a href="http://s1196.photobucket.com/albums/aa415/adontz/2011-08-05/?action=view&amp;amp;current=P8050062.jpg" target="_blank"&gt;&lt;img src="http://i1196.photobucket.com/albums/aa415/adontz/2011-08-05/P8050062.jpg" border="0" alt="Photobucket"&gt;&lt;/a&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Вчера состоялась встреча MCP Club Tbilisi, прочёл лекцию, буду читать ещё.&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;a href="http://s1196.photobucket.com/albums/aa415/adontz/2011-08-05/" target="_blank"&gt;Все фотографии&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-3036791281816205776?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/3036791281816205776/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=3036791281816205776' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3036791281816205776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3036791281816205776'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2011/08/mcp-club-tbilisi.html' title='MCP Club Tbilisi'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i1196.photobucket.com/albums/aa415/adontz/2011-08-05/th_P8050062.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-7561672166765828934</id><published>2011-07-02T02:47:00.005+04:00</published><updated>2011-07-02T04:49:20.923+04:00</updated><title type='text'>Thunderbird 5.0 прозрачное меню и панель инструментов</title><content type='html'>Содержимое chrome/userChrome.css, которое приводит Thunderbird в приличный вид:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");&lt;br /&gt;&lt;br /&gt;toolbox.toolbox-top &gt; toolbar&lt;br /&gt;{&lt;br /&gt;  /* background-color: #EEF3FA !important; */&lt;br /&gt;  background-color: #EEF3FA !important;&lt;br /&gt;  background-image: -moz-linear-gradient(rgba(251, 252, 253, 0.95), rgba(246, 247, 248, 0.47) 49%, rgba(231, 232, 233, 0.45) 51%, rgba(225, 226, 229, 0.3)) !important;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;toolbox.toolbox-top &gt; toolbar toolbarspring,&lt;br /&gt;toolbox.toolbox-top &gt; toolbar toolbaritem&lt;br /&gt;{&lt;br /&gt;  background: none !important;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;toolbox.toolbox-top &gt; toolbar toolbarbutton&lt;br /&gt;{&lt;br /&gt;  background-color: #EEF3FA !important;&lt;br /&gt;  background-image: -moz-linear-gradient(rgba(251, 252, 253, 0.95), rgba(246, 247, 248, 0.47) 49%, rgba(231, 232, 233, 0.45) 51%, rgba(225, 226, 229, 0.3)) !important;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.tabmail-strip&lt;br /&gt;{&lt;br /&gt;  background-color: #EEF3FA !important;&lt;br /&gt;  background-image: -moz-linear-gradient(rgba(251, 252, 253, 0.95), rgba(246, 247, 248, 0.47) 49%, rgba(231, 232, 233, 0.45) 51%, rgba(225, 226, 229, 0.3)) !important;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-7561672166765828934?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/7561672166765828934/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=7561672166765828934' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7561672166765828934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7561672166765828934'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2011/07/thunderbird-50.html' title='Thunderbird 5.0 прозрачное меню и панель инструментов'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-4311862097705489610</id><published>2011-03-31T04:09:00.006+04:00</published><updated>2011-03-31T04:17:25.274+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql server'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='revenge'/><title type='text'>Передать таблицу в хранимую процедуру</title><content type='html'>Нужно описать табличный тип для параметра&lt;br /&gt;&lt;pre class="brush:sql"&gt;&lt;br /&gt;CREATE TYPE [ReferenceSet]  AS TABLE&lt;br /&gt;(&lt;br /&gt; [ID] UNIQUEIDENTIFIER NOT NULL&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;описать хранимую процедуру&lt;br /&gt;&lt;pre class="brush:sql"&gt;&lt;br /&gt;CREATE PROCEDURE [StatusDocument_Create](&lt;br /&gt; @ID         UNIQUEIDENTIFIER,&lt;br /&gt; @Services   [Core].[ReferenceSet] READONLY)&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt; INSERT INTO&lt;br /&gt;  [Record].[ServiceRecord]([Document], [Service])&lt;br /&gt; SELECT&lt;br /&gt;  @ID, [ID]&lt;br /&gt; FROM&lt;br /&gt;  @Services;&lt;br /&gt;END;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;и вызвать её&lt;br /&gt;&lt;pre class="brush:csharp"&gt;&lt;br /&gt;using (SqlCommand command = CreateCommand())&lt;br /&gt;{&lt;br /&gt; command.CommandText = "[StatusDocument_Update]";&lt;br /&gt; command.CommandType = CommandType.StoredProcedure;&lt;br /&gt;&lt;br /&gt; command.Parameters.Add(new SqlParameter("ID", id));&lt;br /&gt;&lt;br /&gt; DataTable servicesTable = new DataTable("ReferenceSet");&lt;br /&gt;&lt;br /&gt; servicesTable.Columns.Add("ID", typeof(Guid));&lt;br /&gt;&lt;br /&gt; foreach (Guid service in services)&lt;br /&gt; {&lt;br /&gt;  servicesTable.Rows.Add(service);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; command.Parameters.Add(new SqlParameter("Services", servicesTable));&lt;br /&gt;&lt;br /&gt; command.ExecuteNonQuery();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-4311862097705489610?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/4311862097705489610/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=4311862097705489610' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/4311862097705489610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/4311862097705489610'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2011/03/blog-post.html' title='Передать таблицу в хранимую процедуру'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-7766064285373592969</id><published>2011-02-13T20:50:00.004+04:00</published><updated>2011-03-31T04:14:47.043+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql server'/><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='revenge'/><title type='text'>T-SQL Include</title><content type='html'>Маленький обходной путь, позволяющий динамически собрать большой SQL файл из множества мелких.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql"&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;CREATE TABLE [Statements]&lt;br /&gt;(&lt;br /&gt; [Content] NVARCHAR(MAX) NOT NULL&lt;br /&gt;);&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;BULK INSERT [Statements]&lt;br /&gt;FROM 'Path\to\your\file1.sql'&lt;br /&gt;WITH ( DATAFILETYPE = 'widechar', FIELDTERMINATOR = '\0', ROWTERMINATOR = '\0' );&lt;br /&gt;&lt;br /&gt;BULK INSERT [Statements]&lt;br /&gt;FROM 'Path\to\your\file2.sql'&lt;br /&gt;WITH ( DATAFILETYPE = 'widechar', FIELDTERMINATOR = '\0', ROWTERMINATOR = '\0' );&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;DECLARE StatementCursor CURSOR FOR SELECT * FROM [Statements];&lt;br /&gt;DECLARE @Content NVARCHAR(MAX);&lt;br /&gt;DECLARE @StartOffset BIGINT;&lt;br /&gt;DECLARE @EndOffset BIGINT;&lt;br /&gt;DECLARE @Length BIGINT;&lt;br /&gt;DECLARE @Line NVARCHAR(MAX);&lt;br /&gt;DECLARE @Batch NVARCHAR(MAX);&lt;br /&gt;&lt;br /&gt;OPEN StatementCursor;&lt;br /&gt;&lt;br /&gt;FETCH NEXT FROM StatementCursor INTO @Content&lt;br /&gt;&lt;br /&gt;WHILE @@FETCH_STATUS = 0&lt;br /&gt;BEGIN&lt;br /&gt; SET @StartOffset = 0;&lt;br /&gt; SET @EndOffset = CHARINDEX(CHAR(10), @Content, 0);&lt;br /&gt; SET @Length = LEN(@Content);&lt;br /&gt; SET @Batch = '';&lt;br /&gt; &lt;br /&gt; WHILE (@EndOffset &lt;&gt; 0)&lt;br /&gt; BEGIN&lt;br /&gt;  SET @Line = SUBSTRING(@Content, @StartOffset, @EndOffset - @StartOffset - 1);&lt;br /&gt;  SET @Line = RTRIM(LTRIM(@Line));&lt;br /&gt;  &lt;br /&gt;  IF (@Line = 'GO')&lt;br /&gt;  BEGIN&lt;br /&gt;   PRINT '================================================================================';&lt;br /&gt;   PRINT @Batch;&lt;br /&gt;   EXEC(@Batch);&lt;br /&gt;   SET @Batch = '';&lt;br /&gt;  END&lt;br /&gt;  ELSE&lt;br /&gt;  BEGIN&lt;br /&gt;   SET @Batch = @Batch + CHAR(13) + CHAR(10) + @Line;&lt;br /&gt;  END&lt;br /&gt;&lt;br /&gt;  SET @StartOffset = @EndOffset + 1;&lt;br /&gt;  SET @EndOffset = CHARINDEX(CHAR(10), @Content, @StartOffset);&lt;br /&gt; END&lt;br /&gt; &lt;br /&gt; PRINT '================================================================================';&lt;br /&gt; PRINT @Batch;&lt;br /&gt; EXEC(@Batch);&lt;br /&gt; SET @Batch = '';&lt;br /&gt;&lt;br /&gt; FETCH NEXT FROM StatementCursor INTO @Content&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;CLOSE StatementCursor;&lt;br /&gt;&lt;br /&gt;DEALLOCATE StatementCursor;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;DROP TABLE [Statements];&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-7766064285373592969?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/7766064285373592969/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=7766064285373592969' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7766064285373592969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7766064285373592969'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2011/02/t-sql-include.html' title='T-SQL Include'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-6289687112747304958</id><published>2011-02-06T14:24:00.003+04:00</published><updated>2011-02-06T14:29:36.022+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rsdn'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Статья на конкурс</title><content type='html'>На сайте РСДН выставлена моя статья&lt;br /&gt;http://www.rsdn.ru/article/csharp/ktm.xml&lt;br /&gt;&lt;br /&gt;Мои преданные поклонники (да, оба) могут помочь мне выиграть суперский ноутбук!&lt;br /&gt;&lt;br /&gt;P.S. Голосуйте честно. Есть жюри, так что если статья моя говно, только оценками делу не помочь, только наоборот.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-6289687112747304958?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/6289687112747304958/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=6289687112747304958' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6289687112747304958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6289687112747304958'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2011/02/blog-post.html' title='Статья на конкурс'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-8934128560179478261</id><published>2010-11-21T11:22:00.003+04:00</published><updated>2010-11-21T11:31:43.583+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><title type='text'>HP LaserJet</title><content type='html'>Уже не первый раз сталкиваюсь с ситуацией когда конкретная модель HP LaserJet нормально печатает из Word или Excel, но жутко глючит при печати средствами .Net framework. Документы не сложные, а на принтере другой модели уровнем ниже всё может быть хорошо. Причём речь не о старье, а о принтерах продающихся сейчас. Скажем, P1005 имеет свои глюки, но печатает нормально, P1100 совсем никуда не годится, P2035 глючит, но можно заставить работать, P2055dn работает без проблем.&lt;br /&gt;&lt;br /&gt;Лечится, как правило, установкой PCL драйвера (лучше всего Universal) и выключением разного рода оптимизаций: отсылкой TrueType картинками и т.д.&lt;br /&gt;&lt;br /&gt;Когда наконец HP начнёт выпускать нормальные драйвера?!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-8934128560179478261?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/8934128560179478261/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=8934128560179478261' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/8934128560179478261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/8934128560179478261'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/11/hp-laserjet.html' title='HP LaserJet'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-5660861890482205030</id><published>2010-11-21T11:17:00.001+04:00</published><updated>2010-11-21T11:22:19.682+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><title type='text'>Двоичный diff/merge</title><content type='html'>xdelta - рулит!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-5660861890482205030?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/5660861890482205030/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=5660861890482205030' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/5660861890482205030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/5660861890482205030'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/11/diffmerge.html' title='Двоичный diff/merge'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-2026136688244371654</id><published>2010-11-15T05:39:00.005+04:00</published><updated>2010-11-21T11:37:19.812+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><title type='text'>Виртуальные образы с предустановленным ПО</title><content type='html'>Виртуальные образы с предустановленным ПО можно найти по адресу &lt;br /&gt;&lt;a href="http://bitnami.org/" target="_blank"&gt;http://bitnami.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-2026136688244371654?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/2026136688244371654/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=2026136688244371654' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2026136688244371654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2026136688244371654'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/11/blog-post_15.html' title='Виртуальные образы с предустановленным ПО'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-9066576993952014012</id><published>2010-11-12T08:46:00.001+04:00</published><updated>2010-11-12T08:47:56.316+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><title type='text'>Splash screen</title><content type='html'>Скажите им нет, если есть хоть малейший шанс, что ваше приложение может использоваться через терминальную сессию.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-9066576993952014012?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/9066576993952014012/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=9066576993952014012' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/9066576993952014012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/9066576993952014012'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/11/splash-screen.html' title='Splash screen'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-6128336902751656064</id><published>2010-11-12T06:00:00.008+04:00</published><updated>2010-11-21T11:36:44.414+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><title type='text'>Журналирование</title><content type='html'>Ещё раз убедился в полезности подробного машиносчитываемого журналирования.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Ситуация&lt;/h4&gt;Система для проведения лоторей. Непроданные билеты вводятся диапазонами - от и до путём сканирования штрихкодов.&lt;br /&gt;&lt;br /&gt;За час до игры (прямой эфир между прочим) выясняется, что активных билетов в базе данных раза в два меньше чем ожидалось.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Решение&lt;/h4&gt;Сразу возникло подозрение что были выкинуты лишние билеты. Беглый просмотр кода не выявил явных багов.&lt;br /&gt;&lt;br /&gt;Были скачаны журналы операций за последние два месяца (текстовый файл для каждого дня, генерируется log4net). Журнал был намеренно создан машиносчитываемым. Запись об отмене билета выглядит примерно как&lt;pre&gt;[2010-11-11 12:51:54,126] [INFO] [Ticket_RevokeBulk] [12570] [12578]&lt;/pre&gt; За пять минут была написана программа прогоняющая логи через регулярное выражение и проверяющая длину диапазона. Один из них оказался размером в несколько десятков тысяч билетов - явная ошибка ввода оператором. Были отсканированы билеты из разных пачек.&lt;br /&gt;&lt;br /&gt;Ещё через пару минут программа была переписана для генерации кода SQL скрипта повторяющего операции из журнала - множество инструкций INSERT. Инструкция соответствующая ошибочному вводу была удалена вручную.&lt;br /&gt;&lt;br /&gt;Все билеты были помечены как проданные (восстановлены), после был выполнен SQL скрипт сгенерированный по логам. На это ушло ещё минут пятнадцать.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Результат&lt;/h4&gt;Бетмен опять спас Готем.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Мораль&lt;/h4&gt;Журналируйте.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-6128336902751656064?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/6128336902751656064/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=6128336902751656064' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6128336902751656064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6128336902751656064'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/11/blog-post.html' title='Журналирование'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-3052789904819592007</id><published>2010-10-17T13:19:00.006+04:00</published><updated>2010-11-21T11:36:31.514+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Линукс сервер</title><content type='html'>В целом я справился. Администрировать по ssh было непривычно, но не так противно, как я думал.&lt;br /&gt;&lt;br /&gt;Чтобы поднять необходимую конфигурацию: Trac и Mercurial под Apache, мне пришлось&lt;ul&gt;&lt;li&gt;Установить программное обеспечение&lt;pre&gt;apt-get install apache2&lt;br /&gt;apt-get install libapache2-mod-auth-plain&lt;br /&gt;apt-get install libapache2-mod-macro&lt;br /&gt;apt-get install libapache2-mod-wsgi&lt;br /&gt;apt-get install binutils&lt;br /&gt;apt-get install python-setuptools&lt;br /&gt;apt-get install mercurial&lt;br /&gt;easy_install genshi&lt;br /&gt;easy_install trac&lt;br /&gt;easy_install TracMercurial&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Подключить второй диск, на котором будут данные&lt;pre&gt;mkdir /data&lt;br /&gt;mount /dev/xvdd /data&lt;br /&gt;nano /etc/fstab&lt;br /&gt;&lt;/pre&gt;Диск был уже отформатирован, так что с fdisk/mkfs возиться не пришлось.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Включить необходимые модули в Apache. Делается это очень круто, созданием симлинков в нужной папке.&lt;pre&gt;ln -s /etc/apache2/mods-available/ssl.load     /etc/apache2/mods-enabled/ssl.load&lt;br /&gt;ln -s /etc/apache2/mods-available/ssl.conf     /etc/apache2/mods-enabled/ssl.conf&lt;br /&gt;ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load&lt;br /&gt;ln -s /etc/apache2/mods-available/wsgi.load    /etc/apache2/mods-enabled/wsgi.load&lt;br /&gt;ln -s /etc/apache2/mods-available/wsgi.conf    /etc/apache2/mods-enabled/wsgi.conf&lt;br /&gt;ln -s /etc/apache2/mods-available/macro.load   /etc/apache2/mods-enabled/macro.load&lt;br /&gt;&lt;/pre&gt;Работает такой метод за счёт включения файлов по маске&lt;pre&gt;Include mods-enabled/*.load&lt;br /&gt;Include mods-enabled/*.conf&lt;/pre&gt;Особенностью является так же то, что основной файл кончигурации - apache2.conf, а не httpd.conf как я привык.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Настроить Apache, это я уже умел.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;У python 2.7.0 нет стандартного модуля WSGI, так что подключил 2.6.6. Компилировать было лень.&lt;br /&gt;&lt;br /&gt;Ещё настроил бекапирование данных.&lt;pre&gt;apt-get install libio-socket-ssl-perl&lt;br /&gt;apt-get install sendemail&lt;/pre&gt;&lt;br /&gt;и bash скрипт&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;date2stamp () {&lt;br /&gt; date --utc +%Y-%m-%d-%H-%M-%S&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;timestamp=$(date2stamp)&lt;br /&gt;&lt;br /&gt;for path in /mnt/data/backup/*.tar.gz&lt;br /&gt;do&lt;br /&gt; rm $path&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cd /mnt/data/&lt;br /&gt;&lt;br /&gt;rm -rf /mnt/data/backup/mercurial&lt;br /&gt;mkdir /mnt/data/backup/mercurial&lt;br /&gt;&lt;br /&gt;for path in /mnt/data/mercurial/*&lt;br /&gt;do&lt;br /&gt; name=$(basename $path)&lt;br /&gt;&lt;br /&gt; hg clone $path /mnt/data/backup/mercurial/$name&lt;br /&gt;&lt;br /&gt; tar --create --file=/mnt/data/backup/mercurial-$name-$timestamp.tar.gz --gzip backup/mercurial/&lt;br /&gt;&lt;br /&gt; rm -rf /mnt/data/backup/mercurial/$name&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;rm -rf /mnt/data/backup/trac&lt;br /&gt;mkdir /mnt/data/backup/trac&lt;br /&gt;&lt;br /&gt;for path in /mnt/data/trac/*&lt;br /&gt;do&lt;br /&gt; name=$(basename $path)&lt;br /&gt;&lt;br /&gt; trac-admin $path hotcopy /mnt/data/backup/trac/$name&lt;br /&gt;&lt;br /&gt; tar --create --file=/mnt/data/backup/trac-$name-$timestamp.tar.gz --gzip backup/trac/&lt;br /&gt;&lt;br /&gt; rm -rf /mnt/data/backup/trac/$name&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;for path in /mnt/data/backup/*.tar.gz&lt;br /&gt;do&lt;br /&gt; name=$(basename $path)&lt;br /&gt;&lt;br /&gt; sendemail -f backup-collector@triflesoft.org -u "$name" -m "Backup." -a $path -t backup-collector@triflesoft.org -s smtp.triflesoft.org:25 -o tls=yes -xu backup-collector@triflesoft.org -xp BaCkuPpa$$Word&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-3052789904819592007?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/3052789904819592007/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=3052789904819592007' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3052789904819592007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3052789904819592007'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/10/blog-post.html' title='Линукс сервер'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-352985984974315978</id><published>2010-09-28T15:29:00.003+04:00</published><updated>2010-11-21T11:34:02.879+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows forms'/><category scheme='http://www.blogger.com/atom/ns#' term='libraries'/><title type='text'>DivElements SandDock (WinForms), продолжение</title><content type='html'>&lt;p&gt;В общем попросил refund. Тим Доусон был очень френдли и видимо вообще классный чувак, но сама библиотека содержала много скрытых ограничений. За довольно грамотным API скрывалась архитектура со странностями.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-352985984974315978?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/352985984974315978/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=352985984974315978' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/352985984974315978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/352985984974315978'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/09/divelements-sanddock-winforms_28.html' title='DivElements SandDock (WinForms), продолжение'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-4787708881185663221</id><published>2010-09-25T00:16:00.003+04:00</published><updated>2010-11-21T11:33:58.118+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows forms'/><category scheme='http://www.blogger.com/atom/ns#' term='libraries'/><title type='text'>DivElements SandDock (WinForms)</title><content type='html'>&lt;p&gt;Купил сабж. DivElements судя по всего небольшая компания (ИМХО там кроме Тима Доусона вообще вряд ли кто-то работает), так что подедржкой занимается сам разработчик. Цена не кусается, качество вроде приличное, функционал меня по большей части устраивает. Библиотека не навязывает ничего лишнего и занимается только вёрсткой окон. Планирую купить и SandGrid.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-4787708881185663221?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/4787708881185663221/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=4787708881185663221' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/4787708881185663221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/4787708881185663221'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/09/divelements-sanddock-winforms.html' title='DivElements SandDock (WinForms)'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-3913025126214484109</id><published>2010-08-06T05:54:00.005+04:00</published><updated>2010-11-21T11:38:40.574+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2010'/><title type='text'>Мелкие заметки о рабочем окружении</title><content type='html'>Visual Studio 2010 - В принципе вполне доволен.&lt;br /&gt;&lt;br /&gt;Visual Studio 2008 - Ради старых проектов и .Net CF. Неужели .Net CF 4 не будет?!&lt;br /&gt;&lt;br /&gt;Mercurial - хорошо. Локальные коммиты рулят. Однажды не пережил множество изменений регистра имён файлов, но других проблем не было. Subversion гораздо медленнее Mercurial и создавал больше проблем. С другой стороны TortoiseSVN существенно лучше TortoiseHG, но жить можно и так.&lt;br /&gt;&lt;br /&gt;log4net - не развивается, пробую NLog. Пока нравится.&lt;br /&gt;&lt;br /&gt;TracExplorer пришлось ставить в ручном режиме, так как официально VS2010 не поддерживается. Работает хорошо. Trac вообще вещь.&lt;br /&gt;&lt;br /&gt;Tangible T4 Editor пришлось ставить в ручном режиме, так как инсталлятор не работает на Т4. Редактор ужасный, но лучше чем ничего. Clarius выпускал ИМХО более качественный продукт, но проект умер.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-3913025126214484109?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/3913025126214484109/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=3913025126214484109' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3913025126214484109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3913025126214484109'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/08/blog-post_06.html' title='Мелкие заметки о рабочем окружении'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-5086021767988548620</id><published>2010-08-06T04:37:00.010+04:00</published><updated>2011-02-20T16:31:08.535+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='policy'/><title type='text'>Нелатинские буквы в исходном коде</title><content type='html'>Нелатинские буквы в исходном коде: идентификаторах, комментария и т.д.&lt;br /&gt;&lt;br /&gt;Компиляторы C#, Си++, других языков, многие SQL серверы поддерживают Юникод не только в строковых литералах, но и на уровне лексического анализатора. Я всё чаще слышу утверждения, что этой функциональностью надо пользоваться. Хочу высказаться и привести свои аргументы, почему так поступать не следует.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Не всё что поддерживается является полезным или приемлемым. Оператор goto поддерживается, но этот факт не является аргументом в пользу использования goto. Так же и идентификаторы содержащие национальные символы не следует использовать только лишь потому что так можно делать.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Английский язык не ограничивает выразительные возможности. Терминология практически всегда однозначна и всегда общепринята.&lt;br /&gt;&lt;br /&gt;Более того, словообразование английского языка хорошо соответствует потребностям технических писателей. Например, существительные естественным образом выступают в роди прилагательных, а для любого действия можно задать активного и пассивного участника суффиксами er (or) и ee. Другие языки могут обладать менее обобщённой или менее однозначной системой словообразования.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Подавляющее большинство языков программирования не поддерживают ключевых слов на языке отличном от английского. Использование нелатинских букв приведёт к постоянным переключениям раскладки. Не всем кто будет поддерживать код это может быть удобно.&lt;br /&gt;&lt;br /&gt;Существуют языки поддерживающие неанглийские ключевые слова, например, скрипт 1С. Однако, код с ключевыми словами на непривычном языке или, того хуже, разных языках, читается существенно медленнее. А код как известно читается гораздо чаще, чем пишется.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;В продолжение предыдущего пункта, хочется так же упомянуть стандартную библиотеку. Класс унаследованный от стандартного в случае переопределения вынужденно будет содержать члены: методы или свойства, с английскими именами.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Обмен кодом с окружающими становится труднее. Например, код нельзя скопировать на популярнейший форум stackoverflow.com, где большинство участников не понимает языка кроме английского. Попытки переделать код в форме редактирования сообщения приведут, скорее всего, к синтаксическим ошибкам и ложно правильным ответам.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Зачастую, в неанглийском языке нет устоявшейся терминологии, либо она не имеет однозначного соответствия с английской. Например код&lt;pre&gt;Поток СоздатьПоток();&lt;/pre&gt;может быть воспринят и как&lt;pre&gt;Thread CreateThread()&lt;/pre&gt;и как&lt;pre&gt;Stream CreateStream();&lt;/pre&gt;Кроме того, отдельную проблему создадут общепринятые сокращения. Как локализовать название ReadXml? ПрочитатьXml? А может ПрочитатьАЯР потому что eXtensible Markup Language это рАсширяемый Язык Разметки?&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Грамматика неаглийских языков может быть существенно сложнее, что может вызвать проблемы при подборе имени. Например как правильнее: ПрочитатьАЯР или ПрочестьАЯР? Отдельная проблема это глаголы не имеющие будущего или прошедшего времени, существительные не имеющие единственного или множественного числа. В английском языке с его относительно простой грамматикой подобных проблем нет.&lt;br /&gt;&lt;br /&gt;Кроме того&lt;pre&gt;foreach (object in collection)&lt;/pre&gt;за исключением скобок читается как обычное предложение. А вот о &lt;pre&gt;длякаждого (объект в коллекция)&lt;/pre&gt; такого сказать нельзя.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Хотя конкретный компилятор может поддерживать нелатинские буквы и неанглийский язык, это не всегда можно сказать о среде разработки. Например, расширение Visual Studio GhostDoc автоматически генерирует документацию делая, вообще говоря вполне разумное, предположение, что имена методов это английский глагол за которым опционально следует английское существительное. Инструменты проверки качества, такие как FxCop и повышения производительности, такие как ReSharper и VisualAssist, содержат множество правил отвечающих за грамотность написания идентификаторов. Аналогичных инструментов для других языков может не быть.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Резюме: пальцы ломать за идентификаторы не на английском.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-5086021767988548620?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/5086021767988548620/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=5086021767988548620' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/5086021767988548620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/5086021767988548620'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/08/blog-post.html' title='Нелатинские буквы в исходном коде'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-3118329663041480178</id><published>2010-07-11T00:42:00.003+04:00</published><updated>2010-11-21T11:37:51.882+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Caucasus Online - хакеры?!</title><content type='html'>&lt;h1&gt;О чём речь&lt;/h1&gt;&lt;br /&gt;Провайдер - Caucasus Online.&lt;br /&gt;Семейство тарифов - geLink. Оптика, последняя миля Ethernet.&lt;br /&gt;&lt;br /&gt;Наблюдаю следующую картину у себя дома (раскрыть на весь экран):&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="49"&gt;&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;br /&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;br /&gt;&lt;br /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13232649&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;br /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=13232649&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" width="400" height="300"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/lj-embed&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Чем это грозит&lt;/h1&gt;&lt;br /&gt;Caucasus Online получает доступ к вашей приватной информации, без вашего согласия. Поисковые запросы теперь удобно отсортированы, отфильрованы и т.д. Конфиденциальность больше не гарантируется. Ищете в Интернете бизнес-партнёров, поставщиков и покупателей, информацию о фирмах и частных лицах? Это всё может быть передано вашим конкурентам, может быть использовано для целевой рекламы. Знать о чём вы думаете и что вам надо, ну разве не круто?&lt;br /&gt;&lt;br /&gt;Учитывая рассказы моих знакомых, лично пострадавших от Caucasus Online информация непременно утечёт. Справедливости ради надо заметить, что сама компания никогда не была поймана за руку и информацию всегда сливали нечистоплотные сотрудники. Однако, так ли важно кто слил информацию, если она слита?&lt;br /&gt;&lt;br /&gt;Более того, уже давно есть отдельная группа вирусов перехватывающих ваши поисковые запросы. Этот незаконный бизнес расцветает.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Зачем это?&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;Чтобы добавить лого? Ну не верю просто. В коротком телефонном разговоре мне официально подтвердили наличие данной функции и попросили перезвонить в понедельник, если я хочу знать больше. Заодно спрошу можно ли увеличить пенис и выучить английский.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Как это работает&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;Результат трансформации русского "йцу" сразу навёл на мысль о DNS.&lt;br /&gt;&lt;br /&gt;Когда в адресной строке набирается какой-либо текст, он первым делом воспринимается как адрес. То есть qwe воспринимается как имя компьютера. DHCP сервер раздаёт DNS suffix, так что "qwe", может быть трансформированно в "qwe.online.ge", но как бы то ни было первое что пытается сделать браузер это получить IP адрес для имени "qwe".&lt;br /&gt;&lt;br /&gt;Впрочем, как работает система в целом я пока не знаю. Вместо того чтобы вернуть нормальный ответ, DNS сервер видимо возвращает что-то другое. Что именно - не понял, врать не буду. Тем не менее, лечение подтвеждает версию о перехвате на уровне DNS.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Как это исправить&lt;/h1&gt;&lt;br /&gt;Вручную прописать себе другие DNS сервера. Ниже несколько вариантов.&lt;br /&gt;&lt;br /&gt;Open DNS:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;208.67.222.222&lt;/li&gt;&lt;br /&gt;&lt;li&gt;208.67.220.2204&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Google DNS:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;8.8.8.8&lt;/li&gt;&lt;br /&gt;&lt;li&gt;8.8.4.4&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;DNS Advantage:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;156.154.70.1&lt;/li&gt;&lt;br /&gt;&lt;li&gt;156.154.71.1&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-3118329663041480178?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/3118329663041480178/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=3118329663041480178' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3118329663041480178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3118329663041480178'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/07/caucasus-online.html' title='Caucasus Online - хакеры?!'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-935904035304714492</id><published>2010-05-02T08:06:00.005+04:00</published><updated>2010-11-21T11:38:02.515+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='mcp club'/><title type='text'>Common Multithreading Problems, русская версия</title><content type='html'>&lt;object width="400" height="300"&gt;&lt;br /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;br /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;br /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11398279&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;br /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=11398279&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;br /&gt;&lt;/embed&gt;&lt;br /&gt;&lt;/object&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/11398279"&gt;Common Multithreading Problems – Роман Акопов&lt;/a&gt; by &lt;a href="http://vimeo.com/adontz"&gt;Roman Akopov&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-935904035304714492?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/935904035304714492/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=935904035304714492' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/935904035304714492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/935904035304714492'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/05/common-multithreading-problems.html' title='Common Multithreading Problems, русская версия'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-187442254167645346</id><published>2010-04-29T02:32:00.008+04:00</published><updated>2010-11-21T11:38:15.594+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Хорошие цвета для графиков и т.п.</title><content type='html'>&lt;table&gt;&lt;tr&gt;&lt;td&gt;Цвет&lt;/td&gt;&lt;td&gt;Светлый тон&lt;/td&gt;&lt;td&gt;Тёмный тон&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Жёлтый &lt;/td&gt;&lt;td style="background-color: #FAE16B"&gt;( #FAE16B ) ( 0xFA, 0xE1, 0x6B )&lt;/td&gt;&lt;td style="background-color: #F8D753"&gt;( #F8D753 ) ( 0xF8, 0xD7, 0x53 )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Зелёный&lt;/td&gt;&lt;td style="background-color: #82B16A"&gt;( #82B16A ) ( 0x82, 0xB1, 0x6A )&lt;/td&gt;&lt;td style="background-color: #5C9746"&gt;( #5C9746 ) ( 0x5C, 0x97, 0x46 )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Синий  &lt;/td&gt;&lt;td style="background-color: #779DBF"&gt;( #779DBF ) ( 0x77, 0x9D, 0xBF )&lt;/td&gt;&lt;td style="background-color: #3E75A7"&gt;( #3E75A7 ) ( 0x3E, 0x75, 0xA7 )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Красный&lt;/td&gt;&lt;td style="background-color: #D6707B"&gt;( #D6707B ) ( 0xD6, 0x70, 0x7B )&lt;/td&gt;&lt;td style="background-color: #C4384F"&gt;( #C4384F ) ( 0xC4, 0x38, 0x4F )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Коричневый&lt;/td&gt;&lt;td style="background-color: #907A52"&gt;( #907A52 ) ( 0x90, 0x7A, 0x52 )&lt;/td&gt;&lt;td style="background-color: #7A653E"&gt;( #7A653E ) ( 0x7A, 0x65, 0x3E )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Оранжевый&lt;/td&gt;&lt;td style="background-color: #EB8953"&gt;( #EB8953 ) ( 0xEB, 0x89, 0x53 )&lt;/td&gt;&lt;td style="background-color: #E1662A"&gt;( #E1662A ) ( 0xE1, 0x66, 0x2A )&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-187442254167645346?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/187442254167645346/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=187442254167645346' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/187442254167645346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/187442254167645346'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/04/blog-post.html' title='Хорошие цвета для графиков и т.п.'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-8518706554012726729</id><published>2010-04-26T13:10:00.003+04:00</published><updated>2010-04-26T13:15:18.366+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2010'/><title type='text'>Visual Studio 2010 Help System</title><content type='html'>Полный отстой. Медленная, менее функциональная, с худшим дизайном.&lt;br /&gt;Работа требует запуска локального веб-сервера, нет индекса, нет возможности смотреть содержимое внутри студии, нет дерева страниц.&lt;br /&gt;&lt;br /&gt;Одна радость - H3Viewer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-8518706554012726729?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/8518706554012726729/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=8518706554012726729' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/8518706554012726729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/8518706554012726729'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/04/visual-studio-2010-help-system.html' title='Visual Studio 2010 Help System'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-6889926604333197812</id><published>2010-04-16T05:39:00.004+04:00</published><updated>2010-04-26T13:10:24.974+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2010'/><title type='text'>Visual Studio 2010</title><content type='html'>Появился примитивный профайлер, пока не пробовал.&lt;br /&gt;&lt;br /&gt;Подсветка синтаксиса стала гораздо лучше.&lt;br /&gt;&lt;br /&gt;Шрифты в редакторе полный отстой. Пришлось менять цветовую схему, так как многострочные элементы с альтернативным цветом фона отрисовываются с полосками между строками. Правда, позже я нашёл&lt;br /&gt;http://visualstudiogallery.msdn.microsoft.com/en-us/f3dc031f-3d33-4701-81fb-ac5e54cb0a81&lt;br /&gt;Но уже поздно :-)&lt;br /&gt;&lt;br /&gt;Появляется сообщение "The 'PerformancePackage' package did not load correctly", если запускать без администраторских прав.&lt;br /&gt;&lt;br /&gt;Кнопка закрытия активной вкладки исчезла. Уродство.&lt;br /&gt;&lt;br /&gt;В целом не плохо, но, думаю, скоро придётся выпускать SP1 :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-6889926604333197812?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/6889926604333197812/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=6889926604333197812' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6889926604333197812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6889926604333197812'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/04/visual-studio-2010.html' title='Visual Studio 2010'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-2203932605752585492</id><published>2010-03-21T01:45:00.003+04:00</published><updated>2010-11-21T11:39:04.746+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><title type='text'>Хорошая замена Application.StartupPath</title><content type='html'>AppDomain.CurrentDomain.BaseDirectory&lt;br /&gt;&lt;br /&gt;Не равноценная замена, конечно, но в подавляющем большинстве случаев значения совпадают.&lt;br /&gt;&lt;br /&gt;Положительный момент - отсутствие зависимости от Windows.Forms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-2203932605752585492?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/2203932605752585492/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=2203932605752585492' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2203932605752585492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2203932605752585492'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/03/applicationstartuppath.html' title='Хорошая замена Application.StartupPath'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-2811460327251424265</id><published>2010-02-12T00:35:00.008+04:00</published><updated>2011-03-31T04:15:48.078+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='x64'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><title type='text'>3 по 32 против 2 по 64</title><content type='html'>Необходимо было работать с массивом 96битных элементов. Конкретно речь шла о логических операциях. Вопрос - как лучше данные разбить: 3 блока по 32 бита или два по 64?&lt;br /&gt;&lt;br /&gt;64-битный вариант казался менее привлекательным. Во-первых, он на четверть больше памяти занимает, что на кешировании положительно не скажется. Во-вторых целевой процессор был 32битным. Однако, случилось чудо: 64битный вариант, использующий лишнюю память и операнды больше регистров процессора, в итоге на 85%, быстрее.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-2811460327251424265?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/2811460327251424265/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=2811460327251424265' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2811460327251424265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2811460327251424265'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/02/3-32-2-64.html' title='3 по 32 против 2 по 64'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-2336258334543620758</id><published>2010-01-18T08:20:00.007+04:00</published><updated>2010-11-21T11:39:26.825+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><title type='text'>IPC: сокеты против именованных каналов</title><content type='html'>Абсолютные числа большого смысла не имеют, но как сравнение информация представляет некоторую ценность.&lt;br /&gt;&lt;br /&gt;Windows 7 x64 с обновлениями&lt;br /&gt;AMD Athlon X2 4600+ (2.41ГГц)&lt;br /&gt;DDR2 2Гб&lt;br /&gt;.Net Framework 3.5, 64-битные приложения.&lt;br /&gt;Два процесса без дополнительных привилегий.&lt;br /&gt;Антивирус Касперского выключен. С ним результаты сокетов существенно хуже.&lt;br /&gt;&lt;br /&gt;Сокеты и именованные каналы в асинхронном режиме.&lt;br /&gt;Размеры буферов подбирались оптимальные, эксперементально для каждого вида IPC.&lt;br /&gt;&lt;br /&gt;Сокеты:&lt;br /&gt;Скорость односторонней передачи - 160 мегабайт в секунду (105 с антивирусом)&lt;br /&gt;Загрузка процессора - 90%, из них примерно 2/3 в ядре&lt;br /&gt;Оперативная память - 4-5 мегабайт на процесс, со временем не росла&lt;br /&gt;&lt;br /&gt;Именованные каналы:&lt;br /&gt;Скорость односторонней передачи - 755 мегабайт в секунду (антивирус не влияет)&lt;br /&gt;Загрузка процессора - 80%, из них примерно 2/3 в ядре&lt;br /&gt;Оперативная память - 4-5 мегабайт на процесс, со временем не росла&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-2336258334543620758?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/2336258334543620758/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=2336258334543620758' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2336258334543620758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2336258334543620758'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/01/ipc.html' title='IPC: сокеты против именованных каналов'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-7823820728929219037</id><published>2010-01-14T12:17:00.004+04:00</published><updated>2010-11-21T11:35:07.473+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trac'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Trac 0.11.6, Apache HTTPd 2.2.14 и Subversion 1.6.6</title><content type='html'>Apache 2.2.14 и Subversion 1.6.6 используют разные версии libarp-1.dll: 1.3.9 и 1.3.3 соответственно. В результате попытка обратиться к функциям Subversion в контексте процесса Apache в некоторых случаях приводит к ошибке загрузки DLL. В частности, Trac выдаёт сообщение "DLL load failed: The specified procedure could not be found."&lt;br /&gt;&lt;br /&gt;Решается проблема достаточно просто - необходимо переписать более новую DLL из поставки Apache более старой DLL из поставки Subversion. Apache после этого работает нормально (ну по меньшей мере проблем не было).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-7823820728929219037?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/7823820728929219037/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=7823820728929219037' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7823820728929219037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7823820728929219037'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2010/01/trac-0116-apache-2214-subversion-166.html' title='Trac 0.11.6, Apache HTTPd 2.2.14 и Subversion 1.6.6'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-8782381637145414225</id><published>2009-12-30T22:07:00.004+04:00</published><updated>2010-11-21T11:34:47.307+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='windows seven'/><title type='text'>Microsoft File Transfer Manager не добавляет закачку</title><content type='html'>Абсолютно бесполезное приложение. Кроме того, под 64битной Windows 7 мною был обнаружен неприятный баг: если Internet Explorer запущен без администраторских прав, то FTM запускается, но закачка не добавляется.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-8782381637145414225?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/8782381637145414225/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=8782381637145414225' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/8782381637145414225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/8782381637145414225'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/12/microsoft-file-transfer-manager.html' title='Microsoft File Transfer Manager не добавляет закачку'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-1174603687000339412</id><published>2009-12-09T21:31:00.007+04:00</published><updated>2010-11-21T11:39:51.994+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Apache Tomcat на 64-битном Windows Server</title><content type='html'>На 64-битном Windows Server 2008 с 64-битной JRE Apache Tomcat не запускался как сервис.&lt;br /&gt;&lt;br /&gt;Решение совершенно параноидальное - скопировать C:\Program Files\Java\jre6\bin\server в C:\Program Files\Java\jre6\bin\client.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-1174603687000339412?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/1174603687000339412/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=1174603687000339412' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/1174603687000339412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/1174603687000339412'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/12/tomcat-64-windows-server.html' title='Apache Tomcat на 64-битном Windows Server'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-6833850004675655450</id><published>2009-11-24T16:09:00.010+04:00</published><updated>2011-08-09T12:20:59.236+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 2008 server'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='revenge'/><title type='text'>Windows 2008 Server R2, Hyper-V и VLANы, продолжение</title><content type='html'>Как я уже &lt;a href="http://adontz.blogspot.com/2009/07/windows-2008-server-r2-hyper-v-vlan.html"&gt;писал ранее&lt;/a&gt; при миграции с одного сервера на другой, виртуальная машина теряла номер VLAN.&lt;br /&gt;&lt;br /&gt;Сегодня тестировал 2008 R2, руки дошли. Решение существует и представлено на картинке.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://s1196.photobucket.com/albums/aa415/adontz/BlogSpot/?action=view&amp;amp;current=HyperV-VLAN.jpg" target="_blank"&gt;&lt;img src="http://i1196.photobucket.com/albums/aa415/adontz/BlogSpot/HyperV-VLAN.jpg" border="0" alt="Photobucket"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Насколько я понимаю, вызов указанного пункта меню обновляет конфигурацию виртуальной машины в хранилище кластера до текущей.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-6833850004675655450?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/6833850004675655450/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=6833850004675655450' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6833850004675655450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6833850004675655450'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/11/windows-2008-server-r2-hyper-v-vlan.html' title='Windows 2008 Server R2, Hyper-V и VLANы, продолжение'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i1196.photobucket.com/albums/aa415/adontz/BlogSpot/th_HyperV-VLAN.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-4374215349486666991</id><published>2009-11-23T17:39:00.003+04:00</published><updated>2009-11-23T18:20:57.576+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='console'/><title type='text'>Windows Console</title><content type='html'>Сегодня обнаружил на сайте Хабрахабр весьма &lt;a href="http://ebuster.habrahabr.ru/blog/76059/"&gt;полезную статью&lt;/a&gt; о клавиатурных сокращениях для самой обыкновенной консоли Window (не PowerShell и т.д.)&lt;br /&gt;&lt;br /&gt;Квинтенсенция:&lt;br /&gt;Esc - Очищает поле ввода&lt;br /&gt;F1 - Печать команды из истории по одному символу&lt;br /&gt;F2 - Копирование вплоть до указанного символа&lt;br /&gt;F3 - Печать последней команды из истории &lt;br /&gt;F4 - Стирание вплоть до указанного символа&lt;br /&gt;F5 - Печать последней команды из истории &lt;br /&gt;F6 - Печать ^Z&lt;br /&gt;F7 - Просмотр истории команд в виде списка&lt;br /&gt;F8 - Циклическая смена команд, начинающихся с введённых символов&lt;br /&gt;F9 - Печать команды из истории по номеру&lt;br /&gt;Alt + F7 - Очистка истории команд&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-4374215349486666991?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/4374215349486666991/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=4374215349486666991' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/4374215349486666991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/4374215349486666991'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/11/windows-console.html' title='Windows Console'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-7468570750697111081</id><published>2009-11-16T04:02:00.007+04:00</published><updated>2010-11-21T11:35:39.907+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 2008 server'/><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='console'/><title type='text'>Загадочный пользователь "IIS APPPOOL\DefaultAppPool"</title><content type='html'>Именно в контексте пользователя "IIS APPPOOL\DefaultAppPool" исполняется пул приложений по умолчанию в IIS7. Выглядит достаточно странно, как будто есть новый домен "IIS APPPOOL" (ну и название, клавиши залипали что ли) и в нём создан пользователь DefaultAppPool.&lt;br /&gt;&lt;br /&gt;Идея, в принципе, хорошая, - разделить недоверенные приложения IIS и все остальные сетевые приложения, исполняющиеся в контексте NETWORK SERVICE. А вот реализация, как это нередко бывает, так себе. В частности через графический интерфейс для пользователя "IIS APPPOOL\DefaultAppPool" нельзя установить права доступа на файлы. Ответ старый - командная строка. Простая команда&lt;br /&gt;&lt;pre class="brush:plain;gutter:false"&gt;&lt;br /&gt;icacls D:\path\to\folder /grant "IIS APPPOOL\DefaultAppPool":(OI)(CI)(RX)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Создаст некоторые начальные права. А вот редактировать их уже можно через графический интерфейс.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-7468570750697111081?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/7468570750697111081/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=7468570750697111081' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7468570750697111081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7468570750697111081'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/11/iis-apppooldefaultapppool.html' title='Загадочный пользователь &quot;IIS APPPOOL\DefaultAppPool&quot;'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-6561491823729256536</id><published>2009-11-16T04:00:00.004+04:00</published><updated>2009-11-24T23:31:28.353+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>Пользователь ASP.Net</title><content type='html'>чтобы узнать под каким Windows пользователем работает ASP.Net достаточно создать ASPX файл с содержимым&lt;br /&gt;&lt;pre class="brush:plain;gutter:false"&gt;&lt;br /&gt;&lt;%=System.Security.Principal.WindowsIdentity.GetCurrent().Name%&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-6561491823729256536?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/6561491823729256536/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=6561491823729256536' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6561491823729256536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6561491823729256536'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/11/aspnet.html' title='Пользователь ASP.Net'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-6512675461177252864</id><published>2009-11-12T21:52:00.012+04:00</published><updated>2010-11-21T11:40:30.465+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='console'/><title type='text'>Создание самоподписанного сертификата SSL</title><content type='html'>Нужно было создать для веб-сервера Apache самоподписанный сертификат SSL. Задача не такая уж и сложная, если знать что делать. В моём распоряжении было приложение OpenSSL 0.9.8k поставляющееся с Apache.&lt;br /&gt;&lt;br /&gt;Необходимо выполнить из командной строки, находясь в каталоге bin&lt;br /&gt;&lt;pre class="brush:plain;gutter:false"&gt;&lt;br /&gt;openssl genrsa -des3 -out WebSiteName.key 1024&lt;br /&gt;openssl req -config ..\conf\openssl.cnf -new -key WebSiteName.key -out WebSiteName.csr&lt;br /&gt;openssl rsa -in WebSiteName.key -out WebSiteName-nopassword.key&lt;br /&gt;openssl x509 -req -days 365 -in WebSiteName.csr -signkey WebSiteName-NoPassword.key -out WebSiteName.crt&lt;br /&gt;&lt;/pre&gt;и добавить в httpd.conf&lt;pre class="brush:plain;gutter:false"&gt;&lt;br /&gt;SSLEngine on&lt;br /&gt;SSLCertificateFile conf/WebSiteName.crt&lt;br /&gt;SSLCertificateKeyFile conf/WebSiteName-NoPassword.key&lt;br /&gt;SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-6512675461177252864?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/6512675461177252864/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=6512675461177252864' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6512675461177252864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6512675461177252864'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/11/ssl.html' title='Создание самоподписанного сертификата SSL'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-238224412161396243</id><published>2009-11-11T22:59:00.004+04:00</published><updated>2009-11-23T18:21:45.120+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 2008 server'/><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='windows seven'/><category scheme='http://www.blogger.com/atom/ns#' term='console'/><title type='text'>Windows PE Command Line</title><content type='html'>Во время инсталляции последних версий Windows можно нажать Shift+F10 для доступа к командной строке. Это позволяет, в частности, удобно разбить диск на разделы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-238224412161396243?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/238224412161396243/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=238224412161396243' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/238224412161396243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/238224412161396243'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/11/windows-pe-command-line.html' title='Windows PE Command Line'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-5334096649441063116</id><published>2009-11-01T16:17:00.007+04:00</published><updated>2010-11-21T11:40:40.827+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><title type='text'>Kerio Mail Server Automation</title><content type='html'>В открытом виде ссылок не нашёл, пришлось обращаться в службу поддержки. Кстати, служба поддержки Керио, как всегда, порадовала. Программное изменение конфигурации производится путём передачи кофигурационного файла с SQL-подобным синтаксисом специальной утилите.&lt;br /&gt;&lt;br /&gt;Ссылки на архивы с утилитой и документацией: &lt;a href="http://download.kerio.com/dwn/kconfig-win" target="_blank"&gt;Windows&lt;/a&gt; &lt;a href="http://download.kerio.com/dwn/kconfig-linux" target="_blank"&gt;Linux&lt;/a&gt; &lt;a href="http://download.kerio.com/dwn/kconfig-mac" target="_blank"&gt;Mac&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-5334096649441063116?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/5334096649441063116/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=5334096649441063116' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/5334096649441063116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/5334096649441063116'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/11/kerio-mail-server-automation.html' title='Kerio Mail Server Automation'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-6886836127593856326</id><published>2009-10-31T12:47:00.004+04:00</published><updated>2010-11-21T11:40:55.390+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='windows seven'/><title type='text'>Ethernet адаптер nVidia под Windows 7</title><content type='html'>Ethernet адаптер nVidia под Windows 7 с настройками по умолчанию регулярно виснет. В Vista и XP такого не наблюдается. Лечится изменением настроек, заключающемся в выключении всех оптимизаций.&lt;pre&gt;Device sleep on disconnect:     Disabled&lt;br /&gt;Interrupt moderation:           Disabled&lt;br /&gt;IP Checksum Offload:            Disabled&lt;br /&gt;Large Send Offload V1 (IPv4):   Disabled&lt;br /&gt;Large Send Offload V2 (IPv6):   Disabled&lt;br /&gt;Large Send Offload V2 (IPv6):   Disabled&lt;br /&gt;Receive Side Scaling:           Disabled&lt;br /&gt;TCP Checksum Offload (IPv4):    Disabled&lt;br /&gt;TCP Checksum Offload (IPv6):    Disabled&lt;br /&gt;UDP Checksum Offload (IPv4):    Disabled&lt;br /&gt;UPP Checksum Offload (IPv6):    Disabled&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Уже четыре дня сеть не виснет.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-6886836127593856326?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/6886836127593856326/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=6886836127593856326' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6886836127593856326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6886836127593856326'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/10/ethernet-nvidia-windows-7.html' title='Ethernet адаптер nVidia под Windows 7'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-2783096438490021221</id><published>2009-10-09T10:11:00.006+04:00</published><updated>2011-08-09T12:18:40.378+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='x64'/><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>Visual Studio 2008 на платформе x64 и мобильная разработка</title><content type='html'>Инсталлятор Visual Studio 2008 на платформе x64 ведёт себя некорректно, прописывая пути к Windows Mobile SDK для платформы x86. В результате, ни один из Си++ проектов не компилируется и не собирается. Выглядит проблема вот так.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://s1196.photobucket.com/albums/aa415/adontz/BlogSpot/?action=view&amp;amp;current=VS-Options.png" target="_blank"&gt;&lt;img src="http://i1196.photobucket.com/albums/aa415/adontz/BlogSpot/VS-Options.png" border="0" alt="Photobucket"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Лечится заменой "Program Files" на "Program Files (x86)"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-2783096438490021221?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/2783096438490021221/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=2783096438490021221' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2783096438490021221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2783096438490021221'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/10/visual-studio-2008-x64.html' title='Visual Studio 2008 на платформе x64 и мобильная разработка'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i1196.photobucket.com/albums/aa415/adontz/BlogSpot/th_VS-Options.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-7842462006602843147</id><published>2009-09-27T10:30:00.002+04:00</published><updated>2009-11-11T23:03:09.409+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 2008 server'/><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><title type='text'>Windows Storage Serverr 2008 R2</title><content type='html'>Пароль по умолчанию "wSS2008!"&lt;br /&gt;&lt;br /&gt;Крайне странное решение.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-7842462006602843147?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/7842462006602843147/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=7842462006602843147' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7842462006602843147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7842462006602843147'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/09/windows-storage-serverr-2008-r2.html' title='Windows Storage Serverr 2008 R2'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-3909661822024131686</id><published>2009-09-15T19:27:00.011+04:00</published><updated>2010-11-21T11:41:34.698+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Constrained Execution Region</title><content type='html'>Товарищ &lt;a href="http://sse.habrahabr.ru"&gt;sse&lt;/a&gt; поднял на &lt;a href="http://habrahabr.ru"&gt;Хабре&lt;/a&gt; интересную тему - устойчивая работа при взаимодействии с неуправляемым кодом. В &lt;a href="http://habrahabr.ru/blogs/net/69650/"&gt;своих&lt;/a&gt; &lt;a href="http://habrahabr.ru/blogs/net/69545/"&gt;сообщениях&lt;/a&gt; sse рассмотрел случай утечки памяти. Решение проблемы стандартное, это не хак, а вполне документированная возможность. Для меня было интересным обобщение решения и вынос его в библиотечный код. Тем более, что оно так и просилось.&lt;br /&gt;&lt;br /&gt;В файле &lt;a href="http://code.google.com/p/nabu-library/source/browse/trunk/Source/Library/Nabu/Interop/NativeMemory.cs"&gt;NativeMemory.cs&lt;/a&gt; сосредоточне большая часть решения. Сам по себе он не скомпилируется, есть внешние зависимости на классы DisposableBase и MarshalCF. Однако, я, всё же, надеюсь что данный отрывок исходного кода будет полезен.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Update: Добавил вызовы GC.AddMemoryPressure и GC.RemoveMemoryPressure по совету sse.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-3909661822024131686?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/3909661822024131686/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=3909661822024131686' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3909661822024131686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3909661822024131686'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/09/constrained-execution-region.html' title='Constrained Execution Region'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-5680484994023506827</id><published>2009-08-28T16:00:00.013+04:00</published><updated>2010-11-21T11:44:38.037+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>GraphViz диаграмма БД</title><content type='html'>Надо было нарисовать диаграммы, вроде диаграмм БД. Документация, как всегда, скупа, а примеры не в тему. Часа за два я вполне разобрался что к чему и даже смог нарисовать что-то похожее на то, что я хочу. Вот, делюсь примером разметки. Рендерить командой &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;dot.exe -Tpng -oFile.png File.gv&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:plain"&gt;&lt;br /&gt;digraph g&lt;br /&gt;{&lt;br /&gt; graph&lt;br /&gt; [&lt;br /&gt;  dpi = "600"&lt;br /&gt;  margin = "0, 0"&lt;br /&gt;  rankdir = "LR"&lt;br /&gt; ];&lt;br /&gt;&lt;br /&gt; node&lt;br /&gt; [&lt;br /&gt;  fontname = "Consolas"&lt;br /&gt;  fontsize = "12"&lt;br /&gt;  shape = "box"&lt;br /&gt;  margin = "-0, 0"&lt;br /&gt;  penwidth = "0"&lt;br /&gt; ];&lt;br /&gt;&lt;br /&gt; edge&lt;br /&gt; [&lt;br /&gt;  arrowhead = "normal"&lt;br /&gt; ];&lt;br /&gt;&lt;br /&gt; "User"&lt;br /&gt; [&lt;br /&gt;  label =&lt;br /&gt;  &amp;lt;&lt;br /&gt;   &amp;lt;table border="0" cellpadding="4" cellspacing="0"&gt;&lt;br /&gt;    &amp;lt;tr&gt;&amp;lt;td border="1" align="left" bgcolor="#FFDFAF" &gt;User&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;    &amp;lt;tr&gt;&amp;lt;td border="1" align="left" bgcolor="#E8E8FF" port="ID"&gt;ID&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;    &amp;lt;tr&gt;&amp;lt;td border="1" align="left" bgcolor="#F8F8FF" port="Username"&gt;Username&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;    &amp;lt;tr&gt;&amp;lt;td border="1" align="left" bgcolor="#E8E8FF" port="Password"&gt;Password&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;    &amp;lt;tr&gt;&amp;lt;td border="1" align="left" bgcolor="#F8F8FF" port="Role"&gt;Role&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;   &amp;lt;/table&gt;&lt;br /&gt;  &gt;&lt;br /&gt; ];&lt;br /&gt;&lt;br /&gt; "UserGroup"&lt;br /&gt; [&lt;br /&gt;  label =&lt;br /&gt;  &amp;lt;&lt;br /&gt;   &amp;lt;table border="0" cellpadding="4" cellspacing="0"&gt;&lt;br /&gt;    &amp;lt;tr&gt;&amp;lt;td border="1" align="left" bgcolor="#FFDFAF"&gt;UserGroup&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;    &amp;lt;tr&gt;&amp;lt;td border="1" align="left" bgcolor="#E8E8FF" port="ID"&gt;ID&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;    &amp;lt;tr&gt;&amp;lt;td border="1" align="left" bgcolor="#F8F8FF" port="Name"&gt;Name&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;    &amp;lt;tr&gt;&amp;lt;td border="1" align="left" bgcolor="#E8E8FF" port="Users"&gt;Users&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;   &amp;lt;/table&gt;&lt;br /&gt;  &gt;&lt;br /&gt; ];&lt;br /&gt;&lt;br /&gt; "UserGroup":Users -&gt; "User":ID&lt;br /&gt; [&lt;br /&gt;  color = "#7F7F00"&lt;br /&gt;  penwidth="3"&lt;br /&gt;  style = "dotted"&lt;br /&gt; ];&lt;br /&gt; "UserGroup":Name -&gt; "User":Username&lt;br /&gt; [&lt;br /&gt;  color = "#00007F"&lt;br /&gt;  penwidth="3"&lt;br /&gt;  style = "solid"&lt;br /&gt; ];&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-5680484994023506827?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/5680484994023506827/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=5680484994023506827' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/5680484994023506827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/5680484994023506827'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/08/graphviz.html' title='GraphViz диаграмма БД'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-3181012176144270251</id><published>2009-08-26T13:09:00.004+04:00</published><updated>2010-11-21T11:41:52.863+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>Редакторы T4</title><content type='html'>И у Clarius и у Tangible форумы поддержки пользователей мёртвые. Не понимаю как так можно вести бизнес.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-3181012176144270251?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/3181012176144270251/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=3181012176144270251' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3181012176144270251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3181012176144270251'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/08/t4.html' title='Редакторы T4'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-2133074789801180080</id><published>2009-08-04T16:00:00.006+04:00</published><updated>2010-11-15T06:02:08.278+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>Форматирование файлов в Visual Studio</title><content type='html'>Захотелось красиво отформатировать всё файлы в Solution.&lt;br /&gt;Для одного файла я это делаю командами&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;FormatDocument. Вызывается "Ctrl+K, Ctrl+D"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;RemoveAndSort. Вызывается "ContextMenu\Usings\RemoveAndSort"&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Однако, хотелось вызвать эти команды для всех файлов в Solution. По этому поводу был написан макрос. Макрос, а то и вся студия, после обработки нескольких сотен файлов вылетает, поэтому имеется костыль, для продолжения с места вылета.&lt;br /&gt;&lt;pre class="brush:vb"&gt;&lt;br /&gt;Option Strict Off&lt;br /&gt;Option Explicit Off&lt;br /&gt;Imports System&lt;br /&gt;Imports EnvDTE&lt;br /&gt;Imports EnvDTE80&lt;br /&gt;Imports EnvDTE90&lt;br /&gt;Imports System.Diagnostics&lt;br /&gt;&lt;br /&gt;Public Module RecordingModule&lt;br /&gt;    ' Флаг. Равен True если скрипт уже добрался до места, с которого надо продолжить обработку.&lt;br /&gt;    Dim isEnabled As Boolean&lt;br /&gt;&lt;br /&gt;    Sub ReformatAllFiles()&lt;br /&gt;        DTE.ExecuteCommand("View.SolutionExplorer")&lt;br /&gt;        isEnabled = False&lt;br /&gt;&lt;br /&gt;        For Each vsProject As Project In DTE.Solution.Projects&lt;br /&gt;            EnumerateItems(vsProject)&lt;br /&gt;        Next&lt;br /&gt;    End Sub&lt;br /&gt;    Sub ProcessItem(ByVal vsProjectItem As ProjectItem)&lt;br /&gt;        If isEnabled Then&lt;br /&gt;            ' Только файлы C#&lt;br /&gt;            If vsProjectItem.Name.EndsWith(".cs", StringComparison.OrdinalIgnoreCase) Then&lt;br /&gt;                ' Кроме файлов дизайнера&lt;br /&gt;                If Not vsProjectItem.Name.EndsWith("designer.cs", StringComparison.OrdinalIgnoreCase) Then&lt;br /&gt;                    Try&lt;br /&gt;                        vsProjectItem.Open()&lt;br /&gt;                        vsProjectItem.Document.Activate()&lt;br /&gt;                        DTE.ExecuteCommand("Edit.RemoveAndSort")&lt;br /&gt;                        DTE.ExecuteCommand("Edit.FormatDocument")&lt;br /&gt;                        vsProjectItem.Document.Save()&lt;br /&gt;                    Catch ex As Exception&lt;br /&gt;&lt;br /&gt;                    End Try&lt;br /&gt;&lt;br /&gt;                    vsProjectItem.Document.Close()&lt;br /&gt;                End If&lt;br /&gt;            End If&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Sub EnumerateItems(ByVal vsProject As Project)&lt;br /&gt;        ' Solution Folder, содержит проекты&lt;br /&gt;        Dim isFolder As Boolean&lt;br /&gt;        ' Project, содержит файлы&lt;br /&gt;        Dim isProject As Boolean&lt;br /&gt;        ' ProjectItem, содержит файлы. Например, форма или компонент.&lt;br /&gt;        Dim isMultiItem As Boolean&lt;br /&gt;&lt;br /&gt;        Try&lt;br /&gt;            For Each vsProjectItem As ProjectItem In vsProject.ProjectItems&lt;br /&gt;                isFolder = False&lt;br /&gt;                isProject = False&lt;br /&gt;                isMultiItem = False&lt;br /&gt;&lt;br /&gt;                ' Место откуда продолжить&lt;br /&gt;                If String.Compare(vsProjectItem.Name, "ProjectName", StringComparison.OrdinalIgnoreCase) = 0 Then&lt;br /&gt;                    isEnabled = True&lt;br /&gt;                End If&lt;br /&gt;&lt;br /&gt;                Try&lt;br /&gt;                    ' Solution Folder&lt;br /&gt;                    If vsProjectItem.SubProject.Kind = "{66A26720-8FB5-11D2-AA7E-00C04F688DDE}" Then&lt;br /&gt;                        isFolder = True&lt;br /&gt;                    ' C# Project&lt;br /&gt;                    ElseIf vsProjectItem.SubProject.Kind = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" Then&lt;br /&gt;                        isProject = True&lt;br /&gt;                    End If&lt;br /&gt;                Catch ex As Exception&lt;br /&gt;&lt;br /&gt;                End Try&lt;br /&gt;&lt;br /&gt;                Try&lt;br /&gt;                    If vsProjectItem.ProjectItems.Count &gt; 0 Then&lt;br /&gt;                        isMultiItem = True&lt;br /&gt;                    End If&lt;br /&gt;                Catch ex As Exception&lt;br /&gt;&lt;br /&gt;                End Try&lt;br /&gt;&lt;br /&gt;                If isFolder Then&lt;br /&gt;                    EnumerateItems(vsProjectItem.SubProject)&lt;br /&gt;                ElseIf isProject Then&lt;br /&gt;                    EnumerateItems(vsProjectItem.SubProject)&lt;br /&gt;                Else&lt;br /&gt;                    If isMultiItem Then&lt;br /&gt;                        For Each vsProjectSubItem As ProjectItem In vsProjectItem.ProjectItems&lt;br /&gt;                            ProcessItem(vsProjectSubItem)&lt;br /&gt;                        Next&lt;br /&gt;                    Else&lt;br /&gt;                        ProcessItem(vsProjectItem)&lt;br /&gt;                    End If&lt;br /&gt;                End If&lt;br /&gt;            Next&lt;br /&gt;        Catch ex As Exception&lt;br /&gt;            ' Место где макрос вылетел&lt;br /&gt;            System.Windows.Forms.MessageBox.Show(vsProject.Name)&lt;br /&gt;        End Try&lt;br /&gt;    End Sub&lt;br /&gt;End Module&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-2133074789801180080?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/2133074789801180080/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=2133074789801180080' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2133074789801180080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2133074789801180080'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/08/visual-studio.html' title='Форматирование файлов в Visual Studio'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-2534366538878221650</id><published>2009-07-29T23:53:00.008+04:00</published><updated>2011-03-31T04:14:51.381+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='powershell'/><category scheme='http://www.blogger.com/atom/ns#' term='sql server'/><title type='text'>SQL Server Backup и PowerShell</title><content type='html'>Сегодня научился делать бекапы базы данных SQL Server 2008 из скрипта PowerShell&lt;br /&gt;&lt;pre class="brush:powershell;"&gt;&lt;br /&gt;[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null&lt;br /&gt;[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | out-null&lt;br /&gt;[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | out-null&lt;br /&gt;[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | out-null&lt;br /&gt;$server = New-Object("Microsoft.SqlServer.Management.Smo.Server") "ИМЯ СЕРВЕРА"&lt;br /&gt;$database = $server.Databases["ИМЯ БАЗЫ ДАННЫХ"]&lt;br /&gt;$timestamp = Get-Date -format yyyy_MM_dd_HH_mm_ss&lt;br /&gt;$backup = New-Object("Microsoft.SqlServer.Management.Smo.Backup")&lt;br /&gt;$backup.Action = "Database"&lt;br /&gt;$backup.BackupSetDescription = "Комментарий к резервной копии"&lt;br /&gt;$backup.BackupSetName = "Название резервной копии (хорошо видно при восстановлении)"&lt;br /&gt;$backup.Database = "ИМЯ БАЗЫ ДАННЫХ"&lt;br /&gt;$backup.MediaDescription = "Disk"&lt;br /&gt;$backup.Devices.AddDevice("ПУТЬ К ПАПКЕ С РЕЗЕРВНЫМИ КОПИЯМИ" + $timestamp + ".bak", "File")&lt;br /&gt;$backup.SqlBackup($server)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Шестая строка нужна для более адекватной диагностики.&lt;br /&gt;&lt;br /&gt;Как указывать имя пользователя и пароль (подключаться не через интегрированную аутентификацию) не разбирался.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-2534366538878221650?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/2534366538878221650/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=2534366538878221650' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2534366538878221650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2534366538878221650'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/07/sql-server-backup-powershell.html' title='SQL Server Backup и PowerShell'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-2011374493576469611</id><published>2009-07-29T23:37:00.007+04:00</published><updated>2010-11-21T11:42:09.864+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><title type='text'>Небольшая победа над SQLite</title><content type='html'>SQLite штукенция, видимо, хорошая, но после Microsoft SQL Server некоторый дискомфорт, конечно, испытываешь. Итак, стояла задача получения категории строки таблицы. Категория определялась как порядковый номер одного из четырёх случаев:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;значение стоблца A равно X, значение столбца B равно Y&lt;/li&gt;&lt;br /&gt;&lt;li&gt;значение стоблца A не равно X, значение столбца B равно Y&lt;/li&gt;&lt;br /&gt;&lt;li&gt;значение стоблца A равно X, значение столбца B не равно Y&lt;/li&gt;&lt;br /&gt;&lt;li&gt;значение стоблца A не равно X, значение столбца B не равно Y&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Причём X и Y не NULL.&lt;br /&gt;&lt;br /&gt;Решена задача была просто, впрочем, я бы всё же предпочёл CASE. Для строки вычислялось значение&lt;br /&gt;&lt;pre class="brush:sql;gutter:false;"&gt;&lt;br /&gt;(typeof(nullif(A, X)) || '-' || typeof(nullif(B, Y)))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее, была создана дополнительная таблица&lt;br /&gt;&lt;pre class="brush:plain;gutter:false;"&gt;&lt;br /&gt;id   name&lt;br /&gt;1    "null-null"&lt;br /&gt;2    "text-null"&lt;br /&gt;3    "null-text"&lt;br /&gt;4    "text-text"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;и в запрос добавлен LEFT JOIN&lt;br /&gt;&lt;br /&gt;P.S. По результатам небольшого поиска, лучшим инструментом для работы с базами SQLite оказалось расширение для Firefox. DBA работающий в браузере это сюр.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-2011374493576469611?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/2011374493576469611/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=2011374493576469611' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2011374493576469611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2011374493576469611'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/07/sqlite.html' title='Небольшая победа над SQLite'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-870183729301385297</id><published>2009-07-27T12:11:00.008+04:00</published><updated>2011-08-09T12:19:21.605+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>Пользовательские свойства в Visual Studio 2008</title><content type='html'>Я был озабочен достаточно редкой задачей. В файле описаны свойства. Однако, значения свойств мне хотелось редактировать не в файле, а через окно Properties.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://s1196.photobucket.com/albums/aa415/adontz/BlogSpot/?action=view&amp;amp;current=VSPropertiesWindow.gif" target="_blank"&gt;&lt;img src="http://i1196.photobucket.com/albums/aa415/adontz/BlogSpot/VSPropertiesWindow.gif" border="0" alt="Photobucket"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;К счастью, Visual Studio позволяет это делать, а .Net COM Interop не лишает возможности.&lt;br /&gt;&lt;br /&gt;Итак, первое что надо сделать, это зарегистрировать свой расширитель свойств в методе OnConnection класса, реализующего интерфейс IDTExtensibility2.&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;public void OnConnection(&lt;br /&gt; object application,&lt;br /&gt; ext_ConnectMode connectMode,&lt;br /&gt; object addIn,&lt;br /&gt; ref Array custom)&lt;br /&gt;{&lt;br /&gt; this._application = (DTE)application;&lt;br /&gt; this._addIn = (AddIn)addIn;&lt;br /&gt; this._extenderProviderCookie =&lt;br /&gt;  this._application.ObjectExtenders.RegisterExtenderProvider(&lt;br /&gt;   // Магический GUID&lt;br /&gt;   "{8D58E6AF-ED4E-48B0-8C7B-C74EF0735451}",&lt;br /&gt;   "MyExtenderName",&lt;br /&gt;   new ExtenderProvider(),&lt;br /&gt;   "Локализованное имя, не знаю для чего оно");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Магический GUID представляет собой указание типа расширяемого объекта (Solution, Project, ProjectItem). Более-менее полный список есть в статье MSDN &lt;a href="http://msdn.microsoft.com/en-us/library/bb164669.aspx"&gt;CATIDs for Objects Ordinarily Used to Extend Projects&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Метод RegisterExtenderProvider возвращает кукис, его надо сохранить, чтобы в методе OnDisconnection отменить регистрацию расширителя.&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;this._application.ObjectExtenders.UnregisterExtenderProvider(&lt;br /&gt; this._extenderProviderCookie);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Что касается самого класса ExtenderProvider, то он должен реализовать EnvDTE.IExtenderProvider. Не путать с одноимённым интерфейсом из пространства имён System.ComponentModel. Ну и не стоит забывать про сущность Visual Studio, класс должен быть виден для COM. Получается так:&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;[ComVisible(true)]&lt;br /&gt;[ClassInterface(ClassInterfaceType.AutoDual)]&lt;br /&gt;public sealed class ExtenderProvider : EnvDTE.IExtenderProvider&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Дальше интереснее, метод GetExtender класса ExtenderProvider должен возвращать обычный объект. С другой стороны объект должен иметь динамический набор свойств. Решается это реализацией интерфейса ICustomTypeDescriptor. Ну и надо всё сделать видимым для COM. Получается так:&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;[ComVisible(true)]&lt;br /&gt;[ClassInterface(ClassInterfaceType.AutoDual)]&lt;br /&gt;public sealed class Extender : ICustomTypeDescriptor&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Подробнее про реализацию интерфейса ICustomTypeDescriptor можно прочитать в статье &lt;a href="http://rsdn.ru/article/dotnet/dnetappcfg.xml#E2EAC"&gt;Конфигурирование .NET-приложений&lt;/a&gt; на сайте &lt;a href="http://rsdn.ru"&gt;rsdn.ru&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-870183729301385297?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/870183729301385297/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=870183729301385297' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/870183729301385297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/870183729301385297'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/07/visual-studio-2008.html' title='Пользовательские свойства в Visual Studio 2008'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i1196.photobucket.com/albums/aa415/adontz/BlogSpot/th_VSPropertiesWindow.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-8057443208456856546</id><published>2009-07-27T11:25:00.005+04:00</published><updated>2009-08-26T13:14:26.106+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>Регистрация Visual Studio 2008 AddIn</title><content type='html'>Чтобы зарегистрировать управляемый AddIn в Visual Studio 2008 больше не надо лезть в реестр. Достаточно внутри папки "Visual Studio 2008" создать подпапку "Addins", а в ней файл с расширением .AddIn и содержимым вида&lt;br /&gt;&lt;pre class="brush:xml;gutter:false;"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-16" standalone="no"?&amp;gt;&lt;br /&gt;&amp;lt;Extensibility xmlns="http://schemas.microsoft.com/AutomationExtensibility"&amp;gt;&lt;br /&gt; &amp;lt;HostApplication&amp;gt;&lt;br /&gt;  &amp;lt;Name&amp;gt;Microsoft Visual Studio&amp;lt;/Name&amp;gt;&lt;br /&gt;  &amp;lt;Version&amp;gt;9.0&amp;lt;/Version&amp;gt;&lt;br /&gt; &amp;lt;/HostApplication&amp;gt;&lt;br /&gt; &amp;lt;Addin&amp;gt;&lt;br /&gt;  &amp;lt;FriendlyName&amp;gt;Название расширения&amp;lt;/FriendlyName&amp;gt;&lt;br /&gt;  &amp;lt;Description&amp;gt;Описание расширения&amp;lt;/Description&amp;gt;&lt;br /&gt;  &amp;lt;Assembly&amp;gt;полный\Путь\До\Сборки.dll&amp;lt;/Assembly&amp;gt;&lt;br /&gt;  &amp;lt;FullClassName&amp;gt;Имя класса реализующего интерфейс IDTExtensibility2&amp;lt;/FullClassName&amp;gt;&lt;br /&gt;  &amp;lt;LoadBehavior&amp;gt;5&amp;lt;/LoadBehavior&amp;gt;&lt;br /&gt;  &amp;lt;CommandPreload&amp;gt;0&amp;lt;/CommandPreload&amp;gt;&lt;br /&gt;  &amp;lt;CommandLineSafe&amp;gt;1&amp;lt;/CommandLineSafe&amp;gt;&lt;br /&gt; &amp;lt;/Addin&amp;gt;&lt;br /&gt;&amp;lt;/Extensibility&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Кодировка файла, конечно же, UTF-16.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-8057443208456856546?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/8057443208456856546/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=8057443208456856546' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/8057443208456856546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/8057443208456856546'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/07/visual-studio-2008-addin.html' title='Регистрация Visual Studio 2008 AddIn'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-7106721493530648284</id><published>2009-07-27T00:08:00.002+04:00</published><updated>2009-07-27T00:13:43.945+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='revenge'/><title type='text'>EnvDTE.IExtenderProvider побеждён</title><content type='html'>Итак, враг описанный в &lt;a href="http://adontz.blogspot.com/2009/07/envdteiextenderprovider.html"&gt;одном из предыдущих сообщений&lt;/a&gt; побеждён.&lt;br /&gt;&lt;br /&gt;Во-первых, ExtenderCATID оказался равен не "{610D4615-D0D5-11D2-8599-006097C68E81}", который сообщал сам ProjectItem, а "{8D58E6AF-ED4E-48B0-8C7B-C74EF0735451}". &lt;br /&gt;Во-вторых, мой простейший AddIn совершенно не дружит с ReSharper 4.1. После регистрации AddIn в свойствах файла либо вообще нет дополнительных позиций, либо они случайны. Естественно, ReSharper был выключен:-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-7106721493530648284?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/7106721493530648284/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=7106721493530648284' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7106721493530648284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7106721493530648284'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/07/envdteiextenderprovider_27.html' title='EnvDTE.IExtenderProvider побеждён'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-8415654424918039094</id><published>2009-07-26T21:48:00.002+04:00</published><updated>2009-07-26T21:52:03.860+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>64битный отладчик и звук</title><content type='html'>Если слушаю музыку, когда отлаживаю 64битное приложение из Visual Studio 2008 SP1, то часто получаю BSOD. Операционная система - Vista x64 SP1, английская.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-8415654424918039094?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/8415654424918039094/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=8415654424918039094' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/8415654424918039094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/8415654424918039094'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/07/64.html' title='64битный отладчик и звук'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-7269932682146900938</id><published>2009-07-26T11:01:00.010+04:00</published><updated>2011-08-09T12:19:48.692+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><title type='text'>Far Macros</title><content type='html'>Сегодня я узнал, что вышел Far 2.0. Скачал не просто новую, но и 64битную версию. Для меня это имеет значение, потому что из 32битной версии не видны 64битные системные пути.&lt;br /&gt;&lt;br /&gt;Обновление прошло хорошо, но, как несложно догадаться, 99% плагинов фара - 32битные. В принципе, я использовал только один нестандартный плагин - MyDocuments, для быстрого перехода в каталог "Personal". Надо было как-то восстанавливать утерянную функциональность. Я решил разобраться с макросами. Мало ли, вдруг помогут...&lt;br /&gt;&lt;br /&gt;Информации по макросам Far для новичков крайне мало. В частности я с трудом нашёл, что для записи макроса надо нажать Ctrl + '.' (Ctrl + точка). Для остановки записи та же комбинация. Хранятся макросы в ветке реестра "HKEY_CURRENT_USER\Software\Far2\KeyMacros". Для макросов выполняющихся в режиме панелей есть ключ "Shell". Хранится макрос просто, внутри ключа с именем, соответствующим комбинации клавиш, на которую он назначен. В параметре Sequence последовательность эмулируемых нажатий клавиш.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://s1196.photobucket.com/albums/aa415/adontz/BlogSpot/?action=view&amp;amp;current=FarMacroReg-1.gif" target="_blank"&gt;&lt;img src="http://i1196.photobucket.com/albums/aa415/adontz/BlogSpot/FarMacroReg-1.gif" border="0" alt="Photobucket"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Получить путь к системным папкам, конечно, не представляется возможным. Но я был согласен и на частное решение. В общем-то всё просто, надо было съэмулировать нажатие:&lt;br /&gt;&lt;pre class="brush:plain;gutter:false"&gt;&lt;br /&gt;Очистить командную строку&lt;br /&gt;Esc&lt;br /&gt;Перейти на диск D, где у меня хранится профиль&lt;br /&gt;D:&lt;br /&gt;Перейти в корень диска, на случай если текущей была какая-то папка на диске D:&lt;br /&gt;CD \&lt;br /&gt;Перейти в папку с документами.&lt;br /&gt;CD Profiles\Adontz\Documents\&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Правда, потом я передумал и решил переходить в каталог с проектами Visual Studio. В итоге в Sequence получилась вот такая строка&lt;br /&gt;&lt;pre class="brush:plain;gutter:false"&gt;&lt;br /&gt;Esc d : Enter c d Space BackSlash Enter c d Space P r o f i l e s BackSlash A d o n t z BackSlash D o c u m e n t s BackSlash V i s u a l Space S t u d i o Space 2 0 0 8 BackSlash P r o j e c t s Enter&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-7269932682146900938?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/7269932682146900938/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=7269932682146900938' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7269932682146900938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/7269932682146900938'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/07/far-macros.html' title='Far Macros'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i1196.photobucket.com/albums/aa415/adontz/BlogSpot/th_FarMacroReg-1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-2817829234099139809</id><published>2009-07-23T21:23:00.008+04:00</published><updated>2009-07-26T12:42:55.303+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>EnvDTE.IExtenderProvider</title><content type='html'>Заставить работать EnvDTE.IExtenderProvider в Visual Studio 2008 не удалось. Провайдер регистрируется, виден в списке ProjectItem.ExtenderNames, но CanExtend и GetExtender ни разу не вызываются. Мистика какая-то.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-2817829234099139809?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/2817829234099139809/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=2817829234099139809' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2817829234099139809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/2817829234099139809'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/07/envdteiextenderprovider.html' title='EnvDTE.IExtenderProvider'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-6806428042297829222</id><published>2009-07-22T09:10:00.011+04:00</published><updated>2010-11-21T11:43:19.507+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 2008 server'/><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><title type='text'>Windows 2008 Server R2, Hyper-V и VLANы</title><content type='html'>В Windows 2008 Server R2 Release Candidate после миграции, будь то Quick или Live миграция, у виртуальной машины теряются настройки VLAN. Перезапуск машины без миграции к такому не приводит. То есть настройки VLAN всё же персистентны, но теряются при миграции. Надеюсь в RTM это исправят, уж больно неприятный баг.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-6806428042297829222?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/6806428042297829222/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=6806428042297829222' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6806428042297829222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6806428042297829222'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/07/windows-2008-server-r2-hyper-v-vlan.html' title='Windows 2008 Server R2, Hyper-V и VLANы'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-6903261514481970188</id><published>2009-01-24T20:40:00.004+04:00</published><updated>2010-11-21T11:43:33.438+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='tips and tricks'/><title type='text'>ArraySegment</title><content type='html'>Книжки читать полезно. Практически в любой книге по уже хорошо знакомому предмету будет что-то новое. Может быть, какая-то мелочь, но всё же.&lt;br /&gt;&lt;br /&gt;Так, например, я недавно узнал про обобщение ArraySegment. Полезная такая структура. Правда, понятно почему я её сам не заметил, она нигде в API CLR не светится.&lt;br /&gt;&lt;br /&gt;В общем, буду пользоваться.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-6903261514481970188?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/6903261514481970188/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=6903261514481970188' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6903261514481970188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6903261514481970188'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/01/arraysegment.html' title='ArraySegment'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-6699498079269704136</id><published>2009-01-02T12:00:00.005+04:00</published><updated>2010-08-06T06:03:05.684+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><title type='text'>Dictionary</title><content type='html'>Оптимизацию надо всегда начинать с профайлера. Так, например, я недавно реализовал алгоритм сравнения больших бинарных данных. Время работы оказалось заметно ниже ожидаемого. Как показал профайлинг, а я бы в жизни не догадался, 56% времени уходило на выполнение Dictionary.TryGetValue.&lt;br /&gt;&lt;br /&gt;В данном случае мне повезло, выполнялся ряд условий. Во-первых, заполнение словаря происходило единовременно, а удаление элементов вообще никогда не происходило. Во-вторых, ключом был базовый тип int. В-третьих, распределение ключей было довольно равномерным, так как ключ был результатом работы хеш-функции. Немного поразмыслив, я создал массив&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;bool[] keyAvailability = new bool[65536];&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;который заполнил значениями true по индексам&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;(key &amp; 0xFFFF) ^ ((key &gt;&gt; 16) 0xFFFF)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь, вызов TryGetValue предваряется проверкой&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;keyAvailability[(key &amp; 0xFFFF) ^ ((key &gt;&gt; 16) 0xFFFF)].&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Общая скорость работы выросла в 4 раза. Тезис, что ускорение чаще всего достигается за счёт использования дополнительной памяти ещё раз подтвердился.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-6699498079269704136?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/6699498079269704136/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=6699498079269704136' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6699498079269704136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/6699498079269704136'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2009/01/dictionary.html' title='Dictionary'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8772299484883455961.post-3346183386027256692</id><published>2008-12-28T12:00:00.012+04:00</published><updated>2010-11-21T11:43:58.803+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='epic fail'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>params</title><content type='html'>Время от времени мне приходится добавлять к функциям новые параметры. Естественно, что если функция уже где-то использовалась, то придётся скорректировать её вызов.&lt;br /&gt;Обычно, добавляя новый параметр в сигнатуру функции я, в поиске мест использования, полагаюсь на компилятор. Конечно есть средства рефакторинга, но сейчас не о них речь. Что касается компилятора, то отсутствие только что добавленного параметра в местах вызова, приведёт к ошибкам компиляции. Так бывает часто, но не всегда. С одной стороны, если параметр полезный, но не обязательный, логично оставить возможность вызова с использованием старой сигнатуры, подставляя некоторое значение по умолчанию. Но что если параметр обязательный и метод не перегружен? Всегда ли компилятор мне подскажет где надо скорректировать вызов функции? Как показала практика, нет. Подвох в данном случае был в ключевом слове params.&lt;br /&gt;&lt;br /&gt;Например, была функция&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;public void DoSomething(params string[] oldParameters)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;а потом так вышло, что я решил изменить сигнатуру&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;public void DoSomething(&lt;br /&gt;  string newParameter,&lt;br /&gt;  params string[] oldParameters)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;и что же? Всё компилируется, но ничего не работает! Если раньше вызов&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;DoSomething("first", "second");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;преобразовывался в&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;DoSomething(&lt;br /&gt;  new string[]&lt;br /&gt;  {&lt;br /&gt;    "first", "second"&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;то теперь в&lt;br /&gt;&lt;pre class="brush:csharp;gutter:false"&gt;&lt;br /&gt;DoSomething(&lt;br /&gt;  "first",&lt;br /&gt;  new string[]&lt;br /&gt;  {&lt;br /&gt;    "second"&lt;br /&gt;  });&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Никаких ошибок компиляции. Можно использовать Find References, но я предпочёл удалить params.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8772299484883455961-3346183386027256692?l=adontz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adontz.blogspot.com/feeds/3346183386027256692/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8772299484883455961&amp;postID=3346183386027256692' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3346183386027256692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8772299484883455961/posts/default/3346183386027256692'/><link rel='alternate' type='text/html' href='http://adontz.blogspot.com/2008/12/blog-post.html' title='params'/><author><name>adontz</name><uri>http://www.blogger.com/profile/06211734550501349020</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
