Hyperappでhtml要素の真偽属性を操作する

※この記事は『金麦 RICH MALT』を飲みながら書かれた。

hyperappのviewはh関数で作る。これは公式サイトのサンプルだ。

const view = (state, actions) =>
  h("div", {}, [
    h("h1", {}, state.count),
    h("button", { onclick: () => actions.down(1) }, "-"),
    h("button", { onclick: () => actions.up(1) }, "+")
  ])

h関数は3つの引数をとる。1つ目はタグ名、2つ目は属性を列挙したハッシュ、3つ目は子要素だ。ここで属性はハッシュなので、キーとバリューのペアが必要だ。しかし全ての属性がキーとバリューのセットで用いられるわけではない。たとえばreadonlyは値をセットする必要がなく、存在することによって機能する。

ここでHTML5の真偽属性の仕様を確認する。

checkedおよびdisabledとなるチェックボックスの例を示す。checkedおよびdisabled属性は真偽属性である。

<label><input type=checkbox checked name=cheese disabled> Cheese</label>

これは次に書かれるものと等価であるべきである:

<label><input type=checkbox checked=checked name=cheese disabled=disabled> Cheese</label>

スタイルを混在させることもできる。以下は依然として等価である:

<label><input type='checkbox' checked name=cheese disabled=""> Cheese</label>

どういうことかというと、以下の3つはどれでもいい(参考)。

  • disabled
  • disabled=disabled
  • disabled=””

つまり真偽属性を変化させたいときは以下のように書きわけることができる。

h("input", {readonly=""}, "")
h("input", {not-readonly=""}, "")

これをhyperappの枠組みで考えるとこうなる。

const state = {
  readonly: "readonly"
}

const actions = {
  writable: () => state => ({ readonly: "not-readonly" })
}

const view = state => h("input", { [state.readonly]: "" }, "")

viewのh関数の第2引数のハッシュで、ブラケット記法を用いてキーの方を変更する。バリューはなんでもいい。

ひと目でわかること

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

自転車に乗っているときは風景がかなりのスピードで流れていくが、一瞬目に映っただけでも何かわかるものがある。今日はそんな体験が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だ。意外と近い。視角とディスプレイ上の距離(ピクセル)の対応を知るためのツールは以前作った。

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

友達

※この記事は『チューハイ気分 グレープフルーツ』を飲んで書かれた。

今の僕は友達が少ない。1・2年生の頃は2つのサークルを掛け持ちしていて人間関係には恵まれていたが、3年生になるとキャンパスが変わる関係でどちらのサークルからも疎遠になってしまった。大学院生になると同級生は就職したり、他のキャンパスに行ったりしてさらに遠ざかってしまった。それと入れ替わりに研究室で過ごす時間は増大したが、同室の研究室のメンバーは僕含め去年2人、今年3.4人(1人は週2日なので)だ。

なぜこんなことを言い出したかというと、実験の参加者集めの過程で昔の友達に多く声をかけているからだ。「昔の友達」という言い方は微妙だが、かつては週に複数回会っていたのに現在では特に会う用事がなく、数カ月に1度偶然会うだけになってしまった人間を「昔の友達」と呼ぶのは間違っていないだろう。

学年が上がるに伴って状況が変化したのはそうだが、僕が友達と友達であり続けるための努力を怠ったのも現状の一因だろう。もう少し努力しておくべきだったと後悔している。

孤独は危険だ。イギリスには孤独担当大臣がいるとかいう冗談かマジかわからないニュースを聞いたことがあるが、下手をすると全く音声言語を使わずに1日が終わったりしてそれはやっぱりヤバいと思う。

一人暮らしもよくない。異性でも同性でもいいので、とりあえず一緒に暮らして精神を支え合える人が欲しい。人類史的にはそういう役割は異性がメジャーらしいが僕はどっちでもいい。

Ubuntu18.04はlibinput

※この記事は『本搾り オレンジ』を飲みながら書かれた。

昨日の記事の続きだ。新しいデバイス名を指定することで変換行列を指定することには成功した。しかし奇妙な現象が発生した。Kritaで絵を描くとき、細い線が引けないのだ。よく調べてみると、筆圧が5%を超えるまでクリック判定が発生していなかった。これをつぶさに調べる過程でデバイス名が変わっていた理由も判明した。

なぜUbuntu18.04にアップグレードするとデバイス名が変化していたのか。なぜ筆圧とクリックの挙動が変わってしまったのか。それはlibinputのせいだ。libinputはデバイス入力ドライバで、xinputの奥で動いているものらしい。16.04では液晶タブレットはevdevドライバで動いていた。18.04ではlibinputドライバが導入され、液晶タブレットの管理もlibinputに引き継がれたようだ。

考えるのが面倒だったのでlibinputを消したら解決した。

sudo apt purge xserver-xorg-input-libinput

libinputを消したらマウスの加速プロファイルが変わってしまって違和感があった。GNOME Tweaksから設定をFlatに戻したら直った。

今日のUI心理学

やろうと思ったんですが、ゲシュタルトの法則を一つずつ紹介していくだけだとクソつまんないのでもうちょっと面白いところまで読み進むのを待っててください。

アルゴリズム

※この記事は『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)サイエンス社

学会3日目

※この記事は『アサヒ スーパードライ』を飲んで書かれた。

今日はポスター発表日だった。多くの人が来てくれてアドバイスを受けてありがたかったし、それ以上に「面白い」とストレートに褒めてくれる人が多くて、嬉しかった。

マストドンを立てた記事を書いた。

学会も終わったことだし深夜に不健康なラーメンを食いに行こうかと思ったが、アニメの時間だったので諦めてお菓子を買って帰った。しかしお菓子を食べながらアニメは1時間後だと気づいて悲しかった。開放感と空腹感の中で深夜にラーメンを食うという条件を揃えるのは難しい。