SSブログ

動く疑似コードとしての Python [Python]

これは、BeProud Advent Calendar 2018 https://adventar.org/calendars/3338 の11日目の記事です。


2018-10-21 にあった tokyo.ex#9 というイベント
https://beam-lang.connpass.com/event/103873/
の LT で、
「elixir のPostgreSQL ドライバーに Pull Request を送ってマージされたよ、わーい」
という話をした。
PostgreSQL 10 で実装された scram-sha-256 authentication method に対応したものだ。

https://gist.github.com/nakagami/db99822eef3033acfbfe11241cc15547

この時のメインテーマは 「Jose Valim さんはいい人」だった。

これを、BeProud Advent Calendar 目線で語ると、elixir で実装する前に、自分が書いた Pure Python のPostgreSQL ドライバー https://github.com/nakagami/minipg に scram-sha-256 認証のメソッドを実装して動作を確認できたことが大きかったと思う。
https://github.com/nakagami/minipg/commit/d4ef01ae2867b267c4e4dca8550b9cfce0a61ccc

自分の慣れもあるだろうけど、python は、ビルトインのライブラリも充実していて、例えば、今回であれば
「hashlib と base64 と hmac 使えばできるはず!」
という予想ができて、逆に、python のライブラリを活用しても実装するのが困難な機能は、他言語で実装するのは無理だろう、という信念に基づいて実装できた。
Python は実行は遅いけど、検証のために「とにかく動くものを作る」のには、とても適していると思う。

まあ、正確に言えば、先に Python で実装して、
「なんか、自分書いたら勉強になるプログラミング言語で、まだ、この機能が実装されてないドライバーはないかなぁ・・・」
と探した結果なんだけれども。

Python で、PostgreSQL のドライバーといえば psycopg2 がデファクト・スタンダードだが、リファレンス実装として Pure Python の PostgreSQL ドライバーを書いておいて良かった・・・と思う今日この頃

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

Firebird 4.0 のTimeZone サポート [Firebird]

これは、 Firebird Advent Calendar 2018 https://qiita.com/advent-calendar/2018/firebird の11日目の記事です。

長いこと放置されているように見えたのですが、
つい二週間ほど前に、タイムゾーンサポートの Pull Request が master にマージされました。
まだ、足りないところもあるのかもしれませんが、もう後には引けないので
Firebird 4.0 ではタイムゾーン付きの time, timestamp が使えるようになります。
ドキュメントはこちら↓
https://github.com/FirebirdSQL/firebird/blob/master/doc/sql.extensions/README.time_zone.md

以下、最新の master をビルドして isql で実行してみた結果です

CREATE TABLE tz_test (
    id INTEGER NOT NULL,
    t TIME WITH TIME ZONE,
    ts TIMESTAMP WITH TIME ZONE
);
INSERT INTO tz_test (id, t, ts) values (1, '12:34:56', '1967-08-11 23:45:01');
select * from tz_test;

          ID                                              T                                                        TS
============ ============================================== =========================================================
           1 12:34:56.0000 Etc/UTC                          1967-08-11 23:45:01.0000 Etc/UTC


SET TIME ZONE 'Asia/Tokyo';
INSERT INTO tz_test (id, t, ts) values (2, '12:34:56', '1967-08-11 23:45:01');
select * from tz_test;

          ID                                              T                                                        TS
============ ============================================== =========================================================
           1 12:34:56.0000 Etc/UTC                          1967-08-11 23:45:01.0000 Etc/UTC
           2 12:34:56.0000 Asia/Tokyo                       1967-08-11 23:45:01.0000 Asia/Tokyo


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