fc2ブログ

本を読む

読書やコンピュータなどに関するメモ

pure bashで有理数を合計

 仕事のちょっとした手続きのために、1/3とかの有理数(分数)を合計することになりました。そのときはgoshを電卓がわりに使ったのですが、ついでに、ひさしぶりにpure bashでもやってみました。意味はありませんが。

 スクリプトはこんな感じ。

 これを試します。

$ cat sample.txt
1/2
2
1/3
$ bash rational_sum.sh < sample.txt
17/6

 Rubyで検算してみます。

$ ruby -rmathn -e 'puts eval readlines.join.chomp.gsub(/\n/,"+")' < sample.txt
17/6

 合ってるようです。

第5回ありえるえりあ勉強会に参加

 第5回ありえるえりあ勉強会「Lisp脳」に参加し、LTもやってきました。いちおう資料を貼っておきます。

 プレゼンが私の不手際でいろいろgdgdになってすいません。あと、やっぱりスベりまくった気がします。内容は、「再帰も外部データ構造も使わずにtree traversalする」をEmacs Lispで書き直したものです。

 自分のLTはさておき、Lisp初級者から見たほかの方のトークの感想です。

Lisperの見る世界(深町英太郎)

 Lisp(Common Lisp)の問題点として、実用的なライブラリが弱い(完成度がイマイチ)という話が印象的でした。あと、「Lispの入門とかの簡単な例の紹介は(ブログとかで)あるけど、Lispで実践的な物を作ってみた話がもっと欲しい」というのは、わが身を反省。

Emacs Lisp脳とHaskell脳 ~関数型言語ってなぁに(山本和彦)

 オブジェクト指向はいろいろな要素があって人ごとに指すものが違う、という話から、関数型言語もいろいろな要素があって人ごとに指すものが違う、でEmacs Lispは? みたいな話になって、Haskellを例に関数型言語を紹介するセッションでした。脇筋では、途中のforへの(かつての?)こだわりがウケてました。

Lisp脳とかやめよう(佐野匡俊)

 自由連想的に、ご自身がCommon Lispを使う理由をいろいろ考察していました。結論は、「人の脳の中身の分析とかやる時間があったらlispでコードを書くべき」と。あと、"="を使った代入式を実現するマクロをライブコーディングしてました(未完?)。

LT:C++が仲間になりたそうにこちらを見ている(藤田)

 C++で関数型言語っぽい書き方をするという話。pstave ovenライブラリを使って山本さんのサンプルを似た書き方で再現していました。

LT:ClojureとEPUBと俺(deltam)

 Clorejureを使ってEPUB(電子書籍はバズワードだから禁止)を作る話。背景として、「プログラムを書くのになぜ小説を書かないのか」「みんな物語っちゃえば」ということで、みんなが小説を書いて手元に配信されるプラットフォームがやりたい、というあたりが興味深いところでした。そのプログラムがMOONGIFTでも紹介されたのだとか。

「Q.E.D.」37巻、「C.M.B.」15巻

 毎度発売が待ち遠しいミステリー漫画シリーズ2つ。ここのところ、同時発売が恒例になってる。

 以下、ネタバレは含まないようにしてるつもりだけど、念のためご注意を。

 「殺人講義」は、プロファイリング講座と、その中で起きた殺人の話。自分もプロファイリングを魔法みたいに思ってたけど、「プロファイリングは"確率論"です」というあたりの説明がへぇだった。トリックは、その発想はなかった的な大胆さが面白く、ちょっとブガッティ・ロワイヤルの話を連想した。

 「アニマ」はアニメ業界残酷話。切ないな。

 「アリアドネの糸」はミノタウロス像ねた。携帯とか芸が細かい。

 「魚釣り」は、学校の仲間シリーズ。環境問題のルールの話がへぇ。

 「スタン」では、森羅君の2人目の「父親」が登場。「森の精霊」の話で回想シーンに出てきた父親はスタンだったのかな。ラストシーンが、ちょっとイイ感じ。

 「キルト」は切ない話。この展開には、森羅君もいつものキメゼリフを出せず。

あれでいいよ。お前よくやったよ。

「日経Linux」2010年11月号

日経 Linux (リナックス) 2010年 11月号 [雑誌]

日経BP社 (2010-10-08)
売り上げランキング: 1558

 Red Hat Enterprise Linux 6特集をRed Hatの平さんが書いていて、KVMの技術解説連載をVALinuxの山幡さんが始めてる。これは見逃せない。

 ほか、無線LANルーター自作特集はWDSまで対応。Androidアプリ入門特集は、ビジュアルに見せているのが面白いな。特集3はLFSのサブセット。トラブルシューティング連載はSystemTapの使い方。Matzさんの連載は、メタプログラミングRubyから始まってLispの基礎の話になってる。

Shibuya.lisp Hackathon #1でJGit+Clojureをいじった

 Shibuya.lisp Hackathon #1に参加してきました。各言語ごとで島を作ってわいわい(またはもくもく)やる中、私はClojure島に参加してました。

やったこと

 Javaによるgitクライアント実装のJGitをClojureから使おうと試してました。

 野望としてはWebベースのgitリポジトリブラウザでも作れればと思っていたのですが、全然そこまでは行きませんでした。

準備

 leiningenで "lein new hoge" とかやってプロジェクトを作成。で、project.cljにJGitのリポジトリを追加。

  :repositories {"jgit-repository" "http://download.eclipse.org/jgit/maven"}

 dependenciesにもJGitを追加。

                 [org.eclipse.jgit/org.eclipse.jgit "0.9.3"]

 SLIMEを使う場合には、:dev-dependenciesでlein-swankも追加しておきます。

 あとはlein depsを実行してから、lein swank+SLIMEなりlein replなりでREPLを実行。

はまった過程

 結論だけ読みたい人はこのセクションを飛ばしてください。

 まず困ったのが、公式サイトにドキュメントがないっぽいし、jgitの.jarにもドキュメントがないこと。Clojure島の人に相談して、ソースをgit cloneしてjavadocでリファレンスを作りました。

 で、org.eclipse.jgit.api.Gitクラスのインスタンスでgitコマンドの操作をできるらしいということがわかり、まずは参照系としてgit log的なことをやってみようかと。

 ここからがハマりどころ。

  • org.eclipse.jgit.api.Gitのインスタンスを作りたい
    • コンストラクタの引数にorg.eclipse.jgit.lib.Repositoryのインスタンスをとるらしい
      • org.eclipse.jgit.lib.Repositoryのコンストラクタの引数にorg.eclipse.jgit.lib.BaseRepositoryBuilderのインスタンスをとるらしい
        • org.eclipse.jgit.lib.BaseRepositoryBuilderのコンストラクタの引数にjava.io.Fileのインスタンスをとるらしい
          • java.io.Fileのインスタンスを作った
        • org.eclipse.jgit.lib.BaseRepositoryBuilderのインスタンスを作った
      • org.eclipse.jgit.lib.Repositoryのnewがエラー(対応するコンストラクタがない)になる
      • Baseってついてるのはダメかなと思って、org.eclipse.jgit.lib.RepositoryBuilderにしても、やっぱりダメ

 しょうがないので、org.eclipse.jgit.lib.Repositoryのソースを見てみました。

 …"public abstract class" って宣言されてる…JavaDocなドキュメントを見返すと、確かにそこにも書かれてた orz

 org.eclipse.jgit.lib.Repositoryの継承クラスを調べると、org.eclipse.jgit.storage.file.FileRepositoryというのがありました。java.io.Fileをとるコンストラクタがあるので簡単そう。

 →成功。ここまででだいたい16時ぐらい。

使い方。

 まずimport。

