2007年4月30日月曜日

YAPC::Asiaメモ(その4)Perl Worst Practices

Martyは自分で書いた日本語のプレゼンテーションスライドで講演。日本語を話す「外人」はたくさんいるものの、これだけ読み書きできる外人は貴重であります。

演題はDamian Conwayの著書、Perl Best Practicesのもじり。
  • 私にとってのいいPerlは
    • きれいだ(遠くから見ても)
    • 有用だ
  • 悪いPerlは
    • 読むのが難しい
    • 醜い
    • 有用だ(だからなくしたくてもなくせない)
    • もろい(変更するとバグが出る)
  • Javaが好きじゃない
    • バカでも使えるように設計された言語(会場拍手)
    • バカな人でも危険なコードは書きにくいから
  • Perlが好きだ
    • 頭がいい人のための言語。制限が少ない。言語の挙動まで変えられる
    • バカでも使えるけど(そういう例がたくさんあるCPANってサイトは知ってる?)
  • Javaは成功しPerlはそれほどでもない。なぜ?
    • Slack's Law=会う人の95%はバカだ
    • この会場で、頭がいいと思う人は手をあげてください(二人半)
    • この種のデータのうち95%は捏造だ(落ち)
悪いPerlの問題は3つ。変数、正規表現、オブジェクト指向。
  • 変数
    • バグの95%は変数が原因(バグを見つけたとき変数が関係する場合を数えてごらん)
    • 変数をなくすのが理想だけれど、それは難しいからこういう変数をなくそう
      • グローバル変数
      • パッケージ変数(長い名前のグローバル変数だからね)
      • local変数
    • my変数は小さい範囲で使われるならばだいじょうぶ(スコープが25行以内くらい)
    • $1と$2はグローバル変数
  • 正規表現
    • ちゃんと使わないとあぶない。ユーザの入力をgrep /$input/, @array;としてもだいじょうぶ?
    • Mail::RFC822::AddressやRegexp::Commonを使おう
  • OO
    • OOは害悪、でもOOはエレガントだと思っている人がいるから困る
    • 今朝のMJDはOOを使ってなかったよ
    • Perl Object Orientation=POO=「ウンコ」



この人のユニークなところは冗談にまじえてふと真面目なトピックをいれるところ。野暮だとは思いつつ要点をまとめると

  • コードはきれいに書こう
  • 変数はmyで。スコープは狭く。
  • パターンマッチの際の$1と$2に注意(あと$aと$bも注意ですね)
  • 有用なモジュールはMail::RFC822::AddressやRegexp::Common
  • オブジェクト指向は適材適所で

というところ。

先週NYにいらっしゃったときにお会いしたのですが、とてもいい人でした。

2007年4月29日日曜日

YAPC::Asiaメモ(その3)Building Catalyst Applications

あとで自分で使おうと思ってYAPC::Asia 2007のメモをひとつひとつ書いてみているけれど、どうしても1日あたり1エントリ(かそれ以下)が精一杯。このぶんだと書き終わるころにはYAPC::Asia 2008が始まるのではないだろうか。そうすると一年中YAPCのことを書くことになるな。いやだな。

今回はCatalystを使ってブログのアプリケーションを作ってみましょうというお話。ちなみに、発表者のJonathanは電車男です。

前半はCatalystの基本。
  • MVCの説明
  • Catalystのインストールは時間がかかるからコーヒーでも
  • インストールしたらすぐ立ち上げられる
  • アクションには属性(attribute)がついてdefault :Privateなんて書く。:Localや:Globalもある。これはあまり使われていないPerlの機能を利用したもの。
    • default :Privateは定義されていないアクションに対応したURLのとき呼ばれる
    • sub foo :Localは/fooのURLに対応
    • :Privateは対応するURLがない(例外はdefault、index、begin、end、auto)
    • アクションは正規表現も使える
  • アクションを定義するsubの1行目は必ずmy ($self, $c, @args) = @_;
    • /my/action/foo/bar/bazというURLでactionにアクセスすると、myがパッケージ名、actionがアクション名の場合@argはqw/foo bar baz/に
  • アクションの実行順序はauto->begin->action->end
  • $cのメソッドは省略形が使える。res = response、req = request
