Выпуск 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 | Содержание | Интервью с Анатолием Шарифулиным →