Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

今日はYAPC::Asia Tokyo 2012の前夜祭です

今日はYAPC::Asia Tokyo 2012の前夜祭です。去年までとは会場が代わり、今年は東大内の伊藤国際学術研究センターにて開催されます。今日から最終日まで参加する予定ですので、いつものように聞いた話をリアルタイムでメモっていくつもりです。

なお、今年もgihyo.jpさんの特集にレポーターとして参加することになりました。例年とは違い5人もメンバーが揃いましたので、私の仕事はあまりありません:p。@amayanさん、@moznionさん、ya_k0さん、@takayuki_hさんが主に執筆しますので、ぜひご覧頂ければと思います!

risouさん「Officeで使うPerl Excel編」

  • 「ハードなPerl Monger必見」ではありません*1
  • "Windows"と"EXCEL"の話です
  • Excelの使い方 → 大好き>「業務」>使わない
    • 例: 残業管理がExcelExcel管理のデータをDBに。DocumentをExcel
  • windows on PerlExcel
    • ActivePerl → 今回の話であれば十分だけど
    • Vanilla Perl
    • Strawberry Perl → 今回はこちら。
  • Excelを使うモジュール
  • use Win32::OLE、->GetActiveObject、workbooks、SaveAs、->Close、->quit
    • \->Range、->Cells でセル指定して文字を入力
    • 文字の読み取りも同様
    • UTF-8 を使う場合は encode を噛まして utf8に
  • 背景色の指定 → セル指定して ->Interior->{ColorIndex} = 4 など
  • フォント → ->Font
  • 線 → Borders(xlEdgeBottom)->{LineStyle}
    • xlEdgeLeft、xlDiagonalDown(ななめ線) など
    • xlInsideHorizontal, xlInsideVertical → 枠表を作れる
  • use Win32::OLE::Const 'Microsoft Excel';
  • 幅 ->{ColumnWidth}、->{RowHeight}
    • Excel方眼紙を簡単に作れる! → LTソンのminemazさんのLTで
  • Columns、Rows、Cells に引数を指定しないと、全選択になる
  • マクロの実行 → ->Run
  • エクセルの旧バージョン形式で保存 → Fileformat => xlExcel8
  • 質疑応答
    • Q. 壊れることは?
    • A. Win32::OLEでは内部的にExcelが起動する。自分の開いているExcelと干渉することはない
    • Q. Office持ってない人は?
    • A. SpreadSheet::* だったら大丈夫

Daisuke Muraseさん「UV - libuv binding for Perl

こちらはgihyo.jpさんの特集へも掲載しています。

  • Perlバインディングの意味は? AnyEventとの関係、開発状況
  • libuvとは?
    • node.jsのバックエンド。非同期IOのプラットフォームの際を吸収
    • node.js 0.6.xから採用
    • libeventとかとの違い → Windowsでも速い
  • IO監視API
    • epoll, kqueue(BSD), event(Solaris)、 port poll or select
    • Windows だと selectになってパフォーマンスが出ない
    • が、Windows にも IOCP というのがある
  • 問題: IOCPのAPIがとても特殊
    • libuvが頑張ってる → 非同期IOの"フレームワーク"と言うべきレベル
    • syscallで非同期の扱いがめんどうな部分をlibuvはラップしてくれる
  • KAYACさん → スマホアプリの通信モデルで利用。iPhone用のパッチを当ててる
  • Perlバインディングgithubにある
    • プロトタイピング用途に利用
    • CとPerlAPIが1-1で対応
    • Cはuv_*に対し、PerlではUV::*
    • UV::tcp_init、UV::tcp_bind、UV::listen、UV::accept
    • Cで別関数を渡すべき所をPerlだと無名関数で書ける
  • ドキュメントはない。libuvの使い方を知っていることが前提
    • libuvのドキュメントは・・・? → uv.h
    • libevの知識があれば、なんとかなりそう
  • AnyEventと比較すると?
    • AnyEventは枯れている。ドキュメント、モジュール、充実。オススメ。
    • Cocoaバインディングもある
  • AnyEventのバックエンドにUVは・・・?
    • 抽象か度合いが強過ぎる。connectなどがラップされてしまっている。
    • 無理
  • 開発状況
    • TODO → ファイルIO、windows(!)は不明
    • typesterさんが使う分には
    • mattnさんとlestrratさんのパッチが当たっている、感謝
    • ファイルIO → node.jsでも使ってない・・・本当に動くの?
    • 日曜日CPANにアップする予定(「ドキュメントはないのでお願いします」)
  • 質疑応答
    • Q. すでに使ってるのですが、ファイルIOは自分で書けってこと?
    • A. ありがとうございます! 最新のnode.jsは見てないので、調べて
    • Q. 外部コマンド呼び出しのAPIは自分で書(以下略)
    • A. ・・・
    • Q. はい、わかりました

Gosuke Miyashitaさん「Sqale の裏側」

  • SQALEとは? → Ruby用のPaasサービス
    • Herokuのようなもの
    • githubと同じ人のキャラクターデザイン
  • http://www.facebook.com/sqalejp
  • perlの話はないよ
  • あんちぽさんステッカーに合い言葉が書いてあって、あつめるとあんちぽさん特製壁紙が貰えるらしい
  • 捌くのはSSHアクセスとHTTPアクセス
  • カーネルパッチ
    • grsecurity セキュリティ周り
    • ユーザが任意のtcp port をbindするのを制限する
      • PROT_SOCKを1024から65535に
      • udpの時だけ制限を解放
    • fork bombへの対抗措置
      • cgroupとfork周りを弄る。githubのpaperboy-sqale/sqale-patchesを参照
  • ELB → nginx → コンテナへ
    • lua-nginx-module, redis2-nginx-moduleを利用
    • nginxからRedisに各コンテナのホスト、portを問い合わせる
    • dynamic-proxy.lua にプロクシするロジックを書いている
    • 502ステータスについて、failoverできる機能を実装している
    • ダウンしたコンテナは、指定秒数だけアクセスさせない
    • 詳細は@hibomaさんの情報を参照
  • SSH Router
    • Git、SFTP、SSH Login の3種を捌く
    • OpenSSH へ script authentificationパッチ
    • AuthorizedKeysScript プラグマが新たにできる
    • mizzy/openssh-script-auth を参照
    • SSH_ORIGINAL_COMMAND環境変数で振り分けができる
    • MySQLへアクセスし、Public keyを元にgit serverを識別
    • 現状Gitサーバは1台
    • PATHを書き換えて、git-recieve-pack を流すだけ
    • 同様にSFTP もsftp-server を流すだけ → ただし、整合性を保つためにgit pushする
    • sshログインも同様だが、ユーザにどのコンテナに入るかを選択させる
    • How We Made GitHub Fast」から着想を得た
  • Server Build Automation → @lamanotramaさんを参照
  • 質疑応答
    • Q. 複数言語を混ぜた開発に問題はない?
    • A. レイヤごとに切り離しているので、問題は起きていない
    • Q. Engine YardとSqualeを比較すると抽象度が高くてよい。何を参照?
    • A. Herokuとdotcloudを意識。中も探って見ている
    • Q. コンテナは何個くらい入っている? 固定?
    • A. メモリから逆算して数を考えている。調整することもある。

*1:すみません。。。