インスタコード用コード譜変換プログラム「toICN」ここまでの開発の記録

この記事ではtoICNの開発の記録を残しておこうと思い書いています。

toICNとは

コード譜サイトの和音表記を、インスタコードのための記法 「ICN」 に変換するためのブックマークレットです。

インスタコードやICNについては以下の記事で詳しく紹介しています。

inajob.hatenablog.jp

toICNは以下で公開しています。

github.com

→→→ インスタコードの購入はこちらから!←←←

バージョン0

8/31に作りました。記憶が怪しいですが、8月は娘のコロナ騒動で非常にバタバタしており、その後自分は2回目のコロナワクチン接種などをして、副反応で寝込んでたりしたのがこの頃です。

バタバタでプログラミングがしばらくできていなかったのと、待ちに待っていたインスタコードがそろそろ届きそう、というワクワクの2つの感情から、前々から作りたかったブックマークレットの作成に着手しました。

618文字の比較的簡単なスクリプトですが、単純な楽曲であればこれで十分に役立つものでした。

GitHubで公開

バージョン0はgistで公開しましたが、今後ももう少し改良していきたいのと、音楽がわかる方にアドバイスをもらいたかったので、GitHubリポジトリを作る事にしました。

github.com

9/3 nonoyu さん 参戦!

9/3 nonoyuさんからプルリクエストを頂きました。ここからnonoyuさんの怒涛の快進撃が進みます。

github.com

この変更が、この後の転調機能対応時に非常に役立ちました。

github.com

今後のことを考えてテストコードを入れたのもここです。 あとからこのテストコードは非常に役立ちました。入れておいてよかった・・

github.com

すでにこの時点でChordWikiのKey情報を読み取り 適切な調を認識できるようになりました。

github.com

9/3 インスタコード作者様 参戦!

nonoyuさんと日を同じくして インスタコードの作者様である ゆ~いちさん からもアドバイスをいただきました。

以降、音楽的な疑問や、インスタコードの設計思想など様々な面でゆ~いちさんからアドバイスをいただいています。

github.com

9/5

その後GitHub Actionsを設定しPR時に自動的にテストを実行するようにしました。めっちゃ便利です。 (このあたり仕事でも似たようなことをやっていたのが役立ちました)

github.com

インスタコード利用者のことを意識してGifアニメーションでの説明を用意しました。 このあたりからインスタコード利用者の方々からtoICN便利!という感想をいただき始めました。

github.com

9/6

ChordWikiに記載された曲の途中での転調にも対応しました。(by nonoyuさん)

github.com

9/9

toICNのURLをTwitterなどに投稿したときにいい感じの画像が出るようにしました。 (ロゴを頑張って書きました)

f:id:inajob:20211014152415p:plain

github.com

9/11 pastakさん 参戦

user.js版をpastakさんに作ってもらいました。 これは今後、ブラウザの機能拡張など作る場合に大いに役立ちそうです。

github.com

インスタコード公式ページに紹介してもらう

仕事が早いですね。インスタコード利用者の中にはPC操作が苦手な方も多く、そういった方にも優しく書いていただけているようで、助かっています。

みやびさんの動画で紹介していただく

インスタコード公式Youtuberである「みやび」さんにも紹介いただきました。こちらも非常にわかりやすい。

www.youtube.com

怒涛のUI変更 by nonoyu さん

キーやレベルを表示・変更するUIを一気に作ってくださいました。見た目が良くなり一気に使いやすくなりました。 f:id:inajob:20211014153433p:plain

github.com

レベル変更機能もインスタコード初心者のためによさそうです。

github.com

Twitterでの音楽理論話 by さろげーと さん

和音名とその構成音について、よくわからなくなってまとめていたら、いろいろ教えてくださいました。 これ以外にも音楽理論的な側面で様々なアドバイスをいただいています。

10/2 そして新たな楽器へ・・

こちらもnonoyu さんの成果ですが、 「一五一会」という楽器に対応させるという野心的な試みです。

新たなモードを追加(Offモード・一五一会モード) by ts-uc · Pull Request #128 · inajob/toICN · GitHub

10/7 YouTuber 東雲めぐ さんの弾き語り動画

これは toICNの話というよりはインスタコードの話ですが・・ チャンネル登録数がすさまじい YouTuberさんにもインスタコードを紹介されていて、すごいところまで来たなーと感じました。

ちらっとtoICNの話も触れられていてうれしかったです。

f:id:inajob:20211014153303p:plain

www.youtube.com

10/9 AndroidChromeで突然toICNが動かなくなる対応

Twitterやインスタコードのフォーラムで報告があって気づいたのですが、どうもAndroidChromeブックマークレットの文字数制限が急に実装されたようで「5000文字」を超えるブックマークレットがうまく登録されない問題が起きました。

GitHub PagesにJavaScriptを配置し、それをブックマークレットから呼び出すように構成を変更し事なきを得ました。

pastakさんが作ってくださったユーザスクリプト用のJavaScriptが役に立ちました。

github.com

まとめ

インスタコードが届くのが楽しみすぎて自分のために作り始めた toICNですが、ここまで書いてきたように様々な方の助けを得て、私が思っていた以上に良いものとなりました。

ここまでのところで大まかな機能は完成しているので、今後は開発のペースは落ちていくとは思いますが、継続して機能追加やバグ修正をしていこうと思っています。

バグ報告やプルリクエストもお待ちしていますので是非是非!

github.com

→→→ インスタコードの購入はこちらから!←←←

インスタコード/InstaChordファーストインプレッションとtoICNの紹介

インスタコード/InstaChordとは

ついに我が家にもやってきましたよ!

ってインスタコードって何?って人のために少しだけ説明すると・・

インスタコードとは「誰でも弾ける新しい楽器」です!

具体的には、こんな形の楽器で、ネックの部分のボタンで和音を簡単に選択でき、ボディ部分の6個のパッドを撫でることでギターのように演奏ができるというものです。

→→→ インスタコードの購入はこちらから!←←←

