Вторник, 14 сентября

Laziness, Impatience and Hubris: Об unicode в Perl

В очередной раз задумался о том, какие строки оптимальней использовать в основном коде: characters или octets.

Обычно мне очень редко приходиться работать непосредственно с unicode. Когда нужно, я преобразовываю octets в characters, а затем обратно.

Но HTML::Parser требует на вход unicode, и JSON::XS корректно работает только с unicode. Поэтому хоть непосредственно я сам не использую characters, приходиться перекодировать при помощи модуля Encode.

Кроме этих модулей, обычно все работают с octets.

А вот при работе над магазинчиком вышивки бисером и нитками Embroidery Kits выяснилось, что остальные используемый модули могут работать как с octets, так и с characters (кроме Digest::SHA).

HTML::Parser и JSON::XS перетянули одеяло на себя. Задумался.

P.S.
Utf8 флаг в сложных структурах данных расставляю, сбрасываю при помощи нижеприведенного кода.


use Encode;
use Scalar::Util qw(looks_like_number);


sub data_walk($$);
sub data_walk($$) {
my ($d,$s) = @_;
if (ref $d eq "ARRAY") {
$d = [ map { data_walk($_, $s) } @$d ];
} elsif (ref $d eq "HASH") {
$d = { map { $s->($_) => data_walk($$d{$_}, $s) } keys %$d };
} elsif (not ref $d) {
$d = $s->($d)
}
return $d;
}


sub data_encode_utf8 { data_walk(shift,
sub {
my $data = shift;
if ($data and not looks_like_number($data)) {
$data = Encode::encode_utf8($data) if Encode::is_utf8($data);
}
return $data;
}
)
}


sub data_decode_utf8 { data_walk(shift,
sub {
my $data = shift;
if ($data and not looks_like_number($data)) {
$data = Encode::decode_utf8($data, Encode::FB_QUIET) unless Encode::is_utf8($data);
$data ||= "ERROR: FOR SOME REASON, TEXT CONVERSION TO UTF8 FAILED";
}
return $data;
}
)
}

Вторник, 17 августа

Хабрахабр: Метки / perl: Dancer2 или современное web-приложение на PERL. Часть II

Лето близится к концу, однако ещё остались дни, чтобы насладиться солнцем, отпуском, Perl и Dancer2. Последним двум будет посвящена эта статья. Сегодня поговорим про шаблоны, сессии и флэш-сообщения.

Читать далее

Вторник, 10 августа

Мини-портал Perl на Opennet: Руководство Perl приостановило работу команды, следящей за соблюдением кодекса поведения

Управляющий совет организации Perl Foundation изучил действия и процессы, связанные с работой команды по делам сообщества (CAT, Community Affairs Team) и решил приостановить работу данной группы до формализации всех связанных с её работой процессов и официального утверждения полномочий данной группы. Совет также отменил два ранее опубликованных отчёта об инцидентах, на основе которых были приняты меры в связи с ненадлежащим поведением некоторых участников сообщества при проведении обсуждений на платформе Slack.

Пятница, 6 августа

Хабрахабр: Метки / perl: Dancer2 или современное web-приложение на PERL

Perl, созданный аж в 1987 году, в 2021 продолжает успешно применяться в различных сферах IT. А вместе с фреймворком Dancer и с задачей создания web-приложения справляется легко и непринужденно.

Читать далее

Понедельник, 2 августа

Сообщество ru_perl в LiveJournal: Что делает оператор //= ?

Наткнулся на gihub на использование оператора //= Ни разу раньше не видел его использования.
К сожалению, сам не нашел мануал, что он означает и тестами до конца не понял . По тестам вижу, что в отличие от ||= проверяет переменную на определенность, а не ложь/истина. Но у меня работает это с числами, а со строками после операции получаю undef.

Можете подсказать, что делает этот оператор присваивания?

Пятница, 28 мая

Хабрахабр: Метки / perl: Быстрый SNMP опрос сетевых устройств

Я отношу себя к поколению "диких сетевиков", которые в начале века начинали строить сети различного масштаба на постсоветском пространстве. Не хватало всего - денег, образования, специалистов, оборудования ... Зато энтузиазма и самоуверенности было немерено. Лепили сети из чего попало, или из того на что хватало денег. Как сейчас помню тот день, когда купил свой первый L2 коммутатор - знаменитый DES-3526.

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

Читать далее

Четверг, 27 мая

Хабрахабр: Метки / perl: Пишем PBX на Perl для Yate

Когда-нибудь я напишу что-то в духе "Как я стал программистом в 40 лет". Но точно не сегодня, к тому же мне давно уже не 40 и программистом я себя не считаю. А рассказать я хотел бы о своём опыте разработки PBX для собственных нужд. В качестве VoIP движка используется Yate, фронт- и бэкенд будет на Perl.

