結論:対応しているCPUならば問題なく使える。

先日、JJUG CCC 2025 Fallに参加し、「native のその先へ!System.currentTimeMillis() の実装を見てみよう! / YujiSoftware」のセッションを聴講した。個人的にnativeメソッドの先はあまり考えたことがなく、興味深いテーマだったからだ。currentTimeMillis()の内容を追っていくとJVMのソースに定義が書かれており、openJDK実装ならば、OSによって呼び出すシステムコールが変わる。最終的にはアランブラのRDTSC命令にたどり着くというもの。

RDTSC命令は学生の頃に触れたこともあり(何?19年前?)、やっぱりアレになるのか...。と懐かしく思ったのだが、RDTSC命令は発行時のクロック数を取得するものであり、最近のCPUでは当たり前のようにあるクロック周波数が可変するようなケースではうまく動かないのでは?という疑問が湧き、(実際Athlon64では可変の影響を受けたようで、過去の記事でも言及している。)どうやっているのか気になったので調べてみた。

CPUクロックに基づく相対時刻の計測
 ここの解説が一番わかりやすい。
 リンク先の言葉を借りると、CPUの動作クロック毎に積算されるカウンタ(TSC)には以下の3タイプがある
  ①CPUの動作クロック毎に積算されるTSC
  ②CPUの動作クロックが変動してもカウンタ積算間隔は一定となる補償機能を追加したConstant TSC
  ③ACPIのP/C/T状態すべてにおいてカウンタ積算間隔が一定で動作する補償機能を追加したInvariant TSC
 で、②③ならクロック数が変動しても使えるということだ。
 ※out-of-orderの影響を受けないRDTSCP命令があるというのもここで知った。

タイマーカウンタ その3
 TSCがIntelとAMDでどの世代から切り替わったのか調べている記事。
 当時自分がAthlon64(K8世代)のTSCは①のTSCで、やはりクロックが可変すると影響を受けていたようだ。その後しばらくしてConstant TSC、Invariant TSC対応のCPUが出ている。2010年代前半には題意の疑問は解消されていたのだな。

と、ここまで調べて同僚と本件を会話したら、Armはどうなのか?と言われた。
調べてみるとArmではRDTSC命令自体が無いようである。アセンブラの世界にまで降りると移植性はなくなるのだな。

おまけ
 ・マルウェアによるRDTSC命令の利用
 マルウェアがどのようにRDTSC命令を使うのか?という記事。クロックサイクル数、時間の経過の観測によってプログラムの存在する宇宙の状態(VMの中かどうか)を観測するような...天文学っぽい感じを受けて興味深い。

携帯電話を買い替えた。約17年ぶりである。
他の人に言うと割とビックリされるが、幸いスマホがないと大変という生活ではなく、電話+メール専用機として使っていたらこんなに経ってしまったという感覚である。あわよくばバッテリーがヘタれるまでは...と考えていたが、手持ちのP705iμは第三世代携帯電話 (FOMA) 端末であり、2026年3月末に「FOMA」および「iモード」がサービス終了となるため、致し方がない。(電話の度にサービス終了予告のアナウンスが入るようになったのも使い心地が悪かった。)

春先からしばらく携帯ショップに行って最近の端末を見ていたが、どうも小さいもの好きの自分としては惹かれる端末はほとんどなく、どれも端末が大きく、重くなりそうで嫌だなと思ってた。MNPもあるし、もはやドコモにこだわらなくてもよいかと考えて色々探してたらIIJの乗り換えキャンペーンで紹介されていたjelly starが良さそうだったので、こちらにした。(ガラケースタイルを維持するという選択肢もあったが、やはりP705iμと比べると今のガラケーはどれもデカい作りになっていて魅力を感じなかった。)
jelly_star_1.jpg

P705iμと並べるとjelly starの方がやや短いが、圧倒的に分厚い。だが重さはあまり変わらない感覚だ。
jelly_star_vs_P705imu_1.jpg

重ねてみると横はほぼ同サイズ。
jelly_star_vs_P705imu_2.jpg

セットアップの様子。こんなに画面が小さいと文字を打つのが大変そうだと思ったが、ちゃんと打てる。
jelly_star_2.jpg
使い始めたばかりなので、使用感が分かるのは今後になる。現時点での感想はというと、jelly starは最初から液晶の保護シールが本体に付いているのが素晴らしい!大抵新しいデバイスを買ってもこの保護シートを貼るという作業がつきもので、その度に気泡が入らないかという心配をして億劫になりがちなので、最初から貼ってあるというのは大変ありがたい。

開通手続き後、十分程度で圏外になったP705iμ。もはや電話はできなくなったが、買ったときの様子と比較すると約17年の風格がある。これはこれで記念に残しておくかな。
p705imu_last.jpg

