dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

コンソールからWindowsストアアプリを起動する

コマンドプロンプトの場合

start shell:AppsFolder\${パッケージファミリー名}!${アプリケーションID}

Windowsメディアプレイヤーをコマンドプロンプトから起動する

start shell:AppsFolder\Microsoft.ZuneMusic_8wekyb3d8bbwe!Microsoft.ZuneMusic

説明

伝統的なアプリと違い、Windowsストアのアプリは複雑な実行ファイル名になっている。 インストール場所も一定ではないから、上記のような複雑なフォーマットで実行する必要がある。 また、Windowsストアのアプリの大半はコマンドライン引数などCLIのサポートが絶望的である。 Windowsストアのアプリでファイルを開きたい場合、OSの機能であるファイルの関連付けを利用する方が簡単だろう。

Windows App SDKの分かりづらいエラーのメモ

XAMLファイル

エラー内容

エラー XHR0040 プロパティ "VisualTree" は 1 回しか設定できません。

エラー XLS0501 プロパティ 'VisualTree' が複数回設定されています。

解決方法

StackPanelなどのレイアウト要素で囲む。

このエラーはXMLのルート直下にボタンやテキストのようなレイアウト以外の要素を複数並列に置こうとすると発生する。 DataTemplateの直下でも同様のエラーが発生するから注意。

デバッグ停止

エラー内容

次の行で勝手に停止する。

 if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();

フォーマットされていないテキストファイルやコピーしたテキスト内からIPアドレスっぽい文字列だけ抜き出す

標準入力からパイプ前提

BSD版でも使える

# CIDR表記なし版
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
# CIDER表記版
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}'

チリコンカンレシピ

材料 4人分

  • ひき肉200 g 以上 合挽・牛・豚いずれでも良い。
  • 玉ねぎ 1玉
  • ミックスビーンズの缶詰 1缶 400gのもの
  • トマト缶 1缶 400gのもの ホールが望ましいが、カットでも良い。
  • ニンニク 1カケ
  • 塩 小さじ1
  • 固形のコンソメ1個
  • チリパウダー 大さじ2
  • オリーブオイル 大さじ2

作り方

深めの鍋を用意しろ

  1. ニンニク1カケを薄くスライスして、鍋にオリーブオイル大さじ2を入れる
  2. ニンニクの香りが立つまでオリーブオイルとニンニクを加熱する。
  3. 玉ねぎ1玉を4等分ぐらいずつみじん切りにして、鍋に投入し玉ねぎに軽く色がつくまで炒める。
  4. ひき肉を鍋に入れて、色が変わるまで加熱する。
  5. 塩小さじ1、チリパウダー大さじ2を鍋に入れてさらに少し炒める。
  6. トマト缶、コンソメを入れてトマトをよく潰す。これらはミックスビーンズ缶よりも必ず先に入れる必要がある。さもないと、トマトを潰したり、かき混ぜたりする際に豆がつぶれてしまう。
  7. ミックスビーンズ缶の中身を水ごと入れて煮立つまで加熱する。
  8. 弱火でしばらく煮る。強火で加熱すると焦げや豆が潰れる原因となる。

PythonのDB操作でCursorオブジェクトについて気にするな

Pythonではコネクションを開いた後、具体的なSQL文の実行にCursorオブジェクトを利用する。 「カーソルとか余計なものを使わわずに、シンプルに実行したい」と考えてもCursorオブジェクトを使え。 PythonのCursorはSQLで一般に言うカーソルとは別物である。 SQLの実行にはCursorオブジェクトが必要である。

コネクションのオブジェクトから直にSQLを実行できるかのようなメソッドが生えているが、 その実態はCursorを内部で新規作成し、そのCursorのexecute()を呼び出しているだけである。

プログラム中で1度しかSQLを実行しないのであれば有効な書き方かもしれないが、 複数回実行するならCursorオブジェクトが都度生成されることを避けるため Connection.cursor()でCursorオブジェクトを生成して利用せよ。

sqlite3 --- SQLite データベースに対する DB-API 2.0 インターフェース — Python 3.10.12 ドキュメント

内蔵SSDをEnhanced Secure Eraseで速く安全にデータ消去する

前提条件

  • hdparmコマンドが使えるLinuxライブ環境
  • ATA接続されているSSD

作業

Linuxのライブ環境が起動したら、一旦サスペンドする。

sudo systemctl suspend

そしてサスペンドから復帰する。 このサスペンド・復帰はSSDのSecure Eraseに対する保護frozenを解除するための手順である。

次のコマンドで削除対象のSSDを調べる。

hdparm -I ${デバイスファイル}

特に次の2つの記述をよく見る。

  • not frozen この状態じゃないとSecure Eraseができない。
  • supported: enhanced erase あればEnhanced Secure Eraseができる。削除時のオプションが少し変わる。

次のコマンドでデバイスに対してパスワードを設定する。 この後の削除でパスワードごと消されるから、パスワード文字列は何でもいい。 ここではpasswordとしている。

hdparm --user-master u --security-set-pass password ${デバイスファイル}

実際にSecure Eraseを実行する。 Enhanced Secure Eraseをサポートしているか否かでコマンドが変わる。

# Enhanced Secure Eraseをサポートしている場合。
hdparm --user-master u --security-erase-enhanced password ${デバイスファイル}
# Enhanced Secure Eraseをサポートしてない場合。
hdparm --user-master u --security-erase password ${デバイスファイル}

完了まで数分かかる。 完了までの予測時間はhdparm -Iに書かれている。 完了すると、特に何も出力せずに終了する。

注意

一部の記事でEnhanced Secure Eraseを行うために--sanitize-block-eraseというオプションを使っているものがあるが、自分の環境では使えなかった。 恐らく、hdparmコマンドのバージョンが低い。