ビール好きなあなたへ

ふと、飲んだビールの量をカウントするだけのサービスが欲しいと思ったのでGoogleApp Engineを使ってibeerというのを作ってみました。

http://ibeer.appspot.com/

とりあえず作ってみましたが、これからどうしようとかいうのは特に決めていません。思いつきベースで飽きるまでテキトーにやってく予定です。こんな機能あったらいいよねー、とかも(一応)募集してみます。

あと今はまったくスタイルシートを適用していない素のHTMLなので、カッコいいデザインとかロゴとかも絶賛募集中です!
Twitterを参考にCSS書きました。

ちなみになぜビールの量をカウントしたいかというと、生活費の中で食費の占める割合が高く、たぶん食費の中ではビール代が占める割合が最も高いので、そのビールの量を数えてみたい!という単なる思いつき(好奇心)です。だって居酒屋で生大(800ml)を5回頼んだらそれだけで4リットルですよ!平日に500mlの缶ビールを1本飲んで休日に2本飲んだらそれだけで4.5リットルですよ!合わせて週8.5リットル、月34リットル、年408リットル!

そんなわけで、全国のビール好きなみなさんもきっと同じ気持ちではないかと思いますのでここにお知らせ致します。

どうぞご利用ください。

psの操作に慣れる

Linuxなどで実行中のプロセスを表示させるコマンドにpsというのがあります。
これまでこのコマンドをかなり適当に使ってきていて、オプションとかよくわかってなかったのでmanをちゃんと読んでいろいろやってみました。

psコマンドはprocpsというパッケージに含まれるコマンドです。
procpsには他にtop, vmstat, w, kill, free, slabtop, skillといったコマンドが含まれているようです。

ここではFedora Core 6で以下のバージョンを使っています。

$ ps --version
procps version 3.2.7

オプションの指定方法

オプションの指定方法にいくつかの方法があるので把握しておきます。

  1. UNIX オプション。まとめることが可能で、前にはダッシュを置かなければならない。
  2. BSD オプション。まとめることが可能で、ダッシュを使ってはならない。
  3. GNU ロングオプション。前に二つのダッシュを置く。

デフォルトの動作

まずはデフォルトの動作を知っておきます。

$ ps
  PID TTY          TIME CMD
 1731 pts/2    00:00:00 ps
24760 pts/2    00:00:00 zsh

デフォルトでは、ps はカレントユーザーと同じ実効 (effective) ユーザー ID (EUID) を持ち、かつ呼び出した端末と同じ端末に関連づけられている全てのプロセスを選択する。この場合、プロセス ID (PID)・プロセスに関連づけられている端末 (TTY)・ [dd-]hh:mm:ss という形式の累積 CPU 時間 (TIME)・実行ファイル名 (CMD) が表示される。出力はデフォルトではソートされない。

実効ユーザーを指定する

呼び出した端末以外の端末に関連づけられているプロセスも表示するには-uオプションで明示的に実効ユーザーを指定すればいいようです。

$ ps -u <ユーザー名>
  PID TTY          TIME CMD
  732 pts/1    00:00:00 man
  735 pts/1    00:00:00 sh
  736 pts/1    00:00:00 sh
  741 pts/1    00:00:00 less
 1719 pts/2    00:00:00 ps
 3177 ?        00:00:00 multilog
24627 ?        00:00:01 sshd
24628 pts/0    00:00:00 zsh
24742 pts/0    00:00:00 screen
24743 ?        00:00:01 screen
24744 pts/1    00:00:00 zsh
24760 pts/2    00:00:00 zsh
31318 pts/3    00:00:00 zsh
31331 pts/3    00:00:00 python
31343 pts/4    00:00:00 zsh

すべてのプロセスを表示する

-eオプションを使います。

$ ps -e

完全なフォーマット

-fオプションをつけると「完全なフォーマットでリスト」します。なにが「完全」なのかはよくわかりません。

$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
500       2237 24760  0 11:40 pts/2    00:00:00 ps -f
500      24760 24743  0 10:04 pts/2    00:00:00 /usr/local/bin/zsh

これと似たオプションに-lというのもあります。これは「長いフォーマット」です。これもよくわからないけど、「完全なフォーマット」よりたくさんのカラムが表示されます。

$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 R   500  2312 24760  0  76   0 -  1167 -      pts/2    00:00:00 ps
0 S   500 24760 24743  0  76   0 -  1917 rt_sig pts/2    00:00:00 zsh

