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

Shoor/нал: Танцы с зависимостями

Про перловый веб-фреймворк Catalyst когда-то говорили, что он за собой тянет чуть ли не половину CPAN :-)

Решил я в дополнение к Каталисту и Моджо писать и на Дансере — так сложилось. На perldancer.org пишут:

Key features:
...
Few dependencies - Dancer depends on as few CPAN modules as possible making it easy to install.

Ставлю Dancer — и где эти самые few depencies? Утром модули ставил, сейчас — ставлю, а они всё не кончаются и не кончаются...

http://shoorick.ru/2015/01/23/dancer-depencies/

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

Хабрахабр: Метки / perl: Введение в разработку web-приложений на PSGI/Plack. Часть 4. Асинхронность


С разрешения автора и главного редактора журнала PragmaticPerl.com я публикую эту статью.
Оригинал статьи можно прочитать здесь.

Продолжение цикла статей посвященных разработке PSGI/Plack. Разбираемся с асинхронностью.
В предыдущий статьях мы рассмотрели основные аспекты разработки под PSGI/Plack, которых, в принципе, достаточно для разработки приложений практически любой сложности.

Мы разобрались, что такое PSGI, разобрались как устроен Plack, затем мы разобрались, как устроены основные компоненты Plack (Plack::Builder, Plack::Request, Plack::Middleware). Затем мы подробно рассмотрели Starman, который является хорошим PSGI-сервером, готовым для использования в production.
Читать дальше →

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

Ох. Делаю один проект с использованием Dancer::Plugin::Database::Core::Handle. Я знал, что это плохо с точки зрения теории, но это еще и на столько неудобно на практике...

Как же я благодарен xfyre за fetchall_arrayref({}) || []

upd: А еще, оказывается, ужасно работать не по собственным кодинг стандартам.

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

Хабрахабр: Метки / perl: Введение в разработку web-приложений на PSGI/Plack. Часть 3. Starman


Продолжение цикла статей о PSGI/Plack. Рассмотрен более подробно preforking PSGI-сервер Starman.

С разрешения автора статьи и главного редактора журнала PragmaticPerl.com. Оригинал статьи расположен здесь

Starman?


Автор данного сервера (Tatsuhiko Miyagawa) говорит про него следующее:

«Название Starman взято из из песни Star H. A. Otoko японской рок-группы Unicorn (Да, Unicorn). У David Bowie тоже есть одноименная песня, Starman — имя персонажа культовой японской игры Earthbound, название музыкальной темы из Super Mario Brothers.

Я устал от именования Perl-модулей наподобие HTTP::Server::PSGI::How::Its::Written::With::What::Module, а в результате люди называют это HSPHIWWWM в IRC. Это плохо произносится и создает проблемы новичкам. Да, может быть я упорот. Время покажет.»

С названием разобрались. Теперь будем разбираться с самим сервером.
Читать дальше →

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

Сообщество ru_perl в LiveJournal: Шаблонизатор перл как в PHP

есть ли вменяемый шаблонизатор как PHP?
чтобы писать <% перл код %> или <%= перл код %> и т.п.
смешивать html и перл код. не хочу изучать какие-то левые синтаксисы с ограничениями или тащить фрейморки целые.
надо просто функцию или пакет без зависимостей. или быстрый конвертор в perl-функцию.
чтобы при вызове template "файл" -> вывел в stdout.

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

Сообщество ru_perl в LiveJournal: Вакансия

Ищу программиста. Удаленно.
Задача - переписать крупный проект с нуля.
Подробности: aleksandr.khasanov@gmail.com

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

Хабрахабр: Метки / perl: Введение в разработку web-приложений на PSGI/Plack. Часть 2


С разрешения автора и главного редактора журнала PragmaticPerl.com я продолжаю публикацию цикла статей.
Оригинальная статья тут.
Продолжение статьи о PSGI/Plack. Рассмотрены более подробно Plack::Builder, а также Plack::Middleware.

В прошлой статье мы рассмотрели спецификацию PSGI, как она появилась, почему ей стоит пользоваться. Рассмотрели Plack — реализацию PSGI, основные его компоненты и написали простейшее API, которое выполняло поставленные перед ним задачи, вскользь рассмотрели основные PSGI сервера.

