So-net無料ブログ作成
検索選択

Firebird client library for erlang [Firebird]

この記事は Firebird Advent Calendar 2016 http://qiita.com/advent-calendar/2016/firebird 23日目のエントリーです

プログラマーは往々にして、新しいプログラミング言語を学びたくなり、そして(そのいくつかは)マスターできないまま忘れていきます。

erlang は、私にとって、数年前からマスターしたいと思いつつ、本を読んで、途中で挫折して、また思い出したように「はじめに」から読み始めるということを繰り返しているプログラミング言語です。

そして、このままじゃいけないと思い、今年の初めに他のデーターベースのドライバーを見て、見よう見まねで書いたのが Firebird のドライバーです。
https://github.com/nakagami/efirebirdsql
決まったインターフェース仕様があるわけではないようなので、自分が実装しやすいように書いたら Python のドライバーの APIっぽくなりました。

Github に公開してすぐに hex.pm に登録しないの?という Issue が立って
https://github.com/nakagami/efirebirdsql/issues/1
そんなのあるんだーと思って Puhlish したんですが・・・
https://hex.pm/packages/efirebirdsql
ダウンロード数、めっちゃ少ないです。

現在は、 Support Firebird Events の issue に取り組んでいます
https://github.com/nakagami/efirebirdsql/issues/5
・・・というか、12月に入って真剣に取り組もうとして久しぶりにソースを読んで、機能を追加しようと思っているのですが、もともと身についてないものですから、ループの代わりに再帰で書くのに四苦八苦するところからやり直してます。

イベント機能というのは
http://nakagami.blog.so-net.ne.jp/2016-12-09
こちらを参考にしてください

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

Go言語 の Firebird driver 2016 [Firebird]

この記事は Firebird Advent Calendar 2016 http://qiita.com/advent-calendar/2016/firebird 20日目のエントリーです

私がスクラッチから書いている Go 言語の Firebird driver について。
まずは、過去の記録を見ていただくとして

http://nakagami.blog.so-net.ne.jp/2014-12-23
http://nakagami.blog.so-net.ne.jp/2015-12-08

機能も一通り動いているので、やれやれ、もうこれでやることないぞ、と思っていたら、
「Go1.8 で database/sql の機能が拡張されるからよろしくね」
https://github.com/nakagami/firebirdsql/issues/36
という Issue が立った。

「うーん、英語も Go言語もよくわからないし、これはどうすればいいんだ?」
と思っていたら
mattn さんにより日本語解説が書かれた
http://mattn.kaoriya.net/software/lang/go/20161106232834.htm
しかも、今までやったことなかったけど build constraints というので、
Go のバージョンでコンパイルするかしないかを分けられることを知った
http://mattn.kaoriya.net/software/lang/go/20161202095532.htm
ありがたやありがたや

ちなみに、この mattn さんの解説の時から今までで仕様の変更が少しあった。
BeginContext という関数がなくなって、代わりに
BeginTx という関数になり、その関数で
context.Content の他に、 IsolationLevel と ReadOnly かどうか
のstruct の txOptions というオプション変数を渡すようになった。
https://github.com/golang/go/blob/master/src/database/sql/driver/driver.go#L199

Firebird のドライバーについては
「複数の結果セット」はサポートせず、それ以外の関数は
形だけでも実装しようと思っている(現在進行形)
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Firebird4.0 Plannning [Firebird]

この記事は Firebird Advent Calendar 2016 http://qiita.com/advent-calendar/2016/firebird 19日目のエントリーです

昨年(2015年)の秋頃の話では
- 2015年中に Firebird3.0 をリリース
- Firebird3.0 リリースの少し前に Firebird 4.0 のブランチを作る
- 次のリリースは Firebird3.0 リリースから一年半後くらいにはしたいよねー
- そのためには、来年(2016年)の年末には 4.0 alpha 1 をリリースしたい
となっていました。

はい、2016年の年末を迎えて、振り返ると、やはり予想通り遅れて、
いつもの Firebird ですね。
でも、地道に進めているところも、いつもの Firebird だと思います。

