実験プログラム

いい加減研究しないとまずい(してないわけではない)ので最近は実験プログラムをゴリゴリ書いている。pygameをベースに、特殊な刺激を呈示するときはpsychopyを使ったり、マイクを拾うためにpyaudioを使ったりしている。コンピュータは便利だ。たくさんの実験参加者に全く同じ刺激を呈示することも、参加者の行動をミリ秒単位で記録することもコンピュータなしでは不可能だっただろう。

よく考えると、人間に何かを見せてそれに応じて何かを入力させるのはゲームと同じだ。だからゲームプログラミングのライブラリを使うのは理にかなっている。Pythonは遅いので一般論としてゲームプログラミングには向かないが、僕の研究では3DCGのレンダリングをするわけではないし、タイミングを記録することを考えても100fps出れば十分なのでPythonで事足りる。

マイクやらスピーカーやら圧力センサやらのデバイスを使うとなると低レイヤーで問題が発生することが多い。windows上でその手の問題を地道に解決していくのは正直かなりしんどい。

うん。しんどい。

ファッション

食堂で近くに座っていた人が完璧までにslackカラーのチェックシャツを着ていて笑いそうになった。

東京大学、特に1・2年生のいる駒場キャンパスではチェックシャツはしばしば嘲笑の対象になる。高校時代ファッションに気を遣わなかった男子が大学に入って私服を選ぶときに、知識がないゆえに無難なチェックを選びがちであり、その画一性を嘲笑・自嘲するのだ。クソ。

僕もファッションはよくわからない。帰省したときに妹に選ばせたり、失敗しようのないポロシャツを買ったりしてやりすごしている。イケてるメンズは雑誌なんかを参考にコーディネートしているのだろうが、僕はそこまでの意欲がないし上半身と下半身の組み合わせが限定されるようなハイレベルファッションは利便性の観点からも選びにくい。

衣服に関して、僕は以前から気になっている脆弱性がある。衣服は布であり、いつか破れる。しかし衣服が破れたことに気づくのは絶対に破れた後である。これを論理的に言い換えると「衣服が破れているのに自分はそれに気づいていない時間」が必ず存在するのだ。衣服が破れていることに気づいていないということは、それを隠すようなムーブができないということだ。とても恥ずかしい事故が発生しかねない。

この問題を解決するアイデアをお持ちの方はぜひ教えて欲しい。

勇気をくれた彼

※この日記はビールとカクテルを1杯ずつ飲んで頭が痛いなかで書かれた。

夜、通りを歩いていたら、なんと通りに座りこんで車を眺めながらタバコ吸ってる兄ちゃんがいた。しかも地下鉄の送風口の上で。

これはやるしかない、今ならできると思って、兄ちゃんから少し離れて俺も道に座った。兄ちゃんは気味悪がったのかほどなく立ち去った。

夏のコンクリートはじんわり温かかった。座って空を見上げると星がひとつ見えた。

ドワンゴエンジニアハッカソンに参加した

※この記事は他人の金で『Asahi スーパードライ』を飲んで帰宅したあとに書かれた。

ハッカソンは初めて。殺伐としているのかなと思いきや交流しつつ作業を進められて大変楽しかった。発表者も皆独自の視点でお題を(無理やり)解釈して面白いものを作っていて、盛り上がった。バーチャルマシンの起動を400人で見守って成功したら会場がどっと湧くなどという体験は滅多にできるものではない。

私はといえば、お題が「バーチャル」だったので以下のように考えた。

作ったものはここ。Flaskでサーバー立ててWebサービス化しようかとも思ったけど時間足りなかった。いちいちcsvから読んでるのもダサいのでDB使いたかったけど時間(略)。

自分で使ってみて面白いのは毎回違う文章が生成される点で、パワーワードが生成されるまで連打してしまう。面白すぎてクスクス笑ってたら隣の人に怪しまれた。ためしに自分の過去の文章を放り込んでみた。

大成功であった。マヨネーズが焼きそばと相性が良いのは既知のことであったが、さらに酸味と塩味が融合したマヨネーズが鶏胸肉の酸味を覆い隠しつつ焼きそばの味になじませている。完全勝利である。

この成功は誰にも分らない。たといマヨネーズの焼きそばは相性ののに既知しもことに酸味を覆いの塩味なし。そういう完全、勝利は、向うの山の頂の巖に上り、空谷に向って吼える。

 

睡眠は偉大だ。1日1度の食事さえとれればあとは無限に寝ていたい。さらに睡眠には眠気がとれるという副産物まである。また、睡眠は認知症のリスクを減らす数少ないエビデンスのある予防法でもある。

およそ睡眠の働き、偉大を進めて進まざるものあることなし。1なら、勿論、日の1へとれれ度き食事である。睡眠眠気副産物行は、息をとれるで、叢中の声のある不思議に聞入っていた。「善くぞ減らす来睡眠ある。

うん。格調高い。次は有名な名文から

吉野家ってのはな、もっと殺伐としてるべきなんだよ。
Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。

