それともヲイラがバカなだけ?
もちろん独学なわけだが、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へ、と。
確かにこの管理の方法は嫌だなー。なんかもっといい方法はないものか。。
続きを読む →
今日は、元同僚とXP祭に行ってきた。
勉強会は、Rails勉強会に参加させてもらって、なんとなくイメージが掴めていたのだけど。。。「祭」のためか、最初思い描いていたものとだいぶギャップがあった。まぁ、こういうものなのね。
そのためか、一番私がよかったと思ったのは、C言語で組み込みをTDDで行こうってな内容のものだった。構造体をクラスの型として、その構造体のメンバをフィールドとして、OOPっぽく書こうというもの。メソッドは、その構造体のポインタを渡して、フィールドをごにょごにょして返したりするって感じ。なんか、PerlとかPythonは第一引数がそんな感じがするね。ほとんど書いたことがないからあってるかどうかは知らないけど。
まぁ、XPはコミュニケーションを積極的にしていかないといけなさそうだということはわかってきた。TDDだけじゃなくてね。
そう言えば、今日来ていた本間さんは、昔NHKのビジネス英語を担当していた本間さんの兄弟の方でしたね。その番組は、私が英語に狂っていたときにビデオで録画してよく見ていた。で、そこで、「相手との商談、もしくは上司を説得させるときの一言」として、彼が言っていた「Say, YES!」の言葉が忘れられない。言い方がね。「セイ、イエース!」って。ははは。
まつもとさんの講演は。なるほど。勢いのある方ですね。ってのが率直な感想だ。キャズムの話をしていたけど、普通のプログラマのためのRubyをアピールしていたことに、「へー」って感じだ。アーリーアダプターだけでいいような気もするけど、好きなことで飯を食っていこうと思えば、やっぱりマジョリティを引きつけることも大事なのかな。
あぁ。XPに関して一つ気になるのは、就業時間についてかな。XPは実践することが大事だと言われているし、思うのだけど、その実践の中に、週40時間?50時間?ってのがあったと思うんだよね。飲み会に参加しなかったから、そのことを聞くことができなかったけど、実際にXPを実践している人ってどうなんだろう。「みなさんは、忙しい。」とか、「徹夜」ってことをよく聞いたけど、実際問題、XPを実践することにおいて、就業時間はどうなっているのかなーなんて思ってみたりした。私は勝手に、XPをするってことは、徹夜で作業をすることの、反対にあるものだと思っていただけに、ショックだった。
確かに、私が最近遊びでプログラムが書けるのもデスマーチなプロジェクトにいないからで、仕事で、徹夜の連続だったら、創造性も何もないと思うのが率直な感想。つーか、冗談抜きで、それは鬱になるな。あ。あと、最後にコミュニケーションが大事で、連番で付けようというときに、「いや、それはまずいだろう」と思って、話し合いで一発で解決しなければ、やっぱり私は引いちゃうなー。使う言語によるけど、その言語がオブジェクト指向言語であれば、「そのくらい察してくれ!」と思ってしまう。そうでない人であって、一言言って変わらない人だったら、諦めそう。。
あ。あと平鍋さんのプレゼンは良かった。40歳とはとても思えないな。見た目はかなり若い。今日何度もあがってきた言葉の「ふりかえり」は、なんだかメタ認知的活動みたいね。でも、自分がふりかえるだけではなく、チームがふりかえるということが必要なんだろうね。
で、XPに関して個人的に思ったこととして、実践共同体、正統的周辺参加、メタ認知的活動といった言葉が合いそうでした。って、私が学生のときにやっていたテーマじゃん。こんなところで「こんにちは。」ですか?