Выпуск 13. Март 2014

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

Интервью с Брено де Оливейра (Breno G. de Oliveira)

Брено де Оливейра (garu) — бразильский Perl-программист, автор многих модулей на CPAN, активный участник и организатор Perl-мероприятий, обладатель награды White Camel.

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

В 1990 году, когда мне было 8 лет, у меня появился отчим, который в качестве хобби программировал на BASIC. Я быстро этим заинтересовался и начал приставать к нему с распросами о том, как сделать простые и незамысловатые штуки типа напечатать имя пользователя сто раз или как издавать звуки динамиком. Через некоторое время мы с братом перешли на продвинутые вещи типа ascii-анимации, мелодии через системный динамик, и крутую (но я был всего лишь ребенком!) систему “шифрования”, которая использовала динамическую смену шифра, но достаточную для защиты наших сверхсекретных данных. И нам очень нравилось редактировать DOS-игры через hex-редактор, меняя там тексты, но это было больше хакерством и желанием разобраться в том, как работают программы, чем собственно программированием.

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

VIM НАВСЕГДА!! :D

Мне очень нравится писать в vim, несмотря на то, что у нас с ним было сложное знакомство в раннее время использования Linux. Сейчас мне всегда не по себе, когда передо мной открыт другой редактор, и я часто нажимаю ESC (или :w) после того как что-то напечатал, иногда даже в браузере.

Я также много работал над Padre, IDE для Perl, и думаю, что это хороший редактор, особенно (но не только) для новичков. Несмотря на это, я не участвую в холиварах, и когда кто-то спрашивает у меня совета, я рекомендую попробовать несколько редакторов и выбрать наиболее комфортный.

:w

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

В начале 2000-х в университете я загорелся информационной безопасностью. В то время время Perl был большим игроком в этой сфере, и я решил его выучить, так как хотел применить свои навыки программирования в будущей профессии. Но я все откладывал этот момент, пока на одной локальной конференции свободного ПО не выиграл книгу Perl Cookbook во время викторины после доклада по информационной безопасности. Я начал просматривать книгу, цепляясь за всякие интересные идеи, которые я бы мог реализовать, и был поражен, насколько просто можно было писать программы, просто подключая уже готовые модули, делая не только то, что я хотел, но и делая это правильно. К тому времени я профессионально работал с С, и синтаксис Perl, его портируемость и интуитивность позволили мне программировать без забот о выделении памяти, указателях, а больше фокусироваться на решении самой проблемы. Это невероятно освобождало, и я никогда не хотел вернуться.

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

У меня всегда будет слабость к С в моем сердце, несмотря на то, что я уже давно ничего не писал на нем. С недавнего времени я также приобщился с JavaScript-сообществу, также немного игрался со Scala и Lisp — я даже написал статью “Scala для Perl-программистов”, показывая сходства и различия между двумя языками. Ruby также неплох, хотя я особо не пишу на нем, никаких серьезных проектов.

Я также основал локальную группу по программированию, где мы пробуем разные языки и парадигмы, это тоже весело. О! И также время от времени я загружаю последнюю версию Rakudo и пробую немного Perl 6, в основном для развлечения и чтобы посмотреть, достаточно ли он быстрый для прототипирования некритичного кода. С появлением rakudobrew это стало довольно просто.

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

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

Благодаря такому сообществу в 90% случаев на CPAN можно найти уже готовое решение, протестированное на нескольких платформах, оцененное и осмотренное лучшими программистами, и все это бесплатно. Благодаря такому сообществу мы практичестки мгновенно можем получить помощь, когда сталкиваемся с какой-то проблемой. Благодаря такому сообществу мы можем на полную использовать Perl 5, видеть как он развивается каждый день, как улучшается качество кода, появляется новый фунционал, эволюционируют лучшие практики и много другое.

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

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