その吉野家、のの殺伐も少からず、このんの下人のSentimentalismeに影響した。
座っと、字のテーブルには、向かいにいた奴、喧嘩かの死骸が、無造作に始まってあるが、火の光の及ぶ範囲が、思ったより狭いので、数は幾つともわからない。
雰囲気のんにごろりと刺す刺さた。子供とろとの交際は、この時までは余所目にすっこんより清白なりき。

夏の怪異―Python3のクラス変数のスコープ

さて、今日Pythonを書いていたら、妙なエラーに遭遇した。同じ役割を持つ変数をまとめておくためにクラス定義を用いて以下のようなコードを書いた(このようなクラスの使い方は悪くはない)。

これを見ただけで「あっ…」となる人はすごい。なんとこのコードは以下のようなエラーを吐く。

原因究明に時間を要したが、説明しているブログがあった。

【python】クラス変数のスコープには注意が必要

python - Accessing class variables from a list comprehension in the class definition - Stack Overflow

要約すると、クラス変数の中にスコープがネストされた場合、クラス変数の定義されたスコープは読まないよ、ということを言っています。リスト内包表記はスコープを作るので、この問題が起こります。

PEP 227 -- Statically Nested Scopes | Python.org

「それができるとメソッド定義で事故るだろーが、親切なpython様が対策してやってるんだよ」と書いてあります。

なるほど…。全然知らなかった。Pythonでは内側のスコープから外側のスコープを読めないということは原則的にはないので驚いた。

なお、本日書いたなかでぶっちぎりのクソコードはこれ。PythonとRubyはよくライバルみたいな扱いされるけど、こういうのを書いているとRuby使いたいと思う。でもPythonの方がライブラリが充実してるんだよなあ。

疲労

※この日記はキンキンに冷えてやがる『KIRIN 一番搾り』を飲みながら書かれた。

美味すぎて言葉が出てこねえ…

緊張感

今日は久々に他人に対して責任のあるプログラムを書いた。やはりPythonは僕のホームだ。昔から使い続けている言語なので、自分の進歩も感じられて楽しい。

明日は早い予定なので、おやすみ。

大事なことは全部

実験に必要なのでArduino(正確にはマルツ製の互換品、その名も『Marduino』)に圧力センサを繋いでPythonで読めるようにした。デバイスレベルからなんやかんやするのはかなり久しぶりだ。小学生の頃にサッカーロボットを作ったが、説明書のとおりに組み立てただけでメインはプログラミングだった。タイルを並べて条件分岐やパラメータ調節ができるようになっていたと記憶している。当時は『子供の科学』を購読していて、そこに連載されていたJavaScriptのコードを書き写して九九表を表示させたり、ちょっとした電子工作でフォトトランジスタの信号を音に変換してスピーカーをブーブー鳴らしたりして遊んでいたものだ。

それにしても当時ははんだごてを使っていて熱に弱い部品を壊してしまったこともあったが、今の電子工作はブレッドボードにピンをスポスポ刺していくだけで完成してすごい。いや、昔からブレッドボードってあったと思うんだけど、なぜだかそういうものを使った記憶がほとんどない。

圧力センサーを1つ接続したときは問題なく動作したが、2つめを並列で接続すると2つめは反応しなかった。回路の設計が悪いのか、はたまたいじっているうちにどこかを壊してしまったのかと1時間ほど悩んでいたのだが、丁寧に原因を切り分けてみるとどうやら導線のうち1本が初期不良で電流が不安定になっていたようだ。秋月で買ってきた新品なので油断していた。それにしても導線の初期不良って普通ある?どうやったら不良品作れるのよアレ。

今回の工作は実際のところネットの先人の体験談のとおりにやっただけだ。サークルの先輩の「大事なことは全部ネットに書いてある」という言葉は本当に至言だと思う。もちろんこの手の主張には「ネットに書いていないこともある」という留保がつくのがお約束だが、検索して書いてあるとおりにやるスキルさえあれば素人でもかなりいろいろなことができる時代になっていると思う。

既存のデバイスを使わずに自分で作ったのは、既存のデバイスがアメリカのいち企業によって開発されたもので、ググッてわかることが少なく、その企業の提供する様々なツールを使わないと触れなかったからだ。僕が作りたいのはあくまで実験のための道具であって芸術品ではない。素早く思い通りに操れることが大事であって、何年も使い続けられる堅牢さや充実したサポートは求めていない(そもそもいち企業が真に「充実」したサポートなど提供できるものか)。

僕がそれなりにプログラミングができるようになったのは(?)ネットの力だ。プログラミングの情報はググれば出てくる。それは凄いことだ。心理学の情報は大学がクソ高い金払って購読している論文誌を読まないとわからないからね。ググればわかることをちゃんとググれること、あるいはググればわかるようにちゃんと情報を出していくことが大事な時代だと思う。

時間泥棒

今日は日曜にもかかわらず論文でも読もうかと思っていたのだが、ネトフリで配信している『フラーハウス』を7話まで見た。前作『フルハウス』は子供の頃のテレビで放送していたのを何度か見ている。『フルハウス』では男3人が娘3人を育てる話だったが、『フラーハウス』は女3人が息子3人を育てる話だ。アメリカらしい思い切った切り替えだと思う。

