「オーバーヘッド」を含む日記 RSS

はてなキーワード: オーバーヘッドとは

2009-06-14

誰が負けたのか判った気がする

相手が勝ち誇ったとき、そいつはすでに敗北している

ジョセフ・ジョースター

何が違うのか解った気がする(菊池 Blog

今どき言語論争なんて愉快なことをやってるのがアンテナに引っかかったのでヲチしてたんだけども、勝利宣言キタコレ

  1. id:higayasuo氏がid:technohippy氏に、「Google App Engineは、Python版以外にJava版も出たけど、サンプル見たけど、たくさんコード書かなければいけなくて、正直どこがいいのか教えて欲しい」と聞かれる。
  2. id:higayasuo氏、大要「書く量は問題にならない」と答えた。という内容の記事を投稿。
  3. それを見た菊池氏が「GAEJava を選択する場合の最大の理由」は「「うん十万行の既存コードをそのまま投入できる。それにインターフェースするために多少オーバーヘッド気味のコードが数100行必要なのが何の問題がある?」と高説。
  4. id:higayasuo氏が菊池氏に、大要、GAEではRDBMSが使えず移植も大変なので既存コードを使えない、と反論。
  5. 菊池氏が、大要、設計が悪いからだ、と反論。
  6. さらに菊池氏のターン、大要、レイヤリング意識して無い奴に言っても無駄だったね反省、と勝利宣言。

さて。

ネットバトル(藁)の勝敗傍観者の評価によって定まるとしても、「傍観者の評価」は俺一人の評価と同値ではなく、むしろ多数が形成する「空気」だから、俺が「このバトルは◯◯の勝ちだ」と宣言したところで月桂冠には成り得ないわけだけども、「空気」の一要素として、高らかに宣言しておく。

このバトルは菊池氏の負けだ。

菊池氏の主張というのは結局、「日頃から良い設計コードを書いていればコードの再利用も容易なはずだ」という「Javaプログラマかくあるべし」論だ。

だから菊池氏は自分の勝利を確信しているだろう。「低能プログラマを叩きのめしたぜ万歳!」

ところが、このネットバトルの勝利条件は「どちらが優れたプログラマか」では無い。もともと他言語との比較でJavaメリットが問われているから、Javaプログラマを叩きのめしても意味がない。

そこで「優れた設計に基づく既存のコードを簡単に再利用できるのがJavaメリットだ」と答えても、「その優れた設計に基づく既存のコードというのはどこにあるんですか?」と訊かれる。(ここでの「優れた設計」は、RDBMSbigtableになりGAEのSandBoxの縛りがあっても容易に移植できる設計でなければならない。)

さて、この問いに胸を張って「いくらでもある」と答えられるJavaプログラマがどれほどいるのだろうか?百歩譲って自身が優れた設計に基づくコードしか書いてこなかったとして、Java界全体を代表して発言してもなお結論が変わらないと言えるだろうか?

つまり、他言語使いに問われた時に「俺の書いたものに限らず、Javaの既存コードはたいてい再利用できる」と言えるだろうか?

答えは否だ。嘆かわしかろうが何だろうが、否だ。

さて、このネットバトルの勝利条件は何であろうか。

それは、「GAEJavaを使うメリットをより的確に表現する事」だ。

菊池氏はその答案として、理想論ないし机上の空論を掲げた。

id:higayasuo氏の答えは大要「慣れた言語で書ける事」だ。格好良くはないが、現実的な答えだ。

菊池氏の答えが全く説得力がない以上、id:higayasuo氏の答えの説得力が弱く反論が容易であったとしても、1ピコグラムでも説得力を有する以上は、天秤はid:higayasuo氏に傾くのだ。

このネットバトルの勝者はid:higayasuo氏だ。

これは、JavaPython勝敗とは関係のない世界の話。

ところでGAEJavaサポートメリットは、Java上で動く多数の言語が使えるようになる事だ、と言ってみるテスト

2009-03-17

http://anond.hatelabo.jp/20090317083912

このスレッドなご時勢に、新しいウィンドウを開くのに新しいプロセスがいるって前提がそもそもなんだかなぁ、と。スレッド関係ないけど。

ウィンドウ作ること自体がメニューやボタンとかのリソースもだし、イベントとかUI的なコンテキストスイッチリソースの消費もある、という話なので、プロセス関係ないけど。

ってか、あれはタブ毎じゃなくてサイト毎にレンダーを動かすって話じゃなかったかな?タブ毎だったっけ。←たしかにタブ毎だった。

関係あるのはIPCとプロセスオーバーヘッドか。一見スレッドモデルからの退化と思えて、実際は複数プロセスによる分散処理なわけで、DCOMとかで他マシン上にプロセスもって行けば、そのままクラスタ対応型ブラウザなわけだ。

いかにもgoogleらしいアプローチ

追記

http://blog.livedoor.jp/nshun583/archives/402730.html

http://www.itmedia.co.jp/enterprise/articles/0809/17/news013.html

2009-03-13

本を読むのが早い人は、文字から意味へと直接変換できるらしい から 政治家の演説は何故つまらないかについて

本を読むのが早い人は、文字から意味へと直接変換できるらしい から 政治家の演説は何故つまらないかについて

http://anond.hatelabo.jp/20090313013634

漢字の思い込みでの読み間違いのエントリーがあるが、まさに麻生漢字の読み間違いはそういったことなんじゃないかと思う。

なまじ本とか読んでるから、頭の中でそれが定着しちゃってるのだろう、と。

特に本での読み間違いは、朗読でもしていない限り他人に指摘されることはないだろうし。

連想増田からさらに連想増田してみ増田

本を読むのが早い人は、文字から意味へと直接変換ができるらしい

本というか文字を読むのが早い人というか、本をたくさん読む人と、そうでない人の違いというのはずばり「文字から意味イメージ)への直接変換ができるかどうか」にあるのだそうだ。それができるかどうかで、全然読む速度が違ってくる。

