cut-sea:log6

cut-sea:log6

cut-seaの過去ログ6です。


tags

へぇ、[[$$tag]]ってマクロが追加されたのね。
確かに、最近のサイトはどこもタグ付けするもんなぁ。 これってやっぱセマンティクスを持たせるのが難しいからだよね。
というか意味というのはやっぱ人間が対象に対してそのシステムの外からつけるものだからかな。

「この文書は『継続』に関する文書である」という自己言及について昼食後にぼーっと考えてたりして。
いや、あんまり深く考えているって程でもないけど。cut-sea:2008/12/21 19:39:02 PST


渡辺永世竜王誕生

いやぁ白熱した。
渡辺永世竜王おめでとうございます!!ですな。cut-sea:2008/12/18 05:55:38 PST


羽生七冠?

7大棋戦には通算5期とか通産7期などの棋戦固有の条件で永世位が与えられる。 羽生が今年森内から名人位を奪還して永世名人を取ったが、 さらに先日永世竜王にも王手をかけた。

過去どのタイトル戦でも3連勝のあとに4連敗というのはないと言われるのでほぼ当確? もちろん今回が初の大逆転ってこともありえるけど、 さすがに今の羽生に4タテ喰らわせられる棋士はいないよなー。 第4局は26、27日なので今月中にも誕生の可能性がある。cut-sea:2008/11/15 08:26:15 PST


F1

なんというドラマ。

最後の3周でワールドチャンピョンがハミルトンからマッサへ移ったかと思ったら 今度はマッサがチェッカーを受けた後に、ハミルトンの最後のコーナーで再びマッサからハミルトンに。

いや、本当に解説者が言ってた通りマンガみたいな展開。

ここ数年はどんどんスター性のあるドライバーが出てきてて面白い。cut-sea:2008/11/02 10:57:11 PST


機種替え

ずっと一緒に生活してた ThinkPadの液晶がどうも最近おかしかった。
立ち上げ時とか レジュームの際に全体に赤味がかった色になって、 少しするとノーマルな色に戻るって現象だった。 同僚が言うには冷却管がイカれつつあるんだそうな。

でもそのまま使いつづけていたんだよね。ズボラなO型らしく。
すると先日から突然画面が真っ暗になるという現象にみまわれるようになってしまった。 最初は電源がイカれたかと思ったよ。 なんせ電源ケーブル引き抜くと真っ暗になったんだもの。

ノートPCってフタを閉じた時に閉じたことを教えるボタンみたいなのがヒンジの近くにあると思うけど、 そいつをちょいとつついて、あたかもフタが開いたよって錯覚させてやると、 画面が見えるようになるだけど、キーを2、3押す間にすぐ真っ暗に落ちる。

