Home

Предыдущие 20

10 Ноя, 2009

Perl. Форматирование чисел

Сегодня потребовалось написать функцию по форматированию чисел, приведение к читаемому виду: 1234567 => 1 234 567.
Написал следующую короткую и красивую функцию:
sub D($) {
	for (scalar reverse shift) {
		s/(\d{3})(?=\d)/$1 /g;
		return scalar reverse;
	}
}

say D 12345;
say D 123456;
say D 1234.56;
Спасибо [info]pavel_kudinov за подсказку использовать (?=pattern) positive look-ahead assertion (perlre).
Вместо этого у меня была вторая простая регекспа, которая удаляла лишний символ с конца.

Функция умеет работать и с флоатом, где количество знаков после запятой максимум 3, опять же благодаря (?=\d).

scalar reverse заставляет работать reverse в скалярном котексте при использовании в списковом контексте :)

По-моему, очень красиво получилось )))

Исходник


ЗЫ: С Павлом Кудиновым сошлись на мнении, что наверня-ка на CPAN есть модуль на несколько экранов с похожим функционалом :)


use Perl or die;

JFDI

Метки: , ,

2 Ноя, 2009

South Perl – сегодня ровно год :)

2 ноября 2008 года в Ростове-на-Дону прошел третий Российский Perl-воркшоп "South Perl".
Было в первый раз, было круто, было интересно :)

Сайт http://rpw2008.perlrussia.ru/
Выступления http://event.perlrussia.ru/rpw2008/talks
ЖЖ http://sharifulin.livejournal.com/tag/southperl
Фото http://www.flickr.com/photos/sharifulin/sets/72157608365664301/show/
Видео:

Just fun! :)

Меня все больше посещают мысли провести South Perl – 2.
Варианты Ростов-на-Дону, Ставрополь (о.О), Волгоград (на парад Победы), Краснодар (Krasnodar.pm жив?!), Сочи (это вообще пи**ец :).

use Perl or die;

JFDI


Метки: , ,

26 Окт, 2009

BY Perl Too Too

Минский воркшоп BY Perl Too, о котором я недавно писал, прошел успешно.
Мне очень понравилось как в Минске, так и на самом мероприятие (и, конечно, социальная часть :)

В поезде я все-таки успел подготовить 2 доклада, выступал под вечер, когда все почти устали, но слушали внимательно :)

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



Блиц-доклад про CPAN.
Очередная версия доклада про CPAN и про сервис http://cpan.perlrussia.ru

View more documents from Anatoly Sharifulin.
 
</div>
Организатор(ы) позаботились о wifi и некоторые доклады я транслировал в интернет через twitcam.com.
Надеюсь, скоро все выступления появятся на yapc.tv (да, Андрей?)

use Perl or die;

JFDI



ЗЫ: Твиттер лента )
Метки: , ,

15 Окт, 2009

BY Perl Too

В субботу 17 октября 2009 года в Минске пройдет второй пёрл-воркшоп "BY Perl Too". Подробная информация о мероприятие тут.

Я
, кстати, еду, сейчас собираю вещи и буду готовить доклады, впереди сутки в поезде, надеюсь успеть всё сделать и поспать :)


"Минск", use Perl, JFDI or die;

:)

8 Окт, 2009

Continuity и Squatting. Чат?!


Попробовал Continuity и микро-фреймворк Squatting на примере чата, где сервер – Push, клиент – long-polling.
Я разочаровался, нагрузку ни чистый Continuity, ни Squatting::On::Continuity не держат. Уже при 4-5 одновременных клиентах, которые постоянно пишут, сервер сильно тормозит :(

Пример чата на Continuity и Squatting можно найти в дистрибутиве модулей, в примерах.
Пример чата на Squatting + AnyEvent на Github.com (также тормозит).

Вообще, Squatting злая штука :)

Попробовал для реализации чата: APE (сложная штука на Си, клиент на мутулс, вообще не понравилась), Meteord (не сразу завелся, не очень), NginxHttpPushModule (как-то не так работает, плюс пару раз воркеры nginx ушли почти в 100% CPU). Не стал пробовать dklab multiplex на Event::Lib и POE::Component::Server::Bayeux.