Во второй части статьи мы рассмотрим следующие моменты:

  • Plack::Builder — мощный маршрутизатор и не только.
  • Plack::Middleware — расширяем наши возможности при помощи «прослоек».

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

crux's blog: Разница между all и everything

Иногда в разрабатываемую версию Perl проталкивают решения, от которых хочется поднести ладони к лицу -_\
В этот раз под раздачу попал механизм предупреждений, когда из соображений обратной совместимости отвергается здравый смысл...
Комментарии(0)

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

Хабрахабр: Метки / perl: Введение в разработку web-приложений на PSGI/Plack


Автор: Дмитрий Шаматрин.
С разрешения автора оригинальных статей цикла я публикую цикл на Хабре.
Оригинальная статья на сайте журнала pragmaticperl.com

PSGI/Plack — современный способ написания web-приложений на Perl. Практически каждый фреймворк так или иначе поддерживает или использует эту технологию. В статье представлено краткое введение, которое поможет быстро сориентироваться и двигаться дальше.


Мы живем в такое время, когда технологии и подходы в области web-разработки меняются очень быстро. Сначала был CGI, потом, когда его стало недостаточно, появился FastCGI. FastCGI решал главную проблему CGI. В CGI при каждом обращении было необходимо перезапускать серверную программу, обмен данными происходил при помощи STDIN и STDOUT. В FastCGI взаимодействие с сервером происходит через TCP/IP или Unix Domain Socket. Теперь у нас есть PSGI.

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

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

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

Стоял Eclipse Kepler, последний EPIC. Всё это давно работало под минтом, от 15 до последнего. И захотелось мне дебиана :) Не вопрос, заменил на LMDE. Поставил заново Eclipse (3.8.1, debbuild), EPIC, добил нужные ему перловые модули, пошаманил с Subclipse (с Wheezy идёт svn 1.7, а все проекты были под 1.8). Всё взлетело, всё работает.

И тут заметил, что одиночные файлы перестали отлаживаться. Ну вот хоть ты тресни, в Run->Debug предлагается только Ant Build, Run->Debug As->Perl Local присутствует, но никакой реакции в принципе нет. Стоит только обернуть этот один-единственный файл в проект - отладчик появляется. До того так не было. И диагностики никакой, ни в консоли, ни в логах.

Не понимаю: так и должно быть в этом самом debbuild, или где-то глюк?

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

Сообщество ru_perl в LiveJournal: Двадцать третий выпуск журнала о современном Perl

pp Выпуск 23

http://pragmaticperl.com/issues/23

В этом номере:

- От редактора. Опрос, Вячеслав Тихановский
Промежуточные результаты опроса читателей журнала
http://pragmaticperl.com/a/16b20b96

- Взгляд на 2014 г., Андрей Шитов
Краткий обзор заметных событий в мире Perl за прошедший год
http://pragmaticperl.com/a/74a5ead3

- Тестирование с помощью Mock-объектов, Вячеслав Тихановский
Рассмотрены основные задачи Mock-объектов и их разновидности в Perl
http://pragmaticperl.com/a/0e803ca9

- Tapper — система тестирования ПО полного цикла, Сергей Бронников
Рассмотрена экосистема для автоматического тестирования
http://pragmaticperl.com/a/66e8f345

- Как нанять Perl-программиста, Алексей Варяник
Про один удачный эксперимент по найму программистов
http://pragmaticperl.com/a/bb11df34

- Использование TLS в Perl, Владимир Леттиев
Ликбез по криптографии и практика применения TLS (Transport Layer Security — безопасность транспортного уровня) в Perl.
http://pragmaticperl.com/a/0381571e

- Обзор CPAN за декабрь 2014 г., Владимир Леттиев
Рубрика с обзором интересных новинок CPAN за прошедший месяц
http://pragmaticperl.com/a/6ce579ce

- Интервью с Рикардо Сигнесом (Ricardo Signes), Вячеслав Тихановский
Рикардо Сигнес (Ricardo Signes) — американский Perl-программист, в настоящее время pumpking, ответственный за выпуск релизов perl
http://pragmaticperl.com/a/f8076b6e

