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

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

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


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

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

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

XPoint.ru | Программирование::Perl::Основы: Кодировка \uFFFF

Впервые столкнулся с кодированием текста в "\u041d\u0438\u0436\u043d\u0438\u0439 \u041d\u043e\u0432\u0433\u043e\u0440\u043e\u0434".
Подскажите, пожалуйста, как привести к нормальному тексту.

Воскресенье, 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 и будет данная статья.
Читать дальше →

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

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

Привет! Я веб-разработчик, и при вёрстке того или иного HTML-шаблона постоянно приходится проверять пиксельные расстояния, соотношения, углы и пр. ненужные мелочи. Разумеется, есть всевозможные dev-тулзы, экранные лупы, скриншоты с графическим редактором, наконец, прости Господи. Но это всё не то. И тут мне пришла в голову идея. На что нам композитные менеджеры и мышка? Почему бы не мерять прямо поверх страницы браузера? Загвоздка была лишь в том, что кроме Perl, JavaScript, и прочих пхп и башей я толком никаких языков не знаю. Но я упорный. В результате я-таки написал нечто.


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

Воскресенье, 20 августа

Хабрахабр: Метки / perl: Как создавалась карта с голосами болельщиков для Олимпиады. Лекция в Яндексе

К летней Олимпиаде 2016 года в Рио-де-Жанейро Яндекс подготовил сразу несколько проектов. В том числе — «Карту болельщика». Вы могли отметить свой город на карте, которая отображалась на главной странице Яндекса. Чем больше отметок от жителей города мы получали, тем ярче горел его огонёк.

На одном из Я.Субботников руководитель группы интерфейсов главной страницы Яндекса Иван Карев объяснил, как создавалась эта карта.


Что получилось? В итоге запустили карту ночью накануне. Со страхом, но запустили, и она постепенно начала жить своей жизнью. Мы в нее залили примерно 1000 точек без голосов — просто чтобы было какое-то начальное состояние. Дальше люди потихоньку начали голосовать. Вначале темп был примерно 20 тыс. голосов в час, и так 3–5 дней. Потом постепенно снижалось, и к концу Олимпиады было порядка 2 млн голосов, сколько-то лайков в соцсетях. Мы с ней больше ничего не делали, она работала и все. Была процедура перегенерации раз в 10 минут. Она раскладывала, а мы ничего не делали, только смотрели. Успех.

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

Суббота, 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)

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

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

image

Привет %username%,

Сегодня я хотел бы рассказать про достаточно тривиальную задачу сбора логов с децентрализованных Squid proxy серверов и подводные камни с которыми мы столкнулись.

Что имеем:

  1. Squid-hq
  2. Squid-br1
  3. Squid-br2
  4. Squid-br3
  5. Squid-br4
  6. Squid-db
Читать дальше →

Пятница, 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 пока не обладает всей необходимой функциональностью).

Вторник, 18 июля

Хабрахабр: Метки / perl: Бот для Telegram за 48 часов на Perl или как купить кошачий корм не выходя из чата



Давно поглядывая в сторону темы ботов для Telegram и Facebook всё не находил времени взглянуть что же это за звери. А главное — не было внятной идеи зачем может понадобиться такой бот в реальной жизни, учитывая что ни Tg ни Fb Messanger в жизни я активно не пользуюсь.

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

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

Хабрахабр: Метки / perl: Разработка скриптов-обёрток с помощью инструмента Sparrow

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

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

Вторник, 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 пока не обладает всей необходимой функциональностью).

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

Хабрахабр: Метки / perl: Почему я больше не хочу програмировать на Perl

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

Достаточно того, что авторы языка, задумывая новые версию, по сути создали новый язык мало похожий на исходный (Perl 6), тем самым признали что текущий перл вышел не очень удачным, что в принципе понятно т.к. язык создавался как замена shell'у, а потом оброс фичами.

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

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

Хабрахабр: Метки / perl: [Перевод] «Почему вы просто не перепишете это на язык X?»

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

«Привет, я тут заметил, что ваш проект написан на [языке программирования X]. Вам бы стоило все переписать на языке Y, потому что он лучше в плане функции Z. Спасибо-до свидания!»