user> (import '(org.eclipse.jgit.api Git))
org.eclipse.jgit.api.Git
user> (import '(org.eclipse.jgit.storage.file FileRepository))
org.eclipse.jgit.storage.file.FileRepository
user> (import '(java.io File))
java.io.File

 で、FileRepositoryクラスのオブジェクトをGitのnewに渡すと、Gitクラスのオブジェクトができました。".git"ディレクトリを指定するのに注意。

user> (Git. (FileRepository. (File. "/path/to/repo/.git")))
#<Git org.eclipse.jgit.api.Git@1e852be>

 Clojureらしく->を使うと、こうかな。

user> (-> "/path/to/repo/.git" File. FileRepository. Git.)
#<Git org.eclipse.jgit.api.Git@3f4a21>

 とりあえずdefしておきます。

user> (def git (-> "/path/to/repo/.git" File. FileRepository. Git.))
#'user/git

 git log相当の操作をしてみます。".."を使ってメソッドチェーン。

user> (.. git log call)
#<RevWalk org.eclipse.jgit.revwalk.RevWalk@601f3f>

 戻り値はシーケンスのようです。ためしにtakeで先頭の3要素を取ってみます。

user> (take 3 (.. git log call))
(#<RevCommit commit 7fe4cc728ae509ba48e48ae111cb32d6311bebc0 1271268189 ----sp> #<RevCommit commit 4d905b1b6cbc3709618c8706d5af910922adc49d 1270661391 ----sp> #<RevCommit commit a889cc92f2cbb97a138a282d700e02e26c9d600e 1270661330 ----sp>)

 それぞれのコミットはRevCommitのインスタンスのようです。HEAD、つまりシーケンスの最初の要素をとって、コミットメッセージを取得してみます。

user> (. (first (.. git log call)) getFullMessage)
"use Key in get-prop\n"

 文字列として取れました。

 ここまでで時間終了。

Emacs Lispの空文字列は1つだけ

 コネタ。

emacs-version
"23.1.1"
(eq "" "")
t

 へー。infoの「Equality Predicate」で確認。

          (eq "" "")
               => t
          ;; This exception occurs because Emacs Lisp
          ;; makes just one multibyte empty string, to save space.

 Emacs 23からかな。

YAPC::Asia Tokyo 2010 2日目に参加

 Perlのイベント、YAPC::Asia Tokyo 2010の2日目に参加してきました。初日と同じく楽しく、あっという間の1日でした。あとLTレベル高くて面白いなぁ。

 以下、ほぼメモそのまま。

How Xslate Works (gfx)

  • 次世代テンプレートエンジンXslateのしくみ
  • Xslate
    • テンプレートエンジン
    • XSで書き始めた
      • makamakaさんがpure perl版も作った。XS版の速度は出ないけど
  • 特徴
    • 速い
    • 複数の構文。TT互換など
    • エラーが親切
  • なぜ
    • テンプレートエンジンはすでにたくさんある
      • TT互換のものも
      • Text::MicroTemplateも最近人気
    • どれも一長一短。完璧なものはない
      • TT2:機能が高い。すごく遅い、複雑すぎて同じことがいろいろな書き方になる、XSS
      • HTML::Template::Pro:速い、機能も必要なものに制限、Perlインターフェイスが使いづらい、貧弱、XSS
      • Text::MicroTemplate:十分速い、依存がらみがインストールしやすい、XSS対策、なんでもできすぎる、Perlプログラマ以外には使いにくい
    • Xslateではこれらの問題をなくす
  • Text::ClearSilverに影響を受けた
    • ClearSilverのPerlバインディング
  • Text::Xslate
    • 既存のものよりはベター
    • CPANでは一番速い
    • 安全性
  • 使い方
    • Text::Xslate->new()->render()
    • new()したインスタンスを再利用すると高速化
    • render_string()は遅い。サンプル向け
    • 行頭":"でテンプレート
    • #でコメント
    • メンバー参照は"->"じゃなくて"."
    • 依存は多い
    • xslateコマンドも入る
      • コマンドラインのときだけARGVが使える
  • ver 0.2010 さきほどリリースした
  • エラーのとき、該当個所とその前後の行を表示
  • -s TTerse でTT互換
  • TTの100~158倍ぐらい速い
    • Sam Grahamのレポートによると最速
      • キャッシュが効いていれば
  • XSS対策
    • 自動的にHTMLエスケープ
      • 値にエスケープされたかどうか表すフラグを持たせる
      • Text::MicroTemplateインスパイヤ
      • "| raw"もあるが、使わない方がいい
  • Multi-syntax
    • Kolon:デフォルト
      • いちばん最適化される
    • TTerse:TT互換
      • 強い要請により
      • TT2より制約が強い。サポートしていない機能も
      • Kolonに近いデキに
      • いまあるTT2のテンプレートを置き換えるのは苦しい。新規なら
    • Cleery:Smarty互換
      • あまりがんばってない
      • 配列やハッシュの扱いの違いでオーバーヘッド
  • Template cascading
    • テンプレート継承
      • Djangoから
    • いい感じ
    • Kolon専用
  • しくみ
  • 「私のほかにメンテナンスしたりできる人がいればいいなと思って、内部構造の話をしています」
  • Perlの中でXslateのVMが動く
    • テンプレートをいちどプログラミング言語ふうに変換
    • それをパースしてコンパイルして実行
    • パーサーは手書き
      • "Beautiful Code" のTDOPを参考に
      • 継承もできる:Kolon→TTerseで利用
    • symbol
      • std、ud、led
  • バイトコード
    • 保存できる
      • 重要
    • MessagePack
  • 速い理由
    • バイトコードの最適化
      • 定数畳み込みなど
    • 仮想マシン
    • Direct Threaded Code
    • HTMLエスケープ内蔵
      • 重要
      • テンプレートの実行時間は、実はこれに食われている
      • memcopy()に近い速度
    • 前回をもとに展開サイズを想定するのが効いている
  • WEB+DB Press Vol.59(10月発売)で記事
    • 使い方を中心に
  • Q: VM採用の理由。Perlのコードにする方法をとらなかった理由
    • A: Perlはテンプレート以外の処理もある。スコープの処理とか。Xslateはテンプレートに特化。文字列連結も速く、それがHTMLエスケープ高速化に効いている
  • Q: VMでPerl 6を実装できる?
    • A: できない。テンプレートに特化していて、変数の処理など簡略化しているので、普通の言語を実行するのは難しい
  • Q: ほかの言語からのバインディングは
    • A: あまり考えていない。Perl APIと密結合。移植が必要

Perl 5 is Alive! (Jesse Vincent)

  • 「スピーチ中に@obraにTweetしてみて」
    • (画面にTwitterから拾ったニコ動ふうのテロップが…)
  • "Pumpkin"
    • あとで説明する
  • Perl 5は16才
    • 「Perlは終わった」なんて勘違い
    • CPANにはおもしろいコードがたくさん
      • Moose - postmodern OOP system
      • Plack
      • cpanm
      • AnyEvent - このテロップでも使ってる
      • Devel::NYTProf
  • 6か月前
    • Perl 5.12
    • 致命的なバグは報告されていない
    • Happy
  • Perl 6は?
    • 別の言語
    • 設計、開発中
    • 「次のクリスマス」
    • 2010.7.29 rakudo.org
  • Perl6はすごい
    • これからはPerl6の時代だけど…Perl 5の時代でもある
    • 姉妹
    • 父親は同じですw (Larry)
    • 「5とか6とかはLarryの脳のバージョン」
    • Perl 6はPerl 5のかわりにはならない
  • 5.12の新機能
    • use 5.12.0; # use strictされる
    • 廃止されたものの警告
    • suidperlは死んだ。sudo使おう
    • package Foo::Bar;
    • 2038年問題対策
    • Unicode 5.2対応
    • プラガブルキーワード
    • 関数ルックアップをオーバーライドできる
    • Dtraceサポート
    • コアから削除されたモジュール
      • Switch、Shell、Class::ISA、Pod::Plainer
      • CPANにはある
    • yada yada ... 演算子
    • ほかperldoc perl51200delta
    • 多くは5.10.1にも
  • 新しいPumpkin
    • Pumpkinってなに?
    • Pumpkin King:かぼちゃの持ち主
    • ローテクな排他制御
      • トークン
    • 20年前はVCS使ってなかった
      • VCSを使ってないと、おかしな仕事を子供に教えなくちゃならないw
  • 5.10.0
    • 5年かかった
    • 2人のPumpkinが燃え尽きた
  • 5.10.1
    • メンテナンスリリース
    • 2800コミット
    • 2600ファイルの変更
    • 35万行の変更
    • 最新版のほとんどが5.10.1に
    • "don't break anything"
    • ひとりでこなす?
    • 「メンテナンス」リリースw
  • やることいっぱい
    • ハードコアCハッカー、パッチをあてる人、リリースエンジニア、言語デザイナー、PM…
    • そんな人そんなにいない
  • 歴代のPumpkin
  • 今は私
    • 燃え尽きたくはない
  • これまでは
    • CPUやOSやコンパイラを知り尽くしたハードコアハッカー
    • 強烈な責任感
  • 最高のハッカーをつれてきてマネージャーをやってもらう、という方針?
    • 才能の無駄遣い
  • 複数のバージョンでPumpkinをやった人はいない
  • システムに問題がある
    • 一から作り直す?
    • でもこれからはPerl 6の時代
    • ではリファクタリング
  • 私はハードコアCハッカーじゃない
    • パッチをあてる人、リリースエンジニア、言語デザイナーなどは、ほかの人にやってもらえばいい
  • 私がやること
    • 趣味の問題の裁定
    • 議論の裁定
  • 5.11、5.13 開発版
    • 短い期間でマイナーバージョンが進んだ
    • 毎月リリース
    • 5.11.0のリリースは4日しかかからなかった
    • マイナーバージョンはそれぞれ違う人がリリース
    • 開発版のリリースには数時間しかかからない
    • 手順は明文化された
    • "bleed" releaseでも安心して使える
    • 既存のものを壊すことはある
    • バグレポート
  • メンテナンス版に含める変更点は最小限に
    • 移植性の問題
    • ドキュメント
    • クラッシュ
    • セキュリティパッチ
  • メンテナンス版でやらないこと
    • メッセージ変更、
    • 機能廃止
    • CPANモジュール
    • 新機能
  • 5.12.1、2…
    • バグフィックス
    • 3か月ごとにリリース
  • 5.14
    • 2011.4.20
    • 例外機構の信頼性向上
    • package Foo { } スコープ
    • パフォーマンス
    • メモリ使用率
    • あとはわからない
    • ほしいもの
      • ASTのラウンドトリッピングの改善
      • CPANモジュールのインストール改善
      • HTTPクライアント
      • IPv6
      • SSL?
    • なにがほしい?
  • まず5.12を試す
    • perlbrew ホームディレクトリ下にPerlをインストール
  • Q: Uniccode 6.0は
    • A: 動きはある。問題はいまとの互換性
  • Q: 速くリリースするのはいいが、Linuxディストロとかはテスト期間の問題がある
    • A: 話をしているUbuntuに関していうと、11.04に5.14を入れることは可能と考えている。できるだけ新しいPerlを入れてほしい。が、リリースされたばかりのは避けてほしい
  • Q: JSON::PPがコアモジュールになると聞いたが、JSON::XSがコアモジュールにならないのはなぜ?
    • A: コアには、ほかのモジュールをインストールするための最低限なものを入れて、あとはCPANで。JSON::PPはシンプル、ポータブル。必要なのは動くもの、super fast JSON supportはCPANで。

Perlで自然言語処理 (overlast)

  • 元blogWatcher ver.3の開発メンバー
  • スライドは飛ばします
  • 自然言語処理とは
    • NLP
    • 人工知能+言語学
    • 統計学
    • Google日本語入力とか
  • 必要な知識
    • 言語
    • プログラミング
    • できれば確率・統計
  • 勉強のはじめかた
    • 日本語の教科書
      • 「自然言語処理の知識」(奥村学)など
      • 生駒日記を半年ぐらい読む
    • 英語の教科書
    • 勉強会・研究会・学会
    • ほか
      • 「集合知プログラミング」など
  • 簡単な方法からやって、洗練する
    • 簡単で効果のある技術から
  • 機械はミスする
    • 最初は夢をみがち
    • 人間のほうが優秀
  • 日本語の口語テキストは難しい
    • 形態素解析
  • データは自前で集めて自前で持つ
    • 自然言語処理はメインではない
    • 時間をかけられない
    • ローカルで
  • 自然言語処理は最初は簡単
    • MeCab+カウントとか
    • 次にアルゴリズムを考える
  • 課題
    • データの獲得
  • Webサービスにありがちな悩み
  • WebAPIを使って悩み解決
  • ユーザーの回遊性をあげる
    • レコメンド
    • 例 Twitterのおすすめユーザー
    • 協調フィルタリング
    • Algorithm::NaiveBayes
  • データはあるけど検索できない
    • 検索機能をつける
  • 正規化、名寄せ、データクレンジング
    • 電話番号っぽい数字
  • アンカーテキストでユーザーの回遊性をあげる
    • キーワードリンク
  • ユーザーが全アイテムをみてくれない
    • ランダム表示、ログ
    • N本腕バンディット問題
  • ソートの方法を変える
    • 利便性に直結
    • 機械学習技術で並び順
    • Algorighm::SVMLight
  • 文書分類
    • サンプルからモデルファイルを作成
    • 事前に何個に分けるか考えて、素性でラベル付け
    • Text::Bayon

「映画にでてくるハッカーになりたい」(cho45)

  • 最近はScalaが好き
  • DSi Browser JSの実装に詳しい
    • textareaでキャレットを表示させる裏技
  • Text::Xatena はてな記法
  • git-branch-recent 便利
    • デモ
    • 顔文字プロンプト
  • 映画にでてくるハッカーの例
    • よくわからない暗号を解くとか
    • いい意味でも悪い意味でも鳥肌
  • ハッカーっぽいツール
    • tail -f
    • でもそれは動体視力w
  • 可視化
    • tail -f | realtieresponsegraph.pl
    • グラフに
  • はてなではログをHadoopで解析してグラフをはてなフォトライフにあげている
    • 1日かかる
  • リアルタイムで
  • デモ
  • use OpenGL;
  • select();
  • 機能
    • グルーピング
    • Apacheのログフォーマットのパーサー
  • もっとハッカー的なこと
    • すごい可視化
    • realtimeaccesstrach..pl
    • デモ
    • ユーザーごとのアクセスを図に
  • さらに
    • 原点にかえって
    • tail -fは画面に何か流れてカッコいい
    • Devel::KYTProf
    • memcachedやDBのクエリとか
    • デモ

History tells us ある連載の舞台裏 (charsbar)

  • 「自分のスライドには日本語を入れ損ねました」
  • gihyo.jp連載「モダンPerlの世界へようこそ」
    • なぜ連載を始めたか
    • 現在36回
    • ギークにはスルー
    • もめごととかの話が多い
  • 経緯
    • Mojo、Mojoliousの連載が終わったときに「モダンPerlでなにか」のオファー
    • 隔週
    • ニュースとかトレンドとか
  • モダンPerlとは
    • 20世紀のPerl以外のもの
    • 古いPerlを打ち切るためのBuzzward
    • ourとかwarningsとか
    • Modern::Perlというのもある。5.10以上
  • いいPerlを使いたい
    • Perlは後方互換性を重視
    • 古いPerlを使う理由があるのでそれはそれでいい
    • 新しいPerlを使いたくなったら
    • みんなで直していきたい
  • 建築
    • モダニズム:すっきり、機能重視
    • ポストモダニズム:
  • スーツのPerl vs. ギークのPerl?
  • 広くとった企画に
    • ネタリストを出した
  • それをどうやって見せるか
    • tokuhiromさんのブログは早くていい内容
    • それには勝てない
  • ギークの流行は変化が早い
    • 今年のYapc::AsiaはMoose、Catalyst、DBICなどのネタない
    • それとは違うところで
  • ギーク向けに特化しない
  • 入門チュートリアル?
    • POD等充実している
  • 日本人が関与しているプロジェクトは本人が紹介してくれるからやらなくていいかな
  • では何を書くか
    • キレイなコードは重要だけど、それだけじゃない
    • Modern Perlとして共有する
  • 仕事を得るため
    • Perlへの偏見
    • 古い人と新しい人は問題ない
    • Perl/CGI世代、ITバブル世代の人がPerlに偏見
  • 偏見を払う
    • 10年前との比較も入れる
    • いいことも悪いことも入れて、偏見を持つ人に聞いてもらえるようにする
  • Perlでは古い情報がWebで多い
    • ググるよりCPAN
      • 検索Tips AllじゃなくてDistributionやModuleで絞る
      • Changesで更新状況
      • MANIFEST
      • POD
    • backPAN
      • CPANにもうないモジュールのバーオン
    • YAPC::*などのイベントのサイト
    • 各プロジェクトのサイト
      • noc.perl.org
    • メーリングリスト
      • MarkMail
    • IRC
    • irc.perl.orgの一覧
    • ブログ
  • 1本の記事のために調べるのに1週間ぐらいかかったり
  • 歴史を調べることでいろいろなことがわかる

Let's database testing!! (xaicron)

  • DeNA
    • DeNAでは生DBIをゴリゴリやってる
  • DBのテスト
    • マッチしない
    • 文字化け
    • updateやdeleteの対象が間違え
    • triggerミス
  • MySQL
  • 鉄則
    • ローカルでテスト環境
      • データが変わるとテストにならない
    • 同じDBMSで
  • 流れ
    • Test::mysqldでクリーンなmysql
      • newするだけ
    • Test::Fixture::DBIでテストデータをつっこむ
      • データをYAMLにはきだすスクリプトも
    • テスト
  • DBIを使うときに便利なもの
    • SQL::Abstract
    • DBIx::DBHresolver
      • 複数のDBに接続するのに便利
    • DBIx::Connector
      • dbhを局所化できる
  • テスト
    • SELECTした値が正しいかチェック
    • INSERTのテスト
    • ほか
  • Test::mysqldの問題点
    • 毎回起動させると時間がかかる
    • Makiさんがブログで回避策を公開
    • モジュール作った
    • socket指定して接続

Perl6正規表現プログラミング楽土入門 (takesako)

  • (emasakaは遅れて参加)
  • Perl6
    • sigilの扱い
    • if や whileの () を省略できる
    • Neko Operator(範囲演算子)
      • 1^..^5 # 2~4
    • ZIPでくれ → zip
    • <==、=>
      • シェルのパイプみたいな処理の流れ。逆向きも
    • // 演算子
      • Cではコメント
      • JSでは//は正規表現? コメント?
        • コメント
  • 正規表現 5→6
  • 繰り返しと選択は同じ
  • マッチ演算子
    • =~ → ~~
    • 左右どちらでもよい
  • 修飾子
    • /m廃止
    • \A \zの廃止 ^と$に
    • /xがデフォルト
    • スペースは <' '>で指定
    • /eが廃止、/{code}/で
    • m/pattern/i → m/:i pattern/
  • キャプチャ
    • \1, \2 → $0, $2
      • 「ドル決済でゼロスタート」w
    • (?:pattern)) → [pattern]
    • → <>
    • [^] → <-[]>
    • <space>など
    • 変数展開 /$var/x → /<$var>/
    • リテラル展開 \Q$var\E → <'$string'>
    • マッチ失敗 {fail}
  • Perl 5互換の正規表現もあるが、まだRakudo Starで実装されていない

省サーバ運用 (nekokak)

  • 「ゆるい話」
  • 小さなWeb系の会社で一人システム開発部
    • インフラから開発まで
    • それまでは外部
  • 「大規模サービス技術入門」
    • いい本だけど、自分たちの仕事に必要か?
    • 1,000台以上のサーバー?
  • NoSQL
    • はいはい
    • その前にRDBMSのチューニングとか
  • カンファレンスで大規模な事例
  • 最新技術のキャッチアップは悪いことではない
  • 落ち着こうよ
  • 「情熱プログラマー」を読んで考えた
  • 大企業で働くとわからなくなることがある
    • 自分の仕事でどのぐらいの利益をあげているか
    • サーバーの運用費用はどれぐらいかかっているか
  • 一人システム開発部
    • インフラから
      • IDCの選定、サーバの選定
      • オフィスはマンションぐらいの規模
      • 法定停電
    • やったことない
    • 前職では言えばサーバ使えた
  • インフラは地味
    • 下っ端あつかいされがち(な気がする)
  • ちなみに保守も地味
    • 動いて当然とされる
  • これからのエンジニア
    • 開発能力はもちろん
    • インフラへの理解
    • 利益やインフラ費用を意識した開発
  • 「ここからエンジニアリングの話」
  • 構成
    • サーバ6台、1/2ラック
  • サーバ6台
    • がんばって勝ち取った
    • DB×2、Web×3、開発×1
    • メモリDBで8G
    • 「メモリは最低16GB」という声にはカチンときた
  • MySQL
  • LBにPerlbal
    • 安定性
    • Perl製。必要ならプラグイン書ける(実は大変)
  • なぜnginxじゃないのか
    • x-reproxy-cacheさせたい
    • 対応したらnginxにいくかも
  • Perlbal
    • シングルスレッドのソフトウェアLB
    • SSL使える
    • 自分のノウハウ
    • Webサーバー機能も
  • AppサーバーはStarlet
    • Apacheは好きじゃないので
    • kazuho製で安心感
  • PHPのコードをPerlに書き換えた
  • あるとき、ユーザのアップロードした画像を管理することに
    • htdocsに置く?
      • サーバーが複数
      • rsync?
      • ないわー
    • DBのBLOB?
      • Web 1.5
    • MogileFS?
      • おすすめ、Web 2.0
  • MogileFSを使うには
    • フロントのサーバーがx-reproxyヘッダを解釈
    • データ管理用にMySQL
    • 分散管理するには物理的に2台以上のサーバー
      • でもアプリケーションサーバに同居はやりたくない
  • 将来はMogileFSとして
    • MogileFSに移行しやすい形に
    • ファイルの分散管理はミドルでなくていい
  • MogileFSのしくみ
    • x-reproxyヘッダを付けて返す
    • キャッシュされる
  • MogileFSの部分を静的配信サーバーに
    • x-reproxyの先をPerlBal自身に
  • サーバが増えた場合は、バックエンドをMogileFSにすればいい
  • エンジニア急募の時代→飽和→とんがった技術力じゃないと厳しい→コスト意識を持ったエンジニアもウリに?
  • Q: コストは見える。利益は事前にわからないのが難しい。どう意識しているか。
    • A: うちの場合、事業計画や、プロジェクトの目標やコストの見込みを全員で共有している。一人で上げた計画を全員で詰める。ただ詰めすぎもよくない
  • Q: 開発者でない人に理解してもらうためには
    • A: 難しい。説明して理解してもらうしかない
  • Q: 監視とか24時間体制
    • A: 一人。tokuhiromのApp::Mati(?)を利用して監視して異常を携帯に通知
  • Q: 専用レンタルサーバとかを使わなかった理由
    • A: 個人的には、自分で見ていないサーバーを信用したくない。インフラを自分で把握。自分でサーバーを設置してわかったこともある
  • Q: それでコストがかかる可能性も
    • A: 営業を受けた範囲では、レンタルサーバもあまり安くなかった
  • Q: 8GBメモリというとデータ圧縮の必要も出てくるのでは。InnoDBの圧縮プラグインとか。MogileFSではどうするか
    • A: うちの規模では問題ない
  • Q: 今後、人が増えたら
    • A: 全部扱える人が望ましいが、そのときの状況しだい。少なくとも異常の通知は全員が受けるようにしたい

LT:Top 10s/100s (charsbar)

  • 恒例
  • 日本のCPAN author
    • 1.HIROSE
    • 2.MORIYA
  • (客席のリクエストでいろいろな国ごとをデモ)
  • Douch 0人
    • Acme::CpanAuthor::Douchに事情w
  • 人口一人あたりだと日本は6位に

LT:opts.pm (ふしはらかん)

  • 勝手に後夜祭やります
  • 「以下おまけです」w
  • opts.pm
    • コマンドラインオプション
    • GetOpts 覚えられない
    • 作った
    • 自動変換も

LT:Vim&Perl (c9s)

  • 多くのVim Perlプラグインは古い
    • 補完
    • Perlの文法の変化についていけてない
  • perlomoni.vim
    • デモ
      • Mooseのisaでの補完
      • など
    • githubからインストール
    • Windowsもサポート
  • cpan.vim
    • モジュール名
    • POD search

LT:もっとMySQL (上田智)

  • 規模による要求の差異
  • 小規模なら3層構造である必要はなかったり
  • WebサーバーもMySQLで(え?)
    • HTTP Plugin
    • ストアドでController
  • 今後
    • ストアドでO/Rマッパー w
    • ストアドでPerl→ストアドでCatalyst w

LT:There are so may ways to shuffle it (nipotan)

  • コードレビュー
  • 担当を決める
  • 「シャッフルのお時間」
  • 1. rand使用禁止
    • md5sumの値を16進値
  • 2.
    • zipかっこいい
  • 4. タイムトライアル
    • Fisher-Yates法
    • カーネルモジュールで書いた人
  • 5. 週ごとに使用禁止文字が増えていく
    • dieで出力
  • (早口で途切れることないスピーチ。メモ追いつかない)
  • ライブドアではシャッフルの名人を募集してますw

LT:ページャ実装マニアックス (hakobe932)

  • さまざまなところで使われている
  • はてなの108のページャ実装
  • はてぶ
    • Data::Pageに機能追加
  • はてだ
    • HTMLを直接生成
  • うごめも
    • データを生成する方法をページャに渡す
    • items、next、prevのメソッド
  • ちなみに、ORMにpager_serchをつけたり
  • ページャに関わる要素がいろいろ
    • 対象、基準、性能など
  • (画面にずらずら)
  • うごめも、Merged
    • 複数渡せる
  • うごめも、Arrayref
    • クエリじゃなくてArrayref

LT:(tokuhirom)

  • 手ぶらで
  • 速いHTTPクライアントがほしい
    • RPCとか
    • LWP遅い
    • CURLも最適化の余地ある
  • 今朝新しいの作りました
    • WWW::Curl::Easyより速い
    • デモできないんですが
  • 日本のPerlMongerはそれぞれの得意分野がある
    • 力をあわせればもっと速いのができるんじゃないか

LT:岡山.pm / 都会.pm (かなだまさかつ)

  • 岡山.pm主宰
  • 岡山
    • 「だいたいこんな感じです」(SFふうイラスト)w
  • 2回開催
  • 問題点
    • 人が集まらない
    • いろいろなところで告知
      • 怒られたり
  • 今後の展開
    • 人を増やす

LT:Perl同人誌の宣伝 (まかまか)

  • 飛び込みLT
  • 「Acme大全2010」
    • あまってます
  • 2009とのちがい
    • ダラクが大きくなった
    • 用語集つけた
  • デコシール
    • おでこに貼る

LT:草とPerl (dameningenn)

  • 草植系男子
    • wwww
    • 草キーボード
  • Grass言語
    • 物足りない
  • GrassとPerlとあわせて「Werl」
    • 99% perl
    • 予約後のかわりに草植える
  • デモ
  • 予約後といえばppencode
    • 予約語をwとWにすれば、wとWだけでプログラミング
    • wwencode
  • デモ
    • echo 'Hello YAPC::Asia' | wwencode | werl

LT:Test::Apache::RewriteRules (id:onishi)

  • mod_rewrite
  • はてなでのmod_rewrite
    • ほぼreverse proxy
    • URLで振り分け
    • 異なるURLを書き換えてSquidでキャッシュ
  • 行数がふくれあがる
    • 何百行
    • メンテ大変
  • Test::Apache::RewriteRules
    • Rewrite関係だけのconfを作ってApacheを起動して(system())リクエストを投げる

LT:Facebookを流行らせたのは僕です (yusukebe)

  • ブログに書いた
  • はやった
  • Facebookというより「ゆーすけべー日記」すごい
  • 2001年、HNSではじめた
    • MTに
  • 「Blog Hacks」に遭遇
  • Perlへ
  • スクリプトを公開
    • dankogaiさんに勝手に添削される
      • 一瞬腹立つ
      • でもコード感動
  • 去年のYAPC::Asia
    • ブログを書いた
    • miyagawaさんがコメント
    • CPANのエコシステムについて考えた
  • ライブラリのユーザーも何かやれる
    • PerlCasual始めた
    • ユーザーも表現してみよう
  • Facebookやtwitterではできない

The Tale of Plack (Tatsuhiko Miyagawa)

  • six apart
    • 合併
    • SAY (SAYMEDIA.com)に
    • say perlのビルトイン関数
  • Plack
    • この一年で急速に使われている
    • PSGIとPlackがWikipedia(en)に載った
  • 1年前に開発始めた
    • 開発が急速に進んでいる
    • 今回もタイトルだけでも関係するセッションがいくつか
    • Joyent(node.jsの会社)でもつかわれている
  • Plackの成功要因
  • 1) あるものを模倣
    • HTTP::EngineはCatalystのコードベースにひきづられた
    • WSGIやRackをまるごと盗めばよかった
    • PlackはWSGIやRackをそのまま
      • 名前空間を含めて
  • 2) 後出し
    • WSGI 2003年
    • Rack 2009年
    • 鍋パーティーは遅れたほうがいい感じに煮えてるw
    • 試したことや成功したことや失敗したことがわかる
  • 3) JFDI
    • Just Fuckin Do It
    • やるしかない
    • IRCで2~3時間話して、翌日にできてた
    • やったもん勝ち
  • 4) stfuawsc
    • しゃべってる暇があったらコード書いたほうがいいよね
  • 5) TIMTOWTDIとBSCINABTE
    • Mooseの文脈で出てくる
    • PSGI
    • いろいろ×いろいろの組み合わせに対応
    • 1つのインターフェイスにより、よりいろいろなものができるようになる
  • 6) KISS
    • PSGIはcoderef、arrayyref、hashrefのみ
    • OOのAPIじゃなくてhashref
  • 7) Perlはグルー言語
    • PSGIはグルーインターフェイス
    • いろいろなものが使いたいインターフェイスはみんな違う
    • HTTP::Engineだとアダプターを書かなくちゃならない
    • バカみたいに単純な構造+グルーコード
  • 8) 名前づけ
    • いままでのCPANと違う名前のつけかた
    • 大きなフレームワークは"::"が多い
    • タイプするの面倒、話すの面倒、みんな省略して書くようになる
    • 入るときにわかりづらい
    • Rubyはトップレベルの名前を独自につける。それでいいじゃない
    • 名前で愛着がわく
  • プラス、重要だったと思うのは「人」
    • (世界のカンファレンスでの写真)
    • "Miyagawa rocks"
    • "You guys rocks"
    • Perlは人々のグルー
    • YAPC::Asiaも燃え尽きないようにサステイナブルに
    • 来年も会いたい

