<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:dnovikoff</id>
  <title>Alchemist as is.</title>
  <subtitle>Alchemist as is.</subtitle>
  <author>
    <name>Alchemist as is.</name>
  </author>
  <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom"/>
  <updated>2008-07-19T10:22:32Z</updated>
  <lj:journal username="dnovikoff" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://dnovikoff.livejournal.com/data/atom" title="Alchemist as is."/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:330411</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/330411.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=330411"/>
    <title>dnovikoff @ 2008-07-19T10:56:00</title>
    <published>2008-07-19T06:56:20Z</published>
    <updated>2008-07-19T06:56:20Z</updated>
    <content type="html">В общем, что-то я тут подумал и стало мне интересно: а...&lt;br /&gt;&lt;div&gt;&lt;a href="http://www.livejournal.com/poll/?id=1226031"&gt;View Poll: #1226031&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Было бы очень клёво, если ещё с пояснениями в комментах ;)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:330092</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/330092.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=330092"/>
    <title>dnovikoff @ 2008-07-19T08:01:00</title>
    <published>2008-07-19T04:02:50Z</published>
    <updated>2008-07-19T04:02:50Z</updated>
    <content type="html">Я вот думаю, что все вокруг по делу и без дела используют выражение "в рот мне ноги?". А как же "хуй тебе за воротник"? %) Надо же фантазию проявлять.&lt;br /&gt;&lt;br /&gt;А вообще, на улице чудесно, с полчаса как прошёл адский ливень. Теперь свежо и прохладно. И настроение рабочее, что характерно. Один минус - адски болит голова, ещё с вечера.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:329829</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/329829.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=329829"/>
    <title>dnovikoff @ 2008-07-18T09:53:00</title>
    <published>2008-07-18T05:54:24Z</published>
    <updated>2008-07-18T05:54:24Z</updated>
    <content type="html">По примеру любимой жены тоже решил сдаться в &lt;span class='ljuser' lj:user='ru_sok' style='white-space: nowrap;'&gt;&lt;a href='http://community.livejournal.com/ru_sok/profile'&gt;&lt;img src='http://p-stat.livejournal.com/img/community.gif' alt='[info]' width='16' height='16' style='vertical-align: bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='http://community.livejournal.com/ru_sok/'&gt;&lt;b&gt;ru_sok&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; :) Интересно, что напишут %))</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:329573</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/329573.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=329573"/>
    <title>dnovikoff @ 2008-07-17T04:09:00</title>
    <published>2008-07-17T00:11:34Z</published>
    <updated>2008-07-17T00:11:34Z</updated>
    <content type="html">Нашёл чудесный способ тренировки координации движений, причём являющийся следствием собственной лени. Я до жути не люблю парикмахерские и всё, что с ними связано. А тут возникла проблема - борода растёт. Брить не хочется, а стричь - надо в парикмахерскую идти, чего, соответственно, тоже не хочется. Так вот...&lt;br /&gt;&lt;br /&gt;Вы пробовали самостоятельно стричь бороду при помощи ножниц и расчёски? Это пиздец %))</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:329383</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/329383.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=329383"/>
    <title>dnovikoff @ 2008-07-16T00:37:00</title>
    <published>2008-07-15T20:41:38Z</published>
    <updated>2008-07-15T20:42:51Z</updated>
    <content type="html">Типа создаем рандомно группу и записываем дебютный альбом :)&lt;br /&gt;&lt;br /&gt;Правила такие:&lt;br /&gt;Все это генерируется случайным образом, жмем на ссылки, открываются случайные страницы, из них то мы и выдергиваем интересующую нас информацию.&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://en.wikipedia.org/wiki/Special:Random"&gt;http://en.wikipedia.org/wiki/Special:Random&lt;/a&gt;&lt;br /&gt;Заглавие первой статьи - название вашей группы&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://www.quotationspage.com/random.php3"&gt;http://www.quotationspage.com/random.php3&lt;/a&gt;&lt;br /&gt;Последние четыре слова последней цитаты - название альбома&lt;br /&gt;&lt;br /&gt;2.1. Первые три-четыре слова (чтобы смысл был) первых десяти цитат после обновления страницы - названия&lt;br /&gt;песен альбома&lt;br /&gt;&lt;br /&gt;3. &lt;a href="http://www.flickr.com/explore/interesting/7days/"&gt;http://www.flickr.com/explore/interesting/7days/&lt;/a&gt;&lt;br /&gt;Третья фотография, какой бы она не была, обложка вашего альбома, которую вы должны сделать&lt;br /&gt;&lt;br /&gt;У меня получилась такое:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Area Code 403 - But that won't matter&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm4.static.flickr.com/3148/2654670444_bc91f74dc0_m.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Треки:&lt;br /&gt;1. Get pleasure out of life&lt;br /&gt;2. If you can't sleep&lt;br /&gt;3. Look like a girl&lt;br /&gt;4. The real distinction&lt;br /&gt;5. The follies which a man&lt;br /&gt;6. Equal opportunity means everyone&lt;br /&gt;7. If hunger makes you irritable&lt;br /&gt;8. We don't see things&lt;br /&gt;9. Between two evils&lt;br /&gt;10. Life is what happens to you&lt;br /&gt;&lt;br /&gt;Гыгы =)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:329020</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/329020.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=329020"/>
    <title>dnovikoff @ 2008-07-15T05:57:00</title>
    <published>2008-07-15T02:01:07Z</published>
    <updated>2008-07-19T10:22:32Z</updated>
    <content type="html">А на нас вчера свалился совершенно очаровательный подарок британской наружности ;) Сидел и громко мяукал под окном. Пока спускались посмотреть, испугавшись некой дамы с собачкой подарок забрался на дерево, откуда спустился на кис-кис, а потом так у нас и остался :))&lt;br /&gt;&lt;br /&gt;Покормили, напоили, а потом отвезли в Шанс-био на осмотр. Кроме ушного клеща ничего не нашли, что радует. Клеща мы уже начали лечить. Ну а пока у нас карантин :)) Чудо вот такое:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://pics.livejournal.com/dnovikoff/pic/00082fks" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Фырчит как трактор, стоит только на руки взять. Хотя часто даже на руки брать не надо - всё равно фырчит. Возраст месяца три, будет большим - уже сейчас весит 2,3кг =) Назвали Флойдом ;)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:328830</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/328830.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=328830"/>
    <title>Music request</title>
    <published>2008-07-13T03:44:30Z</published>
    <updated>2008-07-13T03:48:08Z</updated>
    <content type="html">Други!&lt;br /&gt;Ставлю памятники за доставку &lt;i&gt;Nusrat Fateh Ali Khan&lt;/i&gt; в lossless. %)&lt;br /&gt;&lt;br /&gt;Вообще, саундтрек к Natural born killers оказался столь же хорош, как и фильм. Открыли для себя Leonard Cohen, например. То есть я много о нём слышал хорошего, вроде даже где-то валяется куча его дисков в lossless, но вот послушать так руки и не дошли. Ну и сабж, безусловно.&lt;br /&gt;&lt;br /&gt;А ваще я как обычно всё проспал. Суши - это полная упячка, особенно когда их много.&lt;br /&gt;&lt;br /&gt;UPD: А пылесосы Electrolux - унылое говно.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:328499</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/328499.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=328499"/>
    <title>Огнепоклонники</title>
    <published>2008-07-11T23:55:51Z</published>
    <updated>2008-07-12T00:06:45Z</updated>
    <category term="fire"/>
    <category term="people"/>
    <category term="photo"/>
    <category term="city"/>
    <content type="html">&lt;center&gt;&lt;br /&gt;&lt;img src="http://pics.livejournal.com/dnovikoff/pic/00081tgd" /&gt;&lt;br /&gt;&lt;span style="color: #c0c0c0"&gt;(54mm, 1/10s, f4.5, ISO100)&lt;/span&gt;&lt;br /&gt;&lt;/center&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:328403</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/328403.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=328403"/>
    <title>dnovikoff @ 2008-07-09T21:35:00</title>
    <published>2008-07-09T17:44:29Z</published>
    <updated>2008-07-09T17:53:56Z</updated>
    <content type="html">&lt;q&gt;Общеизвестно, что программистам в России повсеместно приходится работать в нечеловеческих условиях. Мы побывали в одном из офисов крупной компании, работающей в сфере информационных технологий, чтобы выяснить масштаб этой катастрофы.&lt;br /&gt;&lt;br /&gt;Нашему взору предстала страшная картина. Окна забраны прочными решётками, через которые даже не видно неба. Рабочие места не оборудованы ничем, кроме самого необходимого. Даже стулья - жёсткие, неудобные, привинченные к полу. Строгая охрана не только следит за опозданиями на работу, но и регулярно совершает обходы офиса, проверяя, все ли сотрудники занимаются работой. Рабочий день составляет 12 часов, и для выхода из офиса раньше его окончания необходимо специальное разрешение начальства. Курение запрещено, а пищевой рацион ограничен обычной водой, которую сотрудники пьют из металлических кружек.&lt;/q&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;img src="http://pics.livejournal.com/dnovikoff/pic/00080zg9" /&gt;&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:328172</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/328172.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=328172"/>
    <title>dnovikoff @ 2008-07-09T03:04:00</title>
    <published>2008-07-08T23:07:13Z</published>
    <updated>2008-07-08T23:35:44Z</updated>
    <category term="windows"/>
    <content type="html">Убил нахрен всё с десктопа и из панели быстрого запуска, поставил Windows DreamScene и RocketDock. Сижу и тащусь. Уж на что я не любитель Apple, но за идею с доком им надо памятник поставить %)&lt;br /&gt;&lt;br /&gt;UPD: Ещё воткнул Thunderbird 3.0 alpha 1 - он, сволочь, реально шустрее.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:327714</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/327714.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=327714"/>
    <title>Вы чо?!</title>
    <published>2008-07-07T17:48:53Z</published>
    <updated>2008-07-19T10:22:06Z</updated>
    <category term="photo"/>
    <category term="treasure"/>
    <content type="html">&lt;center&gt;&lt;img src="http://pics.livejournal.com/dnovikoff/pic/0007zcaf" /&gt;&lt;/center&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:327440</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/327440.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=327440"/>
    <title>dnovikoff @ 2008-07-06T20:38:00</title>
    <published>2008-07-06T16:42:19Z</published>
    <updated>2008-07-06T16:44:10Z</updated>
    <category term="work"/>
    <category term="life"/>
    <category term="music"/>
    <content type="html">Чё-то меня впирает с Sopor Aeternus %) Сижу, второй диск подряд слушаю, благо работать под него хорошо. Жалко вот любимой рядом нет - уехала к &lt;span class='ljuser' lj:user='gvendolen' style='white-space: nowrap;'&gt;&lt;a href='http://gvendolen.livejournal.com/profile'&gt;&lt;img src='http://p-stat.livejournal.com/img/userinfo.gif' alt='[info]' width='17' height='17' style='vertical-align: bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='http://gvendolen.livejournal.com/'&gt;&lt;b&gt;gvendolen&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; общаться, а я тут сижу как буратино и работаю :( Нахуячил в общей сложности уже четверть мегабайта кода и, что самое забавное, - он работает.&lt;br /&gt;&lt;br /&gt;Казус, про который был предыдущий немногословный пост, успешно разрешился. По итогам могу сказать только: "Знай, Ебанько - в аду нелегко!" %))</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:327183</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/327183.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=327183"/>
    <title>dnovikoff @ 2008-07-05T14:16:00</title>
    <published>2008-07-05T10:18:27Z</published>
    <updated>2008-07-05T11:07:25Z</updated>
    <category term="shell"/>
    <category term="work"/>
    <content type="html">Встала тут задача сделать автоматические бэкапы. Извратов особых не требовалось, а поднимать что-то нормальное типа bacula не хотелось. В итоге посидел часик и написал скрипт =) Если кому интересно - под кат. Может, пригодится =)&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre style="border: 1px solid #c0c0c0; padding: 10px;"&gt;#!/bin/sh
