Programmingの最近のブログ記事

refactoring.jpgここ最近、通勤時間が長くなり、電車内で座っている時間が増えたので、読み始めたが意外とすんなり読めてしまった。以前(8年ぐらい前だろうか‥)借りた時はなかなか頭の中に入らなかったのが嘘のようである。昔と比べるとそこそこコードも上手く書けるようになったからだろうか。
大抵のカタログ内容が「やったやった」という感覚で読み進めることができた。特にプログラミング一般とも思える9章の「条件記述の単純化」と10章の「メソッド呼び出しの単純化」は今まで経験則で学んできたテクニックがほとんど言及されていて、書籍「リーダブルコード」を読んでいた時の感覚を思い出させてくれる。

ふと、高校でプログラミングを始めた時の自分が読んでいたらなぁと思ったが、おそらく本書はプログラミング初心者が読んでもあまり有り難みは感じないのではなかろうか。最初から模範的なコードを見るよりも苦々しいコード、本書のリファクタリング前のコードを書いた経験があって初めて綺麗なコードが理解できる気がする。オライリーの「SQL アンチパターン」同様、むず痒い経験を思い出しつつ、まだやった事のないカタログがあるか調べながら読み進めるのが良いと感じた。

自分の場合だと
6章 メソッドオブジェクトによるメソッドの置き換え
9章 ヌルオブジェクトの導入
の2つはまだやったことがない。そのうち適用出来そうな場面が出てきたら使ってみたいものだ。

特に印象に残ったところは
p97の「バグレポート受け取ったらバグを再現する単体テストを書く」。未だに実践できてなかったな‥。

本書の残念な点を挙げるとしたら原著のコードがJ2SE 1.2とかなり古いところだろうか。付録で補っているが、やはり全体的に古くさい雰囲気が漂う。
また、前に eclipseがやってくれる内容ばっかしとも聞いていたが、確かに本書の多くを占める手順に関してはIDEの支援が得られる今では残念ながら陳腐化した内容になっている。でも本書が出た当時にここまでの内容をカタログ化したファウラーは純粋にすごいと思う。

最後に新装版のメリットとして、初版と違ってどんなページを開いても見開いたままの状態がキープできる。
フルフラット製本というらしいが、これは分厚い技術書全てに普及してほしいと切に願う。

