本を読む

読書やコンピュータなどに関するメモ

「Shibuya.lispテクニカルトーク #5」観覧

Shibuya.lisp TT #5

 Lispコミュニティ「Shibuya.lisp」のテクニカルセミナーイベント「Shibuya.lispテクニカルトーク#5」が開催されました。今回もすごく楽しく話を聴かせていただきました。

 今回は、なぜかClojure祭になっていたのが印象的です。その火に油を注ぐかのように、オーム社さんが会場で書籍販売をやっていました。ちなみに、オーム社の森田さんはLTで発表もしていました。

 あと、今回はいままでに比べると、比較的とっつきやすい発表が多かったように思います。

 以下、観覧メモ。間違いがあったらご指摘ください。

開会の挨拶(佐野匡俊)

 第5回までの開催をふりかえり、Shibuya.lisp TTがLisperに発表の場を与えてきて、うれしい、と語りました。発表者はいつでも募集中だそうです。

 Shibuya.lispの最近の動向としては、なんといってもLispjobs.jpに2件募集があったこと。また、前回のTTからλ神社shibuya.lisp支部がスタート。さらに今回は懇親会会場がTTと同じ会場となることが新しい試みとして紹介されました。

 ちなみに、佐野さんは海外のLispカンファレンスに参加するのが趣味だそうです。

Lispバトン結果報告(higepon、g000001)

 higeponさんの呼びかけで始まった「Lispバトン」について、元のScheme版と、そこから派生したCommon Lisp版の模様が報告されました。

 Scheme版はhigeponさんが報告。もともと、TT #4のLTで「さあ家に帰ったらSchemeのコードを書いてみよう」という呼びかけをして、その実践編としてコードバトンをやってみたそうです。いちから作るのではなく、コードにちょっと手を入れる形なのでしきいが低い、ということも謳っていました。

 コードバトンは、GitHub(Gist)にコードを載せて、URLをバトンがわりに次の人に渡し、渡されたらコードをフォークしていじる、というもの。ルールは、前の人の変更をばっさり消したりなどをしないという「他人にやさしい変更」と、コードの行方を追うために「次の人を見守る」ことの2つ。Scheme版では17人が参加し、68行でスタートしたコードが583行にまでに成長したそうです。

 以下、参加者ごとのできごと(敬称略)。

higepon
Moshで書いた英単語学習スクリプトでスタート。問題を出力し、Ctrl-Dが入力されると回答を表示し、ユーザーが自己採点するもの。
yad-EL
いきなり処理系がGauheに。
garaemon
moshに戻す。躊躇なくマクロを使う。SRFI-37でコマンドラインオプション解析。
yshigeru
usageを1文字修正。「これをやるためにソースを実行してひととおり読んだはず」(higepon)。
g000001
トラップとして入れていたcall/ccをあっさり削除。「コード書けないというのはウソ」(higepon)。
masa_edw
FFIで端末制御し、UI。
leque
そろそろコードがスパゲティになってやばいというところでさくっとリファクタリング。ユニットテストも追加。アクセッサなど、リファクタリングの定石を粛々と。
emasaka
逆引きやタイムアウトを追加。with-cursesをマクロに。
kaz634
ツールの目的に立ちかえり、最近間違えた単語を考慮したり、日付を記録したりの変更。
naoya_t
moshとGaucheの両方で実行できるように変更。GaucheではC-wrapperを使うよう、cond-expandで切り分け。
snmsts
Windows対応。freeがダミーだったのを直す。
scinfaxi
カラーを使う"--color"オプションと、色をごちゃごちゃにする"--mad"モードを追加。その他、SRFIを使いこなした変更をいろいろ。
Gemma
CGIで動くように。「大化けして楽しい」(higepon)。
torus
クエリパラメータ。
nobusun
整理。
koguro
アンカーですごいことに。自前でWebサーバーを実装して内蔵。MMLからwavデータを動的に生成するシンセサイザを内蔵して正解・不正解の音も出るように。「変態」(higepon)。

 その他、Schme以外のNu版・Smalltalk版・Clojure版のブランチも紹介されました。

 続いてScheme版から分岐したCommon Lisp版をg000001さんが紹介。同じく、参加者ごとのできごと(敬称略)。

