プログラミング

TMP : Template Meta Programming

Template Metaprograms 前回に引き続いて再びC++Reportから。今度はテンプレートメタプログラミング(TMP)の記事を読んでみた。TMPとは、簡単にいうと、テンプレートを特殊化するプロセスを応用してコンパイルと同時に実行結果を生成するテクニックといって…

Traits : C++ template technique

今更ながらC++を学んでいる。単なるOOP機能を備えたCとしてではなくC++固有の機能をもっと活用しようと思ったのがきっかけ。巷ではリーナス・トーバルズ氏のようにC++をボロクソにけなす人達がいるけれど、Cは基本的なデータ構造を扱う標準ライブラリが存在…

マルチスレッドプログラミング

最近、マルチスレッドを使ったプログラムを書くことがあって、これを機にオライリーの「Pthreadsプログラミング」を読んでみました。本書はタイトルの通りPOSIXスレッドAPIの解説書ですが、マルチスレッドプログラミング自体の概要を押さえるのにも役に立つ…

OBJ形式の3DモデルデータからCコードを自動生成

旧Wavefront Technologies 社の OBJ 形式で保存された3DモデルデータからCコードを自動生成するツールを作成したので公開します。 http://homepage.mac.com/radio_nights/files/obj_parser.tar.gz 次のように引数に .obj ファイルのパスを指定すると標準出力…

MacOSXのデバッグ手法(1)

就職活動が苦戦しています。いまだ最終面接すらいけない始末。おかげで最近はちょっと自信喪失気味です...。 § さて、今回はちょっと気分を変えて、MacOSXにおけるデバッグ手法を一つ紹介。 MacOSのメモリアロケーターは、標準でデバッグを支援する様々な…

メモリ管理

最近、ある事情からメモリ管理の手法を調べることになり、ウェブ上の資料を漁っていました。 § まず最初にあたったのは、「The Memory Management Reference」。このサイトは、メモリ管理が抱える問題点やその解決手法を傍観するのに便利でした。 一般にメモ…

ソーシャルブックマークのデータマイニング

Kikker の学習の仕組みと Rocchio アルゴリズム - naoyaのはてなダイアリー から。 ずっと以前に del.icio.us の登録タグを利用して、これと似たように Cosine similarity からユーザー間の類似性を計算するプログラムを作ったことがあります。 きっかけは、…

シュリックの反射モデル (1)

自作レンダラーにシュリックの反射モデルを導入してみました。このモデルの発案者であるシュリック氏の論文「An Inexpensive BRDF Model for Physically-based Rendring」に従って素直に実装しただけですが、案の定、不自然な箇所が多くまだまだこれからです…

ヒープ(バイナリヒープ)

Good Math, Bad Math : Binary Heaps ヒープは、スタックやキューと並びシンプルで強力なデータ構造です。ヒープとは、木構造の一種で要素の挿入と最大値(又は最小値)の要素の削除の計算量が共にO(logN)。このヒープを2分木で表現したものを、バイナリヒー…

ノイズの削減と間接照明

約一ヶ月休んでましたが、色々蹴つまづきながらも開発は進んでます。いまは人生初めての就職活動に挑むにあたって、身辺がばたばたして心が落ち着きません。ああ、早く定職に就きたい...§ここ1週間は、レンダリング処理に様々な問題が見つかり、その解決…

対応フォーマットの件

決定を保留していた対応フォーマットの件ですが、正直、ベンダー独自のフォーマットの仕様を一から理解するのが面倒くさいので、とりあえず既に知っていてるPLYに対応することにします。実装に関しては、スタンフォード大学がCのライブラリを公開しているの…

kdツリーできましたが...

ひとまずkdツリーを使ってレンダリングできるようになったのですが、レイを使ってツリーをトラバースする処理のオーバーヘッドが大きすぎてかえって実行速度が遅くなってしまいました。作業PC上で計測した実時間の比較では2倍以上遅いです。 プロファイラで…

kdツリーの構築

ようやくkdツリーを構築することが出来ました。ケアレスミスのせいでAABBと三角形の交差判定処理の実装に少々時間がかかってしまいましたが、なんとか動いてくれてほっとしてます。先日作成したビューワーで生成したツリーを表示させてみたところ、期待する…

ヘッダーファイルの循環参照

もう昔から散々言われている話題だと思いますが、ヘッダーファイルの循環参照に手を焼いています。相互に定義を参照するケースが増えた結果、前方宣言を忘れたために引き起こるコンパイルエラーが多発するようになり、ウザくてたまりません。エラーを解消す…

3次元モデルを閲覧するビューワー

