2005 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
2014 1 2 3 4 5 6 7 8 9 10 11 12
2015 1 2 3 4 5 6 7 8 9 10 11 12
2016 1 2 3 4 5 6 7 8 9 10 11 12
2017 1 2 3 4 5 6 7 8 9 10

ホーム

2008年03月31日1

http://www.ddj.com/cpp/207000124;jsessionid=MZS1NWZZOOOOOQSNDLPCKH0CJUNN2JVN?_requestid=734930

びゃーね先生が今でもOOPを重要視していたのは意外でした。

あと、数学の話も面白かった。そりゃまつもとさんと
話が合いますよね (笑)。

もちろん、自分も:

  great fan of the idea of "growing" a system from simpler, less
  complete, but working and tested systems

なわけですけど。

C++の憎めなさっていうのは、理論と実際とのギリギリの
バランスにあるんですよね。まぁ、かなり度を越してる
とは思うんですけど。でも、やっぱり、実際的な言語って
いう線は残してるっていうか。

まぁ、全部の機能を使わなきゃいけないわけじゃないです
しね。earlyでもいいじゃないかと思ったりもするんですよ。

--

ちょっと話が変わるんですけど、RubyのFiber、あれって
面白い解ですよね。generatorっていうと関数型っぽい
臭いがするんですけど、軽量スレッドっていうと手続き型
っていうか、俗っぽい (笑) 感じがします。なんていうか、
無限と無限ループくらい違う (笑)。もちろん、自分は
俗っぽいほうが好みなんですけど。

本家Permlink


2008年03月31日

ふ〜ん。逆をいえば、もうそれだけ使えるってことですか。
1.9。単独で十分に動くんなら乗り換えますか。

朝目を覚ましたら、Fiberの正しい使い方を親切な人が
指南してくれてると期待してたんですけど (笑)。使ってる
人が少ないんじゃしょうがない。

Ruby自体、そんなにヘビーに使ってるわけじゃないですし。
あ、乗り換えるっていっても、サーバのじゃないですよ。
自宅の環境。まぁ、サーバのほうもRailsとか使ってないし、
試してもいいんですけど。あ、サーバはDebianだから簡単に
入らないかもなぁ。結局、使ってるディストロ次第かなぁ。
自宅のUbuntuにはあったけど。

--

ゴルフ、エグイわぁ。

本家Permlink


2008年03月30日1

む。オッサンばっかりやないか。

Javaは世代交代が進んでないのか?

--

Windowsがらみは、っていったほうが正しいですね。

仕事じゃなきゃWindowsプログラミングに手を出す理由は
ありません。

C++も、どっちかっていうと、『お客さん』でいたい (笑)。

--

http://www.dabeaz.com/generators/

これ読んで『generatorって面白そう』って思って、
したら、『RubyにはFiberがあるよ』ってどっかで聞いて、
で、1.9ビルドして、試しに書いたのが下のなんだけど、
なんか違う感じがする (笑)。タイプ量が多すぎて全然
うれしくない (笑)。

zlib使おうとしたんだけど、コンパイルされてなかった。
aptitudeで1.9突っこんだほうがよかったかも。

def enum2gen(enum)
  Fiber.new do
    enum.each{|i| Fiber.yield(i)}
    nil
  end
end

require 'find'
def gen_find(filepat, top)
  return Fiber.new do
    Find.find(top) do |path|
      filepat =~ path and Fiber.yield(path)
    end
    nil
  end
end

def gen_open(g_files)
  return Fiber.new do
    while (name = g_files.resume)
      open(name) do |input|
        Fiber.yield(enum2gen(input))
      end
    end
    nil
  end
end

def gen_cat(g_sources)
  return Fiber.new do
    while (g_in = g_sources.resume)
      while (line = g_in.resume)
        Fiber.yield(line)
      end
    end
    nil
  end
end

def gen_grep(pat, lines)
  return Fiber.new do
    while (line = lines.resume)
      pat =~ line and Fiber.yield(line)
    end
    nil
  end