Часто встречаю в комментариях к статьям вопросы: "Почему не (далее идут любимые варианты комментаторов)?". Итак, по порядку.

Читать далее

Понедельник, 24 мая

Хабрахабр: Метки / perl: [Опрос] Насколько вам наплевать на фичи последней версии языка?

Многие на собеседованиях любят гонять по последним фичам языка. У меня это всегда вызывало недоумение, во всяком случае в сфере веб-разработки. На фронтенде ты смотришь CanIUse (или сношаешься с полифиллами и транспиляцией (что ныне в приличном обществе и за сношения не считают)), а на бэкенде ты смотришь на шаблоны vps/vds, которые предоставляют хостеры и прикидываешь когда же в них появятся нужные тебе версии языка. И я абсолютно не против развертывания среды выполнения нужной версии, которая будет отличаться от системной, но давайте будем честными с самими собой. Какой процент из вас ориентируется на последнюю доступную версию языка? А какой на то что будет на в ближайшие пару лет дано в ощущениях, браузерах и датацентрах. Внимание опрос!

Читать далее

Пятница, 21 мая

Мини-портал Perl на Opennet: Релиз языка программирования Perl 5.34.0

После 11 месяцев разработки состоялся релиз новой стабильной ветки языка программирования Perl - 5.34. При подготовке нового выпуска было изменено около 280 тыс. строк кода, изменения затронули 2100 файлов, в разработке приняли участие 78 разработчиков.

Вторник, 13 апреля

Мини-портал Perl на Opennet: Сообщество разработчиков Perl покинул один из лидеров проекта

Sawyer X объявил об уходе из руководящего совета проекта Perl и из Core Team. Он также покинул пост ответственного за формирование релизов Perl, прекратил участие в комитете, выделяющем гранты, отказался от выступления на конференции Perl и удалил свою учётную запись в Twitter. При этом Sawyer X выразил готовность довести до конца находящийся в разработке релиз Perl 5.34.0, запланированный на май, после чего удалить свой доступ к GitHub, CPAN и спискам рассылки.

Пятница, 5 марта

Хабрахабр: Метки / perl: [Перевод] Угон домена Perl.com

Прим. перев.: в конце января стало известно о том, что один из основных доменов языка программирования Perl — Perl.com — был угнан. Это вызвало смешанную реакцию в сообществе как любителей языка, так и его противников. Теперь, когда всё уже позади и справедливость восстановлена, один из самых известных сторонников Perl — brian d foy — рассказал о том, что же произошло и как сообщество добилось положительного исхода событий. Представляем вниманию перевод его заметки.

Читать далее

Вторник, 2 марта

Мини-портал Perl на Opennet: Опубликован разбор инцидента с потерей контроля над доменом perl.com

Брайан Фой (brian d foy), основатель организации Perl Mongers, опубликовал подробный разбор инцидента, в результате которого домен perl.com был захвачен посторонними лицами. Захват домена не затронул серверную инфраструктуру проекта и был совершён на уровне смены владельца и замены параметров DNS-серверов у регистратора. Утверждается, что компьютеры ответственных за домен также не были скомпрометированы и атакующие пользовались методами социальной инженерии для введения регистратора Network Solutions в заблуждение и смены данных о владельце, используя фальшивые документы для подтверждения прав на владение доменом.

Понедельник, 8 февраля

Мини-портал Perl на Opennet: Сообщество вернуло контроль над доменом perl.com

Разработчики языка программирования Perl сообщили об успешном завершении процесса возвращения домена perl.com, который был захвачен посторонним лицом после компрометации учётной записи. Возвращение домена было усложнено тем, что после получения контроля над доменом атакующие несколько раз сменили регистратора - из области ответственности компании Network Solutions домен был переведён вначале китайскому регистратору Bizcn, а затем передан на обслуживание регистратору Key-Systems GmbH.

Пятница, 29 января

Хабрахабр: Метки / perl: Неизвестные украли домен Perl.com

Брайан Фой, эксперт по Perl, сообщил, что домен сайта Perl.com был захвачен неизвестными хакерами.

Он опубликовал сообщение на Reddit: «Мы все еще пытаемся разобраться, и я не могу вдаваться в подробности. Однако, похоже, что это был взлом аккаунта».

Читать далее

Среда, 30 декабря

Меркантильный гуру: Языки на букву P

Чем дальше в сторону от веба, тем более комьюнити в перле какие-то чудаки на плохую букву.

На столько часто сталкиваюсь с этим в последнее время, что всерьез начинаю думать о смене религии на питон.

Такие дела.

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

Среда, 23 декабря

