開発

ソートの速度を決める要因についてメモ

思いつく限りの要因をあげてみる。 データ内容 個別比較が必要かどうか 比較にかかる時間 比較の分割性 比較の並列度 データ 要素数 読み込みにかかる時間 読み込みの並列度 交換にかかる時間 交換の並列度 ワーキングメモリ 要素数 再帰段数 読み込みにかか…

「経済学と似ている」というのは未科学ということだからね。

http://www.symmetric.co.jp/hiyama/SoftwareEngineering.htmの話。http://d.hatena.ne.jp/kilrey/20090226#p1とも関連する。 大事なことなので二度引用する。 僕自身は、ソフトウェア工学を、「どうでもいい(したがって、あまり役に 立たない)ソフトウェ…

挿入ソートの話の途中経過

Atom/gcc -O3だとループ変数をj=iからj=i-1に変えるといった、本質的ではない変更でも20〜30%の速度変化が起こり得るようだ。これはiccで比較してみた方が良いかもしれない。それらを含めた印象としては Wikipedia版もやね版も最適化がよく効いている場合に…

v8もたらいまわし

http://d.hatena.ne.jp/kilrey/20091111#p2の話。 function tarai (x, y, z) { if (x <= y) { return y; } else { return tarai(tarai(x-1, y, z), tarai(y-1, z, x), tarai(z-1, x, y)); } }; for (var i = 0; i < 0x10; ++i) { (tarai(12, 6, 0)); } print…

google golangでたらいまわし

http://golang.org/の話。 とりあえずたらいまわしてみたら、gcc -O3の4倍くらいの所要時間だった。なかなか速い。 package main import "fmt" func tarai(x int, y int, z int) int { if x <= y { return y } else { return tarai(tarai(x-1, y, z), tarai(…

ダメなものはダメ

http://www.kt.rim.or.jp/%7ekbk/zakkicho/09/zakkicho0909b.html#D20090916-2の話。 exploitable な情報の格納を効果的でない (ineffective) 暗号化 (コンパイルしたパスワードをプログラムに埋め込んだ symmetric ciphers、trivial なパスワード、すべての…

「(正しく)動けば良い」

「動けば良い」と言う人はエラーが起きてから「動かないじゃないか」と文句を言う。仮令、その人の操作が間違っていたとしても言う。ある「動けば良い」と言う人が酷いバグで右往左往しているのを見て(少なくともその人の)原因に思い当たった。 その人はコー…

意図としてのコメントはこう書く

コードコメントに書くべきは「意図」 - プログラマーの脳みそ、ソースコードの心脳問題 - プログラマーの脳みその話。 初心者のコードでも、意図が書かれているならレビューは容易に行える。意図不明のコードほど手に負えないものはない。 「コメントとして…

問題はエンコーディングではないのだ。

http://itpro.nikkeibp.co.jp/article/COLUMN/20090208/324377/?ST=security&P=1からhttp://d.hatena.ne.jp/tohokuaiki/20090910/encodingの話。 ベースライン。 Webアプリケーション、ここでは一般的な用法として次の条件を満たすもの、の話に限定して進め…

万能理論=イエスマン

true/falseとpositive/negativeの話。 まずは表から。 true false positive 1. 2. negative 3. 4. 検出されるべきものが検出された。 検出されるべきでないものが検出された。 検出されるべきものが検出されない。 検出されるべきでないものが検出されない。…

ソフトウェア工学の価値

「ソフトウェア工学」についてはid:hiyamaさんのhttp://www.symmetric.co.jp/hiyama/SoftwareEngineering.htmから引用すると 僕自身は、ソフトウェア工学を、「どうでもいい(したがって、あまり役に立たない)ソフトウェア工学」と「まっとうな(役に立つと…

リファクタリング

http://d.hatena.ne.jp/masayang/20090220/1235174930からの連想。 リファクタリングはどこまでを設計プロセスと考えるかによって解釈が大きく変わってしまう。少なくとも次のような手順で進める必要があること自体は議論の余地がない。しかし、それを実際の…

事前評価

メニーコアに対応したプログラミングについて考えてみた。 手続き型パラダイムでは辛い。何故かというとシングルコアにしか対応していないから。現状の同期・排他モデルでは並列度の上昇に対応することが難しい、というより面倒くさい。さらにpthreadはあく…

STM

http://d.hatena.ne.jp/kilrey/20090214#p1に繋がる話。 現状の手続き型言語でマルチスレッド対応する場合にはセマフォなどの排他・同期条件を利用する。その排他・同期条件を利用する文法としてはJavaのsynchronizedがもっとも洗練されているだろう。単純な…

