自分と他人の認知特性について

こんにちは、デザイナーのはなです。

最近小さい鳥を飼い始めました。かわいいです。

認知特性テストをやった

https://overpass.dokkoisho.com/cognitive/

こちらの本田35式認知テストというものが少し前に流行っていたので、やってみました。

写真(カメラアイ)タイプ 写真のように二次元で思考するタイプ

三次元映像タイプ 空間や時間軸を使って三次元で考えるタイプ

言語映像タイプ 文字や文章を映像化してから思考するタイプ

言語抽象タイプ 文字や文章を図式化してから思考するタイプ

聴覚言語タイプ 文字や文章を耳から入れる音として情報処理するタイプ

聴覚&音タイプ 音色や音階といった音楽的イメージを脳に入力するタイプ


カメラアイと聴覚&音の間が断崖絶壁みたいになっている…

聴覚に関する項目の点数が著しく低い、つまり音声での情報効率がもうむちゃくちゃ悪いということになります。

そう考えると、電話しながらTwitterを見ると、友達との会話の内容がわからなくなることもこれが原因だと言えます。

私の場合、情報入力(視覚)と情報入力(聴覚)を戦わせると、視覚からの情報が必ず勝ってしまうということです。

自分が聴覚情報の処理が苦手であるということは昔から正直若干自覚があったため、授業などで板書少なめで喋りまくる先生の授業では聞くのを途中で諦めて、要点の単語のみメモし、あとから教科書や資料集やネットなどで調べて自分の目で見たものを情報として補完していたこともありました。

また、私の学生時代のノートは、落書きもイラスト図解もめちゃくちゃ多いため、絵だらけでした。

それはあんまり今も変わってないですね。(ミーティング中のメモが絵だらけな人)

他人の認知特性をふわっと推し量る

他の人になにかの情報を渡したり、好きなものをおすすめしたりするときに、相手の認知特性がなんとなくわかっていると何かと便利です。

例えばですが、私の友人の一人に、一緒に映画を見に行ったあと「あのシーンよかったよね〜」など感想を話すとき、必ず「あのセリフの表現が…」と、文章としての表現について話す人がいます。

私が映画の感想を話すときは、印象的なシーンの構図や、光の当たり方などについて思い返すことが多いので、おそらく私と認知特性が違うんだろうな、と解るわけです。

なので理解してほしい事があるときは、文章で説明してくれているサイトを探してきたり、少し長文になったとしても文章で説明するように心がけています。

何かの記憶について話したり、何かを説明してもらったりしたときに、その人の得意な情報処理方法が滲んで出ていると感じることが多いです。

もちろん全然わからないときも同じぐらい多いので、その時は相手の顔色を見つつ、わかってなさそうなら説明方法を変え、色々試して結果的に同じことを3,4回繰り返して説明するようにしています。

また、なんとなく推し量った相手の認知特性は、絶対そうだ!ではなく、あくまでもなんとなく、もしかしたらそうかもな〜ぐらいの認識でいることが一番大切です。

まとめ

優位特性についてテストしてみて思ったことは、自分のパラメータで突出している部分や陥没している部分があるように、他人にだってそういう部分があるんだろうなということです。

私の聴覚&音が1点であるように、視覚が1点の人だってもちろんいるわけです。

私が、音声だけでばーっとたくさんの情報を渡されたときにほとんど理解できなくて涙目になることがあるように、私がわかりやすいからと言って絵や図だけで情報を渡してしまうと、理解できなくて涙目になる人がかならずどこかに存在しているわけです。

自分がわかりやすいからといって、他の人もわかりやすいとは限らないということは、デザイナーという職業だからこそ特に気をつけなければいけないことだな、と痛感しました。

また、聴覚情報しか用意されていない場合でも、少しでも多く情報を理解できるように、例えば目を閉じて視覚情報をシャットダウンしたり、グラフィックレコードのようなことをしてみたり、ゆっくり話してもらうようにお願いしてみたり…など、工夫する必要があるなと思いました。

https://blog.splout.co.jp/33/

優位特性についてはこちらの記事でも触れられています。


SolrCloudのリーダー再選出の動作を確認する

はじめに

前回の記事ではシャードを構成する複数のレプリカの中からリーダーが選出される仕組みを解説しました。この記事では、実際に動いているSolrCloudを使って、特定のノードがダウンしたときにリーダーが切り替わる動作を確認してみます。

SolrCloudの構成

  • サーバ3台、サーバ毎に Solr 1プロセス
  • コレクション名 test のコレクションを作成
  • test コレクションは shard1 と shard2 の2つのシャードを含む
  • 各シャードはそれぞれ3つのレプリカ(それぞれ別のSolrノードで動く)を含む
コア名ノードシリアル番号備考
core_node3172.19.0.7:898512リーダー
core_node5172.19.0.6:898314
core_node7172.19.0.5:898413
shard1
コア名ノードシリアル番号備考
core_node9172.19.0.7:898512リーダー
core_node11172.19.0.6:898314
core_node12172.19.0.5:898413
shard2

リーダーがダウンしたとき

ノード 172.19.0.7:8985 (core_node3, core_node9)を落としてみます。

それまでのリーダー(シリアル番号12)の次に若い番号(13)を持つcore_node7およびcore_node12が新しいリーダーに選ばれています。

コア名ノードシリアル番号備考
core_node3172.19.0.7:898512ダウン
core_node5172.19.0.6:898314
core_node7172.19.0.5:898413リーダー
shard1
コア名ノードシリアル番号備考
core_node9172.19.0.7:898512ダウン
core_node11172.19.0.6:898314
core_node12172.19.0.5:898413リーダー
shard2

ダウンしたノードが復帰したとき

ダウンさせていた 172.19.0.7:8985 (core_node3, core_node9)を復帰させます。

リーダーに変更は無く、core_node3とcore_node9は新しい番号15をそれぞれ割り当てられます。

コア名ノードシリアル番号備考
core_node3172.19.0.7:898515復帰
core_node5172.19.0.6:898314
core_node7172.19.0.5:898413リーダー
shard1
コア名ノードシリアル番号備考
core_node9172.19.0.7:898515復帰
core_node11172.19.0.6:898314
core_node12172.19.0.5:898413リーダー
shard2

リーダーを意図的に変更する

まずcore_node3をpreferredLeaderに指定します。

curl 'http://172.19.0.6:8983/solr/admin/collections?action=ADDREPLICAPROP&shard=shard1&collection=test&replica=core_node3&property=preferredLeader&property.value=true'

REBALANCELEADERSを実行。

curl 'http://172.19.0.6:8983/solr/admin/collections?action=REBALANCELEADERS&collection=test'
{
  "responseHeader":{
    "status":0,
    "QTime":3053},
  "Summary":{
    "Success":"All active replicas with the preferredLeader property set are leaders"},
  "successes":{
    "shard1":{
      "status":"success",
      "msg":"Successfully changed leader of slice shard1 to core_node3"}}}

shard1のリーダーがcore_node3に変更されました。

FORCELEADER

FORCELEADERは障害等何らかの理由でリーダー不在の状態ができてしまった場合に強制的にリーダーを割り当てるためのコマンドです。リーダーが居ない状態を意図的に作るのは難しいので、正常な状態のシャードに対して FORCELEADER を実行するとどうなるか試してみました。

curl 'http://172.19.0.6:8983/solr/admin/collections?action=FORCELEADER&collection=test&shard=shard2'
{
  "responseHeader":{
    "status":500,
    "QTime":35},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"The shard already has an active leader. Force leader is not applicable. State: shard2:{
(略)
    "code":500}}

指定されたシャードにはリーダーが居るのでFORCELEADERの実行はできませんと怒られてしまいました。

おわりに

SolrCloudのクラスタはZooKeeperと連携していて、リーダーがダウンしたら自動的に新しいリーダーが選ばれてなるべくダウンタイムが小さくなるように工夫されている、という漠然とした理解から一歩進むために、具体的なリーダー選出のロジックを調べました。ZooKeeperの分散アプリケーションのコーディネート機能を使って案外シンプルなロジックで実装されていることが分かりました。この理解を持った上でリーダー調整用のAPIを上手に使えば、稀に発生するクラスタ異常にもうまく対処することができそうです。


SolrCloudのリーダー選出の仕組み

はじめに

SolrCloudではコレクションを複数のシャードに分け、各シャードを複数のレプリカによる冗長構成にできます。レプリカの中から1台リーダーが選出されてインデックス更新更新の責任を持ちます。
旧来のマスタースレーブの構成では、マスターがダウンしたときには復旧するまでは更新処理が停止してしまいますが、SolrCloudではリーダーがダウンした場合には自動的に別のレプリカがリーダーに選出されてなるべく更新処理が停止しないように工夫されています。
この記事では、リーダー選出の仕組みを解説します。

リーダー選出の仕組み

リファレンスでは以下のように説明されています。

