2007年01月29日

半導体パッケージのできるまで

半導体パッケージのできるまで」という本を読みましたので感想を記しておきます。

半導体パッケージとは、シリコンダイを収めたICチップの形状のことです。 例えば、PCを自作している方にはお馴染みのLGA775、FC-PGA、SECC2などは半導体パッケージの名称です。これらはシリコンダイであるCPUダイを収めるパッケージのことなのです。
本書は、こうした半導体パッケージの基礎と歴史、今後の展望を扱っています。

本書を読むと、この半導体パッケージに関する技術は、奥が深く重要であることがわかります。 結構分かり易く基礎的な本なので、組み込み関連の人であれば、ソフトウェア屋さんでも分かります。
半導体パッケージ技術は、一般消費者にはほとんど見えてこない技術ですが、電子機器の小型化を支えている技術なんですね。 最近の小型化が著しい携帯電話では結構活躍しているのかもしれません(推測)。 ちなみに近頃のメモリカードの小型化&大容量化にかなり貢献していたりもします(確実)。

本書は、組み込みソフトウェア技術者、特にICチップに関わる方にお勧めです。営業さんにも良い本かもしれません。
半導体屋さんが、パッケージについて拘る理由の片鱗位は分かるのではないかと思います。

2007年01月23日

Effective C++ 原著第3版

Effective C++ 原著第3版(以下第3版)という本を読みましたので感想を書きます。

この本が、「プログラミング言語C++第3版」の次のステップとして薦められていることはいまさら言うまでも無いので、 この本の一つ前の版である「Effective C++ 改訂第2版」(以下第2版)との違いを主に書きます。

第3版は、第2版の50項目から5項目増えて55項目になってます。各項目の対応表を見ると、第2版からあまり変わっていないように見えます。 しかし、実際に読んでみたところ、かなりの部分が変更されていました。項目名は似ているのですが、中身がだいぶ違うのです。

主な変更点は、テンプレート関連の記述の強化です。
まずテンプレート関連の項目が増えました。さらに、テンプレート関連以外の項目のサンプルコードがテンプレートを使って書き直されています。 特に良く出てくるのがstd::tr1::shared_ptrというスマートポインタテンプレートクラスです。tr1というネームスペースの詳細はさておき、実態はboost::shared_ptrです。
つまり、サンプルコードが、boostのテンプレートクラスを使って書き直されているのです。これは結構参考になります。

他にも、実際にコーディングしたときに陥りそうな罠についての記述が増えていました。
例えば、第3版4項では、staticオブジェクトへの参照を戻す関数(シングルトンとマルチスレッドにあるような関数)が、マルチスレッド環境でトラブルを引き起こすことがあると指摘しています。
第2版では47項でstaticオブジェクトへの参照を戻す関数が登場していましたが、マルチスレッド環境での危険性に触れられていません。

こんな感じで、第2版から強化された点はたくさんあります。すぐに役立つような情報も多く、読み応えがありました。たぶん、最近の研究成果などが取り込まれているのでしょう。 第2版を読んだ方にもお薦めの一冊です。

2007年01月03日

DMC-FZ7+テレコン

DMC-FZ7用の純正テレコン(Panasonic DMW-LT55)を使ってみました。
ターゲットは近所にやってくる野鳥です。
DMC-FZ7にこのテレコンを装着すると、734mm相当になります。光学20.4倍ズーム相当になります。野鳥撮りにはとても有効でした。

以下、感想を列挙します。

  • 734mmの超大望遠は強力です。テレコンなし+デジタルズームの画質とは雲泥の違いがあります。
  • 最短撮影距離が5mと長いですが、5mまで近づける野鳥はあまりいないので問題はありませんでした。
  • ピントは合い難かったです。特に茂みの中にいる鳥が難しかったです。失敗写真を量産してしまいました。ピントが合わないと何枚連射しても全部失敗するので痛いです。マニュアルフォーカスがもうちょっと使いやすければいいんですけどね。
  • テレコンの重さはカメラと同じくらいありますので重量は2倍近くになっていたと思いますが、重さやバランスは気になりませんでいた。持ちやすかったからかもしれません。
  • 手ブレは酷かったです。これも失敗写真量産の原因でした。フェンスの上にレンズを載せたり、電柱に寄りかかったりと手ブレを低減する工夫が必要でした。場所が悪くこうした工夫ができなければ、ひたすら連射していました。ピントと違い、手ブレの方は、連射していればたまにブレていない当たり写真が撮れました。
  • 取り外しにそれなりの時間がかかるので、蝶撮りを同時にやるのは困難です。シャッターチャンスを沢山逃してしまうでしょう。テレコンは(蝶のいない)冬しか使えません。

