2012-04-08

大学生のための講義情報共有サービスLecanaをリリースしました

http://lecana.net/
『カニバリズム山脈』という名前で提供していたサービスの後継として新しくWebサービスをリリースしました。
簡単に説明すると、大学生が時間割を組んだり、講義の情報を共有したりすることのできるサービスです。
コードをゼロから書き直し、デザインも新しくなりました。チーム3人で開発を行って、僕は主にバックエンドの開発を担当しました。
開発にあたって意識したのは次の3点です。

  • 年度が更新されても講義の情報が蓄積されるようにすること
  • 複数の大学に提供できるようにすること
  • 機能をできる限りシンプルに保つこと

現在は京都大学のみに対応だけれど、他の大学にも対応していこうと思っています。

技術的には、Rails3.1 / CoffeeScript / Haml / Sassを使った。特にHamlを使ったおかげでViewがすっきりして変更がしやすくなった。RspecでModel周りのユニットテストは書いたのだけど、仕様があまり決まってなかったこともあって他の部分ではあまりTDDできなかったのが心残り。

思ったよりもプロジェクトが遅延したこともあって、リリースするまでは心理的負担もかなり大きかったんだけど、なんとか4月初めにリリースできてよかった。
メンバーがコミットしてきたコードがカオスすぎて爆笑しながらリファクタリングしたのはすごく貴重な体験だった。
それ以来、彼には将来的に変更する可能性のない部分のコードのみを任せている。

「多分動くと思うからリリースしようぜ」

2012-01-18

時間割で大学生を分類する [カニバリズム山脈クラスタリング ]