そうなると、特に表意文字である"漢字"と言うのは、もはや読み方など関係なく、文字だけで意味を拾えてしまうのでやはりこの場合は漢字の読み間違いなどは関係なく意味が読めてしまう。

これができない……読んだ文字を一度頭の中で再生して、それで意味を読んでいる人にはイメージしにくいかも知れないので例を出すと「中国語日本語漢字は同じで意味は同じで筆談である程度話ができてしまう」と言うことがある。このときには発音は関係なく直接文字から理解しているのであるが(むしろ読み方が違うので発音すると通じない)これを常にやっていると言ったらわかるだろうか。

そうなると、一度脳内で読み上げてるとオーバーヘッドがあるなしでは全く読む速度や効率が変わってくるのである。また、音声に変換する手間だけではなく、入力デバイスたる体から脳へつながる神経の帯域幅は、おそらく耳よりも目のほうが圧倒的に広く、入力できる情報量は目の法が圧倒的に多いはずだ。もしかしたらつながっている部位も処理の方法も異なって、直接入力ができる人と、頭の中で描いているイメージすら異なるかも知れない。

パソコンに例えると、ビットを直接ストリームで送れるデジタル通信と、一度音響プラで音声に変換しなければならない通信との違いと言ったら(一部の人には)わかりやすいだろうか。

おそらく麻生氏を初めとした「意味は読み取れるけど発音すると上手くできない」人はそういう脳の構造になっているのではなかろうか。

もちろん中には異常に高性能で超広帯域でつながった音響プラを持っていて、脳内で超高速音声通信を可能にしている専用回路を持つ人もいるかも知れない。そういう人はおそらく読み上げる文章を書く仕事をしているのではないかと思う。つまり脳内言葉の響きをシミュレーションできる人だ。たとえば劇作家とか、脚本家とか、放送作家とか。

