読者です 読者をやめる 読者になる 読者になる

北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

今日はYAPC::Asia Tokyo 2011の1日目です

レポート perl perl+web yapcasia

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
  • まとめ: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 を作った
  • なぜCoroが必要か
    • Inversion of Control のため (ネストが深くなるのを防ぐ)
    • rouse_cb と rouse_wait
  • Coro::Channel によるスレッドプール
  • Coro::Debug によるデバグ
  • 「Coro はPerlの唯一のスレッド」
    • ithreadはオーバーヘッドが大きく、スケールしない
    • スレッドは1CPUのために設計されている
    • 自動的に同期がとられるし、スケールする
  • スクリプト言語でのスレッドとは?
    • 資源全てを共有するということは、資源全てにロックが必要だということ
    • この問題は解決されていない。RubyPythonも並列ではない
  • 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のことを学ぼう」
    • PerlUnicodeをとてもよく扱えている
  • 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
  • すごくイイカンジになっているので使って下さい!
hakobeさん「Enhance Anime wathing with programing」
  • アニメをTwitterで実況したい
  • しょぼいカレンダー
    • アニメの完璧な情報
    • 豊富なAPI
    • リクエストとパースの回数が多くめんどうくさい
  • WebService::SyoboiCalendar
  • syoboirepl
    • アニメを見ている人は、ターミナルを開きながら見ているはず
    • デモ:現在放送中のアニメ。キャストまで見れる
  • 関東と関西の最速アニメの比較
株式会社カヤックさん
  • PHPPerlに入門、今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
  • デモ
  • (ゴーン、時間切れ)
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時間で満員御礼
  • PerlRuby、Node.js の3種を用意した
    • しかし、全チームPerlを利用
  • 優勝はfujiwara組。10 req/sec → 1,500 req/sec
  • コードやデータはlivedoor のtechblogにある
  • ISUCON2は・・・?
    • 準備が大変なので・・・
    • (会場から拍手)