JavaScript+Hyperappで心理学実験プログラムを作った

これです(github)。

僕の学科では学生が実験に参加しつつその実験についてレポートを書くという授業が多く行われている。そこで行う実験は古典的なものが多いのだが、大昔に書かれた実験プログラムがメンテナンスされずに使われ続けているということがある。

今回書いた記憶実験のプログラムもそうで、誰がいつどうやって作ったかわからないexeファイルが受け継がれ使われ続けてきた。しかし内部の処理がわからないので細かい仕様がわからず、いろいろ試してみて推測することしかできない状態だった。さらにいつ動かなくなるかもわからない。

そこでこのプログラムを移植(ソースコードがないので移植と言うかは微妙だが)しようという話になった。当初はPythonが候補に上がっていたが、多数の学生に授業中に同時に行わせるにあたり、Pythonをexeに固めたものは容量が大きくなりすぎダウンロードが長引く懸念があった(経験的には数十MB)。そこでJavaScriptでの制作を提案した。サンプルを作って披露したところゴーサインが出たので制作した。

動作は単純で

  1. x桁のランダム数列を3秒間表示
  2. 数列を消し5秒間待つ
  3. 参加者が数列を思い出して回答する
  4. 正誤を3秒間表示
  5. 桁数を変更し、1に戻る

というものだ。5の桁数変更のアルゴリズムには上下法や恒常法などがある。

上下法は正解すれば次は1段階難しく、不正解なら次は1段階簡単にするというアルゴリズムだ。これによって参加者の正解できる限界の桁数に収束する。メリットは試行数が少なく済むこと。

恒常法は一定の範囲の桁数をランダムな順番で課し、桁数を横軸に、正解率を縦軸にプロットすることで正解率を桁数を結びつける関数を得る。そして正解率50%(任意の値)に相当する桁数をその人の限界とする。メリットは関数そのものが得られるため多様な分析が可能であること。

心理学の実験は基本的にはwebではやらない。それは参加者の環境が統一できないからだ。MATLAB+Psychtoolboxが主流で、Python+Psychopy(pygame)もある。しかしポータビリティは低い。GUIを使うプログラムはDockerで動かすのは不便で、できてもパフォーマンスに不安がある。

そこまで環境にこだわらない実験や、今回のように同じ部屋で多くのPCで実験を行うときにはポータビリティの高いwebプログラミングによる実験は便利だ。そもそもGUIを扱うノウハウやライブラリという点ではJavaScript、というよりブラウザという環境が優れている。

カフェインとMastodon2.5.1リレー機能

カフェイン

授業とミーティングを終えてコーヒーを飲んだら、飲んでいる最中は何もなかったのに立ち上がってから酷いめまいに襲われた。低血圧なので立ちくらみはよくあるが、立ちくらみのときは視界が白くなる。今回は純粋に平衡感覚だけが狂うというはじめての経験だった。友人に肩を借りてなんとか研究室まで戻り、やらなきゃならない仕事を片付けてからすぐに帰宅した。おそらく季節による体調変動とカフェインの刺激が重なったのだろう。

カフェインと言えば、緑茶にも多く含まれる。私の出身地は茶の産地であり、小学校の総合学習では茶について学ぶ。学んだことを発表するまで含めて総合学習なのだが、茶の効能を歌にするグループがあったような気がする。「カッテキン\カフェイン/カッテキン\カフェイン/」というリズムを今でも覚えている。

僕は24歳だ。(なぜか)まだ学生だし世間的には若者だろうが、一方で身体機能は既にピークを超えたものもある。たとえば大食いは20歳ごろがピークだった。という話は以前もしたような気がする。

Mastodonを立て直した

自分の変更点を残しつつ最新版に追従しようとしたらgitの闇に飲まれてわけがわからなくなったのでリセットボタンポチーした。何回ぶっ壊してもいいVPSとかいうおもちゃ最高。そうまでしてv2.5.1にバージョンアップした理由はリレー機能だ。

マストドン、「連合リレー」対応の2.5.0公開

Activity Pubを受け取って登録済みのインスタンスにそのまま流すリレーサーバーが開発されており、Mastodon側からも対応したとのことだ。管理画面でリレーのURLを入力するだけで接続できる。これを使うと何もしなくても連合TLに同じリレーに属するインスタンスの投稿が流れてきて、賑やかになる。

