2013/11/04(月)C++98 C++03 の POD

はてブ数 2013/11/04 16:21 プログラミング::C++つーさ

独自コンテナ template struct Container のTがPODだと、
メンバ追加時にコンストラクタもデストラクタも呼ばなくてよい。
コンテナを clear するときも、for (int i = 0; i < size(); i++) this[i]->~T(); する必要が無い。

では、型をPODとして定義するにはどうすればいいのかという話だ。

C++11の情報ばかりヒットして、
C++03までのPODについて、いまいちまとまった情報が得られないので、
自分なりに調べた情報をまとめておく。

続きを読む

2013/10/30(水)コピペ用 Crc32

はてブ数 2013/10/30 01:08 プログラミング::C++つーさ

コピペ用CRC32

#include <stdint.h>
uint32_t ComputeCRC32(void *data, size_t len, uint32_t crc = 0);
uint32_t ComputeCRC32(void *data, size_t len, uint32_t crc)
{
	static uint32_t tbl[256] = { 1 };
	if (tbl[0] == 1) for (uint32_t i = 0; i < 256; i++) { uint32_t c = i; for (int j = 0; j < 8; j++) c = (c & 1) ? (0xEDB88320 ^ (c >> 1)) : (c >> 1); tbl[i] = c; }
	uint32_t c = crc ^ 0xFFFFFFFF;
	for (size_t i = 0; i < len; i++) { c = tbl[(c ^ static_cast<uint8_t*>(data)[i]) & 0xFF] ^ (c >> 8); }
	return c ^ 0xFFFFFFFF;
}

↓おもしろいです
http://codegolf.stackexchange.com/questions/3268/compute-the-crc32-table-at-compile-time

2013/10/10(木)C++の関数の呼び出し元を調べるには?

はてブ数 2013/10/10 05:19 プログラミング::C++つーさ

つーさゎ、デバッグ用のメモリアロケータを書ぃてゐて、思つた。
標準の_CrtSetDbgFlagナントカカントカはどうも小回りが効かぬ。(というか使い方がよく分からぬ)
ちうか、operator newのoverloadはともかく、置換すんのはやだな……。
C#とかJavaScriptみたいに、関数の呼び出し元アドレスがどこかわかればなー。

かくして、インラインアセンブラの扉は開かれた。ちな、今回の舞台はx86世界な。

実現方法を少し考えてみたら、要は、関数呼び出し時にスタックに積まれてるはずの
リターンアドレス(=関数呼び出しの瞬間のEIPレジスタの値)を変数に読み出して、
それを引数に本命関数を呼び出せればいいんでしょ! ということなので……

じゃあ

こんなんでどうでしょ?

最初はこれがnewとdeleteのオーバーロードの数だけ並んでいたのだけど、
なんかもうちょっとどうにかならないかと思ってマクロにしたものが

こちらになります! ってか。

関数の呼び出し元をくすねてcallee変数に入れておいてくれる
proxy関数を作ってくれる小気味よいマクロにしてみたった。
うむ、小気味よい(陶酔)

呼び出す関数の戻り値について、橋渡しするようなコードを書いてないので、
構造体を返すような関数には使えないけど、まぁ十分というか。

かくして、つーさは、プログラムを動かしつつも
未だdeleteされてゐないnewされたブロックのリストを得る魔を得た。

Releaseビルドでも.mapファイルとcalleeを照合すれば、
呼び出し元が分かるという点、時と場を超えた強みとなろう。

めでたし めでたし。

どちらかというと、C++というよりはx86の寓話であったか。

今回作ってたメモリアロケータ(のラッパ)

双方向リンクドリストをわっかにしておいて、
空になる時の例外処理を書かずに済ますことがマイブーム。
https://gist.github.com/ttsuki/98a60653f398062b15e5

まぁ、最初から、こいつのお世話にならないよう予防策を講じてプログラムを書くのがよい。
というか、普通はそうしてるはずなので、今回の話は思ってたより役に立たなそう。
酒の肴くらいにはなるかの。

Gistって変更履歴が全部見えて恥ずかしいω

2013/09/28(土)adiary 3.00 b1.1を入れてみた。

はてブ数 2013/09/28 13:29 サイト運営::adiaryつーさ

Special Editionも購入したけど、付属テーマはadiary2用ということで、少々残念。
こんなことなら早く模様替えしておくんだった……!

というわけで 今更ながらadiary 3.00 beta 0 ではなく beta 1.1 をインストールしてみた。

今回からgithubにて開発されているとのことで、cloneするとインストールが楽ちん。
.confをいじって、ディレクトリのパーミッションも変更して、cgiにアクセスすればよい。

