日記 - 2013-04
2013-04-29
mikutter on Windows
@tanakhさんがWindowsでmikutterを動かそうとして失敗していたので,試しに自分でも入れてみました.
取り急ぎまとめておくので,Windowsでmikutterを使いたい人や検証したい人は参考にしてください. また,検証した環境は32bitなので64bitで同じように動くかはわかりません.
Rubyは RubyInstaller の 2.0.0-p0 を使います. Ruby-GNOME2のC拡張を入れるのに必要かと思ってDevelopment Kitも入れましたが,最終的にはコンパイル済みバイナリを使ったのでなくても大丈夫かもしれません.
次に,以下のようにしてRuby-GNOME2を導入します.
gem fetch gtk2 --platform x86-mingw32
gem install gt2-2.0.0-x86-mingw32.gem --platform x86-mingw32
設定が壊れているのか,単に gem install gtk2 --platform x86-mingw32
しただけでは gtk2 gem のネイティブバイナリ版が落ちてきません.
これはなぜか gem fetch gtk2 --platform x86-mingw32
だとちゃんとネイティブバイナリ版が落ちてくるので,一旦ローカルにgemを落としてからインストールすることで回避します
(ちなみに,実際には順番が前後していて
gem install gtk2 --platform x86-mingw32
# ここで gtk2 のインストールがこけたので fetch してくる
gem fetch gtk2 --platform x86-mingw32
gem install gtk2-2.0.0-x86-mingw32.gem --platform x86-mingw32
という順番で実行していました).
これで準備が整ったので, mikutterを落としてきます. このままでも起動はしますが,投稿しようとすると落ちてしまいます. 原因はちゃんと追っていませんが,クラッシュログによれば core/mui/gtk_postbox.rb の141行目付近にある
notice [event,msg].inspect
という文が原因になっているようです(文字コード関連っぽい). これはただのデバッグ文なので,単にコメントアウトすればちゃんと動くようになります.
以前はまともに動かなかったような気がするんですが,Ruby2.0.0とRuby-GNOME2.0.0の力なのか,安定して動いているように見えます.
2013-04-28
コメントフォーム
Haskellの勉強がてらコメントフォームを作ってみました. Persistent + CGIで動いています. 詳細は後で書きますが,Network.CGIのマルチバイト文字列の扱いに問題があったのが面倒でした. ほぼ出来上がってから@eagletmtさんにScottyというSinatraっぽいWebスタックの存在を教えてもらったので,暇なときに移行します…….
連投制限とかしてないので,あまりいじめないでください.
2013-04-23
JAG春コンテスト
日曜日にJAG春コンテストがありました. haskell-loverの結果は1問しか解けないというひどい成績でした.
原因は実力不足もありますが,一番の問題は1つの問題にハマりすぎていた点だと思います. 完全にICPCの戦い方を忘れていて,特にBは即座に解法が見えたのになぜかしばらく放置して他の問題を見ていました. その後もBでバグり,交代して@eagletmtさんがCを書いている間もだらだらとBのデバッグをしていました. 今思い返せば,Aはこの時点でもう少しの所まで行っていたので思考を移すべきだったと思います. Cについても,@eagletmtさんが明らかにバグでハマっていたので強制的に他の問題に移行させるべきでした.
落ち着いて解けるだけの実力をつけることもさることながら,チーム戦の戦い方も何回か試す必要がありそうです. 台湾大会のときはうまく行っていた気がするので,とりあえず試すべきはその時と同じ戦略ですかね…….
2013-04-14
HaskellでDB
HaskellでDBを触ろうとしてものすごくハマりました.
そもそもHaskellからDBを触る話が探してもあんまり出てこないので,Real World Haskellに書いてあったHDBCを使ってみました. 結論から言うとこれが失敗で,遅延評価周りのバグなのか(少なくともMySQLバインディングは)うまく動きませんでした.
何が起きたかを端的に書くと,
- INSERTしたあとにCOMMITするとSQLコネクションが切れたというエラーが出る.
- しかしINSERT自体は成功している.
- seqで正格評価するとエラーが出なくなる ことがある.
- 以上の現象は64bitマシンでのみ発生する.
という感じです.
頑張って検索すると StackOverflow と HaskellのML で同じ症状が報告されていました. 色々試してみて上記のseqにたどり着いたのですが,これで解決したかと思いきや,StackOverflowで触れられているコードはSQLの返り値を使う必要があるため状況が異なり, seqを使った方法では解決しませんでした (誰か分かる人,原因を教えてください).
どうもこの問題は根が深そうなので諦めることにしてTwitterで聞いてみたところ,最近はYesodの部品であるPersistentを使うのがいいんじゃない, と@eagletmtさんに勧められたので,今はそっちを試してみています. ちょっと触っただけですが,黒魔術バリバリな雰囲気が漂っているけど使いやすさはHDBCより格段に上という印象です.
Haskellこわい.
2013-04-13
リリカルハッカソン
映画版なのは2作を観ながらハッカソンするイベント に行って来ました. 絶叫上映会みたいになるのかと思いきや,みんな黙って見つつコードを書きつつという感じで意外と終始静かでした.
自分は1stの間はなのはに集中力を奪われつつGCJをだらだら解いて,2nd A’sの間はHaskellでWebページのコメントシステムを作っていました. 映画版で比べると1stのほうが面白い気がします. 2nd A’sもつまらない訳じゃないんだけど,グレアム関連の話が消えてしまって話が単純になってしまったのと, 映画の尺に合わせるとなのは達の成長とかヴォルケンリッターの葛藤がどうしても描ききれてないという印象です.
で,ハッカソンの成果ですが,GCJはAとBを解いて飽きたので終了. Haskellの方はCGIでHTMLを吐くようにしてたんですが,途中で方針転換してJSONを吐くようにしたのでまだできてません.Haskellむずい. たぶん半分以上の時間はなのはに気を取られてました.
なのはが面白くて作業効率が落ちるという問題はあったものの,とりあえず集まって適当に自分の好きなことをやるという形式のハッカソンは モチベーションを作るという面でも良い気がしました. 開催してくださった@sinsoku_listyさんに感謝.
こういうの自分でもやってみたいですね.
2013-04-08
人工知能
前回 の続き.
今回は人工知能について.
現実と融合した「自然な操作感」の仮想世界を作り上げるとして,では「自然」とは一体何でしょうか. 物理的な現実世界と同じような法則を仮想世界で作り上げる,という方針は既に示しました. しかし,仮想世界では情報という抽象的な概念を扱う必要があります. 情報は人間が知覚できるよりずっと高速に変化したり転送したりすることが可能ですし,現実の物体よりも変化に関する制約はずっとゆるいため, 単純に物理的な表現に情報を当てはめたのでは情報の本質を表現しきれず,仮想世界と現実を接続している旨味が薄れてしまいます. なぜこのような事が起きるのかというと,それは人間が情報の扱い方を知らなかったり,情報の速度に合わせて処理を行うだけの能力がないことが原因です.
現実では,自分が全く知らないことについて何らかの対応をする必要が生じる,ということはよくあります. たとえば多くの人は,腕時計が壊れてしまった時に自分で修理することはできないでしょう. こういう時はどうやって解決するかというと,専門家に頼みます. 腕時計であれば時計店に持って行き,なんらかの処置をしてもらって腕時計を直してもらうというのが普通だと思います. ここで重要なのは,時計店の職人が一体何をやっているのか,とか腕時計の中はどういう構造になっているのか, といった知識をもっていなくても,時計店に任せれば修理されて返ってくるということさえ知っていれば, 腕時計が壊れたという自分の能力を超えた事態にも対処できるということです. これと同じことが情報の操作についても言えます. つまり,情報の世界で分からないこと,人間では面倒なことがあれば,そういった作業は情報の世界の住人であるAIにやってもらうのです.
また例を挙げると,あるフォルダの中に大量のファイルがあり,その中から画像だけを取り出して圧縮した後にメール送信したいとします. この操作は今のPCではある程度の習熟が必要な操作であり,不慣れな人には難しい点がいくつもあります (Windowsであれば,ファイルを拡張子で並び替えるとか,複数のファイルを選択し,圧縮するといった操作が該当します). このような場合に,AIのエージェントに対して「このフォルダから画像だけ取り出して圧縮しといて」と言っておくだけで作業が完了できるなら,初心者でも扱うことができ,操作性が格段に向上します. また,AIが十分に賢ければ,たとえばフォルダの中に写真とイラストが混在しているようなときに,これらを別々のファイルに圧縮した方が良いかたずねるといった,柔軟な動作も可能でしょう.
AIに専門家の代わりをやってもらうという考え方はエキスパートシステムと呼ばれ古くからあるものですが, エキスパートシステムは専門分野についての大量のルール(規則)から専門家の判断を模倣するもので, 入力は定型文や選択肢形式のものが一般的ですし,出力も一定の型に沿ったものしかできず,柔軟な対応は望めません.
攻殻機動隊を初めとして多くのSFでは,仮想世界や宇宙船などの管制システム,ガイドシステムとして人格をもったAIがよく用いられ, 登場人物とまるで人間のような会話を行なって意思の疎通をします. この方法の利点は,AIに対して情報の操作を指示するという動作が,現実で人間に対して仕事を頼むのと同じ方法でできる点にあります. また,人間っぽい挙動が返ってくると抵抗感が薄れ,使いやすいインタフェースデザインとなることも期待できます.
自分はこれが仮想現実,そしてそのユーザインタフェースの終着点だと思っています. すなわち,仮想世界の情報を現実世界と同じように見せる方法を確立し, どうしても現実世界に対応付けられない箇所や,技巧的で煩雑な操作が必要な箇所に関しては仮想世界の専門家としてのAIに任せられるようにすることで, 仮想世界と現実世界を区別なく扱える,両者の融合した世界が実現できると考えています.
長々と書きましたが,根底にあるのは電脳コイルや攻殻機動隊の世界を実現したいという願望で, そのために自分ができることを考えた結果としてユーザインタフェースや人工知能という分野が出てきたという感じです. バーチャルリアリティそのものについては興味が全くないわけではないのですが,自分の理想としては現実の方を強くしたいので, 3Dモデルで現実の複製を仮想世界に作り出すいわゆるVRよりは,ARとかタンジブルといった方向の技術が好きです.
2013-04-07
移り気
botを作ったばっかですが,今度はWebページにコメント機能をつけようとして自分で開発しています. で,サーバにはnginxを使っているのですが,こいつはCGIの実行機能がないのでちょっと面倒な設定が必要です. ということで メモを書きました .
タスクをいくつか積んで,それぞれを順番にちょっとづつ消化していくスタイルはあまり効率が良くない気もするのですが, 小目標を達成した後にやる気を失って時間が無駄に流れていく現象は回避できているのではないかなとも思っています. 思えばポケモンも主力1匹を集中して育てるのではなく,パーティ全体を均一に育てる派でした.
まあ,昔から要領は悪いので半ば諦め気味です…….
2013-04-05
バーチャルリアリティ
この前 の続き.
今回はバーチャルリアリティについての話です.
実は,自分のもっている人工知能への興味はバーチャルリアリティと密接に結びついています. きっかけとなったのは,高校2年の春からNHKで放送していたアニメ「電脳コイル」でした.
「電脳コイル」は電脳メガネというARガジェットが普及した近未来(といっても電脳メガネの存在以外はほとんど昭和終盤〜現代っぽい雰囲気)が舞台で, この技術を日々利用して生活している小学生たちの日常と,都市伝説から次第に明らかになっていく,電脳メガネの裏事情にまつわる非日常を描いた作品です. この作品では,電脳メガネという一見普通に眼鏡にしか見えないデバイスを装着するだけで,バーチャルなアバターが動きまわったり電脳駄菓子と呼ばれるおもちゃで遊んだりできるという, バーチャルリアリティが現実と見事に溶け合った魅力的な世界が作られています.
「電脳コイル」の世界では,かなり癖のある仮想世界の住人たちの描写もさることながら,仮想世界がまるで現実の一部であるかのように扱われています. たとえば壁を叩くとテクスチャが剥がれてエラーメッセージが見えたり,おもちゃのミサイルが飛んできたら(当たると電脳メガネが壊れ,修理が必要になってしまうため)物陰に隠れてやり過ごしたりします. 当時はコンピューター部でプログラムを書いたりゲームで遊んでいたりしましたが,当然のことながらこれらはPCの中の世界にキーボードとマウスだけで繋がるもので, 現実からわざわざ仮想空間に入っていくという印象がどうしても拭えないので,等身大の仮想世界を描いた電脳コイルの圧倒的な現実感には到底勝てませんでした. 現実と融合した仮想現実を自分の手で作りたいという想いを抱き初めたのは,この時からです.
その後,高校3年の夏休みにアニメの攻殻機動隊を観て,また衝撃を受けました. 攻殻機動隊を観た理由というのは色々な所で面白いという話や,電脳コイルの先駆けとも言える世界観だという話を聞いていたからです.
攻殻機動隊は電脳コイルよりも更にストイックにバーチャルリアリティを突き詰めた作品であり,基本的には人間の脳に直接回路を繋いで情報をやり取りする形式でバーチャルリアリティを説明していますが, 電脳コイルのある種ファンタジックな世界観に慣れていた自分に取ってはそれだけでも刺激的でした. 特に衝撃を受けたのは,電脳コイルではユーザが体を動かすなどのアクションで操作をしないと仮想世界の操作ができなかったのを, 攻殻機動隊では脳を直接コンピュータに接続することで,完全に思考だけで電脳戦のような複雑な作業を可能にしている点でした. 脳を単なる情報処理端末として扱い,機械のように回路を繋げ,挙句の果てには脳だけ残して体を全部機械に置換してしまうという突拍子もない世界観は, 仮想現実との融合という観点では究極の到達地点だと思います.
この影響を受けて,バーチャルリアリティの手段としてのBMI(Brain Machine Interface)も興味に上がってきました. 攻殻機動隊では脳への入力,脳からの出力のほぼ全てを外部からの制御下に置いており,単なる高性能な機械部品といった扱いでしたが, これらのうち脳からの出力を取る技術は(脳への人為的な入力に比べれば)実現可能性が高いのではないかと考え, たとえ半分であっても仮想世界との融合という目的へ近づくことは可能だと思ったのです. この予想は正しく,現在は脳波の研究が盛んに行われており,脳波を使ったおもちゃまでも見られるようになってきました.
攻殻機動隊の話に戻ると,上で上げた例以外にも,データを円盤で表現してこれを投げて人に渡す,ファイアウォールを防壁と呼んで実際に大きなデバイスとして接続して扱うなど, 現実のアナロジーによる仮想世界の表現は大変画期的なものに感じました. なぜなら,現実の物体と同じ方法で仮想世界の物体を扱えるのであればキーボードとマウスのような新しい操作体系を覚える必要がないし, 何より現実と同じ動きで仮想世界に干渉できれば,現実と仮想の境界を意識しない,完全な没入が実現できると考えられるからです. 実際,先の例でもデータは本質的に仮想の物体,防壁は現実の物体ですが,どちらも区別なくガジェットとして扱われています.
結局人工知能の話には入りませんでした. また次回書きます.
2013-04-04
新研究室
昨日作った自分を模倣するbot, @_osa_k についての 記事を書きました .
今日は新しい研究室,というか小池研ですが,に行きました. M1は全部で5人いるし,楽しげな研究室なので充実した2年間を過ごせそうです. あと,プログラムがそれなりにできるという話を歓迎会でしたところ,すごい人みたいな扱いになったので微妙にプレッシャーを感じます.
2013-04-02
自分の興味について
ニコニコでシュタインズ・ゲートを一気に観ました. 感想 .
4月になって大学院生活が始まるのと,最近進む方向を見失いかけているので,自分の興味について整理を兼ねて振り返ってみます.
自分の研究対象としての興味はユーザインタフェース(特にハードウェア寄りのもの),人工知能が主です. プログラミングは好きだし,学部の間はどちらかというとプログラムを書くだけで完結するような事ばかりやってきた気がしますが, 研究としてプログラミングや計算工学専攻(東工大で言えば西8的な)を選ぶことについては,何か違うなとかなり前から思っていました.
上記の分野への興味は,高校2年の頃に初めて意識したと想います. 小5くらいからプログラミングをやっていて,桐朋中高ではコンピューター部でゲーム作成などを続け, 中3と高2の冬には情報オリンピックの春合宿に参加することもできたので, プログラミング能力に関しては十分に自信がありました. しかしこの頃から,コンピュータ上でコードを書くだけで完結する物作りに対して空虚な感じを抱き初めました.
コンピュータというのは先端技術の集合であり,とても自分で1から作れるとは思えません. 特に当時はトランジスタとは何かすら知らなかったので,コンピュータという物体はほぼブラックボックスでした. そこで一つの疑問が生じます. 「自分はプログラミングで様々なものを作っているが,それを支える先端技術のない所で一体何ができるのか?」 コンピュータが与えられていなければ,当然自分で代替品を作ることもできず,自分の能力は役に立たないことは分かりきっています. そう考えると自分の足場が頼りないものに感じ,コンピュータを支えるハードウェアや,更には電子制御の関係ないからくりや機構学が魅力的に見えました(この発想も,今思い返すと相当に甘いですが).
このような経緯でハードウェアに興味を持ったのですが,高校の頃は何をやっていいか全くわからず, 秋月電子でPICと本を買って少し電子工作に手を出してはみたものの,他に仲間がいなかったこともあって長続きしませんでした.
その後,東工大に入学してロボット技術研究会に入り,新入生対象のロボコンでロボットを作ったことでいくらか考えが変わりました. 自分は主に回路とプログラムを担当していましたが,それまでは機構学の極致のように考えていたロボットが実はかなりの割合を電子制御に頼っていること, 質の良いロボットを作成するための機械も結局はブラックボックスであることを,実感として知ることができたためです. ただ,プログラムだけの世界に閉じこもっていても面白くないという考え方は変わらず,代わりにプログラムと人間の間を埋める,インタフェースに興味をもつようになりました. 自分の書いたプログラムの通りに動くロボットが,あたかもプログラムそのものが実体化したかのように見えたのかもしれません.
とにかく,プログラムとは人が使ってこそ活きるものであり,そのためにはモニタとキーボードとマウスのように2次元に縛られるのではなく, 現実の3次元的な動きをそのまま取り入れられるようなインタフェースが重要だろうという考えに至りました. この考えの根底には攻殻機動隊,電脳コイルを始めとしたSFやサイバーパンクの影響があるのは間違いありませんし,この信念は今も変わりません (このへんの話は人工知能の話とともに後日書きます).
2年次からはICPC練習会に誘われてそちらでも活動するようになり,また生来の怠けぐせや無計画さもあってロ技研ではあまりパッとした結果を残せていません. IVRCにも参加しようとしましたが,残念ながらアイデアの練り込みが足りず,書類審査で落ちてしまいました.
4年次の卒研配属時には,結構直前まで人工知能系(長谷川研)かユーザインタフェース系(小池研)か迷っていたのですが,長谷川研は成績の良い友人が行くと公言していたため断念し, 小池研へ行く決心をしました. 蓋を開けてみればそこも成績で弾かれて,卒研では全く違う研究室になってしまったのですが. 4月からの研究室は,このときに弾かれた小池研です.
人工知能の話については次回.