コマンド名で選択

実効ユーザーではなくコマンド名で選択したい場合は-Cオプションを使います。たとえば実行中のApache HTTPサーバーを表示します。

$ ps -C httpd
  PID TTY          TIME CMD
 2016 ?        00:00:02 httpd
 4600 ?        00:00:19 httpd
22785 ?        00:00:00 httpd
22786 ?        00:00:56 httpd
22787 ?        00:00:31 httpd
22788 ?        00:00:37 httpd
22790 ?        00:00:41 httpd
22791 ?        00:00:32 httpd
22792 ?        00:00:33 httpd
22793 ?        00:00:32 httpd
22794 ?        00:00:38 httpd

スレッドも表示

たとえばNPTLなMySQLを使っている場合、コマンド名でmysqldを指定しても1個しか出てきません。スレッドも表示したい場合は-Lオプションを使います。

$ ps -C mysqld
  PID TTY          TIME CMD
 2613 ?        00:17:38 mysqld
$ ps -C mysqld -L
  PID   LWP TTY          TIME CMD
 2613  2613 ?        00:00:07 mysqld
 2613  2614 ?        00:00:00 mysqld
 2613  2615 ?        00:00:00 mysqld
 2613  2616 ?        00:00:00 mysqld
 2613  2617 ?        00:00:00 mysqld
 2613  2624 ?        00:00:11 mysqld
 2613  2625 ?        00:00:04 mysqld
 2613  2626 ?        00:00:02 mysqld
 2613  2627 ?        00:00:14 mysqld
 2613  2628 ?        00:00:00 mysqld

カラムの意味を知る

そろそろ各カラムが何を表しているのか知りたくなってきました。想像がつくやつもあるけど「なにこれ?」みたいのもあります。
ここではこれまでで一番長いフォーマットで表示された-lオプションで表示されるカラムについて調べます。

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
F

プロセスに関連づけられたフラグです。

プロセスフラグ
これらの値の合計は、flags 出力指定子で提供される "F" カラムに表示される。
1 fork されたが exec されていない。
4 スーパーユーザー権限を使っている。

S

プロセスの状態を1文字で表します。

プロセスの状態コード
s, stat, state 出力指定子 (ヘッダ "STAT" または "S") がプロセス状態の説明のために表示する値を以下に示す。
D 割り込み不可能なスリープ状態 (通常 IO 中)
R 実行中または実行可能状態 (実行キューにある)
S 割り込み可能なスリープ状態 (イベントの完了を待っている)
T ジョブ制御シグナルまたはトレースされているために停止中の状態
W ページング状態 (2.6.xx カーネルからは無効)
X 死んだ状態 (見えるべきではない)
Z 終了したが、親プロセスによって回収されなかった、消滅した (ゾンビ) プロセス

UID

実効ユーザーIDです。euidと同じ。

PID

プロセスID。

PPID

親プロセスID。

C

プロセッサ使用率。整数。

PRI

優先度(priotiry)だと思うけどよくわからない。

NI

nice値。19 (最も良い) から -20 (他のプロセスに対して良くない) の値を取る。

ADDR

よくわからない。

SZ

プロセスのコアイメージの物理ページサイズ。メモリ関連については後述する。

WCHAN

プロセスがスリープしているカーネル関数の名前。

TTY

制御端末。

TIME

累積したCPU時間。

CMD

文字列の引数がついたコマンド。

フォーマットの指定

表示するフォーマットは-oオプションで指定することができます。

たとえばプロセスIDとコマンド名(引数なし)だけ表示したい場合。

$ ps -o pid,comm
  PID CMD
 5417 ps
24760 zsh

-Oオプションを使うといくつかのデフォルトカラムを表示してくれます。「-o pid,format,state,tname,time,command または -opid,format,tname,time,cmd と等しい」そうです。

-fや-lで表示されないカラムはこのオプションを使って表示させましょう。

たとえばhttpdのCPU使用率やメモリ使用率を表示したいことがあります。

$ ps -C httpd -o pid,pcpu,pmem,comm
  PID %CPU %MEM COMMAND
 2016  0.0  1.8 httpd
 4600  0.1  5.7 httpd
22785  0.0  0.7 httpd
22786  0.2  5.6 httpd
22787  0.1  5.7 httpd
22788  0.1  6.2 httpd
22790  0.1  5.7 httpd
22791  0.1  5.6 httpd
22792  0.1  6.4 httpd
22793  0.1  6.0 httpd
22794  0.1  6.0 httpd