Со стороны железа, процессоры последнее время не сильно увеличивают свою производительность, и кажется, что многоядерный подход прочно закрепился. Но тем не менее, большинство языков, Perl 5 в том числе, работают либо на одном ядре, либо имеют очень ограниченную, сложную и полностью не интегрированную поддержку сопрограмм и многоядерности. Для меня, языки будущего должны поддерживать сопрограммы и многоядерность элегантным и интуитивным способом, в то же время простым и програчным, чтобы приложения могли полностью реализовывать этот потенциал при наличии такой возможности. Я слышал, что Perl 6 двигается в этом направлении, что очень интересно, но, как я уже сказал, у меня не было возможности с этим разобраться поближе.

Со стороны окружения, я думаю, что преимущество над другими у языков, которые могут исполняться в браузере. Конечно, я сейчас говорю о JavaScript, однако я все думаю, когда же какой-нибудь другой язык получит нативную поддержку в браузерах. С другой стороны я нахожу забавным, что в то время как многие языки из серверной части пытаются перебраться на клиентскую, JavaScript-разработчики делают обратное и пытаются перестать быть просто языком веб-браузера с помощью таких проектов как node. Разработка под браузер означает, что ваше приложение может быть запущено на любом устройстве, где есть браузер, и быть там, где люди проводят и так большую часть своего времени (если только вы не пишете чего-нибудь специфического или не для конечных пользователей).

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

Насколько Data::Printer отличается от Data::Dumper?

Во многом! Data::Dumper решает проблему сериализации структур данных в Perl таким образом, чтобы можно было использовать их в коде, т.е. переменные выводятся, но очень читабельно. Data::Printer (или DDP), с другой стороны, не сильно заботится о возможности использования вывода в коде и разрабатывался, ориентируясь на читабельность. Он предоставляет цветной вывод, отсортированные ключи, фильтры и много другое! Например, при вызове Data::Dumper на объекте вы делаете что-то вроде:

use Data::Dumper; warn Dumper($obj);

и печатается внутренняя структура bless-переменной и имя класса, что часто не совсем то, что нужно. Если использовать Data::Printer, например:

use DDP; p $obj;

что не только короче, но также напечатает, что это объект такого-то класса, список его родителей (@ISA), публичные/приватные/унаследованные методы, и его внутреннюю структуру, и все это в цвете и удобно отформатированное. Также сообщается и много дополнительной информации, которой нет в Data::Dumper, например является ли переменная опасной (taint), доступной только для чтения (readonly) или слабой ссылкой (weak reference), что очень помогает при отладке. Data::Printer может показать ссылки, которые не поддерживаются (пока что) Data::Dumper, например lvalue, а также гибко настраивается в зависимости от требований просмотра или отладки.

Так что если вы хотите видеть и инспектировать содержимое переменных, вам стоит использовать Data::Printer. Вы не вернетесь к Data::Dumper, я гарантирую :)

Когда будет закончен App::Rad?

Эй, смотри! Трехголовая обезьяна! <убегает>

Ох, это очень хороший вопрос. Я написал App::Rad, потому что одно время я писал множество консольных утилит и мне не очень нравилось каждый раз писать одно и тоже, когда я приступал к новому проекту. Уже был модуль App::Cmd авторства rjbs, но тогда он мне казался (да и иногда сейчас кажется) перегибом для моих задач. Это как, например, если бы App::Cmd был как Catalyst, а мне нужно было что-то вроде Mojolicious или Dancer. Оказывается, что многие разработчики считали так же, и у моего модуля быстро появились пользователи, люди начали просить новых фишек и исправления багов. Я даже слышал, что он используется в CERN в нескольких внутренних приложениях, которые интегрируют данные из разных лабораторий для LHC, что очень круто.

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

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

Что такое QA-хакатоны? Кого приглашают?

