SSブログ

Firebird の Rust ドライバー [Firebird]

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

Firebird の Rust ドライバーといえば、 rsfbclient があります

- https://crates.io/crates/rsfbclient
- https://github.com/fernandobatels/rsfbclient

・・・が、私も、習作として Rust のドライバーを書きました

- https://crates.io/crates/firebirust
- https://github.com/nakagami/firebirust

昨年のうちにワイヤープロトコルの部分はできていたのですが、
rsfbclient がリリースされて、挫折しそうになっていました。

自分の Rust の習作としても、ワイヤープロトコルのサンプル実装としても、完成させた方がよかろうということで、
その後、開発を再開させ、なんとか今年になって完成させることができました。
一言で感想をいえば「Rust 難しい」です。
まだ、自分の中で消化しきれてない状態で Rust を書いて、ここ数ヶ月は書いてないので、もう Rust 忘れそうです。

Python の PEP-249 や、go の database/sql や、Julia の DBInterface.jl のような決まったインターフェースは
ないっぽいので、これでいいのかどうか確信が持ててません。
「〇〇のデーターベースドライバーでは、こういうことができるので firebirust でもできるようにしたほうがいいのではないか」
というリクエストがあったら Issue に書いて欲しいと思いっています。
コメント(0) 
共通テーマ:日記・雑感

Firebird の Julia データーベースドライバー [Firebird]


これは、
Firebird Advent Calendar 2021 https://qiita.com/advent-calendar/2021/firebird

Julia Advent Calendar 2021 https://qiita.com/advent-calendar/2021/julia
の16日目の記事です

今まで、色々なプログラミング言語で Firebird のドライバーを書いてきました。

調べてみると、ここら辺に Julia の各種ドライバーがあって(Firebird のはなくて)
https://github.com/JuliaDatabases
DBInterface.jl のインターフェースを定義すればよいということがわかってきました。
https://github.com/JuliaDatabases/DBInterface.jl

さらに
https://nakagami.blog.ss-blog.jp/2021-12-03
Julia を書いてみた感じ、今まで書いてきたドライバーのソースコードを参考にすれば Julia でも書けそうということになりました。

・・・というわけで Firebird のドライバー書きました。
https://juliahub.com/ui/Packages/Firebird/pPw8v/0.2.2

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

LibreOffice Base 7.2 の Firebird サポート [Firebird]

これは Firebird Advent Calendar 2021 https://qiita.com/advent-calendar/2021/firebird の9日目の記事です

LibreOffice Base の Firebird サポートについて書いたのは2年前の Firebird Advent Calendar 2019 で、その時は LibreOffice 6.3 でした
https://nakagami.blog.ss-blog.jp/2019-12-14

今回、 最新の LibreOffice 7.2 をインストールして Base のファイルを作成しようとした時に

- Create a new database の Embedded database で Firebird が選べなくなっていた(HSQLDB Embedded だけになっていた)
- Firebird のデーターベースファイルを読み書きしたい場合は、Connect to an existing database でデータベースファイルを選択する
- Connnect to an existing database で、Firebird File を指定。ホストとパスを指定(リモートのデータベースサーバーを指定)することも可能

というように変わっていました。
スクリーンショット 2021-12-09 8.03.40.png
スクリーンショット 2021-12-09 8.04.10.png








Base のファイルの中に Firebird のデーターベースファイルが埋め込まれているのは、いささか無理矢理感あるなと思っていました。
ですので、個人的には、これでいいと思うのですが、LibreOffice 6.x の時と動作が変わってしまっていて、なかなか思い切った変更がなされるな、と驚いているところです。
ちなみに、Firebird4.0 のファイルを指定したら、 ODS のバージョンが違うと怒られました。

Firebird4.0 が読めるクライアントライブラリをリンクするようにしたら Firebird3.0 のファイルが読めなくなるかな?
Ubuntu の Firebird が、いまだに 3.0 なんだけど、これが LibreOffice との兼ね合いでバージョンが上げられない、という事情だったら、いつ 4.0になるかわからないな。
コメント(0) 
共通テーマ:日記・雑感

Firebird4.0 の ChaCha20 [Firebird]

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