Изложенное в таком виде, предложение кажется совсем не трудным. Раз функция Z лучше, то, конечно, всем следует тут же переписать свои проекты на Y.


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

Вторник, 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, и т.д. очевиден, но тут надо в идеале, чтобы они были разнесены по разным файлам модулей с точки зрения архитектуры проекта.

Среда, 1 февраля

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

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

Среда, 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.

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

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

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

Среда, 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/

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

Мини-портал Perl на Opennet: Выпуск mod_perl 2.0.10

Доступна новая версия Apache-модуля mod_perl 2.0.10. Mod_perl позволяет интегрировать интерпретатор Perl в http-сервер Apache и увеличить скорость выполнения динамического контента на Perl за счёт кэширования его байткода, а также обеспечить низкоуровневый доступ perl-скриптов ко внутренностям Apache, в том числе даёт возможность создавать модули на языке Perl, управлять конфигурацией, обрабатывать все стадии прохождения запроса. В новой версии обеспечена совместимость с Perl 5.22, реализован автоматический выбор необходимых сборочных опций при использовании gcc 5 и clang, решены проблемы со сборкой в macOS/Darwin.

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

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

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

Вторник, 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/

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

XPoint.ru | Программирование::Perl::Windows аспекты: почему не появляется описание установленных модулей под AcnivePerl 5.24 под Windows 10 ?

почему не появляется описание установленных модулей под AcnivePerl 5.24 под Windows 10 ?

Довольно давно я не раз ставил Апача, Перл, ПХП, мускул на Windows XP — все работало идеально, повторяя работу реальных сайтов на разных 'nix'ах... Это было довольно удобно.

Сегодня я не делаю сайтов и пользуюсь только перлом. Недавно поставил AcnivePerl 5.24 для Windows 10 — Перл работает идеально, срабатывают и модули, которые входят в комплект поставки.

Но мне понадобилось несколько дополнительных модулей, которые я обнаружил в директории по умолчанию для ppm AcnivePerl http://search.cpan.org/dist/
Я установил эти модули

App-Exifpic
Data-Hexify
Image-EXIF
Image-EXIF-DateTime-Parser
Image-ExifTool

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

Модули почему-то установились в директории C:\usr\site, хотя сам перл установлен C:\usr\bin\perl.exe
При этом в PPM имеется столбец Area Для всех модулей, установленных вместе вместе с базовой поставкой, столбец Area имеет значение perl, а для вновь установленных модулей это значение site (то есть site написано в столбце Area)

В директории C:\usr\site образовались копии диреторий

bin
etc
lib

В этих копиях и установлены новые модули

Мне непонятно, почему нет описания установленных модулей. Почему эти модули встают в какую-то новую директорию?

Я пытался как-то использовать «установленные» модули, не получается. С чем связана такая странность? Модули, установленные с помощью PPM, всегда работали...

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

XPoint.ru | Программирование::Perl::Основы: Изменение даты файла с помощью Perl

Изменение даты файла с помощью Perl. Точнее, желательно даже изменять Date Taken в файле фотографии с помощью Актив перл Windows 10. Но сойдет и просто изменение даты.

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

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

Есть ли способ менять дату файла, прибавляя к полю даты-времени одинаковое время (или вычитать, понятно)? Конечно, желательно было бы изменить Date Taken, но, полагаю, это едва ли возможно. Можно писать и любую другую дату, а читать можно просто Date в Windows 10 — это, вероятно дата создания, и она совпадает с Date Taken.

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

Пятница, 30 сентября

Чтобы не искать: Модуль Perl Data::Printer

У меня на работе в проекте используются текстовые файлы, внутри которых используются некоторые специфические непечатаемые (non-printable) символы. В процессе разработки нужно иметь возможность видеть, что именно находитcя в файле.

Для показа таких символов я использую модуль Data::Printer. Вообще, этот модуль очень много всякого умеет, но сейчас меня интересует именно показ непечатаемых символов.

