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

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

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

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

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

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

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

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

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

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


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

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

Хабрахабр: Метки / perl: Аудит актуальных уязвимостей без регистрации и смс

Вступление


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

В этом топике я расскажу о том, как мы решили эту проблему. И да, Perl* жив :)
Читать дальше →

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

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

В данной статье будет рассмотрено функциональное программирование на примере скрипта поиска битых ссылок с использованием AnyEvent::HTTP. Будут рассмотрены следующие темы:


  • анонимные подпрограммы;
  • замыкания (closures);
  • функции обратного вызова (callbacks);
Читать дальше →

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

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

Хабрахабр: Метки / perl: Отчет с Moscow.pm 2 февраля



2 февраля в нашем московском офисе прошла встреча Perl-программистов Moscow.pm, ставшая уже традиционной на протяжении 10 лет. Под катом вы сможете найти видео и презентации трех докладов:

  • «Автотесты», Вадим Пуштаев, программист отдела внутренней разработки Поиска Mail.Ru
  • «Введение в асинхронно-событийное программирование на Perl», Андрей Еньшин, младший программист команды разработки веб-бэкенда Облака Mail.Ru
  • «Coro. Intro», Евгений Вансевич, программист Почты Mail.Ru
Читать дальше →

Четверг, 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. Правки по стилю

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

Хабрахабр: Метки / perl: Sparrow — система управления пользовательскими скриптами

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


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

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

Хабрахабр: Метки / perl: Модуль HTML::Phl для обработки HTML-документов, содержащих инструкции с кодом Perl



В статье приведена спецификация модуля HTML::Phl для работы с HTML-документами, содержащими код языка программирования Perl.

Задача модуля HTML::Phl — выбрать из текстового документа формата HTML, размещенный в нем особым образом perl-код, выполнить кое-какие манипуляции над ним и остальным кодом, объединить полученное в единый код perl и «скормить» всё это 'eval', получая на выходе сгенерированную HTML-страницу, воспроизводимую веб-браузером.

Пример
1   <HTML>
2   <HEAD>
3   <META content="text/html; charset=UTF-8" http-equiv="Content-Type">
4   <TITLE>Пример PHL</TITLE>
5   </HEAD>
6   
7   Создаем два дочерних процесса f1 и f2<br>
8
9   %pl  include("process_win.phl", "fork decode=cp1251", "f1");
10  %pl  include("process_utf.phl", "fork decode=utf8", "f2");
11
12  Ждем завершения процессов<br>
13
14  <%pl my %join = include("JOIN", "f1 f2"); %>
15
16  Результаты выполнения процессов<br>
17
18  <%pl
19     foreach my $key(keys(%join)) {
20        if (ref $join{$key}) {
21           print "процесс '$key' - результат: ";
22           for (my $i = 0; $i <= $#{$join{$key}}; $i++) {
23              print "'${$join{$key}}[$i]' ";
24           }
25           print "<br>";
26        } else {
27           print "процесс '$key' - результат: '$join{$key}'<br>";
28        }
29     }
30  %>
31   
32  </HTML>



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

Пятница, 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 ноября

Хабрахабр: Метки / perl: [Перевод] Ваш язык программирования — отстой

1 Почему JavaScript отстой
• 1.1 Плохая конструкция
• 1.2 Система типов
• 1.3 Плохие функции
• 1.4 Отсутствующие функции
• 1.5 DOM
2 Почему Lua отстой
3 Почему PHP отстой
• 3.1 Исправлено в поддерживаемых в настоящее время версиях
4 Почему Perl 5 отстой
5 Почему Python отстой
• 5.1 Исправлено в Python 3
6 Почему Ruby отстой
7 Почему Flex/ActionScript отстой
8 Почему скриптовые языки отстой
9 Почему C отстой
10 Почему C++ отстой
11 Почему .NET отстой
12 Почему C# отстой
13 Почему VB.NET отстой
15 Почему Objective-C отстой
16 Почему Java отстой
• 16.1 Синтаксис
• 16.2 Исправлено в Java 7 (2011)
• 16.3 Модель
• 16.4 Библиотека
• 16.5 Обсуждение
17 Почему Backbase отстой
18 Почему XML отстой
19 Почему отстой XSLT/XPath
20 Почему CSS отстой
• 20.1 Исправлено в CSS3
21 Почему Scala отстой
22 Почему Haskell отстой
23 Почему Closure отстой
24 Почему Go отстой
• 24.1 Базовые средства программирования (базовый язык)
• 24.2 Взаимосовместимость
• 24.3 Стандартная библиотека
• 24.4 Набор инструментальных средств
• 24.5 Сообщество
25 Почему Rust отстой
• 25.1 Безопасность
• 25.2 Синтаксис
• 25.3 Конструкция API и система типов
• 25.4 Сообщество
• 25.5 Набор инструментальных средств

Почему JavaScript отстой