Firebird3.0 で、サーバーとクライアントのやりとりを RC4 で暗号化する仕組みができました。
Firebird4.0 で RC4 に加えて、ChaCha20 による暗号化が可能になりました。

ドライバーが対応していれば、ネゴシエーションでChaCha20 で通信することが決められますが、
対応していないドライバーであれば、 RC4 (もしくは、暗号化なし)でデータのやりとりがなされます。

今年は、自分が書いてメンテナンスしているドライバーで、この ChaCha20 のサポートをしました。

ChaCha20 が、 TLS1.3 で使われるようになった比較的新しい暗号アルゴリズムだということは知っていて、
なんとなく難しそう・・・と思っていたのですが
ブロック暗号ではなく(ブロック暗号だとブロックのあまり部分の扱いとか難しそう)ストリーム暗号ならなんとかなるかなってことで調べ始めました。

https://en.wikipedia.org/wiki/Salsa20#ChaCha_variant
https://ja.wikipedia.org/wiki/Salsa20

64バイトの内部状態(16バイトの固定値、32バイトの秘密鍵、12バイトの nonce、4バイトのカウンター)をグルグルかき混ぜて、
その内部状態と xor をとって暗号化/復号するもので、わかってみると、自分でも実装できるようなものでした。

pure python の python ドライバー pyfirebirdsql では、 ChaCha20 部分を自分で書きました
https://github.com/nakagami/pyfirebirdsql/blob/master/firebirdsql/chacha20.py

Go言語、 erlang のドライバーは、標準ライブラリに ChaCha20 のエンコード、デコードをする機能があったのでそれを使いました

- https://github.com/nakagami/firebirdsql
- https://github.com/nakagami/efirebirdsql

専門家でないので、 ChaCha20 でどれくらい暗号強度が増したのかわからないのですが、
(十分な長さのパスワードであれば、インターネット上を通信パケットを流しても十分安全なのか?)
Firebird の新しいWireProtocol に追随できて嬉しいです。

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

Firebird 4.0 released [Firebird]

遂に Firebird 4.0 がリリースされた。

無事 Release Note のこのあたりに↓名前を刻むことができた。
https://firebirdsql.org/file/documentation/release_notes/html/en/4_0/rlsnotes40.html#rnfb40-dml-windows-newfunctions
嬉しい。

Firebird 3.0 の最初のリリースは、 2016年4月だったらしい
https://firebirdsql.org/en/news/firebird-3-0-is-released/
この時に、「5年も待つことはないだろう(と思いたい)」と書いたが、 https://nakagami.blog.ss-blog.jp/2016-04-19 5年待つことになってしまった。

Firebird 5.0 がリリースされるの、いつだろうなぁ。
コメント(0) 
共通テーマ:日記・雑感

Firebird 4.0 RC1 released [Firebird]

毎年の Firebird Advent Calendar で
「今年も 4.0 RC1 は出ませんでした」
が風物詩になっていたが、ついに出た。
https://firebirdsql.org/en/news/firebird-4-0-release-candidate-1-is-available-for-testing/
https://www.firebirdnews.org/firebird-4-rc1/

Firebird 3.0 が最初にリリースされたのいつだっけ?と思って調べたら2016年4月だった
https://firebirdsql.org/en/news/firebird-3-0-is-released/

希望を言えば、今年中に Firebird 4.0 がリリースされて、 Ubuntu 22.04 に Firebird4.0 のパッケージが含まれると嬉しいが、難しいと思っている。

とにかくリリースできてよかった(ファイナルリリースは、計画も含めて、時期はまだ未定だけど)
OSS の RDBMS といえば、 MySQL (と MariaDB)と PostgreSQL が有名だが、選択肢は多いほうがいい。

Firebird3.0 の当初の計画で実装される予定だったレプリケーションのなど機能が 4.0 で実装されているはずで、もう10年くらいかかっていると思う。
RC1 以降は、サーバーとクライアントでやりとりするワイヤープロトコルの変更はないと思うので、データーベースドライバの 4.0 対応のゴールが見えた。

後でリリースノートを読む。
コメント(0) 
共通テーマ:日記・雑感

Products.FirebirdDA 0.7.0 [Firebird]

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

