Четверг, 5 июля

Мини-портал Perl на Opennet: Релиз оптимизирующего компилятора Perl5-кода RPerl 4.0

После пяти лет существования проекта и спустя три года с момента первого выпуска традиционно ко Дню Независимости США подготовлен значительный релиз свободного оптимизирующего компилятора RPerl 4.0, позволяющего транслировать код на языке Perl 5 в представление на языке С++ с последующим преобразованием в машинный код при помощи С++-компилятора. Исходные тексты проекта распространяются под лицензиями Artistic и GPL, как и код интерпретатора Perl5.

Понедельник, 25 июня

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

После 13 месяцев разработки состоялся релиз новой стабильной ветки языка программирования Perl - 5.28. При подготовке нового выпуска было изменено около 730 тыс. строк кода, изменения затронули 2200 файлов, в разработке приняли участие 77 разработчиков.

Среда, 25 апреля

Хабрахабр: Метки / perl: Что нового в PostgreSQL 11: JSONB-трансформы



В предыдущих постах вы могли прочитать про INCLUDE-индексы и встроенный веб-поиск. Эти фичи появятся в PostgreSQL 11, релиз которого, напомню, планируется в октябре. Сегодня мне хотелось бы продолжить обзор новых фичей грядущего релиза, рассказав про JSONB-трансформы для языков PL/Python (3f44e3db) и PL/Perl (341e1661). Оба патча написаны Антоном Быковым.
Читать дальше →

Среда, 4 апреля

Shoor/нал: Тестирование перловых mojolicious-приложений в Geany

Программировать, используя какую-нибудь могучую интегрированную среду разработки (IDE) — хорошо и зачастую удобно: там «из коробки» могут предоставляться различные удобные штуковины — компиляция, отладка, тестирование, работа с системами контроля версий. Однако некоторые системы при всём своём могуществе оказываются не совсем подходящими — например, могут много весить и сильно тормозить. Приходится выбирать что-нибудь полегче, например, Geany.

В Geany есть (в том числе и средствами дополнительных модулей) всякое:


  • подсветка синтаксиса,

  • организация файлов в проекты,

  • поиск текста как в текущем файле, так и в произвольном их наборе с обходом подкаталогов,

  • поиск парных скобок и тэгов HTML/XML, а также переход по ним,

  • составление оглавления используемых функций,

  • компиляция либо проверка синтаксиса с подсветкой ошибок и быстрым переходом к ним.


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

Итак, у нас есть:

  • IDE Geany,

  • Веб-приложение, написанное на языке Perl с использованием фреймворка Mojolicious и системы управления модулями carton,

  • Желание запускать тесты почаще и попроще, без лишних переключений из редактора в терминал.


Geany позволяет для каждого проекта задать список действий: как общих для всего проекта, так и специфичных для конкретного типа файлов — найти настроки можно в меню Project → Properties → вкладка Build либо Build → Set Build Commands.

Настройки команд в Geany

По умолчанию для перловых скриптов есть только одно действие — компиляция, а по факту — проверка синтаксиса. Можно исправить эту команду, научив её работать с картоном.

Пойдём дальше — научим Geany прогонять тесты из текущего файла. В Mojolicious тесты представляют собой перловые файлы, имеющие расширение .t и лежащие в каталоге t/. Для того, чтоб, видя в редакторе открытый файл с тестами, прогнать тесты, в настройках придётся добавить путь к корневой папаке приложения. Чтоб не писать путь целиком, можно воспользоваться шаблонами. В документации пишут:
The first occurrence of each of the following character sequences in each of the command and working directory fields is substituted by the items specified below before the command is run.

  • %d - substituted by the absolute path to the directory of the current file.

  • %e - substituted by the name of the current file without the extension or path.

  • %f - substituted by the name of the current file without the path.

  • %p - if a project is open, substituted by the base path from the project.

  • %l - substituted by the line number at the current cursor position.



то есть, некоторые имена файлов и пути к папкам можно указывать специальными переменными.

Вторая команда в списке тех, что зависят от типа файла, получает в меню кирпичную иконку и (по умолчанию) клавишу F9 для быстрого запуска. Клик по кнопке с кирпичом, расположенной на панели инструментов под меню также вызовет выполнение этой второй команды.

Пробуем выполнить тест — в окно Compiler выводятся результат выполнения. Если есть ошибки, они будут выделены и в этом окне, и в исходном коде теста.

Результат тестирования в Geany

http://shoorick.ru/2018/04/04/test-mojo-geany/

Воскресенье, 1 апреля

Хабрахабр: Метки / perl: [Из песочницы] Скрипт нагрузочного тестирования для проверки соответствия текущих параметров каналов связи заявленным

Проблематика


В организациях, использующих арендованные у операторов связи каналы передачи данных VPN/Интернет для построения корпоративной филиальной сети, рано или поздно может возникнуть ситуация, когда внезапно выясняется, что каналы до некоторых удаленных подразделений не соответствуют заявленным требованиям по полосе пропускания, либо при незначительной загрузке каналов появляются потери, влияющие на качество работы сетевых сервисов.

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

Среда, 21 марта

Shoor/нал: Сфинкс спрятался? Сделаем туннель, но ненадолго