同一性は難しい。

私が私であるということに特に根拠はない。「私」という語の指すものは年単位で見れば物質が異なっていたり人格も異なっていたりする。どれも同じ一つの「私」で済ませることができるのは「人間」に対する同一性の通念に依存するのだろう。 これが「kilrey」…

アンケートの技法3・提示について

アンケートの結果をどのように提示するかについてです。提示の仕方については色々ありますが、用途によって使い分けるべきだと思います。大まかには 学術 提示した情報を元に誰でも追試ができることが必要。 商売 提示した情報を元に相手を説得できることが…

Webアプリのセキュリティ

.htaccessで deny from all allow from ... として防衛するのは一般的だ。でも、入力検査でブラック(リスト|パターン)を使っている例が多いのは何故だろう*1。 *1:サニタイズは論外。

アンケートの技法2・信頼性について

アンケートの信頼性をどのように評価するかについてです。信頼性というものはきわめて主観的な指標であり、そのままでは数学的な処理に耐えるものではありません。ここで登場するのが誤差です。誤差とは信頼性を定量化した値であり、数学的な処理が可能です…

アンケートの技法

アンケートの技法について考えてみましょう。統計学は知っているけれどアンケートを採った経験が多いわけではないので話半分に読んでください。 目標 質問紙法を用いる。 精確なデータを採取する。 要するにWebアンケートの精度を上げることを目標にしている…

初心者

プログラミングの場合は求められる技術が多岐にわたる。新しい技術に向かうときには誰だって初めてなのだけど、初心者と熟練者では習得の速度が段違いだ。それは何故か。 調べ方を知っているか否か が重要だろう。人力検索や2chで聞く初心者をよく見かけるが…

弱参照とソフト参照と...etcで気付いた。

強参照を持つオブジェクトはGCされない。 強参照を持たず、ソフト参照を持つオブジェクトはGCされるかもしれない。 強参照・ソフト参照を持たず、弱参照を持つオブジェクトはGCされる。 強参照・ソフト参照・弱参照を持たないオブジェクトはGCされる。 こう…

「不便」は長所だ。

http://www.4gamer.net/games/076/G007660/20090123016/で連想。 GPGPUと呼ぶと特殊なものに聞こえるけれど、ベクター演算に特化したコプロセッサと呼ぶと普通のものに聞こえる。その場合、コスト・パフォーマンスが最大の長所だ。 本来は特定用途専用として…

三角関数やその他の数学関数の実装法

http://d.hatena.ne.jp/tazant/20090103/1230973343#cへコメントしようとしたら長くなったので。 数学関数は数学的に明解に定義されているものであってもコンピュータで計算するのは面倒というものが多い。単純に言えばCPUは有限桁の四則演算しか出来ないの…

PEG

PEG*1のライブラリを書いた。もうちょっと手を入れてから公開するつもり。 *1:Parser Expression Grammer:wikipedia:解析表現文法

オペレータ

引数が基本型だけというオペレータ・オーバーロードは禁止されているのは知っている。それを認めてしまうと混乱の元だというのも判るし。 でも基本文法では定義されていない組み合わせは認めてほしい。せめて、実引数は基本型だけだが仮引数はその基本型から…

inline@gcc

static int test(int i) { return i*i; } int main() { return test(); } のtest()がどれだけinline化されるか試してみた。対象は手元にあるgcc-2.9.6, gcc-3.4.0, gcc-4.1.2。確認は-Sオプションで出力したgasアセンブラコードにcall testがあるかないかに…

template

超スマートポインタのC++ラッパを書いた。もうちょっとテストしたら公開する予定。その途中で気付いたことがある。 テンプレートライブラリをLGPLにするのは危険だ。 何故かというとC++のテンプレートではライブラリのソースコードをユーザのソースコード内…

自前rwlock

とりあえず前出のRWLockを実装してみた。基盤はboost::mutexとboost::conditionを使った。boostにした理由はあまりないけれど強いて言うならば比較的標準に近いというのが理由だろうか。LinuxだけでなくWinでも使えるようになったわけだし。ただし、速度は考…

template

超スマートポインタのタグを[言語]にしたのは失敗だったかな。実装レベルの話まで[言語]タグにするのは変だもの。とりあえず、超スマートポインタの話は[言語]のまま進めて、派生した実装の話は[C++]タグにすることにした。 で、templateの話だ。 template<typename T> c</typename>…