Yokohama.pm出張版 - YAPC::Asia2009前夜祭に行って来たのでメモ

  • 初めてのYAPC参加、Yokohama.pm参加。
  • 記念にTシャツと手ぬぐい買いました。
    • 手ぬぐいの方が原価かかってるらしい。
  • あとは今日の目的のbtoさんとid:clouderさんとの名刺交換もできたのでよかった。

はじめの挨拶 - id:clouder

  • YAPC::AsiaのTシャツと手ぬぐい1500円
  • トイレがどこだとかそういう話

AnyEvent?(仮) - ドワンゴ 横山彰子(id:acotie)

  • AnyEvent
  • 標準IOを使ったサンプル
    • inで\*STDINを受け取ってコールバック関数に呼び出す
  • 何がいいか?
    • 何かあった時にだけコールバック関数が呼び出される
  • Condvar
    • プロデューサ的な役割、待機している役
      • $cv->send;で送って$cv->recv;で受け取る
  • 実際のデモ
    • camikitter
      • twitterの髪切った発言だけ拾ってチャート作ったりする
  • まとめ
    • AnyEvent::Intro読む
    • YAPC本編で話聞けばいい

Schenker - PAUSE(id:JIRO) id:spiritloose

  • 自己紹介
    • Image::ObjectDetect
      • 顔認証とかできる
Schenker
  • DSL
  • RubySinatraからのインスパイア
    • URLのdispatchがシンプルな関数でまとめられる
似たようなフレームワーク
  • Mojolicious::Lite
  • Dancer
中身
  • HTTP::Engine + HTTTP::Engine::Middleware
  • 簡単な構成
    • ヘルパなし
    • 設定ファイルなし
  • サポートしてる機能
    • 設定
      • portとかhostとかセッション使うとか
    • Routing
    • コントローラ
    • ビュー
    • モデルはなし
      • 好きなモデルを使って
    • コマンドラインオプションたくさんある
Routing
  • get '/' => sub {};
    • get,post,put,deleteが使える
  • バーチャルホストみたいなこともできる
  • UAを見て分岐みたいなこともできる
パラメータ
  • params->{a}とかparam(a)みたいに書ける
  • ネストなパラメータも取れる
    • entry[title],entry[body]の2つのnameがあるとすると、params->{entry}でtitleとbodyがkeyのハッシュが取れる
  • pathinfoも取れる
    • get '/user/:name' => sub { $args = shift; "$args->{name}" }
  • set encodeでEncodingもできる
View
  • Template-Toolkit
    • get '/tt' => sub { tt 'index' } でindex.ttを使う
    • ファイル使わなくても__END__以下に@@ indexとか書けばtt 'index'で呼び出すことができる
      • ちょっとプロトタイプ作るときに便利
  • Text::MicroTemplate
    • get '/mt' => sub { mt 'index' } でindex.mtを使う
ヘルパ
  • 簡単なのがあるけどあんまり意味ない
    • helper foo => sub {} で get '/' => sub { foo('bar') }としたときにfooが使える
  • こうしなくても関数定義しておけばいい
Before filter
    • Beforeに書いておくとstashでそれを使い回せる
      • 現在日時を出すnowを定義しておけばstash->{now}で呼び出せる
定義済みの関数
  • 色々あるよ
    • request;response;でHTTP::EngineのRequestとResponse
    • headersを使ってヘッダに何か加えることも可能
  • 例:画像を返す
    • content_type 'image/png' 指定して画像を返せばいい
  • 例:画像のダウンロード
    • send_file 'image.jpg' で画像のダウンロードをさせることができる
処理の中断もできる
  • halt;を実行すればそれ以降は何も処理されない
  • redirectでリダイレクト処理もできる
    • その後の処理はされない
  • エラー処理も
    • defene_errorでエラー処理を定義
    • raiseでエラー処理を実行
      • その後は実行されない
セッション機能もある
  • HTTP::Sessionを使ったもの
    • getとsetで使える
サンプル置いてある
TODO
  • リリース
  • PSGI/Plack対応
  • ドキュメント
  • プラグインを使えるようにするために拡張方法をまだ決めていない
質問
  • 質問じゃないけど今Plackで動くようにしました(id:miyagawa)
    • pmをplに変えないといけないけど

YAPC::Europe参加報告 - id:kawanet

  • まずは自分がお天気お姉さんのように発表しながら映れる方法
    • 会場広いとスピーカーの顔が見れないでしょ?
    • でもActionScriptなんだけどね
