/

Javaなどが単一クラスの継承しか許さないのに対してPythonはC++のように複数のクラスを継承する多重継承が許されている。これによって当然共通の基底クラスを持つような派生クラスを複数継承するといったことが可能になってくる。

多くの言語においてsuperキーワードは基底クラスにある同名メソッドを参照するために使われるが、Pythonにおいては組み込み関数super()でありその働きは全く持って他の言語のそれと異なるようだ。

もし直接numpy.random配下のメソッドを呼んだり、初期値を固定するためにRandomStateによって状態を記録する方法をとっているならnumpy.random.Generatorを使ったもっと良い方法がある。どう使うのか、なぜこちらの方が良いと思ったのかについて説明する。

/
  • poppler utilities unofficial windows binary
  • relocatable poppler-data directory
/

Markdownから画像を簡単に加工したりできるのはGravCMSの強いアピールポイントだろう。しかし、Grav単体ではMarkdownから画像を加工すると出力された画像に最適化が施されていない状態となる。

Webページの転送量における画像が占める割合は非常に大きいことはよく知られており、少しでも転送量を削減するためには画像の最適化は必須だ。Gravのリポジトリには、images/に画像が生成されるイベントを拾ってその画像を最適化するプラグインが存在しているが、今のところそれらはいずれも有料の画像最適化ウェブAPIを使用する。

Gravが動くようなサーバ環境があるなら、サーバローカルで画像最適化ツールを走らせることでこれらの有料サービスを使わずに同等の機能を実現できる。その方法をメモしておく。

/

JpegoptimにはWindowsバイナリが用意されていないようなのでビルドした。いくつかコケたポイントをメモしておく。