#
# Copyright (c) 2008, Dmitry Novikov &amp;lt;mail@dixx.ru&amp;gt;.
#
# Dmitry Novikov &amp;lt;mail@dixx.ru&amp;gt; wrote this file. As long as you retain this
# notice you can do whatever you want with this stuff. If we meet some day,
# and you think this stuff is worth it, you can buy me a beer.
#

# Default settings
QUIET=&lt;span style="color: #008200; font-weight: bold"&gt;"NO"&lt;/span&gt;
USER=&lt;span style="color: #008200; font-weight: bold"&gt;"backup"&lt;/span&gt;
GROUP=&lt;span style="color: #008200; font-weight: bold"&gt;"backup"&lt;/span&gt;

function usage()
{
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"Usage:"&lt;/span&gt;
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008200; font-weight: bold"&gt;`basename&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;$0`&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;[-q]&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;[-u&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;&amp;lt;user&amp;gt;]&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;[-g&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;&amp;lt;group&amp;gt;]&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;[config]"&lt;/span&gt;
}

# Parse command line switches
while [ &lt;span style="color: #008200; font-weight: bold"&gt;"$#"&lt;/span&gt; -gt &lt;span style="color: #008200; font-weight: bold"&gt;"0"&lt;/span&gt; ]; do
        OPT=&lt;span style="color: #008200; font-weight: bold"&gt;"$1"&lt;/span&gt;
        case &lt;span style="color: #008200; font-weight: bold"&gt;"${OPT}"&lt;/span&gt; in
        -q)
                QUIET=&lt;span style="color: #008200; font-weight: bold"&gt;"YES"&lt;/span&gt;
                ;;
        -u)
                shift
                if [ -z &lt;span style="color: #008200; font-weight: bold"&gt;"$1"&lt;/span&gt; ]; then
                        echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;-u&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;option&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;requires&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;user&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;name"&lt;/span&gt;
                        usage
                        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
                fi
                USER=&lt;span style="color: #008200; font-weight: bold"&gt;"$1"&lt;/span&gt;
                ;;
        -g)
                shift
                if [ -z &lt;span style="color: #008200; font-weight: bold"&gt;"$1"&lt;/span&gt; ]; then
                        echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;-g&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;option&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;requires&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;group&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;name"&lt;/span&gt;
                        usage
                        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
                fi
                GROUP=&lt;span style="color: #008200; font-weight: bold"&gt;"$1"&lt;/span&gt;
                ;;
        -*)
                echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Invalid&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;option&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;${OPT}"&lt;/span&gt;
                usage
                exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
                ;;
        *)
                break
                ;;
        esac
        shift