自分のインスタンスを立てて痛感したのは初速の重要さだ。小規模インスタンスの場合登録しても結局他のインスタンスの知り合いや有名人をフォローしに行くことになり、Mastodonの特徴であるごった煮高速TLを楽しむことができない。リレー機能はここに一石を投じるものだと思う。

今日のUI心理学

5.6は視覚探索の話。視野のたくさんの図形から1つの目標図形を探すとする。このとき目標図形をターゲット、それ以外をディストラクタと呼ぶ。素朴に考えれば私達は図形を一つ一つ見て確認していくはずだ。ターゲットを何番目に見るかの期待値はディストラクタの数の半分なので、見つけるまでにかかる時間はディストラクタ数が増えるに従って線形に増加するはずだ。以下のような画像から「右上を向いた赤」を探すときは実際にそうなり、右のほうが長くかかる。

しかしこれには例外がある。以下の画像から「右上を向いたもの」を探すときや

以下の画像から「緑」を探すとき。

このようなときはディストラクタの数に関係なく一瞬で見つかる。この現象を「ポップアウト」と呼ぶ。脳内の情報処理で「色」や「方位」それぞれのマップを作って探すときは全体を一瞬で処理できるが、複数種類の特徴を統合して判断する処理は一箇所ずつしかできないと考えられている。詳しく知りたい人は「特徴統合理論」でググって。

参考文献:『視覚科学』横澤一彦

ひと目でわかること

※この記事は『極搾り 柑橘ミックス』を飲んで書かれた。

自転車に乗っているときは風景がかなりのスピードで流れていくが、一瞬目に映っただけでも何かわかるものがある。今日はそんな体験が2度続いた。

1度目はネズミの死体だ。自転車を止めてゆっくり眺め回したりはしなかったが、25cmくらいはあっただろうか。道路に無造作に転がるそれなりの大きさの袋状のもので、手足がピンク色に目立っていた。

動物の死体は病原体の巣窟であり、危険だ。危険な情報に素早く反応するのは進化的に古い脳の役割である。視覚であれば後頭葉から嫌悪を司る扁桃体を経由して交感神経が活動する。これによって心拍数の増加、呼吸の増加、発汗などが起こり、体が逃走の準備を整える。

2度目は友人だ。自転車で鼻歌を歌いながら帰宅していたら気がついた。昔はよく会っていたが今はそうでもなく(働いている)、この辺りにはたまにしかこない人なので確率の低い偶然だった。

ヒトの顔についてはFFA(Fusiform face area)という顔認識に特化した領域があることが知られている。ヒトの顔を上下逆にすると認識が難しくなることは倒立効果と呼ばれ、顔は特殊な処理が行われていることを示唆している。サッチャー錯視はその顕著な例だ。

人間の視覚は必ずしも汎用的ではない。危険回避や同種他個体の弁別などの具体的な目的を持って作られた機能も含まれている。ヒトの顔に異常に敏感だからこそ、何でもないところに顔を見たような気になってしまい、心霊現象だと思いこんでしまう。

全然関係ないけど食堂のとろとろ丼定食(ひきわり納豆とオクラのどんぶり)、美味くない。前回は味がなかったので今回は醤油をかけたがただ醤油の味がするだけだった。

生還

※この記事は上野『かっちゃん』で飲んできたあとに書かれた。

今日は研究室のミーティングだった。ろくでもない結果しか出ていないので壮絶な覚悟で望んだが、困っていることを説明したらたくさんのアイデアをもらったディスカッションが弾んだのでよかった。

晴れやかな気分でミーティングを終えられたので友人の招集に応じて上野の立ち飲み屋に行った。『せんべろ』なるジャンルを初めて聞いたのだが、「1000円でべろべろに酔える」ような価格帯の酒場の俗称らしい(wikipedia先生)。そもそも僕は1000円分も飲まずともべろべろに酔えるのでそれほどありがたみは感じないが、今日行った店は1000円ポッキリで生・ウーロン茶・天ぷらセットでとても良かった。昼間は天ぷら定食を売ってる店で本格的な天ぷらだった。

そういえば学科の内定者歓迎会のメールが来ていた。僕の大学は2年生の半ばで3年生以降の学科が決定するので、この時期に学科の内定者の歓迎会が企画される。この会には以前アルコールバトルで敗北して大変なことになった苦い思い出がある。