本題
  • と、その前に発表の資料をリモートでめくってます。すごいでしょ。
    • ダイソーで100円の指サックでページ送りできる
  • 参加国
    • 33国も出る
  • カンファレンスの間に30分単位のコーヒーブレイクが何度もある
    • 聞きに来てるのかコーヒー飲みに来てるのかというくらい
  • OSDC.TW(台湾)も行った
    • 元はYAPCだけど何かと合体した
    • 小龍包が安い
  • その他、気づいた点
    • 飲み物、スナックが提供されて空腹心配無し
    • プレゼン中でも観客のつっこみある
    • BoFが多い
    • 女性が多い
まとめ
  • 日本と海外のカンファレンスの違い
    • 勉強しにくると交流しにくるの違い?
  • LTは日本が学んだ物の一つだけど、それ以外でもまだまだ学べる所がある
    • 奥さん方が交流できるパートナープログラム
    • send-a-newbleという若い子を呼ぶための支援がある
  • 海外のYAPCにも出かけよう!

PerlのWAF今昔 - ドワンゴ id:k-z-h

  • WAFの役割
    • 面倒なことを片付けてる
      • セッション管理
      • ユーザ管理
      • ルートディスパッチ
遷移
  • 暗黒時代
    • cgi-lib.pl
  • 領主の時代
    • CGI.pm
      • クッキー処理やらパラメータ処理やら
    • CGI::Application
      • パラメータをキーにしたディスパッチを行う
      • plugin機構はないが、みんな勝手に生やして作ってた
  • 帝王の時代
    • Catalyst
      • おそらく
      • $cでコンテキストを使うのが便利
      • Sledge,Mojo,Boofyもある
WAF今
  • 大体の「WAF像」ができている
  • Catalyst
    • Contextがんばりすぎ
    • plugin使うな
  • Contextの問題点
    • 依存し過ぎ
  • Catalyst::EngineをHTTP::Engineへ
    • Configが必要
  • Bread::Boardにしてみる
    • Contextからこっちに依存がうつっただけで問題解決しない
  • MooseX::Bread::Boardを開発中
  • PSGI/Plack
    • ここ最近出て来た
    • id:tokuhiromさんに聞きましょう

みんなHTML5やろうよ! - id:amachang

HTML5
  • 新しいHTMLの仕様
  • 独自仕様の再定義
  • 新しい要素、属性、意味の定義
  • API仕様
  • 独自仕様の再定義
    • document.write,canvas,contentEditableなど少しずつ違うものを共通化した
新しい要素
  • 色々あるけど書けばわかる。
API
  • HTML4.0.1=>ドキュメントの仕様
  • HTML5=>ドキュメント+API=アプリケーションの仕様
  • ネットに繋がってない状態で最後のレスポンスを返す、オフライン機能とかも定義されている
DEMO
  • contentEditableでyahooのロゴをgoogleに変えたりCPANに変えたりできるよ
DOMツリーとは違う、もう一つの木構造
  • セクションツリー
    • DOMとは関係ない
    • 表立て表示ができるもの
    • セクションツリーを作る要素
      • blockquote,body,figure,td,section,asie,nav,article
      • sectionとarticleの違いはHTMLコーダで議論されているがプログラマにとってはあんまり興味ない
セクションツリーで重要なこと
  • 全ての要素は、必ず単一のセクションに関連づけられる
  • 同じHTMLなら誰でも同じ構造
  • 既存のHTMLもキレイな構造になる
HTML5の仕様書に沿って安直に書けば簡単に書ける
  • ifの分岐など、プログラムに落とせる形でそのまま書いてあるので、それをそのまま実装すればいい
  • 仕様書はネタの宝庫

全裸でワンライナー - id:sugyan

  • LLTVで話して来た
形態素解析して動詞の前に「全裸で」を付ける
ワンライナーの話
  • コマンドオプションと特殊変数を覚えまくればいい
  • Acme::Oneliner
    • ファイルをワンライナーにしてくれる
    • shortオプション
      • ちょっと短くなる
    • symbolオプション
      • 記号だけにしてくれる

Smoker - pluggable frame work モバイルファクトリー id:nekokak

  • Smoker
  • Smokerの名前の由来
    • タバコが灰皿にたくさんブッ刺さってる状態
  • 特徴
    • ぷらっがぶる
    • Componentをたくさん作る
      • webで必要なcomponentを作る
      • CLIで必要なcomponentを作る
  • githubにソースとサンプルあるから使ってみて

