четверг, февраля 19, 2009

Perl - Проверка email регулярным выражением

Задался тут целью выловить таки в присылаемых мне списках некорректные адреса электронной почты. Идя по пути наименьшего сопротивления, обратился в гугл. От туда на форум Opennet.ru. И уже от туда на, как оказалось, замечательный сайт посвященный регулярным выражениям.
Совсем немного времени и в моём распоряжении регулярное выражение для валидации адресов электронной почты. Ещё капелька усилий и имеем скрипт для вывода email, не проходящих проверку.

#!D:\Perl\bin\perl.exe
use strict;
use warnings;
# открываем файл с адресами
open (my $emailh, 'emails.csv') or die $!;
# считываем построчно в переменную "по-умолчанию" $_
while (<$emailh>) {
# "магия" начинается тут.
# если считанная строка не проходит проверку, то выводим её на экран  
print if ($_ !~ m{(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])}i)
}
# закрываем файл
close $emailh;

Что удивительно - скрипт отработал как надо. За исключением одного момента. Скрипт, вернее само регулярное выражение, почему-то забраковало адрес вида xxx@mtu_net.ru
Надо почитать что там в официальном стандарте говорится об этом.

среда, февраля 18, 2009

Облако тегов на blogspot

Пока было мало ярлыков то как-то не напрягало их присутсвие с боку в виде списка. Потом количество ярлыков выросло, и длинная колбаса стала смотреться несколько нелепо - пришлось убрать. Но всё же не давала покоя мысль вернуть её на место. Решение - "облако тегов" (или ярлыков, кому как больше нарвится).
Поиск в гугле первой выдал ссылку на блог Юзер фрэндли и его отзыв о том как прикрутить облако.
Переходим по его ссылке на перевод статьи как сделать облако тегов для blogspot
А дальше просто следуем инструкциям. Элементарное Ctrl+c, Ctrl+v.
Наслаждаемся.

вторник, февраля 17, 2009

Успеть или Опаздать

Давно не записывал снов, а надо бы. Вернее есть что записать и о чём подумать.
Приснился тут сон... И как мне показалось я даже догадываюсь о чём он. Вот только с тем что происходит в действительности сон соотносится как-то не особо. Поясню.

Я пытаюсь заскочить в последний вагон уходящего поезда. Причём делая это, я осознаю что если не попаду на этот поезд, то ничего мне не помешает поехать на следующем. Но всё-таки заскакиваю и оказывается что довольна сильно повредил себе ногу - идёт кровь и мне накладывают повязки.


Интерпретация сна, как мне кажется, очевидна. Я спешу сделать что-то (спешу на поезд), но делая это я иду не туда (травма ноги). К тому же если подождать немного, то мне предоставиться возможность сделать то же самое, но гораздо меньшей ценой, в то время как если я продолжу, то пострадают мои родные (кровь).
Задался вопросом - что же я могу такое делать в реальной жизнь, что вызывает подобные образы? Куда я спешу? Ответ возможен только один - я очень хочу сменить работу. Причём сделать это я хочу как можно скорее. Больше в моей жизни нет ничего такого что я спешу сделать. И вот тут то и кроется не состыковка - во сне я спешу делать и это делаю, а в реальной жизни я хоть и хочу сделать как можно скорее, вот только вариантов нет.
В общем непонятно...
Кстати, в тему вспоминается ещё один сон, который я видел уже довольно давно. В то время я на протяжении длительного времени встречался с одной девушкой и отношения изрядно буксовали. По ряду причин, но не о них рассказ. Собственно сон. Он очень короткий, но яркий и, как мне кажется, однозначный.

Я собираюсь на свидание с ней, понимаю что опаздываю и начинаю спешить собираться.


Собственно это и есть сон. Но о чём он? Изначально я подумал что он к тому что я могу что-то пропустить в наших с ней отношениях, что из-за возникающих проволочек я могу упустить время. Но потом меня осенило. Ведь сон не о том что я опаздываю, а о том что я спешу, то есть тороплю события.
Жизнь подтвердила. Предоставив событиям развиваться как они есть я узнал что этот человек, мягко говоря, не тот кто мне нужен.

Perl - перемещение файлов по подкаталогам

Сегодня, думаю запощу сразу два поста. "Запощу пост"... Мда, новые времена - повые тафтологии.


Первое обращение посвящено тем кто хочет посмотреть для чего можно использовать Perl. Недавно начал смотреть что это за язык такой. Должен сказать - впечатляет. Условный оператор unless, модификаторы операторов... Весьма, весьма.


