ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

logicool M705 ワイヤレスレーザーマウスを分解・修理した

logicool M705 ワイヤレスレーザーマウスを使っているのだが、ホイールの回転が悪くなってきた。内部にホコリが溜まったせいだと思い、分解・修理したので手順をメモ。

なお、M705にはいくつかのモデルが存在し、それぞれ構造が異なる。今回分解したのは2018年頃に発売されていたモデルナンバーM-R0073である。

 

分解対象外見

f:id:donadonasan:20200418162228p:plain

logicool M705 M-R0073 上面

 

f:id:donadonasan:20200418162313p:plain

logicool M705 M-R0073 裏面

裏カバーの取り外し

ネジは合計5本。うち2本は前方のシールに、2本は電池ケースのシールに隠されているので、これらを剥がす必要がある。

f:id:donadonasan:20200418162819p:plain

M705 M-R0073の裏カバーを固定するネジの位置

今回のマウスでは特殊ネジ(トルクスネジ、おそらくT6)が使われていた。ただ、logicoolのマウスは同じモデルナンバーでもネジ形状が違うことがあるので(例:M-R0009。プラスネジだったり六角ボルトだったりする)、M-R0073の全てで特殊ネジが使われているかどうかは不明。

f:id:donadonasan:20200418163404p:plain

M705 M-R0073のネジ形状

ネジ5本を外すと、容易に裏カバーが外れる。

f:id:donadonasan:20200418164525p:plain

M705 M-R0073 内部

ホイールユニットの取り外し

ホイールユニットはピン一本で本体とつながっているので、これを抜くと外れる。外す際に、ホイールユニットの下に隠れているバネがどこかに飛んでいかないよう、本体の水平を維持しながらゆっくり外すこと。

f:id:donadonasan:20200418164835p:plain

ホール部を固定しているピンを外す

f:id:donadonasan:20200418164956p:plain

小さいバネ2個が行方不明にならないよう気をつけること

ホイールユニットを外したところ。裏を見ると、ホコリがみっちり詰まっている。グロ画像かもしれない。

f:id:donadonasan:20200418165137p:plain

M705のホイールユニットと固定ピン

f:id:donadonasan:20200418165219p:plain

ホイールユニット裏側。みっちり詰まったホコリが見える。

ホイールユニットの分解

ホイールユニットは概略以下のような順番で分解する。ネジは②を固定しているプラスネジ1個のみ。

f:id:donadonasan:20200418165711p:plain

ホイールユニットの分解順番(概略)

ホイールユニットは12個の部品からできている。なお、下図ではバネ1個が4番に固定されたままであり、2番を固定するプラスネジは写っていない。

f:id:donadonasan:20200418170306p:plain

M705 ホイールユニット部品一覧

分解作業は、ホイールを透明部品から外すのに苦労するが、ほかはスムーズに進むはずである。なお、5番の部品は4番を外すと自然に外れるので、どこかに落ちないよう気をつけること。また、向きを覚えておくこと。

ホイールユニットの組み立て

組み立ては手こずるので、詳細に説明する。

まず、ホイールを透明部品に組み付ける。

f:id:donadonasan:20200418170633p:plain

ホイールを透明部品に組み付ける

白い5番パーツ2個を透明部品に入れる。5番パーツは一端が平坦なものと尖っているものがあるが、平坦なものがマウス上方に、尖っているものが下方に位置する。また、それぞれギザギザを有するが、それが噛み合うようにセットする。

f:id:donadonasan:20200418171239p:plain

5番パーツの装着。写真表面側が尖ったパーツ。写真裏面側が平坦なパーツ。

バネの付いた4番パーツを取り付ける。バネの固定位置は下図を参照。

f:id:donadonasan:20200418171657p:plain

4番パーツのバネ固定位置

3番の金具および3'のバネを取り付ける。向きは下図を参照。

f:id:donadonasan:20200418171843p:plain

3番の金具および3'のバネの取り付け

3'のバネを3番の金具に固定する。

f:id:donadonasan:20200418172002p:plain

3'のバネを3番の金具に固定する

2番のパーツをプラスネジで固定する。2番のパーツはこのネジ以外にも、1箇所スナップロックがある。

f:id:donadonasan:20200418172141p:plain

2番のパーツを固定。写真左側に1箇所スナップロックがある。

