воскресенье, 27 июля 2014 г.

Фотографии с Perl-хакатона в Киеве (2014)

В Киеве 19-20 июля 2014  прошел Perl-хакатон. Мероприятие посетил Марк Леманн - автор AnyEvent, Core, JSON::XS и libev. Думаю, многие слашали про node.js, но мало кто знает, что в нем по-началу использовался libev.

Хакатон прошел в дружественной атмосфере, vti подобрал хорошее место для мероприятия и было, как говорится, уютно и комфортно. Единственное, чего мне хватило, так это кофе. Нет кофе брейк был, но представь себе ситуацию, ты выходишь на кофе-брейк, там печеньки, кофе, общение - все прекрасно. Затем ты идешь в основную комнату и отчаянно пишешь код, делаешь паузу, идеш опять к печенькам и кофе, а там... все убрали и пусто... шок и разачорование. А программист - это машина, которая перерабатывает кофе в код. :) В остальном все было отлично. В детали вдаваться не буду, это был классический хакатон: мини-проекты, команды, презентация результатов, общение, посиделки в пабе.

Собственно сабж:



суббота, 19 мая 2012 г.

Try::Tiny и диспетчеризация исключений

Проблема 
Многие используют Try::Tiny. Все в этом модуле хорошо, только не хватает вот чего-то вроде:
try {
   die Class1->new();
}
catch('Class1') {
   # Catch all exceptions of Class1
}
catch('Class2') {
   # Catch all exceptions of Class2
}
catch {
   # Catch other exceptions
}
К сожалению, сделать такой синтаксис, не убрав "::Tiny" с названия модуля, не так просто. Кроме того, переписывать Try::Tiny вообще нет никакого желания.

Решение 1
Немного подумав я пришел к такому варианту:

вторник, 15 мая 2012 г.

Mojolicious::Plugin::RenderFile для отдачи файлов

Стояла задача дать пользователю возможность скачать файл. Покопавшись в документации, я нашел 2 варианта - хелперы "render_data" и "render_static". Оба варианта мне не подошли. 
"render_data" - принимает строку, а я не хотел вычитывать весь файл в память.
"render_static" - отдает файлы с "public" директории.

render_file 
Интернет предложил различные варианты решения проблемы, но какого-то удобного я не нашел, решил написать свой хелпер. Хелпер должен был уметь отдавать файл по абсолютному пути с любой папки без вычитывания файла в память, и чтобы браузер предлагал пользователю файл сохранить, а не пытался рендерить. Так появился "render_file". Используется он так:
# Provide any file name
$self->render_file(
    filepath => '/tmp/files/file.pdf',  
    filename => 'report.pdf'
);

понедельник, 14 мая 2012 г.

Немного фотографий с Perl Mova 2012


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


Собственно фотки

 


вторник, 17 апреля 2012 г.

Посещение iforum

Сегодня я со своими орлами посетил в очередной раз iforum. В этот году, если я не ошибаюсь, зарегистрировалось более 4 тыс. человек. Мероприятие - про бизнес, рекламу, продвижение, технологии в Интернет.  Изначально, я собирался посетить техническую секцию доклады Дмитрия Сатина.  Техническую секцию конечно сложно назвать откровением, но было вполне неплохо с расчета на массовую аудиторию. На докладах Дмитрия, как всегда, не было где яблоку упасть.

И парочка фотографий ...

Это я, вроде бы каждый день вижу себя в зеркало, но только сейчас осознал, что пора в парикмахерскую.


пятница, 17 февраля 2012 г.

Первая техническая втреча Kiev.pm

16 Февраля 2012 года, в 19:30 в помещении GL Club, Киев состоялась техническая встреча Kiev.pm - группы пользователей Perl. Посетило встречу около 12 человек. Провели 2 доклада, на остальные не хватило времени и решили перенести на следующий раз.

Доклады:
  1. "Nginx. По следам мастер-класса Игоря Сысоева" Денис Жданов. Презентация 
  2. "Redis. Protocol::Redis"  Сергей Засенко. Презентация





пятница, 13 января 2012 г.

Валидация данных в Mojolicious

Написал небольшой плагин для Mojolicious  - Mojolicious::Plugin::ValidateTiny. По сути - это обертка над Validate::Tiny с дополнительными удобными плюшками.

Для валидации входящий параметров мы просто используем хелпер:
$self->do_validation($validate_rules);
$validate_rules - это описание проверок в формате Validate::Tiny.

По-умолчанию, включена опция "autofields", которая позволяет использовать сокращенный вариант правил проверки. И вместо:
  {  
     fields => ['user', 'pass'],
     checks => [user => is_required(), pass => is_required()] 
  }
можно писать:
 [ user => is_required(), pass => is_required() ]
и fields автоматически заполнятся исходя из описания проверок.

Также очень полезна опции "explicit", которая обязывает нас описать явно правила валидации для каждого поля. По-умолчанию, выключена, но в своих проекта я всегда ее включаю.

Кроме хелпера "validator_error", есть еще хелпер "validator_any_error".
  my $errors     = $self->validator_error;         # hashref with errors
  my $pass_error = $self->validator_error('pass'); # password error text
  my $any_error  = $self->validator_any_error;     # any error