Мини-портал Perl на Opennet: Избран управляющий совет, который будет руководить разработкой Perl

Объявлены итоги выборов управляющего совета, который пришёл на смену единоличному лидеру проекта Perl. Участниками Core Team избраны три заслуживающих доверия сообщества разработчика, которые теперь будут принимать решения, связанные с развитием Perl. В совет вошли Ricardo Signes, Neil Bowers и Sawyer X.

Среда, 25 ноября

Мини-портал Perl на Opennet: Perl переходит на новую модель управления

Ключевые разработчики языка программирования Perl одобрили документ perlgov.pod, регламентирующий новую модель управления проектом. В качестве основы была использована утверждённая два года назад модель управления разработкой Python.

Суббота, 14 ноября

Меркантильный гуру: Perl is Dead. Python is the New Java

Недавно я увидел весьма интересную статью - Perl is Dead. Python is the New Java. В тексте много спорного, включая вставку про отладку, в которой слишком много фанатизма, но идея в заголовке, вполне возможно, и даже вероятно, сейчас правильная.

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

Например, для традиционных pack/unpack и printf/sprintf используются совершенно разные шаблоны (т.е. при одном и том же значении буквы в шаблонах отличаются полностью и означают совсем другое), причем перловый вариант, кажется, примерно полностью совпадает с классическим Си.

При этом printf/sprintf в чистом виде в питоне как бы отсутсвует, а для паддинга строк, например, видимо принято делать str(...).zfill(...).

Надо признать, что это и многое другое в питоне начинает казаться значительно более юзерфрендли, чем в перле. Серьезно, невозможно помнить наизусть шаблоны для pack/unpack и printf/sprintf, если не пишешь что-то с ними каждый день, в то время как, наример, str(...).zfill(...), наоборот - невозможно забыть.

Любопытно и то, что в Raku, судя по всему, подобные неинтуитивности исправлены.

Среда, 29 июля

Мини-портал Perl на Opennet: В Perl-пакете Module-AutoLoad выявлен вредоносный код

В распространяемом через каталог CPAN Perl-пакете Module-AutoLoad, предназначенном для автоматической загрузки CPAN-модулей на лету, выявлен вредоносный код. Вредоносная вставка была найдена в коде теста 05_rcx.t, который поставляется с 2011 года.

Суббота, 4 июля

Мини-портал Perl на Opennet: Анализ рисков при воплощении в жизнь инициативы Perl 7

Дэн Бук (Dan Book), поддерживающий более 70 модулей в CPAN, провёл анализ рисков при воплощении предложенного плана внедрения Perl 7. Напомним, что в ветке Perl 7 намереваются включить по умолчанию режим строгой проверки "strict", активировать "use warnings" и изменить значение ряда параметров, влияющих на совместимость со старым кодом.

Четверг, 25 июня

Мини-портал Perl на Opennet: Анонсирован Perl 7

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

Четверг, 16 января

Хабрахабр: Метки / perl: [Перевод] Пол Грэм про Java и «хакерские» языки программирования (2001)

image

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

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

Кто-то из прочитавших расценивал это как заслуживающую внимания попытку написать о чем-то, о чем раньше никто не писал. Другие же предостерегали, что я пишу о вещах, в которых ничего не смыслю. Так что на всякий случай, хотел бы уточнить, что я пишу не о Java (с которой я никогда не работал), но о «хакерском радаре» (о котором много размышлял).
Читать дальше →

Вторник, 26 ноября

Shoor/нал: Цветной Subversion

Git умеет «из коробки» раскрашивать то, что выводит в консоль, а Subversion — нет. Надоело руками каждый раз перенаправлять вывод svn diff в colordiff — написал простенькую раскрашивалку. Когда-то умела красить только вывод подкоманды status, теперь понимает blame (praise, annotate, ann), diff (di), help (?, h), status (stat, st) — и сами подкоманды, и их синонимы.

https://github.com/shoorick/svn-st-color

Цветной svn st

Цветной svn diff

Суббота, 26 октября

Хабрахабр: Метки / perl: Собираем Perl прямиком из 1987 года

Прочитав новость "Код интерпретатора Perl официально перенесён на GitHub" на ресурсе LINUX.ORG.RU я решил взглянуть на репозиторий Perl 5, который теперь уже находится на GitHub'е.

Удивительно, как трепетно и качественно его перенесли, сохранив не только абсолютно всю 32-летнюю историю проекта, но и багрепорты (попали в Issues), патчи (попали в PRs), релизы и ветки. Надпись "32 years ago" рядом с файлами вызывает невольную улыбку.

