大学院生曜日

月曜日の僕は一週間で一番大学院生をしている。すなわち、研究室のミーティングと学科のミーティングが月曜日にある。どちらも自分の担当回以外では他人の研究発表を聞いて理解し、それをブラッシュアップするような意見・質問が求められる。

これはなかなか難しい。心理学の研究計画は砂時計にたとえられる。すなわち仮説は大きく包括的なものでもいいが、何を計測すればその仮説の正しさを検討できるかというところに工夫を凝らし、最終的には数字と数字の単純な比較に持ち込む。

たとえば「文字の書き方は脳内でどのように記憶されているのか」という大きな仮説を検討したいとする。ここで先行研究を参考に第2段階の仮説として「記憶表象は外部座標系か身体座標系か」を設定する。簡単に言えば現実空間における文字の形がそのまま記憶されていて書くたびにそれをロードしてきて適切な手の動かし方をその場で計算しているのか、それとも手の動かし方をそのまま覚えているのかという2択。そしてこの仮説から「外部座標系で記憶しているならバカでかく書くときも小さく書くときも変わらないはずだが、身体座標系で記憶しているなら字のサイズが変わると関節の動かし方が(非線形に)変化するので、学習が無効になるだろう」という第3の仮説が生まれる。これに基づき「新しい文字を3cmで100回書かせて学習させたあと、1cmと10cmで書かせる。3cmで書いたときの文字を拡大して1cmと10cmの文字との誤差が一定値以下なら文字は外部座標系で学習されたのだろう。そうでなければ身体座標系で学習されたのだろう」という実験が立てられる。この研究例は自分の卒論をベースにいま適当に考えたので警察のツッコミは不要である。

上記実験例では「文字の書き方は脳内でどのように記憶されているのか」という問いが「異なるサイズで書かれた文字の形の差」という数値に収斂した。このように大きな仮説はどのようなもので、それを知るためにどのような実験が考案され、結果のグラフのどこを見ればいいのかということをよく考えながら聞いていないと研究の話にはすぐついていけなくなる。話についていけなくなると退屈で辛いので頑張ってついていこうと試みるが、簡単ではない。

人間を対象に研究をする場合「脳に電極刺して測ってみましょう」というわけにはいかない。人間に何かしらの課題をやってもらって、そのパフォーマンスを測定する。課題とパフォーマンスの関係から、その間にある人間というブラックボックスの性質を少しずつ推理していくのが心理学である。あくまで推理にすぎないので仮説を「検証」するという言葉は使わないのが通例となっている。ある現象が観測されたからといって、その原因が実験者の推測のとおりとは限らないからだ。

まあサルやネコには刺すんですけどね、電極。僕はやったことないけど。

0.75春+0.25夏

※この記事はチューハイ気分(レモン)を飲みながら書かれた

僕の住居は家賃が(場所に比して)安い代わりに人権が少し減っている。隣人の炊飯器のアラームが聞こえるし、地震でもないのに揺れる。そして洗濯機置き場がない。だから僕は洗濯物をバッグに詰めて近所のコインランドリーに通う。コインランドリーに洗濯物を放り込み、近所の飲食店で適当に食事をして、コインランドリーに戻って8分間乾燥、自宅に戻って干すというのが土曜か日曜のルーチンとなっている。飲食店はこれまでは家系ラーメンが多かったが、豆板醤じゃなくて辛醤が置いてあることやラー油が置いてないことが気に入らないので最近は足が遠のきつつある。

飲食店に行って戻る間僕は近所を散歩することになるのだが、週に一度という頻度は絶妙で、季節が少しずつ変化していくのが認識できる。今日の季節はタイトルの通り0.75春+0.25夏だ。基本的には爽やかな風が半袖に気持ちいいのだが少し日差しを長く浴びていると暑いという感覚も生まれてくる。

次の休日にはおそらく暑いと感じる頻度がもっと増えているだろう。「夏だなあ」なんてことを考えているうちに夏も終わり、秋も冬も終わり、僕の人生も終わるだろう。

JavaScriptに慣れるため、Hyperappでちょっとしたカスタム検索を手作りしている。なんにしても自分の手でゼロから作ってみるというのが大事だ。Reactもいいのだろうがちょっと環境が複雑過ぎる。Hyperappも完全に理解しているわけではないが、ブラックボックスがまだ小さくて済む感覚だ。

Reactではテキストボックスへの入力はいちいちonchangeで拾ってstateに反映してやらねばならないと聞くが、これは原理主義的ではあっても効率は劣るのではないだろうか。僕のアプリに必要なのは検索ボタンが押されたときに入力されている内容であって、1文字入力されるごとに何かしたいというわけではない。Hyperappではその辺適当にやれる余地があるようだが、どのように実装するのが美しいのかよくわからない。ブラックボックスを小さめにしたいという学習上の理由からjQueryは使いたくないのだが、すくなくともgetElementById("input1").valueではないと思う。誰か教えて。

wikipediaの検索のためにMediaWiki APIを使いたいんだが、Access-Control-Allow-Originの制約によってAPIを呼び出せない。遊びで書いたPythonからは呼び出せたのに、ブラウザから呼び出すとなると禁止とは、なんともケチな話だ。

じゃあウマ娘見るね。

6月1日の翌日

4時就寝・9時起床で渋谷へ。ぱるめ君の呼びかけで東京に来ていたyui540君に会った。去年8月のドワンゴインターン仲間である。

昨日6月1日は名目上の就活解禁日である。会社によっては内定者の懇親会を行ったりするようだ。これは名案だ。物理身体は同時に2箇所には存在できない。よって就活生にとって自社が一番であることを確認するために物理身体を要求するのは合理的だ。ちなみに僕の内定先の会社は何も言ってこなかった。

帰って寝て起きて寝て起きてこの日記を書いている。午後以降は特に面白い話はない。休日はこうあるべきだ。昨日も一昨日も結構な分量を書いたので、ここで内容のない日記を投稿して自分へのハードルを下げることは細く長く続けるためにはプラスだろう。ないようがないよう。

心理学とは

今日は昼のラーメンの汁が白いシャツにはねた以外は至って平和な一日で、紅茶を飲みながら論文を読んでまとめた。食堂で軽く食べて帰ろうと思ったら(ここでクリアアサヒを買ってきていたことを思い出し、開栓!)知らないニーチャンに「ここの食堂(メトロ)閉まってるみたいなんですけどこの時間でも開いている食堂はありますか」と聞かれた。それなら中央が開いていると答えてそのまま流れで一緒に食べることになった。

ニーチャンの話はまあネットに公開するのはやめておくが、彼との会話の中でひとつ一般的な問題に直面したのでそれを書く。それは「心理学ってフロイトとかですか?僕の気持ちわかりますか?」問題である。24歳にもなって仕事もせずにウロウロしているので、初対面の人と話すときに自分が異常者ではない[要出典]ことを伝えるためには、やはり大学院生であることを伝えるのが手っ取り早い。となれば専攻を言わないことはありえない。かくして以下のようなやりとりが発生する。

「大学院生です」

「ご専門は?」

「心理学です」

「へぇ〜心理学って言うと…」

こんな具合。

事実としては、僕のフロイトに対する認識は「心理学史における過去のある学派の代表者」でありそれ以上でもそれ以下でもない。1879年にブントがライプチヒ大学に心理学実験室を作り、これが実験データに基づく「科学的」心理学の幕開けであった。しかし当時の心理学は内観、すなわち静かな部屋で自分の心に浮かんできたものを報告するという手法に依存していた。この方法では当然自分にはわからない自分の心のはたらきはわからない。ブントの心理学を批判しつつ現れた3つの流派がゲシュタルト心理学、行動主義心理学、そしてフロイトの精神分析学である。フロイトの功績は無意識のはたらきを重視し、意識可能な心のはたらきに限られていた心理学の領域を拡張したことにある。他方、彼の主張の中には実験に基づかないものも多く、それらは現在では歴史的価値以上のものはない。

それにしてもフロイトはどうしてこんなに知名度があるのだろう。ひとつ思うのは、心理学というのは自分の心のはたらきなんだから誰にでもわかるはずだという思い込みと、人間の心には誰にも解明できない神秘性があってほしいという願望の均衡点がフロイトの思想だったのではないかということ。

もうひとつ「僕の気持ちわかりますか」問題だが、これも「気持ちってなんですか」とマジレスする羽目になる。たとえば僕は今全裸で自宅の椅子に座っていて尻が痛い。酒を飲んでいるので口の中は苦くて、頭は少しぼうっとしている。アニメ『ヒナまつり』が始まるのは楽しみだし明日友人と会うのも楽しみだが、約束の時間に起きられるかは不安だ。さて、あなたに今の僕の気持ちがわかりますか?

これはメンタリストDaiGoの影響なのかな。それより前からありそうな質問だけど。もちろん人間の考えていることは動作に漏れ出てくるし、それを利用して誰でもある程度は他人の気持ちを読んでいる。それ以上でもそれ以下でもない。

以上不満めいたことを書き連ねてきたが、基本的に研究をやっている人間は自分の研究している分野について素人に説明できる能力は持っているべきだと思う。社会とか国とかデカいことを言わないまでも、誰かの協力なしに研究はできない。なにより学問は金儲けに役立つので、ちゃんと金を持っている人を納得させると幸せになれる気がする。

おわり。

 

参考文献

梅本堯夫・大山正(1994)『心理学史への招待 現代心理学の背景』(新心理学ライブラリ15)サイエンス社

