Как стать автором
Поиск
Написать публикацию
Обновить
0.39

Perl *

Высокоуровневый интерпретируемый динамический язык

Сначала показывать
Порог рейтинга
Уровень сложности

Отчёт со встречи Perl-программистов Moscow.pm 4 февраля

Время на прочтение1 мин
Количество просмотров4.2K
image

В начале февраля в офисе Mail.Ru Group прошла очередная встреча Moscow.pm, организованная сообществом Perl-программистов. Выступления, прозвучавшие на встрече, были посвящены теории и практическим задачам, возникающим в ходе разработки. Под катом вы найдёте видеозаписи и презентации докладов.
Читать дальше →

Чиним MySQL-дамп (меньше чем за 30 строк)

Время на прочтение2 мин
Количество просмотров4.8K
Давным-давно (кажется, в прошлую среду) попался ко мне в руки дамп базы данных MySQL, который следовало немедленно развернуть на моей машине. Зачем это было нужно и откуда взялся дамп, рассказывать не буду, вряд ли это кому-то интересно. Важно то, что дамп был от MySQL 4.1.22 и снят он был при помощи одного широко известного инструмента (версии 5.23).
Разворачиваться у меня он решительно отказался... 
 
Читать дальше →

Объективные критерии качества Perl кода

Время на прочтение1 мин
Количество просмотров5.6K
Захотелось мне объективных критериев качества кода и конечно я вспомнил про свои давние наработки (коллекцию нефункциональных тестов, см. тут и тут).
Ещё тогда была идея оформить их не в виде коллекции тестов, а в виде отдельной утилиты, но удалось сделать только теперь, встречаем perlqual (от perl quality).
Читать дальше →

Вышла версия 1.3 Perl5 плагина для IntelliJ IDEA

Время на прочтение2 мин
Количество просмотров4.1K


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

В этом номере: совместимость с 14 и 15 IDEA (и остальными продуктами соответствующих версий), поддержка Switch, Class::Accessor и Mason2.

А теперь, немного подробнее:
Читать дальше →

Приглашаем на встречу Moscow.pm 4 февраля

Время на прочтение1 мин
Количество просмотров2.6K
image

4 февраля в нашем московском офисе снова соберутся Perl-программисты сообщества Moscow.pm. Участники всемирной ассоциации Perl Mongers регулярно встречаются, чтобы обсуждать актуальные вопросы, рассказывать об интересных случаях из практики и обмениваться опытом. Программу мероприятия читайте под катом.
Читать дальше →

Разработчики Perl 6: язык готов к использованию

Время на прочтение2 мин
Количество просмотров16K
image

24 декабря в официальном блоге, посвящённом новостям разработки Perl 6, появилась поздравительная запись. Разработчики поздравили всех с наступающим католическим Рождеством, и с тем, что так долго ожидаемое взросление языка, наконец, состоялось. Фактически, язык готов к использованию в рабочих проектах, и разработчики обещают больше ничего существенно не менять.

С момента выхода первой версии Perl прошло 28 лет, с момента выхода самой популярной в данное время версии Perl 5 – более 20 лет. Как шутит Ларри Уолл, создатель языка и лидер его разработки, 6-я версия, возможно, когда-нибудь и заменит 5-ю – примерно лет через 40.

Версия Perl 6 была анонсирована более 10 лет назад – на Amazon ещё можно купить книгу про этот «вскоре выходящий» язык, изданную в 2004 году. Длительность разработки можно объяснить тем, что Perl 6 – фактически, новый язык, написанный по мотивам 5-й версии. И хотя некоторые утверждают, что 6-ка отличается от 5-ки не более, чем C++ от C, всё-таки идеология в Perl 6 эволюционировала достаточно сильно для того, чтобы назвать его более современным языком.
Читать дальше →

SWAT — DSL для быстрой разработки автоматических тестов web приложений

Время на прочтение13 мин
Количество просмотров3.6K

Вступление


Задача по автоматизации тестирования не нова, но тем не менее имеющиеся средства в области тестирования web приложений могут иметь свои ограничения.

Что, если у нас под сотню различных web приложений, которые необходимо обновить в течение короткого периода времени, а тестов на проверку их работоспособности нет? Разработка UI тестов потребует много времени, а просто сделать запрос curl и проверить что вернулся 200 OK, недостаточно.