Ситуация: жил-был Сфинкс (поисковая система Sphinx) на старом сервере, да пришла пора на новый переезжать. Нужный порт на новом месте доступен скриптам, что живут там же, а снаружи — нет и не надейтесь. Результат — кое-где тесты покраснели.

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

ssh -L 9312:localhost:9312 server.name


Однако в таком виде она неудобна: команду надо запускать в одном окне терминала, тесты — в соседнем, а после завершения тестов надо ещё и закрывать SSH-сессию в первом окне.

man ssh

В инструкции (man ssh) пишут:
SYNOPSIS
     ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address]
         [-c cipher_spec] [-D [bind_address:]port] [-E log_file]
         [-e escape_char] [-F configfile] [-I pkcs11]
         [-i identity_file] [-J [user@]host[:port]] [-L address]
         [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option]
         [-p port] [-Q query_option] [-R address] [-S ctl_path]
         [-W host:port] [-w local_tun[:remote_tun]]
         [user@]hostname [command]
...
     -f      Requests ssh to go to background just before
             command execution.

То есть, ssh позволяет и команду выполнить, и перед этим уйти в фоновый режим. Приме́ним полученные знания:
ssh -fL 9312:localhost:9312 server.name sleep 5


Такая команда откроет туннель, не выводя ничего в терминал, подождёт пять секунд и закроется — почти то, что надо!

Осталось исключить рытьё тоннелей на сервере
test `uname -n` != 'server' && ssh -fL 9312:localhost:9312 server.name sleep 5


и скрестить открытие туннеля с тестированием. Тесты в перловом веб-приложении, написанном с использованием микрофреймворка Mojolicious::Lite, могут вызываться различными путями — и как ./application.pl test, и командой prove, и как-нибудь ещё — я, например, обычно создаю Makefile с нужными мне задачами и тесты выполняю командой make test — мне так удобнее. Чтоб не рассматривать все возможные варианты тестирования, надо поместить открытие туннеля прямо в тест. Если конфигурация приложения хранится в каком-либо отдельном файле (YAML хорошо для этого подходит — в Моджолишисе есть плагин для чтения ЯМЛ-конфигов), можно команду открытия туннеля хранить рядом с остальными настройками — это лучше, чем пихать её в тест. А в тесте останется лишь вызвать её после создания объекта Test::Mojo:
my $t = Test::Mojo->new();

system($t->app->config->'sphinx'->'tunnel') == 0 or warn "Cannot open SSH tunnel to Sphinx: $!";


Тесты зеленеют, можно спокойно идти заниматься музыкой :-)

P.S. Если вместо system применить функцию exec, то тест не будет выполняться до тех пор, пока не закроется туннель — тест будет ждать завершения дочернего процесса и в итоге так и останется красным.

http://shoorick.ru/2018/03/21/sphinx-tunnel/

Воскресенье, 4 марта

Сообщество ru_perl в LiveJournal: а есть компиляторы в бинарник

знаю есть perl2exe и pp но это по сути к интерпретатору прикрепляет сорцы

а есть полноценные?

чтоб както преобразовал в с/c++ и потом через gcc скомпилил (через mingw для винды)

ближайшие аналоги - у python есть Nuitka,  Nim, haxe

Вторник, 27 февраля

Shoor/нал: Тесты зеленеют

Для разминки и в честь приближения весны поковырял один зелёный сайт.

Обновление Mojolicious приложения

Попутно выяснил странную штуку: почему-то перловое приложение на Mojolicious::Lite всегда запускает тесты в режиме отладки вместо боевого несмотря на явное указание

./app.pl test -m deployment

Хотя раньше, вроде, разница была. Или не было?

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

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

http://shoorick.ru/2018/02/27/tests-become-green/

Вторник, 6 февраля

Сообщество ru_perl в LiveJournal: Поздравляю товарищи!

Вышел новый релиз perl6 Rakudo Star 2018.01.
И простейший тест из цикла со сложением целых: $s+=$x++ while $x < $y; стал работать быстрее чем в perl5.

Поздравляю товарищи!

Суббота, 3 февраля

Pilat66 blog: perl — кэширование

Модули Perl для организации кэширования данных — CHI, Cache::Cache

CHI — Unified cache handling interface

https://metacpan.org/release/CHI

my $customer = $cache->get($name); if ( !defined $customer ) { $customer = get_customer_from_db($name); $cache->set( $name, $customer, "10 minutes" ); } my $customer2 = $cache->compute($name2, "10 minutes", sub { get_customer_from_db($name2) }); $cache->remove($name); Cache::Cache — the Cache interface

https://metacpan.org/pod/Cache::Cache

use [...]

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

Shoor/нал: Нужен перлдок

Программам нужна документация и чем программа больше — тем сильнее эта самая документация нужна. Для некоторых языков программирования существует возможность генерировать документацию на основе имеющихся комментариев при помощи специальных программ. В перле подобная возможность — создавать документацию из комментариев — тоже есть, но здесь не требуются какие-то сторонние программы — всё уже сразу есть. Речь идёт о POD — Plain Old Documentation format — языке разметки для документирования перла, перловых программ и перловых модулей — текст, размеченный с его помощью, можно сразу в скрипты вставлять. Подробнее написано в man perlpod.

Можно сделать и так, чтоб консольное перловое приложение выводило документацию о себе, если запущено с определёнными аргументами, например, -?, -h или --help вызывало бы вывод краткой информации, а -m, --man или --manual — полной. Делается это так:

#!/usr/bin/perl

=head1 SYNOPSIS

./script-name.pl I<[options]>

=head1 OPTIONS

... ещё документация

=cut

use Getopt::Long; use Pod::Usage qw( pod2usage );

my $need_help; my $need_manual;

GetOptions( # обработка других аргументов 'help|?' => \$need_help, 'manual' => \$need_manual, );

pod2usage(1) if $need_help; pod2usage('verbose' => 2) if $need_manual;


Запускаем с аргументом -? — видим краткую справку, пробуем -m — видим что попало: где-то видна документация, а где-то — исходный код. Если после выхода из просмотра этого кода внимательнее посмотреть на экран, можно заметить сообщение
You need to install the perl-doc package to use this program.

Причина — отсутствие перлдока. В некоторых системах, например, во FreeBSD, perldoc сразу установлен, в других, таких как Debian — нет, и его надо ставить отдельно. Если поставить perldoc, то и скрипты начинают нормально выводить свою документацию:

$ perldoc ./script-name.pl
You need to install the perl-doc package to use this program.
$ sudo apt install perl-doc
...
$ ./script-name.pl --man
SYNOPSIS
./script-name.pl [options]
...



http://shoorick.ru/2018/01/26/perldoc-needed/

Среда, 10 января

PerlNews.Ru: Опубликовано расписание Perl devroom на FOSDEM

Опубликовано расписание Perl devroom на конференции FOSDEM 2018.

FOSDEM - это ежегодная конференция для open-source разработчиков, где можно услышать множество докладов про свободное ПО "из первых рук" - от создателей этого самого ПО, а также насладиться бельгийскими вафлями и пивом. Полное расписание конференции также доступно на сайте мероприятия.

Конференция традиционно проходит в Брюсселе, Бельгия, в конце января - начале февраля. В этом году даты конференции: 3 и 4 февраля. В конференции участвует более 5000 человек

Темы: FOSDEM конференция брюссель пиво yapc

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

Хабрахабр: Метки / perl: Модуль Net::Ethereum для работы с контрактами Solidity



Обычно когда мне нужно использовать какой-то новый сервис или технологию из скриптов Perl, я захожу на CPAN, и там уже есть один или несколько подходящих модулей. Однако в случае фреймворков для работы с узлами блокчейна Ethereum и контрактами Solidity, к сожалению, мне не удалось найти нужного модуля.

Мы планируем в ближайшее время использовать смарт-контракты Solidity сети Ethereum в нашем SAAS-сервисе интернет-магазинов, написанном на Perl. Поэтому мне ничего не оставалось, как написать свой модуль Net::Ethereum (этот модуль уже доступен на CPAN, хотя и в виде альфа-версии).

Надеюсь, что модуль Net::Ethereum будет полезен тем, кто хочет интегрировать свои Perl-системы с контрактами блокчейна Ethereum. Буду очень благодарен тем, кто воспользуется этим модулем и пришлет мне свои соображения по его доработке, а также информацию о найденных ошибках.
Читать дальше →

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

Хабрахабр: Метки / perl: К вопросу о принципах работы асинхронных решений

Предлагаем вашему вниманию отличное новогоднее чтение для программистов :) Статью Александра Чистякова ( alexclear ), которую тот написал, вдохновившись тезисами доклада Mons Anderson ( codesign ) на HighLoad++ 2017.

Александр Чистяков

Давайте поговорим о принципах работы асинхронных решений и рассмотрим предложенную Mons Anderson классификацию. Возможно, нам удастся предложить нашу собственную классификацию.

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

Осторожно, под катом жёсткий хардкор! Читать дальше →

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

Сообщество ru_perl в LiveJournal: perl11

http://perl11.org/

насколько юзабельно и стабильно?

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

Мини-портал Perl на Opennet: Языку Perl исполнилось 30 лет

Сообщество разработчиков языка программирования Perl празднует тридцатилетие проекта. 18 декабря 1987 года, увлекающийся программированием лингвист Ларри Уолл (Larry Wall), уже известный в то время созданием программы patch, представил первый публичный релиз интерпретатора Perl.

Воскресенье, 10 декабря

Мини-портал Perl на Opennet: Неявные свойства языков программирования, которые могут привести к уязвимостям

Исследователи из компании IOActive представили на конференции Black Hat Europe доклад, в котором подвели итоги работы по выявлению недокументированной функциональности в интерпретируемых языках программирования, которая может потенциально стать причиной появления уязвимостей в приложениях. Код разработанного в рамках исследования инструментария ZDiFF (Extended Differential Fuzzing Framework), который применялся для выявления потенциальных уязвимостей, опубликован под лицензией GPLv3.

Вторник, 5 декабря

Мини-портал Perl на Opennet: 16 декабря в Санкт-Петербурге пройдёт семинар для разработчиков на языке Perl

В Санкт-Петербурге в восьмой раз пройдёт ежегодный семинар Saint Perl, посвященный современной разработке на языке Perl. Встреча по традиции приурочена ко дню рождения языка Perl и состоится 16 декабря. Участие в мероприятии бесплатное, но требуется регистрация. О точном месте проведения будет.

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

Хабрахабр: Метки / perl: Обзор плагинов SparrowHub

image


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


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

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

Пятница, 10 ноября

Мини-портал Perl на Opennet: Выпуск Rakudo Star 2017.10, дистрибутива Perl 6

