Skip to content

Blog

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

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

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

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

tcpdump で指定した時間だけ、パケットキャプチャする

tcpdump で指定時間のみ、パケットをキャプチャしたい場合は以下のように実行します。 以下の例では 60 秒間パケットをキャプチャし、指定時間が経過したら自動的に終了します。

1
tcpdump -i ens2 -w capture.pcap -W1 -G60

オプションの意味は以下の通りです。

ショートオプション ロングオプション 意味
-i interface --interface interface パケットキャプチャするインターフェイスを指定する
-w file - キャプチャしたファイルを書き込むファイルを指定する
-W filecount' - キャプチャファイルのローテーション (切り替え) 回数を指定する
-G seconds - キャプチャする秒数を指定する

余談ですが、-W オプションを指定しなくてもキャプチャ自体は開始出来ました。 しかし、指定時間が経過してファイル書き込みを行う際に Permission denied エラーになってしまいます。 ファイル自体は保存されているようですが、エラーが気持ち悪いので個人的には毎回、-W-G オプションを併用しています。

1
2
3
# tcpdump -i ens3 -w sample.pcap -G 60
tcpdump: listening on ens3, link-type EN10MB (Ethernet), snapshot length 262144 bytes
tcpdump: sample.pcap: Permission denied

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

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

Note

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

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

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

@staticmethod
def f(arg):
    ...

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

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