僕はアルコールが好きだ。強くもなければ詳しくもないが、よく飲む。アルコールを飲むと脳が縮むと言う。気にならないわけではないが、将来の健康を見越して常に最善の行動しかとらないとするとかなり生活が制限されるのであまり考えないようにしている。そもそも人体の耐用年数は30年くらいだろう。その先は高望みしないことだ。

今日のUI心理学

4.3 色の識別能力

目立たせたい色は彩度を上げる。色を比較させたいとき(グラフの凡例など)は眼球運動なしに両方の色が目に入るように近づける。

図1.左眼の網膜位置に対応した桿体・錐体の分布密度(感覚知覚ハンドブック p.924 図18・5・1)

「立命館大学人間科学研究所 人間科学のフロント 色覚障害について考える」より引用

人間の網膜で色を認識できる錐体細胞は視野中心部から両側に10度程度の範囲に密集している。つまりグラフを注視しながら凡例を視野に含めるためには、それらを視角10度以内に配置する必要がある。

視角10度は視距離57cmのときに10cmだ。意外と近い。視角とディスプレイ上の距離(ピクセル)の対応を知るためのツールは以前作った。

(アイコニックメモリーって色はどのくらい正確に保持できるんだろう。教えてエロい人)

Ubuntu18.04へのアップグレードに伴うデバイス名の変化

Ubuntu16.04で液晶タブレット(UGEE HK1560)をデュアルディスプレイで使うとき、ペンタブレットの入力を片方のディスプレイのみにマッピングするためにはxinputの"Coordinate Transformation Matrix"プロパティを使う。

私の場合は左のディスプレイ(液晶タブレット)が1920x1080で右のディスプレイが2560x1440だ。つまり液晶タブレットの入力はそのままだと2つのディスプレイをつなげた4480x1440の長方形にマッピングされる。これを左のモニターのみにマッピングするためには、x座標0~4480を0~1920に、y座標0~1440を0~1080に写像するような変換行列を用いる(3行3列の1はたぶん筆圧は無変換っていう意味だったと思う)。

さて、これを実行するコマンドは
xinput set-prop "UC-Logic TABLET MONITOR Pen" --type=float "Coordinate Transformation Matrix" 0.428571 0 0 0 0.75 0 0 0 1
だっ。Ubuntu16.04では。

Ubuntu18.04にしてからこのままのコマンドでは以下のようなエラーを吐くようになった。

X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  131 (XInputExtension)
  Minor opcode of failed request:  57 ()
  Serial number of failed request:  19
  Current serial number in output stream:  2

なんだこれは?ググっても全然わからない。そもそもLinuxでペンタブレットを使おうという変態の絶対数が少ない。

xinputでデバイス名を確認したらこうなっていた

⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ UC-Logic TABLET MONITOR Mouse           	id=10	[slave  pointer  (2)]
⎜   ↳ E-Signal COUGAR Minos X3                	id=11	[slave  pointer  (2)]
⎜   ↳ E-Signal COUGAR Minos X3                	id=12	[slave  pointer  (2)]
⎜   ↳ LingYao ShangHai Thumb Keyboard         	id=16	[slave  pointer  (2)]
⎜   ↳ UC-Logic TABLET MONITOR Pen Pen (0)     	id=18	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Power Button                            	id=7	[slave  keyboard (3)]
    ↳ Sleep Button                            	id=8	[slave  keyboard (3)]
    ↳ UC-Logic TABLET MONITOR Pen             	id=9	[slave  keyboard (3)]
    ↳ Mistel MD600                            	id=13	[slave  keyboard (3)]
    ↳ Mistel MD600                            	id=14	[slave  keyboard (3)]
    ↳ LingYao ShangHai Thumb Keyboard         	id=15	[slave  keyboard (3)]
    ↳ E-Signal COUGAR Minos X3                	id=17	[slave  keyboard (3)]

理屈はわからないが、なぜかこれまで使っていたデバイス名"UC-Logic TABLET MONITOR Pen"はキーボード扱いになっていた。その代わりに"UC-Logic TABLET MONITOR Pen Pen (0)"という怪しげなデバイスが出現している。先ほどのコマンドのデバイス名をこちらに入れ替えたところ、成功した。

