Выпуск 32. Октябрь 2015

Развертывание Perl приложений при помощи Docker | Содержание | Интервью с Анатолием Шарифулиным

Обзор CPAN за сентябрь 2015 г.

Рубрика с обзором интересных новинок CPAN за прошедший месяц

Статистика

  • Новых дистрибутивов — 155
  • Новых выпусков — 920

Новые модули

Net::PhotoBackup::Server

Net::PhotoBackup::Server — это простая реализация сервера для бэкапа фотографий проекта PhotoBackup. Суть проекта в создании «домашнего» облака, т.е. сервера под вашим контролем, на котором располагается веб-приложение, принимающее для загрузки фотографии с ваших мобильных устройств. Существует также клиентское приложение для android с открытым исходным кодом, которая обеспечивает фоновое сохранение фотографий на ваш сервер. К недостаткам можно отнести то, что сервер пока не работает по https.

LibJIT

LibJIT — это обвязка к одноимённой библиотеке. Модуль позволяет создавать различные низкоуровневые функции во время исполнения программы, используя api библиотеки libjit.

DBI::Log

Модуль DBI::Log позволяет вести лог всех SQL-запросов, которые отправляются через интерфейс DBI. SQL-запросы вместе с данными выводятся на стандартный вывод ошибок, или, если определена переменная $DBI::Log::path, записываются в файл.

Image::JpegMinimal

Image::JpegMinimal позволяет создавать коллекцию миниатюр для набора изображений, при этом раздельно сохраняет jpeg-заголовок, который общий у всех изображений, и данные сильно сжатого изображения. После чего эти данные могут быть встроены в html-страницу, в которой небольшой js-код заменяет ещё незагруженные полноразмерные изображения встроенными увеличенными миниатюрами с эффектом размывания. Таким образом, можно увеличить первоначальную скорость загрузки сайта, которую наблюдает пользователь, что особенно актуально в случае медленных мобильных подключений, при этом полноразмерные изображения могут догружаться в фоне и постепенно заменять миниатюры.

MOP4Import

MOP4Import — это метаобъектный протокол для создания расширяемых Exporter-подобных классов. Если вам не требуется писать свою собственную реализацию Exporter, но интересно воспользоваться новым ООП-фреймворрком, то более полезными могут стать MOP4Import::Types и MOP4Import::Base::Configure. Например,

package My::Pkg {
    use MOP4Import::Base::Configure -as_base, [fields => qw /app data/];
}

my $pkg = My::Pkg->new( app => 'value' );
print $pkg->{app};  # 'value'
print $pkg->app;    # 'value'
print $pkg->{app1}; # ошибка -- поле не задано

Как видно в MOP4Import предпринята попытка реинкарнации использования прагмы fields, модуль даже содержит детальное предложение о современной практике использования этой прагмы.

Try::Tiny::Warnings

Try::Tiny::Warnings — это небольшое расширение для Try::Tiny, которое позволяет отлавливать не только фатальные ошибки, но и предупреждения.

try_warnings {
    warn "Первоe предупреждение!"
    warn "Следующее";
}
catch {
    print "Этот блок не будет исполнен, т.к. не было ошибок\n";
}
catch_warnings {
    print "Предупреждение: $_" for @_;
};

Image::Libpuzzle

Модуль Image::Libpuzzle — это обвязка к C-библиотеке libpuzzle. Модуль позволяет быстро определять являются ли два изображениями схожими, даже если одно было изменено в размере, пережато, изменены оттенки или добавлены незначительные изменения.

Mercury

Mercury — это брокер сообщений для WebSockets. Мercury может быть использован в случае, если используется веб-приложение, которое использует многопроцессную модель с несколькими рабочими процессами (воркерами), позволяя организовать пересылку сообщений между процессами. Таким образом, может быть организована и коммуникация по протоколу WebSocket между клиентами, даже если они подключены к различным серверным воркерам. Также присутствует поддержка широковещательной шины сообщений и модели pub/sub.

Обновлённые модули

IO::Socket::SSL 2.020

