2022年 11月 01日

Error code: Wsl/Service/CreateInstance/MountVhd/E_ACCESSDENIED

Windows を再インストールして、

wsl --import-in-place Ubuntu D:\wsl\ubuntu\ext4.vhdx

みたいなことをしたら以上のようなエラーをいわれるようになってしまった……

ただ、管理者権限だと起動できる。該当する .vhdx ファイルのプロパティのセキュリティタブを見てみると変更権限などが一般ユーザになかったため追加したらうまくいった。

Windows 11でのIntel X520-DA1 (SFP+)

Windows11 にしたところ Intel X520-DA1 な NICが認識しなかった。

ドライバを検索しても「ないよ」と言われる。天下の Intel だぞおかしいと検索すると無情にも Intel 公式に「解決方法X520 対応の次のドライバーリリースは バグ修正のみであり、新しい機能や OS のサポートがないため、Windows 11 では X520 用のドライバーはありません。」 とか言われる。解決方法じゃない……

同様に困っている人はいるようだ。このエントリではセットアップファイルからドライバを抜き出して、手動で認識させる方法でうまくいっている。 のでこれを試してみた。

Windows 10 向けドライバダウンロードページから Wired_driver_27.6_x64.zip をダウンロードして、展開し、さらに 7-zip で Wired_driver_27.6_x64.exe を展開するとドライバファイルがでてくる。

デバイスマネージャからNIC選択し、ドライバを検索→手動でディレクトリを検索→展開したディレクトリを指定。でうまくいった。

2011年のQ2に発売された製品らしいから10年は経過してるから仕方ないのかもしれないけどウーン……

別PCのNTUSER.datから値をコピーしたいとき

regedit.exe で適当な場所 (HKEY_CURRENT_USER など) に新規キーを作る。ここでは OLD とする。OLD を選択した状態で「ファイル」→「インポート」して、ファイル種別に「レジストリハイブ」を選択すると NTUSER.dat を選択できる。

NTUSER.dat を選択する「OLD」以下を削除して置き換えるが良いか?という旨のダイアログが出るのでOKする。

これで読みこめるのでキーを探してなんとかする。

ただ以下のような問題があるのでお勧めできるかというと微妙……

この方法のやっかいなところ

Administrator アカウントでもアクセス不可能で削除もできず、アクセス許可も編集できないエントリができてしまう。どうやら SYSTEM アカウントでだけアクセスできるらしい。

sysinternals というツール集に含まれている psexec という実行ファイルを使うと SYSTEM アカウントで実行することができる。

.\PsExec64.exe -i -s c:\windows\regedit.exe

さらに SYSTEM 所有のレジストリエントリの子で TrustedInstaller が所有者になっているみたいなややこしいことなっている場合がある。この場合、所有者を SYSTEM にしつつ、SYSTEM にフルコントロールを与えると消せるようになる。とても面倒くさい。

親エントリで所有者を SYSTEM にすると (既にSYSTEMでも)「サブコンテナーとオブジェクトの所有者を置き換える」というチェックボックスがでる。これで一括でサブオブジェクトなどの所有権を置き換えできる。

2022年 10月 29日

3DプリンタでLCRメータDE-5000 のUSBシリアル出力アダプタを作る

オフィシャルのアダプタはかなり高い<ので https://www.thingiverse.com/thing:2551379 をプリントして USB シリアルを組合せた。

回路

使ったのは

Thingiverse の方法 (RX と GND に直接フォトトランジスタをつける) だと、FT234X ではうまくいかない。オシロで見た感じ立ちあがりが遅すぎたので、RX の内部抵抗が高いようだ。

なので普通に電源をとるようにした。FT234X は 5V トレラントなのでこれで問題ないはず。

読み出し

プロトコルは

あたりを参照すればわかる。

baudrate は 9600

2022年 10月 21日

サーマルカメラ UNI-T UTi260B の画像から文字を消す

UTi260B はなぜか表示されている文字を消す機能がない。常に時計やバッテリー表示などを含めてコピーされる。これが邪魔なので消したい。

スナップショットとして撮影して SD カードに保存される画像には bmp (画面のハードコピー) と jpg (光学カメラの画像) がある。bmp のほうは実は単純な画面のハードコピーではなく、グレースケールの元データと若干のメタデータも入っている。

このデータを元に画像を再生成するツールが UNI-T-Thermal-Utilities に uniTThermalImage.py として含まれている。

基本的にこれを使えばいいのだが、HTML+JS で作ってあればマウスホバーでカーソル位置の温度の表示とかいろいろ融通がききそうでいいかなと思い、移植した。

https://cho45.stfuawsc.com/uni-t-thermal-utils/

元の python 版と同様の温度補正機能もつけてあるので、ホバー時の温度の精度も若干マシになっている。

カラーパレットと最大・最小温度のマークを表示する機能もつけてある。

2022年 10月 18日

サーマルカメラの近距離分解能をレンズで改善する UNI-T UTi260B

サーマルカメラ UNI-T UTi260B を買ったが、近い距離だと結構ボヤっとしていて解像度が低い感じになる。そんなものなのかなーと思っていたが、Thingiverse で UTi260B にマクロレンズをつける例を見つけたので試してみた。

レンズ

UTi260B のスペック上、扱う波長は 8~14μm (遠赤外線)

通常の光学ガラスは赤外線を通さないのでサーマルカメラのレンズには適さない。

比較的安く入手性が良い CO2 レーザー (波長 10.6μm) 用のレンズである ZnSe レンズはだいたい 7~12μm あたりの透過性が高いらしいのでそこそこちょうどいい。

Aliexpress の WaveTopSign China PVD ZnSe Laser Focus Lens Dia.12 18 19 20mm FL38.1 50.8 63.5 76.2 101.6mm For Co2 Laser Engraving Machine というやつ。直径 20mm 焦点距離は 101.6mm で選んだ。約1500円程度。

小さいレンズとしては高いが、特殊用途のレンズとしてはかなり安い。

結果

近距離での撮影がかなり良くなった。

メリット・デメリット

メリット

  • 至近距離でより分解能が上がる

デメリット

  • 若干温度は低くでる (いくぶん透過性が下がるので)
  • レンズ中央以外の精度があやしい (光学レンズと同様、できるだけ大きいレンズを使うほうが安定する)

電力表示付きの Type-C 充電ケーブル

100W だと 20V 5A になる。1m

室温25℃で90Wの表示が出てる場合、しばらくすると52℃ぐらいまで上がる。

手元のケーブルテスタだと、ケーブル全体としてはコネクタも含め180mΩ。P = I^2 R なので 5A 流れているとき 4.5W はケーブル全体 (ケーブルそのものの抵抗 + 電流検出部) で消費される。

電流検出部のシャント抵抗が 10mΩ だとすると 0.25W 程度が電流検出部で消費される。定格1Wで定格電力比率25%程度だとすると25℃程度の温度上昇はだいたいそんなもんかという気がする。

AWG 24 の銅線だと 84.2 mΩ/m なので、シャント抵抗で無駄になる電力はそこまで支配的ではない (12cm 程度に相当する)。

2022年 10月 17日

Mac でコマンドラインからユーザ画像を変更する

ログイン画面のユーザ画像はディレクトリサービスエントリに保存されている。これはコマンドラインでは dscl / dsimport などで操作できる。

https://apple.stackexchange.com/questions/117530/setting-account-picture-jpegphoto-with-dscl-in-terminal/367667#367667

この gist を使うのがてっとり早い。

userpic.sh USERNAME path/to/jpg

なんでこれをしたいか

ポリシーによって環境設定の「ユーザとグループ」を封じらている場合、ユーザ画像を設定する方法がアカウントを作るタイミングしかない (と思う)。うっかり変な画像を指定するとログイン画面が毎回不愉快になる。

sudo 権限が必要なので、「ユーザとグループ」は封じられているが管理者権限はあるみたいな特殊な状況でしか有用ではない。

2022年 10月 08日

家庭用ミシンの押さえを3Dプリンタで作る


家庭用ミシンの押さえ(pressure foot)はいろいろ市販されているが、最大公約数的なものが多く「あとちょっと小さいのが欲しい」みたいな場合にめんどくさい。安い押えから削り出すという手もあるが、3Dプリンタで作るというのを試してみた。

モデル

例によって Fusion360 でモデリング。手元にあった適当な押えを採寸している。家庭用ミシンの押えはスナップオンでとりつける方法と、シャンクに直接固定する方法とがあるが、これは前者。

スナップオンの場合 1/16" (=1.5875mm) の軸が押さえ側にあり、それをつかませる形になる。横幅は約6mm。軸の太さはだいぶおおざっぱで、市販の押えも1.4~1.6ぐらいのようだ。今回は手元に 1.5mm のアルミ線があったため、これを利用した。アルミ線は柔らかいが、6mm 程度で押さえを取り付ける用途なら特に問題なかった。

軸の中心から針の中心までは 5.75mm 程度。この針穴は2mm程度あける。これで手元のミシンでは完全に中心に針落ちしてくれる。

2022年 09月 07日

Stable Diffusion で prompt 情報を画像に保存しておく

PNG にはメタデータを保存するチャンクがある。Python からも簡単に読み書き可能なので、ここに prompt を保存しておくと、あとから参照したいときに便利になる

img が PIL の Image だとして、save を呼びだしているとこに pnginfo というのを足してあげる。

from PIL.PngImagePlugin import PngInfo

# ...

metadata = PngInfo()
metadata.add_text("prompt", "foo bar baz")
img.save("./outputs/0.png", pnginfo=metadata)

読み出し

#!/usr/bin/env python
import sys
from PIL import Image
from PIL.PngImagePlugin import PngInfo

img = Image.open(sys.argv[1])
print(img.text['prompt'])