Выпуск 18. Август 2014

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

Интервью с Дмитрием Карасиком

Дмитрий Карасик (karasik) — Perl-программист, автор IO::Lambda и Prima.

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

В 1988-м году на Электронике МК-54. Виноват в этом журнал “Наука и жизнь”, который публиковал статьи о программируемых калькуляторах, который, огромное спасибо родителям, мне подарили. Когда журнал стал публиковать программы на Basic для PC, мне намекнули, что семейный бюджет такого вложения не выдержит, но по счастью в университете был доступ к PC-совместимым ЕС-1841, а там уже был DOS, Turbo Pascal, и пошло-поехало.

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

vim

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

В 1997-м Антон Березин пригласил меня в проект на базе лаборатории, занимающейся молекулярной биологией в Копенгагенском университете. Он искал подходящий язык для макро-программирования и остановил выбор на перле. Рабочие станции были на OS/2, Windows 95 и FreeBSD, и нам нужно было сначала сделать графическую обвязку для перла - отсюда вырос GUI-тулкит Prima. На нем мы делали клиентские программы для исследовательских нужд, что включало в себя в основном программирование собственно GUI, но с приятной экзотикой вроде обработки изображений, автоматического управления видеокамерой, алгоритмов распознавания и тому подобное. Только гораздо позже я открыл для себя перл как инструмент для веба.

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

Если именно работать, то вот как-то ни с какими, если честно. Профессионально я сильно завязан на перл, С и javascript, а так конечно держусь в курсе того что происходит в мире. По мелочи писал или просто пробовал силы на c++, java, php, ruby, python, erlang, haskell, lisp, go … ну как сказать, языки и языки. Особо сильного энтузиазма не испытываю ;)

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

Качественные библиотеки (т.е. CPAN), которые не нужно постоянно мониторить на предмет багов. Community — доброжелательные люди, с которыми можно внятно общаться. То же, что и раньше в общем. Мне лично импонирует некая доля юмора в перловой тусовке; вот только вчера с коллегами вспоминали про Acme::Code::Police который стирает файл с модулем, не испльзующий strict. И Acme::Code::FreedomFighter который стирает Acme::Code::Police ))))) Ах да, юникод же еще. Отличная поддержка юникода.

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

Опенсорс, я так думаю; причем не только открытый исходный код в режиме read-only, но и принадлежность самой культуре — с форками, патчами, интеграцией с существующими библиотеками. Качественная абстракция над сложными вещами вроде многопоточности, корутин (как в go), интроспекции самого языка. Ненавязчивость (ОО — привет Java, пробелы — привет python). Здоровый минимализм (например js).

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

Думаю, что оно есть и никуда не денется, но поуменьшится в общей доле вследствие разных причин. Молодым профессионалам нужно строить свое портфолио, показывать миру свои идеи и библиотеки, а в перле все “низко висящие фрукты” в основном собраны. Я думаю, в будущем мы будем видеть все меньше новых громких проектов на перле, но не потому, что их число будет уменьшаться, а потому что их “громкость” не будет приоритетна. Примерно как, ну скажем, водопроводные трубы — вещь нужная, но ни разу не хипстерская )

Чем IO::Lambda отличается от других event loop? Как IO::Lambda уживается с AnyEvent?

IO::Lambda это конечно проект амбициозный но он, увы, не смог заработать широкой поддержки. Его отличие наблюдается только на достаточно высоком уровне, когда нужно описывать много, не одну-две, а именно много машин состояний, и возникает необходимость, чтобы их код был собран локально, а не размазан по отдельным функциям. Возможно именно из-за узкой специализации.

Эту же задачу решают корутины (и многопоточность в какой-то мере), но в перле с корутинами туговато, я считаю главным образом из-за того, что автор Coro не смог наладить эффективное общение с группой разработчиков перла, так чтобы Coro нормально дружил с языком. C AnyEvent модуль уживается абсолютно нормально и может его использовать как back-end, кроме многопоточных программ, где сам AnyEvent не работает.

Расскажи про Prima. Насколько успешно можно применять Perl для графических программ?

В двух словах — это GUI специально для перла. Вполне успешно можно применять на windows и unix, выглядит на обоих практически идентично. Там даже есть visual builder чтобы рисовать простые интерфейсы.

Этому проекту я и сам удивляюсь — первый код был написан в 97-м году, я до сих пор изредка в него коммичу, в основном по запросам извне. Наверное это больше говорит обо мне, чем о проекте ;) На сегодня с ним связаны несколько побочных проектов, которые тоже веду я, в основном для интеграции с другими тулкитами — с ImageMagick, PDL, Cairo, OpenGL. PDL-девелоперы рассматривают возможность перейти с gnuplot на Prima для визуализации графиков — посмотрим, будет ли желание этим заняться у кого-нибудь. Toby Inkster вот сделал год назад Data::Dumper::GUI.

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

