液晶風の画面は決まった形をオン・オフするだけなので、canvas にコードで描くのは大変なだけで無駄が多い。かといってセグメントを1つ1つ画像にわけて座標指定で配置していくのも面倒くさい。

と考えていくと SVG を埋めこんで、SVG の要素を JS で操作するのが効率が良い。ワークフローとしては SVG の作成と JS の実装で綺麗に境界を作ることができる。

Inkscape


Inkscape の良いところは以下の点

  • XML エディタが UI と連動している
    • レイヤーやオブジェクトを選択すると該当箇所にエディタ上で跳べる
  • 構造をコントロールしやすい
    • 画像を編集するというより SVG の XML を編集するUIというイメージ

Inkscape でオブジェクトに名前をつけると、svg 上では inkscape:label 属性に入る。これを利用して JS から操作すれば Inkscape で保存した SVG をそのまま利用できる。

JSで扱う

Inkscape で保存した SVG をそのままファイルとして置いて、fetch() で取得し、HTML5 な HTML で特定の要素の innerHTML に入れてしまうのが手っ取りばやい。(XML の Processing Instruction については Chrome ではコメントに変換されるが、仕様上パースエラーなので消しておく)

名前空間の扱いが謎だが、querySelector() の場合以下のような形で指定することができる (つまり名前空間を扱わず、prefix も含めて属性名とする)

svg.querySelectorAll('g[inkscape\\:label="digits"] > g')

あとは適当に style.visibility を操作するだけなので省略

svg の HTML Living Standard 的解釈

svg 要素は HTML では SVG 2 で定義されると書いてある。つまり「HTML は SVG を知っている」。SVG 2 では HTML 内でも svg が使えることを考慮して書かれている。

SVG の仕様上、HTML 内では SVG の名前空間は HTML パーサによって与えられると書いてある。このため、HTML 内 svg 要素には xmlns は必要ない。 https://svgwg.org/svg2-draft/single-page.html#struct-Namespace

HTML LS

In HTML, the xmlns attribute has absolutely no effect. It is basically a talisman. It is allowed merely to make migration to and from XML mildly easier. When parsed by an HTML parser, the attribute ends up in no namespace, not the "http://www.w3.org/2000/xmlns/" namespace like namespace declaration attributes in XML do.

また https://html.spec.whatwg.org/#elements-2 に例示があるが、HTML としては xmlns は何の効果も埋み出さない。例えば svg 要素の中に xmlns:foo="foo" という宣言と共に <foo:bar /> というのがあっても、これは HTML パーサによって自動的に与えられる svg の名前空間に属し、foo:bar という要素名になる。

  1. トップ
  2. tech
  3. JS+SVGで液晶画面風の表示をつくる

2016年の6月に組んでからCPUマザボを変更せずにきたが、この Core i7 6700 が Windows11 非対応だったり、今時さすがに4コア8スレだったり、PCIe レーン数が少なすぎて NVMe SSD が使いにくかったりで、そろそろかと思い組替えることにした。

ケースとグラボ以外はほぼ新調。ここに書いてない SATA のドライブは継続して接続している。あとはケースファンもすべて入れ替えた。

電源は 80+ Platinum で安かったやつ(1万円ぐらい)を買ってみたがパッケージやケーブルが良くできていて非常に豪華だった。

Intel か AMD か?

プロセスルールの数字が良いからなんとなく最近なら AM5 ソケットになった Ryzen 7000 シリーズかなと思っていたが、13th Intel が結構強いようだった。個人的には以下の点で Intel 優勢とおもった

  • アイドル時の電力が低め
  • DDR4 メモリが使える (DDR5 メモリが高い)
  • 12th (1年前) のマザーボードが使える
  • 性能的にはどっこいどっこい

DDR5 が十分性能と価格が落ちつくには何年もかかりそう。そして AM5 なマザーボードはだいぶ高い。Intel なら手元の DDR4 メモリも利用できる。

i5 か i7 か i9 か

