Software Design 1991年4月号

まだまだプログラマのための雑誌の側面が色濃いこの頃のSD(まあ誌名からして当然なのかもしれないが)。本号の特集はWindows3.0の実用プログラミング。VBもMFCもないこの頃のWindowsプログラミングが以下に苦行であったかが偲ばれる。
ここまで読んできて思ったのが、当時のSD誌は結構書き手が偏っている(というか少ない)なというもの。吉田弘一郎氏と岩谷宏氏で誌面の半分くらいを書いているのかと思うほどだ。

Software Design 1991年3月号

特集はデバッガ。といってももちろんgdbではなく、MS-DOS上の開発ツールの話。MS-CとTurbo-Cのデバッガについてのもの。
この号で一番注目すべき記事はなんと言ってもMINIX開発者のタネンバウム教授へのインタビューだろう。これを読むと教授はMINIXをあくまでも学習のための教材のままでしておきたいという意思を持っていることがひしひしと伝わる。当時の「PCで使えるUNIX」を熱望しているユーザとの温度差が想像できて興味深い。

Software Design 1991年2月号

特集は「C言語ライブラリ活用百科」。とは言っても主にMS-DOS環境での話で、MS CとTurbo Cとの比較や商用ライブラリパッケージの紹介などとなっている。そのほか連載の大半は引き続きC関連(一応創刊号からPascalとかもあるが)。
で、C関連やOOP関連の話は今につながる話も多いので役に立つ記事と言えばそちらなのだが、わざわざ古い雑誌を読むのだから時事ネタの方がおもしろいよね、ということで今後は時事ネタの軽い記事を中心に読み飛ばそうと思う。この号だとUNIXのGUI周りの勢力争いの話が興味深いかな。SunのOpenLookとIBMやHPのMotifとの主導権争い。こんなことをずっと続けているうちにWindowsとLinuxに敗れ去ったわけですな。この頃はまだWindowsがサーバ市場に来るともLinuxなんておもちゃのOSがサーバに使われるようになるとも思っていなかっただろうなあ(そもそもLinuxの開発開始はこの年、1991年だそうで)。

なんか読んでいると無性に昔のPCを動かしたくなってきたので、VirtualBoxでWindows98とかMS-DOS6.2 + Windows3.1をインストールしようとしたのだが見事に失敗。VirtualBoxの仮想マシンはEMSをサポートしてないそうで、インストール後の最初の起動で失敗してしまう。じゃあなんでWindows3.1の選択肢があるんだよ!なんて突っ込みたくなるが、一応回避策はあるようなので、時間があったらまたチャレンジしよう。ちょうどこの時期のSDの連載にCでEMSを使う記事があったけど、これは試せないんだね。それにしてもEMSなんて今どれくらいの人が覚えているんだろうか。

Software Design 1991年1月号

特集がC、連載も大半がC(およびC++)と、これまでから引き続き「Cマガジン」状態。筆者が最初に読み始めた1990年代後半はすでに今のテイストに近いものだった覚えがあるのだが、そうなるのはいつ頃なのか。気になる。

時事的なネタだとCOMDEX fall’90の記事がある。ラスベガス、懐かしいなあ、去年行ったなあ、ということは置いといて、リリース直後?直前?あたりのWindows3.0で盛り上がっている一方で、OS/2(この頃はまだIBMとMicrosoftの共同開発の頃)はぱっとしないとの話。別記事でもMicrosoftがIBMとの共同開発の要員を減らしてWindowsに振り向けた。IBMとMicrosoftの蜜月は終わりとの話がある。これが数年後のWindows95での最終決戦(と、OS/2の終焉)につながっていくのだなあと考えると感慨深い。

Software Design 1990年12月号

一言で書くと、「Cマガジン?」。
とにかくCの話が多い。あと創刊号もそうだけど、総ページ数に対するプログラムリストの比率が高い。まあこれはこの時代のプログラマ向け雑誌はどれもそうだから違和感はないけど。
当時(といってもこの1,2年後)自分が読んでいたのは電波新聞社の「マイコンBASICマガジン」(ベーマガ)、ソフトバンク(現ソフトバンククリエイティブ)の「Oh!X」や「C MAGAZINE」だったけど、やはりこれらもプログラムリストがページの多くを占めていた記憶がある。ただこれらの雑誌の判型はA4変形。SDはB5ということで一回り小さいせいか、リストが横向きに印刷されているため読みづらい。

そのほかやはり特徴的なのはUNIXの記事が多いこと。この辺に現在につながる流れが見える。

Software Design 1990年11月号