PHPとの付き合い方 - bto junichiro

  • junichiro
    • 「ブログが続かないわけ」というブログ書いてる
  • bto
  • j:Perl Is unDead.
    • 去年のこの言葉に感銘を受けた
    • CGIから入って一回PHPに映ったけど、YAPC2006からPerl面白いなと思って戻って来た
  • b:でも受託はphpが多くない?
  • j:phpは初心者層も多い為にパイがでかいだけだと思う
  • b:多いは正義
    • 初めに入った会社がphpだったのでphpを触るようになったけど、要はパイが多かったから
  • b:PHP>Perl
    • 関数が多い
      • プログラマ的には気持ち悪いんだけど、短絡的に実現したいと思った時にすぐできる
    • header自動出力
      • php書いてる人はヘッダ知らない
      • プログラマとしては理解して欲しいけど、ただアプリ作る人にはなくてもいいかなぁ
    • $_GET,$_POST
      • パラメータが元からパースされてる
    • テンプレートエンジン
      • 言語レベルでテンプレート
    • 女子率が高い
      • php勉強会の女子率が高い
      • 相方id:HolyGrailの会社やほーがphp使ってる。最近結婚もできたし
  • b:PHP非エンジニアがすぐ使える
  • 実例:現在時刻を表示する
    • php
      • .html->.phpに拡張子を変更
    • perl
      • localtimeから配列とか、モジュールの歴史とか、DateTimeとか…結局、結構面倒なので省略
  • b:PHP最強
  • j:Perl最愛
  • Perlへの提案
    • 初心者に選ばれる言語にする
      • 仕事で仕方なくやってる人もいて、そういう人にはphpが楽かも
      • キラーフレームワークがあればいいような
  • j:Perlはたくさんフレームワークある
    • Yacafi,MENTA,Nanoa,Catalyst,Ark,Schenker,Smoker
      • 最後2つはさっき書いた的なところあるけど
    • Yacafi,MENTA,Nanoaはメンテナが飽きたかも
    • Nanoaphpみたいな感じで使いやすいかも
  • 参考:だいぶ広まったWordPressポリシー
    • PHP Only
    • Terminal禁止
    • URL見たままのファイルがあること
    • クラスを使わない
    • テンプレート言語=PHP Only
    • ディレクトリ構造はフラットに近くする
  • プログラマ(デザイナとかコーダ)も使えるキラーフレームワークがあるといいな

エロサイト管理者の憂鬱II - yousukebe(id:kamawada)

  • YAPC本編ではKailasというフレームワークについて話す
  • 今回は自分のwebサイトについて
  • 10個のwebアプリケーション+10個のエロサイト=60万PV/日
  • スモールwebアプリケーションを作る理由
  • どうやって作ってる?
Catalystのディレクトリ構造
  • dbディレクトリを作ってSQLを置いたり
  • tディレクトリにテストを置いてテストしている
  • モダンPerl入門にも書いてあるようなWebディレクトリを作って1階層落としている
    • フラットだとCLIとかと階層がずれるからMyApp::Web作った方がいい
      • 「CLIはMyApp::CLIに作る」とかもできる
  • いつも作るものは./db/update_schema.pl
    • DB構造変えてもこれを走らせると毎回schema作られるから楽
フロント
  • JavaScript
  • CSS
    • jQueryUI,YUI
  • できないHTMLデザインは他の人で解決しよう
    • twibはHTMLテンプレートを買ってる
    • 無料ならOpen Source web design
運用
収入源は基本的にアフィリエイト
  • DTI,sbs,DMM,Amazon,Rakuten,etc,AdSense
  • 気楽でいい
  • 成果報酬
  • 継続報酬
    • 初めの入会だけじゃなく、継続した場合にももらえる報酬
チューニング
  • 運用コスト下げたい→サーバ台数減らしたい→ソフトウェアチューニング
  • 前にmod_perl必要ないのにmod_perl使ってた
    • 当たり前だけど静的ファイルには使わない
  • Q4Mでワーカー使った処理
    • twitterのstreamAPI
    • AnyEvent::Twitter::Stram使ってる
    • twitterにリンクが張られた時にDBに入ってなければキューに入れる
  • Catalyst必要ないときはHTTP::EngineでWAFもどき
    • それPlackでやりなよ
    • PlackベースのNoe作った
他のtips
  • ec2ならmemcachedでなくファイルキャッシュする
  • DBの非正規化
  • mod_perlの親子間でもメモリ共有
  • 国内でエロサイトができない
    • 国際間リバースプロキシ作ってる

参考(アップされた資料とか)