Состоялся релиз пакета Rakudo Star 2017.10, включающего компилятор Rakudo, виртуальную машину MoarVM, документацию, модули и инструменты, необходимые для разработки на языке Perl 6. Компилятор соответствует спецификации Perl v6.c, за исключением поддержки расширенных макросов, неблокирующего ввода/вывода и ряда мелких особенностей, которые планируется довести до рабочего состояния в будущих выпусках. В качестве виртуальной машины для исполнения байткода предлагается MoarVM, которая проходит все тесты (альтернативный бэкенд на базе JVM пока не обладает всей необходимой функциональностью).

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

Хабрахабр: Метки / perl: Приглашаем на конференцию YAPC::Russia 4 ноября


В эту субботу мы приглашаем всех Perl’оводов и им сочувствующих на ежегодную конференцию YAPC::Russia, посвящённую языку Perl и его сообществу. Она проводится в Москве и Санкт-Петербурге под названием May Perl, а в Киеве — под названием Perl Mova.


«Столичная» часть конференции пройдёт 4 ноября в московском офисе Mail.Ru Group. Здесь соберутся Perl-профессионалы из разных уголков земного шара, чтобы обменяться опытом, завести новые знакомства и пообщаться с единомышленниками в неформальной и приятной обстановке.

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

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

Хабрахабр: Метки / perl: Рекомендательная система на коленке как средство против экзистенциального кризиса

Может быть отсылка к экзистенциальному кризису звучит слишком громко, но лично для меня проблема поиска и выбора (или выбора и поиска, это имеет значение) как в мире интернета так и в мире простых вещей по мучениям иногда приближается к нему. Выбор фильма на вечер, книги неизвестного автора, сосисок в магазине, нового утюга — дикое количество вариантов. Особенно когда не очень знаешь чего хочешь. Да и когда знаешь, но не можешь попробовать — тоже не праздник — мир разнообразен и все сразу не перепробуешь.

image

Рекомендательные системы сильно помогают в выборе, но не везде и не всегда так как хотелось бы. Часто не учитывается семантика содержания. Кроме того, во весь рост встает проблема "длинного хвоста", когда рекомендации сосредоточены только на самых популярных позициях, а интересные, но не очень популярные в массе вещи ими не охвачены.

Cвой эксперимент в этом направлении я решил начать с поиска интересных текстов взяв для этого довольно небольшое, но пишущее сообщество авторов, которые еще остались на блоговой платформе Живой Журнал. О том как сделать собственную рекомендательную систему а в результате получить еще и помощник в выборе вина на вечер — под катом.
Читать дальше →

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

Хабрахабр: Метки / perl: Быстрая разработка скриптов мониторинга с помощью Bash, Outthentic и Sparrow

Доброе время суток!


В данном посте я расскажу о том, как просто и быстро писать различные скрипты проверки состояния инфраструктуры с помощью инструментов Bash, Outthentic и Sparrow ...

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

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

Shoor/нал: Чтоб не тыкать вручную — автоматическое совмещение кадров в Hugin

Под виндой для склеивания панорам есть Kolor Autopano, под линуксом — Hugin. В принципе, Хугином вполне можно пользоваться: единственное, чего в нём не было по сравнению с Автопано — автоматического поиска серий кадров, но это не критично. С остальными задачами — аккуратно совместить кадры, внося необходимые геометрические искажения и поправляя цвет, дать пользователю выбрать тип проекциии сделать панораму в нужном размере — Хугин справляется. Однако с недавних пор в нём пропала возможность автоматически находить контрольные точки для совмещения кадров — приходится указывать их вручную. На панорамах из двух-трёх кадров это ещё терпимо, но если кадров десяток и панорам — не одна, это быстро утомляет.

Причина оказалась в том, что программу autopano-sift, которая использовалась для совмещения, из доступных в Ubuntu программ убрали, а альтернативу — autopano-sift-c — не добавили.

Способ решения — поставить что-нибудь из программ совмещения, с которыми Хугин умеет работать. Мне, как перлопрограммеру, ближе способ, который сводится к установке модуля Panotools::Script, и выбору Match-n-shift в настройках Хугина (File → Preferences → Control Point Detectors) в качестве программы по умолчанию. Попробовал — работает.

Аргазинское водохранилище

Аргазинское водохранилище

Аргазинское водохранилище

Река Миасс

http://shoorick.ru/2017/09/10/rather-than-autopano/

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

Хабрахабр: Метки / perl: Простенький скрипт поиска возможно осиротевших файлов проекта

Леность ли моя тому причиной или болезненная неприязнь к комбайнам, но у меня как-то не сложились отношения с большими толстыми довольными IDE. Довольствуюсь простым ламповым Geany и несколькими самописными скриптами, количество коих растёт по мере необходимости.

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

О некоторых таких скриптах решил попробовать писать сюда. Может, кому пригодятся (да и заточить под себя какой-нибудь из них всегда можно). Если нет — ругайтесь в комментариях, учту. Итак.
Читать дальше →

Четверг, 31 августа

Хабрахабр: Метки / perl: Резервное копирование конфигурации коммутаторов, или прикручиваем немножко автоматизации к GLPI

