積み本リスト

去年までに読めなかった書籍のリストです。それ以前に買ったものも含まれています。

モジュール指向とオブジェクト指向と

ちょっとモジュール指向について書いてみます。

オブジェクト指向の書籍などで、よく「オブジェクト指向を使えば再利用性が高まる」といったことが書かれていますが、意外となぜ? というのが分かりにくい気がします。そのあたりを軽く説明してみます。軽くないですけど…。

実はオブジェクト指向というのは手法です。目的ではありません。そこに注意です。

本来なら、手法を模倣するだけで目的を果たせるというのが理想です。お菓子作りで使うクッキーの型抜きがいい例だと思います。まるい均一な大きさのクッキーを作りたければ、まるい型を使えばいいわけです。(生地とか焼きむらの話はこの際無視して!) この場合、「まるい均一な大きさのクッキーを作る」が目的で「まるい型を使って抜く」は手法です。この手法は誰でも同じ目的が果たせます。

それに対して、手法を模倣するだけでは目的を果たせないものも多いです。例えば自動車を使えば (手法) 遠くまで行く (目的) ことができますが、そのために覚えなければいけないこと (手法の学習) はたくさんあります。目的が VIP を安全にかつ快適に目的地まで運ぶことに変わったら、更なる手法の学習を要求されます。

TortoiseHG や VisualHg で TortoiseMerge を使う

最近はもっぱら Subversion じゃなくて Mercurial を使っているのですが、使い慣れたせいか diff/merge は TortoiseSVN 付属の TortoiseMerge が使いやすいです。というか、やっぱりどのバージョン管理を使っても diff/merge は同じもの使いたいです。

まずは TortoiseHg で TortoiseMerge を使う方法です。

TortoiseHg の設定の TortoiseHg のところに、"3-way マージツール" と "GUI 差分表示ツール" で "tortoisemerge" を選ぶだけ! 調べまわって、mercurial.ini いじって苦労してうまくいかなかったのに、こんなに簡単にできるなんて…。

VisualHG で TortoiseMerge を使うのもあっけなかったです。

Visual Studio のツール -> オプション -> ソースコントロール -> VisualHG で External Diff Tool Command の右にあるボタンを押して tortoisemerge が描かれている行を選ぶだけ。(SCC プラグインが VisualHG になっていない場合は同じくソースコントロール -> プラグインの選択で VisualHG にしてください)

これで、無事 TortoiseMerge が使えるようになりました。特にマージのときに慣れていないツールを使うとイライラするんですよね。

とても便利なデコンパイラ dotPeek

ReSharper で有名な (と言ったら Java 系の人から叱られそうですが) JetBrains 社が .NET Framework 用のデコンパイラを dotPeek を作ったようです。

.NET Framework 用デコンパイラは .NET Reflector が有名なんですが、有償版のみになるとのことで、買わないとなあと思ってた矢先、dotPeek が出まして。いやまあ、さんざんお世話になってるので、$35 くらい払っても全然かまわないのですが。

というわけで、dotPeek の特徴を翻訳してみます。

またまた! ブログをホストしているサーバーを移行しました

今までこのブログは ServersMan@VPS を利用していましたが、結構いろいろなトラブルがあったので引き揚げることにしました。

一番安いプランなので、メモリ不足で動作不能に陥るのはまあ我慢するにしても、DTI VPSの大部分がオープンプロキシになっていた件についての件はちょいといただけない。

代わりに契約をしたのはさくらの VPS です。こちらの方が劣る点としては IPv6 がないことくらいかな。いまだに IPv6 には手を出していないので問題ない。いや、手を出したいんですけどね…。

先月のうちに契約や準備は済んでいたんですが、忙しくてなかなかすすめられず。なんとか今日移行完了しました。あともうちょっといくつか引っ越ししていないのがあるので、それを移動させれば完了です。

今のところ順調です。心なしか ServersMan@VPS よっか速い気がします。値段は倍くらいになったけど、それでも 980 円/月だし、まいっかーってかんじです。

