スキップしてメイン コンテンツに移動

YAPC::Asia Tokyo 2012 で LT してきた話とか感想など

去る9月、27日からの3日間に渡って東京大学伊藤国際学術研究センターで開催された YAPC::Asia Tokyo 2012 に参加してきましたので感想など。

YAPC に参加したのは昨年以来2回目。前夜祭から最後まで参加したのは始めて。中国地方在住ということもあってこれまでコミュニティとは無縁で一人勝手にやってきたのだけれど、昨年はインターンシップで東京にいたので2日目午後のみ当日券で参加しました。

その時は知り合いもいないし、トークと LT を眺めて O’reilly 本を買ってそそくさと帰ったのだけれど、過去最大の YAPC (当時) ということで一プログラミング言語をテーマにした催事で東工大のホールが埋まる光景はすごかった。あとどうでも良いけど LT の間中吹奏楽部らしき音が外から響いていたのも妙に覚えています。

そんなわけで今年は人といくらかでも繋がりたいなァと思いつつ、学生チケットが無料だということを知って去年は惜しいことをしたなァと卑しい後悔をしつつ参加しました。

LT してきた

去年までカンファレンスに行ったことがなかったので LT なるものをリアルで観たことがありませんでした。

手を挙げたのは私一人だったはず。みんな意識高い。

などと激励も頂いたし、今年は LT 見たことある人として参加するつもりでしたが、遠方からの参加者支援制度に申し込んだところ株式会社スカイアーク様から旅費支援を頂くことができたので、遠方からの参加者枠で LT する人にクラスチェンジ。

おかげでボーイング787で快適に東京へ行くことができましたが、スライドもトークもギリギリまで直してイメトレのみのぶっつけ本番。 1人5分だわ時間は押してるわ目の前に小飼弾氏がいるわで緊張して早口で尻切れトンボでショボーン。反省の多い発表になったけれどそれもまあ経験。

Perl の将来

Perl 5 の運用ノウハウやモジュール紹介以外に、Perl 6 やその他の言語のトークも数多くあったことが興味深かったです。

などなど。

Perl 5 は唯一の処理系 perl と CPAN のモジュール群で特徴づけられてきましたが、XS の難しさはよく批判されるところだし、モジュール数で言えば既に RubyGems に抜かれ、 PyPI にも追い上げられているとのこと。

Perl 6 は Perl 5 とは (VM レベルでの相互運用性はあるかも知れないけど) 独立した道を進んでいるし、Tora の node.js 向けコンパイラ kuma や node.js から Perl モジュールを呼び出し可能にする node-perl は JS との間の相互運用性に焦点が当てられています。

他の LL が発展してきた昨今、「島言語」がないのと同様に「島言語環境」も互いに繋がっていくのかなァと思っています。

その他

LTthon

Hachioji.pm 主催。メイン会場の伊藤謝恩ホール前のスペースでひたすら LT をやり続けるコーナー。 トークの方ばかり見ていたのであまり見られなかったのだけれど、飛び入りも多かったようだしホールの後ろの方の席でトークを聞いてると後ろから笑い声が聴こえてきて盛り上っていたようです。LTthon の動画って公開されてるんでしょうか。

飲食関係

本郷キャンパス周辺は飲食店が豊富すぎて実にうらやましい立地。

1日目はランチ交流企画 のくじに当たったのでぼっち飯回避。2日目はくじに外れた人同士で連れ立ってラーメン喰ってきました。 このランチ交流企画は全然接点がない人と知り合いになれてとても良かった。ランチ代の補助はなくても良いから人数増やして来年もやって欲しいです。

ノベルティ

豪華。学生チケットには T シャツがつかないのですが、YAPC 日程終了後に余っていたものが放出されて争奪戦になっていました。T シャツは手に入りませんでしたがどさくさでマグカップを確保。

(中身は @maka2_donzoko さんに頂いた Acme 大全シール。エロい)

DSIRNLP

YAPC とは全然関係ありませんが、第3回データ構造と情報検索と言語処理勉強会 (DSIRNLP) が YAPC 翌日の9月30日に渋谷の mixi オフィスで開かれていたので、当日の昼に参加登録して聴講してきました。

台風17号の接近で残念ながら中断されましたが、データ圧縮や簡潔データ構造について脳内にポインタを貼ることができました。 ゲームの景品で Amazon Web Servicesプログラミング ―APIの基礎からElastic Beanstalkの利用まで を入手したので、これから読んで Amazon にレビューを投稿する義務が発生してちょっとあせってます。

おわりに

まったくのぼっちスタートでしたが、ランチ交流企画や前夜祭・後夜祭で多くの人と面識が持てて、Perl 仲間を増やす良い機会になりました。

特に日程を通して色々と話をさせてもらった @VienosNotes さんや @risou さんをはじめお話させて頂いた皆様、大変お世話になりました。楽しかったです。また来年お会いしましょう。

コメント