これぞ本当のブラインドタッチだ(wとかムダグチをたたきながら打ってたんだけど、 さすがにこりゃどうにもならんわ。

以前のファンの交換みたく修理するかというのも考えたけど、またファンもうるさくなりつつあるし、 ちょっと新機種の導入にキモチが揺らいだんだよねぇ。

そうするともうダメ。 買っちゃいました。 HPの8710wというノート。 Core 2 Duo(T9300 2.5GHz x 2)とメモリ2G追加して4Gフル実装。7200rpmなHDD 200Gってことで十分でしょう。

土日にいろいろOSを試したんだけど、結局今回はUbuntu Linuxを入れることにしました。

たかが壊れたパッケージが一つあったくらいでパッケージマネージャが立ち上がらなくなったり、 システムがイカれて二度とログインできなくなったり、なんか前途が不安だけど、 とりあえずしばらくはLinuxと付き合ってみることにする。

で、今朝会社に行く時にようやく気付いたんだけど、カバンに入らねぇ。 この前サンフランシスコに行くにあたって購入したサムソナイトのリュックにギリで詰め込んだけど、 ファスナーが当たってキズつけそうなので、早々にデカいリュック買わないとなぁ。cut-sea:2008/08/24 18:28:09 PDT


羽生19世名人

名人戦の第5戦まで見てたんだけど、仕事が忙しくて気付いたら第6戦は終わってた。 19世の永世名人位を取得したらしい。
しかし森内18世名人も強かったなぁ。
今回に関しては羽生の執念が結果に結びついた気がするけど、 全体にどうも森内の方が充実しているように見えた。cut-sea:2008/06/21 07:15:57 PDT


gtkPod

mount -t msdos /dev/sd0e /mnt/ipod

でmountしてgtkpodを起動して接続したら使えるっぽい。 /dev/sd0fで成功する人とかもいるらしいので機種によって違うんだろう。cut-sea:2008/05/27 21:48:25 PDT


firefox

なんかビルドし直したのが良かったのかどうか知らないけど、安定してる。

メニューとかも日本語化してなかったので、 ここからja.xpiとかを取ってきてinstallで日本語化する。 同様にfirefoxのところをthunderbirdでそちらもやる。 ファイルを保存しておいて、thunderbirdからadd-onウィンドウを開いておいて、 installでファイル選択でおっけ。

まぁメモってことで。cut-sea:2008/04/24 06:21:03 PDT


仲間が一人感染

以前仕事を少し手伝ってもらった人がメッセで入ってきて、 少し質問されたのでしばらく話をしてたんだけど、感染したらしい。

ウィルスの名はScheme

Winty

Tiny Schemeを拡張(?)してコンソールと描画ウィンドウをつけてWindowAPIを叩けるようにしました。 コンソールから対話的にグラフィックとか操作できるのがミソかな? コンセプトは大昔のBASICマシン。(w 主な用途は自分のSchemeの勉強用です。

ってreadme.txtにある。 以前Schemeについて質問されてからだいぶたつけど、 その後なんの音沙汰もなかったのでSchemeの勉強は諦めたのかと思ったら…。 スゲェ。やるなぁ。cut-sea:2008/04/23 01:36:19 PDT


モナド

あと一歩。もう少し。な気がする。多分。cut-sea:2008/04/17 19:50:21 PDT


ContinuationFest 2008

ムリ。

でも皆さんには本当感謝してます。
資料に目を通して修正してくださったり、
遅くまで残ってレビューしてくださったり、
代替案を出してくださったり。

まちがいなく私が最初に作った時から完成度は上がりました。格段に。

でも私はどーしよーもない。
とりあえず酒があってよかった。 まだまだまだまだ呑むよ。 意識がある内は寝れないから。cut-sea:2008/04/13 06:46:58 PDT


Arcからの挑戦で実はちょっと驚いた

そんな大袈裟な話じゃないけど。
しばらくたったので色々思ったところを書いてみる。

実はこのエッセイを読んだとき、 本当にやってたんだ、このシトと、ちょっと驚いた。
「Arcの開発を」ではないですよ。 「codetree主導な言語デザインを」本当にやってたんだと驚いたのです。

私が最初にPGのこの主張を読んだのは 簡潔さは力なりだった。 読んでない人のためにかなり大雑把に説明すると、

大雑把過ぎ?まぁちゃんと知りたい人は原文なり翻訳文を読んでね。

で、ソースコードの長さを測る尺度としてノードの数を彼は採用したわけだけど、 正しいかどうかは分からん。彼の文章もそんな風に書いてある。
まぁ個人的にはなんかよさげな指標だと思うし、 それ以外により良いと思える指標は思いつかない。 (Sexper寄りの考え方と思われるかもしれんが)

ソフトウェアに限らず、エンジニアやってると、 理論武装というか、あくまで自分の選択を正当化するために もっともらしい理屈を並べるんだけど、結局実際のところは自分の好みというか 理屈とは別のところで決断や選択をしていることがあるのに気付く。
で、そうではなかったPGのクソ真面目な姿勢に、本当ちょっとだけど驚いたのです。

プログラミング言語のデザインにしても、技術的にどうだこうだ言うけど、 それとは別にセンスとか感性のようなもので 構文が決断されてることにあまり違和感を覚えなくなってた。

Arcがリリースされたとき、 404 Blog Not Foundでは、 恐らく何気なくだろうけどこんな文章が書かれた。

ifの重ね打ち

(if a b c d e)
; 以下と同じ
; (if a
;     b
;     (if c
;         d
;         e))

Graham御大って、括弧萌えのネスト嫌い?

萌えるとか嫌いとか、これを読んだ時にも私はさほど違和感を感じなかったように思う。 弾さんは別に意識して書いたわけじゃないだろうけど、 少なくともこう書くことに違和感も感じてなかったんじゃないかな。

あるいは、日本が世界に誇る言語デザイナといえばこの人、Matz氏。 誤解してたらごめんなさいだけど『驚き最小の法則』ドリブンでRubyをデザインされている(と私は認識してる)。
が、これもはっきり言って『Matzが好む様にデザインする』と言ってるのと大差ない。と思う。
仮に普通の人というのを定義したとして、 さらにその人達の驚きというやつを定義したとして、 さらにそれを計測できたとして、 さぁ実際に計測値が最小になるように言語をデザインしてるんかいな? というとやってないでしょ?

ところが、Arcからの挑戦を読む限り、PGは本当に自分の理論を信じて ソレ主導で言語をデザインするという挑戦をしているように見える。

PGは自分の打ち立てた「codetree最小の法則」とでもいうものを Arcに関わろうとする誰もが計量可能なようにした。 つまりArcのソースに含まれるcode.arc中の関数codetreeを使い 「その計量値が小さくなる=Arcはより強力になる」ようにArcを設計している。

会ったこともなければHackers Newsもちゃんと追ってないので、多分としか言えないけど、

Graham御大って、括弧萌えのネスト嫌い?

きっとこれは違ったんだ。
PGは自分の好みを優先してArcをデザインしてるわけじゃなく、 自分の理論を優先してArcをデザインしていて、 ネストが削減される方向に進化しているのは 単にcodetreeがネストを見つけると内部ノードを1カウントアップしていて、 それはネストが無い場合と比べて(彼の定義した)言語の力が弱いからだ。 だから、PGはcodetreeのお告げから、いかにしたらノードの数を減らせるかに 集中して頭を使い、ネストを減らせるなら減らしているというだけ。 なんでも削れるわけじゃないけど、削れるならその方向をcodetreeは推進する。 codetreeは方向は示すけど、具体的な道は教えてくれない。 道を作るのはPGだけど、その道が正しい方向かどうかコンパスにcodetreeを使ってる。

Arcの見かけがヘンテコだとしてもPGがわざとヘンテコにデザインしているのではなく、 codetreeがそれを主導しているだけだと言うことだ。 (codetree主導でデザインしようと決めたこと自体が PGによるデザインといいたければそう思ってもいいけど)

もしかしたらPGはArcのいくつかの構文を嫌ってるかもねとか想像すると愉快だと思うのは私だけ?
あーこのまま行ったらPythonみたいな見かけになっちゃうーとか Arcで書いたコードを見て萎えてるPGね。 (別にPythonの見かけをPGが嫌ってるわけじゃなく、 単に例が思いつかなかっただけですゴメンナサイ)

というわけで、もしArcに何かproposalして採用されたければ、 きっとやっておかなくちゃいけないことがあると思う。 そのproposalを採用した場合のnews.arcなりblog.arcをcodetreeで計測し、 彼の求める、より強力な言語になることを裏づけすることじゃないかと思う。

Kahuaでも足枷にならないように一段上のレイヤで、 それをやってみたいと思い、Arcに挑戦してみたのだが、 あと数ノードに迫ったところで追うのを一旦やめた。
この数ノードが思いのほか距離があるように感じたからで、 まぁ出直してきますって感じ。

Arcは甘い甘い砂糖菓子。cut-sea:2008/03/30 20:44:53 PDT


「戻る」ボタンと継続

ホントそう思う。
どちらも正しい時がある。

結論から言えば、この問題はすでにテクノロジの問題じゃなくて、 コンストラクションデザインの問題だと思う。 (この人も最後に書いてるけど。)

カートの例は私も良くKahuaな身内で話をする時に出すが、 要はブラウザの向こうにいるユーザが 画面を見ていて、その画面表示の情報(コンテキスト)に乗っかっているか、 そうじゃないかで判断が分かれると思ってる。 (スゲーわかりにくい表現…orz)

大抵のユーザの頭の中ではカートの中身は大域的だ。
つまりブラウザの「戻る」をクリックした時、戻った時点でカートに何が入ってて 何が入ってなかったかを覚えてて、 カートから中身を出すことを目的に「戻る」わけではないのがフツーなんだよなぁ。

だから戻るを押した時、大抵のユーザはカートの中身なる情報が 画面に表示されてても信用してないはずだ。 ユーザの頭の中にカートの状態は別個にあって、 それがサーバサイドにも同じようにあると思っている。 つまりグローバルなわけ。あるスコープ(ページ内)に依存してない。
だからプログラムとしてもグローバルに表現するのがほとんどの場合に正しい例だと思う。
(もちろん一部の全くWebに慣れてない人ならば、あれ?と思うことかもしれないけど…。)

というわけでだいぶ前だけど、ショッピングカートもどきをKahuaで作った時に セッションオブジェクトを簡単に作れるAPIとか突っ込んだことがある。 どうなるか分らんのにDBにインスタンスを作らせたくなかったというだけの理由だった。

ただ、Webアプリから一旦離れて考えて欲しいんだけど、 グローバル変数を使うときにそんなに無意識にザクザク使わないよねぇ? なのにWebアプリだとその辺りの意識が薄いというか抵抗が低いのはナゼ?と思う。

というか、そもそも操作するユーザがどちらを意図していたのか分かりません。だとすれば、サイトをどちから一方の動作のみが自然と感じられるようデザインすべき、ということになるのでしょうかね。

完全に同意します。
だからどっちが望まれる挙動かを判断するか、どっちの挙動を選択するか決断するだけだ。 という意味でデザインの問題なのだと思う。

さて、セッションオブジェクトを使う時に, オレは今大域変数的なものを使っちゃってるーという意識ありますか?ありませんか?
あるいはそれ意識してデザインしてますか?してませんか?
もしも、意識してないのだとするとテクノロジの問題に「戻る」をクリックすべし。cut-sea:2008/03/23 21:44:43 PDT

もともと別のことでググッてて、こっから入った。->ITの地殻変動はどこで起きているのか?~SeasarとRuby、そしてPF


Gauche本

先日1Fに行ったときにオライリーの伊藤さんに、 amazonのランキングで本全体で200番台に入ってて…なんて話をされた。 なにやらMIND HACKSぶりくらいだそうだ。

そいつはスゴイと思って、 ここ数日は気にしてみてたらさっき200を切ってた。187位。cut-sea:2008/03/12 15:59:52 PDT


公開鍵暗号方式の誤り解説の氾濫をそろそろどげんかせんと

そういや、オライリーのPGPは 表紙が南京錠で、確か最初の方でちょろっと説明されてた。

ってわけ。

  1. オレ南京錠(A)を世間にばら撒く。対になる鍵だけはオレが保有する1個だけ。 現実の南京錠は鍵と錠が1個ずつだけど、錠は複数あっていいってのが違う。
  2. 誰かがオレに秘密で何か送りたかったら、箱に入れてオレ南京錠(A)で閉じる。
  3. もはやその箱は鍵を保有するオレにしか開けることができない。

ということで、メチャ分かりやすかった。 なんだ、そういうことかって満足しちゃって最後まで読破しなかった。(よくある)
専門家になるわけでもないし概念のマッピングさえできれば細かいことはどーでも… (あー言い訳してるなぁ)cut-sea:2008/03/12 01:11:16 PDT


スノボに行ってた日にgauche.nightをやってた orz

いや、スケジュール的に後から入ったのはgauche.nightなのよ。 でもShiroさんの来日こそがチャンスだもんねぇ。残念。

みんなのblogやら黒田さんの後日コメントやらを読めば読むほどやっぱ行きたかったー。 いや、本当黒田さんが出演してくださったおかげで随分盛り上がった様子だし。 やっぱ座談会は対立構造が肝要ですね。

でもその黒田さんに2度出る馬鹿になってでも行って見ようかな と思わせたえんどうさんの勝利ってことで。
昨年のgauche.nightの時にも控え室に戻るところで 「予想してたより6倍面白かった」とおっしゃってくれてたもんね。

是非三度目もよろしくってことをネットの辺境でボソッとつぶやいてみる。cut-sea:2008/03/10 19:42:46 PDT

gauche.nightの日にスノボに行ってた v(^ヮ^)v

昨年同様ITSのツアーが当たった我がチームは裏磐梯に行ってきました。
もうね、神がかってるくらいいい天気でした。2日とも。

昨年「ありえねぇ」と思った急斜面が今回はまるで怖くない。 その急斜面を4~5本に1本くらいは転ばずに下まで滑り降りれるくらいまで進歩。 転んでも昨年みたく立ちつくさないで、バリバリ滑れる。
ってワケで初日の朝一のデコでまずはリベンジ達成?

ただスクールは完全にクラス選択ミス。
あまりに退屈すぎて体冷えた。+午前を無駄にしてしまった。orz
ってわけで午後はスクール抜けて、ひたすらすべり狂う。
でもこの時点でやっぱり昨年から弱いカーブの方向ってのがあるのを自覚してた。。。
実はこれをこそ何とかしたかったんだが。

で、翌日が猫魔だったんだけど、昨年、一昨年とすべってないコースばかり滑ってきた。 猫魔の上級コースはマジに急で、一旦コケルと立ち上がるどころか ズルズル滑り落ちてどこまでも止まりゃしねぇ。

初日スクールで得るものが無かったんだけど、 その代わりに連れが後ろからすべりをチェックしてくれて マンツーで的確なアドバイスをしてくれる。

で、その流れでカービングの原理とか説明してもらい、 しかも少しだけどその感覚を掴む。
オレって体感より頭が先なヤツで理屈が分からないと体感が結びつかないタチ。 親には頭でっかちだと言われたものです。
ともかく、今までムリヤリ足だけで曲げてたってのがよーく分かりました。 ボードという道具を初めてうまく使えてると感じた瞬間でした。
さすが何万もするだけあってただの板っ切れじゃなかった。
来年はカービングをもっとうまくなって急斜面を制御しながら余裕で滑り降りたいっす。cut-sea:2008/03/10 19:42:46 PDT


ひと段落

したので、さて次のステップ。cut-sea:2008/03/01 12:10:20 PST


Arcからの挑戦

水泳から戻ってきた。 で、さらにやってみる。。。

;; utils
(define-macro (define-page ent . body)
  `(define-entry ,ent
     (html/ (head/ (title/ ,(string-upcase (x->string (car ent)))))
            (body/ ,@body))))

(define-syntax self-chain
  (syntax-rules (form/cont/ a/cont/)
    ((_ self (form/cont/ (fn args expr ...) body ...))
     (form/cont/ (@/ (id self))
       (@@/ (target self)
            (parts-cont (fn args (self-chain self expr) ...))) body ...))
    ((_ self (a/cont/ (fn args expr ...) elm ...))
     (a/cont/ (@/ (id self))
       (@@/ (target self)
            (parts-cont (fn args (self-chain self expr) ...))) elm ...))
    ((_ self (tag node ...))
     (tag (self-chain self node ...)))
    ((_ self elm) elm)))

(define-macro (readln/ nm) `(input/ (@/ (name ,(symbol->string nm)))))
(define (submit/) (input/ (@/ (type "submit"))))

これらはそこそこ汎用的な構文糖衣だったり、 頻出するものなので標準で持っててもよさげなものばかりだと思っている。 (名称や完成度は別にしてね。)

そうすると、

;; お題
(define-page (said)
  (self-chain "self"
   (form/cont/ (entry-lambda (:keyword say)
                 (a/cont/ (cut p/ "You say:" say) "click here"))
     (readln/ say)
     (submit/))))

Arc: 23ノード:15の葉/字句 + 8内部ノード
Kahua: 27ノード:17の葉/字句 + 10内部ノード

今このレベルまではいける。 (self-chain "self" node)で自分をどんどん挿し変えるようなコードが書ける。

なお、こいつを使えば次のコードでお題のパーツが5つ並んだようなアプリになる。 当然それぞれ全く干渉することなく独立に動作する。

;; お題x5
(define-macro (s id)
  `(self-chain ,(x->string id)
     (form/cont/ (entry-lambda (:keyword id)
                   (div/ (a/cont/ (cut p/ "You say:" id) "click here")))
       (readln/ id)
       (submit/))))

(define-page (said)
  (node-set/ (s say1) (s say2) (s say3) (s say4) (s say5)))

とりあえず、この辺まで。
a/cont/をdiv/でくるんだのは単に動作させた時にアンカーが並んだ時だけ レイアウトが横になっちゃうから。(つまりブロック要素にするため)

まぁ、いろいろ学べたことがあったのでいずれKahuaにフィードバックできればとは思うが、 今はjavascriptを書くのに必死なので。cut-sea:2008/02/27 04:45:03 PST


Arcからの挑戦

とりあえずKahuaでまんま書くとこうなる。 Arcより長いな確かに。cut-sea:2008/02/25 21:20:06 PST

(define (page . args)
  (html/ (apply body/ args)))

(define-entry (said)
  (define (end say)
    (page (p/ "you said:" say)))
  (define (here say)
    (page (a/cont/ (@@/ (cont (lambda _ (end say)))) "click here")))
  (page
   (form/cont/ (@@/ (cont (entry-lambda (:keyword say)
                            (here say))))
     (input/ (@/ (type "text") (name "say")))
     (input/ (@/ (type "submit") (value "SAY"))))))

(initialize-main-proc said)

ちなみに最新のKahuaではこうも書ける。

;; utils
(define-macro (selfup-a/cont/ id c s)
  `(a/cont/ (@/ (id ,id)) (@@/ (target ,id) (parts-cont ,c)) ,s))

(define-macro (selfup-form/cont/ id c . body)
  `(form/cont/ (@/ (id ,id)) (@@/ (target ,id) (parts-cont ,c)) ,@body))

(define (page ttl . body)
  (html/ (head/ (title/ ttl)) (apply body/ body)))

(define-macro (readln/ nm) `(input/ (@/ (name ,(symbol->string nm)))))
(define (submit/) (input/ (@/ (type "submit"))))

とりあえず2つのパートに分けてみる。

;; main
(define-entry (said)
  (page "SAID"
        (selfup-form/cont/
         "me" (entry-lambda (:keyword say)
                (selfup-a/cont/ "me" (cut p/ "You say:" say) "click here"))
         (readln/ say)
         (submit/))))

で、最初のパートのselfup-a/cont/とかselfup-form/cont/に相当するやつは、 自分をupdateするつもりな関数だから、名前はともかく機能としては、 まぁデフォであってもよさげ。 あとpageに相当するやつも大抵皆書くんでなんかデフォであってもよさげ。 submit/やreadln/や、それ以外にも良く使うのはあってもよさげ。

そうすれば最後の形まではイケる。 このsaidエントリまでは可能そう。

Arc: 23ノード:15の葉/字句 + 8内部ノード
Kahua: 29ノード:19の葉/字句 + 10内部ノード

うーん。まだまだ小手先でマネてもムリポ。orzcut-sea:2008/02/26 20:24:26 PST


GaucheTシャツ

キター!!

本より先に、Tシャツが出来上がってきましたw

ショボーン…wcut-sea:2008/02/21 23:55:02 PST


開発合宿残件

testコードを用意して一通りHEADでpassするところまで確認した。 commitするにあたってビックリしたが、contとかremote-contなどの @@/補助属性の取るclauseの解説がまるで無い。

自分も含めて皆どうやってコード書いてるんだ??

と思ったが、まぁ当初からチュートリアルがあって、それで対応してたんだろう。 とは言え、サンプルを見ないとremote-contがあることや fragmentがあることすら分らないのはちとどうかと。

というわけで、とりあえずdoc/Modules/kahua.elem.jaにそのあたりの説明をとりあえず書いた。 ただ、これKahua/src/kahua/server.scmのコメントを訳してて、これはそもそも a/contの説明からだから、@@:とか@@/の説明にするのもなんか変。 ないより良いだろうというレベルなんで、また誰か修正しておいてくれぃ。

あと最初に考えてた構文が決まりきった変換ではないことに気付いて実装してない。 まぁその内本当に構文に出来るなら、自然とパターンが見えてくるだろうと思う。

そんなわけで、一応CVS HEADへcommitしたけど examplesに何かサンプルアプリを入れたいなということで考え中。cut-sea:2008/02/13 16:59:02 PST


85→75

下がったのは偏差値ではなく体重。

昨年10月くらいに年度の定例人間ドックで植草似の若い医者にさんざん脅された。
どうやら前回、前々回からのデータの推移を見て改善する意思がねーなコイツと思われたんだろう。

その時のショックが結構なインパクトだった私はその足でプールに行き、 以来週5日ペースで通い続けている。 中学までは競泳やってたので、続けやすい。 若い水着のお姉ちゃんが多いのも続きやすさに大きく影響してる。 水着の生地が変わって以来減ったけど、 それでもまだまだハイレグの競泳水着を着ている人は多くて、 私のプール通いを側面からサポート。(あくまで側面ね。そういうことにしておいて。)

ともあれ人間ドック以来、改善したのは次の三点。

以前からジーンズなんかも腰ばき状態くらいまでウェストがゆるゆるで、 両手のコブシが余裕で収まるくらい、メタボ腹が解消されてきてた。 いつも右側の尻のポケットに財布を入れてるんだけど、 当たってる感覚がなくなってしまったため、 最近不安から財布を手で触ってチェックする回数が増えた。

で、連休の開発合宿で最後大滝の湯に行った時に 久々に体重計に乗ったてみたら、上記の通り10キロ減という結果。

安心してしまったり、ガッカリしてもヤだったので 意図的に体重計に乗らないようにしてたんだけど、 10キロ減はかなりうれしい。
もともと私のベスト体重というか一番楽なのが70キロ弱なのでまだまだだけど、 20台前半の頃と今とじゃ違うよなってことで、今くらいをキープできればいいか。

以前よりは代謝効率がよくなったと思うんだけど、まだ油断ならない。 ただ、今の生活やってれば間違いないようなので継続するだけだ。cut-sea:2008/02/11 17:21:22 PST


開発合宿 in 草津温泉 2日目

ははぁ、なんか分るような…
しかし完全に勉強モードに突入しちゃって、全然成果が上がらん。 こういう場合どうすりゃいーの。

あと近くのコンビニで少しおやつなどを買い込み。

ようやくelem.scmのgetとかputとかで抽象化している部分の雰囲気が分りかけてきたが、 あきらかにstateってのはあんま意味ねーんじゃねーかとか思いだした。

(define (div/ args)
  (update (cut cons (cons 'div (exec '() (node-set args))) <>)))

どれでもいいけど、高階タグ関数で、こーゆーやつ。
updateは

(define (update f)
  (>>= get (compose put f)))

なので、つまり、(update f)はstateの中身をgetで引っぱり出して、そいつをfに渡して 新しく出きたstateを新しいstateとしてputするってことをやってる。 ってことは、div/などの高階タグ関数の定義に出てくるcut式の<>はそこまでに蓄積された stateaなわけで、こいつにconsしているわけだ。 ノードセットになるようなものだと逆順になる。 だから最後にrev-nodeで元の順に戻してたんだね。
でも、これステートモナドチックにやることに意味あんの?というと全然ない気がしてきた。

で、ようやくスタートラインについた。
つまりここで扱ってるstateはまるで使えない。 なぜなら構築中の情報しかもってないもの。
これは今まともに使ってないだけで、使えるようにすればおkとかってのは完全なる勘違いのようだ。

私が欲しかったのはページ全体の情報を持っているもので、これをコンテキストとして 各個別のノードに渡すと外の情報を元に自分のレンダリングすべき情報を作りだすものだから、 完全に作りが違うってことだ。

ただ、以前までまるでナニやってんのか、あるいは新高階タグ関数を定義するのに getやらputやらが何を意味するのが分らなかったのだから、少しだけ進歩。

ともあれ、今のKahuaだとあまりに複雑すぎて分からんので、kahua-ekahiで実験。

とりあえず実現に際しての問題が抽出できればいいやってことで。 記法に関しては最後でいいわけだし、kahua-ekahiを見てるとそういうまさにそういう雰囲気。

で、高階タグチック(もどきかなぁ)なものを実装して、まずは共存して動作するところまで。

ここまで、kahua-ekahiをいじっていくつか問題点が見えてきた。 やっぱり、このくらいになってくると簡単でいいから全体にそれなりに触ってるくらいまで 実装してみないと問題が見えてこない。

で、結論:継続サーバをそれ専用のつもりで書いてみよう!
ほとんどはekahiをマネればいいはず。
ただし、おもいっきり混ぜるなキケンになるので、他のを排除して実装しなきゃならん。 そうしないと動くものに到達しなさそう。 混ぜられるようにできるかどうかは後回しだ。

ガーン!そういうコトかぁ。 なんでステートモナドチックにやってたかようやくわかった。 …が、それでも足りない。
以前もそう思ったことがあったけど、関数は関数のリストでは扱いにくくて関数合成したものが扱いやすいんだ。
で、図形言語になるわけだ。
このデザインほとんど必然なのかも。

結局あのステートモナドチックなやつは、ほぼ必然だと認めて別の視点からなんかやらないとダメポそう。
で、今度はserver.scmを観察。 もしかして、上で誰かがrun-stateとかeval-stateって言ってたのはrender-procとかeval-procとかのことかしらん。 確かにこのコードのinterpのタイミングではexpandedとかってSXML的状態で得られるし、 context中に専用のhashでも作っておけば情報を溜めこめそうだ。

あとはkahua-ekahiであぶり出した問題をどう表現しておくのかになるのかもしれない。 最初からこっちを見るべきだったのかしらん…。

さて、風呂でとりあえず簡単にこれで逃げるかなぁと思ってたアイディアは 戻ってコードを見た瞬間アウト。orz
迷走しまくってる。

なにやらいい感じになってきた模様。
あとはノードの挿し替えだけで完成か??
SXMLで便利なのがあればそれでやっちゃうけど、かなり疲れたので小休止。

現在28:20つまりAM4:20。
ようやく最終目標達成!

最初に作ったものと同じ動作をするサンプルアプリまで完成した。
ざまぁみやがれ!

でも多分今日はもうムリ。(とかいいつつ多分帰ったらまたやりそう。マジコード猿じゃ)

  1. 最初に妄想を暴走させた時に仮想実装した構文をマクロで組む。(これはコード変換のみだから、あってもなくてもいいけど)
  2. アプリについてはexamplesに突っこみたいので少しは見栄えを良くしよう。(他のexampleと同程度が望ましい。)
  3. テストコードを実装します。
  4. ドキュメントに追記
  5. KahuaのHEADにcommit
  6. 今回の合宿の成果まとめ報告(何でやるかは別途えんどうさんと相談)

まぁ動くようになったから残件をこなすのは楽しいわな。

あとは帰るだけー。 というワケで今回の合宿終了。 残件についてはちびちびやりまふ。cut-sea:2008/02/10 15:41:27 PST

結局温泉に6回入ったのね。
肌がツルツルしてる。酸でピーリングされたかな?

今度こそ本当に終了。サラバじゃ。cut-sea:2008/02/10 16:43:48 PST

上ってビール飲んで、さらに入ってを繰り返し。 その後本当に帰ってきますた。


入門Haskell

向井さんの本。
今回elem.scmを読むのにちょっとお供してもらった。

行きの車中で最初から読み直していたんだけど、今モナドの章に入ったところ…。

すると、おおっ?
なにやら昔継続について起こった第一次悟りの瞬間に近い感覚が!!
Gauche本で色々理解を深めたことが糧になってたようで、 そこに入門Haskellの文章が刺激を与え、 ついにそれが意識の表面に出てきたような、そんな感じ。 残念ながら今回は祝杯はなし。寝よう。cut-sea:2008/02/09 06:55:24 PST


開発合宿 in 草津温泉

準備を兼ねて昨夜というか今朝AM5:00頃までelem.scmを追ってた。
いろいろ試しのToyコードを吐きながら悩む。

そう昨夜から合宿モードにDIVEしてたわけだ。私は。

15:00到着したのはまぁあれだ。車内ではずっと向井さんのHaskell本を読む。 しかし到着後に迷子。
事前にGoogle Mapで住所から検索してたマップが全然違うトコ指してやがるのを知らずに延々歩いた。

結局バスターミナルに戻ってからタクシーで到着した。

ちなみに硫黄の匂いがスゲー。先日行った蔵王とまったく同じ匂い。 でもって、pH 2.1って結構な酸だよね。皮膚が少しピリピリする感じ。 まぁそれ言ったら蔵王で入ったのはpH 1.3でしたがね。 ちなみにここの宿の脱衣所の洗面台の蛇口もキッチリ酸でヒサンなことになってた。

まぁ、ダッセーけど動いてる。 ほんと最悪なコードだけどまぁいいだろう。こいつの動作が今回の最終目標。

とりあえず、darcsで管理することにしましょう。 ってことでrecord...

とりあえず疲れたので布団しいて寝ながらちまちま。cut-sea:2008/02/09 06:02:52 PST


そう思うものなの?

別にdefineがdefだろうがlambdaがfnだろうがmacroがmacだろうがホンットどーでもいい。
なんでそういうどーでもいいところに気になるんだろうと思った。

正直少々命名が短縮されるなんてクソほど、どーでもいいっす。 短くしたきゃすりゃいいけど、そこは別に血圧上げるとこじゃない。

まぁ("foo" 0)辺りは、Gaucheとかでobject-applyを知らなければ、 びっくりしたかもしんねぇ。 確かに文字列をobject-applyするとしたらこうなんだろうか?とは思った。

("foo" "bar") => "foobar"
("foo" 0) => #\f

まぁ、これはありかな。 とするとGacheだとこうすればよさげ。

(define-method object-apply ((str <string>) (n <integer>))
  (string-ref str n))

(define-method object-apply ((str <string>) (s <string>))
  (string-append str s))

(define-method object-apply ((str <string>) (s <string>) . args)
  (apply (str s) args))
gosh> ("foo" 0)
#\f
gosh> ("foo" "bar")
"foobar"
gosh> ("foo" "bar" "buz")
"foobarbuz"
gosh> ("foo" "bar" "buz" 3)
#\b
gosh> 

ただ、ちょっと悔しいのは[+ _ 10](cut + <> 10)として使われたこと。 あぁ、R6RSではカッコと同じになっちゃったからなぁ。 記号をそんなことに使うなんてもったいない。 やっぱ、有効利用して欲しかった。

あれ?ちょっと待てよ。 mzschemeってそもそも[]()と同じ扱いにしてたよなぁ。
ってことはmzschemeを拡張するんじゃなくて、mzschemeの上に完全に実装したのか?
あぁ、違う。 brackets.scmにあるけど、make-readtableってのがもしかしてそうかな。 やっぱLisp的にリードテーブルを操作できると見た目とか変えれて面白いんだよねぇ。

arc> []
#<procedure>

でもこれidですらないみたい。そらそうか。微妙だなぁ。cut-sea:2008/01/30 18:52:22 PST


蔵王でスノボ

行ってきた。
年に10日あるかどうかというサイコーの天気に恵まれて、 年に4日だけある甘酒サービスデーだったりして。

一年振りだったので感覚が戻るまで大変だったけど2日目はキモチ良かった。 ここ滑れたんなら去年猫魔で途方に暮れたところは大丈夫だよと言われたけど、 いやいやあそこのがもちっとキツかったと思う。
なんとか今年はあそこをクリアしたいのだが。
ちなみに今年の猫魔は運悪くgauche.nightとぶつかっちった。 残念だ。cut-sea:2008/01/28 19:10:40 PST


言語雑談会

月曜祝日に出席してきた。

実に怪しいやつばっか。 私の来る場所ではなかった。cut-sea:2008/01/14 17:12:35 PST


Web素行調査

帰省してたのでいまさらアレですが、Lingrでyasuyukiさんが書き込んでくれてたので。
このサイトは何度もアクセスしてみるとわかるがWeb上でcut-seaという単語と共存している文から 頻出しているであろう単語を引き出しておいて、テンプレに食め込んでるだけのようだ。 何やら意味ありげに見えるが、実際にはそう賢いことはしてなさそうだ。 せいぜい形態素解析の結果から品詞くらいはさすがに見わけておいて、 生成した文章が日本語として変なことにはならないようにしているくらいだろう。

この手のサイトが結構昨年は多かったように思う。 まぁ一度はアクセスしてみたくなるので、それだけでも結構人が集るんでしょう。

が、今年はこういう根拠のないジョークサイトじゃなくて 本格的にインテリジェントなものがクルんじゃないかと密かに思ってる。cut-sea:2008/01/06 18:56:58 PST


Last modified : 2009/01/26 01:15:38 UTC