done

# Check user existence
grep -E &lt;span style="color: #008200; font-weight: bold"&gt;"^${USER}:"&lt;/span&gt; /etc/passwd &lt;span style="color: blue"&gt;2&lt;/span&gt;&amp;gt;&amp;amp;&lt;span style="color: blue"&gt;1&lt;/span&gt; &amp;gt;/dev/null
if [ &lt;span style="color: #008200; font-weight: bold"&gt;"$?"&lt;/span&gt; -ne &lt;span style="color: #008200; font-weight: bold"&gt;"0"&lt;/span&gt; ]; then
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Specified&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;user&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;not&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;found"&lt;/span&gt;
        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
fi

# Check group existence
grep -E &lt;span style="color: #008200; font-weight: bold"&gt;"^${GROUP}:"&lt;/span&gt; /etc/group &lt;span style="color: blue"&gt;2&lt;/span&gt;&amp;gt;&amp;amp;&lt;span style="color: blue"&gt;1&lt;/span&gt; &amp;gt;/dev/null
if [ &lt;span style="color: #008200; font-weight: bold"&gt;"$?"&lt;/span&gt; -ne &lt;span style="color: #008200; font-weight: bold"&gt;"0"&lt;/span&gt; ]; then
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Specified&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;group&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;not&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;found"&lt;/span&gt;
        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
fi

# Determine running parameters
HOST=`hostname -s`
HOME=`grep backup /etc/passwd | awk &lt;span style="color: #008200; font-weight: bold"&gt;'BEGIN&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;{&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;FS=":"&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;}&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;{&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;print&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;$6&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;}'&lt;/span&gt;`
RCFILE=&lt;span style="color: #008200; font-weight: bold"&gt;"${HOME}/.backuprc"&lt;/span&gt;
DATA=&lt;span style="color: #008200; font-weight: bold"&gt;"${HOME}/data"&lt;/span&gt;
DATE=`date +%Y-%m-%d`
LDATA=&lt;span style="color: #008200; font-weight: bold"&gt;"${DATA}/${DATE}"&lt;/span&gt;
OUT=&lt;span style="color: #008200; font-weight: bold"&gt;"${DATA}/${HOST}.${DATE}.tar"&lt;/span&gt;

# Get configuration file name
if [ &lt;span style="color: #008200; font-weight: bold"&gt;"$#"&lt;/span&gt; -gt &lt;span style="color: #008200; font-weight: bold"&gt;"0"&lt;/span&gt; ]; then
        RCFILE=&lt;span style="color: #008200; font-weight: bold"&gt;"$1"&lt;/span&gt;
        if [ ! -f &lt;span style="color: #008200; font-weight: bold"&gt;"${RCFILE}"&lt;/span&gt; ]; then
                echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;configuration&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;file&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;not&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;found"&lt;/span&gt;
                exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
        fi
