閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

Vanara (C#でWindows APIを呼ぶときに使えるラッパーライブラリ)

C#Windows APIを呼びたい、という時に使えるパッケージとしてWindowsAPICodePackがあるのですが、結構前から更新されておらず.NET 6プロジェクトで使いたい時に面倒でした。

ふとFilesというソフトウェアのソースを読んでいたらVanaraというライブラリを使用していて、見るとWindowsAPICodePackの代替として使えそうなライブラリでした。NuGetで入れられるし、.NET 6もサポートしていて良い感じです。

P/Invokeとかいちいち書くの面倒なので一通り揃っていると楽できて良いですね。さらにめんどくさいShell APIのCOMインターフェイスとかもあって有り難いです。

本当はこんなの公式で用意してくれれば良いのですけどね…。

PowerShellの履歴をpecoでインクリメンタルサーチしたい

PSReadLineをインストールする

PowerShellの履歴は再起動すると消えてしまうので、PSReadLineを入れます。 PSReadLine について - PowerShell | Microsoft Docs

Install-Module -Name PSReadLine -AllowClobber -Force

Get-Historyだと起動中のコマンドしか覚えてくれないのですが、PSReadLineを入れるとコマンド履歴がファイルに保存されて再起動しても以前の履歴が再現されるようになります。 ちなみに履歴は (Get-PSReadLineOption).HistorySavePath の先にあるテキストファイルに書き込まれます。

peco.exeをPATHの通っているフォルダに配置する

peco/peco: Simplistic interactive filtering tool peco.exeは単一バイナリで動くので環境変数PATHの通っているところに置いておけばどこからでも使えるようになります。 (今ならwingetとか使う方がいいのかな?)

Ctrl+Rの動きを上書きする

PSReadLineを入れるとCtrl+RがReverseSearchHistoryコマンドに割り当てられ、履歴の補完ができるようになるのですがちょっと使いにくい。

profile.ps1を作って:

New-Item $PROFILE
# デフォルトでは以下のファイルが作成される
# C:\Users\user\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

このファイルに以下のようなコマンドを追加してCtrl+Rを上書きし、履歴をpecoに渡して検索できるようにしてみました。

Set-PSReadLineKeyHandler -Chord Ctrl+r -ScriptBlock {
    $command = Get-Content (Get-PSReadLineOption).HistorySavePath | peco --select-1 --on-cancel error
    if (-not $command) {
        return
    }
    [Microsoft.PowerShell.PSConsoleReadLine]::InvokePrompt()
    [Microsoft.PowerShell.PSConsoleReadLine]::Insert($command)
}

ただPowerShellでpeco叩くとそれまでターミナルに表示されていた内容が消えちゃうんですよね。これなんとかできないかなぁ。

参考

新型コロナワクチン4回目

接種してきました。集団接種会場は予約が取れなかったのでクリニックの個別接種へ。個別接種というから1人ずつ打っていくものかと思いましたが100人以上人がいて結構規模が大きかったです。モデルナとファイザーの両方に対応していて、自分はモデルナでしたが自分1人だけで後は全員ファイザーのようでした。どれだけ不人気なの……。列が分かれていたので並んでいる人を横目にサクサク進めて、マクドナルドのモバイルオーダーでレジに並んでいる人をスルーした時の気分。

接種後の副反応は軽い腕の痛みと発熱で、これまでと同じ感じ。解熱薬を忘れてしまって1日38度超の熱でうんうん唸っていましたが1日で下がり、これまでより短く済みました。薬飲んでいないからなのか慣れとか加齢なのかは不明。

通院日に発熱すると面倒なので、副反応が2日出る場合金曜日しか選択肢がないのですが、1日で済むならいつ打ってもよさそう。今の感じだと5回目も普通に出てきそうですが、年2-3回打つのが当たり前となると副反応はもうちょっと軽くなってほしいですね。できればバフの持続期間自体もっと長いといいのですけど。まあインフルエンザも季節性だから年1で済んでいるけど通年だとこんなものなんですかね。

HORIのSwitch用コントローラを買ってみた

Switchのゲームはこれまでずっと携帯モードで遊んでいたけど、ゼノブレイド3はテレビモードで遊ぼうかなと思って、Proコンを買っておこうとしたけど売り切れで買えそうになかったので、HORIのコントローラにしてみました。こちらの方が安いしお試しにもいいかな、と。

USBケーブルでSwitchドックと繋ぐ方式ですが、これPCでも使えるのかな?と最近買ったゲーミングノートに繋いだら普通に認識して使えたので、ゼノブレイドまでの繋ぎにWindows版のドラゴンクエストXを遊んでいます。ノートでもこのくらいのゲームは普通に遊べるみたいなので、Streamとかで軽めのPCゲームはもっと手を出してもいいかもなー。

肝心のコントローラの操作感も普通に遊べるもので問題無いし、あとは週末を待つだけ。楽しみだなぁ。

pipのプログレスバー (rich.progress)

ソースを見たらrichというのを使っているみたいですね。tqdmしか知らなかったけど、色々ありますねぇ。

使い方はほとんど同じでrangeとかリストをラップした関数を呼ぶだけで良いみたい。

import time
from rich.progress import track

for n in track(range(100), description="Processing..."):
    time.sleep(0.05)

スマートフォンのホーム画面

blog.hatenablog.com

なるほどなあ。ここ数年は変化のない生活をしていて、ホーム画面は3ページに分けて使うアプリを置いていましたが、左端から右端へ行き来するのがちょっと面倒なので、フォルダをもっと利用して1ページにまとめようかな。端末も新しくしたことだし。

直近ではこんな感じ。

スマートフォンのホーム画面

背景画像はMicrosoft Launcher入れていると、Windowsと同様にBingから画像持ってきて定期的に違う画像を出してくれる。そんなにじっくり見ないけど、結構いい感じです。

ドコモのオンラインショップ

スマホを昔はドコモショップで購入していましたが、やたら他サービスの勧誘が多くて鬱陶しい。そこで前回はヨドバシカメラにしたところ、そこでもタブレットどうですかみたいな話があり、鬱陶しいと言うほどではなかったけど、その後新しい端末にSIMカード挿した瞬間にアプリの大量ダウンロードが始まってギガが減ったり、帰りの電車に乗るためにSuicaの設定とか外でやらなきゃならないとかもあったので、今回はドコモのオンラインショップを使ってみました。

予約・購入はオンラインででき、あとは待っていれば発売日に端末を送ってくれ、自分でSIMカード挿し換えれば完了とお手軽でよかったです。

ただ決済を確定する処理がPCでできず、スマホWi-Fiを切ってログインしないとできないという仕様が残念でした。これd払いとかでもあるんですよねぇ…いい加減見直してほしいです。ブラウザ側で色々詐称すれば通るんだろうか?