So-net無料ブログ作成

Firebird を使うメリットって何だろう [Firebird]

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

MySQL や PostgreSQL じゃなくて Firebird を使うメリットって何だろう?
たまに質問されて、自分でも悩んでしまうが、これを機会に挙げてみると・・・

【メリット】

- インストールが簡単。 https://nakagami.blog.so-net.ne.jp/2018-12-02
- コンフィグレーションが簡単。 firebird.conf の修正だけ
- Windows のサポートがちゃんとしている
- (特に最近)SQL 標準の機能がサポートされてきている
- LibreOffice 6.2 の Base で使える http://blog.kimuradb.com/?eid=877556
- 開発が特定の企業に依存していない

【デメリット】

- 使っている人が少ない
- チューニングパラメーターが少ない(チューニングの余地が少ない)
- 可用性を高める機能がない。もしくはとても不足している
- 高負荷を分散するマルチマスターやシャーディングの機能がない
- 開発者とユーザーが少ない

ほとんどの場合困らないと信じているが、困ってしまったときに行き詰ってしまうかもしれないという怖さはある。
SQL文の機能的には問題ないが、僕ですら、積極的に人には勧められない。

僕が、Firebird プロジェクトにコミットしているのは、 せっかく Interbase が公開してくれて OSS として使える RDBMS が放置されて、選択肢が狭くなるのは勿体ない、ということからである。
できれば、僕も(Firebird にして良かったという場面で)仕事で使ってみたい。

HDD のような壊れやすいストレージに依存しなくなって、ストーレージが速くなって、今後、チューニングの必要のない小~中規模の環境で使うメリットが大きくならないかなぁ
・・・という願望はあるし、ワンチャンあるのでは、とは思っている。
コメント(0) 
共通テーマ:日記・雑感

pyfirebirdsql 1.1.2 released [Firebird]

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

Pure python な Firebird Database driver pyfirebirdsql 1.1.2 を(今さっき)リリースしました
https://pypi.org/project/firebirdsql/1.1.2/

主な変更点は 9日目に書いた timezone のサポートです
https://nakagami.blog.so-net.ne.jp/2018-12-11

次にリリースされるであろう Firebird 4.0 beta1 では使えると思います。
コメント(0) 
共通テーマ:日記・雑感

MySQL 8.0 の caching_sha2_password 認証 [Python]

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

2018年といえば MySQL8.0 が GA になりました。

MySQL 8.0 では、 caching_sha2_password という認証メソッドがデフォルトになりました。
https://dev.mysql.com/doc/dev/mysql-server/latest/page_caching_sha2_authentication_exchanges.html
ざっくり言うと、データーベースの中に保存してあるハッシュ化されたパスワードと、
一時的な nonce でハッシュした値でパスワードが一致しているか確認するアルゴリズムです。

それまで長いこと mysql_native_password という認証メソッドがデフォルトでした。
https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase_authentication_methods_native_password_authentication.html
20 バイトの scramble とパスワードをハッシュした値が一致しているかを確認するアルゴリズムです。
よくある、シード付きのハッシュパスワードです。

私は、 CyMySQL という PyMySQL からフォークした MySQL のドライバーをメンテナンスしています。
https://github.com/nakagami/CyMySQL
まず、このドライバーでcaching_sha2_password プロトコルの実装をすることができました。

気をよくした私は、 Go 言語のドライバーで実装し pull request を送って、無事マージしてもらえました。
https://github.com/go-sql-driver/mysql/pull/794
わーいわーい。

さらに気をよくした私は、elixir のドライバーの pull request も送りました。
3か月の放置された後、10日程前に、無事マージされました。
https://github.com/xerions/mariaex/pull/236
わーいわーい。

pythonでプロトタイプを書いて、ほかのプログラミング言語に実装・・・11日目と同じでしたね。
https://nakagami.blog.so-net.ne.jp/2018-12-11-1
コメント(0) 
共通テーマ:日記・雑感

django の Firebird バックエンド [Firebird]

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

Python の Web フレームワーク Django は、デフォルトではFirebird をデーターベースバックエンドとして使えませんが、サードパーティーのデーターベースバックエンドを使用すると使えるようになります。
(フルサポートというわけにはいきませんが)

Django データーベースバックエンドについては DjangoCongress 2018 の資料を見てください
https://gist.github.com/nakagami/098db7387d78ab9c6aa85d77a0eeecf5

私が知る範囲で開発が継続されているのは2種類あります。

ひとつは django-firebird
https://pypi.org/project/django-firebird/
現在の最新は、 Django 1.11 に対応したバージョン 1.11 です。
データーベースドライバー fdb で Firebird 2.x 以上をサポートしています。
https://www.firebirdnews.org/django-firebird-1-11-final-release-available-on-pypi/