SolrCloud にはマスターもスレーブもありません。その代わりに各シャードは最低1台の物理的レプリカから構成され、その中の1台がリーダーとなります。
リーダーは自動的に選出されます。最初は先着順で、以後は
http://zookeeper.apache.org/doc/r3.5.5/recipes.html#sc_leaderElection
に記述されている ZooKeeper を使った手順に基づきます。

リーダー選出の手続きは org.apache.solr.cloud.LeaderElector クラスで実装されています。このクラスのコメントでもリーダー選出の仕組みについて触れられています。

これらのドキュメントとコードを参考に、リーダー選出の仕組みをまとめました

  • 冗長構成においては各レプリカが同じ状態を持つことが重要だが、リーダーを選ぶためには何らかの「違い」を作り出す必要がある
  • 違いを作り出すために ZooKeeper の Ephemeral & Sequential ノードを使う
    • ZooKeeper のクライアント(Solrのノード)は ZooKeeper 上の木構造にノードを作れる
    • ZooKeeper の Ephemeral ノードは、そのノードを作ったクライアントがダウンしたときに自動的にそのノードが無くなるので、クライアントのダウンを検知できる
    • ノードに Sequential プロパティを付与すると、兄弟ノード間で作られた順に一意のシーケンシャルな番号が振られる
    • 一番若い番号を持つノードのクライアントをリーダーとする
  • リーダーがダウンしたとき
    • ZooKeeper のクライアントは ZooKeeper 上のノードを監視することができる
    • 各レプリカは自分より1個若い番号のノードを監視しておく
    • リーダーがダウンしたらそのノードを監視していたレプリカが新しいリーダーになる
  • 全体のコーディネートは SolrCloud の Overseer が担当する
    • Overseer は SolrCloud のクラスタを構成する各 Solr ノードから選ばれるリーダー
    • Overseer 選出の手続きはシャードを構成するレプリカからリーダーを選出する手続きとほぼ同じ

Raspberry Pi 4であそんでみた

新しい生活様式もそろそろ慣れてきました。
マエダです。

 

Raspberry Pi 2を会社のみんなで共同購入して5年の月日が流れました。
気づいたらラズパイ3が出て、ラズパイ4が出て、ラズパイ4も昨年末から日本で技適も取得し販売されていたので久々Raspberry Piを購入しました。

Raspberry Pi 4
https://www.raspberrypi.org/products/raspberry-pi-4-model-b/

 

ラズパイ2のときはWifiもBluetoothもUSBモジュールを別購入して利用してましたが、今どきのラズパイはデフォで装備されているんですね。
ありがたい。

 

が、最初につまづいたのがmicro HDMI端子。
そんなの家にない。。。
すぐにAmazonで探しましたがたまたま即日で配送できそうなのがなく100均でそれっぽいのがないかググりました。

探してみるとすぐにダイソーさんから出ているmicro HDMIアダプタを発見!
チャリを立ち漕ぎして僕はダイソーさんに向かいました。

ダイソーさんにはmicro HDMIアダプタだけでなくmini HDMIアダプタもあり使う予定ないけどビデオカメラをテレビに接続とかで使うかもしれないと衝動買い。

早速自宅に帰りmicro HDMIで接続してみたところ、ラズパイ4の電源アダプタ端子とmicro HDMIアダプタがギリギリの状態で共存できました。

それではセットアップ。

Raspberry Pi 4 のセットアップ

① micro SDをPCに認識させ、RaspbianのOSイメージをダウンロードしておく
Raspbian
https://www.raspberrypi.org/downloads/raspbian/
※ A2DP認識のためRaspbian Buster with desktop をダウンロードしました。
以下の記事の通りでした。ありがとうございます。^^
https://qiita.com/dwarfJP/items/a4a90d5c0aa2833dac5b

② RaspbianのOSイメージをmicro SDに準備
※ドライブやディレクトリパスは環境にあわせて読み替えてください。

diskutil list
diskutil unMountDisk /dev/disk2
diskutil eraseDisk MS-DOS BOOT /dev/disk2
diskutil unMountDisk /dev/disk2
sudo dd if=/Users/hoge/Desktop/2020-02-13-raspbian-buster.img of=/dev/rdisk2 bs=1m

③ ssh接続許可とwifiの設定
wifiの設定はwpa_passphraseコマンドを後ほど利用してもよいです。
※ micro SDドライブ名は環境にあわせて読み替えてください。
※この時点でmicro HDMIアダプタいらなかったことに気づきました。。

touch /Volumes/boot/ssh
vi /Volumes/boot/wpa_supplicant.conf

sudo apt-get update
sudo apt-get upgrade
しとく。

以上。