Что ещё делать в этот унылейший пятничный вечер, когда на улице неприятно моросит дождь со снегом, а все уличные дорожки погрязли в осенней слякоти? Правильно, красноглазить! Так что я ради эксперимента и интереса решил взять и собрать древний Perl на современной x86_64-машинке с последней версией GCC 9.2.0 в качестве компилятора. Сможет ли такой старый код пройти проверку временем?


Демонстрация работы twm, одного из первых оконных менеджеров для X Window System, на современном дистрибутиве Arch Linux.

Чтобы было совсем уж аутентичненько и некромантненько, я развернул виртуальную машину с голыми иксами и оконным менеджером twm, который тоже родом из 1987 года. Кто знает, может быть Larry Wall писал свой Perl используя именно twm, так сказать bleeding edge technology того времени. Используемый дистрибутив — Arch Linux. Просто потому что в его репозитории есть некоторые полезные вещи, которые впоследствии мне пригодились. Итак, поехали!
Читать дальше →

Вторник, 15 октября

Хабрахабр: Метки / perl: Розеттский код: измеряем длину кода в огромном количестве языков программирования, изучаем близость языков между собой


Скачать файл с кодом и данные можно в оригинале поста в моем блоге

Существует очень интересный проект — «Розеттский Код». Их цель — «представить решение одинаковых задач на максимально возможном числе различных языков программирования для того, чтобы продемонстрировать их общие места и различия и помочь человеку обладающему знаниями по решению проблемы одним методом узнать другой».

Этот ресурс предоставляет уникальную возможность сравнить коды программ на разных языках, этим мы и займемся в этой статье. Она является полной переработкой и доработкой статьи Джона Маклуна "Code Length Measured in 14 Languages".
Читать дальше →

Четверг, 19 сентября

grey_olli: stdin2news

Выложил в github в public проект stdin2news . Для unix way ftn с фидогейтом, ньюзсервером и прочими печеньками. :) в гугле: "grey-olli stdin2news github" , прямой линк: https://github.com/grey-olli/stdin2news

Среда, 11 сентября

Хабрахабр: Метки / perl: Нетипичный «ls» или как развлекаются линуксоиды

Однажды в телеграм чат питерского сообщества линуксоидов SPbLUG я кинул забавную задачку:

Выведите список файлов в домашней директории максимально возможным количеством способов, без использования ls или его алиасов(1 способ — 1 балл)

Такое же задание чуть позже прилетело в ещё один чат, и вот что из этого получилось: Читать дальше →

Суббота, 31 августа

Хабрахабр: Метки / perl: Стать Цукербергом или детство программиста

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

Четверг, 20 июня

Меркантильный гуру: Deprecation of my() in a false conditional

Открытие дня, цитирую:

To people wondering why this syntax persisted so long: the bug produced by this syntax was actually the only way to have state variables, before the keyword state was introduced. This is why the bug was not fixed. Some people actually used it as a short syntax to implement a state variable:

$ perl -E 'sub flip_flop { my $t if 0; $t = !$t; say $t ? "flip" : "flop"} flip_flop() for 1..4'
flip
flop
flip
flop


https://dev.to/dams/comment/c3mi

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

Пятница, 31 мая

Laziness, Impatience and Hubris: HTML::Parser vs HTML::TreeBuilder vs HTML::Gumbo

Benchmark для http://perl.org/ страницы.
Извлекаем текс и ссылки.

             Rate       Tree    Gumbo pure    Gumbo   Gumbo cb       SAX
Tree 46/s -- -63% -72% -80% -87%
Gumbo pure 122/s 167% -- -24% -47% -64%
Gumbo 161/s 252% 32% -- -30% -53%
Gumbo cb 230/s 403% 89% 43% -- -32%
SAX 339/s 642% 178% 111% 47% --

где:
SAX       - это HTML::Parser
Tree - HTML::TreeBuilder
Gumbo - HTML::Gumbo with tree output format
Gumbo cb - HTML::Gumbo with callback output format

Обнако обнаружил, что HTML::Gumbo with tree output format на некоторых HTML страничах течет.
https://rt.cpan.org/Public/Bug/Display.html?id=128667

HTML::Gumbo строит DOM при помощи HTML::Elements со стороны XSUB.

Поэтому решил попробовал строить DOM при помощи HTML::Elements с стороны pure perl, а не XSUB.
Это вариант обозначен как "Gumbo pure" в таблице результата Benchmark.

Воскресенье, 5 мая

Сообщество ru_perl в LiveJournal: serverless (cloud functions) для perl

есть ли какие нибуть облачные провайдеры поддерживающие cloud function на perl ?

(запуск perl через nodejs не предлагать)

Сообщество ru_perl в LiveJournal: perlito компилятор perl5 в java

нашел тут «готовый» компилятор — вдруг сгодится чтоб не писать компилятор с php

— кто пользуется?