end

lognames = gen_find(/access.log.*/, 'log')
logfiles = gen_open(lognames)
loglines = gen_cat(logfiles)
patlines = gen_grep(/bakanoemono/, loglines)
while (match = patlines.resume)
  print(match)
end

--

まぁ、でも、実際はそんなにうれしくないかもなぁ。

実際、自分は:

require 'find'
lognames = []
Find.find('log'){|path| /access.log.*/ =~ path and lognames << path}
lines = []
lognames.each{|path| lines += File.readlines(path)}
patlines = lines.find_all{|line| /bakanoemono/ =~ line}
patlines.each{|match| print(match)}

みたいな書き方することが多いんだよね。ブロックを
ネストさせることが少ない。これが富豪的だっていうのは
わかってるんだけど。

まぁ、これは有限の考え方で、tail -fとかはできないか。

本家Permlink


2008年03月30日


本家Permlink


2008年03月29日

ちょっとActiveX周りを調べてたわけだけど。とりあえず
当面は避けて通ることができそうでホッとしたところ。

ActiveX、つまり、COMとかATLとか、まぁ、基盤として
必要そうだっていうのはわかるんですけど。でも、バカな
自分には使えなさそう (笑)。

--

でも、ほんと、インタプリタでいいし、動的言語でいいと
思うんですけどね。

本家Permlink


2008年03月28日1

  その意味で、実はコーディング規約より、メンテナブルなコードよりも役に
  立つのが、テスト。要はテストをパスしてしまえばどうコードしても構わな
  い、というのがTDD = Test Driven Development =テスト駆動開発の考え方
  のベースとなっています。

前半はいい。でも、後半はウソくせーな。

でも、ある意味真実を突いてるところがヤッカイなところ
なんだな。

テストがパスしてしまえば、どうコードしても構わない。
これ、正しいんだよね。ただし、テストが設計の役割を
担っているならっていう条件がないといけない。ヒゲ
メガネはここまで考えて書いたわけじゃないだろ?

ユニット・テストがしっかり書かれているっていうことは、
設計がしっかりされているということの裏返しなんだよね。

ユニット・テストが『本物』であるためには仕様をきちんと
捉えてないといけないし。ユニット・テストをたくさん
書くためには、製品コードがテストしやすい設計になって
ないといけないし、これはモジュール間の疎結合を促すし、
といった具合。

でも、これを『どうコードしても構わない』っていう
言い方をすると、やっぱり誤解を招くだろ。いかにも
ペテン師らしいヤリクチだよな。

--

この1つ前にもチョロっと書いたんだけど、設計っていう
のも活動の1つなわけで。活動っていうのは『次にやる
こと』っていうのが決まってないといけない。

で、『次にやること』を決めるためには設計が必要なん
だよね。完成図としての設計を思い描いて、それを実現
するための手順を導き出す。これを自分は『逆算』と
いう言葉で表現したんだけど。その逆算の正しさを証明
するのがユニット・テストであり、完成図にたどり着く
までのマイルストーンがユニット・テストでもある。

TDDっていうのは、本にもあるとおり、実際はTODOリスト
駆動なんだよね。TODOを切り出す過程っていうのが設計
っていう活動の一部になってるっていってもいい。

どっちかっていうと、クラス図がどうたらとかよりも、
この『次に何をやるか』が決まってるほうが、プロジェクトに
とっては重要になる。閉塞感や停滞感が生まれるのは、
プロジェクトにとっては、一番じゃないにしても、かなり
ヤバイ。

--

だから、テストのしやすさっていうのが製品コードの
設計に影響を与えるように、逆算のしやすさっていうのも
製品コードの設計に影響すると思うんだよね。

たとえば、10個のクラスをいっぺんに変えなきゃいけない
ような設計よりも、一度に1つずつ変えられるような設計の
ほうがいい。