Очень хочется попробовать сделать чат на XMPP, по-моему, это правильно :)

28 Сент, 2009

AnyEvent, AnyEvent::HTTP и Mojo::ByteStream

Удивление, удивление-два и привычка :)

Был удивлен, но оказывается AnyEvent/EV не позволяет выполнять вложенные condvar, получается рекурсия.
Вложенные кондвары не нужны, код легко модифицировать на работу либо с одним (самое главное send вызвать в самый последний момент, чтобы вся асинхронная работа была выполнена), либо с несколькими, тогда вызовы должны быть последовательными. Пример.

Так же был удивлён, что AnyEvent::HTTP автоматически заполняет заголовок Referer у запроса (для работы по умолчанию это лишнее) и не искейпит символы в урле (очень плохо, LWP::UserAgent и/или PoCo::Client::HTTP это делают на автомате, т.к. используют HTTP::Request).

За последнее время я так привык работать с Mojo (напомню, Mojo – pure perl http-фреймворк, "почти" без зависимостей, "веб в коробке"), что при возникновение задач вне окружения Mojo, которые связаны с перекодированием символом, не задумываясь, использую модуль Mojo::ByteStream. Например, для искейпинга символов в урле (проблема с AnyEvent::HTTP) использую следующий код:
Mojo::ByteStream->new($str)->url_escape

Для перевода html-последовательности символов вида &#1043; в печатные символы использую следующий код:

Mojo::ByteStream->new($str)->encode('utf8')->html_unescape

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


use Perl or die;

JFDI



Метки: , , ,

20 Сент, 2009

Mojo. Первый критичный баг

Нашел в Mojo критичный баг, а именно – при запуске сервера как демон-префорк (Mojo::Server::Daemon::Prefork), рабочий процесс (чайлд) падает при работе с пайпами; при запуске сервера как демон или CGI такой проблемы нет.
Подробное описание и тест в рассылке (кстати, мне там сделали замечание, как писать об ошибке). Надеюсь, что я доступно объяснил и показал баг, чтобы автор Mojo и/или кто-нибудь другой нашли решение. Сам пока не нашел.

Реальная задача, которая обнаружила это – отправка сообщения через sendmail в обработчике. Скорее всего ошибка в том, что возникает сигнал завершения потомка и он завершает работу воркера, а не пайпа.

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

UPD: Решение найдено!  github.com/sharifulin/mojo/commit/416b0b15b637ed0fe8d9bf3ca3ba348e16d07f2b

Метки: , , ,

11 Сент, 2009

Запуск проектов на AnyEvent и Mojo


AnyEvent


Запустили твиттеры всех пользователей СТАНЦИИ 2.0, о котором я писал в предыдущем посте.
Используем AnyEvent::Twitter::Stream. Сам API находится в альфа-тестировании, поэтому мы работаем так же :)

Получилось очень круто, иногда интересней, чем ЧАТЕГ :)
Пишите в твиттер и слушайте СТАНЦИЮ 2.0!


Mojo


На днях запустили Рыков.ру, это первый публичный проект, полностью написанный на Mojolicious, в качестве шаблонизатора простой php-like шаблонизатор Mojo::Template, в качестве интерфейса – daemon_prefork, в момент разработки –  daemon c установленной переменной окружения MOJO_RELOAD  (изменения применяются без перезапуска), профилирование – с помошью Devel::NYProf и CGI.

В тестовом режиме запустили API для Маруси. Серверная часть написана на Mojolicious::Lite + MojoX::Renderer::JSON.
Получилось очень круто и все в одном файле, всего 246 строк :)


Что можно сказать про Mojo. Нет стабильной версии, постоянно выходят новые версии без обратной совместимости, но это нормально :)
Многие фичи приходится дописывать самому, автор лоялен к обсуждению функционала Mojo, принимает патчи, фиксит баги.
Иногда меня и мои просьбы не понимает )))
В целом, мне Mojo/Mojolicious нравится, простой и очень удобный. Даже шаблонизатор мне понравился, хотя в начале я не понимал его.



