本を読む

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

「と学会年鑑AQUA」

と学会年鑑AQUA
と学会年鑑AQUA
posted with amazlet at 08.05.27
と学会
楽工社
売り上げランキング: 9687


 「トンデモ本の世界」シリーズとともに続いている「と学会」報告集シリーズ。

 「トンデモ本の世界V」で紹介されていた「人類の黙示録」がトンデモ本大賞をとっていて、あいかわらず紹介内容が笑える。M2とか、反キリストOとか。で、著者は「ぼくの弟は怪人」「四丁目の怪人くん」の枡谷タケシだったのかぁ。「三つ目がとおる」+「おまかせ! ピース電器店」って感じの作風だったような覚えが。

「喰いしん坊!」18巻



 喰いワンGP決勝戦、ついに決着!?

「天牌 列伝」

天牌列伝 (ニチブンコミックス)
来賀 友志
日本文芸社


 入星、北岡、菊田、三國がそれぞれ第一線デビューする直前のエピソードを集めた外伝。

「FRONT MISSION DOG LIFE & DOG STYLE 2」



 「FRONT MISSION」の世界を舞台に、太田垣康男が(原作を)描く戦場オムニバス。題名は、「負け犬」とか「犬死に」とかそんな感じだろうか。

 この巻は、O.C.U.がフリーダム市を捨てる頃のエピソード2本。「猟犬の群れ」は、撤退する友軍の盾となろうとする、ヴァンツァー狩りの歩兵隊の話。結末は、つまりそういうことで。

 「楽園の果実」は、逃げそびれたO.C.U.のオッサン兵士が、たまたま助けた少女とフリーダム市から逃げようとする話。次の巻に続くになってるけど、やっぱりハッピーエンドにはならなさそうな気がする。

「パリの詐欺師たち」

パリの詐欺師たち
パリの詐欺師たち
posted with amazlet at 08.05.25
奥本 大三郎
集英社
売り上げランキング: 59185

 「完訳ファーブル昆虫記」の奥本大三郎氏が書いた紀行小説集。著者インタビューで、日本の仏文学界を皮肉った本だと語っていたのを見て、読んでみた。

 表題作は上記のとおりの路線というか、日本とかフランスとか文学とか食べ物とかについてボヤきながら旅するエッセイ。じゃなかった、「奥山先生」が主人公の小説か。高田博厚とかを批判してるみたいだけど、まとまった論とかじゃなくて、よくも悪くもまさにオッサンのペダンチックなボヤき。ゆるい感じで読める。

 もう一作の「蛙恐怖症」は、奥山先生の台湾の旅の話。ひそかに霧社事件を核としながらも、やはりゆるい感じで飲み食いの旅を語っている。

The JUI Conferenceに参加

 The JUI(JavaScript User Interface)というカンファレンスに参加してきた。いちばんのお目当ては、jQueryコア開発チームのPaul Bakaus氏のセッションだったんだけど、遅刻して質疑応答ぐらいしか聴けなかった(泣)。でも、ほかの人のセッションも面白かったのでいいや。以下、メモ。

jQuery (Paul Bakaus氏)

 以下、質疑応答の内容から再構成。

 プログラミング歴は10年ぐらいで、JavaScriptは5年ぐらい。その前は主にPHPとかでプログラムを書いていた。jQueryに参加したキッカケは、John Ressigに誘われて。

 そのJohn Resigとは友達。JohnのやっているJavaScript 2は、いろいろ機能が充実していいとは思うけど、class指向とprototype指向が本当にうまく組合わさるかは、正直ちょっと疑問。

 好きなコードは、誰も理解できないような複雑なコード。ifで条件を何十個もandをとっているようなやつとか。

 エディタはE TextEditorを使っている。やっぱり複雑でややこしいのだけど、たとえば複数箇所を同時選択とかいろいろ強力でいいよ。

 script.aculo.usやExtなど、いくつかJavaScriptライブラリのプロジェクトがあって、いろいろ励みにはなる。でも、自分としては、QueryのUIが最高に使いやすいと考えている。jQueryは、なによりどんどん試してみるのが近道だけど、ドキュメントもいろいろ揃っているので読むと勉強になるよ。

S6を作るときに考えたこと (amachang氏)

 JavaScriptでカッコよくプレゼンするツールS6の紹介。実装のノウハウを一挙公開、という感じのセッションだった。

 もともとShibuya.JSが発足したとき、「各自、プレゼンツール自作ねー」と言われたけど、パワポでプレゼンして「自作じゃないじゃんw」とツッコまれたのが出発点との話。プレゼンのたびに毎回作っていて、コピペしている箇所とか共通化したいなぁと思っていたところ、イベント「LL Spirit」のお題をきかっけにライブラリ化したとか。

 本題は以下。

  • エフェクトは、ページ遷移エフェクトとページ内エフェクトの2種類
  • エフェクトをかけるときに単位を%からemに変換するのだけど、いちいち計算すると遅いので、最初に一度変換してあとはfont-sizeの値を変える
  • 表示しない要素は全部display:none
  • setintervalを全体で使いまわす
  • DOMの値を変数に入れてキャッシュ
  • 無駄な関数呼び出しをなくす(IEは関数呼び出しのコストが高い)
  • 縦横比を固定した
  • スタイルシートはJSでCSSに注入
    • JSを切ると普通のHTMLとして表示
  • FirebugのProfile機能を使ってプロファイリングして高速化
    • 関数内の重い場所の特定は、__1とかの一時的な関数でくるんでプロファイル
    • 高速化ポイントをツブしていくのが、意外と楽しい