半ばコレクションアイテムとして購入していたSoftware Designの総集編。1990年の創刊から2000年までと2001年から2012年までの2冊どちらも購入したままとなっていた。
先日dankogai氏の書評を読み、アナログを電子化しているから表紙の端が黄ばんでいると言われて「おー確かに」と確認していたら、せっかく創刊号からあるのだから全部読んでみようという気になってしまった。

というわけで、今回から毎号読んで簡単に感想を書いていこう。もちろん時間は有限なので興味のあるところ以外は流し読みで。

創刊号は1990年11月号。筆者がPCに興味を持ち始めたのは中学2年の頃でこれが1991年。つまりちょうど筆者のコンピュータ歴にほぼ沿った発刊となっているわけで、記事に出てくる固有名詞がいちいち懐かしい。
今のSD誌はインフラ周りの記事が充実していると感じるが、創刊号は時代を反映してプログラミングの話題でぎっしり。
巻頭特集はOOPで、その基本的な内容そのものは今でもおそらく通じる(自分はプログラマとしては落第なのであまり偉そうなことはいえないが)。ただ使用言語はほぼすべてC++。今だとJavaだよなあと思いつつWikipediaを確認すると、Javaの開発が始まったのがちょうどこの年なのね。誌面にはNEXTのObjective-Cの話も出てくるけど、この2つの環境に触発されて始まったそう。それにしても、NEXTの子孫のiOSがこれだけ反映し、Objective-Cがこれほど使われるようになったことを考えると感慨深い。
他にはANSI Cの解説記事も。ANSI Cの制定ってようやくこの時期なんだ。そういえば初めてC言語を勉強したこの時期の別の雑誌の記事で、「ANSI Cのプロトタイプ宣言が気にくわない。K&Rの方が良い」と書かれていたのを覚えている。このほか、連載記事も含めてほとんどがC言語がらみのプログラミングの話だ(中にはマシン語も)。

一方で今のSD誌につながるUNIX関連の記事も創刊号からかなり豊富にある。先のC言語の記事群がほぼすべてMS-DOS環境を前提にしていることを考えるとかなり思い切った構成に感じる。でもこの時期は結構XENIXに存在感があるんだね。意外だった。

というわけで創刊号はざっくり読了。2号目以降はここまで長く感想は書かないと思う。

SQLアンチパターン

 今回は新しい本でも。RDBMS、特にSQLがらみでありがちなトラブルを、ユーモアを交えて紹介しているのがこの本だ。日本語版には最後に「漢のコンピュータ道」奥野氏が執筆した章が追加されている。

 全編、「ああ、あるある」、「これやっちゃったなあ」と、SQLを使った開発・保守をした経験がある人なら心当たりのある事例のオンパレードで、にやりとしたり、背中にいやな汗をかいたりしながら読み進めることができる(そういえば、前職のシステムはこのアンチパターンにどっぷり浸かっちゃってるな。今も無事に動いてるだろうか……、など)。

 全体的に脚注での監訳者のフォローが充実しており、単なる翻訳ではなく、深い読み込みやサンプルプログラムの精査が行われたことがわかる。一部勢い余って本文のコラムにまで進出しているのはご愛敬か。

 個人的な思い込みかもしれないが、世間にはリレーショナルデータベースの理論(元は数学の集合理論)とオブジェクト指向をともに理解し、どちらも自在に操れる人は少ないと感じている。モデラーとプログラマとの間の相克はよく聞く話だ。本書で取り上げられているアンチパターンでも、プログラマがリレーショナルデータベース理論に疎いことが大元にあるものが多いと読んでいて感じた(まあ題名からして、プログラマに分の悪い内容であることは致し方ないが)。個人的には、昨今NoSQL(特にkey-value型データストア)が人気なのも、プログラマからわかりやすい・扱いやすいものだからではないかと考えている。データベースをただのデータストア(データ置き場)としてしか使わない例はよく聞くし。

 内容としては論理設計・物理設計・SQLクエリ・ソフトウェア開発と題材が大きく分かれ、非常に幅広くかつ実践的なものとなっている。正規化・浮動小数点の丸め誤差・テキスト全文検索・SQLインジェクションの問題と対策がすべて扱われていて、かつ300ページ程度に収まっている本はなかなかないのではないだろうか。そういえば先日取り上げた「プログラマが知るべき97のこと」でも浮動小数点の丸め誤差の話が出ていた。ありがちなトラブルなのだろうか。

 といったところで、DBAというよりRDBMSと連携するアプリを開発しているプログラマに是非読んでほしい本だ。でもタイトルからして筆者のようなRDBMS好きばっかり読むのだろうな。版元がオライリーというところが救いか(プログラマの目につきやすい)。