日記でも書こうかな

お名前.comからchao.tokyoがそろそろ失効するというメールが来た。思えばせっかく苦労してwordpressを導入したのに全然使ってないので何か書こうかと思って書いている。

最近、いやそんなに最近でもないけど、 クソ酷いウェブサイトを読んで感銘を受けた。特に

俺様が俺の考える最強のウェブページを教えてやる(中略)もっともお前が5MBサイズのシャレオツなコーヒー写真ではなくて伝えたいことがあればの話だがな

という部分。頑張ってwordpressを導入して、凝ったテーマと自慢気な自己紹介ページを作ったは良いが、それ以外の内容は貧弱も貧弱。ちなみにこのウェブサイトを作った目的は就活における自己アピールの一環であり、実際にそれは1社に対しては効果的にはたらいた(落ちた)。

ブログは初めてではない。中学生の頃にくっだらないブログを書いていて、高校生になって部活の友人に見つかったので急いで消した。僕も人並みにはネットに書いてはいけないことを身をもって学んできたというわけだ。その割にはこのウェブサイトの自己紹介は無防備だが、これは僕なりの時代への適応(迎合)である。「ネットは匿名、特定されたら怖いことになる」というのは過去の話。そりゃあ悪いことをして目立ったらえらいことになるだろうが、普通の大学院生なんて世界にはいくらでもいるので、普通にしている限りは僕が多少の個人情報を晒したところで何も起きないだろう。通行人Aでしかない。

さて、ブログを書くうえで最大の困難は書くことである。条件づけ(「付け」と書くと警察が来る)の枠組みで考えれば、なにか書きたいと思ったとき、いやそもそも「書きたいと思う」などという行動が条件づけの枠組みで捉えきれるのかは怪しんだけど、とにかくそういうときには実行して報酬を得るのが早い行動が選択される。何が言いたいかというと、ツイッターでええやんって話。書きたいことを思いついたときにそれをサッと投稿できて、しかもワンクリックでふぁぼできて、それが即座に伝わるというスピード感は圧倒的。ツイッターってのはそういう強さがあって、それゆえにいろんな場所からコミュニケーションの機能だけを引っぺがして奪い去った。

自社サービスが「倉庫にされている」

ツイッターという単一の営利企業がコミュニケーションの基盤になっている危うさは昨今の誤凍結騒ぎやオルタナティブであるマストドンの出現によって多少は意識され始めたようだが、そういう話を始めるときりがないのでやめよう。

そういう社会的な側面以外にもツイッターを使いたくない理由はある。ツイッターに浸かっていると発言の様式はツイッターに最適化されたものになる。たとえば「140字以内で、わかりやすく」といった具合に。「わかりやすさ」というのは世の中ではとても重視されているようだが、わかりにくいものをわかりやすく説明することは不可能だ。ツイッターというサービスの形がツイッターにおける僕らの行動を規定する。それだけならいいのだが、ツイッターはいつでもどこでも触れてしまうのでうっかりしてると生き方までツイッター式になりかねない。僕はこうしてブログを書くことによって、141字以上の思考能力を守ろうと思う。

こうして文章を書いていると書きながら次に書きたいことがどんどん湧いてくるのだが、僕の残念な脳みそではそのアイデアを保持することができない。よってタイピングが終わったタイミングで「さっき何を書こうと思ったんだっけ…あああれか。でも今書いた文章とあれはどういうつながりんだっけ…」などと考えることになる。これは結構ストレスフルな体験なので、そろそろ終わる。

追記

とりあえず書くのをやめてプレビュー機能で自分の文章をざっと読み返してみたが、つまらない。こんなものをバカ正直に全部読んでくれる人間はいないだろう。脈絡もないし、そもそも僕の思考の垂れ流しを面白いと感じる人間はよっぽどの物好きだろう。もしちゃんと読んでくれる人がいたら一緒にお酒を飲みましょう。僕はスーパードライが好きです。

ScalaでOpenCVを使うときの予約語トラップ

ハマったので記録。

問題

OpenCVにはScalarというクラスがある。このクラスはvalという名のフィールドを持つがゲッターはない。値を得るためには直接アクセスする必要がある。valの型はArray[Double]であり、その先頭の値を得るために以下のようなコードを書いた。

するとエラーが出た。

解決

これはvalがScalaの予約語だからである(もちろんJavaでは違う)。

When one needs to access Java identifiers that are reserved words in Scala, use backquote-enclosed strings. For instance, the statement Thread.yield() is illegal, since yield is a reserved word in Scala. However, here's a work-around: Thread.`yield`()

(筆者訳)
Scalaでは予約語となっているようなJavaの識別子にアクセスする必要があるときは、バッククォートで囲まれた文字列を使う。たとえばThread.yield()という文はScalaではyieldが予約語なので許されない。回避策はこうだ: Thread.`yield`()

