YAPC::Asia 2013セッションメモ9/20分
感想エントリは別途作成します。
とりあえずセッション中に取ったメモを公開。
後でちゃんと編集します。
乱文でごめんなさい。
Postcards from the Edge: The State of Perl 5 Development
- Ricardo Signes rjbs
- P5 Pumpking
- Perlは昔も今もmess。Don't worry.
- perldeltaに書いてあることの多くは誰の役にも立たない
- %^Hをtieすると…、globにm?..?で代入すると…
- 役にたつことを紹介しよう
What's new
- RegexSets
- (?[..])
- +, -, (), &, \p{..}
- Lexical Subroutines
- my sub adder {} 毎回作る
- state sub adder {} 最初に1回だけ作る → lazy closure creation
- テストで便利
- エラーのときサブルーチン名が出ないけどね
- 名前がlexical scopeなだけで実態はパッケージサブルーチン
Experimental Features
- みんなが使うなら生き残る
- lexical topic: my $_
- fixする
- smart match, given
- fixする
- Hash Randomization
- (?{..}) (??{..})
Fond Farewells
- いくつかのモジュールはなくなった
- Text::SoundEx, Pod::LaTeX, CPANPLUSなど
Perl5
Patches
- ほとんどのパッチは4人からsubmitされてくる
- みんなもっと貢献できる
Hopes and Dreams: Perl 5.20
今時のカジュアルなデータベース関連開発
- @songmu
- カヤック技術部ソシャゲ部
- Riji
Teng vs DBIx::Class
例外処理 - Exception::Tiny
- 例外を階層化しておくと便利
- MyApp::DB::Row::DeleteFailedException
- findとsingleで見つからなかったときに例外を出すかどうか制御
TransactionManager::EndHook
- nested transactionで一番外側のコミットが走った時点で処理したいこと
MySQL以外
- Redis → memcachedが要らなくなった
- キャッシュ用途というよりはミスヒットしないKVSとして使いたい
- SortedSetでお手軽ランキングはよく言われる
- Setが結構アツイ。和・差集合、ランダムに1つ取る、など
- Listをジョブキューとして使う
- Redisの注意点
- Expire設定をしっかりやる
- LRUには期待できない。あふれると結構変なのが消えちゃう。自分でexpireを管理すること
- 冗長化つらい
- Redis.pm
- PurePerlであまり速くない
- fork safeなforkあり
- hiredisバインディングがほしい(EV::Hiredisはある)
- Cache::Redis
- Redis::LeaderBoard
- 同率問題解消のために書いた → みんなやってる処理
- Fluent::Logger
DB設計
- テーブル定義
- ActiveRecordっぽく id定義 (アンチパターンだけど)
- テーブル名の単複変換はキモチワルイ
- インデックスは必要最低限: 複合インデックスあるのに単独も作っちゃうミス
- 外部キー張らない
- バッドノウハウ
- リレーション先のレコードロックが発生したり、不要なインデックスが自動で作られて重複になったり
- 外部キー側のデータも作らないとテスト作れない。そのかわりちゃんと作ってちゃんと確認すると得
- 接続時処理
set names utf8mb4;
set session sql_mode='TRADITIONAL';
-
- TRADITIONALが一番厳密
- mysql_enable_utf8している場合、mb4範囲が化ける
- Unicode6とutf8mb4
- Unicode絵文字時代
- default character set utf8mb4
- 767byte問題 → varchar(191)までしか入らない
- マスターデータ
- 固定データ
- Google spread sheetとかから取ってくる
- マスターデータの整合性検査をきちんとする
- 論理削除を使わない
- 最近はストレージの性能も上がったし、deleteもそんなに遅くない
- ORM
- モデルから呼ぶORMはprivateみたいな感じ。必要なクエリをORMに用意
社内開発簡単化と世界で戦う開発を考える技術
- Inside amon2-livedoor-setup.pl with web application development 2013
- @yappo
Development Framework
ありがちな開発開始手順
ひな形作成のポイント
ひな形作成の失敗・反省ポイント
- ひな形作成スクリプトをコピペするようになってしまった → ふり出しに戻った
- 標準で使いたい機能も差しかえ可能にしたい
- ひな形作り直した!
新しいひな形の要件
- シンプルに
- 同じモノを使ってるならコピペ不要に
- YAPCに向けた誓い
ksgk Knack of the System Generation for Kurouto
よかったこと
- このひな形のこのディレクトリだけ見ればわかるようになった
- 思想と形てはchef, puppetと同じで、最小限のコードレシピを蓄積 → 適用可能性が上がる
SPDY、HTTP/2.0の使い方
- @takesako
firesheep
SPDY, HTTP/2.0
Perlの過去と未来
- Perl - Past and Future
- @tokuhirom
Perl5の歴史
- 1987: Perl 1.0, 1994: Perl 5.0
- 1998: 5.5, 2002: 5.8, 2007: 5.10,
- 5.12以降は1年に1回出る
- cpanmで見るPerlユーザー
- そんな中でも5.10.1を使ってる人が結構多い
- 他の言語だとセキュリティーホールがあって更新せざるを得ないがPerlは意外と行ける
最近のupdate
- say, //, smart-match & given
- my sub hoge, hash randomization
- method signatures, ..., ->@*
- Perl6からのインポートが多い
最近のp5
Rakudo Starは実用に耐えるか?
- say [+] 1..100 → 0.945秒
- The nqp language
- nqp: Perl6のサブセット。Perl6を実装するために作られた言語
- Rakudoはnqpで書かれている。mostly
Perl6 roast
- test suite for Perl6
- test suite for implementations
- JVM, parrotなどのテストケースは最小限しかなく、roastで補う
- 現状、roastをすべて通す実装はまだない!
Perl6 is awesome!?
- いいところもある
- Junction: $var = 3 | 5 | 7
- Perl6::Junction
- Syntax::Keyword::Junction
- MOP, Role
- p5-mop-redux
- Mo[ou](se)?
- slurp/spew
- Perl6::Slurp, Path::Tiny
- Rules
- Regexp::Rules (tokuhirom)
- Reduction operators [+] 1..100
- Hyper Operators: >>*<< zipっぽく
- Cross Operators: X 直積っぽく
Perl6 related hacks
Seis demo
- for 1..12 { .say }
- [+] 1..100
LT 1日目
@kazuho: Using the Power to Prove
- 最近あまりPerlを書いてない
- proveってコマンド知ってる?
- Ext::HarnessのCLI
- TAPで出力される。まとめて表示してくれるのがTest::Harness
- proveを直接たたくと並列に走らせるとか、最近failしたのとか、早く終わるのからやるとかできる
- Perl以外の言語のもできる
- なんで? Perlが#!を読んで実行してくれる
- でもCのバイナリはダメよ
- .provercに --ext '' --exec ''
- t/ に入れておけば prove だけでおk
- サービスモニタリングもproveで可能
- いろんなタスクを実行してくれる
- インストールしなくても入ってる
- TAPを使っているのでどの言語からも使える
@yashims85 ギークな異性を落とす魔法の言葉
@sanemat Tachikomaで依存ライブラリの断続的バージョン上げ
@yappo: I NEEEEEED HTTP::Body::Builder
@hirose31 inspect-perl-proc
@comewalk しげたさん Contributing to open source products
@bayashi 細かすぎて伝わらないモジュール選手権
- CPANモジュール書けばいい。再開発もかまわない
- 心配ならPrePANで聞けばいい
- この1年で26モジュール上げた
- モヒカンなんてこの世にいない
- 俺得で十分
- App::YG mysqlの \G をやる
- Debug::TraceENV ENVの大域変数化をトレース
- Plack::App::DummyBox
- Sub::Sequence 長大なリストをぬるぬるやる → spliceでいいじゃんね
- Log::Stamper
- App::LogStats stats -f7 count/avg/max/min/range を出してくれる
- Benchmark::Confirm 複数モジュールが同じ結果を返すか検証
- Sub::Data::Recursive Encode::Recursiveでエンコードしない部分だけ
@__gfx__:
- Xslate
- Mouse
- Power Assert → Test::Assert
- JS界隈で話題になっていた
- perl.js
- emscripten
- LLVM to JavaScript compiler: kernel & CPUみたいなもの
- これを使ってPerlをJSにコンパイルした → 動いてしまう