Closing Talk (941)

  • みなさんお疲れさまでした
  • 足を痛めました
  • カメラのS90がこわれました
  • 自己紹介
    • ライブドア 開発部
    • 一番好きなライダーはキバ
  • ぼくとYAPC::Asia Tokyo 2010
    • いけべさんに呼ばれて行ってみたらJPAの理事会だった
    • 「やるの厳しい」
    • カヲル君w
    • 「じゃあ俺やりますよ」とつい
    • カジュアルに丸投げ
      • 孔明の罠
  • 今回はスポンサがたくさんついた
    • 豪華な景品も
  • 謝辞
    • 東工大
    • キーノートスピーカー
    • スピーカー
    • Per Hackers
    • ボランティアスタッフ
  • ベストトーク賞発表
    • エンターテナー賞
      • 「映画にでてくるハッカーになりたい」cho45
    • 次点(口ドラムロール)
      • 「省サーバ運用」nekokak
    • 投票者賞
    • ベストトーク賞
      • 「モダンPrl5環境について」tokuhirom
  • YAPC::Asia 2011でお会いしましょう
  • 来年のスピーカーはあなたです

YAPC::Asia Tokyo 2010 1日目に参加

 Perlのイベント、YAPC::Asia Tokyo 2010の1日目に参加してきました。なんというか、楽しく話を聴いて、あっという間の1日でした。2日目も参加します。

 なんとなく、LL系大型イベントの中でも、実サービスのインフラに近い部分の工夫の話が多いような気がしました。

 以下、ほぼメモそのまま

