― Web Technology and Life ―

Hachioji.pm #17とその前のLike a ハッカソンに参加したご報告

2012-05-31
驚異のほぼ毎月開催を続けているHachioji.pmに今月も参加できましたのでご報告です。「Like a ハッカソン」には9名、「Hachioji.pm #17」には11名満員参加となりましたー。今回は私もyancha(旧称yairc)の開発に参加しましたよー!

Like a ハッカソン #3 (pre Hachioji.pm #17)

今の「Like a ハッカソン」は、メインで新しいチャットツールyancha(旧yairc)を作っていて、yanchaの開発をしなくても、個人個人で作りたいものをモクモクと開発し、最後に簡単に発表するという流れをとっています。

今回は、主催的と未だに入れてもらっているクセに、朝トラブって昼過ぎからの参加となってしまいまして、大変申し訳なかったです。。。皆様が何やっているか把握する余裕があまりなかったのですが、結構yanchaのコードを読んで方もいて、会として「この実装なにー?」とか良い感じにコードへのコミュニケーションが出来ていたんじゃないかなーと思います。

yancha

yanchaは、makamakaさんがかなりリファクタリング、機能実装を進めていて、当初よりもしっかりしたコードになっていました。機能的にも、増えていて外からpostするapiや、発言を選んでサマリurlを作る機能や、いくつかのバグの修正が行われていました。

今回私はyanchaの機能追加をしました。facebookの「いいね!」的な機能、Perl界隈で言う「++」をカタチにした機能、「PlusPlus」を実装していました。結局、翌日の日曜も数時間とって書いたのですがw、結果的にPull Requestが取り込まれてよかったです。AnyEventとかJavaScriptとかコールバック系というかイベント駆動系はなかなか慣れずに飲み込みが悪くもやっとしながらやっていたのですが、ひとつ公開できるというか区切りがつけられて皆様に共有できるようなことになると、実際はしょぼいコードでも個人的にはうれしいですね!

モクモク

okamuuuさんは開発された[Gang](https://github.com/okamuuu/Gang)にWebのアクション毎にどれくらいの時間がかかっているのかログをとるコードを追加していました。デストロイ時にログるという実装はさすがだなーと思いました!

その他の方々が何をされていたのか、自分で精一杯で把握できていません。すみません。。。

Hachioji.pm #17(夜の部)

今回は、噂の沖縄料理屋さんに行きましたー。私ははじめてだったんですが、御飯も美味しいし、オリオンビールの生ビール(?)が飲めるのは結構新鮮でした。

LTなどメモ

日が立ってしまってなんだか忘れ気味なんですが、相変わらずmakamakaさんのLTがおもしろかったです。

すみません、uzullaさんとtoku_bassさんのLTが思い出せません!苦笑。

その他もろもろ

  • 知らぬ魔に、日本のpmの紹介ページにHachioji.pmが載っていて、しかも「 (not registered)」と書かれており・・・苦笑
  • YPAC:Asia 2012でLTソンをやることになった
  • Like a ハッカソンで作っているyairc(仮)がyancha(Yet Another Network Chat?)に決まった
  • kkotaro0111さんが、本格的にyanchaのデザイン/UIを考えだしていた!

PerlのLogを取り扱うモジュールなど(自分のLT)

ログ吐き方全般に関するノウハウはkazeburoさんの 第11回 ログでアプリケーションの改善プロセスを回すがとても参考になるという前置きをして、Perlのログを扱うモジュールのLog::MinimalLog::Handlerを紹介しました。
Log::Minimalは、シンプルでカスタマイズ性も高くとてもいいし、Log::Handlerも以下のようなログの吐き出し方法を選択できる要素はとてもいいという話です。Log::Minimalも独自にカスタマイズができるからいいんだけど、バッチ用を考えると、プラグインみたいなものがあってそれuseすると、まるっと吐き出し先の定義ができちゃうみたいなことができるといいなーと昨今思っています。以下にそんな妄想を中途半端にかたちにしたコードをはっておきます。ちょっとローテションのところがうまいこと思いつかなくて以下のサンプルではテキトウな感じになっています。

Log::Handlerのログの吐き出し方をコンストラクション時に定義する方法

use Log::Handler;

my $log = Log::Handler->new(
    screen => {
        log_to   => "STDOUT",
        maxlevel => "debug",
        minlevel => "debug",
        message_layout => "%T [%L] %m (%C)",
    },
    sendmail => {
        from     => "bar@foo.example",
        to       => "foo@bar.example",
        subject  => "your subject",
        maxlevel => "error",
        minlevel => "error",
        message_pattern => '%L',
    },
    file => {
        filename => "file1.log",
        maxlevel => 7,
        minlevel => 0
    },
);

標準出力、メール、ファイルなど、ログレベル(infoとかerrorとかcriticalとかみたいなやつ)別に定義できます。

Log::Minimalの個人的なバッチ用カスタマイズ方法

package MyApp::LogMinimal;
use Time::Piece;
use IO::File;
use Path::Class qw/file/;

sub import {
    Log::Minimal->export_to_level(1, @_);
}

$Log::Minimal::AUTODUMP = 1;
$Log::Minimal::PRINT = sub {
    my ( $time, $type, $message, $trace,$raw_message) = @_;

    if($type eq'CRITICAL') {
        #クリティカルの場合は、メールで飛ばす
    }

    #ここからはテキトウ(私の環境に依存)
    #実行スクリプト別にローテションファイルを生成して、ログを吐きつつ、標準エラー出力にも出すみたいな
    (my $log_file_name = $0) =~ s/assets\/script\/(.+)\..+/$1/;
    my $today = localtime->strftime('%Y%m%d');
    my $log_dir = 'assets/log';

    for my $erase_term (5..30) {
        my $erase_date = $today - $erase_term;
        my $erase_file = file($log_dir,$log_file_name.'.log.'.$erase_date);
        (-e $erase_file) and unlink $erase_file;
    }

    my $file = file($log_dir,$log_file_name.'.log.'.$today);
    my $fh = IO::File->new($file, '>>')
                or croak "[ERROR] could't open file $file: $!";
    $fh->print("$time [$type] $raw_message $trace\n");
    undef $fh;

    warn "$time [$type] $message at $trace\n";
};
1;

個人的にはObject::Containerに突っ込むことを考えると、関数のエクスポートでなく、オブジェクトに入れるようにもしたいなーと思っていまし、やっぱりなんかパッチ処理用のフレームワーク(ログはくとか、スタートしていいか聞くとか)みたいなのが作りたいと思う昨今ですが、なんだかモンモン。

もろもろ

次回のHachioji.pmは、6/23(土)が予定されています。引き続き、Like a ハッカソンも行われると思いますので、モクモクでもyanchaのコード読むでも、ふるって予定を空けてプログラマー/エンジニア談義、コーディングにふける時間を取るといいと思います。
ちょっと勉強会的レポートが続いてしまっているので、軽いのでもプログラミング周りの記事を書かなきゃ!最近は、パラパラといろんなことをやっていて、あまり形になっていないし、プログラミング的にしっかり取り組めていない感じなので、各個撃破していきたい感じなんですよねー。

ではでは、内容等についてツッコミどころがありましたら、はてぶやTwitterでどしどしお願いしますー。

hachioji.pm update_at : 2012-05-31T11:39:42
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus