エクスプローラでセッションを保存および再現

Windows11のエクスプローラはタブが使えるのだが、その状態を保存及び再現する機能がない。

PowerShellで無理やりその機能を作ってみた。

セッションの保存

$windows = (New-Object -ComObject Shell.Application).Windows() | Where-Object { $_.Name -eq "エクスプローラー" -or $_.Name -eq "Windows Explorer" }
$output = @()
foreach ($win in $windows) {
    try {
        $handle = $win.HWND
        $path = $win.Document.Folder.Self.Path
        $output += [PSCustomObject]@{ HWND = $handle; Path = $path }
    } catch {}
}
$output | Group-Object HWND | ForEach-Object {
    $_.Group.Path -join "`t"
} | Out-File "$env:USERPROFILE\Desktop\explorer_layout.txt" -Encoding utf8

セッションの再現

Add-Type -AssemblyName System.Windows.Forms
Get-Content "$env:USERPROFILE\Desktop\explorer_layout.txt" | ForEach-Object {
    if ($_ -match '\S') {
        $tabs = $_ -split "`t"
        if ($tabs.Count -gt 0) {
            # 1つ目のパスを確実に「引数」として渡し、新しいウィンドウを起動
            $firstPath = $tabs[0]
            Start-Process explorer.exe -ArgumentList "`"$firstPath`""
            Start-Sleep -Milliseconds 1500  # ウィンドウと1つ目のタブが完全に開くのをしっかり待つ
            
            # 2つ目以降のタブがある場合のみ、追加処理を行う
            for ($i = 1; $i -lt $tabs.Count; $i++) {
                $wshell = New-Object -ComObject WScript.Shell
                
                # Ctrl+T を送信して新しいタブを作成
                $wshell.SendKeys("^t")
                Start-Sleep -Milliseconds 600  # タブ生成を待つ
                
                # Alt+D で新しいタブのアドレスバーを選択
                $wshell.SendKeys("%d")
                Start-Sleep -Milliseconds 300
                
                # パスをクリップボードにセットして、Ctrl+V で貼り付け
                [System.Windows.Forms.Clipboard]::SetText($tabs[$i])
                $wshell.SendKeys("^v")
                Start-Sleep -Milliseconds 200
                
                # Enterキーを送信して確定
                $wshell.SendKeys("{ENTER}")
                Start-Sleep -Milliseconds 800  # ネットワークドライブの応答を待つ
            }
        }
    }
}

かなり無理やりなので、保存はともかく再現に時間がかかるしSendkeysを使う都合上再現中にマウスやキーボードをいじると失敗する。

Windowsでfindの代わり

Posix系のOSなら大抵findutilsが入っているので以下のようなコマンドで、ディレクトリツリーを探索して条件に合ったファイルを探して、それを引数にしてコマンドを実行できる。

find [TARGET_DIR] [CONDITION] -exec [CMD] \{\} \;

WSLを使うとWindowsでも利用可能だが、IO主体の作業はWSL自体のオーバーヘッドがあるので、WSLを介さず実行したほうがいい。

調べてみたらPowerShellなら同等のことが"Get-Children"と"ForEach-Object"の合わせ技で可能なようだ。
それを使って大量にあるRAR書庫のテストは以下でできた。

$rar = 'C:\Program Files\WinRAR\Rar.exe'

Get-ChildItem -Recurse -File -Filter *.rar | ForEach-Object {
    & $rar t -ierr $_.FullName > $null 2>&1

    if ($LASTEXITCODE -ne 0) {
        Write-Host "BROKEN: $($_.FullName)" -ForegroundColor Red
    }
}

家庭用Wifi AP

アクセスポイントが欲しんだ。ルータはいらないんだ。
なんで一体化してるんだよ。しかも製品によっては無効化すらできない。
eero、お前だよ。

もともとBaffaloのWSR-1800AX4でメッシュWifiを組もうとしてたんだけど有線バックホールも無線バックホールも非常に不安定で使い物にならなかったのが始まり。
なぜメッシュしかも有線バックホールにこだわっているかというと、自宅の構造上、リビングと寝室間に電波に対する壁が存在するので、1台で家すべてをカバーするのは難しいというのと、各部屋には既に有線LANが敷設済みということが理由。
壁のこちらとあちらで2台のAPを立ててその間を既存の有線LANでつながれば問題はないはずだし、メッシュWifiの例としてはよくある例だと思う。
Baffaloのサポートに聞いたら、有線バックホールは直接ケーブルをつなげる構成しかサポートしておらず、宅内LAN配線のようなものを経由する構成はサポート外とのこと。


ちなみに自宅のメインルータにはYAMAHAのRTX1210を使用しており、WAN側回線を2つ用意して負荷分散及び冗長構成となっている。
時々、ルータのCPU負荷が高い時があるので、RTX1300が出たときに、買い替えかなと思ったけど10GbE対応ぐらいで、CPUとかはそこまで増強されてないみたいだったので見送った。



そんなこんなでWifi環境に不満がある中、プライムデーで安くなってたから、前世代のeero Pro6Eを買ったらこのありさまだよ。
有線バックホールでのメッシュWifiの構築が非常に楽だし、安定してるのも認めるけど、無駄に別のサブネット作ってDHCPサーバになるのやめて。


しばらく使ってみて、2重ルータで有線側LANとサブネットが違う点が問題になってきたら次に考えるのはHPEのAruba Instant On AP32かYAMAHAのWLX323かな。
これなら小規模オフィス向けとして代理店介さなくて購入できるし、そこまで高価じゃない。といってもAP32で7万越え、WLX323はもっとして10万越え。高いな。

Arubaインスタントiap-325 Wrlss AP

Arubaインスタントiap-325 Wrlss AP

  • Aruba a Hewlett Packard Enterprise company
Amazon

会社の名前を背負って誤解を公開してて大丈夫?

以下の解説記事が大きな誤解を含んでいるがなんと会社の名前で投稿されている。
note.com

"他のフォーマットとの比較"で、コンテナフォーマットの比較項目に圧縮率を挙げるという意味の分からなさ。
コンテナフォーマットはただの入れ物であり、入れ物には圧縮率も何もない。あるとすれば格納効率ようはコンテナフォーマットによるオーバーヘッドの少なさだろうか。
WebMは対応コーデックが少ないというか汎用のMatroskaの中に入れるものに縛りを加えたのがほぼWebMなので映像系だとVP8/VP9/AV1ぐらいだが、比較対象のMP4やAVIはかなりの種類のコーデックのストリームが入る。あんまりやる人はいないけどH.264世代までならAVIに入った覚えがある。VP8 in AVIとVP8 in WebMを比べてその表は成立する?
AVIとWebMとの比較ということはRIFF*1とEBML*2の比較ってことではないの。

こんなこと企業名出してNoteに書いてて大丈夫と思っていたら、当該企業は自身のサイトでもこんなん書いてた。
first-tone.net*3
ここでも同様に"WebMと他のフォーマットとの比較"として以下のように書いている。

AVIフォーマットは、特に高品質の動画を保存するために使用されることが多い古いフォーマットです。

しかし、AVIは圧縮効率が低く、ファイルサイズが大きくなりがちです。

WebMは、より効率的な圧縮技術を使用しており、高品質ながらもファイルサイズを小さく保つことができます。

ということはこの企業としての公式見解ということか。

*1:Resource Interchange File Format

*2:Extensible Binary Meta Language

*3:リンクが誤っていたので修正

Povo契約しにくい

使用している端末が壊れたのかSIMカードが壊れたかで、SIMカードが認識できず、回線不通状態なのでバックアップ用に格安端末をアマゾンで頼みつつPovo を契約してみた。店舗などないのでネットで契約するわけだが、ところどころこれどうなのと思うところがあった。
まず、本人確認方法で契約の流れみたいな説明書きにはアプリとそれ以外の選択肢があるように書かれているが、そんなものはない。もれなくアプリに誘導される。その誘導も何かの判定が間違っているのかAndroid 端末でアップルのストアに誘導される。どうしろと言うのか。
別途アプリを導入して再度臨むと、結局本人確認は専用ページに飛ばされる。アプリの意義とは?
ブラウザ経由で端末のカメラを操作して、本人確認書類を撮影するのだが、恐らくカメラの初期化に癖があって、少なくともVivaldi だと一度シャッターを切らないとカメラ映像が来ない。まあ、無駄に一回再撮影操作が発生するだけだとこのときは思う。それよりも何回撮影しても不鮮明だからダメだと却下されるが、この時使用していた端末(PixelTablet)だとその画像が精一杯の鮮明さなんだが、手振れとか照明とかレンズの汚れとかではないよ。おまけで付いてるみたいなカメラに何を期待してるの?仕方ないのでXperia1に切り替えて再チャレンジ、書類写真の提出と顔写真の提出まではうまくいくが振り向きの動画の撮影でつまづく。先に述べた通りカメラの初期化に難があるのだが、動画撮影は最初から画像を判定しいるらしいのとシャッターを押すという動作が入らないので無の画像にたいして顔位置だとか向きだとかの検出をしようとして延々と失敗する。これまた仕方ないのでデフォルトブラウザをVivaldi からChrome に変更して、再度臨む。
なんとか次のステップに進んで、連絡先を聞かれるんだが電話連絡先を作るために契約しようとしてるので電話番号を聞かれても無いぞ。必須項目にされても困る。とりあえずあり得ない番号である全て0を入力したらなんとかなった。
つまづきポイントだらけだ。

PCの冷却

簡易水冷CPUクーラーの平均寿命は3年ほどらしい。その間はメンテナンスはほぼフリーだが、どうしても内部の冷却水が減っていって、最終的に冷却水不足で機能しなくなるようだ。しかもその構造上、冷却水の補充ができない。そのため、ほぼ使い捨てらしい。

空冷CPUクーラーは製品にもよるが、一番壊れるであろうファン自体は取り換え可能であり、ほかに経年劣化というとヒートパイプ内の冷媒が考えられるがこれが漏れる等はあまり聞かない。この感覚でいたから、CPUクーラーの寿命で全然冷えていないことに気づけていなかった。

現在のPC*1は5年ほど使っているのだが、例にもれずCPUクーラーは寿命を迎え、アイドル時でもパッケージ温度が60℃を下回らず、サーマルリミットに常時ぶち当たりつつ、シャットダウンだけは回避しているような状態になっていた。気づけたのはいくら重い処理を走らせても負荷が100%に行かないどころか、50%にも届かなくなっていたからである。購入当初からついているCPUクーラーは120mm角のラジエータを備えた簡易水冷であり、購入当初は十分な冷却性能を発揮しておりCPU負荷100%の状態で24時間以上放置にも耐えていた。清掃はしていたのでラジエータ能力が落ちているとは考えにくく、調べたら冒頭に書いたようなことが分かった。

とりあえず、代わりのCPUクーラーを用意しようとしたが、使用しているCPUがAMD Threadripperであるので選択肢はかなり狭まる。また、Threadripperに対応する空冷クーラーは軒並みでかくて、現状のケースに入らないかグラボと干渉する。水冷にしようとしても、前面に5インチベイが4つも並ぶような古めのケースのためラジエータの置き場は背面か天面しかない。現状背面となっているが、ここは120mm角専用であり、天面は120mm角のファンと140mm角のファンを並べるようにできているため120x240のラジエータなら搭載可能であった。240クラスの簡易水冷で値段も安く評判もそこそこだったのでCorsair iCUE H100i ELITE CAPELLIX*2を購入した。ケースに窓はないので光っても全く見えないのだが、このクラスだと大抵光るし、光らないタイプがあったとしても価格差はないというか、光るやつのほうが安いのはどういうわけなんだか。

つけて、それほど時間はたっていないが感想としては、冷却性のがそれほど上がった様には感じられないが、確実に以前のものよりうるさい。静音ファンに交換すべきだろうか。といっても、100%負荷まで当t辣できるようになったので必要最低限の冷却性は備えている。

当面はこれでしのぐが将来的にはラジエータを外に設置するために本格水冷に移行したい。外に設置するのであればケースサイズに縛られず420mmクラスもしくはそれ以上の大きさにできる。

CentOS Streamインストール

CentOSがポリシーを変更して、RHELのクローンではなくてRHELFedoraの中間になるそうなので、そろそろFedoraの更新を追いかけるのがつらくなってきたやつを入れ替えてみた。

とりあえず必要なものだけrsyncで別のマシンにバックアップ。

公式からインストールイメージを落としてきてインストール。
何も考えずネットインストール用のイメージを選択したんだが、失敗だったかもしれない。
インストールソースの設定で躓いた。
何故か選択肢にあるRedhatCDNは当然ながらRedhatとの契約が必要で使えない。
あとはURLの手入力するしかないようで、Mirrorリストを見ながら種別を"http"にして"ftp.jaist.ac.jp/pub/Linux/CentOS/8-stream/"とか入れてみても何故かエラー。
最終的にはBugTrackerの情報を頼りに種別を"mirrorlist"にしたうえで"mirrorlist.centos.org/?release=8-stream&arch=x86_64&repo=BaseOS"を入れたらうまくいった。

Fedoraはbtrfs押しだけど、CentOSはXFS押しのようなので、パーティションからやり直した。
RedhatはXFSの上にかぶせるStraitsとかいうのをZFS対抗で推進していたはずなんだが、CentOSのドキュメントには影も形もない。
代わりにVDOとかいうのがあって、これはブロックデバイスのレイヤーでシンプロヴィジョニング/重複排除/オンライン圧縮を担当するみたい。
ただ、インストール時には設定できないみたいなので、とりあえず領域だけ開けておく。

再起動後、Dockerをインストール。
公式のドキュメントだとCentOSならyumを使えとなっているが、CentOSも8はDNFへ移行済みなので、Fedora向けの記述を頼りにインストール。

$ sudo dnf -y install dnf-plugins-core
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo dnf install docker-ce docker-ce-cli containerd.io

ここでDocker RootとしてVDOで重複排除の有効になった領域を使用すべく設定。

$ sudo vdo create --name=vdovolume --device=/dev/sda5 --vdoLogicalSize=1TB
$ sudo mkfs.xfs /dev/mapper/vdovolume

既存のDockerRootの内容を移動したうえで、fstabに以下を追加。
x-systemdで始まるのはsystemd用のオプションだが、これがないとvdoサービスが立ち上がる前にマウントしようとしてエラーを吐くっぽい。

/dev/mapper/vdovolume   /var/lib/docker xfs     defaults,_netdev,x-systemd.device-timeout=0,x-systemd.requires=vdo.service      0    0

後はバックアップを戻せば完了。