あいさつ(Daisuke Maki)

  • 今年のテーマ「Welcome Perl」
    • 過去とか未来とか話を聞きたい
    • ハッカーの人は新しく来た人たちをWelcomeしょう
    • Perlの輪を広げたい
  • 今回はエンジニアじゃない人(941)がやっている
    • パチパチパチ
  • 518名参加登録
    • 世界でいちばん大きいYAPC
  • スピーカー投票
  • 懇親会
  • AndroidとiPhone用のYAPC::Asiaアプリ
  • loctouchでイベント限定シール
  • スポンサー23社

That Goes Without Saying (or Does It?) (Larry Wall)

  • (Ubuntu使ってた)
  • "must" / "must not"
    • 英語は許可を、日本語は禁止をいうのが得意w
  • must say(書かなくちゃならないこと)から見たプログラミング言語比較
  • RMS(Root Mean Square:二乗平均平方根)
    • どこかのwikiでの説明をひく
    • いろいろなプログラミンング言語での例が載っている
  • Perlの場合
    • eazy
  • Oz
    • いろいろ違う
    • funいっぱい、でもendで終わるw
    • declare … in
    • {}がいっぱい
      • PicoLisp、Schemeはstrangeな()だらけ
    • FoldL
    • Number.'+'、List.Number
    • Map 値 関数
  • Perl
    • sigilが多い
    • {}
    • ()が必要なときと必要ないときと
    • 1..10
      • Perl 6では 1.2.3もOK
    • ここまでbuilt-in Perlのみの例。Perl 6でも通る
  • use List::Util qw(reduce);する
    • reduceで集計部分を1行に
      • 謎の$a、b
      • 初期値の0
  • Perl 6の場合
    • reduceは内蔵
      • [+]
    • my @nums = @_相当
      • 仮引数宣言
      • sub rms(*@nums)
    • mapと*
      • メタオペレータに
      • @nums X** 2
      • ベクタ演算
      • GPUとか使うと速くなるかも?
    • 変数宣言して1回だけ参照
      • そのまま式として展開(6は関係ない)
    • print … "\n"
      • sayに
    • +前置は数値コンテキスト
    • これで4行になった
  • PureBasic
  • Perl 6からPerl 5へ
    • 入ってるもの
      • say、スマートマッチ、given/when、Moose
    • やるかも
      • X** (Meta Operator)
      • := (binding operator)
    • やらないこと
      • マルチメソッド
      • コンテキスト
  • Ada
    • 長い
    • Pascalに似ている
    • withやuseで指定する名前がかなり長い
    • begin … end
    • for p in nums'Range loop … end loop
    • array(1..10)
    • list := (1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0)
  • Java
    • Adaのコードに似ている
    • 「恐い」
    • import java.lang.Math …なぜ?
    • public class RMs …なぜ?
    • public static
    • 型宣言
    • for ( ; ;)
    • Math.sqrt、System.out.printfのような前置
    • double[] nums = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
  • JavaScript
    • だいぶ違う
    • function?
    • array.reduce
  • Perl 6のワンライナーで実演
    • [+]() 0
    • [+]() 1
    • [<]() Bool::True
  • Python
    • import __future__
      • pythonはfutureを持ってないのでimportするw
    • 行頭のスペース
    • range(1,11)がPerlの1..10
  • PostScript
    • 酷いw
  • Mathematica
    • 一発w
  • APL
    • チートw
  • RMSのコードが「大きすぎる」言語、「小さすぎる」言語
    • Perl 6はちょうどいい
  • spiral matrixをPerl 6で
    • #!/usr/local/bin/prl6
    • class
    • MAINをmulti methodで
  • Zig-Zag matrix

