Суббота, 6 января

Мини-портал Perl на Opennet: Уязвимость в Perl-модуле Spreadsheet::ParseExcel, используемая для компрометации Barracuda ESG

В Perl-модуле Spreadsheet::ParseExcel, предоставляющем функции для разбора файлов в формате Excel, выявлена критическая уязвимость (CVE-2023-7101), позволяющая выполнить произвольный код при обработке файлов XLS или XLSX, включающих специально оформленные правила форматирования чисел. Уязвимость вызвана использованием при построении вызова "eval" данных, полученных из обрабатываемого файла. Проблема устранена в обновлении Spreadsheet::ParseExcel 0.66. Имеется прототип эксплоита.

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

Хабрахабр: Метки / perl: Вышел Perl 5.38

В начале июля 2023 года состоялся релиз стабильной ветки Perl 5.38 с поддержкой классов. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.38.1. Одновременно с выходом Perl 5.38 разработчиками прекращена поддержка ветки 5.34, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.39, на базе которой в начале лета 2024 года будет сформирован стабильный релиз Perl 5.40, если сообществом не будет принято решение перейти к нумерации 7.x.

Читать далее

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

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

После 13 месяцев разработки опубликован релиз новой стабильной ветки языка программирования Perl - 5.38. При подготовке нового выпуска было изменено около 290 тыс. строк кода, изменения затронули 1500 файлов, в разработке приняли участие 100 разработчиков.

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

СетевойГибитобой: HackerRank 30 Days of Code: Day 11: 2D Arrays

Не Литкодом единым, как говорится! Нашёл на диске пару задачек с HackerRank – видимо, показались тогда особо любопытными, и были сохранены.

Впрочем, и сейчас они выглядят интересно. Эта, например (первая из них) – перемещение паттерна в виде “песочных часов” по “игровому полю”, представленному матрицей, с целью найти такой паттерн, сумма цифр в котором будет максимальной.

Здесь у меня получилось два решения – частное (на Java) и общее (на Perl).

Java-решение

Решение для паттерна и поля, указанных в задаче. Т.е. поле размером 6х6 и часики с внешним габаритом 3х3.

import java.util.Arrays;
import java.util.Scanner;

public class Solution {

public static void main(String[] args) { Scanner in = new Scanner(System.in); int[][] arr = new int[6][6]; for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { arr[i][j] = in.nextInt(); } } System.out.println(solve(arr)); }

private static int solve(int[][] arr) { int[] sum = new int[16]; int h = 0;

for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { sum[h] = arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i + 1][j + 1] + arr[i + 2][j] + arr[i + 2][j + 1] + arr[i + 2][j + 2]; h++; } }

Arrays.sort(sum); return sum[sum.length - 1]; }

}

Perl-решение

Здесь уже можно задать в скрипте габариты паттерна “часов” и подать на вход матрицу произвольного размера (конечно, с учётом того, что паттерн должен в ней помещаться).

#!/usr/bin/env perl
require 5.008_008;
use warnings;
use strict;
use utf8;

# hourglass dimensions, min 3x3 my $hg_dim = { 'x' => 3, # width, must be odd 'y' => 3, # height };

$hg_dim->{wdht} = $hg_dim->{x} - 1; #i $hg_dim->{hght} = $hg_dim->{y} - 1; #j $hg_dim->{cntr} = sprintf("%u", $hg_dim->{x} / 2);

my $arr = []; while (<STDIN>) { chomp; push @{$arr}, [ split(' ', $_) ]; }

# ...or $#{$arr-$hg_dim-1>[0]}+1 - $hg_dim-1 my $max_x = (scalar @{$arr->[0]}) - ($hg_dim->{wdht}); my $max_y = (scalar @{$arr}) - ($hg_dim->{hght});

# for neg nums, or add $sum on array and sort it my $max_sum = -1000;

