Personal tools
You are here: Home ブログ matsuyama Categories offtopic
Document Actions

offtopic

Up one level

Document Actions

書きはじめ

最近働きだしたmatsuyamaです、どうぞよろしく。現在自宅サーバーを立てられない状態なので、しばらくはここを本家ブログとしてエントリを書きつづっていきたいと思っております。内容としてはC++やLinux界隈を主として書いていきたいと思っています。また井上氏の提案により、GCCを解読するという何年かかるかわからないようなプロジェクトも予定しておりますので、それの進捗もここに書きたいと思っています。

書きはじめですので、とりあえず僕の環境を晒しておきます。

環境:Gentoo 2006.0 Kernel 2.6.15ぐらい + xorg 7 + Xfce4 + rxvt-unicode + GNU screen + zsh + emacs( + emacs-w3m) + [vim]

最新鋭のツールを組合せた最強の環境です。screenでhsplitしてtop windowのemacsでvsplitしてleft bufferにw3m、right bufferにeshell、bottom windowでzshを待機させたりってことができます。近いうちにWanderlustなどを導入してemacs上でmailやRSSを読めるようにしたり、~/srcをnamazuかgonzuiにかけてemacs-w3m上でboostのソースやgccのソースを参照できるようにしたりする予定なので、それが実現すればもうキーボードひとつで何もかもできてしまうでしょう。




Category(s)
offtopic
The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/66f8304d306f3081/tbping

Re:書きはじめ

Posted by inoue at 2006-07-14 14:13
Xを使っているのに、emacsをemacs -nwで起動するのが変わっていると思いました。emacsの中でM-x shellした方が色々便利な気がしますが、慣れの問題かもしれません。

Re:書きはじめ

Posted by matsuyama at 2006-07-16 16:44
screenが起動しているので-nwでうめこんだほうが作業が楽なのです。たとえば他のscreen windowの内容をcopy modeでcopyしてきて、emacs -nwなscreen windowで貼り付けるといったようなことができます。

Re:書きはじめ

Posted by club penguin at 2009-07-05 16:33
Xを使っているのに、emacsをemacs -nwで起動するのが変わっていると思いました。emacsの中でM-x shellした方が色々便利な気がしますが、慣れの問題かもしれません。

Google Code Jam 2006に参加してみました

結論からいうとTest phaseでふるいにかかっちゃいました。750pt問題は落ちるだろうと思ってたんですが、250pt問題まで落としちゃったのはショックです。四捨五入の処理をミスったか無駄にほどこしてみた最適化が問題をおこしたのでしょうが、本当に簡単な問題だっただけにくやまれます。750pt問題もちゃんと冷静に考えて書けばとおっていたかもしれません(expired後に二時間かけて書いたコードはおそらく通る)。何より今回問題だったのが経験のなさと緊張です。緊張は脳みそを馬鹿にします。緊張していると総当たりしか思い付きません。k.inabaさんの偉大さを新ためて思い知りました。点数的には大差ない(つまり実装にかかった時間)のですが、Test phaseを確実に通るコードを書く実力とか冷静さとか、やはり雲の上の人です。

あと今回勉強になったのが、Codeing Areaでプログラミングせずにemacs + g++でプログラミングしつつ、Statementにのっていないようなtestcaseを用意して独自にテストするべきだったということです。一々Compile->Test->Example1->Testとかやってると時間かかってしかたありません。まあ今年始めてなわりには結構健闘できたかなと自己満足しています。

来年はちゃんとアルゴリズムと数学を勉強して挑みたいと思います。当日に徹夜でぷよぷよやっているようではまだまだ駄目です。


(wait for system test phase to end)

暇なときに他のqualification setもといてみようかと。

Category(s)
offtopic
The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/google-code-jam-2006306b53c252a030573066307f307e3057305f/tbping

Google Code Jam 2006 Qualification Setを勝手に解く

