Program Technique

メモリー破壊

パティング,というのかな正式名称を実はしらないんだけど,オリジナルのバイナリファイルを8byteでパティングしてたんだけど…。それが原因で現象を再現するのがやっかいなバグを作りました。 パティングしない場合はメモリーが破壊されて,した場合はメモリ…

Googleのコーディング規約

グーグル社のコーディング規約を訳した人がいて、http://www.henshi.net/k/hiki.cgi?GoogleCppStyleGuideのページにまとまっている。 原文は読んでない。 で、実際はどうなんだろう?と思い、ちょっとGoogleのページを検索してみる。面白そうなプロジェクトG…

前回の日記のダメな点

前回の日記 ヤコビ法 - malibu-bulldogの日記 で、ヤコビ法を作って載せましたが、あれダメですね。 マトリックスを無駄にコピーしているのでめちゃくちゃ遅いです…恥ずかしいな。ってことで、コピーする箇所を修正すると500次ぐらいなら待ってられる速度に…

ヤコビ法

ラプラシアン行列を勉強するために、とりあえずヤコビ法のプログラムを作ってみました。標準入力から最初に次元の数をもらって、その後各行を受け取るプログラムです。 反復回数は適当に10回とかにしてみました(本当は非対角要素の大きさを見た方がいいか…

Makefile

オープンソースのMakefileをずいぶん更新した(というか今までリリース用のターゲットが無いこと自体大問題だったけど…)installターゲットまで追加したので、ある程度まともな(?)Makefileになったと思う。 普通はautoconfとか使うんだろうけど、そこまで…

科学技術計算ハンドブック

ラプラシアン行列の(2番目に小さな固有値に対応した)固有ベクトルを求めるのがSpectral Graphの要なので、ここ数日固有値解析のプログラムを基礎をお勉強中。もちろん、お勉強なので会社以外の場所で。大学では量子力学の数値シミュレーションとかやってた…

Refactoring

リファクタリング…まぁ、入口や入る物、出てくるものも変えず中身だけを綺麗にしていく作業。現在オープンソースで公開しているプログラムをリファクタリング中…。 自分のソースを見てみると、きったねーところあるなぁ…人の事言えねーなーと反省中。まぁ良…

アセンブラになったら

つぎのプログラムをコンパイルして実行するとどうなりますか? #include int test(int a, int b, int c) { std::cout gccでコンパイルして、a.outやってみる。さて出力結果は a = 1 b = 0 c = 2 これは予想通り?僕は予想どおりではない…。アセンブラみると…

ラプラシアンマトリックス

ラプラシアンなんて聞くと、2階微分するんだろ!なんて思ってました。数日前の日記にも書きましたが、頂点キャッシュの問題を調べていてラプラシアン行列なるものに出会いました。で、今日はお勉強して覚えた事を備忘録として。ラプラシアン行列はキルヒホ…

未来の自分へ

月曜日の自分!http://www.cs.technion.ac.il/~gotsman/AmendedPubl/SMI/SMI03.pdfを会社で読もう。

頂点キャッシュ

頂点キャッシュとは、3DCGデータを処理してディスプレイに出力するハードウェアのグラフィックボードについているキャッシュの事です。最近のグラフィックボードはPre T&L と Post T&L、そしてPrimitive Assemblyという三つのキャッシュがあります。T&Lとい…

stlもいろいろ

職場で諸般の事情により、2つのstlを使っています。ところが、片方のsortがやたら遅い。その差は100倍以上…。はじめはstlのコードの差とは思わずいろいろ調査したけど、結局stlだった。 (コードを見て確認した)こんな事があるからこそ大規模データは本当に…

ちくしょー遅くなってしまった!

フォーマットの大幅変更に対処するこれが僕の目下の仕事で。つまりコンバーターを作るわけです。 で、8割ぐらい完成してきたんだけど、コンバータした結果…描画が遅くなった!なんでぇ?とおもいつつ調べてみると、どうも頂点キャッシュのせいみたい。さぁ…

debパッケージを作る

どうにかこうにかdebパッケージを作れました。作ったパッケージの内容はrubyで作った自分用ツール(gtkを使ったGUIアプリ用のソースやMakefileの雛型を作る)。で、はまったのは3点。まずdh_makeをやるためにはソースの入ったディレクトリ名にはバージョン…

ゲーム用アルゴリズムのメーリングリスト

ちょっと調べ物をしている時発見gdalgorithms-list List Signup and Optionsグラフィック関連、人工知能とネットワークそれにサウンドまで扱うみたいです。面白そうだなぁ、入ろうかなぁ。

ソートを前提に推測して探索してみた

二分探索 - malibu-bulldogの日記 に書いたとおり、二分探索を使ってデータを探索していたんだけど…でも大規模データが対象となるとそれでも遅い!規模は「探索の対象」となるデータの数が1000万個ぐらい。 ってことで、さらに高速化にチャレンジした。…

boostとstl

昨日はゲーム会社時代の友人のサシの飲み会。久しぶりに会い、お互いプログラムが大好きなので話題は多岐にわたった。最近の新人はすさまじく出来る男がいるらしく、学生時代からboostつかってマルチスレッド当たり前みたいなプログラムを書くらしい。それか…

stl::lower_boundって便利

intのポインタを使ってlower_boundをやってみました。返り値はイテレーターってことで、intのポインタなわけです。 #include <algorithm> #include <deque> #include <iostream> using namespace std; int main() { unsigned char *tmp; tmp = (unsigned char*)(new int[10]); for( int i</iostream></deque></algorithm>…

Rubyでメソッドの戻り値

最近Rubyを勉強しなおしているんだけど、本とかは買ってなくて。 リファレンスマニュアルだけみてプログラム書いている。マニュアルのちょっとした例文とかがたよりなんで結構しんどい(笑)。 で、メソッドの戻り値をどうすればいいのかを昨日しったんで日…

Rubyで正規表現

昨日は「Rubyを使って正規表現でマッチした語句があればそれを連想配列を使って対応する文字列に書き換える」という処理をプログラムを書いてみました。"ProjectName", "author","date"という三つの単語をそれぞれ書き換えます。 #!/usr/bin/ruby =begin $Pr…

大規模データは楽しい

ここ最近、頭の中は仕事一色です。というのも、現在仕事で大規模なデータを扱っているから。 僕の大規模っていう感覚は、「例えばデータ量がGBの単位」ぐらいの話し。これぐらいの規模になると、アルゴリズムやデータ構造のちょっとした工夫が目に見えて処理…

二分探索

大量のデータがあった場合。そっからある特定のIDと合致するデータを探したい…もし、そのIDの小さい順にならんでいるなら二分法がありますね。二分法そのものに関してはアルゴリズムの本に載ってます。 さてさて、その二分法をstlで使うならこんなプログラム…

大規模データ

大規模データへのアクセスを仕事がらしょっちゅうやっているんだけど、それに関するメモ。c、c++で大規模アクセス、具体的には2GBを越えるファイルへのアクセス、する場合にWindowsなら #include として _write, _open, _lseeki64 がつかえます。 gccならア…

やりなおし症候群

現在作っているストリップ実験ソフト、ユーザーインターフェースのコードが気に入らなくて作りなおそうか迷っていた。そんな時にこの日記はてなブックマークの作り直しについて - naoyaのはてなダイアリー考えさせらる内容でした。 まだいろいろなやんでいる…

女にはわからないはダメだろう

「けっ、女にはわかんねぇんだよ」とよく言います、ガールフレンドに向かって。しかし、この言葉は技術者として最低な言葉だと、最近気づきました。技術者とは技術を愛し、そして実践する人間なら相手がそのことに興味がなく、基礎知識がないばあいでも。「…

stlというファイルフォーマット

仕事で「stlというファイルにもともとの座標にソルバで解いた変位を加算した値を出力してください」というのがきました。stl?はて…スタンダードテンプレートライブラリではないのかな? なーんて思いながらGoogle先生に「stl ファイルフォーマット」と検索…

c++のmap

初めてさわりました、マップ。とりあえず、ちょっと仕事で使いたくて、実験プログラムを作りました。iteratorやbeginとかendもつかえるんですね…。 #include #include using namespace std; int main(void) { map data; data[0] = string("aaa"); data[1] = …

サウンドプログラムがいまいち

サウンドプログラムをちょっと触ったけど、いまいち綺麗な音が出ない…ってことで、libasound-docを落としてサンプルファイルを閲覧してみたけど、これサンプルっていえんの〜?と思ってしまった…。まず、単純にコンパイル通らない!びっくり!しょうがないか…

トライアングルストリップの作り方 その1

前回の日記に引き続きトライアングルストリップネタを。画像に書いてあるような4つの三角形をトライアングルストリップとしてつくる場合を考えてみます。三角形は左回りであると仮定します。まず、左端の三角形 0-1-2をグラフィックパイプライン(座標変換…

JavaScriptのイタズラ

英語のブログでへんなコメントがついてたのでクリックすると…Firefoxが消えて、変なメッセージ。実はフォーマルなPC上での話なのであせって電源を切りました。やばい、ウィルスかな…と思いつつ再起動後仮想化環境上で再度同じページを見ました。変なメッセー…