i9 は水冷するような超ハイエンド向けというイメージがあり、i5 はちょっと微妙というイメージがある (別にそんなことないみたいだが)。

  • CPU ヘビーな状態が続くことはあまりないが時々ある
  • クーラーは空冷
  • Core i7 6700 でもそれほど苦痛になることはなかった (エンコードぐらい…)

と考えていくと理性的に最適なのは i5 ではないかと思うが、大は小を兼ねるので i7 とした。i9 は高すぎる。

フルロードせず電力制限をかけたとしても、その制限においてはクロックが上がるので上位CPUが無駄というわけではない。

Windows 11 のクリーンインストール

Windows 11 にアップグレード不可な PC に入っていた Windows 10 のライセンスだったが、普通に Windows 11 のインストールメディアをつくってインストールし、構成を変更したという宣言をしたら引き継ぐことができた。

電力消費

マザーボードデフォルト設定だとCPU電力無制限になるようだ。つまりサーマルスロットリングが常時起こるまで発熱し、クーラーの排熱性能上限ぐらいのパッケージ消費電力で落ちつくという挙動になる。

  • 電源にクランプして読むとアイドル時で50~60W程度
  • HWiNFO 読みで
    • CPU Package Power は最大 250W
    • GPU Power は最大 155W ぐらい

アイドル時の CPU の Package Power は 5W~10W ぐらい。GPU Power が 15W ぐらい。Z690チップセットが TDP としては 6W。

効率カーブが載っているPSU の評価結果 2% of spec = 13.2W 出力時の効率が 42% 程度で、20~30W ぐらいの効率は50~60%程度のように見える。つまりセンサ読み Package Power が 25W なら電源クランプで読むと 50W ぐらいになってしまう (実際はマザボ上のVRMの効率もあるわけで)。

なおこのマザボは多少光るけどオフにしても消費電力への影響は微々たるもの。

電力リミット

電力無制限で cinebench を回すと当然サーマルスロットリングが起き、最初は250Wぐらいだが徐々に Package Power が落ちて 220W 前後で落ちついてくる。これがこのクーラーの限界ということになる。実際、AS500 というクーラーはTDP 220Wまで対応と書いてあるので、実測でもその通りといえる。

あんまり限界性能を出すのも恐いので、UEFI から最大電力 (long / short duration power limit) を 180W に制限することにした。PL は原理的にシングルスレッド~数スレッドでは超えないので、全コア使い尽くすようなときに若干性能が下がるイメージだと思う。

定格は3.4GHz(Pコア)/2.5GHz(Eコア)ターボブーストで5.3GHz(Pコア)/4.2GHz(Eコア)。

なお Tjunction max はいわゆる絶対最大定格ではないようだ。Intel 的な絶対定格は内部に非公開で持っており、必要とあらばシャットダウンする仕掛けで、Tjunction max はこれを目標にサーマルスロットリングするぞという値。

つまり基本的には CPU 側で防衛しており、サーマルスロットリング自体も「問題ない」とされている。クーラーの性能上限(=サーマルスロットリングが起こる状態)までCPUは電力を消費して発熱する設計になっている。

  1. トップ
  2. tech
  3. 13世代のIntelにPC更新

Widgets.exe 関係で msedgewebview2.exe がやたら VRAM (GPUメモリ) を消費している。全く使わない機能なのでアンインストールする。

winget uninstall "windows web experience pack"
  1. トップ
  2. tech
  3. Windows11 msedgewebview2.exe/Widgets.exe をアンインストール

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

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

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

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

  1. トップ
  2. tech
  3. Error code: Wsl/Service/CreateInstance/MountVhd/E_ACCESSDENIED

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年は経過してるから仕方ないのかもしれないけどウーン……

  1. トップ
  2. tech
  3. Windows 11でのIntel X520-DA1 (SFP+)

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でも)「サブコンテナーとオブジェクトの所有者を置き換える」というチェックボックスがでる。これで一括でサブオブジェクトなどの所有権を置き換えできる。

  1. トップ
  2. tech
  3. 別PCのNTUSER.datから値をコピーしたいとき

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

回路

使ったのは

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

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

読み出し

プロトコルは

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

baudrate は 9600

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