ScalaはJavaのライブラリを流用できるのでこういう事故はよくあるのだろう。

トラップ

単に予約語を識別子として用いた場合シンタックスハイライトで色がつくので気づくはずだが、今回は先頭の値にアクセスするために(0)をつけており、シンタックスハイライトが効かず発覚が遅れた。

🙂

 

Cooler Master Elite361というPCケースについて

http://apac.coolermaster.com/jp/case/mini-tower-elite-series/elite-361/
これ

ATXマザー対応でありながらコンパクトであり横置きも可能。設置スペースに制約がある場合は唯一無二のケースとなりうる。私も部屋が狭いので重宝している。一方で小さくて薄いのでパーツの制約がきつい。

幅が狭いのでCPUクーラーの高さは122mmまでと制限されているが、同様の理由でグラボを挿すと場合によっては側面ファンが設置できない。グラボの追加電源のケーブルも折り曲げることになる。具体的にはZOTAC GTX1050 LPなら側面ファンは設置できたが、ZOTAC GTX1060 AMP! Editionではダメだった。Elite361の公式ページにはグラボの長さの上限は記されているが、幅(高さ?とにかくマザーボードに対して垂直方向の寸法)の上限は記されていない。

ZOTAC GTX1050 LPの幅は70mmだが、ZOTAC GTX1060 AMP! Editionの幅は128mmである。この差で側面ファンが設置できなくなる。

Elite361に標準搭載されているファンは上部排気ファンのみである。最も近い後部のファン用の穴からの吸気が大部分を占めるだろう。となるとCPUには冷たい空気を供給できる一方で、グラボの周りには空気の流れが生じない。前述の通り側面ファン穴はグラボの真上にあるので、ここから自然吸気が行えるように、排気ファンを増設するのが妥当だろうか。あるいはグラボに冷たい空気を回すのは諦めて外排気型のグラボを買うべきだろうか。まあ問題が起きたら考える。

自作初心者は小さいケースを買うべきではない。パーツの性能上の相性以上に物理的な制約は見落としがちだからだ。

ホームページを復活させた

このホームページはしばしば消える。その理由はMySQLがしばしば原因不明のエラー(socketがない)を吐き、僕の技術では結局DBをリセットするしかなくなるからだ。

いい加減キレたので今回はdocker-composeでwordpressを立てた。

https://github.com/chao7150/myhomepage

https化も難題だった。立てたworepressのコンテナにexec -it <container id> bashで入り、certbotのインストールからapacheの設定ファイル更新まで地道にやった。

パソコン作った

  • CPU : i5-8400
  • グラフィックボード : GTX1050GTX1060(6GB)
  • メモリ : 16GB
  • SSD : 500GB
  • HDD : 1TB
  • ディスプレイ : ASUS VX24AH (24インチWQHD)
  • OS : ubuntu16.04
スペックよりもディスプレイの方が大事だと思って良いやつを買った。ドット抜けは許せないのでツクモで保証をつけた。1回交換してもらったら抜けがない個体を引けた。24インチWQHDの作業領域の広さもさることながら、この商品は発色が良い。暗い色がかなりよく区別できる。
キーボードも良いやつを買ったがまだ届いてない。液タブとのスペース問題は保留。
windowsからubuntuに変えた。ブラウザで何でも出来る時代なので特に支障なし。
CPUはi7にしても良かったのだが、昨今の脆弱性騒動やパッチによる性能低下の話を聞いて、ハイエンドにこだわるのがバカバカしくなったのでこうなった。
ゲームはDota2とかする。最高画質FHDで120Hz余裕。グラボ以上にCPUの性能が大事らしい。実際はディスプレイが60Hzなのでゲーム側で最高FPSを制限して使っている。人間の目の性能は高くないので高FPSディスプレイには価値を感じない。
opentoonzでアニメを描いたりもする。以前のPCよりも描画のカクつきが減った。詳しくないが多分グラボがopenGLをいい感じに処理してくれてるんだろう。使っている液タブ(UGEE HK1560)が安物なので若干の遅延はある。慣れればどうということはない。
液タブがubuntuで動くかどうかは心配していたが、全く問題なかった。つなぐだけで筆圧もちゃんと取れていた。
https://digimend.github.io/support/howto/drivers/evdev/
これに従ってマッピングの設定をしただけで使えた。
最近はvimの練習をしている。タイピング中に方向キーに手を伸ばすのが嫌だからだ。
 2018/2/8追記
YOLOで物体検出したくなってcuDNNで動かそうとしたらグラボのメモリが全然足りなくて詰んだので、ツクモの交換保証を発動して1060の6GBモデルを召喚した。予算オーバー。