Пятница, 22 мая

Чтобы не искать: Как я стал мейнтейнером одного из модулей Perl на CPAN

В дополнение к предыдущему посту.

Я таки связался с автором и стал мейнтейнером модуля. Подробности на Хабре.

Хабрахабр: Метки / perl: Как я стал мейнтейнером одного из модулей Perl на CPAN


image

У меня на работе, в одном из проектов, используется модуль XML::WBXML. Это модуль для работы с бинарным XML — WAP Binary XML.

К сожалению, модуль обновлялся последний раз в 2006 году, т.е. 9 лет назад. С тех пор от Дэвида Глессера (David Glasser), автора модуля, не было ни слуху, ни духу, багрепорты висели неотвеченными, баги, соответственно, неисправленными. Модуль был забыл и заброшен.

Нужно было что-то с этим делать. Ниже я хочу поделиться своим опытом получения контроля над заброшенным модулем Perl.
Читать дальше →

PerlNews.Ru: Выпущен Perl 5.22.0 RC2

Вышел второй релиз кандидат новой стабильной версии Perl 5.22.0. Просмотреть информацию о релизе и загрузить новую версию можно с любого зеркала CPAN или найти ссылки на странице.

Оличия от RC1 заключаются лишь в нескольких правках в perldelta, исправлении бага с NAN_COMPARE_BROKEN для VC6 и сборки с отладочной информацией для платформы VMS, а также поддержке mkstemp() на mingw-w64-v4 (что в теории должно решить проблему со сборкой новой версии Strawberry Perl).

Если не будет найдено серьёзных проблем, то официальный релиз новой стабильной версии Perl состоится 1 июня.

Темы: Perl

Среда, 20 мая

Чтобы не искать: Perl. Модуль XML::WBXML



На CPAN'е есть такой модуль - XML::WBXML. Нужен для работы с бинарным форматом XML. Этот модуль используется у нас в проекте.

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

В частности, один из багов заключается в том, что при установке не проходят тесты (make test выдает ошибку) и установка прерывается. Ошибка же проистекает из того, что за последние 9 лет произошли изменения в библиотеке libwbxml2, которая используется в самом модуле. Библиотека выдает теперь ответ немного в другом виде и тест из-за этого ломается. Для исправления этой ошибки достаточно исправить одну строчку в самом тесте.

Действие элементарное, но из-за него ломается вся стройная процедура автоматической установки. Нужно скачать исходники модуля, наложить патч, собрать модуль... Неудобно. Правильным решением было бы отправить патч самому автору модуля, но - как уже было сказано выше - автор пропал 9 лет назад и на бегрепорты не реагирует.

В связи с этим я решил попробовать сделать свой модуль для CPAN, с блэкджеком и шлюхами.

Форкнул исходный модуль и выложил новый модуль на CPAN под названием XML::WB. Плюс к этому, репозиторий с новым модулем разместил на Гитхабе. Ну и, конечно, исправил ошибку в тестах. Теперь модуль XML::WB можно поставить стандартным образом прямо из CPAN'а, без ручных манипуляций с исходниками.

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

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

И вот, для начала, я написал автору письмо на все его емейлы, какие нашел. Жду ответа. Но перспективы, мне кажется, сомнительные (если уж чувак 9 лет не появлялся). Так что пока, если вдруг кому надо - юзайте XML::WB :)

UPD: Я таки связался с автором и стал мейнтейнером модуля. Юзайте XML::WBXML, я его исправил.

PerlNews.Ru: Полезные трюки с микрооптимизацией

В рассылке perl5-porters был задан вопрос, почему две операции сильно отличаются по скорости (в пользу do):

  do { ; }
{ ; }

Zefram указал на то, что пустой блок рассматривается как цикл, который выполняется один раз, и для него формируется фрейм-контекст с поддержкой динамических операций вроде next. В то время как для do устанавливается только область видимости, что гораздо быстрее.

Кроме этого было замечено, что операция ; это отдельная операция, которая устанавливает номер строки. В противовес этому , не имеет подобного оверхеда. Например:

  $x = 1; $y = 2; print "$x $y";
$x = 1, $y = 2, print "$x $y";

Оба выражения выполняют одно и то же, но вторая запись будет работать быстрее.

Эта информация сразу вдохновила Питера Рэбиттсона использовать этот простой трюк на практике. Он продемонстрировал коммит, который на 15% увеличивает производительность DBIx::Class просто заменив все ; на , в генерируемом коде для строкового eval. Этот прирост становится заметен на резалтсетах с ≥1000 рядов.

Темы: Perl tips benchmark

Вторник, 19 мая

