2025/05/23

MacBook Air(M2)の腱鞘炎対策

今日はこんなのを作った小ネタです:
Tilt1
2025年3月にMacBook AirをMid 2017(Intel)からM2に乗り換えてから、性能的には快適に使っています。いちばん驚いたのは、Android Studioで自分用に作っているアプリのビルドが一瞬で終わった時。Intelのときは麦茶を汲みに行ったりする時間があったのに、M2だと目を離した隙に終わっていて、バグで止まったのかと思ったほどでした。
「性能的には」と思わせぶりに書いたのは、春頃から手首と肘の腱鞘炎に悩まされていたのです。でもこれを自分の老化と認識していて、MacBook Airの乗り換えとはリンクしていなかったのでした。ところが一昨日Mastodonを眺めていたら、notestockなどの作者であるおささんが新しいvaioを買ったと呟いていて、その機種の紹介ページを見てみると「タイピング時の手首の疲れを軽減 ディスプレイを開くとキーボード奥側が持ち上がり、タイピングしやすい角度のつくチルトアップヒンジ機構を実現。手首にかかる負担を軽減する(後略)」と書かれているのに目が行きました。さすがvaioと思った次の瞬間「もしかして腱鞘炎はMacBook Air(M2)のせいか」と気が付いてしまいました。そういえば、2代続けて「くさび形」のMacBook Airだったのでフラットな筐体が合うか心配していたのを、すっかり忘れていました。

さっそくチルトさせてみます。周りを見回して、とりあえず段ボールを折って敷いてみました:
Tilt2
あらあら、てきめん楽です。これで1日様子を見ていたら、あれだけ悩まされていた腱鞘炎がすっかり治まりました。高さは2cmぐらいが適当そうです。というわけで、いい感じに恒久対策することにします。

MacBook Airの幅30.41cmと一致して見映えのマシそうなものを探したところ、ちょっと試しただけで使ってなかったセリアのボックスティッシュカバーがジャストサイズ。
Tilt3
これに芯を入れてみます。愛用している和平フレイズさんのミルクパンの空き箱を切って折り癖を付けて、
Tilt4
畳んで両面テープで留めて、ティッシュカバーに入れて丸めて、両面テープで留めたらできあがり。
Tilt5
MacBook Airに敷いて後ろから見てみると、
Tilt6
なんだかシンデレラフィットしています。横から見ると冒頭の写真の通りです(再掲):
Tilt1

歳を取ると、なんでも人のせいにする人もいるようですが、私は自分にベクトルを向けてしまいがちなのかも知れません。不都合があったら柔軟に可能性を考えないといけないなと、あらためて反省した次第です。
いま写真の転送のためにUSBポートを使ったところ、vaioさんの宣伝通りケーブル抜き挿しがやりやすくなっていました。さすがvaioさんは自分たちの使いこなしをユーザーと共有していますね、次にWindows PCを買うときもvaioかなぁ(実はSRX - U101 - type P - CBとvaioノートのユーザーです、もう13年も買ってないけど)。片やAppleさんは… やっぱりデザイン優先なのかな。

以上、何かの参考になれば幸いです。

パドラッパ from MacBook Air (M2)

| | | コメント (0)

2025/05/14

【お知らせ】「電子工作」カテゴリを追加しました【2025/05/16追記】

これまでArduinoSeeed XIAOESP32Raspberry PiTinkerBoardなどを使った電子工作についての記事は「パソコン・インターネット」のカテゴリに入れていたのですが、ボリュームが増えてきたので「電子工作」カテゴリを作って2つのカテゴリを併用することにしました。ご利用下さい(いちばん使うのは私自身だと思いますが〜)。

パドラッパ from MacBook Air (M2)

【2025/05/16追記】
No imageで寂しかったので、ChatGPTさんに『「電子工作」という言葉でイメージする絵を描いてみて下さい』とお願いしてみました。その結果がこちら:
Diy01
ハンダごて周りが間違い探しみたいになっていて興味深いです。ブレッドボードからリードがはみ出すのは心当たりあるかも。
続けて、英語で Please make a image of "Electronics as a DIY project". とお願いしたのがこちら:
Diy02
テスターさん仕事して〜

| | | コメント (0)

2025/05/13

フランスラグビーTOP14でフル動画を観るための会員登録方法

ラグビー日本代表の齋藤直人選手やテビタ・タタフ選手も参戦しているフランスTOP14では、ハイライトだけでなくフルゲームの動画を試合後数日でアップしてくれていて、私も楽しんでいます。この動画、2025年の4月中旬ごろまでは誰でも自由に観られたのですが、4/29にアクセスしたところフル動画と長編ハイライトに南京錠マークが付くようになりました:
T01
結論から言うと無料の会員登録をするだけで、これらの動画は観られるようになります。しかし、そこまでにフランス語の壁があるので少々苦労しました。メモ代わりに登録方法を共有します。

