<?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://www.job-blog.bullgare.ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.job-blog.bullgare.ru</link>
	<description>о программировании и работе</description>
	<lastBuildDate>Wed, 01 Sep 2010 09:31:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Выбор цвета (color picker) в linux</title>
		<link>http://www.job-blog.bullgare.ru/2010/08/%d0%b2%d1%8b%d0%b1%d0%be%d1%80-%d1%86%d0%b2%d0%b5%d1%82%d0%b0-color-picker-%d0%b2-linux/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/08/%d0%b2%d1%8b%d0%b1%d0%be%d1%80-%d1%86%d0%b2%d0%b5%d1%82%d0%b0-color-picker-%d0%b2-linux/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 12:05:10 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=781</guid>
		<description><![CDATA[В windows пользовался pixie &#8211; http://www.nattyware.com/pixie.php.
Понадобился аналог под linux &#8211; нашёл grabc.
По сравнению с pixie он конечно не так удобен &#8211; работает из командной строки, но хоть что-то.
]]></description>
			<content:encoded><![CDATA[<p>В windows пользовался pixie &#8211; <a href="http://www.nattyware.com/pixie.php">http://www.nattyware.com/pixie.php</a>.<br />
Понадобился аналог под linux &#8211; нашёл <strong>grabc</strong>.<br />
По сравнению с pixie он конечно не так удобен &#8211; работает из командной строки, но хоть что-то.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/08/%d0%b2%d1%8b%d0%b1%d0%be%d1%80-%d1%86%d0%b2%d0%b5%d1%82%d0%b0-color-picker-%d0%b2-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Настройка TortoiseHg под Ubuntu</title>
		<link>http://www.job-blog.bullgare.ru/2010/08/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-tortoisehg-%d0%bf%d0%be%d0%b4-ubuntu/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/08/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-tortoisehg-%d0%bf%d0%be%d0%b4-ubuntu/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 10:33:03 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[TortoiseHg]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=775</guid>
		<description><![CDATA[Настройки хранятся в файле ~/.hgrc

[ui]
merge = kdiff3
username = bullgare

[extensions]
extdiff = # для meld в качестве visual diff tool

[extdiff]
meld = # для meld в качестве visual diff tool
#kdiff3 =
kompare = 

[tortoisehg]
authorcolor = True
longsummary = True
postpull = rebase
vdiff = kompare
editor = meld
vdiffnowin = True

Список доступных команд:
http://manpages.ubuntu.com/manpages/lucid/man1/hgtk.1.html
Для работы в командной строке нужно поработать с файлом настроек (/etc/mercurial/hgrc.d/hgext) &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Настройки хранятся в файле ~/.hgrc</p>
<pre class="code">
[ui]
merge = kdiff3
username = bullgare

[extensions]
extdiff = # для meld в качестве visual diff tool

[extdiff]
meld = # для meld в качестве visual diff tool
#kdiff3 =
kompare = 

[tortoisehg]
authorcolor = True
longsummary = True
postpull = rebase
vdiff = kompare
editor = meld
vdiffnowin = True
</pre>
<p>Список доступных команд:<br />
<a href="http://manpages.ubuntu.com/manpages/lucid/man1/hgtk.1.html">http://manpages.ubuntu.com/manpages/lucid/man1/hgtk.1.html</a></p>
<p>Для работы в командной строке нужно поработать с файлом настроек (/etc/mercurial/hgrc.d/hgext) &#8211; раскоментировать <strong>hgext.hgk</strong> для доступности команды <strong>hg view</strong>, <strong>hgext.rebase</strong>, <strong>hgext.record</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/08/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-tortoisehg-%d0%bf%d0%be%d0%b4-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Добавление модулей к apache в Ubuntu</title>
		<link>http://www.job-blog.bullgare.ru/2010/08/%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d0%b5%d0%b9-%d0%ba-%d0%b0%d0%bf%d0%b0%d1%87-%d0%b2-ubuntu/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/08/%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d0%b5%d0%b9-%d0%ba-%d0%b0%d0%bf%d0%b0%d1%87-%d0%b2-ubuntu/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 07:09:28 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[администрирование]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=772</guid>
		<description><![CDATA[sudo a2enmod [модуль]
К примеру:

sudo a2enmod rewrite
sudo a2enmod expires

]]></description>
			<content:encoded><![CDATA[<pre class="code">sudo a2enmod [модуль]</pre>
<p>К примеру:</p>
<pre class="code">
sudo a2enmod rewrite
sudo a2enmod expires
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/08/%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d0%b5%d0%b9-%d0%ba-%d0%b0%d0%bf%d0%b0%d1%87-%d0%b2-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работа в hg с rsa-ключом под linux</title>
		<link>http://www.job-blog.bullgare.ru/2010/08/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d0%b2-hg-%d1%81-rsa-%d0%ba%d0%bb%d1%8e%d1%87%d0%be%d0%bc-%d0%bf%d0%be%d0%b4-linux/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/08/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d0%b2-hg-%d1%81-rsa-%d0%ba%d0%bb%d1%8e%d1%87%d0%be%d0%bc-%d0%bf%d0%be%d0%b4-linux/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 06:33:37 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[администрирование]]></category>
		<category><![CDATA[Hg]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[TortoiseHg]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=767</guid>
		<description><![CDATA[Нужно положить в папку ~/.ssh файл id_rsa (или id_dsa) со сгенерированным ключом. У меня был ключ, сгенерированный puttygen &#8211; для работы под windows. Для конвертации достаточно загрузить файл приватного ключа в puttygen и сконвертировать в нужный формат, после чего в linux положить этот файл в указанное место.
]]></description>
			<content:encoded><![CDATA[<p>Нужно положить в папку ~/.ssh файл id_rsa (или id_dsa) со сгенерированным ключом. У меня был ключ, сгенерированный puttygen &#8211; для работы под windows. Для конвертации достаточно загрузить файл приватного ключа в puttygen и сконвертировать в нужный формат, после чего в linux положить этот файл в указанное место.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/08/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d0%b2-hg-%d1%81-rsa-%d0%ba%d0%bb%d1%8e%d1%87%d0%be%d0%bc-%d0%bf%d0%be%d0%b4-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Закрасить изображение в Gimp (размножить часть изображения)</title>
		<link>http://www.job-blog.bullgare.ru/2010/08/%d0%b7%d0%b0%d0%ba%d1%80%d0%b0%d1%81%d0%b8%d1%82%d1%8c-%d0%b8%d0%b7%d0%be%d0%b1%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-gimp-%d1%80%d0%b0%d0%b7%d0%bc%d0%bd%d0%be%d0%b6%d0%b8%d1%82%d1%8c/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/08/%d0%b7%d0%b0%d0%ba%d1%80%d0%b0%d1%81%d0%b8%d1%82%d1%8c-%d0%b8%d0%b7%d0%be%d0%b1%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-gimp-%d1%80%d0%b0%d0%b7%d0%bc%d0%bd%d0%be%d0%b6%d0%b8%d1%82%d1%8c/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 12:06:54 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[GIMP]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=765</guid>
		<description><![CDATA[Сложно придумать человеческое название этому процессу.
К примеру, есть дизайн одной картинкой, из него нужна кнопка, на кнопке уже что-то написано, надо это убрать.
Нужно прямоугольным выделением выделить нужную область, потом Инструменты->Преобразование->Масштаб и подвигать ползунок, пока избражение не закроет всю кнопку.
]]></description>
			<content:encoded><![CDATA[<p>Сложно придумать человеческое название этому процессу.<br />
К примеру, есть дизайн одной картинкой, из него нужна кнопка, на кнопке уже что-то написано, надо это убрать.<br />
Нужно прямоугольным выделением выделить нужную область, потом <strong>Инструменты</strong>-><strong>Преобразование</strong>-><strong>Масштаб</strong> и подвигать ползунок, пока избражение не закроет всю кнопку.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/08/%d0%b7%d0%b0%d0%ba%d1%80%d0%b0%d1%81%d0%b8%d1%82%d1%8c-%d0%b8%d0%b7%d0%be%d0%b1%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-gimp-%d1%80%d0%b0%d0%b7%d0%bc%d0%bd%d0%be%d0%b6%d0%b8%d1%82%d1%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как правильно установить xdebug для удобной работы</title>
		<link>http://www.job-blog.bullgare.ru/2010/08/%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d1%8c%d0%bd%d0%be-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-xdebug-%d0%b4%d0%bb%d1%8f-%d1%83%d0%b4%d0%be%d0%b1%d0%bd%d0%be/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/08/%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d1%8c%d0%bd%d0%be-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-xdebug-%d0%b4%d0%bb%d1%8f-%d1%83%d0%b4%d0%be%d0%b1%d0%bd%d0%be/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 12:53:06 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=759</guid>
		<description><![CDATA[1. Скачиваем расширение &#8211; http://www.xdebug.org/download.php (я качаю ts) и копируем в папку с расширениями php.
2. В php.ini пишем

zend_extension_ts = "/php_xdebug.dll"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_port=9000
xdebug.remote_host=localhost
xdebug.idekey=bullgare ;ну или другой

;это для профилирования
xdebug.profiler_enable=Off
xdebug.profiler_output_dir="c:\traces"
xdebug.profiler_enable_trigger=On
xdebug.profiler_output_name = cachegrind.out.%t.%p

После перезапуска апача phpinfo будет содержать  раздел xdebug.

3. Качаем плагин для firefox &#8211; Xdebug Helper с неофициального сайта &#8211; http://www.softpedia.com/progDownload/Xdebug-Helper-Download-79882.html, к сожалению, на официальном сайте его уже нет, [...]]]></description>
			<content:encoded><![CDATA[<p>1. Скачиваем расширение &#8211; <a href="http://www.xdebug.org/download.php">http://www.xdebug.org/download.php</a> (я качаю ts) и копируем в папку с расширениями php.<br />
2. В <strong>php.ini</strong> пишем</p>
<pre class="code">
zend_extension_ts = "<путь-к-папке-ext>/php_xdebug.dll"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_port=9000
xdebug.remote_host=localhost
xdebug.idekey=bullgare ;ну или другой

;это для профилирования
xdebug.profiler_enable=Off
xdebug.profiler_output_dir="c:\traces"
xdebug.profiler_enable_trigger=On
xdebug.profiler_output_name = cachegrind.out.%t.%p
</pre>
<p>После перезапуска апача phpinfo будет содержать  раздел <strong>xdebug</strong>.<br />
<span id="more-759"></span><br />
3. Качаем плагин для firefox &#8211; <a href="http://www.softpedia.com/progDownload/Xdebug-Helper-Download-79882.html/">Xdebug Helper с неофициального сайта &#8211; http://www.softpedia.com/progDownload/Xdebug-Helper-Download-79882.html</a>, к сожалению, на официальном сайте его уже нет, там он называется EasyXdebug и не работает (<a href="https://addons.mozilla.org/nl/firefox/addon/58688">https://addons.mozilla.org/nl/firefox/addon/58688</a>).<br />
Он для нового firefox не подходит &#8211; надо поправить версию. Залазим в скачанный архив (можно временно переименовать в zip, к примеру), редактируем файл <strong>install.rdf</strong> &#8211; ставим параметр <strong>maxVersion=&raquo;5.0&#8243;</strong>. Сохраняем в архив, переименовываем его обратно (меняем расширение). Потом он ставится без проблем. Прописываем в настройках плагина тот же ключ, что и в <strong>php.ini</strong>.<br />
4. После этого в среде разработки настраиваем всё в соответствии с настройками php и плагина. Я лично пользуюсь phpStorm, в нём надо ткнуть в кнопку <strong>Select Debug configuration</strong>, создать новую конфигурацию, создать в конфигурации новый<strong>Server</strong>, у которого в <strong>Web server root URL</strong> пишем url к корню сервера, к примеру, http://example.com. Во вкладке <strong>Mappings</strong> в поле <strong>Local path</strong> пишем локальный путь к серверу (с:\mysite).<br />
В настройках конфигурации прописать браузер &#8211; firefox и idekey.<br />
5. Использование:<br />
В браузере ткнуть в правом нижнем углу кнопку <strong>Start/stop xdebug session</strong>, в IDE нажать на кнопку <strong>debug</strong>, поставить точку останова, обновить страничку.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/08/%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d1%8c%d0%bd%d0%be-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-xdebug-%d0%b4%d0%bb%d1%8f-%d1%83%d0%b4%d0%be%d0%b1%d0%bd%d0%be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Контролируемое скачивание (ограничение скорости отдачи файлов)</title>
		<link>http://www.job-blog.bullgare.ru/2010/08/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d0%b8%d1%80%d1%83%d0%b5%d0%bc%d0%be%d0%b5-%d1%81%d0%ba%d0%b0%d1%87%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%b3%d1%80%d0%b0%d0%bd%d0%b8%d1%87%d0%b5/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/08/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d0%b8%d1%80%d1%83%d0%b5%d0%bc%d0%be%d0%b5-%d1%81%d0%ba%d0%b0%d1%87%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%b3%d1%80%d0%b0%d0%bd%d0%b8%d1%87%d0%b5/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 15:44:54 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[ссылка]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=756</guid>
		<description><![CDATA[Наткнулся в сети на интересную статью о том, как ограничить скорость скачивания файлов с сервера.
Код на Python (Django), но если язык не знаком, то в качестве алгоритма почитать тоже полезно.
Ссылка.
]]></description>
			<content:encoded><![CDATA[<p>Наткнулся в сети на интересную статью о том, как ограничить скорость скачивания файлов с сервера.<br />
Код на Python (Django), но если язык не знаком, то в качестве алгоритма почитать тоже полезно.<br />
<a href="http://softwaremaniacs.org/blog/2006/04/18/controlled-download/">Ссылка</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/08/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d0%b8%d1%80%d1%83%d0%b5%d0%bc%d0%be%d0%b5-%d1%81%d0%ba%d0%b0%d1%87%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%b3%d1%80%d0%b0%d0%bd%d0%b8%d1%87%d0%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postgresql-аналоги myslq-евской &#171;ON DUPLICATE KEY UPDATE&#187;</title>
		<link>http://www.job-blog.bullgare.ru/2010/08/postgresql-%d0%b0%d0%bd%d0%b0%d0%bb%d0%be%d0%b3%d0%b8-myslq-%d0%b5%d0%b2%d1%81%d0%ba%d0%be%d0%b9-on-duplicate-key-update/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/08/postgresql-%d0%b0%d0%bd%d0%b0%d0%bb%d0%be%d0%b3%d0%b8-myslq-%d0%b5%d0%b2%d1%81%d0%ba%d0%be%d0%b9-on-duplicate-key-update/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 20:46:17 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=750</guid>
		<description><![CDATA[В mysql есть очень удобная конструкция

INSERT INTO table (columns) VALUES (values) ON DUPLICATE KEY UPDATE column1=value1, column2=value2

Это очень удобно тогда, когда нужно вставить только те данные, которых в таблице нет (при этом в апдейте указывается уже существующее значение поля).
В postgresql такого, к сожалению, нет.
Но подобное поведение можно сэмулировать несколькими способами. Два самых интересных:

1. Создать правило

 [...]]]></description>
			<content:encoded><![CDATA[<p>В mysql есть очень удобная конструкция</p>
<pre class="code">
INSERT INTO table (columns) VALUES (values) ON DUPLICATE KEY UPDATE column1=value1, column2=value2
</pre>
<p>Это очень удобно тогда, когда нужно вставить только те данные, которых в таблице нет (при этом в апдейте указывается уже существующее значение поля).<br />
В postgresql такого, к сожалению, нет.<br />
Но подобное поведение можно сэмулировать несколькими способами. Два самых интересных:<br />
<span id="more-750"></span><br />
1. Создать правило</p>
<pre class="code">
 CREATE OR REPLACE RULE "insert_ignore_mytable" AS ON INSERT TO "mytable" WHERE EXISTS (SELECT 1 FROM "mytable" WHERE id = NEW.id) DO INSTEAD NOTHING;
</pre>
<p>Этот способ удобен тем, что его нужно написать только один раз, и при любой вставке данных с уже существующим ключом выполнение работы продолжится, а самой вставки не произойдёт. Неудобен тем, что выполняется селект, да и вообще это по сути триггер, делающий лишнюю работу до вставки.<br />
2. Обработать исключение</p>
<pre class="code">
BEGIN
     INSERT INTO db(a,b) VALUES (key, data);
EXCEPTION WHEN unique_violation THEN
      -- смотрим, улыбаемся
END;
</pre>
<p>Удобен тем, что не надо затрагивать таблицу, т.е. другие запросы пойдут как обычно. Неудобен тем, что его приходится использовать внутри хранимых процедур.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/08/postgresql-%d0%b0%d0%bd%d0%b0%d0%bb%d0%be%d0%b3%d0%b8-myslq-%d0%b5%d0%b2%d1%81%d0%ba%d0%be%d0%b9-on-duplicate-key-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Трассировка PHP-приложений с помощью xdebug</title>
		<link>http://www.job-blog.bullgare.ru/2010/07/%d1%82%d1%80%d0%b0%d1%81%d1%81%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b0-php-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b9-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-xdebug/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/07/%d1%82%d1%80%d0%b0%d1%81%d1%81%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b0-php-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b9-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-xdebug/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 10:37:46 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[xdebug]]></category>
		<category><![CDATA[отладка]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=748</guid>
		<description><![CDATA[Вот достаточно подробная статья на эту тему.
В принципе достаточно написать

xdebug_start_trace('&#60;Путь-к файлу&#62;.html', XDEBUG_TRACE_HTML);
...
...
xdebug_stop_trace();

]]></description>
			<content:encoded><![CDATA[<p>Вот достаточно подробная <a href="http://habrahabr.ru/blogs/php/31463/">статья</a> на эту тему.<br />
В принципе достаточно написать</p>
<pre class="code">
xdebug_start_trace('&lt;Путь-к файлу&gt;.html', XDEBUG_TRACE_HTML);
...
...
xdebug_stop_trace();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/07/%d1%82%d1%80%d0%b0%d1%81%d1%81%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b0-php-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b9-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-xdebug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Greasemonkey-скрипт для Redmine</title>
		<link>http://www.job-blog.bullgare.ru/2010/06/greasemonkey-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82-%d0%b4%d0%bb%d1%8f-redmine/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/06/greasemonkey-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82-%d0%b4%d0%bb%d1%8f-redmine/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 14:38:40 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[redmine]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=744</guid>
		<description><![CDATA[Redmine, конечно, настраиваемый и гибкий, но иногда очень не удобный.
Захотелось сделать кнопочку &#171;Взять в работу&#187;, которая появлялась бы на странице тикета.
Делать плагин долго, просто подключить яваскрипт в шаблон &#8211; плохо, проблемы при обновлении Redmine.
В итоге решил написать Greasemonkey-скрипт:

// ==UserScript==
// @name           Redmine Ticket
// @namespace   [...]]]></description>
			<content:encoded><![CDATA[<p>Redmine, конечно, настраиваемый и гибкий, но иногда очень не удобный.<br />
Захотелось сделать кнопочку &laquo;Взять в работу&raquo;, которая появлялась бы на странице тикета.<br />
Делать плагин долго, просто подключить яваскрипт в шаблон &#8211; плохо, проблемы при обновлении Redmine.<br />
В итоге решил написать Greasemonkey-скрипт:</p>
<pre class="code">
// ==UserScript==
// @name           Redmine Ticket
// @namespace      hc
// @include        [урл к Redmine]/issues/*
// ==/UserScript==
var tt = document.createElement('DIV');
tt.innerHTML = "&lt;script&gt;\
var linkInWork = '&lt;a href=\"javascript:void(0);\" onclick=\"setInWork(); return false;\" class=\"icon\"&gt;In work&lt;/a&gt;';\
$A( $$( '#content .contextual a.icon-del' ) ).each( function( Elem ) {\
	Elem.insert( {'after': linkInWork} );\
});\
function setInWork()\
{\
	var t = $('loggedas').innerHTML;\
	var userId = /\\/users\\/([0-9]*)/.exec(t);\
	if ( userId !== null ) {\
		userId = userId[1];\
	}\
	var statusValue = 2;\
	setSelectOptionSelected( 'issue_assigned_to_id', userId );\
	setSelectOptionSelected( 'issue_status_id', statusValue );\
	$('issue-form').submit();\
}\
function setSelectOptionSelected( SelId, Value )\
{\
	var sel = $( SelId );\
	$A( sel.options ).find( function( option, index ) {\
	   if( option.value == Value ) {\
			sel.selectedIndex = index;\
	   }\
	});\
}\
&lt;/script&gt;";

document.getElementById('content').appendChild(tt);
</pre>
<p>Добавляет ссылки &laquo;In work&raquo; в список ссылок вверху и внизу страницы.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/06/greasemonkey-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82-%d0%b4%d0%bb%d1%8f-redmine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