inucara.netを支える技術 (inucara氏)

 自分的にはHatebLadderの人。札幌の人だそうで、今回が東京初進出だそうな。

 UIが使いにくいサイトが多く、使いにくいことさえ気づいていないことにいらだちがあり、考え直すきっかけになれば、と、「後付け」と言いながら熱く語っていた。

 完璧画像検索(画像のメタサーチ)で言っていた、「Web検索は検索結果から人間が探すコストが高いけど、画像検索は人間の脳内フィルタリングに期待できるので、とにかく一度に大量に見せるほうがいい、というのが面白かった。「錯覚や思い込みもUIに取り込む」という言葉もあわせて。

  • 自動ページング:AutopagerizeみたいなUI
  • スクロールに合わせて現在位置表示を動的に更新(「n件目」など)
  • 画面解像度を自動取得してデフォルト値に(壁紙サーチ)
  • ウィンドウサイズに合わせてサムネールの列数を変える(SmothTube)
  • 使いなれたUIを踏襲(LDRを積極的に真似する)
  • 先読みとキャッシュ
  • スムーズな視線移動を助ける
    • スクロール速度を、始め速く徐々にスピードダウン

リクルートWebサービスUI Libraryでお手軽マッシュアップ開発 (iandeth氏)

 リクルートのメディアラボの中の人のセッション。

 リクルートでは13媒体のWeb APIを公開している。で、それを使ったサービスを作る際に、よくあるUIで車輪の再発明をしなくていいように、UI Libraryを開発した、という話。

 プルダウンリストで選択肢を挙げるときに、空の<select>にidを指定するだけとか、複数の選択肢が連動する例(地方 - 県 - 市、など)も簡単とか。ページングも、空のdivにidを定義して関数を割り当てるだけ。

 実装はjQuery poweredで、JQueryをレキシカルスコープに閉じ込めてあるので、prototype.jsとも併用可。prototype.jsからClass.createまわりを持ってきたり、JSANのData.Pageからページング計算ロジックを持ってきたり、JSANのText.Simpleからユニットテストのコードを持ってきたり。

jFormino (gugod氏)

 jQueryでフォームを簡単に定義するためのプラグイン「jFormino」の紹介。えらく面白かった。

 もともと動的なフォーム生成の話が仕事であって、そのコードを作った。だけど、読みにくい、拡張しにくい、パラメータたくさん。ということで、汎用的なDeclaratible SyntaxとしてjForminoを作った。

 「type」で種類を指定して、あとは値を与えるだけでいい。カレンダーも簡単に作れるし、「type: googlemap」と座標パラメータだけでGoogle Mapを表示したりできる。

GreaseMonkeyでjQueryと遊ぶ(内山氏)

 リクルートメディアラボの新人さん。GreaseMonkeyのスクリプトでライブラリを使いたいので、「jQuery Loader」を作ったという話。なんと、発表自体は単なるHTMLで、それをGreaseMonkeyでプレゼン化しているのだとか。けっこうカッコよかった。

 いわく、jQueryはjQueryオブジェクトにいろいろな機能が閉じ込められていてGreaseMonkeyでも使いやすいのだけど、それに加えてコードをキャッシュしたりjQueryのバージョンアップに対応したりといった機能を持っているとのこと。例として、ニコ動のコメントを解析して時系列のグラフを表示するデモでは、歓声があがっていた。

Colors in in jQuery (chris4403氏)

 jQueryで色情報を扱うプラグイン「js-color-utils.js」の紹介。

 getterで色を取得したときにIEとFirefoxで結果が違うので変換する関数とか、色表記かどうか判定したり色表記に近いものを色表記に変換したり(coffeeとか)の関数とか、色の平均値を求めるとか、色のソートとかができるそうな。

jQueryとTaffy DBを使ってTwitterクライアントを作る(monjudoh氏)

 Twitterの/homeを取得するクライアントを作ったのだけど、満足できないので作り直したという体験談。

 前のバージョンではぜんぶのデータをDOMツリーで持っていて重かった。そこで今度はjQuery.ajaxでHTMLを取り出してスクレイプしている。

 JavaScriptで書かれたDBMS「Taffy DB」でデータを保持しているというのが面白かった。Taffy DBを使うと、JavaScriptからinsertとかgetとかfindとかのDBMSっぽい操作ができるんだとか。で、表示のときにTaffy DBから最新20エントリのデータを取得して、テンプレートにかけて、Bodyに挿入してるとか。

