Skip to content

Python

DockerHub へイメージを登録する

DockerHub にイメージをアップロードするには GitHub と連携させるのが簡単です。 ですが、Changes to Docker Hub Autobuilds で下記のように書かれている通り、2021 年 6 月 18 日から DockerHub の無料アカウントでは GitHub 連携が出来なくなっています。

As many of you are aware, it has been a difficult period for companies offering free cloud compute [1]. Unfortunately, Docker’s Autobuild service has been targeted by the same bad actors, so today we are disappointed to announce that we will be discontinuing Autobuilds on the free tier starting from June 18, 2021.

GitBucket 4.40.0 の Docker コンテナを作成する

GitBucket 4.40.0 がリリースされていました。 4.40.0 - 22 Oct 2023 付の ChangeLog によると変更箇所は下記だそうです。

4.40.0 - 22 Oct 2023

  • Configurable default branch name
  • Support custom fields of issues and pull requests in search condition
  • Create pull request from default branch of forked repositories
  • News feed shows activities of all visible repositories
  • Drop Java 8 support
  • Improve git push performance

GitBucket のコンテナイメージは gitbucket/gitbucket で提供されているようです。 ですが、実際に起動してみるとバージョン 4.38.4 (2 Nov 2022) とやや古いように見えました。 その為、今回は最新のバージョン 4.40.0 をコンテナイメージ化してみます。 尚、作成したコンテナは DockerHub 内の下記 URL で公開しています。

hyperfine でコマンドのベンチマークを実行する

hyperfine を使うとコマンドのベンチマークを実行出来ます。 類似のツールに benchpoop があります。 poop は高機能なようですが、私の環境では動作させることが出来ませんでした。 今回は hyperfine を起動する手順まで、メモしておきます。 今回は Ubuntu 24.04 環境でテストしました。

CiscoConfParse 初期化時の INFO 表示を抑制する

以前に CiscoConfParse でインターフェイス情報を抽出する というメモを書きました。 CiscoConfParse は「Cisco 機器のコンフィグを構造的に扱うことが出来る」便利なライブラリです。 但し、ネット上にある古いサンプルの書き方では実行時に INFO が表示されることがあります。 今回はそれを抑制する方法をメモしておきます。

Python でデコレータを利用する

Python のデコレータ (decorator) は 公式ドキュメントの用語集 で以下のように定義されています。

Note

(デコレータ) 別の関数を返す関数で、通常、 @wrapper 構文で関数変換として適用されます。デコレータの一般的な利用例は、 classmethod() と staticmethod() です。

デコレータの文法はシンタックスシュガーです。次の2つの関数定義は意味的に同じものです:

def f(arg):
    ...
f = staticmethod(f)

@staticmethod
def f(arg):
    ...

同じ概念がクラスにも存在しますが、あまり使われません。デコレータについて詳しくは、 関数定義 および クラス定義 のドキュメントを参照してください。

つまり、デコレータの実態は「関数を受け取り、関数を返す関数」と言えます。 もう少し分かりやすく噛み砕くと「関数の処理内容を変更せず、関数に機能を追加出来る仕組み」とも言えます。

Python で文字列結合を f 文字列で実装する

Python で文字列を結合したり、フォーマットを指定するには str.format(args, *kwargs) を使う方法があります。 Python 3.6 からは フォーマット済み文字列リテラル、俗に言う「f 文字列」がサポートされ、より簡単に定義出来るようになりました。

以下は「文字列を結合して表示する」という目的を異なる方法で実装した例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
a = "apple"
b = "banana"

# format() を使った書き方
print("{} and {}".format(a, b))

# 文字列結合を使った書き方
print(a + " and " + b)

# f 文字列を使った書き方
print(f"{a} and {b}")