ここで注意しないといけないのは、10個のクラスをいっぺんに
変えるようなやり方と、一度に1つずつ変えていって合計で
10個変えるようなやり方とで、その結果に違いはないかも
知れないということ。変え終わったときのコードの状態、
つまり静的な設計としては、どっちも似たものになるかも
しれない。でも、その過程には大きな違いがある。単純に
いえば、時間とリスクとのトレードオフだよね。まぁ、
これは単純化しすぎた言い方でイヤだけど。

--

ああ、『静的な設計』っていうと混乱する人がいるか。
フツー、静的な設計っていったらクラス図みたいなものを
指して、動的な設計っていったらシーケンス図みたいな
ものを指すだろうから。

自分がいってるのはそういう意味じゃない。静的な設計
っていうのは名詞としての設計。ある時点でのコードの
状態。一方、動的な設計っていうのは動詞としての設計
っていう意味。さらに動的な設計には手順といった時間
的な考えも含まれる。

--

結局のところ、『逆算のしやすさ』っていうのはincremental
ってことになる。

--

へー、Rubyにはgenerator.rbってのがあったのか。

本家Permlink


2008年03月28日

結局のところ、設計というのも『活動』の1つ。だから、
『次に何をすればいいか』というのが決まってないと
何も動けない。

本家Permlink


2008年03月27日1

やっぱりWS_CLIPCHILDRENが利くみたい。土台のウィンドウが
これだと、ハマってるWS_CHILDのウィンドウの領域を自分で
上書きしない。つまり、WS_CHILDのウィンドウに描画を任せる。

結論としては、あんまり検証してないけど、他のプロセスの
ウィンドウでもCDialogをハメることはできる。ただし、その
ウィンドウはWS_CLIPCHILDRENでCreateされてないと、ハメた
CDialogの領域を自分の領域として上書きしてしまう。

本家Permlink


2008年03月27日

恥ずかしいことに、forkしたときの動作を間違った
イメージで持っていた。

すでにopenされているfdがあるときにforkしたときのこと。
fdがdupされるというのは知ってたんだけど。そのとき、
通信経路も複製されると思い込んでた。図にすると:

  fork前:

    server <-----> client

  fork後:

    server <-----> client
       +
       |
       +---------> client'

といったイメージ。実際はこうではなく:


  fork前:

    server <-----> client

  fork後:

    server <----+-> client
                |
                +-> client'

といったイメージ。通信の経路は1つだけど、クチだけが
2つに増える感じ。だから、clientからserverに送るデータと
client'からserverに送るデータが混信する。

ソケットは、まさにこのような現象のメタファとして
わかりやすい。通信線は1つのままで、それにデータを
出し入れすソケットが増えることになる。

このへんはAPUEでも読んだし、混信するっていうのも
知ってたはずなんだけど、ほんとうには理解できてなかった。

--

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#include <unistd.h>

static void
write_it(int fd, char c)
{
    char buf[1];
    buf[0] = c;
    for (int i = 0; i < 1000; ++i) {
        ssize_t ret = write(fd, buf, sizeof(buf));
        if (ret < 0) {
            perror(NULL);
            exit(1);
        }
    }
}

int
main()
{
    int fd = open("tmp.out", O_WRONLY | O_CREAT, S_IRWXU);
    if (fd < 0) {
        perror(NULL);
        exit(1);
    }
    pid_t pid = fork();
    if (pid < 0) {
        perror(NULL);
        exit(1);
    }
    if (pid == 0)
        write_it(fd, 'C');
    else
        write_it(fd, 'P');
    return 0;
}

本家Permlink


2008年03月26日



別のプロセスからActiveXコントロール (MSのMonthView) を
貼りつけてみた。ただ、再描画は基本的にはうまくいかない。
マウスでカチカチやると、たまに再描画される。それも
完全な再描画というわけじゃない。

--

こういうのはCalendarのActiveXコントロールでやるのが
定番だと思ったんだけど、WinXPではCalendarが消えてる
みたい。.NETのコントロールになったみたい。

--

SetWindowLong

GWL_WNDPROC  ウィンドウプロシージャのアドレスを書き換えます。 

             Windows NT/2000:この属性は、ウィンドウが関数を呼び出した
             スレッドと同じプロセスに属していないと変更できません。
 
む、無念。

でも、プロシージャを乗っ取られるほうが手伝えば、
できないこともないのか。手伝えれば、の話なんだけど。

本家Permlink


2008年03月25日1

そうかあ? 『救済』なんていう言葉が使われる時点で
ベンチャーとしてダメだろ。救済するヒマあったら次
行け次っていうのがベンチャーだろ。

本家Permlink


2008年03月25日

http://msdn2.microsoft.com/ja-jp/library/f8bk32xd(VS.80).aspx

  メモ :
    このサポートの適用対象は、MFC の実行可能ファイルまたは DLL プロジェ
    クトに追加された単純な COM オブジェクトだけです。ActiveX コントロー
    ルを含むほかの COM オブジェクトを MFC プロジェクトに追加することもで
    きますが、その場合、オブジェクトが予測どおりに動作しないことがありま
    す。

どんな脅し文句やねん。

本家Permlink


2008年03月24日

http://msdn2.microsoft.com/ja-jp/library/599w5e7x.aspx

ATLチュートリアル。MSDNにこういうチュートリアルが
あったとは意外 (笑)。

自宅の環境はVisualStudio 2005で、このチュートリアル
とはちょっと違うところがある。VC++6だともっと違う (笑)。

VC++6なら:

http://www.koutou-software.co.jp/junk/atl-actxctrl-sample.html

が参考になる。

ATLのコードにMFCのコードを混ぜることは可能。逆は
難しそう。

本家Permlink


2008年03月22日

前からちょっとヤバイ会社かと思ってたけど、確信に
変わったね。いくらなんでもそんな余裕ないだろ。2002年
あたりの底に比べたらマシとはいっても、2005年あたりの
高値に比べたら今は半分程度。ヘンな会社にカネ出す余裕
なんてないはずだけどな。

本家Permlink


2008年03月20日

Windowsでは、あるプロセスのウィンドウに、別プロセスのダイアログを
WS_CHILDでハメることができるのか。ただ、単純にこれをやると、ダイアログ
のほうでイベントは拾えなくなると。描画すらまともにはいかない (チラッと
描画されるだけとか)。

で、ダイアログのほうでイベントを拾えるようにするには、ダイアログを直接
ハメるのではなく、ActiveXコントロールをハメて、さらにそのActiveXコント
ロールにWS_CHILDでダイアログをハメると。

問題はブートストラップだなぁ。上でいう『別プロセス』がActiveXコントロー
ルをハメるんだろうけど。ActiveXコントロールを動的にハメるサンプルが見
つかんない。VisualStudio のリソース・エディタでハメるんならサルでもで
きるんだけど。

あ、MFCベースの話ね。

本家Permlink


2008年03月18日

アルケミはバランスブレーカーwww

って聞いたんだけど。いやぁ、今回もアルケミは使えねー
とか思ってたんですけど。Wikiのほうでプッシュされてて、
実際、核熱も5まで取らせたんだけど。ガンナーのほうに
目が奪われちゃって。ガンナーは実はワナだったのね。

本家Permlink


2008年03月17日1

それは短気すぎじゃないの?

新しいスタイルっていうのは、そんなにパッと受け入れ
られるもんじゃないでしょう。たとえばTDDにしても、
そんなにすぐみんながやりはじめたわけじゃないし、
今でもみんながやってるわけじゃないし。

結局、啓蒙っていうのは時間がかかるもんなんじゃない
ですか。

それと、何度か書いてるけど、TDDっていうのは、品質の
ためにやるわけじゃないっていうのが自分の主張なわけ
です。自信を得るためにやるといった心理的なものも
あるし。あるいは、ゴールをハッキリさせることで、
そこから手順を逆算したりとか。逆算っていうのは昨日
書いたけど、まさにこのユニット・テストから開発の
進め方が導き出されるという具体例から思いついたもの。