Иногда, в нашей работе, возникает потребность учёта всего сетевого оборудования: типы, модели, адреса, прошивки, схемы соединений и так далее. И вот, просмотрев несколько вариантов ПО, выбор пал на открытый проект GLPI. Функционал у системы богатый, конкретно в нашем случае, использовалась для учёта «железа» и, главное, для учёта схем соединения (какой порт какого коммутатора куда подключен). В рамках осуществления основной деятельности организации (предоставление доступка к интернету), возникла (конечно не вдруг, а сугубо по плану) потребность резервного копирования конфигурации коммутаторов, зачем и почему данная операция необходима — это должно быть всем известно. А о том, как это реализовать, в связке с GLPI и будет данная статья.
Читать дальше →

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

Сообщество ru_perl в LiveJournal: MoarVM performance


=================1=====================
$time perl -e 'my $x=0; $x++ while $x < 300000000; print $x;'
300000000
real 0m12.047s
user 0m12.040s
sys 0m0.000s
=================2=====================
$perl6 -v
This is Rakudo version 2017.07 built on MoarVM version 2017.07
implementing Perl 6.c.
=================3=====================
$time perl6 -e 'my $x=0; $x++ while $x < 300000000; print $x;'
300000000
real 0m46.730s
user 0m46.664s
sys 0m0.024s
=================4=====================
$time perl6 -e 'my Int $x=0; $x++ while $x < 300000000; print $x;'
300000000
real 0m46.925s
user 0m46.840s
sys 0m0.028s
=================5=====================
$time perl6 -e 'my int $x=0; $x++ while $x < 300000000; print $x;'
300000000
real 0m2.390s
user 0m2.356s
sys 0m0.028s
=================6=====================
$time perl6 -e 'my uint $x=0; $x++ while $x < 300000000; print $x;'
300000000
real 0m12.103s
user 0m12.060s
sys 0m0.020s
=================7=====================
$time perl6 -e 'say (1..300000000).elems'
300000000
real 0m0.165s
user 0m0.144s
sys 0m0.020s
=================8=====================
$time perl -e '$s+=$x++ while $x < 30000000; print $s;'
449999985000000
real 0m2.336s
user 0m2.332s
sys 0m0.000s
=================9=====================
$time perl6 -e 'my int $x=0; my int $s=0; $s+=$x++ while $x < 30000000; say $s;'
449999985000000
real 0m17.609s
user 0m16.640s
sys 0m0.948s
=================10=====================
$time perl6 -e 'my uint $x=0; my uint $s=0; $s+=$x++ while $x < 30000000; say $s;'
449999985000000
real 0m21.325s
user 0m20.320s
sys 0m0.964s
=================11=====================
$time perl6 -e 'say [+] 1..29999999'
449999985000000
real 0m0.164s
user 0m0.124s
sys 0m0.036s

Мораль:  элементы быстродействия присутствуют, но странностей много (5 vs 6 и 8 vs 9)

Пятница, 28 июля

Shoor/нал: Автомобильный видеорегистратор для записи GPS-треков

Перед отпуском приобрёл видеорегистратор Mystery MDR-970HDG — помимо записи в видеофайл того, что находится перед его объективом, он может определять своё положение по GPS-спутникам. В инструкции описано, как смотреть получившиеся файлы специальным видеоплеером (под Windows, разумеется), который должен показывать помимо картинки и место, где она была снята, но это — не наш метод. Нам нужен трек!

Расковыривание собранных данных показало:

1. В качестве контейнера для видеороликов используется QuickTime — каталог DCIM/100MEDIA заполнен файлами FILE№№№№.MOV, кодек для видео — H.264. Для преобразования в MP4 можно применять FFMPEG:

ffmpeg -i FILE0123.MOV  -f mp4 -vcodec copy -acodec copy 0123.mp4

2. Геоданные хранятся в текстовом виде — нет нужды ковырять видеофайлы в надежде извлечь координаты оттуда. С одной стороны, на карте памяти есть каталог GPSLog, в который сваливаются файлы с именами вида YYYYmmdd_HHMMSS.log, каждый их которых — текстовый, по строке на точку, поля разделены символами табуляции:
2017-07-27 19:07:46 N56.254678      E59.273161      313.4   38.72   345

Можно легко догадаться, что за поля здесь представлены — это время, широта, долгота, высота над уровнем моря в местах, скорость в километрах в час и курс в градусах. Так как регистратор смотрит вперёд, то курс можно считать совпадающим с направлением взгляда — этот параметр как только не называют: то Heading, то Bearing, то ImgDirection.

Есть и другое место — в DCIM/INFO для каждого видеофрагмента можно найти соответствующий файл FILE№№№№.dat, также являющийся текстовым с полями, разделёнными символом табуляции. Там тоже можно найти координаты:
[S]   0       0       0
[S]     0       0       0
[S]     0       0       0
[S]     0       0       0
[S]     0       0       0
[S]     0       0       0
[S]     0       0       0
[S]     0       0       0
[S]     0       0       0
[G]     2017-07-20 18:41:10     N56.740461      E60.735576      38      222

Похоже, строки, начинающиеся с [S], отписывают кадры, а те, в первом поле которых стоит [G] — геоданные. В таких файлах нет данных о высоте, да и скорость округлена до целого.

