[0]mitc - 日記
<前[4] [5]一覧 [6]次>

2011/10/15(土)YAPC::ASIA TOKYO 2011に参加しました
Perl】miff
YAPC::ASIA TOKYO 2011http://yapcasia.org/2011/
発表者ではなく聴講者として参加しました。
参加したセッションの感想を書きます。

Perl5.16 and beyond

いろんなuse vXXXしたコードが混在していった時におかしなことにならないのかな?
use v5.16したモジュールをuse v5.18したモジュールから呼び出して、それを更にuse 5.8したコードから呼び出したりとか
ブラウザ上でPerlが動くとどうなるんだろう。
JavaScriptみたいなことになるのかな。
密かにIE上ではVBScriptも動くわけですが、ああいうことをイメージすればいいのかな?

Carton: CPAN dependencies manager

サービスを作った時のCPANモジュール管理の話。
モジュールのバージョンを含めて管理して簡単にインストールできるようになる。
凄く便利そう。
まだ使わない方が良いとのことだけれど。

SmartPhone development guide with Node/CoffeeScript and HTML5 technologies, for Perl programmers

一番興味深かった。
スマートフォンのネイティブアプリ、流れはWebViewとネイティブ機能のハイブリットだよね、というのは完全同意。
Facebookがそうなってるのは有名ですが、Google+もだったんですね。知りませんでした。
で、それらはWebViewのWebページ上で動作しているJavaScriptとネイティブ機能のブリッジを作ってうまい具合にネイティブとWebViewの融合を図っているとのこと。
そうなってくると、アプリのロジックの多くがJavaScriptで書かれるわけで、それと連携するサーバサイドもJavaScriptで書けるとスムーズだよね、ということに。

そこでnode.jsですよ、と。
ただし、JavaScriptそのもので書くのも色々大変だからCoffeeScriptで書くといい感じに書けるよと。

CoffeeScriptをあんまり知らなかったので調べてみると、例えば名前空間だって持てるし、クラスもより簡潔に記述できるようで、確かに便利そう。
いろんなしがらみがあるクライアントサイドはともかく、新規に始めるnode.jsプロジェクトなんかで使わない手は無いんじゃないかと。

他のトピックとしては、既に色々とJavaScriptでスマートフォンのネイティブアプリを書く方法はあるよね、という話が。

■PhoneGap
この辺の技術を見てみるならまず触ってみると良さそうなフレームワーク。

■Titanium
http://www.appcelerator.com/products/titanium-mobile-application-development/
■SL4A
http://code.google.com/p/android-scripting/
Android上でスクリプトを動かせる、ということみたいですね。
なのでPerlでも作れると。



WebViewを使うことの一番いいところはやっぱりアプリをアップデートしなくても更新できるところだと思うので、PhoneGap周りをウォッチしながら色々試していくのが良いのかなあ。

他言語から見たPerlのテスト

テストを考える時の分類
PerspectiveTarget
HowWhat
テストフレームワークの役割
  1. テストを書くことの支援
  2. テストの実行
  3. テストのレポーティング
Perlのテスト環境は?
テストを書くことの支援
テストの実行
prove (TAP::Harness)

テストのレポーティング
TAP::Harness::JUnitとか(こうするとJenkinsでPerlのテスト結果を扱える)
参考→http://dann.g.hatena.ne.jp/dann/20100404/p1

TAPはPerl1の時に作られてPerlと共に歩んできた。
いろんなテストフレームワークを乗せられるシンプルな仕様になっている。
http://gihyo.jp/dev/feature/01/test-perl/0001

Browser Integration
→ブラウザの挙動をエミュレートする?
自動クリックとかそういうのより、ウェブサービスの外から特定のリクエストを送って内部の挙動を見るとかそういう感じのようだ?
Plackなら
Test::WWW::Mechanize::PSGI
とかある

Fakeというのも一瞬出ていたのですが、どういうカテゴリかわかりませんでした。
サーバにとってのクライアントとかクライアントにとってのサーバとかの、
作成しているシステム外部の振る舞いを見せかけるような仕組み?

今AndroidでHTTPリクエストが発生する処理をテストする仕組みを作っているんですが、もしかしたらこのカテゴリなのかも。

Apporoで類似文字列検索

今すぐに使う場面はなさそうですが、検索が必要なサービスを作る時には考慮しなければいけないな、と。
全文検索だけでなく類似文字列検索も。

Monads in Perl

【注意】自分にとっては非常に難しく、理解できていないので下に書かれていることは間違いが多く含まれていると思います。もしこれを読んでいるのが後で検索して来た方だとして、内容を信じないで下さい。

文字では表せない……
ある関数fとgがあったとして、次のような関係が成り立つ関数f;gを考える
(f;gの;は行の終わりを表すのではなく圏論で使われる記号っぽい?)
sub f;g{
    f(g($_[0]));
}
これはfとgを合成した関数になる。