ターミナルから接続してみる

micro HDMIでテレビにつなげてIPアドレスを確認。
ルーターの管理コンソールからラズパイのIPを調べるでもOK。

ssh pi@pi4 (パスワードはデフォでraspberry)

# 次回以降パスなしで接続できるようにssh公開鍵を設定しておく
mkdir .ssh
vi .ssh/authorized_keys

画面共有VNCで接続してみる

まずはTight VNC Serverをインストール

sudo apt-get install tightvncserver
sudo tightvncserver

Macだと画面共有アプリやFinderの[移動]-[サーバーへ接続]から以下のように指定。

vnc://pi4:5901

Bluetooth設定

全面的にこちらの記事を参照させていただきました。ありがとうございます。
https://qiita.com/homelan/items/e82b919638d3c458d2ec

sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2
reboot

# Boseのスピーカーに接続してみました。
sudo bluetoothctl
[bluetooth]# scan on
[bluetooth]# scan off
[bluetooth]# trust E8:07:BF:xx:xx:xx
[bluetooth]# pair E8:07:BF:xx:xx:xx
[bluetooth]# connect E8:07:BF:xx:xx:xx
[MR230]# paired-devices
[MR230]# quit

vi ~/.asoundrc
amixer -D bluealsa sset 'Bose Mini SoundLink - A2DP' 70%

# MPlayerインストール
sudo apt install mplayer
# 動作テスト
mplayer -ao alsa:device=bt-receiver /usr/share/sounds/alsa/Noise.wav
# サイマルラジオを聴いてみる
mplayer -ao alsa:device=bt-receiver -playlist http://www.simulradio.info/asx/radiomixkyoto.asx

Simul Radio
http://www.simulradio.info/

まとめ

ラズパイは進化して更にとても簡単に利用可能でいろいろと遊べそうです。
そしてダイソーさんをはじめ100円ショップは偉大であることを再認識しました。

弊社メンバーによるラズパイの活用記事もいろいろありますのでチェックしてみてください。
https://blog.splout.co.jp/?s=raspberry


iPadをデュアルディスプレイとして使ってみよう

こんにちわ。
リエです。

今年の梅雨は長いですね☔
とはいえ、コロナの影響でお家時間が圧倒的に増えたので季節感を中々感じにくくなっております。

今回はリモートワークでのちょっとした変化をお話したいと思います。

会社ではありがたい事にデュアルディスプレイでお仕事をさせていただいているのですが、お家にはデュアルディスプレイ用のモニターはありません。

もちろんなくてもお仕事はできますが、作業効率を考えるともう1枚モニターがほしいなぁと思ってしまいます。(贅沢病!)

でもモニターを買うのはなぁ(心の声:インテリアに合わんし、置き場所に困るし)と葛藤していたのですが、前にメンバーがSlackでiPadをデュアルディスプレイとして使う方法をシェアしていたのを思い出しました。
SidecarでiPadをMacの2台目のディスプレイとして使う

iPad持っているしこれいいやん!ということで設定してみました。
ちなみに先にネタバレするとめっちゃかんたんです。

用意するもの

・Mac
・iPad
・USB充電ケーブル
・アダプタ(PCとiPadを繋ぐのに必要です)
〈注意〉
MacとiPad がSidecar のシステム条件を満たしていることが絶対条件です。

これがあればiPadをデュアルディスプレイにすることができます。

設定してみよう

設定は本当にかんたんです。
1.MacとiPadをアダプタを使って繋ぐ
2.Macの[システム環境設定]を開き、その中の[ディスプレイ]を選択
3.[ディスプレイ]のAirPlayディスプレイからiPadを選択→保存
※MacとiPadを繋ぐとAirPlayディスプレイからiPadを選択できるようになります
4.これでiPadをデュアルディスプレイとして使えるようになります。

使ってみての感想

快適に作業できたので、めっちゃ便利でした。
つい癖でiPadを指で触ってしまうけど😂
デュアルディスプレイになっているので、当たり前ですがタッチ操作はできません。
シェアしてくれたメンバーに感謝です👏

デメリットをあげるとすると、画面が固まることでしょうか。
ネット環境や作業内容にもよるかもですが、私は割と固まっちゃいました;
そんな時は一旦接続を解除して再接続すれば直ります。

という感じでお家での作業が効率化できました。
〈最後に余談〉
コロナの影響で完全に引きこもりになったため断捨離しまくっています。
物にそんなに執着しないので溜めグセはありませんでしたが、生活していると物は増えちゃいますね。いい機会なので、この際シンプルを極めたいと思います。