「半導体パッケージのできるまで」という本を読みましたので感想を記しておきます。
半導体パッケージとは、シリコンダイを収めたICチップの形状のことです。
例えば、PCを自作している方にはお馴染みのLGA775、FC-PGA、SECC2などは半導体パッケージの名称です。これらはシリコンダイであるCPUダイを収めるパッケージのことなのです。
本書は、こうした半導体パッケージの基礎と歴史、今後の展望を扱っています。
本書を読むと、この半導体パッケージに関する技術は、奥が深く重要であることがわかります。
結構分かり易く基礎的な本なので、組み込み関連の人であれば、ソフトウェア屋さんでも分かります。
半導体パッケージ技術は、一般消費者にはほとんど見えてこない技術ですが、電子機器の小型化を支えている技術なんですね。
最近の小型化が著しい携帯電話では結構活躍しているのかもしれません(推測)。
ちなみに近頃のメモリカードの小型化&大容量化にかなり貢献していたりもします(確実)。
本書は、組み込みソフトウェア技術者、特にICチップに関わる方にお勧めです。営業さんにも良い本かもしれません。
半導体屋さんが、パッケージについて拘る理由の片鱗位は分かるのではないかと思います。
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版を読んだ方にもお薦めの一冊です。
DMC-FZ7用の純正テレコン(Panasonic DMW-LT55)を使ってみました。
ターゲットは近所にやってくる野鳥です。
DMC-FZ7にこのテレコンを装着すると、734mm相当になります。光学20.4倍ズーム相当になります。野鳥撮りにはとても有効でした。
以下、感想を列挙します。
以下、撮例です。
以下おまけ。こんなのもいました。
私が使用したのは、メーカ純正のテレコンDMW-LT55ですが、TCON-17もDMC-FZ7との組み合わせて使われているようです。
DMW-LT55とTCON-17の違いは良く分かりません。案外どちらかがもう一方のOEMだったりして・・・。
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バージョン | load | save |
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のように、出力はできるけれど入力はできない、ということにならないよう注意しましょう。