メモリ関連のカラム

メモリ関連のカラムにはいくつかあるようなので整理しておきます。

sz         SZ       プロセスのコアイメージの物理ページサイズ。これにはテキスト・データ・スタック空間が含まれる。デバイスマッピングは現在のところ除外されているが、これは変更される。 vsz と rssを参照。

rss        RSS      常駐セットの大きさ。タスクが使用しているスワップされていない物理メモリ (kB 単位)。 (別名rssiz, rsz)。

vsz        VSZ      プロセスの仮想メモリサイズ (KiB, 1024 バイト単位)。デバイスマッピンは現在のところ除外されているが、これは変更される。 (別名vsize)。

%mem       %MEM     マシンの物理メモリに対するプロセスの常駐セットサイズのパーセンテージ。 (別名 pme)。

topコマンドのRESに相当するのがここではRSSになるようです。試しに全部表示してみます。

$ ps -C httpd -o pid,pmem,sz,rss,vsz,comm
  PID %MEM    SZ   RSS    VSZ COMMAND
 2016  1.8  5136  9392  20544 httpd
 4600  5.7 10873 28408  43492 httpd
22785  0.7  4802  3588  19208 httpd
22786  5.6 10803 28220  43212 httpd
22787  5.7 11009 28860  44036 httpd
22788  6.2 11567 31120  46268 httpd
22790  5.7 10860 28672  43440 httpd
22791  5.6 10827 28244  43308 httpd
22792  6.4 11691 32076  46764 httpd
22793  6.0 11307 30100  45228 httpd
22794  6.0 11339 30180  45356 httpd

ちょっと計算してみます。

  PID %MEM    SZ   RSS    VSZ COMMAND
22794  6.0 11339 30180  45356 httpd

このマシンには512MBの物理メモリが搭載されているので、それの6%がRSSになるはずです。

>>> 512 * 0.06
30.719999999999999

おー、ほぼ正しいですね。

ちなみに、-fでも-lでもRSSは表示されませんが、-yを-lと組み合わせることでRSSが表示されるようになります。

$ ps -ly
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
R   500  9676 24760  0  77   0   756  1167 -      pts/2    00:00:00 ps
R   500 24760 24743  0  77   0  3436  1917 -      pts/2    00:00:01 zsh

psで特定プロセスのメモリサイズを知りたいときに簡単に使えそうです。

ソート

特定のカラムでソートすることもできます。

RSSの昇順で表示します。

$ ps -C httpd -o pid,pmem,sz,rss,vsz,comm --sort rss
  PID %MEM    SZ   RSS    VSZ COMMAND
22785  0.7  4802  3588  19208 httpd
 2016  1.8  5136  9392  20544 httpd
22786  5.6 10803 28220  43212 httpd
22791  5.6 10827 28244  43308 httpd
 4600  5.7 10873 28424  43492 httpd
22790  5.7 10860 28672  43440 httpd
22787  5.7 11009 28860  44036 httpd
22793  6.0 11307 30100  45228 httpd
22794  6.0 11339 30180  45356 httpd
22788  6.2 11567 31120  46268 httpd
22792  6.4 11691 32076  46764 httpd

降順にするにはマイナスをつけます。

$ ps -C httpd -o pid,pmem,sz,rss,vsz,comm --sort -rss
  PID %MEM    SZ   RSS    VSZ COMMAND
22792  6.4 11691 32076  46764 httpd
22788  6.2 11567 31120  46268 httpd
22794  6.0 11339 30180  45356 httpd
22793  6.0 11307 30100  45228 httpd
22787  5.7 11009 28860  44036 httpd
22790  5.7 10860 28672  43440 httpd
 4600  5.7 10873 28424  43492 httpd
22791  5.6 10827 28244  43308 httpd
22786  5.6 10803 28220  43212 httpd
 2016  1.8  5136  9392  20544 httpd
22785  0.7  4802  3588  19208 httpd

ソートに使えないカラムもいくつかあるようです。

プロセスツリーを表示する

fオプション(-fではない!)を使うとプロセスをツリー上に表示できるようです。

でもプロセスツリーを表示するだけならpstreeコマンドを使った方がいいかもしれません。

ヘッダ行を繰り返す

