スキップしてメイン コンテンツに移動

ErgoDash build log

初めて自作キーボードを組み立てた。
ということで、記事に残しておく。因みにこの記事は、キーボードに慣れるために、自作したErgoDashで書いている。

経緯

Irisいいなーと思っていたが日本国内ですぐ買えるところが見当たらなかったので、ErgoDashを買ってみた。

購入

必要なキットは遊舎工房さんで全て揃えた。
左右分離型、格子配列のかっこいいキーボード。
数字キーもあって、親指キーが充実している。
自作キーボードはじめようと思ったきっかけが小指が腱鞘炎になりかけていたことなので、ShiftとかCtrlとか全部力強い親指に集約したかった。きっとEmacsキーバインド使いの方はわかってもらえるはず。小指死ぬ。

遊舎工房さんで販売されているのは、基板とかダイオード、Arduino Pro Microからケースまでいろいろ揃っているキット。
あとはキースイッチとキーキャップ、左右をつなぐイヤホンケーブルを買うだけで作れてしまう。
こうやってセットになっていると、僕のような初心者であっても間違った部品を買ってしまって時間と金を吸い取られるようなトラブルが無くなって嬉しい。
僕はMBPのめちゃくちゃ高速入力ができるペチペチキーボードが大好きで、それくらい高速に入力できるスイッチが欲しかったのでこれを購入。10個 x 7セット。

正直後悔している...あまりに浅いところで反応するので、狙ったキーとその周りが同時に入力されてしまいやすい。まあ慣れの問題かな...
重さ自体はちょうどいい感じがする。

音はMBPをちょっと高くしたような感じで、大きさとしては同じくらい。図書館とかでは流石に静音化対策をしないと使えないかもしれない。
キーキャップ。MDAという形状で、なんか上の方のキーから中央に向かってたわんでおり、中央の列以降はまた反り返っている。昇華印刷らしい。いい感じ。
差し色のオレンジキーはかっこいいが、緑はあんまり好きじゃなかったので使っていない。
そもそも選択肢がこれくらいしかなかった。海外で探せばもっと色々ありそう。


この他に、左右のキーをつなぐイヤホンケーブル(TRRSケーブル)も遊舎工房さんで買っている。あとPCとキーボードを繋ぐためにMiroUSBケーブルも必要で、これは家に転がっていたのを使っている。

因みに19年6/2の午前1時に深夜テンションで購入して、その日の16時頃発送。
到着したのは4日の午前中だった。クリックポストで届いた。
キーキャップとか70個ピッタリ数えて袋詰していただいたわけですが、当日中に発送していただけるとは思っていなかったので嬉しかった(ダイオードは1つ余分に入ってたりしたけどまあラッキー)。

ちなみに、もちろんはんだごてなんかも必要。適当にAmazonで揃えた。
なんだかんだトータル3万行かなかった。安い!!(麻痺)

作る

いちいち様子を書いていくのもめんどくさいので、ツイートの埋め込みで勘弁してほしいです。
開封時の内容物の写真があればよかったが、興奮しすぎて忘れていた。
あとめちゃくちゃ飛びとびにツイートしてて全然経過がわからないと思う。こちらのビルドガイド通りにやったら全く問題なくできたのでそっち読んでください。日本語で嬉しい。

 なんか調子悪かった。

たぶん基板にダイオードを付け始めたあたりのツイート。
実際そんなに付ける箇所ないです。嘘松。1つの山を作ることを1回として多分300そこらくらい。
なんかダイオードの向きとかも気をつけないといけなくて割と集中力がいるので、絶対仕事終わりとかにやらないほうがいいと思う。

はずれだったのかな


溶けたはんだがスッと基板に入っていってくれる神構造。みなさんもこういうの買いましょう。
高専も導入して。

疲れた。

ここもただはんだ付けしていくだけ。

めちゃくちゃ萎えました。すぐにAmazonで注文して次の日届きました。

はい。完成後はこっから更に変わっている。

待ちます。でもその間に...

左手もほぼ出来てるし。ということで、 Pro Microにファームウェアを書き込む。
両手のPro Microに書かないとダメ。

一応この時点ではんだ付けが甘かったキーが一つ見つかったので、無理やり溶かしてつけ直したら動くようになった。
なんか死にキーがたくさん見つかることを想定していただけに、こんなに特に問題なく作れてしまうものなんだ!と驚いた。敷居は意外と低かった。

試しにキーボードつなげてツイートしてみたやつです。
銀軸の反応点浅すぎて、手をおいているだけで知らないうちになんか入力されてた。マジで浅い。
多分慣れたらめちゃくちゃ早く打てるっていう利点を活かせるのかもしれない。
ちなみにこのツイートするだけで3分ほどかかってた。

終わった...長かった。

キーマップは画像見てください。
とりあえずレイヤ1でマウスカーソルを実現しています。これがめちゃくちゃ快適で、あまりトラックパッドに手を伸ばさずに済みます。


感想

敷居は意外と低かった

謎の不具合とかが起こることを想定していただけに、なんかあっさり終わってびっくりした。
これだったらLEDにチャレンジしてみても良かったかもしれない。
ファームウェアの書き込みなんかも、ツールが洗練されてて特に困ることもなかった。

逆に親指痛い

かなしい。

本当にマウスカーソルをキーボードで動かせるの便利すぎる

レイヤ1にマウスカーソル割り当てた。具体的にはESDFでwasd的に動かせる。
スクロールなんかも割り当てたし。キークリックもJ,Kでできる。
慣れてきたので、ちょっとしたカーソル移動はこれで間に合ってしまった。