else
        if [ ! -f &lt;span style="color: #008200; font-weight: bold"&gt;"${RCFILE}"&lt;/span&gt; ]; then
                echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;configuration&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;file&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;not&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;specified&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;and&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;${RCFILE}&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;not&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;found"&lt;/span&gt;
                exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
        fi
fi

# Read configuration file
. ${RCFILE}

# Check configuration
if [ -z &lt;span style="color: #008200; font-weight: bold"&gt;"${DIRS}"&lt;/span&gt; ]; then
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;DIRS&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;not&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;specified&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;in&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;configuration"&lt;/span&gt;
        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
fi

# Check access rights
if [ `id -u` -gt &lt;span style="color: #008200; font-weight: bold"&gt;"0"&lt;/span&gt; ]; then
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Backup&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;must&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;be&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;runned&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;as&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;root"&lt;/span&gt;
        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
fi

# Check for errors
if [ -z &lt;span style="color: #008200; font-weight: bold"&gt;"${HOME}"&lt;/span&gt; ]; then
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Cannot&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;determine&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;home&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;directory"&lt;/span&gt;
        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
fi
if [ ! -d &lt;span style="color: #008200; font-weight: bold"&gt;"${HOME}"&lt;/span&gt; ]; then
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Home&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;directory&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;not&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;found"&lt;/span&gt;
        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
fi

# Print configuration
if [ &lt;span style="color: #008200; font-weight: bold"&gt;"${QUIET}"&lt;/span&gt; != &lt;span style="color: #008200; font-weight: bold"&gt;"YES"&lt;/span&gt; ]; then
        cat &amp;lt;&amp;lt;-EOM
                #
                # Running as ${USER}:${GROUP}
                #
                # Using hostname: ${HOST}
                # Using home directory: ${HOME}
                # Using backup directory: ${DATA}
                # Using working directory: ${LDATA}
                #
        EOM
        echo
fi

# Save current directory
pushd `pwd` &lt;span style="color: blue"&gt;2&lt;/span&gt;&amp;gt;&amp;amp;&lt;span style="color: blue"&gt;1&lt;/span&gt; &amp;gt;/dev/null

# Set termination traps
TRAP=$(cat &amp;lt;&amp;lt;-EOT
        echo &lt;span style="color: #008200; font-weight: bold"&gt;'Cleaning&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;up...'&lt;/span&gt;;
        rm -rf &lt;span style="color: #008200; font-weight: bold"&gt;'${LDATA}'&lt;/span&gt;;
        rm -rf &lt;span style="color: #008200; font-weight: bold"&gt;'${OUT}'&lt;/span&gt;;
        echo &lt;span style="color: #008200; font-weight: bold"&gt;'Terminated'&lt;/span&gt;;
        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
EOT)
trap &lt;span style="color: #008200; font-weight: bold"&gt;"${TRAP}"&lt;/span&gt; EXIT INT TERM QUIT
trap - HUP

