IT関連情報

2017/10/28

Refsort/Ruby 2.80 Released

辞書参照型ソーティングフィルターをスクリプト言語 Ruby で実装した Refsort/Ruby の開発を10年以上続けています(例えば新しいほうから順に *1 *2 *3 *4 *5 *6 *7 *8 *9 *10 *11 *12 *13 *14 *15).もう仕様は落ち着いていて機能の追加をするつもりは(ほとんど)なく,細々とバグのメンテナンスを行っている状態です.

前回のリリースは約3か月前の2017年7月9日でしたが,このたび Refsort/Ruby の改訂版である v2.80 をリリースしました.

実は,今回の改訂は非常に難産でした.そもそも,Refsort の原型は今から10数年前に作成し,そこから機能を加えるごとにコードを建て増し建て増ししていったので,山あいの温泉旅館のように非常に見通しの悪いスクリプトになっていました.そこで1年ほど前から,自前のクラスやメソッドを定義してスクリプト全体をできる限りモジュール化し,さらに例外処理も Ruby の作法に則ったものに統一した新版を書き始めていたのです.

しかし,まず例外処理でつまづきました.モジュール化すると構造はきれいになるのですが,メソッドの階層を深く下ったところで例外を発生させると,それを最上層までもっていって,ファイルを閉じたり配列やハッシュをクリアしたりという後始末をしなければならないので,非常に煩雑でコードの量が増えてしまいます.仕方がないので,モジュール化の階層はできる限り浅くして,例外もできる限り最上層で発生させるようにしました.

次につまづいたのは実行速度です.格好よく自前のクラスを定義して,その中でインスタンス変数をたくさん定義し,それをメソッドで呼び出して使うのは快適なのですが,実行速度が大幅に落ちることがわかりました.Refsort はあくまでソーティング・フィルタなので,あまりトロトロと走らせるわけにもいきません.そこで,涙をのんで自前クラスは最小限にせざるを得ませんでした.そういうわけで,v2.80 は v2.70 に比べると速度が約 15% ほど低下しています.

一つだけ大幅に改良した点は,埋め込みマイルストーンの処理についてです.ここも過去のスクリプトでは温泉旅館の新別館のような扱いだったのですが,今回はマイルストーンのために自前のクラスを定義し,オブジェクトとして扱うことでコードの見通しを大幅に改善しました.

また従来は,出力時には出力候補のリスト全体をまず1回スキャンしてマイルストーンの階層構造を解析し,出力すべきマイルストーンを抜き出したうえで,2回目のスキャンでリストを出力するという2パス構造にしていたのですが,これが非常にわかりにくく,自分でも過去のコードをよく読めない事態に陥っていたので,これをゼロから書き直し,非常に素直な1パス構造に改めました.