f:id:inajob:20210915002311j:plain

インスタコードのクラウドファンディングが行われたのは2020年5月のこと。

確かこの記事を見てその存在を知りました。

fabcross.jp

自分も「和音が鳴る電子楽器」を開発しているので、このクラウドファンディングにはかなり注目しました。

加えて、Maker Faireなどでも良く出会う、電子楽器の先輩(と勝手に思っている)「電子楽器”ウダー”の宇田さん」が開発にかかわっているという事で、自分の中の期待が非常に高まりました。

f:id:inajob:20210915002400p:plain
https://instachord.com/company/developper/ より

そして自分は2020年6月1日に予約注文しました。

インスタコード/InstaChord ファーストインプレッション

非常に洗練された筐体で、かなりの高級感があります。

画面も大きく見やすく、音色も安っぽくなくいい感じです。

f:id:inajob:20210915002911j:plain

和音を選択するボタンは、ダイアトニックコードがワンタッチで選択できるようになっており、それ以外の和音については修飾キーを利用して選択します。

f:id:inajob:20210915004626p:plain
https://instachord.com/instruction/manual/ から転載

まぁこの辺の思想は自分も似たような楽器を作っているのでするっと理解できました。

全体的な仕様は予想していた通りで、そこに関して驚きは少なかったのですが、やはり「実物を演奏する」というこの体験はモノがあってこそです。

和音を選択した状態で6つのパッドを撫でるとギターさながらの「ジャララーン」という音が鳴るという体験は、予想していた以上の物でした。

インスタコードでは、伴奏のみでメロディを弾くことが出来ないのですが、そこはいわゆる「弾き語り」スタイルで、歌を歌いながら弾くというのが標準的な使い方のようです。

実際に歌を歌いながら演奏してみるとこれまた楽しく、あえて文字で書くとするとカラオケと音ゲーが合わさったような楽しい感覚を感じました。

開封動画や、使い方のチュートリアルなどはYoutubeに動画が上がっているので気になる人は見てみると良いと思います。

InstaChord用の専用表記「ICN」

インスタコードは和音を簡単に入力できますが、和音というのは一般的な楽譜には「C」「Am」のように音名で書かれています。

では、インスタコードのボタンはこの音名と直接対応しているのかというと、話はそう簡単ではありません。 曲にはそれぞれ「キー」があり、キーが異なると曲を構成する和音のセットも変わります。そのため、曲のキーがCの時によく使う和音は「C, Dm, Em, F, G, Am, Bm」ですが、曲のキーがAとなると「A, Bm, C#m, D, E, F#m, G#」というようによく利用する和音の音名が異なります。

f:id:inajob:20210915004740p:plain

よく使う和音の数はキーが定まれば、さほど多くないのですが、キーに応じて異なる和音の表記がインスタコードのどのボタンに対応しているかをいちいち覚えておかないと演奏できないという問題があります。

インスタコードではこの問題を解決するために、あらゆるキーの曲を簡単に弾けるようにするために「InstaChord Number (ICN)」という特別な表記を用意しています。

ICNの簡単なものは単なる数字で「1」とか「2」とかです。

f:id:inajob:20210915003016p:plain
https://instachord.com/instruction/icn/ から転載(表は一部の和音の例です)

この番号はインスタコードのネックにある9つのボタンと対応しており、ICNが書いてある楽譜があれば、「C」とか「Am」とかのキーにより異なる和音とボタンの対応を覚えることなく演奏することが出来ます。

インスタコードに対応した楽譜をどうやって用意するか?

これはすごいんですが、このICNはインスタコード独自の表記のため、楽譜を専用に用意しないといけません。

インスタコードでは当初「楽器.me」というコード譜サイトと提携して、ICNをサポートした楽譜を提供する予定だったのですが、もろもろの事情により、この計画は頓挫しました。

現在インスタコードが公式で用意している方法としてはコード譜ライター」というツールがあります。これは一般的な音名に基づく和音(「C」とか「Am」とか)を入力すると、それをICNに変換して表示してくれるというアプリです。

www.youtube.com

コード譜ライター」も便利なのですが、弾きたい曲の和音を調べて、それを入力し、ICNに変換する、という手間が結構面倒なのが難点です。

コード譜ライター」で変換したICNをインターネット上で共有する試みも行われていますが、正しく権利処理しないと、歌詞などのデータは著作権侵害になる恐れもあります。

そこで自分が思いついたのが「toICN」です。

toICNの開発

インターネット上にはコード譜を公開しているWebサイトが多数あります。これらのWebサイトでは、一般的な音名に基づく和音(「C」とか「Am」とか)で和音が表示されるのみで、ICNには対応していないのですが、これを何とかICNに変換できれば、「コード譜ライター」にちまちま和音を入力して変換しなくても良くなるのでは?と考えました。

f:id:inajob:20210915005729p:plain
譜面は https://ja.chordwiki.org/wiki/%E3%81%B5%E3%82%8B%E3%81%95%E3%81%A8 から転載

実現の手段としては、ブックマークレットを用いることにしました。

これは結構古くからある手法で、ブラウザのブックマークにURLではなくJavaScriptを登録することで、任意のWebサイトで独自の処理を実行できるというものです。

これを思いついて、簡単な実装を試してみて、公開したのが8/30でした。

その後GitHubリポジトリとして公開したところ、インスタコードの購入者の方にも見つけていただくことが出来、さらには一緒に開発してくれる方も現れました。

toICNの開発の軌跡も紹介したいのですが、長くなるので、ここでは割愛します。

ともかく、toICNは「ワンクリックでコード譜Webサイトの楽譜をインスタコード用に変換できる」という便利なツールです。

↓↓↓↓↓ インスタコード持っている人にはぜひ試してほしいです。↓↓↓↓ github.com

下記で利用方法をGIFアニメで紹介しているので、試してみる際は参考にしてみてください。 (パソコンでも、iPhoneiPadでもAndroidでも利用できます)