# Create working directory
echo &lt;span style="color: #008200; font-weight: bold"&gt;"Creating&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;working&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;directory..."&lt;/span&gt; &amp;amp;&amp;amp;
        mkdir &lt;span style="color: #008200; font-weight: bold"&gt;"${LDATA}"&lt;/span&gt; &amp;amp;&amp;amp;
        chown ${USER}:${GROUP} &lt;span style="color: #008200; font-weight: bold"&gt;"${LDATA}"&lt;/span&gt; &amp;amp;&amp;amp;
        (echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;OK"&lt;/span&gt;) ||
        (echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Cannot&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;create&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;working&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;directory"&lt;/span&gt;; exit &lt;span style="color: blue"&gt;1&lt;/span&gt;)
if [ &lt;span style="color: #008200; font-weight: bold"&gt;"$?"&lt;/span&gt; -ne &lt;span style="color: #008200; font-weight: bold"&gt;"0"&lt;/span&gt; ]; then
        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
fi

# Backup specified directories
echo &lt;span style="color: #008200; font-weight: bold"&gt;"Creating&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;directories&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;backup..."&lt;/span&gt;
for DIR in ${DIRS}; do
        if [ ! -d &lt;span style="color: #008200; font-weight: bold"&gt;"${DIR}"&lt;/span&gt; ]; then
                echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Skipping&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;${DIR}&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;-&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;not&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;found"&lt;/span&gt;
                continue
        fi

        DIRNAME=`dirname &lt;span style="color: #008200; font-weight: bold"&gt;"${DIR}"&lt;/span&gt;`
        BASENAME=`basename &lt;span style="color: #008200; font-weight: bold"&gt;"${DIR}"&lt;/span&gt;`

        echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Processing&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;${DIR}&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;..."&lt;/span&gt; &amp;amp;&amp;amp;
                cd ${DIRNAME} &amp;amp;&amp;amp;
                tar czf &lt;span style="color: #008200; font-weight: bold"&gt;"${LDATA}/${HOST}.${BASENAME}.tar.gz"&lt;/span&gt; ${BASENAME} &amp;amp;&amp;amp;
                (echo &lt;span style="color: #008200; font-weight: bold"&gt;"##&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;OK"&lt;/span&gt;) ||
                (echo &lt;span style="color: #008200; font-weight: bold"&gt;"##&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Cannot&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;create&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;backup"&lt;/span&gt;; exit &lt;span style="color: blue"&gt;1&lt;/span&gt;)
        if [ &lt;span style="color: #008200; font-weight: bold"&gt;"$?"&lt;/span&gt; -ne &lt;span style="color: #008200; font-weight: bold"&gt;"0"&lt;/span&gt; ]; then
                exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
        fi
done

# Backup all databases
if [ -f ${HOME}/.pgpass ]; then
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"Creating&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;database&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;backups..."&lt;/span&gt; &amp;amp;&amp;amp;
                sudo -u ${USER} pg_dumpall -U root | gzip &amp;gt; &lt;span style="color: #008200; font-weight: bold"&gt;"${LDATA}/${HOST}.dump.sql.gz"&lt;/span&gt; &amp;amp;&amp;amp;
                (echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;OK"&lt;/span&gt;) ||
                (echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;ERROR:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Cannot&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;dump&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;database"&lt;/span&gt;; exit &lt;span style="color: blue"&gt;1&lt;/span&gt;)
        if [ &lt;span style="color: #008200; font-weight: bold"&gt;"$?"&lt;/span&gt; -ne &lt;span style="color: #008200; font-weight: bold"&gt;"0"&lt;/span&gt; ]; then
                exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
        fi
else
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"Skipping&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;database&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;backup&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;-&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;not&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;found"&lt;/span&gt;
fi

# Create backup archive
echo &lt;span style="color: #008200; font-weight: bold"&gt;"Creating&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;backup&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;archive..."&lt;/span&gt; &amp;amp;&amp;amp;
        cd ${DATA} &amp;amp;&amp;amp;
        chown -R ${USER}:${GROUP} &lt;span style="color: #008200; font-weight: bold"&gt;"${LDATA}"&lt;/span&gt; &amp;amp;&amp;amp;
        tar cf &lt;span style="color: #008200; font-weight: bold"&gt;"${OUT}"&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;"${DATE}"&lt;/span&gt; &amp;amp;&amp;amp;
        chown -R ${USER}:${GROUP} &lt;span style="color: #008200; font-weight: bold"&gt;"${OUT}"&lt;/span&gt; &amp;amp;&amp;amp;
        (echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;OK"&lt;/span&gt;) ||
        (echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;ERROR"&lt;/span&gt;; exit &lt;span style="color: blue"&gt;1&lt;/span&gt;)
if [ &lt;span style="color: #008200; font-weight: bold"&gt;"$?"&lt;/span&gt; -ne &lt;span style="color: #008200; font-weight: bold"&gt;"0"&lt;/span&gt; ]; then
        exit &lt;span style="color: blue"&gt;1&lt;/span&gt;
fi

# Disable traps
trap - EXIT INT TERM QUIT

# Remove backup directory
echo &lt;span style="color: #008200; font-weight: bold"&gt;"Removing&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;working&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;directory..."&lt;/span&gt; &amp;amp;&amp;amp;
        rm -rf &lt;span style="color: #008200; font-weight: bold"&gt;"${LDATA}"&lt;/span&gt; &amp;amp;&amp;amp;
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;OK"&lt;/span&gt; ||
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;WARNING:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Cannot&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;remove&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;working&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;directory"&lt;/span&gt;

# Remove old backups
echo &lt;span style="color: #008200; font-weight: bold"&gt;"Removing&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;old&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;backups..."&lt;/span&gt; &amp;amp;&amp;amp;
        find &lt;span style="color: #008200; font-weight: bold"&gt;"${DATA}"&lt;/span&gt; -maxdepth &lt;span style="color: blue"&gt;1&lt;/span&gt; -type f -name &lt;span style="color: #008200; font-weight: bold"&gt;'*.tar'&lt;/span&gt; -mtime +&lt;span style="color: blue"&gt;7&lt;/span&gt; | xargs rm -f &amp;amp;&amp;amp;
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;OK"&lt;/span&gt; ||
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;WARNING:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Cannot&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;remove&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;old&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;backups"&lt;/span&gt;

# Distribute backup
if [ ! -z &lt;span style="color: #008200; font-weight: bold"&gt;"${DEST}"&lt;/span&gt; ]; then
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"Distributing&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;backup..."&lt;/span&gt;
        for SRV in ${DEST}; do
                echo &lt;span style="color: #008200; font-weight: bold"&gt;"#&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Processing&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;${SRV}&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;..."&lt;/span&gt; &amp;amp;&amp;amp;
                        sudo -u ${USER} scp -pq &lt;span style="color: #008200; font-weight: bold"&gt;"${OUT}"&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;"${SRV}"&lt;/span&gt; &amp;amp;&amp;amp;
                        echo &lt;span style="color: #008200; font-weight: bold"&gt;"##&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;OK"&lt;/span&gt; ||
                        echo &lt;span style="color: #008200; font-weight: bold"&gt;"##&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;WARNING:&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;Cannot&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;upload&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;backup&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;to&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;server"&lt;/span&gt;
        done
else
        echo &lt;span style="color: #008200; font-weight: bold"&gt;"Skipping&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;backup&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;distribution&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;-&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;DEST&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;not&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;specified"&lt;/span&gt;
fi



# Restore initial directory
popd &lt;span style="color: blue"&gt;2&lt;/span&gt;&amp;gt;&amp;amp;&lt;span style="color: blue"&gt;1&lt;/span&gt; &amp;gt;/dev/null

echo &lt;span style="color: #008200; font-weight: bold"&gt;"All&lt;/span&gt; &lt;span style="color: #008200; font-weight: bold"&gt;ok"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ы? =)))</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:327101</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/327101.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=327101"/>
    <title>dnovikoff @ 2008-07-04T15:02:00</title>
    <published>2008-07-04T11:02:33Z</published>
    <updated>2008-07-04T11:02:33Z</updated>
    <content type="html">БЛЯ.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:326908</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/326908.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=326908"/>
    <title>dnovikoff @ 2008-06-30T10:46:00</title>
    <published>2008-06-30T06:51:38Z</published>
    <updated>2008-06-30T06:52:10Z</updated>
    <category term="java"/>
    <category term="work"/>
    <category term="spring"/>
    <category term="struts"/>
    <content type="html">"Если ничего не помогает, прочтите же наконец инструкцию" %))&lt;br /&gt;&lt;br /&gt;Сегодня ещё раз убедился в верности этого утверждения. Половину ночи сношался с инстанцированием обработчика экшена из конфига Spring. Нихрена не выходило. Причём, меня с толку сбил тот факт, что если его инстанцировать с установкой свойств через аргументы конструктора - всё пашет, а через сеттеры - хренушки.&lt;br /&gt;&lt;br /&gt;Оказалось, надо было просто заглянуть в мануал плагина Spring для Struts. Походу при инстанцировании через конструктор сам Struts находил соответствующие бины через autowiring. А сеттеры он не пинал, потому что ему незачем. А чтобы инстанцирование шло через Spring с простановкой свойств через сеттеры, надо просто в описании экшена заместо его класса прописывать идентификатор бина в конфиге Spring.&lt;br /&gt;&lt;br /&gt;Я идиот =)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:326650</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/326650.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=326650"/>
    <title>dnovikoff @ 2008-06-27T08:59:00</title>
    <published>2008-06-27T05:05:12Z</published>
    <updated>2008-06-27T05:31:26Z</updated>
    <content type="html">Замечательные сюрпризы преподносит PostgreSQL.&lt;br /&gt;&lt;br /&gt;Оказывается, если использовать наследование, то не будут работать триггера и внешние ключи для родительских таблиц (т.е. при добавлении в дочернюю таблицу не срабатывает триггер на родительской, ну и внешние ключи на родительскую таблицу не видят записей в дочерних, хотя SELECT из родительской, понятно, отрабатывает на ура). В общем и целом это лечится дублированием записей, но само по себе дублирование тоже рождает кучу проблем.&lt;br /&gt;&lt;br /&gt;Исправлять это они, понятно, в обозримом будущем не собираются - хуле, open source. Ну хоть INCLUDING INDEXES|DEFAULTS|CONSTRAINTS реализовали в CREATE TABLE LIKE, и то хлеб.&lt;br /&gt;&lt;br /&gt;С одной стороны, удалось найти эээ... патч, точнее, большой кусок кода на PL/PgSQL, который эту хрень залечивает, но сходу на 8.3.3 он не встал, копаться в нём лень и некогда, плюс к тому неизвестно, какие там ещё сюрпризы обнаружатся.&lt;br /&gt;&lt;br /&gt;Хорошо таки, что Hibernate умеет наследование и поддержание связности и так.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:326240</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/326240.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=326240"/>
    <title>dnovikoff @ 2008-06-26T13:20:00</title>
    <published>2008-06-26T09:22:33Z</published>
    <updated>2008-06-26T09:22:33Z</updated>
    <content type="html">Сижу, работаю. Рядом любимая жена дрыхнет :)) Отошёл сделать чаю, возвращаюсь. Жена открывает глаза:&lt;br /&gt;&lt;br /&gt;- Кто у нас абсолютный-абсолютный-абсолютный позер?&lt;br /&gt;- Какой позер?&lt;br /&gt;- Абсолютный. Ну про тренажёр.&lt;br /&gt;- Какой тренажёр? Спи...&lt;br /&gt;- Вот я и сплю. Ну тренажёр. Он складывается...&lt;br /&gt;&lt;br /&gt;%)))))</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:325927</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/325927.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=325927"/>
    <title>dnovikoff @ 2008-06-26T11:01:00</title>
    <published>2008-06-26T07:30:27Z</published>
    <updated>2008-06-26T07:41:12Z</updated>
    <content type="html">Я начинаю понимать, почему использование Java в реальности зачастую приводит к жуткому пиздецу, в то время как адепты данной технологии утверждают, что она очень быстрая и клёвая. Самое забавное в этой ситуации то, что она действительно очень быстрая и клёвая.&lt;br /&gt;&lt;br /&gt;Губит всё, как обычно, бездумное её использование :) Возьмём, к примеру, типичную задачу: рендеринг веб-страницы. Наверное, в подавляющем большинстве случаев для этого используют JSP. В принципе, можно поговорить и за Velocity с FreeMarker, но суть от этого не изменится.&lt;br /&gt;&lt;br /&gt;JSP, как известно, предоставляет разного рода фишки для рендеринга страниц и реализации логики представления. Первая фишка - скриптлеты. JSP-страница компилируется сервером приложений в сервлет, по сути превращаясь в пачку out.print(...), после чего этот сервлет исполняется. Скриптлеты позволяют смешивать оные принты с другими инструкциями Java.&lt;br /&gt;&lt;br /&gt;Но, ясен хрен, на скриплетах люди писать не любят - выглядят они не слишком читабельно, в целом не слишком удобны, не модны и так далее. Поэтому есть вторая фишка - теги, которые эти проблемы решают.&lt;br /&gt;&lt;br /&gt;А теперь углубимся в рассмотрение простейшей задачи - вывода 100 нумерованных строк "FUCK" на веб-страницу ;)&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;Если мы попытаемся её решить на скриптлетах, то у нас получится такая хрень:&lt;br /&gt;&lt;pre&gt;
