<?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/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Unexpected</title>
  <link>http://nisoi.livejournal.com/</link>
  <description>Unexpected - LiveJournal.com</description>
  <lastBuildDate>Thu, 26 Mar 2009 22:50:37 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>nisoi</lj:journal>
  <lj:journalid>11428593</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/8745.html</guid>
  <pubDate>Thu, 26 Mar 2009 22:50:37 GMT</pubDate>
  <title>Ищу ч/б бумажную анимацию про толпу птице-людей - кто видел?</title>
  <link>http://nisoi.livejournal.com/8745.html</link>
  <description>Пытаюсь вспомнить мультик, который случайно нашёл на ютубе пару месяцев назад. &lt;br /&gt;  &lt;br /&gt;&lt;strong&gt;UPD:&lt;/strong&gt; нашлось! &lt;a href=&quot;http://www.youtube.com/watch?v=gG-TL0S3sN8&quot;&gt;&amp;laquo;Адажио&amp;raquo; Гарри Бардина&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt; Бумажная анимация в чёрно-белых тонах. Идут по плоскости птице-люди чёрного цвета. И тут в их стройных рядах обнаруживается абсолютно белый экземпляр. Чёрные пытаются его запачкать, пятна пропадают. Мистика. Со злости чёрные растерзывают невезучего собрата на куски. Но тот собирается и взмывает вверх белоснежным нетронутым листом бумаги. &lt;br /&gt;  &lt;br /&gt; После восхождения Белого чёрная толпа начинает ему поклоняться, рисует плакаты с его ликом, всячески пропагандирует Белый след в тёмном народе, который обязательно пройдёт через унылую жизнь под очи&amp;nbsp;Всевышнего и тоже осветлится. &lt;br /&gt;  &lt;br /&gt; И тут в их рядах появляется экземпляр серого цвета. Драматический финал. &lt;br /&gt;  &lt;br /&gt; И музыка такая известно-грустная. &lt;br /&gt;  &lt;br /&gt; Может, кто-нибудь видел?</description>
  <comments>http://nisoi.livejournal.com/8745.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/8504.html</guid>
  <pubDate>Thu, 11 Dec 2008 19:33:47 GMT</pubDate>
  <title>httpd.h: «I haven&apos;t got a clue»</title>
  <link>http://nisoi.livejournal.com/8504.html</link>
  <description>В httpd.h есть описание структуры server_rec &amp;mdash; для хранения информации о каждом виртуальном хосте. И там все поля структуры вроде как прокомментированы. Это, мол, имя сервера, а это, значит, уровень логгинга, ну и так далее.&lt;br /&gt;&lt;br /&gt;И вот там есть такой кусочек:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;

    /** MIME type info, etc., before we start checking per-directory info */
    struct ap_conf_vector_t *lookup_defaults;

    /* Transaction handling */

    /** I haven&apos;t got a clue */
    server_addr_rec *addrs;
    /** Timeout, as an apr interval, before we give up */
    apr_interval_time_t timeout;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Простите, а что значит &amp;laquo;I haven&apos;t got a clue&amp;raquo; в комментарии к addrs? Это переводится как &amp;laquo;Не имею ни малейшего понятия&amp;raquo; или мой девелоперский английский недостаточно хорош?&lt;br /&gt;&lt;br /&gt;И это фактически основной заголовочный файл Apache. Что же дальше будет? I am afraid, Dave...&lt;br /&gt;</description>
  <comments>http://nisoi.livejournal.com/8504.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/8380.html</guid>
  <pubDate>Wed, 12 Nov 2008 13:56:34 GMT</pubDate>
  <title>Эксплорер 6, js-скрипты и 301 редирект</title>
  <link>http://nisoi.livejournal.com/8380.html</link>
  <description>Очередное буйство байтов в IE 6.&lt;br /&gt;&lt;br /&gt;Оказывается, если на страничке подключён какой-нибудь js-скипт (допустим, prototype), и путь до скрипта локальный, но вместо файла отдаётся 301 редирект на внешний prototype (допустим, на Google AJAX Libraries API), то IE 6 его не грузит.&lt;br /&gt;&lt;br /&gt;В 7-м, кстати, всё нормально работает.&lt;br /&gt;&lt;br /&gt;В общем, как обычно &amp;mdash; зараза этот ваш шестой эксплорер.&lt;br /&gt;&lt;br /&gt;С другой стороны &amp;mdash; не стоит вообще такими извращениями заниматься.</description>
  <comments>http://nisoi.livejournal.com/8380.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/7971.html</guid>
  <pubDate>Fri, 03 Oct 2008 11:47:52 GMT</pubDate>
  <title>Передача ссылки во flash-баннер из html</title>
  <link>http://nisoi.livejournal.com/7971.html</link>
  <description>Бывает так: есть flash-баннер, который должен ссылаться на какую-то странцу сайта. А адрес этой страницы неизвестен и станет известен только тогда, когда баннер собственно будет внедряться в код сайта. Или нужно иметь возможность менять ссылку во flash-баннере время от времени.&lt;br /&gt; &lt;br /&gt; В обычном случае приходится брать исходник баннера и исправлять в нём ссылку, а потом компилировать баннер заново.&lt;br /&gt;&lt;br /&gt;А хотелось бы иметь возможность изменить ссылку, на которую будет переводить баннер при клике, прямо из html-кода. Иными словами, передавать баннеру ссылку в виде параметра.&lt;br /&gt;&lt;br /&gt;Как?&lt;br /&gt;&lt;h2&gt;А вот как!&lt;/h2&gt;&lt;h3&gt;Подготовка flash-баннера&lt;/h3&gt;В сам баннер в первый кадр нужно добавить код для приёма параметра. А кнопку, которая осуществляет переход, изменить соответствующим образом.&lt;br /&gt;&lt;h4&gt;Первый кадр flash-баннера&lt;/h4&gt;В него нужно добавить такой код:&lt;br /&gt;&lt;pre style=&quot;border: 1px solid rgb(170, 170, 170); padding: 1ex 1em; background-color: rgb(238, 238, 238);&quot;&gt;// _level0.bannerLink is passed via FlashVars
if (_level0.bannerLink == undefined) {
	// Default link will be used if no other link was specified via params
	var bannerLink:String = &amp;quot;http://www.sprinthost.ru&amp;quot;;
} else {
	var bannerLink:String = _level0.bannerLink;
}
&lt;/pre&gt;&lt;code&gt;bannerLink&lt;/code&gt; &amp;mdash; это параметр, который будет передаваться в ролик. В коде также предусмотрена ссылка по умолчанию.&lt;br /&gt;&lt;h4&gt;Код кнопки&lt;/h4&gt;Сама кнопка для клика получает следующий код:&lt;br /&gt;&lt;pre style=&quot;border: 1px solid rgb(170, 170, 170); padding: 1ex 1em; background-color: rgb(238, 238, 238);&quot;&gt;on(release) {
    getURL(bannerLink);
}
&lt;/pre&gt;На этом с самим роликом всё. Осталось ещё добавить собственно передачу параметра в html-код.&lt;br /&gt;&lt;h3&gt;Добавление параметров баннера в код html&lt;/h3&gt;В тэг &amp;lt;object&amp;gt;, который используется для внедрения баннера, нужно будет добавить код, который выделен зелёным:&lt;br /&gt;&lt;pre style=&quot;border: 1px solid rgb(170, 170, 170); padding: 1ex 1em; background-color: rgb(238, 238, 238);&quot;&gt;&amp;lt;object
  type=&amp;quot;application/x-shockwave-flash&amp;quot;
  data=&amp;quot;banner.swf&amp;quot;
  width=&amp;quot;170&amp;quot; height=&amp;quot;250&amp;quot;&amp;gt;
    &amp;lt;param name=&amp;quot;movie&amp;quot; value=&amp;quot;banner.swf&amp;quot;&amp;gt;
    &amp;lt;param name=&amp;quot;wmode&amp;quot; value=&amp;quot;transparent&amp;quot;&amp;gt;
    &lt;span style=&quot;color: rgb(0, 119, 0); font-weight: bold;&quot;&gt;&amp;lt;param name=&amp;quot;allowScriptAccess&amp;quot; value=&amp;quot;sameDomain&amp;quot; /&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(0, 119, 0); font-weight: bold;&quot;&gt;&amp;lt;param name=&amp;quot;FlashVars&amp;quot; value=&amp;quot;bannerLink=http://www.google.com&amp;quot;&amp;gt;&lt;/span&gt;