何とインスタコード公式Youtuberである「みやび」さんがtoICNの説明動画を作ってくださいました。 こちらも非常にわかりやすいので是非見てみてください。

www.youtube.com

まとめ

インスタコードがやっと届いて、少し触ってみましたが、期待以上に面白い製品でした。

弾き語り用の楽器としてはかなり良いものとなっているので、楽器演奏が苦手だけど歌は好き・得意という人にはぜひ試してみて欲しいと思いました。

また拙作「toICN」もインスタコードで既存の楽曲を演奏するうえで非常に便利ですので、ぜひ試してみてください。

最後にこの記事を読んで「自分もインスタコードが欲しい!」と思った方!ぜひ下記リンクから注文してみてください。

(インスタコードは代理店を持たず、紹介パートナー制度を使ってマーケティングをしています。下記リンクは私のアフィリエイトコードとなっています。)

→→→ インスタコードの購入はこちらから!←←←

娘(1歳)のコロナ感染記録【復帰済み】

はじめに

正確な時期は伏せますが、自分の娘(1歳)がコロナ陽性となった記録です。
先に書いておきますと、今は元気に戻り、特に後遺症のようなものも無さそうなのでご心配なく。

保育園での陽性者発生

ことの始まりは保育園でコロナ陽性者が出たとの連絡です。娘は濃厚接触となってしまったようで、近いうちに一斉PCR検査を実施するとのことでした。

我が家は夫婦共働きなので、保育園が休園になるのは困るなぁ、、という程度の感想でした。

この時点では娘は元気でした。

それからは保育園が休園ということで夫婦で順番に有給を取ったりしながら娘を子守しつつの生活をする予定でした。

発熱・陽性

異変が起きたのは2日目。娘が発熱
まぁ1歳の子供に急な発熱はよくあることで、ここ最近は毎月1回は発熱していましたが、保育園でコロナ陽性者が出たと言うこともあり、これはもしや、、と思い、一斉のPCR検査より先んじて、PCR検査を受けることにしました。

子供向けのPCR検査を実施している病院を探すのに少し手間取りましたが、無事見つけることができ、当日中に検査を受けることができました。

※埼玉県の場合は下記ページから検索ができます。「小児の受診」にチェックを入れることで子供を見てくれる病院に絞り込めます。

flu-search.pref.saitama.lg.jp



結果は翌日に電話で教えていただき、なんと「陽性」

この時点で、私たち夫婦も濃厚接触となりました。

 

長い自宅待機期間


保健所とも連携が取られ、家族全員「自宅待機」ということが伝えられました。
期間についてはなんと最短で「24日間」

よく話で聞く「14日間の自宅待機」だと思っていた自分は思った以上に長い自宅待機期間に驚きました。

この24日間というのは、娘に症状が出ていることが原因です。

娘の症状がおさまりウイルスを発さなくなるのに10日間、その後濃厚接触者である私たち夫婦の自宅待機期間が14日間、ということだそうです。

理論的には娘だけは自宅待機の対象から外れるのでしょうけど1歳の娘を親から隔離して預けることなど出来ないので、家族3人とも24日間自宅待機、となりました。

もちろん娘の症状が10日以上続いた場合はこの期間は延びることになります。

自宅待機中の生活

娘の発熱は6日間ほど続きましたが、その後平熱に戻りました。しかしその後も数日だるそうにしており、やはり保健所の見立てどおり完全回復には10日ほどかかりました。

f:id:inajob:20210829152937p:plain

パルスオキシメーターが郵送されました。

その間、我々夫婦も熱が出るのでは、とハラハラしていたのですが幸いなことに夫婦とも元気でした。妻は職域接種で2回接種済みで、自分は1回接種済みだったのも良かったのかもしれません。

娘が回復して一安心、なのですが、まだまだ自宅待機期間は続きます。元気な娘を外に連れて行かずに子守する、というのはとても大変でした。

f:id:inajob:20210829152635p:plain
もちろん我々夫婦にも仕事があるので完全に休むというのも難しく、交代で有給を取得しながらの子守をしました。(仕事はほぼ完全にテレワークだったのが幸いでした)

自宅待機ということで、ベビーシッターサービスを使うようなこともできないので、夫婦のどちらかが倒れてしまうと、わりと「詰む」ので、無理のないように過ごしました。
食料はどうするか?、、と初めは心配だったのですが、ネットスーパー非対面受け渡しのサービスが利用できた為、この点は特に困ることがなかったです。

なんならUber Eatsや出前館的なサービスも使えるのでまぁお金にケチケチしなければ食料はどうとでもなりました。
それ以外の買い物もネットで買って「置き配」指定することで大抵のものは買うことができ、こちらも困りませんでした。


LINEで状況を聞きつけたママ友さんが家で使わなくなったおもちゃなどをまとめて玄関前に置いておいてくれるなど、ありがたい支援もありました。自宅に閉じこもりっぱなしの生活に飽きていた娘には非常に良いプレゼントでした。

 

娘がコロナの症状のために必要な薬も病院と薬局が連携して郵送してくれました。かかりつけ医ではなかったので、いつもと違う薬で不安がありましたが、、


意外と何とかなりましたが・・


ということで、蓋を開けてみると仕事しながらの娘の子守りが大変だった、というだけで、その他生活面においてはさほど困ることなく生活できた自宅待機生活でした。

もともと自分の趣味がインドアで、コミュニケーションも、ほとんどがネットを利用していたという事、仕事も既にテレワーク化していたことなどが幸いしたのでしょう。

ともあれ、24日間の自粛生活は大変でしたし、一歩間違えば危ないことも起き得ました体調不良はもちろんですが、大物家電の故障など対面しないと解決しない問題が起きると結構詰みそうだと感じました。

まとめ

ニュースを見る限り、このように身近な人がコロナ陽性者になったり、自分が濃厚接触者になることは、これからますます増えてくるように見えます。


この記事が、少しでも皆さんの参考になれば幸いです。

おまけ:モデルナ2回目難民