4月末からちょろちょろ読み始めてやっと読了。(遅
まぁ、途中お仕事やらでどたばたしていたからなぁ...。

日本で初のガベージコレクタ(GC。メモリ内のお掃除プログラム)本を謳う本書。[筆者による紹介ページ]
gc_book.jpg
最近のプログラム言語の裏で働いているガベージコレクタについて解説している。かなりニッチな内容。故に知的好奇心をそそられる本である。

自分の場合、この本を読むまではGCってやたらと種類があるけど、とりあえずSunのjavaには世代別GCが標準で搭載されてるよ!程度の知識しかなかったので色々と勉強になった。

色々なGC実装があるけど、基本はMarkSweepGC,ReferenceCountingGC,CopyingGCの3パターンで後はそれの組み合わせか応用でできているというのは意外だった。これら3つのパターンとは全く異なる斬新なアイデアってないもんかなぁ...?

アルゴリズム編と実装編の2部構成になっているが実装編は一気に読み進めないと忘れちゃうのがネックだなぁ。まぁでも内容は面白い。特にPythonの参照カウントの章では言語実装者の努力が読み取れる。おかげで利用者はぬるく作れるわけですね。

Java等で利用されている並列GCなど、より発展した内容は本書の対象外だが、並列GCは同じ筆者さん作成のスライドを以前見つけたのでついでに紹介しておこう。http://www.slideshare.net/authorNari/gc-4919474

難点はやや分厚いということだろうか。電車内で立ちながら読むにはちょっときつい。
後、初版だからしょうがないと思うが結構表記ミスがある。正誤表を印刷してから読み始めよう。自分が気づいた例だと、p74の図6内のルートから出てる矢印かなぁ。まだBの子オブジェクトであるAを走査してない段階なのでB'に切り替わっているのは違うのではないかと思った。

まぁそれを差し引いたとしても、GCを日本語で学びたいとしたらバイブル的な存在でしょう。

Java の参照と C++ の参照の違い - Life like a clown

懐かしい。昔、全く同じことで悩んでいたことがある。
大学の研究室でCにとっぷり浸かり、バイトでJavaを使っていた頃、javaのとあるmethodに渡したStringオブジェクトがmethodの外側に出てきたときに変化しないことに対して非常に混乱したことがある。(参照渡しなんだからmethod抜けても変化してるだろ!?的な勘違い)

Cを学んでいた当時は値渡しか参照渡しの2パターンで考えていたけど、その2つの間に参照の値渡し(Cで言うとポインタ渡しか)があるんだよな。参照の値渡しだと、結局コピーなので、methodの内側でいくら仮引数に対して変更を加えたとても、外側の、実引数の参照先は変わらない。HashMapオブジェクトのように状態を持つオブジェクトなら参照先の内容はmethod内で変化しているかもしれないけどね。

値渡し、参照渡しは色んな本で見かけるが、これに加えて参照の値渡しの説明もしている本にまだ出会ったことがない。こーゆうのってみんな経験で学んでいくものなのかな?

asp.netを使用してページャ機能を実装することになった。

しかし、asp.netにはそーゆうことをしてくれるコンポーネントが用意されているという話を聞き、調べてみた。どうもGridViewコントロールというものがそれに該当するらしい。自前で実装するよりも利用した方がラクだろうなと思い、「ASP.NET GridViewコントロール:目次」を参考にちょっとマスタ管理画面を作ってみることにした。

チュートリアルの通り、難なくページング機能を備えた管理画面が出来たが...これはすごい。えーとオレは一体何をやったんだっけ?マウスを数クリックして、DBの対象テーブルを選択しただけだ。ラクってレベルじゃねぇ。こりゃぁ、マジですげぇ!!昔、perlやjavaで自前実装していたあの努力は一体なんだったのか。
としばし感動しつつも、ある問題に気づいた。プロファイラーでDBのクエリーログを漁ってみるとなんと毎回同じクエリーを投げているのだ。表示したいデータの数百倍の量を毎回DBサーバから引っこ抜かれてはちょっと困る。

この問題に関しては以下の記事が役に立った。
たたかいのきほんはかくとうだぶきやそうびにたよってはいけない by めたるぎあそりっど 08/10/16 大規模データを扱う場合の効率のよいGridViewの表示
[ASP.NET]GridViewコントロールで大量のデータをページ表示するには?[2.0、3.0、3.5、C#、VB] - @IT
ページング処理に必要な件数取得と実際に表示するデータ取得を分けるのだ。幸いGridViewコントロールもそのような使い方が想定されており、SelectCountMethodやSelectMethodプロパティといった逃げ道が用意されている。実に素晴らしい。

だが、またしても問題が。
GridViewが提供しているPageCountプロパティから全部で何ページあるのか分かるのだが、全部で何件分のデータが入っているのかは引っ張ってこれないようだ。SelectCountMethodを使用して引っ張ってきた値ぐらい公開してくれよと思う。

結局SelectCountMethodの指定を部分クラスのメソッドに置き換え、その中でsession内に一時的に入れておいてPage.PreRenderCompleteイベント時に画面上に出すようして解決。なんかすごく残念なことをやっている気がしてならない。


調べてみたらajaxを使って非同期で切り替える方法もあるみたいだ。ちょっと制約が多いのが気になるが...
GridViewで再読み込みを行わずに表示ページを切り換える(1/2):CodeZine

なーんか調査するものが多くて、最近はなかなか作業がはかどらん。調べれば調べるほどもっといい実装方法があるのではないかと不安になってきてしまう。まいった。

SQLServerでタイトルのことをやろうとして、少し悩んだが、サブクエリー化すれば良いだけであった。

  select
    count(*)
  from ( select distinct ... )

このアーカイブについて

このページには、過去に書かれたブログ記事のうちProgrammingカテゴリに属しているものが含まれています。

前のカテゴリはHardwareです。

次のカテゴリはSoftwareです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 7.9.3