プログラマが知るべき97のこと

 今回の本は、前回の王選手の本と同時にブックオフで買ったもの。多くのー流プログラマがそれぞれ自分の思うテーマでショートエッセイを書き、それをまとめたものだ。タイトルからプログラマとしての心構えといった概念的な話が多いのかと思ったが、意外にもプラクティカルな内容も同じくらい取り扱われていた。

 内容は様々だが、通底するテーマは「職業プログラマとして(つまり開発チームの一員として)品質・保守性の高いプログラムを作るには」だろう。テストの話やコードのリファクタリングの話が多いことにそれが表われている。そのほか、若干ながらプログラマが成長するための心構えについて書かれたエッセイも目についた。あと「達人プログラマー」についての言及が多かったのも特徴か。やっぱりこちらも必読書なんだろうな。

 全般的にオライリーの本にしては気楽にすらすらと読める本であり、筆者のような職業プログラマとはとてもいえない程度のプログラミングしかしていない人間にとっても、これまでの経験と照らし合わせて「あるある」「そうだよなあ」という納得感のある話ばかりで、突飛な話はない。といってもそれはこの本の内容の薄さを表すわけではもちろんない。おそらく各々のプログラマとしての経験に応じて様々な気づきを与えてくれる本なのではと思っている。

 ぜひこれを職場の若手(と書くと自分はすっかりおっさんになった気がする。でも未成年の子なので本当に若手なんだよ)に読ませたいなと一瞬思ったが、仕事としてのプログラミングをまだしていない彼にとっては、まだまだ難しいだろうなあ。

オープンソースカンファレンス 2012.DBに行ってきた

最近このブログも放置気味。まあ自分はもともとあまり記事を書いていなかったのだが、bitchもすっかり書かなくなってしまったので、1年近く更新が止まった状態になってしまっている。

ちょっともったいないので、自分の(仕事がらみのネタも含む)メモ代わりにしていこうと思う。ただし他人が読んでも興味がありそうなものを書くつもり。

で、第一弾として、先週の話だけど「オープンソースカンファレンス2012.DB」に行ってきたので、その時のメモ。

カンファレンスのサイトは以下。プレゼン資料(一部)や当日のUstream中継が見られる。
http://www.ospn.jp/osc2012.db/

BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
担当:アップタイム・テクノロジーズ合同会社
講師:永安 悟史

Stado(スタド)の概要
・MPPミドルウェア。PostgreSQLで使用。
・GridSQLの後継プロジェクト。歴史は長い。
・シェアードナッシング
・オープンソース
・DWH/BI向けソリューション
・スタースキーマを対象としてパラレルクエリを実行するためのもの。
・レプリケーションではない。
・高可用向けではない。
・Postgres-XC(マルチマスターのクラスタ)ではない。
・物理サーバ1台に対して複数の論理ノードを設定することができる。
・パーティショニングは以下2種類を同時に使用することが可能。
レンジパーティショニング → CE(PostgreSQL標準機能)
ハッシュパーティショニング → Stado
・集約処理(sum, count)は2段階で実行(ローカル→ノード間の集計)
・実行可能なSQLに制約あり。
・DMLは遅いのでデータ登録はツールを使ったバルクロードを推奨。
・ノードを追加するにはダウンタイムが必要。

導入手順
・PostgreSQL9.1以降、JDK6以降が必要。
・リリース版ではなくリポジトリから最新版を入手してインストールすることを推奨。

検証結果
・検証に使用した環境は以下2種類。
Amazon EC2 8nodes
物理サーバ HDDx4 論理4nodes
・使用したベンチマークはDBT-3 スケールファクタ:10
・countやgroup byではリニアにスケールした。
・ノードをまたぐjoin(クロスノードジョイン)ではパフォーマンスが上がらない。
・クロスノードジョインは一旦TEMPテーブルを作成しているため、DISK書き出しが発生。
・全体的に物理サーバ側ではきれいにリニアにスケールする部分が多かった。
・一方でEC2側ではリニアにスケールする部分もあればしない部分も多く、結果が不安定。
・ほか、結果にまだ不明な点が残るためまだ調査が必要。

以下、個人的な感想。
検証では複数ノードの環境としてEC2を使用していたため、結果の不安定さがStadoによるものなのか仮想環境によるものなのかが不明瞭だった。物理サーバを複数用意しての検証結果も見てみたい(自分でやれという話か?)。
pgpool-II 新バージョン 3.2 登場! ~多機能ミドルウェア pgpool-II の活用で PostgreSQL 利用の幅を広げる~
担当:SRA OSS Inc.日本支社
講師:安齋 希美(SRA OSS Inc.日本支社 技術開発部)

今回は以下2つの新機能の紹介。
1. On memory query cache
2. Watchdog