私は職域接種で1回目を接種していたのですが、2回目はこの自宅待機期間に予約してしまっていました。当然その予約通りにうけることはできないので、今話題の「モデルナ2回目難民」となってしまいました。

 

会社を通じて厚生労働省に連絡してもらったり、自分からも厚生労働省の窓口に連絡をするなどしたのですが、待機が始まった時点では、モデルナの2回目だけを予約することはまだ想定していないとのことでした。

 

しかし、私が自宅待機している間に事は進み、結局自宅待機が解禁してすぐに2回目の接種を受けることが出来ました。

私は東京都の会社に勤務しているため、下記の「都庁南展望室ワクチン接種センター」で接種することが出来ました。

 

都が設置するワクチン大規模接種会場に関する情報について 東京都福祉保健局

※今ページを見ると「若者へのワクチン接種」も始まったようで、渋谷の長蛇の列に並ぶより、こちらで打てる人はこちらの予約をするのがよさそうに見えます。

 

こちらも誰かの参考になれば幸いです。

ベランダ家庭菜園2021

我が家は角部屋なので、結構広いベランダがあります。ということで2年前からベランダにプランターを置いて「家庭菜園」を始めています。

 

と言ってもかなり小規模ですが、1つの丸プランターと、袋のまま育てることが出来る土を購入し合計2つの鉢を使って野菜を育てています。

2021年のターゲット野菜

一つは定番のミニトマトもう一つは初挑戦の「オクラ」にしました。

また「ミニトマト」の鉢には「バジル」も合わせて植えてみました。

調べると野菜によって「相性」があるらしく、「ミニトマト」と「バジル」はそこそこ良い相性のようでした。

4月

例年植えるのが遅くなっている、、ということで今年は4月初旬に植えました。後から振り返るともう少し遅くから始めても良かったかな?という印象です。

土はカゴメのトマトの土です。この土は何といっても「燃えるゴミ」として捨てることが出来るということで、都会での家庭菜園にはぴったりです。また、この袋自体を鉢として利用できるところも良いです。

 近くのホームセンターでは入荷数が少なく、すぐ売り切れてしまうので、そういう意味では4月初旬に植え始めて良かったです。

 

トマトの苗は、「接ぎ木」のものを選択。接ぎ木のほうが育ちやすく失敗しずらいようです。品種は「ミニキャロル」。そして横には「スイートバジル」の苗を植えました。

f:id:inajob:20210726095609p:plain

ミニトマトを育てる際に必要な「手」は例年使っているものがあるので使いまわします。「手」にミニトマトを括り付けるための「PPロープ」、「液肥」「水やりのためのバケツ・ペットボトル」なども例年使っているものがあるので、買うものは最小限にして始めることが出来ました。

3年目でわかっている知見

今年で3年目ということで、ベランダ菜園のTipsもそこそこ溜まってきました。

  • マンションの上の方の階なので風が強い。日当たりを求めて鉢を配置すると風でダメになる。
  • 育ち始めは風除けネットが有効、ある程度育ったら外してOK
  • ミニトマトは「接ぎ木」の苗が失敗しずらい
  • 水やりをやりすぎると根腐れする

などなどです、今年はこれらの知識を生かしてベランダ栽培を始めたのでスムーズに育てることが出来ました。

5月

もう一つの鉢でオクラを育てることに。「プランターでも育つ」と書かれた苗を購入。

オクラの根っこは下に長く伸びるらしく、少し深めのプランターを推奨とのこと。

一方ミニトマトはぐんぐん成長し、ひとまず第一段階は成功の様子。

f:id:inajob:20210726095650p:plain

そして5月下旬に衝撃の事件が・・

ヨトウムシ襲来

ある日バジルを見ると葉っぱにかなり大きな穴が!!

f:id:inajob:20210726095725p:plainf:id:inajob:20210726095750p:plain

これは植物の病気などではなく、なにか芋虫の仕業だな、、?と思って周りを調べると、、、大量の糞を発見!!これは確実に芋虫・・・

 

そして葉っぱを裏返してみると・・・いました!巨大な芋虫。

という事で退治できましたが、バジルは結構食べられてしまい、見るも無残な姿になりました。

ハーブ系は虫よけにもなるという事でミニトマトと一緒に育てていたのですが、まさか、そっちの方が芋虫にやられるとは・・・ ベランダでプランターで育てているので、虫の被害などはあまりないだろうと油断していたのですが、がっつりやられてしまいショックでした・・

強風でミニトマトがの枝が折れる

ちょうどこのころ結構強い風が吹く日があり、ミニトマトをしっかり紐で固定していなかったために、枝が折れてしまうという事件がありました。

端の方の枝ならそのまま折って捨ててしまうところなのですが、比較的大きな枝の根元が折れてしまい、これもショックでした・・

しかし、ダメもとで折れた部分を元に戻してガムテープでぐるぐる巻きにしたところ、持ち直し、結果としてその枝の先にも実が成りました。

ミニトマトの生命力に驚かされました。

6月

虫食いにも負けずバジルはぐんぐん成長し、花をつけました。後から知ったのですが、バジルは20㎝くらい伸びたところで、枝先をはさみで切ってあえて枝を分岐させることで収穫量を増やすことが出来るようです。

葉っぱが目的のバジルは、花を育てる必要が無いため、花の部分も早めにカットするのが良いようです。次育てるときは忘れずやりたいです。

f:id:inajob:20210726095853p:plain

バジルがあることで、献立もバジルを使ったものにしてみました。

f:id:inajob:20210726100223p:plainf:id:inajob:20210726100245p:plain

ちょっと食卓がおしゃれになりました。新たな食材というのは良いですね。

 

ミニトマトもぐんぐん成長し私の身長くらいまで伸び、6月下旬には中旬には実がなり少しずつ食卓にミニトマトが並べられるようになってきました。

f:id:inajob:20210726095932p:plain