Как должно быть уже знают читателя журнала, Perl-сообщество уделяет много внимания контролю качества (или сокращенно QA от quality assurance). Мы приветствовали тестирование задолго до того, как это стало модным. У нас кучи модулей для тестирования, утилит, рекомендаций. Инфраструктура CPAN позволяет быть уверенным, что добавленный модуль работает на каждой версии и платформе, на которой поддерживается Perl. Чтобы добиться этого, мы должно быть уверены, что все инструменты могут правильно взаимодействовать между собой. Возьмем, к примеру, сервис CPAN Testers. Он должен взаимодействовать с CPAN-клиентами по всему миру, которые отправляют результаты тестирования конкретного модуля на конкретной системе, и в то же время предоставлять данные для обработки и отображения на MetaCPAN. Это много систем, которые должы быть идеально синхронизированы, и это только один пример!

Несмотря на то, что у нас получается вести онлайн-дискуссии, принимать архитекрурные решения и работать над всеми этими инструментами в течение года в наше свободное от работы, семьи, друзей или других проектов время (помните, что это волонтерская работа!), это никогда не будет настолько же продуктивным, как если бы мы сидели в одной комнате — и это именно то, что мы делаем.

Раз в год все, кто вовлечен в инфраструктуру контроля качества, собираются вместе на выходные (обычно с пятницы по воскресенье) где-нибудь и работают исключительно над такими проектами. Среди нас есть разработчики ядра Perl, которые чинят долго откладываемые баги, авторы модулей для тестирования, обсуждающие решения и выпускающие новые версии и инструменты, любители поработать с данными и их визуализацией для разработчика, администраторы, работающие над тем, чтобы все пересылалось как можно быстрее и надежнее и так далее. Мне повезло поучаствовать в двух последних QA-хакатонах, в Париже и Ланкастере соотвественно, и могу сказать, что это поразительно. Каждый сфокусирован и продуктивен, и мы много успеваем все лишь за один уикенд. Кроме того, никому не платят за это, мы делаем это по своему желанию для развития яызыка и его сообщества. Поэтому очень важно, что мы получаем пожертвования от сообщества и спонсирующих компаний на еду и проживание во время нашей работы.

Если говорить об участниках, как я уже сказал, приглашен любой, кто достаточно заботится о тестировании в экосистеме Perl, чтобы приехать в другой город за свои деньги и провести несколько дней, улучшая эту экосистему, вплоть до максимального количества людей для помещения — обычно это около сорока человек. Большинство участников работают над проектами и вне рамках хакатона, но это не является правлом. Любой, кто хочет помочь, заходите на канал #qa сервера irc.perl.org и сообщите о себе. В ином случае, если вы используете любой из инструментов или модулей для тестирования (а вы используте, поверьте мне!), пожалуйста, рассмотрите возможность пожертвования. Мы бы не делали и одной десятой доли тех вещей для Perl-экосистемы без QA-хакатонов, и это возможно только благодаря вашим пожертвованиям. Даже если этого всего лишь $1. Что? Вы уже пожертвовали в этом году? СПАСИБО!

За что получил награду White Camel?

Как за что, за красивое лицо, конечно!

А если серьезно, то за последние десять лет я делал много для Perl-сообщества, в особенности, организовывал YAPC::Brasil и другие Perl-мероприятия южнее экватора. Также я стараюсь содействовать обмену информацией между бразильским и мировым Perl-сообществами, путешествуя по разным странам и знакомя людей со всеми клевыми штуками, которыми занимаются бразильские Perl-разработчики, переводя документацию и посты с одного языка на другой и тому подобное. Очень мало бразильцев, даже среди разработчиков, хорошо владеют анлглийским. Я стараюсь понизить языковой барьер и выступаю посредником между сообществами, которым есть что почерпнуть друг у друга. Поэтому в 2012 году во время YAPC::NA я бы удостоен награды White Camel. Это было неожиданно, и я был первым человеком из Латинской Америки, получившим ее. Я был очень рад, и сейчас награда гордо стоит в моей гостинной :)

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

