<?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>заметки на полях &#187; Дерябин Сергей</title>
	<atom:link href="http://svdev.ru/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://svdev.ru</link>
	<description>Блокнот разработчика</description>
	<lastBuildDate>Wed, 19 May 2010 07:42:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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 utf8_general_ci NOT NULL ,
last_name VARCHAR&#40; 255 [...]]]></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 INT <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 VARCHAR<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">255</span> <span style="color: #66cc66;">&#41;</span> CHARACTER <span style="color: #993333; font-weight: bold;">SET</span> utf8 COLLATE 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 VARCHAR<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">255</span> <span style="color: #66cc66;">&#41;</span> CHARACTER <span style="color: #993333; font-weight: bold;">SET</span> utf8 COLLATE 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 CHARACTER <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> rows 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;
в ишаке получаем ошибку. Переваривается только такой вариант
var obj = document.getElementById&#40;&#34;city-list&#34;&#41;;
for &#40;i = 0; i [...]]]></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>0</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 = document.createElement&#40;&#34;button&#34;&#41;;
YAHOO.util.Dom.addClass&#40;button, &#34;ok-button&#34;&#41;;
YAHOO.util.Dom.setStyle&#40;button, &#34;margin&#34;, &#34;1em&#34;&#41;;
]]></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>
		<item>
		<title>Установка Redmine на Ubuntu</title>
		<link>http://svdev.ru/blog/redmine-ubuntu/</link>
		<comments>http://svdev.ru/blog/redmine-ubuntu/#comments</comments>
		<pubDate>Sun, 21 Mar 2010 09:07:39 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=516</guid>
		<description><![CDATA[Решил попробовать что-то отличное от trac для управления проектами. Выбор остановился на redmine. Поднималась для себя как единственного пользователя и на локальной машине, поэтому пока не стал заморачиваться загонять под nginx (стандартные процедуры установки предлагают поставить модулем apache, а у меня его нет).

Для локального использования целиком подошла вот эта инструкция по установке: Установка Redmine на [...]]]></description>
			<content:encoded><![CDATA[<p>Решил попробовать что-то отличное от trac для управления проектами. Выбор остановился на <a href="http://www.redmine.org/" target="_blank">redmine</a>. Поднималась для себя как единственного пользователя и на локальной машине, поэтому пока не стал заморачиваться загонять под nginx (стандартные процедуры установки предлагают поставить модулем apache, а у меня его нет).<br />
<span id="more-516"></span><br />
Для локального использования целиком подошла вот эта инструкция по установке: <a href="http://seriyps.ru/blog/2010/01/14/ustanovka-redmine-na-ubuntu-9-10-pod-nginx/" target="_blank">Установка Redmine на Ubuntu 9.10 под Nginx</a> с небольшими оговорками, базу я все таки в отличии от автора использую MySQL. Поэтому <code class="codecolorer bash default"><span class="bash">config<span style="color: #000000; font-weight: bold;">/</span>database.yml</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">production:<br />
&nbsp; adapter: mysql<br />
&nbsp; database: redmine<br />
&nbsp; host: localhost<br />
&nbsp; username: redmine<br />
&nbsp; password:<br />
&nbsp; encoding: utf8</div></div>
<p>и соответственно перед созданием структуры БД <code class="codecolorer bash default"><span class="bash">rake db:migrate <span style="color: #007800;">RAILS_ENV</span>=<span style="color: #ff0000;">&quot;production&quot;</span></span></code> необходимо создать саму базу</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;">DATABASE</span> &nbsp;redmine <span style="color: #993333; font-weight: bold;">DEFAULT</span> CHARACTER <span style="color: #993333; font-weight: bold;">SET</span> utf8;</div></div>
<p>Для подвешивания этого дела под nginx есть вторая часть статьи <a href="http://seriyps.ru/blog/2010/01/14/ustanovka-redmine-na-ubuntu-9-10-pod-nginx-chast-2/" target="_blank">Установка Redmine на Ubuntu 9.10 под Nginx часть 2</a>, я пока остановился на первой. <del datetime="2010-03-22T20:22:48+00:00">Из недостатков пока только</del> вариант запуска:</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">ruby script<span style="color: #000000; font-weight: bold;">/</span>server webrick <span style="color: #660033;">-e</span> production</div></div>
<p>будет работе висеть в консоли.</p>
<p><strong>UPD</strong><br />
Для того что бы процесс не висел в консоли &#8211; надо запускать его с ключом -d</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">ruby script<span style="color: #000000; font-weight: bold;">/</span>server webrick <span style="color: #660033;">-d</span> <span style="color: #660033;">-e</span> production</div></div>
<p>Прислушавшись к совету из первого комментария, можно сделать скрипт для запуска, у меня получилось следующее (надо заметить что ruby у меня используется только для redmine &#8211; поэтому я сделал допущение прибивать их все):</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/bash</span><br />
<span style="color: #666666; font-style: italic;"># здесь должен быть путь к месту установки redmine</span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> <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>redmine<br />
<span style="color: #007800;">SCRIPT</span>=<span style="color: #ff0000;">&quot;ruby script/server webrick -d -e production&quot;</span><br />
<span style="color: #007800;">RETVAL</span>=<span style="color: #000000;">0</span><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 />
&nbsp; &nbsp; &nbsp; &nbsp; start<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">$SCRIPT</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">RETVAL</span>=<span style="color: #007800;">$?</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">;;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; stop<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">killall</span> <span style="color: #660033;">-9</span> ruby<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">RETVAL</span>=<span style="color: #007800;">$?</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">;;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; restart<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">killall</span> <span style="color: #660033;">-9</span> ruby<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">$SCRIPT</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">RETVAL</span>=<span style="color: #007800;">$?</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">;;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: /etc/inid.d/redmine {start|stop|restart}&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">;;</span><br />
<span style="color: #000000; font-weight: bold;">esac</span><br />
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #007800;">$RETVAL</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;">sudo</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>redmine start<br />
<span style="color: #c20cb9; font-weight: bold;">sudo</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>redmine stop</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;">sudo</span> update-rc.d redmine defaults</div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/redmine-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Локальный postfix c релеем на GMail</title>
		<link>http://svdev.ru/blog/local-postfix-gmail-relay/</link>
		<comments>http://svdev.ru/blog/local-postfix-gmail-relay/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 20:55:02 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=494</guid>
		<description><![CDATA[Почтовые сервера категорически не хотят принимать письма с локальной машины, из-за отсутствия обратной зоны и даже не кладут эти письма в спам &#8211; мочат на корню. Решил использовать GMail в качестве SMTP а для отправки postfix. Приступим.

При подключении к gmail используется протокол TLS. Если уже были какие-то попытки настройки и почта не уходила, а в [...]]]></description>
			<content:encoded><![CDATA[<p>Почтовые сервера категорически не хотят принимать письма с локальной машины, из-за отсутствия обратной зоны и даже не кладут эти письма в спам &#8211; мочат на корню. Решил использовать <a href="http://www.gmail.com" target="_blank">GMail</a> в качестве SMTP а для отправки <a href="http://www.postfix.org/" target="_blank">postfix</a>. Приступим.<br />
<span id="more-494"></span><br />
При подключении к gmail используется протокол <a href="http://citforum.ru/nets/semenov/6/tls.shtml" target="_blank">TLS</a>. Если уже были какие-то попытки настройки и почта не уходила, а в логе <code class="codecolorer bash default"><span class="bash"><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>mail.info</span></code> красовалась ошибка:</p>
<blockquote><p>Mar 19 21:51:23 sergey-desktop postfix/smtp[22818]: 9ED5411723F9: to=<mail@example.com>, relay=smtp.gmail.com[209.85.129.111]:587, delay=0.25, delays=0.01/0.01/0.18/0.06, dsn=5.7.0, status=bounced (host smtp.gmail.com[209.85.129.111] said: <strong>530 5.7.0 Must issue a STARTTLS command first</strong>. d13sm2389062fka.32 (in reply to MAIL FROM command))</p></blockquote>
<p>то значит что как раз таки TLS не используется. Блок с настройкой целиком из статьи на <a href="http://opennet.ru/base/net/postfix_pgsql_setup.txt.html" target="_blank">opennet</a> (только тот который TLS, остальное в данном контексте не нужно)  у меня заработал без каких либо проблем.</p>
<p>Для начала нам необходимо создать свой собственный сертификат сервера.</p>
<p>Для этого воспользуемся несколько модифицированным скриптом из поставки Cyrus-IMAP</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 />
<span style="color: #7a0874; font-weight: bold;">test</span> <span style="color: #660033;">-x</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>openssl <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span><br />
<span style="color: #007800;">prefix</span>=<span style="color: #ff0000;">&quot;/&quot;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">test</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem<br />
<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp;<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;/etc/ssl/server.pem already exists.&quot;</span><br />
&nbsp;<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem<br />
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">600</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem<br />
<span style="color: #c20cb9; font-weight: bold;">chown</span> root <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem<br />
<br />
cleanup<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp;<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem<br />
&nbsp;<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.rand<br />
&nbsp;<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
<span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #007800;">if</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>urandom <span style="color: #007800;">of</span>=<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.rand <span style="color: #007800;">count</span>=<span style="color: #000000;">1</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null<br />
<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>openssl req <span style="color: #660033;">-new</span> <span style="color: #660033;">-x509</span> <span style="color: #660033;">-days</span> <span style="color: #000000;">3650</span> <span style="color: #660033;">-nodes</span> <span style="color: #660033;">-config</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>openssl.cnf \<br />
&nbsp;<span style="color: #660033;">-out</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem <span style="color: #660033;">-keyout</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem<br />
<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>openssl gendh <span style="color: #660033;">-rand</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.rand <span style="color: #000000;">512</span> \<br />
&nbsp;<span style="color: #000000; font-weight: bold;">&gt;&gt;/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem <span style="color: #000000; font-weight: bold;">||</span> cleanup<br />
<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>openssl x509 <span style="color: #660033;">-subject</span> <span style="color: #660033;">-dates</span> <span style="color: #660033;">-fingerprint</span> \<br />
&nbsp;<span style="color: #660033;">-noout</span> <span style="color: #660033;">-in</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem <span style="color: #000000; font-weight: bold;">||</span> cleanup<br />
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.rand</div></div>
<p>можете скачать готовый файл: <a href="http://svdev.ru/wp-content/uploads/2010/03/mkcert.sh.tar">mkcert.sh.tar</a></p>
<p>При помощи этого скрипта, мы создаем в директории /etc/ssl самоподписанный сертификат нашего сервера &#8211; server.pem. В процессе создания будет необходимо указать некоторые значения, названия достаточно понятные и я думаю проблем не должно возникнуть. Главное в поле  Common Name (eg, YOUR name) [mail.domain.ru]: указать FQDN вашего почтового сервера, в данном примере: mail.domain.ru. Если имя сервера для отправки/приема почты в настройках почтовой программы не совпадает с указанным в сертификате &#8211; почтовая программа будет <<ругаться>>.</p>
<p>Теперь редактируем файл <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>main.cf</span></code>, а именно &#8211; добавляем следующие строки:</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">smtp_use_tls = <span style="color: #c20cb9; font-weight: bold;">yes</span><br />
smtp_tls_key_file = <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem<br />
smtp_tls_cert_file = <span style="color: #007800;">$smtp_tls_key_file</span><br />
smtp_tls_CAfile = <span style="color: #007800;">$smtp_tls_key_file</span><br />
smtp_tls_note_starttls_offer = <span style="color: #c20cb9; font-weight: bold;">yes</span><br />
smtp_tls_loglevel = <span style="color: #000000;">0</span><br />
smtpd_tls_auth_only = <span style="color: #c20cb9; font-weight: bold;">yes</span><br />
smtpd_use_tls = <span style="color: #c20cb9; font-weight: bold;">yes</span><br />
smtpd_tls_loglevel = <span style="color: #000000;">0</span><br />
smtpd_tls_received_header = <span style="color: #c20cb9; font-weight: bold;">yes</span><br />
smtpd_tls_session_cache_timeout = 3600s<br />
tls_random_source = dev:<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>urandom<br />
smtpd_tls_key_file = <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ssl<span style="color: #000000; font-weight: bold;">/</span>server.pem<br />
smtpd_tls_cert_file = <span style="color: #007800;">$smtpd_tls_key_file</span><br />
smtpd_tls_CAfile = <span style="color: #007800;">$smtpd_tls_key_file</span></div></div>
<p>и в нем же устанавливаем <code class="codecolorer bash default"><span class="bash">relayhost</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">relayhost = <span style="color: #7a0874; font-weight: bold;">&#91;</span>smtp.gmail.com<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<span style="color: #000000;">587</span><br />
<br />
smtp_sasl_auth_enable = <span style="color: #c20cb9; font-weight: bold;">yes</span><br />
smtp_sasl_password_maps = <span style="color: #7a0874; font-weight: bold;">hash</span>:<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>sasl_passwd<br />
smtp_sasl_security_options =</div></div>
<p>Опция <code class="codecolorer bash default"><span class="bash">smtpd_tls_auth_only = <span style="color: #c20cb9; font-weight: bold;">yes</span></span></code> позволяет производить SMTP авторизацию только в режиме TLS.</p>
<p>В <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>sasl_passwd</span></code> необходимо добавить данные для авторизации на GMail вида</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">smtp.gmail.com &nbsp;gmail-login<span style="color: #000000; font-weight: bold;">@</span>gmail.com:password</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;">sudo</span> postmap <span style="color: #7a0874; font-weight: bold;">hash</span>:<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>sasl_passwd<br />
<span style="color: #c20cb9; font-weight: bold;">sudo</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>postfix restart</div></div>
<p>В <code class="codecolorer bash default"><span class="bash">php.ini</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: #7a0874; font-weight: bold;">&#91;</span>mail <span style="color: #000000; font-weight: bold;">function</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
...<br />
SMTP = localhost<br />
smtp_port = <span style="color: #000000;">25</span><br />
<br />
; теперь можно закомментировать этот параметр<br />
;sendmail_path =</div></div>
<p>В принципе все &#8211; почта должна уходить из скриптов. Единственный нюанс &#8211; GMail в качестве отправителя подставит учетную запись, которая использовалась при авторизации для отправки. </p>
<p>Есть еще вариант настройки разных релеев, в зависимости от какого аккаунта отправляется почта, подробнее здесь: <a href="http://ubuntu-tutorials.com/2009/03/13/configure-postfix-for-multiple-isp-client-smtp-authentication/" target="_blank">Configure Postfix for Multiple ISP Client SMTP Authentication</a>, ubuntu-tutorials.com (на английском)</p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/local-postfix-gmail-relay/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вирус требующий SMS</title>
		<link>http://svdev.ru/blog/windows-xp-sms-virus/</link>
		<comments>http://svdev.ru/blog/windows-xp-sms-virus/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 00:32:26 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=481</guid>
		<description><![CDATA[Принес мне товарищ ноутбук с вирусом, который при загрузке блокирует все действия и требует отправить SMS для разблокировки. Ну вещь вроде бы довольно распространенная в последнее время, а переустанавливать все заново было жалко времени &#8211; решил полечить.
Вылечилось все на ура с Dr. Web Live CD
Дальше оказалось все не так просто, установленный Avast отказывался запускаться под [...]]]></description>
			<content:encoded><![CDATA[<p>Принес мне товарищ ноутбук с вирусом, который при загрузке блокирует все действия и требует отправить SMS для разблокировки. Ну вещь вроде бы довольно распространенная в последнее время, а переустанавливать все заново было жалко времени &#8211; решил полечить.<span id="more-481"></span><br />
Вылечилось все на ура с <a href="http://www.freedrweb.com/livecd/">Dr. Web Live CD</a><br />
Дальше оказалось все не так просто, установленный Avast отказывался запускаться под таким предлогом &laquo;невозможно открыть данную программу из-за политики ограничения применения программного обеспечения&raquo;. Немного погуглив открыл для себя что в XP Home есть политики безопасности. Нашел даже на Microsoft <a href="http://technet.microsoft.com/ru-ru/library/cc737011(WS.10).aspx#BKMK_1">ответ на мой вопрос</a></p>
<blockquote><p><strong>Пользователи получают сообщение «Windows не может открыть эту программу, так как это запрещено политикой ограничений программ. За дополнительной информацией обратитесь системному администратору или откройте &laquo;Просмотр событий&raquo;.» Или в окне командной строки появляется сообщение «Не удается выполнить указанную программу.»</strong><br />
<strong>Причина.</strong>  В установленном по умолчанию уровене безопасности (или правиле) для программы выбрано значение Не разрешено, и в результате программа не запускается.</p>
<p><strong>Решение.</strong>  Найдите в журнале событий более подробное описание сообщения. Сообщения журнала событий указывают, для какого программного обеспечения установлен параметр Не разрешено и какое именно правило применяется к программе.</p></blockquote>
<p>Но не ответ на самый главный вопрос &laquo;че делать-то?!&raquo;<br />
Вариант копания в политиках отпал быстро, т. к. <strong>gpedit.msc</strong> или отсутствовал изначально или был заботливо удален вирусом. Нашел более элегантный вариант, удалить целиком ветку реестра: <code class="codecolorer bash default"><span class="bash">HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer</span></code><br />
Ну вот и все, борьба окончена ) набираю в консоли <code class="codecolorer bash default"><span class="bash">regedit</span></code> и получаю <del datetime="2010-02-28T00:17:43+00:00">ху&#8230;</del></p>
<p><img src="http://svdev.ru/wp-content/uploads/2010/02/regedit.jpg" alt="" title="regedit" width="405" height="126" class="aligncenter size-full wp-image-489" /></p>
<p>Конец? Перестановка?<br />
Нашел что редактирование реестра можно разрешить через групповые политики (<a href="http://netler.ru/pc/regedit.htm">подробнее тут</a>), но вариант не подходит потому как редактор потерт &#8211; замкнутый круг какой &#8211; то <img src='http://svdev.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Так вот политики все равно хранятся как я понял в реестре и можно из консоли удалить запрет на редактирование реестра (честно говоря сначала сомневался что получится &#8211; в редактор зайти нельзя, а из консоли пожалуйста) (<a href="http://netler.ru/pc/regedit-com.htm">подробнее тут</a>):</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">REG DELETE HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableRegistryTools /f</div></div>
<p>Regedit заработал и удалив указанную выше ветку реестра стал запускаться антивирус.</p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/windows-xp-sms-virus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Список городов по странам и регионам</title>
		<link>http://svdev.ru/blog/country-city-region-dump/</link>
		<comments>http://svdev.ru/blog/country-city-region-dump/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 02:09:47 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[dump]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=474</guid>
		<description><![CDATA[В архиве дамп трех табличек:

страны
регионы (с привязкой к стране)
города (с привязкой к региону и стране)

Кодировка файла UTF-8. Размер архива 4,7Мб. Забирать здесь.
После заливки желательно прицепить ключи:
ALTER TABLE region ADD constraint fk_region_ref_country FOREIGN KEY &#40;country_id&#41; REFERENCES country &#40;id&#41; ON DELETE restrict ON UPDATE cascade;
ALTER TABLE city ADD constraint fk_city_ref_region FOREIGN KEY &#40;region_id&#41; REFERENCES region &#40;id&#41; ON [...]]]></description>
			<content:encoded><![CDATA[<p>В архиве дамп трех табличек:</p>
<ul>
<li>страны</li>
<li>регионы (с привязкой к стране)</li>
<li>города (с привязкой к региону и стране)</li>
</ul>
<p>Кодировка файла UTF-8. Размер архива 4,7Мб. Забирать <a href="http://svdev.ru/wp-content/uploads/2010/02/geo.sql_.gz">здесь</a>.</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;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> region <span style="color: #993333; font-weight: bold;">ADD</span> constraint fk_region_ref_country <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>country_id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> country <span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">DELETE</span> restrict <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">UPDATE</span> cascade;<br />
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> city <span style="color: #993333; font-weight: bold;">ADD</span> constraint fk_city_ref_region <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>region_id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> region <span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">DELETE</span> restrict <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">UPDATE</span> cascade;<br />
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> city <span style="color: #993333; font-weight: bold;">ADD</span> constraint fk_city_ref_country <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>country_id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> country <span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">DELETE</span> restrict <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">UPDATE</span> cascade;</div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/country-city-region-dump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как float зависит от локали?!</title>
		<link>http://svdev.ru/blog/float-setlocale-relation/</link>
		<comments>http://svdev.ru/blog/float-setlocale-relation/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 12:59:46 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=462</guid>
		<description><![CDATA[На такой казалось бы элементарный вопрос далеко не тривиальный ответ, и столкнувшись с ним может пострадать не один монитор или клавиатура от нелепости ситуации, мне повезло &#8211; я вовремя нагуглил правильный ответ   Теперь собственно к делу.  Вот код и ожидаемый результат его выполнения:
$float = &#34;3.14&#34;;
echo $float; // 3.14
echo floatval&#40;$float&#41;; // 3.14
У меня [...]]]></description>
			<content:encoded><![CDATA[<p>На такой казалось бы элементарный вопрос далеко не тривиальный ответ, и столкнувшись с ним может пострадать не один монитор или клавиатура от нелепости ситуации, мне повезло &#8211; я вовремя нагуглил правильный ответ <img src='http://svdev.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Теперь собственно к делу.  Вот код и ожидаемый результат его выполнения:</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: #000088;">$float</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;3.14&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$float</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3.14</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/floatval"><span style="color: #990000;">floatval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$float</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3.14</span></div></div>
<p>У меня же получился другой вариант, от которого я честно говоря подвис:</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: #000088;">$float</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;3.14&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$float</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3.14</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/floatval"><span style="color: #990000;">floatval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$float</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3,14</span></div></div>
<p>Выяснилось что результат зависит от установки локали, у меня стояло: <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/setlocale"><span style="color: #990000;">setlocale</span></a><span style="color: #009900;">&#40;</span>LC_ALL<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;ru_RU.UTF8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></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"><a href="http://www.php.net/setlocale"><span style="color: #990000;">setlocale</span></a><span style="color: #009900;">&#40;</span>LC_CTYPE<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;ru_RU.utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/setlocale"><span style="color: #990000;">setlocale</span></a><span style="color: #009900;">&#40;</span>LC_TIME<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;ru_RU.utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>PHP у меня <strong>5.2.10</strong>, а баг сей я так понимаю тащится аж с 2002 года версии <strong>4.3.0 RC2</strong>: <a href="http://bugs.php.net/bug.php?id=17079">Bug #17079 setlocale changes the internal representation of floats</a></p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/float-setlocale-relation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Перевод сайта c cp1251 на UTF-8</title>
		<link>http://svdev.ru/blog/site-convert-from-cp1251-to-utf8/</link>
		<comments>http://svdev.ru/blog/site-convert-from-cp1251-to-utf8/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 18:57:03 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=429</guid>
		<description><![CDATA[Для начала перевести БД из cp1251 в utf8.
Сделать дамп mysqldump -u svd -n --skip-opt --skip-set-charset --triggers --disable-keys svdev &#62; dump.sql &#8211; получится чистый дамп без упаминания кодировок, можно получить отдельно данные: mysqldump -u svd -nt --skip-opt --skip-set-charset --disable-keys svdev &#62; data.sql, поменять кодировку полей в схеме, вместо:
name varchar&#40;64&#41; character SET cp1251 NOT NULL
сделать
name varchar&#40;64&#41; character [...]]]></description>
			<content:encoded><![CDATA[<p>Для начала перевести БД из cp1251 в utf8.<br />
Сделать дамп <code class="codecolorer sql default"><span class="sql">mysqldump <span style="color: #66cc66;">-</span>u svd <span style="color: #66cc66;">-</span>n <span style="color: #808080; font-style: italic;">--skip-opt --skip-set-charset --triggers --disable-keys svdev &gt; dump.sql</span></span></code> &#8211; получится чистый дамп без упаминания кодировок, можно получить отдельно данные: <code class="codecolorer sql default"><span class="sql">mysqldump <span style="color: #66cc66;">-</span>u svd <span style="color: #66cc66;">-</span>nt <span style="color: #808080; font-style: italic;">--skip-opt --skip-set-charset --disable-keys svdev &gt; data.sql</span></span></code>, поменять кодировку полей в схеме, вместо:</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">name varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span> character <span style="color: #993333; font-weight: bold;">SET</span> cp1251 <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span></div></div>
<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">name varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span> character <span style="color: #993333; font-weight: bold;">SET</span> utf8 <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span></div></div>
<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">name varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span></div></div>
<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;">ALTER</span> <span style="color: #993333; font-weight: bold;">DATABASE</span> svdev <span style="color: #993333; font-weight: bold;">DEFAULT</span> CHARACTER <span style="color: #993333; font-weight: bold;">SET</span> utf8 COLLATE utf8_general_ci</div></div>
<p>и залить назад в обратном порядке &#8211; сначала структуру, затем данные.<br />
Следующим шагом необходимо изменить кодировку файлов, для этого я набросал простенький скрипт (подключаемые библиотеки которые трогать не надо &#8211; типа tiny просто вынес сначала из проекта, а затем вернул обратно:<span id="more-429"></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: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #000000; font-weight: bold;">for</span> FILE <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> <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>svdev<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">egrep</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">&quot;\.(php|html)$&quot;</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #000000; font-weight: bold;">do</span><br />
iconv <span style="color: #660033;">-f</span> cp1251 <span style="color: #660033;">-t</span> utf8 <span style="color: #007800;">$FILE</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$FILE</span><span style="color: #ff0000;">&quot;.utf&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$FILE</span><span style="color: #ff0000;">&quot;.utf&quot;</span> <span style="color: #007800;">$FILE</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$FILE</span><span style="color: #ff0000;">&quot; - work complete&quot;</span><br />
<span style="color: #000000; font-weight: bold;">done</span></div></div>
<p>Он в заданной директории файлы по маске .php и .html перекодирует в UTF используя утилиту iconv во временный файл, а затем перезаписывает исходный файл временным.<br />
Следующим шагом убедимся в правильной настройке mb_ функций PHP. Для этого создадим файлик <code class="codecolorer bash default"><span class="bash"><span style="color: #c20cb9; font-weight: bold;">vim</span> strtest.php</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;">echo</span> <a href="http://www.php.net/strlen"><span style="color: #990000;">strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;мама мыла раму&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/mb_strlen"><span style="color: #990000;">mb_strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;мама мыла раму&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/mb_strlen"><span style="color: #990000;">mb_strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;мама мыла раму&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Правильная длина строки &#8211; 14 символов. Выполним его из консоли: <code class="codecolorer bash default"><span class="bash">php5-cgi strtest.php</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">X-Powered-By: PHP<span style="color: #000000; font-weight: bold;">/</span>5.2.10-2ubuntu6.3<br />
Content-type: text<span style="color: #000000; font-weight: bold;">/</span>html<br />
<br />
<span style="color: #000000;">26</span><br />
<span style="color: #000000;">26</span><br />
<span style="color: #000000;">14</span></div></div>
<p>Для исправления &#8211; установим верные значения в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>cgi<span style="color: #000000; font-weight: bold;">/</span>php.ini</span></code> и <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>cli<span style="color: #000000; font-weight: bold;">/</span>php.ini</span></code>, для этого по файлу надо поискать <strong>encoding</strong> и <strong>charset</strong><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">default_charset = <span style="color: #ff0000;">&quot;UTF-8&quot;</span><br />
...<br />
mbstring.language = Russian<br />
mbstring.internal_encoding = UTF-<span style="color: #000000;">8</span></div></div>
<p>Теперь при повторном выполнении теста <code class="codecolorer bash default"><span class="bash">php5-cgi strtest.php</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">X-Powered-By: PHP<span style="color: #000000; font-weight: bold;">/</span>5.2.10-2ubuntu6.3<br />
Content-type: text<span style="color: #000000; font-weight: bold;">/</span>html; <span style="color: #007800;">charset</span>=UTF-<span style="color: #000000;">8</span><br />
<br />
<span style="color: #000000;">26</span><br />
<span style="color: #000000;">14</span><br />
<span style="color: #000000;">14</span></div></div>
<p>Так же не лишним будет в конфиге проекта указать верно локаль, к примеру <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/setlocale"><span style="color: #990000;">setlocale</span></a><span style="color: #009900;">&#40;</span>LC_ALL<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;ru_RU.utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></span></code> список доступных локалей в системе можно посмотреть <code class="codecolorer bash default"><span class="bash">locale <span style="color: #660033;">-a</span></span></code> (ну и на всякий случай проверить что с новой локалью не будет багов, подробнее здесь: <a href="http://svdev.ru/blog/float-setlocale-relation/">Как float зависит от локали?!</a> )<br />
Указать кодировку в настройках nginx для нужного сайта <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-available<span style="color: #000000; font-weight: bold;">/</span>svdev</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">server <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
...<br />
&nbsp; &nbsp; &nbsp; &nbsp; charset &nbsp; &nbsp; &nbsp; &nbsp; UTF-<span style="color: #000000;">8</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; source_charset &nbsp;UTF-<span style="color: #000000;">8</span>;<br />
...<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Ну и самая нудная часть &#8211; пройтись по проекту и заменить функции работы со строками на их <strong>mb_</strong> аналоги, в используемые регулярные выражения добавить модификатор <strong>u</strong> и если отправляются где-то письма &#8211; изменить кодировку писем.<br />
Ну вот вроде и все! Перед всеми манипуляциями неплохо бы сделать резервную копию файлов и БД, на всякий случай.</p>
<h3>Дополнительное чтиво</h3>
<ul>
<li><a href="http://sysoev.ru/nginx/docs/http/ngx_http_charset_module.html" target="_blank">Директивы модуля ngx_http_charset_module</a></li>
<li><a href="http://ru2.php.net/manual/en/function.setlocale.php" target="_blank">PHP &#8211; Set locale information</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/site-convert-from-cp1251-to-utf8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
