<?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>Келег`s homepage &#187; plasma</title>
	<atom:link href="http://www.keleg.info/tag/plasma/feed" rel="self" type="application/rss+xml" />
	<link>http://www.keleg.info</link>
	<description>Обработанные мысли</description>
	<lastBuildDate>Fri, 25 Jun 2010 15:37:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Рубиновая плазма. Часть 2.</title>
		<link>http://www.keleg.info/programming/plasmoid-ruby-2</link>
		<comments>http://www.keleg.info/programming/plasmoid-ruby-2#comments</comments>
		<pubDate>Sun, 06 Dec 2009 07:32:22 +0000</pubDate>
		<dc:creator>keleg</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[plasma]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.keleg.info/?p=217</guid>
		<description><![CDATA[
Постановка
Есть такая, очень полезная программка &#8211; vnstat. Она показывает сетевой трафик по выбранным интерфейсам. Для меня, у которого дневной лимит &#8211; 150 мб жизни, очень нужная вещь.
Устанавливаем, если ее еще у вас нет, набираем в консоли vnstat -u -i ppp0 для начальной инициализации (если будете смотреть интерфейс модема ppp0, если нужен другой, можно выбрать и [...]]]></description>
			<content:encoded><![CDATA[<p><!-- p, li { white-space: pre-wrap; } --></p>
<h3 style="margin: 0px; text-indent: 0px;"><span style="font-weight: 600;"><!--StartFragment-->Постановка</span></h3>
<p style="margin: 10px; text-indent: 0px;">Есть такая, очень полезная программка &#8211; vnstat. Она показывает сетевой трафик по выбранным интерфейсам. Для меня, у которого дневной лимит &#8211; 150 мб жизни, очень нужная вещь.</p>
<p style="margin: 10px; text-indent: 0px;">Устанавливаем, если ее еще у вас нет, набираем в консоли vnstat -u -i ppp0 для начальной инициализации (если будете смотреть интерфейс модема ppp0, если нужен другой, можно выбрать и другой, тот же eth0 для сетевой карты)</p>
<p style="margin: 10px; text-indent: 0px;">Теперь запускаем vnstat &#8211; получаем информацию о трафике.</p>
<p style="margin: 10px; text-indent: 0px;">Только вот одна незадача, информация есть в консоли,  в текстовом виде. Каждый раз запускать консоль и набирать vnstat чтоб узнать, сколько интернета осталось?</p>
<p style="margin: 10px; text-indent: 0px;">Увольте! Самое время написать красивый плазмоид!</p>
<h3 style="margin: 0px; text-indent: 0px;"><span style="font-weight: 600;">Что говорит vnstat?</span></h3>
<p style="margin: 10px; text-indent: 0px;">Сначала разберемся с выводом vnstat</p>
<blockquote>
<p style="margin: 0px; text-indent: 0px;">ppp0 since 11/05/09</p>
<p style="margin: 0px; text-indent: 0px;">
<p style="margin: 0px; text-indent: 0px;">rx:  3.37 GiB      tx:  252.77 MiB      total:  3.61 GiB</p>
<p style="margin: 0px; text-indent: 0px;">
<p style="margin: 0px; text-indent: 0px;">monthly</p>
<p style="margin: 0px; text-indent: 0px;">rx      |     tx      |    total    |   avg. rate</p>
<p style="margin: 0px; text-indent: 0px;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p style="margin: 0px; text-indent: 0px;">Nov &#8216;09      2.63 GiB |  197.18 MiB |    2.82 GiB |    9.12 kbit/s</p>
<p style="margin: 0px; text-indent: 0px;">Dec &#8216;09    756.73 MiB |   55.59 MiB |  812.32 MiB |   13.79 kbit/s</p>
<p style="margin: 0px; text-indent: 0px;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p style="margin: 0px; text-indent: 0px;">estimated      4.10 GiB |     305 MiB |    4.40 GiB |</p>
<p style="margin: 0px; text-indent: 0px;">
<p style="margin: 0px; text-indent: 0px;">daily</p>
<p style="margin: 0px; text-indent: 0px;">rx      |     tx      |    total    |   avg. rate</p>
<p style="margin: 0px; text-indent: 0px;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p style="margin: 0px; text-indent: 0px;">yesterday    124.79 MiB |   15.33 MiB |  140.12 MiB |   13.29 kbit/s</p>
<p style="margin: 0px; text-indent: 0px;">today    148.93 MiB |    6.63 MiB |  155.55 MiB |   25.21 kbit/s</p>
<p style="margin: 0px; text-indent: 0px;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p style="margin: 0px; text-indent: 0px;">estimated       253 MiB |      10 MiB |     263 MiB |</p>
</blockquote>
<p style="margin: 0px; text-indent: 0px;">
<p style="margin: 10px; text-indent: 0px;">Столько много нам не нужно, нам бы сегодняшний интернет&#8230; его легко получить командой vnstat | grep today</p>
<p style="margin: 10px; text-indent: 0px;">Получим строчку &#8220;today    148.94 MiB |    6.63 MiB |  155.58 MiB |   24.97 kbit/s&#8221; которую уже легко отпарсить.</p>
<h3 style="margin: 0px; text-indent: 0px;"><span style="font-weight: 600;">Создание нового плазмоида</span></h3>
<p style="margin: 10px; text-indent: 0px;">Теперь можно заняться созданием плазмоида. Копируем из примера <a href="http://www.keleg.info/programming/plasmoid-ruby-1" target="_blank">предыдущей статьи </a>структуру папок вместе с файлами, переименовываем папку plasmatest в, например, wnetstat. Создаем новый проект geany, открываем файлы metadata.desktop и main.rb  и также изменяем там название plasmatest на wnstat.</p>
<p style="margin: 10px; text-indent: 0px;">Человеко-читаемое название в metadata.desktop тоже лучше изменить на что-то более осмысленное, например</p>
<blockquote>
<p style="margin: 0px; text-indent: 0px;">Name=Трафик Интернета</p>
<p style="margin: 0px; text-indent: 0px;">Comment=Интерфейс для vnstat</p>
</blockquote>
<p style="margin: 0px; text-indent: 0px;">
<p style="margin: 10px; text-indent: 0px;">Проверяем все ли сделали правильно,  запускаем проект.</p>
<p style="margin: 10px; text-indent: 0px;">Все хорошо?</p>
<p style="margin:10px; text-indent: 0px;">Теперь можно и программировать.</p>
<p style="margin: 0px; text-indent: 0px;">
<h3 style="margin: 0px; text-indent: 0px;"><span style="font-weight: 600;">Получение информации от внешней программы</span></h3>
<p style="margin: 0px; text-indent: 0px; font-weight: 600;">
<p style="margin: 10px; text-indent: 0px;">Напишем на ruby метод для получения информации от vnstat</p>
<p style="margin: 0px; text-indent: 0px;">
<blockquote>
<p style="margin: 0px; text-indent: 0px;">def updateStat</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">IO.popen(&#8221;vnstat -u&#8221;).close</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">pipe = IO.popen(&#8221;vnstat | grep today&#8221;)</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">stat = pipe.gets</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">pipe.close</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">if stat!=nil then</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">@stat=stat.split(&#8217; &#8216;)</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">end</p>
<p style="margin: 0px; text-indent: 0px;">end</p>
</blockquote>
<p style="margin: 10px; text-indent: 0px;">Теперь в переменной объекта @stat лежит распарсенная строка вывода нашего vnstat.</p>
<p style="margin: 10px; text-indent: 0px;">Осталось ее вывести на экран. Для этого напишем еще один мааленький метод, он будет говорить нам суммарный трафик за день.</p>
<blockquote>
<p style="margin: 0px; text-indent: 0px;">def view</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">@stat[7]+&#8221;\n&#8221;+@stat[8]</p>
<p style="margin: 0px; text-indent: 0px;">end</p>
</blockquote>
<p style="margin: 0px; text-indent: 0px;">
<p style="margin: 10px; text-indent: 0px;">Если теперь заменим наш тестовый &#8220;Hello world&#8221; на вызов этой функции, не забыв предварительно вызвать updateStat, получим при выполнении количество мегабайт!</p>
<h3 style="margin: 0px; text-indent: 0px;"><span style="font-weight: 600;">Обновление по таймеру</span></h3>
<p style="margin: 10px; text-indent: 0px;">Сейчас у нас всего два вызываемых системой метода, куда можно вклиниться &#8211; init и paintInterface</p>
<p style="margin: 10px; text-indent: 0px;">Соответственно, если вставить туда наш updateStat, информация о трафике будет обновляться или при старте системы, или при перерисовке виджета-плазмоида. И то, и другое  &#8211; не самый лучший выход, было бы правильнее обновлять информацию по таймеру, например раз в 30 секунд. И это очень просто сделать!</p>
<p style="margin: 10px; text-indent: 0px;">Достаточно в методе init инициализировать таймер</p>
<p style="margin: 10px; text-indent: 0px;">startTimer(30000)</p>
<p style="margin: 10px; text-indent: 0px;">и написать новый метод, который будет вызываться при срабатывании таймера, обновлять информацию о статистике Интернета и перерисовывать наш плазмоид.</p>
<blockquote>
<p style="margin: 0px; text-indent: 0px;">def timerEvent(event)</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">updateStat</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">update</p>
<p style="margin: 0px; text-indent: 0px;">end</p>
</blockquote>
<h3 style="margin: 0px; text-indent: 0px;"><span style="font-weight: 600;">Итог</span></h3>
<p style="margin: 10px; text-indent: 0px;">В общем-то все. Полный текст программы будет таков</p>
<p style="margin: 0px; text-indent: 0px;">
<blockquote>
<p style="margin: 0px; text-indent: 0px;">require &#8216;plasma_applet&#8217;</p>
<p style="margin: 0px; text-indent: 0px;">module Wnetstat</p>
<p style="margin: 0px; text-indent: 0px;">
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">class Main &lt; PlasmaScripting::Applet</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">def initialize parent</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">super parent</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">end</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">def init</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">self.has_configuration_interface = false</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">updateStat</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">startTimer(30000)</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">end</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">def updateStat</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">IO.popen(&#8221;vnstat -u&#8221;).close</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">pipe = IO.popen(&#8221;vnstat | grep today&#8221;)</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">stat = pipe.gets</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">pipe.close</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">if stat!=nil then</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 120px;">@stat=stat.split(&#8217; &#8216;)</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">end</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">end</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">def view</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">@stat[7]+&#8221;\n&#8221;+@stat[8]</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">end</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">def timerEvent(event)</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">updateStat</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">update</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">end</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">def paintInterface(painter, option, rect)</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">painter.save</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">painter.pen = Qt::Color.new Qt::white</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">painter.draw_text rect, Qt::AlignVCenter | Qt::AlignHCenter,view</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 90px;">painter.restore</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 60px;">end</p>
<p style="margin: 0px; text-indent: 0px; padding-left: 30px;">end</p>
<p style="margin: 0px; text-indent: 0px;">end</p>
</blockquote>
<p style="margin: 10px; text-indent: 0px;">Запускаем, если все нормально &#8211; инсталлируем и кидаем в системный лоток. Теперь мегабайты от нас далеко не убегут! В следующей статье нам осталось разобраться с изменением вывода в зависимости от размера, настройкой виджета и выводом напоминаний о превышенном лимите. А пока &#8211; мягкой плазмы!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleg.info/programming/plasmoid-ruby-2/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Рубиновая плазма. Часть 1.</title>
		<link>http://www.keleg.info/programming/plasmoid-ruby-1</link>
		<comments>http://www.keleg.info/programming/plasmoid-ruby-1#comments</comments>
		<pubDate>Sat, 05 Dec 2009 15:06:10 +0000</pubDate>
		<dc:creator>keleg</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[plasma]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.keleg.info/?p=174</guid>
		<description><![CDATA[Введение
Наверное, самое привлекательное для меня свойство linux &#8211; возможность достаточно быстро переделать систему под свои запросы. Причем практически всегда есть возможность дописать то, чего нет, структура системы &#8220;из небольших кусочков&#8221; легко позволяет это. Интересную возможность для кодирования представляют появившиеся в KDE4 празмоиды (plasmoids) &#8211; небольшие приложения рабочего стола, которые можно писать как на C++, так [...]]]></description>
			<content:encoded><![CDATA[<h3 style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;"><!--StartFragment--><span style="font-weight: 600;"><strong>Введение</strong></span></h3>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Наверное, самое привлекательное для меня свойство linux &#8211; возможность достаточно быстро переделать систему под свои запросы. Причем практически всегда есть возможность дописать то, чего нет, структура системы &#8220;из небольших кусочков&#8221; легко позволяет это. Интересную возможность для кодирования представляют появившиеся в KDE4 празмоиды (plasmoids) &#8211; небольшие приложения рабочего стола, которые можно писать как на C++, так и на скриптовых языках, например на Ruby.</p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Простейшие-то они простейшие, но весь рабочий стол KDE (от корзины до кнопки &#8220;пуск&#8221;) состоит из них, и поэтому сделать приложение, которое будет достойным представителем рабочего  стола, всегда интересно и полезно.</p>
<h3 style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;"><span style="font-weight: 600;"><strong>Что такое скриптовый плазмоид?</strong></span></h3>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Это zip-файл, минимально содержащий следующую структуру:</p>
<blockquote>
<ul style="-qt-list-indent: 2;">
<li style="margin-top: 12px; margin-bottom: 0px; margin-left: 10px; margin-right: 0px; -qt-block-indent: 10; text-indent: 0px;">metadata.desktop &#8211; XML-файл настроек плазмоида
<ul>
<li>contents  &#8211; папка, в которой содержится все содержимое плазмоида.
<ul>
<li style="margin-top: 0px; margin-bottom: 12px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;">code  &#8211; папка с кодом</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Подробнее можно прочитать в <a href="http://techbase.kde.org/Projects/Plasma/Package " target="_blank">документации(eng)</a></p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Скриптовые плазмоиды можно писать на C#, Python, Javascript, Ruby.</p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Здесь мы помучаем <a href="http://ru.wikipedia.org/wiki/Ruby" target="_blank">Руби</a>. Почему? Возможно, потому что попробовав программировать на Ruby, уже не хочется программировать ни на чем другом. Очень приятный язык.  Если C позволяет написать программу, совершенную с точки зрения процессора, который будет ее исполнять, то Ruby дает возможность написать программу, совершенную с точки зрения алгоритма.</p>
<h3 style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;"><span style="font-weight: 600;"><strong>Все, что нужно для работы</strong></span></h3>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Чтобы заработал наш ruby-плазмоид, нужно чтоб в системе был установлен ruby и пакеты для его поддержки в плазме.</p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">В моей мандриве это ruby, ruby-kde4, ruby-qt4</p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Также в будущем нам понадобится qtdesigner, чтоб рисовать интерфейс.</p>
<h3 style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;"><span style="font-weight: 600;"><strong>Среда разработки</strong></span></h3>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Среда разработки для плазмоидов еще не написана, ее обещают в KDE 4.4 (<a href="http://techbase.kde.org/Projects/Plasma/PlasMate" target="_blank">PlasMate</a>), мы же пока обойдемся подручными средствами. Понадобится редактировать файлы скриптов и XML-файлы, т.е. нужна универсальная среда к которой можно подключить внешние сборщики-интерпретаторы.</p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Я использовал <a href="http://www.geany.org/" target="_blank">geany</a>, она позволяет сделать все, что необходимо.</p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Нужно только добавить в систему скриптовый файл для инсталляции</p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Назовем его <em>installPlasmoid.sh </em>и скопируем в папку для выполнения, например <em>usr/bin</em></p>
<blockquote>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">#!/bin/sh</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">plasmapkg -r &#8220;$1&#8243; # удаляем уже установленный плазмоид из системы</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">rm &#8220;$1&#8243;.plasmoid # удаляем его исходный пакет</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">cd &#8220;$1&#8243; # переходим в папку с искходым кодом</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">zip -r ../&#8221;$1&#8243;.plasmoid * # пакуем новый плазмоид</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">cd ..</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">plasmapkg -i &#8220;$1&#8243;.plasmoid # устанавливаем</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">plasmoidviewer &#8220;$1&#8243; # смотрим результат</p>
</blockquote>
<h3 style="-qt-paragraph-type: empty; -qt-block-indent: 10; text-indent: 0px; margin: 10px;"><strong>Тестовый плазмоид</strong></h3>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Создаем необходимую для плазмоида структуру папок. Для нас она будет такой:</p>
<ul>
<li>plasma &#8211; папка плазма-проектов geany
<ul>
<li style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">plasmatest
<ul>
<li> content
<ul>
<li>code</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p style="margin-top: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 10px;">Запускаем geany, создаем новый проект со следующими настройками.</p>
<p style="margin-top: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;"><img class="alignnone size-full wp-image-205" title="geany-settings" src="http://www.keleg.info/wp-content/uploads/2009/12/snapshot1.png" alt="geany-settings" width="533" height="357" /></p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Создаем и сохраняем в папке <em>plasmatest</em> файл <em>metadata.desktop</em> следующего содержания:</p>
<p style="-qt-paragraph-type: empty; -qt-block-indent: 0; text-indent: 0px; margin: 0px;">
<blockquote>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">[Desktop Entry]</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">Encoding=UTF-8</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">Name=Плазма тест</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">Comment=Тестируем рубиновую плазму</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">Type=Service</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">ServiceTypes=Plasma/Applet</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">Icon=applications-utilities</p>
<p style="-qt-paragraph-type: empty; -qt-block-indent: 0; text-indent: 0px; margin: 0px;">
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-Plasma-DefautSize=150,150</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-Plasma-API=ruby-script</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-Plasma-MainScript=code/main.rb</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-KDE-PluginInfo-Author=keleg</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-KDE-PluginInfo-Email=keleg@mail.ru</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-KDE-PluginInfo-Name=plasmatest</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-KDE-PluginInfo-Version=0.1</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-KDE-PluginInfo-Website=http://www.keleg.info/</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-KDE-PluginInfo-Category=Examples</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-KDE-PluginInfo-Depends=</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-KDE-PluginInfo-License=GPL</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">X-KDE-PluginInfo-EnabledByDefault=true</p>
</blockquote>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Осталось только создать сам файл кода <em>main.rb</em> типа &#8220;Hello world!&#8221;</p>
<p style="-qt-paragraph-type: empty; -qt-block-indent: 0; text-indent: 0px; margin: 0px;">
<blockquote>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">require &#8216;plasma_applet&#8217;</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">module Plasmatest</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">
<p style="text-indent: 0px; padding-left: 30px; margin: 0px;">class Main &lt; PlasmaScripting::Applet</p>
<p style="text-indent: 0px; padding-left: 30px; margin: 0px;">
<p style="text-indent: 0px; padding-left: 60px; margin: 0px;">def initialize parent</p>
<p style="text-indent: 0px; padding-left: 90px; margin: 0px;">super parent</p>
<p style="text-indent: 0px; padding-left: 60px; margin: 0px;">end</p>
<p style="text-indent: 0px; padding-left: 60px; margin: 0px;">
<p style="text-indent: 0px; padding-left: 60px; margin: 0px;">def init</p>
<p style="text-indent: 0px; padding-left: 90px; margin: 0px;">self.has_configuration_interface = false</p>
<p style="text-indent: 0px; padding-left: 60px; margin: 0px;">end</p>
<p style="text-indent: 0px; padding-left: 60px; margin: 0px;">
<p style="text-indent: 0px; padding-left: 60px; margin: 0px;">def paintInterface(painter, option, rect)</p>
<p style="text-indent: 0px; padding-left: 90px; margin: 0px;">painter.save</p>
<p style="text-indent: 0px; padding-left: 90px; margin: 0px;">painter.pen = Qt::Color.new Qt::white</p>
<p style="text-indent: 0px; padding-left: 90px; margin: 0px;">painter.draw_text rect, Qt::AlignVCenter | Qt::AlignHCenter, &#8220;Hello world!&#8221;</p>
<p style="text-indent: 0px; padding-left: 90px; margin: 0px;">painter.restore</p>
<p style="text-indent: 0px; padding-left: 60px; margin: 0px;">end</p>
<p style="text-indent: 0px; padding-left: 30px; margin: 0px;">end</p>
<p style="-qt-block-indent: 0; text-indent: 0px; margin: 0px;">end</p>
</blockquote>
<p style="-qt-paragraph-type: empty; -qt-block-indent: 0; text-indent: 0px; margin: 0px;">
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Обратите внимание на одну тонкость:</p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">папка проекта должна совпадать по имени с <em>X-KDE-PluginInfo-Name,</em> а имя модуля должно быть с тем же именем, только с большой буквы.</p>
<p style="-qt-paragraph-type: empty; -qt-block-indent: 0; text-indent: 0px; margin: 0px;">
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Ну вот в общем-то и все. Теперь, если нажать F5, запустится выполнение и на экране появится новый плазмоид.</p>
<p style="-qt-block-indent: 10; text-indent: 0px; margin: 10px;">Пока он почти совершенно бесполезен, разве что сигнализирует нам, что все работает и уже можно делать что-то посерьезнее. Но об этом &#8211; в <a href="http://www.keleg.info/programming/plasmoid-ruby-2">следующей статье.</a></p>
<p><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.keleg.info/programming/plasmoid-ruby-1/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
