<?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; unix</title>
	<atom:link href="http://miracle.rpz.name/category/unix/feed/" rel="self" type="application/rss+xml" />
	<link>http://miracle.rpz.name</link>
	<description>Sorry for my terrible english. My native language is PHP.</description>
	<lastBuildDate>Thu, 12 Jan 2012 20:42:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-alpha-19719</generator>
		<item>
		<title>Failed to initialize the NVIDIA GPU</title>
		<link>http://miracle.rpz.name/2012/01/12/failed-to-initialize-the-nvidia-gpu/</link>
		<comments>http://miracle.rpz.name/2012/01/12/failed-to-initialize-the-nvidia-gpu/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 22:44:30 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nvidia]]></category>
		<category><![CDATA[slackware]]></category>

		<guid isPermaLink="false">http://miracle.rpz.name/?p=621</guid>
		<description><![CDATA[После обновления ядра до версии 2.6.38.7 система стала работать нестабильно, переодически зависала на продолжительное время, решил не откатываться на предыдущее, не ждать милости Патрика, а собрать более свежее ядро руками (вспомнить молодость, ага). Процесс прошёл на удивление быстро: #"инструкция" cd /usr/src/ wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.8.tar.bz2 tar xfj linux-3.1.8.tar.bz2 rm -rf linux ln -s /usr/src/linux-3.1.8 /usr/src/linux cd /usr/src/linux [...]]]></description>
			<content:encoded><![CDATA[<p>После обновления ядра до версии 2.6.38.7 система стала работать нестабильно, переодически зависала на продолжительное время, решил не откатываться на предыдущее, не ждать милости <a href="http://slackware.com/about/">Патрика</a>, а собрать более свежее ядро руками (вспомнить молодость, ага).</p>
<p>Процесс прошёл на удивление быстро:</p>
<pre class="c">
#"инструкция"
cd /usr/src/
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.8.tar.bz2
tar xfj linux-3.1.8.tar.bz2
rm -rf linux
ln -s /usr/src/linux-3.1.8 /usr/src/linux
cd /usr/src/linux
zcat /proc/config.gz > .config
make oldnoconfig
make menuconfig
make -j3 all
make modules_install
make install
cd /etc/rc.d
mv /boot/vmlinuz /boot/vmlinuz-3.1.8
ln -s /boot/vmlinuz-3.1.8 /boot/vmlinuz
mv /boot/System.map /boot/System.map-3.1.8
ln -s /boot/System.map-3.1.8 /boot/System.map
cp /usr/src/linux/.config /boot/config-3.1.8
rm /boot/config
ln -s /boot/config-3.1.8 /boot/config
mcedit lilo.conf
lilo
reboot
</pre>
<p>&#8230;а главное безболезненно &#8211; система загрузилась сразу.</p>
<p> Настал черёд пересобрать драйвера <strong>nvidia</strong>. В наличии имелся инсталлятор версии <strong>275.09</strong> &#8211; он работать отказался сославшись на то, что не может найти исходники ядра. Хорошо &#8211; скачал последнюю на данный момент сборку &#8211; <strong>290.10</strong>, которая установилась без проблем. Но не тут-то было &#8211; xOrg не запустился ругнувшись:</p>
<pre class="c">
NVIDIA: could not open the device file /dev/nvidia0 (Input/output error).
(EE) NVIDIA(0): Failed to initialize the NVIDIA GPU at PCI:1:0:0.  Please
(EE) NVIDIA(0):     check your system's kernel log for additional error
(EE) NVIDIA(0):     messages and refer to Chapter 8: Common Problems in the
(EE) NVIDIA(0):     README for additional information.
(EE) NVIDIA(0): Failed to initialize the NVIDIA graphics device
</pre>
<p>И пошло-поехало&#8230; </p>
<ul>
<li>откатился до <strong>285.05.09</strong> &#8211; тоже самое</li>
<li>последовательно перепробовал всевозможные опции ядру, которые удалось найти в &#8220;этих ваших интернетах&#8221; и <em>noacpi</em> и <em><a href="https://wiki.archlinux.org/index.php/NVIDIA#.27.2Fdev.2Fnvidia0.27_Input.2FOutput_error">pci=biosirq</a></em> и <em><a href="https://bbs.archlinux.org/viewtopic.php?pid=1018357#p1018357">vmalloc=XXXm</a></em> &#8211; без результата.</li>
<li>перепробовал море разных опций модулю nvidia &#8211; без толку</li>
</ul>
<p>И вот надежда уже погибла, <strong>xOrg</strong> работает через убогий <strong>nouveau</strong> и остаётся лишь <strike>&#8220;<a href="https://bbs.archlinux.org/viewtopic.php?pid=1021966#p1021966">установить бубунту</a>&#8220;</strike> загрузить старое ядро (и собрать ему старые драйвера nvidia). Поудалял кучу старых инсталляторов и решил <a href="http://www.nvidia.com/object/linux_display_archive.html">скачать</a> (раз пошла такая пьянка) <strong>275.28</strong> и на всякий попробовал их собрать к свежему ядру. И что удивительно &#8211; получилось! всё заработало, на первый взгляд система стала шустрее, chrome с полусотней открытых табов больше не вводит иксы в транс. На днях попробую повторить операцию &#8220;хватить тупить&#8221; на другой машине</p>
<p>&#8220;Такой день&#8221; (ц)</p>
]]></content:encoded>
			<wfw:commentRss>http://miracle.rpz.name/2012/01/12/failed-to-initialize-the-nvidia-gpu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>zoom-слайдер на клавиатуре в linux</title>
		<link>http://miracle.rpz.name/2012/01/11/zoom-slider-on-microsoft-keyboard-and-xorg/</link>
		<comments>http://miracle.rpz.name/2012/01/11/zoom-slider-on-microsoft-keyboard-and-xorg/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 20:56:10 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[slackware]]></category>

		<guid isPermaLink="false">http://miracle.rpz.name/?p=602</guid>
		<description><![CDATA[После прочтения заметки о &#8220;странных кнопках ноутбука&#8221; сразу вспомнил о неработающем zoom-слайдере на клавиатуре Microsoft Microsoft® Digital Media Keyboard. Немедленно с помощью showkeys выяснил keycodes событий &#8220;слайдер вверх&#8221; &#8211; 418, слайдер вниз &#8211; 419. Перечитав ещё несколько раз заметку понял что мне она больше не поможет &#8211; xOrg в принципе не переваривает keycodes выше 255, [...]]]></description>
			<content:encoded><![CDATA[<p>После прочтения заметки о &#8220;<a href="http://linsovet.com/xorg-use-non-standard-keys">странных кнопках ноутбука</a>&#8221; сразу вспомнил о неработающем zoom-слайдере на клавиатуре <a href="http://autocatalog.nix.ru/autocatalog/keyboards_microsoft/Microsoft_Digital_Media_Keyboard_ver.1.0a_Black_Ergo_USB_105_15_Zoom_Slider_DB800012_31415.html" title="конечно же это реклама, а не ссылка на страницу с фотографией клавиатуры" target="_blank"> Microsoft Microsoft® Digital Media Keyboard</a>. Немедленно с помощью <strong>showkeys</strong> выяснил keycodes событий &#8220;слайдер вверх&#8221; &#8211; 418, слайдер вниз &#8211; 419. Перечитав ещё несколько раз заметку понял что мне она больше не поможет &#8211; <strong>xOrg</strong> в принципе не переваривает keycodes выше 255, ситуация казалось бы безвыходная, но оказалось не совсем, нашлось решение в виде <a href="http://www.bedroomlan.org/projects/evrouter">evrouter</a> &#8211; программы, которая (как видно из названия) &#8220;пробрасывает&#8221; события одних устройств на другие трансформируя согласно правилам описанным в конфигурационном файле.</p>
<p>После непродолжительных мытарств родился следующий <strong>~/.evrouterrc</strong>:</p>
<pre class="c">
#при нажатии на slider up на клавиатуре - сгенерируй событие "mousewheelup"
"Microsoft Microsoft® Digital Media Keyboard" "/dev/input/event.*" none key/418 "XButton/4"
#при нажатии на slider down на клавиатуре - сгенерируй событие "mousewheeldown
"Microsoft Microsoft® Digital Media Keyboard" "/dev/input/event.*" none key/419 "XButton/5"
</pre>
<p>Для получения необходимых прав в /dev/input в <strong>rc.local</strong> была добавлена строка: </p>
<pre class="c">
# внимание - используйте на свой страх и риск! Слабо представляю какие подсистемы затронет такое наглое вмешательство в /dev
chgrp users /dev/input/event*
</pre>
<p>В <strong>~/.kde/Autostart</strong> добавлен запуск <strong>/usr/bin/evrouter /dev/input/event*</strong></p>
<blockquote><p>Вы можете запускать evrouter через sudo (и не трогать права на /dev), но подозреваю, что с автозапуском могут быть проблемы&#8230;</p></blockquote>
<p>После чего обнаружил что скроллинг работает, да совсем не так, как ожидалось &#8211; одно нажатие на слайдер прогручивает активное окно на три строки (как и указано в настройках KDE), но хотелось-то чтобы прокручивалось до тех пор пока слайдер не отпустишь&#8230; Снова поиск и снова решение <span id="more-602"></span>- <a href="https://gist.github.com/754395">патч evrouter, который добавляет повторения &#8220;мышиных&#8221; событий</a>. Качаю, накладываю, пересобираю <strong>evrouter</strong>, меняю команду запуска на <strong>evrouter -r /dev/input/event*</strong> и получаю желанное. </p>
<p>Напоследок добавляю в rc.local_shutdown :</p>
<pre class="c">
/usr/bin/evrouter -q
rm -f /tmp/.evrouter*
</pre>
<p>Спустя семь лет после приобретения клавиатуры заработал &#8220;ползунок&#8221;, пройдут десятилетия и возможно удастся завести &#8220;фаворитные&#8221; пять кнопок <img src='http://miracle.rpz.name/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>&#8220;Такой день&#8221; (ц)</p>
]]></content:encoded>
			<wfw:commentRss>http://miracle.rpz.name/2012/01/11/zoom-slider-on-microsoft-keyboard-and-xorg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jabber-нотификация в redmine</title>
		<link>http://miracle.rpz.name/2011/06/27/redmine-with-jabber-notifications/</link>
		<comments>http://miracle.rpz.name/2011/06/27/redmine-with-jabber-notifications/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 17:35:38 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[dev]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[redmine]]></category>

		<guid isPermaLink="false">http://miracle.rpz.name/?p=498</guid>
		<description><![CDATA[Просматривая статистику посещений, обратил внимание на то, что многих интересует словосочетание &#171;redmine jabber&#187;. Пришла пора удовлетворить спрос. В начале &#171;как обычно&#187; небольшая предыстория о том, &#171;как всё начиналось&#187;: Несколько лет назад мне удалось внедрить redmine на &#171;производстве&#187;, коллеги потихоньку втягиваясь в процесс, затребовали &#171;книгу отзывов и предложений&#187;. Одним из первых пожеланий была замена стандартных уведомлений [...]]]></description>
			<content:encoded><![CDATA[<p>Просматривая статистику посещений, обратил внимание на то, что многих интересует словосочетание &laquo;redmine jabber&raquo;. Пришла пора удовлетворить спрос. В начале &laquo;как обычно&raquo; небольшая предыстория о том, &laquo;как всё начиналось&raquo;:</p>
<blockquote><p> Несколько лет назад мне удалось внедрить <a href="http://redmine.org/">redmine</a> на &laquo;производстве&raquo;, коллеги потихоньку втягиваясь в процесс, затребовали &laquo;книгу отзывов и предложений&raquo;. Одним из первых пожеланий была замена <span title="политика настройки которых мягко говоря идиотская">стандартных уведомлений по email</span> на, успевшие уже войти в моду, <a href="http://miracle.rpz.name/2009/02/24/commit-jabber-php/">jabber-уведомления, которые мы используем для нотификации о новых коммитах в svn</a>. Я вооружился тем самым поисковым запросом, о котором упомянул и немедленно нашёл нужной функциональности <a href="https://github.com/mszczytowski/redmine_messenger/tree" title="Messenger plugin for Redmine">готовый плагин</a>. Помимо уведомлений, автор обещал нам некие таймеры, которые можно стартовать/останавливать посредством команд боту в чате, тем самым &laquo;точно&raquo; подсчитывать затраченное на решение задачи время. В теории это казалось очень нужной и удобной игрушкой, на деле же оказалось, что плагин был выпилен для старой версии redmine и с trunk-версией работать по полной программе отказался. Худо-бедно он иногда стартовал какие-то таймеры, иногда присылал какие-то уведомления, от полученных команд иногда впадал в ступор и потом долго игнорировал собеседника, в общем  вёл себя непозволительно загадочно и непростительно таинственно, но скиллов для исправления обнаруженных проблем мне не хватало, а автор на открытые тикеты особо не реагировал. Мыши плакали, кололись и продолжали есть кактус до одного смешного стечения обстоятельств: я находился в другом городе, бессовестно тратил отпускное время на прогулки, осмотры достопримечательностей и дивных пейзажей, внезапно получил входящий звонок от коллег. Слёзно просили выручать &#8211; что-то мол случилось, трах-бах-тарарах &#8230;и всё, нет у нас больше redmine. Немного порассуждав вслух, источник проблемы вроде бы вычислили, каким-то временным образом проблему по телефону решили, но в тот же вечер, добравшись до интернета, плагин я без сожалений выкинул. Случилось следующее &mdash; при старте redmine, плагин коннектился к jabber-серверу, а уж затем поднимался сам редмайн, но в тот роковой момент соединение с интернетом пропало, от чего случился обширный exception и redmine умер не приходя в сознание.
</p></blockquote>
<div align="center">***</div>
<p>
Тогда стало понятно, что схема со злобным плагином не работает и уведомления надо рассылать внешним по отношению к redmine решением (здесь знатоки rails могли бы долго возражать, но уже поздно). Параллельно с этой проблемой существовали другие.<span id="more-498"></span> <a href="http://miracle.rpz.name/2009/02/24/commit-jabber-php/">Cкрипт, о котором уже упомянул выше</a>, работал прямо скажем неэффективно. Во-первых он <span title="казалось бы - какая разница?! часто что ли коммиты бывают? нет, но всё равно раздражает!">соединялся с xmpp-сервером после каждого коммита</span>, порой делал это долго, порой это у него не получалось, порой сообщения не доставлялись адресату, даже если соединение с сервером было успешным. Поэтому рассылку уведомлений сразу после коммита пришлось разбить на два шага: 1) положить в очередь сообщения для адресатов 2) забрать уведомление из очереди и разослать, после подтверждения доставки удалить его из очереди. Теперь второй скрипт запускался периодически (не после коммита) рассылал уведомления, удалял их из очереди (подтверждения о получении я реализовать не смог). По-прежнему оставалась проблема с пропадающими сообщениями. Немного покопавшись в недрах протокола я обнаружил что клиент получателя, сервер получателя или мой xmpp-сервер при возникновении ошибки возвращают моё сообщение но с типом <em>error</em>: это значило, что периодический запуск &laquo;рассылатора-уведомлятора&raquo; не подходит &mdash; надо держать постоянное соединение с сервером и должным образом обрабатывать входящие сообщения. Так &laquo;в муках&raquo; родился прототип <a href="http://miracle.rpz.name/2009/12/05/jabber-web-status/">бота webstatus-а</a>, а с ним и рабочая реализация механизма уведомлений по xmpp. Первоначально это был скрипт на php, который при запуске подключался к jabber-серверу, периодически дёргал mysql запросом на получение новых сообщений и рассылал их, помечал как отправленные, если потом возвращались ошибки &#8211; вновь отмечал сообщения как непрочитанные. В mysql-таблицу сообщения попадали от разных источников &#8211; от post-commit хука в svn, от различных скриптов, которые запускаются cron-ом и собирают необходимые нам данные. </p>
<div align="center">***</div>
<p>
Таким образом прикрутить это решение к redmine стало просто делом техники &mdash; требовалось лишь сделать &laquo;триггеры&raquo; в нужных моделях, которые бы добавляли новые записи в таблицу с очередью сообщений для xmpp-бота. Уже позднее <a href="http://miracle.rpz.name/2010/11/20/jabber-web-status-2/">php-решение было переписано на модной нынче node-платформе</a>. Потребовалась лишь прослойка в виде <a href="http://code.nytimes.com/projects/dbslayer">dbslayer</a> для того чтобы соединить node и mysql.</p>
<p> Теперь всё выглядит следующим образом:</p>
<ul>
<li>Сообщения от разных источников попадают в mysql (например :after_save в issue модели редмайна, post-commit хук в svn и т.д.)
<li>Jabber-бот (на <a href="http://nodejs.org">node</a>) периодически делает запрос в mysql (через <a href="http://code.nytimes.com/projects/dbslayer">dbslayer</a>) вида <code>select msg, recipient from msg where recipient in (cписок тех, кто сейчас в онлайне)</code>, если получен непустой результат, то сообщения отправляет адресату и отмечает их прочитанными.
<li> Если сообщение вернулось с ошибкой &#8211; бот отмечает его непрочитанным, а адресата на некоторое время отправляет &laquo;на скамейку запасных&raquo; (чтобы не долбить его повторяющимися запросами)
<li> Бот поддерживается на плаву с помощью <a href="http://supervisord.org/">supervisord</a> (случаются ошибки, как правило сетевые, которые не удаётся поймать стандартными try-catch в коде бота, после некоторых попыток обработать все возможные проблемы я пришёл к выводу, что проще &laquo;упасть и товарищи поднимут&raquo; нежели пытаться &laquo;любой ценой устоять&raquo; &mdash; всё-таки данные не настолько критичные и безвозратная потеря сообщения терпима.
</ul>
<div align="center">***</div>
<p id="download"> Тех, кто дочитал до этого места и всё ещё жаждет получить ссылку <a href="#download">&laquo;скачать&raquo;</a> мне придётся огорчить &mdash; описанный код сильно заточен под наши конкретные нужды и планов его публикации не было, поэтому redmine-зависимая часть кода просто на-тяп-ляплена посреди моделей самого редмайна безо всякой попытки вынести эти части в отдельный плагин, node-часть тоже не обошлась без влезания в &laquo;чужие&raquo; библиотеки. А это всё значит лишь одно: plug-n-play решения у меня нет. Но <a href="http://miracle.rpz.name/2011/06/27/redmine-with-jabber-notifications/#dsq-comments">в комментариях</a> вы можете попробовать наладить конструктивный диалог и мы совместными усилиями создадим работающий у вас плагин, с чаем и шахматистками. Вас это интересует?</p>
]]></content:encoded>
			<wfw:commentRss>http://miracle.rpz.name/2011/06/27/redmine-with-jabber-notifications/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Встаньте в очередь!</title>
		<link>http://miracle.rpz.name/2011/04/23/sound-card-index/</link>
		<comments>http://miracle.rpz.name/2011/04/23/sound-card-index/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 13:27:57 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://miracle.rpz.name/?p=466</guid>
		<description><![CDATA[Встроенная камера ноутбука уже давненько определялась &#34;через раз&#34;, был выработан целый шаманский обряд для её включения, но видимо я чем-то прогневил Великого Байта и последние месяцы камера совсем, что называется &#34;отвалилась&#34;. Поэтому &#34;случайно&#34; посетив большой магазин с кучей техники, &#34;случайно&#34; же приобрёл usb-вебкамеру. Вопреки опасениям камера определилась и заработала (в skype) сразу же, без каких-либо [...]]]></description>
			<content:encoded><![CDATA[<p>Встроенная камера ноутбука уже давненько определялась &quot;через раз&quot;, был выработан целый шаманский обряд для её включения, но видимо я чем-то прогневил Великого Байта и последние месяцы камера совсем, что называется &quot;отвалилась&quot;. Поэтому &quot;случайно&quot; посетив большой магазин с кучей техники, &quot;случайно&quot; же приобрёл usb-вебкамеру. Вопреки опасениям камера определилась и заработала (в skype) сразу же, без каких-либо танцев с драйверами, настройками, поиском anus-ware решений и т.п. дребеденью непременно сопровождающей подключение &laquo;любого&raquo; периферийного устройства в linux. Это не может не радовать!</p>
<p>После перезагрузки вдруг перестал работать звук в flash. Недлительное гугление рассказало о какой-то <em>libflashsupport</em>, которая немедленно поможет справиться с недугом, но внутренний голос пробасил что-то вроде &laquo;ты же не менял никаких настроек уже несколько недель&raquo;. Что характерно &#8211; звук в amarok, vlc и skype работал исправно, но было замечено что в kmix первой закладкой было устройство под названием &quot;<strong>USB Device 0x46d:0&#215;825</strong>&quot; вместо  обычной &quot;<strong>HDA Intel</strong>&quot;, которая стала второй. Запустил <strong>alsamixer</strong> &#8211; и точно, устройством по-умолчанию стала новоявленная карта, у которой даже и playback-а-то нет. Но видимых настроек у flash-player-а нет, поэтому надо было исправлять ситуацию &quot;системно&quot;.</p>
<p>Поскольку уже <span title="попытка воспроизвести звук pcmcia-ного tv-тюнера без вспомогательных программ вроде sox">имелся негативный опыт ковыряния с asound.conf(.asoundrc)</span>, то сразу стал искать способ либо переименовать устройства (вроде того, как переименовывают eth* правилами в udev) или определить порядок загрузки драйверов &#8211; лишь бы не трогать asound.</p>
<p>И способ нашёлся &#8211; в <strong>/etc/modprobe.d/sound.conf</strong> добавлены следующие правила:</p>
<pre class="c">
options snd_hda_intel index=0
options snd_usb_audio index=1
</pre>
<p>После перезагрузки карты выстроились в порядке живой очереди:</p>
<pre class="c">
$ cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xa5100000 irq 41
 1 [U0x46d0x825    ]: USB-Audio - USB Device 0x46d:0x825
                      USB Device 0x46d:0x825 at usb-0000:00:1d.7-5.4, high speed
</pre>
]]></content:encoded>
			<wfw:commentRss>http://miracle.rpz.name/2011/04/23/sound-card-index/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amarok. Следующая остановка &#8211; eof?</title>
		<link>http://miracle.rpz.name/2011/04/09/why-amarok-stop-playback-after-each-file/</link>
		<comments>http://miracle.rpz.name/2011/04/09/why-amarok-stop-playback-after-each-file/#comments</comments>
		<pubDate>Sat, 09 Apr 2011 14:01:52 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[amarok]]></category>
		<category><![CDATA[kde]]></category>

		<guid isPermaLink="false">http://miracle.rpz.name/?p=424</guid>
		<description><![CDATA[В последнее время практически не слушаю музыку из локальной коллекции по причине описанной ранее. Но иногда запускаю и Amarok. И вот этот самый amarok начал чудить &#8211; останавливает проигрывание после каждого файла. Перерыл все настройки на предмет управление playback-ом, по многочисленным советам с разных убунтофорумов попробовал удалять все конфиги, перерыл багтрекер &#8211; все найденные баги [...]]]></description>
			<content:encoded><![CDATA[<p>В последнее время практически не слушаю музыку из локальной коллекции по причине <a href="http://miracle.rpz.name/2010/12/04/last-fm-free-music-player/">описанной ранее</a>. Но иногда запускаю и <a href="http://amarok.kde.org">Amarok</a>. И вот этот самый amarok начал чудить &#8211; останавливает проигрывание после каждого файла. Перерыл все настройки на предмет управление playback-ом, по многочисленным советам с разных убунтофорумов попробовал удалять все конфиги, перерыл багтрекер &#8211; все найденные баги были пофиксены несколько версий назад, всё безрезультатно, надежды нет и конец близок. Хоть бери да используй другой плеер&#8230;</p>
<p>Решение оказалось неожиданным &#8211; потребовалось сменить backend у phonon (кто бы мог подумать?!)  с mplayer на xine, чтобы плеер перестал проказничать. </p>
<p>&#8220;Такой день.&#8221; (ц)</p>
]]></content:encoded>
			<wfw:commentRss>http://miracle.rpz.name/2011/04/09/why-amarok-stop-playback-after-each-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Communication problem with  &#8220;kded&#8221;</title>
		<link>http://miracle.rpz.name/2010/12/05/kde-probably-crashed/</link>
		<comments>http://miracle.rpz.name/2010/12/05/kde-probably-crashed/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 12:21:13 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[kde]]></category>

		<guid isPermaLink="false">http://miracle.rpz.name/?p=409</guid>
		<description><![CDATA[Экспериментируя с Plasma сильно-сильно уронил KDE. Роковое стечение обстоятельств &#8211; как раз перед этим обновил систему (в т.ч. и kde) и не успел рестартнуть сессию. Итого: утомительная многочасовая битва с мельницами, почти полностью утерянные настройки и эта чудо{вищная} заметка. Симптомы были следующие: kde не стартует под пользователем, но прекрасно запускаются под root-ом. startkde: Starting up... [...]]]></description>
			<content:encoded><![CDATA[<p>Экспериментируя с Plasma сильно-сильно уронил KDE. Роковое стечение обстоятельств &#8211; как раз перед этим обновил систему (в т.ч. и kde) и не успел рестартнуть сессию. Итого: утомительная многочасовая битва с мельницами, почти полностью утерянные настройки и эта чудо{вищная} заметка.</p>
<p>Симптомы были следующие: kde не стартует под пользователем, но прекрасно запускаются под root-ом.</p>
<pre class="c">
startkde: Starting up...
Connecting to deprecated signal QDBusConnectionInterface::serviceOwnerChanged(QString,QString,QString)
kded(4946): Communication problem with  "kded" , it probably crashed.
Error message was:  "org.freedesktop.DBus.Error.ServiceUnknown" : " "The name org.kde.kded was not provided by any .service files" " 

<unknown program name>(4944)/ KStartupInfo::createNewStartupId: creating:  "${HOSTNAME};1283501102;250139;4944_TIME0" : "unnamed app"
startkde: Shutting down...
klauncher: Exiting on signal 1
startkde: Running shutdown scripts...
startkde: Done.
</pre>
<p>Незамедлительно был сделан вывод: что-то &#8220;пришло&#8221; в обновлённых пакетах, как назло недоступен slackware.com (нет, ну вы подумайте &#8211; всё вот так вот разом, а?). Был перелопачен /etc на предмет разного рода изменений в правах доступа. Затем в /dev/null один за одним полетели файлы из $HOME, /tmp и т.п. Удалил весь $HOME, создал девственно чистый &#8211;  ничего. Начинала свербить мысль &#8211; а может остаться под root-ом&#8230;. ?!</p>
<p>Решение как всегда оказалось простым и ожиданным. Позабыл удалить <strong>/var/tmp/kdecache-$USER</strong>. Уже не первый раз сталкиваюсь и не последний раз забываю начать именно с этого.</p>
<p><strong>P.S.</strong><br />
Вот на кой ляд половина хлама падает в /tmp, а другая в /var/tmp ?</p>
]]></content:encoded>
			<wfw:commentRss>http://miracle.rpz.name/2010/12/05/kde-probably-crashed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Добавляем действия в контектное меню KDE</title>
		<link>http://miracle.rpz.name/2010/12/01/kde-context-menu/</link>
		<comments>http://miracle.rpz.name/2010/12/01/kde-context-menu/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 21:42:21 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[kde]]></category>

		<guid isPermaLink="false">http://miracle.rpz.name/?p=387</guid>
		<description><![CDATA[Многие операции вроде &#8220;замаунтить флешку&#8221;, &#8220;скопировать файл&#8221; и т.п. ежедневно-рутинные действия я не задумываясь совершаю в консоли (благодаря yakuake она всегда под рукой). Но перед людьми бывает &#8220;неудобно&#8221; &#8211; они видя все эти &#8220;магические&#8221; манипуляции ещё больше укрепляются в мысли, что &#8220;эти ваши линуксы&#8221; не для &#8220;наших широт&#8221;. Для того чтобы немного размазать негативные впечатления [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="tn" href="http://miracle.rpz.name/shared/2010/kde-context-menu.png" title="Контекстное меню KDE"><img align="right" src="http://miracle.rpz.name/shared/2010/kde-context-menu-tn.png" alt="Контекстное меню KDE"></a>Многие операции вроде &#8220;замаунтить флешку&#8221;, &#8220;скопировать файл&#8221; и т.п. ежедневно-рутинные действия я не задумываясь совершаю в консоли (благодаря <a href="http://extragear.kde.org/apps/yakuake/">yakuake</a> она всегда под рукой). Но перед людьми бывает &#8220;неудобно&#8221; &#8211; они видя все эти &#8220;магические&#8221; манипуляции ещё больше укрепляются в мысли, что &#8220;эти ваши линуксы&#8221; не для &#8220;наших широт&#8221;.</p>
<p>Для того чтобы немного размазать негативные впечатления добавил некоторые действия в контекстное меню &#8220;проводников&#8221;.</p>
<p>Первое что надо сделать: понять ГДЕ необходимо приложить  руки.</p>
<pre class="c">$ kde4-config --path services
/home/miracle/.kde/share/kde4/services/:/usr/share/kde4/services/
</pre>
<p>В одной из этих директорий создаём файл <strong>my-super-actions.desktop </strong> подобного содержания:</p>
<pre class="c">
[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=video/*;
Actions=CompressMovie4Nokia;CompressMovie4HTC;GetSubtitles;
Encoding=UTF-8

[Desktop Action CompressMovie4Nokia]
Name=Compress for Nokia
Icon=phone
Exec=/bin/sh -c 'cd "`dirname "%f"`" \
&#038;&#038; ffmpeg -y -i "`basename "%f"`" -ac 1 -ar 22050 -vcodec mpeg4 -s 176x144 -r 24 \
-b 118k -ab 32k -aspect 11:9 "nokia-`basename "%f" .avi`.mp4" \
&#038;&#038; kdialog --title "Compress Movie" --passivepopup "Movie `basename "%f"` compressed"'

[Desktop Action CompressMovie4HTC]
Name=Compress for HTC
Icon=pda
Exec=/bin/sh -c 'cd "`dirname "%f"`" \
&#038;&#038; ffmpeg -y -i "`basename "%f"`" -s 320x240 -r 22.5 -ac 2 "htc-`basename "%f" .avi`.avi" \
&#038;&#038; kdialog --title "Compress Movie" --passivepopup "Movie `basename "%f"` compressed"'

[Desktop Action GetSubtitles]
Name=Download subtitles
Icon=draw-text
Exec=/bin/sh -c 'cd "`dirname "%f"`" \
&#038;&#038; subtitles `basename "%f"` -l en \
&#038;&#038; kdialog --title "Subtitles" --passivepopup "Subtitles for movie `basename "%f"` downloaded"'
</pre>
<p>Затем выполняем:</p>
<pre class="c">
$ kbuildsycoca4
</pre>
<p>И наблюдаем свежедобавленные пункты в меню &#8220;Actions&#8221;.</p>
<p>В коде всё наглядно, отдельного упоминания наверное стоит только тот факт, что <em>/bin/sh</em> нужен лишь для того, чтобы запустить более одной команды, как в моём случае &#8211; если команда одна, то запуск шелла будет лишним.</p>
<p>Ссылка по теме: <a href="http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html">Desktop Entry Specification</a></p>
]]></content:encoded>
			<wfw:commentRss>http://miracle.rpz.name/2010/12/01/kde-context-menu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe AIR и linux. Часть II.</title>
		<link>http://miracle.rpz.name/2010/11/11/adobe-air-and-linux-2/</link>
		<comments>http://miracle.rpz.name/2010/11/11/adobe-air-and-linux-2/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 21:39:39 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[dev]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[slackware]]></category>

		<guid isPermaLink="false">http://miracle.rpz.name/?p=365</guid>
		<description><![CDATA[В начале года мне уже удалось установить Adobe AIR на свой slackware. Но спустя несколько месяцев вышел свежий релиз (2.0) и инструкция стала неактуальной. Я обещал разобраться и выложить обновлённую. Хотя и прошло почти полгода, но лучше поздно, чем никогда, правда? С версией 2.0.2 так ничего и не вышло, а вот с недавно вышедшей версией [...]]]></description>
			<content:encoded><![CDATA[<p>В начале года мне <a href="http://miracle.rpz.name/2010/03/23/adobe-air-and-linux/">уже удалось установить Adobe AIR на свой slackware</a>. Но спустя несколько месяцев вышел свежий релиз (2.0) и <a href="http://miracle.rpz.name/2010/03/23/adobe-air-and-linux/#comment-1524">инструкция стала неактуальной</a>. Я обещал разобраться и выложить обновлённую. Хотя и прошло почти полгода, но лучше поздно, чем никогда, правда?</p>
<p>С версией 2.0.2 так ничего и не вышло, а вот с недавно вышедшей версией 2.5 всё прошло очень гладко. Всё устанавливается и работает почти без проблем (остался описанный ранее изъян с тем, что инсталлятор air-приложений спрашивает пароль root-а).</p>
<p>Итак инструкция:</p>
<pre class="c">
rpm --initdb
RPM_VERSION=`rpm --version|awk '{print $3}'`
cat &lt;&lt;ENDSPEC&gt;&gt;rpm.spec
Summary: The RPM package management system
Name: rpm
Version: ${RPM_VERSION}
Release: 1
Group: System Environment/Base
Url: http://www.rpm.org/
License: GPLv2+
BuildArch: noarch
Provides: /bin/sh

%description
The RPM Package Manager.

%files
ENDSPEC

BUILD=`rpmbuild -ba rpm.spec|grep 'noarch.rpm'|awk '{print $2}'`

rpm --justdb -ivh $BUILD

rm -f rpm.spec

GTK2_VERSION=`gtk-query-immodules-2.0|grep 'Created by'|awk '{print $6}'|sed 's/gtk+-//'`

cat &lt;&lt;ENDSPEC&gt;&gt;gtk2.spec
Summary: The GIMP ToolKit (GTK+), a library for creating GUIs for X
Name: gtk2
Version: ${GTK2_VERSION}
Release: 1
License: LGPLv2+
Group: System Environment/Libraries

%description
GTK+ is a multi-platform toolkit for creating GUI.

%files
ENDSPEC

BUILD=`rpmbuild -ba gtk2.spec|grep 'i386.rpm'|awk '{print $2}'`

rpm --justdb -ivh $BUILD

rm -f gtk2.spec

COREUTILS_VERSION=`/bin/env --version|head -n1|awk '{print $4}'`

for bin in /usr/bin/env /bin/uname /bin/cat /bin/chmod /bin/ln /bin/ls /bin/rm /bin/sh /bin/echo; do

PKG=`basename $bin`

mkdir -p /root/rpmbuild/BUILDROOT/$PKG-$COREUTILS_VERSION-1.i386/bin
mkdir -p /root/rpmbuild/BUILDROOT/$PKG-$COREUTILS_VERSION-1.i386/usr/bin
cp $bin /root/rpmbuild/BUILDROOT/$PKG-$COREUTILS_VERSION-1.i386$bin 

cat &lt;&lt;ENDSPEC&gt;&gt;$PKG.spec
Summary: Coreutils
Name: $PKG
Version: ${COREUTILS_VERSION}
Release: 1
License: LGPLv2+
Group: System Environment/Libraries

%description
GNU Coreutils
%files
$bin
ENDSPEC

BUILD=`rpmbuild -ba $PKG.spec|grep 'i386.rpm'|awk '{print $2}'`

rpm --justdb -ivh $BUILD

rm -f $PKG.spec

done 

AWK_VERSION=`/usr/bin/awk --version|head -n1|awk '{print $3}'`
mkdir -p /root/rpmbuild/BUILDROOT/awk-$AWK_VERSION-1.i386/usr/bin
cp /usr/bin/awk /root/rpmbuild/BUILDROOT/awk-$AWK_VERSION-1.i386/usr/bin/awk
cat &lt;&lt;ENDSPEC&gt;&gt;awk.spec
Summary: GNU AWK
Name: awk
Version: ${AWK_VERSION}
Release: 1
License: LGPLv2+
Group: System Environment/Libraries

%description
GNU AWK
%files
/usr/bin/awk
ENDSPEC

BUILD=`rpmbuild -ba awk.spec|grep 'i386.rpm'|awk '{print $2}'`

rpm --justdb -ivh $BUILD

rm -f awk.spec

GREP_VERSION=`/usr/bin/grep --version|head -n1|awk '{print $4}'`
mkdir -p /root/rpmbuild/BUILDROOT/grep-$GREP_VERSION-1.i386/bin
cp /usr/bin/grep /root/rpmbuild/BUILDROOT/grep-$GREP_VERSION-1.i386/bin/grep
cat &lt;&lt;ENDSPEC&gt;&gt;grep.spec
Summary: GNU GREP
Name: grep
Version: ${GREP_VERSION}
Release: 1
License: LGPLv2+
Group: System Environment/Libraries

%description
GNU GREP
%files
/bin/grep
ENDSPEC

BUILD=`rpmbuild -ba grep.spec|grep 'i386.rpm'|awk '{print $2}'`

rpm --justdb -ivh $BUILD

rm -f grep.spec

LIBXML2_VERSION=`xml2-config --version`
mkdir -p /root/rpmbuild/BUILDROOT/libxml2-$LIBXML2_VERSION-1.i386/usr/lib/
ln -s /usr/lib/libxml2.so /root/rpmbuild/BUILDROOT/libxml2-$LIBXML2_VERSION-1.i386/usr/lib/libxml2.so.2
cat &lt;&lt;ENDSPEC&gt;&gt;libxml2.spec
Summary: XML parser library
Name: libxml2
Version: ${LIBXML2_VERSION}
Release: 1
License: LGPLv2+
Group: System Environment/Libraries

%description
XML parser library
%files
/usr/lib/libxml2.so.2
ENDSPEC

BUILD=`rpmbuild -ba libxml2.spec|grep 'i386.rpm'|awk '{print $2}'`

rpm --justdb -ivh $BUILD

rm -f libxml2.spec

LIBXSLT_VERSION=`xslt-config --version`
mkdir -p /root/rpmbuild/BUILDROOT/libxslt-$LIBXSLT_VERSION-1.i386/usr/lib/
ln -s /usr/lib/libslt.so /root/rpmbuild/BUILDROOT/libxslt-$LIBXSLT_VERSION-1.i386/usr/lib/libxslt.so.1
cat &lt;&lt;ENDSPEC&gt;&gt;libxslt.spec
Summary: XML transformation library
Name: libxslt
Version: ${LIBXSLT_VERSION}
Release: 1
License: LGPLv2+
Group: System Environment/Libraries

%description
XML transformation library
%files
/usr/lib/libxslt.so.1
ENDSPEC

BUILD=`rpmbuild -ba libxslt.spec|grep 'i386.rpm'|awk '{print $2}'`

rpm --justdb -ivh $BUILD

rm -f libxslt.spec

wget http://airdownload.adobe.com/air/lin/download/latest/adobeair.i386.rpm

rpm -i adobeair.i386.rpm
</pre>
<p>Суть скрипта &#8211; создать для rpm фиктивную базу &#8220;зависимостей&#8221; необходимых для установки adobeair.</p>
<p>Скрипт проверен на нескольких инсталяциях более-менее свежих slackware, но инструкция должна подойти для любых не deb (и не rpm) систем.</p>
<p>Особая благодарность товарищу <b>deywos</b>, который не просто обнаружил &#8220;кривость&#8221; инструкции, опубликованной ранее, но и помог разобраться в причинах.</p>
]]></content:encoded>
			<wfw:commentRss>http://miracle.rpz.name/2010/11/11/adobe-air-and-linux-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>kdebindings и ruby1.9</title>
		<link>http://miracle.rpz.name/2009/12/10/kdebindings-v-ruby1-9/</link>
		<comments>http://miracle.rpz.name/2009/12/10/kdebindings-v-ruby1-9/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 16:40:15 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[DailyWTF]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[penguin-sex]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://miracle.rpz.name/?p=319</guid>
		<description><![CDATA[Злосчастное обновление ruby до 1.9 сломало не только watir, но и мои плазмоиды. Полдня провёл в попытках разобраться с ситуацией &#8211; при загрузке rubygems вываливается трэйс, смысл которого в: undefined method `synchronize&#8217; for #&#60;Mutex:0xab1cd2&#62; . Нашёл несколько сообщений с описываемой проблемой &#171;встроенного ruby&#187; , но решения по всей видимости нету. Поэтому пришлось установить &#171;старый&#187; ruby [...]]]></description>
			<content:encoded><![CDATA[<p>Злосчастное обновление ruby до 1.9 сломало не только <a href="http://miracle.rpz.name/2009/12/10/firewatir-vs-ruby1-9/">watir</a>, но и мои <a href="http://miracle.rpz.name/2009/09/10/ruby-plasmoids/">плазмоиды</a>. </p>
<p>Полдня провёл в попытках разобраться с ситуацией &#8211; при загрузке rubygems вываливается трэйс, смысл которого в:<br />
 <strong>undefined method `synchronize&#8217; for #&lt;Mutex:0xab1cd2&gt; </strong>.</p>
<p>Нашёл несколько сообщений с <a href="http://groups.google.ru/group/comp.lang.ruby/browse_thread/thread/302e52dda3f850ed">описываемой проблемой</a> &laquo;встроенного ruby&raquo; , но решения по всей видимости нету.</p>
<p>Поэтому пришлось установить &laquo;старый&raquo; ruby и собрать kdebindings с ним:</p>
<blockquote><p>
tar -zxf kdebindings-*.tgz<br />
cd kdebindings-*<br />
mkdir build<br />
cd build<br />
cmake -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_KROSSRUBY=off -DENABLE_PYKDE4=off -DRUBY_INCLUDE_PATH=/opt/ruby4kde/lib/ruby/1.8/i686-linux/  -DRUBY_LIBRARY=/opt/ruby4kde/lib/libruby.so -DRUBY_EXECUTABLE=/opt/ruby4kde/bin/ruby ..<br />
make &#038;&#038; make install
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://miracle.rpz.name/2009/12/10/kdebindings-v-ruby1-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Рубиновые плазмоиды</title>
		<link>http://miracle.rpz.name/2009/09/10/ruby-plasmoids/</link>
		<comments>http://miracle.rpz.name/2009/09/10/ruby-plasmoids/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 20:42:02 +0000</pubDate>
		<dc:creator>MiRacLe</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://miracle.rpz.name/?p=248</guid>
		<description><![CDATA[Как уже рассказывал, совершил я страшный грех &#8211; перестал пользоваться виндой. В качестве рабочего стола теперь у меня KDE4. Красоты неописуемой, удобством не обделённый, загляденье, да и только. И всё вроде хорошо, но есть часть рутины, которая довольно привычна была на виндовом экране, но на linux её терпеть прямо нет никакого желания. Одним из примеров [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://miracle.rpz.name/shared/2009/rcontrol-qt.png" alt="qt-интерфейс" align="right" />Как уже рассказывал, совершил я страшный грех &#8211; перестал пользоваться виндой. В качестве рабочего стола теперь у меня KDE4. Красоты неописуемой, удобством не обделённый, загляденье, да и только. И всё вроде хорошо, но есть часть рутины, которая довольно привычна была на виндовом экране, но на linux её терпеть прямо нет никакого желания. Одним из примеров такой рутины был запуск rdp и radmin клиентов, если с первым под виндой ещё более-менее можно сладить (он хотя бы хранит учётные записи и настройки), то второй даже пароль сохранять не умеет.<br />
Обычно всякие вспомогательные программки делаются на php, но не в этот раз &#8211; уж коль скоро захотелось запускать что-то с окошками, захотелось и свою облечь в какой-нибудь приличный вид. <a href="http://gtk.php.net/">php-gtk</a> был отвергнут сразу (ну не нравится мне gtk-ный интерфейс, не нравится и всё тут). Решил сделать на Qt4 &#8211; благо информации в интернете по данной теме <a href="http://symmetrica.net/qt4/">полно</a>.<span id="more-248"></span><br />
А по скольку рабочего биндинга php к qt обнаружить сходу не удалось, то делать стал на ruby. Собственно делов было на несколько часов, с учётом того что ранее сталкиваться со всем этим не приходилось считаю что результат себя нашёл очень быстро. Форму накидал в qt-designer, полчаса гугления на предмет нужных библиотек для ruby и собственно сборки биндинга ruby-qt и вот уже виден первый результат. Полдня радости и счастья сменяются унынием &#8211; хороша программка, да вот мешается под руками. Ещё чуть-чуть гугления и вот она уже спрятана в трей. Ещё немного и она после восстановления из трея занимает прежнее положение. И вот вроде всё хорошо, только вот в таскбаре мешается. Искал-искал, но как его оттуда убрать не нашёл. Нет мне покоя.</p>
<p>И тут мой взгляд упал на <a href="http://ru.wikipedia.org/wiki/Plasma">плазмоиды</a>, разбросанные по рабочему столу.<br />
<em>К слову сказать о рабочем столе &#8211; работая на винде я всегда отключал показ ярлыков на рабочем столе &#8211; доступ к ним неудобный, а порядок поддерживать сложно. Но вот с появлением kde4 я своё мнение о рабочем столе сильно поменял &#8211; теперь мне совершенно очевидно, что рабочий стол это тоже &#8220;инструмент&#8221;, а не просто самое верхнее окно&#8230;</em></p>
<p><a rel="tn" href="http://miracle.rpz.name/shared/2009/workspace-plasma.png"><img src="http://miracle.rpz.name/shared/2009/rcontrol-plasma.png" alt="plasmoid" align="right" /></a>Так вот, плазмоиды&#8230; это такие махонькие приложения, разбросанные по пространству рабочего стола (плазмы). Какой-то показывает список файлов в директории, какой-то лог, какой-то последние rss-записи. И все они работают, и нет их в таскбаре, нет их в трее, и всегда они под рукой&#8230;<br />
И захотелось мне сделать такой вот плазмоид самому. И захотелось сделать его как ни странно на ruby.</p>
<p>Я в принципе ожидал, что всё более чем просто и сконвертировать qt-ный интерфейс в plasmoid будет проще простого, но всё оказалось несколько сложнее и запутанней. Первое с чем пришлось столкнуться &#8211; все примеры, найденные в этих ваших интернетах безнадёжно устарели. На запуск &#8220;hello world&#8221; ушло несколько дней. Но формула счастья была в итоге найдена. Готовый к употреблению plasmoid это zip-архив в корне которого находится desktop-файл и директория contents.</p>
<p>Первое что надо сделать, когда создаётся plasmoid &#8211; файл metadata.desktop с описанием вашей будущей программы.</p>
<pre class="php">[Desktop Entry]
Name=Mega Plasmoid
Comment=Super-puper tool
Type=Service
ServiceTypes=Plasma/Applet
X-KDE-PluginInfo-Author=MiRacLe
X-KDE-PluginInfo-Email=miracle@rpz.name
X-KDE-PluginInfo-Name=megatool
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=http://miracle.rpz.name/
X-KDE-PluginInfo-Category=Examples
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true
X-Plasma-API=ruby-script
X-Plasma-MainScript=code/main.rb</pre>
<p>Две последние строки &#8211; то, чего в мануалах не сыщешь, то ради чего был перекопаны мегабайты бесполезных копипастов по всей сети, то ради чего пишется эта чудо{вищная} заметка.<br />
Далее рядом с этим файлом создаём директорию contents, в которой и будет всё содержимое будущей программы.</p>
<p>Сборка и просмотр полученного результата проходит быстрее, если сделать подобный скриптик:</p>
<pre class="php">#!/bin/sh
plasmapkg -r megaplasmoid #удаляю уже установленный плазмоид из системы
rm megaplasmoid.plasmoid # и туда же его исходник
cd megaplasmoid #в директорию с исходным кодом
zip -r ../megaplasmoid.plasmoid * # пакую новый плазмоид
plasmapkg -i ../megaplasmoid # устанавливаю его
plasmoidviewer megaplasmoid # и тут же хочу на него, красавца, посмотреть</pre>
<p>Всё приготовления закончены и можно приступить непосредственно к коду. Его следует поместить туда, куда описали в metadata.desktop &#8211; в файл main.rb в директории code. В простейшем случае он будет выглядеть примерно так:</p>
<pre class="ruby">require 'plasma_applet'
module  Megaplasmoid
  class Main &lt; PlasmaScripting::Applet
    def initialize(parent, args = nil)
      super
    end
    def init
      @mainlayout = Qt::GraphicsLinearLayout.new Qt::Vertical, self
      layout = @mainlayout
      self.layout = layout
    end
  end
end</pre>
<p>После того,  как это всё-таки запустилось, эйфория от полученного результата прошла, настала пора собственно перенести код, написанный под qt. Как оказалось &#8220;перенести&#8221; волшебным нажатием чего-нибудь оказалось невозможным, и визуальную часть пришлось делать заново, вооружившись <a href="http://api.kde.org/4.x-api/kdelibs-apidocs/plasma/html/annotated.html">api</a> и скудными (и устаревшими) <a href="http://www.kdedevelopers.org/node/3560">примерами</a>. Был несколько пересмотрен интерфейс, и остались в нём только два combobox-а (где делать и что делать) и собственно та самая кнопка, о которой так много говорили большевики.</p>
<p>Конечно же запуском radmin и rdesktop дело не ограничилось, штука постепенно обрастает всяческими фичами &#8211; ибо нет предела совершенству. Помимо запуска всяческих утилит к делу уже пришит <a href="http://wiki.openqa.org/display/WTR/FireWatir">watir</a>, <a href="https://trac.luon.net/ruby-dbus/">d-bus</a> и ещё много всего интересного, но об этом в следующих сериях.</p>
]]></content:encoded>
			<wfw:commentRss>http://miracle.rpz.name/2009/09/10/ruby-plasmoids/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Served from: miracle.rpz.name @ 2012-02-06 17:00:50 by W3 Total Cache -->