PerlNews.Ru: Выпущен Perl 5.22.0 RC1

Вышел первый релиз кандидат новой стабильной версии Perl 5.22.0. Просмотреть информацию о релизе и загрузить новую версию можно с любого зеркала CPAN или найти ссылки на странице.

Если не будет найдено серьёзных проблем, то официальный релиз новой стабильной версии Perl состоится 1 июня.

Темы: Perl

Воскресенье, 17 мая

crux's blog: Размер буфера пайпа

Запись данных в пайп, как правило, атомная операция в пределах размера буфера пайпа. До Linux 2.6.11 ёмкость пайпа составляла 4Кбайта, после её увеличили до 64Кбайт. А вот в 2.6.35 появилась возможность менять размер буфера, в том числе и непривигелированному процессу. Для этих целей можно воспользоваться вызовом fcntl с операцией F_SETPIPE_SZ.

В Perl модуль Fcntl ничего не знает о таких операциях как F_SETPIPE_SZ или F_GETPIPE_SZ, но, как выяснилось это не проблема:

use Fcntl;
# bits/fcntl-linux.h
use constant {
    F_SETPIPE_SZ => 1031,
    F_GETPIPE_SZ => 1032,
};
 
pipe my $r, my $w or die $!; 
 
print "buffer:  " . fcntl( $r, F_GETPIPE_SZ, 0 ) . "\n";
fcntl( $w, F_SETPIPE_SZ, 512 * 1024 );
print "buffer:  " . fcntl( $r, F_GETPIPE_SZ, 0 ) . "\n";

Программа выведет размер буфера до и после изменения:

buffer:  65536
buffer:  524288

Максимальный размер буфера пайпа для простых пользователей задан в /proc/sys/fs/pipe-max-size (1 Мб).


Комментарии(0)

Суббота, 16 мая

PerlNews.Ru: Онлайн трансляция YAPC::Russia 2015

Началась онлайн-трансляция конференции YAPC::Russia 2015.

Читать дальше →

Темы: YAPC

Пятница, 15 мая

Хабрахабр: Метки / perl: Конференция YAPC::Russia::MayPerl 2015 в Москве 16-17 мая, не пропусти




Уже в эти выходные в московском офисе Mail.Ru Group пройдет конференция May Perl (YAPC::Russia). На нее слетаются Perl-профессионалы из разных уголков земного шара, чтобы обменяться опытом, завести новые знакомства в своей сфере и пообщаться с единомышленниками в неформальной и приятной обстановке. Для участия — регистрируйтесь. Участие бесплатное! В программе более 20 докладов на разные темы, как для начинающих, так и для профессиональных Perl-программистов. Под катом подробное описание мероприятия.
Читать дальше →

PerlNews.Ru: Расписание конференции YAPC::Russia 2015

Доступно расписание конференции YAPC::Russia 2015, которая начнётся уже завтра.

А сегодня можно посетить preparty, которая пройдёт в пивном ресторане «Шпатен-Хаус» в 19:00.

Темы: YAPC

Четверг, 14 мая

Мини-портал Perl на Opennet: Двадцать седьмой выпуск журнала Pragmatic Perl

Представлен двадцать седьмой выпуск Pragmatic Perl, русскоязычного журнала о современном программировании на языке Perl.

PerlNews.Ru: Берлинский консенсус

На днях был опубликован Берлинский консенсус — финальная договорённость по результатам прошедшего Берлинского QA-хакатона. Данный документ описывает новые соглашения и идеи для репозитория CPAN и тулчейна Perl, а также новые рекомендации для CPAN-авторов. Рассмотрим более подробно концепции и тезисы Берлинского консенсуса.

Читать дальше →

Темы: CPAN

Среда, 6 мая

Сообщество ru_perl в LiveJournal: У меня склероз или (экспериментальная) поддержка ref'ов функцией keys сломала совместимость?

у меня склероз или раньше конструкция keys map { $_ => 1} @array; работала как задумано без промежуточных переменных?
В новых пятёрках ругается, гугление показывает, что это результат экспериментальной поддержки в keys рефов на хэши (авто-разыменование).

perl5 всегда же славился железобетонной обратной совместимостью, а тут такую идиому сломали!

Сообщество ru_perl в LiveJournal: Двадцать седьмой выпуск журнала о современном Perl

pp Выпуск 27. Май 2015

http://pragmaticperl.com/issues/27

В этом номере:

- От редактора, Вячеслав Тихановский
http://pragmaticperl.com/a/8a95cb49

