Выпуск 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.

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

В новой версии драйвера для MySQL исправлено несколько ошибок, в том числе крах при использовании опции mysql_auto_reconnect в случае выполнения запроса в момент, когда сервер недоступен.

В новом релизе суперклея для веб-фреймворков и веб-серверов Plack присутствует исправление, касающееся безопасности. Plack::App::File удалял все завершающие слэши из запрошенного пути, что при традиционном использовании Plack::Middleware::Static давало возможность злоумышленнику обходить существующие правила исключений для нестатических страниц.

После трёхлетнего перерыва выпущена новая версия модуля PPI для разбора и анализа перл-кода. Проект переехал на гитхаб, исправлены некоторые ошибки парсера и документации, снято ограничение на размер обрабатываемого файла в 1 МБ.

В CGI::Emulate::PSGI исправлена ошибка при работе с Perl 5.20: в случае когда CGI-скрипт делал какой-либо вывод на STDERR, возникали рекурсия и аварийное завершение процесса.

Обновлена реализация движка JavaScript на чистом перле. Новая версия теперь успешно работает на Перл 5.20.

В версии 0.22 Plack::Middleware::Session появилось предупреждение, а в версии 0.23 — фатальная ошибка в случае, если используется Plack::Session::Middleware::Cookie без параметра secret. Так как по умолчанию в куках используется сериализация Storable, отсутствие secret позволяет злоумышленнику проводить атаку с возможностью выполнения кода на стороне сервера.

В новом релизе драйвера MongoDB теперь генерирует исключение, если в BSON (де)кодируются строки с некорректным UTF-8.

Исправлена критическая уязвимость в веб-сервере Pinto::Server. Запрос с использованием /../ в пути позволял получать файлы за пределами корневого каталога репозитория.

Новая версия модуля Net::SSLeay выпущена под лицензией Perl Artisitic License 2.0, в то время как раньше модуль имел лицензию OpenSSL. Это важное изменение снимает ограничение на возможность включения модуля в состав базового дистрибутива перла.

Обновлённый Perl::Critic теперь требует последнюю версию PPI. Обновлены и сделаны более строгими и некоторые другие зависимости.

В составе новой версии дистрибутива Scalar-List-Utils появился новый модуль Sub::Util, в который был перенесён метод set_prototype, а также появились функции subname и set_subname для, соответственно, получения и задания имени подпрограммы. Теперь можно выкидывать Sub::Name и Sub::Identify

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


Постепенная автоматизация в примерах | Содержание | Интервью с Куртисом “Ovid” По
Нас уже 1393. Больше подписчиков — лучше выпуски!

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