Jemplate (Ingy döt Net氏)

 ここから飛び入り組。

 Perlでヘンな発想のモジュールを作ることで有名なIngy。「川崎さんに誘われたんだけど、JavaScriptのイベントって聞いてなかったんだよね。あ、俺、JavaScriptプログラマーでもあるんだ、ラッキー!」ってな話を枕にスタート。いや、そんなわけないから。

 YAPC::Asiaの2日目のサンプルを流用しているのだけど、今回は話をIngy作のJavaScriptテンプレートエンジン「Jemplate」にフォーカス。

 Jemplateは、「PerlでベストのテンプレートエンジンであるTemplate-Toolkit」(Ingy談)のJavaScript版。テンプレートとJSONデータを元に出力する。いままでJavaScriptには、Trimpath JSTやEJSもあったけど、それは本物のテンプレートフレームワークじゃない、Jemplateこそ本物のテンプレートフレームワーク、という話。

 ということで、みんなJemplateを使ってね、という話で締めていた。

本気でやるならinnerHTMLは避けてDOMを使うべき?(mala氏)

 ちかごろ流行りのonClickネタを元に、あいかわらずの濃い話で面白かった。

 たとえば、ページ内の単語をハイライト表示するGreaseMonkeyの場合、タグ自身がマッチしてハイライト処理されてしまうと困るので、DOMでテキストノードを処理するのがいい。

 が、LDRでハイライト表示するGreaseMonkeyだと、DOMになる前のHTMLを扱うのでそれは使えないので、正規表現でテキストノードを取り出す。

 で、innerHTMLの処理を高速化するために、1,000要素をループで1,000回置換するところを、ヌルでjoinして1回置換してヌルでsplitとかいう手を使ったり、ダミーのtoStringを定義したりとか、いろいろやった結果、DOMツリーを操作するより2倍速くなった。ただし、innerHTMLを使うとaddEventListenerで付加したイベントが消えるので、onClickを使うという結論(え?)。

YAPC::Asia 2008 Tokyo (TAKESAKO氏)

 Perlのイベント「YAPC::Asia 2008 Tokyo」会場の写真のスライドをビデオにして上映。YAPCではPCのトラブルで上映できなかったんだとか。セッションとか人とかできごととか、ツボを押さえたセンスのいい編集で、ちょっとホロっときた。

YAPC::Asia 2008 Tokyoに行ってきました

 日本最大、というか世界最大級のPerlイベント、「YAPC::Asia Tokyo」が、2008.5.16~17に開かれました。2006や2007もすごく面白かったので、今回も参加してきました。

 ただし、今回は仕事の合間にこっそりなので、限られたセッションしか参加できませんでした。それでもえらく楽しかったなぁ。あと、1日目は会場に行けなかったけど、ustreamでちょろちょろ聴いていました。というわけで、参加したセッションのメモ。

Moose(Yuval Kogman)

 Perl 5でOOPを普通のOOPっぽく書けるようにする仕組み「Moose」のセッション。Mooseは「まるごとPerl!」で名前を知りました。bashでOOPっぽい書き方をしてみたりする人間としてはwktkなのですが、Moose自体は「おもちゃではなく、実用品」ということで。

 Mooseのいいところは、自分でOOPの仕組みを書くような「退屈なこと」を減らせること。アクセッサとかコンストラクタとかValidationとかを自分で書かなくてもいい。こうしていつもの記述を減らして短く書ければ、typoを減らせるしテストする要素も少ない、読みやすくて、プログラミングの本質に集中できる。今年のbuzzwordだね(笑)と。で、XML+FlashなWebアプリで、XMLスキーマ→クラスをうまく実装して楽勝だった(意訳)とか。

 弱点としては、ロード時間が増える(でもMooseX::Compieもあるよ)とか、いくつかの機能が遅い(でも使った分だけだよ)とか、hashrefじゃないクラスの拡張はトリッキーだよ(でもMooseX:GlobRef::Objectもあるよ)とか。

 詳細としては、has_aとか、before/after/aroundとか。Javaのinterfaceに近いRoleというのがあって、実装も書けるからRubyのmixinっぽいよね、でもaliasもできて安心だね、とか。で、MooseはClass::MOP(Meta Object Protocol)のjust sugarだから、メタクラスを触れるしそいういうモジュールも用意されていて便利だよ、と。

