Perl Beginners #16に行ってきた

昨日は東京は京橋で開催されたPerl Beginnersに参加してきた。先月のYokohama.pmに続き、懲りずにLTしました。

主催のytnobodyさんはじめ、皆様お疲れ様でした & ありがとうございました。

基調講演: DockerでWebアプリを作る話 (ytnobodyさん)

Dockerのチュートリアル的な話。

DockerはWeb+DB Pressの記事を読んだ程度で触ったことはなかったが、実際動いている様子を見ることができたのがよかった。そして実際便利そうだと思った。

ただ、Dockerは操作にroot権限を必要とするので、(自分がよくやる)自分専用のWebアプリとかを手元で動かすにはちょっと面倒だと感じた。

資料は: https://gist.github.com/ytnobody/7111da935db3257c8ba3

以下、メモ。

dockerのいいところ

  • コンテナの中ではroot
  • コンテナの中で何やってもOK。既存環境を汚さない。
  • 意外と基本は簡単

dockerオススメOS: Ubuntu 14.04 (64bit)

  • コマンド一発でインストールできる
  • 仮想環境の中にdockerコンテナ作るっていうのもOK!
  • ただし、工夫しないとディスクをわりと食うので注意。
  • まあネットブックでも全然動く

コンテナ != 仮想マシン

  • どっちかというとコンテナは「プロセスの塊」というイメージ
  • なのでコンテナ終了時に消去(--rm)するのがよい

dockerイメージからコンテナを作る。ローカルにdockerイメージがない場合はdocker hubからダウンロードしてくれる

  • ある程度キャッシュが効くので毎回フルダウンロードってわけじゃない
  • でもイメージは軽いほうがいいのでdebianベースがオススメ

手元の環境でdockerイメージを作る

  • ディレクトリ掘って、Dockerfile書いて、docker buildするだけ
  • ローカルのイメージはdocker imagesで確認

Dockerfileのコマンド

  • FROM
  • MAINTAINER
  • RUN
  • ADD
  • WORKDIR
  • ENTRYPOINT
  • EXPOSE

dockerアンチパターン

  • いろんなサービスを一つのコンテナに詰め込む
  • コンテナ内に永続データを置く
    • 結局DBはコンテナ外に置いたほうがいい
  • 1ホストでたくさんコンテナ立てる
    • もちろんホスト性能にもよるが、2〜3コンテナくらいがいっぱいいっぱいらしい
  • コンテナ間通信やる
    • 無駄にめんどくさくなるしコンテナのポータビリティ下がる
    • やり始めると今度はコンテナ群管理ツール(figとか)が必要になる
  • Q. DockerfileのRUNとCMDコマンドの使い分けは?
  • A. CMDは複雑なので使わない。ENTRYPOINTでてきとーなシェルスクリプトを呼べば十分。RUNはイメージをビルドする時のコマンド。

LT: 音声投稿型Webサービス作った (dokechinさん)

伴奏を登録 → 歌を投稿するサービスを作ったという話

クライアントサイドでは、recorder.jsというHTML5でマイク録音するライブラリを使っている。

サーバサイドの構成をだいぶ迷った

  • 構成案1: 最初はローカルストレージに曲データを突っ込もうと思ったが、それはスケールしないだろう。
  • 構成案2: Amazon::S3モジュールを使ってAWSにデータを突っ込む。ブラウザから直にAWS URLにアクセスさせる。なんか気持ち悪い。。
  • 構成案3: nginxのaws authモジュールを使ってAWSをサービスの後ろ側に隠蔽。

さらにCloudFlareという無料CDNを使って負荷を軽減。無料なわりにSSL対応もしていたりと、オススメ。

LT: Perlワンライナーの話 (debug-ito)

ちょうど先日書いたPerlワンライナーの話。

perlインタプリタはコマンドオプションを含めてきちんと使いこなすことで日常作業の効率を圧倒的に上げることができると思う。特に-iオプションや$.変数なんかをうまく使うといろいろできることの幅が広がる。

それにしても、Perlワンライナーは古の昔からある技術だけど、改めて調べてみるといろいろ発見があって今なお色褪せない感がスゴい。-Eオプションとか-Cオプションとか今回初めて知ったが、こちらも便利そうだ。

ところで、今回のプレゼンはreveal.jsのフロントエンドであるところのApp::revealupで作った。図表とアニメーションをガンガン使ったプレゼンを作るには厳しいが、文字と簡単な画像だけならカンタンに作ることができるという印象。

LT: DB自動再接続の話 (tsucchiさん)

DB自動再接続は難しい!

Otogiri::Plugin::AutoReconnect

  • トランザクション中は再接続しないで例外投げる!
    • 例外投げてトランザクションの外へ抜ける
    • 抜ければ接続無し状態なのでクライアント側、DB側ともにクリーンな状態
  • forkは
    • DBIのAutoInactiveDestroyを有効に。(比較的最近のDBIにあるオプション)
    • PIDをチェックしてforkを検出