アメリカのドラマを見るのは好きだ。これまでだと『glee』『ビッグバン★セオリー』『プリズンブレイク』『ER』をそこそこ見た。やはり日本とは価値観やコミュニケーションの方法が違っていて面白い。また、日本語版が制作されるほどの人気作ともなれば当然脚本や演出のレベルも高い。メッセージ性と娯楽性をハイレベルで両立している作品がアメリカではヒットするようだ(日本のドラマは全然見てないのでよく知らない)。頻繁に取り上げられる社会問題としてドラッグ・虐待・差別などがあり、他にも退役軍人が尊敬されるとか家が広いとか、奨学金を返すのがしんどい(たぶん日本よりも借りる人が多い)とか、日本とは違う文化も読み取れる。

最近だと中国のアニメがよく日本で放送されている。『霊剣山』は神仙思想がベースにあってよくわからなかった。『TO BE HEROINE』はギャグの中にも社会制度の息苦しさを感じさせる描写がもりこまれていた。中国共産党による規制こそあれど、中国の文化に沿って中国語で作れば消費者は13億人。日本の10倍だ。これから伸びてこないわけがないだろう。人口の力という点ではインド映画も気になるところだ。『きっと、うまくいく』と『ムトゥ 踊るマハラジャ』しか見たことがないが…。

こうして海外の文化に触れてみると、逆に日本の文化が海外にどう受け止められているのかも興味深い。僕は日本のコンテンツだとアニメしかよく知らないのだが、学校文化はかなりドメスティックなものとして受け止められている気がする。

それにしても、国境を超えて様々なコンテンツに触れられるようになったというのは凄いことだ。僕が大学1年生のころはまだツタヤでDVDを借りていた。今思えばデジタルデータが記録された物理媒体を借りるために物理身体を移動させるというのは甚だ奇妙な話だ。最近ツタヤは減っているそうだが(僕の近所のツタヤも閉店した)、これは当然のことだと思う。

一方で古いマイナー作品で権利管理が不明などという状態の作品だと、市場に流通している物理媒体以外に見る方法がないものもある。たとえばおおすみ正秋監督の『走れメロス』はアニメファンの間では有名なハイクオリティ作品だが、合法的に見る方法はVHSしかない。ツタヤの総本山である渋谷・新宿はこのようなマイナー作品も多く取り揃えており、なくなって欲しくないと思う(今調べてみたら『走れメロス』は置いてなかった)。

be caught in the rain

毎週土曜はコインランドリー、そして日記もいつもコインランドリーのことを書いていてマンネリを感じないでもない。

今日はコインランドリーから帰るときに雨に降られた。といってもコインランドリーは自宅から290m徒歩3分なのでどうということはない。洗濯物も軽く乾燥して自宅で干すので多少濡れても問題ない。

雨に降られて道を走っていると、自分がその場所にいるということを強く感じる。考え事をしながらだとかツイッターを見ながら道を歩いていてもそういうことは感じないのだが、雨に降られていると早く家に帰りたいとか木の下を走ろうとか考えるので、場所や空間のことを強く意識するのだと思う。

僕はときおり、道に寝転がりたいと思う。夏の夜にコンクリートはひんやりして気持ちよさそうだと思ったり、コンクリートはどういう触感なのか気になったり、はたまた単に疲れていたり、いろいろな理由がある。しかし実際にやったことはない。小学生のころは平気で道に座って寝転がったりしただろうが、大学生になってからはない。なんどか本気で試みたのだが、ついにできなかった。誰かが見ているかもしれないとか、道は公共の場所なのでそんなことをすべきでないとか、いろいろと理由をつけてはいるが、事実として僕は道に寝転がることができない。

子供の頃は自分はなんでもわかっているつもりだったし、自分を子供扱いする大人に苛立ったりもした。そして大人になればもっと自由になれると思っていた。しかし法律的・身体的には間違いなく大人になった今、僕は「子供はものをわかっていない」と思っているし、道に寝転がる自由を失った。

ところでHyperappで2つのactionを連鎖的に呼び出したいとき、具体的にはinputへの入力をstate.onePropertyに反映しつつ、さらにその新しいstate.onePropertyに基づいてstate.anotherPropertyを再計算したいとき、どういう風に書くのが美しいのだろうか。

現状こんな風に書いているが、ひとつの関数で2つの作業をしており、美しくない。2つめ(4行目)の操作を他の場所でも使いたいときに、2つの作業を別々の関数にしておいたほうが便利だ。そう素朴に考えたのだが、

これは上手くいかない。値を入力しても即座に元の値に戻ってしまう。多分Hyperappから呼ばれるupdateにはstateが渡されるが、updateから呼ばれるupdateInputやreCalculateにはstateが渡されていない。

こうすると望み通りの動作をするが、actionsの中に形式の違う関数が混ざっていていいのかどうか疑問がある。別の場所にhelperみたいなオブジェクトを作ってそこにしまっておきたい気がする。

Hyperappは書きやすい。楽だ。しかし「どう書くべきか」というノウハウが見つからない。自由は苦痛だ。自由を捨てよ。