【議題名】正規表現入門2(第47回)
【発表者】岩○氏

前回説明した正規表現の続編でした。

正規表現エンジンによる動作の違い、正規表現によるパフォーマンスの違いなど分かりやすく図解してくれました。
普段は、SQLチューニングやWebパフォーマンスにしか目が向きませんが、正規表現でも書き方によってこんなに違うのか?って思い知らされました。

【評価】
4/4で満点合格!!おめでとうございます♪
前回よりも突貫で作ってしまった感が否めませんが、勉強会ではちゃんと内容を受け答えできていた為、評価は満場一致の満点でした。


詳説 正規表現 第3版

【参考資料】
・「正規表現2
JDK7u40(Oracle Java SE update 40)以降、新たに標準ツールが組み込まれたので紹介します。
1年ほどJava開発から離れてたため、ちょっと古い話になってしまいますm(. .)m

・Java Flight Recorder
・Java Mission Control


これらはシステム障害の原因を究明するときに使われるツールの1つで、
それぞれ、システム障害分析ツールとシステムの稼働情報記憶ツールとなります。
元々、JRockit専用だったがJDK7u40以降の Hotspot VMでも利用ができるようになったのです!

通常これらのプロファイリングツールは、CPUやメモリへの負荷が大きいため商用利用ができないケースもあるが、
Java Flight Recorder/Java Mission Controlは、Hotspot VMの純正ツールだあり、自体の機構を使っているため、
非常に負荷が小さく商用利用にも適しているらしいです。

参考となるサイトの紹介
http://www.slideshare.net/OracleMiddleJP/java-flighr
jQuery ver1.5の頃から既に実装はされていましたが、意外と知られていないので紹介します。

JavaServletやPHPなどで作られた/call1、/call2の結果を受けて処理を実施する場合、以下のようなコードが考えられます。

$.get('/call1', function(ret1) {
$.get('/call2', function(ret2) {
// ここにcall1, call2の結果を使った処理を記述
}
}


上記は、一見問題が無いように見えますが、以下の問題をはらんでいます。
- コードの見栄えが悪い(可読性が悪い)
- 更に多くの処理が必要だったらネストが深くなる
- call1, call2を逐次実施しているため効率良く処理が行われていない(並列処理でない)

このようなときは、jQuery.Deferredという仕組みを使うと分かりやすく、かつ、処理が並行的に実施できるようになります。

先ほどの例をDefferedを有効に使った処理に置き換えると、以下のようになります。
$.when($.get('/call1'), $.get('/call2'))
.done(function(ret1, ret2) {
// ここにcall1, call2の結果を使った処理を記述
});


$.whenに平行処理したい分だけ記述すれば、非同期で複数の処理を呼び出しができ、上記では記述していませんが、エラー処理もまとめて記述する事ができます。
また、先の例よりもコードが読みやすくなった気がします。

defferedを組み込む方法は、長くなってしまうので、参考となるサイトをご紹介します。
http://www.tohoho-web.com/js/jquery/deferred.htm

これから自作でfunctionを作成するときは、上記のdefferedを意識した作りを心掛けると良いですね!