オクラも少し変化は少ないものの順調に成長し6月下旬に1つ収穫することが出来ました。1つの苗だと、同時には1つしか実がならないようで、どう食べたものかと困りました。次回育てるときは複数の苗を育てるのがよさそうです。

f:id:inajob:20210726100004p:plain

7月

ミニトマトは7月下旬にはもう、後半戦という感じで、小さな実が増えてきました。もう少し間引いても良かったかもしれません。

実を大体取りつくしたところで、枝をはさみで短く切って、今年のミニトマトは終了です。結局実は100個以上できました。今年も大成功です。

 

バジルはまだまだ育っているので、引き続き育てていく予定です。

オクラ粛々と1つずつ実をつけていくスタイルで、8月もまだまだいけそうです。

 

ここまでのまとめ

ベランダ菜園も3年目ということで、うまく作れるようになってきました。今年は初めて「オクラ」を育てたり、ミニトマトと一緒にバジルを育てたりし始めましたが、そちらも順調です。

まぁ実際にかかった費用を考えるとスーパーで買ってくる方が絶対良いのですが、趣味としてのベランダ菜園というのは思った以上に面白いものです。

 

1歳の娘もいることですし、食育的な意味でもベランダ菜園を続けていきたいです。

メカニカルキーボードK66のためにQMKをビルドする

これは何?

カニカルキーボードK66を手に入れて、レビューしましたが、ただ普通のキーボードとして使うだけでは面白くない・・

inajob.github.io

ということで自作キーボードでよく使われるキーボード用のファームウェアであるQMKをK66でも利用する方法があるようなので、挑戦してみることにしました。

 

あらかじめ断っておきますが、このページの手順を真似てキーボードが文鎮化してしまったとしても、私は一切責任を負いませんので、試してみる方は自己責任でお願いします。後述しますが、同じK66でもこの手法が使えないものも存在するようです。

 

情報源

Wormier Docs - Wormier Docs

このURLにアクセスするとK66で利用できるQMKのビルド方法などが紹介されています。現在もアクティブに活動しているので、以降の記事の内容は古くなっている可能性があります。最新の情報は上記のURLなので、実際にK66用にQMKをビルドしようとしている方は、上記URLを参考にするとよいと思います。

 

QMKをそのまま利用できないのか?

QMKの本系は特定のプロセッサ向けに作られており、AVR(ATMega32u4)やARM(STM32系)などメジャーなマイコンの場合は本家のQMKそのまま利用できることがほとんどです。

また、自作キーボードの場合は自分で利用するCPUを選ぶので、QMKの対応しているCPUを選ぶでしょう。

しかし今回は既製品であるK66です。このキーボードに搭載されているのはARM Crotex-m0のIC 「VS11K15A」です。

f:id:inajob:20210616220742p:plain

全く聞いたことがないICですが、これはeVisionという会社の物らしく、さらに調べるとSonixという会社のSN32系のICと互換性があるようです(全く同じでマーキングが違うのか、互換性のある別物なのかは自分はよくわかってないです。)

 

ということでSN32系のIC用にQMKを移植する必要があります。

先人の歩み

はっきり言ってこの作業、自分にはお手上げです。普段はArduinoでぬるま湯開発しているので、ARMの、しかも聞いたこともないメーカーのICなんて何から手を付けて良いかわかりません。

 

しかし、今回は先人がいます。はじめに紹介したURLの内容の通りに進めれば、K66用のQMKがビルドできるという事なので、その手順に従って作業していくことにしました。

ICの書き換えはどうやるの?

一般的にはこのような組み込み用のマイコンファームウェアを読み出したり、書き込んだりするためには、ICSPとかJTAGとか、そういう書き込み用の端子に専用の書き込み器を接続することが多いです。K66の場合もどうやらJTAGが利用できるようですが、先人はもっと簡単な方法を発見していました。

 

HIDデバイスとして認識されているキーボードに特定のシーケンスでアクセスすることで、書き込みモードに切り替えるという技により、専用の書き込み機などを使わずにファームウェアの書き換えを実現しています。

womier-flasher/main.py at master · wormier-docs/womier-flasher · GitHub (この行ですね)

この機能はオリジナルのK66のファームウェアに実装されているのだと思います。(確証は無いです・・)

Jumploader

さて、ICの書き換え方法がわかりました。それっぽいファームウェアを作って、早速書き換えてみたいのですが、下手なファームウェアを書き込むと速攻でキーボードが「文鎮化」してしまいます。

文鎮化しても、何度も書き換えて試せばよいじゃない?と思われるかもしれませんが、前述した書き込みモードへの切り替え機能自体を壊してしまうと、もう簡単に書き換えることが出来なくなってしまいます。

(おそらくJTAGなどを使えば、この状態からでも書き込みできるとは思いますが、はんだ付けや専用の器具が必要となります。)

ということで、役立つのがJumploaderです。マイコンのブート時に実行される先頭部分にこのJumploaderを書き込みます。このJumploaderはキーボード用に最適化されており、通常起動時は何もせず素通りし特定の番地のプログラムへジャンプします。

しかし、マイコン起動時にBackSpaceを押しっぱなしにしておくことで、書き込み待機状態になります。

 

このJumpLoaderさえうまく書き込んでしまえば、変なファームウェアを書き込んでしまっても、BackSpaceを押しっぱなしにしてUSBケーブルを抜き挿しすることで、書き込みできる状態に出来ます。

 

ソースコードはこれっぽいです。 GitHub - xyzz/sn32f260-keyboard-bootloader

f:id:inajob:20210627215011p:plain

WomierFlasher

さて、ここまでの流れをワンタッチで実行することが出来るソフトウェアが公開されています。それがWomierFlasherです。

「オリジナルファームウェアを書き込み待機状態に切り替える」「Jumploaderを書き込む」「オリジナルのファームウェアを書き戻す」「QMKのバイナリを書き込む」

といった作業がGUIでポチポチで実行できます。

f:id:inajob:20210627215035p:plain

QMKのビルド

さて、ここまでわかれば後はK66用のQMKをビルドするだけです。といいつつ、ここで無茶苦茶ハマってしまいました。