for (my $y = 0; $y < $max_y; $y++) { for (my $x = 0; $x < $max_x; $x++) { my $sum = 0; for (my $i = $x; $i <= $x + $hg_dim->{wdht}; $i++) { $sum += $arr->[$y]->[$i]; # upper row $sum += $arr->[$y + $hg_dim->{hght}]->[$i]; # lowest row } for (my $j = $y + 1; $j < $y + $hg_dim->{hght}; $j++) { $sum += $arr->[$j]->[$x + $hg_dim->{cntr}]; # column } $max_sum = ($sum > $max_sum) ? $sum : $max_sum; } }

print $max_sum, $/;

Что в итоге?

В итоге – оба приведённых решения работают, причём – по сию пору. Это отрадно 🙂 По традиции – они же выложены на GitHub.

https://www.hackerrank.com/challenges/30-2d-arrays/problem

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

Мини-портал Perl на Opennet: Релиз компилятора Rakudo 2023.04 для языка программирования Raku (бывший Perl 6)

Представлен выпуск Rakudo 2023.04, компилятора для языка программирования Raku (бывший Perl 6). Проект был переименован из Perl 6 так как не стал продолжением Perl 5, как ожидалось изначально, а превратился в отдельный язык программирования, несовместимый с Perl 5 на уровне исходных текстов и развиваемый отдельным сообществом разработчиков. Компилятор поддерживает варианты языка Raku, описанные в спецификациях 6.c, 6.d (по умолчанию). Одновременно доступен выпуск виртуальной машины MoarVM 2023.04, формирующей среду для запуска скомпилированного в Rakudo байт-кода. В Rakudo компиляция также поддерживается для JVM и некоторых виртуальных машин для JavaScript.

Понедельник, 27 марта

Хабрахабр: Метки / perl: Перенос в Docker монолитного SAAS-сервиса

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

Читать далее

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

Хабрахабр: Метки / perl: Миграция Postgrespro с Centos7 на AlmaLinux8. Как бонус — пара седых волос

В статье описывается один из способов обновления дистибутива операционной системы с работающим кластером баз данных Postgres Pro Standard версии 11. В дальнейшем, для краткости кластер баз данных Postgres Pro Standard 11 будем называть Postgrespro, Centos7 - Centos, а AlmaLinux8 - Almalinux. Способ заключается в том чтобы настроить физическую репликацию Postgrespro между разными дистрибутивами операционной системы с последующим переводом слейва в режим мастера. При чтении множества статей о настройке физической репликации я нигде не встречал упоминание о том, что так делать нельзя. Естественно, что архитектура Centos и Almalinux должны совпадать, а так же должны совпадать мажорные версии Postgrespro.

Читать далее

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

Мини-портал Perl на Opennet: Релиз компилятора Rakudo 2022.12 для языка программирования Raku (бывший Perl 6)

Представлен выпуск Rakudo 2022.12, компилятора для языка программирования Raku (бывший Perl 6). Проект был переименован из Perl 6 так как не стал продолжением Perl 5, как ожидалось изначально, а превратился в отдельный язык программирования, не совместимый с Perl 5 на уровне исходных текстов и развиваемый отдельным сообществом разработчиков. Компилятор поддерживает варианты языка Raku, описанные в спецификациях 6.c, 6.d (по умолчанию). Одновременно доступен выпуск виртуальной машины MoarVM 2022.12, формирующей среду для запуска скомпилированного в Rakudo байт-кода. В Rakudo компиляция также поддерживается для JVM и некоторых виртуальных машин для JavaScript.

Воскресенье, 20 ноября

Хабрахабр: Метки / perl: Разворачиваем сеть на RHEL8-based хостах

Развертывание ИТ-инфраструктуры с нуля — задача интересная и трудозатратная. Особенно, когда речь не о постепенном развитии (как это часто случается при поступательно-линейном росте бизнеса и, соответственно, его потребностей), а о куда более сжатых сроках, например, при открытии филиала или обособленного подразделения (другой вариант — необходимость в короткие сроки развернуть инфраструктуру для тестирования), где важную роль играет организация сети.

Конечно, первоначальная установка и настройка — это всегда полевая работа: монтаж СКС, сетевого оборудования и серверов; конфигурирование DHCP и организация удалённого доступа; иногда — заведение VLAN-ов.

Читать далее

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

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



27 сентября исполняется 68 лет Ларри Уоллу — программисту, разработавшему популярный клиент rn — newsreader для групп новостей Usenet, во многом благодаря которому спустя десяток лет на свет появилась ОС Linux. Но широкую известность он получил после создания языка Perl, который нашел применение на заре Интернета в качестве инструмента для сборки интерактивных и динамических сайтов. Однако изначально Perl был придуман совсем не для этого. Язык отличается богатыми возможностями по обработке текста и регулярных выражений, что, впрочем, не удивительно: по образованию Ларри Уолл является дипломированным лингвистом. Путь специалиста по языкознанию в профессиональные программисты оказался тернист, но весьма интересен.
Читать дальше →

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

Хабрахабр: Метки / perl: 11 языков программирования для DevOps и их применение

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

Читать далее

Воскресенье, 3 июля

Хабрахабр: Метки / perl: Пейджинг страниц в соцсетях

Для пагинации страниц используют смещение (OFFSET) и курсорную пагинацию (по ID), как более быструю. Тем не менее есть ещё один малоизвестный вид пагинации по меткам страниц (MARKS). Она является разновидностью курсорной пагинации, но использует не идентификатор, а ряд полей перечисленных в ORDER BY SQL-запроса.

Читать далее

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

Мини-портал Perl на Opennet: Релиз компилятора Rakudo 2022.06 для языка программирования Raku (бывший Perl 6)

Представлен выпуск Rakudo 2022.06, компилятора для языка программирования Raku (бывший Perl 6). Проект был переименован из Perl 6 так как не стал продолжением Perl 5, как ожидалось изначально, а превратился в отдельный язык программирования, не совместимый с Perl 5 на уровне исходных текстов и развиваемый отдельным сообществом разработчиков. Компилятор поддерживает варианты языка Raku, описанные в спецификациях 6.c и 6.d (по умолчанию). Одновременно доступен выпуск виртуальной машины MoarVM 2022.06, формирующей среду для запуска скомпилированного в Rakudo байт-кода. В Rakudo компиляция также поддерживается для JVM и некоторых виртуальных машин для JavaScript.

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

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

После года разработки опубликован релиз новой стабильной ветки языка программирования Perl - 5.36. При подготовке нового выпуска было изменено около 250 тыс. строк кода, изменения затронули 2000 файлов, в разработке приняли участие 82 разработчика.

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

Мини-портал Perl на Opennet: Perl 7 плавно продолжит развитие Perl 5 без нарушения обратной совместимости

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

Четверг, 21 апреля

Хабрахабр: Метки / perl: use bigint в perl

В зависимости от версии мантисса целых чисел в perl 40-бит (5 байт) или 64-бит (8 байт).

Проверить сколько бит отводится на число в текущем perl довольно просто:

Читать далее

Воскресенье, 13 февраля

Мини-портал Perl на Opennet: Релиз компилятора Rakudo 2022.02 для языка программирования Raku (бывший Perl 6)

Представлен выпуск Rakudo 2022.02, компилятора для языка программирования Raku (бывший Perl 6). Проект был переименован из Perl 6 так как не стал продолжением Perl 5, как ожидалось изначально, а превратился в отдельный язык программирования, не совместимый с Perl 5 на уровне исходных текстов и развиваемый отдельным сообществом разработчиков. Одновременно доступен выпуск виртуальной машины MoarVM 2022.02, формирующей среду для запуска скомпилированного в Rakudo байт-кода. В Rakudo компиляция также поддерживается для JVM и некоторых виртуальных машин для JavaScript.

Суббота, 25 декабря

Мини-портал Perl на Opennet: Релиз компилятора Rakudo 2021.12 для языка программирования Raku (бывший Perl 6)

Представлен выпуск Rakudo 2021.12, компилятора для языка программирования Raku (бывший Perl 6). Проект был переименован из Perl 6 так как не стал продолжением Perl 5, как ожидалось изначально, а превратился в отдельный язык программирования, не совместимый с Perl 5 на уровне исходных текстов и развиваемый отдельным сообществом разработчиков. Одновременно доступен выпуск виртуальной машины MoarVM 2021.12, формирующей среду для запуска скомпилированного в Rakudo байт-кода. В Rakudo компиляция также поддерживается для JVM и некоторых виртуальных машин для JavaScript.

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

Хабрахабр: Метки / perl: Обработка текста с помощью textutils с примерами

Набор утилит для потоковой обработки текста появился уже в первых версиях Unix и доступен практически везде. Это такие команды как cat/tac, head/tail, cut, grep, sed, sort, uniq, wc, nl, fmt. Каждая из этих утилит выполняет свою простую обработку текста, но комбинируя их в конвейере, т.е. передавая стандартный вывод одной команды на вход следующей, можно обрабатывать тексты произвольного размера или быстро решить некоторые задачи.

Для этого нужно усвоить несколько приемов

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

Мини-портал Perl на Opennet: Релиз компилятора Rakudo 2021.10 для языка программирования Raku (бывший Perl 6)

Разработчики компилятора Rakudo для языка программирования Raku (бывший Perl 6) опубликовали релиз 2021.10. Одновременно доступен новый выпуск виртуальной машины MoarVM 2021.10, формирующей среду для запуска скомпилированного байт-кода. Также компиляция поддерживается для JVM и некоторых виртуальных машин для JavaScript.

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

Хабрахабр: Метки / perl: Сохранение пакетов Perl через local

В perl есть выражение local. Оно подменяет указанное значение undef-ом до конца блока. В качестве значения могут выступать глобальные хеши, массивы и скаляры, а так же элементы или срезы хешей и скаляров.

Проблема в том, что хеши пакетов local не сохраняет.

Под хешами пакетов я понимаю хеш с двоеточием на конце (%Пакет::) в котором хранятся символы пакета (GLOB).

Читать далее

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

Хабрахабр: Метки / perl: Периодическая таблица операторов языка программирования Perl

Когда-то я был впечатлён периодической таблицей операторов perl6. Однако для perl такую таблицу делать не спешат.

Представляю Вашему вниманию свою разработку.

Читать далее

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

Хабрахабр: Метки / perl: Об использовании пустого регулярного выражения в Perl ( m// )

На днях делал отсечение элементов списка не подходящих под регулярку введённую пользователем:

...
my $re = get_text_in_filter();
@list = grep { /$re/i } @list;
...

$re был пустой строкой и в @list должны были остаться все элементы.

Так и происходило при первом проходе, а при втором регулярка не пропускала ни одного элемента списка.

Читать далее

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

Хабрахабр: Метки / perl: Перезапись специальных переменных Perl регулярными выражениями

Когда-то я стал писать на perl из-за встроенных в язык регулярных выражений. Просто пишешь "abc" =~ / (?<x> a) /x; и вуаля: устанавливаются переменные $&, $1, %+, $`, $'.

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

Читать далее

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

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

Современные web-приложения в большинстве случаях хранят данные в SQL базах данных. Для доступа к этим данным используются объекты модели, которые позволяют совершать все основные операции: SELECT, INSERT, UPDATE, DELETE, но не ограничиваясь ими.

В этой части мы поговорим про работу с базой в Dancer2, а также научимся создавать модели и миграции на основе DBIx::Class (можно сказать, что эта статья является вводным руководством и по нему).

Читать далее

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

Laziness, Impatience and Hubris: Об unicode в Perl

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

Такие дела.

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

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

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

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

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

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

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

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

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

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

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

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

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

Цветной svn st

Цветной svn diff

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

grey_olli: stdin2news

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

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


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

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

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

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

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

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

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

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

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

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


after_dispatch

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


Слон и код

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

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

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

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

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

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


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

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

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

DEPLOY_DB="test1"

DEPLOY_USER="111"

DEPLOY_PASSWORD="111"

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

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

Мета

Поиск

Участники

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

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

По-другому

Приборы