SSブログ

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) 

TIOBE プログラミング言語ランキングで Python が1位に [Python]

毎月更新されている TIOBE のプログラミング言語ランキングの2021年10月のランキングで Python が一位になった
https://www.tiobe.com/tiobe-index/

Python が一位になったのは、たぶん初めて

C言語、Java と一位の座を争うかもしれないが、ライブラリの充実度や、 PSF による機能追加がうまくいっていることで、今後 Python が安定的に一位を維持しそう。
そして、今のところ Python を超える人気のプログラミング言語は出なそう。

いろんなところにあるアルゴリズムを説明したサンプルコードが、 Python や Python に似た言語になっていることも多くなったと思う。
まだまだ、Python でメシを食っていけることと、これからプログラミングを新たに学ぼうという人に、我田引水でなく Python を勧められるのがありがたい。
コメント(0) 

PyPI パッケージソムリエ [Python]

今日、仕事で、PyPI に登録されているパッケージについて
- 最後のリリースが古いからやめておいた方がいいですよ
- こっちのは、新しいし、今のところメンテナンスされている雰囲気
- 本当に大丈夫そうか確認のためには、ソースコードでどんなことをやっているか確認する必要はありそう
- XX社謹製のパッケージは継続的にメンテナンスされていきそう
- 結論として、XX社のパッケージは使って、「あったら便利(かも)パッケージ」はソースコードを読んで参考にするくらいが良さそう
と言うような話をしていた。

買ってくるソフトウェアの
- サポートされているか?
- いつまでサポートされるか?
- サポート価格
を調べて、問題あったらサポートに丸投げする、というやり方とは全然やり方が変わって来ていて、それが、下流から上流に広がってきてる感じがする今日この頃。
コメント(0) 

python でリバーシ(オセロ)with tkinter [Python]

これは、
オセロ Advent Calendar 2020
https://qiita.com/advent-calendar/2020/othello

(おじさんですが)PyLadies Japan Advent Calendar 2020
https://adventar.org/calendars/5685
の 12日目の記事です

3年半ほど前に、コンソールに盤面を print するリバーシを書き、そのことを日記に書きました。 https://nakagami.blog.ss-blog.jp/2017-08-26

https://gist.github.com/nakagami/7a7d799bd4bd4ad8fcea96135c4af179
↑この gist の description にあるリンクを踏むと、python anywhere で動かしてみることができます。

・・・さて、ここまでで終わってしまうのでは、「過去記事の紹介かよ〜」ということになってしまうので、今日のエントリーのために tkinter の GUI をつけました。
上記 gist にある tkreversi.py というのが今回追加した GUI部分です。
対戦ロジックは reversi.py のものを使っています。

Gist のページの右上の「Download ZIP」のボタンを押下してダウンロードしたファイルを unzip して tkreversi.py を python3 で実行すると、 GUI で、ボタンをポチポチして対戦できます。
スクリーンショット 2020-12-10 9.55.41.png

reversi.py を実行するとコンソール板も動かすことができます。
コメント(0) 

LibreOffice のPython を使う [Python]

これは、LibreOffice Advent Calendar 8日目の記事です。
https://adventar.org/calendars/5258

LibreOffice には、Python がビルトインされています。
例えば、Windows 環境でデフォルトインストールにすると以下の場所にあります。

"C:\Program Files\LibreOffice\program\python.exe"

LibreOffice 7.0 の Python のバージョンを確認すると 3.7.7 のようです。
C:\Users\nakagami>"C:\Program Files\LibreOffice\program\python.exe" -V
Python 3.7.7

この python には、 pip が入ってませんが、以下のようにすると pip がインストールできます。
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
"C:\Program Files\LibreOffice\program\python.exe" get-pip.py

この状態で、以下のようにすると janome が (pipにより)インストールできます。

"C:\Program Files\LibreOffice\program\python.exe" -mpip install janome
実行例↓
C:\Users\nakagami>"C:\Program Files\LibreOffice\program\python.exe" -mpip install janome
Defaulting to user installation because normal site-packages is not writeable
Collecting janome
  Downloading Janome-0.4.1-py2.py3-none-any.whl (19.7 MB)
     |████████████████████████████████| 19.7 MB 6.4 MB/s
Installing collected packages: janome
Successfully installed janome-0.4.1

↓ Interactive shell から import してみたところ
C:\Users\nakagami>"C:\Program Files\LibreOffice\program\python.exe"
Python 3.7.7 (default, Aug 27 2020, 20:55:02) [MSC v.1925 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import janome
>>>


残念ながら venv パッケージも入っておらず、 virtualenv をインストールしても、うまく仮想環境作れませんでしたが、 Windows では pip のインストールと、 pip を使ったパッケージのインストールは、管理者権限がなくてもできるようです。(ユーザー毎の環境にインストールされる)

公式のPython のインストーラーでインストールしたものと、LibreOffice にバンドルされている Python で、どこが違うのは把握できてませんが、(少なくとも、上記のように足りないパッケージはあるようですが)職場の Windows パソコンに Python はインストールされてないけれど LibreOffice は入っている、管理者権限はないけどPython は使いたいという環境の方(いるのか?)に、どこまでできるかチャンレンジしてもらいたいです。
コメント(0)