<?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>Free Runner &#187; perl</title>
	<atom:link href="http://blog.lushpai.org/archives/tag/perl/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.lushpai.org</link>
	<description>Блог свободного программиста</description>
	<lastBuildDate>Mon, 12 Jul 2010 23:12:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Perl, Curl, Gmail</title>
		<link>http://blog.lushpai.org/archives/83</link>
		<comments>http://blog.lushpai.org/archives/83#comments</comments>
		<pubDate>Thu, 10 Sep 2009 07:13:07 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://blog.lushpai.org/?p=83</guid>
		<description><![CDATA[8 утра. Пришел на работу, выпил кофе, покурил. В голове каша, на работу не настроен. Не есть хорошо. Делаем разминку для мозгов опираясь на статью на Habrahabr. Напишем-ка простенький прикладной демон, который будет оповещать нас о новой почте на Gmail. Сначала в рабочей директории создадим папку с конфигом: $ mkdir config Теперь в ней создадим файл [...]]]></description>
			<content:encoded><![CDATA[<p>8 утра. Пришел на работу, выпил кофе, покурил. В голове каша, на работу не настроен. Не есть хорошо. Делаем разминку для мозгов опираясь на статью на <a href="http://habrahabr.ru/blogs/nix/69110/#habracut" target="_blank">Habrahabr</a>. Напишем-ка простенький прикладной демон, который будет оповещать нас о новой почте на Gmail.</p>
<p><span id="more-83"></span>Сначала в рабочей директории создадим папку с конфигом:</p>
<pre style="padding-left: 30px;"><strong>$ mkdir config</strong></pre>
<p>Теперь в ней создадим файл конфига:</p>
<pre style="padding-left: 30px;"><strong>$ nano -w config/user.conf</strong></pre>
<p>Заполним его:</p>
<pre style="padding-left: 30px;"><strong>{
</strong><strong>  'username' =&gt; 'Gmail username',
</strong><strong>  'password' =&gt; 'Gmail password',
  'timeout' =&gt; '300', #количество секунд между запросами </strong><strong>
}</strong></pre>
<p>Добавим немного красивости. Создадим директорию для иконки и возможно еще чего-нибудь еще:</p>
<pre style="padding-left: 30px;"><strong>$ mkdir share
$ mkdir share/icons
$ cd share/icons
$ wget -c http://www.google.com/intl/ru/options/icons/gmail.gif
$ cd ../..</strong></pre>
<p>Теперь сам скрипт:</p>
<pre style="padding-left: 30px;"><strong>$ nano -w gmail</strong></pre>
<p>Пишем:</p>
<pre><strong>01. #!/usr/bin/perl
02. use strict;
03. my $path = `pwd`; $path =~ s/\n//i;
04. my $icon = $path.'/share/icons/gmail.gif';
05. my $config = require $path.'/config/user.conf';
06. getMail();
07. sub getMail() {</strong><strong>
08.    my $recieve = `curl -u $config-&gt;{'username'}:$config-&gt;{'password'} --silent "https://mail.google.com/mail/feed/atom" | grep -c "&lt;entry&gt;"`;
09.    $recieve =~ s/\n//i;</strong><strong>
10.    `notify-send -u low -t 7000 -i $icon "Получено $recieve новых писем"` if $recieve != 0;
11.    sleep($config-&gt;{'timeout'});</strong><strong>
12.    getMail();</strong><strong>
13. }</strong></pre>
<p>Сохраняем и запускаем:</p>
<pre style="padding-left: 30px;"><strong>$ ./gmail &amp;</strong></pre>
<p>Как то вот так&#8230;</p>
<p style="text-align: center;">
<div class="wp-caption aligncenter" style="width: 610px"><img title="Screenshot" src="http://apps.lushpai.org/files/screen1.png" alt="Screenshot" width="600" height="272" /><p class="wp-caption-text">Screenshot</p></div>
<p>Пойду теперь работать&#8230;</p>
<p style="padding-left: 30px;"><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/83/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Индикатор батареи для Slackware.</title>
		<link>http://blog.lushpai.org/archives/19</link>
		<comments>http://blog.lushpai.org/archives/19#comments</comments>
		<pubDate>Wed, 22 Apr 2009 21:10:25 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[slackware]]></category>

		<guid isPermaLink="false">http://lushpai.net/archives/19</guid>
		<description><![CDATA[Намедни озадачился отсутствием индикатора заряда батареи в xfce-4.4.3, который идет в стандартной поставке Slackware 12.2. Плагин, который можно скачать с офф. сайта проекта xfce мне не понравился хотя бы только потому, что тянет за собой ряд зависимостей, захламлять которыми машину как-то не хочется, плюс установить удалось только одну из версий, которая толком и не работала. [...]]]></description>
			<content:encoded><![CDATA[<p>Намедни озадачился отсутствием индикатора заряда батареи в xfce-4.4.3, который идет в стандартной поставке Slackware 12.2. <em><a href="http://goodies.xfce.org/projects/panel-plugins/xfce4-battery-plugin">Плагин</a></em>, который можно скачать с офф. сайта проекта xfce мне не понравился хотя бы только потому, что тянет за собой ряд зависимостей,  захламлять которыми машину как-то не хочется, плюс установить удалось только одну из версий, которая толком и не работала. С другой стороны, на машинке уже установлена <em><a href="http://www.galago-project.org/news/index.php">libnotify</a></em>, которая позволяет выводить всплывающие уведомления, так почему бы не вспользоваться ей. Решение и реализация заняли всего 10 минут.</p>
<p><strong>1. </strong><strong>Определяемся, где у нас лежит информация о батарее.</strong></p>
<address>$ cat /proc/acpi/battery/BAT1/state &#8211; информация о состоянии, отсюда будем брать текущий заряд.</address>
<address>$ cat /proc/acpi/battery/BAT1/info &#8211; общая информация, отсюда будем брать общую емкость, для вычисления процентов.</address>
<address>Возможно у Вас путь будет немного другой, например /proc/acpi/battery/BAT0/state</address>
<p><strong> 2. Пишем скрипт.</strong></p>
<p>Первое что пришло на ум, это perl, хотя уверен, реализовать такое легко и на bash</p>
<blockquote><p>
<code>
<div style="font: 10px Tahoma">1. #!/usr/bin/perl -w<br />
2. my ($file1,$file2,@data,$damage,$current);<br />
3. <em>#читаем файл с информацией о батарее</em><br />
4. open F1, '/proc/acpi/battery/BAT1/info'; while (&lt;F1&gt;) { $file1 .= $_; }; close F1;<br />
5. open F2, '/proc/acpi/battery/BAT1/state'; while (&lt;F2&gt;) { $file2 .= $_; }; close F2;<br />
6. <em>#выбираем интересующие нас данные</em><br />
7. return unless @data[0] = $file1 =~ /design\scapacity\:\s+(\d+)\s\w+/;<br />
8. return unless @data[1] = $file1 =~ /last\sfull\scapacity\:\s+(\d+)\s\w+/;<br />
9. return unless @data[2] = $file2 =~ /remaining\scapacity\:\s+(\d+)\s\w+/;<br />
10. <em>#считаем проценты</em><br />
11. $damage = 100-(@data[1]/40);$damage = sprintf("%.1f",$damage);<br />
12. $current = (@data[2]*100)/@data[1];$current = sprintf("%.1f",$current);<br />
13. <em>#вызываем внешнюю программу для отображения данных</em><br />
14. `notify-send -u critical -t 7000 -i battery "<br />
15. \tТекущий заряд батареи $current%<br />
16. \n\tИзнос батареи $damage%<br />
17. "`</div>
<p></code>
</p></blockquote>
<p>Вот собственно и все, при вызове этой программки получаем нечто подобное:</p>
<p style="text-align: center;"><img class="aligncenter" style="margin-top: 1px; margin-bottom: 1px;" title="всплывающее уведомление" src="http://blog.lushpai.org/wp-content/uploads/1.png" alt="всплывающее уведомление" hspace="1" vspace="1" align="middle" /></p>
<p>При желании можно вызывать скрипт посредством bash скрипта, а если сделать симлинк на этот скрипт в /usr/local/bin, то можно, в добавок, повесить вызов уведомления на хоткей.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/19/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PXSM. Дополнение к стандартному меню Xfce4.</title>
		<link>http://blog.lushpai.org/archives/17</link>
		<comments>http://blog.lushpai.org/archives/17#comments</comments>
		<pubDate>Thu, 26 Feb 2009 03:17:57 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[slackware]]></category>
		<category><![CDATA[xfce]]></category>

		<guid isPermaLink="false">http://lushpai.net/archives/17</guid>
		<description><![CDATA[Ровно 1 год и 1 день назад я рассказал про perl модуль, который позволяет сгенерировать простенький xml, немного позже, я рассказывал о том, как устанавливать ssh соединения, не вводя каждый раз пароль. Сегодня я хочу рассказать, как я , наконец, нашел удобное применение и тому, и другому. Сразу оговорюсь, то, о чем пойдет речь может [...]]]></description>
			<content:encoded><![CDATA[<p>Ровно 1 год и 1 день назад я <a href="http://blog.lushpai.org/archives/4">рассказал</a> про perl модуль, который позволяет сгенерировать простенький xml, немного позже, я <a href="http://blog.lushpai.org/archives/5">рассказывал</a> о том, как устанавливать ssh соединения, не вводя каждый раз пароль. Сегодня я хочу рассказать, как я , наконец, нашел удобное применение и тому, и другому.</p>
<p>Сразу оговорюсь, то, о чем пойдет речь может пригодиться только тем, кто:</p>
<ul>
<li>часто использует в работе ssh и ftp</li>
<li>имеет необходимость работать с несколькими серверами</li>
<li>использует linux и xfce</li>
</ul>
<p>Итак, собственно сабж. Используя вышеупомянутый модуль и bash-скрипт для автоматического ввода пароля ssh, я написал простенький perl скрипт, который назвал довольно тривиально &#8211; Perl Connection Manager. Скрипт генерирует xml файл, который представляет собой компонент меню для xfce. В итоге, подключив полученый файл с помощью xfce4-menueditor, получаем вложенную менюшку, элементами которой являются пусковички для консоли и файлового менеджера (на данный момент это Midnight Commander). Вся соль в том, что в консоли автоматически открывается ssh соединение, указанное в параметрах элемента меню, ну а в правой панели MC, соответственно, дерево каталогов на удаленном ftp сервере. Помимо этого решил не лениться, и снабдил скрипт какой-никакой, но документацией, а так же добавил иконки, которые теперь отображаются в меню.</p>
<p>Скрипт можно скачать <a href="http://apps.lushpai.org/pxsm/0.1.3/pxsm-0.1.3.tar.bz2">тут</a>. Вопросы и предложения приветствуются.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/17/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>South Perl &#8211; Третий Российский Perl Workshop</title>
		<link>http://blog.lushpai.org/archives/16</link>
		<comments>http://blog.lushpai.org/archives/16#comments</comments>
		<pubDate>Wed, 10 Dec 2008 23:23:09 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://lushpai.net/archives/16</guid>
		<description><![CDATA[Оригинальное видео: Russia.ru Конференция 2 ноября 2008 года в Ростове-на-Дону прошел 3-й Российский Perl Workshop, в числе участников которого мне посчастливилось оказаться. Мероприятие оказалось более чем интересным, к тому же, это было первое подобное мероприятие, на котором мне довелось побывать. Первым выступил Андрей Шитов, организатор Perl-конференций в России, Украине и Беларуси, лидер Moscow.pm, автор perl6.ru. [...]]]></description>
			<content:encoded><![CDATA[<p><embed name="playerblog" src="http://www.russia.ru/player/215.swf" flashvars="menu_id=102&#038;name=use_perl_or_die&#038;blog=true" width="448" height="252" bgcolor="#000000" allowScriptAccess="always" allowFullScreen="true"></embed><small>Оригинальное видео: <a href="http://www.russia.ru/video/use_perl_or_die/">Russia.ru</a></small></p>
<p><span id="more-16"></span><strong>Конференция</strong></p>
<p>2 ноября 2008 года в Ростове-на-Дону <a href="http://event.perlrussia.ru/rpw2008/">прошел 3-й Российский Perl Workshop</a>, в числе участников которого мне посчастливилось оказаться. Мероприятие оказалось более чем интересным, к тому же, это было первое подобное мероприятие, на котором мне довелось побывать.</p>
<p>Первым выступил Андрей Шитов, организатор Perl-конференций в России, Украине и Беларуси, лидер <a href="http://moscow.pm.org">Moscow.pm</a>, автор <a href="http://perl6.ru">perl6.ru</a>. Он рассказал о perl-мероприятиях в целом и частностях, в дальнейшем он так же выступил с рядом докладов, в том числе с докладом о развитии Perl 6, который мне показался одним из самых интересных. </p>
<p>Алексей Капранов, руководитель отдела Rambler-почты, вдохновитель Lightning Talks в России, Moscow.pm, рассказал о том, как разрабатывалась почтовая система <a href="http://rambler.ru">Rambler</a>, и о интересных нюансах, с которыми столкнулись разработчики.</p>
<p>Анатолий Шарифулин, ведущий программист компании &laquo;<a href="http://tochkak.ru">Точка Кипения</a>&laquo;, лидер <a href="http://rostovondon.pm.org">RostovOnDon.pm</a> рассказал о разработке интерактивных терминалов на базе Perl, XML и Firefox. </p>
<p><object width="400" height="302"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2187929&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1&amp;group_id=" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=2187929&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1&amp;group_id=" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="302"></embed></object><br /><a href="http://vimeo.com/groups/2253/videos/2187929">Интерактивный терминал: Perl, XML и Firefox</a> from <a href="http://vimeo.com/user915137">Dmitry Konstantinov</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p><strong>Блиц-доклады</strong></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/o_r9fydhIS8&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/o_r9fydhIS8&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/KhgjOb7g8p4&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/KhgjOb7g8p4&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p><strong>Фотоотчет</strong></p>
<p><object width="500" height="375"><param name="flashvars" value="&#038;offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fsharifulin%2Fsets%2F72157608365664301%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fsharifulin%2Fsets%2F72157608365664301%2F&#038;set_id=72157608365664301&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=63961"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=63961" allowFullScreen="true" flashvars="&#038;offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fsharifulin%2Fsets%2F72157608365664301%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fsharifulin%2Fsets%2F72157608365664301%2F&#038;set_id=72157608365664301&#038;jump_to=" width="500" height="375"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/16/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MyXML &#8211; генератор XML</title>
		<link>http://blog.lushpai.org/archives/4</link>
		<comments>http://blog.lushpai.org/archives/4#comments</comments>
		<pubDate>Mon, 25 Feb 2008 13:11:27 +0000</pubDate>
		<dc:creator>gwinn</dc:creator>
				<category><![CDATA[запись]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://lushpai.net/archives/4</guid>
		<description><![CDATA[На днях озадачился небходимостью сгенерировать небольшой XML документ средствами Perl, но лезть в дебри CPAN, в поисках подходящих модулей стало лень. С другой стороны, обходиться банальным &#171;print&#187; тоже не хотелось, так как время от времени генерировать XML просто необходимо. Посему открыл текстовый редактор и начал ваять, а точнее доводить до ума некогда начатый, но так [...]]]></description>
			<content:encoded><![CDATA[<p align="left">На днях озадачился небходимостью сгенерировать небольшой XML документ средствами Perl, но лезть в дебри <a href="http://cpan.org" target="_balnk">CPAN</a>, в поисках подходящих модулей стало лень. С другой стороны, обходиться банальным &laquo;print&raquo; тоже не хотелось, так как время от времени генерировать XML просто необходимо. Посему открыл текстовый редактор и начал ваять, а точнее доводить до ума некогда начатый, но так и не дописанный pakage, позволяющий генерировать простой XML. Не на что выдающееся я естественно претендовать не собираюсь, но показать что в итоге получилось почему то захотелось.<br />
Итак, сам pakage можно скачать <a href="http://apps.lushpai.org/myxml/1.0.21/myxml.tar.bz2">тут</a>, а вот простой пример того, что с ним можно делать:</p>
<blockquote><p> #!/usr/bin/perl<br />
use strict;<br />
use base::MyXML;<br />
our $top = MyXML-&gt;GXM(&laquo;1.0&#8243;,&raquo;utf-8&#8243;)-&gt;{&laquo;header&raquo;};<br />
our $tag = MyXML-&gt;GXD(<br />
&laquo;content&raquo;,<br />
join(&raquo;,<br />
MyXML-&gt;GXDM(&laquo;elem&raquo;,['type=app','name="Console"'],)-&gt;{&laquo;result&raquo;},<br />
MyXML-&gt;GXDM(&laquo;elem&raquo;,['type=app','name="Editor"'],)-&gt;{&laquo;result&raquo;},<br />
MyXML-&gt;GXDM(&laquo;elem&raquo;,['type=app','name="Player"'],)-&gt;{&laquo;result&raquo;},<br />
),<br />
['name="Soft"'],<br />
)-&gt;{&laquo;result&raquo;}<br />
open(FH,&raquo;&gt;data.xml&raquo;);<br />
print (FH $top.&raquo;n&raquo;);<br />
print (FH $tag.&raquo;n&raquo;);<br />
close(FH);</p></blockquote>
<p align="left">в итоге получился такой вот документ:</p>
<blockquote>
<p align="left">&lt;?xml version=&raquo;1.0&#8243; encoding=&raquo;utf-8&#8243;?&gt;<br />
&lt;content name=&raquo;Soft&raquo;&gt;<br />
&lt;elem type=&raquo;app&raquo; name=&raquo;Console&raquo; id=&raquo;1.1&#8243; /&gt;<br />
&lt;elem type=&raquo;app&raquo; name=&raquo;Editor&raquo; id=&raquo;1.2&#8243; /&gt;<br />
&lt;elem type=&raquo;app&raquo; name=&raquo;Player&raquo; id=&raquo;1.3&#8243; /&gt;<br />
&lt;/content&gt;</p>
</blockquote>
<p align="left">На последок все же пару слов о MyXML. В распоряжении разработчика предоставляются 3 метода (пока 3 <img src='http://blog.lushpai.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , а именно GXM(формирующий заголовок документа), GXD(формирующий открывающий, закрывающий теги, атрибуты по необходимости, и собственно, то, что между тегами заключено) и GXDM(формирующий &laquo;пустой тег&raquo; с атрибутами по необходимости).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lushpai.org/archives/4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
