<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>ЗНАМЯ ЗАНАМИ</title>
	
	<link>http://www.znm.ru</link>
	<description>Официальная многотиражка креативного кооператива</description>
	<pubDate>Wed, 21 Mar 2012 02:21:59 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/zanami" /><feedburner:info uri="zanami" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Потешил тщеславие</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/jaTQMw8wsHA/poteshil-tshheslavie-295</link>
		<comments>http://www.znm.ru/poteshil-tshheslavie-295#comments</comments>
		<pubDate>Wed, 21 Mar 2012 02:21:57 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[дизайн]]></category>

		<category><![CDATA[журнал]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=295</guid>
		<description><![CDATA[В начале года оформил предварительный заказ на Smashing Book #3: Redesign The Web. Посвящена она, очевидно, редизайну сайтов.

Самое время, похоже — все желающие уже сделали себе сайты, если не брать в расчет новый бизнес. Сейчас пора их обновлять, поскольку большинство сайтов компаний, далеких от IT и электронной коммерции, выглядят ужасно. Я как-то поискал в Google [...]]]></description>
			<content:encoded><![CDATA[<p>В начале года оформил предварительный заказ на Smashing Book #3: Redesign The Web. Посвящена она, очевидно, редизайну сайтов.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2012/03/redesign-the-web-1.jpg" alt="Redesign the web"  border="0" width="500" height="361" /></p>
<p>Самое время, похоже — все желающие уже сделали себе сайты, если не брать в расчет новый бизнес. Сейчас пора их обновлять, поскольку большинство сайтов компаний, далеких от IT и электронной коммерции, выглядят ужасно. Я как-то поискал в Google &#8220;road construcеion contractor&#8221; — с первой же страницы списка начинается уныние, а местами и ужас. Я не пробовал, но вполне уверен, что открывать такие сайты с iPad или iPhone не стоит. Анонс книги я не особо изучал, но глава об оптимизации сайтов под планшеты и смартфоны там обязана быть.</p>
<p>А сегодня Smashing Magazine прислал предложение запечатлеть свое имя в печатной версии книги. Сомневался я недолго.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2012/03/vanity-lol.jpg" alt="Vanity lol" border="0" width="500" height="315" /></p>
<p>Никакого смысла это предприятие не имело, поскольку я купил электронную версию книги — так дешевле, да и доставку ждать не надо. Короче, ни себе посмотреть, ни друзьям показать.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/poteshil-tshheslavie-295/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/poteshil-tshheslavie-295</feedburner:origLink></item>
		<item>
		<title>Как добавить свои сервисы в Watchdog на Plesk 10</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/caZeOPGEPrM/kak-dobavit-svoi-servisy-v-watchdog-na-plesk-10-291</link>
		<comments>http://www.znm.ru/kak-dobavit-svoi-servisy-v-watchdog-na-plesk-10-291#comments</comments>
		<pubDate>Mon, 05 Mar 2012 08:09:08 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Работа]]></category>

		<category><![CDATA[plesk]]></category>

		<category><![CDATA[хостинг]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=291</guid>
		<description><![CDATA[В панели управления Parallels Plesk есть модуль Watchdog, который мониторит сервисы, диски, ищет вредоносные гадости и т.п. В основе этого лежат monit и rkhunter. С хантером позже разберемся, сейчас речь о monit.
Parallels и тут все переделали на свой лад. Очевидно, с целью облегчить жизнь мэйнстриму. Попутно осложнив жизнь разным извращенцам.
В панели по пути Modules &#8594; [...]]]></description>
			<content:encoded><![CDATA[<p>В панели управления Parallels Plesk есть модуль Watchdog, который мониторит сервисы, диски, ищет вредоносные гадости и т.п. В основе этого лежат monit и rkhunter. С хантером позже разберемся, сейчас речь о monit.</p>
<p>Parallels и тут все переделали на свой лад. Очевидно, с целью облегчить жизнь мэйнстриму. Попутно осложнив жизнь разным извращенцам.</p>
<p>В панели по пути Modules &rarr; Watchdog обнаруживается жестко заданный список сервисов, которые Plesk умеет мониторить. Добавить свой можно так.</p>
<p>1. <strong>Нужно добавить запись в таблицу MySQL psa.module_watchdog_service</strong>. Формат простой, нужно ввести название и описание, команду для запуска и остановки, путь к pid файлу. Там по аналогии разобраться несложно.</p>
<p>2. <strong>Далее, в папке /usr/local/psa/etc/modules/watchdog/service.tpl.d</strong> нужно создать файл с названием сервиса. Формат файла на примере nginx.</p>
<pre>
check process nginx
    with pidfile "/var/run/nginx.pid"
    start = "&lt;nginx_start&gt;"
    stop = "&lt;nginx_stop&gt;"
    if failed host &lt;default_apache_ip&gt; port 80 send "GET / HTTP/1.1\r\nHost: &lt;default_apache_ip&gt;\r\n\r\n" expect "HTTP/1\.[01x] [1-4][0-9]{2} .*\r\n"
    with timeout &lt;nginx_connection_timeout&gt; seconds then restart
    if &lt;nginx_timeout_restarts&gt; restarts within &lt;nginx_timeout_cycles&gt; cycles then timeout
    every &lt;nginx_cycles&gt; cycles
    mode &lt;nginx_mode&gt;
</pre>
<p>Кстати сказать, еще один шаблон мне тоже потребовалось поменять — после <a href="http://www.znm.ru/pamyatka-plesk-nginx-apache-270">установки nginx и изменения порта для apache</a> нужно скорректировать порт apache в файле /usr/local/psa/etc/modules/watchdog/monitrc.tpl. Из этого же файла я взял переменную &lt;default_apache_ip&gt; — в таблице она не хранится, где-то жестко зашита в Plesk.</p>
<p>Править нужно именно шаблоны, сразу складывать файлы в service.d и править monitrc не стоит — Plesk их перепишет.</p>
<p>3. Все, после перезапуска Watchdog Plesk создаст и обновит файлы и будет мониторить добавленные сервисы. Как из командной строки перезапустить Watchdog  я не знаю, поэтому просто отключил/включил мониторинг в панели управления (Modules &rarr; Watchdog &rarr; Disable/Enable).</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2012/03/custom-watchdog-plesk.jpg" alt="Добавить свой сервис в  watchdog plesk" title="custom-watchdog-plesk.jpg" border="0" width="500" height="484" /></p>
<p>Забавно — моя лицензия на Plesk не позволяет управлять Tomcat, но я его <a href="http://www.znm.ru/drupal-tomtcat-apache-solr-na-centos-5-225">поставил самостоятельно</a> и использую чисто для себя. Так вот, штатный Watchdog не может мониторить Tomcat, соответствующая запись отключена, но добавленная по аналогии с nginx конфигурация по имени Tomcat5 вполне работает.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/kak-dobavit-svoi-servisy-v-watchdog-na-plesk-10-291/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/kak-dobavit-svoi-servisy-v-watchdog-na-plesk-10-291</feedburner:origLink></item>
		<item>
		<title>Массовая выгрузка объявлений на сайт «Из рук в руки»</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/0srCkVgrjIs/massovaya-vygruzka-obyavlenij-na-sajt-iz-ruk-v-ruki-288</link>
		<comments>http://www.znm.ru/massovaya-vygruzka-obyavlenij-na-sajt-iz-ruk-v-ruki-288#comments</comments>
		<pubDate>Mon, 27 Feb 2012 07:18:44 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Работа]]></category>

		<category><![CDATA[drupal]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=288</guid>
		<description><![CDATA[Сайт «Из рук в руки» потихоньку раскручивается в отрыве от своих печатных версий. В том числе за счет привлечения компаний, которым за денежку предлагают размещать свои объявления в массовом порядке. Судя по предлагаемой структуре выгрузки в XML, изначально расчет был на агентства, торгующие недвижимостью. У нас другой случай — запчасти, много контрактных (бэушных) запчастей для [...]]]></description>
			<content:encoded><![CDATA[<p>Сайт «Из рук в руки» потихоньку раскручивается в отрыве от своих печатных версий. В том числе за счет привлечения компаний, которым за денежку предлагают размещать свои объявления в массовом порядке. Судя по предлагаемой структуре выгрузки в XML, изначально расчет был на агентства, торгующие недвижимостью. У нас другой случай — запчасти, <a href="http://nikas-dv.ru/">много контрактных (бэушных) запчастей</a> для японских автомобилей. Торговать ими хочется по всей России.</p>
<p>Необходимо и достаточно: Drupal 7, Views 3, модуль <a href="http://drupal.org/project/views_data_export">views data export</a>, drush, пара часов времени.</p>
<p>1. Создаем представление (view) для вывода списка позиций (запчастей). Тип представления — data export, формат XML. Стандартный XML, который генерирует Viws Data Export не подходит под требования ИРР, надо переопределять шаблон представления. Используем drush views-data export view-name display-id adverts.xml для создания файла с предлложениями.</p>
<p>2. Копируем display, нам потребуется еще список картинок. Удаляем все поля, за исключением imagefield, формат вода меняем на txt, выводим результаты (имена файлов) в pictures.txt с помощью того же drush. Этот список будет использоваться для создания архива с картинками. Имеет смысл, если выгружаются не все объявления и, соответственно, не нужны все имеющиеся картинки.</p>
<p>3. Собираем shell скрипт, который будет запускать 2 выгрузки (views data export), собирать и складывать в архив картинки, загружать полученные файлы adverts.xml и pictures.zip по FTP на сервер ИРР.</p>
<p>TODO: В скрипте неплохо бы иметь проверки кодов завершения. Не помешает отправка уведомлений на email. В интерактивном режиме и так сойдет, но есть идея добавить cron job и забыть про него.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/massovaya-vygruzka-obyavlenij-na-sajt-iz-ruk-v-ruki-288/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/massovaya-vygruzka-obyavlenij-na-sajt-iz-ruk-v-ruki-288</feedburner:origLink></item>
		<item>
		<title>На отчеты Google Analytics можно смотреть часами</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/RlLXXZ8aOSU/na-otchety-google-analytics-mozhno-smotret-chasami-286</link>
		<comments>http://www.znm.ru/na-otchety-google-analytics-mozhno-smotret-chasami-286#comments</comments>
		<pubDate>Wed, 15 Feb 2012 03:35:02 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[статистика]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=286</guid>
		<description><![CDATA[
А еще у них появилась статистика в реальном времени — показывает кто откуда пришел, по какому поисковому запросу, где живет и что собственно, в данный момент просматривают.

Из ближайших бесплатных Open Source аналогов «для параноиков» могу назвать Piwik, его нужно устанавливать на свой сервер, тратить ресурсы, настраивать, обновлять. Зато его можно «заточить» под свои нужды, если [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.znm.ru/wp-content/uploads/2012/02/ga-flow.jpg" alt="Ga flow" title="ga-flow.jpg" border="0" width="500" height="364" /></p>
<p>А еще у них появилась статистика в реальном времени — показывает кто откуда пришел, по какому поисковому запросу, где живет и что собственно, в данный момент просматривают.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2012/02/ga-live.jpg" alt="Ga live" border="0" width="500" height="240" /></p>
<p>Из ближайших бесплатных Open Source аналогов «для параноиков» могу назвать <a href="http://piwik.org/">Piwik</a>, его нужно устанавливать на свой сервер, тратить ресурсы, настраивать, обновлять. Зато его можно «заточить» под свои нужды, если они отличаются от типовых, охваченных Google Analytics.</p>
<p>А большинство клиентов все равно просят «влепить счетчик куда-нибудь снизу», им так проще. Мало кто готов анализировать статистику, точки входа, маршруты, сопоставлять с конверсией, делать выводы, оптимизировать сайт. Еще меньше желающих за это платить. Зато всем хочется «на первое место в Яндексе» по каким-нибудь надуманным запросам, которые проскакивают раз-другой в месяц, это в лучшем случае. И логотип побольше.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/na-otchety-google-analytics-mozhno-smotret-chasami-286/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/na-otchety-google-analytics-mozhno-smotret-chasami-286</feedburner:origLink></item>
		<item>
		<title>Очень приятная статистика по браузерам посетителей</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/Myobe0zme3c/ochen-priyatnaya-statistika-po-brauzeram-posetitelej-282</link>
		<comments>http://www.znm.ru/ochen-priyatnaya-statistika-po-brauzeram-posetitelej-282#comments</comments>
		<pubDate>Thu, 26 Jan 2012 07:01:05 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[браузер]]></category>

		<category><![CDATA[статистика]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=282</guid>
		<description><![CDATA[Сегодня заглянул в статистику одного сайта и посмотрел данные по браузерам посетителей. Очень приятная картина — Internet Explorer отсутствует почти полностью, он на второй странице с общим для всех версий результатом 16 посетителей.

Что не радует — 4 из обладателей IE пользуются версией 6.0. Анафема!
]]></description>
			<content:encoded><![CDATA[<p>Сегодня заглянул в статистику одного сайта и посмотрел данные по браузерам посетителей. Очень приятная картина — Internet Explorer отсутствует почти полностью, он на второй странице с общим для всех версий результатом 16 посетителей.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2012/01/browsers-stats-no-ir.jpg" alt="Распределение браузеров статистика"  border="0" width="445" height="225" /></p>
<p>Что не радует — 4 из обладателей IE пользуются версией 6.0. Анафема!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/ochen-priyatnaya-statistika-po-brauzeram-posetitelej-282/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/ochen-priyatnaya-statistika-po-brauzeram-posetitelej-282</feedburner:origLink></item>
		<item>
		<title>Скрываем ссылку за редиректом — Drupal 7</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/ZK0XCzmMvfg/skryvaem-ssylku-za-redirektom-drupal-7-276</link>
		<comments>http://www.znm.ru/skryvaem-ssylku-za-redirektom-drupal-7-276#comments</comments>
		<pubDate>Thu, 08 Dec 2011 22:50:29 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Работа]]></category>

		<category><![CDATA[drupal]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=276</guid>
		<description><![CDATA[Речь исключительно про Link field, для ссылок из контента существует модуль gotwo. Предпосылки могут быть разные, но задача скрыть ссылку — не такая редка вещь.
Дано: Drupal 7.8, тип содержимого с единственной ссылкой (link field).
Задача: сделать так, чтобы ссылка отображалась в виде /node/*nid*/goto, а при нажатии перекидывала посетителя на адрес, фактически содержащийся в ссылке (link url).
Потребуются: [...]]]></description>
			<content:encoded><![CDATA[<p>Речь исключительно про Link field, для ссылок из контента существует модуль gotwo. Предпосылки могут быть разные, но задача скрыть ссылку — не такая редка вещь.</p>
<p>Дано: Drupal 7.8, тип содержимого с единственной ссылкой (link field).</p>
<p>Задача: сделать так, чтобы ссылка отображалась в виде /node/*nid*/goto, а при нажатии перекидывала посетителя на адрес, фактически содержащийся в ссылке (link url).</p>
<p>Потребуются: модули <a href="http://drupal.org/project/redirect">redirect</a>, <a href="http://drupal.org/project/custom_formatters">custom formatters</a>, <a href="http://drupal.org/project/rules">rules</a>.</p>
<p>Custom Formatters можно заменить на шаблон поля. Для примера field&#8211;field-url.tpl.php</p>
<pre><code>&lt;?php foreach ($items as $delta => $item) : ?&#038;gt
&lt;a rel="nofollow"
     title="&lt;?php print $element['#object']->field_url['und'][0]['title']; ?&gt;"
     href="/node/&lt;?php print $element['#object']->nid;?>/goto"&gt;LINK TEXT&lt;/a&gt;
&lt;?php endforeach; ?&gt;
</code></pre>
<p>Текст ссылки можно заменить на любое значение из $element['#object'], это все данные по текущему документу (node).<br />
Custom formatter слегка удобнее использовать и оперативно редактировать. У меня получился такой код для link_field:</p>
<pre><code>
// Custom formatter for a link_field.
$node = $variables['#object'];
foreach (element_children($variables['#items']) as $delta) {
  $item = $variables['#items'][$delta];

  $source = "Перейти по ссылке";
  $destination = 'node/'.$node->nid.'/goto';

  return l($source, $destination, array('html' => false, 'attributes'=>array('rel'=>'nofollow', 'title'=>'Перейти в по ссылке '.$node->title, 'class'=>array('my-link-field'))));
}
</code></pre>
<p>Затем для нужного view mode меняем вывод нужной ссылки (Структура — Типы материалов — ВашТип — Управление отображением). Все, ссылку заготовили, но она пока ведет в никуда. Точнее, на ту же страницу, что и /node/*nid*, как любая ссылка на /node/*nid*/whatever.</p>
<p>Правило (Rule) настраиваем на событие &#8220;После редактирования существующего документа&#8221; и &#8220;После сохранения нового документа&#8221;, чтобы не пропустить возможные изменения ссылки. Отфильтровываем условиями тип материала, если необходимо. Действие будет типа PHP code (модуль PHP нужно заранее включить). Код примерно такой, взят почти полностью из тестов, идущих с модулем Redirect.</p>
<pre><code>
$redirect_defaults = array(
          'uid' => $node->uid,
          'status_code' => 302,
        );
    $redirect_path = $node->field_url['und'][0]['url']; // real URL to redirect to
    $source_path = 'node/'.$node->nid.'/goto'; // fake url (tweak to your link field custom formatter)
    redirect_delete_by_path($source_path); // delete existing redirects to avoid PDO errors
    $source_parsed = redirect_parse_url($source_path);
    $redirect['source'] = $source_parsed['url'];
    if (isset($source_parsed['query'])) {
      $redirect['source_options']['query'] = $source_parsed['query'];
    }

    $redirect_parsed = redirect_parse_url($redirect_path);
    $redirect['redirect'] = $redirect_parsed['url'];
    if (isset($redirect_parsed['query'])) {
      $redirect['redirect_options']['query'] = $redirect_parsed['query'];
    }
    if (isset($redirect_parsed['fragment'])) {
      $redirect['redirect_options']['fragment'] = $redirect_parsed['fragment'];
    }

    $redirect = (object) $redirect;
    redirect_object_prepare($redirect, $redirect_defaults);
    redirect_save($redirect);

</code></pre>
<p>Теперь после создания или изменения документа будет выполняться правило, которое создает перенаправление с локального адреса /node/NNN/goto на адрес, указанный в поле field_url документа с идентификатором NNN.</p>
<p>Если контент уже был, то нужно «передернуть» все материалы нужного типа — сфабриковать событие, по которому сработает правило. Я для этого использовал views bulk operations (VBO).</p>
<p>Вероятно, не самый простой и изящный способ, но вполне прозрачный и рабочий, по-моему.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/skryvaem-ssylku-za-redirektom-drupal-7-276/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/skryvaem-ssylku-za-redirektom-drupal-7-276</feedburner:origLink></item>
		<item>
		<title>Памятка: Plesk, Nginx, Apache</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/4lvrgrrdSwA/pamyatka-plesk-nginx-apache-270</link>
		<comments>http://www.znm.ru/pamyatka-plesk-nginx-apache-270#comments</comments>
		<pubDate>Tue, 08 Nov 2011 07:41:02 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Работа]]></category>

		<category><![CDATA[plesk]]></category>

		<category><![CDATA[хостинг]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=270</guid>
		<description><![CDATA[Надо собрать все вместе, а то на память надежды нет. Собрано в кучу из нескольких источников.
Дано: CentOS 5 (64bit), Plesk 10.3, Apache 2.
Нужный результат: Nginx отсылает статику, Apache все остальное (php в основном).
1. Установка nginx на CentOS 5 (без фанатизма).

# rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
# yum install nginx
# chkconfig –level 35 nginx on

Меняем порт Apache по инструкции [...]]]></description>
			<content:encoded><![CDATA[<p>Надо собрать все вместе, а то на память надежды нет. Собрано в кучу из нескольких источников.</p>
<p>Дано: CentOS 5 (64bit), Plesk 10.3, Apache 2.</p>
<p>Нужный результат: Nginx отсылает статику, Apache все остальное (php в основном).</p>
<p><strong>1. Установка nginx на CentOS 5 (без фанатизма).</strong></p>
<pre><code>
# rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
# yum install nginx
# chkconfig –level 35 nginx on
</code></pre>
<p><strong>Меняем порт Apache по <a href="http://kb.parallels.com/11232">инструкции</a> Parallels (Plesk 10.2, на 10.3 сработало)</strong></p>
<pre><code>
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("http_port", 8080)'
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("https_port", 8080)'</code></pre>
<p>Здесь 8080 — новый порт. Аналогичный указываем в /etc/httpd/conf/httpd.conf (Listen 80 &rarr; Listen 8080).<br />
Ахтунг! В документации Plesk 10 есть тема про правку шаблона /usr/local/psa/admin/conf/templates/default/domain/domainVirtualHost.php и замену $VAR->server->webserver->httpPort на нужный порт — делать это не надо и очень вредно, Apache ругается: VirtualHost x.x.x.x:8080 overlaps with VirtualHost x.x.x.x:8080, the first has precedence, perhaps you need a NameVirtualHost directive).</p>
<pre><code>
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("http_port", 8080)'
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("https_port", 8080)'
# /usr/local/psa/admin/bin/httpdmng --reconfigure-all
</code></pre>
<p>У более ранних версий Plesk (до 9.5) была отдельная команда на этот случай (websrvmng –set-http-port –port=8080).</p>
<p>Дальше берем в <a href="http://www.grafxsoftware.com/faq.php/HOW-TO-configure-PLESK-with-NGinx-proxy-reverse/1/1/">этом малость устаревшем руководстве</a> нужные файлы (<a href="http://www.grafxsoftware.com/download/nginx/nginx_setup.zip">тыц</a>) и распаковываем куда-нибудь в рабочую папку. Копируем nginx.conf &rarr; /etc/nginx/nginx.conf и proxy.conf &rarr; /etc/nginx/proxy.conf — они подхачены для использования с Plesk.</p>
<p><strong>UPDATE: По ссылке выше файлы не актуальны для Plesk 10 — там жестко зашито расположение корневых папок (document root) для доменов и поддоменов.</strong> В новом Плеске их можно произвольно переносить или переименовывать через панель управления, а сами данные хранятся в базе. <strong>Здесь <a href="/wp-content/uploads/2011/11/nginx_plesk10_conf.tgz">исправленная версия generate_nginx_conf.sh</a> для Plesk 10 и сопутствующие шаблоны</strong>, в которых тоже есть изменения. Не проверял и пока не менял ничего в настройке списков рассылки, webmail и sitebuilder.</p>
<p>Запускаем sh generate_nginx_conf.sh — скрипт выбирает из базы все домены и поддомены и создает в каждой папке /var/www/vhosts/*/conf/nginx.conf. Если порт для Апача выбран не 8080, то предварительно нужно поправить шаблоны template_dom.conf, template_subdom.conf (там порт жестко зашит).</p>
<p>Порт, на котором работает Apache (8080 или другой) нужно открыть в iptables. Делать это пришлось через панель управления,  команда (iptables -A INPUT -p tcp &#8211;dport 8080 -j ACCEPT) не лечит. </p>
<p>Готово, вроде, перезапускаем httpd и nginx.</p>
<p>Проблемы по ходу дела — не запускался nginx, пришлось увеличивать server_names_hash_max_size 1024 (было 512) и    server_names_hash_bucket_size 128 (было 64). Это /etc/nginx/nginx.conf.</p>
<p>TODO: После добавления домена в Plesk нужно создать конфиг для nginx. Скрипт generate_nginx_conf.sh каждый раз перезаписывает настройки виртуального хоста (/var/www/vhosts/*/nginx.conf) из шаблонов заново (нужно оставлять измененные).</p>
<hr />
<p><strong>UPDATE</strong>: Повесил скрипт создания/обновления nginx.conf на <a href="http://download1.parallels.com/Plesk/PP10/10.3.0/Doc/en-US/online/plesk-administrator-guide/index.htm?fileName=59205.htm">события в Plesk</a>: Website created/updated/deleted (аналогично для Subdomain и Domain alias). Теперь конфигурация для nginx создается/обновляется автоматически.</p>
<p>Осталось одно желание — иметь возможность настраивать конфигурацию для каждого сайта отдельно. Сейчас все конфиги переписываются из шаблона и похожи как однояйцевые близнецы. Можно встроить проверку существования файла и не трогать его (только создавать новые), но это плохой выход, поскольку все поддомены/синонимы настраиваются в одном файле — после добавления алиаса или поддомена надо будет руками править nginx.conf.</p>
<p>Делать подключение еще одного файла на каждый домен/поддомен тоже бессмысленно — nginx не принимает переопределение, то есть 2 одинаковых директивы (location /, например) в «главном» и «подключаемом» конфигах сделать не получится, а без этого затея теряет смысл. Надо какой-то ум применить, пока не придумал ничего.</p>
<hr />
<strong>Реверансы</strong></p>
<p>http://wiki.mediatemple.net/w/%28dv%29:Configure_nginx_as_reverse_proxy_web_server</p>
<p>http://www.grafxsoftware.com/faq.php/HOW-TO-configure-PLESK-with-NGinx-proxy-reverse/1/1/</p>
<p>http://kb.parallels.com/11232</p>
<p>http://www.x83.net/plesk-10-nginx-reverse-proxy-configuration-in-front-of-apache/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/pamyatka-plesk-nginx-apache-270/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/pamyatka-plesk-nginx-apache-270</feedburner:origLink></item>
		<item>
		<title>Посмотрел Adobe Muse beta3</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/7W5TqGz7jsU/posmotrel-adobe-muse-beta3-268</link>
		<comments>http://www.znm.ru/posmotrel-adobe-muse-beta3-268#comments</comments>
		<pubDate>Tue, 27 Sep 2011 03:10:40 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[muse]]></category>

		<category><![CDATA[дизайн]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=268</guid>
		<description><![CDATA[Случайно скачал Adobe Muse beta3. Muse — кодовое название инструмента для создания сайтов людьми. далекими от кода HTML, не говоря уж об более серьезных вещах. Работает это все на технологии Adome Air, то есть кроссплатформенность в Mu присутствует.

Работа начинается с создания нового сайта и назначения общих свойств. Ширина страницы (контентной части) задается в точках, без [...]]]></description>
			<content:encoded><![CDATA[<p>Случайно скачал Adobe Muse beta3. Muse — кодовое название инструмента для создания сайтов людьми. далекими от кода HTML, не говоря уж об более серьезных вещах. Работает это все на технологии Adome Air, то есть кроссплатформенность в Mu присутствует.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/09/new-site.jpg" alt="Muse: Новый Сайт" border="0" width="600" height="436" /></p>
<p>Работа начинается с создания нового сайта и назначения общих свойств. Ширина страницы (контентной части) задается в точках, без вариантов.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/09/muse-plan.jpg" alt="Muse Plan" title="Muse-Plan.jpg" border="0" width="500" height="429" /></p>
<p>Структура сата (закладка Plan) представлена в виде многоуровневого «дерева», страницы добавляются слева-справа (братья и сестры) и снизу (отпрыски, то есть дети). Сначала будет полезно отредактировать стартовые шаблоны — вставить логотип, навигацию и прочие общие для всех страниц элементы.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/09/muse-design.jpg" alt="Muse Design" title="Muse-Design.jpg" border="0" width="500" height="302" /></p>
<p>Design — режим редактирования шаблонов и самих страниц. Полнейший WYSIWYG, все свойства объектов управляются выбором значений, пунктов, галочек, величин. Muse знает стандартный набор современных фишечек — скругленные углы, всплывающие  состояния (rollover, mousedown etc.), модные градиенты и содержит набор готовых к использованию виджетов — галерея, слайдшоу, вкладки, динамически меняющиеся блоки с текстом и т.п.</p>
<p>С Preview все понятно — тут можно оценить свое творение с точки зрения браузера. Работает? Нормально выглядит? Едем дальше, к публикации.</p>
<p>Автоматически можно опубликовать <a href="http://testingsol.businesscatalyst.com/">получившийся сайт</a> на хостинг Busyness Catalyst, пока так. Ничего хорошего о нем сказать не могу — по-моему дорого и глупо (от $19 в месяц). Гораздо разумнее экспортировать сайт в виде набора HTML файлов.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/09/museexport.jpg" alt="MuseExport" title="MuseExport.jpg" border="0" width="500" height="438" /></p>
<p>Файлы документов с русскими названиями Muse называет по-русски, равно как и соответствующие им css. В итоге в коде встречаются такие неудобочитаемые вещи: css/%d0%bd%d0%be%d0%b2%d0%be%d1%81%d1%82%d0%b8.css. Ну по идее никто из пользователей Muse кодом интересоваться не должен. Использование jQuery и «плужков» к нему тоже должно остаться незаметным.</p>
<p>Вердикт: отличный вариант для небольших организаций, для создания маленьких и простых сайтов. Эдакий Frontpage 21 века.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/posmotrel-adobe-muse-beta3-268/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/posmotrel-adobe-muse-beta3-268</feedburner:origLink></item>
		<item>
		<title>Drupal Commerce Shipping — самовывоз</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/Gp83SQm-q8M/drupal-commerce-shipping-samovyvoz-262</link>
		<comments>http://www.znm.ru/drupal-commerce-shipping-samovyvoz-262#comments</comments>
		<pubDate>Wed, 21 Sep 2011 13:49:05 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[drupal]]></category>

		<category><![CDATA[ecommerce]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=262</guid>
		<description><![CDATA[За последние 3-4 недели успел поставить Drupal 7 и Drupal Commerce, поковырять его, отложить в сторону, поставить Ubercart 2 в лице адской сборки Openstore, поковыряться… и снова вернуться к Drupal Commerce. Возможно, это не последняя итерация.
Если коротко — Ubercart хорош для задач, которые он выполняет &#8220;из коробки&#8221;. Если эта коробка называется Openstore, то многим больше [...]]]></description>
			<content:encoded><![CDATA[<p>За последние 3-4 недели успел поставить Drupal 7 и <a href="http://www.drupalcommerce.org/">Drupal Commerce</a>, поковырять его, отложить в сторону, поставить Ubercart 2 в лице адской сборки <a href="http://openstore.org.ua/">Openstore</a>, поковыряться… и снова вернуться к Drupal Commerce. Возможно, это не последняя итерация.</p>
<p>Если коротко — Ubercart хорош для задач, которые он выполняет &#8220;из коробки&#8221;. Если эта коробка называется Openstore, то многим больше ничего не потребуется. Я с неделю занимался обратным процессом — выбрасывал из сборки ненужные мне модули. Закончилось тем, что оставшееся не выглядело сколько-нибудь лучше Drupal Commerce (для моей задачи).</p>
<p>Drupal Commerce — гол, как сокол. Я устанавливал сборку (профиль) Commerce Kickstart. Доставки нет, нужен отдельный модуль. Почти для всего нужен отдельный модуль, которого или вообще не существует, или он находится на dev, alpha, beta стадиях (вялой) разработки.</p>
<p>Ладно, перестаю ныть, начинаю <del>похваляться</del> делиться информацией. Задача была простая — добавить в Drupal Commerce два способа доставки — курьером (за фиксированную сумму) и &#8220;самовывоз&#8221;, который никакая не доставка, но выбор такой клиенту дать нужно. Пока пытаюсь сделать все правильно, используя модуль <a href="http://drupal.org/project/commerce_shipping">Commerce Shipping</a>. Половину дела сделал легко — курьерскую доставку можно реализовать на основе модуля Flat Rate, простого и понятного — фиксированная цена доставки. Дальше начались трудности.</p>
<p>Модуль Commerce Shipping добавляет новый профиль (user profile) для пользователя и соответствующую панель (pane) на страницу расчета (checkout). Процедура оформления покупки в Drupal Commerce многостраничная, панели можно передвигать между страницами произвольно. По-умолчанию панель с адресом доставки (shipping profile) помещается на самую первую страницу. Для многих это логично — от адреса доставки могут зависеть доступные способы доставки или способы оплаты. У меня ситуация обратная — город известен заранее, стоимость доставки тоже. Остается реализовать &#8220;самовывоз&#8221;, то есть отключить панель адреса доставки (shipping profile) в случае выбора соответствующего способа доставки.</p>
<p>1. Помещаем панель shipping на первой странице (checkout), панель shipping profile переносим на вторую (review). Так мы принуждаем клиента выбрать способ доставки и меешм шанс не спрашивать адрес в случае самовывоза.</p>
<p>2. Создаем новый модуль (это за пределами заметки) и добавляем в него свой хук для переопределения панелей модуля commerce checkout.</p>
<p><code>
<pre>
/*
 * Hook hook_commerce_checkout_pane_info_alter($checkout_pane)
 */
function mymodule_commerce_checkout_pane_info_alter(&#038;$checkout_pane) {
	global $user;
	// $checkout_pane на самом деле содержит массив из всех панелей...
	foreach($checkout_pane as $pane_name => &#038;$pane_data) {
		// …нам нужна только она из них — панель с профилем доствки
		if($pane_name == 'customer_profile_shipping' &#038;&#038; $pane_data['enabled']) {
			// загружаем текущий заказ
		    $order = commerce_cart_order_load($user->uid);
		    // $order->data был найден с помощью dsm()
		    // в нем не было ничего за исключением 'shipping_method' со строкой
		    // rules_pick_up это ID склонированного способа доставки flat rate
			if($order->data['shipping_method'] == 'flat_rate|rules_pick_up') {
				// панель была изначально включена в админке, отключаем ее
				$pane_data['enabled'] = 0;
			}
		}
	}
}
</pre>
<p></code></p>
<p>В итоге получается то, что задумывалось — если на первом этапе оформления выбран некий способ доставки (самовывоз), то на на следующем у клиента не попросят ввести адрес доставки.</p>
<p>У меня нет никакой уверенности, что это правильный и эффективный способ выполнить задуманное. Глядя на Drupal Commerce вообще, я был уверен, что найду способ сделать подобное с помощью Правил (Rules), но готовых &#8220;действий&#8221; не нашлось (панели не контролируются правилами), а приделать такое сбоку мне оказалось не по силам.</p>
<p>Если кто-то знает более изящные способы справиться с задачей — намекните. Проблема с Commerce в том и состоит, что документации не очень много, примеры в основном примитивные, знающие люди неохотно делятся информацией (заняты они), а основной шум создают недоучки, вроде меня.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/drupal-commerce-shipping-samovyvoz-262/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/drupal-commerce-shipping-samovyvoz-262</feedburner:origLink></item>
		<item>
		<title>Уязвимость timthumb.php</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/fYm-JN2Bpz8/uyazvimost-timthumbphp-260</link>
		<comments>http://www.znm.ru/uyazvimost-timthumbphp-260#comments</comments>
		<pubDate>Thu, 04 Aug 2011 08:55:23 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[wordpress]]></category>

		<category><![CDATA[безопасность]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=260</guid>
		<description><![CDATA[Проверьте свои Wordpress блоги — в платных и бесплатных темах оформления часто используется скрипт для генерации картинок timthumb.php, в котором обнаружили уязвимость — злоумышленник может загрузить на сайт с дырявым скриптом все, что ему заблагорассудится.
Измененный timthumb.php можно скачать тут.
Можно ничего не скачивать, просто открыть файл и удалить переменную $allowedSites. Разумеется, если вы не пользуетесь удаленной [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Проверьте свои Wordpress блоги — в платных и бесплатных темах оформления часто используется скрипт для генерации картинок timthumb.php, в котором обнаружили уязвимость — злоумышленник может загрузить на сайт с дырявым скриптом все, что ему заблагорассудится.</strong></p>
<p>Измененный <a href="http://timthumb.googlecode.com/svn/trunk/timthumb.php">timthumb.php можно скачать тут</a>.</p>
<p>Можно ничего не скачивать, просто открыть файл и удалить переменную $allowedSites. Разумеется, если вы не пользуетесь удаленной загрузкой, в которой вся проблема и кроется.</p>
<p>Суть «дырки» в том, что скрипт позволяет скачивать файлы с удаленных серверов, белый список настраивается в параметрах, но проверяется по ходу выполнения неверно — если разрешено загружать картинки с flickr.com, то и webshell с какого-нибудь flickr.com.hackersplace.com тоже можно загрузить.</p>
<p>Подробно об уязвимости timthumb.php <a href="http://markmaunder.com/2011/zero-day-vulnerability-in-many-wordpress-themes/">пишет в своем блоге Mark Maunder</a> фром хиз харт ин инглиш.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/uyazvimost-timthumbphp-260/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/uyazvimost-timthumbphp-260</feedburner:origLink></item>
	</channel>
</rss>

