YAPC::Asia Tokyo 2012 に行ってきた

東京大学で開催された、YAPC::Asia Tokyo 2012 に行ってきた。個人的には今回で5回目の参加。これだけ継続して参加している理由はなんだろうとふと考えたが、結局のところは Perl が好き。そして Perl のコミュニティが好きだという、極めてオーソドックスだけど、確固たるものがあると再認識できた。

聞いたセッションの詳しい内容は、スライド等にまかせて簡単な感想や覚書でも。

What Does Your Code Smell Like? | Larry Wallさん

英語はよく分からなかったけど、ライブコーディングで Perl5 のコードを Perl6 に書き換える内容だった。
sub に引数が書けたり、色々省略出来たりで良い感じ。覚えないといけないことは多そうだけど、その価値はすごくありそう。

あと、コードを直す速さにびっくりした。vi恐るべし。

Web::Security beyond HTML5 | Yosuke HASEGAWAさん

Webアプリケーションにおけるセキュリティのセッション。

Ajax脆弱性はブラウザ起因のものが多い。Android の古いのとか IE とか IE とか。古いブラウザは直らないしサーバ側で対応しましょう。

Nana/Tora - Perl5 から見える未来。Perl5 と共にあゆむ Perl6 ではないプログラミング言語、それは。 | Tokuhiro Matsunoさん

現在の Perl5 の問題点に対してどの様な改善点があるのかという内容。

印象的だったのは、npm を中心にみんなが好きな言語を使おう。

Perl Ocean - XMPP based realtime communication framework suite | KOMORI Kazukiさん

XMPP プロトコルにおけるリアルタイムコミュニケーションフレームワークスイートのセッション。
同時接続数やプロセスブロックの問題点の解決する方法として、gearmand を使ったりしている。

Perl でファントムする! | motemenさん

Perl から PhantomJS を呼び出すことが出来るモジュールの紹介。
幽霊の名前にしないといけない空気に屈した。というのが印象的。

続・Mobage を支える技術 | Yuji Shimadaさん

"Mobage を支える技術"でカバー出来なかった内容のセッション。

Mobage で利用している Worker のシグナル処理を Demo を交えて解説。失敗例成功例の説明がわかりやすかった。

"die する!!" は耳に残った方も多いんじゃないでしょうか。

位置情報系処理のお話 a.k.a 続・自文書抽出日本的住所 | Kazuhiro Osawaさん

GeoHash 等の位置情報に関する内容。

僕個人としても、GPS やら GeoHash を勉強したことがあるし、ものすごく興味深いセッション。
住所を正規化するための正規表現は凄かった。

北陸と熊本の住所が難しいというのが印象的。

平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用 | Tatsuro Hisamoriさん

広告枠の現物取引を実現するための枠組みについての内容。

一般的なLAMP構成で、"古典的でも地道にやる"という言葉が印象的。

Perlアプリケーションのベンチマークとプロファイリング | Shunichiro Fujiwaraさん

チューニングをするに際して、ベンチマークやプロファイリングで問題点を見つけて解決しようという内容。

Benchmark / Devel::NYTProf / Parallel::Benchmark を使ってのパフォーマンス計測や負荷試験の説明がわかりやすかった。

「新しい」を生み出すためのWebアプリ開発とその周辺
 | Yusuke Wadaさん

過去のWebアプリケーションで他の環境で動作しなくなった経験を生かした、WAF 選定基準は非常に説得力があるものだった。

Padre - The Perl IDE for Normal People | Adam Kennedyさん

英語はよく分からなかったけど、初心者向けの優しいIDE開発についての内容。

10 more things to be ripped off | Tatsuhiko Miyagawaさん

他の言語のいい所を Perl で使いやすい様に移植しよう。
他の言語の素晴らしい仕組みを紹介して、それを作ってみてはという提案も印象的でした。

Perlハッカーは息をするようにCPANモジュールを書く。 | Daisuke Muraseさん

CPAN モジュールのドキュメントに、そのモジュールへの熱い思いを書いて欲しい!というのが僕もそうだと思いましたし、そうでありたいと強く感じた。

ウェブアプリケーション開発の現状・課題とJSX | Kazuho Okuさん

トレンドの移り変わりや JSX の設計思想等のセッション。
個人的には、JavaScript だと class 定義をするにも色んなやり方があって、いわゆるベストプラクティスもわかりにくい。JSX の class 定義はスマートで分かりやすい。今後に大いに期待したいです。

Performance Profiling with Devel::NYTProf | Tim Bunceさん

英語は相変わらず分かんないけど、Devel::NYTProf まじですごい便利というのはスライドから伝わってきた。

KCachegrind がすごく便利そうで、すぐにでも導入してみたいです、

How Perl Changed My Life | Gosuke Miyashitaさん

今年の YAPC の クロージングキーノート。

Perl に関わりその中で学んだことや得たことの話。
エンジニアの評価制度をオープンにした話が個人的には印象的でした。


僕自身、Perl に出会ったのは 2004年。その時は Webサイトを作るのに必要だから覚えたというのがきっかけだった。
Perl が好きという感情に変わったのは、今まで Java とか C++ で書いてたちょっとしたツールを、Perl ですごくスマートに書けた時。気がついたら Perl の虜になってた。そして YAPC という素晴らしいイベントにも参加するようになってた。僕一人の力はそんなに大きくないかもしれないけど、Perl に恩返ししていきたいと強く感じてます。

終演後

FacebookTwitter で交流があった、[twitter:@nekokak] さんとお会いして話をする機会があった。後片付け等があるみたいで、短い時間しか話は出来なかったけど、Teng や Sub::Args を利用させて頂いている僕としては本当に嬉しかった。本当にありがとうございました!