Introduction to CloudForcast (kazeburo)

  • インフラエンジニア
    • mixi → ライブドア
  • yokohama.pmの話のやきなおし
  • CloudForcast
    • リソースモニタリングによりシステムの可視化を行うツール
    • PDCAサイクル
      • 監視=C
  • 監視の種類
    • 稼働監視(死活監視)とリソースモニタリングの2種類
    • 稼働監視
      • 例外を通知
      • Nagios、monit、データホテルのサービス
    • リソースモニタリング
      • 変化を見える化
      • キャパシティプランニングに
      • Cacti、Ganglia、munin
      • CloudForcastも
  • CloudForcastの特徴
    • Perl
    • RRDToolでグラフ化
    • 非常に高速
    • Gearmanによる分散処理
      • 大規模環境でも
    • 表示用Webサーバー内蔵、デプロイ簡単
  • Gearmanのワーカー
    • fetcher worker、update worker
    • fetcherを自由に増やせる
      • 並行アクセス
  • ライブアでの利用例
    • CloudForcastサーバー 1台
    • 対象サーバー 1,200以上
    • 対象リソース 5,000以上
    • 1度の巡回 30秒ちょっと
  • インストール
    • githubからclone
    • 設定ファイルのサンプルをコピー(YAM)
      • グループ名
      • 監視項目を別の設定ファイルに(YAML)
      • 対象サーバーを1行で。追加も簡単
    • 標準で入っているリソース定義モジュール
      • Httpd、Disk、Traffic、MySQLなど
      • PerlのWebアプリで必要になりそうなもの
  • 起動
    • Gearmanを使わない場合
    • 巡回デーモンとWebサーバーを起動
  • Web画面
    • ダブルクリックとかの隠し機能も
    • グラフ
    • 詳細情報表示
    • バージョン情報や設定情報など
  • 自作プラグイン
    • sie-libに
    • Gearmanのキュー数の監視の例
    • ポート7003でステータスがとれる
    • RRDスキーマ定義
      • COUNTER:累積値
      • GAUGE:その瞬間の値
  • グラフ設定
  • データ取得関数
    • my $c = shift
    • スキーマの順の配列を返す
      • なのでHashじゃない
      • とれなかったときはundefを
  • 代表的なグラフ
    • ApplicationサーバのCPU使用率
    • DBサーバのCPU使用率
      • IOWAITが見える
    • Applicationサーバのメモリ使用率
      • Disk Bufferはログ
      • ログローテートによる再起動の影響
    • DBサーバのメモリ使用率
      • InnoDBのbuffr_pool
      • swap
        • vmstatでswap inとswap outをチェック
    • memcachedサーバのTCP接続数
    • Apache Status
      • プロセス数一定
    • MySQLのクエリ数
      • なぜか5時すぎにガクっと減っている
    • InnoDB
      • 1回のクエリで何行ぐらい読んでいるか
      • インデックスが効いていないとかがわかる
    • memcached接続数
      • mixiの障害を受けて始めた
  • 運用Tips
    • gearmand
      • プロセス数のチューニングができる
      • 設定にgearman_enable: 1
    • daemontoolsでプロセス起動を管理
      • ファイルに更新があると自動的に再起動ではなく終了
      • daemonntoolsが1秒後に自動的に再起動
  • Perlで書けるから楽
  • TODO
    • Webインターフェイス改良
    • RRDとSQLiteを組み合わせて、データがとれてないときなど警告
    • ドキュメントとテスト
  • Q: ほかのツールからの移行で、RRDToolのデータをそのまま使えないか
    • A: ダンプして戻せばいちおうできる。でも並行期間を設ける方が簡単
  • Q: SQLiteに入っているデータ
    • A: 取得した設定データなど

