LeetCode の Number of Matching Subsequences の解答例 (Python 3)
LeetCode の Shortest Way to Form String の解答例 (Python 3)
LeetCode の Delete Nodes And Return Forest の解答例 (Python 3)
LeetCode の Decode String の解答例 (Python 3)
プライベートサブネットの Locust クラスタで動いているウェブインタフェースに接続する
Locust のようなウェブアプリケーションに対するベンチマークツール (負荷試験ツール) を使うのであれば、アプリケーションが動いている場所と同じネットワークで起動するべきである。ベンチマークを取るときにネットワークの影響を軽減するためだ。
多くの場合はウェブアプリケーションはプライベートサブネット内で動くだろう。公開されたロードバランサが、ウェブアプリケーションにリクエストをフォワードするのである。この場合、Locust も同じプライベートサブネットで動かすべきである。しかし、Locust のウェブインタフェースに手元からアクセスしたい場合はどうすればよいだろう?
この場合、SSH のポートフォワードを使うのが最も手っ取り早い。
Locust のウェブインタフェース (通常はマスター) が ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com
のポート 8089 (デフォルト) で動いているものとする。また、このプライベートサブネットに接続できる踏み台サーバが bastion.example.com
と仮定する。その場合、次のコマンドでリモートで動いている Locust のウェブインタフェースに対してポートフォワードできる。
ssh -fNL 8081:ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com:8089 bastion.example.com
このコマンドを叩いた後で localhost:8081 をブラウザで開けば、手元のブラウザから Locust を管理できる。
Python で Socks プロキシを経由して目的とするサーバにアクセスする方法
この記事は何か?
Python で Socks プロキシを経由して目的とするサーバにアクセスする方法について書いた記事である。わたしは Python 3.8
環境で実験したけれど、Python 3 系であればバージョンを問わず同じように動かせるはずである。
具体的なコード
requests と PySocks が導入された状態で、次のようにプロキシの設定をする。なお、Socks プロキシそのものを作成する方法はこちらの記事を参考にしてほしい。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
proxies = {
'http' : "socks5h://localhost:1080",
'https' : "socks5h://localhost:1080"
}
requests.get('http://somewhere.example.internal/ping', proxies=proxies)
何がハマりどころかというと、Socks プロキシの記述で socks5://localhost:1080
ではなく、socks5h://localhost:1080
としなければならない点である。そうでない場合、DNS での名前解決をローカルで行うため、Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known
のようなエラーメッセージを見ることになる。
Pootle 2.5.0 のインストール
需要は大きくないだろうけど、とりあえず書く。
まず現時点で GitHub の INSTALL ファイルに記載されている情報 は間違いである。Pootle の最新版を解凍しても PootleServer ファイルは存在しない。2.1.6 や 2.2.0 のスナップショット版にはこのファイルが存在している。プログラムのアップデートにドキュメントのアップデートがついてきていないようである。
代わりに解凍されたファイルには setup.py がついてきている。これを実行する。
$ python setup.py install
これで終わりではなく、pootle ディレクトリに移動して次の操作を行う。
$ mkdir -p pootle/assets
$ python manage.py collectstatic --noinput
$ python manage.py assets build
これらは fabfiles.py に記述されている。けど fabfiles.py がいつ走るべきかよく分からない…ので手作業で実行する。
最後に manage.py を走らせる。
$ python manage.py runserver
これで localhost の 8000 番ポートで Pootle が起動する。