最後に

前夜祭には参加出来なかったけど、2日通して参加できた。1年ぶりに前職の同僚とも再会して、技術談義も盛り上がったりしたし、最高に楽しい2日間だった。来年は LT やってみたいなぁと感じている今日この頃です!

Linuxコマンドめも

便利だけどしょっちゅうは使わないコマンドはつい忘れてしまう。
コマンド名を忘れてしまってググることすら出来なくなるのが嫌なんでメモ。

  • paste

この paste コマンドは、ファイルを行ごとに結合することが出来る。
知らなかったときは、テキストエディタで頑張ったり、Perl でやったりしてた。

/etc/hosts と hostname が違う場合は Apache の起動ができない

開発用に使ってたドメインが失効して、違うドメインを割り当てて運用してた Apache が、突然起動に失敗するようになった。
エラーログを確認すると以下の様なメッセージが出ている。*1

[Fri Aug 10 17:23:27 2012] [alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of "hoge.example.com"

hostname コマンドで表示されるホスト名が以前のものになってて、名前解決ができずにエラーになっているものと判断したので、以下の手順で修正した。

1.ホスト名の変更

% sudo -e /etc/sysconfig/network
HOSTNAME=ホスト名
HOSTNAME=foo.example.jp

2./etc/hosts に記述しているホスト名を変更

% sudo -e /etc/hosts
127.0.0.1	foo.example.jp

3.サーバを再起動する

% sudo reboot

Apache の起動が失敗するトラブルってあんまり遭遇したことがなくて、正直ちょっと焦りました。

*1:メッセージ中のホスト名は変更している

ネット環境を変えたい

実は自宅のネット環境は、まだ ADSL の 8M だったりする。さすがにそろそろ、光にして快適な環境を構築したいところ。

ついでにプロバイダの乗り換えも考えてて、今検討してるのは

あと、モバイル wifi ルータも欲しいけど、スマートフォンテザリングも考えてるし、もう少し考えてからにする。

MySQL でシーケンスをエミュレートしてみた

Oracle とか PostgreSQL 等にあるシーケンスのエミュレートを、MySQLの公式ドキュメント で紹介されているので試してみた。

シーケンス用のテーブルの作成と初期値

数値型のカラムが一つあるテーブルが必要。
下記例では 1 から採番される。途中から採番したい場合は、初期値に 0 以外を入れればよい。

mysql> CREATE TABLE sequence (id INT NOT NULL);
mysql> INSERT INTO sequence VALUES (0);

シーケンス値の取得方法

下記要領で取得する

mysql> UPDATE sequence SET id = LAST_INSERT_ID(id + 1);
mysql> SELECT LAST_INSERT_ID();

これだけで、シーケンスのエミュレートができる。

上記の事が実現できるメカニズムは、LAST_INSERT_ID(expr)にある。LAST_INSERT_ID(expr)に引数が渡されると、そのコネクションにおける LAST_INSERT_ID() で取得できる値が設定される。

実際に試してみるのがわかりやすいと思う。

mysql> SELECT LAST_INSERT_ID(1000);
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|             1000 |
+------------------+

これらを踏まえて説明をすると、UPDATE 文で現在の値を +1 する。その値を LAST_INSERT_ID(expr)に渡して、LAST_INSERT_ID()(引数なし)で取得できるようにしている。

意外と簡単に実現できたが、実戦投入するには色々調査不足なので、この辺は慎重にやろう。

WEB+DB PRESS Vol.68 読了

WEB+DB PRESS Vol.68 が読み終わった。

WEB+DB PRESS Vol.68

WEB+DB PRESS Vol.68

そろそろ Vol.69 が出そうな勢いだけど。いつも通り個人的に印象に残った記事の感想を紹介する。

新人時代に押さえておきたいWeb技術まるごと整理

Webの生い立ちや基礎的なことやCGIからAjax変遷。Web技術を支えるサーバの解説やクラウド技術。一昔前のWebから現在主流となっているWebに関することがわかりやすくまとめられている。新人が読むにはいい入門だし、ある程度知っている人が読むといい知識整理に使えると思う。

Node.js 実践入門

Node.jsの基礎からちょっとした応用まで、幅広く書かれていて、これから Node.js を試そうと思ってるなら是非読むべき記事だと思う。サンプルコードも多く載ってるし、実際に写経して動作確認を僕もやってみた。この特集だけでも Node.js のすごさ面白さは伝わってきた。

Perl Hackers Hub

僕が毎号楽しみにしているPerlの連載。今号は新しい Perl の機能やシンタックスについての解説がされている。書かれてることはある程度知ってはいたが、積極的に取り入れたりはしてなかったりする。僕自身が、まだ Perl5.8 系で動作してるシステムの運用をしていたりするので。defined-or 演算子とか何気に便利だし使っていきたいなぁと。

最後に

新しい事に取り組もうと思った時に、WEB+DB PRESS の記事から入門することが多いとあらためて感じる。リーンスタットアップも取り入れて行きたいと思っている。

NoSQLの調べたいことメモ

NoSQLについて色々比較したり、調査したいソフトウェアの雑多なメモ。

  • Redis
  • MongoDB
  • MySQL Cluster

MySQL Clusterは業務で使ったこともあるし、最近はいい書籍も出てるから、勉強しなおそうかなと。

Redis/MongoDBはそれぞれの特徴を知るところから。

MySQL Cluster構築・運用バイブル ?仕組みからわかる基礎と実践のノウハウ

MySQL Cluster構築・運用バイブル ?仕組みからわかる基礎と実践のノウハウ