Perl, Curl, Gmail

8 утра. Пришел на работу, выпил кофе, покурил. В голове каша, на работу не настроен. Не есть хорошо. Делаем разминку для мозгов опираясь на статью на Habrahabr. Напишем-ка простенький прикладной демон, который будет оповещать нас о новой почте на Gmail. Для этого нам понадобятся Perl и Curl.

Continue reading «Perl, Curl, Gmail»

Perl, Curl, Gmail

Индикатор батареи для Slackware.

Намедни озадачился отсутствием индикатора заряда батареи в xfce-4.4.3, который идет в стандартной поставке Slackware 12.2. Плагин, который можно скачать с офф. сайта проекта xfce мне не понравился хотя бы только потому, что тянет за собой ряд зависимостей, захламлять которыми машину как-то не хочется, плюс установить удалось только одну из версий, которая толком и не работала. С другой стороны, на машинке уже установлена libnotify, которая позволяет выводить всплывающие уведомления, так почему бы не вспользоваться ей. Решение и реализация заняли всего 10 минут.

1. Определяемся, где у нас лежит информация о батарее.

$ cat /proc/acpi/battery/BAT1/state — информация о состоянии, отсюда будем брать текущий заряд.
$ cat /proc/acpi/battery/BAT1/info — общая информация, отсюда будем брать общую емкость, для вычисления процентов.
Возможно у Вас путь будет немного другой, например /proc/acpi/battery/BAT0/state

2. Пишем скрипт.

Первое что пришло на ум, это perl, хотя уверен, реализовать такое легко и на bash


#!/usr/bin/perl -w
my ($file1,$file2,@data,$damage,$current);
#читаем файл с информацией о батарее
open F1, '/proc/acpi/battery/BAT1/info'; while (<F1>) { $file1 .= $_; }; close F1;
open F2, '/proc/acpi/battery/BAT1/state'; while (<F2>) { $file2 .= $_; }; close F2;
#выбираем интересующие нас данные
return unless @data[0] = $file1 =~ /design\scapacity\:\s+(\d+)\s\w+/;
return unless @data[1] = $file1 =~ /last\sfull\scapacity\:\s+(\d+)\s\w+/;
return unless @data[2] = $file2 =~ /remaining\scapacity\:\s+(\d+)\s\w+/;
#считаем проценты
$damage = 100-(@data[1]/40);$damage = sprintf("%.1f",$damage);
$current = (@data[2]*100)/@data[1];$current = sprintf("%.1f",$current);
#вызываем внешнюю программу для отображения данных
`notify-send -u critical -t 7000 -i battery "
\tТекущий заряд батареи $current%
\n\tИзнос батареи $damage%"`

Вот собственно и все, при вызове этой программки получаем нечто подобное:

всплывающее уведомление

При желании можно вызывать скрипт посредством bash скрипта, а если сделать симлинк на этот скрипт в /usr/local/bin, то можно, в добавок, повесить вызов уведомления на хоткей.

Индикатор батареи для Slackware.

MyXML — генератор XML

На днях озадачился небходимостью сгенерировать небольшой XML документ средствами Perl, но лезть в дебри CPAN, в поисках подходящих модулей стало лень. С другой стороны, обходиться банальным «print» тоже не хотелось, так как время от времени генерировать XML просто необходимо. Посему открыл текстовый редактор и начал ваять, а точнее доводить до ума некогда начатый, но так и не дописанный paсkage, по сути своей — простой генератор XML. Не на что выдающееся я естественно претендовать не собираюсь, но показать что в итоге получилось почему то захотелось.
Итак, сам pakage можно скачать тут, а вот простой пример того, что с ним можно делать:

#!/usr/bin/perl
use strict;
use base::MyXML;
our $top = MyXML-&gt;GXM("1.0","utf-8")-&gt;{"header"};
our $tag = MyXML-&gt;GXD(
"content",
join('',
MyXML-&gt;GXDM("elem",['type=app','name="Console"'],)-&gt;{"result"},
MyXML-&gt;GXDM("elem",['type=app','name="Editor"'],)-&gt;{"result"},
MyXML-&gt;GXDM("elem",['type=app','name="Player"'],)-&gt;{"result"},
),
['name="Soft"'],
)-&gt;{"result"}
open(FH,"&gt;data.xml");
print (FH $top."n");
print (FH $tag."n");
close(FH);

в итоге получился такой вот документ:

< ?xml version="1.0" encoding="utf-8"?>
<content name="Soft">
    <elem type="app" name="Console" id="1.1"></elem>
    <elem type="app" name="Editor" id="1.2"></elem>
    <elem type="app" name="Player" id="1.3"></elem>
</content>

На последок все же пару слов о MyXML. В распоряжении разработчика предоставляются 3 метода (пока 3 ;), а именно GXM(формирующий заголовок документа), GXD(формирующий открывающий, закрывающий теги, атрибуты по необходимости, и собственно, то, что между тегами заключено) и GXDM(формирующий «пустой тег» с атрибутами по необходимости).

MyXML — генератор XML