2011-10-14

PC memo - ThinkPad T420s BIOS 1.29 released

2011-10-07 付けでバージョン 1.29 がリリースされていた。[問題の解決]項目がいくつかあるので、更新することにした。

[問題の解決]
  • コンピューターの起動が遅くなることがある。
  • 一部のスマートフォンをUSBポートに接続すると、コンピューターが起動しない。
  • DEP(データ実行防止)機能を使用すると、Windows上でのBIOSの更新に失敗する。



他にも、省電力マネージャ、RapidBoot、NVIDIA Optimus ディスプレイ ドライバーなどがリリースされているのでアップデートしなくては。


リソース:


2011-09-13

PC memo - ThinkPad T420s BIOS 1.28 released

2011-09-07 付けでバージョン 1.28 がリリースされていた。修正内容の[問題の解決]に、「冷却ファンの騒音の改善」という項目がある。騒音という程ではないが、回転音が多少気になっていたので、早速アップデートした。


さて、結果はどうか。定量的な評価はできないが、確かにファンの回転音は小さくなったように感じる。


リソース:

2011-08-24

Spring 3.0.6 released

2011-08-18 付けで Spring フレームワーク 3.0 系のマイナーアップグレードが公開された。50 以上のバグフィクスと細かな改善がなされている。

MongoDB 1.8.3 released

2011-08-22 付けで MongoDB 1.8.3 がリリースされた。

2011-08-23

PC memo - Intel SSD 320 Firmware Updated

ThinkPad T420s で Intel SSD 320 Series を使っている。2011-08-17 付けで新しいファームウェアがリリースされたので、インストールした。いわゆる 8MB 問題を解決している。以下、Release Notes より抜粋。



ファームウェアのアップデート
README.txt の手順に従って問題なく更新できた。ISO イメージを CD に焼き、CD からブートすれば更新対象のドライブを提示してくれる。更新後のバージョンは 4PC10362 である(アップデート前の下4桁は 0302)。以下のように、Intel SSD Toolbox で確認できる。



リソース:

2011-08-12

MongoDB Java Driver 2.6.5 released

2011-08-09 付けでリリースされた。2.6.4 のリリースが前日になっていて、ダウンロードページにはリンクがない。

2011-06-22

Compiling and Installing OVAL Interpreter on Debian

ovaldi (OVAL Interpreter) というセキュリティアセスメントツールを使っている。Debian でも deb パッケージが用意されているが、バージョンが古い。Debian 上でソースをコンパイルしてインストールする手順を記録しておく。

なお、OVAL と ovaldi がどういうものかはここでは書かない。