Нужен разумный компромисс, простое, но в тоже время достаточное универсальное средство по разработке автоматических тестов. Так на свет появился SWAT.
Читать дальше →

Perl5 плагин для IntelliJ IDEA v1.2: Moose и сигнатуры

Время на прочтение2 мин
Количество просмотров3.5K


Выпущена очередная версия Perl5 плагина для IntelliJ IDEA и прочих IDE от JetBrains. Новая версия добавляет поддержку Method::Signature::Simple и Moose.
Читать дальше →

Sparrow — perl фреймворк тестирования и мониторинга web приложений

Время на прочтение5 мин
Количество просмотров4.4K

История создания


Sparrow — очень молодой проект. Возник как надстройка над инструментом swat — DSL, написанным на perl для разработки тестовых сценариев различных web приложений. Описание swat — отдельная тема, которую я, возможно, раскрою в следующих публикациях, но, если в двух словах, то swat — это средство для автоматизация web тестирования, базирующееся на использовании утилиты curl и позволяющее создавать произвольные http запросы и валидировать возвращаемый контент.
Читать дальше →

Особенности (traits) в Perl 6 – метаданные вместе с символом

Время на прочтение1 мин
Количество просмотров2K
Особенности (Traits) – это удобный и расширяемый способ присоединения метаданных к различным видам объектов в Perl 6. Рассмотрим пример особенности с is cached, автоматически кеширующей возвращаемое функцией значение в зависимости от переданных аргументов.

# следующий код вызывается, когда к функции
# добавляется 'is cached' 
multi sub trait_mod:<is>(Routine $r, :$cached!) {
     my %cache;
     # обернём функцию в блок, который
     $r.wrap(-> $arg {
         # ищет аргумент в кеше
         %cache{$arg}:exists
             ?? %cache{$arg}
             # ... и вызывает оригинал, если он не найден
             !! (%cache{$arg} = callwith($arg))
         }
     );
 }
 
 # пример применения:
 sub fib($x) is cached {
     say("fib($x)");
     $x <= 1 ?? 1 !! fib($x - 1) + fib($x - 2);
 }

 # для всех значений от 0 до 10 происходит лишь по одному вызову
 say fib(10);

Читать дальше →

Поиск с помощью регулярных выражений может быть простым и быстрым

Время на прочтение21 мин
Количество просмотров49K
В этой статье мы рассмотрим два способа поиска с помощью регулярных выражений. Один широко распространён и используется в стандартных интерпретаторах многих языков. Второй мало где применяется, в основном в реализациях awk и grep. Оба подхода сильно различаются по своей производительности:



В первом случае поиск занимает A?nAn времени, во втором — An.

Степени обозначают повторяемость строк, то есть A?3A3 — это то же самое, что и A?A?A?AAA. Графики отражают время, требуемое для поиска через регулярные выражения.

Обратите внимание, что в Perl для поиска строки из 29 символов требуется более 60 секунд. А при втором методе — 20 микросекунд. Это не ошибка. При поиске 29-символьной строки Thompson NFA работает примерно в миллион раз быстрее. Если нужно найти 100-символьную строку, то Thompson NFA справится менее чем за 200 микросекунд, а Perl понадобится более 1015 лет. Причём он взят лишь для примера, во многих других языках наблюдается та же картина — в Python, PHP, Ruby и т. д. Ниже мы рассмотрим этот вопрос более детально.

Наверняка вам трудно поверить приведённым данным. Если вы работали с Perl, то вряд ли подмечали за ним низкую производительность при работе с регулярными выражениями. Дело в том, что в большинстве случаев Perl обращается с ними достаточно быстро. Однако, как следует из графика, можно столкнуться с так называемыми патологическими регулярными выражениями, на которых Perl начинает буксовать. В то же время у Thompson NFA такой проблемы нет.

Возникает логичный вопрос: а почему бы в Perl не использовать метод Thompson NFA? Это возможно и следует делать, и об этом пойдёт далее речь.
Читать дальше →

Буферы и двоичный ввод и вывод в Perl6