以下、撮例です。

ホオジロ科 アオジ

アオジ 正面を向いた姿が可愛いアオジ。撮影距離はおおよそ10m。フェンスの上にカメラを置いて安定させて撮りましたが、 茂みの中をうろちょろするのでピントを合わず大変でした。これはなんとか成功したうちの1枚です。

アトリ科 カワラヒワ

カワラヒワ 撮影距離は約5m。ちょうど飛び出してきた所を撮りました。手持ちですが、ちょうどカメラを持ちやすい高さだったので、あまり手ブレせずに撮れました。

カワセミ科 カワセミ

カワセミ 撮影距離は7~8m。これも運良く目の前に飛び出してきました。こういう所に止まってくれるとピントが合い易くていいですね。

以下おまけ。こんなのもいました。

イタチ?

イタチ?

私が使用したのは、メーカ純正のテレコンDMW-LT55ですが、TCON-17もDMC-FZ7との組み合わせて使われているようです。
DMW-LT55とTCON-17の違いは良く分かりません。案外どちらかがもう一方のOEMだったりして・・・。

2007年01月02日

MSXMLによる不正なコードを含んだXMLファイルの扱い

MSXMLが不正なコードを含むXMLファイルをどう扱うか、という話です。
MSXMLのバージョン次第で扱いが違いますので、夫々のバージョンにおける扱いを調べてみました。

調べたMSXMLのバージョンは2.6、3.0、4.0の3つです。
不正なコードを含むXMLファイル(RSSですが)として、以下のURLのファイルを使いました。色々と試して見たい方はご利用下さい。
http://www.sutosoft.com/test/heimdallr/testrssmiss_2.xml
XMLファイルの中に、0x1BというEscapeのコントロールコードが含まれています。

MSXMLのloadを使用して上記XMLファイルを読み込んだときの結果と、saveを使用して書き込んだときの結果は以下のようになりました。

MSXMLバージョンloadsave
MSXML 2.6
MSXML 3.0×
MSXML 4.0××

MSXML2.6は平和です。不正なコードが含まれていても何事もなかったように処理してしまいます。
このやり方は、MSXML2.6の世界に閉じていれば安泰なのですが、MSXML2.6で作成したデータを、他のライブラリで読み込もうとしたときにはトラブルが発生してもおかしくありません。

MSXML3.0は、不正なコードを含んだファイルを作成できるのに、読み込めないので、自爆の可能性を秘めています。
うっかり不正なコードを含んだファイルを作成してしまうと、自分でも読み込めなくなってしまいますので、さっき作成したデータが読み込めない・・・という事態になることがあります。

MSXML4.0は厳しめの平和です。不正なコードを含んだファイルを作成できないようになっています。
具体的には、不正なコードを含んだテキストノードを作成しようとしたところで失敗します。 MSXML4.0を呼び出すアプリケーションが、テキストノード作成に失敗することを考えていないような仕様になっていると、アプリケーションが強制終了する場合があるでしょう。

不正なコードが含まれてしまっていることをどれくらい早く検出できるか、という観点で考えると、MSXML4.0 > MSXML3.0 > MSXML2.6 です。動作としてはMSXML4.0が一応理想ということにはなると思います。
しかし、MSXML4.0は、Internet Explorer6に同梱されていませんので、現時点では使わない方が良いでしょう。 ということで、不正なコードが紛れ込まないよう注意しながらMSXML3.0を使うときは使いましょう。

なお、ここでは「不正なコードを含むXMLファイル」と書きましたが、MSXML3.0や4.0で読み込みや書き込みができないXMLファイルの条件は、明確には分かっていません。今回挙げた例は、一例です。

以下余談。
実のところは、他のアプリケーションとXMLファイルをやり取りするようなことがない場合は、MSXML2.6は最後まで不正な文字コードが含まれていることを検出できず、具体的な問題がなにも発生しないことも多いでしょう。ですので、MSXML2.6の仕様はユーザメリットがあるのです。一番ユーザメリットがないのは、実はMSXML3.0なのです。
入出力ライブラリを作るときは、MSXML3.0のように、出力はできるけれど入力はできない、ということにならないよう注意しましょう。