カニバリズム山脈(http://cannibalism.jp/)という大学生の時間割を共有するサービスを京大学内向けに運営している。
多くの学生の時間割のデータが集まっているので、これをデータ・クラスタリングして大学生を分類できないかと思ってやってみた。
データ・クラスタリング - Wikipedia

動機としてはどちらかというと試験期間前の現実逃避という色が強い。

説明

使ったデータは、ユーザーの名前(Twitter ID)とそのユーザの登録してる授業科目のIDで、数はおよそ300ユーザーくらい。
クラスタリングには『集合知プログラミング』のコードをPythonからRubyにほとんどそのまま書きなおしたプログラムを使った。データにうまく対応させるために書き換えたりした部分もある。

データを分類するためには時間割の類似度を測ることが必要なのだけど、これにはTanimoto係数を使った。Tanimoto係数は集合の類似度を測る指標で、単純に集合の共通部分の要素数を和集合の要素数で割ることで求められる。

T = N_c / (N_a + N_b - N_c)
N_a : Aの要素数  N_b : Bの要素数  N_c : AとBの共通部分の要素数

結果

下は階層的クラスタリングしてデンドログラムというグラフにしたもの。時間割の類似度が高いユーザ間ほど直線で直接結ばれやすくなる。
詳細画像:http://i.imgur.com/GAjcm.png
f:id:uiureo:20120118223803p:plain

次のはどの塊がどの学部学科に対応するかデンドログラムに手動で注釈をつけてみたもの。同じ学部回生がクラスタに集まってることが分かる。
専門科目の多い学部学科ほどうまく分類しやすいみたい。
詳細画像:http://i.imgur.com/s53nB.png
f:id:uiureo:20120118224734j:plain

次のは多次元尺度構成法を使って2次元平面に写しだしたもの。時間割の似ているユーザほど近くに位置して、似ていないユーザほど遠くに位置するようになる。
デンドログラムと比べるとはっきりしないけど、同じ学部学科や学年が集まりやすいことが分かる。
詳細画像:http://i.imgur.com/t8r5Q.png
f:id:uiureo:20120118224142p:plain

まとめ

時間割という枠の限られたデータだからうまくいかないかもしれないかと思ったけど、意外とうまくクラスタリングできて良かった。
類似度を用いると同じ学部学科の人間を推測できたりして色々と楽しそうなことができるので、これからのサービス開発に役立てていけたらいいなと思う。

集合知プログラミング』にはデータ・クラスタリングなどの機械学習のトピックを分かりやすく説明されている素晴らしい本なので、大学生の人はつまらない試験勉強なんかせずにこの本を読みましょう。

コードとか

集合知プログラミング

集合知プログラミング

2011-12-17

今年やったバイト

今年、大学に入ってから初めてバイトをした。偶然の巡りあわせで貰った仕事が多くて、面白い経験をしたのでまとめておく。

共感覚実験

前のエントリ*1にも書いたけど、大学の授業に出たことがきっかけで貰った。
だいたい月に1回くらい研究室に通って実験を受けた。実験を受ける時間は1回につき1時間くらい。時給は1000円。
暗い部屋の中で明るいディスプレイを見つめないといけないから目がかなり疲れる。思ったほど楽なバイトじゃなかった。
名古屋にまで実験に行ったことで区切りはついたみたい。もしかしたら続きがあるかも?

Redmineプラグインの開発

サークルの飲み会の席でOBを通じて貰った仕事。Ruby on Railsを使ってRedmine*2のプラグインを作るという案件で人手が足りないから手伝って欲しいとのことだった。
8月から9月にかけての短期のバイトとして貰った。どこで作業してもいいという話だったので、帰省中の実家で仕事をした。
仕様を満たす機能を作るには、MVCを無視しなきゃいけなかったり黒魔術を使わなきゃいけなかったりで、クリーンで楽しい感じの開発ではなかった。
受託開発の下請けみたいな感じの仕事だったので、受託というのはこういう物なのかと参考になったし良い経験だった。時間単価じゃなかったけど、時給に換算すると給料もかなり良かった。でも、Redmineの開発はもうやりたくないなぁ。

ソーシャルゲームの開発

6月に思ったよりも大学がつまらなかったので、バイトでも始めようと思ってあるWeb企業の面接に行ったらなぜか別の会社を紹介されて、その会社に面接に行って貰った仕事。
GREEなどで動いてるソーシャルゲームを多数作ってる会社で、僕はそのうちの一つのチームに配属されている。やってる仕事はソーシャルゲームの開発というよりもそのゲームを管理するためのツールを開発しているという感じ。これもRailsを使って開発してる。
環境がとても良くて、オフィスがとても綺麗でかっこいいし大学からも近い。お菓子が常備されているから、あんまり食べないようにしないといけないと思いつつもついつい食べてしまう。
ソーシャルゲームという今流行の分野ということもあって、時間の流れるスピードはとても速いように思う。多数のアクセスを裁くために様々な新しい技術が使われていて、ソースコードを読んでいて感心することが多い。初めて読む業務のソースコードということもあって、プログラマとして参考になることが多かった。
7月から始めて週に二回くらい行ってる(なかなか行けないときもあるけど)。何度か長く休んだりしたけど、一応今も働いてることになってる。
ちなみにここ。
http://www.happyelements.co.jp/

これから

実験を除くとどちらもRails2での開発だったので、来年はRails3やJavaScriptや他の言語の仕事もやってみたいと思ってる。
お金がそれほど欲しいわけじゃないのに、なんでバイトやってるんだろうと時々思うけど、それはたぶんその仕事が刺激的で楽しいからで、そういう刺激がなくなってしまうと辞めてしまうんだろうなぁと思う。刺激的で楽しい仕事を来年もやることができたらいいなと思う。

2011-12-08

実験の被験者をやってたらタダで名古屋に行けた

 とある認知科学の実験に被験者として参加していたんだけど、その一連の出来事に区切りがついたので書いておこうと思う。

 きっかけは今年の4月に取っていた視覚科学という授業で、その第一回目の授業で共感覚について話されていたことだった。
共感覚というのは「文字などに色を感じる」現象のことで、共感覚のある人は割と珍しいとのことだった。授業の終わりにアンケートが配られて、共感覚のある人は実験に参加して欲しいので書いてくれると嬉しいと言っていた。
 文字に色を感じることは自分にとって普通のことだったからすごく戸惑ったのだけど、アンケートに共感覚に心当たりがある旨を書いて提出した。そうすると、実験に参加して欲しいとメールで連絡があった。実験がどんなのか興味があって面白そうだったから参加することにした。
 一回目に研究室に行くと、文字に対して常に同じ色を感じるかを測る共感覚のテストがあって、それにパスしたので共感覚者として正式に実験に参加することになった。
それから一ヶ月に一回くらい研究室に通って、暗室の中に入ってパソコンのディスプレイに表示される文字について感じる色をキーボードで選ぶ、といったようなことをずっとしていた。暗いところで明るいディスプレイを見てると、すごく目が疲れて結構大変だった。時給は割と良かったので、我慢したけど。

 そんな終わりの見えない実験を何ヶ月も続けてたんだけど、つい先月に他大学の人が来て、共感覚でも特殊な部類の能力があるから実験機材のある名古屋の研究所まで行って実験を受けて欲しいと言われた。交通費と日当が出て、実験も30分くらいで終わるらしいので、暇人の僕には断る理由がなかった。名古屋にタダで行ける機会ってなかなかないだろうし。
 それで、先月の30日に名古屋に行ってきた。行ったのは生理学研究所*1というところで、名古屋駅から電車で30分くらいの都会からは少し外れたようなところにあった。大きな施設で動物実験所とかがあって、地元の住民からは科学要塞と呼ばれてるらしい。
 下のリンクの画像のような装置に入って、暗い密室の中で実験を受けた。この装置に入ると頭が固定されて一人では抜け出せなくなる。この装置は液体ヘリウムを使っていて、年間の維持費だけで数千万円かかるらしい。この装置で、スクリーンに映る単語に対して脳がどのような反応をするかを脳磁場を測って調べるらしい。実験自体はすぐに終わった。
共同研究機器一覧/自然科学研究機構 生理学研究所

 引きこもりにとっては久しぶりの遠出で疲れたけど、名古屋駅できしめんを食べることだってできたし、名古屋駅の周辺を見物することだってできたから、とても満足した。味噌煮込みうどんを食べそこねたので、機会があったらまた食べに行きたいなと思う。

2011-11-27

「私たちを剥製してください」

私たちを剥製してください」という言葉が気に入っていて最近よく使っています。当然だけど、お前何言ってんのか意味分からんと言われることが多いので、ここで解説しておきます。

一言でいうと、これはGoogle検索ボックスに「わたしたちを」と入力したときにサジェストされる文字列です。
不思議なのは、検索ワードとしてサジェストされるのに「私たちを剥製してください」に一致する検索結果が出てこないことです。
一番上に出てくるのでも "紬「私、唯ちゃん達を剥製にして部屋に飾るのが夢だったの~♪」" というよく分からない結果がでてくる。一致する結果が出てきてしまってるのは、面白がって僕が何度もツイートしてしまったからです。

f:id:uiureo:20111127151545p:image

なんでこんなことを見つけたかというと、ちょうどその頃、苺ましまろというアニメにハマっていてそのOPの「いちごコンプリート」の歌詞に「わたしたちを許してあげなさい」という表現があって、この表現が僕はすごく気に入っていた。それで「いちごコンプリート」を聴いてる時に、反射的にGoogleの検索バーに「わたしたちを許してあげなさい」を入力し始めてしまった。そうしたときに検索バーに一瞬奇妙な文字列が見えて、なんだろう?と思って調べてみたらそれが「私たちを剥製してください」だった。

「私たちを剥製してください」という表現がなんで気に入ってるかというと、一見して奇妙だけど想像してみると獣たち(たぬきとか)が何らかの事情で人間に「私たちを剥製してください」を一生のお願いしてるストーリーがありありと思い浮かぶからです。その事情は、そのまま自分たちが死んでしまったらその姿を現世に留めることはできないけど、剥製になれば姿を永くこの世界に留めることができるからだ、とか妄想することができて楽しい。

関連するTwitterアカウント

@uiureo @irulop @k_hanazuki @hsimyu など

2011-11-27

学祭で架空の講演会をやった話

11/23~26の間、京大の学祭NFがあって、僕は特にこれといった出し物とかはしなかったので、適当に展示を見て回ったりサークルの手伝いをしたりしてました。
色々あったけど、その中でも割と面白い出来事があったので書いてみます。
きっかけはNF一日目の夜。京大の学祭では廊下の壁とかあらゆるところに学生が勝手にビラを貼る文化がある。色んなところに貼ってある講演会のビラを見た知り合いが、自分たちで考えた講演会っぽいビラを貼ったら面白そうと言い始めた。そのときはただの冗談だと思って、こんなテーマだったら意味が分からなくてやばい、とか面白がって何人かで話してたんだけど、次の日の朝起きて大学に行ったら廊下に「カニバリズム山脈講演会」と書かれたビラがたくさん貼ってあった。
画像は下のURLにある。面白いのでぜひ見て欲しいと思う。

カニバリズム山脈、なにやってるの……? ただのノート共有サービスではなかったということか?! http://twitpic.com/7irlt2 | http://twitter.com/#!/katryo/status/139627685428215808

講演者の所属の大学は存在しないし、講演テーマは意味がわからなくて無茶苦茶だし、講演の会場も書いてない。
これを見た一部の人間が面白がって、ビラに書いてある時間に合わせて「今から講演会」とかいう風にTwitter上で実況してるかのようにツイートし始めた。
熱心に実況ツイートしたおかげで、Twitter上だけに存在する架空の講演会が形成された状態になってた。
あまりに実際の講演実況っぽいツイートをしすぎたものだから、TwitterのTLで聞きつけた人が「カニバリズム山脈講演会ってどこでやってるんですか?」と聴いてきたりしてとても面白かった。
Togetterにまとめが上がってるので良ければ見て欲しい。
カニバリズム山脈講演会 - Togetter

2011-11-24

Proxy経由でのRails開発

大学内のネットワーク上で開発するときにプロキシに邪魔されてgem installできなかったりして困ることがある。退屈な授業中にそういうことがあると家に帰りたくなるし、ますます大学に行きたくなくなる。家は静かだし独り言をブツブツ言っても他の人に睨まれない。家に帰るしかない。
とはいっても、家に帰るのもめんどくさくなることがあって対処法を調べたりして、だいたいどうやればいいのか分かってきたので設定をまとめてみる。
京大内でこの設定で大丈夫だと確認してる。他の場所では知らないけど多分大丈夫だと思う。

gem install, bundle install

% export http_proxy=http://userid:password@host:port

たとえば、このようにする。

% export http_proxy=http://uiureo:pass@proxy.kuins.net:8080 

rails server

rails server して表示されるURLを「プロキシ設定を使用しないドメイン」に指定する。

  => Rails 3.1.3 application starting in development on http://0.0.0.0:3000

たとえば、こうなっていたら 0.0.0.0:3000を「プロキシ設定を使用しないドメイン」に設定する。
Macだと、システム環境設定 -> ネットワーク -> 詳細 -> プロキシで設定するといい

気分で追加していく予定。