Среда, 29 июля

Сообщество ru_perl в LiveJournal: хелп!

Что-то я торможу и не могу измыслить regular expression, которое удалило бы из текста все пробелы, кроме тех, за которыми следует квадратная скобка
примерно, так
Input: ab cd ef [gh ij [kl mn
Output: abcdef [ghij [klmn

Заранее спасибо!

Четверг, 23 июля

PerlNews.Ru: Camelcade — плагин для поддержки Perl 5 в IntelliJ IDEA

Вышла бета-версия 0.34 плагина Camelcade для известной среды разработки IntelliJ IDEA, который обеспечивает поддержку Perl 5. Несмотря на бета-статус утверждается, что плагин обеспечивает более качественную поддержку Perl 5 проектов, чем редакторы Sublime или NotePad++.

Camelcade

На данный момент поддерживаются следующие возможности:

  • Анализ и разбор Perl 5 кода (не нативный, поэтому возможны баги).
  • Поддержка форматов Perl 5, POD, встроенный Perl 5 (например, шаблоны Mojolicious).
  • Выбор Perl 5 интерпретатора для проектов.
  • Подсветка синтаксиса (цветовая схема из NotePad++).
  • Поиск парных скобок, сворачивание кода.
  • Контекстные действия.
  • Автодополнение имён переменных, подпрограмм, пакетов. Навигация и рефакторинг.
  • Инспекция кода, поиск ошибок.
  • Интеграция с IntelliLang для поддержки других языков во встроенных документах внутри исходного кода.

Темы: Perl IDE

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

pp Выпуск 29. Июль 2015

http://pragmaticperl.com/issues/29

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

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

- R(?)ex на практике, Денис Федосеев
В жизни каждого человека настает момент, когда ему становится лениво делать одно и то же на удаленных серверах и хочется автоматизации
http://pragmaticperl.com/a/67466ac8

- Инструменты для поиска зависимостей в скрипте, Наталья Савенкова
Практическая статья про инструменты анализа зависимостей
http://pragmaticperl.com/a/afc82804

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

- Интервью с Дэвидом Голденом, Вячеслав Тихановский
Дэвид Голден (David Golden) — автор многих модулей на CPAN, текущий разработчик официального драйвера MongoDB
http://pragmaticperl.com/a/efd1add7

Среда, 22 июля

Сообщество ru_perl в LiveJournal: PrePAN

А что, %Subj% совсем помер беззубый стал?

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

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

Pragmatic Perl 29

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

Темы: PragmaticPerl

Вторник, 21 июля

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

20 июля выпущен второй релиз Perl ветки для разработчиков 5.23. Данный выпуск состоялся спустя месяц после релиза 5.23.0 и содержит изменения в 8 400 строках исходного кода.

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

Темы: Perl

Суббота, 18 июля

Сообщество ru_perl в LiveJournal: dBase7

Я опять ослеп? Первое, что находится - XBase (CAM::DBF ещё древней). По интерфейсам именно то что нужно, но некоторые вещи он просто не понимает (например, имена полей длинней 11 символов, что для dBase 7 обычное дело).

Воскресенье, 5 июля

Мини-портал Perl на Opennet: Увидел свет RPerl 1.0, компилятор кода Perl5

После двух с половиной лет разработки состоялся релиз компилятора для языка программирования Perl - RPerl 1.0. RPerl получает на входе perl5-код (скрипт или модуль), транслирует его в представление на языке С++, которое следом конвертируется в XS-код силами модуля Inline::CPP. Полученный код может использоваться в высокоуровневом Perl5-коде как обычный модуль с XS-реализацией. В конечном счете XS-код транслируется в машинный код С++-компилятором. Исходные тексты проекта распространяются под лицензиями Artistic и GPL, т.е. RPerl распространяется на тех же условиях, что и интерпретатор Perl5.

Суббота, 27 июня

PerlNews.Ru: Постфиксное разыменование больше не экспериментальное

Принят патч, который убирает статус экспериментальной у возможности постфиксного разыменования. Напомним, что постфиксное разыменование впервые появилось в Perl 5.20 и позволяет использовать новый синтаксис для разыменования:

  $array_ref->@*; # вместо @{ $array_ref }
$hash_ref->%*;  # вместо %{ $hash_ref }
...

С выходом Perl 5.24, больше не потребуется использовать конструкцию

  no warnings "experimental::postderef";

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

  use feature "postderef", "postderef_qq";

или просто

  use v5.24;

Темы: Perl

Понедельник, 22 июня

Меркантильный гуру: perl and utf8 examples

Случайно нашел в гугле прекрасное - https://github.com/evostrov/perl_utf8_cheat_sheet/blob/master/utf8_cheat_sheet.pl

Суббота, 20 июня

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

20 июня выпущен первый релиз Perl новой ветки для разработчиков 5.23. Данный выпуск состоялся спустя три недели после релиза 5.22.0 и содержит изменения в 86 000 строках исходного кода.

Основные изменения:

  • Поддержка стандарта Юникод 8.0.
  • Класс символов /\C/ в регулярных выражениях больше не поддерживается.
  • chdir('') или chdir(undef) больше не меняет текущий каталог на домашний каталог и приводит к фатальной ошибке. Используйте просто chdir().
  • Макрос PadlistNAMES теперь снова lvalue (решена одна из проблем для работы модуля Coro).
  • Обновлены некоторые базовые модули, в том числе POSIX, с экспериментальной поддержкой NaN payload API (из последнего черновика стандарта ISO C API).

Темы: Perl

Пятница, 19 июня

Чтобы не искать: Логирование чего угодно в Perl



Написал на Хабре статью про логирование в Перле с помощью модуля Log::Any.

Хабрахабр: Метки / perl: Логирование чего угодно в Perl


Проблема выбора

Для логирования сообщений Перл предлагает несколько готовых решений. Все они, как водится, размещены на CPAN'е. По запросу «log» можно найти кучу модулей на все случаи жизни.

Однако, среди всех этих модулей есть один особенный, называется он Log::Any.

Особенность этого модуля для логирования заключается в том, что он не занимается, собственно, логированием. Модуль Log::Any предоставляет программе (и программисту) универсальное API для обращений к другим модулям, которые занимаются непосредственно логированием.

Если вас мучает проблема выбора способа логирования в Перле — эта статья для вас.
Читать дальше →

Мини-портал Perl на Opennet: Вышел mod_perl 2.0.9

После двух лет разработки доступна новая версия Apache-модуля mod_perl 2.0.9. Mod_perl позволяет интегрировать интерпретатор Perl в http-сервер Apache и увеличить скорость выполнения динамического контента на Perl за счёт кэширования его байткода, а также обеспечить низкоуровневый доступ perl-скриптов ко внутренностям Apache, в том числе даёт возможность создавать модули на языке Perl, управлять конфигураций, обрабатывать все стадии прохождения запроса.

Вторник, 16 июня

Сообщество ru_perl в LiveJournal: mojo hypnotoad ssl

Здравствуйте люди. Затачиваю бложик себе на mojo. Столкнулся с тем что мне нужно каким-то образом форму входа отдать по https протоколу, для бложика не столь важно, важно понять как реализовать такое, на будущее сгодится.

nginx:

server
{
listen 80;
server_name domen.ru www.domen.ru;
root<------>/var/www/domen/public/;
index<----->index.html;

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|pdf|ppt|txt|bmp|rtf|js)$ {
root /var/www/domen/public/;
expires 3d;
}

location / {
proxy_pass http://domen;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto "http";
}
}


Hypnotoad(domen.conf):

{
hypnotoad => {
listen => ['http://127.0.0.1:3000']
}
};


Я правильно понимаю, что в nginx надо добавлять конфиг для ssl, а пути указать как в главном конфиге а вот жабу как запускать? Запускать две жабы на разных портах? Делал ли кто такое, и куда рыть? Спасибо.

Воскресенье, 14 июня

Хабрахабр: Метки / perl: LIVR — «независимые от языка правила валидации» или валидация данных без «проблем»


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

Основные проблемы, которые встречаются в библиотеках валидации данных

Проблема №1. Многие валидаторы проверяют только те данные, для которых описаны правила проверки. Для меня важно, чтобы любой пользовательский ввод, который явно не разрешен, был проигнорирован. То есть, валидатор должен вырезать все данные для которых не описаны правила валидации. Это просто фундаментально требование.

Проблема №2. Процедурное описание правил валидации. Я не хочу каждый раз думать про алгоритм валидации, я просто хочу описать декларативно, как должны выглядеть правильные данные. По сути, я хочу задать схему данных (почему не «JSON Schema» — в конце поста).

Проблема №3. Описание правил валидации в виде кода. Казалось бы, это не так страшно, но это сразу сводит на нет все попытки сериализации правил валидации и использования одних и тех же правил валидации на бекенде и фронтенде.

Проблема №4. Валидация останавливается на первом же поле с ошибкой. Такой подход не дает возможности подсветить сразу все ошибочные/обязательные поля в форме.

Проблема №5. Нестандартизированные сообщения об ошибках. Например, «Field name is required». Такую ошибку я не могу показать пользователю по ряду причин:

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

То есть, нужно возвращать не сообщение об ошибках, а стандартизированные коды ошибок.

Проблема №6. Числовые коды ошибок. Это просто неудобно в использовании. Я хочу, чтобы коды ошибок были интуитивно понятны. Согласитесь, что код ошибки «REQUIRED» понятней, чем код «27». Логика аналогична работе с классами исключений.

Проблема №7. Нет возможности проверять иерархические структуры данных. Сегодня, во времена разных JSON API, без этого просто не обойтись. Кроме самой валидации иерархических данных, нужно предусмотреть и возврат кодов ошибок для каждого поля.

Проблема №8. Ограниченный набор правил. Стандартных правил всегда не хватает. Валидатор должен быть расширяемый и позволять добавлять в него правила любой сложности.

Проблема №9. Слишком широкая сфера ответственности. Валидатор не должен генерировать формы, не должен генерировать код, не должен делать ничего, кроме валидации.

Проблема №10. Невозможность провести дополнительную обработку данных. Практически всегда, где есть валидация, есть необходимость в какой-то дополнительной (часто предварительной) обработке данных: вырезать запрещенные символы, привести в нижний регистр, удалить лишние пробелы. Особенно актуально — это удаление пробелов в начале и в конце строки. В 99% случаев они там не нужны. Я знаю, что я до этого говорил, что валидатор не должен делать ничего кроме валидации.

3 года назад, было решено написать валидатор, который не будет иметь всех вышеописанных проблем. Так появился LIVR (Language Independent Validation Rules). Есть реализации на Perl, PHP, JavaScript, Python (мы на python не пишем — фидбек по ней дать не могу). Валидатор используется в продакшене уже несколько лет практически в каждом проекте компании. Валидатор работает, как на сервере, так и на клиенте. Читать дальше →

Вторник, 9 июня

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

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

Понедельник, 8 июня

Сообщество ru_perl в LiveJournal: Несколько вопросов про distribution перл-приложений.

Последний раз выкладывал в сеть что-то на перле лет 15 назад и это были одинокие скрипты ни от чего кроме Core не зависящие (много что отдавал заказчикам но там допустимо было отдать собранный вручную .tar.gz со всем нужным и инструкциями как развернуть, это другое).

А тут написал скрипт, которым хочу поделиться с общественностью, который мало того что зависит от всякого с CPAN так ещё и содердит свои модули. Правда, модули, которые "в комплекте" вообще не имеют смысла в отрыве от скрипта -- это не универсальные библиотеки, которые кто-то может захотеть использовать сам, а способ организации кода (что бы скрипт не был в 200 килобайтов).

Как такое правильно оформлять что бы всем было привычно?

Собственно, для Windows я тупо заверну в EXE-шник с помощью pp. Хотя тут тоже возникает одни вопрос.

А вот для Linux-дистрибутивов нужно же что-то что поставит его в систему как принято. Что нынче считается true? Старый Makefile.PL? Module::Build? Что-то ещё? И тут несколько вопросов:

  1. Всё, что я посмотрел, модуле-ориентированное. У меня модули играют очень вторстепенную роль. Есть что-то для приложений?
  2. Всё, что я посмотрел, хочет видеть модули в lib/${Module}/${Name}.pm. Как в таких условиях девелопить, ведь скрипт, лежащий в корне, нельзя запускать просто как perl script.pl -- модули не находятся! Чудовищно неудобно!
  3. В случае pp можно ли как-то просто опередлить, запущен скрипт из pp-сборки или просто так, что бы определить доставать данные из сборки или из /usr/local/share/appname? При этом надо уметь работать без PAR::* в "голом" виде.

PerlNews.Ru: Марк Леманн создал форк Perl: «stableperl»

Марк Леманн, также известный как schmorp, создатель библиотеки libev, AnyEvent и Coro, объявил о создании форка Perl под названием «stableperl».

Как известно, Марк постоянно конфликтовал с разработчиками Perl5 из-за регулярных нарушений обратной совместимости в новых релизах, а релиз Perl 5.22.0, который привёл к неработоспособности Coro, очевидно, стал последней каплей.

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

Темы: Perl facepalm

Суббота, 6 июня

Shoor/нал: Он и в третий раз ходил за ёлкой... И добыл её!

Давно хотел улучшить ильменский сайт, да всё руки не доходили. Уж подумывал и переписать совсем. Что только не пробовал — и тяжёлый перловый фреймворк Catalyst, и написанные на PHP системы управления сайтами — Друпал да ВордПресс. И всё никак не получалось дойти за какого-то осмысленного результата. В итоге всё свелось к переписыванию на Mojolicious::Lite — это всяко веселее, чем набор древних CGI-скриптов.

Начал в мае 2011 года — бросил. Подобрал в мае тринадцатого — снова бросил. Пришёл май пятнадцатого — снова взялся и как-то всё-таки дошёл до завершения первого этапа: воссоздал на моджо всю функциональность прошлого сайта, который был запущен ещё в 2003 году. Ну и перекрасил попутно. Свежий сайт да ещё и на новом железе с другими ОС и веб-сервером работает гораздо шустрее старого: отдаёт 50 страниц в секунду, а не две. Кстати, Друпал с ВордПрессом (правда, без нормального кэширования) работают ещё медленнее, чем старый сайт.

Новый сайт лежит на test.ilmeny.org, в выходные потестирую, в понедельник, наверное, запущу его вместо старого.

test.ilmeny.org

Если увидите на свежем сайте что-то неправильное — сообщите, пожалуйста.

P. S. Попутно выяснил: боевой режим в Mojoliciousназывается не production, как я почему-то думал, а deployment.

upd/14:40: мне тут товарищ подсказывает, что в Mojolicious всё-таки production, а deployment — это значение переменной окружения PLACK_ENV, которую выставляет Starman.

http://shoorick.ru/2015/06/06/test-ilmeny-org/

Пятница, 5 июня

Сообщество ru_perl в LiveJournal: Mojo, SQLite, DATATIME

Привет сообщество, кто-нибудь доставал дату из SQLite? Вот сама строка:

postime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

вот тут полный дамп: http://pastebin.com/dKe5H8CN

Достаю из таблицы post в моджо так:

% while( my $post = $cursor->next ){
$post->header;
$post->post;
$post->tags;
$post->postime->datatime; # ошибка
% }

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

Четверг, 4 июня

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

pp Выпуск 28. Июнь 2015

http://pragmaticperl.com/issues/28

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

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

- Анонс рязанского Perl-воркшопа — 2015, Илья Чесноков
Рязанский Perl Workshop 2015 — бесплатная конференция, посвященная языку программирования Perl, которая впервые проводится в Рязани.
http://pragmaticperl.com/a/cb27f7c0

- Анонс «Perl Mama» — 2015, Дмитрий Шаматрин
Таки первая одесская конференция по Perl — Perl Mama 2015.
http://pragmaticperl.com/a/c9f7f421

- Perl Golf на YAPC::Russia 2015, Андрей Шитов
Рассказ про соревнование Perl Golf, проходившее в течение двух дней на майской YAPC::Russia в Москве
http://pragmaticperl.com/a/ce83ac01

- Рефакторинг Legacy, Наталья Савенкова
Рефакторинг устаревшего кода в примерах
http://pragmaticperl.com/a/608808de

- Что нового в Perl 5.22, Андрей Шитов
Краткий обзор наиболее заметных изменений в свежем стабильном релизе перла
http://pragmaticperl.com/a/83c729af

- Полный список изменений в Perl 5.22.0, Владимир Леттиев
Перевод документа perl5220delta.pod на русский язык
http://pragmaticperl.com/a/f5d40b36

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

- Интервью с Рене Беккером, Вячеслав Тихановский
Рене Беккер (Renée Bäcker) — немецкий Perl-программист, выпускал журнал $foo, активно участвует в немецком Perl-сообществе
http://pragmaticperl.com/a/64dbde54

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

Выпущен релиз дистрибутива новой мажорной версии Perl для Windows Strawberry Perl 5.22.0.1.

Доступны msi-пакеты для установки: 32-битной и 64-битной версии.

Портабельные версии: 32-битная, 64-битная.

Новые версии содержат последнюю стабильную версию Perl 5.22.0. Кроме того, был обновлен обновлён тулчейн gcc 4.9.2 и mingw-w64 v4.0.2. Полная информация о релизах соотвественно 32 и 64.

К сожалению, msi-пакеты не подписаны, поэтому проверяйте sha1 отпечаток.

На данный момент известно о нескольких проблемах в релизах: сломан модуль IPC::Run, а в 64-битной сборке отсутствует Math::Pari вместе со всеми зависимостями.

Темы: Perl windows

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

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

Pragmatic Perl 28

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

Темы: PragmaticPerl

Среда, 3 июня

Мини-портал Perl на Opennet: Релиз языка программирования Perl 5.22.0

После года разработки представлена новая стабильная ветка языка программирования Perl - 5.22. При подготовке нового выпуска было изменено около 590 тыс. строк кода, изменения затронули 2400 файлов, в разработке приняли участие 94 разработчика.

Сообщество ru_perl в LiveJournal: DBIx::Class order_by

Доброго времени суток. Вот есть кусочек кода:

use Mojo::Base 'Mojolicious::Controller';
use POSIX qw(ceil);
use Data::Page;

sub index {
my $self = shift;
my $rs;
my $current_page = ($self->req->param('page') || 1);

if( $current_page > 1 ){
$rs = $self->db->resultset('Post')->search( undef, {
page => $current_page,
rows => 10
});
}else{
$rs = $self->db->resultset('Post')->search( undef, {
order_by => { -asc => 'colA' }, # Ошибка!!!
page => 1,
rows => 10
});
}
my $total_entries = $rs->pager->total_entries;
my $total_entries = (ceil($total_entries / 10) * 10) / 10;

$self->stash( current_page => $current_page );
$self->stash( total_entries => $total_entries );
$self->stash( cursor => $rs );
}

Пытаюсь отсортировать записи в БД, что-бы выводить на страницу последнюю добавленную запись, первой. C DBIx::Class только знакомлюсь, документация корявая, на ru.pm все спят. Интересует параметр: order_by => { -asc => 'colA' } Непонятно как он сортирует, и в какую сторону. На данный момент выдаёт ошибку. Спасибо заранее, если кто просвятит по этому вопросу.

PerlNews.Ru: Конференция «Perl Mama» 2015

25-26 июля 2015 года в Одессе впервые пройдет конференция «Perl Mama», посвященная языку Perl. Участие бесплатное.

Сайт конференции: perlmama.od.ua

Подать заявку на выступление: perlmama.od.ua/odessa2015/newtalk

Предположительная программа конференции:

  • 24 июля — preparty
  • 25 июля — конференция: основной день докладов, затем afterparty
  • 26 июля — конференция, затем afterparty

Темы: YAPC

Понедельник, 1 июня

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

1 июня 2015 года была выпущена новая стабильная версия языка программирования Perl 5.22.0. Разработка велась примерно 12 месяцев, начиная с Perl 5.20.0, и содержит примерно 590 000 изменённых строк среди 2400 файлов от 94 авторов.

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

Темы: Perl

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

PerlNews.Ru: Появились видеозаписи докладов YAPC::Russia 2015

На официальном YouTube-канале moscow.pm появились записи докладов YAPC::Russia 2015.

Темы: YAPC moscow.pm

PerlNews.Ru: Анонсирован Рязанский Perl Workshop 2015

15-16 августа 2015 года состоится первый в Рязани Перл воркшоп.

Конференция пройдет в офисе компании EPAM Systems по адресу г. Рязань, ул. Гоголя, д. 16.

Регистрация открыта на странице: event.yapcrussia.org/ryazan2015/

Подать заявку на выступление: event.yapcrussia.org/ryazan2015/newtalk

Предположительная программа конференции:

  • 15 августа — день докладов
  • 16 августа — совместный выезд на природу

Темы: YAPC

Понедельник, 25 мая

Записки программиста — Perl: Регулярные выражения в C++11 и парсинг логов Nginx

Ранее мы уже выясняли, что C++ никогда не умрет, и знать низкоуровневые вещи приходится, даже если фултайм пишешь на Scala. Поэтому я решил уделять некоторое время пописыванию небольших программок на C/C++. Тем более, что с тех пор, когда я активно этим делом увлекался, прошло уже лет семь-восемь и многое сильно изменилось. Так, например, в стандартной библиотеке [...]

Пятница, 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

Суббота, 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');

}

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

Мета

Поиск

Участники

Список участников в формате OPML OPML

Добавить сайт

По-другому

Приборы