&amp;lt;% for (int i = 0; i &amp;lt; 100; i++) { %&amp;gt;
    &amp;lt;%= i %&amp;gt; FUCK&amp;lt;br /&amp;gt;
&amp;lt;% } %&amp;gt;
&lt;/pre&gt;&lt;br /&gt;При компиляции оно превратится во что-то такое:&lt;br /&gt;&lt;pre&gt;
for (int i = 0; i &amp;lt; 100; i++) {
    out.print(String.valueOf(i));
    out.print(" FUCK&amp;lt;br /&amp;gt;");
}
&lt;/pre&gt;&lt;br /&gt;Просто? Да. Эффективно? Да. Теперь попытаемся сделать как положено, это при помощи тегов JSTL (конкретная реализация не суть важна):&lt;br /&gt;&lt;pre&gt;
&amp;lt;c:forEach begin="1" end="100" var="i"&amp;gt;
  &amp;lt;c:out value="${i}" /&amp;gt; FUCK&amp;lt;br /&amp;gt;
&amp;lt;/c:forEach&amp;gt;
&lt;/pre&gt;&lt;br /&gt;Выглядит оно конечно, красивее. А вот с компиляцией там грустнее, потому что для этой конструкции для &amp;lt;c:out&amp;gt; будет как минимум сто раз (!!) вызвано:&lt;br /&gt;0) pageContext.setAttribute("i", ...)&lt;br /&gt;1) setParent()&lt;br /&gt;2) setPageContext()&lt;br /&gt;3) setValue(pageContext.getAttribute("i")&lt;br /&gt;4) doStartTag()&lt;br /&gt;5) doEndTag()&lt;br /&gt;Причём, pageContext.getAttribute мало того, что пинает тяжёлый Map, в котором кроме этой бедной переменной лежит ещё хуева туча всего, так ещё и предваряется вычислением выражения JSP-LE. Оно, конечно, кэшируется, но всё равно это ТОННЫ тяжёлых (!) вызовов.&lt;br /&gt;&lt;br /&gt;А ведь можно было обойтись одним for внутри скриптлета ;)&lt;br /&gt;&lt;br /&gt;Если кто жаждет подробностей - &lt;a href="http://java.boot.by/wcd-guide/ch10.html"&gt;http://java.boot.by/wcd-guide/ch10.html&lt;/a&gt;&lt;br /&gt;Там написано =)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Как вам?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:325766</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/325766.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=325766"/>
    <title>dnovikoff @ 2008-06-25T10:29:00</title>
    <published>2008-06-25T06:32:33Z</published>
    <updated>2008-06-25T06:48:33Z</updated>
    <content type="html">&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;