Firebird のリリースの Plannning Board はここにあります
http://www.firebirdtest.com/en/planning-board/

Mandatory features の中では、テーブル名などの識別子が31文字より長い
ものが使えるようになっているようです(素晴らしい)

JIRA を見る方が現状にあっているようで、PlanningBoard の項目のいくつかは
Firebrid4.0 alpha1 から先送りされているようです。
http://tracker.firebirdsql.org/secure/IssueNavigator.jspa?reset=true&mode=hide&sorter/order=DESC&sorter/field=priority&resolution=-1&pid=10000&fixfor=10731

Planning Board や JIRA を見ると、次のバージョンでは

- 識別子に31文字以上使える
- レプリケーションやスタンバイ機能
- User/Role の機能追加
- Window 関数のさらなる追加

あたりが実装されそうです
(バックアップ/リストアも改善されるかも)

2.0 → 3.0 に 10年の月日がかかったわけですが、
2020年くらいに Firebird 4.0 が出てくれるといいなぁ、と思う今日この頃です
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Firebird ADO.Net Provider の Current status [Firebird]

この記事は Firebird Advent Calendar 2016 http://qiita.com/advent-calendar/2016/firebird 16日目のエントリーです

stable なバージョンは、最新が 5.7.0.0 で bugfix だけみたいですが
https://blog.cincura.net/233588-ado-net-provider-5-7-0-0-for-firebird-is-ready/
5.6.0.0 で .NET Core がサポートされているそうです。
https://blog.cincura.net/233580-ado-net-provider-5-6-0-0-for-firebird-is-ready-with-net-core-support/
(.NET Core についてはよくわかっておらず・・・)

5.0.0.0 のリリースで
http://www.firebirdsql.org/en/news/ado-net-provider-5-0-0-0-release/
- Boolean support
- srp authenticaiton support
- null indicator
といった Firebird3.0 の機能のへの対応が完了していますので、デフォルトのfirebird.conf のFirebird3.0 に接続できると思います。

ちなみに .NET Framework は当然として、随分前から Mono でも動くようになっています。
以前に srp authentication の pull request を送った時は、
https://github.com/cincuranet/FirebirdSql.Data.FirebirdClient/commits?author=nakagami
私は、 Windows の環境がなかったので Mono 上の MonoDevelop でコンパイルして動作確認しました

ここら↓で環境作ったときですね
http://nakagami.blog.so-net.ne.jp/2015-08-29
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Jaybird (Firebird JDBC Driver) の Current status [Firebird]

この記事は Firebird Advent Calendar 2016 http://qiita.com/advent-calendar/2016/firebird 15日目のエントリーです

Firebird 3.0 に関連するプロトコル追加について Pull Request を
送ったことについて、昨年の AdventCalendar に書きました
http://nakagami.blog.so-net.ne.jp/2015-12-20
その時点では「 master にマージされてリリースされていない」という状態で
Firebird3.0 もリリースされていませんでした。

その後 Firebird 3.0 がリリースされましたが Firebird 3.0 のWireprotocol 13 に対応したドライバー Jaybird 3.0 は現在 beta1
http://www.firebirdsql.org/en/news/jaybird-3-0-0-beta-1-is-now-available-for-testing/
http://www.firebirdsql.org/file/documentation/drivers_documentation/java/3.0.0-beta-1/release_notes.html

去年の夏頃に Pull Request を送って、
https://github.com/FirebirdSQL/jaybird/commits?author=nakagami
その頃にはまだ Firebird 3.0 がリリースされてなかったとはいうものの、データーベース関連の OSS のリリースは実に慎重だなぁ、と思う今日この頃です。
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Firebird 3.0 の統計処理用の集約関数 [Firebird]

この記事は Firebird Advent Calendar 2016 http://qiita.com/advent-calendar/2016/firebird 13日目のエントリーです