このブログの人気の投稿

救急外来にかかったときの記録

子どもの頃にかかった記憶はあるが自分で行ったことはなかったのでメモしておく。 先日怪我をした。より具体的に云うとランニング中に転倒し顎を地面に叩きつけた。深夜の12時ごろの話である。 その時点ては両手の擦傷が痛いとか下顎の間接が痛いとか奥歯のセラミックが割れなくて幸いだったといった程度だが、マスクを外して見るとなにやら下部に血がついている。 顎にも擦傷があるのかとうんざりしながら歩いて帰り、血の滲んだマスクを捨てて傷口を洗おうとしたところで皮膚が割けて肉が見えているのに気付いた。 一瞬顔が青くなったが単身なので倒れるわけにはいかない。幸い血は固まっていてそれほど出血していないし、先程まで運動していたからかあまり痛みもない。 この時点で明白な選択肢は3つあった。即ち: 救急車を呼ぶ 自力で病院へ行き救急外来を受診する 応急処置して朝になったら近場の医院を受診する である。まず 3 は精神的に無理だと悟った。血も完全には止まっていないし、痛みだしたら冷静に行動できなくなるだろう。 1 はいつでも可能だったが、意識明瞭で移動にも支障がない状態では憚られた。救急車が受け入れ先病院を探すのにも時間がかかると聞く。 結局とりあえず 1 をバックアップ案とし、2 の自分で連絡して病院へ向かうことにした。まずは病院探しである。このときだいたい 00:30 AM。 最初に連絡したのは最寄りの都立病院の ER だった。ここならタクシーで10分もかからない、のだが、なんと ER が現在休止しているとの回答だった。そんなことがあるのかと驚愕したがどうしようもない。 近場に形成外科の救急外来の開いている病院はないか尋ねたところ 消防庁の相談センター の電話番号を案内された。 ここで4つの病院を紹介された。余談だが相談の対応は人間だが番号の案内は自動音声に切り替わるので録音の用意をした方が良い (一応2回くり返してくれる。) いずれも若干遠くタクシーで2、30分かかるが仕方がない。最初に連絡した最寄りの病院はその日形成外科の当直医師がいなかった。二件目でトリアージの質問をされ、受け入れ可能とのことだったので受診先が決定。このとき 00:45 AM。 診察時に脱ぎ易い服に着替え (このときまでランニングウェアだった)、健康保険証を持って病院へ向かう。ガーゼがないのでマス...

js_of_ocaml の使い方

js_of_ocaml (jsoo) は Ocsigen が提供しているコンパイラである。その名の通り OCaml バイトコードから JavaScript コードを生成する。 これを使うことで OCaml で書いたプログラムを Web ブラウザや node.js で実行することができる。 インストール 単に OPAM を使えば良い: $ opam install js_of_ocaml js_of_ocaml-ocamlbuild js_of_ocaml-ppx バージョン 3.0 から OPAM パッケージが分割されたので、必要なライブラリやプリプロセッサは個別にインストールする必要がある。 とりあえず使うだけなら js_of_ocaml と js_of_ocaml-ppx の二つで十分。後述するように OCamlBuild でアプリケーションをビルドするなら js_of_ocaml-ocamlbuild も入れると良い。 これで js_of_ocaml コマンドがインストールされ、OCamlFind に js_of_ocaml 及びサブパッケージが登録される。 コンパイルの仕方 以下ソースファイル名は app.ml とし、ワーキングディレクトリにあるものとする。 手動でやる場合 一番安直な方法は、直接 js_of_ocaml コマンドを実行することである: $ # バイトコードにコンパイルする。js_of_ocaml.ppx は JavaScript オブジェクトの作成や操作の構文糖衣を使う場合に必要 $ ocamlfind ocamlc -package js_of_ocaml,js_of_ocaml.ppx -linkpkg -o app.byte app.ml $ # 得られたバイトコードを JavaScript にコンパイルする $ js_of_ocaml -o app.js app.byte OCamlBuild を使う場合 OCamlBuild を使う場合、.js 用のビルドルールを定義したディスパッチャが付属しているので myocamlbuild.ml でこれを使う: let () = Ocamlbuild_plugin . dispatch Ocamlbuild_js_of_ocaml . dispatcher $ # app.ml -...

Project Euler - Problem 35