- Отладка приложений на AnyEvent, Владимир Леттиев
Отладка асинхронных приложений часто затруднена из-за нелинейного характера выполняемого кода, когда ошибки проявляются под нагрузкой или в каких-то исключительных трудновоспроизводимых ситуациях. Привычные инструменты могут быть неудобны и неинформативны. Если приложение построено на основе AnyEvent, то для него уже существуют готовые рецепты отладки.
http://pragmaticperl.com/a/93ff29e4

- Операторы Perl 6. Часть 1, Андрей Шитов
Обзор префиксных, постфиксных и инфиксных операторов Perl 6
http://pragmaticperl.com/a/a45947c6

- Метаоператоры в Perl 6, Андрей Шитов
Рассмотрены доступные в языке метаоператоры — операторы, расширяющие синтаксические возможности языка, используя другие операторы
http://pragmaticperl.com/a/8be9c3af

- Обзор CPAN за апрель 2015 г., Владимир Леттиев
Рубрика с обзором интересных новинок CPAN за прошедший месяц.
http://pragmaticperl.com/a/fde694d9

- Интервью с Сюзанной Шмидт, Вячеслав Тихановский
Сюзанна Шмидт (sushee) — политолог, которая стала Perl-программистом
http://pragmaticperl.com/a/3f2ba52d

Сообщество ru_perl в LiveJournal: Как сделать журнал Pragmatic Perl лучше (опрос)?

Восемь вопросов и 30 секунд вашего времени.

https://ru.surveymonkey.com/s/D362Q89

Спасибо!

PerlNews.Ru: 27-й выпуск журнала Pragmatic Perl

Вышел 27-й выпуск журнала о современном Perl на русском Pragmatic Perl.

Pragmatic Perl 27

В этом номере:

  • От редактора, Вячеслав Тихановский
  • «Отладка приложений на AnyEvent», Владимир Леттиев
    Отладка асинхронных приложений часто затруднена из-за нелинейного характера выполняемого кода, когда ошибки проявляются под нагрузкой или в каких-то исключительных трудновоспроизводимых ситуациях. Привычные инструменты могут быть неудобны и неинформативны. Если приложение построено на основе AnyEvent, то для него уже существуют готовые рецепты отладки.
  • «Операторы Perl 6. Часть 1», Андрей Шитов
    Обзор префиксных, постфиксных и инфиксных операторов Perl 6
  • «Метаоператоры в Perl 6», Андрей Шитов
    Рассмотрены доступные в языке метаоператоры — операторы, расширяющие синтаксические возможности языка, используя другие операторы
  • «Обзор CPAN за апрель 2015 г.», Владимир Леттиев
    Рубрика с обзором интересных новинок CPAN за прошедший месяц.
  • «Интервью с Сюзанной Шмидт», Вячеслав Тихановский
    Сюзанна Шмидт (sushee) — политолог, которая стала Perl-программистом

Темы: PragmaticPerl

PerlNews.Ru: Улучшения в производительности Hash::Ordered

Hash::Ordered — это модуль для создания упорядоченных хешей, ключи в которых хранятся в заданном порядке. Поскольку модуль написан на чистом Perl, а упорядоченные хеши --- это объекты, операции над которыми производятся с помощью методов, то подобный хеш работает медленнее, чем обычный хеш. Такова цена сохранения упорядоченности хеша.

Как сообщает Дэвид Голден в новой версии 0.009 сделана оптимизация, которая в некоторых случаях значительно ускоряет работу с упорядоченными хешами. Было проведено сравнение производительности между версиями Hash::Ordered 0.002 и 0.009. Для наглядности представлен график сравнения:

Бенчмарк Hash::Ordered

Виден рост по многим тестам, особенно выросла производительность при удалении в хеше с большим числом элементов. Практически не изменилась скорость замены элементов, несколько снизилась скорость добавления (за счёт проверки, что ключ — это строка, а не ссылка).

Темы: CPAN benchmark

Воскресенье, 26 апреля

PerlNews.Ru: AllPerlBooks.com — крупнейший каталог книг о Perl

Появился новый сайт AllPerlBooks.com, который является крупнейшим каталогом, содержащим информацию обо всех когда-либо напечатанных книгах о Perl на различных языках мира. Цель сайта показать как много книг о Perl было выпущено, начиная с момента создания языка, и продолжает выпускаться по сей день. На данный момент в каталоге есть данные о 354 книгах и ежедневно каталог пополняется всё новыми экземплярами. К окончанию β-тестирования ожидается около 500 книг. Автором проекта является Андрей Шитов.

Сайт позволяет найти нужные книги по имени автора, издательству, году выпуска, языку, а также теме, например, биоинформатика или регулярные выражения.