-eオプションですべてのプロセスを表示したりするとリストが長くなり、どれがどのカラムかわからなくなります。
そんなときは--headersオプションを使ってヘッダ行が繰り返し表示されるようにするといいかもしれません。

$ ps -ef --headers

いろんなuid

uidにもいろいろあります。

euid
実効ユーザーID
ruid
実ユーザーID
fuid
ファイルシステムアクセスユーザーID
suid
保存ユーザーID

単にuidといった場合はeuidのことを指すようです。

ps auxとか

実はpsのことをよく知らない頃(つい数時間前まで)は、特に意味も知らず以下のように打ってました。

$ ps auxwww

これどういう意味?

manにずばり書いてありました。

"ps -aux" は "ps aux" とは異なることに注意すること。 POSIXUNIX 標準では、"ps -aux" は "x" という名前のユーザーが所有する全てのプロセスを表示し、かつ -a オプションで選択される全てのプロセスを表示する。 "x" という名前のユーザーが存在しない場合、この ps は代わりに "ps aux" というコマンドとして解釈され、警告を表示する。この動作は昔のスクリプトと慣習からの移行の助けになることを意図している。これは脆くて変更される可能性があるので、これに依存すべきではない。

wオプションは出力幅を拡げるために使います。2つ指定すると幅の制限がなくなります。

-aオプションは以下の意味です。

-a セッションリーダ (getsid(2) を参照) と端末を持たないプロセスを除く、全てのプロセスを表示する。

スッキリ。

まとめ

man重要。

これからはpsコマンドをもっと駆使していきたいと思います。

また、Mac OS XのpsはBSD系のコマンドなのでここで調べたものとはだいぶ違うようです。

perlは記号だらけでよくわからんという件

最近「Perlは記号だらけでよくわからん」という話をよく聞くなーと思っていたのでちょっと考えてみた。

まずはよく見かけそうな記号変数(正式な呼称なんだっけ?)を思いつくかぎり列挙してみる。

  • $_
  • $!
  • $@
  • $?
  • @_
  • <>(これは変数じゃないか)

このくらいかな。

で、「記号だからググれない」ということも聞きますが、これは直接Perlのドキュメント(perldoc)を参照するのが手っ取り早いです。
これはperlvarというドキュメントに載ってるので「perldoc perlvar」でググります。そうすると

とかが出てくるので、あとはブラウザ上で検索すればおkではないかと思います。
また、ブラウザよりもシェルが身近にある人はシェル上で「perldoc perlvar」すれば問題なし。検索はlessとかと同様にスラッシュ(/)で後方検索、はてな(?)で前方検索できます。その場合は$とかはエスケープしないと検索できないので注意。例えば$^Cという変数を検索する場合はスラッシュを打ってから「\$\^C」でおkです。

あと、「perlvar」という単語を忘れちゃってググレナインダヨ!という場合もあると思いますが、そういう場合はhttp://perldoc.perl.org/から(perldocでググれば出てきます)、左サイドバーのSpecial variablesをクリックしましょう。日本語で読みたい人はこの時点でperlvarという単語に出会えますので先ほど紹介した通りググったりしたらいいのではないかと思います。これでperldocという単語を覚えておけばよくなりました。

Perlネットワークプログラミング

Perlネットワークプログラミングという本をちょうど1年前くらいに買ったんだけど、それをようやくやり終えました。
全部は読んでないんだけど、興味のあるところだけ。買ってすぐにパート1の基礎をやって放置していたんだけど、最近多重化とかに興味がわいてきていたのでパート3のTCPクライアント/サーバーシステムの開発を読んだりした。他のところはパラパラと流し読みしただけ。興味ないところ読んでも眠くなるだけなので、そのうち必要になったら読み返せばいいかなと思ってる。

Perlでネットワークプログラミングを学ぶのにこの本は超オススメです。値段が高いのが難点なのと、ちょっと古い本なのでそれを念頭に読む必要がある(Perlは5.6だし!)。select/pollは載ってるけどepollは載ってないから自分で調べないといけないし、Danga::Socketも使い方わかるとおもしろいからやっといた方がいいし、非同期I/O(AIO)も載ってないけど学びたいし。

とか、そんな感じの本です。

Perlネットワークプログラミング―ソケットの使い方からクライアント/サーバーシステムの開発まで

Perlネットワークプログラミング―ソケットの使い方からクライアント/サーバーシステムの開発まで