use Perl or die;

JFDI


3 Сент, 2009

Риалтайм твиттер – риал? тайм!

У отличного сервиса Twitter есть хороший API, особенность – Streaming API, возможность получать данные из твиттера мгновенно, почти в реальном времени (риалтайм веб?).

Меня заинтересовала такая возможность, тем более есть необходимость получать статусы из твиттера всех пользователей СТАНЦИИ 2.0 (конечно, у кого есть твиттер) и отображать их на странице в реальном времени. Похожая идея реализована тут, только это видимость реального времени, т.к. делается один запрос на сервер, и постепенно по одному статусу показывается на странице, затем следующий запрос и так далее :)

Read more... )


24 Авг, 2009

Perl. Коротко о разработке

Если раньше для разработки простых серверов я использовал POE::Component::Server::SimpleHTTP, то сейчас мне вполне хватает Mojo или Mojolicious::Lite. Легко, просто и быстро. Заинтриговал? На этом все, привет с моря :)

Опубликовано с мобильного портала m.livejournal.com
Метки: ,

17 Авг, 2009

Perl. use strict; use warnings; use features; use Modern::Perl; use common::sense;

Почти каждый Perl-программист знает, что всегда нужно писать:
use strict;
use warnings;
С выходом perl 5.10 еще и:

use features '...';

Некоторые решили, что приходится писать слишком много "буковок". Так появился модуль Modern::Perl и новая веха в развитии Perl 5, получившая одноименное название. Модуль подключает и импортирует в пространство имен прагмы strict, warnings, features и mro. Теперь скрипты должны начинаться со следующей строчки:
use Modern::Perl;
 
Оказывается, можно пойти дальше и написать так:
use common::sense;

Что это такое? Это почти тоже самое, что и Modern::Perl, только круче :)
use strict qw(vars subs);
use feature qw(say state switch);
no warnings;
Содержимое модуля:
sub import {
   # no warnings
${^WARNING_BITS} ^= ${^WARNING_BITS}; # use strict vars subs
$^H |= 0x00000600; # use feature
$^H{feature_switch} = $^H{feature_say} = $^H{feature_state} = 1; }
Преимущество – использует меньше памяти, чем другие решения.

Обоснование и подробности на CPAN'е.


ЗЫ: Вопреки всем убеждениям в своем коде не использую use warnings или -w, я научился чувствовать и понимать, почему я могу этим пренебречь в той или иной ситуации (за что большое спасибо [info]pavel_kudinov ). Так что common::sense мне вполне подходит :)

ЗЫ2: Автор common::sense – Марк Лехманн (AnyEvent, Coro, EV, BDB).


use Perl or die;

JFDI


10 Авг, 2009

Perl. Коротко об AnyEvent

 AnyEvent – очень крут! :)

Ссылки по теме:
Метки: ,

3 Авг, 2009

YAPC::EU 2009 – самое крупное Perl-мероприятие в Европе в 2009

YAPC::EU 2009 – юбилейная (десятая) европейская "другая конференция" по Perl, проходит с 3 по 5 августа 2009 года в Лиссабоне (Португалия).

YAPC::EU::2009

На конференцию зарегистрировалось 412 перловика из 32 стран и 74 pm-групп. 3 дня выступлений и 4 дня мастер-классов. Подробное расписание. Там будут Ларри Уолл, Демиан Конвей, Брайн Д Фой, Габор Жабо, Мэт Траут и многие другие известные перловики. Россию представляют Андрей Шитов, Алекс Капранов и Руслан Закиров, каждый из них подготовил доклад :)

На мой взгляд интересные доклады:
Хочется дождаться презентаций и видео с мероприятия, а в следующем году поехать на YAPC::EU :)


Метки: ,

31 Июл, 2009

CPANTS – Сервис контроля для CPAN

Всем молодым и не только CPAN-авторам советую пользоваться сервисом CPANTS, сервис котроля для CPAN.

