そこで語られるようなオフィスの状態で働いていないとき、自分が集中できないのはこの環境のせいだと思ってしまう。つまり、集中できないことを自分のせいでないと言い訳にしていたりする。
実際、ピープルウェアは良書と言われているように面白いんだけど、書かれている内容が羨ましすぎて、眩しすぎて、そんな状態にはいない時点で読むと嫌味にしか思えない。読む前は、集中できないのはしょうがないと思っていた自分がいたが、読んでからは自分のせいではないという気にさせられる。
読む時を間違えたな、こりゃ。
でも、実際の仕事をするようになると、自分が作っているものに関してはそうも言っていられず、やはりちゃんとしたものを作らなければ自分が納得しないし、そうでなければ士気が下がる。士気が下がるのははっきり言ってうれしくない。楽しいはずのプログラミングが楽しくなくなるし、どんどんリファクタリングをしていく気が失せる。「あー、動いたらからもういいや」、って。こう思うようになったら、きっと私もプログラマを引退するときだな。現在は、動いてもこのメソッドってやっぱこのクラスじゃねーよな、と思いながらリファクタリングしまくっている。外部から見たら、もう動くもの作っておいて何やってるんだろ?って思われているかもしれん。
でも、このときが一番大事だと思うのよ。作ったときが一番構造に関して頭に入っているので、どんどんリファクタリングをしていくことができるから。逆に「後でやる」とTODOとか書いておいても後でやるときには、そのときに何をやろうとしていたか忘れちゃう。というのは、大袈裟な表現だが、思い出しても、気づいた時にやらないと時間はよっぽどかかるし、「なんでこんなことしているんだろ。。。なんでそのとき書き直してないの。。。」って思って、やる気が落ちる。
うーん。まだまだやね。つーか、最近Joel on Softwareも読んだりして、なんだかマネージャよりの関心が増えてきたのかもしれない。。。Joel on Softwareの「あなたが絶対すべきでないことPART1」に関してはちょっと言及したいことがあるので、後で書くかも。
それともヲイラがバカなだけ?
もちろん独学なわけだが、Cではまったのは、他の関数から文字列を返り値として受け取るときの方法かな。あ、ちなみにここで言う文字列とは、文字の配列と同義なり。
つまり、C言語では、関数が文字列を返すことはできないのですよ!全てはこれに尽きる。文字列の先頭アドレスは返すことができますけどね。これには本当にはまりました。。。文字列という型がないのが、他の普段使っている言語と違うところでしたね。ってか、当然と言えば、当然なのですけど、頭の中では「文字列を返す」というスキーマができてしまっているので、当時はchar型の配列の先頭アドレスを返すといったことがイメージできませんでした。
つまり、こんなことをしちゃうわけ。
char *getMyString()
{
char myString[] = "hogehoge";
return myString;
}
int main()
{
char *hoge;
hoge = getMyString();
printf("%s\n", hoge);
return 0;
}
もちろん上のは動かない。
まぁ、
初級C言語Q&A(2) – Q 【文字列を戻す関数】
や
C言語講座:Bug4.html
を見ながらなんとかそのレベルを脱出しましたけどさ。しかし、このレベルを脱出するのに2年くらいかかった。まぁ、たまーにしか勉強していなかったけどさ。やっぱり近くにわかった人がいて聞けたら2年もかからなかっただろうなー。つーか、時間かかり杉。。。orz
つまり、自動変数で文字列を確保したところで、その関数の返り値は、文字の配列の先頭アドレスなので、ダメなんですよ。そして、その解決方法としてstaticを付ければいいって書いてあるけど、それは嫌なのよ。なんつーか、その方法は生理的に受け付けん。
ということで、残されたのは次の二つとなる。
- 関数の呼び出し元で文字の配列を予め確保しておく(静的に確保しても良いし、mallocで確保しても良い)。そして、そのサイズと一緒に引数にしてにその関数を呼び出す。
- 関数の中でmallocする。あとでfreeをする。
つーわけで上の動かないサンプルを動くようにするには、こうしてみる。ちなみにここで、mallocで失敗したときのことは考えていない。 (追記:Kさんの指摘の通りstrcpyはサイズは積極的にサンプルでも使わない方が良さそうですね。ここは、hogehogeという8文字ということで許してちょんまげ。)
char *getMyString()
{
char *myString;
myString = malloc(8 + 1);
strcpy(myString, "hogehoge");
return myString;
}
int main()
{
char *hoge;
hoge = getMyString();
printf("%s\n", hoge);
free(hoge);
return 0;
}
まぁ、いろいろ考えた結果、自分に合ったスタイルで書くのが望ましいと考えていたところ、構造体をクラスのように使うのが私にとっては一番使いやすいと思うようになった。一気に飛んだな。つまり、C 言語によるオブジェクト記述法 COOL 4-2.再コンパイル不要インターフェイスのように。動的バインディング・インタフェースについては、私の理解範囲を超えましたので、よくわかりません。つーか、ifdefの嵐はどうも好きになれん。
それでもmallocやらfreeは処理コストが高いので、静的に確保した方が処理コストを抑えることができるみたいなんだけど、その静的に確保する際のサイズをどうやって決めたらいいか、よくわからないのが今のレベル。。。1024とか、4096とかって数字としてはキリがいいのがわかるんだけど、いつ1024を採用して、いつ4096を採用するなんてことが決められない。。。やっぱり動的の方がいいのよ。うーん。まだまだ先が長いなー。
続きを読む →
ということでいいのかね?
最近はよくブックオフに出かけて、面白そうな本があれば購入している。探せば良書もいろいろ出てくる。ファウラーのリファクタリングやら、ベックのテスト駆動開発入門やら、グラハムのハッカーと画家、デマルコのピープルウェアなどもブックオフで購入。ハッカーと画家が100円だったときはびっくりしましたYO。そのままamazonで売りさばこうかな、と思った。まぁ、先日いらない書籍を150冊ほどブックオフに引き取ってもらったのだが、1500円。。。まぁ、こんなものか。
で、例によってブックオフで購入したものにペアプログラミングという書籍がある。つい最近、読破したので、ちょっと書いてみるか。