YAPC::Asia 2008で見たいセッション

YAPC::Asia 2008は気になるセッションがたくさんあって困っていたんだけど、実際にはセッションを見ることはほとんどできなかったので今チェックしています。実はスライドはほとんどWeb上にあるし、動画もアップされるし、内容をチェックするだけなら会場に行かなくてもそれほど不自由はしないんですね。

それでも会場に行くメリットは、「実感できる」ということだと思いました。会場である(今回は)東工大の環境の素晴らしさとか、どれだけたくさんの人が参加しているのかとか、みんなとても楽しそうにしていることとか、日本語だけじゃなくて英語が普通に飛び交ってたりとか。さらにスタッフとして参加して、イベントを作り上げるためにどれだけの人ががんばっているかとか、最近は当たり前のように見ているストリーミング中継が実際にみんなの努力によって行われていることとか、そういうことを「実感できて」よかった。すごく楽しかったです!

で、以下が気になるセッションとチェックした結果。まだ全部チェックしきれてない・・ので随時更新する予定。

Tatsuhiko Miyagawa - Welcome to YAPC::Asia 2008

Kang-min Liu (gugod) - Continuous Testing

http://blog.gugod.org/2008/05/test-continuous-tool-that-makes-module.html

Test::Continuous

ファイルの変更を監視して必要なテストだけ実行できる。
継承関係も追って監視できる?

package Bar;
use base 'Foo';
1;

でFoo.pmが変更されたときBar.pmをテストするbar.tを走らせられる?

Tokuhiro Matsuno (tokuhirom) - about Perl5.10

