青木淳さんへ深く深く感謝。

by tanabe on September 22, 2007

Kent Beck の Smalltalk ベストプラクティスパターンを読みこなしたくて Smalltalk の文法・言語仕様を調べていたところ、まさかの出会いに驚かされた。

ぼくがオブジェクト指向プログラミングを勉強し始めてすぐの頃、真意を理解しようと何度も何度も繰り返し読んだページがあった。ここ数年はすっかり忘れており、目にすることもなかったので分からなかったのだけど、ひょんなことからそのページはあの青木淳さんの「オブジェクト指向システム分析設計入門」だったことが判明。なーんもわかっていなかったくせに、ここから学び始めた自分を誉めてやりたい!

特に「第1章 狭義のオブジェクト指向」はよく読んだ。何度繰り返したことかさっぱりわからないくらい読んだ。いやー、お世話になりました。今さらながら、どうもありがとうございました。

  

あらためて CoC と less software を考える

by tanabe on September 20, 2007

ぼくがかつて Rolling with Ruby on Rails を翻訳したときは、(少なくとも見知った範囲では)convention over configuration や less software の定訳がなかったので、その訳にえらく頭を悩ませた覚えがある。それが今や一部の区域では CoC で十分に通じるくらい浸透しているようで、なんとも良い時代だ。

いや、そんな昔話がしたかったのではなくて、最近業務アプリケーションの開発を考えるときに、あるいは業務プロセスそのものを考えるときに、CoC と less software から影響を受けている。そして、あらためて強力で汎用的なコンセプトだよなぁと感心している。

CoC は「設定よりも規約を重視」とか「設定よりもよいよいデフォルトを」とか「パンがないならケーキを(ry」とか訳されているが、要するに「どうせ皆がそれに従うことで、しかもそれを前提にすれば作業が減るならいっそ規約にしちゃって作業を減らそうよ」ってことだ。ルールが制約を作り、制約が作業効率を生むという例。制約を管理・制限するために使うんじゃなくて、あなたの自由(より創造的なことに時間を使える)のために制約という道具を使いましょうという考え方なわけだ。

一方の less software は「より少ないソフトウェア」と訳されたりしているがつまりはムダの排除だ。ソフトウェアの開発は目的でなくて手段なのだから、目的に集中して手段に捉われる時間や資源は少なければ少ない方がいい。極端な話をすると、作るソフトウェアのゴールが見えたらあとはコーディングはそこに至る手段でしかないから、やらずに済むならそれに越したことはないわけだ。アプリケーションを作ったら負け。作らずにすむ仕組みを考える。(いわゆる、ショートカットを考えてアプリ自体要らなくなるとかとはちょっと違う)

ここで、休憩。

  

Excel はグルーコード

by tanabe on September 19, 2007

まつもとさんところの Excel 話(コメ欄も参照)だけど、Excel はユーザ受けがいいんだよね。だから、ユーザとシステムの(広義の)グルーコードとしてはたしかに最高の道具になってる。

でもそれって Ruby の API に Unix ライクなのが多いのと同じ理由で単にユーザが慣れているってだけで、格別 Excel にそれ以外の優位性(まして生産性というカテゴリだと)があるわけではないように思うんだけどどうなんだろう。

あと、

でも、やっぱりRubyで処理したいという欲望から、ActiveRecordライクなActiveArrayなるクラスを作成してはいるのですが

これはついやってしまう。CSV 形式のテキストや Access をAR風味で使うとか。

つか、事例がそもそもどの言語と比べて最高なのか何も書いてないのでなんとも。ま、せっかく「最高の言語」があるのなら、あまり Ruby には近づいてほしくないのだけは間違いない。

追記:一応記事のフォローしておくと、社内SEとかプログラム書かないSEな人とか、コードから遠い人に Excel(やAccess) を驚くほど高く評価する人がいるのは本当。実際、何人もそういう人に会ってるし。ただ、実際できあがってるマクロ見ると、本当にマクロだとしか言いようがない。VBAというのも悲しくなる。そして、ぼくは保守できないシステムを業務の中で使い続けるのは勘弁してほしいのでそれを肯定しない。あと、Excel が「最高の言語」かって話と、ツールとしての Excel の評価は別の話。念のため。

  

DI

by tanabe on September 18, 2007

ここ最近まともなプログラミングは Ruby でしかやっていないから、DIのありがたみとかがよくわからないなぁ。ソースも含めて一通り読んでいるから概念とか理屈はわかるんだけど、ピンと来ない。

体感覚として「あー、DIありがたい!」みたいなのを感じたいんだけど、どれくらいの規模だと感じるんだろう。

まー、とりあえずしばらく Ruby の代わりに Java で書いてみるかぁ。

  

IEの信頼済みサイトへドメインを突っ込む方法

by tanabe on September 15, 2007

レジストリへ登録するだけなので、VBScript でもいけるよ。って話。

http://support.microsoft.com/kb/884429/ja

自分のためのメモとしては良いものの、経緯がないからノウハウとしての付加価値がほとんどないなw

  

Windows Vista で下線が印字されないときには?

by tanabe on September 14, 2007

Windows Vista で印刷したときに、下線が正常に印刷されないことがある。

独自開発のソフトが見事に当たってしまって弱っている人や自分の使ってるソフトで Vista にしてから下線が印刷されない人は、下記の Hotfix で解決する。

Underlined Japanese characters print without the underline in Windows Vista
http://support.microsoft.com/kb/936176/en

Hotfix の入手は http://go.microsoft.com/?linkid=6294451 からメールで行う。ちょっとめんどい。

  

[Ruby] テーブルっぽいデータをシンプルにソートする

by tanabe on September 14, 2007

Ruby でテーブルっぽいデータを任意の項目でソートしたいときの Tips 。こんなやり方できんのね。

a = [
  {:id => 4, :name => "abcde", :value => 50, :tag => "zzz"},
  {:id => 3, :name => "abcde", :value => 50, :tag => "zzz"},
  {:id => 3, :name => "abcde", :value => 30, :tag => "zzz"},
  {:id => 2, :name => "abcde", :value => 50, :tag => "zzz"},
  {:id => 2, :name => "bbcde", :value => 50, :tag => "zzz"},
  {:id => 1, :name => "abcde", :value => 50, :tag => "zzz"},
  {:id => 1, :name => "abcde", :value => 50, :tag => "azz"},
  {:id => 0, :name => "abcde", :value => 50, :tag => "zzz"} 
]

a.sort_by {|e| [e[:id], e[:name], e[:value], e[:tag]] }

# => 

[{:tag=>"zzz", :name=>"abcde", :value=>50, :id=>0},
 {:tag=>"azz", :name=>"abcde", :value=>50, :id=>1},
 {:tag=>"zzz", :name=>"abcde", :value=>50, :id=>1},
 {:tag=>"zzz", :name=>"abcde", :value=>50, :id=>2},
 {:tag=>"zzz", :name=>"bbcde", :value=>50, :id=>2},
 {:tag=>"zzz", :name=>"abcde", :value=>30, :id=>3},
 {:tag=>"zzz", :name=>"abcde", :value=>50, :id=>3},
 {:tag=>"zzz", :name=>"abcde", :value=>50, :id=>4}]

一応補足しておくと左にある項目から優先してソートされる。処理の順考えれば当然そうなるのは分かるけど、うまいなぁ。