そして、優秀なスピーチライターとか。

日本の政治家の演説は何故つまらないかについて - スピーチライターに求められる能力

日本には答弁書を書く役人政策秘書はいても、スピーチライターと言うのはあまり聞かない。これは何故かというと、スピーチライターに必要とされている能力が、政策を策定するために大量に文章を読んで咀嚼する能力と、言葉に出して読む、響きがいい言葉音楽のようにつなげる能力は、わりと相反するからではないだろうか

しかし、日本語漢字という表意文字を用いる言語である。そのため、政治に携わる者、エリートとして国を動かす者などは、どうしても自然言葉を頭の中で響きよくシミュレーションする能力ではなく、言葉意味に直接変換する能力が強くなっていってしまう。意識せずに当たり前に文章を読み、文章を書くと、文字から直接意味を読み取り、意味を込めた文章を紡ぐ。しかしこれではどうしても響きのよい言葉は生まれにくいのではないだろうか。

また、下手をすれば、文章を一度音声に変換してから理解するように、耳で聞いた音を一度言葉に直してから意味に変換している可能性はないだろうか。もしそうだとすると、音から直接意味を拾うことのできる人とは、頭の中で描いているイメージすら異なるかも知れない。また、これだと声に出して呼んでも一度脳内で文字に変換しているため、上手く処理できないのではないか。

さらにこれは、政治家だけの問題ではなく、どうしてもスピーチが堅く強ばったものになってしまう人に共通すると思う。

では、以上の仮説からスピーチをよくするにはどうしたらいいのか。当然それは音楽のように響きを組み合わせてスピーチを作れるスピーチライターを呼んでくる、と言う解決策もあるだろうが、それはすぐにできるわけではない。

ならどうするか。それは、文章を書かない事ではないかと思う。

つまり文章を書くのではなく、ICレコーダでも何でもよい、声に出して文章を作り録音し、それを編集することで原稿を作る、つまり口述筆記だ(いや、この場合は筆記は最後にしかしないのでこ筆記ですらないかもしれない)。こうすれば自然と音声でスピーチが作成できるし、文章を読み上げているような堅い文章にはならず、音声で相手に届くものができるのではないだろうか。

いかがだろうか。


てか、口述筆記したものを音声のまま組み替える(編集する)事に特化したようなソフトってないかなぁ。音声の編集ならDTM系ならいくらでも流用できそうな気がするけれど、アウトラインエディター的に言葉を章にわけて、自由に組み替える事ができたらおもしろいと思うんだけどどうだろう。なにかないかな。

2009-02-25

http://anond.hatelabo.jp/20090225031554

オーバーヘッドとかの問題と言うよりは、単純にああいうケースの定石的な方法を知りたかったんです。

なので、

まぁ、ごく普通にやるなら

点のコレクションクラス作って、存在する点のIDハッシュでコレクションクラスに持たせた上で

リスト構造あたりで点のデータを保持しとけば良いんじゃないかね?

必要なら、点コレクションクラスを空間クラスにおいても良いが

これは正に求めていた回答です。ありがとうございます。

2009-02-24

http://anond.hatelabo.jp/20090224164924

topページのデザインに5万は割に合わないが、10ページ50万なら割に合う。

打合せとかのオーバーヘッドを考えると、例え単価が同じでも1ページだけじゃ割に合わんのよ。

2009-01-25

http://anond.hatelabo.jp/20090125110204

この辺のコンプライアンスの極端な酷さは、そのまま日本社会システムオーバーヘッドとなっている。契約書が信じられない社会というのは、現代社会ではもの凄く無駄でめんどくさい話なんだ。

まあ、日本契約書や規則より明文化されない「空気」を読むことが最重視される国だから・・・

2008-10-30

http://anond.hatelabo.jp/20081025202001

いまさらだがFizzBuzz

1から100まで、3の倍数5の倍数云々って、全部定数の計算じゃね?

