YAPC::Asia2009の特別研修「Perl, Unicode, and AJAX」は自由な感じの研修でした
- 小飼弾(id:dankogai)さんのAjaxの基礎講義でした。
- ただ、ダブルブッキングだったらしく、16時前にdanさんは抜けました。(一通りの説明したので研修を疎かにしてはないです)
- ということで、16時からはMaki(id:lestrrat)さんとEmerson Millsさんがいろんな話をしてくれました。
- これが何でも聞ける形式で面白い時間でした。こっちのコーナーが一日だったとしても面白かっただろうなぁと。
- 今回の研修は前日のMooseの研修と違い、ほぼ自由な感じでした。なので質問とかどんどんしてなかったら多分何も得られてなかっただろうなと思います。
- その分、関係ないことも色々質問できて楽しかったです。
- IRCの話とかそういうの。
- その分、関係ないことも色々質問できて楽しかったです。
- 研修と関係ないことメモ。
- 以下メモ
今日の流れ
今までのwebアプリ
- クライアントがサーバにHTTPでリクエスト投げる
- サーバはレスポンス返す
- webページのHTMLを使って表示
- 以上のことはAjaxでも変わらない
実習 - 環境変数(%ENV)をHTMLでテーブル表示
Ajaxで何が変わったか?
実際サーバから送ってたデータとは何?
XML vs JSON
実習 - JSONPで環境変数を表示するためのサーバサイド
- Content-Typeは決め打ちでいい
- Content-Type: application/x-javascript; charset=utf-8
- 正確にはutf8でなくutf-8
- Content-Type: application/x-javascript; charset=utf-8
- use JSON::XS;をしましょう
- 楽をしてね
実習 - JSONPのクライアントサイド
実習 - JSONPをdumpする
Ajaxのまとめ
- メリット
- デメリット
- 検索エンジンに乗らない
- 簡単なJavaScriptなら実行されるようになってきた
- 非同期なので表示されない時がある
- セキュリティが良くない場合がある
- 一番のデメリット:JavaScriptオフの環境では動かない
- ケータイ
- 検索エンジンに乗らない
- デメリットの解決策
- JavaScriptが動かない環境ではサーバ側で実行してから返す
Ajaxでサイトを作る時の注意点(CAVEAT)
- exception
- サーバの負荷が大きい
- HTML時代は最小単位が1ページだった
- Ajax時代は最小単位がDOM
- 1ページでたくさんのデータを返す場合がある
- サーバとクライアントで言語が違う
- いい点でもある。サーバはJSONを返せばいいだけだから、より自由になる
CPANの良い点とJavaScriptの問題点
時間がちょっと余ったので質問コーナー
Perl6が出たらCPANはどうなるの?
- CPAN6が予定されている
- perl6が実際に使われるのは2年後だと思う
- 来年Rakudo *
- Perl5はそのまま続くと思っていい
- Perl5は別プロジェクト
- Perl6からinlineでPerl5が呼び出せる
- CGI.pmを動かすというのをYAPC::Asiaでやった
Perl6のパフォーマンスについて
型が嫌いと言っていたけど、MooseとかPerl6は型がカッチリしてない?
- anonymousのクラスも作れたりするのでカッチリしすぎてるわけではない
- Perl5じゃそれはできない
- まぁ、MooseX::Declare使えばできるけど、MooseX::Declare使うとPerl5がサイボーグになっちゃう
- Perl5じゃそれはできない
- クラスを使うということが型にはまるということ
- useなんちゃらはuseしたものの型にはまる
EmersonさんとMakiさんに変わって。
- danさんが帰ったので時間を埋めるために二人のTips系+面白トーク+質問+雑談
周りの人がPerlの拒否感あるのだけど、そういうのに対してをどう答えればいい?(たとえばwebアプリを作る時)
- Makiさん
- Emersonさん
Perlの日本と世界
何かwebページを動的に作るとき
- Makiさん
- YAPC::Asiaで使ったツールはCGI.pmで2ファイルとかで作った
- どの言語でやっても同じくらいで作れると思う
- 慣れてるやり方でやるのが一番だと思う
メモリが開放されない?
- Makiさん
- Perlは一度手に入れたメモリをプロセスが終わるまで開放しない
- 集計してるならberkreyDBとかの外部ファイルに書き出すのがいい
- Perlは一度手に入れたメモリをプロセスが終わるまで開放しない
Moose
- 実用に耐えられるよ
- 自分でやる分にはメモリも気にしてない
Emersonさんの講義
- ちょっと質問が尽きたようなのでネタとかtipsとか
ER図書いたらDBIx使ってすごく簡単にschema作れるよ
- まずER図について(DBの正規化について)
- ある先生からいわれたこと
- これをオブジェクトだと思え
- ある先生からいわれたこと
- MySQL Workbenchというツールがある
- http://dev.mysql.com/downloads/workbench/5.1.html
- SQL作る際には一番いいツール
- ER図を書くだけで、ほぼ完璧にそのSQLを書いてくれる
- 色々できるけどWebアプリなら簡単な機能だけ使えば十分
- 注意点
- primary keyのところでテーブル名をお尻に付けたがるからそこだけ変える
- 必要なテーブルを作ったらn対1のmany側のテーブルを先に選んで1の方に線を伸ばす
- これだけで外部キーとかもできる
- ExportでSQL発行
- その後DBIx::Classを使う
- DBIC::Schema::Loader(DBIx::Class::Schema::Loaderのこと。Perlのパッケージ名の略語は適当に決めてるらしい。規則性あるのかと思ってたから「へぇ」って思った)
- さっきできたSQLを食わすだけで、ORMのデータクラスを作ってくれる
- dbicdeploy
- DBICx::Deploy(なぜかCとXが逆。意味がわからない)
- やっぱりMySQLは嫌だって場合は他のDBのLoaderもできる
- DBIC::Schema::Loader(DBIx::Class::Schema::Loaderのこと。Perlのパッケージ名の略語は適当に決めてるらしい。規則性あるのかと思ってたから「へぇ」って思った)
Mason
- HTML::Mason
- Amazonで使ってた
- WIKITTで使ってる
- テンプレートツール
- tips:二つの関数の呼び出し方
- <%def>
- privateの定義
- <%method>
- publicの定義
- <%def>
- 例えばメールフォームで<%method>ccformを定義すると以下のように書ける
- $m->comp(form.mi:ccform)
- あとselfという概念もある
- テンプレートになりたかった時期があったみたいで、Dispatchなどもあるけど無視してください
- Catalystとかの方が全然いいから
- まぁ、Masonなんて多分使わないよね
また質問コーナーに戻りました。
Perlは速い?
- Makiさん
- どう評価するかによるから何とも言えない
- 開発コストとのトレードオフ
- 結局Cで書いた方が速いでしょ?
- Emersonさん
- 誰かが言ってたけど、memcachedにはどれも負けるよ笑
- mencachedは既にデータが入ってるからね
- 誰かが言ってたけど、memcachedにはどれも負けるよ笑
Perl6の実装について(複数実装があるのはなぜ?とか)
- Makiさん
- Perl6は仕様ありきなので複数実装されててもおかしくはない
- 2003年とかにはPerl6が始まってた
- Pugsはいち早くHaskellで開発をはじめた
- 開発者が恋人に捨てられたか何かで開発が止まったんだっけか?
- Perl5とPerl6という名前がミスリード
- Perl6でできることをPerl5でやろうとして追いつこうとしててPerl5も進化してる
- Perl5はまだまだ終わらないよ
- Perl4の時もライブラリをPerl5で動かしたりもしたし
- HyperOperaterが並列にできるようになったらPerl6も使えるかも
- 仕様では並列処理なので
- (Emerson)MySQL使ってて一気にページが取れるのにmapで順次に処理するのがもったいない気がするからHyperOperaterに期待
- Perl6は仕様ありきなので複数実装されててもおかしくはない
Perlの調べ方(例えば特殊変数がわからない)
- Makiさん
- 独学でperldoc全部読んだからなぁ…
- 特殊変数ならperlvarにいくとか。perlvarがあるってことは覚えておかないとダメだけど
- 独学でperldoc全部読んだからなぁ…
- どうやって調べていいかわからなくなったらIRCに行こう
- shibuya.pm
- jpa-perl
- soozy
- ここはやめておこう。濃い人が怖い
- 下ネタとかそういう話題が欲しい時はここ
- ここはid:yappoさんが
IRCやったことないのだけど、みんなリアルタイムで見てるの?ログ取って後から見てるの?
- Makiさん
- ZNCでプロキシ立ててる
- 後でログを全部舐めてる
- リアルタイムでもたまに見てる
- ちなみにid:miyagawaさんはみんなも知ってる通り寝ないから、結構リアルタイムでいる
- (Makiさん、Emersonさん)あれで何で死なないんだろうね?不思議。
- (そう言えば前日の研修でSartakがhttp-engineかどこかのチャンネルでmiyagawaさんとやりとりしてたのを思い出した)
- ちなみにid:miyagawaさんはみんなも知ってる通り寝ないから、結構リアルタイムでいる
Moose本体に何かが入ることはある?
- MooseX::Typeが入りそうだったけどこの前却下されてたから大きいものはしばらく入らないと思う。