2004年10月アーカイブ
最近読んだ本に晴山陽一氏の「すごい言葉」があります。
323の英語の名言集です。
気に入ったものを2つ紹介します。
「詩とは翻訳で失われる何かである」(ロバート・フロスト)
「天才とは、システムのエラーである」(パウル・クレー)
ロバート・フロストは米国の詩人で、ケネディ大統領の就任式に詩を朗読した。
サイモン&ガーファンククルの詩にも出てきます。
(君はエミリー・ディキンソンを読み、ぼくはロバート・フロストを読む)
専門書の翻訳はひどいものが多いので、これは実感としてあります。
パウル・クレーの言葉は、「マトリックス」を連想しました。
HPのnx5000が届きました。
仕事の合間を縫ってセットアップ。
A4といっても紙のA4よりはふた周りくらい大きい。バッテリを付けるとかなりの重さです。
Amazonのレビューにあったように堅牢性は確かにないが、大事に扱えば外出も可能だと思います。
メモリを+512にしてHome EditionをXP Proにアップグレードしてから、802.11bの試験。しかしアクセスポイントが見えない。
少し時間を費やした挙句、悔しいことにHPのサポートにお世話になりました。
原因は分からなかったものの、デバイスマネージャからデバイスを削除して、再起動で使えるようになりました。
でもやはり11bでは遅く、明日は11gのカードを入れることに。
あとはプリンタのセットアップと、いくつかのアプリケーションをインストールし、ビデオとネットワークのドライバを最新版にアップデート。
新しいマシンをセットアップするのはある種の快感があります。
明日はOutLook Expressの設定をして、サブノートとしての使用開始です。
週2回、スポーツジムに通っています。
マシンのトレーニングはしないのですが、スタジオでエアロビクスをやっています。
45分間なのですが、丁度いい汗をかきます。
初心者用のクラスと、「シンプルジョギング」というクラス。
初心者用はついていけるのですが、「シンプル・・・」のほうは、悔しいことに3割くらいついていけません。
体力というよりは、脳のいつも使っていない部分を使っている感じです。
家に帰ってから、思い出して、時々練習するのですが、それでもだめ。
どうやら、目で見たまま考えないでまねようとするとダメみたいです。
「右に動くときには、左足からキックする」などと頭で理解しないと私の場合だめです。
脳の体操にもなっている貴重な時間です。
「リファクタリング」
マーチン・ファウラー
プログラミングの体質改善テクニック
ピアソン・エデュケーション(2000)
4,800円+税
原書の副題は「既存のコードのデザインを改善する」というものです。
本を購入したのが、2001年ですから読了までに3年半かかったことになります。
時々中断せざるを得なかったのは、私のJavaに対する、そしてOOPに対する経験不足からきていました。
多数の手法がJavaとクラス図を使って説明されます。デザインパターンもよく参照されますし、各手法も相互に関連しています。
Javaの中級~上級者向けの本だと思います。
得る所が大きいのは、まず、Javaで、こうコーディングしてはいけない、というアンチパターンと、それをリファクタリングした結果の、
こうあるべきだという常識が、コードのサンプルから学べるところです。
その意味ではJavaのプログラム作法的な本でもあります。
またリファクタリングの過程も、少し修正して少しテスト、というXPの手法の見本のような例が繰り返し例示されます。
読み方としては、どんな手法があるのか、ざっと眺めた上で、リファクタリングが必要になったときに、必要な部分を精読すればよいと思います。
きっと得る所が有ります。
実際、私が本書をまた読み始めたのは、リファクタリングが必要になったときでした。
最後にKent Beckの言葉を引用します。
「リファクタリングはなぜ有効か---Kent Beck
今できることを作り込めばそれで終わりと考えているのであれば、長くプログラマを続けていくことはできないでしょう。
今日はできたからといって、明日には通用しないかもしれないそのやり方を通せば、いつかは敗者となってしまいます。
重要なのは、今の時点で何が必要かが把握できても、明日については何もわからないということです。
多分こうだろうと推測しても、想像もしなかったことが起こるかもしれません。
今日については十分把握できますが、明日については不十分なままです。
しかし、今日のためにしか仕事をしないとすれば、やがて明日には何もできないことになるでしょう。
リファクタリングは、この苦境から抜け出すための手段です。
昨日の決定が、今日には意味を持たなくなったと気づいたならば、過去の決定を変更してしまえばいいのです。
そうすれば今日の仕事ができるようになります。
明日には、今日の理解が多少未熟だったと思うかもしれません。だったらまた変更すればいいのです。」
みーこさんのBits of SOHOが閉鎖されました。
毎日、朝PCを立ち上げると、最初に見るページでした。
独立する少し前から、見るようになり、そのコンテンツには非常に助けられました。
個人的には、何回かメールを差し上げたくらいでしたが、みーこさんは身近な存在と感じていました。
BBSでは発言もせずにもっぱらROMでしたが、私のようにBits of SOHOを見守ってきた方も多いはず。
先日も、みーこさんのHPが縁で、パートナーとなりうる同業者と知り合ったばかりです。
残念の一言です。
AmazonでHPのA4ノートnx5000が89,800円で売っています。しかもギフト券で7,500円還元です。(以前はもっと還元率が高かった)
Noteは何台かあるのですが、一番新しいものでもVAIO B5Note PCG-SR9CK、Pentium700MHz、メモリ256Mで、XPが快適に動作するとは言えません。
サブノートにいいものがあればと思っていたのですが、このHPも相当悩みました。Amazonのレビューもいいものとそうでないものが混じっています。
スペックは
CPU:インテル Celeron M プロセッサ 310(512KB L2キャッシュ、1.20 GHz、400 MHz FSB)
メモリ : 256MB DDR SDRAM PC2700 (最大 2GB)
ディスプレイ:14.1インチ
HDD:30G
DVD/CD-RW
無線LAN802.11b内臓
WindowsXP Home Edition
と、この価格にしてはいいと思います。
加えて気に入ったのが、薄型であること(37mm)、付属ソフトが少ないこと、JBL Proのスピーカーがついていること等です。
メモリは増設が必要で512Mを先行して、他で手配しました。送料込みで10,000円ほど。
HPは昔、薄型ノートのはしりであるHi-Note Ultra433を持っていた次期があって、印象は悪くありません。
今年最後の自分へのギフトです。
リファクタリング中・・・。
今日は、問題のクラス群のスーパークラスを作ったことと、一番問題が起こりそうなクラスをサブクラスとして書き換え、テストをしました。
残りは明日、全部片付けるつもりです。
ファウラーさんの本にも書いてあるのですが、大きなリファクタリングは、小さなリファクタリングを価値あるものとしている多くのメリットを欠いています。
(例えば、即座の満足、目に見える進捗)
実際、この何日かは、外から見たら目に見える進捗は有りません。
ですが、今回、リファクタリングが必要であると判断したのは、この先、同じようなクラスをコピー&ペーストでいくつも作らなければならなかったからです。
(3回同じコードに気づいたらリファクタリング!)
それに今回、リファクタリングの過程で、コードレビューをやったのと同じ効果がありました。(バグもいくつか発見しました)
効果的であったと思います。
「人生、生きちょるだけで丸儲け」
NHKの「わかば」に出てくるおばあちゃんの口癖です。
本当にそうだと思います。何気なく過ぎてゆく日常がいかに大事なものであるか、命は借りたものであって、いつか返さないといけないことを思うとなおさらです。
「生きてる」ではなくて「生きちょる」というところにユーモアと重みを感じます。
私の言葉のコレクションに新しく加わった言葉のなかでもお気に入りです。
以前、sessionに格納するbeanがSerializableでなければいけないのは、なぜかと悩んだのですが、今日、ネットを検索していて答えを見つけました。
セッションが最後に使用されてから、maxIdleSwap経つと、あるいはセッション数がmaxActiveSession数以上になると、minIdleSwap以上使われていないセッションがスワップの対象になります。
つまり、外部記憶に掃きだされるわけです。
このスワップがSerializableをimplementしなければいけない理由です。
これは素直に理解できます。
疑問が氷解したのがうれしくて、仕事中に書き込んでしまいました。
リファクタリングは中断中。
土曜日にお客様に進捗状況をお見せすることになって、デモ用のレンタルサーバーでテストを開始しました。
ところが、エラーが・・・。
原因は、レンタルサーバー側のJavaのバージョンが1.3.1で、ImageIOのクラスをサポートしていなかったこと。
このクラスはアップロードされる画像の縦横の大きさを得るのに使っていました。
画像の縦横の比率を維持して、CSSの固定的な大きさのエリアに表示するためです。
いろいろAPIの迷路をさまよった挙句、Java Script で実現することにしました。bodyタグのonloadイベントで画像の大きさを変えます。
なんとか明日のデモには間に合いそうです。
今回もまた、Java Scriptの便利さに感心しています。
ハインラインの夏への扉は、もう2回くらい読んでいるはずなのに、ストーリーはあまり記憶に残っていません。
猫のピートが、冬になると、夏への扉を求めて、家中のドアを順に開けさせるような場面がうっすらと覚えています。
うちのフーちゃんの場合は、階段下の物置の扉です。
どういうものか、時々、開けてくれとせがみます。
開けると、中の荷物の上にぴょんと飛び乗ってしばらく隠れている場合と、扉が開いただけで満足して、扉に頭をこすり付けてからよそへいってしまう場合があります。
扉の向こうに、なにか期待しているような雰囲気です。
ピートみたいに夏への扉を探しているのか、探し物が、ねずみかゴキブリでなければいいのですが・・・。
ハインラインの小説を再読したくなりました。
夕方からリファクタリング開始。
マーチン・ファウラーの「リファクタリング」と結城浩さんの「デザインパターン入門」とネットがたよりです。
結局、DBへの入力を行う複数のBeanとDBからの検索を行う複数のBeanにそれぞれTemplate Methodを適用するという、代わり映えのない結論に。
結城さんのTemplate Methodの例は簡単すぎて参考にならなかったのですが、マーチン・ファウラーさんのは具体的な手順がいくつか。
(1)類似したコードから異なるコードを分離し、差異部分を抽出
(2)差異部分を同じシグニチャを持つメソッドを作成する
(3)メソッドの引き上げ
を行ってスーパークラスを作ります。
今まで書籍でしか勉強していなくて実践で生かせなかったことが、一転、仕事に活かせることになりました。それが嬉しく、楽しいです。
JSP/Servletのコーディング中です。
いろいろ悩みが出てきています。
1つは画面の作成なのですが、CSSを使ってJSPで作っていますが、この工数が馬鹿になりません。
こんなことならはじめからデザイナーと一緒に仕事をするんだった、と後悔しています。
このJSP作成工数の削減が課題のひとつです。
もうひとつは、同じようなコードが増えてきて、これはそろそろリファクタリングする時期か、と悩んでいます。
デザインパターンの適用を考えるべきでしょうか?
作業を一時中断して、リファクタリングとデザインパターンの見直しを行なうべきだと思います。
いい解法が見つかるといいのですが・・・。
新しいTVを購入した後で、D端子のついたDVDプレーヤーを買おうかどうしようか迷ったのですが、TVはたったの3万円だし、DVDプレーヤーだけ高機能でも、その映像はたかが知れていると考え、一度は却下しました。
それが、DVDでロード・オブ・ザ・リングを見始めてから、無性に新しいDVDプレーヤーが欲しくなりました。
今のままでも、まあきれいな画像なのですが、ロード・オブ・ザ・リングを見ていると、欲が出てきて、もっときれいな映像で見れるなら18,000円くらい・・・。
と、PioneerのDV-578A-Sを注文してしまいました。またもや新生銀行から振込みです。
考えてみると、昔レーザーディスク・プレーヤーを買ったのも、「フェーム」や「天国から来たチャンピオン」を見たかったからです。
こうして、魅力的なソフトに出会うたびにハードが買い換えられていく・・・。
実はロード・オブ・ザ・リングはまだ1作目だけを、1.2回程度しか見ていないのですが、映像の美しさ、スケールの雄大さ、魅力的な登場人物、と久しぶりに繰り返して見たくなる映画です。
学生のころ、この物語の前編である、「ホビットの冒険」を読んだことがあって、ビルボ・バギンズには親しみを感じます。
先週、3年ぶりにエアロビクスに参加しました。
以前、かなりやっていたので自信はあったのですが、30%くらいはついていけませんでした。
結構ショックで、自宅で振りを思い出しながら練習しています。
汗をかいたのは確かで、カロリーの消費にはなったのかなと思います。
今週は、仕事で行けそうにありませんが、何とか週2回は行きたいのですが・・・。
無線LANは802.11bしかない時代から使っています。
主にNoteですが、デスクトップ用のPCIボードもあります。このボードはNote用のカードを入れて使います。
実は最近眠っていた古いXPのマシンをデータベースサーバーとして使っています。ところが置く場所がなくて、スイッチングハブまで部屋の真ん中を横切って、ネットワークのケーブルを引かなければいけません。
使うときだけ、ケーブルをつないでいたのですが、だんだん面倒になってきました。
それで、前述のPCIボードを使おうと思ったのですが、なんとXP用のドライバがありません・・・。
それで現在の無線LAN製品を調べてみたのですが、結局802.11g/802.11bの製品で安いものを買うことにしました。
ブリッジタイプのアクセスポイントとCardBusのカードのセットWLA-G54C/PとPCIボードWLI2-PCI-G54です。
合計で15,618円なり。送料・消費税込みで16,457円です。
初めて新生銀行からお店に振り込みました。手数料は5回まで0円。
なるべく節約をしながら最大の効果を引き出す・・・。
SQL Serverの話です。(他でも同じと思いますが)
UNIONのクエリーで計算がどうにも合いません。
調べていくうちに、あるレコードがSUMの計算からもれていることが分かりました。
原因はUNIONでは自動的に全体がDISTINCTになるということ。
たまたま、もれていたレコードは、他のレコードと全く同じ値でした。
SELECTのフィールドにPrimary Keyを追加することで解決しました。
UNION ALLという手もあるかと思います。
というケアレスミスのお話でした。