Мини-портал Perl на Opennet: Двадцать третий выпуск журнала Pragmatic Perl

Представлен 23-й выпуск журнала о современном Perl.

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

Меркантильный гуру: Dancer::Plugin::Redis

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

Коннектиться на сокет Dancer::Plugin::Redis даже не предполагает.

Но, мне же надо кешировать результаты sql запросов. И мне не очень критично, чтобы Redis, подумал я. Ок - есть CHI, и есть Dancer::Plugin::Cache::CHI и кешировать можно в памяти, в данном случае, с разделением между процессами для начала.

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

Ок, пробуем использовать CHI с драйвером Redis. И это даже не сюрпрайз, это на столько предсказуемо...

1) если оно не может соединиться с Redis - оно падает. Redis - некритичный сервис и он может умереть. Но если незапущенный редис приводит к недоступности всего приложения целиком...

2) Редис той версии, что в убунте 12.04, еще не умеет unixsocketperm. Отчего простой юзер подключиться к сокету не может. Но, к счастью, оказалось, что оно есть в PPA

3) Но это всё было бы слишком просто, если бы CHI::Driver::Redis умел коннектится к сокету. Разумеется, он не умеет.

[Тут был вопрос риторический и еще один не риторический, но всё тлен.]

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

Блог программиста — Perl, Ruby, C#: Как скачивать файлы в Catalyst-приложении

Как организовать скачивание файлов в Catalyst-приложении. Работа с форматами csv, tsv, txt, xml в Catalyst. Использование модуля Catalyst::View::Download . Добавление собственных форматов файлов. Достаточно часто встречаются ситуации, когда необходимо позволить пользователю скачать файл с сайта. Например, прайс-листы в xls-формате, шаблоны договоров, отчеты о продажах в csv, бланки квитанций для платежей и т.п. Catalyst::View::Download — создает […]

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

Блог программиста — Perl, Ruby, C#: Что такое файловый дескриптор

Где хранится файловый дескриптор и что из себя представляет? Как просмотреть список файловых дескрипторов для процесса? Что такое таблица файловых дескрипторов? Типы файлов в Unix. Утилиты и команды: lsof, fuser, ulimit, strace, pstree, top, pidof, pgrep. В этот раз я решила разобраться, что из себя представляет файловый дескриптор. Ниже — небольшой конспект рассмотренной информации. К […]

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

Shoor/нал: Ищу работу перловым программистом

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

Итак,
ищу работу программистом, желательно на перле, удалённо либо в Челябинске, до 20 часов в неделю, от 15 долларов в час.
Резюме — http://shoorick.ru/resume/alexander_sapozhnikov.html

Laziness, Impatience and Hubris: HTTP content encoding

Решил прикрутить к AnyEvent::HTTP Accept-Encoding и к LWP в response_data handler, но перед этим выяснить какой процент серверов понимает gzip и deflate.

