DMM.comラボ キーボード調査

これはDMM.com #2 Advent Calendar 2017 - Qiitaの5日目の記事です
4日目の記事はこちらです

qiita.com

カレンダーのURLはこちら
DMM.com #1 Advent Calendar 2017 - Qiita
DMM.com #2 Advent Calendar 2017 - Qiita


めっきり寒くなりましたね.むっこです
一応今回のアドカレの提案者という立場ですが,趣味を絡めた極めてライトで最もTechではない内容で書いていきます

はじめに

私ですが縁あって採用をいただき,検索チームというところで仕事をしています
サイト内の検索周りのお仕事をしています
記事執筆時このような環境で仕事をしています

携帯カメラの画質が良くないですが,Nyquistというキーボードとマウス代わりのペンタブを使用しています
気になる方は気軽に触りに来てくださいね〜

エンジニアなら毎日さわる道具,それはキーボードです
実世界と電子の世界をつなぐ扉です
料理人が包丁を,理容士がはさみを,陸上選手がシューズにこだわるように我々エンジニアはキーボードをこだわるところなのではないのでしょうか
趣味のひとつが自作キーボードなのでこの際にアンケート調査してみました

アンケート結果

75名の方にご回答いただきました.お時間割いていただき本当にありがとうございました
フォームの使い方がわからないので,結果はスクショになります.すみません

OS

f:id:mt_mukko:20171204174449p:plain
web企業なのでmac多めですね

結果を並べた

OSを分けて同じ質問にしてみたので並べてみます

windows mac
f:id:mt_mukko:20171204181029p:plain f:id:mt_mukko:20171204181245p:plain
f:id:mt_mukko:20171204181034p:plain f:id:mt_mukko:20171204181247p:plain
f:id:mt_mukko:20171204181037p:plain f:id:mt_mukko:20171204181250p:plainf:id:mt_mukko:20171204181253p:plain
f:id:mt_mukko:20171204181039p:plain f:id:mt_mukko:20171204181255p:plain
f:id:mt_mukko:20171204181041p:plain f:id:mt_mukko:20171204181258p:plain
f:id:mt_mukko:20171204181043p:plain f:id:mt_mukko:20171204181300p:plain
f:id:mt_mukko:20171204181046p:plain f:id:mt_mukko:20171204181305p:plain
f:id:mt_mukko:20171204181048p:plain f:id:mt_mukko:20171204181310p:plain

こだわりのある人,一般的なキーボードで十分な人などいろいろな人がいるのがわかります
windowsユーザーの方は支給品で満足されている方が多いみたい
支給品を除くとwindowsユーザーはRealForcemacユーザーにはHHKBが人気なようでした.私も好きです
静電容量無接点式,強いですね!いい打ち心地ですよね

音は小さい方が好まれるようでした.自分は周りに迷惑になっていないか気にしてしまいます

ちなみにTech12というのは社内制度で,個人の技能アップのための書籍や,業務の効率をよくするための物品を購入できるものです
12なのは一人あたり12万円使えるからです

自作キーボードについての質問

自作について
f:id:mt_mukko:20171204174451p:plain
f:id:mt_mukko:20171204174454p:plain
f:id:mt_mukko:20171204174502p:plain
f:id:mt_mukko:20171204174505p:plain

興味ある人が多くてうれしかったです!
単純な半田付けが作業のほとんどなので,道具さえ揃っていればハンズオン形式で工作会みたいなのもできそうですね
🍣入力ボタンのようなネタ満載なものだと良さそうです!
キーキャップは値段が高いのと,好みが分かれるので準備しにくそうです

興味がある人はレツプリplanck, ErgoDoxなどで是非調べてみてください!

最後に自作のキー配置についてビルド方法を書いておきます
組み立て済みのものでもここら辺は自由にできます
簡単なので自作したときに参考にしてください

自作キーボードのキー配置変更

ProMicroというモジュールにqmk_firmwareというものを書き込むことで認識させています
ProMicroはmicro-BのUSB端子が付いているので,それを使ってデータのやり取りをします

環境構築

github.com こちらのリポジトリをクローンします
ライセンスはGPL2.0です

Install Build Tools · QMK Firmwareここを参考に必要なものをインストールしておきます
モジュール用のgccを入れる感じです

ビルド

上記リポジトリのルートでmakeコマンドを叩くだけです!
いろいろなキーボードがあるのですが基本的には以下ののコマンドです

make <keyboard>:<rev>:<keymap>:avrdude

macなら書き込みまでやってくれるコマンドです
最後の:avrdudeを外すとコマンドを実行したディレクトリ(今回はルート)に書き込み用の.hexファイルの生成のみをします


エンジニアが自分で使う道具をエンジニアリングするのもいいのではないでしょうか
C言語の簡単な変更で,というかキー配列を書き換えていけば好みの配列ができて,実際のデバイスが動作するのはとても面白いです
ソフトウェアエンジニアがハードウェアに入門するのにいい題材だと思います

この記事を読んで自作キーボードに興味が出たらこちらのカレンダーもよろしくお願いします 自作キーボード Advent Calendar 2017 - Adventar 自分も記事を書いています mukko.hateblo.jp

ここまでご覧下さりありがとうございました

明日はjianghan0 - Qiitaさんです!

Nyquistを組み立てた話。Pro Microもげもあるよ![Nyquist keyboard Build Log]

自作キーボード Advent Calendar 2017 - Adventar 3日目の記事です

はじめに

Nyquistは左右分離型、格子配列のキーボードです
Twitterでのレツプリ祭り終了後から特に興味を持って取り組み始めました
40%キーボードよりも入門しやすいNyquistというキットを見つけたので作りました
以前ErgoDoxを組み立てたことがあるのですが、難なくできたので今回もそのようにいけると思っていました...