問題 原文 How many circular primes are there below one million? 日本語訳 100万未満の巡回素数は何個か? 解答 回転させた数値がすべて素数ということは、すべての桁が奇数でなければいけません(ただし2を除く)。 追記 匿名氏にコメントでご指摘頂いたのでコードを一部修正しました。 いずれかの桁に5がある場合も、回転させると必ず5の倍数が現れるので除外できます。 もっと追記 前の修正に間違いが入っているのをご指摘頂いたので修正しました。 5自体は素数なので、巻き添えで除外してはいけません。 #!/usr/bin/env perl use strict; use warnings; use feature qw/say state/; use List::MoreUtils qw/all none/; sub is_prime($) { state %memos; my $n = shift; return 0 if $n < 2; return 1 if $n == 2; return 1 if $n == 3; return $memos{$n} if exists $memos{$n}; $memos{$n} = none { $n % $_ == 0 } 2 .. sqrt $n; } sub rotate($) { my $n = shift; substr($n, 1) . substr($n, 0, 1); } sub rotations($) { my $n = shift; my %seen = ($n => 1); $seen{$n} = 1 until exists $seen{$n = rotate $n}; keys %seen; } sub is_circular_prime($) { state %memos; my $n = shift; return 0 if $n =~ /[024568]/ and $n != 2 and $n != 5; return $memos{$n} if exists $memos{$n}; my ...

Perl の新 class 構文を使ってみる

Perl 5 のオブジェクト指向機能は基本的には Python の影響を受けたものだが、データを名前空間 (package) に bless する機構だけで Perl 4 以来の名前空間とサブルーチンをそのままクラスとメソッドに転換し第一級のオブジェクト指向システムとした言語設計は驚嘆に価する。 実際この言語のオブジェクトシステムは動的型付言語のオブジェクト指向プログラミングに要求されるおよそあらゆる機能を暗にサポートしており、CPAN には Moose を筆頭とした屋下屋オブジェクトシステムが複数存在しているがその多くは Pure Perl ライブラリである。つまり「やろうと思えば全部手書きで実現できる」わけである。 そういうわけで Perl のオブジェクト指向プログラミングサポートは機能面では (静的型検査の不在という現代的には極めて重大な欠如を除けば) 申し分ないのだが、しかし Moose その他の存在が示しているように一つ明らかな欠点がある。記述の冗長さだ。 コンストラクタを含むあらゆるメソッドは第一引数としてレシーバを受ける単なるサブルーチンとして明示的に書く必要があるし、オブジェクトのインスタンス変数 (a.k.a. プロパティ / データメンバ) は bless されたデータに直接的ないし間接的に プログラマ定義の方法 で格納されるためアクセス手段は実装依存である。これはカプセル化の観点からは望ましい性質だが、他者の書いたクラスを継承するときに問題となる。ある日データ表現を変更した親クラスがリリースされると突然自分の書いた子クラスが実行時エラーを起こすようになるわけだ。 そうならないためにはインスタンス変数へのアクセスに (protected な) アクセサを使う必要があるのだが、そのためには親クラスが明示的にそれらを提供している必要があるし、そもそも Perl にはメソッドのアクセス修飾子というものがないので完全な制御を与えるならばオブジェクトの内部状態がすべて public になってしまう。 そのような事情もあり、特にパフォーマンスが問題にならないようなアプリケーションコードでは Moose のようなリッチな語彙を提供するオブジェクトシステムを使うことが 公式のチュートリアルでも推奨 されてきた。Perl コアのオブジェクトシステムの改良は...

Project Euler - Problem 3

問題 原文 What is the largest prime factor of the number 600851475143 ? 日本語訳 600851475143 の素因数のうち最大のものを求めよ。 解答 いきなり難易度が上がりました。素因数分解の問題です。 結局のところ片っ端から割ってみるしかないのですが、探索範囲を狭めることはできます。 正の整数の範囲で考えると、l = m * nかつm >= nであれば、floor(sqrt(l)) >= nであることが直感的に分かります。ここでfloorは実数を0の方向に丸めて整数にする関数、sqrtは平方根を返す実数関数です。 nが分かれば、mは除算で求められます。つまりlが与えられた時、それを2つの因数に分解するのに探索する範囲は高々2 .. floor(sqrt(l))で十分ということです。 2つに分けられたならこっちのもの、得られたmとnを再帰的に分解して、その結果を合わせれば素因数分解の結果が得られます。 アルゴリズムを書き下すと次のようになります: n <- floor(sqrt(l))とする。 n = 1なら、これ以上は分解できない(lは素数である)のでlをそのまま返す。 nがlの因数なら、m <- l / nとし、mとnに対してこのアルゴリズムを再帰的に適用し、その結果を連結して返す。 因数でないなら、n <- n - 1とし、2.から繰り返す。 これで計算は可能です。しかしもう少し最適化を検討してみましょう。 偶数は一般に2mの形で表せます。同様に奇数は2m + 1と書けます。 偶数同士の積は2m * 2n = 4mnとなり、l = 2mnとおけば2lなのでこれも偶数です。 奇数同士の積は(2m + 1)(2n + 1) = 4mn + 2(m + n) + 1であり、l = 2mn + m + nとすると2l + 1なのでこれも奇数です。 偶数と奇数の積は2m(2n + 1) = 4mn + 2mなので、l = 2mn + mとおいて2lなので偶数です。 つまり、奇数の因数は必ず奇数のみから成るということが分かります。先ほどのアルゴリズムでは、4.のステップでn <- n - 1としていました。...