bouzuya.hatenablog.com

ぼうずやのにっき

2018-02 ふりかえり

2018-02 をふりかえる。

2018-02 の目標

  • ☐ node-backlog-api v2 をつくる
  • ☐ fgb コマンドをつくりなおす
  • ☑ 『計算論 計算可能性とラムダ計算』を読む
  • ☐ 『プログラミング言語の基礎概念』を読む
  • Nyquist の 2 台目をつくる
  • ☑ QMK Firmware を読む

node-backlog-api v2 や fgb はまったく取り組んでいない。

読書。毎日すこしずつ進めるはずがあまり進められていない。計算論のほうはいいかげんな読み方だし、プログラミング言語の基礎概念はまだ途中だ。

Nyquist はつくっても使わないので、つくっていない。QMK Firmware を使ったキーマップの変更に時間を費やした。だいたい読んだつもりでいる。

週別のふりかえり

つくったもの

2018-02-01/2018-02-28

beater-helpers は beater の helper 。一部の関数を npm パッケージとして切り出した。

blog.bouzuya.net は sitemap.xml の修正に伴う更新。

node-irkit は IRKit の操作用 npm パッケージ。

ほかは軽微な修正。

フォークしたリポジトリかつ master 以外への commit なので、上記に含まれていないが bouzuya/qmk_firmware の bouzuya ブランチに手を入れている。

よんだもの

  • 『計算論 計算可能性とラムダ計算』 (2018-02-10)

プログラミング言語の基礎概念』を読んでいる。

みたもの

映画 (動画) 。

控えめ。

その他

ゲーム・勉強会はなし。

おでかけ。中山寺に行った。言われるままに腹帯を買ったもののいかにも宗教的で気持ち悪い。

良くない。プログラミングと読書はどちらもできていない。先月の「プログラミング・読書をバランスよく、こつこつと」はどこかに行ってしまった。キーマップの件は一段落した。

プログラミング。 screenshot-testing-js の検証、 fgb コマンドの改修、 node-backlog-api バージョンアップ。 2018-01 からの詰まりは解消されていない。

読書。前半はわりと計画的に読んでいた。後半はダメだ。気分転換に違う本を読もうかな。

キーボード。ホームキーを含む G20 なキーキャップが届いた。 QMK Firmware のコードリーディングやキーマップの件が落ち着いた。 2018-02-27 にいまの設定のことなどを書いた。

運動をすると良いつつ、柔軟くらいしかしていない。腰痛はやや落ち着いた。

Amazon Prime ビデオは『孤独のグルメ』くらいで控えめになっている。昨日から『舞-HiME 』を観ているが、それくらいだ。

あっという間に終わってしまった。 IRKit と QMK でのキーマップ作成の一ヶ月だった。

来月で 1Q が終わる。 2017-12-31 に書いた目標はどれくらい達成できているだろう。読み返してみると耳が痛い感じだ。 2 ヶ月前の自分に説教されている。明日からがんばろう。

型システム入門を一ヶ月では読めないと思うし、積ん読を減らすのも難しそうだ (せいぜい 1 冊か) 。プログラミングの積んでいるものを解消するくらいはできればいいな。

2018-03 の目標

  • fgb コマンドに日報機能を追加する
  • プログラミング言語の基礎概念』を読む
  • 『エンジニアリング組織論への招待』を読む
  • キーマップに慣れる

ぼくのキーボードのいま

ぼくのキーボードのいまを書く。

ぼくはいま MacBook Air と Let's Split を使っている。以前のものは 2018-02-03 にそこそこ書いた。改めて列挙すると Nyquist / MiniDox / ErgoDox EZ / REALFORCE91 UDK-G / REALFORCE106 あたりを使っている。 MacBook Air のキーボードなんてどうでもいいので、これ以降は書かない。

Let's Split は 4 * 6 * 2 の 48 キーのキーボードだ。格子型配列で左右分離型だ。文章で説明しても分かりづらいのでリンク先の画像を見ると良い。詳しくは検索したほうがいい。ぼくは 36 キーにして、これを使っている。リンクは組み立てなどのガイドのあるリポジトリだ。

なぜ 36 キーなのか。手の形と動かせる範囲から押しやすいキーを残したらそうなったというだけだ。

理想の物理配列は手にピッタリとくるもの(おそらくお椀型や親指用に横向きのスイッチがついたもの)だが、平面に限定すると 2017-09-01 にも書いた 36 キーだ。改めて書くと↓のような形だ。

.----------------------------------.              ,----------------------------------.
|  1,1 |  1,2 | 1,3  | 1,4  | 1,5  |              | 1,8  | 1,9  | 1,10 | 1,11 | 1,12 |
|------+------+------+------+------|              |------+------+------+------+------|
|  2,1 |  2,2 | 2,3  | 2,4  | 2,5  |              | 2,8  | 2,9  | 2,10 | 2,11 | 2,12 |
|------+------+------+------+------|              |------+------+------+------+------|
|  3,1 |  3,2 | 3,3  | 3,4  | 3,5  |              | 3,8  | 3,9  | 3,10 | 3,11 | 3,12 |
`--------------------+------+------+------.,------+------+------+--------------------'
                     | 4,4  | 4,5  | 4,6  || 4,7  | 4,8  | 4,9  |
                     `--------------------'`--------------------'

(3 * 5 + 3) * 2 の 36 キー。これにもっとも近いのは MiniDox だ。

Minidox は 18 * 2 の 36 キーのキーボードだ。格子型ではなく、左右は揃っていて上下にズレている。親指の島は独立し、すこしずつ傾いており、中央の 2 キーは 1.5u になっている。文章で説明しても分かりづらいのでリンク先の画像を見ると良い。リンクは PCB データの置かれているリポジトリだ。

MiniDox は人差し指〜小指について Let's Split よりもしっくりきたのだけど、親指の位置がしっくりこなかった。ぼくの理想では外側のキー *1 は人差し指の真下までに留めてほしい。内側のキー *2 の傾きはもうすこし控えめで良い。小指はもう数 mm ほど下げてほしい。


次にキーマップだ。

ErgoDox EZ 以降は QMK Firmware を使っている。 QMK は TMK から派生したものだ。 QMK のドキュメントに書いてある

QMK はいろいろごちゃごちゃしている。説明しはじめると大変だ。ぼくにとって大切なのはレイヤーだ。レイヤーはドキュメントの Keymap Overview を見ると良い。

なぜ、レイヤーが大切なのか。それは 36 キーというキー数の制約があるからだ。

36 キーで通常のキーボードと同等の機能を実現しようとすると、どうしてもひとつの(物理的な)キーで複数の(論理的な)キーの役割を果たさなければいけない。レイヤーごとに役割を持たせ、それらを切り替えることで、実現する……というわけだ。

また、ぼくにはひとつこだわりがある。「同時押し」が嫌いということだ。 Ctrl / Shift / Alt / GUI (Cmd / Win) のモディファイアキーほか、上記のレイヤーを切り替えるレイヤーキー。これらは通常「同時押し」を要求する。ぼくはそれを避けたい。

QMK は OSL (oneshot layer) や OSM (oneshot modifier) という機能を持っている。これは Sticky Key とか複合キーなどと呼ばれているものだ。……が、いろいろ制約があって使いづらい。ぼくはいま v22 を使っているのだけど、このキーマップはわりと QMK Firmware の機能から外れている。独自で OSL や OSM に近い機能を実装しているからだ。

v22 は、「キー数の制約」・「同時押し」のふたつを克服できるように実装している。詳細は面倒なので書かない。

最後に具体的なキーマップ (レイヤー) を挙げる。

親指はスペースを除いて、すべてレイヤーキーだ。モディファイアキーでさえ別のレイヤー (L4, L5) に押し込んでいる。ここまで徹底されているキーマップはあまりないと思う。この判断のおかげでモディファイアキーはゆとりをもって配置でき、左右対称にできている。

Layer0
.----------------------------------.              ,----------------------------------.
| Q    | W    | E    | R    | T    |              | Y    | U    | I    | O    | P    |
|------+------+------+------+------|              |------+------+------+------+------|
| A    | S    | D    | F    | G    |              | H    | J    | K    | L    | L3   |
|------+------+------+------+------|              |------+------+------+------+------|
| Z    | X    | C    | V    | B    |              | N    | M    | ,    | .    | /    |
`--------------------+------+------+------.,------+------+------+--------------------'
                     | L4   | L1   | SP   || L2   | L1   | L5   |
                     `--------------------'`--------------------'
Layer4
,----------------------------------.              ,----------------------------------.
|      | Eisu | ____ |      |      |              |      |      |      |      |      |
|------+------+------+------+------|              |------+------+------+------+------|
| Ctrl |Shift | Alt  | GUI  |      |              |      |      |      |      |      |
|------+------+------+------+------|              |------+------+------+------+------|
|      |      |      |      |      |              |      |      |      |      |      |
`--------------------+------+------+------.,------+------+------+--------------------'
                     |      |      |      ||      |      |      |
                     `--------------------'`--------------------'

Layer5
,----------------------------------.              ,----------------------------------.
|      |      |      |      |      |              |      |      | ____ | Kana |      |
|------+------+------+------+------|              |------+------+------+------+------|
|      |      |      |      |      |              |      | GUI  | Alt  |Shift | Ctrl |
|------+------+------+------+------|              |------+------+------+------+------|
|      |      |      |      |      |              |      |      |      |      |      |
`--------------------+------+------+------.,------+------+------+--------------------'
                     |      |      |      ||      |      |      |
                     `--------------------'`--------------------'

2 つめのレイヤー (L1) には数字・記号・カーソルを押し込んでいる。数字は標準の並び、カーソルは HJKL 、記号は ASCII コード順だ。

Layer1
,----------------------------------.              ,----------------------------------.
| 1    | 2    | 3    | 4    | 5    |              | 6    | 7    | 8    | 9    | 0    |
|------+------+------+------+------|              |------+------+------+------+------|
| :    | ;    | ,    | -    | .    |              | Left | Down | Up   |Right |      |
|------+------+------+------+------|              |------+------+------+------+------|
| /    | @    | [    | \    | ]    |              | ^    | _    |      |      |      |
`--------------------+------+------+------.,------+------+------+--------------------'
                     |      |      |      ||      |      |      |
                     `--------------------'`--------------------'

3 つめのレイヤー (L2) は適当。普段押さないキーを押し込んでいる。

Layer2
,----------------------------------.              ,----------------------------------.
| F1   | F2   | F3   | F4   | F5   |              | F6   | F7   | F8   | F9   | F10  |
|------+------+------+------+------|              |------+------+------+------+------|
| F11  | F12  | F13  | F14  | F15  |              | Mute |VolDn |VolUp |      |      |
|------+------+------+------+------|              |------+------+------+------+------|
| F16  | F17  | F18  | F19  | F20  |              |      |      |      |      |RESET |
`--------------------+------+------+------.,------+------+------+--------------------'
                     |      |      |      ||      |      |      |
                     `--------------------'`--------------------'

4 つめのレイヤー (L3) は Ctrl との組み合わせで表現できそうな、通常のキーボードでは(物理的な)キーが用意されているようなものを配置している。このレイヤーへのレイヤーキーは ; の位置 (L1) を使っている。この位置は特等席だ。ホームポジションを維持したまま押せる。

Layer3
,----------------------------------.              ,----------------------------------.
| Esc  |      | End  |      |      |              |      |      | Tab  |      |      |
|------+------+------+------+------|              |------+------+------+------+------|
| Home |      | Del  |      |      |              | BS   |      |      |      |      |
|------+------+------+------+------|              |------+------+------+------+------|
|      |      |      |      |      |              |      |Enter |      |      |      |
`--------------------+------+------+------.,------+------+------+--------------------'
                     |      |      |      ||      |      |      |
                     `--------------------'`--------------------'

まだこのキーマップにして日が浅いので、慣れるまではもうしばらくかかりそうだ。


まだ理想の物理配列にはたどり着いていない。キーマップは先週あたりで随分マシになってきたが、 QMK の余計な機能を取り除いた独自のものをつくりたい。まだまだ先は長い。

*1:4,4), (4,9

*2:4,6), (4,7

確定申告の訂正

昨日ははやく寝たのだけど、今朝はゆっくり起きた。たくさん寝たおかげかすっきりとしている。朝から税務署に電話をする。確定申告の誤りに気づいたので、その訂正方法を聞くためだ。意外と簡単そうだ。

昨日つくった日報シェルスクリプトを使ってみる。なかなか良い。できれば fgb コマンドに組み込みたい。ただ、そのためにはいろいろな課題が残っていて……。

帰ってきたら、確定申告の訂正作業。はじめは紙に書いたが、今度はウェブサイトで作成してみる。簡単すぎた。データを保存できるのも最高だ。「 Safari を使え」などという頭のおかしいメッセージが出るし、変なポップアップウィンドウでの作業を強制されるという気持ちの悪いサイトだが、紙よりはマシだ。信じられないような金額をつぎこんであるんだろうと考えると、税金を返せという気持ちになる。なるほど。

2018-W08 ふりかえり

2018-W08 をふりかえる。

2018-W08 の目標 とその記事

目標。

記事。

目標の半分は達成できた。キーマップのことしかしていない。キーマップを v17 から v22 までバージョンアップした。 v22 は今日更新した。

v21 までで「同時押し」を排除した。同時押ししなくても、すべてのレイヤーキー・モディファイアキーが Sticky に、 QMK Firmware で言うところの Oneshot な形で動く。

一度、キーボードのことを整理する記事を書いたほうが良いかもしれない。

読書は停滞している。 2018-01 にしばしば書いていた「バランスよく」はどこに行ったのか。

つくったもの

2018-02-19/2018-02-25

(なし)

実際には bouzuya/qmk_firmware をそこそこ更新しているのだけど、 master に含まれないと GitHub の contribution には反映されないのかな。

よんだもの

(なし)

みたもの

(なし)

まだ『孤独のグルメ』を観ている。

その他

腰の痛みはすこしだけマシになっている気がする。少なくとも脚にくるようなものはなくなっている。

Backlog API を使って日報や進捗の概要を生成するスクリプトを、シェルスクリプトで書いた。 bouzuya/node-backlog-api の v2 を……という話はあったけど、 curljq で事足りるんだよな、実際のところ……。 jq のクエリーはいつまでたっても覚えられないけど。

2018-W09 の目標

  • 2018-02 ふりかえりを書く
  • 髪を切る
  • キーボードのふりかえりを書く
  • プログラミング言語の基礎概念』を読み進める

キーマップ v20 と v21 をつくった

キーマップ v20 および v21 をつくった。

昨日 (2018-02-23) の v19 に続いて、いくつか更新した。

v19 から v21 の主な変更点は↓のとおり。

  • レイヤーの重なりが動かないのを修正
  • NO_ACTION_MACRO を定義し、容量を削減
  • PREVENT_STUCK_MODIFIERS を定義し、 mod が残るのを修正
  • デバッグ用の _LSFT / _RSFT / RESET を削除
  • _KANA / _EISU を移動

PREVENT_STUCK_ODIFIERS が良かった。↓からの一連のツイートで書いたので、省略。

だいたい気になっていた点は直したつもりだ。これで慣れていこう。今週はずっとこれを変更している気がする。

キーマップ v19 をつくった

キーマップ v19 をつくった。

  • 独自に追加した状態をリセットするためのキーの追加
  • レイヤーの戻り先の誤りの修正
  • レイヤーの遷移がループした際の戻り先を修正

昨日 (2018-02-22) 書いたレイヤーの挙動は直した。合わせてふたつのレイヤーキーの間で戻り先を互いに参照してしまわないようにした。

万が一、状態が壊れたときのためにリセットキーを追加した。困ったらこれを連打すればきれいな状態になるという代物。

mod に関連して PREVENT_STUCK_MODIFIERS というオプションを見ている。 mod も見直していく。

キーマップ v18 をつくった

キーマップ v18 をつくった。

2018-02-21 に設定した QMK firmware の debug を使いつつ、動きを見直している。今日はレイヤーまわりを直した。少なくとも汚い状態はなくなったと思う……のだけど、一部、仕様を忘れて誤った形にしてしまったっぽい。

たとえば↓の場合を考える。すごい簡単な場合なのだけど、これがおかしい。 oneshot っぽい動きをするので L1 U のあとは L1 に居る。 L3 U で L1 から L3 に移る。この状態で L1 に oneshot を残すべきところを消してしまった気がする。 layer key に oneshot を消費していいのかがブレている。たぶん消費されてはいけない。

L1 D
L1 U
L3 D
L3 U

ほかにも二度押しや押しっぱなしで壊れていたのを直した。そういったあれこれを直しているうちに仕様が分からなくなって、↑のようなブレを出してしまったっぽい。

まだ mod key はいろいろ残ったり、リピートで壊れていたりとアレな感じ。