よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

March 14, 2002 つまりバランス感覚が重要ってことなのね(ぴぴーぴぴ) [おもひで]

[Ruby] Ruby-GNOMEのGtk::ItemFactoryにバグ

Ruby-GNOMEのGtk::ItemFactoryにバグがあった。どうやらコードの整理をしていたときに余計なところまで直しちゃったからみたい。

ちなみに、以下のパッチをあてれば直るはず。
--- ../../../ruby-gnome-all-0.27/gtk/src/rbgtkitemfactory.c     Sun Mar  3 07:13:43 2002
+++ rbgtkitemfactory.c  Thu Mar 14 23:44:11 2002
@@ -63,8 +63,9 @@
 }
 
 static void
-item_exec_callback_wrap(p_item, iter)
+item_exec_callback_wrap(p_item, ifact, iter)
     GtkWidget *p_item;
+    VALUE ifact;
     VALUE iter;
 {
     VALUE item;
これはちょっと重大なバグだよな....。RuWeexでも使ってるし...。

[Linux] GTK-2.0とGTK-1.2

GTK-2.0と共存できるんですか。 情報ありがとうございます。今度、ヒマを見て試してみます。

ちなみに、Ruby-GNOMEですが、そろそろGTK-2.0のブランチを作るみたいです。

Neilが言うには、GTK-2.0にするタイミングで、結構、メソッドとか定数とかの配置とかを見直したいみたいです。

どのように後方互換性を持たせるかはわかりませんが....。常に難しい問題ですよね....。

#ちなみに、2.0でコンパイルできたらパッチはNeilに送っていただけるのですか〜?(期待期待(^^;))

[Misc]へんなコード

小澤さんのページより。 そういえば、昔いた会社で、「関数の出口は必ず1カ所でなくてはいけない」と先輩に言われて面食らったことがある。 結構、その部署ではメジャーなやり方だったみたいなんで良いところはあるのかもしれんが、オレはなじめなかったな。

で、そういう発想だと、小澤さんの追記2の最初のコードみたいなのが良しとされて、2番目のコードはreturnが複数箇所にあって出口が複数在るからNGってことになってしまう。

さらに、これを守るがためにgotoを使ったりすることを推奨する人がいた。(以下はC言語風(^^;))
int ret = TRUE;
if ( ! foo()) {
    displayErrorDialog("fooError");
    ret = FALSE;
    goto EXIT;
}
:
if ( ! bar()) {
    displayErrorDialog("barError");
    ret = FALSE;
    goto EXIT;
}
:
:
EXIT:
(後処理)
return ret;

理屈としては、後処理の部分をまとめて書けるということだったように記憶してるが、全てこう書けというのでどうしようかと思った。後処理が必要ないときもこれで書く。うーむ。

まぁ、その時は、どっちが良いかなんつー判断はできなかったから、結局従ったけどね〜。

そうそう。引数には必ずinとoutをつける人がいたな。まぁ、C言語ならまだわかるんだけど、Javaとかでこれはなぁ。 あ、もちろん、Javaで引数にoutを使うってのはほとんどないはずなので、大体inのみが使われた。
int hoge(int inWidth, int inHeight){
}
あと、MSのハンガリアン記法(だっけ?)を全ての言語でやろうとする人。
int hoge(int intType, String strUser){
}

よく使う型だったらまだ良いんだけど、Javaとかだとすぐ破綻して、結局、「....以外は、objを先頭につけるように」ということで、objHogeとかしょーもない変数名を大量に作ってるプロジェクトもあったなぁ。

#そういや、オレ自身、ASP(VBScript)でこんな感じのルールを使ってた記憶があるな....。

バランス感覚がみょーに悪い人もいた。というかgoto文を推奨した人と同じ人なんだが。

数年後、Javaをやるのでデザインパターンを勉強したというのは良いのだが、とにかく何でもかんでも型(格好良く言えばフレームワーク)にはめたがる。んでもって、それで目的を達することができない場合は、意地でも型にはめるために、ソケットを使ったり、スレッド使ったり、ファイル作ったりと、ホントにそれ動くんかい?みたいなコードを平気で書こうとする。当てはめる対象が違ってるっつーことに気がついていない。しかもその方法を後輩に押しつける。ま、いいんだけどさ。

なんかいろいろ思い出してきたな。すっげー汚いコードを書いてる先輩(といっても別の会社の人だったが)に、ちょっと指摘したときの回答が笑った。

「コーディングは人によって趣味が変わるからね〜」

それ以前の問題なんです。だって相変わらずcore吐くじゃないですか。lintしたらWarning一杯。っつーかフツーのコンパイラですらWarningがでてるっちゅーの。

なんか調子が出てきたぞ。他にも無かったかなぁ。

そういや、C言語の流儀をJavaに持ち込む人が多かった。特に変数の宣言を必ずメソッドの宣言の直下でやらないとダメという人。こんな感じ。

int hoge(){
  int cnt = 0;
  :
  :
  for (cnt = 0; cnt < 10; cnt++){
  }
}
その人に言わせると以下のようなコードは悪とされる。
int hoge(){
  :
  :
  for (int cnt = 0; cnt < 10; cnt++){
  }
}

変数はなるべく狭い範囲で使った方がデバッグとかで間違いがないのは明らかだと思うのだが....。

ちなみに、上記のようなやり方をしてしまうと、使わなくなったローカル変数の宣言を残してしまう場合もある。まぁ、コンパイラでチェックできるかもしれないけど。

案外、先輩が言ったことを真に受けて、何年も、言語が変わっても、かたくなに守る人っているんだよなぁ。そう言う人に限って、「これは○○さんが言ったんだから守らなきゃいけない」って平気でのたまったりするんだよな。もうちょっと自分自身の考えを持って欲しいと思ったよ、ホント。背景を考えずにそういうことを鵜呑みにする人って、教える方もイヤだよな。後で「むとうさんがそう言ったから....」と言われたらたまらん。

ま、そんなわけで、オレが後輩に何か教えるときは

「オレが言うことの半分はウソで、残りの半分は将来使えなくなるだろうから気をつけるように。それからバランス感覚は大事。」

って言うようにしてたんだよね。実際、意図せずに美しくないコードを書くときもあったし(っていうかそれがほとんどか、今思えば(^^;))、新しい技術がどんどん出てきてることを考えると、結構、当たってると思うんよな。プログラミングに対する取り組みの姿勢とかそういうこと以外は時と共に変わっていっちゃうもんね。

#あ、もちろん、この文章だって、半分はウソで....(以下略)

[Misc] C言語

えらそうなことを書いてしまったが、以前、ポインタのポインタ(ダブルポインタだっけ?char**ってなやつ)がよくわかんなくて、夢に出てきてうなされたこともあるというのはここだけの秘密。

本日のツッコミ(全3件) [ツッコミを入れる]
たむら (March 16, 2002 08:06)

「オレが言うことの半分はウソで、残りの半分…」かなり気に入りました(^^; 私も使わせてもらおう。

むとぽん (March 16, 2002 15:43)

どもです。光栄です(^o^)。

KENZI (March 30, 2002 02:46)

hdparmのお話、参考にさせて頂きました。
「へんなコード」もちょっとおもしろかったです。
私は最初の会社の入社2年目のときに、そのときのプロジェクトのリーダーに
「ここは全部の処理で共通の処理なのでDLLにしたほうがよいですよね?」
と提案したんですね。そしたら彼は、
「でもそしたらそこでバグがでたら全部の処理に影響でちゃうっちゃろ?」
(九州の方でした)
と言われて却下されました。最初のころっておかしいと感じても、じゃぁどうすればいいかということがわからなくて言い返せないことがたくさんありましたが、こればっかりは別の理由でなにも言えませんでしたね。
でも彼のおかげで
「大人の言うことを全部信じてはいけない」というとても大事なことを教えて頂きましたが。
あと会社辞めてフリーでやってるときに行った現場で、そこは言語がJavaで1フロアに250人くらいの人がいるビックプロジェクトでした。
(作ってるものはたいしたことないんですが。。。)
そこは情報交換用にイントラ内に掲示板を立てていたのですが、なんかの質問に共通のカスタムコンポーネントを面倒見ている人が、
「(UI系プログラムでイベント処理内で作った)サブスレッドからイベントハンドラのメソッドを呼び出すとメインスレッドに割り込むので...」という回答をしてました。
その一ヵ月後に私はその現場から引きましたね。
ちょうど一年前の話しなのですがいまだにそのプロジェクトは納品できてないそうです。。。


編集