Но перейдём к делу. Была у меня папка в которой лежало весьма приличное количество файлов - 6700+ штук. И все они лежали в одной папке. То что это не нравилось наутилусу - мягко сказано. Решил раскидать файлы по подкаталогам. Причём так что имя подкаталога должно начинаться с порядкового номера файла, потом дефис и порядковый номер последнего файла. Все эти "порядковые номера", естественно, относительно их изначальной индексации в каталоге.


Сначала попытался сделать это в ручную... А потом понял что это прекрасное поле для того что бы опробовать то что я узнал из самоучителей. К тому же, как в них, в самоучителях, зная минимум можно делать весьма впечатляющие вещи. Собственно в этом я и убедился.


А теперь собственно сам код. Так как он обильно снабжён комментариями, то думаю мои дальнейшие разглагольствования будут не уместны.


Одно малюсенькое змечание - код писался в Vim, а затем с помощью же Vim'а экспортировался в HTML.



#!/usr/bin/perl
use strict;
use warnings;
my @files;
# открываем директорию
opendir(my $sdir, '.') or die($!);
# и считываем все файлы исключая файл-скрипт в массив
@files = grep { -f && !/move_files\.pl/} readdir $sdir;
&move_file(\@files);
# этим будем двигать файлы
sub move_file() {
  # номер итерации
  my $n = 0;
  # количество перемещаемых файлов
  my $offset = 128;
  # получаем ссылку на массив с файлами
  my $files = shift;
  # обходим массив с файлами, передвигаясь на число перемещаемых файлов
  for (my $i=0; $i<$#{$files}; $i+=$offset, $n++) {
    # начальный индекс для среза - ниндекс
    my $start = $n*$offset;
    # конечный индекс для среза - киндекс
    # если вычисляемый киндекс больше последнего индекса, то устанавливаем киндекс на последний элемент,
    # в противном случае используем вычисляемый киндекс
    my $end = (($start+$offset-1)>$#{$files)?($#{$files}):$start+$offset-1;
    # делаем срез для массива файлов
    my @move = @$files[$start..$end];
    # создаём директорию куда переместим файлы
    my $dir = sprintf("%03d-%03d", $start, $end);
    mkdir($dir, 0766) or die($!);
    # переименовываем каждый элемент
    foreach (@move) {
      rename($_, $dir.'/'.$_) or die($!);
    }
  }
}

четверг, февраля 05, 2009

День когда мёртвые умрут

Очередной компот из сновидений готов к публикации. Снова приснились деньги. Собирал мелочь, а значит это к слезам. Была ещё бабушка моей жены, какие-то серёжки и колечки, но всё это так, как я сказал выше - мелочь. Интересное приснилось в самом конце.
Мне приснился фильм... Вот только до конца я его не досмотрел, но "сдаётся мне что это была комедия". Фильм назывался "Day when dead die". Можно сказать что это пародия на "Шестое чувство".

Начинается всё с того что показывают толпы покойников. По всем законам жанра они выглядят не лучшим образом. Да и обстановка вокруг них не располагает к отдыху - огонь, камни, неизвестно от куда летящие стрелы.
Дальше количество мёртвых на долю экрана уменьшается и показывают магазин, в котором среди обычных людей, живых, ходят с тележками призраки. И надо же было найтись человеку, который видит мёртвых. Мало того что он их видит, так он ещё и заявляет об этом, нанося на стены надпись типа I.F.Y. - I Feel You (привет Vader) и I.S.U. - I See You (привет умершей аське). Обычных людей его поведение раздражает и, в частности его супруга, просит что бы он прекратил или по крайней мере перестал так себя вести при ребёнке. А вот мёртвых подобное реально пугает - их кто-то видит чего быть не должно.
Ещё был момент когда главный герой видит в магазине девочку-призрак с продуктовой тележкой, начинает кричать что видит её, чем пугает не только её, но и своего сына.
Дальше появляется второй главный герой. Сотрудник ФБР, который занимается подобными "видениями" потому как сам видит мёртвых и уже давно знает что существует целый город мёртвых, который находится под угрозой из-за какого-то строительства. Видимо при строительстве найдут "кладбище", все тела перезахоронят как положено и мёртвые успокоятся чего они, собственно, не горят желанием делать.
Дальнейший сон потерялся в отрывках. Агент ФБР бежит с главным героем по рельсам и их чуть не сбивает поезд, они видят целые составы-призраки. Когда любая вещь "умирает", то становится достоянием призраков. За это отдельный привет Терри Пратчетту, в частности произведению Мрачный Жнец.
В общем вот такой сон про мёртвых.