練習がてら解いてみる。かなり適当。

Qualification Set 1

1-250pt問題

Nコンタクトをうまくグループ分けしてコンタクトを見つけるまでにかかる時間を最小にしろという問題。nグループに分けた場合、まずグループを捜すのにn秒、そしてそのグループから実際のコンタクトを見つけるのにN/n秒かかる。例えば5コンタクトを2グループに分ける場合、2+ceil(N/2) == 5秒かかる。

groups.py:

from math import ceil

class IMGroups:
  def optimalTime(self, N):
    res = 1000000
    for i in range(1, N):
      tmp = int(i + ceil(float(N) / i))
      if tmp < res:
        res = tmp
    return res

1-750pt問題

N queensの変形。正方のチェスボードが与えらえれk個のビショップを置くパターンの数を計算して下4桁の数をかえせという問題。なおいくつかのセルは破壊されていてそこにビショップを置くことができないという制限がついている。僕が自分で解いた方法は総当たりによる方法で、わかりやすく直接的ではあるけど実行時間がかなりぎりぎりなので他の方法を紹介。簡単に説明するとビショップを置くパターンと置かないパターンでなめるようにdiagをスキャンしていくようになっている(たぶん)。memset(memo, -1, sizeof(memo))はなるほどと思った。

bishops.cpp:

#include <iostream>
#include <vector>
#include <string>

#define MOD 10000

using namespace std;

int n;
int memo[18][1 << 15];
vector<string> b;

int go(int k, int d1, int mask) {
    int& res = memo[d1][mask];
    if (res != -1) return res;

    if (k == 0) return res = 1;
    if (d1 >= 2 * n - 1) return res = 0;

    res = go(k, d1 + 1, mask) % MOD;
    for (int i = 0; i < n; i++) {
        int j = d1 - i;
        int d2 = n - 1 + i - j;

        if (i < 0 || i >= n || j < 0 || j >= n) continue;

        if (!(mask & (1 << d2)) && b[i][j] == '.') {
            res += go(k - 1, d1 + 1, mask ^ (1 << d2));
            res %= MOD;
        }
    }

    return res;
}
 
class Bishops {
public:
    int count(int k, vector<string> board) {
        n = (int)board.size();
         b = board;
        if (k > 2 * n - 1) return 0;
        memset(memo, -1, sizeof(memo));
        return go(k, 0, 0);
    }
};

#if 0

int main() {
    vector<string> board;
    board.push_back("........");
    board.push_back("......#.");
    board.push_back("........");
    board.push_back(".#......");
    board.push_back("........");
    board.push_back(".....#..");
    board.push_back("........");
     board.push_back("...#....");

    Bishops bishops;
    cout << bishops.count(7, board) << endl;

    return 0;
}

#endif

Qualification Set 2

2-250pt問題

シャッフルする種をあたえられ、それを使って1, 2, 3, ..., nなデッキをn回シャッフルしろという問題。

shuffler.py:

class DeckShuffler:
  def getDeck(self, n, shuffled):
    res = range(1, len(shuffled) + 1)
    while n > 0:
      tmp = res[:]
      for i, x in enumerate(shuffled):
        tmp[i] = res[x - 1]
      res = tmp
      n -= 1
    return res

2-750pt問題

Qualification Set 1の750pt問題と同じ。

Qualification Set 3

3-250pt問題

レフリーの全行動が[YR] MINUTES NAMEという形式であたえられるので、それの間違いを見付けて最も最初に間違った時間をかえせという問題。たとえば二回目のイエローカードなのに同時間にレッドカードがでてないなど。完璧なコードを書くのが結構むずかしい。と、思ってたら以下のようにすれば簡単にかつ完璧にできることが発覚。さすがですk.inabaさん、あとからレッドカードを検索する発想はなかったわ。なんていうかイエローカードのチェックのifの次にelifとして書きたい衝動にかられる。そっちのほうが美しいみたいな。でも実際そうすると逆に問題が難しくなる。いやはやアルゴリズムは奥が深い。