モダンPerl5開発環境について (tokuhirom)

  • Cache::KyotoTycoon書いた
  • PerlをつかったWebアプリの開発についてがメイン
    • 極論的に話します
  • Perl5のバージョン
    • OS標準のPerlは、Webアプリにはよくない
      • コンパイルオプションが一般的になってる
        • ithreadがオンになっている
          • オフにすると15%ぐらい高速
    • 5.10.0はできがよくない。5.10.1以降
      • 正規表現でメモリリーク
      • ほかこまかいバグ
    • 5.x.0はバグが残ってがち
    • 今だと5.12.2がおすすめ
    • 安定志向なら.8.9でも
  • defined or (//) 便利
  • 新しいバージョンのPerlを入れるには
    • perlbrewを使う
    • 簡単
    • 複数のバージョンを入れて切り替えられる
    • でも自分でwgetしてmakeしてもあまり変わらないかも
    • CPANモジュールもそのバージョン単位で入る
      • local::libも不要に
    • 本番環境にperlをrsync
  • cpanm
    • cpanコマンドは使いづらい
      • 時間かかる
      • 初回の設定めんどう
      • ミラーを探すほうが時間かかる
    • もともとcpanコマンドの軽量版を作る目的
    • いまはcpanコマンドを使うメリットがない
    • アプリのディレクトリで、そのアプリの依存モジュールをインストール
    • インストール先を指定
      • このアプリでしか使わないライブラリとか
  • cpan-outdated
    • 手元のモジュールが古くなっているかどうかチェック
    • 出力をそのままcpanmに食わせることもできる
      • cronで回して、コケるモジュールをチェック
      • 最近はDateTimeとかコケてる
  • cpanf
    • モジュールを作者がリリースして5分ぐらいで使える
    • cpanm App::CPAN::Fresh
    • cpanf -mでcpanm使える
  • pm-uninstall
    • モジュールを一発でアンインストール
  • デプロイ
    • perlのディレクトリをそのままrsyncでコピーするのが楽
    • アプリ特有のライブラリはextlib/とかアプリ自体に入れちゃうとか
  • CPANモジュールの選び方
    • いま86,436モジュールある
    • "Date"で検索すると3,537 hit
  • 「みんなが使っているモジュール」重要
    • perl-casualのIRCとか
      • 意見がいろいろ出るけど、絞られる
    • twitterの@perism bot
      • Perl関連のツイートを拾うbot
      • Perl Mongerがチェックしてる
  • 「有名なPerl Hackersが使っているモジュール」
    • Task::BeLike::*
    • なぜ必要かコメントを入れてる人も
  • 「CPANソムリエになる方法」エントリー
    • 2004年より前とかは危険な香り
    • Testがコケたまま放置されてるのは危ない
    • t/の中が1つとか
    • バグレポがたまってる
    • dependenciesで依存モジュールのテスト成功率
    • 作者
  • 今日紹介したツールの多くは、この1年ぐらいで開発された
    • Perlを使いやすくしていこう
  • Q: stableで止めたいときは
    • A: CPANモジュールはいちおうunstableなものはないはずということになっている
    • 自分の場合は、リリース直前まではどんどんアップデート。
    • リリース後は、セキュリティフィックスなど気になったものだけアップデート
  • Q: Perlのバージョンが不整合と言われる場合
    • A: 見たことない
    • Q: PERLLIBにperlbrewのパスを指定すると問題になる?
    • A: はい

XS::TNG (Shmuel Fomberg)

  • 自己紹介
    • Israelから
    • 日本語勉強中
    • YAPCでしゃべるのはじめて
  • XS難しい?
    • 文法は簡単だよ
    • 古いドキュメントが多い
  • Ctypes
    • Cの関数をPerlから直接呼ぶ
    • サンプル
      • mscvrtの関数を呼ぶ例
      • user32のMessageBoxAを呼ぶ例
    • 型の指定
      • 呼び出し方法、戻り型、引数型
      • 型をあらわす文字
      • コールバック
    • ライブラリの種類
      • CDLL、WinDLL、OleDLL、PerlDLL(XS Functions)
  • libperl++
    • C++にPerlを組み込む、拡張
    • リファレンスカウントやコールスタック、型変換などの面倒なことをやってくれる
    • 組み込む
      • 式を評価
      • 値のアクセス
    • 拡張
      • Perl packageにC++で関数を追加
    • スカラーコンテキスト、リストコンテキスト
  • ExtUtils::XSpp(XS++)
    • XSはオブジェクトを扱わない
    • XSの拡張
      • 後方互換性
    • C++
    • typemap
  • Q: CtypesはWindows依存?
    • A: クロスプラットフォーム。libffiベース。
    • Windowsでもシェルスクリプトを動かしてビルドしてる

Studying HTTP with Perl (ma.la)

  • 自己紹介
    • ライブドア
    • UIスペシャリスト
    • フロントエンドからバックエンドまで高速化
    • 「gistというブログサービス」
  • (1) PerlにおけるHTTPクライアント
  • 並列じゃないもの
    • LWP 標準
      • LWP::UserAgent、LWP::Simple、LWP::Robot
    • URI::Fetcch
      • gzip対応、キャッシュ
    • HTTP::Lite
      • シンプル
    • LWPx::ParanoidAgent
      • ローカルネットワークへのアクセスを拒絶
      • ローカルをインデックスしない、とか
      • DNSの検証も
    • WWW::Curl
      • 速い、クセがある
      • そのラッパーもいくつかCPANに
  • 並列処理できるもの
    • HTTP::Async、LWP::Parallelは今はオススメではない
    • AnyEvent::HTTP
      • ssl対応やDNS解決などもAnyEventで
    • Coro::LWP
      • LWPをCoro化
      • Perlのselectを上書き
  • (2) AnyEvent::Curl
  • ネットワーク待ちが支配的
  • LLは問題ない?
  • LWP遅い
    • I/O待ちがなくても秒200リクエストまで
  • AnyEvvent::Curlを書いた
  • WWW::CurlをAnyEventから使う
  • github
  • curlのオプションを覚える必要
  • LWPより8~10倍速い
  • 秒100回以上のリクエストを投げる人だけおすすめ
  • LWP互換機能
  • しくみ
    • WWW:Curl::Multiを使っている
    • fdを取り出してio watcherを監視
  • (3) Perlの並列処理
  • fork、thread、イベント駆動
  • Perlのithreadはバグってる。終了。
  • fork
    • マルチコアだけforkするだけ
    • forkのオーバーヘッド、メモリ消費
  • イベント駆動
    • AnyEvent
    • Coro イベント駆動型のスタイルで書かなくてよい、ハマりどころあり
  • 現実解:併用
    • AnyEvent::DBD クエリはfork
  • (4) 選定
  • prefork型(サーバー、クライアント)
    • スローロリス攻撃にやられる
      • イベント駆動型のサーバー(nginxなど)をフロントエンドにする対策
      • IPアドレスあたりの接続数を制限する対策
    • 適しているところ
      • 1リクエストの処理時間やピーク時のリクエストが予測できるところ
  • イベント駆動型(サーバー、クライアント)
    • 処理時間が予測できないとき
      • クローラなど
    • 1プロセス内での協調動作が必要なとき
    • Webアプリ:実は多くのケース
  • (5) チューニング
  • HTTPヘッダーのパース
    • XS化して約10倍
    • まだ落ちる
  • DNSまわり
    • デフォルトではブロックする
    • curlには非同期DNS解決オプション
      • 名前解決が必要ないリクエストも遅くなる
    • 現状ではsquidにやらせるのがよい
  • (6) HTTPベースのRPC
  • 専用プロトコルよりHTTPのほうが有利?
  • Gearman、Kyoto Tycoon
  • ライブラリがそろっている、拡張しやすい、監視やLB、非同期アプリからの呼び出しが楽
  • HTTPのオーバーヘッドは思いのほか大きい
    • ヘッダー
      • KeepAlive、複数データを一度に取得
      • 速いライブラリ
  • kazuhookuさんのチューニングしたHTTPサーバーは高速
    • 専用プロトコルの優位性はうすれる
  • 性能評価は自分のネットワークでやりましょうw
  • (7) テスト
  • Googleに接続するモジュールのテストとか、向こうが落ちているとテストできない
  • Test::TCPでローカルで
  • Plackで簡単なテストサーバー

AnyEventとEC2を使ったクローリングツールのご紹介 (荘野和也、Songhee Han)

  • テーマ
    • EC2によるクローラのスケールアウト
    • AnyEventによるインスタンス管理
  • Honeybeeというクローラーを開発
    • Honeybee::Bee クローラー
    • Honeybee::Hive 前後処理
  • 使ったAEモジュール
    • AE::timer、AnyEvent::Socket、AnyEvent::Handle
  • 事前処理 → クローラ → 事後処理
  • クローリング部分を切り出してスケールアウトできるように
    • シンプルなPSGIアプリケーション
    • 結果をJSONで返す
    • 環境に依存しない
  • EC2のインスタンスを作成してS3に保存
  • Honeybee::Hive
    • 機能
      • クローリング対象URLを格納
      • BeeとHTTPで通信
      • クローリング結果の重複対応
    • 2つのデーモン
      • Crawler Daemon
      • クローリング処理の実行(インスタンス管理)
      • Flow Management Daemon
      • 順次実行、メッセージ
    • Crawler Daemon
      • インスタンス管理
      • AnyEventのtimerで定期的にチェック
      • idle状態のインスタンスを取ってくる
      • インスタンスの数だけコプロセスを立ち上げ
        • Parallel::ForkManager
    • Flow Management Daemon
      • 順次実行を保証
      • cronなどで定期的に確認するのは避けたい
      • 処理の実行が終わると通知メッセージ
      • メッセージ
        • AnyEvent::Socketでtcp_server
        • IO::Socket::UNIX->new()
        • 値をシリアライズ
        • コールバック関数名

Writing prefork job workers / server (kazuho)

  • prefork型のワーカーを書くためのテクニック
  • ジョブワーカーの2種類
    • prefork
    • イベント駆動
  • prefork
    • 書くのが簡単、メンテも簡単
    • メモリ消費
    • アプリケーションサーバー、画像処理、DB処理など
  • イベント駆動
    • 接続間で情報を共有して交換
  • メモリを使わない
  • 書くのが面倒、メンテも面倒
  • いっしょに使えるライブラリが少ない
  • チャットサーバー/クライアント、Cometなど
  • 「自分はma.laさんほど心配性じゃないので、preforkがいいかな、と」
    • 必要になってからイベント駆動に
  • 以上前置き
  • Parallel::Prefork
    • 昔Parallel::ForkManagerというのがあった
      • シャットダウンするサポートがない
      • 親プロセスをkillしたときに子プロセスが残る
    • Parallel::Preforkを開発
      • シグナルでプロセスを制御する機能を追加
    • Gearmanでの例
    • Graceful reconfiguration
      • 設定を再読込
      • どうせ再起動しちゃう?
    • ワーカー数の動的変更
      • あまりよくない? おすすめしない
  • Server::Starter
    • ホットデプロイ
    • 去年のLTでやった
    • 対応コードの例
      • 環境変数でServer::Starter経由で呼ばれていることを認識してfdをオープン
  • Parallel::Scoreboard
  • 実際にはモニタリングしないと
  • パフォーマンス、リソース、障害解析のためのデータ
  • ロードアベレージはCPUとディスクだけ
  • モニタリング用のモジュールがほしい
  • Apacheのmod_statusのようなビジュアライゼーション
  • モニタリングの自動化
  • フレキシブル
  • 互いに専用で結びついている必要はない
    • モニタされるプロセスごとに1つのファイル
  • 表示モジュールをPSGI applicationに
    • plackupで起動

LT:学生PHPプログラマーがPerlの会社に就職した (Nishibayashi Takuji)

  • 自己紹介
    • モバイルファクトリー
    • Perlと同い年
  • Perlをさわる前のイメージ
    • 難しい、重い(CGI)、古い
  • さわってみたら
    • 思ったほど難しくない
    • 正規表現いい
    • CPANモジュール
    • 柔軟なOOP
  • はまったところ
    • リファレンスを意識
    • thisとかsuperとか使えない
    • subをfunctionとつい書いちゃう
  • 6か月
    • 気がつけば無意識にmy $self = shift;
  • DBIx::Skinny::ModuleLoader作ってみた

LT:Inside webcast of Gozzan-no-Okuribi in Kyoto (Fumiko Kurano)

  • 送り火中継
    • 京都の五山送り火
    • 毎年、携帯電話を利用した中継
    • ustも
    • 「ほぼ日」とのコラボ
  • 制止画中継、Ustream
  • 右大文字と左大文字
  • 夕方まで制止画+コメント文
  • 点火してからUst
  • Perl
    • メールサバーからの読みだし
    • 画像処理
    • GPSデータ抽出
    • DB処理
    • XML、HTML書き出し
    • 中継が終わったら、今年の結果を分析

LT:Happy AnySan Hakking (Yappo)

  • AnySan
    • AEを使ったメッセージングのフレームワーク
    • IRCボット、Twitter
  • Provider
    • メッセージサービスのハンドリング
    • user AnySan::Provider::IRC
    • user AnySan::Provider::Twitter
  • AnySan::Receive
    • 返事
  • デモ
    • @dan_the_bot
    • 「!dan」に反応して「Dan the ~」を投稿w

LT:OFPM (Naoki Tomita)

  • 忍者w
  • ブログ「今日のCPANモジュール」
    • あっというまに挫折
    • でもなかなかアクセスが減らない
  • 加筆して書籍化の話
    • ワークスコーポレーション
    • 2010/12 on store (maybe)
  • 小さいモジュールを中心に
  • どんなモジュールが使われているか統計
    • meta解析 CPANTSがやってる
      • データ落とせる
      • 「最近CPANTSが落ちてるんですが」
    • もっとリアルなデータ
      • gistからPerlっぽいコードを抜き出して
  • OFPM

LT:MySQLのPluginいろいろ (kamipo)

  • いまのMySQLのプラグインには5種類のタイプがある
  • mycached
    • MySQLのストレージハンドラをmemcachedでアクセス
  • Spider and VP
    • シャーディング
  • groonga
    • 全文検索
  • mysqlftppc
    • パーサープラグインがいろいろ入っている
  • HandlerSocket
    • ストレージハンドラを直接たたく
  • デモ
    • 自作プラグイン
    • MessagePackプロトコルで接続(実際の処理はまだ)

LT:「名古屋でPerlをゆるく語る会」をはじめました (issm)

  • ドラクエプレゼン
  • 名古屋では勉強会はいろいろあるけど、Perlはあまりなかったので
    • 2010.7から
    • 食事会
    • 月1回
    • @yuruperl

LT:RubyプログラマがPHP大規模PHP開発の会社に入って (tsuyoshikawa)

  • GREE
    • ふじもとさんの代打
  • Sinatra
  • Sinatra系
    • Flask (Python)
    • Scalatra (Scalatra)
    • Mojolicious::Lite (perl)
    • 楽しい、気軽
  • PHPは?
    • いくつかある
    • 実装が腐ってるw
    • 楽しくない
  • 改めてPHPで作った
  • Sinatra→Frank Sinatra→My Way→Sid Vicious→「Vicious」w
    • 動いている
  • Rackのレイヤー:PHP + Rack → 「Phack」w

LT:YAPC::EU 2010 Reports (?)

  • 今年はイタリアのピサ
    • 片道13時間
  • 食べ物・飲み物が潤沢
  • プレゼン
    • YouTubeに動画
    • 質問力が半端ない
      • 途中からプレゼンそれて議論に
  • 海外のPerl Hakcerをフォローするようになった
  • 課題は日常会話
  • DeNAの社内制度で
  • 来年はラトヴィア

LT:期間システムがPerlでどうしてこうなった (峰末)

  • 汎用機をなくしたいという社内プロジェクト
    • MySQLやOpenCOBOLへ
    • 給与計算とか
  • 資産
    • COBOL 2,500万行
      • COBOLからMySQLへの接続方法はない
    • JCL 100万行
      • オープンなJCLはない
  • Perlに変換すればなんとかなる
    • "use JCL" w
    • COBOLにPerlを組み込んで、COBOLの文中にPerlコードを入れてMySQLにアクセスw
  • 速度はまあなんとかなる
  • Apache + mod_php + opencobol + perl w

LT:Test::QUnit (zentooo)

  • ヤバゲーのJS APIの中の人
  • JSのテスト
    • WebUIのテストやCLIのテストはある
    • env.jsがけっこういけるっぽい
  • 統合型
    • JSTestDriver
  • CLIからブラウザのテスト、テスト結果集計 → Test::QUnit
    • MozReplでつっこむ
    • Plackサーバー
    • GitHubで

LT:10 things to do with a coferenceT-shirt (カレンさん?)

  • 世界のYAPCに参加
    • カンファレンスのTシャツが大量にあつまった
    • 大きい
  • ハサミでカット
  • リボンでアレンジ
  • 端切れをヘアバンドに
  • イヤリングに
  • バッグに
  • 枕カバーに
  • 紐にして編んでタオルに
  • ノースリーブに→ギークな旦那がマッチョにw
  • "There is more than one way to wear it"

LT:That Goes WIdhtout Alphabet-Number (takesako)

  • プログラミングで何種類の文字使っているか
    • BF:8文字
    • BASIC:アルファベット
    • Perl:100+
  • Python
    • Unicode 6.0絵文字使える
    • PEP 却下
  • ポリグロット
    • .comファイルにも
  • バイナリを使わずにx86機械語
    • 記号10種類
    • Brain-f*ck-f*ck
    • int main[] = "記号の並び""
    • movが使えないのでpushとpopとか
  • 顔文字x86プログラミング
  • 「バイナリアンはもう古い」

「Software Design」2010年10月号

 ようやく読み終わった。

 ファイルシステム特集は、ext2~4あたりを中心としたしくみの解説と、Btrfsの解説。Btrfsは、細かい注意点や使い手が書き込まれていて参考になる。ex2~4もよく知らなかったので参考になったけど、ext3ってddでseekしてスパースファイル作れなかったっけ?

 DebConf10レポートをDeibianのやまねさんが書いている。色々なセッションをサマっててすごいなぁ。

 Emacs連載でauto-complete.elの最新版を説明していて、あわてて手元のauto-complete.elをアップデートした。インライン補完使いやすい。

 Ajax/JavaScriptハッカー養成講座は、ブラウザごとのECMAScript 5th Edition実装状況を細かく表にしていてびっくり。

 ほか、Wakame-fuelの基礎になるAmazon EC2 APIプログラミングとか、EvernoteのPhil Libinインタビューとか、XperiaのWebSDKとか、Android Bazaar and Conferenceで見たドロンくんの解説とか、Ubuntuでのバックアップとか、Konohaのトークナイズまわりとか、大人の科学マガジンの4bitマイコン用のコードを吐くコンパイラとか。あと、Techcrunch Japan連載やgeekpageさん連載とともに時事分析記事だった「不定点観測所」が最終回。

「さらい屋五葉」第八集

さらい屋五葉 8 (IKKI COMIX)
オノ・ナツメ
小学館 (2010-09-30)

 完結。いいね。

「新クロサギ」8巻

 送りつけ詐欺編と架空取引詐欺編。ECO詐欺編の最後とローン詐欺編の最初は詐欺ネタはほとんどなし。

 今回の手口メモは、ネタバレなので「続きを読む」で。

続きを読む »

「ベルセルク」35巻

ベルセルク 35 (ジェッツコミックス)
三浦 建太郎
白泉社 (2010-09-29)
で、こいつ食えんのか?

 ひさしぶりのチャンバラ展開。

「FRONT MISSION DOG LIFE & DOG STYLE」06

FRONT MISSION DOG LIFE & DOG STYLE(6) (ヤングガンガンコミックス)
太田垣 康男
スクウェア・エニックス (2010-09-25)
一度でいいから ぞっとしたいものだ

 正統派の近未来戦争アクションっぽい展開に。

「宇宙兄弟」11巻

宇宙兄弟(11) (モーニングKC)
小山 宙哉
講談社 (2010-09-22)
あのモジャ男、思ったより考え方が技術者寄りだな

 ぐっとくるエピソードが続く。ローバーの試行錯誤が面白いな。

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly