キースイッチ
キーボードというのは、キーを押してその押したキーに対応する情報を本体に送る装置で、キーは1つ1つがスイッチになっています。最近の一般的なキーボードは、スイッチが一体成形されたものになっていることが多いのですが、自作の場合は1つのキーに1つのスイッチを使うのが一般的です。そこに使われているスイッチは、昔は日本のメーカも出していましたが、今では、スタンダードなチェリーブランドのものか、それのコピー品を使うのが一般的です。 このあたりのことは、書ききれないほどの情報がありますので、興味のある方は検索してみてください。さて、Ergodoxのキースイッチは左右で80個ぐらい必要で、日本で買うと1こ80円くらい。まあ、予備もいくらかあればいいなぁと思っていたのですが、ちょうどいいタイミングで、MassdropでGateronのスイッチが出ました。軸が選べて120個で25ドル。送料は9.25ドルまあ、だいたい3600円程度でスイッチが手に入りました。
Massdropというのは、共同購入サイトで、商品に特定の数の買い手が付くと安く買えるという仕組み。
Gateronというのは、チェリーのコピースイッチを作っている中国のメーカーで、品質の評価はそこそこ良い。
茶軸
チェリーのスイッチには押した感触の違いによっていくつか種類があります。
職場で使っているKinesisのAdvantageは、チェリーの茶軸と呼ばれるスイッチを使っています。このスイッチは、Advantageに使うために開発されたという説があるようなスイッチで、軽めの感触で、ONの場所が感触でわかるような仕様になっています。
チェリーのコピー品を作っているメーカーもだいたい同じようなラインナップを揃えていて、Gateronにもほぼ同じ性質を持つ茶軸のスイッチがあって、今回はこれを頼みました。
手に入りましたと書きましたが、まだ届いていなくて、9/22にUSのNJから発送されたようです。
着くのにまだしばらくかかりそうです。