Время на прочтение2 мин
Количество просмотров4.3K
В Perl 5, начиная с версии 5.8, неплохо реализована поддержка Unicode – но люди всё равно жаловались на сложности в её использовании. В основном из-за того, что программисту нужно отслеживать, какие строчки были декодированы, а какие надо обрабатывать как двоичные данные. И нет надёжного способа посмотреть на переменные и понять, двоичные это строчки или текстовые.

В Perl6 эту проблему решили вводом отдельных типов. В Str хранится текст. Строковые литералы в Perl6 имеют тип Str. Двоичные данные хранятся в объектах Buf. И перепутать их уже нельзя. Конвертация между ними осуществляется при помощи методов encode и decode.

    my $buf = Buf.new(0x6d, 0xc3, 0xb8, 0xc3, 0xbe, 0x0a);
    $*OUT.write($buf);

    my $str = $buf.decode('UTF-8');
    print $str;


У обеих операций эффект одинаковый – они выводят в стандартный выходной поток «møþ» и перевод строки. Buf.new(...) принимает список целых от 0 до 255 – байты из которых и строится новый буфер. $*OUT.write($buf) выводит буфер из $buf в стандартный выходной поток.

$buf.decode('UTF-8') декодирует буфер и возвращает объект Str (или падает, если в буфере не содержится допустимая строка в UTF-8). Обратная операция — $Buf.encode($encoding). Str можно вывести просто через print.
Читать дальше →

PG как эволюция Perl для математиков в WeBWorK

Время на прочтение4 мин
Количество просмотров5.1K
Дисклеймер: Представленная информация может быть полезна преподавателям, авторам курсов. Большинство информации является вольным переводом с англоязычной Wiki WeBWorK.

Для начала: Что такое WeBWorK?

WeBWorK — это написанная на Perl свободная система для предоставления индивидуальных домашних заданий через сеть. Система позволяет преподавателям создавать курсы из набора домашних работ, которые могут быть впоследствии решены студентами.

Студент может получит доступ к домашнему заданию с любого компьютера. Система предполагает ввод формул в любом тождественном виде, что снимает лишние заботы со студента. Благодаря тому, что информация о корректности решения поступает немедленно, у студента есть возможность перерешать задание.

Преподаватель также не ограничен в месте доступа. Для составления курса могут быть использованы как новые задачи, так и тысячи уже готовых задач нескольких университетов. Для пресечения списывания предусмотрена возможность задать индивидуальные особенности задания для каждого студента. Вся информация о студентах, курсах и статистика решения задач доступна преподавателю, что позволяет лучше оценить успеваемость студентов, как общую, так и индивидуальную.
Читать дальше →

Ближайшие события

Интервью с Одри Тан, часть 1

Время на прочтение9 мин
Количество просмотров6K


Одри Тан в первую очередь известна как создатель и разработчик Pugs, Perl 6 User’s Golfing System, реализации Perl 6 на Haskell, которая появилась 1 февраля 2005 года и была наиболее активно разрабатываемой и наиболее полной реализацией на то время.
Читать интервью

Perl5 плагин для IntelliJ IDEA v1.1

Время на прочтение2 мин
Количество просмотров7K


Выпущена новая стабильная версия Perl5 плагина для IntelliJ IDEA и Co. Данный релиз почти целиком посвящен улучшению производительности и качества парсера. Таким образом, больших функциональных изменений с точки зрения IDE нет, однако достижения в указанных областях – значимы.
Читать дальше →

Как я мониторил Avito по SMS

Время на прочтение8 мин
Количество просмотров62K
Как известно, на «Авито» периодически появляются товары очень хорошего качества и при этом очень дешевые. Но появляются они редко, висят там мало и исчезают быстро.

Поэтому возникла у меня идея: а не поискать ли сервис, который раз в несколько минут проверяет объявления, и если появилось что-то интересное для меня — оповещает об этом? При этом оповещать лучше всего по смс, а то почту я не всегда проверяю оперативно.

Гуглинг выдал несколько таких сервисов, «всего» от 3 руб за смс или от 4 руб в сутки.

В итоге, я решил написать такой сервис самостоятельно, но об этом дальше…
Читать дальше →

Хороший день для кодогенерации