VisualHG 1.0.0 で右クリックメニューが表示されない

Visual Studio 用の Mercurial のアドオンの一つ、VisualHG なんですが、1.1.0 になってから、ソリューションエクスプローラーで右クリックメニューに VisualHG 関連のメニューが出なくなるという問題がでました。(私のところでは、です)

まあ、当然のごとくえらく困るわけです。

ちょっと調べたらありました。1.1.0: Context menu and automatic SCC detection broken? で同じような現象で困っている人たちが。

deinstall all VisualHG versions
remove all VisualHG keys starting with dadada00 in the regestry
reinstall VisualHG 1.1.0
now it should work

ええと日本語にすると、

本当に日が空きました。一月から新しいお仕事です。難易度がむっちゃ高いので復習の意味も込めて Effective C# の紹介再開です。

本日の Effective C# は「項目35 イベントハンドらよりもオーバーライドを優先すること」です。

たとえば、Form が開かれた時の処理を、Form.Load イベントに登録するか、または Form.OnLoad() メソッドをオーバーライドするかの二種類の手段があります。

デザイナで作業しているとついついイベントで処理していますが、これはけた方がいいというお話です。理由として以下のものがあげられています。

プログラムの作成は足し算でやる

プログラムの作成は足し算でやるべきだというのがここ数年思っていることです。まあ、自分で導き出した結論ではないのですが。

足し算というっても数学的な足し算じゃなくて、レゴブロックみたいな感じでしょうか? 機能追加は新しいパーツを別途作って追加することで行います。ということは、外すのも別の機能への差し替えも簡単なわけです。

当然、こんなことしなくても、ソースコードを直接修正すれば、機能追加も機能削除もできるんですが。

「ソースコードを修正するとバグが生まれる」という原則を考えたら、ソースコードへの修正は最小限にとどめたほうがよい。だからと機能追加というのは、ソースコードの修正ではなく、追加によって行うべきというのがあるんです。

まあ、この手の話はいろんな本に書いてあるんですが、正直よくわからなかったですが、いろいろと仕事でプログラムを書いてるとなるほどなーと思うようになったわけです。

もともと動いてたのは動いているわけですし、機能追加でソースコードを修正しないなら、原則として今までの部分は確実に動くわけです。バグがあってもどっちが原因かわかりやすいし、一時対策として機能追加分を外すのも簡単です。

メリットだらけだと思うんですが、問題はメリットに気が付かない人にとってただ難解で意味のないことをやっているようにしか見えないことかな?

JRuby って SDBM が使えない?

標準ライブラリだということでどこでも使えると思ったので使ったんですが、SDBM。JRuby だと使えないような感じです。

$ ruby -rsdbm -e 'puts "foo"'
foo

普通はこんな感じです。

でも、JRuby だと

$ jruby -rsdbm -e 'puts "foo"'
Exception in thread "main" :1: no such file to load -- sdbm (LoadError)
        ...internal jruby stack elided...
        from (unknown).(unknown)(:1)

こんな感じ。いろいろ調べたんですけど、理由はよくわかりませんでした。JRuby と Ruby に関する互換性のレポートくらいあってもよさそうなんですが、発見できませんでした。

というわけで、PStore に変更です。

ブログをホストしているサーバーを移行しました

最近忙しいです。あまりいろいろする暇がありません。

それはそれとして、借りている ServersMan@VPS も無償期間を過ぎたのに全くいろいろな検証もすんでなくて、放置気味だったのですが。さすがにもったいないということで利用を開始することに。

まずは、自宅サーバーで運用していたブログの移動から。

なんやかんやで苦労しましたが、まあまあ順調に稼働しています。

移すついでに、mod_php をやめ、suEXEC/FastCGI 化しました。

今のところ問題なく動いていますし、VIA Esther 1.5GHz に比べたら無茶苦茶速いです。一番安いプランなので、メモリは 256MB ほどしかありませんが、意外と動くもんです。

多分、重い時間とかあった気がするんですが、それがなくなりそうです。

うーん、今日は全然中身がない日記でした。

コンテンツ配信