Выпуск 25. Март 2015

Обзор CPAN за февраль 2015 г. | Содержание

Интервью с Владимиром Леттиевым

Владимир Леттиев (crux) — постоянный автор журнала, модулей на CPAN, основатель perlnews.ru

Как и когда научился программировать?

Все проходили основы программирования на уроках информатики в школе. Когда я учился в школе, у нас стоял класс Корветов. Нас учили рисовать на бумажке блок-схемы алгоритмов, а потом реализовывать их на Бейсике. Для меня компьютеры всегда воспринимались как чудо техники и прогресса, о которых я ещё вчера читал в фантастических рассказах, и вот они уже есть в школах и даже в продаже в магазинах электроники.

Классе в 7-м у меня появился мой первый компьютер Дельта-С (клон ZX Spectrum). Там загружался сразу REPL с Бейсиком, поэтому поневоле любой пользователь компьютера начинал программировать. Сначала я только играл в игры. Подавляющее число игр имело графическую заставку, на которой красовалась подпись «Cracked by Bill Gilbert». Мне тоже захотелось крякать игры. Где-то за 4 месяца я успел купить и зачитать до дыр книги по бейсику и ассемблеру Z80. Первой взломанной игрой оказалась игрушка «River Rescue», где я, исследуя дизассембированный код, нашёл инструкцию по декременту счётчика жизней и заменил его пустой операцией. Потом по всем правилам оформил бейсик-загручик, поместив код на строку 0 и закрыв его от взгляда трюком с цветом фона. Поправил в графическом редакторе заставку на «Cracked by Vladimir Lettiev» и записал на кассету. Вскоре компьютер сгорел от разряда статического электричества, и на этом карьера юного хакера оборвалась…

Какой редактор используешь?

Сейчас я использую Vim. Как и многие я был в шоке от первого знакомства с vi. Какая-то команда, запущенная в рутовом шелле открыла мне конфигурационный файл в этом редакторе. Оно пищало, мигало и запортило мне конфиг, прежде чем я смог убить его kill’ом в соседнем терминале.

Сначала редактировал в mcedit, так как он был похож на Far, который я использовал под Windows. Пробовал nano, joe, но потом всё-таки сел и изучил vim. И вот лет 10 использую только vim. Из плагинов использую только Nerdtree, из тем предпочитаю desert или wombat256mod.

Доводилось также сделать целый проект в Padre IDE. Адаптировал своё поведение так, чтобы он не падал и, в принципе, был доволен им. Но, в любом случае, GUI-инструменты тяжело использовать через ssh-соединение, поэтому удобнее vim вряд ли что-то можно придумать.

Как и когда познакомился с Perl?

Кажется это был 2002 год. После окончания университета я остался там работать сисадмином и заодно учился в аспирантуре. Одной из первых задач, которая возникла передо мной, стало создание учёта интернет-трафика пользователей. Мы использовали прокси-сервер Squid, и нужно было распарсить лог и выполнить расчёты. Я скопировал файл в несколько гигабайт на свой компьютер. В университете мы изучали Паскаль, поэтому я написал на Паскале программу, проверил её на паре строчек лога, а потом запустил обработку всего файла. После 15 минут ожидания я подумал, что что-то тут не так. Мой коллега, который в то время писал cgi-скрипты для веб-сайта университета, посоветовал попробовать распарсить лог Перлом, т.к. он здорово подходит для работы с текстовыми файлами.

Я взглянул на пример кода и был неприятно удивлён, что для переменных использовалась закорючка $, почти как строковые переменные в древнем Бейсике ZX Spectrum. Но, тем не менее, я изучил синтаксис по образцу какой-то готовой программы, слепил простой цикл, который построчно читал файл, сплитил строку и проводил суммирование. Запустил программу и подумал, чем бы заняться, пока она работает, но каково было моё удивление, когда программа завершилась в считанные секунды. Это был шок. С тех пор использую Perl для любых задач с неизменным успехом.