g000001
SchemeからCLに。CLではmatchがないので構造体とアクセサを。goを使って再帰からループに。
aka
単語登録関数(hige:pin)、一覧表示関数(hige:pun)など。read time evaluationや、ソートを交換しやすくするしくみなど。
quek
パスの"~"は処理系依存なので、(user-homedir-pathname)に。
snmsts
Java上のABCLとSwingでGUI。
(び)
SBCL+Mac OS Xのsayコマンドで読み上げ。
naoya_t
辞書の引っぱり出しかたを変えた。hige:pan関数。aifを定義したり、dolistを利用したり。
masatoi
hige:pen関数でn択問題。named-let。
cranebird
with-系のマクロを定義。CLOSでdictをオブジェクトに。print-objectを定義。
smeghead
hige:punの単語表示のときにもスコアを表示。
NANRI
untabify、インデント調整、format指定子を大文字にそろえる、などのフォーマット調整。辞書が存在しないときの動作を修正。asdfのパッケージ化してネットワーク経由でインストールできるように。
snmsts(2周目)
(び)さんのsayコマンドを、処理系を見て切り分けるように。
making
辞書をhttp経由で取得できるように。hige:pinで。
深町英太郎
単語登録時に、意味が空ならGoogle翻訳の結果を。
kurohuku
Gray Streamを利用してログ出力。
kosh
空のエントリを登録しないように。ログディレクトリがなければ作る。newLispフォークも。…あとはどこかにw

 g000001さんは最初はどうなるかと思ってたけど、参加者がみんな楽しんでいて、またやってみたいと思った、と語っていました。また、大変だった点としては、人を集めるのに苦労したそうです。

初めての人のためのClojure(yshigeru)

 いつもシルクハット姿でユーモアのある発表をする吉田茂(yshigeru)さんが登場。最初にOOoがクラッシュしたのも仕込みかと思いました。

 話のマクラは、「初めての人のためのLisp」を竹内郁雄さんにもらった話や、シーランド公国の詳しい解説など。あと、シルクハットじゃないと思ったら、レイトン教授やテリー伊藤とカブるので、今回は探偵物語の松田優作姿だったそうです。

 本編は、HTTPサーバーを作りながらClojureの基礎を学ぶ話。文法解説と実例を交互に入れて、話にめりはりをつけているのがうまいと思いました。ちなみに、発表に応募してからClojureを勉強したのだとか。

 まず、Clojureの基礎の基礎を紹介しました。Javaオブジェクトの生成(カッコの位置が違う)、メソッド呼び出し(ドットの位置が違う)、変数定義def、関数定義defn、cond、let、recurとloopなど。

 それを受けて、HTTPサーバーのレスポンス側の実装の紹介に移りました。共通ヘッダの出力、各ステータスごとのレスポンス関数、ファイルの種類の判別、ストリームへの出力とボトムアップに機能を追加していって、レスポンスの根本になるdo-file-response関数まで解説しました。

 再びClojureの文法解説に戻って、こんどはシーケンスを中心とするデータ型を解説しました。リスト、ベクタ、マップ、セットなどはぜんぶシーケンス(first、rest、consが定義されているもの)で、filter、every、some、mapなどのシーケンスライブラリで操作できるとのこと。リスト内包表記for、シーケンスを遅延するlazy-seq、シーケンスを現実化するdoallやdorunなど、正規表現をシーケンスするre-seq、なども紹介されました。また、無名関数fn(lambdaを捨てちゃった)や、letで[]の入れ子にした分配束縛なども解説されました。

 そのうえでHTTPサーバー後編として、今度はリクエスト側の実装を解説しました。ヘッダの読み込み、リクエストの読み込みと、やはりボトムアップに積み上げていって、メインループに到達。ソケットはJavaのjava.net.ServerSocketを使っていました。

 最後に、Clojureの高度な話として、平行プログラムのためのref、atom、agentを紹介。ファイルごとにスレッドを作るwcの例で、それぞれの使い方を解説しました。

Emacs Lispのある生活(はやみずゆうと)

 題名に反して、ほとんどClojureの話でしたw

 前ふりとしては、Emacsのauto-save-modeを使おう、でも勝手に上書きされたら困る、そこでLinuxの追記型ファイルシステムNILFSを使えば5秒ごとにスナップショットをとれるよ、という話。そういえば、NILFSはTAO/ELIS関係の天海さん作ですね。

 で、本題はClojureで作ったプレゼンソフト「Prejure」の紹介でした。プレゼン記述はDSLであり、DSLといえばLisp、Lispならチューリング完全だからなんでもできる、と。さらに、JavaVMなのでJavaのGUI機能も使えて、アイコンを表示したりリサイズしたりも自在、というのをデモしていました。

 実装としては、シート=関数、プレゼン=シートのシーケンス、アニメーションもシーケンスという構造。スライドは関数型の世界で作り、それを手続き型のPlayerで処理し、さらにそこから分離されているViewerで表示、という構成になっているそうです。MVCみたいなものでしょうか。実現したい機能としては、アニメーションやPDF出力、リモートでプレゼンを表示できるスライドサーバー、GUI編集などが挙げられました。

 後半は、Prejureを通して見たClojureを語りました。まず、関数型はアクが強い言語が多くて、特にmutable=悪という思想が強い、という考えがあるそうです。それが、Haskellではキレイな世界にこだわり(キレイじゃないものはモナドに閉じこめる)、OCamlは逆になんでもありに、という実装に分かれているということでした。

 それに対してClojureは、「必要悪は認めるが、足かせがある」というバランスが面白い、と語っていました。具体的にはrefによるトランザクション(STM)で、STMは遅いので使いものになるのか、と思っていたところ、Clojureはそれをうまく足かせとして活かしているそうです。実際、はやみずさんは卒論がSTMだったそうで、そのへんを並列カンファレンスで話したSTMの話の資料を使って説明していました。refを使った破壊版と使わない非破壊版で、非破壊版が30倍速いというベンチマーク結果も興味深いものでした。

 最後に、Javaのクラスがよくわからなくて、Clojureを書いているよりJavaのクラスを調べているほうの時間がほとんどになってしまった、という体験も語られました。

