点字ブロックは何故黄色なのか

f:id:yuki_tkd:20151007213416j:plain 写真: フリー写真素材ぱくたそ

大学に向かう途中、駅の点字ブロックを見て疑問に感じたので、調べてみたらすぐに答えが出てきた。

http://www.h-road-s.co.jp/service/texturedpavingblock/tpb05.html

答え

一言で言うと、 点字ブロック(視覚障害者誘導用標示)が黄色なのは、「弱視者は視覚障害者誘導用標示の色を見ながら歩くことが多い」からだそうだ。 視覚障害者の約7割は弱視者らしく、点字ブロックの色を見ながら歩いていることも多いそうだ。 先ほど記載したページに図を交えて分かりやすく解説されているので、詳しい話は見ていただいたほうが僕が説明するよりも良さそう。

気づき

こういう細かいことに気づけるかどうか、理解できているかどうかって大事だと思っていて、 自分がもし点字ブロックの設計をすることになったら、どういう点に気をつけて設計するだろうといったことを調べる前に考えてみた。

僕ならこう設計するだろう。

点字ブロックを設置するからには、その点字ブロックをすべての動線に繋ぐ必要がある。 街の地面はアスファルトやレンガで出来ているので、点字ブロックをすべて同じ色にすると目立つ箇所が出てくるはずだ。 ならば色を変えてアスファルト上では黒色、レンガ上では赤色にしよう。

ただ、こうすると街の景観は良くなるが、点字ブロックの存在に気づかない晴眼者が増えるだろう。 点字ブロックの上で立ち止まったり、居座ったりされると点字ブロックの意味が無い。

点字ブロックの上に居座らないような色... その場に立ち止まらないような、危機感を煽る色。 警告とかって赤色が多い気がする。緑がOKなら赤はNGっていうイメージは誰もが持っている。 よし、点字ブロックは赤色で統一しよう!

たぶんこんな感じになる。 が、これは明らかに晴眼者の考えでしか無いし、何よりも前提条件がいつの間にか視覚障害者から全盲視覚障害者に変わっている。 もうちょっと考えたら、色覚障害の人も居るのだから赤とか緑は良くないとか、色々考えるかもしれないが、 視覚障害者の多くが色を見ながら点字ブロックを歩くだろうなんて考えは、たぶん出ない。

実際に視覚障害者に聞かないかぎり。

視覚障害者っていうと全盲っていう固定観念を無意識に考えてしまうし、色眼鏡で見てるって気づくのも難しい。 良くないと思っていても、そう考えている以上仕方ないし、どうしても自分は中立の立場で考えていると思ってしまうだろう。

点字ブロックの話だけでなく、物事を当事者の視点で考えるのって、本当に難しい。 こういうことを考える経験を積めば、違う立場からの見方も出来るようになるのだろうか。

C言語のユニットテストライブラリPicoUnitを作った

C言語でテスト

僕が通っている大学のソフトウェア演習で、C言語で(BASIC風の)独自言語のコンパイラを作る課題が出た。 1ヶ月おきくらいに進捗のチェックと機能追加があって、それを5回くらい繰り返すと完成するらしい。

今までもソフトウェア演習はあったけど、この課題は今までと違ってテストのテストデータを提出することが必須になっている。

ただ、手動でテストすることを想定しているらしく、ユニットテストを書いてテストするみたいなことではないらしい。 手動で確認だと大変だし、カバレッジ下がりそうだし、何よりも僕は機械で出来ることは全部機械に任せる主義なので、手動でテストはナンセンスに感じて仕方無い。

assert()

調べてみたらC言語にはassert()関数というものがあって、それを使うと期待する値と違う結果が渡されたときにConsoleに何かしら表示してくれる。 ただ、assert()関数はプログラム内のどこか一度でもテストが失敗すると、その場でexitされてしまう。

まとめて全部をテストした上で落ちたテストを表示してくれる機能が欲しかったので、ライブラリ?マクロ?を書いてみた。 C言語のマクロを使ってプリプロセッサーでテストコードを差し込んで表示するだけのライブラリなので、一つのヘッダファイルだけで動く。

github.com

PerlのProveみたいにしたかったので、結果の出力形式を似せている。 使い方は簡単でテストしたいところでpu_test()して、全体のテストが終了するときにpu_print()すれば結果が表示される。

VimからAtomへの乗り換えを進めてる

趣味のコーディングのときだけ、Atomを使って様子を伺っている。 1年くらい前に、Vimを使い続けるかAtomを使うか悩んだときには、起動速度の差とかパッケージの量とかで、まだまだVimだなぁって考えたんだけど、 久々にMarkdownでメモを取る機会があって、Atomを起動したら思いの外良かった。 起動速度が早くなってるし、パッケージもだいぶ充実して良さそうなのでAtomに移れないかなと思いながらしばらく使ってみている。

Vimキーバインドになれてしまっているので、まずVimキーバインドに設定した。 入れてるパッケージはこんな感じ。とにかくVimに近づけようとしている感じがするけど気にしない。

Vim-mode

  • vim-mode (キーバインドVim風にしてくれる)
  • vim-mode-visual-block (vim-modeだけではC-vに対応してないのでvim-modeが対応するまで入れてる)
  • ex-mode (:w, :qとかに対応)
  • Sublime-Style-Column-Selection (Sublime text風のマルチカーソルをサポート)

Atom

  • file-icon (ファイルのアイコンを良い感じにする)
  • minimap (Sublime text風のマップを表示)
  • project-maneger (複数プロジェクトを切り替えれるようにする)
  • regex-railroad-diagram (正規表現を可視化)
  • term2 (シェルをAtom内で実行できる)
  • Color-Picker (カラーコードを実際の色で表示してくれる)

Linter系

  • linter (linter本体)
  • linter-perl (perl)
  • linter-jshint (JavaScript)
  • linter-less (less)
  • linter-tidy (HTML)
  • linter-flake8 (Python)

だめなところ

vim-modeの問題なんだけど、insert-modeからnormal-modeへの切り替えをjjに割り当てると、insert-modeで1文字だけのjが入力できなくなってしまう。

jだけを入力することは滅多に無いし今後のアップデートで治るらしいけど、ときどき不便。

それから、Perlのインクルード補完欲しい。今のところ無さそう。自分で書けって話ですね。

起動が遅いのが気になる。普通に使うときは気にならないけど、ターミナル内で開きたかったりするときに重いなぁ...ってなる。

Perlで、ある配列から順序そのままで別の配列の重複除いた配列を作る

Perlである配列から、順番はそのままで別の配列に含まれる要素を除いたリストを作りたかったけど、すぐ出来なかったのでメモ

例えば、以下のfoo, barが与えられたとき、

foo = (1,2,3,4,5,6)

bar = (1,3,6)

次のようなbazを手に入れたい。

baz = (2,4,5)

簡単なのはfooとbarをハッシュにしてしまって統合することだけど、順番も保証したい。

答え

my @foo = (1,2,3,4,5,6);
my @bar = (1,3,6);
my %bar = map { $_ => 1} @bar;
my @baz = grep { !$bar{ $_ } } @foo;

ポイントは、最終的に重複を消したい方の配列はそのままで、もう一つの配列をハッシュにすること。こうすれば、取り出した要素は元の順になる。

一番最後の行はこれでも行けるはず(未確認)

my @baz = grep { $_ != $bar{ $_ } } @foo;

NodeでORMのSequelize使ってみた

ORMのSequelizeを使ってみた。 NodejsでWebアプリケーション作るときは、MongoDB + Express + Angular + NodejsのMEANスタックを使うのが定番らしいけど、 MongoDBもAngularも触ったこと無いので、慣れてるMySQLを使うべくSequelizeを入れた。

モデルの作成

var Sequelize = require('sequelize');
var Seq = new Sequelize('nodejs','root','');
var Article = Seq.define('Article', {
        name: Sequelize.STRING,
        text: Sequelize.TEXT('long')
});
Seq.sync();

これ

var Seq = new Sequelize('nodejs','root','');

だけで、localhostのnodejsっていうDBにrootで接続してくれる。パスワードがあるときは第三引数で指定する。

var Article = Seq.define('Article', {
        name: Sequelize.STRING,
        text: Sequelize.TEXT('long')
});

データモデルはこんな感じで定義する。Seq.sync() すると、モデルで書いたデータ構造でMySQLにテーブルを作ってくれる。

レコードの追加

Article.create({ 
        name: 'foo', 
        text: 'bar'
    });

レコード追加するときは、こんな感じ。直感的。

レコードの検索

Article.findAll().then(function(articles){
    //結果の処理
});

検索もこんな感じで全件検索したりできる。 今のとこ一覧しか使ってないので、Where句指定してないけど、ドキュメント読んだ感じ指定するのも簡単だった。

まとめ

  • Sequelizeを日本語で解説したサイトは少ないけど、公式サイトのドキュメントしっかりしてるし、海外では採用事例多そうなので安心。

  • ORM使うと抽象度が上がるけど、実際にどんなクエリが走るのかが目に見えなくなって、大きなプロジェクトだと破綻するとも言うので、 ORMを使うのが一概に良いかどうかは分からない。

  • 一応、SequelizeはSQLのクエリが毎回ログに流れるので、眼力あれば確認できる。

最近、JavaScriptとAndymoriハマってる

JavaScriptパターン

JavaScriptパターンを借りて読んでる。7割くらい読み終わったんだけど、JavaScriptの文法を勉強しつつ、アンチパターンをさけるプログラミングが出来そうで良い。 JavaScriptは自由度高いけど、その自由度の高さ故に何も考えずにコード書くと悲惨なことになるので、グッドパターンとアンチパターンを学べるのがありがたい。

プロトタイプベースのオブジェクト指向とスコープが関数スコープのみっていうのが、普通のオブジェクト指向言語と違って感覚つかむのが難しい。 ブログとかポートフォリオサイトくらいのレベルだったら、何も考えずに書いてもいいけど、もっと大きなWebサービスで同じことすると、謎の挙動示したりして地獄見そうなので、ちゃんと勉強しときたい。

JavaScriptパターン ―優れたアプリケーションのための作法

JavaScriptパターン ―優れたアプリケーションのための作法

省エネ家電すごい

なんとなく気になってエアコンの電気代調べてみたら、1時間10円くらいってことを知った。意外と安い。たぶん、つけっぱなしにするともうちょっと1時間あたりの電気代下がる。 2011年製造のダイキンの6畳用エアコンだから、最近のやつはもっと安いのかな。

引っ越す前の家に付いてた20年近く前のエアコンが、10畳のリビング用とかで、つけると電気代跳ね上がってたから、そのイメージが残ったままだった。最近の家電、省エネ凄いな。

Andymori

Youtubeの自動再生で流しっぱなしにしてたときに、良い曲だなーと思ってアーティスト確認したらAndymoriだった。凄いAndymori好きな人が居るので、名前は知ってたけど聞いたこと無くて、Andymoriなのか...!!って思いつつ、最近ずっと聞いてる。 でも、解散しちゃったんだよね(´・ω・`) www.youtube.com

www.youtube.com

www.youtube.com

Vimで全角記号の後ろにカーソル移動すると崩れる件

Vim使ってて、「…」とか「○」みたいな全角記号が書かれてるファイルを編集すると、変になる。 記号の後の文字が2回繰り返されたり、記号の後ろに半角スペースが空いたように見えて、削除すると記号ごと消えたり。

なので、いつもそういう文字列が含まれるときだけAtomを起動させてた。 (それならもういっそAtom使えよって話なんですが)

文字コードの問題なのかなーとか思ってたけど、ぐぐったら普通に答え見つかった。 www.graviton-jk.net

.vimrcに

set ambiwidth=double

って書いとくと良いらしい。快適。