http://svn.coderepos.org/share/docs/tokuhirom/20080515-yapc-perl510/

  • say
  • dor(//)
  • state
  • switch(given-when, foreach-when)
  • 正規表現のnamed capture(?)を$+{keyword}で参照?
  • stacked filetest(if -e -f -x $file)

などなど

Dan Kogai - PSL = Perl as a Second Language

http://www.dan.co.jp/~dankogai/yapcasia2008/psl.html

  • Perl does NOT have an OO built-in.

Perl5のOOは

    1. reference - データを格納できる
    2. bless - オブジェクトが何をできるか見つけられる

だけ。だからOOをやろうと思ったら

    1. データの格納方法を決めて
    2. 何ができるか見つける方法をデータに教えればよい

InsideOutとかMooseとか。

  • Perl is a context-oriented language.
    • scalar/list

Kenichi Ishigaki (charsbar) - Web is not the only one that requires frameworks

http://d.hatena.ne.jp/charsbar/20080521/1211358715

  • スクリプト用のフレームワーク
    • 欠点
      • インストールが面倒(特にお客さんに入れてもらう場合は)
      • シェルの便利機能が使いづらくなる可能性も
    • 利点
      • おなじことを何度も書かずに済む
      • more テスト
      • more POD
      • more 記述的なコマンドリスト
      • 継承、挙動の変更がしやすい
  • 何を使えばいいの?
    • App::CLI
      • since June, 2005
      • SVKやJiftyで使われてる
      • 依存モジュールはすべてPerl 5.10のコアモジュール
      • ドキュメントがほとんどない(けど簡単だよ)
      • 1コマンド1モジュール
      • mycli.pl command
      • CPAN版にはいくつかバグがあるので最新版を使いましょう(2008年5月23日現在のCPAN版は0.07)
    • App::Cmd
      • since October, 2007
      • インストールはちょっと難しくなる(コンパイラPerl 5.10のコアモジュール以外が必要)
      • マニュアル類は充実
      • 1コマンド1モジュール
    • MooseX::App::Cmd
      • since January, 2008
      • 依存モジュール多い
      • Mooseなのできれいに書ける
      • Mooseなので起動が遅い
    • その他
      • CPAN.pmみたいにェル付きのもの
      • PPMみたいにGUI付きのもの
      • Plaggerみたいなもの

Jesse Vincent - Step 3: Prophet - A peer to peer replicated property database

http://www.slideshare.net/obrajesse/prophet-a-peer-to-peer-replicated-disconnected-database

よくわかんなかった。

Chia-liang Kao (clkao) - Running Perlish Small Business with Perl

Daisuke Murase (typester) - FormValidator::Assets

http://svn.coderepos.org/share/docs/typester/formvalidator-assets/

  • 同じ入力項目はフォームが違ってもルールを1回だけ定義したい。DRY!
  • inputフィールドのnameベースのバリデーション
  • assets

Hiroshi Sakai (ziguzagu) - OpenSource TypePad Mobile

http://www.slideshare.net/ziguzagu/open-source-type-pad-mobile

  • ケータイで閲覧する部分(管理側ではなく)
  • TypeCast
  • Atom API経由で取得したデータを各携帯キャリアに最適化したHTMLに変換?
  • How to generate
    • MTOSのテンプレートエンジンを使用
    • a/imgタグのURLを変換(TypeCast経由に)
    • コンテンツ分割(対サイズ制限)
  • Filtering
    • HTMLタグ書き換え(DOCTYPE, accesskey, istyle, etc..)
    • CSSの適用
    • 文字コード変換
  • CPAN
    • HTML::Split
    • HTML::MobileFilter
  • 将来的にはTypePadに限らずAtom APIを持つサービスをモバイル対応できるようになる?

Masahiro Nagano (kazeburo) - memcached in mixi

http://alpha.mixi.co.jp/blog/?p=169

  • nagiosで監視
  • rrdtoolでグラフ化(通信量、クエリー数、使用量)
  • 特定のmemcachedにアクセス集中
  • 無限loopが起きる問題
  • 分散処理はアプリ側
    • keyのCRC値とサーバ台数の剰余
      • サーバー台数の増減があるとヒット率が大幅に下がる
    • そこでConsistent-Hashing
      • サーバー台数の増減の影響を局所化できる(詳しい仕組みはわからん)
      • Set::ConsistentHash + Cache::Memcached
      • Cache::Memcached::libmemcached
      • Cache::Memcached::Fast
  • memcached互換アプリケーション

Yuval Kogman (nothingmuch) - Moose

http://conferences.yapcasia.org/ya2008/talk/1017

  • Moose is not experimental, toy, accessor builder, source filter, black magic, perl 6 in perl5
  • Moose is a complete modern object framework for perl
  • Moose is syntac sugar for Class::MOP
  • Moose is stable & production ready
  • lazyはdefaultを遅延させる。newではなく最初に$object->staffが呼ばれたときに呼ばれる
  • 欠点
    • ロード時間
      • MooseX::Compile
    • いくつかの機能が遅い
    • hashrefじゃないクラスの拡張はトリッキー
  • 利点
    • 退屈なことを減らせる
      • 決まり文句を書かなくていい
      • 繰返しを減らせる
      • typoを減らせる
    • 短い
      • less code means fewer bugs
    • テストが少なくていい
      • Moose is well tested
      • focus on your code's purpose
    • 読みやすい
      • コードが文章みたいになってる
      • やりたいことだけを書ける。OOに仕掛けとかは書かなくて済む
    • Meta object protocol
      • PerlのOOをきれいに
      • provides introspection
      • enables powerful abstractions

Daisuke Maki - Getting Your Feet Even Wetter With XS

  • PerlC言語をつなげるためのフレームワーク
  • SV
    • 最も基本的な型
    • すべての親
    • 文字列、数値、リファレンスを格納できる
    • 任意の型のポインターを格納
    • SVの種類
  • SV以外
  • SVの中身を取得する
  • SVの中身は何?
  • Perlの代わりにXSを書かない。XSはつなぎ役だから!
  • Cの構造体をPerlとやりとりする
    • typemap
  • GCのタイミング
  • SvMAGIC

XSは1回しか書いたことがないんだけど用語とかの意味がわかんなくて苦労した。それこそSVとかSvOKとか。
てきとーなXSコードを見ながらこつこつ調べていって書いた覚えがある。
typemapとかMAGICとかは初めて聞いた。そして意味わからない><

Naoki Tomita (tomi-ru) - use Encode::JP::Mobile; - Perl標準の機能を使った絵文字の相互変換

http://www.slideshare.net/tomita/use-encodejpmobile

  • Perl標準のEncodeモジュールの方式で絵文字を含んだ文字列をencode/decodeできる
  • FormからPOSTされたデータをdecodeしてアプリ内ではUnicode(flagged utf-8)で扱い、DBにはutf-8でencodeして格納
  • DBから取り出す時にdeocdeしてアプリ内ではUnicode(flagged utf-8)で扱い、モバイル端末用にencodeして表示

これがキホン。さらに、

  • 文字列から絵文字を除去
  • PC向けに絵文字を画像で表示

といったことも可能。

Naoya Ito - Introduction to DBIx::MoCo

http://www.slideshare.net/naoya1977/introduction-to-moco/

  • Databaseクラス(接続情報)とModelクラス(スキーマ情報)
  • Ruby-like list operations
  • prefetch
  • inflate/deflate(explicit or implicit)
  • Transparent caching
  • Test fixture

tokiharu noto - Introducing "MobaSiF" (Mobile Simple Framework)

http://conferences.yapcasia.org/ya2008/talk/1014

  • MobaSiF == "Mobile Simple Framework"
  • 2003年11月から開発
  • 一部ではXSも使ってる
  • large-scale mobile servicesでの実績がある
  • Linux/Perl 5.8x/Apache/MySQL5.0.x
  • DoCoMo FOMA/au WIN/SoftBank 3GC
  • 絵文字
  • MTemplate
    • 共通テンプレートは各キャリア用にコンパイルされる(バイナリテンプレート?)
    • C言語 + XS
    • タグ
      • 変数置き換え(HTMLエスケープ、URIエスケープ、そのまま)
      • if文
      • ループ
      • キャリアスイッチ(#ifdefみたいなの)
      • インクルード
      • 定数
      • スタイル
  • dispatcher
  • benchmark
    • TT, Encode::JP::Mobile, Catalystと比較して高速
  • misc
    • DA.pm - DBハンドルの管理
    • Daemon.pm - デーモンを簡単に作るためのヘルパー
    • MLog.pm - ログの記録
    • mobamail - will be available
  • License
    • Attistic or GPLv2
  • Now available!

Emerson Mills - DBIx::Class Crash Course: Using DBIx::Class and other modules to make DB driven apps easy

Masahiro Nagano (kazeburo) - mod_perlをjob workerとして使う

http://alpha.mixi.co.jp/blog/?p=169

  • 古い設計から新しい設計へ
    • サーバーの耐障害性の強化、サーバー増設の簡単化
    • 処理速度の向上(起動時間、XML::Parser => XML::LibXML)
    • Atom 1.0対応
  • Plagger
    • 非同期のAggregator(HTTP::Async)
      • オンメモリ - 取得データが数GBだったらどうする?
      • connectは同期処理
  • mod_perlをworkerとして使う
    • 最初はメルマガ - HTMLを生成する代わりにメールを送る
    • ジョブを起動するkickerとそれを管理するmanager
    • Web Appの資産がそのまま使える(Apache、WAF)
    • スケールする
    • jobを細かく分割して並列性を上げ、障害時の影響範囲を狭める

Jonathan Rockway (jrockway) - Improving your Catalyst application

http://conferences.yapcasia.org/ya2008/talk/1036

  • Action Dispatching(Catalystを知ろう!)
  • Catalyst::Action::REST(GETとPOSTを分けるのが簡単)
  • Controllerにロジックを書くとテストできないし再利用もできない
  • Catalystに依存しないようにロジックを書けばテストができるようになる
  • Catalystからそれを使う場合はCatalyst::Model::Adaptorが使える
  • configを書く場所
    • Class
      • デフォルト値を書く
    • MyApp
      • デフォルト値を上書き
    • config file
      • Class/MyAppの設定を上書き
  • ACCEPT_CONTEXT
  • Moose
  • Base Controllerを書こう
  • DBIx::Class
    • MapMaker
    • Restricted resultsets
  • New Authentication system

おまけ

  • App::TemplateServer
    • アプリなしでテンプレートファイルをserveする
    • データをYAMLで与えることができる(っぽい)
    • テンプレートのテストに使える

Jesse Vincent - Everything but the secret sauce

http://conferences.yapcasia.org/ya2008/talk/984

  • Hiveminderを作る過程で便利なツールをいっぱい作った
  • バグを素早く検出
    • テストがたくさんあって全部実行するのに時間がかかる(30min)
      • prove -j 5 --fork(テストを並列実行、22min)
      • TAP::Harness::Remoteを使ってサーバーで実行(16.5min)
      • サーバーで並列実行(12min)
      • EC2の4台のサーバーで実行(89sec)
  • Carp::REPL
  • Template::Declare
    • Perlでテンプレートを書ける
  • CSS::Squish
    • CSSコンパイラ
    • CSSをまとめて1つのファイルにする。ファイル名はMD5。ブラウザにキャッシュさせる
  • App::ChangeLogger
    • リリースは手作業が多くて大変
    • shipitすればだいぶ楽だけど変更履歴は?
  • Shipwright
    • 依存モジュールが多いアプリはインストールが大変
    • すべてをバージョン管理下においてパッケージングする
      • 過去のビルドを再現できる
      • あの依存モジュールが変更されたよ!といって慌てる必要がなくなる
    • ビルド順も制御できるよ
  • Date::Extract
    • 文字列から日付を抽出
  • ユーザーがフィードバックしやすくすること
    • 返信すること
  • Net::IMAP::Server
  • タスク管理

Shipwrightは実際に使ってるけど便利です。一番始めに依存関係の解決とインストール順の解決が必要で、それは全自動というわけにはいかなくて大変だけど、これが終わってしまうと後はラク。インストール時に実行するコマンドも完全に制御できるってのもいい。例えば絶対にインストールが成功して動くことがわかってる場合にはmake testをスキップするようにすれば時間の節約にもなるし。適当なディレクトリを作ったりとか、なんかのシェルスクリプトをインストール後にコピーするとかmake installしたあとになんでもできるのも便利。

Atsushi Kobayashi (nekokak) - 古今東西ORマッパー

Casey West (cwest) - Build Domain Specific Languages with Perl

Kazuho Oku - Architecture of Pathtraq - building a computation-centric web service

http://www.slideshare.net/kazuho/yapcasia-2008-tokyo-pathtraq-building-a-computationcentric-web-service

  • スケールアウトの話
    • memory intensiveなサービスではサーバあたり32GB - 64GBのメモリ容量が最安
    • データベース分割はしない。タスク単位で別サーバへ移動
  • データの圧縮
    • URLの圧縮
      • URLは圧縮可能(schema、 www.、 .com、 .html)
      • 圧縮状態のままインデックスを使用して検索可能に
      • MySQL UDF(ユーザ定義関数)
      • InnoDBプラグイン
    • カウンタの圧縮
      • MySQL UDF
      • 理解できない・・
  • クエリキャッシュ
    • ログ分析は集約演算(重い)
    • Cache::Swifty
      • 読み込みが速い
  • Filter::SQL
    • SQL中心の開発
    • Perlはグルーコードとしての役割(DBIは複雑すぎる)
  • メッセージキュー
    • Q4M
      • MySQL 5.1のプラガブルストレージエンジン
      • Trunstable, Fast
      • Queue::Q4M

Faiz Kazi (fuzz) - From POE to Erlang

http://conferences.yapcasia.org/ya2008/talk/1055

  • Perlの並行プログラミング
    • ithread
      • スレッドは難しい
    • fork
      • slow, overhead
    • select
      • 理解しづらい
    • POE
      • selectは難しいけどフレームワークがある
      • イベント駆動
      • POE with .. Kernel, Process, Session, Event, yield
  • プロセッサ
    • マルチコア
  • Models for Concurrency
    • 2つの理論
    • Shared State Concurrency
    • Message Passing Concurrency
  • Erlang

最近Perlネットワークプログラミングを読んでPerlの並列プログラミング(fork, thread, select, 非同期IOなど)を勉強していたので興味深かった。Erlang勉強したい。

Jeff Kim - Gungho and cloud computing, a scalable crawling and processing framework

Jose Castro (cog) - What I've learned in Tokyo

Michael Schwern (Schwern) - Perl Is unDead

YAPC::Asia 2008 2日目

今日もほとんど1日中受付にいました。今日は受付業務はほとんどなかったけど、昼食としてカップラーメンの配布という一大イベントがあり、その準備が一番大変だった気がします。
受付は一番大きな会場である講堂で行っていたので、参加者のみなさんの顔を直接見れたことが一番大きな収穫な気がしました。

スピーカーのみなさんのトークはほとんど見れていないので、動画がアップされたらチェックしようと思います。

この3日間を通して感じたこととかはまた今度アップする予定。

YAPC::Asia 2008 1日目

今日は1日中受付係をやっていました。いろいろ慣れないところもありみなさんにご迷惑おかけしたところもありますが、なんとか1日が終了しました。

風邪なんだかよくわからない謎の病気かどうかすらわからない、時々見舞われる咳症候群がひどいので、懇親会は1時間くらいで引き上げてきました。

明日は何の仕事をするかわかりませんが、またがんばりたいと思います。

明日も早いので今日はもう寝るっす。