どうも、ARM用GCCのバージョン依存によるもののようで、誤ったバージョンだと、ビルドが失敗したり、ビルドはうまくいくが、完成したファームウェア何かおかしいというようなことが起きました。

 

何かおかしいというのは、症状はいろいろあるのですが、、「初めに押したキーが押しっぱなしになってしまう」「LEDのアニメーションが停止し、キーボードとしても無反応となる」などです。

 

さて、どうやったら正しいファームウェアが作れるのか・・いろいろな組み合わせを試してみました。

SN32用のQMKの系譜

smp4488/qmk_firmware

https://github.com/smp4488/qmk_firmware/tree/womier-k66-rgb-support/keyboards/womier/k66

これがQMKからforkされたSN32用のQMKです。

 

SonixQMK/qmk_firmware

https://github.com/SonixQMK/qmk_firmware

さらにこれ、名前的にはこれがSonixのIC用のQMKのリポジトリのように見えます。(しかしここにはK66のサポートはありません。)

 

toastdb/qmk_firmware

https://github.com/toastdb/qmk_firmware/tree/womier_k66

そしてこれです。このtoastdb/qmk_firmwareがいま一番アクティブに開発されているリポジトリのように見えます。

 

また、このキーボードに搭載されているサイドLEDはまだ制御できないようで、絶賛開発中のようです。(もしかしたらサイドLEDが動くブランチがあるかもしれません)

ビルドできた組み合わせ

前述のQMKのリポジトリの中で自分がうまくビルドできたのは1つ目のsmp4488/qmk_firmwareと3つ目のtoastdb/qmk_firmwareでした。

 

ビルド環境の再現性を保つためにDockerで環境を整備することにしました。QMKのインストーラがインストールするARM用のGCCが期待したバージョンとは違うため、別途ダウンロードした古いバージョンのARM用GCCをインストールする必要がありました。

 

細かい手順はgistにまとめました。

gist.github.com

K66のDiscordにはtoastdb/qmk_firmwareの作者の方がいて、どうもこの手順のGCCとは違うバージョンのようなのですが、自分の場合はこの手順でないと何か動作のおかしいファームウェアが生成されてしまいました。

 

ただ、ごくまれにキーボードが固まってしまう現象が発生することを確認しています。K66のDiscordでは、このような問題を話題にしている人がいないことから、なにかこの手順に問題があるような気がしていますが、まだ原因不明です。

何かわかればこのページを更新しようと思います。

QMKで遊ぶ

ここまでくればQMKを使った自作キーボードと同じようにキーをカスタマイズすることが出来ます。

自分はFn+Spaceを「かな」、Fn+右Altを「英数」に割り当てて、簡単に日本語入力の切り替えができるようにしてみました。結構便利です。

この手順を試す際の罠

Discordでいろいろな方の話を見ていると、同じK66でも搭載されているICが違うものがあるようです。この場合はこの記事の手順は利用できません。

(特に私が紹介しているBanggoodにおいても、同じICのものが届くとは限らないと思います。K66を購入した方は、ぜひ私にどのICが搭載されていたか教えてください。)

まとめ

カニカルキーボードが触ってみたくて買ったK66ですが、思わぬHackが楽しめました。調べていく中で、JumploaderSN32用の移植K66専用の対応、、と様々な人たちの功績の積み重ねがあることを知りました。

ARM系のマイコンを深く触ったことがなかったのですが、まだまだ勉強が必要だなと思いました。ちょっとソースコードを見たところChibiOSというRTOSを使ってマイコン間の差異を吸収しているようでした。ChibiOS・・ 学ぶことは多そうです・・

 

Arduboy FX Mod-ChipによるArduboyのFX化

Arduboy FX Mod-Chipとは?

Arduboyというのは、皆さんご存知「クレジットカードサイズの携帯ゲーム機」です。

クラウドファンディング発祥で、オープンソース、誰でもゲームを作ることが出来るため世界中で多くの人に愛されている素敵な携帯ゲーム機です。

 

そんなArduboyですが、最近新しいバージョンである「Arduboy FX」が登場しました。

Arduboy – Buy Now

f:id:inajob:20210609125534p:plain

Arduboy FXはArduboyにFlashメモリチップを追加したものです。通常のArduboyでは、パソコンから書き込んだゲームを一度に1種類しか持ち歩けないのですが、Arduboy FXでは、このFlashメモリチップのおかげで、200種類以上のゲームを切り替えながら遊ぶことが出来るのです。

 

Arduboy FXの元となるアイデアは、Arduboyのコミュニティから生み出された「FlashCart」を基にしています。

以前、私もFlashCartを入手し、このブログでも以前紹介しています。

inajob.hatenablog.jp

Arduboy FXは、機能的にはArduboy FlashCartと同じなのですが、今までのArduboyの大きさはそのままに、この機能を実現しているというのが特徴です。

 

このArduboy FXですが、その設計は今までのArduboyに追加で「Arduboy FX Mod-Chip」をはんだ付けすることで、実現されています。おそらく基板を再設計するコストをかけないという工夫なのだと思いますが、その副作用として「Arduboy FX Mod-Chip」のみを購入することで、手元のArduboyを「Arduboy FX化」することが出来るのです。

f:id:inajob:20210609125619p:plain

という事で、私も「Arduboy FX Mod-Chip」を手に入れたので、これを使って手元のArduboyをFX化する様子を紹介していきたいと思います。

 

Arduboy FX化の手順

FX化の手順については、公式ページに非常に丁寧な解説があります。今回もこの手順に従って作業していきます。

Arduboy – Start FX

 

Arduboy FX Mod-Chipの様子

これが、Arduboy FX Mod-Chipです。フレキシブル基板で作られた、ユニークな形をした追加基板です。

f:id:inajob:20210609125736p:plain

裏面にはコミュニティで活躍するゲーム開発者の皆さんのドット絵が敷き詰められていて、コミュニティへの愛を感じます。