Firebird 3.0 で相関係数・標準偏差とその関連の値を求める関数が実装されました。
公式なドキュメントしては、 Firebird3.0 のリリースノートに説明があるので読んでください。
http://firebirdsql.org/file/documentation/release_notes/html/en/3_0/bk01ch09s05.html#rnfb30-dml-statistical

(PostgreSQLでは歴史的理由で残されている stddev, variance は、Firebird では実装されていませんが)PostgreSQL の統計処理用の集約関数に相当するので、日本語で読みたい場合は、PostgreSQL のリファレンスマニュアルを見るのが良いと思います。
https://www.postgresql.jp/document/9.6/html/functions-aggregate.html#functions-aggregate-statistics-table
ぶっちゃけ、私も、この PostgreSQL の表を参考に実装しました。

今年の Firebird Advent Calendar では、 meijik さんが、
「使い慣れたSQLに潜む実装依存: Firebirdの場合」
というテーマで連続して書かれてますが、標準偏差、分散に関連する関数についても、PostgreSQL で、戻り値の型が
「浮動小数点型の引数ではdouble precision。それ以外ではnumeric 」
となっているところは、Firebird では常に double precision が返ります。

関数の詳細について、日本語で書かれた良いドキュメントないかなーと探したのですが、
標準偏差と分散については Redshift のマニュアルがわかりやすいと思いました。
- http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_STDDEV_functions.html
- http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_VARIANCE_functions.html
残念ながら、そのほかの関数は Redshift では実装されてないようです
- http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_unsupported-postgresql-functions.html

これらの関数について pull request を送ってマージされた話は昨年の Firebird Advent Calendar 2015
http://nakagami.blog.so-net.ne.jp/2015-12-22 に書きました
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

確定申告で知る自分の余命の短さよ [日記]

最近は、毎年同じような衝撃を受けてすぐ忘れて、また翌年に同じような衝撃を受けているような気がする。
確定申告の書類を記入していて(主に生命保険の控除を記入している時に)自分の人生の終わりが近づいていることをひしひしと感じる。

短いほうの生命保険の払い込み期間が平成38年までだった。
おいおいもうすぐ払い込み期間終わっちゃうじゃないかよ。
支払いが減るのはありがたいが、とても寂しい。
数年前に契約について悩んだけど、
http://nakagami.blog.so-net.ne.jp/2016-11-26
実のところ払込期間があと少しだった。10年があと少しかどうかは意見が分かれるかもしれないが。

とにかく、保険に加入した頃には払込満了の時期なんてはるか未来すぎて、あまりちゃんと考えていなかったのに、気づいたら想像できる未来に迫っていた。

もう一つの個人年金型の生命保険の年金支払い開始が平成40年。いやいや、早いよ。
俺、あと12年たったらおじいちゃんなのか・・・
そして支払い期間が10年なんで70歳になると、その支払いが終わっちゃう。それも早いよ。

そういえば、僕が就職した頃は 60歳定年は当たり前ではなく、
https://allabout.co.jp/gm/gc/463234/
ようやく定着しつつある頃で僕の入った会社も含めて中小企業は
「大変だけど、(バブルの頃で新人が取れないので)頑張って 60歳定年制度を始めました」
って感じだった。

自分が就職して、生命保険に入る時
「定年が60歳?いい会社だなぁ。そして、定年が60歳なんだから年金受け取りも60歳からじゃないと困るだろ。70歳終わっちゃうけど、まあ、その時になって考えるしかないな。はるか未来の話だし・・・」
とでも思ったんだろう。
そして今、僕が 65歳になる頃には定年が70歳になっている気がするし定年がなくなっているかもしれない
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Pure Python の redis client [Python]

このエントリーは
(第71回)Python mini Hack-a-thon の記録です
https://pyhack.connpass.com/event/45135/

色々なデータベースの pure python のドライバーを書いてきましたが、
そろそろネタが尽きてきたので、redis のクライアントを書き始めました。

[インストール]
How to Use Redis with Python 3 and redis-py on Ubuntu 16.04
https://www.fullstackpython.com/blog/install-redis-use-python-3-ubuntu-1604.html