С какими другими языками интересно работать?

Javascript. Это язык фронтенда, и его придётся изучить в любом случае, если вы пишете для веба. Jquery даже делает его немного похожим на Perl (что не удивительно, т.к. создатель фреймворка был перловиком).

Язык С прекрасен. Он позволяет писать быстрые XS-подпрограммы для Perl.

Что, по-твоему, является самым большим преимуществом Perl?

Perl позволяет очень быстро прототипировать программы. Можно быстро начать писать код, потом постепенно трансформировать программу, разнося код по модулям/методам, когда кодовая база начнёт расти.

Как-то я дорабатывал реализацию одного сетевого протокола на C, и это заняло уйму времени, особенно на отладке. Потом передо мной встала задача обрабатывать получаемые данные прикладного уровня и записывать их в СУБД. Это уже явно требовало языка более высокого уровня. Я за пару недель переписал реализацию протокола на чистом Перле в отдельный модуль и продолжил реализовывать логику приложения. Уровень сложности и время разработки при переходе снизились на порядок.

Ещё Perl универсален. На нём можно писать короткие однострочники, скрипты, модули и огромные проекты. Функциональный стиль, ООП, DSL — Perl можно адаптировать под любой стиль программирования. Perl позволяет менять свой синтаксис, что позволяет на базе Perl строить надстройки. Посмотрите на Rex — это отличный пример как можно писать сжатые сценарии на языке более высокого уровня на основе Perl.

Что, по-твоему, является самой важной особенностью языков будущего?

Период полураспада. Мне кажется, что все языки будущего будут появляться и исчезать. Вечным будет только C, так как на нём и будут писать новые языки.

Что думаешь о будущем Perl?

Я смотрю на индекс TIOBE и особо не волнуюсь за будущее Perl. Perl есть везде. На любой платформе, в дистрибутиве любой юниксподобной системы его всегда можно будет найти.

Perl по-настоящему свободный проект и принадлежит сообществу. Нет одной компании, узурпирующей направление развития. Сообщество очень внимательно и дружелюбно к новичкам. Любой человек может влиться в разработку и получить максимальную поддержку. Perl имеет чёткий план регулярных релизов и здоровую ротацию ответственных за релизы. Такая организация даёт +100500 к Viability.

Мне бы очень хотелось увидеть в будущем улучшенную организацию CPAN. Мне кажется, что очень не хватает своего GPG-сервера ключей для CPAN-авторов, которыми бы можно было подписывать релизы.

Просто напрашивается наличие аналога сервиса travis-ci, заточенного под Perl. Как обходной вариант есть специальный хелпер, но если бы удалось создать специализированную систему, которая объединит разрозненные системы Perl QA cpantesters, coverage и другие метрики исходного кода, то это было бы просто фантастикой.

Почему пишешь статьи для Pragmatic Perl? Откуда берешь идеи?

Однажды я написал статью по настройке Postfix и LDAP и опубликовал её на одном ресурсе. Через полгода я по этой статье как в первый раз настраивал новый сервер. Тогда же я и осознал, что любые действия необходимо записывать, т.к. память это самая ненадёжная штука.

Когда начал писать статьи для Pragmatic Perl я понял, что можно изучать новые вещи, до которых никак не доходили руки, а статья — это отличный повод, а заодно и шпаргалка на будущее. Так, например, я разбирался с DBIx::Class, который бы ни в жизни по другому бы не изучил. Поэтому я всем советую, если есть желание что-то выучить, то учите и параллельно пишите конспект. Из конспекта получится хорошая статья, которую можно опубликовать и получить плюс в карму. Все ваши ошибки подметят и поправят — это уже избавит вас от прохода по граблям. Win-Win.

Что касается источников идей, то их два. Первый — это публикации в блогах, новостях, рассылках. Если проскакивает какая-то интересная тема, я могу сделать пометку и развить её в статью. Второй источник — CPAN. Готовя обзор CPAN, я просматриваю список из порядка 1000 модулей с их описанием и изменениями. Какой-то модуль или что-то, связанное с ним может стать предметом для статьи.

Чем так заинтересовал HTTP2, что даже написал реализацию Protocol::HTTP2? На какой стадии находится этот модуль? Что такое Shuvgey?

В начале 2014 года я прочитал книжку Ilya Grigorik «High-Performance Browser Networking». Там в частности рассказывали о протоколе HTTP2, который был создан на основе протокола SPDY от Google. Я и раньше слышал о нём, но теперь прочитал о том, как он устроен. Это показалось мне интересным и я подписался на рассылку ietf-http-wg, в которой обсуждался черновик стандарта нового протокола HTTP2. Довольно известные в мире веба люди предлагали новые фичи, делились своим мнением, звучали и критические отзывы, но в целом дискуссия была продуктивной.

Вскоре я уже знал про все существующие реализации и видел, что одна из существующих реализаций на Perl’е уже безнадёжно устарела (по факту она толком и не работала). Взглянув на код я понял, что там идёт привязка к IO::Async, а мне было интересно получить что-то работающее без привязки к конкретным событийным фреймворкам. Так и началась работа над Protocol::HTTP2.

Мне очень понравился интерфейс Protocol::WebSocket, я взял его как основу, но потом даже ещё больше упростил. Первый работающий релиз Protocol::HTTP2 вышел уже в мае 2014 года, где был реализован 12-й черновик спецификации протокола. После этого спецификация менялась уже только в сторону упрощения: с каждым новым черновиком я просто удалял куски кода.

Сейчас работа над спецификацией HTTP2 официально завершена. Вот уже на днях ожидается официальный номер RFC, после чего начнётся, нет, не правильно, продолжится его экспансия в веб. Вот вам простой факт: Firefox 35 по умолчанию поддерживает http2 (черновик 14), за месяц его функционирования обнаружили, что 9% соединений к сайтам происходило по http2. Это говорит о том, что в отличие от ipv6, http2 довольно быстро станет доминирующим протоколом веба.

Protocol::HTTP2 в целом работоспособен, там есть несколько некритичных недоделок (например, приоритеты потоков), которые можно будет закрыть, как только на них появится минимальный спрос.

В качестве примера реализации веб-сервера на основе Protocol::HTTP2 я создал Shuvgey — асинхронный однопоточный PSGI веб-сервер на основе AnyEvent с поддержкой протокола http2. Он похож на Twiggy, только работает с http2 и может использовать TLS. Кстати, сайт проекта крутится именно на шувгее, что также даёт вам возможность оценить работоспособность серверной реализации http2. Чтобы его увидеть вам потребуется Firefox 35 или Chrome 40.

Вообще, Шувгей — это собирательное название нечистой силы у коми-зырян и коми-пермяков. Материализуется в виде сильного ветра, вихря. Это название мне показалось интересным, своеобразный ответ питоновскому Торнадо, а также дань карго-культу странных названий из национального фольклора.

Как возникла идея perlnews.ru? Как дела с посещаемостью, какие дальнейшие планы?

«Pragmatic Perl» — это отличное место, чтобы опубликовать уникальную статью с примерами кода и какими-то важными результатами. Но переводные материалы, короткие новости уже выходят за рамки формата. Персональный блог тоже плохое место для подобных вещей, так как если пост о том, как вчера стоял в очереди в регистратуру поликлиники, соседствует с новостью о том, что вышел новый Perl, и там такие-то улучшения, то это выглядит дико. Соответственно, требуется отдельный обезличенный тематический ресурс, специализирующийся на новостях.

Идея возникла в конце января, сайт заработал 2 февраля, 3 февраля его здорово пропиарили на форуме и в рассылке Pragmatic Perl, что дало 159 посещений 122 пользователей. Сейчас в среднем около 45 сеансов в день. Примерно 40 подписчиков по RSS. Треть посетителей приходит по ссылкам из твиттера, ещё треть, по всей видимости, добавила ресурс в закладки.

