<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Dima's blog</title>
	<atom:link href="http://blogpost.am9.ru/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blogpost.am9.ru</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Tue, 10 Mar 2009 08:35:42 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Настройка авторизации с помощью сертификатов в SSH</title>
		<link>http://blogpost.am9.ru/?p=65</link>
		<comments>http://blogpost.am9.ru/?p=65#comments</comments>
		<pubDate>Tue, 06 Jan 2009 19:53:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://blogpost.am9.ru/?p=65</guid>
		<description><![CDATA[Довольно часто возникает необходимость настроить вход на удаленный сервер без участия пользователя. (Например если вход  выполняется из скрипта или пароль был сгенерирован злобным админом и нет возможности запомнить это безобразие). Я делал это для связки Mac OS OpenSSH Server и Ubuntu Linux.  Итак последовательность действий на клиенте следующая:

Проверяем, есть ли в домашней папке [...]]]></description>
			<content:encoded><![CDATA[<p>Довольно часто возникает необходимость настроить вход на удаленный сервер без участия пользователя. (Например если вход  выполняется из скрипта или пароль был сгенерирован злобным админом и нет возможности запомнить это безобразие). Я делал это для связки Mac OS OpenSSH Server и Ubuntu Linux.  Итак последовательность действий на клиенте следующая:</p>
<ul>
<li>Проверяем, есть ли в домашней папке папка .ssh, для этого выполняем команду<br />
<br></p>
<pre class="bash"> ls -ld ~/.ssh</pre>
<p><br>Если папки не существует, то создадим ее<br />
<br><code>mkdir ~/.ssh</code></li>
<li>
Переходим в созданную папку:<br><br />
<code>cd ~/.ssh</code><br />
<br>
</li>
<li>
Генерируем открытый и закрытый ключ<br><br />
<code><br />
ssh-keygen -b 1024 -t dsa -f id_dsa -P ''<br />
</code><br />
Эта команда сгенерирует открытый и закрытый ключи. Флаг <i>-b</i> устанавливает длину ключей в 1024 бита, <i>-t</i>  определяет использование DSA алгоритма,  <i>-f</i> устанавливает имя файла, а   <i>P ''</i> устанавливает нулевой пароль к закрытому ключу, что дает возможность использовать его для автоматического логина.
</li>
<p><br>
<li>
Создадим файл  authorized_keys2:<br />
<code><br />
 touch authorized_keys2<br />
</code><br>
</li>
<li>
 Скопируем в этот файл открытый ключ:<br />
<code><br />
cat id_dsa.pub >> authorized_keys2<br />
</code><br />
<br>
</li>
<li>
Установим закрытому ключу правильные права:<br />
<code><br />
chmod 400 id_dsa<br />
</code>
</li>
<p><br>
<li>
Копируем файл на удаленный сервер:<br />
<code><br />
scp authorized_keys2 username@remotemachine:~/.ssh/<br />
</code>
</li>
</ul>
<p><br><br />
<br></p>
<p>Первоисточник:<br />
<a href="http://developer.apple.com/documentation/MacOSXServer/Conceptual/XServer_ProgrammingGuide/Articles/SSH.html">Setting Up Key-Based SSH Login</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogpost.am9.ru/?feed=rss2&amp;p=65</wfw:commentRss>
		</item>
		<item>
		<title>Добавление кнопки на панель инструментов Excel и назначение ёй макроса</title>
		<link>http://blogpost.am9.ru/?p=47</link>
		<comments>http://blogpost.am9.ru/?p=47#comments</comments>
		<pubDate>Thu, 02 Oct 2008 11:05:46 +0000</pubDate>
		<dc:creator>Igor</dc:creator>
		
		<category><![CDATA[exel]]></category>

		<category><![CDATA[ms office]]></category>

		<guid isPermaLink="false">http://blogpost.am9.ru/?p=47</guid>
		<description><![CDATA[


Настройка Excel 

    




Для этого необходимо открыть файл с макросом, который Вам нужен. Например pers.xls который находиться D:\Справочник\pers.xls и на вопрос системы безопасности:
ответить нажатием на кнопку "Не отключать макросы".
После чего на панели инструментов необходимо кликнуть правой кнопкой мыши:
и выбрать пункт "Настройка...". Появиться окно:
после чего нажать на кнопку "Изменить выделенный объект" и в появившемся окне [...]]]></description>
			<content:encoded><![CDATA[<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><strong>Настройка Excel </strong></td>
<td>
<p align="right"><a href="/welcometopic.htm"></a>  <a href="/scriptforbd.htm"></a>  <a href="/filldata.htm"></a></p>
</td>
</tr>
</tbody>
</table>
<p>Для этого необходимо открыть файл с макросом, который Вам нужен. Например pers.xls который находиться <a href="hhctrl_2.hhclick()">D:\Справочник\pers.xls</a> и на вопрос системы безопасности:</p>
<p><div id="attachment_57" class="wp-caption alignnone" style="width: 310px"><a href="http://blogpost.am9.ru/wp-content/uploads/2008/10/enablemacros.jpg"><img class="size-medium wp-image-57" src="http://blogpost.am9.ru/wp-content/uploads/2008/10/enablemacros-300x140.jpg" alt="Вопрос ситемы безопасности Excel" width="300" height="140" /></a><p class="wp-caption-text">Вопрос ситемы безопасности Excel</p></div></p>
<p>ответить нажатием на кнопку "Не отключать макросы".<br />
После чего на панели инструментов необходимо кликнуть правой кнопкой мыши:</p>
<p><div id="attachment_55" class="wp-caption alignnone" style="width: 160px"><a href="http://blogpost.am9.ru/wp-content/uploads/2008/10/custom.jpg"><img class="size-medium wp-image-55" src="http://blogpost.am9.ru/wp-content/uploads/2008/10/custom-150x300.jpg" alt="Вызов меню настройки панели инструментов Excel" width="150" height="300" /></a><p class="wp-caption-text">Вызов меню настройки панели инструментов Excel</p></div></p>
<p>и выбрать пункт "Настройка...". Появиться окно:</p>
<p><div id="attachment_56" class="wp-caption alignnone" style="width: 310px"><a href="http://blogpost.am9.ru/wp-content/uploads/2008/10/customwindow.jpg"><img class="size-medium wp-image-56" src="http://blogpost.am9.ru/wp-content/uploads/2008/10/customwindow-300x275.jpg" alt="Окно настройки панелей инструментов" width="300" height="275" /></a><p class="wp-caption-text">Окно настройки панелей инструментовВ списке &quot;Категории:&quot; - выбрать &quot;Макросы&quot;, а в списке &quot;Команды:&quot; выбрать &quot;Настраиваемая кнопка&quot;. Зажать левой кнопкой мыши &quot;Настраиваемая кнопка&quot; и перетащить на панель инструментов в удобное место: Добавление кнопки на панель инструментов</p></div></p>
<p>после чего нажать на кнопку "Изменить выделенный объект" и в появившемся окне ввести имя кнопки "Внести данные" и выбрать "Только текст(всегда)":</p>
<p><div id="attachment_51" class="wp-caption alignnone" style="width: 203px"><a href="http://blogpost.am9.ru/wp-content/uploads/2008/10/changecaption.jpg"><img class="size-medium wp-image-51" src="http://blogpost.am9.ru/wp-content/uploads/2008/10/changecaption-193x300.jpg" alt="Выбор показа только текста в названии кнопки" width="193" height="300" /></a><p class="wp-caption-text">Выбор показа только текста в названии кнопки</p></div></p>
<p>Теперь осталось назначить макрос. Снова нажимаем кнопку "Изменить выделенный объект" и в появившемся окне выбираем "Назначить макрос...". Появляется окно выбора макроса:</p>
<p><div id="attachment_52" class="wp-caption alignnone" style="width: 310px"><a href="http://blogpost.am9.ru/wp-content/uploads/2008/10/choisemacros.jpg"><img class="size-medium wp-image-52" src="http://blogpost.am9.ru/wp-content/uploads/2008/10/choisemacros-300x233.jpg" alt="Выбор макроса" width="300" height="233" /></a><p class="wp-caption-text">Выбор макроса</p></div></p>
<p>где нужно выбрать строку PERS.XLS!TestMacros и нажать кнопку "ОК".<br />
Кнопка готова, после чего на окне "Настройка" нажимаем кнопку "Закрыть" и имеем подготовленный к работе Excel.</p>
<p>Если макроса PERS.XLS! TestMacros нет в списке нужно проверить в первую очередь этот список:</p>
<p><div id="attachment_53" class="wp-caption alignnone" style="width: 310px"><a href="http://blogpost.am9.ru/wp-content/uploads/2008/10/choisemacros1.jpg"><img class="size-medium wp-image-53" src="http://blogpost.am9.ru/wp-content/uploads/2008/10/choisemacros1-300x233.jpg" alt="Выбор макроса из списка открытых книг" width="300" height="233" /></a><p class="wp-caption-text">Выбор макроса из списка открытых книг</p></div></p>
<p>и выбрать там пункт "Все открытые книги". Если макросы не появились значит или не открыта книга pers.xls который находиться <a href="hhctrl_3.hhclick()">d:\Справочник\pers.xls</a> или на вопрос системы безопасности:</p>
<p><div id="attachment_57" class="wp-caption alignnone" style="width: 310px"><a href="http://blogpost.am9.ru/wp-content/uploads/2008/10/enablemacros.jpg"><img class="size-medium wp-image-57" src="http://blogpost.am9.ru/wp-content/uploads/2008/10/enablemacros-300x140.jpg" alt="Вопрос ситемы безопасности Excel" width="300" height="140" /></a><p class="wp-caption-text">Вопрос ситемы безопасности Excel</p></div></p>
<p>ответили нажатием на кнопку "Отключить макросы" или необходимо посмотреть настройки системы безопасности. Пункт меню "Сервис"-&gt;"Макрос"-&gt;"Безопасность":</p>
<p><div id="attachment_49" class="wp-caption alignnone" style="width: 310px"><a href="http://blogpost.am9.ru/wp-content/uploads/2008/10/security.jpg"><img class="size-medium wp-image-49" src="http://blogpost.am9.ru/wp-content/uploads/2008/10/security-300x180.jpg" alt="Доступ к меню управления безопасностью" width="300" height="180" /></a><p class="wp-caption-text">Доступ к меню управления безопасностью</p></div></p>
<p>появиться такое окно:</p>
<p><div id="attachment_54" class="wp-caption alignnone" style="width: 310px"><a href="http://blogpost.am9.ru/wp-content/uploads/2008/10/choisesecurity.jpg"><img class="size-medium wp-image-54" src="http://blogpost.am9.ru/wp-content/uploads/2008/10/choisesecurity-300x266.jpg" alt="Установка уровня безопасности Excel" width="300" height="266" /></a><p class="wp-caption-text">Установка уровня безопасности Excel</p></div></p>
<p>Необходимо выбрать средний уровень безопасности. Закрыть Excel. И при следующем запуске Excel уровень безопасности будет средним.</p>
<p>З.Ы. По настойчивой просьбе моего друга</p>
]]></content:encoded>
			<wfw:commentRss>http://blogpost.am9.ru/?feed=rss2&amp;p=47</wfw:commentRss>
		</item>
		<item>
		<title>Как записать видео с экрана</title>
		<link>http://blogpost.am9.ru/?p=26</link>
		<comments>http://blogpost.am9.ru/?p=26#comments</comments>
		<pubDate>Sun, 31 Aug 2008 14:48:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blogpost.am9.ru/?p=26</guid>
		<description><![CDATA[Довольно часто возникает необходимость записать видео с рабочего стола, или последовательность каких-то действий, а затем переслать это знакомым/заказчику и т.д Мой случай осложнялся тем, что нужно было записать видео на MacOS. Погуглив немного я не нашел бесплатного решения для этой ОС, но наткнулся на давно известный, но временно мною забытый проект pyvnc2swf . Написан он [...]]]></description>
			<content:encoded><![CDATA[<p>Довольно часто возникает необходимость записать видео с рабочего стола, или последовательность каких-то действий, а затем переслать это знакомым/заказчику и т.д Мой случай осложнялся тем, что нужно было записать видео на MacOS. Погуглив немного я не нашел бесплатного решения для этой ОС, но наткнулся на давно известный, но временно мною забытый проект <a href="http://www.unixuser.org/~euske/vnc2swf/pyvnc2swf.html">pyvnc2swf</a> . Написан он на языке <a href="www.python.org">python</a> ,а значит кросплатформенный, что тоже хорошо. Недостатком данного подхода является то, что вам необходимо иметь установленный <a href="http://ru.wikipedia.org/wiki/Virtual_Network_Computing">VNC</a> сервер. Для MacOS я поставил бесплатный <a href="http://www.redstonesoftware.com/products/vine_server/">Vine</a> VNC сервер для  MacOS, в линукс дистрибутивах VNC зачастую предустановлен, если же его все же нет, то он легко ставится из репозитярия. Для windows рекомндую <a href="http://www.tightvnc.com/">TightVNC</a> или <a href="http://www.uvnc.com/">UltraVNC</a> Когда VNC сервер запущен и установлен, дело за малым. Запустив скрипт <em>vnc2svf.py</em> вы увидите окошко:<br />
<a href="http://blogpost.am9.ru/wp-content/uploads/2008/08/main_window.png"><img src="http://blogpost.am9.ru/wp-content/uploads/2008/08/main_window.png" alt="" title="main_window" width="233" height="97" class="aligncenter size-medium wp-image-30" /></a><br />
В меню опций необходимо выбрать запись видео:<br />
<a href="http://blogpost.am9.ru/wp-content/uploads/2008/08/options.png"><img src="http://blogpost.am9.ru/wp-content/uploads/2008/08/options-300x239.png" alt="" title="options" width="300" height="239" class="aligncenter size-medium wp-image-32" /></a><br />
Если собираетесь записывать видео с удаленной машины, то в опциях необходимо указать имя(или ip адресс) и порт удаленной машины.<br />
<a href="http://blogpost.am9.ru/wp-content/uploads/2008/08/server_option.png"><img src="http://blogpost.am9.ru/wp-content/uploads/2008/08/server_option.png" alt="" title="server_option" width="251" height="180" class="alignnone size-medium wp-image-34" /></a><br />
VNC сервер по умолчанию становится на порт 5900</p>
<p><a href="http://blogpost.am9.ru/wp-content/uploads/2008/08/vnc_settings.png"><img src="http://blogpost.am9.ru/wp-content/uploads/2008/08/vnc_settings.png" alt="" title="vnc_settings" width="240" height="138" class="alignnone size-medium wp-image-35" /></a></p>
<p>Когда все это сделано, жмем кнопку 'Start' и далее, в зависимости от настройки VNC сервера, либо вводим пароль к VNC серверу, либо запись началась уже началась и осталось только записать. то что мы планировали записать. </p>
]]></content:encoded>
			<wfw:commentRss>http://blogpost.am9.ru/?feed=rss2&amp;p=26</wfw:commentRss>
		</item>
		<item>
		<title>sphinx и поиск по русским страницам в mediawiki</title>
		<link>http://blogpost.am9.ru/?p=19</link>
		<comments>http://blogpost.am9.ru/?p=19#comments</comments>
		<pubDate>Tue, 29 Jul 2008 20:48:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[mediawiki]]></category>

		<guid isPermaLink="false">http://blogpost.am9.ru/?p=19</guid>
		<description><![CDATA[В предыдущей публикации про полнотекстовый поиск Полнотекстовый поиск в mediawiki я не упомянул про поиск по рускоязычным страницам, по причине отсутствия таковых в моей wiki на тот момент. Когда поиск понадобился, то я обнаружил что он не работает. Сначала я грешил на sphinx, но попробовав искать русские слова из командной строки убедился, что поисковой движок [...]]]></description>
			<content:encoded><![CDATA[<p>В предыдущей публикации про полнотекстовый поиск <a href="http://blogpost.am9.ru/?p=7">Полнотекстовый поиск в mediawiki</a> я не упомянул про поиск по рускоязычным страницам, по причине отсутствия таковых в моей wiki на тот момент. Когда поиск понадобился, то я обнаружил что он не работает. Сначала я грешил на sphinx, но попробовав искать русские слова из командной строки убедился, что поисковой движок в порядке. Начал копать глубже и нашел довольно интересное место в файле SphinxSearch_body.php. Код приведенный ниже:</p>
<pre class="php">&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;"># don't do anything for blank searches</span>
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<a href="http://www.php.net/preg_match"><span style="color: #000066;">preg_match</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'/[<span style="color: #000099; font-weight: bold;">\w</span><span style="color: #000099; font-weight: bold;">\d</span>]/'</span>, <span style="color: #0000ff;">$term</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$found</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>никогда не пропускает меня дальше для русских слов и нормально отрабатывает для английских. Я запостил баг разработчикам и сделал фикс для себя <a href="https://sourceforge.net/tracker/?func=detail&atid=1001736&aid=2015817&group_id=207453"> sphinxsearch-Bugs-2015817 ] SphinxSearch doesn't work for Russian pages</a>. Разработчики пока никак не отреагировали, а с фиксом русский поиск работает :). </p>
]]></content:encoded>
			<wfw:commentRss>http://blogpost.am9.ru/?feed=rss2&amp;p=19</wfw:commentRss>
		</item>
		<item>
		<title>Скрипт для создания рамки фотографии (GIMP+Python)</title>
		<link>http://blogpost.am9.ru/?p=16</link>
		<comments>http://blogpost.am9.ru/?p=16#comments</comments>
		<pubDate>Sun, 08 Jun 2008 08:13:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blogpost.am9.ru/?p=16</guid>
		<description><![CDATA[Часто приходиться добавлять рамку к фотографиям перед печатью. Фотография до применения скрипта

и после применения:

 
Скопируйте скрипт в файл 'frame.py' и положите файл в папку '/usr/share/gimp/2.0/plug-ins' или в '~/.gimp/plug-ins', установите файлу разрешение на выполнение, и в меню Python-fu/Decor/Border вы сможете выполнить скрипт. (Следует отметить что скрипт не тестировался на Windows системах!!!)
&#160;
#!/usr/bin/env python
&#160;
#   Gimp-Python - [...]]]></description>
			<content:encoded><![CDATA[<p>Часто приходиться добавлять рамку к фотографиям перед печатью. Фотография до применения скрипта<br />
<img src="http://blogpost.am9.ru/wp-content/uploads/2008/06/dsc_0243nef.jpeg"><br />
и после применения:<br />
<img src="http://blogpost.am9.ru/wp-content/uploads/2008/06/f_dsc_0243nef.jpeg">
 </p>
<p>Скопируйте скрипт в файл 'frame.py' и положите файл в папку '/usr/share/gimp/2.0/plug-ins' или в '~/.gimp/plug-ins', установите файлу разрешение на выполнение, и в меню Python-fu/Decor/Border вы сможете выполнить скрипт. (Следует отметить что скрипт не тестировался на Windows системах!!!)</p>
<pre class="python">&nbsp;
<span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#   Gimp-Python - allows the writing of Gimp plugins in Python.</span>
<span style="color: #808080; font-style: italic;">#   Copyright (C) 1997  James Henstridge &lt;james@daa.com.au&gt;</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;">#   This program is free software; you can redistribute it and/or modify</span>
<span style="color: #808080; font-style: italic;">#   it under the terms of the GNU General Public License as published by</span>
<span style="color: #808080; font-style: italic;">#   the Free Software Foundation; either version 2 of the License, or</span>
<span style="color: #808080; font-style: italic;">#   (at your option) any later version.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;">#   This program is distributed in the hope that it will be useful,</span>
<span style="color: #808080; font-style: italic;">#   but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span style="color: #808080; font-style: italic;">#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span style="color: #808080; font-style: italic;">#   GNU General Public License for more details.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;">#   You should have received a copy of the GNU General Public License</span>
<span style="color: #808080; font-style: italic;">#   along with this program; if not, write to the Free Software</span>
<span style="color: #808080; font-style: italic;">#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> gimpfu <span style="color: #ff7700;font-weight:bold;">import</span> *
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> PythonFrame<span style="color: black;">&#40;</span>image, layer, \
                    median_color, \
                    outer_width, outer_color<span style="color: black;">&#41;</span>:
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> CreateFrame<span style="color: black;">&#40;</span>name, width, color<span style="color: black;">&#41;</span>:
        image_width  = <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_image_width</span><span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
        image_height = <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_image_height</span><span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
        <span style="color: #808080; font-style: italic;"># get a copy of background</span>
        background_copy = <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_image_get_active_layer</span> <span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
        border = <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_layer_copy</span><span style="color: black;">&#40;</span>background_copy,<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_image_add_layer</span><span style="color: black;">&#40;</span>image, border, <span style="color: #ff4500;">-1</span><span style="color: black;">&#41;</span>
        <span style="color: #808080; font-style: italic;">#select and make stroke</span>
        <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_rect_select</span><span style="color: black;">&#40;</span>image, outer_width, outer_width,  image_width - <span style="color: #ff4500;">2</span>*outer_width , image_height - <span style="color: #ff4500;">2</span>*outer_width , CHANNEL_OP_REPLACE,  <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0.0</span><span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_context_set_foreground</span><span style="color: black;">&#40;</span>median_color<span style="color: black;">&#41;</span>
        drawable = <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_image_active_drawable</span> <span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
        <span style="color: #808080; font-style: italic;"># TODO somehow set the width for the stroke</span>
        <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_edit_stroke</span><span style="color: black;">&#40;</span>drawable<span style="color: black;">&#41;</span>
        <span style="color: #808080; font-style: italic;"># fill by foreground color</span>
        <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_selection_invert</span><span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_context_set_foreground</span><span style="color: black;">&#40;</span>outer_color<span style="color: black;">&#41;</span>
        drawable = <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_image_active_drawable</span> <span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_bucket_fill</span><span style="color: black;">&#40;</span>drawable,FG_BUCKET_FILL,NORMAL_MODE,<span style="color: #ff4500;">100</span>,<span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">0</span>,outer_width/<span style="color: #ff4500;">2</span>,outer_width/<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_layer_set_opacity</span><span style="color: black;">&#40;</span>border,<span style="color: #ff4500;">50</span><span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_selection_none</span> <span style="color: black;">&#40;</span>image<span style="color: black;">&#41;</span>
        <span style="color: #808080; font-style: italic;"># megre visible layers</span>
        <span style="color: #dc143c;">pdb</span>.<span style="color: black;">gimp_image_merge_visible_layers</span><span style="color: black;">&#40;</span>image,EXPAND_AS_NECESSARY<span style="color: black;">&#41;</span>
&nbsp;
    image.<span style="color: black;">undo_group_start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    CreateFrame<span style="color: black;">&#40;</span><span style="color: #483d8b;">'Frame Border'</span>, outer_width, outer_color<span style="color: black;">&#41;</span>
    image.<span style="color: black;">undo_group_end</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
register<span style="color: black;">&#40;</span>
        <span style="color: #483d8b;">&quot;python_fu_borders&quot;</span>,
        <span style="color: #483d8b;">&quot;Add frame to the image&quot;</span>,
        <span style="color: #483d8b;">&quot;Add frame to the image&quot;</span>,
        <span style="color: #483d8b;">&quot;Alexander Darovsky &amp; Dmytro Golub&quot;</span>,
        <span style="color: #483d8b;">&quot;Alexander Darovsky &amp; Dmytro Golub&quot;</span>,
        <span style="color: #483d8b;">&quot;2006-2008&quot;</span>,
        <span style="color: #483d8b;">&quot;&lt;Image&gt;/Python-Fu/Decor/_Borders&quot;</span>,
        <span style="color: #483d8b;">&quot;RGB*&quot;</span>,
        <span style="color: black;">&#91;</span>
                <span style="color: black;">&#40;</span>PF_COLOR, <span style="color: #483d8b;">&quot;median_color&quot;</span>,  <span style="color: #483d8b;">&quot;Median Frame Color&quot;</span>, <span style="color: black;">&#40;</span><span style="color: #ff4500;">255</span>,<span style="color: #ff4500;">255</span>,<span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>,
                <span style="color: black;">&#40;</span>PF_INT,   <span style="color: #483d8b;">&quot;outer_width&quot;</span>,  <span style="color: #483d8b;">&quot;Outer Frame Width&quot;</span>,  <span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span>,
                <span style="color: black;">&#40;</span>PF_COLOR, <span style="color: #483d8b;">&quot;outer_color&quot;</span>,  <span style="color: #483d8b;">&quot;Outer Frame Color&quot;</span>,   <span style="color: black;">&#40;</span>  <span style="color: #ff4500;">0</span>,  <span style="color: #ff4500;">0</span>,  <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>,
        <span style="color: black;">&#93;</span>,
        <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>,
        PythonFrame<span style="color: black;">&#41;</span>
&nbsp;
main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;</pre>
<p>Из недостатков которые необходимо устранить стоит отметить, что пока нет возможности указать ширину  'Median Frame'. Это существенный недостаток, т.к сейчас это приходиться делать вручную. Выделите произвольную область на фотографии, затем 'Edit'->'Stroke selection' и установите 'Line Width' в необходимую ширину, после этого скрипт будет использовать установленную ширину для операции 'Stroke selection'. Со временем я постараюсь устранить этот недостаток. </p>
<p>Ссылки по теме:<br />
<a href="http://www.liveinternet.ru/users/748858/post28357770/">Про скрипты в GIMP</a></p>
<p><a href="http://www.goof.com/pcg/marc/pdb/index.html">Gimp PDB Documentation</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogpost.am9.ru/?feed=rss2&amp;p=16</wfw:commentRss>
		</item>
		<item>
		<title>Примонтировать iso образ в Linux</title>
		<link>http://blogpost.am9.ru/?p=15</link>
		<comments>http://blogpost.am9.ru/?p=15#comments</comments>
		<pubDate>Mon, 12 May 2008 17:46:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blogpost.am9.ru/?p=15</guid>
		<description><![CDATA[В целом задача тривиальная, но когда нужно сделать мне всегда приходиться искать в интернете ибо всегда забуду указать какой-то параметр.
Для начала создайте точку монтирования 
&#160;
 mkdir /mnt/iso
&#160;
и дальше примонтируйте ваш образ
&#160;
mount myiso.iso /mnt/iso/ -t iso9660 -o ro,loop=/dev/loop0
&#160;
где myiso.iso ваш образ
Ссылки:
How to mount an ISO image in Linux
]]></description>
			<content:encoded><![CDATA[<p>В целом задача тривиальная, но когда нужно сделать мне всегда приходиться искать в интернете ибо всегда забуду указать какой-то параметр.</p>
<p>Для начала создайте точку монтирования </p>
<pre class="bash">&nbsp;
 mkdir /mnt/iso
&nbsp;</pre>
<p>и дальше примонтируйте ваш образ</p>
<pre class="bash">&nbsp;
mount myiso.iso /mnt/iso/ -t iso9660 -o ro,<span style="color: #0000ff;">loop=</span>/dev/loop0
&nbsp;</pre>
<p>где myiso.iso ваш образ</p>
<p>Ссылки:<br />
<a href="http://www.techspot.com/vb/topic483.html">How to mount an ISO image in Linux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogpost.am9.ru/?feed=rss2&amp;p=15</wfw:commentRss>
		</item>
		<item>
		<title>Переключение между H и CPP файлами в Visual Studio 7/7.1/8/9</title>
		<link>http://blogpost.am9.ru/?p=14</link>
		<comments>http://blogpost.am9.ru/?p=14#comments</comments>
		<pubDate>Sun, 30 Mar 2008 12:06:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[C++]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blogpost.am9.ru/?p=14</guid>
		<description><![CDATA[Мне достаточно часто необходимо переключаться между H и CPP файлами в процессе разработки. На работе обычно у меня стоит Visual Assist X, для которого это одна из многих опций. Но вот понадобилось сделать тоже самое, но без Visual Assist X, борьба за использование только лицензионного ПО. В 2005 студии есть набор макросов,один из которых умеет [...]]]></description>
			<content:encoded><![CDATA[<p>Мне достаточно часто необходимо переключаться между H и CPP файлами в процессе разработки. На работе обычно у меня стоит <a href="http://www.wholetomato.com/">Visual Assist X</a>, для которого это одна из многих опций. Но вот понадобилось сделать тоже самое, но без Visual Assist X, борьба за использование только лицензионного ПО. В 2005 студии есть набор макросов,один из которых умеет переключаться между H и CPP, а вот в 2003 не нашел. Поискал в интернете и нашел этот макрос.</p>
<pre class="vb">&nbsp;
    <span style="color: #b1b100;">Sub</span> GetFriendFile<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #808080;">'DESCRIPTION: Opens the corresponding .h / .cpp file</span>
        <span style="color: #b1b100;">Dim</span> currentFileName <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">String</span>
        <span style="color: #b1b100;">Dim</span> newFileName <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">String</span>
        currentFileName = Application.<span style="color: #66cc66;">ActiveDocument</span>.<span style="color: #66cc66;">FullName</span>
        newFileName = <span style="color: #ff0000;">&quot;&quot;</span>
&nbsp;
        <span style="color: #b1b100;">If</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">UCase</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">Right</span><span style="color: #66cc66;">&#40;</span>currentFileName, <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> = <span style="color: #ff0000;">&quot;.H&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">Then</span>
            newFileName = <span style="color: #b1b100;">Left</span><span style="color: #66cc66;">&#40;</span>currentFileName, <span style="color: #b1b100;">Len</span><span style="color: #66cc66;">&#40;</span>currentFileName<span style="color: #66cc66;">&#41;</span> - <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #ff0000;">&quot;.CPP&quot;</span>
        <span style="color: #b1b100;">ElseIf</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">UCase</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">Right</span><span style="color: #66cc66;">&#40;</span>currentFileName, <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> = <span style="color: #ff0000;">&quot;.CPP&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">Then</span>
            newFileName = <span style="color: #b1b100;">Left</span><span style="color: #66cc66;">&#40;</span>currentFileName, <span style="color: #b1b100;">Len</span><span style="color: #66cc66;">&#40;</span>currentFileName<span style="color: #66cc66;">&#41;</span> - <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #ff0000;">&quot;.H&quot;</span>
        <span style="color: #b1b100;">End</span> <span style="color: #b1b100;">If</span>
&nbsp;
        <span style="color: #b1b100;">If</span> newFileName &lt;&gt; <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #b1b100;">Then</span> Application.<span style="color: #66cc66;">Documents</span>.<span style="color: #b1b100;">Open</span><span style="color: #66cc66;">&#40;</span>newFileName<span style="color: #66cc66;">&#41;</span>
&nbsp;
    <span style="color: #b1b100;">End</span> <span style="color: #b1b100;">Sub</span>
&nbsp;</pre>
<p>Для того чтобы его использовать идете в Tools | Macros | Macros IDE появится новое окно в котором будет открыт MyMacros проект. Добавьте новый модуль, назовите его скажем <i>Switch2cpp</i>. И далее вставьте в него функцию  <i>GetFriendFile</i>, сохраните и затем назначьте <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D1%88">сочетание клавиш.</a></p>
<p> Для этого выберите Tools|Options|Environment|Keyboard и там выберите из лист бокса Macros.MyMacros.Switch2cpp.GetFriendFile и сочетание клавиш, которые будут выполнять данный макрос, после этого не забудьте нажать кнопку Assign - наслаждайтесь.</p>
<p>Материал испльзуемый при написании поста:</p>
<ul>
<li><a href="http://www.codeguru.com/cpp/v-s/devstudio_macros/article.php/c3145/">Get Friend File</a></li>
<li><a href="http://www.alteridem.net/2008/02/26/visual-studio-macro-to-switch-between-cpp-and-h-files/">Visual Studio Macro to switch between CPP and H files</a></li>
<li><a href="http://www.rsdn.ru/forum/message/58106.1.aspx">Использование новой IDE VS7</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogpost.am9.ru/?feed=rss2&amp;p=14</wfw:commentRss>
		</item>
		<item>
		<title>Sequence diagram editor</title>
		<link>http://blogpost.am9.ru/?p=13</link>
		<comments>http://blogpost.am9.ru/?p=13#comments</comments>
		<pubDate>Wed, 12 Mar 2008 06:54:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blogpost.am9.ru/?p=13</guid>
		<description><![CDATA[Вчера нужно было быстренько нарисовать sequence diagram для участка кода и я нашел достаточно интересную програмку Quick Sequence Diagram Editor. Программа интересна тем, что имеет командную строку и интерпритатор, вводишь правильную комманду и сразу видишь результат. Пример кода (взят с оф. сайта):
&#160;
&#160;
bfs:BFS&#91;a&#93;
/queue:FIFO
someNode:Node
node:Node
adjList:List
adj:Node
&#160;
bfs:queue.new
bfs:someNode.setLevel&#40;0&#41;
bfs:queue.insert&#40;someNode&#41;
&#91;c:loop while queue != &#40;&#41;&#93;
  bfs:node=queue.remove&#40;&#41;
  bfs:level=node.getLevel&#40;&#41;
  bfs:adjList=node.getAdjacentNodes&#40;&#41;
  &#91;c:loop 0 [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера нужно было быстренько нарисовать <a href="http://en.wikipedia.org/wiki/Sequence_diagram">sequence diagram</a> для участка кода и я нашел достаточно интересную програмку <a href="http://sdedit.sourceforge.net/example/index.html">Quick Sequence Diagram Editor</a>. Программа интересна тем, что имеет командную строку и интерпритатор, вводишь правильную комманду и сразу видишь результат. Пример кода (взят с оф. сайта):</p>
<pre class="cpp">&nbsp;
&nbsp;
bfs:BFS<span style="color: #000000;">&#91;</span>a<span style="color: #000000;">&#93;</span>
/queue:FIFO
someNode:Node
node:Node
adjList:List
adj:Node
&nbsp;
bfs:queue.<span style="color: #0000dd;">new</span>
bfs:someNode.<span style="color: #00eeff;">setLevel</span><span style="color: #000000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #000000;">&#41;</span>
bfs:queue.<span style="color: #00eeff;">insert</span><span style="color: #000000;">&#40;</span>someNode<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#91;</span>c:loop <span style="color: #0000ff;">while</span> queue != <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
  bfs:node=queue.<span style="color: #0000dd;">remove</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
  bfs:level=node.<span style="color: #00eeff;">getLevel</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
  bfs:adjList=node.<span style="color: #00eeff;">getAdjacentNodes</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
  <span style="color: #000000;">&#91;</span>c:loop <span style="color: #0000dd;">0</span> &lt;= i &lt; <span style="color: #339900;">#adjList]</span>
    bfs:adj=adjList.<span style="color: #00eeff;">get</span><span style="color: #000000;">&#40;</span>i<span style="color: #000000;">&#41;</span>
    bfs:nodeLevel=adj.<span style="color: #00eeff;">getLevel</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#91;</span>c:alt nodeLevel IS NOT defined<span style="color: #000000;">&#93;</span>
      bfs:adj.<span style="color: #00eeff;">setLevel</span><span style="color: #000000;">&#40;</span>level<span style="color: #0000dd;">+1</span><span style="color: #000000;">&#41;</span>
      bfs:queue.<span style="color: #00eeff;">insert</span><span style="color: #000000;">&#40;</span>adj<span style="color: #000000;">&#41;</span>
      --<span style="color: #000000;">&#91;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&#93;</span>
      bfs:nothing to <span style="color: #0000ff;">do</span>
    <span style="color: #000000;">&#91;</span>/c<span style="color: #000000;">&#93;</span>
  <span style="color: #000000;">&#91;</span>/c<span style="color: #000000;">&#93;</span>
<span style="color: #000000;">&#91;</span>/c<span style="color: #000000;">&#93;</span>
bfs:queue.<span style="color: #00eeff;">destroy</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
&nbsp;</pre>
<p>и результат</p>
<p><img src="http://sdedit.sourceforge.net/images/bfs.png" alt="Results"></p>
]]></content:encoded>
			<wfw:commentRss>http://blogpost.am9.ru/?feed=rss2&amp;p=13</wfw:commentRss>
		</item>
		<item>
		<title>По воле рока, так случилось, иль MFC CMap vs STL std::map и stdext::hash_map</title>
		<link>http://blogpost.am9.ru/?p=10</link>
		<comments>http://blogpost.am9.ru/?p=10#comments</comments>
		<pubDate>Mon, 28 Jan 2008 10:37:11 +0000</pubDate>
		<dc:creator>pigeon</dc:creator>
		
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://blogpost.am9.ru/?p=10</guid>
		<description><![CDATA[На работе в проекте используется MFC, причем везде и много. При запуске иногда программа серьйозно притормаживает. Натравить профайлер не могу, BoundChecker просто  загнулся, а остальные я не пробовал, т.к руководству это не нужно и, соответственно, времени отпрофайлить мне никто не даст. Так вот, найдя проблемный участок кода, я обнаружил, что там происходит вставка элементов [...]]]></description>
			<content:encoded><![CDATA[<p>На работе в проекте используется MFC, причем везде и много. При запуске иногда программа серьйозно притормаживает. Натравить профайлер не могу, BoundChecker просто  загнулся, а остальные я не пробовал, т.к руководству это не нужно и, соответственно, времени отпрофайлить мне никто не даст. Так вот, найдя проблемный участок кода, я обнаружил, что там происходит вставка элементов в CMap (класс MFC реализованный с помощью <a href="http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0">хеш-массива</a> ) , причем при увеличении кол-ва  элементов, время на вставку возростало. Попрошу извинить меня за предложения типа "при увеличении кол-ва  элементов, время на вставку возростало" , из отсутствия профайлера я более точно сказать не могу, в проекте все замерял на глаз. Но эти наблюдения сподвигли меня написать маленький тест по сравнению производительности STL и MFC.</p>
<p> Тест достаточно простой - вставка элементов в CMap, std::map и stdext::hash_map. С помощью кода ниже я нагенерировал неповторяющиеся последовательноси символов</p>
<pre class="cpp">&nbsp;
<span style="color: #0000ff;">void</span> GenerateSequence<span style="color: #000000;">&#40;</span><span style="color: #0000ff;">const</span> std::<span style="color: #00eeff;">string</span>&amp; file_name,<span style="color: #0000ff;">int</span> nNumCh<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #0000ff;">if</span><span style="color: #000000;">&#40;</span>nNumCh&amp;gt;<span style="color: #0000dd;">16</span><span style="color: #000000;">&#41;</span>
		<span style="color: #0000ff;">return</span>;
 	<span style="color: #0000ff;">char</span> buf<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span>=<span style="color: #666666;">&quot;0123456789abcdefg&quot;</span>;
	std::<span style="color: #00eeff;">string</span> sRealStr<span style="color: #000000;">&#40;</span>buf,buf+nNumCh<span style="color: #000000;">&#41;</span>;
 	<span style="color: #0000ff;">int</span> nCount=<span style="color: #0000dd;">0</span>;
	std::<span style="color: #00eeff;">ofstream</span> f<span style="color: #000000;">&#40;</span>file_name.<span style="color: #00eeff;">c_str</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>,std::<span style="color: #00eeff;">ios</span>::<span style="color: #00eeff;">out</span>|std::<span style="color: #00eeff;">ios</span>::<span style="color: #00eeff;">trunc</span><span style="color: #000000;">&#41;</span>;
&nbsp;
	<span style="color: #0000ff;">while</span><span style="color: #000000;">&#40;</span>std::<span style="color: #00eeff;">next_permutation</span><span style="color: #000000;">&#40;</span>sRealStr.<span style="color: #00eeff;">begin</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>,sRealStr.<span style="color: #00eeff;">end</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
 	<span style="color: #000000;">&#123;</span>
 		++nCount;
 		f&lt;&lt;<span style="color: #666666;">&quot; &quot;</span>&lt;&lt;sRealStr;
 		<span style="color: #0000ff;">if</span><span style="color: #000000;">&#40;</span>!<span style="color: #000000;">&#40;</span>nCount%<span style="color: #0000dd;">15</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
 			f&lt;&lt;std::<span style="color: #00eeff;">endl</span>;
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;</pre>
<p>тестировал на последовательностях из 6,7,8 и 9 символов, соответственно 720, 5040, 40320 и 362880 элементов. Результаты приведены ниже в виде таблицы и диаграммы, время в секундах</p>
<pre>
<TABLE FRAME=VOID CELLSPACING=0 BORDER=1>
	<TBODY>
		<TR>
			<TD WIDTH=75 HEIGHT=19 ALIGN=LEFT><BR></TD>
			<TD WIDTH=112 ALIGN=LEFT >STL map</TD>
			<TD WIDTH=106 ALIGN=LEFT >MFC map</TD>
			<TD WIDTH=140 ALIGN=LEFT >Initialized MFC map</TD>
			<TD WIDTH=126 ALIGN=LEFT >STL hashmap</TD>
		</TR>
		<TR>
			<TD HEIGHT=17 ALIGN=RIGHT SDVAL="719" SDNUM="1033;">719</TD>
			<TD ALIGN=RIGHT >0.0006866790</TD>
			<TD ALIGN=RIGHT >0.0004520130</TD>
			<TD ALIGN=RIGHT >0.0003318860</TD>
			<TD ALIGN=RIGHT >0.0004151370</TD>
		</TR>
		<TR>
			<TD HEIGHT=17 ALIGN=RIGHT SDVAL="5039" SDNUM="1033;">5039</TD>
			<TD ALIGN=RIGHT>0.00598372</TD>
			<TD ALIGN=RIGHT>0.00580493</TD>
			<TD ALIGN=RIGHT>0.00249222</TD>
			<TD ALIGN=RIGHT>0.00312610</TD>
		</TR>
		<TR>
			<TD HEIGHT=17 ALIGN=RIGHT SDVAL="40319" SDNUM="1033;">40319</TD>
			<TD ALIGN=RIGHT>0.07176890</TD>
			<TD ALIGN=RIGHT>0.69810400</TD>
			<TD ALIGN=RIGHT>0.02297470</TD>
			<TD ALIGN=RIGHT>0.02608380</TD>
		</TR>
		<TR>
			<TD HEIGHT=17 ALIGN=RIGHT SDVAL="362879" SDNUM="1033;">362879</TD>
			<TD ALIGN=RIGHT >0.77434000</TD>
			<TD ALIGN=RIGHT >241.62900000</TD>
			<TD ALIGN=RIGHT >0.24009400</TD>
			<TD ALIGN=RIGHT >11.61740000</TD>
		</TR>
	</TBODY>
</TABLE>
</pre>
<p><img src="http://blogpost.am9.ru/wp-content/uploads/2008/01/chart1.PNG" alt="Results"></p>
<p>Пару слов о легенде, думаю не совсем понятно, что такое <i>Initialized MFC map</i> - это перед использованием <i>CMap</i> контейнер инициализируется количеством элементов которые в него вставят.После этого теста многое стало на свои места - мы используем тот случай, который имеет самый высокий столбец на графике. Вот так вот ...</p>
]]></content:encoded>
			<wfw:commentRss>http://blogpost.am9.ru/?feed=rss2&amp;p=10</wfw:commentRss>
		</item>
		<item>
		<title>boost::serialization - бинарная сериализация</title>
		<link>http://blogpost.am9.ru/?p=8</link>
		<comments>http://blogpost.am9.ru/?p=8#comments</comments>
		<pubDate>Thu, 17 Jan 2008 21:08:09 +0000</pubDate>
		<dc:creator>pigeon</dc:creator>
		
		<category><![CDATA[C++]]></category>

		<category><![CDATA[boost]]></category>

		<category><![CDATA[cpp]]></category>

		<category><![CDATA[serialization]]></category>

		<guid isPermaLink="false">http://blogpost.am9.ru/?p=8</guid>
		<description><![CDATA[Довольно часто приходться сериализовать\десериализовать объекты например при передачи их по сети. Вместо того, чтобы передавать MessageID и потом, расспознав его, принимать остальную часть сообщения, можно использовать библиотеку которая будет выполнять эту работу сама. Одной из библиотек котороя обладает вышеописанной функциональностью является boost::serialization По ссылке находится вполне исчерпывающая документация, но я столкнулся со сложностью и внятного [...]]]></description>
			<content:encoded><![CDATA[<p>Довольно часто приходться сериализовать\десериализовать объекты например при передачи их по сети. Вместо того, чтобы передавать <i>MessageID</i> и потом, расспознав его, принимать остальную часть сообщения, можно использовать библиотеку которая будет выполнять эту работу сама. Одной из библиотек котороя обладает вышеописанной функциональностью является <a href="http://boost.org/libs/serialization/doc/index.html">boost::serialization</a> По ссылке находится вполне исчерпывающая документация, но я столкнулся со сложностью и внятного ответа в документации не нашел. Проблема была в следующем, хотелось бы иметь возможность передавать по сети объекты наследованные от какого-нибудь базового класса и затем десериализовать их через указатель на базовый класс. Например:</p>
<pre class="cpp">&nbsp;
<span style="color: #0000ff;">class</span> Base
<span style="color: #000000;">&#123;</span>
<span style="color: #000000;">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">class</span> Derived:<span style="color: #0000ff;">public</span> Base
<span style="color: #000000;">&#123;</span>
  <span style="color: #0000ff;">int</span> nValue;
<span style="color: #000000;">&#125;</span>;
&nbsp;
<span style="color: #ff0000;">//....</span>
&nbsp;
<span style="color: #0000ff;">void</span> save<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  Base* pDerived = <span style="color: #0000dd;">new</span> Derived;
  binarystream_out &lt;&lt; pDerived;
<span style="color: #000000;">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">void</span> load<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  Base* pDerived = <span style="color: #0000dd;">0</span>;
  binarystream_in &gt;&gt; pDerived;
<span style="color: #000000;">&#125;</span>;
&nbsp;</pre>
<p>Проблема заключается в том, что при десериализации член <i>nValue</i> класса <i>Derived</i> не будет корректно десериализован, он будет содержать какой-то мусор. В примерах к библиотеке эта проблема решается оригинальным способом, первый раз десериализовать объект явно указав его тип.</p>
<pre class="cpp">&nbsp;
<span style="color: #0000ff;">void</span> load<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  Derived* pDerived ;
  binarystream_in &gt;&gt; pDerived;
  <span style="color: #ff0000;">//после этого класс регистрируется  и ниже в коде можна вызывать</span>
  Base* pDerived2;
  binarystream_in &gt;&gt; pDerived2;
  <span style="color: #ff0000;">//десериализация проходит корректно</span>
<span style="color: #000000;">&#125;</span>;
&nbsp;</pre>
<p>Наверное нелишним будет упомянуть, что я столкнулся с этой же ситуацией в MFC и долго просидел в дебагере пока понял что не так. </p>
<p>Проблема решается достаточно просто, достаточно зарегистрировать класс в <i>input stream</i>.</p>
<pre class="cpp">&nbsp;
<span style="color: #0000ff;">void</span> load<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  Base* pDerived ;
  binarystream_in.<span style="color: #00eeff;">register_type</span><span style="color: #000000;">&#40;</span>static_cast&lt;Derived*&gt;<span style="color: #000000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
  binarystream_in &gt;&gt; pDerived;
<span style="color: #000000;">&#125;</span>;
&nbsp;</pre>
</p>
<p><a href="http://blogpost.am9.ru/wp-content/uploads/2008/01/boost_serialization.cpp">boost::serialization example</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogpost.am9.ru/?feed=rss2&amp;p=8</wfw:commentRss>
		</item>
	</channel>
</rss>