はじめてTOP14サイトに入ると、中央に大きくダイアログが出ます。これがページ翻訳ツールで対応できない第一関門。内容はクッキーについての同意です:
T02
DeepL翻訳したものを畳んでおきます:
受け入れずに続ける→
TOP 14 ウェブサイトへようこそ、
お客様の同意のもと、当社および当社の22のパートナーは、クッキーまたは類似の技術を使用して、本ウェブサイトへのアクセス、IPアドレス、クッキー識別子などの個人データを保存、アクセス、処理しています。一部のパートナーは、あなたのデータを処理するためにあなたの同意を必要とせず、彼らの合法的なビジネス上の利益に依存しています。お客様はいつでも、「詳細を見る」をクリックするか、本ウェブサイトのプライバシーポリシーにアクセスして、同意を撤回したり、正当な利益に基づくデータ処理に異議を唱えたりすることができます。

お客様の個人情報は、以下の目的で処理されます:
パーソナライズされたコンテンツ、正確なジオロケーションデータおよびデバイス分析による識別、重要な機能、視聴者測定、広告、パーソナライズされた広告およびコンテンツ、広告およびコンテンツのパフォーマンス測定、視聴者調査およびサービス開発、ソーシャルネットワーク、デバイスに関する情報の保存および/またはアクセス。

詳しくはこちら 同意して閉じる

最初に「受け入れない」選択があるのが日本の感覚と違ってすごいです。また、"En savoir plus →"側で細かく設定できますが、そこまでする方はご自分で調べて下さい。(日本とは比べものにならないぐらい、細かいです。好感を覚えた私は細かく設定しています。)

続いて右上のCompteから会員登録します。ログアウト状態からのログインもこちらです:
T03
こちらもDeepL翻訳したものを畳んでおきます:
アカウント / チケット発券

マイラグビーコミュニティに参加する
マイラグビーコミュニティであなたの情熱を分かち合いましょう。

アカウントを作成する
会員登録(facebookログイン) 登録方法(Googleログイン)
- または -
サインイン

"Créer un compte"側で細かな情報を入れて登録できますが、そこまでする方はご自分で調べて下さい。その下の左右がFacebook & Googleアカウントを使ったログインで、これらは日本語で登録できますので楽勝です。ここは私もGoogleアカウントを使っています。

登録完了すると、南京錠マークが消えて、フル動画と長編ハイライトが観られるようになりました:
T04

TOP14のレギュラーシーズンは26節あって、先週末が第23節でした。終盤にかけて徐々に2位を引き離してきた首位トゥールーズの齋藤直人は先発して、最後に足が攣ったけれどほぼフル出場。2位ボルドーのテビタ・タタフはしばらく故障離脱していたのですが、今節の後半に戻ってきました(まだ観ていません)。これまでRWC:ラグビーワールドカップでしか知らなかった選手のプレーもたくさん観られて、ますますラグビー好きに拍車が掛かっています。会員登録が必要になったのは、AI学習の標的にされたのかも知れないな、と邪推しています。
以上、何かの参考になれば幸いです。

パドラッパ from MacBook Air (M2)

| | | コメント (0)

2025/03/20

Wi-Fi・BLEハイブリッドリモコンのカーソル泳ぎ対策

主にラグビーをテレビ観戦するために作ったWi-Fi・BLEハイブリッドリモコンを 前々回前回の2回で紹介しました。特に前回のスリープモード導入で復帰後のBLE接続が安定して使いやすくなりました。

ただ、ひとつ引っかかりが残っていました。何らかの不具合が生じて処理が著しく遅くなる(またはフリーズする)とウォッチドッグタイマが検知して自動的にリブートし、そのリブート後にジョイスティックの校正をするようになっているのですが、ジョイスティックを触っている時にリブートが掛かると中点でないところを中点だとみなして校正してしまうので、手放すとカーソルが勝手に動き出してしまうのです。ThinkPadのトラックポイントのようなポインティング・スティックを使ったことがある人の多くが経験した「カーソルが泳ぐ」という現象です。これが自爆的に発生してしまうのでした。

今回マイコンに(紆余曲折を経て)ESP32を使っているため、内部のフラッシュメモリであるSPIFFSを使ってCALデータを保存することにしました。幸い使い方はExamplesのSPIFFS_Test.inoを読んだらすぐ分かりました。ところが動かそうとすると一筋縄ではいかず、
E (98) SPIFFS: mount failed, -10025
というエラーが出て暫くしてリブートが掛かってしまいます。実はこれ、SPIFFSを初めて使うときに SPIFFS.begin(true) でフォーマットが掛かるのですが、この作業に40秒ぐらいかかり、その完了前にウォッチドッグタイマが作動していたのでした。これはフォーマットの時だけWDTを60秒にすることで解消しました。また、CALデータが古くなるとまたカーソルが泳ぎだす可能性があるので、Optionを押しながら起動することでCALデータを書き換えるように仕込みました。

ついでにキーアサインを1つ変更しています。RugbyPass TVでフルスクリーンにするときだけ使える'F'をOption+ESCに割り当てていたのですが、それよりもFirefoxのタブを閉じる方がよく使うので、'Ctrl+w'に変更しています。この変更を加えた回路図が次です:
Jst14
修正したコードはGitHubに置いておきました。コード中のコメント等も見直しています。

以上、何かの参考になれば幸いです。

パドラッパ from MacBook Air (M2)

| | | コメント (0)

2025/03/16

Wi-Fi・BLEハイブリッドリモコンへのスリープモード導入

まずはお詫びから。一昨日の記事の電流測定時に校正方法を間違えており、電流値が約10%大きくなっていました。記事は修正済みです。

さて、
Wi-Fiを切っても(WiFi.disconnect(true);しても)消費電流が44mA39mAも残ってしまうことからスリープを入れることを検討する方が良さそうだと書いていました。今回使っているESP32にはスリープモードがライトとディープの2つあり、再起動のトリガーも複数用意されていて細かく設定できます。私の大雑把な理解では、ディープスリープからの再起動は電源投入に相当し(Arduinoでいうとグローバルパラメータを読み込んでsetup()からスタートする)、ライトスリープからの再起動はメモリ内容などを保持したままスリープに入った位置から動き出します。
今回の場合、スリープから再起動する時にジョイスティックの校正などを飛ばして素早く動かしたいので、ライトスリープを使ってみました。
ユースケースを考えると、スリープに落ちるときはリモコンを置きっぱなしにしているはずです。また、スリープに落ちているかどうかを意識して、特定のスイッチを押して再起動するのは煩わしい。そこで、ESP32に備わっているタッチセンサー機能を使ってみました。
ブレッドボードでタッチセンサー対応ポートにリード線を繋ぎ、プラ板に貼った銅箔テープと接合して銅箔の裏側からタッチして値を読んでみると、触らない時の値は大体40台後半で、触ると値が3〜8ぐらい小さくなることが分かりました。また、この値が銅箔テープの長さなどによって変わることも分かりました。この感じだと、あらかじめ閾値を決め打ちしない方が良さそうだと思い、スリープに入る前に10回測定して平均値を求め、それよりも2だけ小さい値を閾値にすれば安定して動作しそうだと見当を付けました。

次の写真が、ケース内壁の手前側(ジョイスティックのある側)へ銅箔テープを貼っているところです:
Jst09
銅箔テープの端の方、あとでESP32のタッチセンサー対応ポート(今回はT2 = GPIO2)に接続しやすいところへリード線をはんだ付けしています。リード線の反対側にはピンヘッダーを付けるので、先にピンの絶縁用に熱収縮チューブを通してあります。
銅箔が剥き出しのままだとショートの危険があるので、上から絶縁用の紙シールを貼りました:
Jst10
そしてケースに基板を収めて、あらかじめタッチセンサー対応ポートに取り付けたソケットと、リード線に付けたピンヘッダーを嵌合します:
Jst11
これでハード面の改造は終了です。ソフトの方は、Wi-FiとBLEそれぞれにタイマーを設けてタイムアウトしたら切断するようにしていた(BLEは切断ができないので再起動をかけていた)ところをまとめて、ひとつのタイムアウトでスリープするようにしました。具体的には、Wi-Fiのタイムアウトを1分、BLEのタイムアウトを2分にしていたところ、2分でスリープするように設定しました。

あと、使い勝手を良くするためにFirefoxの再読み込み(F5)を、空いていたOption+Pauseに仕込みました。これらを行ったあとの回路図がこちらです:
Jst12
…我ながら、ほとんど間違い探しですね。IO2にTOUCHが付いているところと、Option+PauseがF5になったことが差分です。修正したコードはGitHubに置いておきました

今回の改造前後の電流値比較がこちらです:
Jst13
前はBLEのタイムアウト後に再起動がかかって定常的なアイドリング電流が39mAあったところ、ライトスリープ導入によって4.3mAになっていて、電池の負荷は格段に少なくなりました。肝心のスリープからの再起動はとても安定しています。また、スリープから起きると直ちにBLEが繋がっているのが便利です。

今後も使い勝手が良くなるように修正していくかも知れませんが、これで開発は一通り完了です。
以上、何かの参考になれば幸いです。

パドラッパ from MacBook Air (M2)

| | | コメント (0)

«ラズパイ5とテレビでラグビーを観るための、Wi-FiとBLEのハイブリッドリモコン【2025/03/16追記・修正】