メインの石
ハード寄りで石って言えば、普通(昔?)は裸のICを指しましたが、時代は変ったんですよ。今では小型のマイコンボードが昔の石の代わりをしています。Arduino の Mini とか Micro、ダ・ヴィンチ32Uとか、こういうマイコンボードはハードウェアのアーキテクチャも公開されていて、豊富なサンプルも手に入る。
さらに、マイコンと言えばちょっと前まで専用のライター(Writer)が無いと中のプログラムを書き換えられないし、石によってライターが違ったりで、なかなか手が出しにくいものだったけれど、これらのマイコンボードは、USBのインターフェースを持ってる上に、内蔵メモリが大きくなったのもあってか、ブートローダを内蔵していて、パソコンとUSBてつないでライター無しで直接ファームを書き込むことができるようになっている。
時代は変った。
Ergodoxの基板には、コントローラとして、Teensy2.0(https://www.pjrc.com/teensy/)っていうマイコンボードを使うようになっています。(このPJRCっていう会社?もすごいんだけど、まあいずれ)
Teensy2.0 には AtmelのAVRマイコンAtmega32U4が載ってます。この石、Arduinoとかにも使われているくらいポピュラーな石なので、いろいろなファームウェアが手に入るのですが、そのなかには、キーボード用のもありまして、好きなのを選ぶことができます。
さらに、その中の、いくつかのキーボード用のファームウェアは、Ergodoxにも対応していて、標準の設定で満足できるのであれば、そのまま使うこともできます。
気に入らなければ、自分で書くこともできますよ。
時代は変った。
サブの石 (I/Oエキスパンダー)
マイコンはだいたい足(端子)に掛っている電圧で外の状態を知るわけです。対してキーボードは、いずれにしても沢山のスイッチを並べて、On/Offで入力する装置で、だいたい100個くらいのスイッチが並んでいます。 マトリクスを使うなどの工夫をしても1つの石だけでチェックできるスイッチの数には限りがあるので、足を追加する石を使うことが多いです。I/Oエキスパンダーってやつです。Ergodoxでは、MCP23018というI/Oエキスパンダーを使います。Teensyとの間は、I2C接続なので、4本の線をつなぐだけで住むので、Ergodoxではこれを利用して左右を分離しています。
右の基板には頭脳であるTeensy、左の基板にはI/Oエキスパンダーを載せ、その間を4本の線(物理的には1本に見えますが)でつないでます。
ディスプレイ
Ergodoxにはディスプレイなど付いていない。でも、基板をいただいた方から、「ディスプレイに情報を表示されるようにすると、デバッグに役立つよ」との情報をいただき、なにそれかっこいいってことで僕も付けることにしたのでした。
付けたのは、紹介してもらった、Seeedが出している有機ELのディスプレイです。
このディスプレイもI/Oエキスパンダと同じI2Cのインターフェースを持っているので、線を引き出すところさえ見つければ特に改造などしなくても付けられるはずです。
つなげてみる
ブレッドボードに並べて、接続してみました。PCに開発環境を調えて、サンプルとかいろいろ書き込んで、とりあえず、目的のファームでの基本的な動作は確認できました。今はいろいろいじくっています。
画面に何を表示するかとか、マクロとかの機能追加をどうしようとか、いろいろ考え中です。
光っているのは、CapsLockとかを表示するLEDです。が、多分他の用途に使うことになるでしょう。

入手した基板は、作った人が手を入れていて、オリジナルとはキー配列が少し違います。
この上側の3段分のキーを普通のサイズのキー2個にしてあります。あと、一番下の段の一番外側のキーが無くなっています。
意図は変更した本人に聞いていないのでわからないのですが、
- そもそもErgodoxの標準のファームウェアだとあと2個キーを増やす余裕がある
- 小指の外にわりあてちゃえ
- 一番下の外って打ちにくそうだから、これも移動しちゃえ
ってな感じなのではないかと。
また、標準サイズのキーを使っている場所を増やすことで、コストのかかるキーキャップの調達を容易にするという目的もあるかもしれません。
で、すごいのは、これ、左右の基板は同じものなんです。右用と左用はひっくり返すだけ。配線を工夫してどちらでも使えるようにしてあるのです。ここがErgodoxのハイライトですね!
写真の基板はすでに各スイッチに対応するダイオードや、コネクタ類をハンダ付けした後のものです
READ MORE
違い
Ergodoxの小指の外側のキーは、通常のキーの1.5倍(1.5uと表現されます)のものが4段になっています。この上側の3段分のキーを普通のサイズのキー2個にしてあります。あと、一番下の段の一番外側のキーが無くなっています。
意図は変更した本人に聞いていないのでわからないのですが、
- そもそもErgodoxの標準のファームウェアだとあと2個キーを増やす余裕がある
- 小指の外にわりあてちゃえ
- 一番下の外って打ちにくそうだから、これも移動しちゃえ
ってな感じなのではないかと。
また、標準サイズのキーを使っている場所を増やすことで、コストのかかるキーキャップの調達を容易にするという目的もあるかもしれません。
実物
Ergodoxは左右別れているので基板は2枚になります。で、すごいのは、これ、左右の基板は同じものなんです。右用と左用はひっくり返すだけ。配線を工夫してどちらでも使えるようにしてあるのです。ここがErgodoxのハイライトですね!
写真の基板はすでに各スイッチに対応するダイオードや、コネクタ類をハンダ付けした後のものです
エルゴ系のキーボードについて関心があるので、比較的早い時期からErgoDoxのことは知っていたのですが、手を出していませんでした。
状況
- 職場は Kinesis Advantage、 自宅や移動用は Typematrix
この組み合わせで一応満足はしている。 ただ、Typematrixの物理配列はいいのですが、単体でのリマップ機能が無いので論理配列がいじれない。これがすごく残念。Davinciを使ってファーム部分を入れ変えてしまうプロジェクトは進行中だがいろいろあって、あまり進んでいない。この件はそのうち公開する(たぶん)。
- Ergodox自作なのに意外とコストがかかるのがわかっていた
自作=安く済むと思っているわけではありません。 ラジコンにしても、オーディオにしても、それなりにいいものを作るとなると、コストがかかります。 オーディオなどのように、一般消費者向けの大量生産品があるようなものであればなおさらです。- TEKがあるじゃないか。
Truly Ergonomic Keyboard (https://www.trulyergonomic.com/store/index.php) です。開発中からマークしていたんだが、リマップもできるし、これいい。 自宅用に買うつもりだった。
ただ、リマップ機能がどんなものか発売になってもよくわからなかったりして、あーだこーだしていて、
「まだ買ってない」状態が今でも続いている感じ。
ただ、これ、やっぱりちょっと持って歩くにはでかいかな。
- Kinesis Advantageをもう一つ買うという選択もある
発売からだいぶ経つし、なくなるんじゃないかなんて話も出ていたりしたので、もう一つ買うという選択もあった。だが、最近 Advantage2 が出たので、まだしばらくは新品が入手できそうなので、放っておく。- planck いい!
Massdropでplanck(http://olkb.com/planck/)っていうキーボードを知った。これいい。 40%。完全に格子配列。ミニマム。これ持ち運びによさそうだよねー。状況が変った
日本でキーボードの情報ってあまり手に入らないんだけど、こういう情報の常として、「2ch」にはいくつかのキーボード関連のスレが立っていまして、いちおうチェックしていたりするわけです。また、去年の秋ごろあたりから、海外の共同購入サイト(ちょっと毛色が違うけど)のMassdrop(https://www.massdrop.com)で、Ergodoxの完成品が売られるようになったりして、日本でも局所的なブームが訪れていました。
そんなとき、2chのスレに、突如Ergodoxの基板を作っている人が現れ、日本でもいるんだなーと思っていたら、なんと余ってるやつを1組500円で売るという。
500円ですよ。
とりあえず買うでしょ。
コンタクトしてみると、スイッチとキーキャップとケース意外の部品もだいたいあって一緒に譲ってくれるとのこと。基板だけ入手してあとはぼちぼち考えようと思っていたのですが、いきなりゴールに近いところに。
作りはじめましたよ。
ということで、作り始めたのですが、完成の目処が立ったので、ブログ記事にしようかということになりました。以降、過去の内容も含めて、つらつら記事にしていきます。
久し振りにProject Eulerを解きました。
(※ なんと4年前に書いた下書きがそのままになっていた)
数列がはじめからN個与えられたときに得られる母関数では、N+1まで行くと間違った値(BOP)が出ます。 与える数列を増やしていったときに得られるすべてのBOPの和を求める問題です。
そういえば、こういうのって、補間法かなんか使えば出るんじゃなかったっけ…と思って解いたら解けました。
ウィキペディアで調べたら、ラグランジェ補間法ってやつだったので、まあ、そのまま、式にした感じです。
コメントにも書きましたけど、もうちょっとclojureらしく書いたほうがよかったのかもしれないんですが、そうすると、たぶん、元の式の形がなくなってしまいそう。
READ MORE
(※ なんと4年前に書いた下書きがそのままになっていた)
数列がはじめからN個与えられたときに得られる母関数では、N+1まで行くと間違った値(BOP)が出ます。 与える数列を増やしていったときに得られるすべてのBOPの和を求める問題です。
そういえば、こういうのって、補間法かなんか使えば出るんじゃなかったっけ…と思って解いたら解けました。
ウィキペディアで調べたら、ラグランジェ補間法ってやつだったので、まあ、そのまま、式にした感じです。
コメントにも書きましたけど、もうちょっとclojureらしく書いたほうがよかったのかもしれないんですが、そうすると、たぶん、元の式の形がなくなってしまいそう。
twitterでciderの 0.9.0 が出たという情報が流れてきました。
->> もう、 0.9.1 になってます。 (6/27 追記)
マイナーバージョンが1上ったということで、いくつか新しい機能が追加されています。
メンテナのBastovさんがブログで、いくつかの重要な変更について書いています。
READ MORE
->> もう、 0.9.1 になってます。 (6/27 追記)
マイナーバージョンが1上ったということで、いくつか新しい機能が追加されています。
メンテナのBastovさんがブログで、いくつかの重要な変更について書いています。
アップデート
ciderを入れ替えるお決まりの作業は以下の2つ。
- emacs lisp のパッケージをアップデートする。
僕は、melpa_stableのを入れてます。 - $HOME/.lein/profiles.clj の cider/cider-nrepl のバージョンを変更する。
WARNING: CIDER requires nREPL 0.2.7 (or newer) to work properlyと怒られてしまいます。 これは、 leiningen 2.5.0 (2.5.1でも)の依存している、cider-nrepl が 0.2.6だからのようです。
- $HOME/.lein/profiles.clj の :dependencies の tools.nrepl のバージョンを0.2.7以上にしてやる必要がある。
{:user
{:java-cmd "D:\\Java\\jdk1.7.0_79\\bin\\java.exe"
:dependencies [[org.clojure/tools.nrepl "0.2.10"]]
:plugins [[lein-localrepo "0.5.3"]
[cider/cider-nrepl "0.9.0"]]
:jvm-opts ["-Dline.separator=\"\n\""]}}
デバッガ
デバッガは最も要望の多い機能だったそうです。作者のMarabarbaさんのブログに簡単な説明があったのでちょっと使ってみた。 emacsのelispデバッガのedebugに触発されて作ったとのことですが、初版なので、ステップ実行と、値の注入(injection)ができるだけのようです。
動作については、Marabarbaさんのブログのgifアニメを見て、自分でやってみるのがいいでしょう。
僕も、使ってみるのに何か書こうと思って、久し振りにProject Eulerを解いてみた。
途中で、2,3回使ってみたけれど、なかなかよい。
動作については、Marabarbaさんのブログのgifアニメを見て、自分でやってみるのがいいでしょう。
僕も、使ってみるのに何か書こうと思って、久し振りにProject Eulerを解いてみた。
途中で、2,3回使ってみたけれど、なかなかよい。
依存の独立
ciderが依存しているライブラリが、プロジェクトから切り離されたとのこと。
これは僕にはよくわからなかった。なんのことでしょう?
コード補間の表示がリッチに
company-modeでのコード補間に、アノテーションが付きました。
たしかに付いてるんですが、windowsであるためか、全部左に寄ってしまって、ちと見にくい。
ほかにもまだまだ機能が追加されているようですが、いずれそのうち。
emacs 24.5 の Windows 64bit 版 を見つけたのを機に、 MSYS から MSYS2 に変更してみました。
READ MORE
MSYS2 は git が使えて、パッケージマネージャの pacman も使えるので、移行する価値がありそうです。
だいたい上手く動いたのですが、magit を起動しようとすると、
magit-get-top-dir: d:/d/userdata/xxx/xxx/xxx/ isn't an existing directory
と言われてしまい、起動に失敗します。どう見ても、パスの取得がうまくいってませんね。
ググってみると、以下のページを見つけました。
https://github.com/magit/magit/issues/1318
cygwin でも同様のことが起るようですね。
中程にMSYSでの対応策が書いてあって、
(defun magit-expand-git-file-name--msys (args)
"Handle Msys directory names such as /c/* by changing them to C:/*"
(let ((filename (car args)))
(when (string-match "^/\\([a-z]\\)/\\(.*\\)" filename)
(setq filename (concat (match-string 1 filename) ":/"
(match-string 2 filename))))
(list filename)))
(advice-add 'magit-expand-git-file-name :filter-args #'magit-expand-git-file-name--msys)
とりあえず、これを、scratchで実行してみると、問題解決。
init.el に入れて使うことにしました。