How to defend Apache/CGI against multi-byte XSS attacks(Yoshinori TAKESAKO)

 HDR写真の話を枕に、Webサイトのセキュリティの話につないで、「XSSやSQL Injectionはなぜなくならないのか」という話。

 HTML Escapeは大事だけど、それだけではだめなケースとして、文字コードの解釈を突いたXSSを実演。そのあたりから、Apache側にリクエストのパターンでホワイトリストを設定して防ぐmod_waffulを紹介した(WAF=Web Application Firewall)。URLの正規表現や文字コード、整数値の範囲、必須パラメータなどを、httpd.confなどに設定できる。「達人プログラマ」いうところの「Design by Contract」で、今年はValidationがアツい、と。

 mod_waffulは実用に耐えるようパフォーマンスチューニング中で、近日公開予定とのこと。

Introduction to DBIx::MoCo(Naoya Ito)

 はてなオリジナルのO/Rマッパー「DBIx::MoCo」の紹介。ある程度の規模のサーバーを動かすうえで、泥臭いところに手を入れられるように自作したとのこと。

 基本的には生SQL+プレースホルダで書くほうが便利、という感じで、それに加えてRubyのActiveRecordあたりの影響を受けている。名前つきプレースホルダとか、メソッドチェーンで操作できる配列List::RubyLikeとか、fixtureで回帰テストとか。一方、has_manyとかで関連づけしたときにクエリーを多発させないためのプリフェッチとか、現場でよくあるパターンにも対応している。

 また、あとからでもmemcachedを簡単にかませたりできる透過キャッシュを紹介。はてなスターとかで実験してかなり有効だったとのこと。SQLの更新系のメソッドでは、検知してキャッシュ操作するとか。BKとしては、start_sessionとend_sessionで囲むと、不要になったキャッシュを整理してくれるという話も。

 CPANに上がっているので(jkondo氏作)、cpanシェルからインストールできる。ただし、テストが通りにくいものもあるのでforceが必要かも。ドキュメントが少なかったり古かったりするのが欠点かも、少しバグもあるみたいなのでパッチ募集中(jcondo氏宛)、とのことだった。

Perl Love for JavaScript Hackers(Ingy döt Net)

 みんな大好きIngyのセッション。本人いわく、「略称はMr. I.D.と呼んでくれ」とのこと。

 コンピュータの三大発明はシンボリックリンクとmakeとPerlで、makeの素晴らしさを教えるぜ、と(え?)

 えーと、理解できた範囲では、

「「JavaScriptのライブラリであるjQuery」を使ってメソッドチェーン風に定義したイベント」を定義して「「CPANからJavaScriptをダウンロードするJS.pm」を使ってPerlから入手した「Javascript版Template-ToolkitであるJemplate」」を使って「YAMLで書かれたデータからPerlで生成したJSONデータ」を読み込んでページを切り替える「「PerlのテンプレートエンジンであるTemplate-Toolkit」で出力したHTML」を、makeを使って生成する

だったような。

おまけ:昼飯

 2日目の昼には、Yahoo! Japan提供のカップラーメンが配られました。天気がよかったので、みんな外で食べて、とてものどかな光景。ただ、お湯の調達は大変だったみたいで、スタッフの方々がポットを持って食堂と往復していて、まるで少林寺の修行のようでした。感謝。

 で、おいしかったので調子に乗って2杯食べたら、さすがに喉が渇きました。自業自得。

FizzBuzzとGaucheで学ぶ継続の基礎

 先日は酔った勢いで「FizzBuzzとGaucheで学ぶ遅延評価の基礎の基礎」ってエントリを書いてみました。今回は、再び酔った勢いで、同じネタから継続渡しスタイル(CPS:Continuation Passing Style)に挑戦してみます。

 言語は今回もSceme(Gauche)です。継続渡しスタイルの知識は、「プログラミングGauche」と「まるごとJavaScript&Ajax!」の受け売り(劣化コピー)ですので、勘違いがあったらご指摘ください。

遅延評価と継続渡しの比較

 遅延評価編では、無限ループを避けるために遅延評価を使いました。無限ループを避けるための方法としては、ほかに、継続渡しによる呼び出しトランポリンを使った方法があるみたいです。

 とてもおおざっぱにいうと、遅延評価は関数型プログラミングで、継続渡しは手続き型プログラミングなんだそうです。

まず手続き型っぽく書いてみる

 まず、継続は置いておいて、手続き型っぽくループ(単純な末尾再帰)で無限FizzBuzzを書いてみます。

(define (fizzbuzz-from n)
  (let ((item (cond ((zero? (modulo n 15)) "FizzBuzz")
		    ((zero? (modulo n 3)) "Fizz")
		    ((zero? (modulo n 5)) "Buzz")
		    (else n) )))
    (print item)
    (fizzbuzz-from (+ n 1)) ))

 実行してみます

gosh> (fizzbuzz-from 1)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
(略)

 もちろん無限ループですので、Ctrl+Cで止めてください。

リストを返すようにしてみる

 では次に、出力するのではなくリストを返すようにしてみます。遅延評価編とは逆に、ここでは「("Fizz" 2 1)」のように左に伸びていくものとします。

 上のコードを元に、単純に書くと、こんな感じになります。