というところに気付き、自称メタプログラマー(略してメタグラマー)俺の血が騒いだ。

定数計算なら、それは実行時ではなくコンパイル時に行なわれるべきだ……。

というわけでC++テンプレートメタプログラミング召喚。

#include <iostream>

const int FIZZ_NUM = 3;
const int BUZZ_NUM = 5;
const int BEGIN_NUM = 1;
const int END_NUM = 101;

template<int N> struct Fizz {
    enum {PRINT = 0, NEXT = N + 1};
    static void print() {}
};

template<int N> struct Buzz {
    enum {PRINT = 0, NEXT = N + 1};
    static void print() {}
};

template<int N, bool ForB> struct Number {static void print() {std::cout << N;}};

template<> struct Fizz<FIZZ_NUM> {
    enum {PRINT = 1, NEXT = 1};
    static void print() {std::cout << "Fizz";}
};

template<> struct Buzz<BUZZ_NUM> {
    enum {PRINT = 1, NEXT = 1};
    static void print() {std::cout << "Buzz";}
};

template<int N> struct Number<N, true> {static void print() {}};

template<int N, int F, int B> struct FizzBuzz {
    static void print() {
        typedef ::Fizz<F> Fizz;
        typedef ::Buzz<B> Buzz;
        
        Fizz::print();
        Buzz::print();
        Number<N, Fizz::PRINT || Buzz::PRINT>::print();
        std::cout << std::endl;
        
        FizzBuzz<N + 1, Fizz::NEXT, Buzz::NEXT>::print();
    }
};

template<int F, int B> struct FizzBuzz<END_NUM, F, B> {static void print() {}};

int main(int argc, char **argv)
{
    FizzBuzz<BEGIN_NUM, 1, 1>::print();
    return 0;
}

ifなし%なしループ系なし、しかも実行時オーバーヘッドなし!(多分)

あ、これを見て理解する人間オーバーヘッドは無視ね。

ああ、久しぶりにC++を触ったけど、やっぱC++テンプレートってダメダメだな。20世紀の遺物といわざるを得ない。

君がもし21世紀モテイケメンメタグラマーなら、21世紀プログラミング言語D言語を使うべきだ!

驚くべきことに、D言語コンパイル時に関数が実行でき、その結果をソースコードとして取り込める!

ただし実行できるのは簡単な関数だけだけど……。

以下、それを使ったD言語によるメタプログラミング的実装。

import std.stdio;

// これでFizzBuzzを全部出力するコードを作るぜ!
string makeFizzBuzzCode() {
    string code;
    for(int i = 1; i <= 100; ++i) {
        // 効率? コンパイル時にそんな配慮は要らん!
        if(i % 3 == 0 &amp;&amp; i % 5 == 0) {
            code ~= "writefln(\"FizzBuzz\");\n";
        } else if(i % 3 == 0) {
            code ~= "writefln(\"Fizz\");\n";
        } else if(i % 5 == 0) {
            code ~= "writefln(\"Buzz\");\n";
        } else {
            code ~= "writefln(" ~ static_itoa(i) ~ ");\n";
        }
    }
    return code;
}

int main(string[] args) {
    // おまけで生成されたコードも見せるよ。
    pragma(msg, makeFizzBuzzCode());
    
    // 生成したコードを埋め込む。コピペみたいな感覚
    mixin(makeFizzBuzzCode);
    return 0;
}

// 以下ユーティリティ。このぐらい標準で欲しいな……。

/// 整数文字列変換(コンパイル時)
string static_itoa(int n) {
    if(n == 0) {
        return "0";
    }
    
    // 10で割りながら余りを文字にして追加。桁が逆転した文字列になる。
    string s;
    for(; n; n /= 10) {
        s ~= ("0123456789")[n % 10];
    }
    
    // 桁位置を正常にする。相変わらず効率無視。
    return static_reverse(s);
}