環境
  • Debian 6.0.1a (2.6.32-5-686 #1 SMP Wed May 18 07:08:50 UTC 2011 i686 GNU/Linux)
  • ovaldi 5.9.1

このバージョンの Debian に用意されている ovaldi deb パッケージのバージョンは 5.7.2-1+b1 であった。




必要なパッケージ
まずは、以下のパッケージをインストールしておく。バージョンは現時点のもの。
  • g++, 4.4.5-1
  • libpcre3-dev, 8.02-1.1
  • libxerces-c2-dev, 2.8.0+deb1-2+b1
  • libxalan110-dev, 1.10-4
  • libgcrypt11-dev, 1.4.5-2
  • libapt-pkg-dev, 0.8.10.3
  • libldap2-dev, 2.4.23-7
  • libpopt-dev, 1.16-1



ソースアーカイブのダウンロードと解凍
  1. SourceForge のページから、Other versions - Browse all files のリンクを手繰り、5.9 Build 1 に進み、ovaldi-5.9.1-src.tar.bz2 をダウンロードする。
  2. アーカイブを解凍する。


ダウンロードリンク:


ビルドとインストール
アーカイブを解凍したディレクトリを $SRC とする。
  1. ビルドディレクトリ ($SRC/project/linux) に移動する。
  2. make コマンドを実行する。
  3. $SRC/project/linux/Release ディレクトリに実行可能ファイル ovaldi ができる。これを /usr/bin にコピーする。
  4. OVAL のスキーマファイルなど ($SRC/xml/*.*) を /usr/share/ovaldi にコピーする。

テスト
さて、インストールした ovaldi を実行してみる。実行ログは以下のとおり。問題なく動作しているようだ。


しかし、現時点では Mitre の OVAL リポジトリは Debian 6 をサポートしていない。つまり、上の実行結果は、プログラムとしての ovaldi の動作をテストしたのであって、セキュリティアセスメントの結果 (false) には意味がない。


Debian 5 の場合
では、Debian 5 に ovaldi をソースからインストールするにはどうすればよいか? 上に示した Debian 6 の場合と同じ手順でビルドしインストールできる。

ただし、依存するパッケージのバージョンが異なる。Debian 5.0.8 ( 2.6.26-2-686 #1 SMP Sat Jun 11 14:54:10 UTC 2011 i686 GNU/Linux) の環境では、以下のとおりであった。
  • g++, 4.3.2-2
  • libpcre3-dev, 7.6-2.1
  • libxerces-2c-dev, 2.8.0-3+lenny1
  • libxalan, 1.10-3.3
  • libgcrypt11-dev, 1.4.1-1
  • libapt-pkg-dev, 0.7.20.2-lenny2
  • libldap2-dev, 2.4.11-1+lenny2
  • libpopt-dev, 1.14-4



リソース:

2011-06-20

MongoDB 1.8.2 released

2011-06-17 付けで MongoDB 1.8.2 がリリースされた。変更点はバグフィクスだけのようだ。

2011-06-15

PC memo - Crucial m4 Firmware Updated

ThinkPad T420s の SSD を Crucial m4 に換装したが、フリーズ現象に悩まされて、結局 Intel 320 Series をインストールしたと以前の投稿に書いた。フリーズの原因は SATA LPM 機能と関係あるらしく、これを無効にすると回避できるようだとも書いた

2011-06-08 付けで、Crucial が m4 の新しいファームウェア(バージョン 0002)をリリースしたので、これを試してみる。リリースノート (Change Log) によれば、件の LPM に対処してあるそうだ。



ファームウェアのアップデート
ガイドの手順にしたがえばよい。自分の環境では、問題なくアップデートできた。


テスト
さて、ファームウェアをアップデートしたが、LPM を有効にするのはやめた。なぜならば、性能を重視したからである。といっても、ベンチマークは走らせていないが、差はわずかであろう。

以下のような操作を何度か繰り返してみたが、フリーズ現象は起きていない。
  • 電源の ON と OFF、休止状態への移行と復旧を繰り返す。
  • ウィルススキャンを実行する。


リソース:

2011-06-11

PC memo - a Revival of Crucial m4

ThinkPad T420s に Crucial m4 SSD をインストールしたが、フリーズ現象に悩まされて使用をあきらめた、と以前の投稿に書いた。しかし、その後も調査を続けていたところ、回避策を発見したので試してみた。

その回避策とは、SATA の LPM (Link Power Management) 機能を無効にするというもの。いくつかのブログで解説されており、Crucial のユーザフォーラムに投稿された C300 のフリーズ現象を回避する方法が広まったようだ。この方法を実行してみた。

環境:
  • Windows 7 Professional 64bit SP1
  • Crucial m4 256GB (CT256M4SSD2), firmware version 0001
  • Intel Rapid Storage Technology Driver version 10.1.0.1008 
  • BIOS version 8CET36WW 1.13


LPM の無効化
レジストリを操作する。キーと値は以下のとおり。上に紹介した投稿記事では、ポート0~5を対象にしているが、ここでは0と1のみで十分である。

以下の内容(プレインテキスト)を .reg ファイルに保存し、これをダブルクリックすればよい。もちろん、レジストリエディタ (RegEdit) を使って手作業で設定することもできる。



再起動と休止を何度か繰り返してみたが、フリーズ現象は起きない。このまま様子を見ることにする。


フリーズ現象の確認
実は、フリーズの発生は Windows のログに記録されていた。


「デバイス \Device\Ide\iaStor0 はタイムアウト期間内に応答しませんでした。」とのこと。ここで isStor0 の 0 がポート番号である。


リソース:

2011-06-09

MongoDB Java Driver 2.6.3 released

2011-06-08 付けでバグフィクス版がまたリリースされた。

2011-06-06

MongoDB Java Driver 2.6.2 released

2011-06-02 付けで Java Driver 2.6.2 がリリースされた。
2.6.1 に続いて、バグフィクスである。

PC memo - ThinkPad T420s and SSD

ThinkPad T420s を購入した。これまでは X60 を Windows XP で使っていた。

さて、購入時の CTO モデルでは 128GB SSD を選択したが、別の SSD に換装することにした。理由は二つ。一つは、もう少し容量が欲しかったこと(CTO モデル SSD の最大容量は 160GB であった)。もう一つの理由は、これまでに使ってきた ThinkPad と同様、初期状態のドライブ(これまでは HDD)を保存しておくためである。

T420s の 2.5 インチドライブは、厚さ 7mm という制限がある。よって、選択肢も限られる。


Crucial m4, 256GB (CT256M4SSD2)
まず最初に用意した SSD は、 Crucial m4 256GB (CT256M4SSD2) である。SATA 6Gb/s で、パフォーマンス重視の選択をした。m4 は厚さ 9.5mm であるが、プラスチックの下駄を外すことで 7mm にできる。Windows 7 をインストールし、簡単なベンチマークを走らせて見た。結果は以下のとおり、すばらしい。


しかし、以下の問題により、連続運転ができない!!!
  • ときどき、2分くらいフリーズする。このとき、ディスクアクセスランプは点灯したままである。
  • ThinkPad 本体へのちょっとした衝撃で、電源が切れる。たとえば、そっとテーブルに置いたとき、手のひらが本体の角にぶつかったときなど。
  • ブートストラップ中に read error が発生する。

調査したところ、次のことが判明した。
残念。



Intel SSD 320 Series, 300GB (SSDSA2CW300G3)
気を取り直して、ブログなどで換装が報告されている Intel 320 を試みた。SATA 3Gb/s である。これもプラスチックの下駄を外して厚さ 7mm にした。m4 の中身を Acronis True Image で書き出し、320 に書き戻した。ベンチマークは以下のとおり。


やはり、m4 よりもスコアが低い。しかし、安定して連続運転できている。

2011-06-03 付けで Diskeeper 2011 with HyperFast が発売になったので、早速入手してデフラグしてみた。


多少、スコアが改善しているのがわかる。


リソース:

2011-06-03

Spring Data for MongoDB 1.0.0 M3

2011-06-02 付けで 1.0.0 M3 がリリースされた。
変更点はこちら。

リソース:

2011-05-29

MongoDB Java Driver 2.6 released

2011-05-27 付けで Java Driver 2.6 がリリースされた。

手元のテスト (Morphia Feasibility Study, part 1-5) では、Morphia 0.99 との組み合わせで問題は起きなかった。

2011-05-20

Eclipse memo - Subversion Native Library Not Avairable

Windows 7 64bit 版を使い始めたので、Eclipse も 64bit 版をインストールして起動したところ、次のようなエラーが発生した。Subclipse プラグインに関係しているようだ。


環境:
  • Eclipse Java EE, 3.6 Helios (Windows 64bit)
  • Java2 SDK, 1.6.0 update25

さて、ダイアログの URL リンクを手繰ると、Windows 64bit 版について以下の情報があった。


この URL リンクは、Subversion のホスティングサイト slik subversion が提供するクライアントソフトウェア slik SVN のダウンロードへ向かう。以下のとおり、64bit 版は別パッケージになっている。


この 64bit 版を早速インストールする。Subversion クライアントには TortoiseSVN を使っているので、ここで必要な JavaHL フィーチャだけをインストールする。



この後 Eclipse を起動すると、問題なく Java プロジェクトを作成し、Team - Update ができた。


リソース:

Windows memo - Ctrl2cap

ノートPCを購入し、遅ればせながら Windows 7 を使い始めた。これまでの XP から一足飛びである。

Ctrl キーと CapsLock キーとを入れ替えることを常としているが、これまでの XP での方法が使えなかった。その方法とは、RemapKey というツールを使うものである。このツールは汎用性が高く、どのキーでも再配置でき、その配置をファイルに書き出し/読み込みできる優れもので、大変重宝していた。

そこで、別な方法を探していて見つけたのが、Ctrl2cap v2.0 である。使い方は至って簡単。アーカイブを展開し、コマンドラインで「ctrl2cap /install」を実行するだけである。ただし、Windows 7 では、コマンドプロンプトを「管理者として実行」で起動しておかねばならない。


リソース:

2011-05-16

Morphia Feasibility Study, part 5 - Spring configuration - TypeConverter supplement

Morphia の DAO を Spring コンテナで生成する場合に、TypeConverter をどう設定するか? 一つの方法を示す。


ドメインオブジェクト
part 3 のときとほぼ同じクラスを使う。ただし、MongoDB のコレクション名は違うものにする。



AccountType については、part 2 に示したものと同様の TypeConverter を使ってその値を小文字で保存する。



TypeConverter の設定方法
さて、part 2 で示したように、Morphia.getMapper().getConverters() で取得した DefaultConverters オブジェクトに対して addConverter( TypeConverter ) メソッドを呼ばなければならない。しかし、DefaultConverters はセッターインジェクションもコンストラクタインジェクションもできない。

そこで、Morphia インスタンスを生成するファクトリクラスを作る。そのファクトリメソッドに TypeConverter を渡し、生成した Morphia インスタンスに addConverter して返す。


Spring の XML による設定は以下のとおり。

morphia2 はファクトリ Morphiafactory の2番目の create メソッドで生成される。さらに、morphia2 がファクトリとなって Datastore インスタンスを生成する。

AccountDAO と PersonDAO はパッケージ名以外 part 3 と同じ。


アプリケーションコード
DAO オブジェクトを生成し、エンティティを操作するコードは以下のとおり。上の XML がクラスパス上の app-context-2.xml ファイルに保存されているとする。

2011-05-06

Morphia Feasibility Study, part 4 - composite pattern

MongoDB と Morphia を試すのはなぜか? それは、コンポジットオブジェクトを「自然に」永続化・検索したいからである。

これまで、RDB と Object-Relational (O/R) マッピングフレームワークを使ってきた。具体的には、Object-XML マッピングも扱える Castor を利用してきた。しかし、コンポジットオブジェクトの扱いに苦労した。


コンポジットパターンとは?
Wikipedia (|)を参照されたし。要するに、自己参照ループを持つようなクラス構造で、インスタンスはツリーを成す。

以下に、Wikipedia 日本語版の例を少し変更したコンポジットパターンのクラスを示す。一部のメソッドは省略した。

さて、このようなコンポジットパターンのオブジェクトを RDB に保存するにはどうすればよいか? 簡単ではない。以下のような課題に直面する。
  • 階層構造を読み出すには、ツリーをたどりながら複数回の検索を行うか、1回の検索で関連するオブジェクトをすべて取得してアプリケーション側で階層を構成するか。保存する場合は逆の手順が必要。
  • Composite 役と Leaf 役を一つのテーブルに格納しようとすると、各クラスに固有のプロパティはそれ以外のクラスのインスタンスのカラムで NULL になってしまう。
  • Composite 役と Leaf 役をそれぞれ独自のテーブルに保存するには、O/Rマッピングフレームワークが多態性をサポートしていなければならない(part 1 参照)。Component 役が抽象クラスで継承関係をもマッピングしようとするならば、データベースレコード継承(関係継承)が必要。
MongoDB や CouchDB などのいわゆるドキュメント指向 DB は、このような階層型データ構造や多態性(part 1 参照)を自然に扱えるのである。


テストコード
上に示したコンポジットパターンを Morphia を使って MongoDB に出し入れしてみる。

コンポジットオブジェクトを保持するクラスを用意する。


テストコードは以下のとおり。



保存されたドキュメント
上のコードで保存されたドキュメントの JSON 表現を見てみる。

Folder 型のオブジェクトが入れ子状になってツリー構造を成しているのがわかる。オブジェクトの読み出しも問題なく行えた。


リソース:

2011-04-30

The Vanished Man

"マジックのトリックはどれも効果(エフェクト)と手段(メソッド)の二つから成り立っています。エフェクトというのは、観客の目に映るもののこと。...メソッドは、マジシャンがその裏でしていること。"

2011-04-26

Morphia Feasibility Study, part 3 - Spring configuration

Morphia の DAO オブジェクトを Spring で設定してみる。Morphia グループディスカッションのスレッド「IoC in Morphia BasicDao」を参考にした。


エンティティの定義
Spring Data Document の例から引用。


それぞれ、MongoDB コレクション "spring.person" と "spring.account" に対応付ける。これらのコレクション名は一見すると階層的だが、MongoDB にとってはフラットである。すなわち、"spring" というコレクションが存在するわけではなく、両者に依存関係もない。しかし、このような名前を使用することで、データどうしの関係が人間にとってわかりやすくなる。


DAO の定義
Morphia にはBasicDAO クラスが用意されており、エンティティと id の型をパラメータに指定するだけで簡単に DAO を定義できる。




Spring コンテナの設定
さて本題。Spring の XML による設定は以下のとおり。


ここで、"#{ T(example.spring.Person) }" は、java.lang.Class のインスタンス、すなわち example.spring.Person.class を表す。part 1part 2 の例では、Morphia.map() メソッドで一つずつクラスを指定したが、コンストラクタの引数に Set でまとめて与えることもできる。


アプリケーションコード
DAO オブジェクトを生成し、エンティティを操作するコードは以下のとおり。上の XML が クラスパス上の app-context.xml ファイルに保存されているとする。


Person クラスでは、accounts フィールドに対して @Reference アノテーションを付けている。つまり、Account オブジェクトを独立したドキュメントとして保存し、Person ドキュメントは Account ドキュメントを id で参照する。

注意すべきは、Account オブジェクトを先に保存することである。保存してはじめて Account ドキュメントの id 値が決定するからである。


保存されたドキュメント
上のコードで保存されたドキュメントの JSON 表現を見てみる。


Account ドキュメントへの参照は、コレクション名とドキュメント id で与えられる。


課題:
  • TypeConverter を設定する方法
リソース:

2011-04-22

(BETA) Visualizing radioactivity level using Google public data explorer, part 3

環境放射能水準データ(文部科学省提供)の可視化について、その後も Google Public Data Explorer のデータを更新している。しかし、本日(2011-04-22)、PDF ファイルを取得しようとしたところ、文部科学省の Web ページの URL が変更されていた。新しい URL は以下のとおり。

最新のデータはこちらでご覧あれ。

2011-04-21

Morphia Feasibility Study, part 2 - enum

part 1 で示した2番目の要求、「インスタンス変数を持つ enum を扱えること」を試す。

インスタンス変数を持つ enum とは?
ここでの目的は、Java の識別子ではない定数のリストを定義することである。以下の Enum 型 ComplexEnum は一つの例である。AT_LEAST_ONE 定数の「値」"at least one" は、空白を含むので、enum 定数として直接宣言できない。ONLY_ONE も同様。



これまで、Java オブジェクトの永続化に RDB を利用し、O/Rマッピングに Castor を利用してきた。Castor は多態性をサポートし、上記のような enum 型も「ある約束」に従えば問題なく SQL CHAR/VARCHAR にマップしてくれる。ある約束とは、上記の fromValue と value メソッドである。

さて、MongoDB ではどうか?


単純な enum 型
まず、以下の単純な enum 型 SimpleEnum を試す。コンテナクラス SimpleEnumContainer を MongoDB のコレクション "enum" に対応付ける。



Morphia を使って、MongoDB への保存と読み出すコードは以下のとおり。特に何もせずに、単純型の値と同じように保存できる。



MongoDB に保存されたドキュメントは以下のとおり。




インスタンス変数を持つ enum 型
いよいよ本題。最初に示した ComplexEnum 型を試す。コンテナクラスは以下のとおり。



Java オブジェクトと MongoDB ドキュメントとの間で特別なマッピングを行うには、TypeConverter を使う。ComplexEnum に対して、以下のように encode/decode メソッドを定義する。


update (2011-04-26): implements SimpleValueConverter を追加。


この ComplexEnumConverter を使ったオブジェクトの保存/読み出しのコードを以下に示す。



MongoDB に保存されたドキュメントは以下のとおり。



これで Morphia が所期の要件を満たすことがわかった。

次は、オブジェクト間の関連(1:n や m:n)について試したい。


リソース:

2011-04-20

Morphia Feasibility Study, part 1 - polymorphism

MorphiaSpring Data for MongoDB のどちらを使うか? を検討している。要求は次のとおり。
  • 多態性 (polymorphism) に対応していること
  • インスタンス変数を持つ Enum を扱えること
Spring Data のドキュメントやコードをざっと見た限り、多態性には対応していないようだ。一方、 Morphia はドキュメントで説明しているように、この要件を満たす。そこで、Morphia を試すことにする。


ここでいう多態性とは?
抽象クラスやインタフェースのレベルで永続オブジェクトを操作できること。例えば、クラスA、B、C が次のような関係にあるとする。



このとき、db.find( A.class ) のように、B と C を区別せずに読み出したり検索したい。


なぜ Morphia は多態性を扱えるか?
ドキュメント内の className という特別なプロパティに Java のクラス名を保存しているから。例えば、Java のクラス B の完全修飾名が org.example.B だとすると、B オブジェクトを MongoDB に保存した場合、ドキュメントの JSON 表現は以下のようになる。



この仕組みによって、データベースからドキュメントを読み出したときに、どのクラス型の Java オブジェクトを生成すればよいかを(Morphia が)判断できる。多態性を扱う必要がない場合など、この className プロパティを保存しないように設定することもできる。


テスト
以下に示すコードでは、import 文、コンストラクタ、setter/getter を略す。MongoDB のデータベースを test、コレクションを polymorphism とする。

ドメインモデルのクラスは以下のとおり。Java クラスと MongoDB コレクションとの対応付けを @Entity アノテーションで行う。@Id アノテーションは MongoDB の _id プロパティへの対応付けを示し、org.bson.types パッケージで定義された ObjectId 型にしておくと Morphia が自動的に値を割り当てる



注意すべき点は、多態的に操作したい抽象クラスもコレクションに対応付けておかねばならないことである。

インスタンスの保存と読み出しの簡単なコードを以下に示す。



get では個々の具象クラスを指定して読み出している。find では A 型のインスタンスをすべて読み出している。元のコレクションが空だとすると、listA.size() は3になる。

Mongo シェルで db.polymorphism.find() して、コレクションに保存されたインスタンス(ドキュメント)の JSON 表示を見てみる。



Morphia の多態的操作について、最も基本的な動作を試した。今後、検索や更新についても試していく予定。


リソース:

2011-04-15

Spring Data for MongoDB 1.0.0 M2

Spring Data for MongoDB 1.0.0 M2 を試そうとしたが、以下のクラスで ClassNotFoundException。
  • org.springframework.data.mapping.context.MappingContextAware
いずれの JAR ファイルにもこのクラスが含まれていない。

フォーラムをみると、 リリースをアナウンスしたスレッドに同症状の応答あり。(おそらく)Maven の設定で spring-data-commons-core のバージョンを 1.0.0.RC1 に書き換えたら解決したとのこと。



Maven は使っていないので、同 JAR のダウンロードリンクの URL を RC1 用に変更して直接ダウンロードした。その URL は次のとおり。
これを解凍して得た spring-data-commons-core-1.0.0.RC1.jar には問題のクラスが含まれており、この JAR に差し替えて解決した。



リソース:

2011-04-13

Painted Ladies

''幸運とは計画の残留物である''

2011-04-12

MongoDB 1.8.1 and Java Driver 2.5.3 released

2011-04-06 付けで MongoDB 1.8.1 がリリースされていた。

変更内容:
  • sharding migrate fix when moving larger chunks
  • durability fix with background indexing
  • fixed mongos concurrency issue with many incoming connections
 フィクス:

Java Driver も同時にアップデートされた。

Spring Data for MongoDB の 1.0.0 M2 もリリースされた。MongoDB Java Language Center からもリンクされている。
Morphia とどちらを使うか検討したい。

2011-04-08

(BETA) Visualizing radioactivity level using Google public data explorer, part 2

2011-04-06に環境放射能水準データ(文部科学省提供)の可視化について投稿した。4月4日19時から4月5日17時までのデータ (1304665_040519.pdf) を追加しようとしたところ、問題が起きた。

原因を探っていたところ、PDFからのテキスト抽出に問題があることがわかった。抽出したテキストのJava Stringをプリントしたところ、行数はある程度の分量があるが、印刷可能文字がほとんど含まれていない。PDFからのテキストの抽出には iText を使っていた。

解決方法として、まずは iText の PdfReader や PdfReaderContentParser クラスを調べたが、テキスト抽出に関する設定は見つからない。別のPDFライブラリを使ってみようと思い、探したところ、Apache PDFBox を見つけた。

さて、PDFBox に置き換えてみたところ、テキスト抽出はうまくいった(ようだ)。しかし、CSV への変換がうまくいかない。Java String を byte[] にしてプリントしてみたところ、行末に '\f' (form-feed) が付いていた!

元のPDFにこれまでと違いがあるのか? セキュリティプロパティの「互換性があるバージョン」が「Acrobat 7.0およびそれ以降」に対して、これ以前のPDFでは「Acrobat 5.0およびそれ以降」であった。これが原因か?

最終的に、PDFのテキスト抽出は PDFBox で行い、各行を String.trim() してから処理することで解決した。

4月5日分までのデータを追加したデータセットを Google public data explorer にアップロードしたのでご覧あれ。福島県のデータも追加されている。


(2011-04-07分までのデータを追加し、スクリーンショットを2011-04-08に貼りこみ)


リソース:

2011-04-06

(BETA) Visualizing radioactivity level using Google public data explorer

文部科学省が公開している都道府県ごとの環境放射能水準の時系列データ
Google Public Data Explorerで可視化してみた。



数値の単位 (μSv/h) が付いていないなど、完成度はまだ低い。Windows XP上のIE8とChorome 11で動作を確認した。Safariでは、「読み込み中...」で止まってしまう。

3月17日から4月4日までの正午のデータだけを登録してある。手元では全ての時間帯のデータを用意したが、Public Data Explorerが1日よりも短い単位を可視化できないからである。

文部科学省は Windows Azure 上に可視化サービスを構築しているようだ。現在の日本語トップページに日本地図があり、各都道府県をクリックするとグラフが表示される。

元データはPDFで公開されている。このPDFからテキストを抽出するには iText を使った。まずは如何様にもデータを加工できるようにすべく、ニュートラルなCSVを作成。これを DSPL 用のCSVに変換した。プログラミングにはJavaを使用。

iTextでPDFから抽出したプレインテキストでは、表の空セルを判別できない。よって、空セルがある表に対しては、データの修正が必要になる。ここはdirty hack。特に埼玉県に空セルが目立つ。PDFで発信された情報から機械可読データを作るのは難しい。


リソース:

2011-04-01

Failed to create the Java Virtual Machine.

Eclipseの起動直後、次のようなエラーが発生した。



環境:

Eclipse Java EE, 3.6 Helios
Java2 SDK, 1.6.0 update24

Eclipse Community Forumsを検索したところ、次のスレッドを発見。
eclipse.iniの設定を調整するいくつかの対処法が解説されている。この中で自分の環境の対処に成功したのは message# 656933 の -vmオプションを指定するものであった。