Время на прочтение6 мин
Количество просмотров17K
        Давным-давно, еще на заре существования Вечности, где-то в 300-х Столетиях был изобретен дубликатор массы…
        Вечность приспособила дубликатор для своих нужд. В то время у нас было построено всего шестьсот или семьсот Секторов. Перед нами стояли грандиозные задачи по расширению зоны нашего влияния. «Десять новых Секторов за один биогод» — таков был ведущий лозунг тех лет.
        Дубликатор сделал эти огромные усилия ненужными. Мы построили один Сектор, снабдили его запасами продовольствия, воды, энергии, начинили самой совершенной автоматикой и запустили дубликатор. И вот сейчас мы имеем по Сектору на каждое Столетие.

            Айзек Азимов "Конец Вечности"


То, что день случился не самый лучший, было понятно уже с утра. Ставшая привычной, дождливая серая погода и, похоже, начинавшаяся простуда никак не улучшали настроения. В теле наблюдалась разбитость и, больше всего, хотелось спать. Было совершенно очевидно, что необходимо как-то отвлечься…
Читать дальше →

OTRS на прокачку в стиле REG.RU

Время на прочтение19 мин
Количество просмотров32K
image

Наверное, нет необходимости рассказывать, что такое OTRS. Многие компании используют его как средство управления услугами и для осуществления поддержки своих клиентов. История этого проекта берет своё начало аж в 2001 году. И в этом есть свои плюсы и свои минусы. Очень мощный инструмент с огромным количеством функционала практически под любые нужды малого и среднего бизнеса. Причём бесплатно. Платная поддержка только для тех, кому недостаточно базового функционала или нужна помощь в настройке.

Об этом инструменте, который активно используется в нашей компании с 2008 года, и пойдёт речь. А точнее, о том, что с ним стало в руках нетерпеливых Perl-программистов компании REG.RU.
Так что же вы там накодили?

.sort'ировка в Perl 6

Время на прочтение4 мин
Количество просмотров10K
Сортировка списков – очень распространённая задача в программировании, и в Perl 6 есть несколько улучшений функции sort, помогающих вам решить такую задачу.

В языке есть обыкновенный типичный sort:

    # сортировка по умолчанию с учётом типа
    my @sorted = @unsorted.sort; # или sort @unsorted;


Как и в Perl 5, можно настраивать функцию для сравнения:

    # численное сравнение
    my @sorted = @unsorted.sort: { $^a <=> $^b };


    # то же, с использованием функциональной семантики
    my @sorted = sort { $^a <=> $^b }, @unsorted;


    # строковое сравнение ( как cmp в Perl 5 )
    my @sorted = @unsorted.sort: { $^a leg $^b };


    # сравнение с учётом типа
    my @sorted = @unsorted.sort: { $^a cmp $^b };


Если записать условие сравнения в скобках, тогда вам не понадобится двоеточие. Это удобно, когда вы хотите выстроить цепочку из других методов, тянущуюся за sort:

    my @topten = @scores.sort( { $^b <=> $^a } ).list.munch(10);

Читать дальше →

Унификация дизайна со стороны бэкенда: JavaScript на сервере

Время на прочтение8 мин
Количество просмотров16K
image

В начале 2014 года к нам в отдел контентных проектов пришла задача унификации дизайна. Дизайнеры хотели единый стиль проектов и принципы работы интерфейсов. Это будет удобно пользователям, облегчит запуск новых проектов и редизайн существующих (более подробно об этом писал Юра Ветров). Команда фронтенда получит возможность использовать схожие компоненты верстки на разных проектах, что уменьшит время разработки и поддержки существующего функционала. Для команды бэкенда задача оказалась нетривиальной: большинство наших проектов написана на Perl (Template Toolkit), Недвижимость на PHP, Дети и Здоровье используют Django. Но от нас требовалось реализовать не только поддержку единого шаблонизатора, но и согласовать единый формат отдаваемых данных в шаблоны. Обилие подгружаемых AJAX-блочков требовало поддержку еще и клиентской шаблонизации.

Таким образом, задача унификации дизайна превратилась в задачу выбора единого шаблонизатора для Perl, Python, PHP и JS.
Читать дальше →

Вклад авторов