&amp;lt;div&amp;gt;
	&amp;lt;label for="sortMode"&amp;gt;Режим сортировки:&amp;lt;/label&amp;gt;
	&amp;lt;s:url id="sortUrl" includeParams="none"&amp;gt;
		&amp;lt;s:param name="pageNumber" value="%{pageNumber}" /&amp;gt;
	&amp;lt;/s:url&amp;gt;
	&amp;lt;jsp:element name="select"&amp;gt;
		&amp;lt;jsp:attribute name="onchange"&amp;gt;
			document.location.href = '&amp;lt;s:property value="#sortUrl" /&amp;gt;&amp;amp;amp;sortMode=' + this.value; return false;
		&amp;lt;/jsp:attribute&amp;gt;
		&amp;lt;jsp:body&amp;gt;
			&amp;lt;% Integer sortMode = (Integer)request.getAttribute("sortMode"); %&amp;gt;
			&amp;lt;s:iterator value="%{@ru.freefrog.shop.ArtistSortMode@values()}" id="value"&amp;gt;
				&amp;lt;s:if test="#value.ordinal() == sortMode"&amp;gt;
					&amp;lt;jsp:element name="option"&amp;gt;
						&amp;lt;jsp:attribute name="value"&amp;gt;&amp;lt;s:property value="ordinal()" /&amp;gt;&amp;lt;/jsp:attribute&amp;gt;
						&amp;lt;jsp:attribute name="selected"&amp;gt;selected&amp;lt;/jsp:attribute&amp;gt;
						&amp;lt;jsp:body&amp;gt;&amp;lt;s:property value="getName()" /&amp;gt;&amp;lt;/jsp:body&amp;gt;
					&amp;lt;/jsp:element&amp;gt;
				&amp;lt;/s:if&amp;gt;
				&amp;lt;s:else&amp;gt;
					&amp;lt;jsp:element name="option"&amp;gt;
						&amp;lt;jsp:attribute name="value"&amp;gt;&amp;lt;s:property value="ordinal()" /&amp;gt;&amp;lt;/jsp:attribute&amp;gt;
						&amp;lt;jsp:body&amp;gt;&amp;lt;s:property value="getName()" /&amp;gt;&amp;lt;/jsp:body&amp;gt;
					&amp;lt;/jsp:element&amp;gt;
				&amp;lt;/s:else&amp;gt;
			&amp;lt;/s:iterator&amp;gt;
		&amp;lt;/jsp:body&amp;gt;
	&amp;lt;/jsp:element&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:325401</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/325401.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=325401"/>
    <title>dnovikoff @ 2008-06-24T18:58:00</title>
    <published>2008-06-24T14:59:43Z</published>
    <updated>2008-06-24T17:30:46Z</updated>
    <content type="html">А 14 июня 2008 умер Esbjörn Svensson...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:325342</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/325342.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=325342"/>
    <title>dnovikoff @ 2008-06-24T13:08:00</title>
    <published>2008-06-24T09:11:48Z</published>
    <updated>2008-06-24T09:16:38Z</updated>
    <content type="html">Пока любимая жена дрыхнет я доточил все суши, что были сныканы в холодильнике =))&lt;br /&gt;&lt;br /&gt;А вообще я хотел рассказать про одну забавную хреновину. Я когда ноут покупал, был несколько разочарован тем, что вместо декларированного GeForce 8600GT туда по факту ставят 8600GS. Правда, поскольку видюха для меня желательно, но не слишком критична, тогда я на это забил, ибо уж очень нотик хороший.&lt;br /&gt;&lt;br /&gt;Тут же меня прибило покопаться с разгоном. Ставлю RivaTuner и с удивлением выясняю, что видюха... уже разогнана. Причём очень нехуёво. Мало того, там ещё и GDDR3 стоит %) Был приятно удивлён =)&lt;br /&gt;&lt;br /&gt;Так что осталось лишь T8100 на T9300 или T9500 заменить по случаю :))</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:324965</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/324965.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=324965"/>
    <title>dnovikoff @ 2008-06-24T03:19:00</title>
    <published>2008-06-23T23:20:05Z</published>
    <updated>2008-06-23T23:20:05Z</updated>
    <content type="html">Заказываем суши, йоу!&lt;br /&gt;Лучший способ поднять настроение %)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:324829</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/324829.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=324829"/>
    <title>dnovikoff @ 2008-06-23T19:28:00</title>
    <published>2008-06-23T15:29:17Z</published>
    <updated>2008-06-23T15:29:17Z</updated>
    <content type="html">Студия "Полный Пэ" представляет сезонное отключение горячей воды.&lt;br /&gt;А ещё теперь эти суки не пишут дату включения.&lt;br /&gt;И бумажку с двери подъезда кто-то сорвал.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:324485</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/324485.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=324485"/>
    <title>dnovikoff @ 2008-06-22T08:47:00</title>
    <published>2008-06-22T04:58:57Z</published>
    <updated>2008-06-22T04:58:57Z</updated>
    <content type="html">А меня вчера угораздило наебнуться с дерева. Правда, на фоне общей истерии это наверное смотрелось тускло, но нога сцуко болит.&lt;br /&gt;&lt;br /&gt;Это мы вчера так погулять вышли. Мы же новостей не смотрим, спортом не интересуемся и вообще в некоторых отношениях аки слепо-глухонемые карлики-дебилы. Уже на подходе к метро стало понятно, что что-то здесь не так. Потому как народ сначала просто массово кучковался, а потом и вовсе стал кругами ездить по району с флагами и воплями.&lt;br /&gt;&lt;br /&gt;В целом картина напоминала какое-то кино про зомби, не то 28 дней спустя, не то экранизацию Сталкера, а именно эпизод про пострадавших от выжигателя мозга. Поскольку гулять мы пошли от греха по тихим местам, вокруг не было вообще ни одной души, зато из окон периодически появлялись какие-то ебанутые с флагами. Отдалённые вопли были слышны вообще за несколько километров.&lt;br /&gt;&lt;br /&gt;Так вот. Идём мы себе спокойно и никого не трогаем. Замечаем вдали стаю собак, штук пять или даже больше. Решаем, что поскольку деваться некуда, лучше пойти назад покуда они нас не выпасли. Развернулись, дошли почти до что до людных мест, как заслышали стук когтей по асфальту. Присмотревшись, выяснили, что двое собак несутся на нас прямым курсом на совершенно невротъебической скорости.&lt;br /&gt;&lt;br /&gt;Я пытаюсь думать, в этот момент любимая произносит ключевое слово - "дерево". Ну мы туда и ломанулись. Хорошо ещё, что оно оказалось невысоким. Ломанулись мы резко аки понос, ввиду чего под моей тушкой обломилась ветка %)&lt;br /&gt;&lt;br /&gt;Самое забавное в этой истории совсем другое. Видимо, собаки со всеобщей дури настолько пересрали, что нас даже вообще не заметили, хотя моё падение шло встречным курсом к их траектории движения. И расстояние было метра два. Вот так =))&lt;br /&gt;&lt;br /&gt;Когда дошли до метро, матч походу уже закончился и творился вообще какой-то феерический пиздец. Наверное, когда взяли Берлин, и то спокойнее было. Потому как такого скопления экстатически настроенного народа на всех имеющихся горизонтальных поверхностях включая крыши киосков я не видел ни разу. Любопытно, что имевшийся рядом ОМОН вёл себя вполне спокойно.&lt;br /&gt;&lt;br /&gt;А круче всего смотрелись хачики, орущие "россия - чемпион". При этом по роже было видно, что штаны у них мокрые и орут они тупо ради того, чтобы по морде не дали.&lt;br /&gt;&lt;br /&gt;Мораль: надо таки покупать ствол.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dnovikoff:323934</id>
    <link rel="alternate" type="text/html" href="http://dnovikoff.livejournal.com/323934.html"/>
    <link rel="self" type="text/xml" href="http://dnovikoff.livejournal.com/data/atom/?itemid=323934"/>
    <title>dnovikoff @ 2008-06-21T00:27:00</title>
    <published>2008-06-20T20:34:54Z</published>
    <updated>2008-06-20T20:34:54Z</updated>
    <content type="html">Гмда. В общем, как-то так случилось, что классика мирового кино под названием Hellraiser прошла мимо меня. То есть окромя загадочных юзерпиков с pinhead'ом я ничего оттуда не знал, не читал и не видел, а юзерпики эти вызывали у меня лёгкое удивление.&lt;br /&gt;&lt;br /&gt;Давеча любимая жена, увидев скачанные мною пару альбомов отечественной группы Hellraiser, открыла мне глаза на существование одноимённого фильма. Ажна в шести частях, ага. И даже так случилось, что проходя мимо ларька с дисками мы купили эти самые шесть частей.&lt;br /&gt;&lt;br /&gt;Осилил я, честно говоря, только пять. Пятую уже с трудом.&lt;br /&gt;&lt;br /&gt;С первой частью всё более-менее понятно: садо-мазо-негро-порно, кровь, много пидорасов удивительного вида. Короче, классика жанра. И в конце все умирают кроме бедной девочки. Гы-гы. Со второй частью тоже всё логично: девочка с таких пирогов попадает в дурку, а поскольку противоположности притягиваются, доктор там оказывается весьма и весьма "добрым". Третья и четвёртые части содержат дальнейшее развитие сюжета негро-порно. Надо отметить, что цепи и рыболовные крючки надоедают уже к середине второй части, но в целом смотрится нормально.&lt;br /&gt;&lt;br /&gt;Но вот пятая часть. Сижу и думаю, как бы это сформулировать. На ум приходит только "Гена, тебе плохо?" %))&lt;br /&gt;&lt;br /&gt;Шестую я уже боюсь смотреть %))</content>
  </entry>
</feed>