f:id:inajob:20210609125705p:plain

この不思議な形状ですが、既存のArduboyの部品と干渉しないような形を追求した結果、こうなったようです。 

Arduboyの分解

裏面の4隅のネジを外すことでArduboyを分解します。

このネジが小さい割に固く締まっているため、ネジ山を舐めないようにうまく外す必要があります。

精密ドライバーとラジオペンチをうまく使って、片手でドライバーを下に押しつけつつ、もう片方の手でラジオペンチを使って、ねじを緩めることで、うまくねじを緩めることが出来ました。

f:id:inajob:20210609125948p:plain

裏蓋を開けると、非常に薄いバッテリーが出てきますが、このバッテリーを持ち上げすぎると、バッテリーの端子が折れてしまうので注意が必要です。そっと覗き込むように少しだけ持ち上げるだけにしておきましょう。

一時的にスピーカーの配線を外す

Arduboy FX Mod-Chipを取り付ける際に、スピーカーの配線が邪魔なので、一度はんだごてを使い配線を外します

 

f:id:inajob:20210609130031p:plain

↑Before、 ↓After

f:id:inajob:20210609130057p:plain

パッドにはんだごてを当てることで、配線を外すことが出来ましたが、熱しすぎたのか、配線の被覆が少し溶けて中の導線が露出してしまいました。特に実害はありませんでしたが、作業する際は注意が必要です。

Arduboy FX Mod-Chipを仮配置する

バッテリーの裏に滑り込ませるようにしてArduboy FX Mod-Chipを配置します。スピーカーのケーブルは、Arduboy FX Mode-Chipの上を通すようにします。

f:id:inajob:20210609130148p:plain

パッドにはんだを盛る

説明の動画では、Arduboy FX Mod-Chipを重ねた上からはんだ付けしていますが、なんとなく、先にArduboy側の基板のパッドにはんだを盛って、Mod-Chipの上からはんだごてで熱することで、はんだ付けする方法を実施しました。

 

f:id:inajob:20210609130215p:plain

8か所のパッドをすべてはんだ付けしました。

f:id:inajob:20210609130234p:plain

スピーカーの配線を元に戻す

Arduboy FX Mod-Chipのパッドがすべてはんだ付け出来たら、スピーカの配線を再びはんだ付けします。

f:id:inajob:20210609130314p:plain

これでハードウェアの改造は完了です。

蓋をする前に、ソフトウェアについても更新します。

 

ファームウェアの更新

Arduboy FX化のためにはArduboyのブートローダーを書き換える必要があります。

普通なら、ArduboyのISCP端子から書き込むところですが、Arduboy  FX Mod-Chipにはこの機能が内蔵されています。起動中にArduboyの「リセットボタン」を5秒間押し続けることで、この機能が発動しブートローダを書き換えます。

 

しかし、この「リセットボタン」を強く押し続けるとスイッチがもげてしまう事象があるようで、そうならないように自分はジャンパワイヤを使ってRSTピンとGNDピンをショートさせることでこの「リセットボタンを5秒間押し続ける」ことを実現しました。

f:id:inajob:20210609130342p:plain

これがうまくいくとArduboy FXのブートスクリーンが出てきて、ファームウェアの更新は完了です。

f:id:inajob:20210609130415p:plain

裏蓋を戻す

裏蓋をつけて、再び4つのネジを締めます。

これにて作業完了です。

Arduboy FXを楽しむ

Arduboy FXには200以上のゲームが収録されており、PCとつなぐことなく、自由に切り替えて遊ぶことが出来ます。

これらのゲームは、コミュニティの皆さんが作ったもので、何を隠そう自分が作ったゲームもいくつか収録されています。

自分が作ったゲームが市販の製品にバンドルされているというは、何ともうれしいです。

 

また、このFlashメモリは、パソコンから中身を書き換えることが出来るので、すでに入っているゲームを削除したり、オリジナルのゲームを追加することもできます。

 

加えて、プログラムからFlashメモリにアクセスすることもできるので、通常のArduboyでは容量不足で実現できなかったようなゲームも、Arduboy FXであれば実現できるかもしれません。

f:id:inajob:20210609132227p:plain

なんとなくケースに「FX」と書いてみた。



 

Arduboy FX Mod-Chipの構成

f:id:inajob:20210610072113p:plain



このチップには2つのICが搭載されています。1つはフラッシュメモリICであるW25Q128です。これはこのチップの仕組みを考えれば当然搭載されるものです。

もう一つはATtiny85です。これはFlashCartには搭載されていないもので、このArduboy FX Mod-Chipには必須のものではなさそうです。

このATtiny85は、この前の作業で実施した「リセットボタンを5秒間押し続ける」時に起動する「Arduboy本体のブートローダーを更新する」ために存在しています。

 

Arduboy FX Mod-Chip起動時のその1回のためにだけ存在しているという、一見無駄なチップのようですが、これがあるおかげで、既存のArduboyを比較的簡単にFX化することが出来ます。

 

既製品をアップデートする際にはこういう手法が一般的なのでしょうか?とにかく面白いアイデアだと感じました。

 

まとめ

Arduboy FX Mod-Chipを使うことで、簡単に既存のArduboyをFX化することが出来ました。このArduboy FX Mod-Chipは調べてみると面白く、開発者の工夫がにじみ出ています。

 

Arduboy FXはコミュニティベースで開発が行われ、収録されているゲームもコミュニティユーザによってつくられたものです。ユーザに愛されているArduboyだからこそできる、素晴らしいアップデートだと思います。

 

Arduboyを持っている方も、まだ持っていない方も、ぜひArduboy FXを手に入れてみてください。(Mod-Chip単品でも、組みこみ済みのArduboy FXもどちらも販売しています)

arduboy.com

 

我らが千石電商でも購入できるようです!

www.sengoku.co.jp

みんなでテープカッターを作る試みの紹介 #栗原精機 #テープカッター

事の始まり