できた!

ログインできない!

Cookieが有効になっているか確認してください

adiary2.xxのログインクッキーが見えるところで、adiary3にログインしようとすると、
Cookieを有効にしてくださいというメッセージとともに先に進めない。
ログインはできてるけど、セッションの確認方法が競合してるっぽい。
adiary2からログアウトするとそのまま先に進める。
以降も同様で、adiary2にログインしたままだと3に入れない。

というわけで次はユーザの追加っと。

ユーザアカウント作れない!

.envにログが見えるらしき設定があったので調べてみると、Permission denied。
なんか permission 000 のディレクトリやファイルがいっぱい出来てる。

.confの、umaskの設定で何を思ったか0777を指定していた。
# umaskの設定(wwwプロセスで実行されてるようならば0777,0666設定)
(-o-).oO (wwwプロセスで実行してるし777にすればいいのかな?) ←違う
そういう意味のコメントではないことに見直して気づいた。

いやぁ、寝ぼけてました……。

記事のインポート

再誕でexportしたxmlをZにもってきてimportしようとするが、
一瞬でUpload compliteになり、その後、ログには何も出てこない。
インポートもうまくいってないもよう。

原因はよくわからないが、fcgiを使っているとこうなるっぽい。
httpd.conf`にて FcgidMaxRequestLenとFcgidIOTimeoutを適切に設定せよ

一時的に通常のcgiにアクセスしてインポートを実施。
(ERROR) ファイルが読み込めません : data/tmp/tsuki-hogehoge.session (in Base.pm 962 (in session_file.pm 122))
という不吉なログが出るものの、その後はうまくいっている様子。
たぶん、インポート処理が始まる前に、Ajaxがピンポンしてしまって、
まだログファイルできてねーよということなんだろう。

原因を探るためにDBを消してはインポートしてを繰り返していたが、
途中で何か失敗したときに、
/usr/bin/perl /share/web/tu3.jp/adiary3/adiary.cgi etc/load_session が
無限に生まれて死んでいく状態に陥ったことがあった(毎秒10ぐらいpidが増えてた)
ブラウザを閉じたら止まった。
インポート画面のAjaxが無限ピンポン状態になることがありそうなのが若干気になる。

記事を書いてみる

下書き機能が刷新されている。

下書き時に、新しくタグを作ったり、1つもタグを付けない状態で下書き保存すると、
新しいタグ もしくは (none) タグが、サイドバーのタグリストに出てきてしまう。
その状態でタグをクリックすると、全0件 (1/0ページ) というメッセージとともに、
ブログ内の全記事がだららららっと出てきてしまう。
http://tu3.jp/?&t=ああああ とかやっても同様。
3.0b1.2で記事が全部出てくるのについては修正された。

とまぁ、
ひとまず移行できたので、こんごちびちびいじっていく。

↓続きを読むのテスト

続きを読む

2013/06/20(木)こうしんさいかい

はてブ数 2013/06/20 00:49 未分類つーさ

生きてました。

ブログを書かなかったのは単に仕事が忙しかったというのもありますが、
ブログを書くことに対するモチベーションがあがらなかったというのも。

第一に、ここで発表っきるような成果がないことですよね。
仕事がなかなか忙しいというのはありますが、
ぎっとはぶも長いこと放置しておりますし、
サウンドクラウドも長いこと放置しておりまして、
何かを作る為の時間も体力も気力も割けないでいます。

が、なんとなく気が向いたときに
気軽に文を書くくらいはしていきたいと思わないでもないので、
まずはその土壌をたがやすために、
こんなどうでもいいポストからはじめてみようと思うのでした。

仕事帰りは終電から
3月末にゲットしたべりあZにて

2013/02/12(火)つーさのくーかん サーバメンテのお知らせ

はてブ数 2013/02/12 11:42 ご案内つーさ

2月14日0時 から2月15日 24時までの最大で48時間ぐらいの間、
サーバ引っ越し作業のため、本サイトに接続できなくなります。

どこかのウェブホスティングに一時的に退避しようかとも思ったのですが、

先日の3連休中、
神戸市のゴミの分別方法を記載しているウェブページが電気設備点検のためという名目で
まったく閲覧不能になっていたのにはかなりイラッ☆と来たのですが、
そういう公共性の高いページならともかく、

こんな片田舎のブログサイトの情報が2日間見られなくなることと、
ウェブホスティングサービスの登録とミラーリングのめんどくささを天秤にかけたところ、
コストの方が高いという結論に至りました。

ようするにめんどくさいのですが。

よろしくお願いします。
戻ってこれなかったらごめんなさい!(