コンピュータやソフトウェアのあれこれ@道民(&元道民)
perl+web
[perl][perl+web]Test::LeakTrace についてメモ書き
1月 5th
ハマったので未来の自分のためにメモ書きを残しつつ、今年もよろしくお願い致しますm(_ _)m。
Test::LeakTraceの特性
Test::LeakTrace で、以下のテストは通る。
my %x; no_leaks_ok { $x{x} = undef };
しかし以下のテストは通らない。
my @x; no_leaks_ok { push @x, undef };
これは、@x にエントリが増えた分がリークとしてカウントされるから。じゃあ前者はなぜ大丈夫なのかというと、no_leaks_ok はブロックを2回実行して2回目でリークをカウントするせい。1回目の実行で%xのバケットが1つ増えるが、2回目以降は再利用するのでリークとしてカウントされない。
あと、次のコードは "not ok 1 - leaks 1 <= 0" と言ってる癖にダンプを表示しない。
my %x; my $k = 0; no_leaks_ok { $k = ($k + 1) % 2; $x{$k} = undef; };
これはダンプを作る際にさらに改めて2回ブロックを実行する仕組みになっているため。この現象は2回目の呼び出しまではメモリが増加するけど3回目以降は増加しないような場合に起こる。
Test::LeakTrace はこのように複数回ブロックを呼び出してリークを判定・調査する特性があるので、メモリの使い方が安定した状態で呼んだ方が懸命である。
Test::LeakTrace と AnyEvent
AnyEvent のコードはコールバックを中心に書くため、リークしやすい。なので、 Test::LeakTrace でリークしてないことを確かめるのはよいプラクティスだと思う。
しかし AnyEvent は実際の初期化処理を任意のメソッドの使用時にまで遅らせている。そのため、任意のタイミングで初期化処理が走る可能性があり、それが Test::LeakTrace の結果に影響を及ぼすかもしれない。よって、 AnyEvent::detect を先に呼んで初期化を終わらせておいた方が変にハマらずに済む(気がする)。
[perl][perl+web]AE::cv->cb のコールバック実行タイミングについての小噺
11月 7th
$cv を実行が終わるまで取っておこうとして、
package CVPrinter; use strict; use warnings; use AnyEvent; sub new { bless {}, $_[0] } sub print_cv { my ($self, $cv) = @_; $cv->cb(sub { my ($v) = $_[0]->recv; print $v, "\n"; delete $self->{cv}; # (1) }); $self->{cv} = $cv; # (2) }
なんて書き方をすると、
my $cv = AE::cv; my $t = AE::timer 0, 0, sub { $cv->("HELLO") };
のような$cvだと想定通りの動作だけど、
my $cv = AE::cv; $cv->("HELLO");
のような$cvを渡すと$self->{cv}は空っぽにはならないよって話。
cbに渡したルーチンはコールバックなので後で呼ばれそうなイメージがあるけど、先にsendが済んでいる場合はその場で呼ばれてしまう。ので(1)と(2)の実行順は完全にケースバイケース。
[perl][perl+web][hokkaidopm]Hokkaido.pm #6 は 12月10日 です
10月 26th
Hokkaido.pm #6 への参加申し込みはお早めにどうぞ。
今回は、懇親会の1次会までの参加です。今回は@sugyan さんの参加が確定してますし、@nekokak さんもスケジュールがあえばいらっしゃるようです。純粋にスキルアップを狙う人はもちろん、Perlを使っていたりWEB開発をしていたりする仲間と酒飲んで語りたいって動機だけでも十分だと思いますので、北海道にお住まいの方は参加してみてはいかがでしょうか。
[perl][perl+web][math]Directing AE with Arrows
10月 23rd
@maki_daisukeさんに教えてもらったのを読んで実装してみた。
use strict; use warnings; { package AsyncArrow; use Scalar::Util qw/weaken/; use AnyEvent; use Exporter qw/import/; use Class::Accessor::Lite new => 1, rw => ['code']; our @EXPORT = qw/repeat done/; sub repeat_request(;$) { {repeat => 1, value => shift} } sub done_request(;$) { {done => 1, value => shift} } sub arr { my ($class, $f) = @_; $class->new(code => sub { my ($v, $progress, $cont) = @_; $cont->($f->($v), $progress); }); } sub compose { my ($self, $other) = @_; return (ref $self)->new(code => sub { my ($v, $progress, $cont) = @_; $self->code->($v, $progress, sub { my ($v, $progress) = @_; $other->code->($v, $progress, $cont); }); }); } sub run { my ($self, $v, $progress) = @_; $progress ||= ProgressArrow->new_without_args; $self->code->($v, $progress, sub { my ($v, $progress) = @_; return; }); return $progress; } sub repeat { my $self = shift; my $weaken_loop; my $loop = sub { my ($v, $progress, $cont) = @_; $self->code->($v, $progress, sub { my ($v, $progress) = @_; if ($v->{repeat}) { my $canceller; my $t = AE::timer 0, 0, sub { $progress->advance($canceller); $weaken_loop->($v->{value}, $progress, $cont); }; $progress->add_canceller($canceller = sub { undef $t }); } elsif ($v->{done}) { $cont->($v->{value}, $progress); } else { die } }); }; weaken($weaken_loop = $loop); (ref $self)->new(code => $loop); } } { package ProgressArrow; use parent qw/-norequire AsyncArrow/; use Scalar::Util qw/weaken/; use Class::Accessor::Lite rw => ['cancellers', 'observers']; sub new_without_args { my $class = shift; my $self = $class->new( cancellers => [], observers => [], ); weaken(my $weaken_self = $self); $self->code(sub { my ($v, $progress, $cont) = @_; push @{$weaken_self->observers}, sub { my ($v) = @_; $cont->($v, $progress); }; }); return $self; } sub add_canceller { my $self = shift; push @{$self->cancellers}, @_; } sub advance { my ($self, $canceller) = @_; @{$self->cancellers} = grep {$canceller != $_} @{$self->cancellers}; while (my $observer = shift @{$self->observers}) { $observer->(); } } sub cancel { my ($self, $canceller) = @_; while (my $cancel = shift @{$self->cancellers}) { $cancel->(); } } } use AnyEvent; use AnyEvent::Handle; sub inputted_line() { AsyncArrow->new(code => sub { my ($v, $progress, $cont) = @_; my $canceller; my $hdl = AnyEvent::Handle->new( fh => \*STDIN, on_error => sub { my ($hdl, $fatal, $message) = @_; $hdl->destroy; $! and warn "$message(fatal=$fatal)"; $cont->(); }, on_read => sub { my ($hdl) = @_; $hdl->push_read(line => sub { my ($hdl, $line, $eol) = @_; $progress->advance($canceller); $canceller->(); $cont->($line, $progress); }); }, ); $progress->add_canceller($canceller = sub { undef $hdl }); }); } my $cv = AE::cv; my $total_length = 0; my $p = inputted_line->compose(AsyncArrow->arr(sub { if (defined $_[0]) { $total_length += length $_[0]; print "INPUT: $_[0]\n"; AsyncArrow::repeat_request; } else { print "DONE\n"; AsyncArrow::done_request; } }))->repeat ->compose(AsyncArrow->arr(sub { $cv->send })) ->run; $p->compose(AsyncArrow->arr(sub { print "total length: $total_length\n" }))->compose(AsyncArrow->arr(\&AsyncArrow::repeat_request)) ->repeat ->run; $cv->recv;
ArrowsはGeneralising Monads to Arrowsにモナドの一般化として載ってます。ざっくり言えば、高階関数の圏の直積を保存するように作った、新たな圏への関手。
で、このJSの実装なんだけど、CpsA の実装までは美しいのに、 AsyncA の実装がイマイチな気がするんですよね。特に ProgressA って、状態をバリバリに持ってるSubject的なクラスなのに、AsyncA を継承して作る利点がイマイチわからず。
[perl][perl+web][hokkaidopm][planet]「Hokkaido.pm のおかげで結婚できました」
10月 21st
めでたい RT @lestrrat: [YAPC::Asia のおかげで結婚できました」RT @hiratara: 無事に婚姻届が受理されたとこ。
「YAPC::Asia のおかげで結婚できました」エントリありますか RT @hiratara: 無事に婚姻届が受理されたとこ。
エアRTからの無茶ぶりがあったので、YAPC::Asiaの話ではないですがこぼれ話でも。
妻とは付き合いが長かったのに加え、今年は震災もあったことから、「二人の関係を有耶無耶にしたまま人生を終えてしまったら死んでも死にきれない」という思いが少なからずありました。そのタイミングで開催されたのが、Hokkaido.pm #5。ちょうどうまーく実家に帰る口実ができたので、Hokkaido.pmへ行くついでにプロポーズしてそのまま実家に挨拶へ連れて行くという作戦を練りました。妻にも実家にも、「Hokkaido.pm行くからついでに実家に顔出す」、としか言ってなかったので完全にサプライズイベントだったらしく驚かれました(笑)。その後両家の顔合わせなどを経て、昨日無事入籍しました*1。Twitterやfacebook、mixiにてお祝いの言葉を下さった方々、どうもありがとうございました!
昨年Hokkaido.pm が始まったお陰で実家に帰る回数が増え、家族の大切を改めて感じることができるようになりました。そして、#5をタイミングよく開催して頂けたおかげで、重い腰を上げて実家の両親へ挨拶へいくきっかけもできました。Hokkaido.pm がなかったらこんな急に結婚に至ることはなかったと思います。
地方.pm って、ほんとに素晴らしいものですね!
*1:式の段取りこれからなので、落ち着くのはまだまだ先のことになりそうです
[perl][yapcasia][perl+web][math]YAPCで話さなかったこと
10月 16th
今回のトークでは「斜めの矢印」とか「合成」とかそういう言葉を説明に含める必要があったので圏論のことばや記法を前半で色々紹介しましたが、泥沼詳細には踏み込み過ぎないように気をつけました。その泥沼詳細にあえて踏み込んでみたい人のために、このトークに出てきた話と圏論の言葉の対応表を与えておきます。
| スライド内の言葉 | 圏論的な性質 |
|---|---|
| Type(型) | 対象 |
| Arrow(矢印)、または、関数 | 射 |
| id | 恒等射 |
| M() | 関手の対象関数 |
| モナド = M(), unit, flat_map | Kleisli triple*1 |
| 斜めの矢印、または、Kleisli射 | Kleisli圏の射 |
| map | 関手の射関数 |
| unit | 自然変換 |
| flatten | 自然変換 |
| M()+map, unit, flatten | モナド |
さらにM(), unit, flat_mapによって高階関数の成す圏のKleisli圏が構成されるとみなすと、unitはそのKleisli圏の恒等射、flat_mapを介した2つのKleisli射の合成がそのKleisli圏での合成と言えます。
勉強する順番としては、圏(対象、射、恒等射)→関手→自然変換→モナド、が最速です。
*1:プログラミング言語のモナドは、数学ではKleisli tripleと呼ばれています。数学のモナドは、後述されている3つ組をいいます。ただし、数学のモナドと数学のKleisli tripleは同値です
[perl][yapcasia][perl+web][math]YAPCで話したことと
10月 16th
今回のYAPCでスピーカーデビューしてきました。スライドは以下にあります。
応募した当初は、十数名聞きにくればいいかなーと思っていたのですが、蓋を開けてみると結構な人数に聞いていただき、ほんとうにありがとうございました。
今回発表したライブラリについてはCPANやgithub上にありますので、先日書いたエントリを参照して下さい。
[perl][yapcasia][perl+web][math]YAPCで話したこと
10月 16th
今回のYAPCでスピーカーデビューしてきました。スライドは以下にあります。
応募した当初は、十数名聞きにくればいいかなーと思っていたのですが、蓋を開けてみると結構な人数に聞いていただき、ほんとうにありがとうございました。
今回発表したライブラリについてはCPANやgithub上にありますので、先日書いたエントリを参照して下さい。
[レポート][perl][perl+web][yapcasia]今日はYAPC::Asia Tokyo 2011の2日目です
10月 15th
あいにくの雨ですが、今日も時間通り会場に到着しています。
本日もgihyo.jpさんの特集のレポーターをやってます。参加されているみなさんと一緒に楽しみながらレポートしようと思っています。
Kazuho Okuさん「Unix Programming with Perl 2」
- 昨年のトークでは、エラーやファイルハンドル、シグナルについて話した
- 今年はプロセス間通信と、シグナル周りのレースコンディション
- IPC::Open3 : open3がロックする場合がある。いつ?
- A). STDIN を読むコードの場合、$cinを待ち続けるのでロック
- close $cin する
- B). 子プロセスがSTDOUTとSTDERRに大量にデータを吐いた場合、バッファがいっぱいとなる
- 試すと、16384byte (16KB)でブロックする。これがバッファサイズ。OSによって異なる--close $cout, close $cerr では解決しない → エラーにより戻り値が変わる
- while (<$cout>) + while (<$cerr>) では? → <$cerr> の読み込みに処理が移らないので駄目
- 答え: $cerrにundefを渡し、while (<$cout>)する。
- ADVICE). パイプを使わずに、tempファイルを使うとよい
- |- cmd > tmp とかじゃだめ? → shell の解釈が入る分遅くなる。また危険にもなる
- open3を使うとよい
- レースコンディションについて : while して signal するプログラムで、間にSIGHUPが割り込むと想定通りに受信できないことがある
- POSIX::pselect を使うといいはず・・・しかし、この実装に不具合のあるケースがある
- evalとdieでsigprocmaskをしても問題は解決できない
- シグナルにsyswriteを呼ぶとよい
- まとめ
- バッファーサイズは有限なのでデッドロックに注意
- shellの呼び出しには問題があるので、@argsやIPC::Open3を利用
- シグナルのレースコンディションには注意する
- 質疑応答
- Q. UNIXの仕組みでなくAnyEventで何か違う考え方ができる?
- A. ラップされてるはず。なので、これらは問題にならない
masahiro naganoさん「運用しやすいWebアプリケーションの構築方法」
- 旧職での経験 : 1億PVから10億PVへの増加、2000台のサーバ、数十のサービス
- 運用しやすい = 「障害を起こさない」「早く復旧する」「スケーラビリティ」
- ログ → アプリケーションからの情報発信
- 障害発生の際に最初に見る
- ログがないと調査に時間がかかる
- straceしたり、アクセスログやバイナリログを見たり
- 結果、椅子が飛ぶ
- Log::* はたくさんある。どれを選ぶべきなのか
- ログが含むべき情報
- 時間、ログレベル、環境、caller、メッセージ(主語+目的語、述語)
- Log::Dispatch は機能不足ではないか
- ログレベル
- DEBUG、INFO、WARN、CRITICAL
- Log::Minimal
- ログレベルごとにXXXXfとXXXXff が用意されている
- fとffの違いはスタックとレースの有無
- LM_DEBUG を環境変数を指定すると、debugレベルが表示される
- $Log::Minimal::PRINT を上書きすると、出力方法を変えられる
- $Log::Minimal::COLOR を有効にすると、カラーリングできる
- Log::Minimalの設計思想
- WAFともModelとも粗結合。環境の情報はPSGIのMiddlewareで行う
- Plack::Middleware::Log::Minimal はREQUEST_URI情報をログへ付け足す
- worker の中では、$Log::Minimal::PRINTを上書きして負荷情報を足せばよい
- DBが重いとき
- show processlist、slow_log、などを確認
- アプリケーションのコードからなんのクエリか確認。killしていいのか?
- チューニングで解決できるのか
- → ORM大っ嫌い
- SQLとコードがマッチしない → grepで該当箇所が見つからない
- ORMを使うときの注意
- SQLの生成個所が散らばらないようにする → 特にViewで生成しない
- クエリコメントを加える
- DBIx::Sunny → DBIのサブクラス。caller情報をSQLコメントへ埋め込む
- 他、select_oneやselect_rowなど、便利なショートカット
- SQL::Makerとの組み合わせなど
- DBIの接続をキャッシュすると、接続時間が長くなる
- 最大接続数に達しやすくなる
- DNSの書き換えが浸透しなくなる(メンテしにくい)
- SHOW INNODB STATUS が見れなくなる (欲しい情報が末尾にあるので)
- Scope::Container でDB接続管理をする
- local と似たような機能。処理単位で接続を切るようにする
- Scope::Container::DBI
- Scope::Container + DBI を楽に実現
- 他、DBIのクラスを変更できたり、slaveのランダム接続など
- Plack::Middleware::Scope::Container
- コントローラとモデルにまたがる処理単位を、まとめる
- memcachedの課題
- 永続化されない
- 特定のキャッシュへアクセスが集中すると、特定のサーバ負荷が高くなる
- キャッシュが切れるタイミングで、DB負荷が一気に上がる
- Cache::Memcached::IronPlate (CPANにない)
- memcachedのラッパー
- cacheを複数に保存する。過半数が生きていれば有効と見なす
- Cache::Isolator
- graceful expire → expire 時間の違うキャッシュを二つ作成し、9:1の割合で分岐
- concurrency controled get_or_set → 同期をとってDBへの同時アクセス数を制御
- Plack::Middleware::ServerStatus::Lite
- Apacheのmod_statusに相当
- Parallel::Scoreboard
- update->('.')、update->('A') などで、ジョブのワーカーなどから状態通知させる
nekokakuさん「watch your log」
- 使ってないモジュールのトークばっかじゃん→今日のアプリは業務で使ってます
- DevOps → DevとOpsは仲良くすべき
- Opsのことを考えられるDev
- Opsの人が1次対応をする → Opsの人へ情報を送る
- 運用したことがないミドルウェアの情報をDevでも調べて共有
- 新機能のリリースはOpsへ伝達
- Devに依頼ができるOps
- アーキテクチャ、対応すべき問題を理解する。
- 必要な情報はDevに提出させる
- DevとOpsのコミュニケーションに関して作ったモジュールのお話
- 監視
- 死活監視、リソース監視、ログ監視
- ログ監視のソリューションでいいソリューションがないのではないか
- DevとOpsは、ログの出力方法を取り決めるべき
- Opsの一時対応が早くなる → WEB+DBのkazeburoさんの記事を参考
- 監視すべきログ
- access_log, error_log, application log(syslog), mysql slow log
- access_logやerror_logは外部からのリクエストへのレスポンス
- 500系 → アプリのバグ
- 404 → HTMLの記述の不具合
- error_log はゴミが多かったりする
- error_logのundef のwarning などは緊急性が低いので、1日に一回見ればよさげ
- application logはDevとOpsの取り決めが生きる
- ビジネス的な深刻度をログに吐き、対応フローを決めておくとよい
- mysql slow log : ほとんどの場合、DBがボトルネック
- 数十GB溜まっていたりする・・・
- ログファイルのローテーション
- mysql slow log は日単位でローテーション → 圧縮したり
- ログの収集方法 → Komainu
- accesslog, applicatio log, slow log の集計を設定により集計
- fork model で動く。fork数は制御される。結果はDBへ
- 親プロセスはDBから収集する
- DBにいれるメリット
- 過去のデータと比較できる
- グラフ化しやすい
- 子プロセスと親プロセスのやりとりが楽
- 最低でも5分に1回サーバを巡回して結果通知したい
- 時間でgrep × ステータスでgrep して集計
- 実行は、昨日のpfperlにて各サーバで
- Application LogはDevとOpsで決めた文言をgrepするだけ
- deployすると、時間が自動的に記録される
- mysqlで実行に時間がかかっているものをリアルタイムであれrつぃたい
- show full processlist でしきい値を見れば
- 自動でKILLかは微妙
- 実際の監視対象
- 100台以上。access_log ベースで億単位。
- fork modelで2.5分で処理完了
- 監視用の専用サーバも必要
- 重要なこと → サービスのクオリティーの維持
- 利用者からの問い合わせで障害に気がつくのは情けない
- ログ情報を通知し、以外にエラーが出てることに向き合う
- Shut the fuck up and write some code
- DevもOpsもエンジニア。行動すべき
- コードの善し悪しは二の次。問題意識を持った人が行動することが重要
- まとめ
- DevとOpsは密なコミュニケーションが必要
- 監視を軸にコミュニケーションを深められる
- 監視を仕様化する
- ログも監視しよう
- 質疑応答
- Q. syslogサーバは何台? ストレージの容量は?
- A. 2台とか。ディスクも特別ではない。貯めるよりも、出たことに気がつくこと。過去の記録が残ればいいだけで、全てを残す必要はない。
- Q. アクセスログ1時間で何GB?
- A. 結構なサイズ。forkも何もしないと、5分では収まらない
- Q. daemontools のマルチログをうまく使うには?
- A. 使いにくいので副次的に使う程度でいいのでは。
hiratara「Monads in Perl」
こちらはgihyo.jpさんの特集へ掲載しています。
SKYARC System presents 招待 LT
papixさん「Cコンパイラ用テストスイート自動生成システム」
- testgen2 は Perlで書かれている
- テスト生成、出力の解析などをPerlで解析
- Cコンパイラ用のテストスイートの自動生成
- K&RとC89コンパイラ開発の初期。9000本。テンプレの追加。開発進行中
- コンパイラ作ってる方に知らせて下さい
hkataokaさん「僕とPerlとYAPCAsia」
- 2002年正月Perlと出会った
- モダンPerl入門、Perl CPANモジュールガイド が方向性を教えてくれた
- 2005年12月YAPCを知った
- スカイアークシステムさんのお陰で5年越しでこれた
- 臨場感や熱気が違う。他のPerl Mongerとのコミュニケーション
- miyagawaさんからPlack::Middleware::ExceptionNotice のアドバイスを頂いた
- YAPCは東京でやっていて、すごい
- 地元も、メンバーを増やせばすごいはず
- 地元からもすごい人が出るかも
shinpei_cmykさん「プレNiigata.pm活動報告」
- ゆのっちはunicodeで書ける - YUNOCODE と呼ぶべk(すべった
- Hachioji.pmに出席していた
- Niigata.pmをやりたい
- Perlをメインで使っている会社内
- めっちゃ少ない。学生も居ない。
- Perl = CGIと思われている
- NDS、技大LT
- Perlの宣伝をして、新潟にPerlの仲間を増やしたい
- 勉強会とかがない人は、やるといい
- 司会「Twitterで白眼鏡が公表でした」
lapis_twさん「Perl meets C++」
- Sapporo.cppのコアメンバ
- libperl++が動かない
- perlembed : C言語からPerlを呼び出す方法
- XS使用モジュールを呼ぶのは大変
- perl_parse 周りのグルーコードが必要
- xs_init
- C++11のVariadicTemplatesやBoost.MPL、Boost.Preprocessor, Boost.CallTraits などが使える
1VQ9さん「Plack::Middleware::Auth::SAML2」
- 蜘蛛の遺伝子の解析をPerlでしている
- システム全体ではRubyとPerlが半々
- SingleSignOn → SAML
- pingIdentity, oneloginなど
- Perlのモジュールがなかったので、作った
- Plack::Middleware::Auth::SAML2
- SSOにのみ対応。SLOに未対応
- デモ
Eikichi Gotohさん「仙台で1年間 PM をやってみた」
- YAPC::Asia 2010 PMディスカッションに触発された
- YAPC::Asia の出席は5回目
- 東北の人にあったことがない
- Twitterでも東北のperlの人を見てない
- Sendai.pm #1 → 7名。
- 震災で町の半分がなくなった
- デベロッパーによって、様々なサービスが立ち上がった
- こんなときこそPM → id:naoyaさんやid:typesterさんの応援
- Sendai.pm #2 → 10名。
- pm.org登録
- Perlの話ができる場
- 牛タン食べたいPerl Hackerはメンションを
- 喜久福 → 仙台でしか食べれない
- *.pmの作り方
- charsbarさんの解説がよい
- 英文が必要なのはサーバとメーリングリストどうするかだけ
- 頑張って英文で問い合わせたら、ネイティブOops!をもらえた!
akiyamaさん「なぜ、高校生がPerlを使うのか?」
- 高校生
- Perlメイン、たまにPythonとJS
- Hokkaido.pmの支援で出席している
- 小学生のとき趣味でHTMLをいじっていた
- レンタル掲示板を設置した
- 学校の先生にも教えた
- 広告が小学生に相応しくない! → 閉鎖 → 自分で作りたい
- Kent Webに出会った
- 気に入らない。自分で作りたい
- プログラミングPerlをamazonで買った(内容見ずに)
- 厚さに仰天して読なかった → Perlに数年間触れなかった
- 中学生になってyusukebeさんのサイトをみて衝撃を受けた
- 大量に画像をダウンロードしてくるスクリプト
- 楽しそう、「夢」がある
- CPANモジュールに出会った
- なんでもそろっている、ドキュメントがしっかりしている、SYNOPSISがいい
- CPANの問題 → モジュールが多すぎてモジュールを選ぶのが難しい
- CPANモジュールを読むようになった → のめり込んだ
- Hokkaido.pm を見つける
- 懇親会に参加するとみんなやさしい → モチベーションが上がる
- 空気読まずに行くことが大切
- Hokkaido.pm #5 でLT
- Twitter での反応が嬉しい
- @nekokakuさんから誘われてYAPCに来た
- 単純な理由 = 行動力がある
- なぜPerlを使うのか
- Perlに出会ってそのまま使い続けている
- PythonやRubyもあるのに?
- 理由1. 手軽さ
- Plackの登場、たくさんのWebフレームワーク、plackupするだけで動く
- 複雑なことをしなくても、先人のお陰で単純にできる
- 理由2. コミュニティ
- CPAN Authorへのあこがれ → 互いに支え合っているのがすごい
- 理由3. 書きたいから
- すべてが奇麗である必要はない。書きたくなる気持ちが大事
- Perlハッカーへの憧れ、コミュニティへ貢献したい気持ち
- Perlが好き
- 質疑応答
- Q. 小学生が買うとは非常に驚いた(らくだ本の訳者さんより*1 )
- A. お世話になってます
- Q. 今夢中になっているプログラミングは? (yusukebeさんより)
- A. ニコ動のダウンロードページ。他、あるサイトの動画のダウンロード。
sartakさん「DTrace: printf debugging for seventh-level wizards」
- 「来年日本語で話してくれるので期待!」
- DTrace
- コーンピュータが何をしているか知る
- iotopで使われている
- OS XやSolaris、Linuxで使える
- プロファイラ、デバッガ、カーネルモジュール
- XcodeのプロファイラもDTrace
- dtruss → 全システムコールの表示
- iotop, opensnoop, iosnoop
- コーディングも可能 → corpusというプログラムの例
- mod_perlのテストを失敗してた → 日本語設定していたので、「公開鍵が見つかりません」がマッチしなかった
- DTraceの言語にはifがないので注意
- Perlの5.14.1 以降で、DTraceで拾える項目が増えている
Kazuhiro Osawaさん「Perl Hackers Hub の舞台裏」
- Web+DB Press の連載周りで起こったことの話
- 伝えたいこと
- 苦労した話は皆聞きたい
- 読みたいと思うネタは読みたいと思っている
- 雑誌で記事を書く、スピーカーをする、なんて特別な人ではない
- 連載での立ち位置 → 企画を思うついて、人を見つけてやってもらう
- Twitter でWeb+DBに記事載せたい → 決まった
- 今は亡きCodeRepos → まだあります!
- 元々のコンセプト
- 機構経験がないけど面白い人を持ち上げる
- 自分が読みたい人の原稿
- Perl Hackers Hubはバトン企画
- AdventCalendarが面白かった
- JPAの代表理事によるハンドリング (金銭面でトラブるので)
- 【会場を歩き回りながらしゃべる】
- 【ここで想定内のBコースのスライドへ】
- 【執筆陣を片っ端から壇上へ呼び出してしゃべらせる。】
- @inaoさん「Yappoさんが主催者です」
- @xaicronさん「ひどいプレゼンですね」
- @dankogaiさん「昔のYAPCは宿だったし大変だった。今のYAPCは余裕があって、iPhone4Sも変えた」
- @nekokakさん「いい経験をした。発売されてるので見て下さい」
- 全員別会社にする予定が、次々とDeNAとなってしまった
- そろそろ後1分なのでm「まだkazeburoさんが!」
- @kazeburoさん「22日発売なのでお願いします。mixiの頃1年連載して久々だった」
- (登壇者へ拍手っ)
- 技術系の原稿書いてみたい人は?
- 特別なことではないので、参加してみて下さい
- AdventCalendarにも
Lightning Talks
kiwanamiさん「Perl, Emacs and Async」
- Rubyを書く人
- Emacsで絵を書く
- マルチプレイヤーFPSまで
- ぼくのかんがえたさいきょうのてきすとえでぃた
- バックエンドは苦手
- Perl → どこでも入っている、非同期に強い
- Perl側はAnyEvent, Emacs側はdeferred.el
- デモ動かず・・・
- セッション中にデバグするのはよくあること
- 復旧
- echo、足し算
- SQLの実行
深町英太郎さん「Perl → Common Lisp → Perl」
- clackup を作った
- Perlは駱駝、Common Lisp はカオス
- マクロによってコンパイル時に変換
- 例えば、Plack::Builder はマクロで書くのが自然
- PerlはCommon Lispに比べると十分小さい
- 困ったこと
- コアで入っていないと、積極的に使わない
- Modern Perl → "最新のModern Perl"
- おうのが大変
- 時間があるので京都の話
- 住みやすい
- (ゴーン、時間切れ)
株式会社ガイアックスさん「Sponcered Session」
- 福岡のお国自慢の話
- 日本の西海岸
- 「祭」
- 電車が混んでない → Perl Hackerはラッシュを避けるから関係ない
- 家賃が安い
- 以外と都会
- 車で30分行けば海も山も
- 世界で住みやすい都市14位
- Fukuoka.pmは開催数が多い
- エンジニアにとって最高の町
- 現在は東京だけど、福岡に開発拠点を作りたい
- 立ち上げてくれる人募集
azuma kuniyukiさん「bounceHammerその後、導入、これから」
- bounceHammerとは
- Perlで書かれている
- 戻ってくるメールの解析のみ行うツール
- 去年のYAPCで発表する予定だった
- ケーブルを忘れた
- 猫神様に救っていただいた
- 今年はJPA会長のPCを借りた
- SMTPのSはSimpletonのS
- ケーススタディ : @type。40万通/日。「私の年収低すぎ」で有名
- 来月、新バージョンをリリース
- (ここでマイク交換)
- 将来 : Coro使ったりPlack対応したり
- 続きは大阪で話します。関西オープンソース2011
株式会社ライブドアさん「ロケタッチ」
- 半分以上の人がYAPC::Asia 2011へタッチしているようだ
- タッチするとシールがもらえる
- ロケタッチ
- Perlで書かれたアプリ
- チェックインができるアプリ
- カジュアルに使えるライフログツール
- ロケタッチAPI
- ロケタッチ Developers
- OAuth2で認証
- 基本機能をほぼ網羅
- サンプルコードも公開予定
- 大カテゴリ、小カテゴリによる分類
- API Explorer を使って、色々ブラウザから試せる
- わからないことはfacebookで質問
- MASHUP AWARDSにもAPIを提供している
Yappoさん「folkatdevs」
- 昨日のIkachanの詳しい人ははてなの人に聞いて下さい
- 開発環境の整え方
- IRCに片っ端から入って情報収集
- gyazoサーバはあったけど、専用Macクライアントがない
- Win版を作った
- ikachanをベースに通知ツールの整備
- ちょっとしたツールで、大きな改善
- 非エンジニア向けの改修など
- 小さなツールを作る
Naoki Tomitaさん「This session is funny modules」
- CPAN毎日チェックしている人は暇な人
- Tomitaさんは毎日見ている
- akefile → -Makefile=PL できるように
- AAAAAAAAA
- クロアチア語として認識される
- rate5がついている
- Moose → Mouse → Moo → Mo → M
- 何もしてない
- Sakai::Nakamura → SakaiのNakamuraバージョン
- Devel::Comments
- 熊 全熊に捧ぐ
tokuhiromさん「File::Zglob」
- lib/**/*.pm
- File::Find がめんどくさい
- File::Find::Rule perldoc みないと書けない
- File::Zglob
- zglob('lib/**/*.pm') と書ける
- 時間があるのでmore 20 modules
- FCGI::Client
- php-fcgiをPlackの上で動かせる
- DBIx::Inspector → DBIのものより使いやすい
- Daiku → Rake for Perl
- App::watcher → アップデートされたらなんか実行する
- autobox::Encode → "ほげ"->encode("cp932")
- cpan-outdated → とにかく新しいモジュールを使う。cpanmに渡せる
- Cache::KyotoTycoon → クライアント
- Furl → 去年のLTのせいか物。モバゲーで使われている。
- ・・・(ゴーン、時間切れ)
ミクシィさん「たんぽぽチームリーダー」
- 静的解析
- コードレビュー自動化、ソフトウェアの検査
- 技術的夫妻の防止
- 計測できない者は改善できない
- 分岐、ループなど関数をグラフ構造として捉えて、その複雑さを測定
- 差分が極端に多いモジュールを調べる → 王様モジュール
- より多くと依存されているコンポーネント
- inspect-package → 解析を行う
- 働きたい人が居たら、話しかけて下さい
Kenichi Ishigakiさん「Top Ten 2011」
- cpants.perl.org → いろいろあってとまってる
- cpants.charsbar.orgをたてた
- DBIC のwarningsが
- アンオフィシャルな記録で
- 全日本最強CPANAuthor選手権2011
- 10位 KAZEBURO さん
- 9位 LUSHE さん
- 8位 Takeshi Miki さん
- 7位 TYPESTER さん
- 6位 CHIBA さん
- 5位 TOMITA さん
- 4位 SATOH さん
- 3位 MORIYA さん
- 2位 BAYASHI さん
- 1位 XAICRON さん
- acme.cpanauthors.org → 様々な角度で分析
- 日本が多い
- モジュール率だとイギリス
- 1年間で40個以上モジュール更新されている方もいる
kamipoさん「MySQLでMessagePackの中身を検索」
- msgpackはjsonよりちょっと速い
- 空間効率も良い
- 人間が読めない
- MySQLに突っ込むと検索しにくい
- MySQL上でのjsonの検索はkazuhoさんが作った
- messagePack用のmsgpack_getを作った → デモ
YUSUKEBEさん「ぼくのかんがえたさいきょうのえろさいとの舞台裏」
- 一時はてブのトップに乗ったエロサイト
- ver1 → 12万PV
- 負荷軽減 → staticファイルをAppserverでサーブしていた
- Front-endへ
- キャッシュ
- ver2 → UI刷新、埋め込み再生、関連動画表示
- 複数サイトに対応
- 関連辞書をモジュール化 → Acme::Porn::JP
- 15PV/1user
- ver3 → Mojolicious + DBIx::Skinny
- とにかくキャッシュする構成 → 3倍速くなった
- 20PV/1user
TAKESAKOさん「Perlで無理ゲー攻略2」
- Acme::MineChan
- マインスイーパーを自動で解く
- デモ→高速でマインスイーパーが解かれた!
makamakaさんによる割込
カードゲーム6セットの抽選!
Hideo Kimura「Managing A Band Of Hackers」
- POSIX timeで計算できる
- ISP → 独立 → Server hosting → DeNA
- マネージャーとして、将来の姿のお話
- マネージャーが必要なのは?
- 規模の限界がある → 集団でWEBサービスを作るのはすごいこと
- 集団の場合は、指揮者が必要
- 1+1を2より大きくする (Aristotleの言葉より)
- Perlは歴史が長いので、マネージャーをやっている人は増えている
- マネージャーの仕事 → プロジェクトマネージメント、人事、その他
- プロダクトマネージメント → ライフサイクルの維持
- 期間やリソースを確認する
- 進捗を管理
- システムを健全に動かす
- タスクを見積もる必要がある
- 人事
- 面接、評価 → エンジニアの能力を見抜く必要がある。
- その他 ≒ 事務
- 稟議などはしんどい。最近ヘルプチームはできて楽になった
- 会議 → 必要。メールや電話会議では話が伝わりにくい。ホワイトボードを前にすると数分で終わる
- 無駄な会議はある
- プロジェクトマネージメントや人事には、エンジニアの経験が必要
- 始めは1人、今のチームは20人
- 6人CPANAuthor → CPAN Author率が一番高い
- DeNAでYAPCに登壇した9人中、7人がこのチームのメンバー
- ハッカーのマネージャーは、少し特殊
- 一人だと寂しくて死んでしまう → 声を上げても1人だと声が弱い
- 飽きっぽい。運用を誰かに押し付ける → 餌を与え続ける「変えていいよ」
- 優先度<興味 → さらにレベルが高いと、興味があるものをやりたいがために今のことを早く終わらせるので、大丈夫
- 朝遅く夜遅い → 相談したいときにいつ来るかわからない
- KY → 仕事には影響しないから、まあいい
- どうマネージメントするか
- 「任せる」 → 10人以上のチームになったところで、コードを書くのをやめた
- サービスの作成に専念できる
- 人が成長する
- 任せると丸投げは違う。失敗をリカバリするプランまで見越しておく
- 悪いニュースは、先に
- TMTOWTDI → 多様性を許容する
- 「Being Geek」O REILLY' → マネージャーになる上でいい本
- マネージャーは優秀なエンジニアがなるべき
- 選択肢として、マネージャーを考えて欲しい
- マネージャーが少ない会社は少ない
- I ♡ PERL
- エンジニアとして成長できる
- マネージャーとなれば人脈と鳴る
- 若い人には、積極的にコミュニティに参加して欲しい
- (テキーラで〆)
牧さん「Closing」
- 結果発表!
- 3位 徳丸 浩さん「Webアプリでパスワード保護はどこまでやればいいか」
- (未カウント)闇のEmail伝説、Carton、Perl 5.16 and beyond
- 2位 TAKESAKOさん「Perlで無理ゲーム攻略」
- 1位 FUJIWARA Shunichiroさん「Perlで構築された中規模サイトのDC引っ越し記録」
- 抽選 → 1369
- 記録破りのYAPC
- 30社 (前は20社最高)
- スタッフ42人 (前は30人以下)
- トーク71 (前は40~50)
- 個人スポンサー91名
- 672(去年は518)
- 今年のテーマは進化
- よかった偶然
- スペシャルゲストが揃った
- 941さん
- スタッフ
- 来年はどうする? → 来年はどうなるのか不明
- やってみたい人は連絡を
- ブログを書くまでがYAPCです!
- See you next time!
[レポート][perl][perl+web][yapcasia]今日はYAPC::Asia Tokyo 2011の1日目です
10月 14th
YAPC::Asiaの季節がやってまいりました。昨日は寝込んでいましたが、今日は朝から出席します。場所は東京工業大学大岡山キャンパスです。
なお、今年もgihyo.jpさんの特集のレポーターをやってます。会場の熱気を伝えられるよう、頑張ります。
なお、機材トラブルの影響で、開始時間は10:40となる見込みです。
(追記: なんか今日は英語のセッションばっか聞いてたので、メモの内容はあんま正確じゃないです。もしも内容をあてにしている方がいらしたら、ごめんなさい!)
941さん「Opening」
- 会場の照明がLED電球になった!
- プロジェクタ12万で手配したけど無駄になった→機材トラブルで使うことになった
- 新たな試み
- 遠方からの参加者支援 → SKYARC Systemさんに拍手
- 個人スポンサー → 90名
- スイーツエリア → 交流の場
- Jesse Vincent さんの旅費は、個人スポンサーでまかなわれている
- 例年の1.5倍のトーク応募数 → 濃密なトーク満載
- スポンサーの方は「talk to me!」と書かれたシールを貼っている → 人事権とかある人なので話しかけてね
- Sweets Areaのコーヒーはエクセルシオールのコーヒー
- 投票は → 2票/日。商品は椅子。
- タグは#yapcasia
- 会場が1日目と2日目で変更するので注意
- 懇親会無料! mixiさんとDeNAさん
Jesse Vincentさん「Perl 5.16 and beyond」
- Perl5のPumpking
- Pumpkingとは?
- 決断をする人
- 仕事を依頼する人
- 文書を書く人
- メンター
- Perlを実際に作るのは、他の皆さん。"You make Perl"
- PerlのRule
- 1: Larry が全て正しい
- 2: Larry が考えを変えても
- Larryだけではない
- 1. Perlはいつでも正しい
- 2. Perl が考えを変えても・・・?
- Perl5の今後は?
- 正規表現はよりcrazyになった
- スマートマッチはサイコマッチと呼ぶべき
- 以前のPerl5は、ビジョンはあってもリリースできなかった
- 今の最新版は5.14.2
- リリースの準備は昔は3週間かかったが、今は1日以下
- リリースエンジニアがいる(新しいコミッタが担当)
- リリースが簡単になったことで、ビジョンを話せるようになった
- 既存のソフトウェアはなるべく動くようにすべき
- しかし、成長をとめてはいけない
- 成長過程では誤ることもある
- 肥大化したランタイムを小さくしたい
- Perl5はPerl5で書けるようになるべき
- use v5.14 → 「5.14.0 より新しいPerlならなんでもいいです」
- use v5.16 → 「5.16 のように動いて下さい」
- 5.16より新しい機能は動かないようにする
- 機能の廃止のサイクル
- 5.16.0 で警告が出たら、5.18.0で除かれる → 1年単位
- 短すぎる。
- モジュールについても同じ
- コアにしか依存しないモジュールを書いている人が困る
- Perlは多きい言語 → 管理が大変
- 言語習得のコストも大きい
- Perlを小さくするには?
- CPANのコミュニティーはすごい
- 言語レベルで提供する必要がないものがある
- Socket, Unix user/group, network, format, smartmatch など
- Perl 5.18, Perl 5.20 でも、5.16のコードは壊れないようにする
- 新機能については慎重になる
- 内部的、意味論的におかしい部分を正す
- use v5.12 をすると、use strict になる → 今後はuse warningsも
- 1,2引数のopen はなくす
- 「'」というパッケージ区切りもなくす
- utf8のデフォルトか、オブジェクトシステムの導入
- Perlを単純なものにする
- ユーザにとって嬉しい
- 実装者にとって嬉しい
- Perlはどこでも動く
- ハード、OSだけでなく、VM、ブラウザ、Phone
- 仕様がないので、他のプラットフォームで作れない
- Perl5 を解釈できるのはPerlだけ
- Perl5 の再実装ができるようにしておく必要がある
- 「個人スポンサーの皆さんに感謝します」
- 言語の名前はPerl5で、Perl6は妹
- Perl5を別の名前にしたかったら、テストケースが通る提案を送ってね!
Tatsuhiko Miyagawaさん「Carton: CPAN dependencies manager」
- Managing CPAN Dependencies
- ケーススタディ : CPANアプリを使ったWEBアプリを作る
- 開発して動いた! → デプロイする(エラーが出るので、CPANモジュールは手でいれる)--数週間後、WEBサーバを追加
- フレームワークのバージョンが変わっていて動かない
- Backpanから落とさなければならない。他の依存も合わないかも
- 問題点
- 依存するモジュールが明記されてない
- Perlのバージョンも違うかも
- 解決方法 → MyCPAN, DPAN, CPAN::Mini::Inject, OrePAN, Shipwright
- 気に入らなかったので自分で書いた
- Ruby の Bundler にインスパイアを受けたもの
- ローカルのPerlライブラリ環境を使う
- 安全、高速
- 依存ツリーの分析
- 全モジュールのバージョンを固定できる → 簡単に再配備できる
- 1つのjsonファイルに登録 → バージョン管理システムと相性がよい
- デモ
- Dancerでアプリを作る
- git initしておく
- carton install → local という名前のディレクトリへインストールされる
- carton.lock へ情報を記録
- carton list → モジュールの一覧を表示
- carton tree → モジュールの依存を表示
- carton exec perl ... → local のライブラリのみでperlを実行する
- carton check → Makefile.PL の記述を調べてくれる
- carton install --deployment → デプロイ先で構成を復元する
- 注意: まだ1.0
- エッヂケースでCarton側だけで解決できない問題がある
- 途中のモジュールだけのアップロードがまだ
- ロックファイルの仕様も変える予定
- 質疑応答
- Q. CPANから消えてたらどうするの?
- A. BackPAN を見ている。tarボールを保存するようにもしたい
Naoya Itoさん「Perlプログラマのためのスマートフォン開発ガイド」
- 最近facebookとスマートフォンサイトとスマートフォンアプリの構造が近づいている
- WebViewを使っているため
- HTML5をネイティブで補う or ネイティブをWEB技術で補う
- PhoneGap
- HTML + JS でアプリを作る
- UIKit の制御はキックできない
- UIWebViewは遅いので注意が必要
- TitaniumMobile
- CoffeeScript や CommonJS を使える
- JSでネイティブアプリを書く
- ネイティブの速度にはかなわない
- SL4A
- use Android
- JavaアプリのAPIとJSON-RPCで通信するもの
- おもちゃ
- まとめ:Perlでクライアントサイドは、さすがにきつい
- Perl VS Node.js
- サーバもクライアントサイドもJSという流れは止められない
- Node.js → シングルプロセスでイベントドリブン
- Perlでできないことをやるわけではない
- 手軽
- search.npmjs.org
- require 'underscore'
- WAF → Express
- テスト → vows
- 他, xml2js, aws-lib
- Socket.IO → WebSocket-like の API を提供する
- pocketio → Plackのアプリ
- Perlの莫大な資産を生かしつつ、JSと共存させたい
Marc Lehmannさん「AnyEvent, Coro, IO::AIO」
- アニメのダウンロードサイト
- Apache, boa, thttpd を試したが、満足できなかった
- myhttpd を作った
- Event, Coro, IO::AIO, AnyEvent + EV
- readaheadがボトルネック
- なぜCoroが必要か
- Inversion of Control のため (ネストが深くなるのを防ぐ)
- rouse_cb と rouse_wait
- Coro::Channel によるスレッドプール
- Coro::Debug によるデバグ
- 「Coro はPerlの唯一のスレッド」
- ithreadはオーバーヘッドが大きく、スケールしない
- スレッドは1CPUのために設計されている
- 自動的に同期がとられるし、スケールする
- スクリプト言語でのスレッドとは?
- 資源全てを共有するということは、資源全てにロックが必要だということ
- この問題は解決されていない。RubyもPythonも並列ではない
- IO::AIO → POSIX のラッパー。現在はさらに複雑なものも実装している
- Coro::AIO → IO::AIをCoroで使えるようにする
- AE → タイピング量を減らした
- AE_DEBUG_WRAP、AE_DEBUG_SHELL によるデバッグ
Kang-min Liuさん「perlbrew」
- perlをアップグレードすると@INCはドンドン長くなる
- 後方互換があるので、たいていはアップグレードしても動く
- XSはコンパイルが必要
- cpanでアップグレードすると最新のバージョンになる
- エラーはruntimeに起きる
- Perlを先にupdateする必要があり、トラブっても戻すのは難しい
- perlbrew
- Rubyのrvmみたいなの
- perlbrew install, use, switch, off
- perlbrew lib → CPANモジュールだけが違うものが作れる
- bin, site_lib, local::lib が導入される。
- @INCは各perlで独立する
- メリット
- 古いバージョンのモジュールを試せる
- 新しいバージョンのPerlを試せる
- モジュールを様々なバージョンのperlでテストできる
- perlのコンパイルオプションを変えてテストできる
- 今後の展望
- External perlへのuse/switchをやめる
- コミュニティーを発展させる
- シンプルにする
Ricardo Signesさん「Perl 5.14 For Pragmatists」
- 5.10はEndOfLife → セキュリティfixの保証は3年
- 5.14 は後方互換。新しい振る舞いが追加されている。
- 一部はfeature.pmで提供されるが、5.14ではない
- 5.12でDeprecatedとなっていたモジュールは、削除された → CPANから入れてね
- Class::ISA、Pod::Plainer、Switch
- Deprecatedとなるもの
- Devel::DProf、bigrat.pl, ftp.pl, Perl4CoreLibsなど
- s///r → 置換結果をreturnする
- /l → ローカルルールでのマッチ、/u → Unicodeルールでのマッチ、/a → Unicode ルールなんだけどASCIIのみ、/aa → さらにnon-asciiにマッチしない、/d → デフォルトルール
- use re '/aa'
- 「もっともっとUTF-8のことを学ぼう」
- PerlはUnicodeをとてもよく扱えている
- eachがarray-refに使える → 配列にeachは使わないこと
- package ブロック
- IO::Fileをuseしなくてよくなった
- $@の評価順が変わった
- IPv6サポート
Marc Lehmannさん「App::staticperl」
- staticperl → モジュールを1つのバイナリに詰める
- staticperl instcpan EV
- staticperl mkperl -MEV -MAnyEvent → バイナリができる
- --usepacklists で依存モジュールも含まれる
- バイナリ1つを配るだけで動くので配布が楽
- mkapp にて、スクリプトをひとつのバイナリにできる
- CDブートでperlを走らせることもできる
- need_perl() → perlが初期化されてなければ初期化をして、XSを呼べる状態にする
- 今のとこWindowsでは動かない → 不可能ではないはず
- PPIはホワイトスペースの削除のために入っている
- XSを静的リンクするにはPerlのバイナリを作り直す必要がある → 1回ずつ作り直すのをコツコツ続ける
- 色々パッチをあてて作り直す
Lightning Talks
makamakaさん「Perl同人活動」
- 「Acme大全2011」 → 2011/7/7 時点の全てのAcmeモジュール
- 用語集が詳しくなった
- 逆引き時点もついた
- さあ、どうでしょう ≒ 3rd edition
- 売れないと印刷代が・・・
- 「ぱあるもじゅるの失笑目録(読んでクスッ)」
- ボクと握メ
- 「Perl Mongerなりきりカードゲーム」
- 「ぱあるPlackの超散弾銃(ショットガン)」
tokuhiromさん「Amon2 3.0」
- Amon2 とは
- WEBアプリケーションフレームワーク
- ぼくのかんがえたさいきょうのふれーむわーく
- flavorが大きく変わった
- ブートストラップの時間を短くする
- 仕事にはLargeFlavorがちょうどよい
- MobileJPフレーバーで日本のモバイル対応
- ::Auth
- SNSに対応した認証 Facebook, Twitter, github, ロケタッチ
- すごくイイカンジになっているので使って下さい!
hakobeさん「Enhance Anime wathing with programing」
- アニメをTwitterで実況したい
- しょぼいカレンダー
- アニメの完璧な情報
- 豊富なAPI
- リクエストとパースの回数が多くめんどうくさい
- WebService::SyoboiCalendar
- syoboirepl
- アニメを見ている人は、ターミナルを開きながら見ているはず
- デモ:現在放送中のアニメ。キャストまで見れる
- 関東と関西の最速アニメの比較
株式会社カヤックさん
- 元PHP、Perlに入門、今JS
- 「クイズ好きですか?」「平日にYAPCに来るくらいですから」
- ランキングがあると燃える
- ISCON優勝者もいる
- Perlのクイズを作ってランキングをすると燃えますよね
- 「Perl道場」を先ほどリリース
- perldojo.org
- サイトから問題に挑戦できる
- github経由で問題を出題できる
Yappoさん「App::Ikachan」
- 優秀なエンジニアならIRCを使っているはず
- ikachan
- AnyEventベースのIRCボットフレームワーク
- ikachan -S サーバ名
- WEB API経由で、IRCの操作ができる
- 明日のLTに続く(ゴーン、時間切れ)
Kenichi Ishigakiさん「Let's play games」
- Games::Dice
- Games::Sokoban (Lehmannさん)
- パーサ。ゲームはできない
- 倉庫番ゲームを作った
- Games::Sokoban を使い、WEB上に落ちているデータを利用できる
Eikichi Gotohさん「仙台で1年間PMをやってみた」
- Sendai.pm が登録されました
- 昨年のPMグループディスカッションに触発された
- Sendai.pm #1 → 7名
- id:naoyaさん公認、id:typesterさん公認、@sugyanさんおすすめ
- Sendai.pm #2 → 10名
- コンセプト「仙台でperlの話を思いっきりできる場所」
SKYARC Systemsさん「北海道のIT勉強会事情の紹介」
- 北海道に転職しても大丈夫だよという話
- スカイアークシステム
- MTでの開発。帯広、東京、札幌に拠点。
- 遠方の参加支援
- スイーツエリアにうまい棒を設置
- ゴールドスポンサー
- 北海道でもIT勉強会はある
- 土曜日が多い
- 言語はほとんどある
- ただし、札幌開催がほとんど
- 北海道でミニYAPCを開催したい
issmさん「ようやく始まりましたNagoya.pm」
- Nagoya.pm #1
- 県外からも参加者がいた
- Perlを使っている会社が見当たらない
- 名古屋はミソだけではないので、Nagoya.pm #2には安心してお越し下さい
Mayumi Takahashiさん「Perlが決めるwebの未来」
- Movable Typeは10/8で10歳
- スポンサー企業ですが、個人で来てます(社長にも言ってない)
- Perlは先週から始めた
- iPhone4S にはジョブズ氏の魂が宿っている(by 虚構新聞)
- Perlで実装したiSteaveのデモ
- 音声での質問に答える
- Twitterとの連携機能をライブコーディング
- コードはgithubに上がっている(YAPCが終わり次第削除予定)
karupaneruraさん「アクセサについての考察」
- アクセサの利点
- typoしたらわかる、readonlyにできる、型制約できる
- アクセサの問題
- 速度
- 直接キーを触られたら意味がない
- Class::VirtualAccessor
- キーへのアクセス時に、制約をかける
- githubで解説中
- オチは(ゴーン、時間切れ)
turuginaさん「日常業務にperlを使おう」
- 日常業務をperlを使ってなんとかしたい
- 勤怠管理をPerlでなんとかしたい
- lwp-request で、勤怠管理システムへGETリクエストを投げる
- さらにPOSTでリクエストを投げる
- Basic認証を超える
- WWW::Mechanize でフォームからログイン
- FlashとかをWin32::GuiTestで
株式会社 リクルートさん「Mashup Awards 7」
- 今年で7回目。日本最大級の開発コンテスト
- 協賛63社
- 賞は80以上 → 1人7作品応募すれば、多分受賞できる
- MUP48 のメンバー募集(現在30名)
- 現在90作品。男性比率99.7%。Perlは6人。
- 締め切り直前の36時間耐久ハッカソンもやるので応募してね!
岡部恵一さん「登録題5314384号商標 厳密というより分かりやすく解説」
- dankogaiさんが召還されたのが始まり
- TPFに連絡した
- MatzさんがRubyは異議申し立てすることを表明
- Perlは商標がとれていないし、とれないと思っていたが取れた人が出たってことが判明
- 異議申し立ての話は、公共の場で話すことはできなかったので、今日が初公開
- (ゴーン、時間切れ)「無視!」
- JPAはプロジェクト、コミュニティ、ビジネスのサポートをするところ。今後も邪魔をする勢力は実力で排除する
keroyonn_さん「Perlで次世代ゲーム開発」
- 最近、スマフォのゲーム開発がすごいことになっている
- Games::ByLike::EightBeat
- CUIゲーム、ファミコンに立ち戻る
- デモ
- Putty から起動
- 「Pelerdius」
- セガサターンのコントローラーで操作
- (ゴーン、時間切れ)
Kosuke Arisawaさん「ぼくたちのPerl Module管理」
- RPMで管理していた
- いろんなプロダクトがあるのでバージョンを挙げにくい
- perlbrew + darkpan + Orepan
- pfperl というラッパーを作っている
- モジュールの管理や、スクリプトの起動など
nekokakさん「not ORM - for @kamipo」
- DBIx::Skinny
- 北海道の人には公表
- @kamipoさんには会う度にDISられる
- row object、relation manager は不要
- DBIx::TransactionManager, DBIx::Handler, SQL::Object
- DBIには便利なAPIが多い
- SQL::Object → プレースフォルダやinの管理
- 普通の環境ではDBIx::SkinnyやTengが有用なので、ケースバイケースで
tagomorisさん「ISUCONやった話 by livedoor」
- ISUCONとは?
- Webアプリケーションの高速化コンテスト。基本的に何でもあり
- 10時間で満員御礼
- Perl、Ruby、Node.js の3種を用意した
- しかし、全チームPerlを利用
- 優勝はfujiwara組。10 req/sec → 1,500 req/sec
- コードやデータはlivedoor のtechblogにある
- ISUCON2は・・・?
- 準備が大変なので・・・
- (会場から拍手)