По статистике около 62% посещений из России, 13% Украина, 3,5% Беларусь, также немного Нидерланды, США, Германия, Таиланд. После того, как был опубликован пересказ интервью Рикардо Сигнеса подкасту rebuild.fm, пост заметил Миягава и написал в твиттере, что ему понравилось, прочитал его через Google Translate. Это вылилось в 23 хита из Японии, так что о русскоязычном новостном ресурсе о Perl узнали и в Японии.

В планах пока ничего экстраординарного. Думаю сделать опрос, чтобы выяснить, какие темы более интересны читателям, чтобы скорректировать приоритеты. Отвечать можно в комментариях к этому интервью :)

Как можно написать новость на perlnews.ru?

Думаю, что ресурс здорово выиграет, если на нём появится больше новостей от других авторов. Для этого потребуется лишь немного навыков работы с github.

Исходный код сайта доступен на github – perlnews.ru. Из данного репозитория с помощью Statocles генерируется статический сайт.

Чтобы добавить свою новость, исправить опечатку или внести новый ресурс в перечень полезных русскоязычных ресурсов, нужно форкнуть указанный выше репозиторий, внести изменения и отправить запрос на слияние (pull request). Более подробная информация есть в README.md.

Есть ли какие-то другие проекты, о которых хотел бы рассказать?

Есть проект реализации протокола TLS на чистом Perl Protocol::TLS, который на данный момент уже поддерживает версию TLS 1.2. Смысл проекта состоит в том, чтобы уйти от зависимости на OpenSSL, который развивается очень уж неспешно и консервативно. Попробуйте обновить libssl в каком-нибудь CentOS до свежих версий с поддержкой всех новых фич безопасности, шифров и последних версий протокола TLS. Это практически нереальный квест, так как практически всё современное программное обеспечение линкуется с libssl.

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

Где сейчас работаешь? Сколько времени проводишь за написанием Perl-кода?

Я работаю в крупной энергетической компании. Занимаюсь телекоммуникациями, поддержкой средств мониторинга и промышленных систем учёта.

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

Вне работы программирую на Perl в основном для своих открытых проектов на github. Но это происходит импульсивно, т.е. возникает вдохновение, пишешь код недели на пролёт, а потом выгораешь и ждёшь очередного озарения.

Стоит ли советовать молодым программистам учить сейчас Perl?

В первую очередь я бы посоветовал молодым ребятам обратить внимание на свободное программное обеспечение. Постарайтесь выбрать такие программы и окружение, которые являются свободными. Это может быть Linux или одна из свободных BSD-систем. Выбирайте любой свободный язык: Perl, PHP, Python, JavaScript и прочие. Свободный редактор Vim/Emacs/Eclipse. Свободный браузер: Firefox, Chromium и другие. Свободную СУБД: PostgreSQL/MySQL и подобные. Но без фанатизма (привет, Nvidia).

Это простое правило позволит вам не разочароваться в жизни и не попасть в кабалу к проприетарному вендору, от прихотей которого будет зависеть ваше профессиональное будущее.

Perl стоит выучить, даже если вы не программист. Он позволит вам запросто решать различные задачи.

Вопросы от читателей

Надолго ли хватит сил на perlnews.ru?

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

Но было бы ещё интереснее, если бы появились другие авторы, тогда каждая новость могла бы прорабатываться более тщательно, что повысило бы качество материала для посетителей.

Что значит crux?

В студенчестве я играл в одной блэк-метал-банде местной андерграунд-сцены, мы даже записали один альбом, который назвали «crux anasta» (да, с опечаткой, правильно пишется «crux ansata»), это один из главных символов древних египтян. Позже, когда мне нужно было придумать свой первый рабочий логин для linux, я взял этот прикольный короткий крукс.

Вячеслав Тихановский


Обзор CPAN за февраль 2015 г. | Содержание
Нас уже 1393. Больше подписчиков — лучше выпуски!

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