3. Эксперименты по скармливанию файлов GPSLog/*.log ГПСБабелю ничего не дали: среди различных текстовых форматов, которые знает GPSBabel, не нашлось подходящего. Пришлось по-быстрому написать свой конвертер и выложить на GitHub, чтоб не забыть довести до ума — там надо бы с часовыми поясами разобраться.

4. Трек за городом пишется весьма точно — куда лучше, чем телефоном. Например, на этой картинке (здесь трек наложен на карту OpenStreetMap) видно, и что трек идёт по дорогам, и что часть пути прошла по встречной проезжей части (своя закрыта на ремонт)

Трек по подъезду к Екатеринбургу

А вот в городе всё не так хорошо — треки иногда на сотни метров сдвинуты во дворы

Трек по Челябинску

Вывод: видеорегистратор Mystery MDR-970HDG вполне можно использовать в качестве GPS-логгера, но треки, добытые в условиях плотной городской застройки, надо фильтровать.

http://shoorick.ru/2017/07/28/dvr-as-gps-logger/

Четверг, 27 июля

Мини-портал Perl на Opennet: Выпуск Rakudo Star 2017.07, дистрибутива Perl 6

Представлен релиз пакета Rakudo Star 2017.07, включающего компилятор Rakudo, виртуальную машину MoarVM, документацию, модули и инструменты, необходимые для разработки на языке Perl 6. Компилятор соответствует спецификации Perl v6.c, за исключением поддержки расширенных макросов, неблокирующего ввода/вывода и ряда мелких особенностей, которые планируется довести до рабочего состояния в будущих выпусках. В качестве виртуальной машины для исполнения байткода предлагается MoarVM, которая проходит все тесты (альтернативный бэкенд на базе JVM пока не обладает всей необходимой функциональностью).

Вторник, 20 июня

Сообщество ru_perl в LiveJournal: вот как бывает:

#!/usr/bin/perl -w
use strict;

print ";-)\n" if "foo" =~ //; "bar" =~ /bar/; print ":-(\n" if "foo" =~ //;

Среда, 31 мая

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

После года разработки состоялся релиз новой стабильной ветки языка программирования Perl - 5.26. При подготовке нового выпуска было изменено около 360 тыс. строк кода, изменения затронули 2600 файлов, в разработке приняли участие 86 разработчиков.

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

Мини-портал Perl на Opennet: Первый выпуск компилятора Perl 5 в JVM от проекта Perlito

Опубликован первый выпуск Java-бэкенда компилятора Perlito5, предназначенного для обеспечения компиляции исходных текстов на языке Perl 5 в байткод JVM, который может быть выполнен в виртуальной машине Java 7. Проект Perlito также предоставляет бэкенды для компиляции Perl 5 в JavaScript, Perl 6 в Perl 5, JavaScript и Python 2.6. В разработке находятся бэкенды для Ruby, Go и Common.

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

Мини-портал Perl на Opennet: Выпуск Rakudo Star 2017.04, дистрибутива Perl 6

Представлен релиз пакета Rakudo Star 2017.04, включающего компилятор Rakudo, виртуальную машину MoarVM, документацию, модули и инструменты, необходимые для разработки на языке Perl 6. Компилятор соответствует спецификации Perl v6.c, за исключением поддержки расширенных макросов, неблокирующего ввода/вывода и ряда мелких особенностей, которые планируется довести до рабочего состояния в будущих выпусках. В качестве виртуальной машины для исполнения байткода предлагается MoarVM, которая проходит все тесты (альтернативный бэкенд на базе JVM пока не обладает всей необходимой функциональностью).

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

Сообщество ru_perl в LiveJournal: print 100.101.102

Почему perl -e 'print 100.101.102' выводит 'def'?
Понятно, что 100, 101 и 102 - это ASCII-коды символов 'd', 'e' и 'f', но почему произошло такое преобразование, почему это не то же самое, что perl -e 'print 100 . 101 . 102', как было бы ожидаемо? Или perl -e 'print 100.101 . 102' - тоже понятно.

Скорее всего, где-то в доке об этом написано, но не могу найти, так что просто покажите, не пинайте сильно.

Среда, 29 марта

Сообщество ru_perl в LiveJournal: Быстродействие Perl6

perl6 -v This is Rakudo version 2017.01 built on MoarVM version 2017.01 implementing Perl 6.c.
perl -v This is perl 5, version 22, subversion 1 (v5.22.1) built for x86_64-linux-gnu-thread-multi
julia -v julia version 0.4.5
python -V Python 2.7.12
pypy -V Python 2.7.10 (5.1.2+dfsg-1~16.04, Jun 16 2016, 17:37:42)
[PyPy 5.1.2 with GCC 5.3.1 20160413]

time perl6 -e 'my $x=0; $x++ while $x < 30000000' real 0m11.016s
time perl6 -e 'my int $x=0; $x++ while $x < 30000000' real 0m0.380s
time perl -e '$x++ while $x < 30000000' real 0m1.321s
time julia -e 'x=0; while x<30000000; x+=1; end' real 0m2.239s
time python -c 'x=0
while x<30000000: x+=1'
real 0m2.824s
time pypy -c 'x=0
while x<30000000: x+=1'
real 0m0.054s

Четверг, 16 марта

СетевойГибитобой: Bshellz shell autorenew — IRC-perl-скрипт для обновления аккаунта в Bshellz

Как-то я писал про бесплатный linux shell от провайдера Bshellz в заметке Бесплатный Linux-shell с Tmux на борту. Там же был приведён способ автоматического продления аккаунта — путём отправки (по расписанию) служебного сообщения боту Beschbot с помощью имеющегося на самом хостинге IRC-клиента irssi. Время показало, что способ, как и следовало ожидать, не лишён недостатков. А […]

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

Сообщество ru_perl в LiveJournal: Spreadsheet::WriteExcel - как убрать колонтитулы

Господа, вопрос такой: генериться эксель-файл в формате xls с помощью Spreadsheet::WriteExcel. Надо, чтобы на печати верхний и нижний колонтитулы были равны 0. По умолчанию там стоит 1.3 у верхнего и нижнего колонтитула.
Отступы все "как в образце" сделал с помощью set_margin_...

А вот как указать нулевые размеры для верхнего и нижнего колонтитула. Методы set_header и set_footer задают только их содержимое.

Пятница, 10 февраля

Чтобы не искать: Модуль Image::Compare



Недавно я писал, что модуль для сравнения изображений Image::Compare содержит пару ошибок, которые мне не дают покоя. А автор на багрепорты не реагирует.

Что ж, пришлось приложить некоторые усилия и самому стать майнтейнером модуля.

Усилия, конечно, не ахти какие, в основном всё сводится к нескольким письмам автору с копией на modules@perl.org. Автор, обычно, динамит где-то с месяц, потом вмешивается Neil Bowers и назначает тебя майнтейнером...

В общем, теперь я разместил исходники модуля на Гитхабе и исправил раздражавший меня варнинг "Constants from lexical variables potentially modified elsewhere are deprecated".

Вторник, 7 февраля

Shoor/нал: Местное время

Пара наблюдений относящихся к встроенной перловой функции localtime:

Код на перле


  1. Заданное в секундах с начала эпохи время вполне может быть отрицательным — то есть можно работать с датами до 1 января 1970 года.
  2. Разница между местным временем, возвращаемым функцией localtime и временем по Гринвичу (функция gmtime) непостоянна. Само по себе это не удивительно — существует же кое-гд до сих пор летнее время. Удивительнее другое: разница эта, если залезть поглубже, иногда не является целым числом часов — можно проверить, например, как менялась она начиная с 1900 года:

#!/usr/bin/perl

use POSIX qw( strftime );

my $SEC_PER_DAY = 24*60*60; my $old_time = '';

for my $day ( -25567 .. 0 ) my @moment = localtime( $day * $SEC_PER_DAY ); my $time = strftime '%X', @moment; # HH:MM:SS if ( $old_time ne $time ) printf "%s %s\n", strftime( '%x', @moment ), $time; $old_time = $time;


Результат неожиданный:

  • 01.01.1900 04:02:33

  • 03.07.1916 03:45:05

  • 16.07.1919 04:00:00

  • 21.06.1930 05:00:00


и не всегда понятный: если 04:02:33 ещё как-то можно объяснить — это время соответствует долготе 60,6375° в. д. — пара километров от нынешнего центра Екатеринбурга, то 03:45:05 откуда? Ближайший крупный город с долготой 56,2708° в. д. — Пермь. Что-то я сильно сомневаюсь, что в дореволюціонномъ Челябинске действовало пермское время.

http://shoorick.ru/2017/02/07/localtime/

Пятница, 3 февраля

Сообщество ru_perl в LiveJournal: Использование модуля с генерируемым "на лету" именем.

Задача такая. Есть ряд модулей, каждый в отдельном PM-файле. Внутри модулей хранится хэш с данными, имя хэша во всех модулях одинаковое %Hash. Причем одновременно может быть загружен не один модуль.
Имена модулей имеют вид
Module_aaa.pm
Module_bbb.pm
Module_ccc.pm
...
В текущий момент я знаю. что мне нужно взять данные из модуля 'aaa' или 'ccc'. С помощью Module::Load я могу загрузить только нужные мне в текущий запуск скрипта модули. Но как мне обратиться к нужному модулю по ключу? Понятно, что напрашивается куча тернарников вида

$value = $key='aaa' ? $Module_aaa::Hash{key} : $key='bbb' ? $Module_bbb::Hash{key} :$key='ccc' ? $Module_ccc::Hash{key} : '';

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

Если знаете, подскажите также вариант для случая, если модуль один, а данные хранятся в нем в хэшах %Hash_aaa, %Hash_bbb и т.д.

P.S. Вариант использовать один сложных хэшей с ключами aaa, bbb, и т.д. очевиден, но тут надо в идеале, чтобы они были разнесены по разным файлам модулей с точки зрения архитектуры проекта.

Среда, 11 января

Сообщество ru_perl в LiveJournal: ищу работу

Привет.

Есть опыт работы с нагруженными системами.
Проектно, по часам, фиксированно, как угодно ~ 500р/час
Удаленно 10-20 часов в неделю. С апреля готов работать в офисе в Москве.

Василий
thecamelsway@gmail.com

Воскресенье, 8 января

what_me: Многопоточная качалка на Erlang

Ну вот, моя первая программа на эрланге. https://github.com/onokhov/erlang_web_crawler/

Язык занятный. Параллелить и устраивать межпроцессное общение просто. Но остальное писать неудобно, думаю, что просто с непривычки. И документацию я ещё не прочитал. Осилил только getting_started, описания модулей string, list, re, httpc и ещё некоторых.
Сторонние модули использовать не хотелось, поэтому то, что в штатных модулях не нашел, делал сам.

Сравнил по производительности с перловой качалкой, эрланговская получилась немного быстрее. За минуту с форума glav.su перловая вытянула 26МБ, а эрланговская 26,7МБ.

Хотелось бы критики по коду от людей эрланг знающих.

Update: Закоммитил правки по комментариям. Заменены паттерны, ++ заменен на [|], использованы list comprehensions.
Update 2: Отказ от prespawn. И правки по стилю
Update 3: Багфикс в receive_text_data/2. Правки по стилю

Пятница, 9 декабря

Чтобы не искать: Модуль Image::Compare



По работе понадобилось использовать модуль Image::Compare. В нем есть пара ошибок, бегрепорты в трекере висят, автор не реагирует. Последнее обновление модуля было два года назад. Репозитория на Гитхабе у модуля нет.

Походу, придется опять брать дело в свои руки и пытаться получить контроль над модулем, как это уже было однажды с модулем XML::WBXML.

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

what_me: Многопоточная качалка на Perl

в FB ленте увидел пост zamotivator про то, как он делал своё же тестовое задание - многопоточный загрузчик. Я такие штучки люблю, и сделал свой https://github.com/onokhov/crawler/blob/master/crawler.pl. Естественно на Perl.

Для этой задачки было бы достаточно параллельных коннектов, сделанных с AnyEvent::HTTP. Но параллельность там не совсем настоящая, потому как читать ответы, парсить их и записывать в файлы всё равно пришлось бы в один поток. Да и скучно было бы писать программу, основная часть которой уже написана в мануале по AnyEvent. Поэтому я решил реализовать параллельность форками.

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

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

Скрипт ни в коей мере не предназначен для замены wget, это просто программистская разминка.

Пятница, 11 ноября

Сообщество ru_perl в LiveJournal: Форматирование ячеек в таблицах Google

Стоит задача из скрипта Perl сохранять информацию в таблицах Гугла. При этом в зависимости от значений одной из колонок надо изменять фоновый цвет строки.
Я нашел только один работающий модуль для работы с Гугл АПИ - Net::Google::Spreadsheets. Но он позволяет работать только с данными.

Знает ли кто-либо способ, как не только менять данные, но и форматировать их, в частности, менять фоновый цвет?

Четверг, 10 ноября

Pilat66 blog: Kaitai Struct — Парсер бинарных форматов

Kaitai Struct

A new way to develop parsers for binary structures.

Поддерживает генерацию кода на языках:

C++/STL C# Java JavaScript Perl PHP Python Ruby Пример генерации кода Описание формата meta: id: dos_mz file-extension: exe endian: le seq: - id: mz_header type: mz_header - id: mz_header2 size: mz_header.relocations_ofs - 0x1c - id: relocations type: relocation [...]

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

Чтобы не искать: Установка перл-модулей из гит-репозиториев. Всё плохо


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

- Стандартный cpan не умеет брать модули из репозитория.
- Продвинутый cpanm умеет, но только вручную. Из Makefile.PL или cpanfile читать не умеет.
- carton, как надстройка над cpanm, умеет то же, что и cpanm. Т.е. не умеет.
- cpm умеет читать cpanfile, но только при запуске непосредственно в корне устанавливаемого модуля. Рекурсивно по зависимостям дальше не идёт.

Беда-печаль...

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

Меркантильный гуру: Mojolicious

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

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

Shoor/нал: Четверть гигабайта

Чего только нет в редакторе Komodo Edit! По сравнению с могучей Komodo IDE нет отладчика, нет профилировщика, нет модульного тестирования, нет интерфейса к системам контроля версий... А весит всё равно дофига!

Komodo Edit

Установочный архив весит четверть гигабайта, потому что внутрь засунули файрфокс, питон и яваскрипт.

http://shoorick.ru/2016/10/31/quarter-of-gigabyte/

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

Shoor/нал: Statt zu schlafen

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

Могу:


  • Программировать на Перле — как древние CGI-приложения, так и современные, с использованием фреймворков Mojolicious, Dancer, Catalyst.

  • Программировать на PHP: в основном допиливать существующие приложения, а не писать с нуля что-то большое.

  • Настраивать CMS Drupal и WordPress, а также дорабатывать их темы оформления.

  • Настраивать и дорабатывать Open Journal Systems, включая реализацию многоязычности имён — делал это в OJS 2.4.2, 2.4.7.1, 2.4.8.1, думаю, и в Open Conference Systems смогу реализовать.

  • Кроссбраузерно верстать веб-страницы.

  • Немножко программировать на Руби (в том числе, с использованием Ruby on Rails) — наверное, на юниорском уровне.

  • Немножко программировать на ЯваСкрипте — как голый JavaScript, так и с jQuery.

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

  • (хоть и не считаю это основными профессиональными навыками) фотографировать, петь, аккомпанировать на шестиструнной гитаре, водить легковой автомобиль, быть Дедом Морозом, набирать ноты в MuseScore и LilyPond — медленно, но красиво.


1000 рублей

Хочу от 15 USD / 1 kRUB в час.




Statt zu schlafen (нем.) — вместо того, чтобы спать

http://shoorick.ru/2016/10/18/statt-zu-schlafen/

Мета

Поиск

Участники

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

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

По-другому

Приборы