— оно вообще рабочее? (судя по датам релизов около 9 лет уже пилят)

— насколько адекватный код получается — опять эмуляция perl рантайма или нормальный перевод на java типы и классы?

Пятница, 5 апреля

Хабрахабр: Метки / perl: [Перевод] Хитрый Perl-квайн

Прим. пер.: Встретил сегодня в твиттере очень забавный, на первый взгляд, тред. А потом пригляделся и понял, что он не только забавный, но и занятный. А раз уж так сложилось, что сегодня пятница, то решил, что стоит поделиться обнаруженным и с товарищами:)

image

Сохраните следующую программу в /tmp/quine.pl

Illegal division by zero at /tmp/quine.pl line 1.

Запустите её командой

perl /tmp/quine.pl

и она выведет свой собственный код.

«Квайны-обманки» довольно просто сочинять на многих языках программирования, где ошибка синтаксиса в исходнике провоцирует парсер на вывод ошибки, которая бы совпадала с исходным текстом программы. Я опубликовал несколько подобных «обманок» у себя в Twitter, включая следующую:

  File "quine.py", line 1
    File "quine.py", line 1
   ^
IndentationError: unexpected indent

Но перловый квайн в начале этой заметки — это обманка совершенно другого рода — программа разбирается корректно. Читать дальше →

Вторник, 2 апреля

Сообщество ru_perl в LiveJournal: какие есть средства для парсинга кода в perl?

надо распарсить код типизированного класса на PHP 7 и сконвертировать в java (или в идеале в С++)

тоесть на уровне ограниченного ООП синтаксиса (без учета существования классов и методов библиотек)

на входе синтаксически корректный файл с классом на PHP на выходе синтаксически корректный файл с классом на java

Вторник, 5 марта

Хабрахабр: Метки / perl: Mattermost. Интеграция с внешними сервисами (часть 2)

Продолжим разбираться с mattermost в части интеграции с внешними сервисами.


Часть вторая. Интеграция с Zabbix


Во второй части повествования о интеграции mattermost, речь пойдет про отправку сообщений об авариях из zabbix в mattermost. В результате поисков в сети был взят за основу вот
этот скрипт. Код написан на Perl, поэтому может потребоваться доустановка перловых-пакетов. Прежде чем приступить к описанию кода (он несколько изменён по сравнению с исходным) сперва, как водится, произведём некоторые настройки.

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

Вторник, 15 января

Shoor/нал: Тестирование в моджо — только через прув

Из перлового веб-фреймворка Mojolicious начиная с вышедшей ровно четыре месяца назад версии 8.0 убрана команда test

попытка выполнить тест

Теперь вместо этой команды надо использовать prove.

http://shoorick.ru/2019/01/15/mojo-no-test/

Четверг, 3 января

Хабрахабр: Метки / perl: Катаемся на Xiaomi Vacuum Cleaner

Вот и пришли новогодние праздники, а с ними и куча свободного времени, да еще и умный пылесос угодил ко мне в руки. Как только я увидел в приложении MiHome ручное управление, я сразу понял, что хочу сделать: будем управлять пылесосом с помощью геймпада Dualshock v4!

Вторник, 27 ноября

Shoor/нал: Правильный тип для офисных файлов

Перловый микрофреймворк Mojolicious::Lite умеет сам выдавать существующие файлы, но при этом не все из них получают верный тип содержимого Content-type: некоторые файлы прикидываются обычными текстовыми (text/plain), другие же вообще не имеют никакого типа — браузер такие файлы может воспринимать как угодно. В состав фреймворка входит модуль Mojolicious::Types, в котором определены MIME-типы для наиболее популярных (most common) расширений файлов:

appcache -> text/cache-manifest
atom     -> application/atom+xml
bin      -> application/octet-stream
css      -> text/css
gif      -> image/gif
gz       -> application/x-gzip
htm      -> text/html
html     -> text/html;charset=UTF-8
ico      -> image/x-icon
jpeg     -> image/jpeg
jpg      -> image/jpeg
js       -> application/javascript
json     -> application/json;charset=UTF-8
mp3      -> audio/mpeg
mp4      -> video/mp4
ogg      -> audio/ogg
ogv      -> video/ogg
pdf      -> application/pdf
png      -> image/png
rss      -> application/rss+xml
svg      -> image/svg+xml
txt      -> text/plain;charset=UTF-8
webm     -> video/webm
woff     -> font/woff
woff2    -> font/woff2
xml      -> application/xml,text/xml
zip      -> application/zip

