2014-07-28

配信資料に関する技術情報第399号「海水温・海流予報格子点資料の提供について」の訂正

気象振興協議会HPトップページ http://www.w-shinkou.org/ によりますと、技
術情報第399号の訂正が28日づけで 出ているそうです。

気象庁HPのファイル
http://www.data.jma.go.jp/add/suishin/jyouhou/pdf/399.pdf はわかりにくいですが差し替わったものになっています。配信開始が8月7日に迫っていますので、ここ数日にお持ちになった方はご注意ください。

訂正点は、8ページの表※4、塩分の GRIB2 パラメータ番号が 3 であったところが 192
になるというもののはずです。単位は PSU でかわりありません。

WMO 標準 FM92 GRIB のパラメータ番号 10-4-3 は単位 kg/kg ですが、海洋モデ
ルでは塩分濃度を PSU 単位で予報しています。
PSU という単位も公式ではないらしいのですが、このへんをごらんください。
http://en.wikipedia.org/wiki/Salinity#Seawater
質量比ではないことくらいはわかります。

Ruby 1.8/1.9 移植:ファイルの文字コードは面倒だがバイナリファイルならとりあえず話は簡単

めんどくさいですねー移植は。

Ruby 1.9 から String に文字コードが属性としてもたれるようになりました。
それは、まあ、いいことなのでしょうが、文字コードとして正しくないバイト列
を String にしようとすると例外が飛びます。
入出力というか、 IO#read は、まさしくバイト列から String を作る処理なの
で、悪いバイト列を読むとアプリが爆死します。
もちろん例外を rescue で受け止めればいいのですが、受け止めて見たところで
バイト列は失われていて分析も復旧もできません。

どうしろというのでしょう。

答は、たぶん、文字コード ASCII-8BIT としてファイルを開くことなのです。い
や、ぼくはバイナリがみたいんだから。

やりかたですが、File オブジェクトが遠くから渡ってくるならば、 IO#binmode
指令を打ち込むというのが手です。
STDIN はそうするしかないと思います。

もういっこ、簡単で、Ruby 1.8 コンパチブルな方法は、 b オプションつまり
File.open(filename, "rb") で開くことです。
もともと、そうすべきだったんです。
改行コードのことはあきらめましょう。もう、 CR 改行のファイルはないはずです。

2014-07-24

XMLを吐くBUFRデコーダ

前回BUFRデコーダについて調査・紹介したが、XMLに変換しようと考えているのだ。
新しいBUFRデータの評価をする仕事がいっぱいあるんだけど、XMLのバリデーションとか使えないかなと思うわけ。

libecbufr をつかって作ろうかとおもったのだけど、その前に車輪の再発明度の調査。
(車輪の再発明は嫌いじゃないというか、むしろ好きなんだが、人生は短すぎるので)

= python-bufr - Google code
https://code.google.com/p/python-bufr/

Pythonによる実装か、しかもGPLと色めき立ったが、事もあろうにECMWFのFortranデコーダのラッパーだというので萎えた。あと、XMLで検索されたのは、XMLRPCだけみたいだ。何がしたいかはわからない。

= Steve Sullivan の wmobufr
http://www.unidata.ucar.edu/mailing_lists/archives/bufrtables/2010/msg00000.html

これはずばりやりたいことをやりそう。
BSDライセンスも、まあ、いいでしょう。

ただ、Javaなんだよね。うーん。

2014-07-18

オープンソースの BUFR デコーダ

ちょっと調べてみるですよ。

= John Caron のページ

http://www.unidata.ucar.edu/staff/caron/bufr/
いろんな情報源をよくまとめています。

== NCEP BUFRLIB

http://www.nco.ncep.noaa.gov/sib/decoders/BUFRLIB/
tar ファイルを開くとカレントディレクトリにボロボロっと *.c *.f *.F ファイルが出てきます。 preproc.sh
というのを呼ぶとエンディアン判定をして *.F をどうにかしてくれます。あとは、Makefile はないので、

$ f77 -c *.f
$ cc -c *.c

と豪快にいって欲しいらしいです。ただし、アンダースコア関係をホゲるひつようがあります。

いや、まあ、そうまでして Fortran ですからね。ウェブのドキュメントは充実してるんですけどね。またね。

== ECMWF BUFRDC

http://www.ecmwf.int/products/data/software/bufr.html
これも Fortran です。数年前の経験ではいちおう Makefile があって、色々ホゲる必要がありましたが、まあまあさくりと通ったような気がします。

が、install スクリプトの出来が微妙で、定数データがビルドディレクトリを参照し続けてしまうんだったような... 使い方が悪いだけかもしれませんが。

それで Fortran ですからねえ。

== Canadian libECBUFR

https://launchpad.net/libecbufr
ソフトウェアの綺麗さでは定評のあるカナダ気象局です。
なんか launchpad で LGPL なので、よさそうなんですが、 Debian のバイナリパッケージしかないんですよね。なんか bzr
とかいうのでソースを落としてこないといけないんですが、それはどうしたらいいんでしょう。

= 他

SF.net に bufr-info というのがあります
http://sourceforge.net/projects/bufr-info/
これは L じゃない GPL2 ですが、 C++ なのはちょっと私にはついていけないです。
ギリシャ気象局が作っているようです。