В приме есть маленькая пасхалка — название проекта означает “первый”, но в visual builder’e до сих пор используется иконка, похожая на папиросы “Прима” — кто помнит, да ;) Вот думаю, убирать или не убирать, серьезный проект все-таки :)

Как натыкаешься на нестандартные применения стандартных особенностей языка, как, например, модуль Image::Match?

С Image::Match была история — нам нужно было сделать автоматизацию для клиента на Win32::GuiTest, когда программа сама нажимает кнопки и пишет текст и тому подобное. Проблема возникла, когда автоматизировать пришлось удаленного клиента через remote desktop и использовать поиск окон и кнопок и прочего не было возможности через WINAPI, единственная возможность была анализировать графический вывод. Т.е. находить скриншот на экране и посылать туда сообщение от мыши. И вот я сижу думаю, какой у нас алгоритм поиска скриншота? Берем изображение из файла, на котором например скриншот нужной кнопки. Читаем оттуда первую скан-линию, т.е. строку байтов, представляющих набор горизонтально расположенных подряд пикселей, и ищем эту строку в скриншоте всего экрана. Если нашли, значит вторая скан-линия должна находиться на сколько-там байтов дальше, на ширину экрана минус ширина кнопки… потом третья и так далее. А если третья строка не совпадает? Тогда откатываемся к самой первой линии и ищем дальше — это backtracking. Который отлично работает в регулярных выражениях! А значит поиск это всего лишь:

$screenshot =~ /$scanlines[0].{$width}$scanlines[1].{$width} ... /

и т.д. до конца…

Первый баг там был интересный — модуль на одной машине заработал, а на другой нет. Выяснилось, что на одной иконке был пискель со значением 0x0A, и регексп, в который я забыл поставить /s, рассматривал его как перевод строки и не работал :)

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

Сейчас я работаю в research & development в биохимической компании Novozymes. Мы поддерживаем исследовательский отдел на связке linux, postgres, apache, perl, catalyst — несколько внутренних сайтов, базы, исследовательские инструменты на базе Bio::Perl. Моя работа это в основном back-end на перле и поменьше front-end на js/html. Ну и связанные вещи — баг-фиксинг, базы, апдейты, по мелочи. Кстати, прямо сейчас набираем девелоперов (дедлайн 24 августа).

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

Конечно стоит, кто ж новые проекты будет на перле тогда делать? :D

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

Не надоел Perl?

Ну разве самую малость. И то, не сколько перл, сколько программирование и компьютеры в целом.

Посещаешь ли Perl-мероприятия? Каковы, по-твоему, основные отличия конференций за рубежом от СНГ?

Да, стараюсь попадать на YAPC::EU и Nordic Workshop. Или по возможности на русскоязычную конференцию.

Отличия? Теперь уже и нет почти этих отличий, не считая языка, мне так кажется. Доклады на ::EU интересней, так как охватывают больше людей, да вот и только.

Как найти работу за рубежом?

Как и везде — на job-сайтах. Вот расскажу про датские реалии например, которые мне хорошо известны:

  1. гуглите denmark job sites, попадаете например на jobindex.dk, там вбиваете в поиск perl и читаете анонсы потенциальных работодателей.

  2. выбираете то что интересно, посылаете cv c коротким cover-letter.

  3. ждете ответа, если вами заинтересуются — пригласят. Если нет, то хорошие компании пришлют отказ, плохие — нет… да и то, в плохих компаниях работать вредно для здоровья.

  4. PROFIT!!!

Тонкий момент — качественное составление cv и cover-letter. Это важный навык, если не умеете — проконсультируйтесь у специалиста, серьезно. Потому что когда нужно прошерстить сотню заявлений (чем я вот прямо сейчас занимаюсь), плохо (слишком длинно, слишком коротко, без фото, .doc, не на английском, трудно читать, непонятно, сколько опыта на перле) оформленная заявка это не шанс на победу, а совсем наоборот.

Ну и английский нужно знать, конечно.

Это активный путь, есть еще и пассивный — распространить инфу всем знакомым за рубежом, что вы ищете работу по такой-то специальности. Есть небольшой шанс, что вас порекомендуют.

Почему не развивается Укроп?

Да ну, это шутка была ;) Я в то лето прочитал слишком много рассказов Борхеса и раздухарился на подражание с уклоном в компьютеры. А тут как раз воркшоп в Киеве, ну грех было не сделать лайтнинг перла на суржике :)

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


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

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