http://www.kmonos.net/wlog/sub/gcj06_q250.py

3-750pt問題

Permanentとかいうやつを計算しろという問題。The parmanent of nxn matrix A is equal to the sum of A[1][p[1]] * A[2][p[2]] * ... A[n][p[n]] over all permutations p of set {1, 2, ..., n}. ということらしい。前から思っていたんだけど、set {1, 2, ..., n}のall permutationsってなにかとても簡単な方法で生成できないのかな。結構用途多いわりにいざ作るとなると再帰やらスタックやらで生成しないといけなくて面倒くさい。で、問題は解けたんだけど遅すぎてtestとおらない。c++で書きなおす気もおこらず、上と同じようにk.inabaさんのコードを掲載。僕のpythonのプログラムにmemoizationつければk.inabaさんのと同じになるけど、面倒なのでいいや。

http://www.kmonos.net/wlog/sub/gcj06_q750.py

Qualification Set 4

4-250pt問題

(n,m)のボードから最大の正方(含有可能な正方をはぶくという意味)を抽出してその数をかえせという問題。たとえば

AAB
AAB
BBB

は2x2のAの正方が1個、1x1のBの正方が5個で計6。Constraintsがゆるいのでごりごり処理しても余裕。まあ工夫するとしたらcoloringして四隅のcolorをチェックすることにより含有をチェックするようにするとか。追記、rは最大にしちゃだめだ。修正面倒なのでこのまま。

square.py:

class SquareCounting:
  def howMany(self, grid):
    w = len(grid[0])
    h = len(grid)
    sq = {}
    res = 0
    def row(c, l, t, r):
      while l < r:
        if grid[t][l] != c:
          return False
        l += 1
      return True
    def include(c, l, t, r, b):
      for s in sq.get(c, []):
        if s[0] <= l and s[1] <= t and s[2] >= r and s[3] >= b:
          return True
      return False
    for l in range(w):
      for t in range(h):
        c = grid[t][l]
        r = l + 1
        while r < w and grid[t][r] == c:
          r += 1
        b = t + 1
        while b < h and row(c, l, b, r):
          b += 1
        r = l + min(r - l, b - t)
        b = t + min(b - t, r - l)
        if not include(c, l, t, r, b):
          sq.setdefault(c, []).append([l, t, r, b])
          res += 1
    return res

4-750pt問題

Qualification Set 3の750pt問題と同じ。

Qualification Set 5

5-250pt問題

