criticablog

ソフトウェアエンジニアがニッチな情報を書きます。

Dvorak 配列を実用するために

Dvorak 配列は言及されることの多いわりに使っている人を見ない。私は最近5年は家でもそれ以外でもほとんど Dvorak 配列で入力してきたので、どのようにしてその環境を維持してきたのか説明し、これから始める人への一助としたい。

どこでも Dvorak を使う

私は職場 (Windows) と自宅 (Linux, Mac) の両方で Dvorak を使っている。 さらにスマホでもアルファベットをフリック入力にしてとことん QWERTY を避けた。 新しいやり方を続けたいのなら慣れたやり方を捨ててどっぷり浸かるべきだし、 QWERTY で入力する場面が残っている場合、きっといつまでも感覚の切り替えが必要になってつらい。

英語配列キーボードを使う

普通のひとはキーボードのレイアウト変更で、ソフトウェア的に Dvorak 配列を使うと思う。このとき jp106 キーボードに対してスタンダードな Dvorak マッピングというものは存在しないので、loadkeys マップなどを自分で編集することになる。Windows の場合スキャンコード入れ替えでは対応できないのでオンラインソフトを常駐させる必要すらあったかもしれない。一方 英語配列キーボード (pc104) ならば最初からOSが用意しているマップを使えるので、どのOSでも手早く始められる。

英語配列ならキートップを入れ替えて Dvorak 表示にすることもできるが、たまに他の人に使わせることがあるならやめといたほうがよい。

日本語入力では c で か行 とする

日本語は子音母音となることが多く、Dvorak を使うと右手と左手が交互に打鍵されることが多い。 だが k の文字は左手人差し指が担当(QWERTYで v の位置)なので極端に か行 が入力しづらくなる。 そこでIMEのローマ字マッピングを次のように変更しよう。

  • ca -> か
  • ce -> け
  • ci -> き
  • co -> こ
  • cu -> く
  • cya -> きゃ
  • cye -> きぇ
  • cyi -> きぃ
  • cyo -> きょ
  • cyu -> きゅ

ちなみに左手担当のほかの子音は p, y, q, j. じゃ行 も zy のほうが入力しやすい。

たまに他の人にキーボードを使わせる場合

上司が思ったように打てないと、Dvorak に対する風当たりが強くなってしまうかもしれない。

Windows7でDvorakとQwertyを簡単に切り替える方法の提案 - nishio-dens's diary

自分が Google IME を使って、他の人には MS IME を使わせるのでもいいと思う。

逆に自分が人のキーボードで入力しなきゃいけないとき、キーを見ないと打てなくなっている。

OSログインパスワードで使う文字を制限する

ログイン画面でユーザ名の入力不要のOSがあるが、そういう不親切なOSではパスワードを入力するときにキーボードレイアウトが間違っていることに気付きにくい。そこで、Dvorak でも QWERTY でも位置が変わらない英数字や記号だけを使ってパスワードを作ろう(このようなことを公言するべきではないかもしれない。複雑で長いパスワードにすること)。

これはさらに、Dvorak 配列を設定したコンソールに KVM over IP(リモート)で接続したときに QWERTY->Dvorak写像が余計に入る(v を押すとコンソールは k を受け取り t を表示する)問題に対する workaround となる。なにせログインしなければ loadkeys でデフォルトマップに戻すこともできないのだから、どちらでも同じく入力できるパスワードというのは重宝するのだ。

その他

  • hl は右手、jk は左手で打てば vim も問題ない。
  • C-x C-f は、それぞれ左手右手で打つ。両手を使わざるをえない。x(QWERTY で b の位置)は右手と左手の真ん中だが、そういうわけで左手で打つことが多い。
  • MacBook (Air|Pro) ではUS配列を消して DvorakGoogle IME を切り替えて使っている。

Debian Chrome で半角文字だけ文字化けする

Google Chrome のURLバーやメニューなどで、英数字が表示されるべき部分だけ全角記号やひらがなに置き換わってしまう問題が起きていた。Debian では fonts-droid パッケージを更新すると直る。

Chrome 以外にも同じ文字化けをしたアプリがあった気がして、現象も一言で言いづらいし、Debian (fontconfig) か KDE の問題か切り分けられてもいなかったので1ヶ月ほど放置していた。 さっき4〜5回ググって chrome フォント 半角 文字化け というキーワードで数ヶ月以内の記事を探したら上記の二つの記事が見つかった。

問題のパッケージをアンインストールできるかなと aptitude で見てみれば fonts-droid 1:4.4.4r2-2 という更新があったのでとりあえずインストール

Retrieving bug reports... Done
Parsing Found/Fixed information... Done
Reading changelogs... Done
debconf: apt-extracttemplates failed: Illegal seek
(Reading database ... 456082 files and directories currently installed.)
Preparing to unpack .../fonts-droid_1%3a4.4.4r2-2_all.deb ...
Unpacking fonts-droid (1:4.4.4r2-2) over (1:4.4.3r1.1-1) ...
Processing triggers for fontconfig (2.11.0-6.1) ...
[master 1ce1037] committing changes in /etc after apt run
 1 file changed, 1 deletion(-)
 delete mode 120000 fonts/conf.d/65-droid-sans-fonts.conf
Press Return to continue.

/etc/fonts/conf.d/65-droid-sans-fonts.conf が削除され、Chrome を再起動すると直った。

使用している Chrome は 37.0.2062.3-1 (Google 公式)

ちなみに愛用しているフォントは VL Gothic です。0 と O, I と l の区別がつきやすい。

Best practice to run PowerShell scripts from Jenkins

Step-by-step

  1. Choose “Execute Windows batch command”.

  2. Paste this to print out command-lines itself to the console:

@echo off
type %0
echo.
  1. Surround your PowerShell script like this:
powershell -noprofile -command "$ErrorActionPreference = 'Stop'; Set-PsDebug -Strict; .\Do-YourJob.ps1"
  1. If your script contains external commands (like .exes or .cmds), test each exit code of them by $LASTEXITCODE:
bcp.exe blah blah
if ($LASTEXITCODE -ne 0) throw "bcp exit with $LASTEXITCODE"

Explanations

$ErrorActionPreference = 'Stop' makes powershell.exe exit with non-zero when an exception is thrown in the script (maybe).

Set-PsDebug -Strict causes an exception when a variable is used before its assignment, otherwise an uninitialized variable results $null.

Usually powershell.exe returns zero exit code (means success in Jenkins) even if the last command exit with non-zero (means failure).

The PowerShell plugin allows you to write PowerShell codes directly but I thought it would be hard to catch some kind of errors. Probably due to its invocation i.e.:

powershell.exe "& 'C:\Windows\TEMP\hudson########.ps1'" 

Nexus 7 のブラウザと webview は 別物

Chrome がプリインストールされてても、アプリ内に組み込んで使える WebView はただの WebKit ですよって話。

Nexus 7 にプリインストールされてる唯一のブラウザ Chrome で 確認くん*1 を見た様子

ブラウザーとOS Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JWR66Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36
サポート言語 en-US,en;q=0.8,ja;q=0.6
エンコードの仕様 gzip,deflate,sdch
MIMEの仕様 text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

はてブ アプリ*2 の内部ブラウザで 診断くん*3 を見た様子

HTTP_ACCEPT_ENCODING gzip,deflate
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_CHARSET utf-8, iso-8859-1, utf-16, *;q=0.7
HTTP_USER_AGENT Mozilla/5.0 (Linux; U; Android 4.3; en-us; Nexus 7 Build/JWR66Y) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30
HTTP_ACCEPT_LANGUAGE en-US

感想

例えば デバイス フィンガープリンティング技術でも別デバイスとして判定されることでしょう。
Chrome 搭載端末が増えても、Android 標準ブラウザみたいなものへの配慮はいつまでも必要かも。

ちなみに端末の言語設定を英語にしてあります。