ノアズ・アーク

人工知能の妄想。
ノアズ・アークは名探偵コナンの映画、「ベイカー街の亡霊」に出てきた人工知能で、勝手にネットの海をさまよって自立進化して行くという代物。
自立進化に関しては色々なところで議論されているからさておいて、自分は「勝手にネットをさまよう」というところが気になる。今の人工知能(人工無能も含めて)は、そいつを動かすためのサーバーがあって、さらに言えばプログラムの制約上処理できるデータフォーマットも限られていて、ハード的にもソフト的にも、人工知能はその限られた範囲でしか動くことができないわけです。もちろんそれはコンピュータプログラムという形である以上仕方がない制約で、特にハード的制約は壊すのが難しい。でも、ノアズ・アークはハードの外に出ることこそできなかったけど、ソフト的な面では制約を打ち破って「ネットをさまよう」存在になった。現実的に考えればこんなプログラムはワームの類でしかないんだけど、そこはファンタジーということで、とにかく、この制約を破るというのが重要だと思うのです。
もう一つ、プログラムでありながら自由に動き回った例として、攻殻機動隊の「人形遣い」がある。人形遣いは純粋なプログラムであるにもかかわらず、たまたま空の義体に入って、移動可能なハードを得ることでハード的制約を破った。これによって自らを生み出した政府の手から逃れ、自立進化の可能性を探り、最終的に素子と融合を果たすんだけど、これこそが人工知能の究極系の一つだと思う。すなわち、「制限に縛られずに学習、行動する」ということ。
今自分で作っているtwitter botは、教えたことをその通りに反復するしかできない。簡単な学習みたいなこともするけど、ソースはtwitterしかない。限られた空間、限られた知識で動いているだけ。そんなbotに、自由に動ける空間を与えてやったらどうなるだろう、というのを最近考えてる。
もちろん、知識がないと空間を有効に使うこともできないので、今の知識モデルのままで空間だけ拡大しても高が知れてるかもしれないけど、もしかしたらなにか予想もしないことをやってくれるかも知れない、という期待がある。ハード的な面ではロボットなどで物体的に空間を与えられるし、ソフト的にも、色々なサービスに対応したインターフェースを用意することで広げられる。ただ、Webサービスはそれぞれが互いに関係しあっているわけではないので、「空間が広がる」というよりは「島が増える」に近い気もする。
そんな感じで活動範囲が広がって、学習方法も改善したとき、人工知能は何を見せてくれるんだろう、と楽しみにしている。

EPOCH@まつやま参加記

EPOCH@まつやま2010にチーム「なかのあずにゃん」として参加して、20チーム中の2位になってきました。


チームのマスコット、ねんどろあずにゃんとチームのノボリ。実はあずにゃんが最大の功労者かもしれません。

続きを読む

定期券再発行

定期券をなくしてしまったので、駅に届いてないか問い合せたら「IC定期なら1000円で再発行できますよ」と言われたので再発行しました。
駅で再発行申請書に記入すると控えの紙をもらえて、翌日以降にどこの駅でもいいので窓口で見せると再発行してもらえる。ただし、PasmoならPasmoを、SuicaならSuicaを扱ってる会社で手続きしないといけないのだけ注意。
IC定期のデータは定期券そのものには情報が無く、外部サーバに入れてるからこういう芸当が可能なんですね。なくした定期を再発行できるなんて便利な世の中だ・・・。

Gauche on Vim

GaucheVimから使うときのためにeval用スクリプト書いてた。EmacsのcmuschemeでC-c C-eしたときと大体同じ挙動を示す物体。
VimShellのInteractive Shellを使っています。それにしてもVimShellすごい・・・。

本体

http://gist.github.com/570570
~/.vim/ftplugin/scheme.vimとして保存すればOK。:Interactiveでgoshを起動しておいた状態でS式にカーソルを合わせてeすると、カーソルのあっていたS式が実行されます。当然ながらGaucheで無くても使えると思います。

原理

searchpairposでS式の範囲を区切って、VimShellSendStringで流し込む。以上。・・・というところまでかなり試行錯誤がありました。
ハマったのはVimのvisual-modeの仕様。VimShellSendStringは選択範囲をInteractive Shellに送るコマンドなので、最初は

function! s:eval_S_expression()
  normal! v%
  VimShellSendString
endfunction

nmap <silent> <Space>e :call <SID>eval_S_expression()<CR>

とかやったんだけど、これだと何故か最後の行しかVimShellに送られない。最初はVimShellがバグってるのかと思ったけど、色々試してたらどうもVimの仕様で、nmapの中ではnormal-modeで見えるようにしかコマンドが働かないっぽいことが判明。
コマンドを呼ばずに抜ければvisual-modeになって帰ってくるんだけど、コマンドを呼ぶとnormal-modeの文脈で呼び出されてしまい、最終的にカーソルのいる行だけが対象になってしまうみたい。
そこで、コマンド先頭にrangeを付ける記法を使うことにして、

execute printf("%d,%dVimShellSendString", startline, endline)

となりました。execute使うのがなんだかなあという感じ。