странно, но среди них нет ни одного, относящегося к офисным пакетам. На сайте Microsoft | Developer можно найти список типов — Office 2007 File Format MIME Types for HTTP Content Streaming. Чтобы не задумываться, какие же из этих типов брать, можно сохранить все — если есть какой-нибудь конфигурационный файл, он вполне подойдёт для хранения такого списка. В моём случае конфигурационные файлы обычно в формате YAML — это удобно.
---
# ... ещё какие-нибудь параметры

# MS Office types types: rtf: application/rtf doc: application/msword dot: application/msword docx: application/vnd.openxmlformats-officedocument.wordprocessingml.document




Где-нибудь перед запуском приложения надо добавить типы (допустим, конфигурация приложения доступна через $config)
while ( my ( $ext, $type ) = each %{ $config->'types' } ) { 
    app->types->type($ext => $type);
}

Правда, при выдаче файла тип его содержимого придётся всё-таки указать явно, иначе Mojolicious вернёт тип только для знакомых файлов, а для офисных будет undef
my $type = $self->app->types->mapping->$ext->[0];
if (my $asset = $self->app->static->file("/$path/$id.$ext")) {
    $self->res->headers->content_type($type);
    return $self->reply->asset($asset);
}
else {
    return $self->reply->not_found;
}


Теперь и офисные файлы возвращаются нормально.

http://shoorick.ru/2018/11/27/office-type-mojo/

Понедельник, 26 ноября

Хабрахабр: Метки / perl: Эльфы в памяти. Выполнение ELF в оперативной памяти Linux


Бесфайловое распространение вредоносного ПО набирает популярность. Что не удивительно, ведь работа таких программ практически не оставляет следов. В этой статье мы не будем касаться техник выполнения программ в памяти Windows. Сконцентрируемся на GNU/Linux. Linux по праву доминирует в серверном сегменте, обитает на миллионах встраиваемых устройств и обеспечивает работу подавляющего большинства веб-ресурсов. Далее мы сделаем небольшой обзор возможностей исполнения программ в памяти и продемонстрируем что это возможно даже в затруднительных условиях.

Вторник, 13 ноября

Shoor/нал: Надо ругаться в боевом режиме

В состав перлового микрофреймворка Mojolicious::Lite входит класс Mojo::Log, который не просто пишет сообщения в лог, а ещё и учитывает важность сообщений — в отладочном режиме пишет много, а боевом — мало. Обнаружилось, что сообщения об ошибках имеют тот же класс debug, что и остальные сообщения

[Tue Nov 13 12:25:51 2018] [debug] Format html
[Tue Nov 13 12:25:51 2018] [debug] 200 OK (0.076118s, 13.137/s)
[Tue Nov 13 12:25:53 2018] [debug] GET "/some/url"
[Tue Nov 13 12:25:53 2018] [debug] Template "not_found.development.html.ep" not found
[Tue Nov 13 12:25:53 2018] [debug] Rendering template "not_found.html.ep"
[Tue Nov 13 12:25:53 2018] [debug] Rendering template "layouts/error.html.ep"
[Tue Nov 13 12:25:53 2018] [debug] Rendering cached template "layouts/admin.html.ep"
[Tue Nov 13 12:25:53 2018] [debug] Rendering cached template "search_form_navbar.html.ep"
[Tue Nov 13 12:25:53 2018] [debug] Format html
[Tue Nov 13 12:25:53 2018] [debug] 404 Not Found (0.004841s, 206.569/s)

из-за чего при запуске в продакшнепод реальной нагрузкой в лог не попадает почти ничего — например, там нет сообщения об ошибках 404 Not Found.

Возможно, где-нибудь во внутренностях Mojo можно исправить такую ситуацию, но мы пойдём другим путём — применим хук after_dispatch:

hook after_dispatch => sub {
    my $self = shift;
    my $req  = $self->req;
    my $res  = $self->res;

if ( $res->code >= 400 ) { $self->app->log->error(join ' ', '"' . $req->method . ' ' . $req->url . '"', $res->code, $req->headers->referrer ); } };


after_dispatch

Результат — в логе появились сообщения об ошибках:
Sending children hup signal
[Tue Nov 13 12:30:46 2018] [error] "GET /none" 404 - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"
[Tue Nov 13 12:44:50 2018] [error] "GET /SW/Rplayer.html" 404 - "Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)"


http://shoorick.ru/2018/11/13/error-messages-production/

Среда, 7 ноября

Хабрахабр: Метки / perl: Курс «Введение в Perl» от Mail.Ru Group

image

В ноябре на платформе Степик стартует курс «Введение в Perl» от разработчиков Mail.Ru Group, где слушатели будут иметь возможность изучить основы программирования на языке Perl и обозначить направления для дальнейшего развития.