今年は Zope 向け Firebird Database Adapter である Products.FirebirdDA を6年半振りにリリースしました。

- https://nakagami.blog.ss-blog.jp/2020-06-20
- https://pypi.org/project/Products.FirebirdDA/

Zope がバージョン4になって Python3 対応が必要になったためです。
Zope 5 でも動くと思います。
Zope4/Zope5 で動かなかったら、リポジトリ https://github.com/nakagami/Products.FirebirdDA で Issue を作成してください。

Firebird の Object (テーブル、カラムなど)の情報を表示していた Browser タブは、Firebird のバージョンが上がるにつれ不完全になってしまっていて、メンテナンスする余裕がないので、削除してしまいました。
必要があれば、Browser タブの代わりに Framerobin などを使ってください。
コメント(0) 
共通テーマ:日記・雑感

DB-Engines Ranking の Firebird [Firebird]

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

DB-Engines Ranking というページがありまして
https://db-engines.com/en/ranking
機械的にデーターベースサーバーのスコアを出してランキングしているものです。
毎月、月初にスコアとランキングが更新されるのですが、私は数年間、月が変わるタイミングでこのページの Firebird のスコアとランキングを見て一喜一憂しています。

2〜3年前までは順位を落とし続け 32位までランキングを下げた時期もあったのですが、その後一進一退を続け、今月は29位(久々の 30位以内)でした。
日本ではほとんど無名ですが、健闘してるんではないでしょうか?

ランキングは他のデーターベースサーバーの人気次第なので一喜一憂しても仕方ない面も多々あります。

私は、ランキングよりもスコアをより気にしているんですが、こちらは、現在 22.833 で 2015年の過去最高記録の 23.424 に、あと少しというところまで来てます。
https://db-engines.com/en/ranking_trend/system/Firebird
コメント(0) 
共通テーマ:日記・雑感

pyfirebirdsql 1.1.4 released [Firebird]

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

pure python な Firebird driver である pyfirebirdsql の 1.1.4 をリリースしました

https://github.com/nakagami/pyfirebirdsql
https://pypi.org/project/firebirdsql/

前回リリースの 1.1.3 は1年以上前ですが、今回のリリースは Firebird4.0 向けの軽微な修正(と、みんなが使っていないであろう接続パラメーターの不具合の修正)です。
ほとんどの人には関係なく、今、使っている人は、特に最新に更新する必要はないと思います。
Firebird 4.0RC1 がリリースされたら、次のバージョンをリリースしようと思っていたのですが Firebird Advent Calendar の季節になっても RC1 がリリースされないので、最新のスナップショットをリリースしておきます。

ドライバーとしての機能を追加する予定は今のところなく、Firebirdのバージョンが上がるときに加えられたネットワークプロトコル上の機能追加は、できれば対応していきたいと思っています。
コメント(0) 
共通テーマ:日記・雑感

What's Firebird Advent Calendar [Firebird]

This article is the 1st entry of Firebird Advent Calendar 2020.
https://qiita.com/advent-calendar/2020/firebird

In Japan, the Advent Calendar is known as a registered tech blog entries on the December calendar page.
(Advent calendars in the true sense of the word are not well known.)

The Firebird Advent Calendar has written about Firebird RDBMS, and has been going on since December 2014.

- https://qiita.com/advent-calendar/2014/firebird
- https://qiita.com/advent-calendar/2015/firebird
- https://qiita.com/advent-calendar/2016/firebird
- https://qiita.com/advent-calendar/2017/firebird
- https://qiita.com/advent-calendar/2018/firebird
- https://qiita.com/advent-calendar/2019/firebird

If you can't read Japanese, try to read it using a translation site.

Those who want to post need join on Qiita and reserve a specific date on the Advent Calender page.
Then publish the post on your blog on the reserved date and enter its URL.

This year, @marius has reserved Dec 5. (thanks @marius!)
Most Japanese write in Japanese, but articles may be written in English.

The messages in Qiita are in Japanese, so it is difficult to join and reserver if you don't understand Japanese,
but you are welcome to join Firebird Advent Calendar!
コメント(0) 
共通テーマ:日記・雑感