y < x < zのf(x)がy, zのfに関してconvexになっている場合その総数をかえせという問題。convexというのはy, zの直線((y, f(y)), (z, f(z))より点(x, f(x))が上にある場合をいうらしい。y, zはつまりx - 1, x + 1ということだと決めつけて?になっていたことは秘密。上にあるかはy, zの傾きa1とx, yの傾きa2の比較でチェックできる。これもかなりごりごりと処理。floatいるかは不明。

convex.py:

class ConvexityIssues:
  def howMany(self, values):
    res = 0
    n = len(values)
    for i in range(n - 2):
      for j in range(i + 2, n):
        a1 = float(values[j] - values[i]) / (j - i)
        for k in range(i + 1, j):
          a2 = float(values[k] - values[i]) / (k - i)
          if a1 < a2:
            res += 1
    return res

5-750pt問題

Qualification Set 3の750pt問題と同じ。

Bishopsの問題が一番むずかしかった。でも一番収穫があったのもBishops。特にgo(k, ...)とgo(k - 1, ...)の使いわけによって配置パターンをすべて表現してしまうのには感心した。来年もがんばろう。

P.S. reStructured Textは使いにくくてしょうがない。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/google-code-jam-2006-qualification-set309252dd624b306b89e3304f/tbping

Plaggerを試してみた

Plagger::Plugin::Publish::Maildirというモジュールがあるのを知り、先日書いたfetchrssの機能をそのままPlaggerで実現できるじゃんということでPlaggerをインストールしてみました。

% cpan -fi Plagger Plagger::Plugin::Publish::Maildir

ちなみにforceフラグなしでモジュールがインストールできた経験がありません。Portage経由ならCPANモジュールもさくさく入るんですが、あいにくPlaggerというebuildがないようで、いやいやながらCPAN経由で。それで以下のような設定ファイルを書いて早速テスト。

config.yaml:

global:
  timezone: Asia/Tokyo

plugins:
  - module: Subscription::Config
    config:
      feed:
        - http://somewhere/RSS

  - module: Publish::Maildir
    config:
      maildir: /home/foo/Maildir
      folder: plagger
      attach_enclosures: 1
      mailfrom: plagger@localhost
% plagger -c config.yaml
...
Plagger::Plugin [fatal] file error - mail.tt: not found at line 144

はやりなツールはことごとく僕を拒むようです。ログによるとmail.ttはちゃんとインストールされているはずなんですが、なんていうか初歩的すぎて直す気もおこりません。やはり僕はfetchrssでいいです。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/plagger30928a6630573066307f305f/tbping

Re:Plaggerを試してみた

Posted by s_nobu at 2006-09-11 06:29
http://plagger.org/trac/browser/trunk/plagger/assets以下を適当な場所に保存し、config.yamlへ

global:
assets_path: /path/to/assets

を追加してみてください。

このごろろくにメンテしていませんので、不具合がありましたら連絡お願いします。

Re:Plaggerを試してみた

Posted by matsuyama at 2006-09-12 18:08
すいません、試すの忘れてました。今日試します。

Re:Plaggerを試してみた

Posted by matsuyama at 2006-09-13 05:06
ありがとうございます、動きました。

Compizインストールしてみた

compiz-00

普段urxvt + screen + emacs -nwをフルスクリーンにして作業している僕には最高に必要なさそうなCompizをインストールしてみました。環境は Gentoo Linux 2006.1, Ahtlon 64 X2, DDR2 1G, GeForce 7300GT です。最初はCompiz on Xglでやっていたのですが、操作するにつれ画面が徐々に真っ白になってうまく動かないので代替としてAIGLXを使いました。AIGLXはxorg7.1からサポートされたeffects用の正式拡張です。XglのようにXそのものを変えてしまうのではなくて、Xをeffectsに対応させる形に変更するだけなので、たとえばデスクトップマネージャでXglを起動したりするような面倒くさいことをしなくてすみます。詳しくは以下を参照。

http://gentoo-wiki.com/Compiz

http://gentoo-wiki.com/HOWTO_nVidia_GL_Desktop_Effects

http://gentoo-wiki.com/HOWTO_XGL

http://gentoo-wiki.com/HOWTO_AIGLX

手順としては、nvidiaのベータドライバをインストール、effectsを使えるように必要なパッケージを更新、/etc/X11/xorg.confをいじくる、.xsessionなどをいじくってcompizを起動できるようにするって感じです。

/etc/X11/xorg.confはAIGLXのところを読んでください。ちなみに僕は以下のように設定してうごきました。

/etc/X11/xorg.conf:

Section "DRI"
    Group 0
    Mode 0666
EndSection

Section "ServerLayout"
    Option "AIGLX" "true"
EndSection

Section "Module"
#    Load "dri"
EndSection

Section "Device"
    Option "nologo" "true"
    Option "XAANoOffscreenPixmaps" "true"
    Option "DRI" "true"
    Option "AllowGLXWithComposite" "true"
    Driver "nvidia"
EndSection

Section "Screen"
    Option "AddARGBGLXVisuals" "True"
EndSection

Section "Extensions"
    Option "Composite" "Enable"
EndSection

Xorg.0.logによると必要ないオプションも含まれているようですが動くのでいいでしょう。あまりよくわからないのですがglxがちゃんと動いているかはgrep -i glx /var/log/Xorg.0.logとかxdriinfoとかglxgearsとかで確かめられると思います。glxgearsは正常ならば5000fpsぐらい出ます。それをかなり下回るようではeffectsはちょっとつらいです。 で、compizを起動する方法。いろいろあるのですが僕はXfce4 + Custom Session(.xsession)を使っているのでそのやり方をかいときます。

まず、/etc/xdg/xfce4-session/xfce4-session.rcを以下のように編集します。

/etc/xdg/xfce4-session/xfce4-session.rc:

[Failsafe Session]
...
#Client0_Command=xfwm4
Client0_Command=compizrc
...

んで/usr/bin/compizrcを作ります。

/usr/bin/compizrc:

# Start window decorator
gtk-window-decorator --replace &

# Start compiz
LIBGL_ALWATS_INDIRECT=1 compiz --replace --use-cow --indirect-rendering --strict-binding gconf &

ちなみにこれは/usr/bin/compiz-*から拝借して手を加えたやつです。そして~/.xsessionに

rm -rf ~/.cache
execc xfce4-session

と書きます。なんか.cacheがあると二回目にcompizを起動したときに固まるのでrm -rfはそれの対策です。固まらない人は消したほうがいいです。

出来上がった感じはスクリーンショットで載せておきます。

compizの初期起動状態ではプラグインが何も選択されていないので、何もできません。gconftools-2を使うかgconf-editorでactive_pluginsに使いたいプラグインを指定してやらなければなりません。とりあえずはgconftools-2(-s,-g)かgconf-editorで/apps/compiz/general/allscreens/options/active_pluginsに[gconf,decoration,wobbly,fade,minimize,cube,switcher,move,resize,place,rotate,zoom,scale,water,screenshot]を指定しておきましょう。これで通常使う分には問題ありません。うにょうにょ動かしましょう。

ちなみに調子にのってberylもインストールしてみたのですが重すぎてだめでした。テーマの豊富さは魅力なんですが初期テーマがあれなのと重すぎるのとでやっぱりcompizに戻しました。

最後によく使うキーとマウス操作をば。

Alt+Tab window switch
Ctrl+Alt+Up window catalog
Ctrl+Alt+Down screen switch
Shift+F9 Water
Alt+WheelUp opacity+
Alt+WheelDown opacity-
Alt+LeftButton Move
Alt+Ctrl+LeftButton Cube

まだ使い始めたばかりですが、かなり便利です。やっぱり若者はこうでなくちゃ。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/compiz-installation/tbping

Re:Compizインストールしてみた

Posted by matsuyama at 2006-11-13 09:42
reStructuredTextの中でもtableは特に使いにくい。マウスをスクリーンの右上にもっていくとウィンドウカタログでて便利だよ、というだけ。

年末年始はemerge -Du world

なかなかやる機会がない(やる気もない) emerge -Du world ですが、年末年始は絶好のチャンスです。是非やっておきましょう。ついでに kernel の更新もしておくといいかもしれません。

世界を更新:

% esync # or emerge --sync
% emerge portage
% emerge -avDu world
% etc-update

カーネルを更新:

% USE="symlink" emerge gentoo-sources
% cp /path/to/config /usr/src/linux
% cd !$
% make menuconfig
% make && make modules_install

ちなみに kernel を更新するとインストールしておいたドライバも消えるのでそれもインストールしなおしておきましょう。僕の場合は nvidia-driversalsa-drivers を入れていたので、それらをインストールしなおします。

% emerge nvidia-drivers alsa-drivers -av

それでまあ alsaconf とか pkill X gdm && gdm で compiz が正しく起動するか確認して一応更新完了。 gentoo にはこれからもバリバリとがんばってもらいます。

(会社のPCも更新したいな…)

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/emerge-Du-world/tbping

Re:年末年始はemerge -Du world

Posted by matsuyama at 2007-01-08 00:25
--emptytreeつけるのすっかり忘れてました。悲しすぎる。

Beryl で Windows Vista っぽいデスクトップを作る

Beryl の設定

「エメラルドのテーマ設定」から「リポジトリ」→「Fetch non GPL'd Themes」をクリックしてテーマを取得します。なお事前に、

% svn ls https://svn.generation.no/emerald-themes
p

しておく必要があります。

次に、「テーマ」からお好みで Vista っぽいテーマを選択します( Aero-Class, vista_theme, Vista-Compiz など)。

フォントの設定

メイリオフォントにかなり似ている(と個人的に思う) M+ Outline Fonts (*) を使います。 Gentoo なら Portage から簡単に取得することができます。

% emerge -av mplus-outline-fonts

インストールができたら xorg.conf を編集してフォントが読みこまれるように設定します。

/etc/X11/xorg.conf:

Section "Files"
    ...
    FontPath "/usr/share/fonts/mplus-outline-fonts/"
    ...
EndSection

設定が完了したら X を再起動してください。

(*) http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index.html

ユーザーインターフェースの設定

これはデスクトップ環境によって異なりますが、僕が使っている Xfce4 では「設定マネージャ」→「インターフェース」からユーザーインターフェースの見栄えを変更することができます。 KDE は kcontrol から設定できますが、 Gnome は使ったことないので知りません。それぞれ Vista っぽいユーザーインターフェースを選択してください。さらにユーザーインターフェースに使われるフォントもここで設定します。 Xfce4 からテーマ一覧のすぐ右にあるフォントボタンから M+ Outline Fonts を選択します。 KDE は「 Appearance & Themes 」→「 Fonts 」で設定できます。

壁紙

Google Image から Vista っぽい画像をとってきて壁紙に設定します。

その他

ウィジェットとかサイドバーとか模倣する必要を感じないので今回は無視しましたが、あえてそこまでこだわるなら aDesklets (*) なんかを使ってみるといいかもしれません。

(*) http://adesklets.sourceforge.net/

vista-like-desktop.png

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/build-windows-vista-like-desktop-with-beryl/tbping

アグレッシブさが足りない

オープンソースソフトウェアのソースコードを読むことは確かに勉強にはなるかもしれないけど、その知識でガチガチに防御を固めていざそのプロジェクトに貢献するってなったときに、その人がどれほど役に立つかというと全く勉強していない人と同じぐらいだと僕は思う。

ソースコードというのはそのソフトウェアの具体的写像でしかなくて、いかにソースコードを理解しようともそのソフトウェアを理解したことにはならない。ソフトウェアを理解していないというは結果的に貢献(改善)すべき場所の特定や斬新なアイデアの生成ができないということに等しい。もちろんソースコードを読むというのはスキル上げの面でも娯楽の面でも結構な事だと思う。が、しかし、それでいきなり自分が他人より貢献の力があると思ったりするのは良くない。

どういうわけか巷では、ソフトウェアを改造することよりもそのソースコードを読むことのほうが遥かに人気を博しているようだが、ソースコードを読むことのどこが楽しいのかよくわからない。僕が勉強と銘打って何かしらのソースコードを読んでいるときはいつも全然内容が身についてないなと感じる。それを避けるためか否かは自分でもはっきりしないが、結果的に必要のないときに概観や単語の取得するため以外にソースコードを読むことはやらなくなった。それよりか、今そのソフトウェアにどういう事が起きててどういう事が望まれるかをアンテナを張り巡らしてウォッチしたり考察したりするほうが好きだし、よっぽど生産的だと考えている。別にソースコードを読むのは何かやることを見つけてからでも遅くないし、それに加えておそらくそういう状況のほうが内容が身につくと思うのである。

しかし、アンテナを張り巡らしたり、毎日休むことなく具体的にあるいは漠然と何かやろうと考えるのはなかなか体力が必要で、結局ひとまずそういうことを未来の視野において、今のうちにソースでも読んでおこうという人が出てくるのだと思う。別に今やったって誰も困るわけでもないのに。

僕は人に言えた身分ではないけれども、少なくとも毎日 lkml を読んだり、何かしらアイデアを練ったり、バグを見つければすでにポストされているかを探すようにしている。何も貢献する気はないと言ってしまえばそれまでなのだが、しかしオープンソースソフトウェアに限った話ではなく、どのような世界でもそのようなアグレッシブさを発揮できる人のみが自分の力や知識を如何なく発揮できるポジションに付くものなのだろうと僕は思っている。

僕は周りの数人(カーネルに興味のある人も含まれている)に lkml を読むことを必死に薦めている(*)。しかし誰も読もうとしない。読まない理由を理解できないわけではないが(要するに英語やらなんやらで面倒くさいのだろう)、読まない理由で自分を制させる理由は理解できない。人間は自分の処理系を変化させることによって対象をどう捉えるかを変化させることができる。

つまるところ、もう少しアグレッシブに考えるようにして、自分を自分が居たいと思うポジションに向かうように自分を律するべきだと思うのだ。

(*)数少ない日本人kernel hackerの富士通・亀澤氏もそう提案している

全然まとまってなくて申し訳ない。自律に関してはまた今度書く。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/the-lack-of-aggressiveness/tbping

Re:アグレッシブさが足りない

Posted by ohyama at 2007-04-01 10:21
ソフトウェアの理解が単なるソフトの機能や実装の理解ではなく、今何が求められ、これが選ばれ、次に何が求められそうかという推察であるという事であるというのは理解できました。
両者の違いを例えるならば、目の前に百のインターフェイスと千の機能を備えた不思議な箱(取説つき)が存在し、それを見て、『こいつの中身はどうなってるのだろう』と思うか、『こいつをどう利用しようか』という事だと思いました。
matsuyamaさんほどの実力者ならば、後者に『どう改造しようか』という考察も追加されるのかもしれません。しかし、それは中身を知った人間とて同じ事です。
又、

>オープンソースソフトウェアのソースコードを読むことは確かに勉強にはなるかもしれないけど、その知識でガチガチに防御を固めていざそのプロジェクトに貢献するってなったときに、その人がどれほど役に立つかというと全く勉強していない人と同じぐらいだと僕は思う。

と思われる根拠を教えてください。

Re:アグレッシブさが足りない

Posted by nagai at 2007-04-03 01:21
>オープンソースソフトウェアのソースコードを読むことは確かに勉強にはなるかもしれないけど、その知識でガチガチに防御を固めていざそのプロジェクトに貢献するってなったときに、その人がどれほど役に立つかというと全く勉強していない人と同じぐらいだと僕は思う。

同じというのは少し乱暴な気がしますが、自分が読んだ氷山の一角のみを正とし、その結果柔軟性を失い状況に応じて適切な解決策を考えられなくなる
というのであれば確かに無知の人よりタチが悪い場合があるとは思います。実際他人のそういう場面を見てきましたし、僕自身も当てはまる場面が多々ありました。
少ない情報しか得ていない状態で無理に理論武装をしようとしてしまって、結果そこから身動きが取れなかったり・・。

Re:アグレッシブさが足りない

Posted by matsuyama at 2007-04-03 13:13
要するに初速度の問題です。何をするべきかわかってない人は全然何も知らない人と同じ初速度だという意味で「同じ」と表現しました。もちろん加速度に関してはソースコードを読んでいる人のほうが圧倒的にあるでしょう。しかし現実的には僕も含めて初速を得られない人がたくさんいるようです。そういうことから僕はエントリにあるような結論を出しました。

Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.