LinuxでHK1560は普通に使える。筆圧も取れる。ワコムの同サイズ製品は18万円するのに対してHK1560は現在4万円だ(こちらはFHDであちらは4Kだが)。ガラスの厚みによる視差は液タブの宿命として当然あるが、それはワコムだろうとゼロにはできない以上程度の問題でしかない。発色が悪いと言われている(おそらく1677万色ではない)が、僕はそもそもきちんとキャリブレーションされたモニターを一つも所有していないのでこれを問うのは無意味だ。ペン先の沈み込みもよく不安がられる要素だが、ワコムの飛び出したり引っ込んだり不安定なペン先よりは弾力のあるこちらのペンの方が描きやすく、筆圧も自然につけられる。ワコムはドライバが不安定だと言われるが、こちらはLinuxで幅広く使われているxinputで作業中のトラブルは一度もない。

描画ソフトにはKritaを使っている。非常に大きな特徴として消しゴムツールが存在しない(全てのブラシツールに消しゴムモードがあり、オンオフして使う)ことが挙げられるが、慣れればどうということはない。

実はメインマシンをUbuntuに変えるときにこの辺りの用途がきちんとこなせるか不安だったのだが、マッピングを解決するだけですぐに使えたことで僕の中でのUbuntuへの信頼が高まった。

今日のUI心理学

2.2 類同

見た目が似ているものはグループとして見える。当たり前だね。小学生がやるみたいにメニューの項目で1つずつ色を変えたりしてはいけないということだ。

アルゴリズム

※この記事は『WHITE BELG』を飲みながら書かれた。

実験を実施するにあたってプログラムの最終確認をしていたら、アルゴリズムがおかしいところがあった。修正しようと思ったが、どうもスマートにいかない。難しい。

隣の研究室で実験用PCが壊れた。聞くと7年目とのことなので仕方がない。中のデータを取り出したいそうだが、たぶんHDDを引っこ抜いてSATA-USBケーブルで繋げばいけますよと伝えた。

研究室ではthinkpadのキーボード、自宅ではBaroccoピンク軸を使っているが、どちらも素晴らしく甲乙つけがたい。thinkpadのキーボードの良さはストロークの浅さと反発の良さで、底までバシバシ打ち込めて気持ちいい。Baroccoピンク軸は押した強さに比例する反発力があり、底まで押し込まなくても反応するので非常に軽いタッチで入力できる。これはこれで気持ちが良い。

下のUI心理学を書きながら気づいたんだが、GNOMEのアプリケーションメニューを表示しないという仕様クソすぎない?Kritaでまったく何もできないんだけど。どういうこと?

今日のUI心理学

2.1 近接の要因

距離の近いオブジェクトはグループとして知覚される。これから先いくつかのグループ化の要因を取り上げていく。ゲシュタルト心理学ではそれらがグループとして知覚される理由を「よいまとまり=プレグナンツを構成するから」と説明するが、説明になっていない。多くの興味深い現象を発見したにもかかわらずゲシュタルト心理学という枠組み・流派が現在では廃れているのはこのためだ。

 

実験をするぞ

※この記事は『極搾り ピーチチューハイ』を飲みながら書かれた。

予備実験、学会発表を終えたのでいよいよ本格的な実験に入る。

今日はgoogleフォーム・スプレッドシート・カレンダーをフル活用して予約システムを構築した。最初はwordpressのプラグインでやろうと思っていたが、ゴミの山の中から使えるプラグインを探す手間が面倒になったので別の方法を探したらこの方法が見つかった。google様はすごい。

実験参加者にド鬱日記を見せるのはよろしくないという判断から、過去の日記が目に入りにくいようにホームページのメニュー構成を変えた。積極的に調べて見つけた人には隠すつもりはない。

明日は実験プログラムの最終調整をして、各所に実験参加者募集のお知らせを流すまでいきたい。目標は9月7日までに40人だが、どうなるか。卒論のときは友人に片っ端から頼んだが、今は卒業している友人が多い。難しいだろう。

今日のUI心理学

1.4はつまらないので飛ばす。2章はゲシュタルトの法則について述べられている。具体的なゲシュタルトの法則に入る前に、心理学史の講義にしよう。

ヴントがライプチッヒ大学に心理学実験室を開設した1879年が「科学としての心理学」の始まりと言われる。ヴントは自分の心の動きを自分で観察する内観法を用いて心を構成要素に分解する構成主義を志向した。