そんな私のNyquist Build Logです

Nyquist購入

Keebio で購入しました

パーツ 価格(USD)
ケース、プレート(白) $14.99
ケース、プレート(黒) $14.99
PCB(白) $14.99
PCB(黒) $14.99
Pro Micro 3個 $20.97
TRLSジャック 2個1セット 2セット $6.98
Gateron 黄軸 63個 $17.64
送料 $19.22
合計 $128.75

別部品購入

Pimpmykeyboard.com キーキャップを買いました

パーツ 価格(USD)
DSA 1 Space (pack of 10) * 2 $20.00
DSA Sublimated Keycap Sets $40.00
送料 $15.06
合計 $75.06

工具通販 MonotaRO(モノタロウ) 現場を支えるネットストア
こちらではPro Microもげ対策で生じた問題「スペーサーの高さが足りない」の解決のためにスペーサーを購入しました

TALP KEYBOARD
こちらではPro Microを10個購入しました

組み立て

公式のBuild Logを参考に組み立てていきます
それでも失敗したことをリスト化しました

  • TRLS用の短絡部分を両面やってしまった
  • I2C部分の短絡忘れ(必要かどうなのかわかってない)
  • キーを奥まで差し込めておらず、高さが不均一
  • Pro Microの端子がもげた

Pro Micro端子もげと対策

そうです。Pro MicroのUSB端子部分はもげ!もげ!もげやすいのです
もげた瞬間の絶望感は相当大きかったです
許可を取っていないので載せないのですが、TwitterではPro Microのもげによる阿鼻叫喚が日々飛び交っています(言い過ぎ)
もげて大変なのは基板に足を直接はんだ付けしてしまうことで、交換などの保全が容易ではないからです。その分省スペースにはなるのですが...
Nyquistもそうでした

私の取った対策はこちらです

  • ICソケットを導入
  • SB端子部分を接着剤で補強
  • 抜き差しする方のPro MicroにUSB延長ケーブルを装着

ICソケットを導入

秋月電子通商 - 電子部品・半導体 【通販・販売】 にお世話になりました

ICソケット (24P) 600mil (10個入): パーツ一般 秋月電子通商 電子部品 ネット通販 24ピンのこれを買いました

またPro Microに同封されているピンでは太くてソケットに入らないため、細いピンヘッダも購入しました

USB端子部分を接着剤で補強

amazonで購入したこのセメダインでUSB端子の周りを固めました セメダインは強いんだい

USB延長ケーブルを装着

直接抜き差しするのがもげの原因なので、延長ケーブルを挿しっぱなしにするようにしました シンプルかつ最強の対策だと思う

完成写真

もともと作っていた黒基板ではんだをつけたり取ったりしていたら、Pro Micro部分が変にショートしてしまったので、予備で買っておいた白基板で実装しました
なんとなく2つ作ろうと思って予備を買っておいてよかったです

<追記> 傾斜について これは偶然の産物です
もともとはスペーサーなどを付けたときに高さが足りなかったので9つすべて高いものにしようとしました
全部付けたとき想像より高さがあり困惑していたところ、前面だけにすればいいじゃんと試したらいい感じになりました

qmk_firmwareのビルド、書き込み

ビルド

基本的にドキュメント(Getting started · QMK Firmware)を読んで、必要なツールを入れてコマンドを打つだけ
この時はv0.5.179でした
自分用のキーマップとしてmukkoを作成してみたので

make nyquist:mukko

でビルド完了

書き込みは自宅環境だとWindowsなので、以下の記事が大変参考になりました
emizping.hatenablog.com ありがとうございます

両手への書き込み手順

  1. マスター側のUSBを接続し、TRLSケーブルでもう片方も繋いでおく
  2. 両方のリセットボタンを押して書き込み実行する

両手とも動作するようになった!

最後に

長い時間がかかりましたが、ようやく完成しました アドカレ申し込んだことで作業が加速したので、申し込んでみてよかったです これからキー配置を探っていこうと思います

はんだごてを落としそうになったとき、とっさに反応してこてをつかんだのですが失敗しました

この記事はHHKB Professional2 US配列9.9割とNyquist0.1割で書きました

HaskellでN-gram

N-gramって知ってますか?

任意の文字列に対して、N=2のとき

"hello" => "he", "el", "ll", "lo"

という文字列を生成するものです

これをHaskellで実装するにはどうしたらいいんだろうと考えていました

Stringをtakeでとって...?再帰っぽい??いちいち判定するの??とか考えていましたが、うまく値が取れず悩んでいました
Hoogleで適した関数を探していたのですが、最終手段Google先生に聞いてみました

その回答がこちら

http://codereview.stackexchange.com/questions/70023/function-to-get-ngrams-fast-in-haskell

ngrams :: Int -> [a] -> [[a]]
ngrams n l = take (length l - (n - 1)) . map (take n) . tails $ l

目から鱗でした。めっちゃHaskellっぽい!

Data.Listのtails関数はリストが空になるまでtailを適用する関数
先ほどの例と同じで入力が"hello"だとすると

["hello","ello","llo","lo","o",""]

という値を得られます

map (take n)ですべての要素に対してtakeでn文字取得します

["he","el","ll","lo","o",""]

そして、take (length l - (n - 1))でn文字部分の要素を返しています

["he","el","ll","lo"]

勉強になりました

UTF-8のマルチバイト文字を扱うにはどうしたらいいんだろう とりあえず基本のString型でいいのかな〜