macports の場合は
sudo port install redis
sudo launchctl load -w /Library/LaunchDaemons/org.macports.redis.plist


[コマンド操作について]
redis-cli コマンド操作まとめ
http://qiita.com/rubytomato@github/items/d66d932959d596876ab5
redis入門 データ型とその簡単な操作について
http://www.yukisako.xyz/entry/2015/05/10/021400
3分でRedisのpub/subを使ってみる【redis】
http://otiai10.hatenablog.com/entry/2014/05/04/112426

[プロトコル]
Redis Protocol specification
https://redis.io/topics/protocol
プロトコル仕様
http://redis.shibu.jp/hacker/protocol_spec.html
RESP (REdis Serialization Protocol)の調査
http://qiita.com/nus/items/374ad5869f471da5b5cf

上記の URL を元に、最も基本的な文字列(バイナリ)データの get/set ができるあたりまでできました
https://github.com/nakagami/toyredis

エラー処理できてないし、未対応のコマンドがいっぱいあるので、そこらへんをある程度改善したらリリースしようと思います。
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Firebird のイベント機能の使い方 [Firebird]

この記事は Firebird Advent Calendar 2016 http://qiita.com/advent-calendar/2016/firebird 9日目のエントリーです

Firebird には Interbase の頃から、「イベント」という機能があります。
トリガーの中で post_event 'イベント名' とすると、
クライアントに、そのイベントが発生したことを通知できる機能です。

もちろん、クライアントライブラリがその機能を持っていなければ
使うことはできませんが、 pyfirebirdsql には、その機能があります。

例えば、 test_table のレコードが削除された時に 'event_d' という
イベントを発生させるトリガーを
CREATE TRIGGER trig_test_delete_event
    FOR test_table AFTER DELETE
AS BEGIN
    post_event 'event_d';
END
のように書きます。

pyfirebirdsql では一度に複数のイベントを待ち受けることができます
例えば、以下の例では event_a, event_b, event_d を待ち受けます

    conn = firebirdsql.connect('server', 'database', 'user', 'password')
    conduit = conn.event_conduit(['event_a', 'event_b', 'event_d'])
    result = conduit.wait()
    print(result)


そして、例えば test_table のデータを2レコード削除するようなクエリーを
delete from test_table; (←2レコードデータ削除されるとすると・・・)

他のクライアント(isqlなど)から実行すると

{'event_b': 0, 'event_a': 0, 'event_d': 2}

と print されます。
つまり、待ち受けていたイベントのどれかがポストされた時
{'イベント名': 発生回数} の辞書形式でデータを受け取ることができます
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Pure Python の Yet another mongodb driver [プログラミング]

この記事は MongoDB アドベントカレンダー 2016 http://qiita.com/advent-calendar/2016/mongodb の 8日目のエントリーです

ここ数年、趣味で pure Python の RDBMS のデーターベースドライバーを書いていて、今年の PyCon JP でそのことについて話すことができました
https://gist.github.com/nakagami/bfbe98d62377f3f4554121ab161ae8c9

書けそうなデーターベースのドライバはあらかた書いてしまったので、NoSQL なデータベースのドライバということで MongoDB の pure Python のドライバーを書きました。

https://github.com/nakagami/nmongo

Python3.4 以降で
$ pip install nmongo
でインストールできます。

mongo shell のメソッドに似たインターフェースになっています
https://github.com/nakagami/nmongo#example
管理系のメソッドはありませんが、アプリケーションを書くための一通りの機能はあるつもりです。
GridFS にアクセスする機能はないです。

内部的には、db.runCommand() を実行するメソッドがあって、 各メソッドは、そのメソッドを呼ぶような形になっています。
MongoDB 3.2 で、 command に色々追加されたので使えるようになった感じです。

MongoDB には pymongo というドライバーがあり、(残念ながら)nmongo は、それを超えるメリットが発見できないんですが、使ってみて不具合報告、改善提案などしていただけるとありがたいです。
とりあえず次は TLS 接続ができるようにしたいなぁ、と思っている今日この頃です。
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感