Учтите, что некоторые положения относятся не к самому JavaScript, а к программным интерфейсам веб-приложений (https://developer.mozilla.org/en/docs/Web/API).

Плохая конструкция

• Каждый скрипт исполняется в едином глобальном пространстве имён, доступ в которое возможен в браузерах с оконным объектом.
• Camel-регистр никуда не годится:

XMLHttpRequest
HTMLHRElement

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

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

Среда, 19 октября

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

Здравствуйте! О разработке chef кукбуков и связанной с ней инфраструктурой написано немало, да и инструментов в этой области существует уже предостаточно. Среди них можно перечислить такие решения как vagrant, test kitchen, food critic, chef spec, minitest-chef-handler, serverspec, inspec. Все они, в той или иной степени упрощают и ускоряют промышленную разработку и тестирование chef кукбуков и настраиваемой ими инфраструктуры.


Если данная область близка для вас и вы так же имеет некоторое отношение к языку Perl ( точнее к Perl6 ) — то добро пожаловать в топик.


Итак, сегодня я расскажу как я использую Sparrowdo при разработке и тестировании chef кукбуков.


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

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

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

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

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

Хабрахабр: Метки / perl: Персона. Создатель Perl Ларри Уолл — «великодушный пожизненный диктатор»



Сегодня на «Хабре» уже был пост, посвященный дню рождения создателя языка Perl. Здесь хотелось бы подробнее поговорить о биографии и взглядах Ларри Уолла, о его мотивации к созданию языка программирования, а также привести несколько фрагментов из недавнего интервью.

Ларри Уолл – американский программист, лингвист и создатель языка программирования Perl, один из лидеров движения за бесплатный доступ к программному обеспечению. Читать дальше →

Вторник, 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,… Read More »

Понедельник, 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 тоже. Поэтому, не факт, что приведенный ниже код будет работать и у вас… Read More »

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

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

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

Пятница, 24 июня

Shoor/нал: Затягивает

Вроде, недавно только поменял процесс подпиливания ильменского сайта — там теперь TDD — а уже каким-то образом 220 тестов написал. Хотя файлов, конечно, сильно меньше :-)

All tests successful.
Files=11, Tests=220, 14 wallclock secs ( 0.12 usr  0.02 sys +  9.66 cusr  0.64 csys = 10.44 CPU)
Result: PASS

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

http://shoorick.ru/2016/06/24/involve/

Среда, 22 июня

Мини-портал Perl на Opennet: 25 июня состоится конференция по языку Perl - YAPC::Russia 2016

В эту субботу (25 июня) пройдет всероссийская конференция по языку Perl - YAPC::Russia 2016.

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

Pilat66 blog: Блокировка выполнения скрипта

Существуют разные подходы. Обычно используется файл, в котором пишется PID процесса, но это «внутренняя» блокировка, программа сама себя блокирует, зная свой PID. Но существуют и другие подходы для внешней блокировки вызываемой программы, если программа сама не умеет блокироваться.

lockfile

Типовое использование:

#!/bin/bash lockfile -r 0 /tmp/the.lock || exit 1 # Что-то тут делаем, что [...]

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

Мини-портал Perl на Opennet: Вторая версия плагина с поддержкой языка Perl для IntelliJ IDEA

Доступна для загрузки вторая версия плагина с поддержкой разработки на языке Perl для IDE от JetBrains. В новой версии появилась последняя из крупных запланированных возможностей - отладчик. Основные особенности отладчика.

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

PerlNews.Ru: Конференция YAPC::Russia 2016 пройдёт 25 июня в Москве

Анонсирована очередная ежегодная конференция YAPC::Russia. В этом году мероприятие пройдёт 25 июня в Москве в офисе Mail.Ru Group. Участие в конференции бесплатное, но необходимо зарегистрироваться.

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

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

Темы: YAPC

Суббота, 21 мая

XPoint.ru | Программирование::Perl::Модули: Как использовать Inline::CPP ?

Разве достаточно ли в одну папку со скриптом Sproba3.pl поместить папку Inline-CPP-master?? Вижу что нет.
Я не вполне пойму суть всего и конкретные методы. Может кто-то рассказать и.или показать?

Sproba3.pl

use Modern::Perl;
use Inline 'CPP' => "./calc.cpp";

say calc($ARGV[0]);

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

PerlNews.Ru: Perl 5.24 стал быстрее

Одним из улучшений в Perl 5.24 стало ускорение арифметических операций. Начиная с Perl 5.8.0, когда появилась поддержка 64-битных целых, скорость арифметических операций снизилась из-за необходимости проверки различных граничных условий. Теперь же проверяется общий случай, что снимает необходимость проверки всех частных случаев, что в целом оптимизирует производительность.

Синан Унур в своей статье продемонстрировал, что эта оптимизация даёт выигрыш в 30% по сравнению с Perl 5.20.2 в бенчмарке nbody, который использует большое число арифметических операций. Благодаря этому Perl 5.24 обогнал Python 3 в данном тесте.

Темы: Perl benchmark

Вторник, 10 мая

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

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

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

PerlNews.Ru: Выпущен Perl 5.24.0

9 мая 2016 года была выпущена новая стабильная версия языка программирования Perl 5.24.0. Разработка велась примерно 11 месяцев, начиная с Perl 5.22.0, и содержит примерно 360 000 изменённых строк среди 1800 файлов от 77 авторов.

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

Темы: Perl

Мета

Поиск

Участники

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

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

По-другому

Приборы