В процессе обучения будут рассматриваться синтаксис языка, работа с модулями, ООП, регулярные выражения, однострочники, взаимодействие языка с операционной системой, основы ввода-вывода и параллелизм. Основной акцент сделан на базовых знаниях языка и системном программировании. Программа рассчитана на новичков: для освоения курса достаточно иметь представление об алгоритмах и знать базовые понятия (переменная, условный оператор и т.д.).
Читать дальше →

Shoor/нал: Вместо себя

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

Итак, нам нужен программист. Живьём на полный рабочий день (понедельник—пятница с 8:30 до 17). Требования и пожелания:

  • Высшее образование, желательно профильное (ЭВМ, прикладная математика, информатика, какие-нибудь информационные системы в чём-нибудь); практика показывает, что у нас можно работать, даже имея квалификацию «филолог» или «учёный-агроном», но оформление такого сотрудника — тот ещё квест, так что лучше, чтоб образование было соответствующим.

  • Знакомство с веб-технологиями: начиная с HTML, CSS (желательно с препроцессорами LESS и SASS) и до установки/настройки/обслуживания/допиливания CMS (желательно иметь опыт хотя бы с одной из тройки лидеров: WordPress, Joomla, Drupal).

  • Навыки веб-программирования — хорошее владение хотя бы одним из языков, применяемых на стороне сервера (бэкенд) — в первую очередь PHP и Perl. Ruby, Python — тоже неплохо, это лучше, чем ничего. Знание JavaScript (фронтенд). Адекватное применение фреймворков и библиотек. Способность соблюдать рекомендации по стилю кодирования (см. например, перловые perlstyle и Perl Best Practice, пхпшные PSR), а также писать документацию к своему коду.

  • Опыт работы в юниксоподобных ОС — хотя бы на минимальном уровне: взять терминал, прицепиться к серверу и ничего там не сломать. Если есть опыт конфигурирования Apache, nginx — будет плюсом. Способность не пугаться многомегабайтных логов, а спокойно извлекать из них нужную информацию штатными системными утилитами — тоже пригодится.

  • Опыт в программировании общего назначения, не обязательно связанного с вебом. Знание bash и хотя бы одного из популярных скриптовых языков (Perl, Python). Желание автоматизировать то, что не надо делать вручную.

  • Способность разобраться в чужом коде. Конечно, современный код у нас нормальный, но кое-где может встетиться суровое legacy.

  • Использование систем контроля версий (subversion, git) и багтрекеров (например, Redmine). Если есть код, опубликованный на github/bitbucket или ответы на stackoverflow — хорошо.

  • Способность грамотно излагать мысли в письменном виде по-русски и понимать написанное другими. То же самое, хотя бы на минимальном уровне — по-английски (кстати, сотрудники университета могут посещать бесплатные курсы английского и в перспективе дойти до сдачи IELTS или TOEFL).

Вторник, 6 ноября

Shoor/нал: Больше перловой документации!

Документация по языку Perl и его модулям теперь доступна и на perldoc.pl, только оно без прокси не работает, ибо заблокировано роскомпозором. Точнее, заблокирован IP-адрес (IPv4, конечно), на котором сидит этот сайт. И lilypond.org без прокси не откроется, и toggl.com, и oEmbed.com...

http://shoorick.ru/2018/11/06/more-perldoc/

Четверг, 25 октября

Shoor/нал: Инструменты разные — методы похожие

Попробовал решить одну из рабочих задач, применив нелюбимый язык PHP в комплекте с современными инструментами — получилось близко к тому, что делал сравнительно недавно на перле, с некоторыми отличиями:


  • Вместо  перла — PHP,

  • Модули тоже лежат рядом со своим кодом, но управляются не картоном, а через composer,

  • Композер и тесты может запустить (composer test), и отладочный сервер (composer start). Но можно для однообразия для обоих языков сделать Makefile и выполнять нужные действия командой make. Например, у меня запуск тестов — всегда make test, чтобы не путаться.

  • Вместо Mojolicious::Lite — микрофреймворк Slim. Для быстрого старта — Slim-Skeleton.

  • В шаблонах вместо Embedded Perl — Twig.

  • Если сайт работает через PHP-FPM, то нет нужды пинать демона каждый раз, как обновится код — он сам обрабатывает подобную ситуацию. Развёртывание свежей версии простого веб-приложения сводится к трём действиям: обновление рабочей копии (svn up либо git pull), разрешение зависимостей (composer install) и на всякий случай запуск тестов.


Слон и код

Практика показала, что разобраться с подобным комбайном можно достаточно быстро. Код при этом получается чуть более многословным, чем в Mojo, но всё равно компактным и понятным.

http://shoorick.ru/2018/10/24/slim-php/

Суббота, 13 октября

Сообщество ru_perl в LiveJournal: есть ли pure perl http клиент с поддержкой https ?

http::tiny зависит от Net::SSLeay - который бинарный