LT:1+1はなぜ2になるの? ~Gaucheによる証明~(アラスカ猫)

 ここからLT。ペアノの公理系(0とsucc())とノイマンの表現(0は空集合、succ()はunion)による自然数表現をGucheに乗せ、逆関数desucc()とペアにしてゼロに縮退させたりしながら、1+1=2を証明する、という話だそうです。いや、私はわかってないんですが。

LT:世界で一番短い(かもしれない)オブジェクト指向フレームワーク「nekoduck2」(yadokarielectric)

 クロージャを使ってオブジェクト指向プログラミングを時前で実装する方法の紹介でした。クロージャをOOPとするときに、まず足りないのがメソッドディスパッチャなので、連想リストで管理する方法を実装。続いて、継承を、親オブジェクトへのリンクを持ってメソッド検索時にオブジェクトをまたぐ方法で実装。さらに、メソッドに引数を渡す方法を実装してみせました。

 なお、プレゼンにはS6、デモにはBiwaSchemeのREPLを使って、ビジュアルに見せていました。

LT:自分をClojure化する方法(深町英太郎)

 LTに応募するときに、タイトルだけ考えて提出したそうですw

 内容は、WebプログラマにとってのClojureのメリットについて。Common Lispだと動くホスティングサーバーがほとんどないので使いにくいけど、ClojureならJVMがあれば動くのがメリット、特にGAEでClojureが使える、という話でした。

LT:Clojure+Leiningenで3分Hadoop(making)

 「Clojureの話もHadoopの話もしません」と前置きして、ClojureのビルドツールLeiningenを紹介しました。Clojureのプログラムを動かそうとすると、依存するJavaライブラリの用意とかクラスパスとかの問題が面倒です。そこでLeiningenを使うと、jarの依存関係を見てmaven2リポジトリから取得して、一式をビルドしてくれる、というところまで自動でやってくれるそうです。例として、オライリーのHadoop本にあるサンプルをClojureで実装したスクリプトだけを用意して、まっさらな環境にLeiningenをインストールし、Leiningenのleinコマンドが自動でHadoopもClojureも自動インストールしてjarファイルを作る、という様子を動画でデモしていました。

 なお、clojure-user.orgドメインを取ったということも報告していました。

LT:『プログラミングClojure』の編集制作におけるLisp/Scheme(森田尚)

 「プログラミングClojure」の担当編集者の人が、制作過程を紹介しました。ワークフローとして、Subversionで原稿をコミットし、tracでチケット管理し、HudsonでビルドすることによりPDFを作成してレビューする、というループを回していたことを解説しました。ビルドの中では、自身が未踏で作ったIdeoTypeの後継システムをGaucheで作り、LaTeXをラップしているそうです。なお、懇親会で森田さんに伺ったところによると、Shiroさんのチケット消化能力は、やはり超人的だったそうです。

LT:CADRドキュメント和訳とか(たけおか)

 50才近いという竹岡さんが、今でも生きる昔の技術を紹介しました。いわく、Connection Machine(CM-1)はMap Reduceの先駆け、ベクトル計算機はすたれたようだけどGPGPUでまたトレンドに、とか。そして、個人プロジェクトとして、CADR Lispマシンのドキュメント(MIT AIM-528)和訳や、CRAY-XMPマニュアル和訳、実用Prolog入門ドキュメントなどをやっていることを紹介しました。

LT:LispでクールなMac GUIプログラミング(Nu programming language)(yuumi3)

 Objective-Cで書かれてMacのCocoa環境で動くLisp系言語、Nu programming languageを紹介しました。iPhoneでもREPLが動くそうです。Nuはオブジェクト指向言語なので、「(car '(a b))」のほかに「('(a b) car)」(レシーバ+メッセージの形式)とも書けるとか。

 そして、コードバトンの英単語学習スクリプトをデモ。Twitterクライアントも起動しましたが、ネットが不調でタイムラインは取れなかったようです。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/728-955e58ce

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad