Выпуск 19. Сентябрь 2014
← Постепенная автоматизация в примерах | Содержание | Интервью с Куртисом “Ovid” По →Обзор CPAN за август 2014 г.
Рубрика с обзором интересных новинок CPAN за прошедший месяц.
16 августа 2014 года впервые отмечался день CPAN. Многие годы день рождения CPAN отмечали 26 октября, когда был сделан официальный анонс CPAN. Neil Bowers вместе с Philippe Bruhat предложили отметить дату 16 августа как день CPAN, поскольку именно 16 августа 1995 года Andreas König загрузил на CPAN первый модуль (Symdump
1.20) через интерфейс PAUSE. За прошедшие 19 лет с этого момента ещё около 6’500 разработчиков выпустили более 35’000 дистрибутивов с 230’000 модулями.
День CPAN предлагалось отметить выпуском новых модулей, исправлением ошибок в своих или чужих модулях, написанием статьи или осуществлении пожертвования фонду Перл.
Связано ли это с днём CPAN или нет, но в августе произошло необычно большое пополнение в Games
:
Games::FrogJump — забавная консольная логическая игра
Games::FrogJump
с прыгающими лягушками. Обладателям Перл 5.20 перед началом игры предварительно потребуется решить головоломку с ошибкойpush on reference is experimental
Games::ArrangeNumber — консольная игра «пятнашки»
Games::Hangman — консольная игра «виселица»
Games::Cellulo — консольная программа, реализация клеточного автомата (по мнению автора)
Game::Life::NDim — реализация классической игры Джона Конвея «Жизнь»
Games::Maze::SVG — генерация интерактивных лабиринтов в SVG-формате
Статистика
- Новых дистрибутивов — 282
- Новых выпусков — 875
Новые модули
Дистрибутив Git::Reduce::Tests
содержит утилиту reduce-tests
, которая может быть полезна при smoke-тестировании git-репозитория, позволяя ограничить список запускаемых тестов. Например, когда модуль имеет множество тестов, запуск которых занимает продолжительное время, а требуется проверить изменение, покрываемое лишь какой-то частью тестов. Утилита создаёт ветку с урезанным набором тестов, позволяя сократить время работы смокера.
Ещё один модуль для генерации исключений. Необычен он своим интерфейсом, позволяя создавать исключение через вызов метода произвольного класса или объекта:
eval {
URI->throw::back("http://example.com");
};
if ( $@ && $@->{type} eq 'URI' ) {
# URI exception
...
}
Смахнув пыль с RFC 959, Graham Ollis реализовал модуль ftp-сервера и клиента на основе фреймворка обработки событий AnyEvent
.
Экспериментальный релиз нового драйвера Redis
для фреймворка Mojolicious
. Основные отличия от первой версии: поддержка синхронных операций, более одного соединения с сервером Redis и возможность обработки ошибок в функциях обратного вызова.
Модуль API::Instagram
позволяет использовать в ваших приложениях API сервиса Instagram. В качестве бэкенда для отправки веб-запросов используется модуль Furl.
Perl::Lint
— это реализация статического анализатора перл-кода на основе Compiler::Lexer
и Сompiler::Parser
, совместимого с Perl::Criric
. Теоретически подобный анализатор должен быть на порядок быстрее Perl::Criric
, работающего на базе PPI
. Это может позволить использовать его для проверки кода в реальном времени, например, в различных IDE.
Данный проект финансируется грантом фонда Перл и на данный момент находится в стадии активной разработки.
Event::Distributor
— это реализация шаблона проектирования издатель — подписчик (pub/sub) в рамках одного процесса. Модуль позволяет создавать события, на которые могут устанавливаться обработчики (синхронные или асинхронные), по генерации события вызываются все подписанные на данное событие обработчики.
App::Ringleader
— реализация прокси для редкоиспользуемых веб-приложений. Это своего рода компромиссное решение между подходом CGI (запуск на каждое обращение) и PSGI (постоянно работающее). Прокси запускает PSGI-приложение по запросу и по истечении периода неактивности (по умолчанию 60 минут) завершает приложение, чтобы не расходовать ресурсы впустую.
Как известно, функции в перле без явного return
всегда возвращают результат последней инструкции. В определённых ситуациях это может сыграть с программистом злую шутку, если он этого не учёл. Модуль Syntax::Feature::Void
дополняет синтаксис Perl ключевым словом void
, принудительно задавая пустой контекст:
use syntax qw( void );
sub foo {
void bar();
}
Это аналогично следующему коду:
sub foo {
bar();
return;
}
AnyEvent::Future
— небольшой модуль, который интегрирует модуль Future
с AnyEvent
, позволяя оборачивать функции AnyEvent
в Future
-объекты, используя все его возможности.
Test::Kantan
— новый фреймворк тестирования в соответствии с парадигмой Behavior Driven Development (разработка, основанная на поведении/функционировании). Поддерживаются три типа описания тестов: стиль RSpec/Jasmine, Given-When-Then стиль и старый добрый Test::More.
Обновлённые модули
- DBD::mysql 4.028
В новой версии драйвера для MySQL исправлено несколько ошибок, в том числе крах при использовании опции mysql_auto_reconnect
в случае выполнения запроса в момент, когда сервер недоступен.
- Plack 1.0031
В новом релизе суперклея для веб-фреймворков и веб-серверов Plack присутствует исправление, касающееся безопасности. Plack::App::File
удалял все завершающие слэши из запрошенного пути, что при традиционном использовании Plack::Middleware::Static
давало возможность злоумышленнику обходить существующие правила исключений для нестатических страниц.
- PPI 1.218
После трёхлетнего перерыва выпущена новая версия модуля PPI
для разбора и анализа перл-кода. Проект переехал на гитхаб, исправлены некоторые ошибки парсера и документации, снято ограничение на размер обрабатываемого файла в 1 МБ.
- CGI::Emulate::PSGI 0.19
В CGI::Emulate::PSGI
исправлена ошибка при работе с Perl 5.20: в случае когда CGI-скрипт делал какой-либо вывод на STDERR
, возникали рекурсия и аварийное завершение процесса.
- JE 0.62
Обновлена реализация движка JavaScript на чистом перле. Новая версия теперь успешно работает на Перл 5.20.
В версии 0.22 Plack::Middleware::Session
появилось предупреждение, а в версии 0.23 — фатальная ошибка в случае, если используется Plack::Session::Middleware::Cookie
без параметра secret
. Так как по умолчанию в куках используется сериализация Storable
, отсутствие secret
позволяет злоумышленнику проводить атаку с возможностью выполнения кода на стороне сервера.
- MongoDB v0.704.5.0
В новом релизе драйвера MongoDB теперь генерирует исключение, если в BSON (де)кодируются строки с некорректным UTF-8.
- Pinto 0.09995
Исправлена критическая уязвимость в веб-сервере Pinto::Server
. Запрос с использованием /../
в пути позволял получать файлы за пределами корневого каталога репозитория.
- Net::SSLeay 1.66
Новая версия модуля Net::SSLeay
выпущена под лицензией Perl Artisitic License 2.0, в то время как раньше модуль имел лицензию OpenSSL. Это важное изменение снимает ограничение на возможность включения модуля в состав базового дистрибутива перла.
- Perl::Critic 1.122
Обновлённый Perl::Critic
теперь требует последнюю версию PPI
. Обновлены и сделаны более строгими и некоторые другие зависимости.
- Scalar-List-Utils 1.40
В составе новой версии дистрибутива Scalar-List-Utils
появился новый модуль Sub::Util
, в который был перенесён метод set_prototype
, а также появились функции subname
и set_subname
для, соответственно, получения и задания имени подпрограммы. Теперь можно выкидывать Sub::Name
и Sub::Identify
…
← Постепенная автоматизация в примерах | Содержание | Интервью с Куртисом “Ovid” По →