しばらくは駅の近くで車を必要としない生活をしていたのだが、娘が誕生し早3年、
足となる車があるとやはり便利だなと思うようになり、最近車を購入した。

購入したのは中古のパジェロミニなのだが、せめてハンドルぐらいは新品気分を味わいたいと思って
純正品オプションのハンドルカバーを購入。2012年に終売となった車種のハンドルカバーを付ける記録なんぞ、あまり役に立たないと思うが残しておこうと思う。
wheel_cover_1.JPG

説明書通り、最初に赤い糸を3つに切って準備。中性洗剤を含ませた雑巾でハンドルを拭いたら意外と汚かった。
ハンドルを180度回転させ、早速位置合わせ。
wheel_cover_2.jpg

ハンドルを元に戻して縫い始める。今見ると5,6手あたりでミスっている...。
wheel_cover_3.jpg

はじめの方こそもたついていたが、1/4超えたあたりからスピードアップ。半周完了。この日は曇りだったので、まだ暑くはなく作業しすやすかったのだが、西日が照らし始めて暑かったのを覚えている。
wheel_cover_4.jpg

残り、半周の半分。ご丁寧にぐるっと反時計回りで縫う形になったが、説明書のアドバイスにあるようにここのアングル固定でハンドルを回しながらやったほうがラクである。(穴の位置が確認しやすい。)
wheel_cover_5.jpg

ぐるっと回って完了の図。2時時間20分ほどかかった。
wheel_cover_6.jpg

裁縫という経験は30年ぶりぐらいであろうか。
なかなか懐かしい体験だった。
この日は付けた後の試運転をしてみたが、なかなかハンドルが握りやすくなって良い感じである。

しばらく作りかけて放置していたchoco60(v1)が、GW中にようやく完成。
交換を見据えてソケット化した静音軸スイッチ+スプリング交換して変荷重レイアウトにしたのがこだわりポイント。
choco60.jpg
このように分割形式でも使える!
choco60_splitted.jpg

どうも世の中に自作キーボードなる世界があるというのはHHKBのユーザーミートアップで知ったのだが、HHKB持っているし、静電容量スイッチは無いみたいだからいいかぁ‥とその場ではスルーしていた。