Основная фишка сервиса – это kwalitee, коэффициент качества. Такой коэффициент есть как у автора, так и у дистрибутива.
На его основе строится несколько рейтингов, графики и многопользовательская "он-лайн игра" :) (лига до 5 дистрибутивов, лига более 5 дистрибутивов и лучшее дистрибутивы).

Вот информация обо мне со слов CPANTS.




Я в лиге до 5 дистрибутивов, позиция в рейтиге 1, коэффициент качества 134.783.
Очень интересная получается игра – улучшать свой дистрибутив, увеличивая kwalitee.
Интересный параметр 5й с конца – уговорить/заставить других CPAN-авторов использовать ваш модуль :) Пока никого не уговорил.

К сожалению, данный сервис не умеет работать с дистрибутивами, у которых несколько мейнтейнеров. Так например мой дистрибутив Acme::CPANAuthours::Russian не участвует в моем рейтинге.

Сегодня решил опубликовать еще несколько своих модулей на CPAN (осталось только написать документацию и тесты :), тем самым покинув лигу до 5 дистрибутивов и потеряв первую позицию. В лиге более 5 вообще анреал выйти в топ, посмотрите сами :)

Если ты CPAN-автор, увеличь свой kwalitee, сделай цвет своей таблицы зеленым, попади в топ!
Это игра, это CPAN, это Perl!

use Perl or die;

Just F*cking Do It


Метки: , , ,

23 Июл, 2009

Русская поддержка Perl

Меня спросили, а что можно почитать по Perl на русском, кроме книг от орейли и двух страниц на perlrussia.ru?
Ответ очень простой: мой блог и англоязычные блоги и Perl-планеты.
И смех и грех.

Действительно, что у нас есть?
Непонятный домен perl.ru, который никак не перекупить. Раньше на нем был "гламурный" сайт про Perl и форум.
Афиша мероприятий и несколько полезных ссылок на perlrussia.ru.
Старое г*вно типа perl.org.ru и статьи 2000 года, которые надо назвать: "Так писать на Perl нельзя!".
Пара форумов и ru_perl, на одном из форумов я был ко-модератором, но туда уже не захожу.
Авторский блог perl6.ru
Несколько блогов, где авторы пишут про Perl.
Заброшенный проект POD2::RU (все-таки перевод это сложная штука, особенно когда такие объемы, массу волонтеров найти не получилось, поэтому надо заказать перевод за деньги).
~200 перловиков в Москве, ~90 в Киеве, по ~25 в Ростове-на-Дону и Владивостоке, ~17 в Минске (судя по конференциям) и отличный университет в Екатеринбурге, где преподают Perl на первом курсе.

Чего нет?
Самое главное – нет официального русскоязычного сайта и планеты из русскоязычных блогов про Perl 5 и Perl 6.

Сразу возникает вопрос, как новичок может получить быстрый старт в Perl в России?
Только сам (как мы с вами, но это долго) или придя в фирму, которая готова вырастить Perl-программиста за короткие сроки (Точка кипения?!).

По-моему, это все сложно :) П*здец.

P.S. Я сам читаю 47 фидов про Perl, из них 10 на русском, наверно надо поделиться :)


Метки: ,

13 Июл, 2009

PHP маст дай

Давно хотел написать пост на эту тему, но сегодня как никогда, увидел статью Котерова.
Все три шага, приведенные в ней, имеют место быть. Именно поэтому пхп-программистов большое количество, причем многие из них далеко не программисты. Снизив порог вхождения, мы имеем, что имеем: кучу некачественного кода, движки форумов/галерей и их многочисленные уязвимости. Это обратная сторона медали.

Меня порадовала фраза в статье:

профессиональные программисты на PHP не используют embedded-синтаксис, а предпочитают разделять код и шаблон страницы. Таким образом, очевидно, что embedded-синтаксис — средство завлечения новой аудитории, а не инструмент языка.
 

Read more... )

Но! PHP – это зло!

use Perl or die;

Just F*cking Do It



UPD: Придумал новую цитату:

Любишь себя, не пиши на пхп

8 Июл, 2009

Perl. MooseX::Declare