内容は非常に軽いのだが、実はこの書籍には(少なくとも私とって)大事そうなキーワードやら引用がいくつか入っている。それらは、レイブやヴェンガーの正統的周辺参加やCoP、ハッチンスの分散認知といったもの。注文を付けるのであれば、ここにヴィゴツキーの発達の最近接領域というキーワードも入れてもらいたいところだ。とググったけど誰もそんなことは言ってないね。ここは私が提唱者となるという手も。
この書籍は、XPについて少しは調べたことがある人には当然のようなことが書いてあるので、特に新しいことはないけど上に書いたようにもう少し理論的なところが書いてあるのが私にとってはおもしろい。つまり、私にとっては9章が良かった。そしていろいろなパターンのペアプログラミングについて書いてある。専門家と専門家のペアとか。専門家と新人のペアとか。あと、アマゾンのレビューでは、翻訳がイマイチって書いてあるけど、そんなことはないと思うんだけどなぁ。12章以降のスキットが気に入らないのかなぁ。私はああいうの大好きなんだけどね。。
専門家 – 新人のペア
ゼウス(とても速くキーを打っている): x = frobnatz.bar (1, y,
脅えた羊:すいません
ゼウス(依然キーを打ちながら):なんだ。 errorNum+
脅えた羊(小さくなり,見つめながら):なぜコンマの後ろにスペースを入れるのですか。
ゼウス(さらに速くキーを打ち):いつもやっているからだ。(打ち続ける) 7);
脅えた羊(見ている):どうしてですか。
ゼウス(キーを打ち,叫びながら):だから,いつもやっているからだ。今度は君がドライブする番だ。
脅えた羊(とてもゆっくりとキーを打ち始める): z = frobnatz.mumble(3,4
ゼウス(叫ぶ):ちがーーーーう!(脅えた羊の後頭部を叩く)
脅えた羊(シクシク泣いて,さらに打つのが遅くなり):<backspace><space>4);
えと、つまり、ペアプログラミングは、プログラマ同士のコミュニティ形成に関するものであると勝手に解釈しました。本当は、もっと上の人たちを巻き込んだ実践共同体と呼んでもいいと思うのだが、そこまで話がいくとややこしくなりそうなのでこの文章の中では入れない。結束したチーム(デマルコの影響から。。)としてのプログラマのコミュニティができると何がうれしいかというと、個々人の仕事は独立したものではなくなり、共通のプロダクトを目指す実践共同体となることでないかね。そして、実践を通して学び、そしてより自分の属する共同体が目指すものを作り上げようという意識が芽生える。そして、その結果、妥協をしないプログラムを書くようになり、バグも減る。また、ペアローテションによってトラックナンバーが1になることを避けることができる。ペアプログラミングをする際に性格上の問題はありそうだけど、絶対いいと思うんだけどなー。つーか、ペアプロしてぇ。ヲレのタイプとしては、「外向型」で「専門的への道を進行中の平均的」かな。。。
管理者を説得して、ペアプログラミングを推進しようとのことが書いてあるけど、やっぱり管理者は自分の管理するチームに関してのナレッジマネジメントは興味ないのかな?興味があったら普通に飛びつくと思うんだけどなー。ナレッジマネジメントを助けるアプリを作成するよりも、楽しいと思うんだけどなー。
Services_Competeに投票しようかみるために、まず、Competeって何?ってとこから始めたよ。
ほむほむ。Webサイトのトラフィックの比較とかをするらしい。
で、Compete Aboutを読むと、
Is this website safe from spyware and other threats like phishing?
How many people visit this site and how does it compare to other sites?
Are there promotion codes for this site that can save me money?
なるほどね。しかし、なんだか、ググルタソができそうなネタのような気もするが、
Today, search engines help us find sites, but they fall short of showing how safe, popular and valuable a site is.
と書いてあるように、今の段階ではしていないみたい。で、Competeは、なんだか独自の方法で評価する仕組みを持っているみたい。それが何かはよくわからんが、何百万もの人の動向を反映しているんだとさ。うーん。ググルタソが少し力を入れれば、速攻できそうな気もするが、その辺どうなんかな。つか、そこにお金儲けの仕組みがあると判断されれば、買収が一番早いのかもしれん。
で、だ。今回使用してみたかったのが、Services_Competeなのだが、CompeteのAPIをラップしたものということだ。CompeteのAPIでは、Compete Site Analyticsで手に入るようなデータをもらえるようだ。そして、それをうまいことマッシュアップしてみたらどうかね、といったものか。
まず、自分のサイトganchiku.comでやってみたけど
Sorry, we don’t have any data for ganchiku.com. With more data, we can cover more sites.
とか言われた。なにー!どうせトラフィックなんてないですよ。うちのサイトは。
というわけで、結構大きなサイトを比較するのがいいみたい。Site Analyticsのページを開くと、mlb.comとnfl.comとnhl.comの比較をしているのがわかる。確かにネットではどのスポーツが見られる人気が高いのかわかるわけだ。なるほどー。ということは、だ。同じようなサービスでどれだけシェアを持っているのかを見るのにいいんじゃね、ということで、SBMサービスを提供しているところを比較してみた。diggとdel.icio.usとhatena。しかし、だ。バグ発見。。。
hatena.ne.jpがne.jpと判断されてるじゃねーか!つーわけで、Contact Usからバグ報告してみた。yahoo.co.jpとかならいけるんだけどね。なぜかne.jpはダメ。バリデーションが変なところで切ってしまっているのだろう。まぁ、おそらく他にもダメなものがあるのだろうね。
本当は、hatena.ne.jpをServices_Competeから使ってみたら、ne.jpと認識されていたみたいで、ソースを見たのだけど、どうも間違っていないっぽかったので、Site Analyticsで試したら、やはり、ということだったのだ。話をうまいことそれに持っていくことができなかったので、無理矢理話を作っちゃった。
続きを読む →
pear-devでよく議論になっているのが、BC breakに関して。昨日まで、BC breakってなんなん?って思っていたけども、親切なNohnさんが教えてくれたよ。
BCって言うのは、Backward Compatibilityで、後方互換性ってやつね。そして、PEARでは、PHP4のパッケージからPHP5のパッケージに移るに関して、BC breakがあって、そこでは、連番が降られている。。。
例えば、XML_RPCが、XML_PRC2へ。PHPUnitがPHPUnit2へ、と。
確かにこの管理の方法は嫌だなー。なんかもっといい方法はないものか。。
続きを読む →