Если у вас есть книга, которая отсутствует в каталоге, вы можете добавить информацию о ней на специальной странице, указав данные издания и отсканированную обложку.

Темы: books

Суббота, 25 апреля

perl | Misc: Google Chrome и Secure Preferences

На нашем форуме и не только, с некоторой периодичностью люди интересуются алгоритмом генерации "защитного кода" в файле Secure Preferences для браузера Google Chrome. Зачем он браузеру? Этот код используется для проверки целостности настроек расширений и некоторых других параметров, проще говоря - HMAC. Зачем он людям? Вероятно, это необходимый этап для тихой установки расширений или изменения […]

Четверг, 23 апреля

Сообщество ru_perl в LiveJournal: Mojo POST

Хелп миииии. Уже не понимаю что происходит.

Имеется приложение. Mojo из темплейтов генерит страницу, на ней две формы. Каждая форма прикручена к своему контроллеру.

Роуты

   $r->get('/')->to('example#index')->name('index');
    $r->any('/form')->via('post')->to('example#check_form');
    $r->any('/message')->via('post')->to('example#message');

Контроллер message:

my $self = shift;

my ($name, $email, $subject, $message) = $self->req->body_params->param(['name', 'email', 'subject', 'message']);

 if (( defined $name) && ( defined $email ) && ( defined $subject ) && ( defined $message )){
   
 $self->flash(success_send_message => "Ваше сообщение отправлено, мы свяжемся с вами в ближайшее время.");
 $self->redirect_to('/#message');

  }else{
    
 $self->flash(error_send_message => "Ошибка отправки сообщения");
 $self->redirect_to('/#message');

}

Данные в контроллер не приходят. Что я делаю не так? Спасибо.

Вторник, 21 апреля

Хабрахабр: Метки / perl: Запоминаем просмотренные видео на youtube




Интро


Столкнулся с тем, что youtube.com «забывает» видео, которые я просмотрел.
Приходится смотреть много образовательных каналов, а потом вспоминать, видел я это или нет.
Посмотрел какую-нибудь лекцию и через несколько дней (месяцев, лет) статус "просмотрено" пропадает.
Или, наоборот, посмотришь 2 минуты какой-нибудь лекции, ляжешь спать, а на утро лекция имеет статус «просмотрено».

Вот и решил взять под контроль информацию о просмотрах на youtube в свои руки.
И хранить эту информацию вне зависимости от ютюба.
Если у кого-нибудь есть нужда в такого рода запоминании просмотров, то добро пожаловать под кат.
Подробности

PerlNews.Ru: Завершился Берлинский Perl QA-хакатон 2015

Perl QA-хакатон — это ежегодное мероприятие, на котором собираются люди, так или иначе занимающиеся вопросами обеспечением качества Perl-кода: тестирование, пакетирование, CPAN и связанные системы. В этом году хакатон проводился с 16 по 19 апреля в Берлине. В нём приняли участие более 30 известных Perl-хакеров, в том числе Рикардо Сигнес, Тацухико Миягава, Дэвид Голден, Лион Тиммерманс, Питэр Рэббитсон.

perlqah2015

Читать дальше →

Темы: Perl hackaton

PerlNews.Ru: Выпущен Perl 5.21.11

Вышел последний релиз Perl ветки 5.21 для разработчиков. Новый релиз содержит изменения в порядка 1 700 строках исходного кода, не считая изменений в автогенерируемых файлах. Полный список изменений можно прочесть в perldelta. Новый стабильный релиз 5.22 ожидается в мае.

Читать дальше →

Темы: Perl

Четверг, 16 апреля

PerlNews.Ru: Вышли обновления безопасности MovableType 6.0.8 и 5.2.13

Вышли обновления, исправляющие ошибку в безопасности, для известной системы управления контентом MovableType версии 6.0.8 и 5.2.13 (и в частности Movable Type Open Source). В отчёте MovableType.com указано, что уязвимости подвержены ветки 6.0.x и 5.2.x.

Джон Лайтсей обнаружил уязвимость инъекции строки формата в шаблоны локализации Movable Type. Неаутентифицированный удалённый пользователь получает возможность выполнить произвольный код на сервере с правами учётной записи процесса веб-сервера. Проблема получила идентификатор CVE-2015-0845

Темы: security

Суббота, 11 апреля

PerlNews.Ru: Выложены доклады moscow.pm от 5 марта 2015

На официальном YouTube-канале moscow.pm появились записи докладов группы от 5 марта 2015 года, посвящённые Perl 6:

  • «Perl 6 2.0», Андрей Шитов
  • Twitter Button from twitbuttons.com
  • Подписка по email

Приборы