« 2007年1月 | トップページ | 2007年3月 »

2007/02/13

[ programming ] naming

さて、今日は名前付けに関してちょっと愚痴ってみようと思う。名前付けといってもペットや子供のそれじゃなくて、プログラミングにおける変数とかメソッドに対するそれだ。まずはしたの2組のメソッド名を見てほしい。

lcount()
wcount()
count_line()
count_word()

どちらがわかりやすいだろうか?わたしは右側だとおもう。
プライベートの友人も全員右側がわかりやすいと答えた。

いうまでもないことだけど、右側がわたしがつけたメソッド名だ。左側はとある人が「こちらの方がセンスがよく、優れている」と主張したメソッド名だ。これを聞いたときは、心底呆れたよ。

友人に話してみたらある友人はジョークだと思って爆笑し ( すまないがジョークではなく本当にあったことだ )、他のある友人は「旧世代だな」と評し ( まったくその通りだ )、また別の友人は「いつも読みにくいコードばっかし書いてそうね」と酷評した。

メソッド名は、少なくとも外部に公開することを前提としたパブリックメソッドは、そのメソッドがどんなはたらきをするのかおおよその見当がつくものじゃなきゃならない。lcount() でどんなはたらきをするのか想像できるかい?wcount() ってこりゃ何を数えてるんだい?わたしにはさっぱりわからない。一方で count_line() ならば、「たぶん行数とか、並列して走るラインかなにかを数えるんだろう」という推測は容易にできる。count_word() なら、もっと限定した推測 -- こりゃきっと単語の数を数えてるに違いない -- ができる。

もし名前と違う動作をしていたら、「これって要求仕様を満たしてないんじゃないか?」とか「リファクタリングしたほうがいいんじゃないかな?」ということに気付けるわけだ。名前というのはちゃんと考えて、適切につければ要求仕様を満たしているかとかバグの発見にも繋がるとても大切なものなんだよ。

lcount() だとか、機能の推測がさっぱりできない名前をつける命名法が優れているなんて、率直に言って馬鹿としか思えない。こんなものがセンスだというなら、センスなんてクソ喰らえだ。

Explicit is better than implicit.
Readability counts.

Don't Make Me Think! では、「こりゃいったいなんだ?」と頭を捻らせるようなものは作ってはいけないとされている。わかりやすさのほうが、間違ったセンスなんてものよりも遥かに大事さ。

| | コメント (1) | トラックバック (0)

2007/02/05

[ ironpython / python ] ironpython で MD5 ハッシュ値を算出する

CPython の標準ライブラリのひとつ MD5 モジュールは IronPython では、そのままではインポートすることができません。その理由はこのへんにあるように C 拡張を利用しているからですが、MD5 が利用できないといろいろ不便です。

こちらには md5 モジュールを C# で作った方がいらっしゃいますが、ただ単にフィンガープリントを出力するだけとか、'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9' という形式ではなくて見慣れた形式のほうがいい場合もあると思って、ものすごく単純な関数を作ってみました。

import clr
clr.AddReference( "System" )

import System
from System.Security.Cryptography import MD5

def calculate_md5( hoge ):
	# Because CPython's MD5 module cannot be used.
	# Thus, to get a fingerprint, you must use .NET Framework Class Library module 
	# "System.Security.Cryptography.MD5"
	insMD5 = MD5.Create()
	return ''.join( [("%x" % fragment) for fragment in \
		insMD5.ComputeHash( System.Text.Encoding.Default.GetBytes( hoge ) )] )

やっていることは単純で MD5 クラスのインスタンスを作って、そのメソッドを呼び出して MD5 を計算します ( insMD5.ComputeHash() )。この戻り値は BytesArray 型のオブジェクトです。これをリスト内包式で "ea703e7aa1efda064eaa57d9e8ab7e" のようなよく見る形式に変換しています。変換前がいいという場合はリスト内包式を解除して insMD5.ComputeHash() だけの式にしてください。

| | コメント (0) | トラックバック (0)

2007/02/02

[ windows ] 役に立たない&いらない情報バー

情報バーだって?
率直に言って、こんなものを実装した奴は
この世に並ぶものがいないほどの馬鹿としか思えない。

わたしがこれを愚かだと思う一番の理由は、柔軟性が全くといっていいほどないことだ。 Microsoft が公開している公式文書によると情報バーを表示しないようにするには、セキュリティの設定を低いほうに設定するしかないという。

しかし、不正なプログラムがどこに仕掛けられているかわからないインターネットにおいて、セキュリティ設定を全てのページにおいて低く設定したいと思う人間はそう多くはないだろう。うざったい派手な効果音とかアプレット、Flush なんてなくていいという理由でこれらの機能を無効にする人もいるかもしれない。ポップアップだって同じことだ。

自分の意思でこれらを実行しないように設定したならば、わざわざ情報バーを使って「ActiveX コントロールは実行できません。」とかメッセージを表示しなくても十分に理解しているのだ。自分が設定したことを理解しているユーザにとっては、情報バーは手助けでもなんでもない。ユーザに不快感とストレスを与える存在以外の何者でもない。

情報バーを表示するべきはインターネットゾーンのセキュリティをデフォルトよりも低く設定した場合だろう。信頼できるサイトを「信頼済みゾーン」に登録して、緩和された設定を適用するならばその必要はないかもしれないが、インターネットに存在する全てのサイトに対してセキュリティレベルを下げてしまうのは正しいとは思えない。不思議なことに、Microsoft はこの正しいとは思えない設定に対しては一度限りの警告しか出さないのだ。( そしてセキュリティを高く設定した場合は、ページを開くたびに毎回毎回情報バーを表示し続ける )

不思議なことに、Microsoft が「ユーザビリティを大幅に向上させた」としている Vista でも情報バーはなくなっていない。むしろさらにユーザに不快感とストレスを与える方向に進化しているように思える。

「セキュリティの設定はそのままで情報バーを表示しない」ということを実現できる設定を用意するべきなのだ。Microsoft がいうセキュリティの強化やユーザビリティの向上とはいったいなんだろうか?

ちなみに、Sleipnir を利用している場合には情報バーを表示しないようにすることができる。 [ツール(T)] → [Sleipnir オプション(B) F12] で Sleipnir の設定ダイアログを表示させて、ビューカテゴリから Trident サブカテゴリを選ぶ。その設定画面の右下のほうにある [詳細設定(D)] ボタンをクリックして [Trident の情報バーを使用する(U)] の左側にあるチェックボックスを OFF にする。 OK ボタンを押して全てのダイアログを閉じてから再起動すると、情報バーは表示されなくなる。

Reference
Windows XP SP2 の Internet Explorer の情報バーについて
( 2005/07/11, 文書番号843017, Revision 2.2, MicrosoftCorporation )

| | コメント (1) | トラックバック (0)

« 2007年1月 | トップページ | 2007年3月 »