ほかのアプリケーションとの連携。

  • TT便利
    • MyApp::C::Root::fooはroot/src/foo.tt2に対応
    • これはいちいち設定しなくてもよい(設定することもできる)
    • [% 変数 %]
    • [% Catalyst.requiest.uri %]
  • DBを使う(DBIC)
    • $ script/blog_create.pl model DBIC DBIC::Schema MyApp::Schema create=static dbi:SQLite:blogdb
    • スキーマファイルをちょっと変えればどのDBにも対応
  • FormBuilder
    • Jonathanのお気に入りモジュール
    • JavaScriptでの入力チェックも自動化。JavaScriptをOFFにしてあってもだいじょうぶ
  • セッション
    • プラグイン使う
    • cookieを使わずにURIでセッション管理もできる(最近の潮流じゃないけど)
    • $c->flashで変数の変化をうまく処理($c->stashのかわり)
  • AJAX
    • 「いまどきAJAXのないweb開発なんてありえない」
    • Jemplate(JavaScriptにおけるTT)
  • その他キャッシュとか認証とか
  • テスト
    • Test::Catalyst qw(MyApp);
会場からの質問が一つもなく気まずくなりそうだったところ、司会者が機転を聞かせて「みなさんすっごくamazedです」と英語でコメントを。amazedは感心した、とかびっくりした、とかいう意味で、だから質問が出ないんです、ということなのだがこれをあのタイミングで言えるとはすごい。今度同じ状況になったときに使わせてもらおう。

2007年4月28日土曜日

YAPC::NA 2007の講演一覧が発表された

6月に行われるYAPC::NA 2007の講演一覧が発表された。このブログを読んでくださっている方のほとんどは日本人のはずなので、YAPC::Asiaの関係者を拾い出してみる。
  • Jeff Kim(Inside Net::Amazon::EC2)
    • 先日の東京での発表を再放送? 東京では生で見られなかったので楽しみ。
  • Leon Brocard(PeaceDrum - Practical MapReduce)
    • 去年にmightyvを発表してから1年。相変わらず楽しそうなことをされている。
  • Jonathan Rockway(Building applications with Catalystほか)
    • 東京に続きCatalystの発表2題。
  • Dave Rolsky(Intro to Masonほか)
    • 3題の発表のうち「Perl DateTime Project」は昨年の東京での発表にあった。面白い話題だったので、そのときから何が変わったのかに興味あり。
あとKaren Pauley(Management Skills for Geeks)は唯一の日本からの発表者。

楽しみです。


関連記事

YAPC::NA 2007まとめ

2007年4月27日金曜日

YAPC::Asiaメモ(その2)Angerwhale

Lightning talkから。
  • http://angerwhale.org/
  • ブログサーバソフトウェア
  • インストール簡単、設定簡単、使うの簡単
  • 一記事一ファイル、カテゴリはディレクトリ(DBいらない)
  • URLの形式たくさん(Catalyst使ってます)
    • http://localhost:3000/articles/
    • http://localhost:3000/tags/
    • http://localhost:3000/2007/01/01
    • http://localhost:3000/categories/カテゴリ名
  • 記事のファイル形式はいろいろサポート(HTMLとかテキストとか)
  • 出力もいろいろな形式(Atom、JSON、YAML)
  • キャッシュ多用、だから早い
  • PGPで個人を識別
  • PODたくさん
  • IRCもあるよ
記事=ファイル、カテゴリ=ディレクトリだとシェルでいろいろできそう。でもシェルを使えるサーバを持っていないといけない、と考えたら敷居は高いかも。家庭内ブログだとOK? 今日の献立、とか?

2007年4月26日木曜日

DBIx::SimpleとSQL::Abstract

前回のエントリでPerlからSQLを使うのって面倒、ということを書いたらさっそくmiyagawaさんから「つDBIx::Simple」というお返事が。これのperldocに書いてある通りSQL::Abstractを組み合わせたらSQLも書かなくてよくなって、かなり良さげ。

Inline::CはPerlの中でCを使う自由を与えてくれたけど、Perlの中でSQLを使わない自由もあっていいと思う。だってSQLなんてバッドノウハウのかたまりじゃない? 言いすぎ?