テストって、それだけだとやっぱり面白くないんですよね。
面白くないけど必要だから先に書いたり。自動化したり。
これはLLかどうか全然関係なくって、プログラマの性質
ですよね。

本家Permlink


2008年03月17日

機能を細かく砕いていって、それなりの粒になったとして。
それらの粒には順序というものがないのだろうか。理想的
にはないということだろうけど。でも、現実には、そんな
ことはないわけで。

というか、そういう『平均的な粒』っていうのは、人間
には優しくない気がする。人間にとっては、粒の間に
何かしらストーリーのようなものがあったほうが考え
やすい。

言葉遊びに近いけど、トップダウンというより、逆算と
いったほうがいい気がする。ゴールから逆算していって
道筋を見つけていく。どこがはじまりで、どこが給水
ポイントで、みたいな感じで。

本家Permlink


2008年03月14日

納期に間に合わないことよりも、納期のプレッシャーに
チームが負けることのほうがイヤ。

何もノホホンとやれとかそういうことじゃない。でも、
チームが壊れちゃうと、取り返しがつかなくなる。

チームが壊れるかどうかのギリギリの線なんていうのは、
誰にもわかんない。昨日まで元気そうに見えたメンバが
突然倒れることだってある。こういうアクシデントって
いうのは、単に人手が足りなくなるというだけじゃない。
みんなの心に傷を負うことになる。

プロジェクトX風にいうなら、そういう犠牲があっても
プロジェクトが成功すればメデタシメデタシということに
なるんだろう。でも、自分は、そんな成功は全然うれしく
ない。

--

この仕事から離れる人を見るたびに、自分はソフトウェア
開発の面白さを伝えられなかったんじゃないかと後悔の
念を覚える。

本家Permlink


2008年03月12日2

changeよりinfluence。

本家Permlink


2008年03月12日1

どんなに聡明な人間だって、自信を失くしたときは
バカになるもんだ。

--

http://arton.no-ip.info/diary/20080311.html#c01

なんか豆知識の宝庫になっとる (笑)。

--

書いたことを後悔はしてない。消したことも後悔してない。

本家Permlink


2008年03月12日

オレなんかエロDVDとかリストに入ってんのに公開にしてたよ・・・

--

なんか、『児童ポルノは単純所持もダメ!』とか、わけ
わからんこといっとるな。

こういう、ヒステリックまでな潔癖症、最近はひどくなる
ばっかりだな。

本家Permlink


2008年03月11日

人という素材を集め、それに教育という加工を施す。それは
輸入加工を主産業とする日本がやるべきことじゃないのか。
輸入加工の最終工程は、当然、輸出ということになる。
日本で教育を施した人たちが母国に帰ることを技術流出と
呼ぶのか。

「東洋経済」に資生堂の中国戦略の話が載っている:

  販売員には日本流の接客方法を徹底的に教育、欧米系
  企業との差別化も図る。宣伝戦略には資生堂が得意と
  するキャンペーン手法を採用。テレビや雑誌、屋外交通
  広告をフル活用したメディアミックスで挑む。

自分にとって資生堂は嫌いな企業の1つ。だが、それは
ここでは問題じゃない。この「日本流の接客方法」を
中国人に教えることは技術流出ではないのか。技術と
いうものが、ITや知的財産にのみ限ったものだと考えて
いるなら、非常にオツムがイカれてるとしか思えない。

国防というか、軍需産業としてなら話は違う。でも、
今はそんな話をしてるんじゃない。ビジネス、金儲けの
話をしてる。

--

前にも書いたことありますけど、今は移植性にそんなに
価値はないでしょう。Cygwinもあれば、coLinuxもある。
だから、UNIX向けに書いとけば、主要なOSで動く可能性が
高い。