К сожалению, меня не устраивает то, как модуль выводит мои символы. Сейчас у него есть только один режим вывода - шестнадцатиричная эскейп-последовательность вида \x{XX}. Ну оке, ладно, есть еще один режим - символьная эскейп последовательность вида \X, но все мои специфические символы не попадают под символьные последовательности и могут быть показаны только как шестнадцатиричные. А это крайне неудобно.

К примеру, в файле есть запись из трех слов, разделенных символом RS (из диапазона С0 Controls). Отображаться такая запись будет так:

"one\x{1e}two\x{1e}three\x{1e}"

Некрасиво. Нечитабельно.

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

Вот ветка на Гитхабе.

Сейчас уже можно указать пять диапазонов -
C0 Controls and Basic Latin, C1 Controls and Latin-1 Supplement и Multibyte (это всё, что выше FF). Для каждого диапазона можно указать три способа эскейпинга - hex (шестнадцатиричная эскейп-последовательность), char (символьная эскейп последовательность) и самоё клёвое - picture (специальная иконка).

Вот как будет выглядеть упоминавшая выше запись при эскейпинге в picture:

"
onetwothree"

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

В принципе, оно уже работает. Но надо еще описать это в документации. На басурманском:)

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

Shoor/нал: Косые чёрточки

Перловый программист, пользующийся заодно седом и вимом, видит логотип «Дождя»:

до///дь

— Регэксп, — думает программист.

Надо больше отдыхать.

http://shoorick.ru/2016/09/27/slashes/

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

Чтобы не искать: Опции для perltidy

Всё время забываю, как делаю в разных проектах, надо записать для единообразия:

-pbp  -nola -l=0 -conv

Где:

-pbp — Форматировать по PBP
-nola — Не делать "выступ" для МЕТОК:
-l=0 — Не ломать строки по длине (длина строки 0 = бесконечность)
-conv — делать сразу финальный результат (повторный запуск ничего не изменит)

Подробности в документации.

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

Shoor/нал: Тестирование для комода

В перловых приложениях, написанных с импользованием фреймворка Mojolicious, лежащие в каталоге t тесты запустить достаточно просто — одна из доступных «из коробки» команд приложения — как раз test, которая без дополнительных параметров запускает все имеющиеся тесты:

$ ./app-name.pl test
[Fri Sep  9 13:21:06 2016] [debug] Some message
Running tests from "/path/to/t".
/path/to/t/1868-prev-next.t .. ok     
/path/to/t/1869-design.t ..... ok     
...
All tests successful.
Files=8, Tests=171,  5 wallclock secs ( 0.08 usr  0.01 sys +  3.76 cusr  0.28 csys =  4.13 CPU)
Result: PASS

Для упрощения процесса я обычно создаю Makefile, в котором пишу
SCRIPT=info.pl
APP=perl $(SCRIPT)

test: $(SCRIPT) $(APP) test


и всё, в общем-то, прекрасно работает — тесты запускаются привычной командой make test.

Недавно поставил себе свежую ActiveState Komodo IDE и, пока испытательный срок не кончился, пробую всякие её возможности, среди которых есть и тестирование. Выяснилось, что Komodo пытается найти Makefile и запустить тесты через него, но понять результаты оно не может и выводит перед каждой строкой сообщение **** Unrecognized input

Тестирование в Komodo IDE не может распознать вывод

Можно запускать тесты по-другому — командой prove — она выдаёт похожий результат:
$ prove -l
t/1868-prev-next.t .. ok     
t/1869-design.t ..... ok     
...
All tests successful.
Files=8, Tests=171,  5 wallclock secs ( 0.07 usr  0.00 sys +  3.86 cusr  0.23 csys =  4.16 CPU)
Result: PASS

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

Успешное тестирование в Komodo IDE

http://shoorick.ru/2016/09/09/testing-with-komodo-ide/

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

XPoint.ru | Программирование::Perl::Основы: Сортировка данных по двум параметрам

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

1000001 77.847
1000004 79.914
1234568 89.656
1000001 212.843
1234568 225.265
1000004 234.535

на выходе хотелось бы увидеть:

  1. 1000001 134.996
  2. 1234568 135.609
  3. 1000004 155.621

значения в списке сортируются по меньшему времени и по наименьшему количеству кругов. Сортировка никак не хочет запускаться.
[code]
#!perl
 