あとはPerlの正規表現でSELECTができるラッパーがあれば最強なんだけれど、ありませんかねえ(と書いたらまだ誰かが教えてくれるかも)。ちなみに、前回書いた/i、つまり大文字小文字を区別しないマッチはSQL::Abstractがこんなふうにやってくれる。たとえば、
$sql = SQL::Abstract->new(convert => 'upper');
%where = (keywords => 'MaKe iT CAse inSeNSItive');
はこうなる。
WHERE upper(keywords) like upper('MaKe iT CAse inSeNSItive')

普通のWHERE文はこんなふうに表現できる。
my %where = (
requestor => 'inna',
worker => ['nwiger', 'rcwe', 'sfz'],
status => { '!=', 'completed' }
);

慣れないブログを始めて1週間足らず。はてなブックマークやLivedoor Readerに登録してくださった方々、そして来訪してくださった皆様に感謝申し上げます。

2007年4月24日火曜日

YAPC::Asiaメモ(その1)Introduction to DBIx::Class

データベースのプログラミングには苦手意識がある。理由のひとつは$dbh->prepare()だとかfetch()とか、おまじないが多すぎるからで。それを解消してくれるかもしれないモジュール。
  • ORM(Object-relational mapper):オブジェクトからリレーショナルデータベースへのマッパ。最近話題らしい。
  • SQLを書かずにPerlを書こう。
  • MySQLをはじめいろいろなDBに対応。
  • 気に入った書き方をスライドからコピペ。
my $table = $schema->resultset('table');
$table->find(1); # primary key

my $people = $schema->resultset('Person')->
search({ firstname => { like => 'Jon%' } });
悪くない。でも使いたいかと言われれば微妙。クラススキーマをいちいち定義しなければいけなかったり(自動化できるみたいだけど)、結局$table->findにしても新たなおまじないを覚えなくてはいけないし。

個人的にはこういうインターフェイスが理想なんだけど。
@rows = $dbh->select(
from=>"people",
where=>"name =~ /^Joh?n.*Kennedy/i"
);
for my $row (@rows) {
say $row->{name};
say $row->{address};
}
ポイントはPerlの正規表現を使ったSELECTと、列の名前であるnameを$row->{name}として使えるようにすることなんですが、こういうことをやってくれるモジュールはありませんでしょうか。

Xの画面がずれた

Linuxで使っているディスプレイにWindowsをつなげてあれこれしたせいか、Xの画面が右にずれた。Google先生に聞いてあっさり解決。

http://linux2ch.is.land.to/index.php?FAQ%2FXWindowSystem#ia0d9ace

「ずれた」を英語でいうとなんだろう? shift?

2007年4月23日月曜日

Linux + Firefox + Flash Player = SIGSEGV

LinuxでFirefoxを動かすと、Flashを使ったページでブラウザごと落ちるという話に悩んでいる。これと同じ症状かな。

http://www.adobe.com/cfusion/webforums/forum/messageview.cfm?forumid=44&catid=184&threadid=1233705&enterthread=y(英語)

Flashを使ったページなんて普段は見ないので全然気にしていなかったのだけど、とりあえずプレイヤー(~/.mozilla/plugins/libflashplayer.so)を削除してからバージョン7にダウングレード。Google Videoは見られるようになった。

http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_7_linux.tar.gz

2007年4月22日日曜日

YAPC::NA 2007に行こう

観客として行くことにした。ヒューストンは初めての訪問。

http://conferences.mongueurs.net/yn2007/


関連記事

YAPC::NA 2007まとめ

Bloggerの設定:覚書

設定したこと。
  • Formatting -> Time Zone:EST
  • Comments -> Who Can Comment? -> Anyone

言語の設定は意図的にEnglish (United States)のまま残す。でないと月別アーカイブの見出しが「4月 2007」みたいなダサいことになる。

BloggerのテンプレートでJavaScriptを使う

Template -> Page Elements -> Add a Page Element -> HTML/JavaScript
でHTML/JavaScriptを追加する。

で、Page Elementsのところに戻って
HTML/JavaScript -> Edit

こうしないとテンプレートでJavaScriptを使えない。面倒ですね。