&amp;lt;/object&amp;gt;
&lt;/pre&gt;В данном примере ролику передаётся параметр, согласно которому он будет ссылаться на www.google.com.&lt;br /&gt;&lt;h3&gt;Всё!&lt;/h3&gt;Поздравляю с достигнутым счастьем.</description>
  <comments>http://nisoi.livejournal.com/7971.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/7808.html</guid>
  <pubDate>Tue, 09 Sep 2008 09:38:22 GMT</pubDate>
  <title>СПРИНТХОСТ.РУ запустил новый тариф «Та-Шу-Яотэ-Цай-Во-Ван-Ли»</title>
  <link>http://nisoi.livejournal.com/7808.html</link>
  <description>Хостинг-провайдер &lt;a href=&quot;http://sprinthost.ru&quot;&gt;SPRINTHOST.RU&lt;/a&gt; запустил новый тарифный план &lt;a href=&quot;http://sprinthost.ru/tariffs/ta-shu.html&quot;&gt;&amp;laquo;Та-Шу-Яотэ-Цай-Во-Ван-Ли&amp;raquo;&lt;/a&gt;. Говорят, дело было так:&lt;br /&gt;&lt;br /&gt;Однажды к Основателям СПРИНТХОСТ.РУ в гости пришел их друг &amp;mdash; мудрый восточный старец, которого все из почтения называли не иначе как Мастер. Старик хорошо разбирался в новых технологиях, поэтому Основатели не удивились, услышав его слова.&lt;br /&gt;&lt;br /&gt;    &amp;mdash; Я хочу разместить у вас свои сайты, &amp;mdash; сказал Мастер.&lt;br /&gt;&lt;br /&gt;В этот день Основатели как раз разрабатывали новый тарифный план. Они знали, что Мастер ценит достаточность и с укоризной встречает излишества. Поэтому, выслушав старика, они не раздумывая предложили ему новый тариф, который слово в слово повторял пожелания Мастера.&lt;br /&gt;&lt;br /&gt;Пока старец занимался размещением сайтов, Основатели принялись обдумывать название тарифного плана. Они уже почти остановились на названии &amp;laquo;Самурай&amp;raquo;, в честь их мудрого друга, как вдруг Мастер воскликнул:&lt;br /&gt;&lt;br /&gt;    &amp;mdash; Та-Шу-Яотэ-Цай-Во-Ван-Ли!&lt;br /&gt;&lt;br /&gt;    &amp;mdash; Как Вы сказали? &amp;mdash; спросили Основатели.&lt;br /&gt;&lt;br /&gt;Старец объяснил, что по-китайски это означает &amp;laquo;У всех моих сайтов есть всё, что им нужно&amp;raquo;. В этот момент Основатели поняли, что ничто так хорошо не сможет отразить суть нового тарифного плана, как эти слова Мастера. Поэтому они решили назвать тарифный план &amp;laquo;Та-Шу-Яотэ-Цай-Во-Ван-Ли&amp;raquo;.&lt;br /&gt;&lt;br /&gt;Так и родился новый тариф компании СПРИНТХОСТ.РУ &amp;mdash; тариф, на котором есть всё, что нужно: 3 сайта, 1 база данных, 2 гигабайта дискового пространства и мудрое слово Мастера. Стоимость тарифного плана &amp;laquo;Та-Шу-Яотэ-Цай-Во-Ван-Ли&amp;raquo; &amp;mdash; 110 рублей в месяц. &lt;br /&gt;&lt;br /&gt;Тариф доступен для &lt;a href=&quot;http://sprinthost.ru/order/?tariff=ta-shu&quot;&gt;заказа&lt;/a&gt; до 1 ноября 2008 года.</description>
  <comments>http://nisoi.livejournal.com/7808.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/7441.html</guid>
  <pubDate>Fri, 25 Jul 2008 11:07:38 GMT</pubDate>
  <title>Установка Спамообороны 1024 Яндекса для exim 4.69 на FreeBSD</title>
  <link>http://nisoi.livejournal.com/7441.html</link>
  <description>Как поставить Спамооборону 1024 Яндекса на FreeBSD с почтовым агентом exim? Сегодня я вплотную задался этим вопросом. Оказалось, что довольно просто, но и не без особенностей.&lt;br /&gt;&lt;br /&gt;Спамооборона.Яндекса — это продукт для фильтрации спама от компании Яндекс. Правила фильтрации составляются на основании огромного количества писем, которое попадает на их почтовые сервера. Поэтому фильтры спама Спамообороны очень точно соответствуют реалиям российского почтового трафика. На самом деле &lt;a href=&quot;http://so.yandex.ru/&quot;&gt;Спамооборона.Яндекса — это лучший продукт для фильтрации спама&lt;/a&gt;, с которым мне приходилось работать.&lt;br /&gt;&lt;br /&gt;Профессиональная версия Спамообороны стоит недёшево, однако существует бесплатная версия — Спамооборона 1024. Она подходит для серверов с небольшим количеством почтового трафика — 10000—20000 писем в сутки. Спамооборона 1024 проверяет письма, пока не наберётся 1024 не спамовых письма. После этого она начинает пропускать письма, пока сутки не истекут. Так как спама в среднем 90—95%, это позволяет проверить как раз 10000—20000 писем за день.&lt;br /&gt;&lt;br /&gt;Установка Спамообороны 1024 на FreeBSD для exim требует некоторых усилий, потому что в документации описан совершенно верный метод подключения СО к exim, но он предполагает самостоятельную сборку exim. Более удобной же является сборка из портов, о которой и пойдёт речь.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Как это будет работать&lt;/h2&gt;Спамооборона 1024 подключается к exim через &lt;a href=&quot;http://exim.org/exim-html-current/doc/html/spec_html/ch42.html#SECID207&quot;&gt;local scan&lt;/a&gt;. Никаких демонов на сервере устанавливать не требуется. При проверке письма Спамооборона 1024 соединяется с Яндексом по своему протоколу, отправляет туда копию письма и на основании ответа сервера Яндекса устанавливает заголовки&lt;span style=&quot;font-family: monospace;&quot;&gt; &lt;/span&gt;X-Spam-Flag и X-Spam-Yversion. Баллы спама добавляются в поле «Subject» письма, если письмо сочтено спамом, например: «[SPAM 27.4] оригинальный сабджект». В X-Spam-Flag&amp;nbsp; указывается только YES или NO. Для того, чтобы иметь возможность настраивать изменение темы письма и видеть баллы в технических заголовках, необходимо воспользоваться &lt;a href=&quot;http://so.yandex.ru/companies/index.xml&quot;&gt;профессиональной версией Спамообороны&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Получение Спамообороны 1024 для exim&lt;/h2&gt;В отличие от версий для других почтовых агентов, для которых предоставляются пакеты, для exim необходимо сказать исходник local_scan_1024.c. Для этого на &lt;a href=&quot;http://so.yandex.ru/companies/so1024.xml&quot;&gt;странице загрузки Спамообороны 1024&lt;/a&gt;  необходимо выбрать в списке последний пункт &quot;Исходный код для Unix (exim). Перед скачиванием файла необходимо будет заполнить нехитрую форму для учёта статистики загрузок.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Сборка exim из портов FreeBSD с включением Спамообороны 1024&lt;/h2&gt;&lt;a href=&quot;http://download.yandex.ru/so/SO1024-AdmGuide.pdf&quot;&gt;Документация СО&lt;/a&gt; сообщает,  что необходимо изменить Local/Makefile при сборке exim. Этого легко добиться, если exim собирается из исходников руками, но для сборки из портов придётся соблюсти определённую последовательность действий:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;code&gt;cd /usr/ports/mail/exim/&lt;/code&gt;;&lt;/li&gt;&lt;li&gt;make configure;&lt;/li&gt; &lt;li&gt;правка work/exim-4.69/Local/Makefile в соответствии с документацией СО;&lt;/li&gt;&lt;li&gt;перегенерация makefile: &lt;code&gt;cd work/exim-4.69/ ; make makefile&lt;/code&gt;;&lt;/li&gt; &lt;li&gt;продолжение сборки и установка: &lt;code&gt;cd /usr/ports/mail/exim/ ; make install&lt;/code&gt;;&lt;/li&gt; &lt;li&gt;создание папки для работы Спамообороны: &lt;code&gt;mkdir -p /var/spool/spamooborona; chown mailnull /var/spool/spamooborona&lt;/code&gt; (если exim будет работать от пользователя mailnull).&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Но это не всё. Текущая версия порта exim (4.69) заменяет в Local/Makefile опцию LDFLAGS  на свою хитровыдуманную DUMMY_LDFLAGS и в дальнейшем использует только её. Так как мы добавляем LDFLAGS в Local/Makefile уже после &lt;code&gt;make configure&lt;/code&gt;, наш LDFLAGS не обнаруживается при дальнейшей сборке, и exim с СО не собирается из-за отсутствия подключённых библиотек.&lt;br /&gt;&lt;br /&gt;Решения два:&lt;ul&gt;&lt;li&gt;вместо LDFLAGS прописывать в Local/Makefile опцию DUMMY_LDFLAGS (не лучшее решение);&lt;/li&gt;&lt;li&gt;добавлять LDFLAGS в качестве аргумента make таким образом: &lt;code&gt;make LDFLAGS+=-lz install&lt;/code&gt; (решение, достойное существования).&lt;/li&gt;&lt;/ul&gt;После этого Спамооборона 1024 успешно включается в exim и может проверять почту.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Проверка успешности сборки&lt;/h2&gt;Для того, чтобы проверить, действительно ли СО включена в exim, необходимо выполнить команду:&lt;br /&gt;&lt;pre&gt;strings /usr/local/sbin/exim | grep sp-exim&lt;/pre&gt;Если что-то есть, значит, СО включена в бинарник.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Автоматизация сборки&lt;/h2&gt;Для автоматической сборки exim со Спамообороной 1024 я написал скриптик:&lt;br /&gt;&lt;pre style=&quot;border: 1px solid rgb(85, 85, 85); padding: 1ex 0.5em; background-color: rgb(221, 221, 221);&quot;&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;EXIM_VER=4.69&lt;br /&gt;SO_LOCAL_SCAN=/root/tools/inst-tools/exim/SO/local_scan_1024.c&lt;br /&gt;INSTALL_PREFIX=/usr/local/experimental/exim-so1024/&lt;br /&gt;EXIM_USER=mailnull&lt;br /&gt;&lt;br /&gt;OPTS=&quot;&lt;br /&gt;  PREFIX=$INSTALL_PREFIX&lt;br /&gt;  -D WITH_CONTENT_SCAN -D WITHOUT_IPV6&lt;br /&gt;  -D WITHOUT_OLD_DEMIME &lt;br /&gt;  -D WITHOUT_NIS&lt;br /&gt;&quot;&lt;br /&gt;&lt;br /&gt;[ &quot;$1&quot; = &quot;opts&quot; ] &amp;amp;&amp;amp; echo $OPTS &amp;amp;&amp;amp; exit&lt;br /&gt;&lt;br /&gt;cd `dirname $0`&lt;br /&gt;WRKDIR=$PWD&lt;br /&gt;&lt;br /&gt;cd /usr/ports/mail/exim&lt;br /&gt;make clean&lt;br /&gt;make $OPTS configure&lt;br /&gt;&lt;br /&gt;cat &amp;gt;&amp;gt; work/exim-$EXIM_VER/Local/Makefile &amp;lt;&amp;lt;EOF&lt;br /&gt;LOCAL_SCAN_SOURCE=Local/local_scan_1024.c&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;cp $SO_LOCAL_SCAN work/exim-$EXIM_VER/Local/&lt;br /&gt;&lt;br /&gt;cd work/exim-$EXIM_VER&lt;br /&gt;make makefile&lt;br /&gt;cd ../../&lt;br /&gt;&lt;br /&gt;make LDFLAGS+=-lz $OPTS -D NO_PKG_REGISTER install&lt;br /&gt;&lt;br /&gt;mkdir -p /var/spool/spamooborona&lt;br /&gt;chown $EXIM_USER /var/spool/spamooborona&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;В скрипте необходимо указать версию exim, префикс для установки, путь до local_scan_1024.c и пользователя exim (для установки прав на /var/spool/spamooborona). Также можно в OPTS перечислить опции порта exim для сборки.&lt;br /&gt;&lt;br /&gt;В make install используется -D NO_PKG_REGISTER, чтобы можно было многократно переустанавливать exim без &lt;code&gt;make deinstall &amp;amp;&amp;amp; make reinstall &lt;/code&gt; и ставить различные его версии в различные префиксы. Правда, тогда exim не будет виден в pkg_info.&lt;br /&gt;&lt;br /&gt;Успешной фильтрации спама (со Спамообороной это достигается очень легко :)!</description>
  <comments>http://nisoi.livejournal.com/7441.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/7254.html</guid>
  <pubDate>Wed, 09 Jul 2008 00:20:27 GMT</pubDate>
  <title>Почему mod_rewrite это вуду, и в каком на самом деле порядке выполняются правила RewriteRule</title>
  <link>http://nisoi.livejournal.com/7254.html</link>
  <description>Сегодня мне пришлось составлять довольно хитрый редирект: если пользователь запросил /news/some-section/, то его нужно было перенаправить на просто /section/, но потом всё равно сделать внутренний редирект на /news/some-section/, так как сам движок новостей лежит именно там.&lt;br /&gt;&lt;br /&gt;Я написал простое правило, обновил страничку... и получил от mod_rewrite по полной программе, потому что он ушёл в бесконечный цикл и не собирался из него возвращаться. Я открыл документацию и начал разбираться. Потом включил RewriteLog. Сначала я был озадачен. Потом стал откровенно злиться. А к тому моменту, когда задача была решена, я успел пережить такое количество разных чувств, что кроме равнодушного вздоха ничем больше не смог отметить достигнутый результат.&lt;br /&gt;&lt;br /&gt;Оказывается, mod_rewrite называют вуду не потому, что он волшебный. А потому что для того, чтобы осознать, как он работает, нужно три раза прочитать по нему документацию. Вслух. С выражением! Потом найти все параграфы, начинающиеся со слова &quot;Note&quot; и пересказать их своими словами. Потом нужно найти все параграфы, в которых больше одного предложения и тоже пересказать их своими словами. Тоже вслух. И с выражением тоже.&lt;br /&gt;&lt;br /&gt;Но и это ещё не всё. После этого нужно пойти по ссылке &lt;a href=&quot;http://httpd.apache.org/docs/2.2/rewrite/&quot;&gt;&quot;detailed mod_rewrite documentation&quot;&lt;/a&gt; и почитать там. А потом отправиться впитывать полезный опыт в гугл.&lt;br /&gt;&lt;br /&gt;Так много слов выше написано оттого, что сам я только что всё это проделал и мне нужно высказаться. Вы, наверное, думаете - ну и где же обещанное &quot;как на самом деле&quot;? Подождите, сейчас расскажу.&lt;br /&gt;&lt;br /&gt;По работе мне приходится составлять довольно простые правила, зато их довольно много. Приходится следить, чтобы они не пересекались друг с другом. Директив использую немного - RewriteCond, RewriteRule и флаги [L], [R], изредка [NC] и [QSA]. Без усложний с map&apos;ами, chain&apos;ами и subreq&apos;ами.&lt;br /&gt;&lt;br /&gt;Опыт программирования подсказывал мне (и некоторые другие программисты были со мной согласны), что если я сказал [R], то в этом месте должен начаться редирект. А если указано [L], то разбор правил должен прекратиться (совсем-совсем прекратиться). Ну и когда все правила пройдены, разбор прекращается, отдаётся скрипт, на который смотрит получившийся адрес.&lt;br /&gt;&lt;br /&gt;Ага. Щаз.&lt;br /&gt;&lt;br /&gt;Оказывается, всё работает несколько иначе.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;[R] на самом деле не делает редирект&lt;/b&gt;. Он просто делает текущий адрес абсолютным (дописывает к нему http://хост/) и где-то себе запоминает, что потом нужно будет сделать внешний редирект. После этого разбор правил продолжается до конца .htaccess, и вот уже тут происходит перенаправление.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;[L] на самом деле не останавливает полностью разбор правил.&lt;/b&gt; Если разбор происходит в .htaccess (как это обычно бывает), то совершается переход в конец .htaccess, и вот тут уже... происходит перенаправление? Ну да, только в его результате мы с большой вероятностью опять попадаем на тот же .htaccess, и начинается проход по всем правилам заново (даже при внутреннем редиректе!). И этот цикл будет продолжаться до тех пор, пока не настанет момент, когда ни одно правило не сработает (или пока мы редиректом не выйдем из директории, в которой лежит наш .htaccess). Вот тогда уже сервер отдаст страничку.&lt;br /&gt;&lt;br /&gt;Единственно &lt;b&gt;предсказуемое поведение дают [R,L] вместе&lt;/b&gt; взятые. В этом случае отмечается, что должен произойти редирект, пропускаются все следующие правила и юзеру отдаётся перенаправление на указанную страницу.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Какой из этого вывод? &lt;b&gt;Не надо везде подряд ставить [L]. &lt;/b&gt;Если, конечно, хотите понимать, в каком порядке обрабатываются правила. Если [L] нигде не указан, то проход осуществляется строго подряд. Правда, когда правила закончатся, и окажется, что какое-то из них поменяло ссылку, всё равно будет запущен проход по всем правилам ещё раз. Но это уже гораздо проще контролировать.&lt;br /&gt;&lt;br /&gt;Например. Обычно ссылка после изменения не подходит под то же или под какое-либо другое правило. То есть, если вы перенаправляете /news в index.php/news:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;RewriteRule ^news/$ index.php/news&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;то второй раз это правило уже не сработает.&lt;br /&gt;&lt;br /&gt;Однако в моём случае нужно было запрос пользователя /news/section-name/ перенаправлять в /section-name/, а потом делать внутренний редирект обратно с /section-name/ на /news/section-name/, где находился обработчик новостей.  То есть:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;RewriteRule ^news/section-name/$ section-name/ [R=301,L]&lt;br /&gt;RewriteRule ^section-name/ news/section-name/&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt; Первый редирект внешний, второй внутренний. Если бы всё происходило в один проход, всё было бы нормально. Но так как проходы длятся пока срабатывает хотя бы одно правило, происходило следующее. Пользователь набрал /news/section-name/. Его внешним редиректом перенаправило на /section-name/. Потом сработало второе правило и произошёл внутренний редирект на news/section-name/. Потом mod_rewrite обнаружил, что ссылка изменилась, и инициировал повторную обработку запроса. Опять сработало первое правило, пользователь получил внешний редирект. Круг замкнулся.&lt;br /&gt;&lt;br /&gt;Для того, чтобы разрешить внешний редирект только в том случае, если запрос /news/section-name/ прислан пользователем, а не сгенерирован RewriteRule, приходится проверять %{THE_REQUEST}:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /news/section-name/&lt;br /&gt;RewriteRule ^news/(.*) /$1 [R=301,L]&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt; Работает: после внешнего редиректа пользователь запрашивает /section-name/, этот запрос попадает в THE_REQUEST и для первого правила не выполняется RewriteCond.&lt;br /&gt;&lt;br /&gt;За информацию спасибо следующим ссылкам:&lt;br /&gt;&lt;br /&gt; * &lt;a href=&quot;http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html&quot;&gt;http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html&lt;/a&gt;&lt;br /&gt; * &lt;a href=&quot;http://www.askapache.com/htaccess/mod_rewrite-basic-examples.html&quot;&gt;http://www.askapache.com/htaccess/mod_rewrite-basic-examples.html&lt;/a&gt;&lt;br /&gt; * &lt;a href=&quot;http://httpd.apache.org/docs/2.2/rewrite/rewrite_tech.html&quot;&gt;http://httpd.apache.org/docs/2.2/rewrite/rewrite_tech.html&lt;/a&gt;&lt;br /&gt;&amp;nbsp;* &lt;a href=&quot;http://www.google.com&quot;&gt;http://www.google.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Там написано, &lt;span style=&quot;font-weight: bold;&quot;&gt;почему &lt;/span&gt;при обработке правил в .htaccess происходят повторные запросы с повторным проходом по всем правилам, и почему при указании директив редиректа в &amp;lt;VirtualHost&amp;gt; или в глобальном конфиге Apache &lt;span style=&quot;font-weight: bold;&quot;&gt;не в разделе&lt;/span&gt; &amp;lt;Directory&amp;gt; проход происходит только один раз.</description>
  <comments>http://nisoi.livejournal.com/7254.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/6974.html</guid>
  <pubDate>Fri, 04 Jul 2008 08:59:41 GMT</pubDate>
  <title>ICQ - плохой, Jabber - хороший</title>
  <link>http://nisoi.livejournal.com/6974.html</link>
  <description>﻿Дорогие друзья.&lt;br /&gt;&lt;br /&gt;В связи с тем, что меня не устраивает политика AOL в отношении сторонних клиентов icq, я принял решение покинуть ICQ, а всем своим друзьям советовать jabber.  Мой JabberID - &lt;a href=&quot;mailto:cronfy@gmail.com&quot;&gt;cronfy@gmail.com&lt;/a&gt;, он же мой почтовый адрес для связи по электронной почте.&lt;br /&gt;&lt;br /&gt;Для того, чтобы подключиться к Jabber, достаточно &lt;a href=&quot;http://mail.google.com/mail/signup&quot;&gt;зарегистрировать аккаунт Gmail&lt;/a&gt;. У Google есть замечательная подробная &lt;a href=&quot;http://www.google.com/support/talk/bin/topic.py?topic=1415&quot;&gt;инструкция о настройке Jabber для аккаунта Gmail для различных IM-клиентов&lt;/a&gt; (английский вариант полнее, чем русский).&lt;br /&gt;&lt;br /&gt;Джаббер. кстати, ещё и шустрее работает. А в статье &lt;a href=&quot;http://www.habrahabr.ru/blog/im/33878.html&quot;&gt;&quot;Вперед в будущее! Переход с ICQ на Jabber&quot;&lt;/a&gt; подробно рассказывается о невероятных преимуществах этого протокола перед ICQ и о других способах подключения к Jabber. Там же описывается методы, позволяющие сохранить связь с существующими контактами ICQ через джаббер.</description>
  <comments>http://nisoi.livejournal.com/6974.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/6856.html</guid>
  <pubDate>Mon, 23 Jun 2008 18:30:26 GMT</pubDate>
  <title>Информеры для партнёрских сайтов</title>
  <link>http://nisoi.livejournal.com/6856.html</link>
  <description>Проведя несколько последних дней в борьбе и информерами, которые должны размещаться на партнёрских сайтах, пришёл к выводу, что полученный опыт стоит того, чтобы его не забыть.&lt;br /&gt;&lt;br /&gt;Информеры - это когда на сайте есть новости,&amp;nbsp; и хочется блоки со свежими новостями размещать на сайтах-партнёрах для привлечения трафика. &lt;br /&gt;&lt;br /&gt;Чеклист получился довольно недлинный:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;единая структура;&lt;/li&gt;&lt;li&gt;стили: префикс для названий классов, общий класс и  раздельные классы для представлений;&lt;/li&gt;&lt;li&gt;разные форматы; &lt;/li&gt;&lt;li&gt;кодировка может быть разной;&lt;/li&gt;&lt;li&gt;ссылки наружу и таргет;&lt;/li&gt;&lt;li&gt;аргументы для модификации информера;&lt;/li&gt;&lt;li&gt;показ X новостей из последних X*2 новостей.&lt;/li&gt;&lt;/ul&gt;Ниже обо всём подробнее.&lt;b&gt;&lt;br /&gt;&lt;br /&gt;Структура&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;В целом структуру целесообразно  делать одинаковой для всех вариантов представления. В крайнем случае, если определённый стиль информера не предполагает блока текста, можно отдать пустой параграф, но структуру лучше сохранить. Это избавит от неожиданностей при желании &quot;немного поменять css&quot;, а также сделает возможным полностью отцепить всё оформление от самого информера и положить его в отдельную css&apos;ку. Когда точно знаешь, что все информеры одинаковые внутри, это воодушевляет (вообще-то, когда что-то знаешь &lt;i&gt;точно&lt;/i&gt;, это всегда воодушевляет ;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Стили&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Всё внешнее представление выносится в стили. Особое внимание нужно обратить на названия классов - они должны начинаться с какого-либо префикса, чтобы не смешаться со стилями сайта, на котором размещается информер. Общий для всех представлений класс можно назвать &lt;b&gt;&lt;font color=&quot;#808000&quot;&gt;my-site-informer&lt;/font&gt;&lt;/b&gt;, а классы различного оформления - &lt;b&gt;&lt;font color=&quot;#808000&quot;&gt;my-site-informer-compact, my-site-informer-full, my-site-informer-horiz&lt;/font&gt;&lt;/b&gt; и так далее. Довольно длинно, зато если на сайте партнёра два информера с вашего сайта, выполненные в разных стилях, их классы не перемешаются в неразборчивую кашу.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Формат&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;Нужно предусмотреть возможность получения информера как минимум в html и в виде ява-скрипта (достаточно document.write, главное не забыть заэскейпить &quot;\r&quot;, &quot;\n&quot; и &quot;&apos;&quot;). Случаи бывают разные.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Кодировка&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Это удивительно, но на сайтах-партнёрах может быть кодировка, отличная от использующейся на вашем сайте UTF-8 ;) Необходимо предусмотреть возможность через аргументы в ссылке или каким-либо другим способом задать желаемую кодировку информера. &lt;font color=&quot;#003366&quot; style=&quot;color: rgb(255, 102, 0);&quot;&gt;windows-1251, utf-8&lt;/font&gt;... пожалуй, хватит.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ссылки&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ссылки должны быть абсолютными. У ссылок должен быть _target. Это выглядит очевидным, но об этом легко забыть в порыве побыстрее посмотреть на результат и покликать по ссылкам.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Другие аргументы&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Довольно удобно, если аргументами в ссылке можно задать количество новостей в информере. Стандартные блоки по 3. 5, 10 новостей - это отлично, но есть люди, которым нравятся другие числа ;-)&lt;br /&gt;&lt;br /&gt;Если на сайте несколько разделов новостей, довольно просто сделать так, чтобы можно было лёгким изменением ссылки выбрать любой из них. Информер для двадцати разделов пишется так же, как и информер для одного, разница только в одной переменной. А партнёрам приятно.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Разброс новостей&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Информер из пяти блоков показывает пять самых свежих новостей.  Но менее свежим новостям, которые не влезают в блок, от этого становится скучно. Можно исправить эту ситуацию, показывая в пяти новостях две самые свежие новости, и три выбирая случайным образом из десяти последних.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ну и примеры&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;border: 1px solid rgb(119, 119, 119); padding: 1ex 1em 2ex; background-color: rgb(221, 221, 221);&quot;&gt;&lt;br /&gt;css:&lt;br /&gt;&lt;br /&gt;/* common style */&lt;br /&gt;&lt;br /&gt;div.mysite-informer {&lt;br /&gt;  width: 100%;&lt;br /&gt;  text-align: left;&lt;br /&gt;  font-family: Tahoma, Verdana, Arial, sans-serif; &lt;br /&gt;}&lt;br /&gt;div.mysite-informer * {&lt;br /&gt;  margin: 0; padding: 0; border: 0; float: none;&lt;br /&gt;  line-height: 100%; color: black;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* hotline style */&lt;br /&gt;&lt;br /&gt;div.mysite-informer-hotline div.mysite-informer-post { &lt;br /&gt;  float: left; width: 20%; text-align: center;&lt;br /&gt;}&lt;br /&gt;div.mysite-informer-hotline div.mysite-informer-post p.mysite-informer-description {&lt;br /&gt;  padding: 5px 0.5em; margin: 0; font-size: 12px;&lt;br /&gt;}&lt;br /&gt;div.mysite-informer-hotline img {&lt;br /&gt; &amp;nbsp;border: none; width: 125; height: 93; &lt;br /&gt;}&lt;br /&gt;div.mysite-informer-hotline a.mysite-informer-morelink {&lt;br /&gt;  display: none;&lt;br /&gt;}&lt;br /&gt;div.mysite-informer-hotline div.mysite-informer-post p.mysite-informer-date {&lt;br /&gt;  display: none;&lt;br /&gt;}&lt;br /&gt;div.mysite-informer-hotline div.mysite-informer-post h3 {&lt;br /&gt;  display: none;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;html:&lt;br /&gt;&lt;br /&gt;&amp;lt;div class=&quot;mysite-informer mysite-informer-hotline&quot;&amp;gt;&lt;br /&gt;  &amp;lt;div class=&quot;mysite-informer-post&quot;&amp;gt;&lt;br /&gt;     &amp;lt;a href=&quot;http://www.example.com/news/new-year-of-orange-sky.html&quot;&amp;gt;&lt;br /&gt;       &amp;lt;img src=&quot;http://www.example.com/images/news/10928-thumb.gif&quot;&lt;br /&gt;           &amp;nbsp;alt=&quot;Orange sky with birds&quot; /&amp;gt;&lt;br /&gt;     &amp;lt;/a&amp;gt;&lt;br /&gt;     &amp;lt;p class=&quot;mysite-informer-description&quot;&amp;gt;&lt;br /&gt;       Orange sky gets more than just a few clouds up there&lt;br /&gt;       &amp;lt;a href=&quot;http://www.example.com/news/new-year-of-orange-sky.htm&quot; &lt;br /&gt;          class=&quot;mysite-informer-morelink&quot;&amp;gt;&lt;br /&gt;         подробнее »&lt;br /&gt;       &amp;lt;/a&amp;gt;&lt;br /&gt;     &amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;Ссылка для получения информера из раздела сайта miracle&lt;br /&gt;с 7-ю блоками новостей:&lt;br /&gt;&lt;br /&gt;http://www.example.com/informer/miracle.js?style=hotline&amp;amp;charset=windows-1251&amp;amp;qty=7&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</description>
  <comments>http://nisoi.livejournal.com/6856.html</comments>
  <category>чеклист</category>
  <category>кусочки сайта</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/6644.html</guid>
  <pubDate>Wed, 14 May 2008 23:02:55 GMT</pubDate>
  <title>Linux, символы Unicode: длинное тире и сотоварищи</title>
  <link>http://nisoi.livejournal.com/6644.html</link>
  <description>Помимо написания скриптов на php, сегодня я также задался вопросом, каким образом можно в Linux набирать Unicode-символы (как &lt;kbd&gt;&amp;lt;Alt&amp;gt; + 0151&lt;/kbd&gt; для длинного тире в Windows). &lt;kbd&gt;Alt&lt;/kbd&gt; с кодом у меня не заработал (то ли из-за ноутбучной клавиатуры, то ли Linux так не умеет), и я решил со злости погуглить.&lt;br /&gt; &lt;br /&gt;Практически сразу мне на глаза попалась &lt;a href=&quot;http://kaktyc.wordpress.com/2007/02/05/using-exotic-unicode-symbols-in-xorg/&quot;&gt;хорошая статья о вводе символов Unicode в Linux&lt;/a&gt;. Вместо номера символа используются последовательности вроде &lt;kbd&gt;&amp;lt;Win&amp;gt; + ---&lt;/kbd&gt; для длинного тире, &lt;kbd&gt;&amp;lt;Win&amp;gt; + &amp;gt;&amp;gt;&lt;/kbd&gt; для правой «ёлочки», и т. д. Причём вместо Win можно назначать &lt;kbd&gt;&amp;lt;Ctrl&amp;gt;&lt;/kbd&gt;, &lt;kbd&gt;&amp;lt;Alt&amp;gt;&lt;/kbd&gt; или даже &lt;kbd&gt;&amp;lt;Caps Lock&amp;gt;&lt;/kbd&gt;. Конечно, все символы так не введёшь, но популярные вводить довольно удобно, и последовательности легко запоминаются.&lt;br /&gt;&lt;br /&gt;Кстати, в SuSE под KDE такое поведение настраивается одной галкой (Оборудование -&amp;gt; Раскладка клавиатуры -&amp;gt; Настройки -&amp;gt; в длинном списке раздел &quot;Расположение клавиши последовательности&quot;). Работает даже в mcedit, честное слово.</description>
  <comments>http://nisoi.livejournal.com/6644.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/6392.html</guid>
  <pubDate>Wed, 14 May 2008 20:28:26 GMT</pubDate>
  <title>Кто обрабатывает раньше: mod_php или mod_include</title>
  <link>http://nisoi.livejournal.com/6392.html</link>
  <description>Сегодня, в этот прекрасный вечер, сочиняя совмещённый php/SSI&apos;ный скрипт я вдруг осознал, что не знаю, какой обработчик выполняется раньше: mod_php или mod_include. А даже если и догадываюсь, то не знаю однозначно, &lt;b&gt;почему&lt;/b&gt;. Пришлось прибегнуть к помощи эксперимента с использованием Apache 2.2:&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;4&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Эксперимент&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Вот include.php:&lt;br /&gt;&lt;pre style=&quot;border: 1px solid rgb(119, 119, 119); background-color: rgb(204, 204, 204); color: rgb(0, 0, 0);&quot;&gt;&amp;lt;?php&lt;br /&gt;echo &quot;&amp;lt;!--#include virtual=&apos;include.inc&apos; --&amp;gt;&quot;;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;А вот include.inc:&lt;br /&gt;&lt;pre style=&quot;border: 1px solid rgb(119, 119, 119); background-color: rgb(204, 204, 204); color: rgb(0, 0, 0);&quot;&gt;&amp;lt;div&amp;gt;That guy said: &quot;Do never try to do this trick!&quot;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;Ну и .htaccess:&lt;br /&gt;&lt;pre style=&quot;border: 1px solid rgb(119, 119, 119); background-color: rgb(204, 204, 204); color: rgb(0, 0, 0);&quot;&gt;Options +Includes&lt;br /&gt;AddOutputFilter INCLUDES  .php&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Если сначала запустится mod_php, а потом mod_include, то результатом будет строка, приведённая в include.inc. А если сначала выполнится mod_include, а потом mod_php, то кавычки из include.inc разобъют строку, и результатом будет syntax error.&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;4&quot; style=&quot;font-weight: bold;&quot;&gt;Результаты&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Результатом выполнения скрипта явилась строчка из include.inc. Что означает, что сначала файл обрабатывается mod_php, а на выходе пропускается через mod_include. Ура, товарищи: можно генерировать директивы SSI прямо из php.&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;font size=&quot;4&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Почему&lt;br /&gt; &lt;/span&gt;&lt;/font&gt;&lt;br /&gt;К сожалению, результаты эксперимента показывают, &lt;span style=&quot;font-weight: bold;&quot;&gt;что&lt;/span&gt; будет, но не объясняют, &lt;span style=&quot;font-weight: bold;&quot;&gt;почему&lt;/span&gt; это происходит. &lt;a href=&quot;http://httpd.apache.org/docs/2.2/mod/mod_include.html&quot;&gt;Документация по mod_include&lt;/a&gt; гласит, что модуль работает как output filter, обрабатывая сгенерированный контент, в то время как mod_php с точки зрения Apache работает в качестве content generator (явного подтверждения этому, как и девелоперской документации по mod_php, я не нашёл, но логика мне подсказывает, что это так).&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;В Apache 1.3 модуль mod_include работал через SetHandler, но проверить, как он поведёт себя с php, мне сейчас не на чем.&lt;br /&gt;&lt;br /&gt;В Apache 2.2 обработку контента вообще можно настроить через mod_filter, который позволяет выстроить обработчики в любую последовательность. А mod_php может собраться как apache2filter, что позволит встраивать его в эту цепочку.&lt;br /&gt;&lt;br /&gt;&lt;font size=&quot;4&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Резюме&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;Вопрос не стоил исследования ;-) По крайней мере, оно работает так, как хочется, и в будущем, очевидно, &quot;как хочется&quot; будет весьма конфигурабельным.</description>
  <comments>http://nisoi.livejournal.com/6392.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/6029.html</guid>
  <pubDate>Sat, 15 Mar 2008 21:05:20 GMT</pubDate>
  <title>XML 10 лет</title>
  <link>http://nisoi.livejournal.com/6029.html</link>
  <description>&lt;a href=&quot;http://www.w3.org/2008/xml10/card/greeting-form&quot;&gt;10 февраля XML стукнуло 10 лет.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Цитата с сайта:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&quot;Присоединяйтесь к празднованию десятилетия XML! Присылайте нам истории про XML, ссылки на посты в блогах про XML, видео про XML и ещё чего-нибудь!&quot;&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;а ещё анекдоты про XML, песни про XML :) Чёрт, хотел бы я так увлекаться ;-)</description>
  <comments>http://nisoi.livejournal.com/6029.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/5744.html</guid>
  <pubDate>Mon, 03 Mar 2008 21:17:36 GMT</pubDate>
  <title>Божественный грув</title>
  <link>http://nisoi.livejournal.com/5744.html</link>
  <description>Обалдеть. Обалдеть. Обалдеть.&lt;br /&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=uNw9YaXemlM&quot;&gt;http://www.youtube.com/watch?v=uNw9YaXemlM&lt;/a&gt;</description>
  <comments>http://nisoi.livejournal.com/5744.html</comments>
  <category>гитара</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/5460.html</guid>
  <pubDate>Sat, 09 Feb 2008 12:30:19 GMT</pubDate>
  <title>Блог об IT бизнесе</title>
  <link>http://nisoi.livejournal.com/5460.html</link>
  <description>Никогда ещё не читал одного человека подряд в таком количестве. Даже несмотря на принципиальное несогласие с некоторыми моментами - &lt;a href=&quot;http://victorronin.com/&quot;&gt;хочется читать дальше, и желание оправдывается&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Принципиальное несогласие подразумевается в тяжёлом смысле: бывает, встретишь какой-либо поворот мысли, и обычно чтение блога на этом прекращается. Здесь есть близкие моменты, но они, кажется, только подогревают интерес ;-)&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Отвлечённо&lt;/i&gt;: заодно задумался о том, что не всегда важно, что именно пишет сам автор, важно, какой он создаёт резонанс. Автор может писать вроде умные вещи, но они не остаются в памяти. А может весь блог заполнить пустяковыми постами, но люди вокруг этого блога собираются такие, что дарят ему жизнь.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD:&lt;/b&gt; Прошёл месяц, и желание читать дальше иссякло. Подписка на блог не оправдалась ни одним интересным постом.&amp;nbsp; Спасибо за хорошее начало, жаль, что не получилось.</description>
  <comments>http://nisoi.livejournal.com/5460.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/5259.html</guid>
  <pubDate>Fri, 08 Feb 2008 23:17:50 GMT</pubDate>
  <title>Креативище</title>
  <link>http://nisoi.livejournal.com/5259.html</link>
  <description>Н. О. М. Сначала хотел выложить отдельные ссылки, но на самом деле нужно смотреть всё, что можно найти на Youtube. Очень порадовали сегодня вечером. &quot;Мушыща&quot; и &quot;Кот Васька&quot; - в качестве затравочной частности :-)</description>
  <comments>http://nisoi.livejournal.com/5259.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/5101.html</guid>
  <pubDate>Sat, 05 Jan 2008 15:46:17 GMT</pubDate>
  <title>Коньяк</title>
  <link>http://nisoi.livejournal.com/5101.html</link>
  <description>Эти странные русские пьют коньяк, чтобы напиться...</description>
  <comments>http://nisoi.livejournal.com/5101.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/4674.html</guid>
  <pubDate>Fri, 04 Jan 2008 21:07:46 GMT</pubDate>
  <title>Мессаракш</title>
  <link>http://nisoi.livejournal.com/4674.html</link>
  <description>Чёрт, не хочу писать записки.&lt;br /&gt;&lt;br /&gt;Оказывается, что если обратный слеш написать курсивом, то получится очень слабо наклонённый прямой.</description>
  <comments>http://nisoi.livejournal.com/4674.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/4548.html</guid>
  <pubDate>Thu, 04 Oct 2007 19:16:21 GMT</pubDate>
  <title>ЛДМ - ужасный боулинг</title>
  <link>http://nisoi.livejournal.com/4548.html</link>
  <description>Я от многих слышал, но теперь убедился воочию, насколько ужасен может быть боулинг, и насколько он ужасен в ЛДМ.&lt;br /&gt;&lt;br /&gt;Дорожки неровные и не отполированы (шары по ним катятятся, а не скользят). Зато на дорожках для разбега в выданных ботинкак можно устраивать фигурное катание или лыжный забег.&lt;br /&gt;&lt;br /&gt;Шары угловатые. Персонал (частично) хамоватый.&lt;br /&gt;&lt;br /&gt;Пинсеттеры (машинки, выставляющие кегли) глючат, сваливают кегли при установке. Иногда выставляют...&amp;nbsp; мм.. такое впечатление, что выставляют количество предыдущего игрока. Скажем, надо выставить для очередного игрока десять кеглей, а он выставляет четыре. После этого бросок проходит мимо, а он считает шесть (ну это, впрочем, уже правильно :-).&lt;br /&gt;&lt;br /&gt;Иногда всё зависает. Кегли лежат, бросай - не бросай, а эффекта ноль: никто их не убирает, никто не выставляет. И софт везде разный (или настройки?) - анимация не везде есть, за некоторыми дорожками скучновато :-)&lt;br /&gt;&lt;br /&gt;Стульчики фиксированные, не покрутиться, не устроиться.&lt;br /&gt;&lt;br /&gt;На ботинках три (!!!) разных номера. На моих на подошве снизу было написано 37, на подошве сзади 22, а на самом ботинке сзади 12. Нет, наверное, это связано с какой-то традицией, наверное, я просто не знаю. Но юзабилити, как же юзабилити?!&lt;br /&gt;&lt;br /&gt;Не хотелось бы оказаться там ещё раз.</description>
  <comments>http://nisoi.livejournal.com/4548.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/4226.html</guid>
  <pubDate>Thu, 04 Oct 2007 07:56:58 GMT</pubDate>
  <title>Moscow Ripe Meeting 2007 - итоги</title>
  <link>http://nisoi.livejournal.com/4226.html</link>
  <description>Расскажу в общих чертах, что было на райпе.&lt;br /&gt;&lt;br /&gt;Было не так, как в прошлом году. В прошлом году было больше интересных и разнообразных презентаций. В этом году выступлений было субъективно меньше, а процент пустой болтовни субъективно больше. Зато устроили долгую дискуссию на тему Internet Governance (кто управляет Интернетом и как это надо делать) применительно к России, даже приехал господин чиновник, который поучаствовал в дискуссии, а потом был &quot;срочно вызван на совещание&quot;. Из того, что было сказано применительно к правительству, запомнился только призыв идти в ряды чиновников исправлять ситуацию с тем, что у них там большая часть в обсуждаемой теме ничего не понимает. Живее всех выступал юрист, который в основном распространялся за и против отмены анонимности в интернете. И кстати, во многом, как ни удивительно, против. Упомянули про &lt;a href=&quot;http://www.intgovforum.org/&quot;&gt;Internet Governance Forum, который пройдёт в ноябре в Рио&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;В итоге дискуссии осталось общее ощущение неясности и незавершённости.&lt;br /&gt;&lt;br /&gt;Выступал товарищ и ГПТ на тему DNSSEC. Презентация была не технической, и в основном сообщала:&amp;nbsp; &quot;DNSSEC - это очень хорошо, у нас он есть, мы - регистратор номер один&quot;. Увы, но больше похоже на биение себя в грудь. Макс Тулев в прошлом году рассказывал интереснее и полезнее, и почти без рекламы.&lt;br /&gt;&lt;br /&gt;Далее был небольшой докладик на тему работы провайдеров во время и после тайваньского землетрясения, немного завуалированной рекламы Internet Exchange&apos;й и презентация на тему ENUM с призывом к провайдерам присоединяться к разработке.&lt;br /&gt;&lt;br /&gt;Ну и я за кофепитием пытался пропиарить идею создания места обсуждения проблем DDoS-атак и вообще всяких нежелательных проявлений в сети. После Хайлоада оказалось, что информации очень мало и всё в зачаточном состоянии. Поделиться проблемами и идеями не то, чтобы не с кем, но негде. Лист рассылки? Сайт? Форум? &lt;br /&gt;В общем, я зазывал народ к объединению усилий.&lt;br /&gt;&lt;br /&gt;Потом была пьянка, что про неё рассказывать, всё и так понятно :-) &lt;br /&gt;&lt;br /&gt;Второй день - семинары, как всегда интересные, как всегда с харизматичным Арно в роли ведущего.&lt;br /&gt;&lt;br /&gt;Кроме райпа съездил в офис Яндекса. У Яндекса в офисе классно :-) Вернулся с подарками.</description>
  <comments>http://nisoi.livejournal.com/4226.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/3937.html</guid>
  <pubDate>Mon, 01 Oct 2007 16:28:14 GMT</pubDate>
  <title>Moscow Ripe NCC Regional Meeting</title>
  <link>http://nisoi.livejournal.com/3937.html</link>
  <description>Намерен сегодня отправиться поездом в Москву на &lt;a href=&quot;http://ripe.net/meetings/regional/moscow-2007/index.html&quot;&gt;Райповский митинг&lt;/a&gt;. На этот раз доклады жечь не буду, зато есть надежда снова увидеть много умных и больших дядек, с которыми можно будет познакомиться покороче на спонсорской (&lt;a href=&quot;http://www.nic.ru&quot;&gt;RU-CENTER&lt;/a&gt;) пьянке.&lt;br /&gt;&lt;br /&gt;Едем целой компанией из Петерхоста, да ещё &lt;span class=&apos;ljuser  ljuser-name_schors&apos; lj:user=&apos;schors&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://schors.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://schors.livejournal.com/&apos;&gt;&lt;b&gt;schors&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; обещает на вокзале встретить :-)</description>
  <comments>http://nisoi.livejournal.com/3937.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/3753.html</guid>
  <pubDate>Sat, 29 Sep 2007 21:53:43 GMT</pubDate>
  <title>Сделали патч для MySQL</title>
  <link>http://nisoi.livejournal.com/3753.html</link>
  <description>Чуть больше месяца назад нашёл &lt;a href=&quot;http://bugs.mysql.com/bug.php?id=30587&quot;&gt;баг в MySQL, который стабильно приводил к падению&lt;/a&gt; сервера MySQL любой версии (4.x/5.0/5.1).&amp;nbsp; Запостил в bugs.mysql.com, сел ждать. Наконец, после месяца обсуждений и бэктрейсов, появился патч, а на днях пришло сообщение о том, что он закоммичен и принят.&lt;br /&gt;&lt;br /&gt;Йес.</description>
  <comments>http://nisoi.livejournal.com/3753.html</comments>
  <category>патчи</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/3529.html</guid>
  <pubDate>Sat, 29 Sep 2007 21:36:52 GMT</pubDate>
  <title>Блондинко vs старче</title>
  <link>http://nisoi.livejournal.com/3529.html</link>
  <description>Вот что, кстати, интересно. В настоящее время укореняются в разговорной речи такие формы, как &quot;блондинко&quot;, &quot;креведко&quot;, &quot;дракончег&quot;, &quot;курьерко&quot; и прочее. &lt;br /&gt;&lt;br /&gt;Может быть, это не что иное, как реинкарнация ранее почившего звательного падежа в русском языке? Может быть, не хватает языку этой сущности, вот он и выкручивается, как может, восполняя утраченных &quot;старче&quot;, &quot;человече&quot;, &quot;врачу&quot;, &quot;владыко&quot;?&lt;br /&gt;&lt;br /&gt;Такой вот поворот событий.</description>
  <comments>http://nisoi.livejournal.com/3529.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/3123.html</guid>
  <pubDate>Mon, 24 Sep 2007 19:00:51 GMT</pubDate>
  <title>Первый день Хайлоада</title>
  <link>http://nisoi.livejournal.com/3123.html</link>
  <description>Хайлоад. Вернулся недавно, так что впечатления самые свежие.&lt;br /&gt;&lt;br /&gt;Во-первых, было интересно. Доклады всё-таки уникальные. В раздаточном материале толстенная книжка + DVD с докладами с РИТ-2007. Во-вторых, было весело, особенно когда всем залом шло перекрёстное гнобление между выступавшим с докладом поисковым спамером и разработчиками поисковых систем. Он так честно и говорил - я поисковый спамер, и надеюсь, что после доклада я буду всё ещё в состоянии ответить на ваши вопросы :-) В-третьих, там собралось очень много известных дядек. Один только &lt;a href=&quot;http://highload.ru/guru/&quot;&gt;список приглашённых гуру&lt;/a&gt; чего стоит.&lt;br /&gt;&lt;br /&gt;Из минусов: высоконагрузочное тестирование конференц-площадки провалилось :) На входе и регистрации была изрядная очередь и толкучка. Обедов всем не хватило, в кофе-брейки не хватало кофе, пирожных, чай приходилось пить из чашек для супа, а сахар размешивать столовой ложкой. Впрочем, организаторы сказали, что они на этой конференции, как и все, учатся, и что в следующий раз обязательно всё учтут.&amp;nbsp; Все мы надеемся, что высоконагрузочное тестирование теплохода после конференции пройдёт без эксцессов :-)&lt;br /&gt;&lt;br /&gt;Сами отчитались неплохо,&amp;nbsp; нам самим понравилось. Конец доклада превратился в групповое обсуждение всех вопросов с выдёргиванием микрофона из рук между Филом Кулиным, Мастерхостом и мной, слушатели, впрочем, тоже не отставали и на многие вопросы отвечали друг другу сами.&lt;br /&gt;&lt;br /&gt;Завтра с чистой совестью и спокойным сердцем буду слушать остальные доклады, а потом, чувствую, напьюсь :-)</description>
  <comments>http://nisoi.livejournal.com/3123.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/3025.html</guid>
  <pubDate>Fri, 21 Sep 2007 11:16:29 GMT</pubDate>
  <title>Напиши скрипт для робота на php!</title>
  <link>http://nisoi.livejournal.com/3025.html</link>
  <description>&lt;a href=&quot;http://www.cnews.ru/news/top/index.shtml?2007/09/20/266895&quot;&gt;http://www.cnews.ru/news/top/index.shtml?2007/09/20/266895&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Вот и роботов делать начали.. интересно, скоро на него Linux поставят? Тогда можно будет скрипты управления на php писать :-)&lt;br /&gt;&lt;br /&gt;Представляю.. 2015 год.. PeterRobt предлагает высококачественную услугу - виртуального выделенного робота! Робот поддерживает php, .htaccess и вход через ssh-коннектор. Все роботы размещены в нашем робо-центре в Москве и оснащены высокоскоростным каналом в Матрицу.</description>
  <comments>http://nisoi.livejournal.com/3025.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://nisoi.livejournal.com/2567.html</guid>
  <pubDate>Thu, 20 Sep 2007 21:00:15 GMT</pubDate>
  <title>Конференция Highload</title>
  <link>http://nisoi.livejournal.com/2567.html</link>
  <description>Еду в Москву на &lt;a href=&quot;http://www.highload.ru&quot;&gt;Конференцию разработчиков высоконагруженных систем&lt;/a&gt;, буду там читать &lt;a href=&quot;http://www.highload.ru/thesis/3609.html&quot;&gt;доклад про ограничение ресурсов на виртуальном хостинге и DoS-атаки&lt;/a&gt;. Конференция обещает быть интересной, и есть надежда, что организаторы разродятся видео всех докладов, как это было сделано на конференции &lt;a href=&quot;http://rit2007.ru/&quot;&gt;РИТ-2007&lt;/a&gt;. После конференции поедем кататься на теплоходе :)&lt;br /&gt;&lt;br /&gt;Уезжаю завтра вечером, приезжаю обратно в среду утром. &lt;br /&gt;Докладов никогда раньше не читал :) Сдающего экзамен принято ругать, а что принято делать для читающего доклад?</description>
  <comments>http://nisoi.livejournal.com/2567.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
</channel>
</rss>