1910年にウェルトハイマーは、静止画像を続けて見ると動いているように見えることを発見した。画像Aと画像Bしか見せていないのに動きという第3の知覚が発生するこの現象は、動きに直接対応する知覚要素が存在しないという点においてヴントの構成主義を否定するものだった。

この発見に端を発して、ウェルトハイマー・ケーラー・コフカらは個々の刺激が作り出す全体的なまとまり(ドイツ語にすると「ゲシュタルト」)のはたらきに関する研究を深めていく。これがゲシュタルト心理学である。

続きは明日。

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

大分無理

おおいたではない。僕は特に大分県に関わりはない。正直に言えば場所も正確には覚えていない。小学生の頃には都道府県の場所は覚えていたし、県庁所在地も主要な山河も覚えていたが、もう忘れた。

今日は大分辛かった。長く研究室にいても進捗は微々たるもの。特に進められない理由があるわけではないが、集中できない。食堂で食うものは選べないし、階段は登れないし、いつもはなんとも思わない暗い廊下が怖いし、なんでもないことでものを放り投げて暴れたくなるし、帰り道は自転車で小さい子供を轢いてしまえば救われる(何から?)のではないかと考えていた。

自分が病気なのかどうかはどうでもいい。真っ当なことを考えて真っ当に作業を進められるようになりたい。昔のことが思い出せない。僕は普通に生きていた気がするんだが。

今日のUI心理学

1.3は目標によって知覚が変わるという話。元気がないので有名なアレを貼って終わりにする。白のチームが何回パスするか数える。

人間、見ようと思ってないものはマジで全然見えてない。注意の「目標の情報処理を加速する」という機能はそれ以外の情報処理を切り捨てることと表裏一体だからだ。「change blindness」「choice blindness」でも面白い現象が見つかるのでググッて。

図書館

※この記事は『氷結 Mango』を飲みながら書かれた。

今日も大学に行きたくなかったので道中図書館に寄った。

地域の図書館で心理学コーナーを見に行くと、真っ当な心理学に関する本が数冊、そして残りは全部うさんくさい詐欺まがいの本だった。辛い。

雑誌の新刊が一通り置いてあるのは良い。アニメージュを読んだ。

この歳になって、児童文学を読み返したくなることがよくある。稚拙に感じてしまうこともあれば、新しい発見もある。森絵都の『カラフル』を読んだ。キャラクターの心情をダイレクトに書けるのは小説ならではの魅力だと思う。

今日のUI心理学

1.2 コンテクスト・錯視・視聴覚統合

結構いろんなネタが同時に語られてて難しい。コンテクストの効果と言いつつコンテクストに関係ないミューラーリヤー錯視や連合学習によって語られるべき犬の行動の習慣の話が挙げられていて、正直言ってこの章はかなりとっちらかっている。

ミューラーリヤー錯視は非常に有名だ。図形がシンプルで、効果が大きく頑健だからだ。

「長く見える左の図形は遠くに出現する状況が多いが、遠くにあるものは小さく目に映るのでそれを補償するように過大に知覚する」というのが有力な説明だが、それを否定するような実験結果もあり、よくわからない。

物理的な量と知覚する量がずれているというのはよくある話で、その関係を記述しようとする心理学の分野は心理物理学と呼ばれる。

多感覚統合も心理学ではよく研究されている。視聴覚統合の話が多い。視覚と聴覚にはそれぞれ得意分野があり、状況に応じてどちらかの情報が優先される。

腹話術効果は聴覚によってキャッチするはずの音源の位置情報が視覚によってずらされる現象だ。実際の声は腹話術師の口から出ているのに、人形の口が動くせいでそちらから声が出ているように感じてしまう。物体の位置を知る情報源としては聴覚より視覚のほうが優れているからだ。

ダブルフラッシュ錯覚は1度の視覚刺激に2度の音声刺激を合わせると、視覚刺激まで2度呈示されたように感じてしまう現象だ(NTT コミュニケーション科学基礎研究所によるデモンストレーション)。時間解像度では聴覚が視覚を上回っているので、聴覚の情報を信用してしまう。

最近ホットな話で言えば、バーチャルなアバターによって身体感覚と視覚が整合しなくなるのも多感覚統合の一種と言えるだろうか。