簡単にプロファイラでレイトレーサーの処理時間を計測したところ、やはりレイとオブジェクトとの交差判定がボトルネックになっていることが分かりました。元々、コーディングにおいてあまり実行速度を配慮してない事もあるのですが、このままだとレンダリン…

レイトレーサーを作ってみました

2月末に仕事を辞めて以来、ろくに転職活動もせず時間が余っていたので、少し大きめのプログラムに取り組もうと思いレイトレーサーを作ってみました。先月からC++でコードを書き始めて約2週間、ようやくそれらしい結果が出力できるようになりました。下の画…

フラクタル図形

最近なんだかC++がなつかしくなってきて再び触り始めました。「これからは無闇に流行を追い求めるのを止めて、ひたすら地味路線で行く」と決め込んだ今の私にとっては、RubyやPythonなど流行のスクリプト言語よりも質実剛健な雰囲気のC++の方が適してるのか…

べき乗法

線形代数に関連した数値計算の手法として、べき乗法があります。べき乗法とは、固有値と固有ベクトルの性質から、ベクトルに行列を繰り返しかけることで絶対値最大の固有値とそれに属する固有ベクトルを求める方法です。計算手順が行列の次数に依らないので…

英文ページを読むのに便利なブックマークレット

英文のウェブページを読んでいて意味が取りにくい場合、おおまかな意味を掴むために時々翻訳サービスを使います。 そんな時、Google依存度が非常に高い私は(ブログははてダですけど)、大抵Google 翻訳を使ってしまうのですが、公開されているブックマーク…

MacOSXでp4mergeを使う

MacOSXのターミナルからSubversionの差分ビューワとしてp4mergeを使う方法です。 本来ならば、TortoiseSVNと組み合わせて使うのが理想なのですが、あいにくTortoiseSVNがMacOSXに対応していないので、CLIツールと組み合わせて利用できるよう工夫してみました…

Rails1.*で新旧のGemパッケージを両立させる方法

RubyGems(1.0)とCapistrano(2.0)のアップグレードにともなって、Rails1.*で開発したアプリケーションの起動やデプロイが失敗する場合があります。 素直にRailsをアップグレード出来たら良いのですが、プロジェクトの事情により古いバージョンのまま運用…

「英辞郎」検索用ブックマークレット

普段から英語の単語やフレーズを調べる時はスペースアルクの英和・和英辞書「英辞郎」を使っています。 デスクトップアプリなのでオフラインでも使えて重宝しているのですが、職場のPCには「英辞郎」をインストールしていないので、代わりに次のようなブック…

Hashオブジェクトのキー変換

Railsでアプリケーションを作っていると、Hashオブジェクトのキーをシンボルで扱うことが多いので、わざわざキーを文字列からシンボルに変換して統一することがあります。 でも、Hashオブジェクトがネストしたりしていると、このキーの変換処理がとても煩雑…

RDocの文字セット

今仕事で作ったRailsアプリケーションのドキュメントを書いているのですが、気になった点が一つ。RailsにはRDocを生成するためのdoc:appタスクが用意されていますが、rakeコマンドからRDocの文字セットを指定できません。 このため、デフォルト文字セット(I…

遅延評価によるifの再実装

組み込みの条件式(ifやcondなど)を使わずに遅延評価を使ってifを再実装してみました。 もっと簡潔に書けそうな気がしますが、とりあえずここまで。 (define-syntax my-if (syntax-rules () ((_ test then else) (let ((proc (lambda (test then else) (or …

π計算(Scheme版)

既に誰かがやっているんだろうが、クロージャによる超軽量並行プロセスの簡単実装法で紹介されたπ計算をSchemeで実装してみた。実際にコードを書いてみることで、並行プロセスを使用したプログラミングスタイルがちょっと掴めた気がする。 (use util.queue) …

分割数・続き

自然数を[分割]して得られた数列を各要素と同じ数だけ点を並べて表現してみよう。例えば、 14 = 6 + 4 + 3 + 1 をこのルールに従って表現すると次のようなパターンができる。 ●●●● ●●● ●●● ●● ● ● このように分割を複数の点で視覚化したパターンのことを[Fer…

Longest Increasing Subsequence

最近「Longest Increasing Subsequence」という問題を知りました。問題の内容は、 自然数からなるランダムな数列の中から最長の増加部分列(Longest Increasing Subsequence)を探す という単純なものでグラフ問題の一種だそうです(http://en.wikipedia.org…

Fizz-Buzz問題(Scheme版)

巷で「Fizz-Buzz問題」が流行っているみたいなので、私も解いてみました。 ただし、3分以上かかってしまいましたが...。 (define (fizz-buzz) (letrec ((loop (lambda (n result) (if (< n 1) result (cond ((= (remainder n 15) 0) (loop (- n 1) (cons…