で、M(*)がモナドクラスのインスタンスを返すとすると、
となり、モナドオブジェクトの世界とそれ以外の世界に別れることになる

そこで、上のコードの例でfもgも*を引数に取りM(*)を戻り値とするなら、
そのままではf;gを作れない。

そこで、f;gではなくf>=>gで対処する。
;を単純に戻り値を引数にリダイレクトすると考えると、
>=>というのは、「プログラマブルな;」となる。

つまりfとgをそのままでは繋げないのなら、間に何か任意のコードを挟んで繋がるようにすればいいじゃないということ。
sub f>=>g{
    f(to_monad(g($_[0])));
}

# 何かしら引数をモナドオブジェクトにしてくれる関数
sub to_monad { ... }
こういうことか。
to_monadが何をするかはわからねど、こうしてやればfとgは合成できますよね。

ちなみにMには3つの要素が必要らしい
あらゆる型の包含というのは、JavaとかC#のGenericsのイメージですよね。
unitというのは*をM(*)化する関数のようだ
ナナメの矢印というのは、現時点の自分には言葉にできないです。
矢印というのは、写像の矢印ですよね多分。
http://ja.wikipedia.org/wiki/%E5%86%99%E5%83%8F
「持ち上げる」というのは概念的な話で、
多分「gの引数をfの戻り値に近付ける、あるいはfの戻り値をgの引数が要求する形に近付ける」ような意味合いだと思ったのですが理解が及びませんでした。

そして、モナドはあらゆる値*をモナドの世界に拡張することであらゆる値の間で演算を可能にできると。
int + string(cf. 1 + "a")は難しいけれど、モナドの世界に持って行ったらみんなM(*) + M(*)なんだから簡単でわかりやすいよねということ。

コードの例はちょっとだけわかった気がした

まず、ある数値に対してダイスを振った後に取り得る値の一覧を取得する関数を書く
roll_dice(5);

sub roll_dice {
     my $num = shift;
     map { $num + $_ } (1..6);
}
では、[3,5]に対してroll_diceを適用するには?

実装1
roll_dices([3,5]);

sub roll_dices {
     my $nums = shift;
     map { roll_dice($_) } @{$nums};
}

sub roll_dice {
     my $num = shift;
     map { $num + $_ } (1..6);
}
と、ここまで書いてきて講演で書かれていたコードがどんなだったかわからなくなってしまいました。
確かHaskellのflatmapという関数と同じ役割をするflat_mapという関数を使っていい感じに書けるよということだったと思うんですが。

色々種になる知識は伝えて頂けたと思うので、これを元に勉強を進める必要がありそうです。

講演者の方のサンプルコード:https://github.com/hiratara/p5-Data-Monad

この後の話はAnyEventとモナドに移っていきましたが、JSDeferredのことと似ていたかな。
非同期処理をいい感じに書くにはやっぱりこういう知識が必要なんだなということですね。

少人数でのWebアプリ開発 - CGIからPSGIまでの変遷

自分のことで思ったこと
とにかくテストは重要ですね、書きましょう、テストを書きましょう。

PerlでJCL、基幹バッチをダウンサイジング

変換後のPerlコードはとてもとても凄いものでした。
Perlの可能性を感じてしまった。

Perlで仮想サーバ制御(仮)

EucalyptusというAWSと互換性のあるAPIを提供するEC2みたいなクラウド環境を作るOSSというのははじめて知った

セッション以外

懇親会でusp lab.の方とお話させて頂いたのですが、
シェルスクリプト(bash)と標準コマンド群だけで作られたデータベースのことを教えて頂きました。
シェルスクリプトでDBMSを作ってしまうというだけで凄いと思ったのですが、それが既に無印良品とかローソンなどのPOSシステムなどで実際に稼働していると聞いて更に驚き。
しかも、分散DBにもできてしまうということでもっと驚き。
MySQLと遜色が無く、1億レコードのソートなどではMySQL以上のパフォーマンスを出すらしいです。
この辺はチューニングの話も絡んでくると思うのでわからないのですが。

全体を通して

とにかく、まだまだ自分の知らない広大な世界が広がっているなあという驚きに満ちたカンファレンスでした。
人の熱気も凄くて、Perlコミュニティの活発さがよくわかりました。
自分も何らか貢献していけたらいいなあと思いました。

最後になりましたが、運営の方々、スピーカーの皆様、懇親会でお話させて頂いた方々、そして全ての参加者の方々も、本当にありがとうございました、そしてお疲れ様でした!

[2]コメントを書く
■コメント(0件)
■トラックバック(0件)

<前 一覧 次>

[9]ログイン
[*]検索
adiary Version 2.21