f:id:donadonasan:20200418172420p:plain

スナップロック位置

1番のパーツを取り付ける。向きに注意。

f:id:donadonasan:20200418172535p:plain

1番のパーツの取付向き

ホイールユニットを本体に取り付け、固定ピンを刺す。小さなバネがどこかに行かないよう注意すること。また、固定ピンは正しい向きで取り付けないとマウスの上面カバーが取り付けられない。下の写真では間違えてしまっている。コの字の開口部が後ろを向くようにすること。

f:id:donadonasan:20200418172810p:plain

ホイールユニットを取り付け、固定ピンを刺す。固定ピンの向きに注意。これは間違った向きの例。

あとはマウス上面パーツを取り付け、ネジを締めてシールを貼るだけである。上面パーツと裏カバーの間に隙間が開く場合は、固定ピンの向きが間違っている可能性があるので確認すること。

Ryzen3700Xに大手裏剣 参を装着してみた(ベンチマーク編)

Ryzen3700Xに大手裏剣 参を装着してみた(装着手順編) - ドナドナされるプログラマのメモ の続き。

Wraith Prismから換装する前と後で、色々とどう変わったか調べてみた。なにしろ、サイズがちっこいので冷却能力が足りるか不安なので。

冷却性能のベンチマーク

ベンチマーク内容:CPUの負荷およびPrecision Boost Overdriveの有無により、ファン回転数とCPU温度がどう変わるかを調べる。CPUの負荷はBOINCを使って100%としている。

 表 ベンチマーク結果

  Default Precision Boost Overdrive
  負荷0~2% 負荷100% 負荷0~2% 負荷100%
  Wraith
Prism
大手裏剣
Wraith
Prism
大手裏剣
Wraith
Prism
大手裏剣
Wraith
Prism
大手裏剣
最大クロック
(MHz)
(655) (896) 3781 3780 (707) (784) 3942 3902
CPU温度
(℃)
42.62 39.4 81.38 81.45 44.22 43.82 95 95.01
IC全体の発熱
PPT (W)
29.04 31.68 88 88 28.8 35.32 113.6 109.3
ファン回転数
(RPM)
2170 1173 2947 1713 取得し忘れ 1200 2934 1708
Precision Boost Overdriveを有効にし、負荷を100%としたときのPPTに若干の違いが出た。懸念したとおり、WraithPrismと比べるとわずかに冷却能力が低いようだ。そのため、大手裏剣 参はCPUの定格を超えて使う人には向かないと思われる。一方、定格で使う分には全く問題なく、低いファン回転数による静かな環境を構築できる。

音のベンチマーク


CPU冷却ファンの音を比べてみた:WraithPrism VS 大手裏剣参

関連記事:

Ryzen3700Xに大手裏剣 参を装着してみた(装着手順編) - ドナドナされるプログラマのメモ

 

 

 

Ryzen3700Xに大手裏剣 参を装着してみた(装着手順編)

Ryzen 3700Xに標準でついてきたWraith Prismは結構音が大きいので、CPU冷却ファンを買い替えてみた。ちょっと冷却能力に不安があったけど買ってみたのは大手裏剣 参。

www.scythe.co.jp

 

取付対象

寸法情報

f:id:donadonasan:20200412222355p:plain

大手裏剣 参 各部寸法

箱に、寸法情報が書かれていた。細かい寸法は、各自で画像から割り出してください。

Wraith Prism使用時のベンチマーク詳しくは別ページで。

f:id:donadonasan:20200412224621p:plain

CPU使用率がほぼ0の場合の消費電力と温度、ファン回転数

Wraith Prismと大手裏剣 参の大きさ比較。

f:id:donadonasan:20200413001104p:plain

Wraith Prismと大手裏剣 参の大きさ比較

大手裏剣、ファンのサイズは大きいけど放熱部の寸法はかなり小さい。自分のように大きなPCケースを使っていてスペースに余裕があるのなら、無限五 リビジョンBなどを使ったほうがいいかもしれない。(若干後悔中)

www.scythe.co.jp

換装手順

CPUファンの換装手順を示します。部品の向き等は付属の説明書を確認してください。

ちなみに、換装前のPC内部はこんな感じ。

f:id:donadonasan:20200412231449p:plain

Wraith Prism使用時のPC内部(換装前)

1. Wraith Prismのレバーを反対側に倒し、固定を解除する。

f:id:donadonasan:20200412234913p:plain

Wraith Prismの固定解除

2. プラスチックの爪から金具を外す(合計2箇所)。

f:id:donadonasan:20200412235226p:plain

Wraith Prismの固定金具を外す

3. CPUとファンはグリスにより固着しているので、Wraith Prismが動くまでグリグリと左右にねじって固着を解除する。動きそうもない場合は、PCの電源を入れて温め、グリスを柔らかくする。

4. ファンを外す。

f:id:donadonasan:20200412235726p:plain

CPUファンを外したところ

5. マザーボードについているプラスチックの部品のうち片方を外す。マニュアルでは両方外すことになっているが、そうしてしまうとマザーボードの裏にあるバックプレートが外れてしまう。それが嫌だったため、以下ではプラ部品を片方ずつ外すことでバックプレートを外さずに作業する。

f:id:donadonasan:20200413001933p:plain

Wraith Prismを保持していたプラスチック部品の片方を外す。プラスドライバー必須。

6. 大手裏剣 参に付属するプラスチック部品を2個はめる(ここはマニュアル通り)。そして、バックプレートを固定するため軽くネジで締める(ここはマニュアルと異なる)。ネジがゴム部にめり込まないようにすること。使うネジは、付属のもののうち短い方。

f:id:donadonasan:20200413003053p:plain

プラ部品の固定とネジ締め

f:id:donadonasan:20200413002658p:plain

AM4ソケット用に使うネジ

6. 残ったWraith Prism固定用のプラ部品を外す。

f:id:donadonasan:20200413003417p:plain

Wraith Prism用の固定部品を外す(2個目)

7. プラ部品を固定し、片方だけ軽くネジを締める

f:id:donadonasan:20200413003949p:plain

プラ部品2個を取り付け、片方だけ軽くネジ締めする

8. プレート固定準備のため、ネジを一個外す。

f:id:donadonasan:20200413004150p:plain

ネジを一個外す

9. 大手裏剣 参固定用のプレートをしっかり固定する。プレートには上下があるので注意。マニュアル参照。

f:id:donadonasan:20200413004622p:plain

大手裏剣 参固定用のプレートを固定する

10. 反対側のプレートも固定する。

f:id:donadonasan:20200413004833p:plain

反対側のプレートも固定する

11. 大手裏剣 参の底面についているシールを剥がす

f:id:donadonasan:20200413005046p:plain

保護シールを剥がす

12. 熱伝導グリスを塗布する。CPUと冷却ファンの間が埋まる、必要最低限の量にするのが良いのだが・・・どのくらいが必要最低限なのかわからない。とりあえず適当に。

f:id:donadonasan:20200413005405p:plain

熱伝導グリスを適当量おいてみた

f:id:donadonasan:20200413005454p:plain

熱伝導グリス塗布後

13. 大手裏剣 参の取り付け。ネジは左右交互に少しずつ締めること。詳しくはマニュアル参照。なお、冷却ファンは張り出し部がメモリの上にくる向きと、M.2 SSDの上にくる向きの2通りの向きに取り付けることができる。メモリの上に来る向きの場合、メモリの冷却も狙えるけどメモリが外せなくなる。M.2 SSDの上に来る場合はメモリの取り付け・取り外しは問題なくできそう。M.2 SSDの取り外しもたぶんできるので、そちらのほうがおすすめかも知れない。自分はメモリ増設の予定がCPU交換まで無いので、前者を選択。

f:id:donadonasan:20200413005712p:plain

大手裏剣 参の固定

別の向きでの取り付けイメージを参考までに。

f:id:donadonasan:20200413010903p:plain

大手裏剣 参を別の向きで固定した場合のイメージ

14. ファンの電源をマザーボードに固定する。

取り付け状況

取り付け結果。M.2 SSDとはまったく干渉していない。PCI Expressコネクタとも十分距離がある。

f:id:donadonasan:20200413011044p:plain

大手裏剣 参の取り付け結果

メモリとの干渉状況。使用メモリは冷却プレート付きの大きなものだが、当たらずに済んでいる。

f:id:donadonasan:20200413010534p:plain

メモリと冷却ファンの干渉状況

PCの内部状況。エアフローも問題なさそう。

f:id:donadonasan:20200413011152p:plain

大手裏剣 参取り付け後のPC内部

ガンダムオンラインで回復ビームが他人から見えないことがあるバグ

ガンオンで死体を起こそうと回復ビームを当ててたら、それを遮って修理しろアピールをする人がいた。何故だろうと思ってリプレイを見てみたら、回復ビームが写っていない!そりゃ、死体を起こそうとしているのは分からないし、修理アピールもするわ。

以下、リプレイによる検証動画。回復ビームが出ていた証拠に死体は無事復活したし、復帰ポイントも入っている。なので、自分がビームを出していたのは間違いない。しかし、リプレイでも回復ビームが見えない。なので、これはガンダムオンラインのバグであろう。

結論。バグが悪い。


ガンオンで回復ビームが他人から見えない

ガンダムオンラインのCPU使用率およびGPU使用率

ガンダムオンラインにおけるCPU使用率とGPU使用率をメモ。

CPUはRyzen3700X, GPUGeForce GTX 1070、解像度は1920×1080で画質は最高。全ていずれもCPU使用率20%程度、GPU使用率20%程度。CPU使用率の波形から、相変わらず2スレッドぐらいしか使っておらずマルチコアよりも高クロックの方が快適度の高い設計に見える。

ロビー:

f:id:donadonasan:20200409151437p:plain

ガンダムオンライン ロビーでのCPU・GPU使用率

ロビー。

f:id:donadonasan:20200409153033p:plain

ガンダムオンライン 戦闘中の機体選択画面におけるCPUおよびGPU利用率@ニューヤーク

戦闘中。

f:id:donadonasan:20200409154912p:plain

ガンダムオンライン 戦闘中におけるCPUおよびGPU使用率@ア・バオア・クー

 

重いイベントハンドラの処理状況をダイアログで表示する

背景

重い処理の進捗状況をダイアログで表示する場合、自分がよくやるのは

  • 進捗状況を示すモードレスダイアログを作成
  • 重い処理をAfxBeginThread()により別のワーカースレッドとして起動
  • モードレスダイアログは適宜タイマによって状況を更新
  • モードレスダイアログ上のキャンセルボタンが押された場合はフラグを立てる
  • 重い処理内では適宜フラグを監視し必要に応じて処理を中断する

というもの。たいていはこれで問題なく動く。

問題

しかし、この実装だと例えばOnUpdate()にてCTreeViewやCListViewに数十万個のアイテムを追加する場合、フレームワークがOnUpdate()を呼び出している間モードレスダイアログのGUIが無反応・無更新となる問題がある。

原因

この原因は、ワーカースレッドとして作られたスレッドで新たにダイアログを作っても、そのスレッドプロシージャはウインドウプロシージャの一部となってしまうことにある。すなわち、メインウィンドウのウィンドウプロシージャが非常に重い処理を呼び出してしまった場合はモードレスダイアログ上のGUI向けのものも含めウィンドウメッセージがキューにたまり続け、処理されないのである。

2020/05/05追記

より詳しい記事を追加。

解決方法

  • 対症療法:重いイベントハンドラ内の処理もマルチスレッド化してしまう
  • 根本対策:ダイアログのウィンドウプロシージャをメインウィンドウから独立させる(ワーカースレッドではなく、ユーザーインターフェーススレッドにする)

donadona.hatenablog.jp

An example of user interface thread implementation

参考

dodonpa.la.coocan.jp

 

CListViewにポップアップメニューを追加したけどON_UPDATE_COMMAND_UIが送られてこない件について

事象

CListViewにポップアップメニューを追加し、条件に応じてメニューのEnable/Disableを切り替えようとMFCの流儀に則りON_UPDATE_COMMAND_UIのハンドラを追加した。しかし、ポップアップメニュー表示時になぜかON_UPDATE_COMMAND_UIが来ない。

原因

CListViewは、ON_UPDATE_COMMAND_UIの送信に必要なOnInitMenuPopup()を実装していない。

対策

ここを参考に、OnInitMenuPopup()を実装する。

https://support.microsoft.com/sr-latn-me/help/242577/you-cannot-change-the-state-of-a-menu-item-from-its-command-user-inter