SSブログ

codon [Python]

この記事で codon というものを知る
https://www.theregister.com/2023/03/11/python_codon_compiler/

CPython より 10から100倍速く C/C++ 並に、時には C/C++ 以上に速い・・・とのこと

手元の Ubuntu に
https://github.com/exaloop/codon#install
にあるコマンドを実行して
export PATH=$HOME/.codon/bin:$PATH
と、パスを通したら動いた。

LLVM toolchain を入れないといけないかどうかは知らない(多分 apt でインストールしないといけない)
macOS も同じようにすれば動きそうだ

確かに https://github.com/exaloop/codon#examples このフィボナッチ数列の関数は動くが、
試しに手元のスクリプトを動かそうとすると

- ビルトインモジュールすら色々動かない
- 未定義のローカル変数があったりするとコンパイルエラー
- 例外が発生するところで core dump してしまって StackTrace はいてくれない

と、なかなかハードルが高い。

既存の CPython のソフトウェア資産が使えるというより
- C で書くより、 Python っぽい書き方で書いた方が書きやすいでしょ
- うまく書いたら CPython でも codon でも動くようになってデバッグしやすそう
と理解した。

(自分では計測してないけど)速そうなので期待大だけど、もうちょいビルトインモジュールが動くようにならないと厳しいなぁ。
コメント(0) 
共通テーマ:日記・雑感

DjangoCongress 2022 [Python]

https://django.connpass.com/event/259310/


長いコロナ禍の中、あまり出かけることがなくなって出不精になっていたが、思い切って出かけてよかった

発表資料(の一部)はこちら
https://togetter.com/li/1972175

聞いた話の中では、 Nikkei さんの事例が面白かった。

パフォーマンスのために go で書き直している(書き直そうとしている?)ところはあるが、

- Django 管理サイトと、マイグレーションがいい
- 教育面、プロジェクトテンプレートの蓄積
- 試しに FastAPI も使ってみたが(Nikkei さんの使い方では)そんなに速くならなかった

ということで、まだまだ Django を使っていく感じだった。
よかった。自分も、このまま Django 使っていってよさそうだ。

他のトークやLT で、事例紹介で「ここの QuerySet の書き方をこう書き換えたら速くなった」という話をいくつか聞いて、「あるあるだねー」と思うことも多々あった。
PyConJP よりもさらにテーマが絞られているので、仕事で Django を使っている身としては、色々と面白かった。

せっかくなので、会場にいた人と話ができるといいと思ったけど、なかなか知らない人には話しかけられないので、知っている人としか話できなかった。それは残念。

コメント(0) 
共通テーマ:日記・雑感

PyCon JP 2022 [Python]

先週の金土と PyCon JP 2022 が開催され参加してきた。
久しぶりにたくさんの人に会った。
会社の同僚にも久しぶりに会った。

新型コロナにより引きこもりで出かけるのに億劫になっていたし、配信を見ることもできたが参加してよかった。

ただ、新型コロナ対策なのか、会場の都合なのか雑談できる場所がなくて
セッション中は、スポンサーブースにも静粛が求められて、
ほぼセッションを聞かずにウロウロしてそこらへんで見つけた人と話をしていた僕にしたら、
会場の参加者が雑談できる余地は欲しかったな(話を聞くならリモートでもできるし)と思った。

印象に残った話としては、
1日目の Mark Shannon さんの Python の高速化の話は面白かった。
具体的な話をされたらわからなかったが、これまでの Python 高速化の取り組み例の紹介に
重点をおいていて、自分にも理解できるなようだった。

印象的だったのは
- Python C API が動かせることを重要視していた
- どれくらい高速化できるかは、今後、どれだけ投資が得られるかにかかっている
と Mark Shannon さんが考えていたこと。

高速化については、数人の天才のひらめきで実現されるのかと思っていたが、
計測と改善の繰り返しで、金があれば速くできるとのこと。
JavaScript くらいに投資が得られれば JavaScript くらい速くなるかもしれないとのこと。
コメント(0) 
共通テーマ:日記・雑感

SSL証明書リストのありか [Python]

自分メモ

Pythonで参照しているSSL証明書リストのファイルパスを確認する方法
https://qiita.com/kai_kou/items/21809a358e00b971d2d3

独自(root)CA のインストール方法
https://qiita.com/msi/items/9cb90271836386dafce3

pem: Easy PEM file parsing
https://pypi.org/project/pem/

Python requestsライブラリは認証局の証明書をどう管理する?
https://dev.classmethod.jp/articles/how-to-manage-ca-root-certs-for-requets-library/

Certifi
https://certifiio.readthedocs.io/en/latest/
https://pypi.org/project/certifi/

check-tls-certs
https://github.com/fschulze/check-tls-certs

そのうち、自分で(pythonで)サーバー証明書の検証をやってみたい
https://stackoverflow.com/questions/46553338/how-to-verify-certificate-signature-in-pyopenssl
https://milestone-of-se.nesuke.com/sv-advanced/digicert/digital-certification-summary/
コメント(0) 
共通テーマ:日記・雑感

Products.ZSQLiteDA 0.7.4 リリース [Python]

わりと最近 Products.ZSQLiteDA のアイコンが表示できないよーという Issue をいただいた
https://github.com/nakagami/Products.ZSQLiteDA/issues/8

なんか間違えたらしいけど、最後にリリースしたの、一年半前の話だよ。
使えないわけじゃないらしく、誰も指摘してくれなかったのか、正直、これ使っている人がいる(もしくは動かしてみている人がいる)ことが驚きだなぁ。

ということで、(1回リリースしくじったりしながら) Products.ZSQLiteDA 0.7.4 をリリース。

修正よりも、 Zope のインストールに時間がかかった。

Zope のインストールは https://nakagami.blog.ss-blog.jp/2019-02-16 この時のメモが役に立った。
Plone 5.x が Python3.8 では動かなかったのがショックだったが、
Plone 6 が α4 まで出ているようなので、それに期待しよう。

ZMI 開くと「デザインが新しくないよ」と言われている。
dtml でテンプレート書いてるのを書き換えないといけないんだろうなぁ・・・と思いつつ、そのままにした。
コメント(0) 
共通テーマ:日記・雑感

Azure SQL Database と Python ドライバー [Python]

これは、
Data Platform for Microsoft Azure Advent Calendar 2021 https://qiita.com/advent-calendar/2021/azure-data-platform の 18日目です

Azure SQL Database は、SQL Server なので、SQL Server のデーターベースドライバーをインストールします。

SQL Server で公式に Python のドライバーとして pyodbc と pymssql が紹介されています。
https://docs.microsoft.com/en-us/sql/connect/python/python-driver-for-sql-server?view=sql-server-ver15
pyodbc は、Windows 以外だと、ODBC ドライバーのインストールが必要です。
Windows 以外で使う場合で、 ODBC ドライバーのインストール関連で、うまく動かないなーと言う場合は、Free TDS を使っている pymssql なら、普通は pip install pymssql だけでうまくいくと思います。

それ以外に、 pure python で書かれた pytds と minitds (拙作) があります。

pytds は pip install python-pytds でインストールします。
TDS で接続する場合(Azure SQL と接続する場合)は pip install pyOpenSSL で pyOpenSSL をインストールする必要があります。 pyOpenSSL の部分は pure python ではないです。

minitds は、周辺ライブラリも含めて pure python ですが、テストが十分でないかもしれません。
何か不具合があったら Issue に登録してください。

最近は、パッケージが wheel になっている場合が多いので、真に pure python が必要な場合はあまりないと思いますが、以前 Pythonista http://omz-software.com/pythonista/ で minitds を使っているという方からメールで質問をいただきました。確かに Pythonista のような環境では pure python である必要があると思います。
(他に、こんな状況ってあるかな?M1 Mac とか?)
コメント(0) 
共通テーマ:日記・雑感

paramiko を使い git リポジトリに ssh 接続をする [Python]

これは、 Python Advent Calendar 2021 https://qiita.com/advent-calendar/2021/python の14日目の記事です

そもそもの始まりは、この時 https://nakagami.blog.ss-blog.jp/2021-12-04
SageMaker Studio Lab から git リポジトリに ssh 接続できるとうれしいなぁ、と思ったこと。
git コマンドがあって ssh コマンドがない環境ってあんまりないと思うけど、これはそういう状況。

ssh 接続できると
- プライベートリポジトリにアクセスできる
- push できる
という利点がある。

GIT_SSHという環境に ssh 接続するコマンドを指定できることは知っていた。
なんとか、 SageMaker Studio Lab の環境で ssh 接続できないか・・・

試行錯誤の末、こんなスクリプトができあがった
https://gist.github.com/nakagami/bdae2e98bab06461041b169936c6bb70

Linux の場合(おそらく macOS/BSD でも)こんな感じ

1. ssh-keygen -t ed25519 -C "your_email@example.com" でキーペアを作る → .ssh/id_ed25519 と .ssh/id_ed25519.pub が生成される
2. https://github.com/settings/keys の SSH keys に ~/.ssh/id_ed25519.pub を登録
3. pip install paramiko
4. gitssh.py をどこかに置いて実行権限をつける (chmod +x gitssh.py)
5. .bashrc に環境変数 GIT_SSH として、gitssh.py のフルパスを設定(export GIT_SSH=/path/to/gitssh.py)

のような手順のあと、
git clone git@github.com:github/docs.git
で、ssh 接続 でリポジトリを clone できる。

秘密鍵は ${HOME}/.ssh/id_ed25519 を使うようになっているが、他のパスの秘密鍵を指定したい場合は gitssh.py の該当部分を書き換えて使う

・・・さて、そもそものきっかけであった SageMaker Studio Lab では、
上記で作成した公開鍵を .ssh/id_ed25519 に置いて、環境変数を設定してもうまく動かない。
outbound の port 22 が塞がれているようだ。残念。

幸いにも、 GitHub では、 443 ポートを使って ssh 接続できる。
Using SSH over the HTTPS port
https://docs.github.com/en/authentication/troubleshooting-ssh/using-ssh-over-the-https-port

スクリプトの
PORT = 22
となっているところを
PORT = 443
と変更し、
git clone git@github.com:github/docs.git
でなく
git clone git@ssh.github.com:github/docs.git
と、ホストに ssh.github.com を指定すると clone できた。

めでたしめでたし
コメント(0) 
共通テーマ:日記・雑感

Db2 (と Apache Derby) の pure python ドライバー [Python]

これは、 Python Advent Calendar 2021 https://qiita.com/advent-calendar/2021/python の11日目の記事です

今週 pure python の Db2 データーベースドライバ pydrda の最新バージョン (0.4.5)をリリースしました
https://pypi.org/project/pydrda/

最初に Db2 で動くようにできたのがこの頃
https://nakagami.blog.ss-blog.jp/2019-05-06

実のところ自分が、このドライバーのテストのために動かしている以外に Db2 で動いているのを見たことがなかったので、
(設定やインストールの問題で、自分以外には動かせていないんじゃないかという)
一抹の不安があったんですが・・・
この↓「不正なパスワードだと無限ループする」という不具合の修正の pull request で
https://github.com/nakagami/pydrda/pull/9
自分以外に動かせている人がいるということがわかりました。
・・・というわけで、今週、この pull request をマージしてリリースしました。

ちなみに IBM 製の python ドライバーは、これ↓
- https://pypi.org/project/ibm-db/
- https://github.com/ibmdb/python-ibmdb
API が PEP 249 に従ってなくて、python でデータベースにアクセスするプログラムを書いたことある人には難しく感じるのではないでしょうか。
また、C拡張の部分があるので、インストールにハマることもありそうです。
https://github.com/ibmdb/python-ibmdb/issues
(Mac から使えないという Issue 多いけど、海外では Mac から Db2 に接続するとかあるのか。日本では、その組み合わせはあまりなさそう)

Db2 に python で接続したい人(いれば) pydrda 使ってみてください

コメント(0) 
共通テーマ:日記・雑感

TLS1.3 のラッパー書いた [Python]

これは、 Python Advent Calendar 2021 https://qiita.com/advent-calendar/2021/python の7日目の記事です

今年、 Python で、 TLS 1.3 のラッパー書きました
https://github.com/nakagami/tinytls
https://pypi.org/project/tinytls/

簡単に言えば、ssl モジュール https://docs.python.org/ja/3/library/ssl.html みたいなやつ
ssl モジュールと比較すると

- TLS1.3 の TLS_CHACHA20_POLY1305_SHA256 暗号スィートしか使えない
- X25519 による鍵交換しかできない
- サーバー証明書を検証していない
- Python で実装しているので遅い

と、できないことだらけです。
普通は ssl モジュールを使えばいいので、役に立つものではないんですが、SSL/TLS のラッパーを書いてみるのは、昔からの憧れでしたので(なぜなら、実装するのが難しそうだから。そして、確かに難しかったのですが)曲がりなりにも形になって、とても嬉しいです。

Firebird のドライバーで ChaCha20 がどんなものかわかってきて
https://nakagami.blog.ss-blog.jp/2021-12-02
そういえば、 TLS1.3 で ChaCha20 が使われるようになったぞ。
プロトコルが、TLS1.2から比べて簡素化されたらしいし、サーバー証明書の検証を省略すれば TLS1.3 のラッパーが書けるかもしれないぞ
・・・と思ったのですが、楕円暗号による共通鍵交換とか、HMAC による署名とか、
色々組み合わされていて、ChaCha20 はその中の一部でしかなく、自分には予想以上に難しかったです。

このリポジトリー https://github.com/tex2e/mako-tls13 がとても参考になりました
そして、このブログ https://tex2e.github.io/blog/ 中でも https://tex2e.github.io/blog/crypto/chacha20poly1305 この記事が参考になりました。
どちらも @tex2e さん、すごい。

Python は、遅いんですが、sha256 などのハッシュ関数が組み込みライブラリにあって、数値が多倍長整数型に自然に拡張されるので暗号関連の
実証コードを書くには便利だなと思っています。
コメント(0) 
共通テーマ:日記・雑感

SageMaker Studio Lab 使ってみた [Python]

これは、 Python Advent Calendar 2021 https://qiita.com/advent-calendar/2021/python の4日目の記事です

AWS、JupyterLab IDEベースの新サービス「SageMaker Studio Lab」無料提供を発表
https://www.publickey1.jp/blog/21/awsjupyterlab_idesagemaker_studio_labaws_reinvent_2021.html
・・・ということで、
AWSアカウントとの紐付けもなく、クレジットカードの登録もないそうなので、気軽に登録してみた。

https://studiolab.sagemaker.aws/ ←ここの Request free account から登録
すぐに届く「Verify your email」という e-mail のボタンを押すと、「ウェイトリストに追加したよー」という画面に遷移する。
しばらくして「アカウント作る準備ができたよ」 というメールが来たら、リンク踏んでアカウントを作る。
ちなみに、送られてくるメールの Subject が微妙で、迷惑メールに入ってしまう可能性高いので注意。
アカウント作る準備ができたよメールに気づかないところだった。

ここまでやると、 https://studiolab.sagemaker.aws/ ここの Sign in からログインできる

試しに、mecab mecab-ipadic をインストールして pure-pyawabi https://pypi.org/project/pure-pyawabi/ で形態素解析してみた。https://gist.github.com/nakagami/a7023998ffaa50bd2a64626e0777b7ee

自己満足のために頑張ったけど、 janome をインストールするのが簡単。

本当は NEologd をインストールしたかったんだけど↓ ./configure でエラーになって挫折
https://qiita.com/yaiwase/items/8e1063d86b4a5861a743
他のマシンで辞書データを作って、どこかにアップロードして、そのどこかからダウンロードしたらいけるかなって思う。

aws コマンド、 curl は入っている。ssh や scp は入ってない。
git は入っているが ssh が使えないので、public なリポジトリに https でアクセスして clone はできるが push はできない。
記事では「PythonやR言語などに対応しており」と書いてるけど、デフォルトでは R のカーネルは使えるようにはなってないっぽい。conda は入っている。
R は、 https://nxdataka.netlify.app/rjup/ こんな感じで自分でインストールしろってことかな。

vi/vim は入ってない。 pip で pyvim https://pypi.org/project/pyvim/ を入れたら Terminal で使えている。
Terminal のフォントが、ちょっと見づらいなぁと思うけど、フォントを変更する簡単なメニューはなさそう。
Settings → Advanced Settings Editor → Terminal で style を設定できるみたいだけど、思ったように設定する自信がないのでそのまま。

16Gbytes のメモリと 15Gbytes のストレージなので、機械学習の学習用には十分なのでは。
なんか、面白いことできないかなぁ。
環境は /etc/os-release を見ると Ubuntu20.04 ベースのようなので、 apt install できると色々便利そうなんだけど、今のところ root の権限を得る方法がわからず。
・・・と思ったら、 stackoverflow で質問してる人がいて(速い!)やはりできないようだ
https://stackoverflow.com/questions/70202848/is-it-possible-to-apt-install-in-sagemaker-studio-lab/70204408
ssh クライアントだけ、入れてくれないかなぁ

セッション間でストレージが維持されるの素晴らしいんだけど、こうなってくると pip でいろんなものをインストールした後に、
「あー、もう一回最初っからやりたい」
って時に、全部リセットして、もう一回最初っからってどうすればいいのかなと思ったら・・・
https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lab-use-manage.html
ここに書いてあった。
インストールされているパッケージとか、 conda で環境作る話とかも。まずはここを読めば良さそう。
(!pip install じゃなくて %pip install 使えとか書いてあるな・・・)

あと機械学習なんかの example が、ここにある https://github.com/aws/studio-lab-examples

(2021-12-11 追記)
アカウント登録から使い方の説明、これがわかりやすい
https://tech.nri-net.com/entry/sagemaker_studio_lab
コメント(0) 
共通テーマ:日記・雑感