もう一つは、私が開発しているdjfirebirdsql
https://pypi.org/project/djfirebirdsql/
https://github.com/nakagami/djfirebirdsql

Django、 データーベースドライバー pyfirebirdsql、Firebird のいずれもリポジトリの最新のバージョンを対象にしています。
これは、かなり expreimental な状態なので、安定性という意味では全くオススメしません。

Firebird4.0 の機能を使っているので、 django-firebird と生成される SQL文が異なります
正直、 stable な状態になるかわかりませんが、 Django 2.2 + Firebird 4.0 で使えるバージョンをリリースできると良いな、と思っています。
コメント(0) 
共通テーマ:日記・雑感

Firebird 4.0 のまで残件 [Firebird]

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

2.0をリリースしてから3.0 をリリースするまで10年もかかってしまったことの反省から、
「4.0 以降は1~2年毎にリリースしようねー」
という話になっていたと思うのだが、Firebird3.0 がリリースされて2年半以上の時が過ぎている・・・

Firebird 4.0 の Planning Board を確認してみた。
https://www.firebirdsql.org/en/planning-board/

IN PROGRESS になっている残件は以下の通り。

Mandatory features
++++++++++++++++++++

- 論理レプリケーション CORE-2021
- 統計情報の最適化 CORE-1082, CORE-1686

Optional features
++++++++++++++++++++

- Window 関数の拡張 CORE-1688 (ほぼ実装。残件は CORE-5338 )
- Time Zone サポートCORE-694, CORE-909 (マージ済み? )

Firebird に論理レプリケーション求めているひとあんまいなさそうだし、
もう残りは次のリリース(5.0?)に延期して、とっとと Firebird 4.0 リリースしても
いいんじゃないかなぁ・・・と感じている今日この頃。

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

動く疑似コードとしての 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) 
共通テーマ:日記・雑感

韓国人女性プログラマーの思い出(総集編) [Python]

これは、 PyLadies Advent Calendar 2018 の8日目の記事です
https://adventar.org/calendars/3116

そういえば、昨年も PyLadies Advent Calendar 2017 に参加したんだった  https://adventar.org/calendars/2462
今回も Python はあんまり関係なく、女性とプログラマーについて書く。

過去、何度か、前職で韓国人女性プログラマーと一緒に仕事をした話を書いた。
https://nakagami.blog.so-net.ne.jp/2010-06-18
https://nakagami.blog.so-net.ne.jp/2012-05-12
https://nakagami.blog.so-net.ne.jp/2016-09-12

ざっくり言うと、
- オフショア開発がブームになる前に、韓国人や中国人に日本に来てもらってソフトウェア開発をしようというブームがあった
- 韓国では、それに合わせて「日本語とプログラミングを学んで日本で働こう」みたいなブームがあった
- 韓国に「日本語+プログラミング」の専門学校がたくさんできて、そこで、日本の勤務先の斡旋もしてくれた
- 日本に働き始めると、リーマンショックで仕事がなくなった
ということで、転職を余儀なくされていた。

彼女たちの転職の条件は2つ
- 当面の給料が払われること
- 就労ビザを発行してもらうための会社側の手続きをしてくれること
将来にわたっての職の安定なんて考えてなかったと思う。

会社の規模や信用度によって、ビザの期限は1~3年だったが、そのビザが切れる前に再発行してもらうためには、受け入れ側の会社から提出しなくてはいけない書類があった。
信用も実績もない会社だったので、前回より多くの資料の添付を求められて、それでいて発給されるビザは1年だった。
(そして、現実問題としてアメリカ人と比べて韓国人の就労ビザ発給は難しかった)
会社も、やったことない手続きで大変だったと思うが、日本人なんか転職して来ないんだからしょうがない状況だった。
彼女らはJava とか PHP を書いていたけど、転職で Python を書くことになった。別にプログラミング言語は何でもよかったんだと思う。就労ビザさえ発給されれば。
僕が社会人になった頃の労働基準法では女性の深夜勤務は禁止されていたので、女性が深夜勤務することに抵抗があったが、彼女らはそんなのは気にしてなかった。
きっと、日本に来た時からそんな風に働いてたんだろうなぁ。

その時、結果として本人達にも会社にも良い結果になった。会社の業績はうなぎのぼりで大きくなり彼女らは引き続き日本で働けた。
「プログラマーって性別も国籍も関係なく、本人の努力と能力で未来が切り開ける職業なんだなー」
ってことを強く思った。