use strict;
use warnings;
 
open(my $in, "<:encoding(UTF-16)", "INPUT.TXT") || die("Error open INPUT.TXT\n");

# хеш фамилий спортсменов
#my %sportsmans = (
# '1000001' => 'Иванов',
# '1000004' => 'Петров',
# '1234568' => 'Зингельшухер');

my %sportsmans ; # объ¤вл¤ю хеш массив
open(my $Nam, "<:encoding(cp1252)", "NAMES.txt") || die("Error open NAMES.TXT\n"); #открываю файл с именами
while (my $line = <$Nam>) { #запускаю чтение по строкам файла
$line =~ /(\d+).(.+?) \s* $/x; #вытаскиваю с помощью рег.выраж. первое и второе слово из файла и пишу его в $id и $name
my $id = $1;
my $name = $2;
$sportsmans{$id} = $name; # организую запись в ассоциативный массив
}
close ($Nam);

        
# хеш результатов
my %rezults;
 
while(my $instr = <$in>) {
    if ($instr =~ /\@/) {
        my $str = $instr;
        chop $str; chop $str;
        $str =~ m/@\s+(\S.*\S\t?)$/;
        my $temp_str = $1;
        
for (0..1) {
            $str = <$in>;
            chop $str; chop $str;
            $str =~ m/\] (.*)$/;
            $temp_str .= $1;
            }
        
$temp_str =~ m/(\d+)\t(\d+\.\d+)/;
        unless (exists($rezults{$1})) {
            $rezults{$1} = []; # если ранее этот спортсмен не встречалс¤ - создаЄм ссылку на пустой массив при значении кеша спорстменов с ключЄм $1
            }
        push @{$rezults{$1}}, $2; # добавл¤ем результат в конец массива
        }
    }
 
open(my $out, ">", "OUTPUT1.TXT") || die("Error open OUTPUT1.TXT\n");
# ¬ыводим результаты
foreach my $nomer_fio (sort(keys(%sportsmans))){
    showResult(\%sportsmans, \%rezults, $nomer_fio);
    }
close($out);
close($in);
 
# функци¤ вывода результатов конкретного спортсмена
sub showResult {
    my ($names, $rez, $name) = @_;
    my $previousTime = 0; # врем¤ предыдущего круга
    my $ring = 1; # номер круга
    print $out "–езультаты спортсмена $names->{$name}\n\n";
    print $out " руг\tќбщее врем¤\t¬рем¤ круга\n";
            
#my $counter = 0;
    foreach my $currTime (@{$rez->{$name}}) {
   #my @list = @{$rez->{$name}};
   my $delta = sprintf "%.3f", $currTime - $previousTime;
   #print $out $list[-1] - $list[-2];
   print $out "$ring\t$currTime\t$delta\n\n";
        $ring++;
        $previousTime = $currTime;
   }
    print $out "\n\n\n";
    }
[/code]

Среда, 24 августа

Блог программиста — Perl, Ruby, C#: Catalyst, Sphinx и realtime индекс

Как создать realtime индекс Sphinx. Использование realtime индексов в Catalyst-приложении. Эксперименты проводились на Sphinx версий 2.2.10 и 2.0.4. Продолжаем развивать код из первой заметки про Sphinx. Возьмем его за основу и добавим в Catalyst использование realtime индекса. Конфигурация Sphinx и Catalyst-приложения для создания realtime индекса В данном случае, для коннекта мы будем использовать не Sphinx::Search, […]

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

Блог программиста — Perl, Ruby, C#: Sphinx и Catalyst

Как реализовать поиск помощью Sphinx в Catalyst-приложении. Как создать приложение Catalyst, конфиги для Sphinx. Приложение создавалось на Ubuntu 14.04, perl 5.18, Sphinx версии 2.2.10, модуль Sphinx::Search 0.29. Sphinx от версии к версии меняет функциональность и принципы работы, иногда очень значительно. Модуль Sphinx::Search тоже. Поэтому, не факт, что приведенный ниже код будет работать и у вас […]

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

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

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

Мета

Поиск

Участники

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

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

По-другому

Приборы