Второй день уже мучаю MooseX::Declare, постоянно посматриваю в презентацию.
Получается интересно, уже 4я версия кода, с каждой версией абстракция растет и количество килобайт тоже :) Но голова болит еще больше, приходиться "иначе" мыслить, чем прежде.
Пока нравится то, что много интересных фишек (например, собственные типы, классы со вложениями и указания имен как ::Bar, а не полные Foo::Bar, lazy-дефолтные поля), код заставляет тебя не ошибаться, где-то что-то упустил и все п*здец, не работаить :)
Сейчас столкнулся с одной проблемой, сразу не стандартизировал поле, посчитал его произвольным и теперь мучаюсь с разными форматами. Завтра собираюсь написать 5 версию и избавиться от этого. Постоянный рефакторинг – это круто, метки типа XXX и FUCK решают.

Чувствую себя ModernPerl'истом :)




29 Июн, 2009

Perl. Cache::FastMmap побаловаться, но не использовать

Года два назад наткнулся на модуль Cache::FastMmap, документация очень впечатлила, по-моему, именно в таком стиле надо доку писать!
Попробовал заюзать этот модуль, все хорошо, работает, на синтетических тестах показывал хорошие результат.
Я даже подумал, что memcached мне нужен.
Но со временем при увеличение нагрузки, процессы при обработке определенных запросов стали уходить в D (uninterruptible) и все подвисало, иногда так, что даже залогиниться не получалось :) Временное решение сразу нашлось – перезапуск процессов, если D много. Уже хотел начать профилировать код, но вспомнил про Cache::FastMmap.
Убрав его, все наладилось, пока D ни разу не было. Профилированием обязательно займусь, Devel::NYTProf, ты готов? :)


25 Июн, 2009

Perl. POE or not POE

Я довольно быстро стал писать на POE различные простые мультиплексы, даже не смотрю в документацию :)
Так, например, сегодня пришлось написать микро-скрипт, который пробежится по базе твиттер-пользователей и проверит их аватары (многие урлы стали невалидными и Амазон очень красиво говорит 404 в виде XML). Скрипт я написал на POE, хотя знаю все недостатки его и есть опыт работы с AnyEvent, IO::Lambda, даже Coro + Coro::Mysql. Меня устраивает скорость разработки, но с другой стороны я понимаю, что надо от него уходить. Как перестать писать на POE? (свой мультиплекс писать я не буду :)

POE или не POE. Вот в чем вопрос :)


Метки: , ,

23 Июн, 2009

Ax, Perl, сколько задач приходиться решать на работе, не связанных с тобой :)

По другому этот пост не назовешь.

Прошла неделя и Perl'а было совсем немного, зато очень много оптимизации MySQL, настройки nginx, тонкой настройки, мониторинг графиков Munin'а, написание JavaScript'а, даже на PHP пришлось пофигачить (об этом следующий пост, обещаю, ой, как я плевался, монитор несколько раз протирал :).
Меня несколько раз спрашивали: "А правда, что Perl – write-only?!", мои следующие посты обязательно ответят на этот вопрос.

Вернусь к теме простых и функциональных скриптов на Perl.
15 минут и 37 строчек кода позволяют осуществить трансляцию RSS с поиска по блогам от Яндекса.
По-моему, очень просто, парсинг RSS вообще не составляет труда, используя XML::Feed.
Структура сообщений не позволила использовать ту же таблицу для проверки уникальности записей (обычно: unique id + insert ignore), поэтому Storable в помощь.

Единственное: в отличии от Твиттера, поиск по блогам не риал-тайм, поэтому опираться на дату создания поста было нецелесообразно, многие посты тонули в бездне ЧАТЕГА :) Поэтому они раскидываются с минутным интервалом.

use Perl or die;

JFDI





Метки: , ,

Предыдущие 20

sharifulin

Ноябрь 2009

Вс Пн Вт Ср Чт Пт Сб
1234567
891011121314
15161718192021
22232425262728
2930     

Реклама

Метки

Трансляция

RSS Atom
Разработано LiveJournal.com