もっとあそべそう

マイコンがArduinoなので、いろいろハックできそう。あとI2C通信なんかもできるっぽいのでいい感じに遊べたらなぁ。

とりあえず、今何処のレイヤにいるか分かりづらいので、ディスプレイつけたい。
あとはやっぱり無線化にチャレンジしたい。それさえできればかなりコンパクトなので自由に持ち出してカフェでも使えそう。

というかそもそもArduinoである必要なくない? Raspberry Pi Zeroじゃダメ? シェルコマンドの標準出力を入力するとかしたくないですか? 僕はしたい。

やっと慣れてきた

この記事を書き始めた1時間前は全くキー入力が進まなかったのに、人類の適応能力はすごいものでそこそこ入力できるようになってきた。
たぶん今MBPの半分くらいの速度で打てている気がする。typoも3倍程度だと思う。
半分の速度というと遅そうに聞こえるが、もともとタイピング速度には結構自信があるので今のErgoDashでも一般人より速いと思う。

Tシャツ欲しい




作者の方?が販売しているやつ。かわいい。

コメント

このブログの人気の投稿

ERC-165: Standard Interface Detection まとめ

先日EthereumのERC-165を読んでいたので, 備忘録として日本語でまとめを記しておきます. ERC-165: Standard Interface Detection このERCでは, スマートコントラクトがどのようなInterfaceを実装しているのかを公開・検出する方法を定義しています. これによって, 目の前のスマコンがERC-20準拠なのかとか, あのInterfaceを実装しているのかとかを調べることができるという嬉しいポイントがあります. Interfaceとは? これこれ. プログラミング言語によってはInterfaceの概念がないものもあったりして馴染みのない方ももしかしたらいるかもしれません. このコントラクトは, こういうメソッドを持つよ! というお約束を書くアレです. 標準化した内容 以下の4つを標準化しました. Interfaceの識別方法 コントラクトが実装しているInterfaceを公開する方法 コントラクトがERC-165を実装しているかを検出する方法 コントラクトが, 任意のInterfaceを実装しているかを検出する方法 1. Interfaceの識別方法 Interface識別子というものを導入します. Interface識別子というのは, 全てのFunction Selectorのxorを取ることで計算されます. Function Selector自体は bytes4(keccak256("関数名(引数の型)")) で計算されます. Function Selectorってなんやねんという方は, こちらの記事を読むとスッキリすると思います. Solidity Assembly入門 ~ Function Selector ~ - アルゴリズムとかオーダーとか なのでざっくり言うと, 目の前のコントラクトがERC-20に準拠しているか知りたかったら, ERC-20が備えているべきInterfaceの識別子を計算し, それをコントラクトに渡してお前はこのInterface持っとるかと聞けばいいわけですね. 2. コントラクトが実装しているInterfaceを公開する方法 目の前のコントラクトに, 「(少なくとも)このInterfaceをサポートしてますか?」と聞いたら, はい or いいえのbool

【論文輪読】CoopEdge: A Decentralized Blockchain-based Platform for Cooperative Edge Computing

研究会の輪読で, 協調エッジコンピューティングについての論文CoopEdgeを読んでまとめたので, スライドを供養しておきます. CoopEdge: A Decentralized Blockchain-based Platform for Cooperative Edge Computingを読む from Hiroki Takemura

Ethereum 署名の流れ

Ethereumでトランザクションに署名をしたり, その検証をしたり, 署名から公開鍵(EOAアドレス)を導出する方法を整理しておきます. 署名でできること 以下ができます. 秘密鍵の所有者が, トランザクションの実行を許可したことを署名によって確認する 1自体(トランザクションの実行を許可したこと)を否定できないことを保証する 秘密鍵の所有者でないと, 有効な署名は作れないので, 当然ですね. 署名されて以来, トランザクションが改ざんされていないことを証明する トランザクションの内容が書き換わると, トランザクションのハッシュ値も変わるので, 署名が無効になります. 署名から, トランザクションを作成したアカウントの特定(EOAアドレス=公開鍵を導出する) トランザクションにはfromアドレスが記載されていないので, 署名から送信元アドレスを計算する必要があります. 署名のデータ 署名には, $(r, s, v)$という3つのデータが入っています. このうち, $v$は チェーン識別子 です. 署名の作成 $m$がトランザクション(nonce, gasPrice, gasLimit, to, value, data, vを適切に設定し, rとsにはゼロを入れたもの)を, RLPでエンコードしたものとします. $k$は, 秘密鍵とします. 署名は, $(r, s) = F_{sig}(m, k) $ という感じで生成します. 署名をやってくれる$F_{sig}$の中身はどうなっとるんじゃいという話ですが, Ethereumで採用されている署名アルゴリズムはECDSA(楕円曲線デジタル署名アルゴリズム)です. 一応その手順を以下に記しておきます. 楕円曲線暗号よくわかっとらんので, 間違ってたりとかしたら教えてください. 一時的な秘密鍵として, 乱数$q$を生成する. $q$に対応する一時的な公開鍵$Q$を, 秘密鍵$q$から生成する. 署名作成のときに一時的に使う公開鍵を, 楕円曲線生成元$G$から生成します. $r$は, 一時公開鍵$Q$のx座標になる まあ楕円曲線ってこんな感じのやつで, 一時公開鍵$Q$は楕円曲線上の点だったと思いますので, そのx座標を$r$とするわけですね. $s = q^{-1}(keccak256(m) + r \cdot k) (\