<?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"
	>

<channel>
	<title>Chaos in Harmony</title>
	<atom:link href="http://blogs.ungrund.org/xio/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.ungrund.org/xio</link>
	<description>Unfinished symphony of Life in an artificial world of Technology</description>
	<pubDate>Tue, 09 Jun 2009 19:51:19 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>ru</language>
			<item>
		<title>Автоматизация резервного копирования rdiff-backup</title>
		<link>http://blogs.ungrund.org/xio/?p=97</link>
		<comments>http://blogs.ungrund.org/xio/?p=97#comments</comments>
		<pubDate>Fri, 20 Feb 2009 22:26:46 +0000</pubDate>
		<dc:creator>xio</dc:creator>
		
		<category><![CDATA[SA]]></category>

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

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

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

		<category><![CDATA[rdiff-backup]]></category>

		<guid isPermaLink="false">http://blogs.ungrund.org/xio/?p=97</guid>
		<description><![CDATA[Стоит задача автоматизации инкрементального резервного копирования системных файлов и пользовательских данных на сервере и ряде клиентов с созданием LVM-снэпшотов, где это возможно.
Существует огромное количество решений для backup&#8217;а, с внушительными каталогами которых можно ознакомиться, например, по адресам:

http://www.debianhelp.co.uk/backuptools1.htm
http://www.debianhelp.co.uk/backuptools.htm

Мы же будем использовать rdiff-backup как идеальный (IMHO, of course) компромис между логической простотой, гибкостью и функциональностью для small-medium инсталляций.
Основная [...]]]></description>
			<content:encoded><![CDATA[<p>Стоит задача автоматизации инкрементального резервного копирования системных файлов и пользовательских данных на сервере и ряде клиентов с созданием LVM-снэпшотов, где это возможно.</p>
<p>Существует огромное количество решений для backup&#8217;а, с внушительными каталогами которых можно ознакомиться, например, по адресам:</p>
<ul>
<li>http://www.debianhelp.co.uk/backuptools1.htm</li>
<li>http://www.debianhelp.co.uk/backuptools.htm</li>
</ul>
<p>Мы же будем использовать <code>rdiff-backup</code> как идеальный (IMHO, of course) компромис между логической простотой, гибкостью и функциональностью для small-medium инсталляций.</p>
<p>Основная идея заключается в следующем: по расписанию на машинах вызывается скрипт, который, в соответствии с настройками в fstab-like файле конфигурации совершает инкрементальное резервное копирование указанных <em>разделов/блочных устройств</em> в локальный или удаленный каталог, предварительно создав LVM-снэпшот раздела (для тех случаев, где это возможно). Инкрементальное копирование означает сохранение лишь различий между двумя backup&#8217;ами, что значительно сокращает требования к времени и ресурсам дисковой подсистемы.</p>
<p>Стоит отметить, что основное предназначение приведенных скриптов &#8212; облегчить работу именно с блочными устройствами, поскольку с просто файлами/каталогами rdiff-backup отлично умеет разбираться самостоятельно. Поэтому, для случая, когда требуется бэкап лишь нескольких директорий или файлов, приведенные ниже скрипты являются излишними.</p>
<p><span id="more-97"></span></p>
<h3>Шаг 1: установка</h3>
<p>На всех машинах, которые хотим вовлечь в процесс бэкапа, устанавливаем <a href="http://www.nongnu.org/rdiff-backup/">rdiff-backup</a>.  В Ubuntu Intrepid сейчас доступна версия 1.1.16, в Debian Lenny &#8212; 1.2.5, поэтому, если планируется использовать сервер с Debian&#8217;ом, а клиентов на Убунте, необходимо в последней установить rdiff-backup из <a href="https://launchpad.net/~rdiff-backup-pkgs/+archive/ppa">PPA</a>. Иначе, из-за несовпадения мажорных версий, не будет работать режим удаленного копирования.</p>
<p>Какой-то дополнительной настройки rdiff-backup не требует, могу лишь порекомендовать почитать <code>`man rdiff-backup`</code> и документацию в <code>/usr/share/doc/rdiff-backup</code>.</p>
<h3>Шаг 2: backuptab</h3>
<p>Резервное копирование будет организовано централизованно (за небольшим исключением, о котором позже).</p>
<p>В файле <code>/etc/backuptab</code> пропишем &#8220;план&#8221; бэкапа в следующем формате:</p>

<div class="wp_syntax"><div class="code"><pre># &lt;Block device&gt;\t+&lt;Target backup directory&gt;\t+&lt;Increments keep time&gt;\t+&lt;snapshot&gt;
/dev/orion/betelgeuse	/srv/backup/betelgeuse		1W	1
/dev/sda1		/srv/backup/betelgeuse/boot	1W	0
/dev/orion/data		/srv/backup/data		1W	1</pre></div></div>

<p>Т.е. это разделенные одним или несколькими табами:</p>
<ul>
<li><b>Исходное блочное устройство</b>,</li>
<li><b>Целевая директория</b>, в которую будет производится копирование,</li>
<li><b>Максимальный срок хранения инкрементальной информации rdiff-backup</b>,</li>
<li><b>Флаг, указывающий, создавать ли снэпшот перед копированием раздела</b> (что, естественно, применимо только к LVM logical volumes).</li>
</ul>
<h3>Шаг 3: скрипты</h3>
<p>Этот файл будет читаться самописным скриптом, который бесхитростно назовем <a href="http://trac.ungrund.org/dev/browser/adm/backup/backup.sh"<code>backup.sh</code></a>.</p>
<p>Данный скрипт читает наш <code>/etc/backuptab</code>, пропускает комментарии и пустые строки и поочередно для каждой строки вызывает worker-скрипт с соответствующими параметрами.  Последний делает всю основную работу по созданию снэпшотов, монтированию устройств, вызовам rdiff-backup, etc. Исходник: <a href="http://trac.ungrund.org/dev/browser/adm/backup/backup-worker.sh"><code>backup-worker.sh</code></a>.</p>
<p>Оба этих скрипта нужно разместить где-нибудь в PATH, я кладу их в <code>/usr/local/sbin</code>, этот же путь является значением по умолчанию.  Команда для экспорта <code>backup.sh</code> и <code>backup-worker.sh</code> из SVN @ ungrund.org:</p>

<div class="wp_syntax"><div class="code"><pre># svn export --force http://svn.ungrund.org/dev/adm/backup /usr/local/sbin</pre></div></div>

<p>При изменении имени или пути двух файлов: <code>backuptab</code> и <code>backup-worker.sh</code> необходимо переопределить значения по умолчанию в главном скрипте <code>backup.sh</code>.</p>
<h3>Шаг 4: cron</h3>
<p>Теперь осталось добавить в крон вызов <code>backup.sh</code> по расписанию:</p>

<div class="wp_syntax"><div class="code"><pre>0  3    * * *   root    /usr/local/sbin/backup.sh</pre></div></div>

<h3>Шаг 5: клиенты</h3>
<p>Бэкап с клиентских машин можно осуществлять по инициативе либо сервера, либо самих клиентов.  Я выбрал второй вариант, потому что:</p>
<ul>
<li>В первом случае сильно усложняется процесс создания LVM-snapshot&#8217;ов;</li>
<li>Клиенты могут самостоятельно выбирать время бэкапа, что, на мой взгляд, просто удобнее.</li>
</ul>
<p>Записи в <code>backuptab</code> будут выглядеть примерно так:</p>

<div class="wp_syntax"><div class="code"><pre>/dev/blacksun/root	betelgeuse.ori::/srv/backup/blacksun		1W    1
/dev/blacksun/home	betelgeuse.ori::/srv/backup/blacksun/home	1W    1</pre></div></div>

<p>Где &#8216;::&#8217; разделено имя сервера и каталог на нем, куда будет производится копирование.</p>
<p>Крон аналогично серверу.</p>
<p>Да, рут с клиента должен иметь возможность логиниться по ssh на сервер по открытому ключу (или иным способом, но без непосредственного ввода пароля, что, естественно, критично для автоматизации). В простейшем случае достаточно будет на сервере изменить значение <code>PermitRootLogin</code> в файле <code>/etc/ssh/sshd_config</code> на <code>without-password</code> и добавить ключ с клиента командой:</p>

<div class="wp_syntax"><div class="code"><pre># cat /root/.ssh/id_rsa.pub <PIPE> ssh &lt;servername&gt; 'cat - &gt;&gt; /root/.ssh/authorized_keys'</pre></div></div>

<h3>Шаг 6: Оконец</h3>
<p>По времени: первичный локальный бэкап 500Gb занимает порядка четырех часов.  Последующие вызовы сокращают время до нескольких минут, в зависимости от количества файлов (AFAIU).  По сетке процесс копирования затягивается в разы, так что будьте готовы.</p>
<p>That&#8217;s it!</p>
<p>Комментарии приветствуются.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ungrund.org/xio/?feed=rss2&amp;p=97</wfw:commentRss>
		</item>
		<item>
		<title>xoria256: vim color scheme</title>
		<link>http://blogs.ungrund.org/xio/?p=96</link>
		<comments>http://blogs.ungrund.org/xio/?p=96#comments</comments>
		<pubDate>Mon, 26 Jan 2009 17:14:23 +0000</pubDate>
		<dc:creator>xio</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

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

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

		<guid isPermaLink="false">http://blogs.ungrund.org/xio/?p=96</guid>
		<description><![CDATA[Вчера таки довел до ума схему подсветки синтаксиса для vim/gvim &#8220;xoria256&#8243;.
Изначально была идея научить схему &#8220;moria&#8221;, которая мне в свое время больше всех нравилась, работать с 256-цветными терминалами.  Постепенно, вместе с моими доработками, это оформилось в самостоятельный скрипт, примерно соответствующий моим представлениям о том, как должен подсвечиваться код.
Основная фишка &#8212; в мягком и гармоничном [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера таки довел до ума схему подсветки синтаксиса для vim/gvim &#8220;xoria256&#8243;.</p>
<p>Изначально была идея научить схему &#8220;moria&#8221;, которая мне в свое время больше всех нравилась, работать с 256-цветными терминалами.  Постепенно, вместе с моими доработками, это оформилось в самостоятельный скрипт, примерно соответствующий моим представлениям о том, как должен подсвечиваться код.</p>
<p>Основная фишка &#8212; в мягком и гармоничном сочетании цветов, некоторой &#8220;естественности&#8221; подсветки синтаксиса: скорее всего, это сила привычки, но мне трудно, например, представить стринги не желтыми, а statement&#8217;ы не синими (как в некоторых IDE). Соответственно, под это подбирались остальные сочетания.</p>
<p>Результат трудов на http://www.vim.org/scripts/script.php?script_id=2140. Там же инструкции по установке, ссылки на svn и скриншоты.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ungrund.org/xio/?feed=rss2&amp;p=96</wfw:commentRss>
		</item>
		<item>
		<title>Башекод: наблюдение за логами</title>
		<link>http://blogs.ungrund.org/xio/?p=94</link>
		<comments>http://blogs.ungrund.org/xio/?p=94#comments</comments>
		<pubDate>Thu, 22 Jan 2009 13:22:32 +0000</pubDate>
		<dc:creator>xio</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

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

		<guid isPermaLink="false">http://blogs.ungrund.org/xio/?p=94</guid>
		<description><![CDATA[Утилита наблюдает за указанным файлом.  Когда обнаруживается указанная строка, шлет письмо на определенный имеил и/или выполняет указанную команду, на stdin которой подается найденная строка.
Public domain!  
http://trac.ungrund.org/dev/browser/adm/logwatch/logwatch.sh
Пример использования:

$ logwatch.sh -f /var/log/apache2/access.log -c hd -m root@ungrund.org -p 2 -q POST

Наблюдает за файлом /var/log/apache2/access.log с интервалом в 2 секунды, ищет строки с вхождением &#8220;POST&#8221;, при нахождении [...]]]></description>
			<content:encoded><![CDATA[<p>Утилита наблюдает за указанным файлом.  Когда обнаруживается указанная строка, шлет письмо на определенный имеил и/или выполняет указанную команду, на stdin которой подается найденная строка.</p>
<p>Public domain! <img src='http://blogs.ungrund.org/xio/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>http://trac.ungrund.org/dev/browser/adm/logwatch/logwatch.sh</p>
<p>Пример использования:</p>

<div class="wp_syntax"><div class="code"><pre>$ logwatch.sh -f /var/log/apache2/access.log -c hd -m root@ungrund.org -p 2 -q POST</pre></div></div>

<p>Наблюдает за файлом <code>/var/log/apache2/access.log</code> с интервалом в 2 секунды, ищет строки с вхождением &#8220;POST&#8221;, при нахождении шлет письмо руту, на stdout выдает hex-dump найденной строки.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ungrund.org/xio/?feed=rss2&amp;p=94</wfw:commentRss>
		</item>
		<item>
		<title>Здравствуйте, я &#8212; Махатма Ганди</title>
		<link>http://blogs.ungrund.org/xio/?p=93</link>
		<comments>http://blogs.ungrund.org/xio/?p=93#comments</comments>
		<pubDate>Wed, 03 Dec 2008 12:16:26 +0000</pubDate>
		<dc:creator>xio</dc:creator>
		
		<category><![CDATA[Funny]]></category>

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

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

		<guid isPermaLink="false">http://blogs.ungrund.org/xio/?p=93</guid>
		<description><![CDATA[Крайне занятный тест относительно ваших реальных политических позиций: http://www.politicalcompass.org/
По результатам ответов характеризует вас по двум осям: экономической (left/right) и социальной (libertarian/authoritarian):
(под катом, но рекомендую)


Какова моя истинная сущность:

Для сравнения с другими деятелями:

]]></description>
			<content:encoded><![CDATA[<p>Крайне занятный тест относительно ваших реальных политических позиций: http://www.politicalcompass.org/</p>
<p>По результатам ответов характеризует вас по двум осям: экономической (left/right) и социальной (libertarian/authoritarian):</p>
<p><i>(под катом, но рекомендую)</i></p>
<p><span id="more-93"></span></p>
<p><img src="http://blogs.ungrund.org/xio/wp-content/uploads/2008/12/bothaxes.gif" alt="Political compas axes" title="bothaxes" /></p>
<p>Какова моя истинная сущность:</p>
<p><img src='http://www.politicalcompass.org/facebook/pcgraphpng.php?ec=-7.00&#038;soc=-1.74' alt='xio political position' class='alignnone' /></p>
<p>Для сравнения с другими деятелями:</p>
<p><img src="http://blogs.ungrund.org/xio/wp-content/uploads/2008/12/axeswithnames.gif" alt="Political persons arranged by axes" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ungrund.org/xio/?feed=rss2&amp;p=93</wfw:commentRss>
		</item>
		<item>
		<title>Education in South Korea</title>
		<link>http://blogs.ungrund.org/xio/?p=89</link>
		<comments>http://blogs.ungrund.org/xio/?p=89#comments</comments>
		<pubDate>Thu, 13 Nov 2008 05:18:18 +0000</pubDate>
		<dc:creator>xio</dc:creator>
		
		<category><![CDATA[Korean]]></category>

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

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

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

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

		<guid isPermaLink="false">http://blogs.ungrund.org/xio/?p=89</guid>
		<description><![CDATA[Написал свою первую статью в русскую Википедию, http://ru.wikipedia.org/wiki/Образование_в_Южной_Корее.  По большей части это перевод англоязычной статьи оттуда же, несколько дополненный информацией из ряда других источников.
И, кстати, переводить оказалось гораздо сложнее, чем я ожидал, вероятно, в силу обилия энциклопедических терминов и оборотов речи, с которыми не был знаком ранее.
Очень интересно, как будет развиваться.
]]></description>
			<content:encoded><![CDATA[<p>Написал свою первую статью в русскую Википедию, <a href="http://ru.wikipedia.org/wiki/Образование_в_Южной_Корее">http://ru.wikipedia.org/wiki/Образование_в_Южной_Корее</a>.  По большей части это перевод англоязычной статьи оттуда же, несколько дополненный информацией из ряда других источников.</p>
<p>И, кстати, переводить оказалось гораздо сложнее, чем я ожидал, вероятно, в силу обилия энциклопедических терминов и оборотов речи, с которыми не был знаком ранее.</p>
<p>Очень интересно, как будет развиваться.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ungrund.org/xio/?feed=rss2&amp;p=89</wfw:commentRss>
		</item>
		<item>
		<title>Build Anything (rus)</title>
		<link>http://blogs.ungrund.org/xio/?p=87</link>
		<comments>http://blogs.ungrund.org/xio/?p=87#comments</comments>
		<pubDate>Sat, 08 Nov 2008 11:46:10 +0000</pubDate>
		<dc:creator>xio</dc:creator>
		
		<category><![CDATA[Personal Development]]></category>

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

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

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

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

		<guid isPermaLink="false">http://blogs.ungrund.org/xio/?p=87</guid>
		<description><![CDATA[Из случайно подсмотренной дискуссии:
ded_mitya> Самая прогрессивная идеология сейчас это по-моему, дауншифтинг.
aculeata> То есть, все-таки без космической навигации и термояда? И с кем жить: лешие, русалки, сирены и фавны требуют генной инженерии.
ded_mitya> Да нет, я думаю, это просто кратхайшая дорога к термояду космосу и наядам. С человеком, которому не нужны Феррари, дом в три этажа и [...]]]></description>
			<content:encoded><![CDATA[<p>Из случайно подсмотренной <a href="http://lj.rossia.org/users/aculeata/951409.html?thread=9761137#t9761137">дискуссии</a>:</p>
<blockquote><p><i>ded_mitya></i> Самая прогрессивная идеология сейчас это по-моему, дауншифтинг.</p>
<p><i>aculeata></i> То есть, все-таки без космической навигации и термояда? И с кем жить: лешие, русалки, сирены и фавны требуют генной инженерии.</p>
<p><i>ded_mitya></i> Да нет, я думаю, это просто кратхайшая дорога к термояду космосу и наядам. <em>С человеком, которому не нужны Феррари, дом в три этажа и плазменный телевизор во вся стену, ничего сделать нельзя (ну максимум &#8212; уничтожить физически).</em></p></blockquote>
<p>Понимаете? Физик-экспериментатор ded_mitya здесь говорит о способе преодоления финансового рабства, по сути — о здоровом <em>мотивационном ядре</em> как противоположности мотивации потреблятской.</p>
<p>Следующий момент: мне очень вовремя попалась на глаза статья Michael Lopp&#8217;а <a href="http://www.randsinrepose.com/archives/2008/11/04/build_anything.html">&#8220;Build Anything&#8221;</a>, перевод которой выложен ниже в этом посте. Вообще говоря, в ней идет речь о творческой инженерной способности, но она также может быть интересна как один из взглядов, как еще одна &#8220;имха&#8221; на природу креативности и человеческой деятельности вообще. Откуда у человека берется <em>Воля</em> к действию? Решительность довести начатое до логического конца?</p>
<p>Фишка же в том, что <em>свободная от навязываемых ценностей личность</em> как раз и строится из мотивации (целеполагания), основанной на стремлении к нематериальным ценностям (то, о чем говорит ded_mitya), объединенной с интенцией к активности, потенцей, силой, которая как раз и описывается в данной статье.</p>
<p>Итак, капля в море номер n, оригинал <a href="http://www.randsinrepose.com/archives/2008/11/04/build_anything.html">по ссылке.</a></p>
<p><span id="more-87"></span></p>
<h3>Build Anything</h3>
<p>Как инженер, если вы хотите &#8220;отшить&#8221; кого-нибудь, кто спрашивает, сможете вы или нет справиться с определенной задачей (<i>&#8216;build a thing&#8217;</i>), просто скажите: &#8220;Имея достаточно времени, я могу создать что угодно&#8221;.</p>
<p>Это будет воспринято как увиливание от ответа, а о вас сложится мнение как о высокомерной особе.</p>
<p>При обсуждения расписания (<i>schedule</i>), такой ответ, в общем-то, не очень полезен. Вам потребуется время, чтобы объяснить ваши мысли вопрошающему, необходимо будет провести его через весь ваш процесс разработки — нужно иметь ясное представление о своих силах при обсуждении подобного рода вещей. Это хорошая возможность научиться, а не выставить себя придурком.</p>
<p>Тем не менее.</p>
<p>Имея достаточно времени, инженер может создать что угодно.</p>
<p>Я настроен оптимистично.</p>
<p>И я нанимаю оптимистов.</p>
<p>Как и в любой профессии, в разработке программного обеспечения могут быть заняты совершенно разные личности, но я хочу иметь у себя в штате оптимистов. Я также не ищу &#8220;Так-точно боев&#8221;; я заинтересован в тех, кто, когда их загоняют в угол и нацеливают им пистолет в голову, говорят: &#8220;Хуй с ним, как-нибудь выкарабкаемся&#8221;.</p>
<p>Такой тип оптимизма может содержаться в любых типах личностей, но когда становится по-настоящему жарко (<i>в оригинале — очень смешное выражение: &#8220;when the shit hits the fan&#8221;</i>), он проявляется в своей действительной полноте и тогда, благодаря ему, создается невозможное.</p>
<p>За два десятка лет работы в Силиконовой (<i>|| Кремниевой</i>) Долине, я счастлив констатировать тот факт, что она полна таких вот чокнутых оптимистов.  Это люди, которые:</p>
<ul>
<li>Тяжело работают;</li>
<li>Даже перевыполнив план, продолжают свой труд;</li>
<li>Всегда искренне готовы помочь друг другу (<i>Rampantly go out of their way to help each other</i>);</li>
<li>Имеют за спиной череду впечатляющих успехов.</li>
</ul>
<p>Естественно, ареал обитания таких людей не ограничивается ни Долиной, ни одной страной — они живут по всему миру, но сейчас я говорю именно про свою страну (<i>САСШ</i>).</p>
<p>Мы даже близко не находимся к решению той проблемы, в которую сами же себя и загнали. Я также не думаю, что большинство американцев полностью осознают всю серьезность финансового кризиса. Мы все искренне ждем какого-то чуда от Рождества, искажая суть праздника пустой надеждой (We<i>’re all fervently staring at Christmas, confusing the holiday spirit for hope</i>).</p>
<p>Тем не менее, я остаюсь оптимистом.</p>
<p>Вне зависимости от того, кто победит на выборах, остается вопрос тот же самый вопрос: &#8220;Самодостаточны ли мы, чтобы создавать самих себя? Можем ли мы заново сделать нашу страну местом, которое мы действительно уважаем?&#8221;</p>
<p>Да, мы можем (<i>&#8220;Yes, we can.&#8221; — лозунг избирательной кампании Обамы</i>).</p>
<p>Я живу на Западном побережье САСШ, которое является тем местом, куда отправлялись первые колонисты затем, чтобы самим быть в силах определять как они будут жить, но и вся остальная страна также построена на этой идее — мы сами выбираем, кем нам быть.</p>
<p>Сейчас я сижу вместе с капризными инженерами (<i>cranky engineers</i>) — чокнутыми оптимистами — и я надеюсь, что мы все разделяем этот дух оптимизма, потому что, well, имея достаточно времени, мы можем создать все, что угодно.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ungrund.org/xio/?feed=rss2&amp;p=87</wfw:commentRss>
		</item>
		<item>
		<title>Custom Korean Fonts in Ubuntu Linux</title>
		<link>http://blogs.ungrund.org/xio/?p=80</link>
		<comments>http://blogs.ungrund.org/xio/?p=80#comments</comments>
		<pubDate>Tue, 04 Nov 2008 16:31:21 +0000</pubDate>
		<dc:creator>xio</dc:creator>
		
		<category><![CDATA[Korean]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://blogs.ungrund.org/xio/?p=80</guid>
		<description><![CDATA[Как известно, существует 3 общепринятых названия для семейств шрифтов:

Пропорциональные с засечками, serif. Широко используются в типографии, где не присутствуют ограничения, связанные с низкой разрешающей способностью (DPI) отображающих устройств; в &#8220;электронных&#8221; материалах ими оформляются различные более-менее объемные статьи, руководства, тексты книг и т.д.
Пропорциональные без засечек, sans-serif. Используются в оформлении интерфейсов программ. Как считается, легче для восприятия [...]]]></description>
			<content:encoded><![CDATA[<p>Как известно, существует 3 общепринятых названия для семейств шрифтов:</p>
<ul>
<li>Пропорциональные с засечками, <em>serif</em>. Широко используются в типографии, где не присутствуют ограничения, связанные с низкой разрешающей способностью (<abbr title="Dots Per Inch">DPI</abbr>) отображающих устройств; в &#8220;электронных&#8221; материалах ими оформляются различные более-менее объемные статьи, руководства, тексты книг и т.д.</li>
<li>Пропорциональные без засечек, <em>sans-serif</em>. Используются в оформлении интерфейсов программ. Как считается, легче для восприятия на устройствах с низким разрешением (таких, как, например, обыкновенные мониторы).</li>
<li>Моноширинные, <em>monospace</em>. В основном используются там, где важно соблюсти структуру текста, например, в текстовых схемах, ASCII-арте; также в листингах кода.
</ul>
<p>Корейские &#8220;Jamo&#8221; — основной слоговый элемент письменного корейского языка — очень красивы в начертании.  Особенно это заметно, если используется шрифт &#8220;с засечками&#8221; и почти не заметно, если шрифт &#8220;без засечек&#8221;. Поэтому, встала задача: <i>все корейские символы, отображаемые шрифтом sans-serif, заменять на шрифт из семейства sans, сохраняя, при этом, семейство по умолчанию для символов не-корейского алфавита</i>.</p>
<p><span id="more-80"></span></p>
<p>По крайней мере в линуксе, sans, serif и monospace выступают в качестве &#8220;алиасов&#8221; для одного или нескольких шрифтов, представляющих семейство в целом, и для современных дистров им соответствуют шрифты из сеймейства DejaVu. Таким образом, можно в определенном месте (например, в терминале) выставить шрифт &#8220;Monospace&#8221;, а на деле будет отображаться DejaVu Monospace, так же для всей системы целиком. Это удобно, если вдруг захочется, чтобы  моноширинный текст рендерился, например, Terminus&#8217;ом. Для корейских символов верно такое соответствие в Ubuntu 8.10:</p>
<ul>
<li><b>Serif:</b> UnBatang</li>
<li><b>Sans-serif:</b> UnDotum</li>
<li><b>Monospace:</b> AFAIU, все корейские шрифты являются моноширинными, по умолчанию установлен UnDotum.</li>
</ul>
<p>Мне очень нравится UnBatang, поэтому в интерфейсе (Sans) я хочу видеть именно его вместо некрасивого UnDotum.  Соответствия шрифтов с &#8220;алиасами&#8221; Serif и Monospace остается назначить по вкусу, пока я остановился на UnGungseo и UnDotum соответственно. Примерно так (не забывайте кликать по картинкам):</p>
<p><a href='http://blogs.ungrund.org/xio/wp-content/uploads/2008/11/gnome-specieman.png'><img src="http://blogs.ungrund.org/xio/wp-content/uploads/2008/11/gnome-specieman.png" alt="Korean fonts" title="gnome-specieman" class="alignnone size-full wp-image-84" /></a></p>
<p>А как отображается у вас? 안녕하세요!</p>
<p>Локальную конфигурацию рендеринга шрифтов (fontconfig &#038; ko) рекомендуется осуществлять через <code>~/.fonts.conf</code>, исчерпывающее описание которого приведено в <code>man fonts-conf</code>.  Итак, нам нужно, когда приложение попросит шрифт определенного алиаса (sans-serif, serif, monospace) для отображения символов корейского языка, отдать называние желаемого шрифта вместо алиаса (или как-то так).  Консультируемся с маном, в конфиге пишем:</p>
<p><i>~/.fonts.conf</i></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code"><pre class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="font-weight: bold; color: black;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE fontconfig SYSTEM &quot;fonts.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;fontconfig<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!-- Set some nice default korean fonts --&gt;</span></span>
&nbsp;
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;match</span> <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;pattern&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;test</span> <span style="color: #000066;">qual</span>=<span style="color: #ff0000;">&quot;any&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;family&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>sans-serif<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/test<span style="font-weight: bold; color: black;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;test</span> <span style="color: #000066;">qual</span>=<span style="color: #ff0000;">&quot;any&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;lang&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>ko<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/test<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;edit</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;family&quot;</span> <span style="color: #000066;">mode</span>=<span style="color: #ff0000;">&quot;assign&quot;</span> <span style="color: #000066;">binding</span>=<span style="color: #ff0000;">&quot;strong&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
                        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>UnBatang<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/edit<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/match<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;match</span> <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;pattern&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;test</span> <span style="color: #000066;">qual</span>=<span style="color: #ff0000;">&quot;any&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;family&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>serif<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/test<span style="font-weight: bold; color: black;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;test</span> <span style="color: #000066;">qual</span>=<span style="color: #ff0000;">&quot;any&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;lang&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>ko<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/test<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;edit</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;family&quot;</span> <span style="color: #000066;">mode</span>=<span style="color: #ff0000;">&quot;assign&quot;</span> <span style="color: #000066;">binding</span>=<span style="color: #ff0000;">&quot;strong&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
                        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>UnGungseo<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/edit<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/match<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;match</span> <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;pattern&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;test</span> <span style="color: #000066;">qual</span>=<span style="color: #ff0000;">&quot;any&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;family&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>monospace<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/test<span style="font-weight: bold; color: black;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;test</span> <span style="color: #000066;">qual</span>=<span style="color: #ff0000;">&quot;any&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;lang&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>ko<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/test<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
&nbsp;
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;edit</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;family&quot;</span> <span style="color: #000066;">mode</span>=<span style="color: #ff0000;">&quot;assign&quot;</span> <span style="color: #000066;">binding</span>=<span style="color: #ff0000;">&quot;strong&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
                        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>UnDotum<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/edit<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/match<span style="font-weight: bold; color: black;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/fontconfig<span style="font-weight: bold; color: black;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Вот и все!  Выглядит же это так:</p>
<p><a href='http://blogs.ungrund.org/xio/wp-content/uploads/2008/11/gucharmap-sans-full.png'><img src="http://blogs.ungrund.org/xio/wp-content/uploads/2008/11/gucharmap-sans-full.png" alt="Mix of korean and cyrillic font families" title="gucharmap-sans-full" class="alignnone size-full wp-image-82" /></a></p>
<p>Обратите внимание, в качестве шрифта для системного интерфейса установлен Sans (он и отображается), и он же выбран в программе &#8220;Таблица символов&#8221;, где отображается UnBatang, вместо UnDotum.  Ура!</p>
<p>Поскольку jamo объединяют в себе от двух до четырех символов, выглядят они заметно мельче, чем буквы латинского или кириллического алфавитов. Если же jamo &#8220;растянуть&#8221; при помощи fontconfig, т.е. чтобы они при размере <code>X</code> всех прочих символов отображались бы размером на Y большим, <code>X+Y</code>,  то они перестанут вмещаться в текстбоксы, расчитанные на более мелкий (<code>X</code>) размер шрифта. Т.е. вместо</p>
<p><img src="http://blogs.ungrund.org/xio/wp-content/uploads/2008/11/editbox-batang-normal.png" alt="editbox-batang-normal" title="editbox-batang-normal" width="193" height="56" class="alignnone size-full wp-image-85" /></p>
<p>получим</p>
<p><img src="http://blogs.ungrund.org/xio/wp-content/uploads/2008/11/editbox-batang-stretched.png" alt="editbox-batang-stretched" title="editbox-batang-stretched" width="193" height="56" class="alignnone size-full wp-image-86" /></p>
<p>Если вы все же хотите попробовать, вот код, который нужно добавить в match&#8217;и:</p>

<div class="wp_syntax"><div class="code"><pre class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;edit</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;matrix&quot;</span> <span style="color: #000066;">mode</span>=<span style="color: #ff0000;">&quot;assign&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;times<span style="font-weight: bold; color: black;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;name<span style="font-weight: bold; color: black;">&gt;</span></span></span>matrix<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;matrix<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;double<span style="font-weight: bold; color: black;">&gt;</span></span></span>1.2<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/double<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;double<span style="font-weight: bold; color: black;">&gt;</span></span></span>0<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/double<span style="font-weight: bold; color: black;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;double<span style="font-weight: bold; color: black;">&gt;</span></span></span>0<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/double<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;double<span style="font-weight: bold; color: black;">&gt;</span></span></span>1.2<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/double<span style="font-weight: bold; color: black;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/matrix<span style="font-weight: bold; color: black;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/times<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/edit<span style="font-weight: bold; color: black;">&gt;</span></span></span></pre></div></div>

<p>For those who are curious, так может выглядеть &#8220;кореезированная&#8221; убунта (скрин с ноута):</p>
<p><a href='http://blogs.ungrund.org/xio/wp-content/uploads/2008/11/korean-desktop.png'><img src="http://blogs.ungrund.org/xio/wp-content/uploads/2008/11/korean-desktop.png" alt="Koreanized ubuntu" title="korean-desktop" class="alignnone size-full wp-image-83" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ungrund.org/xio/?feed=rss2&amp;p=80</wfw:commentRss>
		</item>
		<item>
		<title>The First Day of Your Life (rus)</title>
		<link>http://blogs.ungrund.org/xio/?p=79</link>
		<comments>http://blogs.ungrund.org/xio/?p=79#comments</comments>
		<pubDate>Wed, 29 Oct 2008 11:19:19 +0000</pubDate>
		<dc:creator>xio</dc:creator>
		
		<category><![CDATA[Personal Development]]></category>

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

		<category><![CDATA[Non-conformity]]></category>

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

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

		<guid isPermaLink="false">http://blogs.ungrund.org/xio/?p=79</guid>
		<description><![CDATA[Сейчас конец дождливого октября в грязном городе за полярным кругом, поэтому я решил перевести жизнеутверждающий пост Криса Гиллебо (Chris Guillebeau) из его блога &#8220;The Art Of Non-conformity&#8221;. Оригинал по адресу: http://chrisguillebeau.com/3&#215;5/the-first-day-of-your-life/
Некоторые удачные места позаимствованы из альтернативного и, так и не опубликованного, перевода от камрада andrew.


Итак, примем за истину следующий факт:
Сегодня — первый день вашей оставшейся [...]]]></description>
			<content:encoded><![CDATA[<p>Сейчас конец дождливого октября в грязном городе за полярным кругом, поэтому я решил перевести жизнеутверждающий пост Криса Гиллебо (Chris Guillebeau) из его блога <a href="http://www.chrisguillebeau.com/">&#8220;The Art Of Non-conformity&#8221;</a>. Оригинал по адресу: <a href="http://chrisguillebeau.com/3x5/the-first-day-of-your-life/">http://chrisguillebeau.com/3&#215;5/the-first-day-of-your-life/</a></p>
<p>Некоторые удачные места позаимствованы из альтернативного и, так и не опубликованного, перевода от камрада <a href="http://blogs.ungrund.org/andrew">andrew</a>.</p>
<p><span id="more-79"></span></p>
<hr />
<p>Итак, примем за истину следующий факт:</p>
<h3>Сегодня — первый день вашей оставшейся жизни</h3>
<p>Слышали это и раньше, верно?  Возможно, это что-то вроде выражения &#8220;<a href="http://chrisguillebeau.com/3x5/time-is-money">Время — деньги</a>&#8221; — чему мы понимающе киваем и возвращаемся назад к обыденности.</p>
<p>Вообще говоря, тот факт, что сегодня — уникальный день начала новой недели может означать как хорошее, так и плохое.  В духе реалистического оптимизма, встретим плохое первым.</p>
<p><b>Плохие новости:</b> Вы никогда не сможете вернуть назад сегодняшний день.  Он просто уходит и все.  Вперед к завтра.</p>
<p><b>Хорошие новости:</b> Прямо сейчас, этот день (и вся эта неделя целиком) доступна для реализации.  Выбор остается за вами: потратить время либо впустую на неинтересые и неважные для вас вещи, либо на то, что приближает вас к тому, кем и где вы хотите быть.</p>
<p>Как-то так все и обстоит, не сложнее, хотя практическое исполнение может доставить сложности даже самым лучшим специалистам по реализации мечт.  Какой из этого может быть найден выход?</p>
<h3>Сегодня — начало вашей новой жизни</h3>
<p>С одной стороны, у всех у нас имеются обязательства и обязанности.  Далеко не все они плохи &#8212; так, у нас есть обязательства перед любимыми, к примеру, что мы будем продолжать поддерживать определенные отношения и не расстанемся с ними.  Проблема же заключается в том, что мы привыкли рассматривать <em>все</em> обязанности как раз и навсегда установленные, на самом же деле, многие из них вовсе не обладают той обязательной силой, которую им принято приписывать.  Мы продолжаем принимать их потому что нам нравится быть занятыми, нравится, когда в нас нуждаются, либо же просто потому, что мы до конца не уверены в том, чем следует заниматься каждый день.</p>
<p>Я обнаружил, что безусловная необходимость большинства планов может быть отменена.  Удивительно многие обязательства могут быть легко отложены и без наступления конца света.  На самом деле, вам <em>совершенно не необходимо делать все то, что люди постоянно ожидают от вас</em>.</p>
<p>Некоторые люди считают, что это глупо и не сработает для них. Послушайте, делайте то, что вам подходит и что выгодно для вас; мотивация работает — пользуйтесь ей.  Не задавайте вопросов. Вокруг и так слишком много скептиков.</p>
<h3>Что делать, если вы на неверном пути?</h3>
<p>У меня есть ровно одно предложение: измените курс так быстро, как только сможете.  Не ждите.  Кто-то на прошлой неделе <a href="http://chrisguillebeau.com/3x5/the-link-between-security-and-complacency/">сказал в комментариях</a>, что самоуспокоенность подобна &#8220;медленной смерти души&#8221;.  Не могу подобрать выражение более точное.  Если работа не дает вам раскрыться, учебная программа очевидно тупиковая и не предвещает дальнейшего успеха, если вам не нравится где вы живете, изменяйте ситуацию и чем быстрее, тем лучше.</p>
<p>Предполагая, что вы <em>действительно</em> на верном пути, более вероятна опасность рассеять усилия на все эти обязательства и неотносящиеся к задаче дела, что вечно путаются под ногами.</p>
<p>Чтобы преодалеть такое сопротивление, ответьте для себя на следующие вопросы:</p>
<ul>
<li>Можете ли вы сегодня сделать что-то <em>сверх обычного плана</em>?</li>
<li>Существует ли нечто, что вы могли бы сделать на этой неделе и что <em>способствовало бы достижению задач, поставленных вами на пять лет вперед?</em></li>
<li>Можете ли вы помочь кому-либо осуществить что-то, что <em>никто другой сделать не в состоянии?</em></li>
</ul>
<p>Если же да, то я бы порекомендовал, чтобы вы провели эту неделю именно так.  Редко такая схема срабатывает на 100%, но однажды мы все-таки сможем достичь финиша, даже делая два шага вперед и один назад.  Реальная потенция отдельного акта, возможно, следующего из ответа на поставленные выше вопросы, не должна быть недооценена.</p>
<p>Подобные действия принесут больше пользы, чем выполнение обыденных обязательств.  Вы обретете нечто большее, чем деньги или отметку о соблюдении графика.  Вы сможете сказать, что сегодня было началом, а эта неделя &#8212; исключительными семью днями.</p>
<p>Готовы?</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ungrund.org/xio/?feed=rss2&amp;p=79</wfw:commentRss>
		</item>
		<item>
		<title>Extremely simple bandwidth statistics collection with vnstat</title>
		<link>http://blogs.ungrund.org/xio/?p=76</link>
		<comments>http://blogs.ungrund.org/xio/?p=76#comments</comments>
		<pubDate>Tue, 28 Oct 2008 14:48:16 +0000</pubDate>
		<dc:creator>xio</dc:creator>
		
		<category><![CDATA[SA]]></category>

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

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

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

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

		<guid isPermaLink="false">http://blogs.ungrund.org/xio/?p=76</guid>
		<description><![CDATA[Задача: установить и настроить систему для сбора статистики о трафике на интерфейсах маленького сервера, отвечающую требованиям KISS, оснащенную веб-интерфейсом и сохраняющую статистику после перезагрузки.
Дистрибутив: Debian Lenny
Нашим требованиям соответствует утилита vnstat, к которой полагается веб-интерфейс под оригинальным названием vnstat PHP frontend. vnstat не является &#8220;трафик-монитром&#8221; в том смысле, что он не прослушивает определенные интерфейсы (как, например, [...]]]></description>
			<content:encoded><![CDATA[<p><b>Задача</b>: установить и настроить систему для сбора статистики о трафике на интерфейсах маленького сервера, отвечающую требованиям <abbr title="Keep It Simple, Stupid">KISS</abbr>, оснащенную веб-интерфейсом и сохраняющую статистику после перезагрузки.</p>
<p><b>Дистрибутив</b>: Debian Lenny</p>
<p>Нашим требованиям соответствует утилита <a href="http://humdi.net/vnstat/">vnstat</a>, к которой полагается веб-интерфейс под оригинальным названием <a href="http://www.sqweek.com/sqweek/index.php?p=1">vnstat PHP frontend</a>. vnstat не является &#8220;трафик-монитром&#8221; в том смысле, что он не прослушивает определенные интерфейсы (как, например, ntop), но запускается через интервалы времени, запоминает статистику из <code>/proc</code> и складывает ее в <code>/var/lib/vnstat/<ifname></code>.  При таком раскладе, естественно, что никакой речи о &#8220;серьезном&#8221; биллинге не идет, однако же, мы получаем <em>нересурсоемкую</em>, <em>KISS</em>-систему, представляющую загруженность интерфейсов в <em>наглядном виде</em>.</p>
<p><span id="more-76"></span></p>
<h3>Basic Installation</h3>
<p>Установка и настройка тривиальны, поэтому от слов к делу:</p>

<div class="wp_syntax"><div class="code"><pre class="text">sudo aptitude install vnstat</pre></div></div>

<p>Создаем первичные &#8220;БД&#8221; для выбранных интерфейсов:</p>

<div class="wp_syntax"><div class="code"><pre class="text">sudo vnstat -u -i eth1 --nick inet
sudo vnstat -u -i wlan0 --nick home</pre></div></div>

<p>с <code><b>-u</b></code> создаем (обновляем) информацию об интерфейсе в <code>/var/lib/vnstat</code>, с <code><b>-i</b></code> указываем конкрентый интерфейс, с <code><b>&#8211;nick</b></code> задаем имя, которое будет отображаться в выводе статистики. Эти команды запускаются от привелегированного пользователя, просмотр статистики таких прав в дальнейшем не требует.</p>
<p>При установке добавилось cron-задание, по которому <code>vnstat -u</code> вызвается каждые 5 минут для обновления статистики. Согласно ману, если ваш канал толще 100Mbps, то это время нужно сократить и для 1Gb оно должно составлять 30 секунд.  Помимо этого ограничения, vnstat также не умеет считать трафик на суб-интерфейсах.</p>
<p>Еще у него есть конфиг!</p>

<div class="wp_syntax"><div class="code"><pre class="text">sudo sh -c 'vnstat --showconfig &gt; /etc/vnstat.conf'</pre></div></div>

<p>Опций несколько, я же поправил только <code>default interface</code>.</p>
<p>Просмотреть собранные данные можно либо просто запустив vnstat без аргументов, либо задав дополнительные ключи.  На домашней страничке проекта показаны несколько таких красивых выводов, поэтому я не буду повторяться.</p>
<h3>Web-interface</h3>
<p>Homepage: <a title="http://www.sqweek.com/sqweek/index.php?p=1">http://www.sqweek.com/sqweek/index.php?p=1</a></p>
<p>Качаем:</p>

<div class="wp_syntax"><div class="code"><pre class="text">wget http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.4.tar.gz</pre></div></div>

<p>Кладем в куда-нибудь, например в <code>/srv/www/admin.example.com/stat/vnstat</code></p>
<p>Правим конфиг <code>/srv/www/admin.example.com/stat/vnstat/config.php</code>:</p>
<p><i>/srv/www/admin.example.com/stat/vnstat/config.php</i></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code"><pre class="php">    <span style="color: #666666; font-style: italic;">// list of network interfaces monitored by vnStat</span>
    <span style="color: #000033;">$iface_list</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'eth1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wlan0'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//</span>
    <span style="color: #666666; font-style: italic;">// optional names for interfaces</span>
    <span style="color: #666666; font-style: italic;">// if there's no name set for an interface then the interface identifier</span>
    <span style="color: #666666; font-style: italic;">// will be displayed instead</span>
    <span style="color: #666666; font-style: italic;">//    </span>
    <span style="color: #000033;">$iface_title</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'eth1'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'inet'</span><span style="color: #339933;">;</span>
    <span style="color: #000033;">$iface_title</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'wlan0'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'home'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Надо указать бинарник, вывод которого будет парсится (я так понимаю), а <code>$data_dir</code> присвоить пустое значение:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>54
55
</pre></td><td class="code"><pre class="php">    <span style="color: #000033;">$vnstat_bin</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/usr/bin/vnstat'</span><span style="color: #339933;">;</span>
    <span style="color: #000033;">$data_dir</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Теперь в конфиге вхоста апача admin.exapmle.com пишем:</p>
<p><i>/etc/apache2/sites-available/admin.example.com</i></p>

<div class="wp_syntax"><div class="code"><pre class="apache"><span style="color: #00007f;">Alias</span> /stat/vnstat <span style="color: #7f007f;">&quot;/srv/www/admin.example.com/stat/vnstat/&quot;</span>
&nbsp;
&lt;Location /stat/vnstat&gt;
        <span style="color: #00007f;">AuthType</span> Basic
        <span style="color: #00007f;">AuthName</span> <span style="color: #7f007f;">&quot;Service admin&quot;</span>
        <span style="color: #00007f;">AuthuserFile</span> /etc/apache2/service.passwd
        <span style="color: #00007f;">Require</span> valid-<span style="color: #00007f;">user</span>
&lt;/Location&gt;</pre></div></div>

<p>Аутентификация опциональна, но очень желательна; должна быть настроена, описывать не буду.</p>
<p>Все, теперь статистика будет доступна после аутентификации по адресу <code>http://admin.example.com/stat/vnstat</code></p>
<p>Получится нечто такое:</p>
<p><a href='http://blogs.ungrund.org/xio/wp-content/uploads/2008/10/vnstat-day.png'><img src="http://blogs.ungrund.org/xio/wp-content/uploads/2008/10/vnstat-day.png" alt="vnstat stat graph (day)" title="vnstat-day" class="alignnone size-full wp-image-77" /></a></p>
<p><a href='http://blogs.ungrund.org/xio/wp-content/uploads/2008/10/vnstat-sum.png'><img src="http://blogs.ungrund.org/xio/wp-content/uploads/2008/10/vnstat-sum.png" alt="vnstat stat summary stats" title="vnstat-sum" class="alignnone size-full wp-image-78" /></a></p>
<p>That&#8217;s it!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ungrund.org/xio/?feed=rss2&amp;p=76</wfw:commentRss>
		</item>
		<item>
		<title>Financial crisis analysis by the Trust Bank</title>
		<link>http://blogs.ungrund.org/xio/?p=73</link>
		<comments>http://blogs.ungrund.org/xio/?p=73#comments</comments>
		<pubDate>Sun, 26 Oct 2008 17:16:43 +0000</pubDate>
		<dc:creator>xio</dc:creator>
		
		<category><![CDATA[Analysis]]></category>

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

		<guid isPermaLink="false">http://blogs.ungrund.org/xio/?p=73</guid>
		<description><![CDATA[Предлагаю к прочтению анализ финансового кризиса, проведенный экспертами банка &#8220;Траст&#8221; в начале октября 2008 года. Целевая аудитория анализа неизвестна, однако написан он языком, вполне понятным человеку даже без специального экономического образования. Впрочем, наличествуют и такие абзацы:
В такой ситуации европейские банки кинулись скупать доллары за евро на спот-рынке, одновременно, чтобы избежать появления валютной позиции, им приходилось [...]]]></description>
			<content:encoded><![CDATA[<p>Предлагаю к прочтению анализ финансового кризиса, проведенный экспертами банка <a href="http://www.trust.ru/">&#8220;Траст&#8221;</a> в начале октября 2008 года. Целевая аудитория анализа неизвестна, однако написан он языком, вполне понятным человеку даже без специального экономического образования. Впрочем, наличествуют и такие абзацы:</p>
<blockquote><p>В такой ситуации европейские банки кинулись скупать доллары за евро на спот-рынке, одновременно, чтобы избежать появления валютной позиции, им приходилось откупать евро на форвардах по любым ставкам. На рынке валютных свопов Implied yield по евро в какие-то моменты даже становилась отрицательной, так как европейские банки были готовы доплачивать, размещая депозиты в евро в других банках, лишь бы только в обмен получить долларовый пассив. Понятное дело, что наличие такого спроса на доллары стало причиной его сильнейшего укрепления против основных валют. Причем это укрепление не имело ничего общего с пресловутым «бегством в качество».</p></blockquote>
<p>В том случае, если вы забыли или не знакомы с значением того или иного термина, всегда можно обратиться к всепомогающему гуглу или википедии. Дерзайте!</p>
<p><a href='http://blogs.ungrund.org/xio/wp-content/uploads/2008/11/trust-financial-crisis-analysis.pdf'>Анализ финансового кризиса: &#8220;Когда качнется маятник?&#8221;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.ungrund.org/xio/?feed=rss2&amp;p=73</wfw:commentRss>
		</item>
	</channel>
</rss>