Я работаю техническим директором в Estante Virtual, электронном аукционе подержаных книг, полностью написанном на Perl. У нас довольно успешный бизнес здесь в Бразилии, мы продаем одну книги каждые три секунды. Мне нравится здесь работать, и несмотря на то, что у меня не так много возможностей писать код на работе, ко мне все еще обращаются за советом, когда кто-то из моей команды сталкивается с проблемой. Также я занимаюсь тренингами по новому функционалу, отладке, шаблонам проектирования и лучшим практиками, особенно для младших специалистов, которые приходят в нашу компанию.

Дома, когда у меня есть время и работа позволяет, я занимаюсь своими открыми проектами, большинство на Perl.

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

Вне всяких сомнений! Прямо сейчас! Идем за моей машиной? :D

Здоровое сообщество постоянно обновляется, постоянно эволюционирует и постоянно нуждается в новой силе. Каждому языку нужны посвященные молодые люди, которые ставят под сомнение старые подходы и вносят что-то новое, и Perl здесь не исключение. Я действительно думаю, что для некоторых людей это прекрасный язык, с его гибкостью, портируемостью, практичностью, мульти парадигменностью, общим назначением. Он позволяет новичкам писать код в том стиле, в котором они хотят, а не в том, в каком их кто-то принуждает писать. Также у него есть продвинутое и дружелюбное по отношению к новичкам сообщество, которое это понимает и поощряет людей учиться, без обычного эгоистичного “рок-зведного” отношения, так распространенного в других сообществах динамических языков.

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

Что ты делал на YAPC::Europe 2013 в Киеве? Тебе понравилось?

Мне очень понравилось! Серьезно! Как я уже говорил, я люблю путешествовать и общаться с людьми из разных Perl-сообществ, делиться информацией и знакомиться с локальными проектами и разработчиками. Это была моя первая YAPC::Europe, и я отлично провел время. Даже круче, я остановился у одного из организаторов, и в конце концов начал помогать им на конференции, и у меня даже был специальный бэйдж! :)

Все было великолепно, и я чувствовал себя как дома. Я встретил много друзей из Европы и приобрел новых из Украины, России, Норвегии, Амстердама и Румынии.

Ты поддерживаешь несколько модулей на CPAN от других авторов. Тебя заставили?

Только модули авторства “vti” ;)

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

Возьмем, например, Clone.pm. У меня были проблема с этим модулем, я отправлял патчи, но их никогда не применяли. Через несколько недель, когда я все еще не получил ответа от автора, я попытался связаться с ним через email, спросил что происходит, могу ли помочь с модулем, если автор слишком занят. Автор быстро мне ответил и дал права на сопровождение, я применил свои патчи (и много других) и загрузил новую версию на CPAN.

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

Конечно! Ведь никогда не знаешь когда вернется ледниковый период :)

Вообще-то, это очень смешная история. Я из очень жаркой страны, и здесь в Рио температура обычно между 20C и 45C в течение всего года, поэтому я не привык к холодной погоде (серьезно, я носил теплую одежду в Орландо, США) и обычно боюсь низких температур. Также я всегда слышал истории, что на Украине очень холодно.

Поэтому, когда я планировал приехать в Киев в 2013 г. на YAPC::Europe, я естесственно спросил моего местного друга Вячеслава (Тихановского — прим. ред.), какая будет погода, и он сказал, что будет снег и чтобы я взял два теплых пальто с собой. Вместо того, чтобы открыть браузер и проверить чертову погоду, я поверил своему инсайдеру и упаковал два тяжелых пальто в сумку. Было лето в Киеве, 30С, и он, наверное, до сих пор смеется надо мной. Но ничего, я до него еще доберусь :P

Любишь лук?

Ха-ха-ха, вообще-то нет :P

Я назвал свой блог “the onion stand” (onion — лук, — прим. ред.), потому что у Perl логотип в виде лука, и из-за (не очень хорошей) игры слов, “stand” означает и стэнд, место где происходят презентации, и “making a stand”, т.е. крепко стоять на своем.

Но, по-правде, я ненавижу лук и капусту.

Здорово получилось!

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


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

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