その後、しばらくして調べてみるとHHKBと同じ配列ベースの自作キーボードがいくつかあることを知り、興味があったので技術書典に行ってみた。そのときに買いたいと思っていたのがchoco60だったのだが、残念ながらその場で売り切れ。何も買わないのももったいないと思い購入したのが、『Learning Custom Mechanical Keyboard』(通称: #白ウサ本)だった。
sirousa.jpg
実際に作る前に読んでおくと自作キーボードに必要な知識を得られる。コンパクトにノウハウがまとめられた良い本だった。知識を得た上で実際に自作キーボードの世界にいざ入門!

やりたかったこと
・HHKBと同じレイアウトで
・HHKBよりもキータッチを軽く、静かにしたい

やったこと(準備編)
1⃣キースイッチの選定
 遊舎工房に行って実際に様々なスイッチを試してみた。良さげな静音軸スイッチをいくつか選んで一個ずつ購入。あとは家で押しまくって何が良いのか決める。
 自分の中ではHealios、画像にはないけどGateron InkのSilent Blackが良かった。
 やはり価格相応という感じ。Healiosはv2があり、v1よりもv2のほうが良い印象。
key_sw.png


2⃣キーキャップ準備
 ハマると自作キーボードの世界で一番散財しやすいポイントだと思った。こだわると$100オーダーの世界。でも最も目につくポイントでもある。また、手元に届くまで平気で半年以上はかかるので気長に考える必要がある。
 今回はGMK RED SAMURAIをベースにしている。

 ベースキットだけでchoco60に必要な分割スペースバーが手に入るのがポイントだった。
 ただ、GMK RED SAMURAIには1Uスペース、コマンドキーでよさげなものがないので、積み状態になっていた別キット(GMK 9009)から拝借。


3⃣潤滑とスプリング交換
healios_disassembly.jpg
 潤滑は「recompile keys キースイッチ ベストプラクティス」を参考にした。この辺の作業が一番コツコツ感がある。
 スプリング交換はやっているうちにどのへんが良いのかわからなくなり(気づくとスプリングの種類が増えている)、完全に迷宮に入り込んだ感がある。
keyboard_spring2.jpg

keyboard_spring3.jpg
個人的にはHHKBよりも軽くしたいという当初の思惑があって、45sを上限としたが、軽すぎるのも考えものだということがわかったので、今後は重い方向にトライしても面白いのかもしれない。


4⃣キー配置を決める
 45s~20sまでのスプリングを使って東プレRealforceっぽく変荷重にしてみた。


5⃣ソケット対応
millmax_socket2.png
 完成後にキースイッチ交換したくなると思い、Mill-Max 3305-0-15-80-47-27-10-0を使用。個体によってはタイトでソケットが入りにくい場合がある。面倒でも金属ヤスリで足の部分を少し削ると良い。無理にソケットを付けようとすると足が折れて、付けるのがますます困難になる。


やったこと(工作編)
基本的に公式のビルドログに沿ってやったぐらいである。
少し自分のやったこと事を補足すると
・コンスルーピンヘッダはんだ付け後のピン除去
choco60_pro_micro.jpg
 ボトムプレートと干渉しないように、はんだ固定側のピンは切って、高さを切り詰めた。

・ファームウェア書き込み
 「自作キーボード温泉街の歩き方 (初心者編)自作キーボードにファームウェアを書き込む」を参考にした。

・ダイオードのはんだ付けが終わったらピンで一度通電テスト。
 基板のみで文字が打てるのかをまず確認した。

・スタビライザーのlube
 この動画を参考にした。

choco60_band_aid_mod.jpg
 底面がぶつかるところにバンドエイドを仕込んでクッション代わりにするのをband aid modと呼ぶらしい。
 たしかにやたらと静かになる。

作ってわかったこと
・キーは軽ければ軽いほど楽...とは限らない
 適度に反発力がないとかえって疲れるし、タイプミスも多くなる。(35s以上が良さそう。)
・TRRSケーブルはふにゃふにゃのほうが取り回ししやすい。
 スリーブ付きは見た目が良いが、ケーブルが固くなり取り回しが難しくなる。
・HHKB準拠のコマンドキーを集めるのが割りと大変。choco60_superkey.jpg
 HHKBに寄せてると1.5Uのコマンドキーが必要になるが、この大きさのコマンドキーは割と希少。(手持ちだとGMK9009の拡張パーツぐらいしかない)
 HHKBに慣れているのでALTと交換したくはないのが悩みのタネ。
・変荷重レイアウトが難しい。単に人差し指中指から遠いほど軽くするものではないと思う。例えば...
 ①<>→対になっているキーは重さを揃えたい。
 ②zxcv→Ctrlと組み合せると人差し指も割と使う領域なのでこちらは揃えた。

 ①②は作りながら対応したが、今後は更に以下も追加すべきと考える。
 ③wasd→ゲームを考えるとこれも重さを揃えるべき領域。
・スプリング交換後の静音性比較
 面倒で試していなかったが、スプリング交換後にお気に入りスイッチの音比較をやってみたほうが良いかもしれない。初期スプリング時の比較評価とはまた違った評価になる可能性がある。もしかしたら安いスイッチも候補にまた選ばれるかもしれない。当時のログを見返すとHealiosとSilent black Inkだけでも相当悩んでいた。
・ソケットの厚みにそこまでこだわらなくても良かった。
 途中、Mill-Max 7305-0-15-15-47-27-10-0から3305-0-15-80-47-27-10-0に鞍替えしたが、スイッチプレートによってスイッチが浮くのであまり拘る必要はなかったかもしれない。millmax_socket.jpg
・ソケット対応にするにははんだごてのスキルを上げる必要がある。
 ソケットのところだけは共晶ハンダを使って流れやすくしたが、2~3割はミスっている気がする。
・スイッチブレートの位置決め大事。
 →これがヘマるとキーボード全体が歪む。一番大事な工程に思えた。
・量産効果の凄さ
 →世界におそらくひとつだけのキーボードが得られる嬉しさはあるが、
  工業製品なのでHHKBは安いという間違った認識も持つようになる。

ちなみにカスタムUSBケーブルは@2zk氏から購入した。
TRRSケーブルだけで難儀していた自分にとって、カスタムUSBケーブル自作はすごすぎる。

今回は好きな様にやってしまえ!と吹っ切ったおかげで初自作ではあったが
自作キーボードの狂気レベルでは一気に4層目ぐらいにたどり着いた。
自作キーボードではqwerty配列に拘る必要すらないという自由度がある。
次はキー配列のカスタマイズに手を出してみたいと思っている。

仕事やってたら普通に参加遅れた。
オンラインセミナーもこの在宅環境下で慣れてきた感じ。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近のコメント

アイテム

  • p705imu_last.jpg
  • jelly_star_1.jpg
  • jelly_star_2.jpg
  • jelly_star_vs_P705imu_1.jpg
  • jelly_star_vs_P705imu_2.jpg
  • wheel_cover_1.JPG
  • wheel_cover_5.jpg
  • wheel_cover_3.jpg
  • wheel_cover_4.jpg
  • wheel_cover_6.jpg

月別 アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 7.9.3