пока использую консольную утилиту curl


Воскресенье, 7 октября

Сообщество ru_perl в LiveJournal: как прочитать .env ?

формат файла .env обычный, например:

DEPLOY_DB="test1"

DEPLOY_USER="111"

DEPLOY_PASSWORD="111"

есть какойто модуль чтоб загрузить файл и переменные получить в скрипте perl в $ENV['DEPLOY_DB'] и т.д.

или это можно сделать средствами perl?

Пятница, 5 октября

Shoor/нал: Склоняем точнее

Мы стали более лучше одеваться^W^W^W правильнее склонять имена с фамилиями. Вчера вышла свежая версия предназначенного для этого перлового модуля Lingua::RU::Inflect (он же есть и на гитхабе — чуть свеже́е, чем на CPAN).

Фрагмент документации модуля Lingua::RU::Inflect

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

Итак, в новой версии:


  • Закрыты все имевшиеся по состоянию на вчерашний день issues, в том числе

  • Исправлена проблема с экспортом всего возможного оператором use Lingua::RU::Inflect ':all' — компилятор теперь не ругается на попытку экспортировать функции, убранные в другой модуль.

  • Имена с беглыми гласными (Лев, Павел) и некоторые фамилии на -ец (Песец, Писец и Отец) стали склоняться правильно — беглая гласная убегает, как ей и положено. Там, где убегать не положено (Швец, Жнец, Надудеигрец и полный крах, крушение всех надежд — шесть букв, вторая И, но не фиаско) — не убегает.

  • Женские фамилии, оканчивающиеся на -ов, -ёв, -ин, -ий, -ый — похожие на мужские, но всё-таки женские — перестали склоняться.

  • Мужские фамилии, оканчивающиеся на -их и -ых, могут всё-таки склоняться: например, Бултых, Жмых, Отдых, Дитрих, Рерих, Ульрих, Фрейндлих и Эрлих склоняются, а Синих, Серых, Карих, Чёрных — нет.

  • Точнее определяются имена, нехарактерные для русских и не подпадающие под обычное правило: женские оканчиваются на -а и -я, мужские — на согласную. В списки исключений добавлено несколько десятков имён. Определитель теперь знает тюркоязычные и исландские отчества.


В итоге количество ошибок на тестовом наборе данных сократилось в 2–3 раза, до одной ошибки на 200–300 человек — есть неочевидные случаи, потому и оценка приблизительна. Двойные имена и фамилии пока слоняются неправильно — исправлю как-нибудь потом.

http://shoorick.ru/2018/10/05/inflect-006/

Хабрахабр: Метки / perl: Perl 5: как в макросах ошибки прятались


Для пополнения списка языков программирования с открытым исходным кодом, которые были проверены с помощью статического анализатора кода PVS-Studio, был выбран Perl 5. Эта статья о найденных ошибках и трудностях просмотра результатов анализа. Количество макросов в коде столь велико, что создаётся ощущение, что код написан не на языке Си, а на каком-то его странном диалекте. Несмотря на затруднения при просмотре кода, удалось насобирать интересные проблемы, о которых и будет рассказано в этой статье.

Введение


Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения (Perl is a family of two high-level, general-purpose, interpreted, dynamic programming languages). Разработка Perl 5 была начата в 1994 году. Спустя пару десятилетий, код на языке Си с многочисленными макросами вызывает нервозность у современных программистов.

Исходный код Perl 5 был взят из официального репозитория (ветка blead). Для проверки проекта использовался статический анализатор кода PVS-Studio. Анализ проводился на операционной системе Linux, но анализатор также доступен для Windows и macOS.

Просмотр результатов анализа был не простой задачей. Дело в том, что анализатор проверяет препроцессированные .i файлы, в которых уже раскрыты все директивы препроцессора, а выдаёт предупреждения на файлы с исходным кодом. Это правильное поведение анализатора, ничего менять не нужно, но много предупреждений выдаётся на макросы! А за макросами скрывается нечитабельный код.
Читать дальше →

Понедельник, 1 октября

Сообщество ru_perl в LiveJournal: аналог php composer - что есть?

есть ли? — чтоб ставил в локальную папку проекта и подключая некий autoloader-файл в скрипте я мог использовать модули без необходимости установки через cpan и т.п.?

т е деплой осуществляется просто копированием на систему с установленным perl определенной версии и стандартными модулями 

Сообщество ru_perl в LiveJournal: как проверить что модуль бинарный (чтото компилирует)

как проверить что модуль бинарный  (чтото компилирует ) ?

например мне нужны модули реализованые на perl без требований к компиляции -

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

Мета

Поиск

Участники

Список участников в формате OPML OPML

Добавить сайт

По-другому

Приборы