― Web Technology and Life ―

Perl Beginners#3に参加してLTしてきたご報告

2012-07-02
2012/6/29(金)に京橋(宝町)で行われた「Perl Beginners #3」に参加させて頂きまして、Perlの本格的なLTのBeginnerをしてきましたのでそのご報告です。

イベント情報

ビギナーズセッション

コードレビューときいて(@studio3104_com)

  • fluentd にMySQLのスロークエリログをいれるコードをかいた
  • https://github.com/studio3104/out-exec-mysql-slowquery
  • スローログの解析上、そのクエリがどのデータベースに対してなのかわからない
  • 同じデーモンに、別のデータベースで同じテーブル名、カラム名構造があると困る
  • 後置のifでmy宣言は使っちゃいけない(my $hoge = $self->moge if $num == 3;)

とりあえず、やりたいことも、コードの意味もピンと来ず。苦笑。MySQLのチューニングとかロギングとか全然やらないので、下を向くばかりでした。。。

すげーと思ったのは、即興でmakamakaさんとかytnobodyさんいろいろ語っていたけど、さすがだなーと思いました。その後、makamakaさんがPerlコーディング的なところレビューしていてさすがだなーとまたまた思いました。

ライトニングトーク

Perl歴10年のぼくがDBIの使い方を学ぶまでの話(@ytnobody)

  • use strict書かなくて怒られた
  • use DBIと一緒に、use DBD::mysql
  • プレースホルダー使いなさい
  • 最初のO/Rマッパーは、DBIx::Simple
  • その後、いろいろ使った

データベースについて(@makamaka_at_donzoko)

データベース → ダースベーダ(笑)

ふんふん(@toku_bassさん)

  • テスト環境と検証機と本番環境でMySQLのスキーマが違って困る
  • MySQL::Diffが使える
  • 違う場合はAlter文を作ってくれる
  • オートインクリメントの箇所とかいろいろ置換する必要がある

ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~(@hirobanex)

私のLTです。詳細は、『ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~』の資料を御覧ください。

資料には書いていませんが、個人的に初心者時に感じたDBIの経験を元にしています。O/Rマッパーというか、DBIのラッパー(より使いやすくわかりやすくしたもの)を早めに使って、開発/メンテナンスコストを最小しつつモチベーション駆動で開発を進められるように、とくに学習コストの高いクエリビルディングの箇所を吹っ飛ばしてとにかくますぐO/Rマッパーの効用を感じてもらえるための導入資料にしたつもりです。ytnobodyさんとネタがかぶった感があるので、「うひょ!」という感じでしたが。

実は20人以上の人前で作った資料をもとに話をするのは初めてだったりしたんですが、うまく伝わったかなーとか、細かいコードの解説をすると時間をとられてしまうので、もう少し絞ればよかったなーとか、いろいろ反省はしています。こういうトークでしっかりとコードの解説をしたことがなかったので、PerlのLTのBeginnerとして、これはこれでいい経験でした。ytnobodyさん、ホントありがとうございましたっ! 参加されたみなさまからのフィードバックもどしどしお待ちしております!その他、資料ご覧いただき、思うところがあれば、気軽にツッコミ待っていますー!

懇親会

ブルガリア料理を舌鼓ながら、いろいろとお話ができてよかったです。オブジェクト指向とか設計ベースになるとケースバイケースだから結局よくわからないよねー、とか、やっぱり動作確認テストいれておくと安心だよねー、とか、私はPerlしかちゃんと書いている言語はないので、いろいろな言語の話やいろいろな現場の話をお伺いできてよかったです。

MySQLのコネクションが切れちゃう話

資料にも簡単に載せてはおりますが、懇親会がちょっと話があがったので、あまり詳しくないんですが、いくつか私が知っている限り補足しておきます。

MySQL側でできる対応

MySQLの設定はmy.cnfに書いてあるものだけじゃなくてデフォルトで仕込まれているものが実はたくさんあって「show global variables」て一覧が見れます。タイムアウト系のものを難なく抽出するには、「show global variables LIKE "%timeout%";」のようにして抽出できます。よくあるコネクション切れは、「wait_timeout」の設定で(デフォルトが8時間)なので、手っ取り早く応急処置をする場合は、「SET global wait_timeout = 86400;」とかしてしまえば、24時間コネクションが張りっぱなしにされます。

DBI(DBD::mysql)側でできる対応

「mysql_auto_reconnect」という設定があるようでして、以下のようにDBIのコンストラクションをすると大丈夫みたいです。

my $dbh =DBI->connect('dbi:mysql:database=dbname', 'root', 'pass',{
    mysql_auto_reconnect => 1,#これ
    mysql_enable_utf8    => 1 ,
    AutoInactiveDestroy => 1,
    RaiseError           => 1,

});

他のデータベースの場合はよくわからんのですので、Tengとかがやっている実装のほうが汎用的なんだろうと思いますので、やっぱりこのあたりではまり続けても開発者的にはしょうがないので、一旦はO/Rマッパー使っておきたいですね。なんか変なところあったらお気軽にはてぶコメントやTwitterでご指摘頂けるとありがたいですっ!

最後に

データベースがテーマということだったので、最初の最初の入門らしく、DBI入門的な内容があっても良かったなー、と思っているので、個人的にLTの内容選定に失敗したかなーという感じです。もう少し、他のLTされる方と連携して内容をうまく割り振りできたらよかったかなーと思っています。とわいえ、LTでも申し上げましたが、私は生DBIはよくわからんとバックれた口なのでそれほどDBIについて語れないというジレンマ。

今回にビギナーズセッションはお一人だけでしたが、ytnobodyさんが積極的になんでも教えてくれる雰囲気を作っていたので、よくわからないことがあったらどんどんリストアップしてPerlBeginnersに行って教えてもらうといいと思いました。

ビギナーズセッションも30人クラスを前にして行うと緊張するから、4~6人くらいのグループにわけて、取り留めもなく、持ち回りで聞いていくみたいな形式もいいと思いつつ、各テーブルに講師的な人つかないといけないから、難しいよなーと思ったり。

とりあえず、今後もPerlの入門的なイベントとして期待がかかりますねー!ytnobodyさん、頑張ってください!

Perl update_at : 2012-07-02T12:38:48
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus