Python の省略記号(…)について

いままでなんとなく見てよくわからないままにしていた Python コード中の省略記号、「...」。シンタックスだと思ったらなんとオブジェクトだった。

>>> ...
Ellipsis
>>> type(...)
<class 'ellipsis'>
>>> dir(...)
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> 

...Elipsis といって、ellipsis オブジェクトである。3つのドットは Elipsis を表す専用のリテラル表記。

特別なオブジェクトのリテラル表記にすぎないとわかった以上は、使いみちを理解すれば怖いものではない。

When Do You Use an Ellipsis in Python? – Real Python

C# でのコマンドラインオプション解析

ふと、C# (.NET) でコマンドラインオプションのパースはいまはどうやるのが定石なんだろうと思って調べてみた。

.NET – Parse the Command Line with System.CommandLine | Microsoft Learn

.NET プロジェクトが System.CommandLine パッケージをコミュニティベースで開発している。

dotnet add [<project>] System.CommandLine --prerelease

ちょっと面白いのが、DragonFruit という追加パッケージを入れることで、main メソッドのシグネチャからコマンドライン引数を作ることができる。この発想はなかった。

dotnet add [<project>] System.CommandLine.DragonFruit --prerelease

あとは Python の argparse でできるようなことはひととおりできそう。

System.CommandLine overview – .NET | Microsoft Learn

Tutorial: Get started with System.CommandLine – .NET | Microsoft Learn

jjtemplate

Jinja2 テンプレートのオブジェクトを JSON ファイルで指定してテキストを出力できる Python スクリプト(兼モジュール)を作りました。

jsonjinja · PyPI
jjtemplate · PyPI

まあぜったい世の中のだれかがもう作ってるだろうけどいいんだよ。

あと名前も気に入ってます。ジェイソン神社。

2024-10-14 追記

GitHub に同名のプロジェクトがあったので混乱を避けるため jjtemplate に改名しました。

Visual Studio Code で CMake Tools の MSBuild 出力が文字化けする対策

CMakePresets.json の configurePresets で環境変数 DOTNET_CLI_UI_LANGUAGE と VSLANG を指定すると msbuild.exe の出力を英語に設定できる。両方とも指定しないとなぜか変わらない(💢)。

設定例:

{
    "version": 8,
    "configurePresets": [
        {
            "name": "x64",
            "generator": "Visual Studio 17 2022",
            "toolset": "host=x64",
            "architecture": "x64",
            "binaryDir": "${sourceDir}/build/${presetName}",
            "cacheVariables": {
                "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install/${presetName}",
                "CMAKE_C_COMPILER": "cl.exe",
                "CMAKE_CXX_COMPILER": "cl.exe"
            },
            "environment": {
                "DOTNET_CLI_UI_LANGUAGE": "en-US",
                "VSLANG": "1033"
            }
        }
    ],
    "buildPresets": [
        {
            "name": "x64-debug",
            "configurePreset": "x64",
            "configuration": "Debug"
        }
    ]
}

ほんとうは日本語で文字化けせずに出せればそれがいいのだがわからなかった。エクステンションのロード時にどこかでコードページが指定されているようなのだが……。

Caddy で WordPress をホストする Docker Compose

Docker Compose を練習するのに WordPress サイトをローカルに立ててみるのはだれでもやったことあるんじゃないだろうか。これはリバースプロキシとなるウェブサーバー、PHPのCGI(WordPress)、データベースと複数のコンテナが連携するので Docker Compose の練習にはうってつけだと思う。

ちょっと前まではリバースプロキシに Nginx を使うのが定石だったが、さいきんは Caddy というさらに簡単に使える万能ウェブサーバーが出てきて、これを使いたいという人も多いと思う。

Caddy は公開で立てると TLS 証明書の更新まで自動でやってくれるらしいので実用でもなかなかよさそう。Nginx では Let’s Encrypt の更新をスクリプトでなんとか自動化するみたいなことをしていたが、そんなこと人間が手動でがんばることなかったのだ。

そんなわけで私も練習に Caddy + WordPress (+ MariaDB) で立ちあがる Docker Compose ファイルを作ってみました。FastCGI で動かすとかするとけっこう頭使うところもあったので覚え書きも兼ねている。また、localhost で TLS 証明書を使いたいときの参考にもなるかもしれない。

emptypage / wordpress-compose — Bitbucket