仕様を1点だけ改訂しました.それはマイルストーンのコメントに関するもので,従来はマイルストーンのコメントは,それが番号付きやダブルコメント (##) でない限りは,そのまま出力していたのですが,今後は,マイルストーンのコメントは取り除いて出力することにしました.これは,マイルストーンにコメントが付いていると,リストがごちゃごちゃして見にくくなってしまうためです.

そういうわけで,今回の改訂はユーザにとっては非常に小さな変更でしかありませんが,内部的にはある程度手が加わり,将来の改良に向けた準備を進めた版であるとご理解いただければ幸いです.


さて,余談ですが,IOC の Web サイトに耳寄りな情報が掲載されました.以下引用です.

ANNOUNCEMENT (Oct 21, 2017): NO 7.4! Effective today, we are shifting to a semiannual revision schedule. Our next release will be 8.1 in January 2018, followed by 8.2 in late July or early August 2018. A step towards improved alignment with the Clements/eBird world list is one of the motivations for this change. We will continue to post working revisions regularly on the Updates web pages, so please keep up the flow of comments and corrections. Thank you!

従来の慣習に従えば,IOC List は四半期ごとに改訂されるので,前回7月末の改訂の後は10月末に v7.4 が出るはずでした.ところが,この版は出ません!なぜかというと,今後は年4回ではなく年2回の改訂頻度に改める,という方針変更を行ったそうです.従って,次の版は年が明けた2018年1月に v8.1 が出る,ということになります.

さらに,これは年初からアナウンスされていたことですが,代表的な鳥類分類体系の間で,それらを統合しようという機運が盛り上がってきており,それが2018年の IOC 総会の円卓会議で議論されるというのです.これにより,鳥類分類の世界に大きな変化が訪れることになりそうで,私自身は心配半分,期待半分といったところです.

さらに,余計な心配をさせていただくと,日本鳥学会がこの変化の波に置いていかれはしまいかと気を揉んでいます.前回の改訂からすでに5年が過ぎていますが,次の改訂に関して何のアナウンスもありません.世界の動きに対して,意見を言う,見識を示す,参画するという動きを示してほしいと思います.

| | コメント (0) | トラックバック (0)

2017/10/15

NAS boxの障害の顛末

話は今をさかのぼることちょうど5年,震災の翌年にホームサーバでも立ち上げようと思い立ち(*1),ちょうどMicrosoftからWindows Home Server 2011 (Vail)が発売されて間もなかったので,低電力のCPUをMini-ITXのマザーボードに乗せ,NAS用の高耐久性を謳って発売されたWestern DigitalのHDDであるRedを2台搭載して,小さなNAS Boxを組み上げたのでした.(*2)

このNAS boxはそれなりに順調に動き,メインPCのシステム・バックアップとユーザ領域を毎晩バックアップし,アクセスがないときはスリープして電力を節約しながらも24時間連続で稼働させていました.使い勝手も悪くなかったので,私としては後継のホームサーバ用OSが出てくるのを楽しみに待っていました.

ところが,Microsoftはコアなユーザがいたにも関わらず,Windows Home Server 2011のサポートを2016年4月に打ち切ったので,そこからハードウェアはそのままで,フリーのNAS専用OSであるFreeNASに乗り換え,複数のマシンのシステムとユーザ領域のバックアップに使ってきました.このあたりの推移は過去のこの記事に書いた通りです.

FreeNASは大規模なアップデートを企んで新しい版Corralを出そうとしたものの,完成度が低くて実使用に耐えないと判断され,開発責任者が変わり,慌ててロードマップを書き直し,現在も精力的に大規模アップデートに向けて開発が続けられています.おそらく年内には,当初目論んでいたレベルの版である11.1がリリースされるだろうと思います.

てなことを考えていたある日,FreeNASのダッシュボードに赤いアラームが点滅しているではありませんか.内容を見てみると,HDDの1台に障害が発生しているとのこと.このHDDはOSによって自動的に切り離されてしまったようです.

問題の切り分けのためにNAS boxを開け,まずはマザーボードのディスク・インターフェースの障害を疑い,空いているインターフェースに切り替えて再起動させてみました.すると何の問題もなく動くではありませんか.しばらくはこのままの構成で運用しようと思ったのですが,しばらくすると再び赤いアラームが点滅しています.HDDのセクターエラーが発生しているようです.

ここでHDDの障害であることは確実になったのですが,さりとて代替のHDDを買ってきてこの古いハードウェアを延命する気にもなれません.NAS boxの構築から5年が経っているので,どうせだったらHDDも大容量のものに替え,さらにハードウェア全体を新調して,そこにFreeNAS 11.1を載せたいところです.

しかし,最近ハードウェアは値上がり気味.特にメモリが高騰してます.しかも,FreeNASの最大のウリであるZFSというファイルシステムはメモリ食いで有名で,最低でも16GB,出来ることなら32GB程度を載せるのが良いとされているので,直ちにNAS boxを換装という決断ができません.

というわけで,古いハードウェアのうち,売れるものは売り払い,メモリをはじめとするハードウェアが少し安くなるのを待っている状態です.情けない...

どうせFreeNAS 11.1がリリースされるのは年末ころなので,その完成度具合を確かめてからでも遅くありません.それまではホームサーバが無い生活が続き,寂しい気はしますが,まぁ,こういうこともあると思うしかありません.

| | コメント (0) | トラックバック (0)

2017/08/01

IOC List V7.3 の特徴

昨日ポストした記事の続きです.

今回の改訂にはいくつかの重要な変更が含まれています.日本のバーダーにとって影響がありそうな主なものを以下に列挙します.

(1) 日本のバーダーには関係ないと思いますが,エミュー科 (Dromaiidae) がヒクイドリ科 (Casuariidae) に統合されました.下位のエミュー属 (Dromaius) はそのままなので,エミューの学名はこれまで同様 Dromaius novaehollandiae です.

(2) カナダカモメ (Larus thayeri) が亜種に格落ちし,Larus glaucoides thayeri となりました.従って和名は無しとするか「亜種カナダカモメ」とすべきでしょう.

(3) トモエガモ (Anas formosa) が Anas から Sibirionetta という一属一種の属に異動し,Sibirionetta formosa となりました.

(4) シマアジの仲間,ハシビロガモの仲間のうち 10 種が Anas から Spatula に異動しました.すなわち,シマアジ (S. querquedula),アフリカコガモ (S. hottentota),プナシマアジ (S. puna),ギンイロシマアジ (S. versicolor),アカハシビロガモ (S. platalea),アカシマアジ (S. cyanoptera),ミカヅキシマアジ (S. discors),ケープハシビロガモ (S. smithii),ミカヅキハシビロガモ (S. rhynchotis),ハシビロガモ (S. clypeata) です.日本のバーダーになじみの深い種も含まれています.

(5) ヒドリガモの仲間 6 種が Anas から Mareca に異動しました.すなわち,オカヨシガモ (M. strepera),ヨシガモ (M. falcata),ヒドリガモ (M. penelope),ワキアカヒドリ (M. sibilatrix),アメリカヒドリ (M. americana),アムステルダムヒドリ (M. marecula) です.

(6) オオモズ (Lanius excubitor) が分割され,亜種 Lanius excubitor borealis が種に昇格して Lanius borealis (Northern Shrike) となりました.和名は暫定的に「キタオオモズ」としています.また,亜種オオモズ (L. e. bianchii) が L. borealis bianchii に,亜種シベリアオオモズ (L. e. mollis) が L. borealis mollis となりました.

(7) ベニヒワ (Acanthis flammea) の欧州の一亜種だった A. f. cabaret が種に昇格し,Acanthis cabaret (Lesser Redpoll) として独立しました.和名は暫定的に「ニシベニヒワ」としています.

これら以外では,ハイイロアジサシの属が異動,シロハラアナツバメの仲間で多くの種の分割が行われています.

私としては Anas マガモ属からの大量の移動がショック.しばらく混乱するだろうと思います.

| | コメント (0) | トラックバック (0)

2017/07/31

IOC List v7.3 Released

IOC World Bird List v7.3 が2017年7月31日にリリースされました.前回 v7.2 のリリースが2017年4月22日だったので,今回は3か月の周期をかなりよく守った形のリリースとなっています.

今回は定性的に大きな変更,特に日本のバーダーにとっては気になる変更がいくつか目立つので,これについては日を改めてご紹介したいと思います.定量的には,特に大量の変更はありません..今回収録されたのは科が 240,属が 2,297,現生種が 10,693,絶滅種が 158,亜種が 20,074 です.

前回同様,上目 (Superorder) の PALEOGNATHAE(古顎類)NEOGNATHAE(新顎類)や,系統群であるNEOAVES がリストの最上位の階層にこっそりと載っています.

今回は大量の亜種の整理統合は行われていないので,亜種の統合はそろそろ終息させたのではないかと思います.


IOC 本家の Master List を編集して,Refsort/Ruby 用の辞書ファイルを作りましたので,このブログサイトと,Microsoft One Drive 上に設けた “IOC List Archive„ にアップロードしておきます.

今回もこの辞書ファイルの正式なエンコーディングは UTF-8 です.従って,Linux 上で使う分には問題は生じませんが,Windows 上で使う際には,入力ファイルは UTF-8 でエンコードされ(辞書ファイルと入力ファイルのエンコーディングを揃える),かつ最初の行に

#!E -*- coding: UTF-8 -*-

というおまじないを書いておかないとエンコーディングの解釈がうまくいきませんのでご注意ください.

しかし,Windows 上でのデフォルトのエンコーディングである US-ASCIIWindows-31J でも手間なく使えるように,エンコーディング指定なしの汎用 US-ASCII 版もアップしておきます.これはどのようなプラットフォームであっても,そのプラットフォームのデフォルトの Locale が無条件で US-ASCII を解釈できることを利用したものです.ただし,欧文のアクセントウムラウトを含む文字は,それらを含まない最も近い文字に置き換えられています.正版はあくまで UTF-8 なので,特に人名を含む種や,種の Authority を見るときにはご注意ください.


このオリジナル英語版の辞書ファイルに続いて,和名追加版2種と,IOC Master List の Excel ファイルに和名を追加したものも同時にリリースしました.和名追加版の辞書ファイルについても,UTF-8 でエンコードしてあるものが正版ですが,Windows などでの使い勝手を考慮して Windows-31J でエンコードしたものも同時にアップしてあります.ただし人名や地名のアクセントやウムラウトなどは,それらを含まない最も近い文字に置き換えてありますのでご注意ください.

和名追加版の辞書ファイルのうち,UTF-8 でエンコードしてある ioclist_v73ju.ref は,Linux などで UTF-8 でエンコードした入力ファイルをソートするときに使うことを想定しています.Linux 上で使う際には,入力ファイルの最初の行に上記のようなエンコーディング指定を書く必要はありませんが,Windows 上で使う場合には,入力ファイルは UTF-8 でエンコードされ(辞書ファイルと入力ファイルのエンコーディングを揃える),かつ入力ファイルの最初の行に

#!E -*- coding: UTF-8 -*-

というエンコーディングを指定しておく必要があります.

逆に,Windows 上で Shift-JIS や Windows-31J でエンコードされた入力ファイルを,Windows-31J でエンコードされた辞書ファイル ioclist_v73jw.ref を用いてソートする際には,入力ファイルの冒頭にエンコーディングの指定は必要ありませんが,この辞書ファイルを Linux 上で使う場合には,入力ファイルは Windows-31J でエンコードされ(辞書ファイルと入力ファイルのエンコーディングを揃える),かつ入力ファイルの冒頭に

#!E -*- coding: Windows-31J -*-

とエンコーディングを指定しておく必要があります.要するに,どのような場合でも辞書ファイルと入力ファイルのエンコーディングを揃え,かつそれぞれの入力ファイルのエンコーディング指定を冒頭に書いておくのが無難です.

これらのファイルをダウンロードするには,従来通りこのブログの右側のコラムで “自作ソフト„ の中から個々のファイルをクリックしても良いのですが,前述のとおり,Microsoft One Drive 上に設けた IOC List 専用のフォルダからもダウンロードできます.それには,このブログ右側のコラムの最上段の “Archive„ の中の “IOC List Archive„ をクリックしてください.そうすると One Drive のフォルダに入ることができますので,あとは適当に選んでダウンロードしてください.今後は One Drive のみに集約していく予定です.


I am pleased to announce that I have posted reference files for Refsort/Ruby compiled directly from the latest IOC World Bird List v7.3. It contains 10,693 extant species, 158 extinct species and 20,074 subspecies, respectively. Please try it out, and enjoy its capability and speed.

Note that the reference file "ioclist_v73u.ref" is encoded in UTF-8 in order to retain all European accents and umlauts with complete fidelity as they are in the IOC Master List. Therefore, your input file should be encoded in UTF-8 as well, and should contain a magic comment on the top of the file such as;

#!E -*- coding: UTF-8 -*-

For those who want to use Refsort/Ruby in universal ASCII environments, I have posted another reference file "ioclist_v73a.ref" encoded in 7-bit ASCII. Note that characters with accents and umlauts have been simplified to their nearest neighbors. So please be careful in particular when you refer to authorities of species.

I have also posted two reference files (encoded in UTF-8 and Windows-31J, respectively) which include Japanese names. If you want to refer to Japanese names, please see those files. In order to sort a list properly using these reference files, you need to align the encoding of the input file to that of the reference file, and you should add a magic comment specifying the encoding of the input file in the first line of the file, such as UTF-8, US-ASCII or Windows-31J.

A master list in Excel format containing a column of Japanese names has been posted as well. This would be more convenient.

You can download an appropriate file by clicking a link listed on the right column of this page, but you can also access files and folders built in my area of Microsoft One Drive by clicking “IOC List Archive„.

| | コメント (0) | トラックバック (1)

2017/07/09

Refsort/Ruby v2.70 Released

辞書参照型ソーティングフィルターをスクリプト言語 Ruby で実装した Refsort/Ruby の開発を10年以上続けています(例えば新しいほうから順に *1 *2 *3 *4 *5 *6 *7 *8 *9 *10 *11 *12 *13 *14).もう仕様は落ち着いていて機能の追加をするつもりは(ほとんど)なく,細々とバグのメンテナンスを行っている状態です.

前回のリリースはつい先週2017年7月2日だったので立て続けの改訂ですが,Refsort/Ruby の改訂版である v2.70 をリリースしました.

今回の改訂内容は2点.一つは出力様式に関するものです.Refsort では,-e オプションや -t オプションを使用した場合,入力された文字列を内部で数値型や日付時刻型に変換し,それを基準にソーティングを行っていたのですが,問題はさらに -u オプションを加えた場合,型変換後のオブジェクトを出力するという,少々恥ずかしい不適切な仕様でした.このような使い方はあまり行わないので,これまで問題が顕在化することはありませんでした.しかし,最近 -t オプションを新たに実装し,テストを繰り返すうちにこの不具合が発覚.そのため,ロジックの深いところに手を入れて,どのようなオプションを使ったとしても,出力時には入力された文字列をそのままの形で出力するようにしました.

例えば,10, 20, 50, 50+, 100, 100+, 100++ という数値が一行に一つずつ書かれている入力を考えてみます.これを -e オプションでソートすると,全ての文字列は浮動小数点型の数値 10.0, 20.0, 50.0, 50.0, 100.0, 100.0 に変換され,比較・ソートされます.これを出力するときに,-u オプションがなければ,従来の仕様でも入力行をそのまま出力するので,10, 20, 50, 50+, 100, 100+, 100++ が出力されて問題なかったのですが,-u オプションを加えると,型変換後のデータ 10.0, 20.0, 50.0, 50.0, 100.0, 100.0 が出力されてしまっていました.

今回の改訂では,-u オプションを付けたとしても,10, 20, 50, 50+, 100, 100+, 100++ が出力されるようにしたものです.日付時刻のデータにしても同様です.

もう一つの改訂内容は,これは完全に内部的なものですが,出力処理を行っている部分に論理の冗長な部分があり,速度を阻害しているように見えたので,冗長な部分を取り除きスクリプトを最適化しました.これもアルゴリズムのかなり深いところに手を入れています.はるか昔に書いた部分なので思い出すのに一苦労しました.将来のためにソースコード中にコメントを残しておきました.

このところ,-M オプション,-e オプションと -t オプションに関係する部分の不具合を直してきましたが,これで一段落付いたと思いますので,Refsort 本体の改訂は一休みできると思います.

| | コメント (0) | トラックバック (2)

2017/07/02

Refsort/Ruby v2.63 Released

辞書参照型ソーティングフィルターをスクリプト言語 Ruby で実装した Refsort/Ruby の開発を10年以上続けています(例えば新しいほうから順に *1 *2 *3 *4 *5 *6 *7 *8 *9 *10 *11 *12 *13).もう仕様は落ち着いていて機能の追加をするつもりはなく,細々とバグのメンテナンスを行っている状態です.

前回のリリースはつい先週,2017年の6月25日だったのですが,今回の修正は2点.一つは,辞書を参照しないソーティングのオプションに,文字エンコーディングそのものに基づくソーティングである -a オプションと,数値の大小に基づくソーティングである -e オプションに加えて,日付時刻に基づく新たなオプション -t を設けたことです.このオプションは,日付時刻の国際標準である ISO 8601 に準拠した文字列を日付時刻と認識して,その昇順にソートするというものです.日付はグレゴリオ暦に基づいていますので,グレゴリオ暦が制定される以前の年代については少々注意が必要ですが,基本的にどのような紀元前の年代であっても,あるいははるかな未来であっても,対応は可能なはずです.

もう一つの修正は実にマイナーなもので気付くこともないと思いますが,数値の大小に基づく -e オプションにおいて,数値が整数であれば整数型のオブジェクトである Integer として扱い,その結果として,出力するときにも整数として出力し,余分な .0 付加しない洗練されたものになっています.

日付時刻の -t オプションは,私自身これまで全く使用したことがなかったので,もう一段の最適化が必要ではないかと思っていますが,とりあえずリリースしてしまいます.

| | コメント (0) | トラックバック (2)

2017/06/25

Refsort/Ruby v2.62 Released

辞書参照型ソーティングフィルターをスクリプト言語 Ruby で実装した Refsort/Ruby の開発を10年以上続けています(例えば新しいほうから順に *1 *2 *3 *4 *5 *6 *7 *8 *9 *10 *11 *12).もう仕様は落ち着いていて機能の追加をするつもりはなく,細々とバグのメンテナンスを行っている状態です.

前回のリリースはつい最近,今年2017年の6月,長年埋もれていたバグが発覚したため,慌ててその部分だけを修正したのですが,これは埋め込みマイルストーンの機能拡張でもやろうかと思って,スクリプトをいじっているうちに発見したものです.

バグの修正後,元々やろうと思っていた埋め込みマイルストーンの機能拡張を実装して未公開版としてリリースし,さらにそのスクリプトを最適化したものを v2.62 としてリリースします.

今回の機能拡張は,2点あります.まず,辞書ファイルの埋め込みマイルストーンの書式を拡張したもので,従来はレベルを表すのに,

#!m >>>>>[....]

などと書いて,レベルが5であると示していたのですが,レベルが深くなるにつれてこの書き方では煩雑になるだけでなく,レベルの視認も難しくなるため,新たに

#!m >5 [....]

という書き方も受け入れることにしました.これがまず第1点.

第2点目は,埋め込みマイルストーンを出力する際に,新たなオプション -M を設け,マイルストーンのレベルに応じてインデントを付けるようにしました.とりあえず,インデントは 半角2文字分/レベル としていますが,ソースコード1か所の修正で簡単に変更できます.出力はこんな感じになります.

[GALLIFORMES; キジ目]

 [Phasianidae; キジ科]

   [Bambusicola; コジュケイ属] # "Gould"

    コジュケイ

[ANSERIFORMES; カモ目]

 [Anatidae; カモ科]

   [Cygnus; ハクチョウ属] # "Garsault"

    コブハクチョウ

    コハクチョウ

    オオハクチョウ

   [Anas; マガモ属] # "Linnaeus"

    オカヨシガモ

    ヨシガモ

    ヒドリガモ

    マガモ

近日中にユーザーズガイドも改訂してアップする予定です.

| | コメント (0) | トラックバック (3)

2017/06/10

Refsort/Ruby v2.52 Released

辞書参照型ソーティングフィルターをスクリプト言語 Ruby で実装した Refsort/Ruby の開発を10年以上続けています(例えば新しいほうから順に *1 *2 *3 *4 *5 *6 *7 *8 *9 *10 *11).もう仕様は落ち着いていて機能の追加をするつもりはなく,細々とバグのメンテナンスを行っている状態です.

前回のリリースはつい最近,今年2017年の4月だったのですが,埋め込みマイルストーンの機能拡張でもやろうかと思ってスクリプトをいじっているうちに,私の理解不足から正規表現にバグがあることが発覚しましたので,慌てて応急処置をとったのが今回のリリースです.

幸いなことに,私がこれまでリリースした辞書ファイルを使う限りにおいては,このバグが顕在化することはなく人畜無害なのですが,とにかく明瞭なバグなので修正版をリリースします.

どういう箇所かというと,辞書ファイルを読み込んだり最終的な出力処理を行うときに,埋め込みマイルストーンを探す必要があるのですが,このときに正規表現内でキャプチャと後方参照を使います.その後方参照を文字クラスの中でも使えると誤解していたのが間違いでした.例えば以下のような表現です.

/^(#!m\s*(\S)\2*[^\\2][^#]*)/

ここで \2 というのは (\S) でキャプチャした非空白文字をそのあとで参照するためのものなのですが,これを文字クラス [...] の中でも使えると誤解していました.これは間違いなので,以下のように修正しました.

/^(#!m\s*(\S)\2*(?!\2)\S[^#]*)/

ここで,(?!\2)\S というのがミソで,これは否定先読みという表現.詳しい説明は省きますが,\2 ではない非空白文字一文字を表現したことになり,私が意図したとおりの動作をすることを確認しました.これは Ruby のユーザーズフォーラムで質問し,ある方から親切に教えていただいたので何とか修正できた次第です.

繰り返しになりますが,機能の追加は何もなく,Ruby の最新版 v2.4.1p111 で動作することを確認しています.

また近日中にユーザーズガイドを改訂してアップする予定です.

| | コメント (0) | トラックバック (4)

2017/04/30

Refsort/Ruby 2.51 Released

辞書参照型ソーティングフィルターをスクリプト言語 Ruby で実装した Refsort/Ruby の開発を10年以上続けています(例えば新しいほうから順に *1 *2 *3 *4 *5 *6 *7 *8 *9 *10).もう仕様は落ち着いていて機能の追加をするつもりはなく,細々とバグのメンテナンスを行っている状態です.

前回のリリースは昨年2016年の7月だったのですが,今回の変更は,Windows用のRuby実行環境である Rubyinstaller の更新が滞ったことに端を発しています.この Rubyinstaller に代わって,別の作者が更新を買って出て,Rubyinstaller2 なるものをリリースし始めました.

ところが,この作者の実装はエンコーディングに癖があって,Windows なのにデフォルトの外部エンコーディング Encoding.default_external を強引に UTF-8 に決め打ちしているのです.欧州のユーザ,特に Rails の開発者にとって,エンコーディングは UTF-8 しか眼中にないらしく,他のエンコーディングを使う理由は無いでしょ!と問答無用のノートが付けられています.

しかし,これは Ruby レファレンスマニュアルの記述とは食い違いますし,これまで作成してきたスクリプトの中には動かなくなるものが出てきます.そして,現に Refsort/Ruby がそうなってしまうのです.そこで,文句を言いつつも,この実行環境でも問題なく動くように修正したものが今回の Refsort/Ruby です.

繰り返しになりますが,機能の追加は何もなく,Ruby の最新版 v2.4.1p111 で動作することを確認しています.

また近日中にユーザーズガイドを改訂してアップする予定です.

| | コメント (0) | トラックバック (5)

2017/04/24

IOC List v7.2 Released

IOC World Bird List v7.2 が2017年4月22日にリリースされました.前回 v7.1 のリリースが2017年1月8日だったのですが,これはやや変則的に普段よりも早い周期でリリースされたもので,今回はその周期を元に戻す形になっています.

今回は定性的には特に目立つ変更はありません.今回収録されたのは科が 240,属が 2,295,現生種が 10,681,絶滅種が 159,亜種が 20,087 です.前回 v7.1 でアナウンスされたように,最新の研究の進展に伴い,旧来の鳥類分類体系を書き換える時期に来ていること,そのため,2017年中を目標に新たな分類体系に移行する予定であることは変わりないようです.そのためか,前回同様,上目 (Superorder) の PALEOGNATHAE(古顎類)NEOGNATHAE(新顎類)や,系統群であるNEOAVES がリストの最上位の階層にこっそりと載っています.

定量的には,亜種の整理統合が継続して行われており,今回も200弱の亜種が統合されて減少しています.以前は新しい亜種をどんどん掲載していく時期もあったのですが,さすがに現在はその揺り戻しが来ている時期になっています.また,研究の進展によって,絶滅種がわずかずつながら増えていっているのも興味深いところです.


IOC 本家の Master List を編集して,Refsort/Ruby 用の辞書ファイルを作りましたので,このブログサイトと,Microsoft One Drive 上に設けた “IOC List Archive„ にアップロードしておきます.

今回もこの辞書ファイルの正式なエンコーディングは UTF-8 です.従って,Linux 上で使う分には問題は生じませんが,Windows 上で使う際には,入力ファイルは UTF-8 でエンコードされ(辞書ファイルと入力ファイルのエンコーディングを揃える),かつ最初の行に

#!E -*- coding: UTF-8 -*-

というおまじないを書いておかないとエンコーディングの解釈がうまくいきませんのでご注意ください.

しかし,Windows 上でのデフォルトのエンコーディングである US-ASCIIWindows-31J でも手間なく使えるように,エンコーディング指定なしの汎用 US-ASCII 版もアップしておきます.これはどのようなプラットフォームであっても,そのプラットフォームのデフォルトの Locale が無条件で US-ASCII を解釈できることを利用したものです.ただし,欧文のアクセントウムラウトを含む文字は,それらを含まない最も近い文字に置き換えられています.正版はあくまで UTF-8 なので,特に人名を含む種や,種の Authority を見るときにはご注意ください.


このオリジナル英語版の辞書ファイルに続いて,和名追加版2種と,IOC Master List の Excel ファイルに和名を追加したものも同時にリリースしました.和名追加版の辞書ファイルについても,UTF-8 でエンコードしてあるものが正版ですが,Windows などでの使い勝手を考慮して Windows-31J でエンコードしたものも同時にアップしてあります.ただし人名や地名のアクセントやウムラウトなどは,それらを含まない最も近い文字に置き換えてありますのでご注意ください.

和名追加版の辞書ファイルのうち,UTF-8 でエンコードしてある ioclist_v72ju.ref は,Linux などで UTF-8 でエンコードした入力ファイルをソートするときに使うことを想定しています.Linux 上で使う際には,入力ファイルの最初の行に上記のようなエンコーディング指定を書く必要はありませんが,Windows 上で使う場合には,入力ファイルは UTF-8 でエンコードされ(辞書ファイルと入力ファイルのエンコーディングを揃える),かつ入力ファイルの最初の行に

#!E -*- coding: UTF-8 -*-

というエンコーディングを指定しておく必要があります.

逆に,Windows 上で Shift-JIS や Windows-31J でエンコードされた入力ファイルを,Windows-31J でエンコードされた辞書ファイル ioclist_v72jw.ref を用いてソートする際には,入力ファイルの冒頭にエンコーディングの指定は必要ありませんが,この辞書ファイルを Linux 上で使う場合には,入力ファイルは Windows-31J でエンコードされ(辞書ファイルと入力ファイルのエンコーディングを揃える),かつ入力ファイルの冒頭に

#!E -*- coding: Windows-31J -*-

とエンコーディングを指定しておく必要があります.要するに,どのような場合でも辞書ファイルと入力ファイルのエンコーディングを揃え,かつそれぞれの入力ファイルのエンコーディング指定を冒頭に書いておくのが無難です.

これらのファイルをダウンロードするには,従来通りこのブログの右側のコラムで “自作ソフト„ の中から個々のファイルをクリックしても良いのですが,前述のとおり,Microsoft One Drive 上に設けた IOC List 専用のフォルダからもダウンロードできます.それには,このブログ右側のコラムの最上段の “Archive„ の中の “IOC List Archive„ をクリックしてください.そうすると One Drive のフォルダに入ることができますので,あとは適当に選んでダウンロードしてください.今後は One Drive のみに集約していく予定です.


I am pleased to announce that I have posted reference files for Refsort/Ruby compiled directly from the latest IOC World Bird List v7.2. It contains 10,681 extant species, 159 extinct species and 20,087 subspecies, respectively. Please try it out, and enjoy its capability and speed.

Note that the reference file "ioclist_v72u.ref" is encoded in UTF-8 in order to retain all European accents and umlauts with complete fidelity as they are in the IOC Master List. Therefore, your input file should be encoded in UTF-8 as well, and should contain a magic comment on the top of the file such as;

#!E -*- coding: UTF-8 -*-

For those who want to use Refsort/Ruby in universal ASCII environments, I have posted another reference file "ioclist_v72a.ref" encoded in 7-bit ASCII. Note that characters with accents and umlauts have been simplified to their nearest neighbors. So please be careful in particular when you refer to authorities of species.

I have also posted two reference files (encoded in UTF-8 and Windows-31J, respectively) which include Japanese names. If you want to refer to Japanese names, please see those files. In order to sort a list properly using these reference files, you need to align the encoding of the input file to that of the reference file, and you should add a magic comment specifying the encoding of the input file in the first line of the file, such as UTF-8, US-ASCII or Windows-31J.

A master list in Excel format containing a column of Japanese names has been posted as well. This would be more convenient.

You can download an appropriate file by clicking a link listed on the right column of this page, but you can also access files and folders built in my area of Microsoft One Drive by clicking “IOC List Archive„.

| | コメント (4) | トラックバック (1)

より以前の記事一覧