deflate кодирование реализовано в серверах двумя способами и поэтому авторы nginx отказались от его реализации и используют только gzip
(http://sysoev.ru/mod_deflate/readme.html#mehtods).

Под рукой оказался файл с 53587 доменами со следующим распределением по зонам:
  29244 com    1000 de      627 it
3102 org 935 info 553 ca
2786 uk 861 nl 504 si
2734 net 853 au 467 fr
1315 ru 682 br 368 ua

Для каждого домена запрашивал HTTP содержимое с указанием "Accept-Encoding" в трех различных вариантах: "gzip, deflate" (приоритет gzip), "deflate, gzip" (приоретет deflate) и "deflate". Результаты как закодировал ответ сервер представлены в нижеприведенной таблице (прочерк означает, что сервер вернул не закодированное содержимое):
             | "gzip, deflate" | "deflate, gzip" | "deflate"
------------|-----------------|-----------------|----------
- | 22888 | 22764 | 50462
gzip | 30612 | 30442 | 145
deflate | 67 | 361 | 2959
iso-8859-1 | 1 | 1 | 1
none | 16 | 16 | 16
none; | 1 | 1 | 1
UTF-8 | 2 | 2 | 2

Как видим, можно ограничиться поддержкой лишь одного gzip.

Заодно узнал популярность серверов:
                Все зоны | ru зона | ua зона
------------------------|---------|--------
Apache 27327 | 978 | 443
nginx 6924 | 922 | 332
Microsoft-IIS 6886 | 323 | 148
- 6116 | 212 | 103

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

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

Коллеги, помогите, уверен, ято кто-то сталкивался и решал.
На клиенте, и в бд, 1251. Так получилось, изменить пока нет возможности.
На клиенте я говорю - JSON.stringify(data). На сервере получаю ГГГГГ. Попытки сделать from_to('utf-8','cp1251') к успеху не привели. 2cyr.com расшифровать результат не сумел.
Я тпряюсь в догадках о природе происходящего...

UPD Прошу прощения за неровный почерк, у нас уже НГ начался в некотором смысле.
Веб-клиент. Форма. Кодировка 1251. С формы я собираю данные, пакую в структуру, которую через JSON.stringigy и jQuery.ajax() отправляю на сервер. Где-то по пути они не то из-за упаковки, не то из-за транспорта данные некоторым образом становятся из 1251 utf-8. Возможно, не один раз :(
ГГГГГ - это условность, точный текст, если интерено, выглядит как вывы .

UPD2 Если оставлять всё как есть, то слово "русский" выглядит как русский.
Если сделать from_to ($data, 'utf-8', 'windows-1251'), то получаем °ГіГ±Г±ГЄГЁГ©.

Я вообще ничего уже не понимаю :(

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

XML::XPath, XML::Bare, XML::Fast, XML::Smart, XML::LibXML, etc, безусловно, хороши. Но - в идеальных условиях (гусары, про зависимости - молчать!). В реальных они падают мордой в лужу, и даже не пытаются вставать, натыкаясь на что-то, хоть сколько-нибудь некорректное.
Пока самый выживаемый, получается, XML::TreePP?

P.S. Кто сказал Mojo?

Четверг, 18 декабря

Блог программиста — Perl, Ruby, C#: Что такое процесс

Что такое процесс. Что такое сигнал. Примеры perl-кода: создание процесса, передача процессу сигналов. Что такое сигналы. Функции fork, exec, wait, waitpid. Таблица процессов. Команды free, top, ps и другие. Данная заметка — это просто компиляция материалов из нескольких источников, с целью сбора некоторой справочной информации, которую в дальнейшем можно использовать как шпаргалку. Использованные источники указаны […]

Хабрахабр: Метки / perl: День рождения Perl и лучшие решения Golf от Moscow.pm


Сегодня исполняется 27 лет со «дня рождения» одного из самых популярных на сегодня языков программирования — Perl. На нём создано несметное множество приложений и интернет-ресурсов, в том числе и имеющие многомиллионные аудитории, и соответствующие финансовые обороты. За примерами далеко ходить не придётся: Amazon, Yahoo!, Slashdot. Последние 20 лет он входит в десятку наиболее используемых языков, несмотря на слухи о своей кончине. Однако многомиллионная армия Perl-программистов, ежегодно выдающая на-гора множество продуктов, убедительно опровергает инсинуации верблюдоненавистников. Как говорится, собака лает — караван идёт. С момента своего появления в 1987 году, Perl взрастил уже два поколения программистов, и нет никаких причин отказываться от Жемчужного Корабля Пустыни ещё лет 30 как минимум. Так что мы с удовольствием поздравляем всех Perl-программистов с днём рождения их «родного» языка, Ларри Уоллу желаем долголетия календарного и творческого, чтобы ему хватило задора на создание ещё пары версий Perl.

Также ко дню рождения этого замечательного языка мы приурочили публикацию решений победителей в небольшом конкурсе программистов Golf, объявленном 3 октября в рамках митапа Moscow.pm.
Читать дальше →

XPoint.ru | Программирование::Perl::Основы: Подсчет количества символов в строке

Добрый день! Возникла проблема с подсчетом кол-ва символов в строке. Если $message содержит в себе латинские или циферные символы, все считается корректно, если же в переменной строка на кириллице, то символов в 2 раза больше, чем есть на самом деле. Объясните пожалуйста, что я делаю не так. Спасибо.

$message;
$l = length $message;
$l2=0;
while($message=~/./g){$l2++}

Хабрахабр: Метки / perl: Perl. 27 лет спустя


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

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

Дань стереотипам.


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

    Несметное множество статей на просторах интернета описывают Perl тех времен, когда небо было зеленым, трава голубой, а Ельцин в пьяном угаре радовал страну зажигательными танцами перед телекамерами, задавая ритм рейверам, что танцевали на той голубой траве и под тем зеленым небом. И код из тех статей все еще компилируется. В результате у большинства программистов представление об этом языке представлено информацией 10-15… и даже 20 летней давности. Не следуют упускать из виду инерционность мышления тех, кто писал те статьи.

    Поэтому сегодня я попытаюсь пролить свет на то, что же происходит с языком на его начинающемся 28 году жизни. Ведь сегодня у Perl день рождения — ему 27 лет. 20 лет из которых существует его пятая версия. Заходите, будет весело. Читать дальше →

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

Сообщество ru_perl в LiveJournal: Как определить смещение во временной зоне для Windows

Возникла проблема в получении временной зоны в Windows. Дело в том, что использовании функции strftime и для формата %z, и для %Z выдает название зоны словами. На *nix первый как и положено выдает смещение в часах/минутах, например
+0300
Проверял на доступных разных ОС и сборках Перла - получал везде текст для %z.

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

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

Блог программиста — Perl, Ruby, C#: Создание новостных лент (RSS, Atom) в Catalyst. Создание простого RSS-агрегатора

Как реализовать собственную новостную ленту в RSS и Atom форматах, на основе Catalyst. Как создать собственный RSS-агрегатор. Простые примеры кода, без комментариев. Работа с модулями XML::Feed и XML::Feed::Aggregator.   Реализация собственной RSS-ленты RSS и Atom — семейство XML-форматов, предназначенных для описания лент новостей, анонсов статей, изменений в блогах и т.п. У каждого формата есть свои […]

Четверг, 11 декабря

Сообщество ru_perl в LiveJournal: Как сделать журнал Pragmatic Perl лучше (опрос)?

Восемь вопросов и 30 секунд вашего времени.

https://ru.surveymonkey.com/s/D362Q89

Спасибо!

Хабрахабр: Метки / perl: 6-й санкт-петербургский Perl-воркшоп и хакатон Saint Perl 2014



В декабре Perl празднует свой 27-й день рождения. А мы традиционно проводим приуроченный к этой славной дате очередной, шестой уже по счёту, Saint Perl. В этом году он состоится 20-21 декабря.
Читать дальше →

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

Хабрахабр: Метки / perl: Как организовать отправку push-уведомлений на айфон


В Surfingbird мы используем пуш-уведомления, чтобы сообщать нашим пользователям срочные новости и просто информировать их об интересных материалах за день. Уже в первые недели тестов пуши показали свою огромную эффективность в плане увлечения ретеншена. Этому есть логичное объяснение – телефон у пользователя всегда с собой, в метро, в туалете, на совещаниях и т. д. Когда юзеру приходит пуш, все его внимание концентрируется на этом уведомлении.

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

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

Сообщество ru_perl в LiveJournal: win32::daemon

Hi,
коллеги, а кто-нибудь пытался сделать на перле виндовый сервис?
что-то у меня лыжи не едут: взял ActiveState как самый виндовый перл, взял самый простой пример, из Daemon.pm скопировал. и вместо SERVICE_RUNNING, который 4, мне присылают event 4160, который я не понимаю... и в то же время Win32::Daemon::State() возвращает вообще 0.

Четверг, 4 декабря

XPoint.ru | Программирование::Perl::Основы: Изменение кодировок utf8 --&gt; cp1251

Доброго времени суток!
Имеем: через веб-браузер вводим сообщение на русском языке, после чего программа должна отправить это сообщение через подключение по telnet. Проблема в том, что в получаемом сообщении дублируются буква "я". Изначальная кодировка сообщения - UTF8, делаю

Encode::from_to($message, 'utf-8', 'cp1251');

В чем может быть проблема, не подскажите?

Меркантильный гуру: Выживают лишь 3%

"Дольше 3,5 лет у нас живёт менее 3% начинающих предпринимателей" - http://echoperm.ru/themes/8/300/135638/

Таки дела.

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

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

Блог программиста — Perl, Ruby, C#: Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 3. Роли пользователей

Использование ролей в Catalyst. Плагин Catalyst::Plugin::Authorization::Roles. Создание таблиц с ролями в БД, установка ограничений доступа в контроллере. Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 1. Сессии в Catalyst Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 2. Аутентификация и авторизация Роли в Catalyst используются для создания пользователей с различными правами доступа. Например, […]

Блог программиста — Perl, Ruby, C#: Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 2. Аутентификация и авторизация

Аутентификация и авторизация пользователей в Catalyst-приложении. Аутентификация на основе DBI. Работа с Catalyst::Authentication::Store::DBI::ButMaintained и Catalyst::Authentication::Credential::Password. Создание таблицы users в БД. Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 1. Сессии в Catalyst Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 3. Роли пользователей Ранее, в Catalyst-приложение была добавлена работа с сессиями. Однако, приведенные […]

Блог программиста — Perl, Ruby, C#: Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 1. Сессии в Catalyst

Создание модели DBI в Catalyst. Использование DBI-модели. Реализация системы сессий в Catalyst, с помощью плагинов Catalyst::Plugin::Session::PerUser, Catalyst::Plugin::Session::Store::DBI, Catalyst::Plugin::Session::State::Cookie. Примеры кода, скриншоты. Ввиду того, что VPS от REG.RU с некоторых пор убивает все процессы cpan на установку новых модулей, а новый хороший сервер для тестирования пока не найден, система авторизации разрабатывалась под Windows-окружением. Создание системы сессий, […]

Shoor/нал: Инициализация переменных

Объявлял как-то переменные и присваивал им пустую строку:

my (
    $search_for_name, $search_for_content,
    $action_clean, $action_delete,
    $action_print, $action_print_key,
    $need_help, $need_manual, $verbose
) = ( '' ) x 9;

Надоело при добавлении очередной переменной вручную менять их количество — переписал:
map { $_ = '' } my (
    $search_for_name, $search_for_content,
    $action_clean, $action_delete,
    $action_print, $action_print_key,
    $need_help, $need_manual, $verbose
);

Так тоже работает :-)
http://shoorick.ru/2014/12/03/variable-initialization-via-map/

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

Сообщество ru_perl в LiveJournal: Что-то меня сомнения стали одолевать

Когда-то я прочёл, что если в коде используется больше трёх блоков вложенности, то это плохой код.
А если используется много уровней иерархии объектов, это плохой код - или не очень?
Предметно: если я пишу $self->session->user->role->match(...), то мне уже пора в биореактор?

Pilat66 blog: perl — switch,case, , given, when

Аналоги Switch в Perl программах на удивление мало распространены. Хотя есть аж два его варианта, доступные уже лет ддесять — switch и given. B обе всё ещё экспериментальные.

Начиная с perl 5.10.1, появился оператор(?) switch

use feature "switch";

Он не очень прямой, имеет ограничения. Политически грамотно использовать given/when:

use v5.10.1; for ($var) { when [...]

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

Сообщество ru_perl в LiveJournal: Баг в perl или у меня в голове

Помогите разобраться где косяк.

Ниже пример кода. При запуске в параметрах можно передать любой файл, хоть самого себя. Проблема в следующем: если запустить код в таком виде, то все нормально работает - печатаются две строки со значениями из списка. Если же раскоментировать строку с запуском функции run() то получаем ошибку использования неинициализированной переменной в функции print. Т.е. по факту когда мы читаем из файла внутри функции (чтение в $_) у нас портится переменная $_ внутри внешнего цикла (становится undef когда файл заканчивается). Как так!!!??? Это же локальные переменные для блока! Я полдня убил пока локализовал глюк, но почему!!!???

use strict;
use warnings;

my $f = shift @ARGV;

sub run(@);

my @a = ( [ 1 ], [ 2 ] );

foreach ( @a ) { #run();     print $_->[0], "\n"; }

exit;

sub run(@) {   open FP, "<$f";   my $i = 0;   while (<FP>) {     $i ++;   }   close FP; }

Perl6.ru: Еще один подход к снаряду

Недавно на сайте конференции FOSDEM появился анонс: Ларри Уолл объявит, что Perl 6 появится в продакшне в 2015 году. Верить этому или нет, сложно сказать, но я попробовал скачать новый Rakudo и оказалось, что там все заметно лучше (прям сильно лучше), чем было год-два назад.

Поэтому я решил освежить знания про Perl 6 и написал большую статью для Pragmatic Perl «Perl 6 XXI века» с обзором базовых вещей, доступных в языке. Для следующего номера готовится статья о возможностях Perl 6 для параллельных вычислений.

On Perl — блог о языке программирования Perl и его сообществе: Perl 6 XXI века

Недавно на сайте конференции FOSDEM появился анонс: Ларри Уолл объявит, что Perl 6 появится в продакшне в 2015 году. Верить этому или нет, сложно сказать, но я попробовал скачать новый Rakudo и оказалось, что там все заметно лучше (прям сильно лучше), чем было год-два назад.

Поэтому я решил освежить знания про Perl 6 и написал большую статью для Pragmatic Perl «Perl 6 XXI века» с обзором базовых вещей, доступных в языке. Для следующего номера готовится статья о возможностях Perl 6 для параллельных вычислений.

Сообщество ru_perl в LiveJournal: Двадцать второй выпуск журнала о современном Perl

pp Выпуск 22

В этом номере:

- От редактора, Вячеслав Тихановский
http://pragmaticperl.com/issues/22/pragmaticperl-22-от-редактора.html

- Анонс воркшопа Saint Perl 2014, Сергей Романов
В шестой раз подряд мы с радостью приглашаем всех любителей и профессионалов мира Perl в Санкт-Петербург на ежегодный воркшоп Saint Perl!
http://pragmaticperl.com/issues/22/pragmaticperl-22-анонс-воркшопа-saint-perl-2014.html

- ООП. Основные паттерны проектирования. Реализация в Perl, Наталья Савенкова
Материал статьи для уровня Beginners. Здесь не будет Moose, только чистый Perl. Предполагается, что какое-то ООП в Perl уже знакомо
http://pragmaticperl.com/issues/22/pragmaticperl-22-ооп.-основные-паттерны-проектирования.-реализация-в-perl.html

- Perl 6 XXI века, Андрей Шитов
Автор хочет дать еще один шанс шестому перлу
http://pragmaticperl.com/issues/22/pragmaticperl-22-perl-6-xxi-века.html

- DBIx::Class. Сборник рецептов, Вячеслав Коваль
Сборник рецептов на все случаи жизни
http://pragmaticperl.com/issues/22/pragmaticperl-22-dbixclass.-сборник-рецептов.html

- Обзор CPAN за ноябрь 2014 г., Владимир Леттиев
Рубрика с обзором интересных новинок CPAN за прошедший месяц.
http://pragmaticperl.com/issues/22/pragmaticperl-22-обзор-cpan-за-ноябрь-2014г..html

- Интервью с Олафом Алдерсом (Olaf Alders), Вячеслав Тихановский
Олаф Алдерс (Olaf Alders) — канадский Perl-программист, создатель MetaCPAN
http://pragmaticperl.com/issues/22/pragmaticperl-22-интервью-с-олафом-алдерсом-olaf-alders.html

http://pragmaticperl.com

Мини-портал Perl на Opennet: Двадцать второй выпуск журнала Pragmatic Perl

Представлен 22-й выпуск журнала о современном Perl.

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

Сообщество ru_perl в LiveJournal: Анонсы выпусков журнала Pragmatic Perl

Друзья, меня не забанят, если я буду тут постить анонсы выпусков? :)

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

Pilat66 blog: PostgreSQL — SELECT count(*) FROM table

count(*) в PostgreSQL очень медленная операция. Чтобы её ускорить, применяют разные трюки, например, описанный в Reduce cost of select count(*) queries with trigger-based method. При вставке и удалении строк увеличиваем или уменьшаем значение соответствующего столбца в специальной таблице. Подробности в статье, там же оценка разницы в скорости получения count. Я несколько автоматизировал процесс регистрации таблиц.

[...]

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

Shoor/нал: Как не замусоривать экран при совершении HTTP-запросов средствами модуля Net::Curl::Easy

Чисто перловые HTTP-клиенты, включая широко известный модуль LWP — не самые быстрые, что вполне логично. Гораздо быстрее работают, например, те модули, что используют cURL. В одном из рабочих проектов понадобилось ускорить чтение из сети — это оказалось узким местом. Я проверил — действительно, cURL работает шустрее, чем LWP, при этом к cURL в перле есть несколько интерфейсов. Результаты моего замера вышли такими:

                    Rate     LWP WWW::Curl::Simple   Net::Curl::Easy
LWP                474/s      --              -38%              -88%
WWW::Curl::Simple  760/s     60%                --              -82%
Net::Curl::Easy   4115/s    768%              441%                --

(под LWP здесь понимается LWP::UserAgent).

Шустрый LWP::Curl выбыл из соревнования, потому что я не нашёл, как в нём добавить нужный заголовок к HTTP-запросу. Был проверен ещё и WWW::Curl::Easy — он показал ту же скорость, что и Net::Curl::Easy, вывалив при этом кучу предупреждений — так что он тоже выбыл из забега.

Однако при проведении замера я столкнулся со странным поведением Net::Curl::Easy — при выполнении метода perform на экран (точнее, в STDOUT) иногда выводились полученные данные. Выяснилось, что правильный способ запуска описан в руководстве не на Net::Curl::Easy, а на WWW::Curl — надо не только выполнить запрос, но и указать до выполнения запроса, куда писать полученное содержимое:
# A filehandle, reference to a scalar or reference to a typeglob can be used here.
my $response_body;
$curl->setopt(CURLOPT_WRITEDATA,\$response_body);

В Net::Curl::Easy это тоже сработало.
http://shoorick.ru/2014/11/27/clean-net-curl-easy/

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


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

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

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

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

удаленно. фуллтайм. thecamelsway@gmail.com.

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

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

Удалённо, фуллтайм. Территориально нахожусь поблизости МСК. Обсудить подробности можно по почте lelzak ИНДА mail.ru

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

Ловушки Perl: Задачи-страшилки про Perl: Такой непростой tsv

Программисту понадобилось быстренько отфильтровать и переформатировать один лог. Исходный файл содержит по одной json-записи в строке, в итоге должен получиться tab separated файл из двух колонок.

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

Получился такой скрипт:

    #!/usr/bin/perl

use strict; use warnings;

use JSON;

while(<>){ my $data = eval{decode_json($_)}; next unless $data; next unless is_interesting_id($data->{id}) && is_valid_int($data->{sum}); print join("\t", $data->{id}, $data->{sum}); print "\n"; }

sub is_interesting_id { return $_[0] =~ /^5665[0-9]{7,13}$/ ? 1 : 0; }

sub is_valid_int { return $_[0] =~ /^[0-9]+$/ ? 1 : 0; }

Все хорошо? Нет! На выходе некоторые строчки пустые, а некоторые содержат только одно значение вместо положенных двух.

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

Shoor/нал: Из-под отладчика

В перловых скриптах (во всяком случае, в тех, что запущены в юниксоподобных системах) определить, запущены ли они из-под отладчика, достаточно просто — надо проверить, существует ли переменная окружения PERLDB_PIDS:

my $DEBUG = exists $ENV{'PERLDB_PIDS'};

Однако в отладчике, встроенном в Komodo IDE 8.5, такой способ не работает — вместо PERLDB_PIDS устанавливается другая переменная PERL5DB со значением, например, BEGIN require '/opt/komodo/lib/support/dbgp/perllib/perl5db.pl' . А в штатном отладчике переменной PERL5DB нет. Значит, надо проверять обе:
my  $DEBUG
    =  exists $ENV{'PERLDB_PIDS'}
    || exists $ENV{'PERL5DB'};

http://shoorick.ru/2014/11/19/how-to-detect-perl-debugger/

upd/20.11.2014: Всё проще — существует переменная $^P

Мета

Поиск

Участники

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

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

По-другому

Приборы