On memory query cache
・MySQLのクエリキャッシュをパクろう。
・pgpool-IIが以前持っていた旧クエリキャッシュは廃止した。
・クエリをmd5でキャッシュしたものを比較している。
・キャッシュされないselectは以下の通り。
:Immutableではないもの(DATE関数など)
:for update
:失敗したクエリやロールバックしたクエリ
:ブラックリストに載っているもの
:ホワイトリストに載っていないもの
:クエリによって返される結果セットのサイズが大きいもの
:一時テーブル(デフォルトではキャッシュ無効。有効にもできる。)
・キャッシュヒット率が低い場合は使わない方が速い(キャッシュのために余計な処理をしているため)。
・キャッシュヒット率の目安は60%~70%くらい。
・制限事項は以下の通り。
:暗黙的な更新が認識できない。ビューの更新やトリガーなど。
:スキーマを区別することができない。単純にSQL文をハッシュしているため、SQL内でスキーマ指定がなければ同じハッシュになってしまう。

Watchdog
・pgpoolをHA構成で使うための機能。
・仮想IPを使う。
・pingで監視
――――仮想IP

Active pgpool   ←→   stand by pgpool

PostgreSQL1     ←→   PostgreSQL2

・スプリットブレイン対策は、HUB故障時にどちらも仮想IPをdownさせることで行う。
・仮想IPのup/downを行うため、pgpoolをrootで実行する必要あり。
・failover時にパスワードなしssh接続ができる必要あり。
・現時点では取得できるステータス情報が不十分。
・時刻同期が必要。

以下、個人的な感想。
・pgpool-II自体をほぼ知らなかったので、新機能の話だけ聞いても意味がなかった。しまった。
・講師の人の喋りがたどたどしかった。自分も最近はセミナーやデモを行うことが多いので、聞いているときに自分が喋っている様を想像してドキドキしてしまった。

DBとはちょっと違うけど、分散処理基盤「Hadoop」の概要と最新動向紹介!
担当:Hadoopユーザー会
講師:山下 真一

タイトル通り、ざっくりとした概要紹介だったため全体的な話は省略。
気になった点だけ以下にピックアップ。

・GEではMySQLで50時間かかっていたツイートや記事の分析処理をHadoopで30分にした。
・CBSではWebサイトのログをHadoopに保存している。
・HBaseは数100TBくらいまでのデータ量の実績あり。
・Apache Flume:ログデータを格納するETLツール。
・JavaはOracle Java6 64bitのみサポート。(Java7は未サポートとのこと。)
・Apache BigTop:構築やテスト環境を作成するツール。

以下、個人的な感想。
当日使用するはずのプレゼン資料が壊れてしまったそうで、3月ごろの資料を用いてのプレゼンだった。本来のプレゼンを聞きたかった。サイトにアップされているものは本来のプレゼン資料のようだ。

PostgreSQL最新情報 ~9.2バージョンほか~
担当:日本PostgreSQLユーザ会
講師:高塚 遙(日本PostgreSQLユーザ会)

9.2の新機能・改良点についての紹介。
・CPUのスケールに対応。8.2~9.1までは8~12コアまでスケールしたが、9.2では32~64コアまでスケールする。
・今回のスケール対応は内部的なロック競合を改善することで可能となった。
・書き込みトランザクションの改善。COMMIT遅延が改善された。
・Index only scanが可能となった。PostgreSQLは追記型という特徴のため、これまでIndexのみでスキャンすることができなかった(テーブル側のみでバージョンを管理していたため)。今回はvacuum処理改善のために以前導入されたVisibility Mapを使用し、複数のバージョンを持たない場合(vacuum直後など)に実行できるようにした。
・レプリケーション機能を拡張し、スタンバイのカスケード構成に対応した。

プライマリ → スタンバイ → スタンバイ
|               |
―→ スタンバイ        ―→ バックアップ

・JSONデータ型の追加。配列・行からJSON型への返還関数あり(逆はなし)。現時点ではマルチバイトでバグあり。
・セキュリティバリアビュー。ビュー定義時に設定。
・SE-pgsqlの対応範囲が拡大された。
・parameterzed planの選択が可能になった。パラメータ付きSQLの実行計画を固定しないことができる。
※Oracleでいうバインド変数を使う際の実行計画の共有を止めるという話と一緒かな?
・drop index concurrentlyコマンド。インデックス削除時の表ロックを行わなくて済むようになったという話。

以下、個人的な感想。
インデックスのみを使った検索がまだできていなかったことに驚き。確かに内部構造を考えると難しいのだなと思うのだが、基本的な設計思想が高速化よりもきれいな実装を優先しているのだろうか。