--

ああ、納期無事終わったから石垣島なのか・・・

本家Permlink


2008年03月08日

いや、どう見てもマッチョすぎるだろ、チュンリー。

本家Permlink


2008年03月07日1

カボチャウザイ。

本家Permlink


2008年03月07日

結局のところ、ソフトウェア開発の基本というからには、
ソフトウェア開発の日常に繰り返し現れるものでなければ
ならない。それらは:

* コーディング
* テスティング
* 設計
* 見積もり
* プランニング
* デバッグ

などである。これらそれぞれに基本というものがあって、
それらの集合がソフトウェア開発の基本と呼ぶべき
ものになる。

人によってはアルゴリズムやCPU、あるいはOSの知識を
ソフトウェア開発の基本と呼ぶかもしれない。しかし、
それらは、野球におけるルール・ブックのようなもので、
ルール・ブックを基本と呼ぶ人は少ないだろう。つまり、
そういう知識はある程度持っていて当然とした上で、
上のような基本というものがある。

--

納期が迫れば、基本を崩してでも結果を出さなければ
ならないこともある。ただし、基本が崩れたままの状態が
常態にならないように気をつけたい。

本家Permlink


2008年03月06日1

最近、diversityというのが話題になるけど。

一般的なdiversityというと、差別のない状態みたいな
ことを指す。

diversityは、XPの原則の1つにもなってるわけで。

XPでのdiversityというと、いろんな能力を持ってる人
たちがいるみたいなことを指す。(いろんな能力を持つ
1人のスーパーマンがいるという意味じゃなくて)

でも、そういう話じゃなくっても、たとえば1つのプロジェクトを
見たときに、顧客、元請け、協力会社という様々な種類の
人たちがいて、それぞれに固有な利害を持ってて、それが
相容れないこともある。それでもなお、やはり製品という
1つのものを共通の目標として持っている。

あるいは、1つのチームの中でも、個人個人の価値観や嗜好と
いったものも様々で、それが衝突することもある。それでも
なお、やはり製品という1つのものを共通の目標として
持っている。

様々な利害関係、様々な対人関係を乗り越えて、1つの
製品にみんなの意識を向けないといけない。そのための
手段は、やっぱりプレッシャーというものではないだろう。

--

プレッシャーというのは、いってみれば「お前の代わりは
いくらでもいる」といってるようなもの。まぁ、実際に
代わりはいくらでもいるんだろうけど。でも、そういう
プレッシャーにさらされて長く続けられる人間はそう
たくさんはいない。

--

結局のところ、平凡な人を集めて生産性を上げるには、
長くいてもらうことが前提となる。

--

そういうプレッシャーに対抗するには「こっちだって
いくらでも他に働ける場所がある」と思えるようになって
ないといけない。

本家Permlink


2008年03月06日

開き直りの裏には『責任を取る』っていう覚悟がなきゃ
ダメなんだよな。まぁ、そんときはどうにでもしてくれ。

本家Permlink


2008年03月05日1

前のメガネのほうがよくない? (笑)

本家Permlink


2008年03月05日

『日本は技術立国なのだから、技術の国外流出を防が
なくてはいけない』。これって、ダウトだよね。

こういう鎖国指向は嫌いなんだよ。単純に、流出より
創出が上回ればいいだけの話。

本家Permlink


2008年03月04日

結局のところ、何を基礎と呼ぶかはむずかしいんですよね。

本家Permlink


2008年03月03日1

  どっちが偉いかって言ったらそりゃ秀才の方に決まってる。

その言葉、まさに天才だ・・・

本家Permlink


2008年03月03日


本家Permlink


2008年03月01日

http://www.atmarkit.co.jp/news/200802/29/ipa.html

  ちなみに1位は「官公庁・自治体・公共機関」だった。

若けぇくせに安定指向のヤツはとっとと死ね!

本家Permlink


Copyright © 1905 tko at jitu.org

バカが征く on Rails