programming
について書くはずだったんだけど何を書くのかわすれた!とりあえず基礎的なことについてまとめておく。 バイナリはunstrippedなものを使用 できれば-gオプションこみでコンパイルしておく。 coredumpを吐くようにbashを設定 ulimit組み込みコマンドを使用 ul…
public domainなSHA-1実装で知られるsha1.cですが、x86_64で使うとsizeof(long)==4を前提に作られているため、メモリ破壊を引き起こします。unsigned longをuint32_tに置換するとうまくいきました。http://nyaxtstep.com/trac/nxfs/browser/sha1/sha1.c?rev=…
d:id:nyaxt:20080322の続きid:ototoiさんにいろいろ教えてもらったのでメモ。
via. http://www.kmonos.net/wlog/83.html#_1255080321この件に関してはずっと誤解していたので、調べてみた。 昨日の#lowhacksで騒いでいた件のまとめ。「C-torで例外を投げてはいけない」というのは、確かに迷信のようだ。
元ネタ:Boost::Serializationの class Member { // ここで一括管理できる friend class Hoge; friend class Hage; friend class Fuga; private: template<typename T> static void func(T& t) { t.func(); } }; class Himitu { friend class Member; private: void func</typename>…
http://kikyou.info/diary/?200712#i9_1気になる。結構nytrと近いものになる予感。DAGによる解決とかKilaueaのSPOTシステムにかなり近い感じ。ソースでてきたら見る。
スレッドキャンセル機構にバグがあった。修正。実行中のスレッドをcancel()するのは問題ないのだが、既に終了しているスレッドのFThreadクラスインスタンスをcancel()すると既にfreeされたメモリを参照してしまう。原因はスレッドキャンセルのフラグのdelete…
_heapchk()のassertを怪しそうな場所に入れまくるといいらしい。今回はそれでは発見できず、適当にデバッガで遊んでいたらそれらしいアドレスがポインタに入っているのを偶然発見できたので助かった。デバッグ用メモリ管理ラッパやLinux使えるならValgrindを…
させました。あんまりテストしていないので、速度気にしない方は一つ前のリビジョンのがいいかも。shinichiro_h様、アップロードの件対応ありがとうございました。
さて公開すっか、と思ったらアップデートされてるー。取り込んだら公開します。けっこうがしがしコード入れ替えちゃったのでmodとして独立に公開することにします。適当にマルチディスプレイ対応にしたせいで重くなっているのも事実なので。ご迷惑でしたらパ…
rendering algorithm forumに書き込もうとしたら繋がらなかったので…http://liar.bramz.org/非常にアグレッシブな?ヨーロッパの学生さんによるレンダラ。レンダリングアルゴリズム実装部はすべてPython拡張として作られていて、Pythonからレンダラ部の動的…
これは恥ずかしい。既に公式であったのか。http://www.dekorte.com/projects/opensource/libCoroutine/自前バージョンから移行せねば。追記: 移行するかと思ったけれど、中身をよく見るとbasekitという謎のCライブラリに依存したまま、libcoroutineディレク…
duck typing: func(T& container) STL型: iterator begin, end C風: T* ary, unsigned int ncount
お勧めなのではてブだけでなくこっちにも載せとくhttp://www.gotw.ca/gotw/index.htm
boost::arrayつかっててちょっと気になった。
動的配列を管理しようとする際、auto_ptrは単体deleteを呼んでしまうのでいろいろと都合が悪い。適当にぐぐってみるとstd::vectorを使えという意見が目立つ。しかしこれではC風の関数(const T* ary, unsigned int nCount)とか呼び出すときに困ってしまう。bo…
不正ファイル読み込みによって任意のコードが走るとか。皆さん対策してますか?今回のLhacaであったようなタイプの脆弱性を見つけるには、Fuzz Test(IBMによる解説)が有効のようです。インターネットを介した通信を行うようなソフトウェアだと流石にセキュリ…
http://d.hatena.ne.jp/nyaxt/20070430#1177938827これってD-torをprotectedにすれば問題ないのでは?あとで試す。
allocaってローカル変数の配置をどうするのか謎に思っていた。
3ds max用スクリプティング言語MAXScriptを軽く触ってみた印象。構文が今までに読んだことのあるどの言語とも違い独特 ブロックが{}ではなく() メソッド引数区切りにコンマはいらない。(Haskellライク?) 関数定義がfn {関数名} = () return省略するとブロ…
処理ブロックごとに何をしているのか概要を入れる。一行ごとにコメントは入れるようなことをせず、わかりやすいコーディングを心がける。1行に対するコメントが必要な状況に至った場合、わかりやすくなるようにコード自体を書き換える、又は関数のインターフ…
publicメソッドのコメントは全部かく。JavaDoc形式。コンストラクタ、デストラクタにコメントをつけるべきか迷ったが、param説明を促すためにplace holderとしておいておく。メソッド定義が1画面に入りきらなくなったら分割する。分割が難しい場合はインデン…
改善の余地アリ。基本的にハンガリアン記法+lowerCamelCaseを使います。
最後の要素の末尾にもコンマ(,)を置く。diff最小化の為。 // example enum { //! description asdf HEADER_ITEM1, //! description bsdf HEADER_ITEM2, };
コーディングスタイルを固定していく試み。 class Interface { virtual void asdf() = 0; // pure virtual なので virtual必須 virtual void bsdf() = 0; }; class ImplBase : public Interface { virtual void asdf(); // virtualキーワードはC++規約的には…
派生クラスのデストラクタはvirtual指定して仮想関数にしてやらないと、上位クラスポインタからdeleteしたときに正しくデストラクタが呼ばれません。 ただ、上位クラス、下位クラス共にPlain Old Objectよろしくデストラクタの処理が全く必要ない場合があり…
strlcpyとか使おう。標準じゃないから定義されていない場合の独自実装も用意しておくこと
d:id:nyaxt:20070326の続き。eraseの戻り値がない場合*1は、i++でも問題ないっぽい?要検証。 *1:Mac OSXのstd::map::eraseとか
GCCだとうまく解析してくれないので、明示的にtemplateキーワードを指定してやる。http://ml.tietew.jp/cppll/cppll/thread_articles/8828
他スレッドで作られたFiberにはSwitchToFiberできない模様。fectiではWorkerProcのインスタンスを複数もたせれば解決できるな。