結局、東北の震災をきっかけに親に説得されて泣く泣く帰国したり、産休ののち出産して復職することなくやめたりして、あの時の韓国人女性たちは、もう誰もその会社に残ってない。
本人たちには不本意だったと思うが、良い思い出のまま会社を離れてくれて僕にとっては良かった。

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

情報系多能工 [日記]

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

私が最初に弊社ビープラウドの受託開発案件に参加したときに一番驚いたのは、人員の入れ替えが臨機応変に行われていたことだった。
お客さんの受け入れ態勢ができてないとか、仕様が確定していないというときは、
「じゃ、別の仕事してましょうかね」
ということで別案件をやって、再開できたときには別の人がアサインされることもあるし、間に合ってないときに人が一時的に投入されたりする。

その時点からさかのぼること10年前の受託開発の経験では、最初に3人*3か月=9人月で契約できたら、3人を3か月拘束して人を入れ替えることはないし、お客さんの都合で納品を伸ばしたい、開発を一時サスペンドしたいという場合も、次の仕事がアサイン済みであることとか、資金繰り(予定した期日の入金が必要)とかで臨機応変に人のアサインを組み替えるとか、納期の延期ができなかった。
年度はもちろんのこと、クォーターごとの売り上げ計画にぶれがあることを嫌ったからだと思う。当時は、バブルの直後ぐらいで、まだその会社も遠い将来の上場を目指していたから、計画と実績がずれるのは許されなかったのかな。

引き合いが来た時の、お客さんへのヒアリングは、元職では課長か部長が、(もう長いこと開発から離れているのに)わかったふうで微妙な要件で契約を決めてくるので、円満に納品するのが苦しい時も多かった。
(元職では、営業という職種がいなかったのがせめてもの救いかな)

ビープラウドでは、開発者がヒアリングすることもあるし、その案件を受注したら別の人が担当することもある。(課長や部長の一存でなく)相談して無理そうなら断ることもある。
思い返してみると、元職では課長の方針・・・という名の趣味に案件が左右されてた。
ビープラウドでは、役員以外の役職はなく、役割も固定されていなくて、僕自身も、コードを書く時もあれば、コードを書かずに要件、仕様から作業を切り出して開発者にチケットを振ったりコードレビューをしたりする時もある。今年は、20年振りくらいに一人開発案件もやった。
最近、 PyQ スタンダードプランをご契約のお客様の質問に、たまに回答している。

これは製造業や建築業で話題の「多能工」だなって思う。

- 資金繰りに余裕がある
- 製造業的な生産計画にこだわらず実利をとる
- 役職や部署による情報格差をなくす (by slack)
- 開発案件が Python (+Django)で標準化されているので、人の入れ替えがしやすい

というあたりが、それを可能にしたポイントなのかなと思う。

僕は、このやりかた、受託開発の会社としては、すごく変わっていると思うんだけど、みんなはあまりそう思ってないのかも。

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

Firebird データのバックアップとリストア [Firebird]

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

https://nakagami.blog.so-net.ne.jp/2018-12-02 にインストールについて書いたのですが、
最近、Firebird を使ってみたという日本語の記事を見ないので、
もしかしてバックアップとかリストアとかの手順についても、ロストテクノロジーなの?
・・・ということに気づいて、ごく基本的な Firebird のデーターベースのバックアップとリストアにつても書きます。

【サービスを停止してデーターベースをコピーする】
Firebird は、1ファイル=1データーベースなので、データーベースファイルをコピーすることで、バックアップ
することができます。
コピーでバックアップする場合は、 firebird のサービスは止めておいたほうが良いでしょう。
sudo systemctl stop  firebird3.0


ファイルをどこかにコピー

sudo systemctl start  firebird3.0


【オンラインでバックアップ、リストア】

gbak というコマンドで、バックアップとリストアができます。
gbak を使うと、firebird のサービスを動かしたままバックアップとリストアができます。

バックアップ
sudo gbak -b /var/firebird/myfirst.fdb /tmp/myfirst20181205.fbk

リストア
sudo gbak -r /tmp/myfirst20181205.fbk /var/firebird/myrestore.fdb


同じファイルにリストア
$ sudo gbak -r /tmp/myfirst20181205.fbk /var/firebird/myfirst.fdb
gbak: ERROR:database /var/firebird/myfirst.fdb already exists.  To replace it, use the -REP switch
gbak:Exiting before completion due to errors

と出てしまうので
sudo gbak -r /tmp/myfirst20181205.fbk /var/firebird/myfirst.fdb -rep

と -rep オプションをつけます
コメント(0) 
共通テーマ:日記・雑感