/// 配列リバースコンパイル時)
/// 実行時ならarray.reverseが使えるんだけどね……。
T[] static_reverse(T)(T[] s) {
    T[] result;
    foreach_reverse(c; s) {
        result ~= c;
    }
    return result;
}

// 心配なので静的ユニットテスト(笑)
unittest {
    static assert(static_itoa(0) == "0");
    static assert(static_itoa(10) == "10");
    static assert(static_itoa(999) == "999");
    static assert(static_itoa(9999) == "9999");
    static assert(static_itoa(12345) == "12345");
    static assert(static_itoa(314159265) == "314159265");
}

コンパイル結果

$ dmd -unittest fizz_buzz.d
writefln(1);
writefln(2);
writefln("Fizz");
writefln(4);
writefln("Buzz");
writefln("Fizz");
writefln(7);
writefln(8);
writefln("Fizz");
writefln("Buzz");
writefln(11);
writefln("Fizz");
writefln(13);
writefln(14);
writefln("FizzBu(ry

出力結果は略。

さすがD言語C++JavaC#にできない事を平然とやってのけるッ

そこにシビれる!あこがれるゥ!

というか、

writefln(1);
writefln(2);
writefln("Fizz");
writefln(4);

もうwritefln(出力関数)要らなくね?

修正。

// これでFizzBuzzを全部出力するぜ!
string makeFizzBuzzCode() {
    string code;
    for(int i = 1; i <= 100; ++i) {
        // 効率? コンパイル時にそんな配慮は要らん!
        if(i % 3 == 0 &amp;&amp; i % 5 == 0) {
            code ~= "FizzBuzz\n";
        } else if(i % 3 == 0) {
            code ~= "Fizz\n";
        } else if(i % 5 == 0) {
            code ~= "Buzz\n";
        } else {
            code ~= static_itoa(i) ~ "\n";
        }
    }
    return code;
}

int main(string[] args) {
    // もうコンパイル時のメッセージしか出さない。(笑)
    pragma(msg, makeFizzBuzzCode());
    return 0;
}

コンパイル結果。

$ dmd -unittest fizz_buzz.d
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBu(ry

実行するまでもなく結果が出力された。つまり実行時間ゼロ、ということは……

世 界 最 速

以上、世界最速なD言語宣伝でした。

みんな使おうD言語

D言語リファレンス日本語

http://www.kmonos.net/alang/d/1.0/index.html(1.0。こっちの方が安定してる?)

http://www.kmonos.net/alang/d/2.0/index.html(もっと凄い2.0)

D言語本家配布元(無料コンパイラが入手できます)

http://www.digitalmars.com/

それにしても、ちゃんとD言語シンタックスハイライトを実装しているはてなは偉い。(笑)

2008-03-04

http://anond.hatelabo.jp/20080303234519

やっぱりpolipoはあくまでもプロ騎士なだけに、

初めて閲覧するページではオーバーヘッドが目立つだけなのかな。

パイプライン処理とかは普通火狐でもやってるしね。

2007-07-20

http://anond.hatelabo.jp/20070720125436

その昔HTMLソースはエレガントであるべきでそのためには手打ち以外にないという職人派が居ましたね。

理由はいろいろいわれましたが結局は経済的な問題のためです。ドキュメントを表示するクライアントマシンリソースとそのデータを取得する通信回線の帯域がとても少なく貴重であり、そのために通信量が少なくなるように簡潔なデータで再現にマシンの負担が無いように無駄ドキュメント要素の無い「エレガント」なソースが求められました。

さらに当時Webコードを書くのは物好きでしかなく、金になりませんでしたので労働単価が安く、コード人間様が調整するほうが安く済んだのです。

そして今目の前にあるのは有り余るマシンリソースP2P以外に使い切れないような通信帯域。はっきり言って見た目が同じならいいです。(適当すぎて原因特定もできないトラブルが頻出して手間が増えるのは問題だけど)あまり気にするのは偏執であり、不経済です。

データの再利用も機械データを整理するべきで忙しい人間様を煩わせてはいけません。つまりそれはSEOデータの分析が商売であるGoogle側が頑張るべきことでこちらがやることではないということです。

一部のエンタープライズサイトではCSS等駆使したキレイな構造化による効率化はクリティカルに効くでしょうが、現実アドホックに組んでるその他圧倒的なページは数十ページ程度で局所的に最適化していてもシステムメリットは出ず、その規模ではむしろ抽象化上昇でオーバーヘッドの増加となるでしょう。

とはいえSEO見積書の行数が稼げるならなにかと手間が増えた方が商売になるというものでもありまして、まあ良い時代になったのですよとごまかすのも処世と。

2007-01-19

入力と関数と出力があって、同じ入力を複数のアルゴリズムで実装された各関数に与え、出力結果が異なるものがあれば異常発生と見なし、システムを停止するなり多数決を行うなり、って話?

 朴訥に実装した関数と、こりこりに最適化した関数に、それぞれデータを食わして……みたいな話は既に行われてるよ。朴訥な方は速度が遅いから、テスト段階で、って話だけど。

 逆だ逆。無料Webサービスは量で勝負(客数/鯖代)なんだから、実装の冗長化なんて無理(一番遅い実装に速度が引き摺られることになるし、結果の照合を行うプログラムオーバーヘッドもある)。どうしたって「確実で早い唯一の実装」が求められる。だからテストケースを増やしたり、目を増やしたりするわけだ。

 処理コスト時間コストを使っても安全性が欲しい部分でなら使えるんじゃね?

追記

 っていうか前提がおかしいんだな

 これはYesだけど

 これはNoだなぁ。

 「ちゃんと書ける人がちゃんと書く」ならテストデバッグに掛かるコストは大幅に減少する。

 No.比例するに決まってるじゃん。

 例外は「労働力」を「時間」と捉えた場合か。「まともな技術者を1ヶ月使う」「まともでない技術者を6ヶ月使う」を同じだと思った場合とか。

  • 動作時間を測定したり、得られる数値が予想の範囲かどうかを判定するなど、簡単な測定で「正しく動いたのかどうか」の検証が可能

 測定はできるかもしれん。だけど、前2項がYesであるような酷いプロジェクトでは、余計な混乱を招くだけだろう。

 4番目がYesなら2番目3番目はNoだろうから、前提全てが満たされることはない。

2007-01-09

それTui

しかし、自動化やマネージメントは、本質的には、あらゆる業務の能率を上げていく

メタスキルであり、とくに日々の業務のなかで発生するちょっとした繰り返し作業は、

その業務分野の専門知識に乏しいプログラマーにアウトソースすると、

プログラマに業務内容を説明するオーバーヘッドの方が大きくなってしまうだろう。

大多数が余裕を持って暮らせる豊かな社会の作り方

http://d.hatena.ne.jp/fromdusktildawn/20061231/1167563326

業務アプリは業務を知っている人間が書くべきだ。

でも非プログラマプログラミング知識がないため、プログラマが長い時間をかけてヒアリングして仕様を起こしコードに落とし込む。でもそこまでのしきいがコスト時間面で高いため、簡単な業務はいつまでも自動化されない。

自動化とはちょっと違うけど、情報共有でいえばTuigwaaが解法のひとつとなりうる。

Tuigwaa を使えば、現場で働く人たちが、自分たちの業務効率を向上させる為に 自分たちで DB と連動する Web アプリケーションシステムを作ることができます。

つまり、Tuigwaaボトムアップで企業の生産性向上を実現するためのツールを目指しています。

WebUDA Tuigwaaとは

http://tuigwaa.sandbox.seasar.org/index.html#WebUDA_Tuigwaa%E3%81%A8%E3%81%AF

ログイン ユーザー登録
ようこそ ゲスト さん