Perl, Curl, Gmail

Сен 10
2009

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

Read the rest of this entry »

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

Апр 23
2009

Намедни озадачился отсутствием индикатора заряда батареи в 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, то можно, в добавок, повесить вызов уведомления на хоткей.

South Perl — Третий Российский Perl Workshop

Дек 11
2008

Оригинальное видео: Russia.ru

Read the rest of this entry »

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

Фев 25
2008

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

#!/usr/bin/perl
use strict;
use base::MyXML;
our $top = MyXML->GXM(«1.0″,»utf-8″)->{«header»};
our $tag = MyXML->GXD(
«content»,
join(»,
MyXML->GXDM(«elem»,['type=app','name="Console"'],)->{«result»},
MyXML->GXDM(«elem»,['type=app','name="Editor"'],)->{«result»},
MyXML->GXDM(«elem»,['type=app','name="Player"'],)->{«result»},
),
['name="Soft"'],
)->{«result»}
open(FH,»>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 type=»app» name=»Editor» id=»1.2″ />
<elem type=»app» name=»Player» id=»1.3″ />
</content>

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

1 из 11
Real Time Web Analytics
fortnotes