Новая версия модуля IO::Socket::SSL теперь поддерживает указание нескольких каталогов для параметра SSL_ca_path, который указывает где должны будет производится поиск сертификатов доверенных центров.

RPerl 1.100002

В сентябре вышел очередной значимый релиз альтернативного компилятора RPerl, транслирующий Perl-код в C++ и собирающий его в виде загружаемой xs-библиотеки. Как утверждает автор, в данной версии RPerl удалось собрать приложение-симмулятор солнечной системы N-Body, которое используется в системе бенчмарков Alioth Benchmark Game для ранжирования языков программирования по скорости. RPerl позволил запустить выполнение N-body со скоростью сравнимой с C++, уменьшив время исполнения с 19 минут до 13 секунд.

Term::ReadLine::Gnu 1.28

В новой версии Term::ReadLine::Gnu добавлена поддержка альфа-версии библиотеки Gnu Readline 7.0.

perl 5.20.3/5.23.3

В сентябре вышли два релиза perl: 5.20.3 — баг-фикс релиз предыдущей стабильной версии Perl и новый релиз для разработчиков 5.23.3.

В релиз 5.20.3 вошло несколько исправлений, включая поддержку сборки с помощью GCC 5, исправление краха при обработке eval { LABEL: }, исправление проблемы при использовании UTF-8 имён переменных в индексах массивов и для ограничителей встроенных документов, исправление фатальной ошибки, возникающей при попытке отлаживать Perl-программу, загружающую модуль threads/threads::shared.

Релиз 5.23.3 теперь поддерживает использование расширенных классов символов qr/(?[ ])/ в UTF-8 локалях, появилась поддержка платформы AmigaOS, исправлены несколько ошибок, например крах при обработке выражения BEGIN <>.

Mail::GPG v1.0.10

Обновлён модуль Mail::GnuPG для работы с зашифрованными и заверенными цифровой подписью почтовыми сообщениями. В новой версии исправлена потенциальная ошибка безопасности при декодировании почтовых адресов: ранее для конвертирования из бинарного формата к строке использовалась функция Encode::_utf8_on, т.е. просто устанавливался внутренний флаг, что строка в формате UTF-8, без какой-либо проверки на валидность кодовых последовательностей.

MongoDB 1.0.1

Вышел первый мажорный релиз официального драйвера MongoDB для Perl. Релиз содержит внушительное число изменений, в том числе несовместимых. Пользователям настойчиво рекомендуется ознакомится с документом MongoDB::Upgrading, чтобы детально ознакомиться с подробностями изменений. Из заметных изменений:

  • Не требуется компилятор, используются модули IO::Socket::SSL для Authen::SASL для поддержки SSL и SASL,
  • Замена Moose на Moo,
  • Использование исключений для индикации ошибок при вызове методов
  • Удалено большинство низко-уровневых функций

Image::PNG::Libpng 0.41

Image::PNG::Libpng — это обвязка к C-библиотеке libpng для работы с изображениями в формате PNG. В новой версии исправлена ошибка с использованием памяти, после её освобождения, что могло приводить к краху или повреждению данных.

Compress::Raw::Zlib 2.0.69

Обновлён модуль Compress::Raw::Zlib — низкоуровневый интерфейс к библиотеке сжатия данных zlib. В новой версии исправлено несколько ошибок, в том числе потенциальных ошибок в безопасности: переполнение буфера при копировании. Данные ошибки были найдены сканером безопасности Coverity.

DateTime::Locale 0.92

В сентябре вышло существенное обновление модуля DateTime::Locale — модуля поддержки локали для DateTime. Релиз основан на базе CLDR v28, до этого использовалась база от 2009 года, поэтому модуль претерпел существенные изменения в том числе и несовместимые. Если вы использовали этот модуль опосредовано через DataTime, то эти изменения скорее всего пройдут незаметно.

Владимир Леттиев


Развертывание Perl приложений при помощи Docker | Содержание | Интервью с Анатолием Шарифулиным
Нас уже 1393. Больше подписчиков — лучше выпуски!

Комментарии к статье