(define (fizzbuzz-list-from n lst)
  (let ((item (cond ((zero? (modulo n 15)) "FizzBuzz")
		    ((zero? (modulo n 3)) "Fizz")
		    ((zero? (modulo n 5)) "Buzz")
		    (else n) )))
    (fizzbuzz-list-from (+ n 1) (cons item lst)) ))

 もちろん、無限ループですので、実行しても何も返りません。

gosh> (fizzbuzz-list-from 1 '())

再帰呼び出しを分離してみる

 ここまでの例では、ループ相当の末尾再帰を使っていました。では次に、その部分をtsugiという手続き(関数)に分離してみます。

(define (fizzbuzz-list-from n lst)
  (let ((item (cond ((zero? (modulo n 15)) "FizzBuzz")
		    ((zero? (modulo n 3)) "Fizz")
		    ((zero? (modulo n 5)) "Buzz")
		    (else n) )))
    (tsugi (+ n 1) (cons item lst)) ))

(define (tsugi n lst)
  (fizzbuzz-list-from n lst) )

 さらに、このtsugi手続きを引数で渡すようにしてみます。

(define (fizzbuzz-list-from n lst c)
  (let ((item (cond ((zero? (modulo n 15)) "FizzBuzz")
		    ((zero? (modulo n 3)) "Fizz")
		    ((zero? (modulo n 5)) "Buzz")
		    (else n) )))
    (c (+ n 1) (cons item lst) fizzbuzz-list-from) ))

(define (tsugi n lst c)
  (c n lst tsugi) )

 実行結果は、もちろんあいかわらず、無限ループのままです。

gosh> (fizzbuzz-list-from 1 '() tsugi)

 結果はさておき、このバージョンのfizzbuzz-list-fromでは、処理の最後を、引数で渡された「c」という手続き(実体は「tsugi」)に預けていることが重要です。このcを継続と呼ぶみたいです。で、関数の次の預け先を引数で渡すやりかたを継続渡しスタイル(CPS)と呼ぶみたいです。

中断してみる

 分離したことによって、別の手続きを渡せるようになりました。では、「tsugi」のかわりに、「tsuganai」手続きを渡してみます。

(define (fizzbuzz-list-from n lst c)
  (let ((item (cond ((zero? (modulo n 15)) "FizzBuzz")
		    ((zero? (modulo n 3)) "Fizz")
		    ((zero? (modulo n 5)) "Buzz")
		    (else n) )))
    (c (+ n 1) (cons item lst) fizzbuzz-list-from) ))

(define (nobi) '())

(define (tsuganai n lst c)
  (set! nobi (lambda () (c n lst tsuganai) lst))
  '() )

 実行してみます。

gosh> (fizzbuzz-list-from 1 '() tsuganai)
()

 なにやら無限ループにならずに終了しちゃいました。では、nobiを何度か呼び出します。

gosh> (nobi)
(1)
gosh> (nobi)
(2 1)
gosh> (nobi)
("Fizz" 2 1)
gosh> (nobi)
(4 "Fizz" 2 1)
gosh> (nobi)
("Buzz" 4 "Fizz" 2 1)

 めでたしめでたし。

修正2008-05-27:

 tsugi手続きのCPS版とtsuganai手続きが、いまいちCPSっぽくなかったので、以下のように変更。やってることは同じではあるけど。やっぱ酔ってた(←酒のせいにする)。

  • tsugi
    • fizzbuzz-list-from手続きの最後のc手続き呼び出しで、最後の引数をcからfizzbuzz-list-fromに
    • tsugi手続きで呼び出す手続きをfizzbuzz-list-fromからcに
    • そのc手続きの最後の引数をcからtsugiに
  • tsuganai
    • fizzbuzz-list-fromは改訂版と同じ
    • nobiにset!されるクロージャで、呼び出す手続きをfizzbuzz-list-fromからcに
    • そのc手続きの最後の引数をcからtsugiに
プログラミングGauche
プログラミングGauche
posted with amazlet at 08.05.15
Kahuaプロジェクト
オライリージャパン
売り上げランキング: 5302
まるごとJavaScript & Ajax ! Vol.1
天野 仁史 舘野 祐一 川崎 有亮 arton 田中 孝太郎 国分 裕 山本 有悟 海野 裕也 nanto_vi
インプレスジャパン
売り上げランキング: 37629

FizzBuzzとGaucheで学ぶ遅延評価の基礎の基礎

 先週、仲間内で初心者向けRuby on Rails講座ってのを開く手伝いをしました。講座自体はさておき、懇親会のときに講師の人が、「Lispを勉強して、遅延評価で無限リストとかやってみたい」というようなこと(それだけじゃないけど)を言っていました。そこで、基本というか、教科書まんまな説明をしてみます。ほとんど、特定1人対象の内容です

 以下の例はScheme(Gauche)によります。

リストのn番めの要素を取り出す手続き

 まず、回り道ですが、リストのn番めの要素を取り出す手続きnthを定義してみます。FizzBuzz問題が1オリジンなので、ここではnthを1オリジンで定義してみます。Schemeの説明を省略すると、超単純なコードは以下のような感じかなと思います。

(define (nth lst n)
  (if (= n 1)
      (car lst)
      (nth (cdr lst) (- n 1)) ))

 試してみます。

gosh> (nth '(a b c) 1)
a
gosh> (nth '(a b c) 2)
b
gosh> (nth '(a b c) 3)
c

 うまくいっていますね。

forceを使え

 さて、ここにforceという呪文をかませたnth2を定義してみます。

(define (nth2 lst n)
  (if (= n 1)
      (car lst)
      (nth2 (force (cdr lst)) (- n 1)) ))

 再び試してみます。

gosh> (nth2 '(a b c) 1)
a
gosh> (nth2 '(a b c) 2)
b
gosh> (nth2 '(a b c) 3)
c

 まったく同じ結果ですね。

無限にFizzBuzzなリスト

 さて本番。nから順に無限にFizzBuzzなリストを作る手続きfizzbuzz-fromを考えてみます。単純に考えると、以下のようになるかと思います。

(define (fizzbuzz-from n)
  (cons (cond ((zero? (modulo n 15)) "FizzBuzz")
	      ((zero? (modulo n 3)) "Fizz")
	      ((zero? (modulo n 5)) "Buzz")
	      (else n) )
   	(fizzbuzz-from (+ n 1)) ))

 実行します。もちろん無限ループになって、帰ってきません。

gosh> (fizzbuzz-from 1)

遅延してみる

 帰ってこないのでは使いものになりませんね。そこで、再帰呼び出しの部分に「delay」という呪文をかませてみます。

(define (fizzbuzz-from n)
  (cons (cond ((zero? (modulo n 15)) "FizzBuzz")
	      ((zero? (modulo n 3)) "Fizz")
	      ((zero? (modulo n 5)) "Buzz")
	      (else n) )
	(delay (fizzbuzz-from (+ n 1))) ) )

 実行してみます。

gosh> (fizzbuzz-from 1)
(1 . #<promise 0x8160c60>)

 変な値が結果として表示されましたが、とりあえず無限ループにならずに帰ってきました。そこで、返された結果を、変数fizzbuzz-listの値として定義しておきます。

(define fizzbuzz-list (fizzbuzz-from 1))

 これで、無限にFizzBuzzなリストfizzbuzz-listができました。

遅延、カムバ~ック

 では、さきほどのnth2を使って、n番目の値を取り出してみます。

gosh> (nth2 fizzbuzz-list 1)
1
gosh> (nth2 fizzbuzz-list 2)
2
gosh> (nth2 fizzbuzz-list 3)
"Fizz"
gosh> (nth2 fizzbuzz-list 5)
"Buzz"
gosh> (nth2 fizzbuzz-list 30000)
"FizzBuzz"

 めでたしめでたし。

「ディアスポリス 異邦警察」1~8巻

どうせあっちは助からねえ
親友に裏切られてオレの人生なんだったんだって
恨みながら死んでいくんだろうなあ…
アーメン

--4巻p.140

 「ダーティイエローボーイズ」編(3~4巻)がやっぱりいい。国に捨てられた明日なき中国系のガキ二人が、アジア系留学生くずれの犯罪者集団「ダーティボーイズ」の頂上を狙い、東京から関西に向かって殺人や強盗を重ねる。異色のヤクザ伊佐久のキャラと過去をからめながら、同情の余地もない犯罪者たちの哀愁を描く、「レザボア・ドッグス」風の破滅的クライムストーリー。友情、打算、裏切り。凶行の旅の結末は…

 というわけで、馳星周とかの新宿ノワール+松田優作主演の「探偵物語」に、「MASTERキートン」ふうの味付けをした感じの連作マンガ。新宿を中心に、不法滞在外国人たちの私設行政機関「裏都庁」と「裏警察」を舞台にしたハード系ドタバタギャグ(+一握のペーソス)アクションで、どのエピソードも面白い。リチャード・ウー(長崎尚志)の原作と、すぎむらしんいちの猥雑な絵とキャラが、うまくマッチしてる。詳細はWikipediaの解説が詳しかったので、そちらで。

ディアスポリス-異邦警察 1 (1) (モーニングKC)
すぎむら しんいち リチャード・ウー
講談社
ディアスポリス-異邦警察 2 (2) (モーニングKC)
すぎむら しんいち リチャード・ウー
講談社
ディアスポリス-異邦警察 3 (3) (モーニングKC)
すぎむら しんいち リチャード・ウー
講談社
ディアスポリス-異邦警察 4 (4) (モーニングKC)
すぎむら しんいち リチャード・ウー
講談社
ディアスポリス-異邦警察 5 (5) (モーニングKC)
すぎむら しんいち リチャード・ウー
講談社
ディアスポリス-異邦警察 6 (6) (モーニングKC)
すぎむら しんいち リチャード・ウー
講談社
ディアスポリス-異邦警察 7 (7) (モーニングKC)
すぎむら しんいち リチャード・ウー
講談社
ディアスポリス-異邦警察 8 (8) (モーニングKC)
すぎむら しんいち リチャード・ウー
講談社

「家に帰らない男たち」

家に帰らない男たち (扶桑社新書 23) (扶桑社新書 23)
松井 計
扶桑社
売り上げランキング: 120405

 帰る家があって、けっこう幸福な家庭を築いている。仕事も順調で、忙しかったりするけれど、帰れないというほどじゃない。そんな、「家があるのに帰らない男たち」を取材したドキュメント。書くのは、「帰る家がない」生活を著者「ホームレス作家」にまとめて脱ホームレスを果たした松井計氏。

 それぞれ状況や事情の異なる人たちにインタビューして、1章ずつ紹介している。

  • 忙しくて帰れないんですよと言い訳しながら帰らない敏腕の広告代理店マン
  • 東京でビッグになるといいつつ何もしていないネットカフェ難民
  • 家庭が幸せなあまり、自分が帰宅することで壊してしまうことを恐れる営業マン
  • 波風を立てないよう週末だけ帰宅する週末婚状態のIT系サラリーマン
  • 脱サラして成功し、互いに自由に生きたいという豪快系社長
  • キャバ嬢と半同棲するデザイナー

 新書だと、これらの人物や世の中を分析してみせたり、説教してみせたりする本がありがちなのだけど、本書はそういう本ではない。たとえば「援交」などの「わかりやすい」(=類型的な)事例は没にして、それぞれの人生をそれぞれのものとして描いている。各章とも、最後はそれぞれ登場人物への応援になっているし。ノンフィクションの王道で、面白く読んだ。

「ジエンド 炎人」2巻

このスゲエ力で
世界でも守ってみるからよ…

 爆熱漫画家、村枝賢一アニキによる「セカイ系ヒーローアクション」(?)マンガ第2弾。「炎人」と書いて「エンド」と読む。

 えーと、この巻では薄幸系美少女の入間ちゃんが、眼鏡+ニット+ミニスカ姿で登場ですよ。どんだけおやじキラーなのかと(笑)。

 で、物語は武士神編に。

ウダウダ…ウダウダ…
結局テメェの話かよ

第86回カーネル読書会「「初心者向け」と思われているUbuntuの裏側」

 第86回カーネル読書会に参加できなかったので、あとからustreamのログで音声だけ聴きました。お題は「「初心者向け」と思われているUbuntuの裏側」(Ubuntu Japanese Team 吉田 史氏)。

 全体的に入門者向けの話で、あまり突っ込んだ話はなかったけど、いくつか参考になりました。以下、ログを聴いただけの範囲でメモ。

  • いまどきのディストリビューション
    • いまどきじゃないディストリビューションって?
      • 最初に全部ビルドするとか
      • SSD/Linuxとか
    • とりあえず、インストールCDがLive CDになっているということでどうか
  • Ubuntu 8.04の話は、ここにいる人ならぐぐったほうが早い
    • Wubuぐらいしか新機能はない
  • 各バージョンのリリース直後はかなりバギー
    • 1か月以内は人柱
  • 特徴
    • CD 1枚(Live CD)
    • Windowsマシンでパーティション切り直しなしでインストール(Wubi)
    • Compiz Fusionがいきなり動く
    • GNOME Do(QuickSilverのぱくり)
    • Mac OS XのF12みたいなの
    • Windowsのremote desktopみたいなの
  • Debian sidの4か月前のスナップショット
    • 「Debianの別リリース?」
  • リリース2週間前に新しいパッケージが突っ込まれて青くなることも
  • sidにあるパッケージは基本的にすべて含まれている
    • (emasaka注:えー、本当?)
    • Debian sidのパッケージをひたすら自動ビルドするマシンがある
      • Ubuntuのバグレポートがdebianに行っちゃうことも
        • debianとしては「知らんがな」
  • Debianほど宗教っぽくない
  • インストール時点でフルのデスクトップ環境
  • ドライバもできるだけ自動認識
    • 関係者は血へど
  • nvidiaのバイナリなドライバが入っている
    • restrictedリポジトリ
  • メインの開発はCanonical社に雇われた人
  • mainとresticted以外は正式サポートされない
    • universeとmultiverseは正式サポート外
    • 厳密にstableな運用をしたい人(レアケース)はuniverseとmultiverseは使わないほうがいい?
  • vmware-serverとかdb2とかもパッケージで入る
  • フリーズのタイミングはIRCとかで決まる
  • Debianのパッケージとの互換性がない
    • Debianパッケージをdpkg -iするのは混ぜるな危険
  • 「Debianって何ですか? Ubuntuは知ってます」
  • Vistaに負けてUbuntu、という初心者が増えちゃっている
    • バグレポートの量や質が悪い
    • ブログに「あいかわらずバグってる」と書かれても知らんがな
      • (emasaka注:このブログもそのひとつですな)
    • 「chkconfigがないんですがバグですか?」
      • 「それはバグでは?」w
      • (chkconfigはsidやlennyに入っているというツッコミ)
  • /sbin/initはupstartパッケージになっている
    • 依存関係の問題
      • network(emasaka注:networking?)の前にapacheが上がったりすると困る
      • いままでは頭の数字だけで管理
    • Windowsに負けない程度に早い起動
    • /etc/resolv.confを変更して、面倒なので再起動、というパターン
    • inetdとかも目的は同じじゃない?
    • Canonicalの人が開発
    • /etc/event.dディレクトリで管理
      • /etc/rc.dはsysvinitとの後方互換性のため
    • /etc/inittabはデフォルトではナシ、作れば読まれる
    • イベントドリブン
      • startupイベント、runlevelイベントなど
      • rcSイベント(emasaka注:rcSジョブ?)
    • 依存関係によって必要なデーモンのみを動かす
      • 将来的には、networkイベントでnetworkの接続・切断とか
    • 昔のMacOSのAPIに似ている?
    • 現状、/etc/inittabに書かれているようなもののみ/etc/event.dに移っている
    • 6.10から採用
    • 8.10で完全移行予定
      • 人柱バージョン?
    • Mac OSでもinitを変えたから大丈夫?
    • Ctrl+Alt+Deleteイベントはすでにustatartの管理下になっている
  • Wubi
    • 5GB~30GB(5GB単位)
    • NTLDRからブートファイルをキックし、/をloopbackマウントして起動
    • デフラグしてみて、1回目は無事だった(あとは怖くてやっていない)
    • knoppixではデフラグで壊れた?
    • 壊れてもいいマシンで試してください
    • DebianやFedoraでも採用の動き?
  • Debianとの最大の違いは、Fool Proofなところ?
    • インストーラーのハードウェア認識?
    • FoolでもOK?w
    • UbuntuではSecurity Advisoryの日本語訳は追従できていない
      • 「アップデートアイコンが出たらクリックしてください」ということでw
  • Ubuntu-jpって何人ぐらい?
    • コアメンバー5人+Ubuntu本家のえらい人1人
    • 1人の学生が1日5時間ぐらい作業、ほかは1日1時間、しかもサーバー管理中心でパッケージをいじる暇がない
  • 一番つらかったことは?
    • 8.04リリース直後に回線が以下略
  • 一番うれしかったことは?
    • うれしいことはありません
    • Ubuntu使っているという人に会うと、へどが出そうになる
  • 「DNSラウンドロビンにしろ」という声は地獄に一直線
    • mixiでそんなこと書いてくる人がいる
  • UbuntuのBTSのbug #1はMark Shuttleworthによる「Windowsのシェアが高すぎる」

修正2008-5-5

  • 「universeとmultiverseのみ正式サポート」→「universeとmultiverseは正式サポート外」
  • 「chkonfig」→「chkconfig」

追記2008-5-10

Fedora 9 Preview版でSCIM/Anthyがインストールされない

 LinuxディストリビューションのFedoraが、今月新バージョンのFedora 9というのを出す予定になっている。Alpha版のころからちょろちょろ試していて、先月Prevew版というのが出たのでインストールしてみた。

 …あのー、日本語GUI環境をインストールしたのに、「半角/全角」とか「Alt」+「半角/全角」とか押しても日本語入力できないんですけど。そもそも、SCIMとかAnthyとかそいういうのが入ってなくないですか?

$ rpm -qa | grep -i scim
$ rpm -qa | grep -i anthy
$ 

追記2008-5-4:

 インストールDVDを調べてみた。Fedora-9-Preview-comps.xmlファイル(インストールするパッケージとグループの定義)から、Japanese Supportグループ中のscim-lang-japaneseメタパッケージの定義を見てみる。

      <packagereq type="conditional" requires="scim-lang-japanese">xorg-x11-server-Xorg</packagereq>

 …それ依存関係が逆ですから。マジかんべんしてください。

追記2008-5-14:

 bugzillaにレポートして「rawhideでは直ってるよ」と言われたので安心してたのだけど、リリース版ではそのままだった…

 で2chを見たら、自分の今の心境を的確に予測してる人がいたよ。そのころは、こんなことになってるとは知らなかったのだけど。

オーナーはトサカに来てreopenするだろうが手遅れだな
Previewの段階で報告しても遅いって事か

 いや、Preview版以降のバグなんだけど…

 ちなみに、インストールするには「yum install scim-lang-japanese」でいいと思います。

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

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

Monthly