メモの日々


2025年12月03日(水) [長年日記]

[c++] C++で宣言に書く指定子の順序

C++の宣言に書く指定子の順序に言及した文書が https://github.com/cplusplus/draft のWikiにあったのでメモ。

In a decl-specifier-seq, the decl-specifiers should be written in the following order:

  1. friend / typedef / storage-class-specifier / virtual
  2. inline
  3. constexpr
  4. explicit-specifier
  5. const
  6. volatile
  7. unsigned / signed
  8. short / long
  9. other type-specifiers

2025年11月27日(木) [長年日記]

[python] datetimeオブジェクトへ明示的にタイムゾーンを付与する

以前にシステムローカルのタイムゾーンを付与する方法をメモした。

明示的にタイムゾーンを指定したい場合はどうしたらいいか。datetime.astimezone()だとうまくいかない。

>>> import datetime
>>> dt = datetime.datetime(2023, 1, 1)
>>> dt.isoformat()
'2023-01-01T00:00:00'
>>> dt.astimezone(datetime.timezone.utc).isoformat()
'2022-12-31T15:00:00+00:00'

日付が変わってしまった。datetime.replace()を使うとうまくいく。

>>> dt.replace(tzinfo=datetime.timezone.utc).isoformat()
'2023-01-01T00:00:00+00:00'

2025年11月22日(土) [長年日記]

[db] PostgreSQLでデータベースをコピーする

久しぶりにPostgreSQLを使っている。バージョンは18.0。

CREATE TABLE文を使って手軽にデータベースをコピーできることを知ったのでメモ。次のようにすれば、src_dbのコピーとしてdst_dbを作れる。

create database dst_db template src_db;

ただし、別のユーザーが接続中だとエラーになってコピーできないので注意。

マニュアルには次のような説明があった。

また、実際のところCREATE DATABASEのテンプレートとして名前を指定することで、クラスタ内の任意のデータベースをコピーできます。 しかし、この機能は、(まだ)汎用目的の「COPY DATABASE」能力を意図したものではないことを理解しておいてください。 コピー操作の間、他のセッションから元のデータベースに接続することができないという点は大きな制限です。 CREATE DATABASEは、その起動時に他の接続が存在する場合失敗します。 コピー操作中は元のデータベースへの新しい接続を許しません。


2025年05月28日(水) [長年日記]

[windows] WSLが起動しなくなったが復旧した

気づいたらWindowsが再起動していた。原因不明(原因を知る方法あるのかな?)。

その後WSLを起動しようとしたら次のエラーが出力され起動できなくなっていた。

ディスク 'C:\Program Files\WSL\system.vhd' を WSL2 にアタッチできませんでした: 指定されたファイルが見つかりません。

エラー コード: Wsl/Service/CreateInstance/CreateVm/MountDisk/HCS/ERROR_FILE_NOT_FOUND

不穏なメッセージだ…。C:\Program Files\WSL\system.vhd は存在していない。

検索すると、復旧はできるようだった。WSLの次のissueが参考になる。

このissueのこのコメントにあるように、GitHubからWSLのmsiファイルをダウンロードして、その中に含まれるsystem.vhdを C:\Program Files\WSL\ へコピーすればよい。

wsl --version コマンドで確認するとWSLのバージョンは2.5.7.0だったので、https://github.com/microsoft/WSL/releasesから wsl.2.5.7.0.x64.msi をダウンロードし、msiexecコマンドを使い次のようにしてmsiファイルをどこかへ展開し

start /wait msiexec /a wsl.2.5.7.0.x64.msi targetdir="C:\tmp\dokoka" /qn

展開先の PFiles64\WSL\system.vhd を C:\Program Files\WSL\ へコピーした。今の所これで問題なく復旧したように思われる。

msiexecの使い方は次のページを参考にした。


2025年03月28日(金) [長年日記]

[ruby] test-unit-runner-junitxmlのリポジトリをtest-unit公式配下に移した

6年前にリリースしたtest-unit-runner-junitxml というtest-unitのtest runnerのリポジトリを、https://github.com/test-unit 配下に置かせてもらうようになった。

次のissueがきっかけ。