この話はとある町工場の社長さんが、切削加工のテープカッターの図面公開することから始まりました。

 

 この図面はまぁ、結構単純なものでしたが、こうやってデジタルデータとして瞬時に設計を世の中に共有できるというのは、結構面白いと感じました。

 

もちろん3Dプリンタの世界ではThingiverseなどで日常的に行われているのですが、町工場からそういう動きが出てくるというのは非常に面白いと感じました。

 

ということで、自分も一つ乗ってみることにしました。

 

データ起こしと3Dプリント

公開されているのは単なるpdfによる図面であるため、これをCADデータに起こす必要があります。折角なので最近覚えたFreeCADを使ってこの図面をデータ化しました。

f:id:inajob:20210508234206p:plain

比較的単純な図面だったので、すぐにデータ化することが出来ました。金属加工装置が家にあればここからCAMを使って加工データを作り、機械に流せばよいのですが・・

 

我が家にはそんな装置はありません。

 

しかし、我が家には3Dプリンタがあります!

inajob.hatenablog.jp

ということで、ひとまず何も考えずこのデータを3Dプリントしてみます。

データさえあればあとは簡単!

f:id:inajob:20210508234124p:plain

一応それっぽいものが作れましたが、肝心のセロハンテープの切断が出来ません。(おそらくマスキングテープのようなものであれば切断できるかもしれませんが、手元になかったので確認できず)もともと金属加工で作るためのデータであるため、プラスチックの3Dプリントで作っても、鋭利さが足りずセロハンテープが切断できないという事のようです。

3Dプリンタでテープカッターを作るための試行錯誤

ちょっと悔しいので、3Dプリンタでも作成できるテープカッターに改造できないかなと実験を始めました。

 

まずは、鋭利な形状を3Dプリンタで作る実験です。様々な向きで尖ったエッジを印刷し、テープがカットできるかを確認します。

f:id:inajob:20210508233526p:plain

予想はしていましたが、X,Y,Zのどの角度でプリントしても、まともな鋭角は得られませんでした。鋭さも問題ですが、細さゆえの脆さも大きな問題だと感じました。

 

ともかく3Dプリンタを使ってカッターナイフのような鋭利な形状を作る事は難しいようでした。

しかし、そもそもセロハンテープをカットするという目的においてカッターナイフのような薄い鋭利さが必要なのかどうか?という点が疑問になり、次に「ギザギザ」のモデルをいくつか印刷してみました。

f:id:inajob:20210508233603p:plain

うれしいことに、この形状は、セロハンテープを切断することが出来ました。

f:id:inajob:20210508233630p:plain

手元にあった市販のプラスチック製のテープカッターを観察したところ、これとよく似た形状であることに気付きました。

f:id:inajob:20210508233716p:plain

ここで気づいたのは、セロハンテープ切断に必要なのはカッターナイフのような「面」での鋭利さではなく、このギザギザの角のような「点」での鋭利さだという事です。

この「点」での鋭利さを利用してセロハンテープの一部に小さな穴をあけ、その穴から亀裂が広がることでセロハンテープを切断するのが、このカッターの仕組みのようだと発見しました。

 

まぁそんな先人の発見を追体験したところで、この「ギザギザ」を先程の図面に導入します。

f:id:inajob:20210508234355p:plain

ギザギザ部分がオーバーハングになるため、なるべく浅い角度になるようかなりギザギザの数を少なくしました。
先程の発見が正しければ、このギザギザの角が最悪1つでもあればテープは切断できるため、この程度のギザギザで十分だと考えました。

 

そしてできたものがこちら。

f:id:inajob:20210508234630p:plain

やった!この設計でテープを切断することが出来ました。

f:id:inajob:20210508234731p:plain

まぁ切断面はフニャフニャで、市販の物とは違いますが、まぁテープカッターとしては機能したのでヨシとしましょう。

 

得られた気づきとインダストリアルデザインの深い世界

 ここで、このテープカッターの元の設計のトレードオフに気付きました。

普通のテープカッターは下の写真のようにテープを張っている箇所が長くなっています。一方このテープカッターにはこのような長い箇所がありません。

f:id:inajob:20210508234929p:plain

これにより今回作成したテープカッターは小型化という利点を獲得していますが、その一方でテープを引きはがす際にちょっと苦労が必要になっていることに気付きました。

また、今回のテープカッターは(おそらく)掘削機で加工しやすいよう、背面がテープカッター本体によりふさがれている(下図の黄色い部分)ため、左利きの人にはさらに使いにくくなっていることにも気づきました。

f:id:inajob:20210508235552p:plain

この点でも一般的な市販のテープカッターはよくできており、長くテープが伸びている箇所に両方から手を入れることが出来ます。

シンプルだと思っていたテープカッターですが、デザインの細部には様々な工夫が施されていることに気付きました。

 

いやぁ、インダストリアルデザインって奥が深いなぁ・・と感じました。

 

と、まぁここまでが自分のテープカッター作成記でした。

単に図面をデータ化して3Dプリンタで出力するだけかな、と思っていましたが、思った以上に長い旅になりました。おかげでインダストリアルデザインの深い世界の一部を垣間見ることが出来ました。

 

改めて、この図面を公開してくだったことに感謝します。

 

他の方々の作例紹介

さて、ここからはこの図面を基に作られた様々なテープカッターの事例を紹介します。

 

ひろさんの作例

 やすりで鋭利にすることでテープをカットできるように改造しています。

 その後サランラップのカッターを取り付ける改造を行い、さらに使いやすくしています。

 

李丞株さんの作例

 

横浜市にある小さな町工場 高谷精密工業 さんの作例

 

独自のエンボス加工が素敵です。

 ㈲コバ 取締役副社長 さんの作例

 

独自のデザインに改造されており、なんと自分が気づいた問題点である両利き対応されています。

内田部長@水貝製作所 さんの作例

加工動画が見物です。

 Labonos_PR さんの作例

 【公式】AUTOLAB株式会社_藤原崇義 さんの作例

 眞鍋玲 さんの作例

 

 皆さんすごいですね。