rails で @hoge = Hash.new を使っていたのだが、erb の template で値が引けない。何が悪いのかさっぱり、わからんかったが、どうやら、key に代入された型が、integer なのか、string なのかで挙動が変わっていた。
ところが、片方では 明示的に .to_i しなくても integer 型で登録され、もう片方では明示的に .to_i しないと string 型で登録されてしまう。
ソースを追うと、ここかしこに選択子があり嫌な感じだ。
1. ActiveRecord から find_by_sql で引いた値が、integer 型なのか、string型なのか不明瞭
2. Hash.new した値に登録する時に、integer 型で登録するのか string 型で登録するのか選択できる
3. template 内で、@hoge[ key.to_i ] するのかどうか?そもそも、key の型が何なのか全く予測がつかない。
どうも、こんなあたりに、げんなりします。
2010年10月22日金曜日
2010年10月21日木曜日
Postgresql 値比較備忘録
今回は、PostgreSQL の Stored Procedure にて、こんなコードではまった。
この場合、OLD.name か、NEW.name が null の場合に条件に合致しない。正しくは
... IF TG_OP = 'UPDATE' THEN IF OLD.name <> NEW.name THEN UPDATE ... END IF; END IF; ...
この場合、OLD.name か、NEW.name が null の場合に条件に合致しない。正しくは
... IF TG_OP = 'UPDATE' THEN IF COALESCE(OLD.name,'') <> COALESCE(NEW.name,'') THEN UPDATE ... END IF; END IF; ...
2010年10月16日土曜日
xcode で symbol(s) not found 備忘録
xcode で、c++ のコードを追加したら、symbol(s) not found と怒られてしまった。
あるはずの関数がシンボルが見つからない。名前をみると _hoge という形式なので、ははぁ?C++の関数をC でリンクしにいってるな?と、そこまではわかったのだが、手を抜いて単純に extern "C" だけを付けたのがまずかった。
*.mm *.cpp 等では、cplusplus のコードとしてコンパイルされるが、*.m など Objective-C では c と同じ扱いのようだ。そのせいで、extern "C" 自体が構文エラーになっていた。ヘッダの宣言では、ちゃんと
してやらんと、いけません。
なんとなく、不安にかられるなぁー。class や template キーワードが入った場合は、c++ マングリングにスイッチしたりすんの??? Objective-C 不気味な感じがする
あるはずの関数がシンボルが見つからない。名前をみると _hoge という形式なので、ははぁ?C++の関数をC でリンクしにいってるな?と、そこまではわかったのだが、手を抜いて単純に extern "C" だけを付けたのがまずかった。
*.mm *.cpp 等では、cplusplus のコードとしてコンパイルされるが、*.m など Objective-C では c と同じ扱いのようだ。そのせいで、extern "C" 自体が構文エラーになっていた。ヘッダの宣言では、ちゃんと
#ifdef __cplusplus extern "C" { #endif ... #ifdef __cplusplus }; #endif
してやらんと、いけません。
なんとなく、不安にかられるなぁー。class や template キーワードが入った場合は、c++ マングリングにスイッチしたりすんの??? Objective-C 不気味な感じがする
2010年10月15日金曜日
DLL_PROCESS_DETACH は難しい
ちょい記憶が曖昧なのだが、DLL_THREAD_DETACH は、必ずしもコールされるとは限らないのである。APIで無効にできるからだ。そして、DLL_PROCESS_DETACH時の処理も非常に難しい。実は、このタイミングで C|C++ランタイムのクリーンアップ処理が自動で実行されるからだ(Vista, 7 では、どうかわからん)。
よって、DLL_PROCESS_DETACH のタイミングで、スレッドの同期保護オブジェクトを利用して何かを実行しようとすると、たいていは、デッドロックを起こしてしまう。とにかく、厄介な代物なのである。
MSには、DLL_PROCESS_DETACH の他に、DLL_PROCESS_DETACHING とかいった通知をDLL_PROCESS_DETACHの前にしてもらいたいと希望したい。そうすれば、デッドロックを起こさずに済む。結局のところ、このような仕様のおかげで、マルチスレッド絡みで、ほいほいとDLLをロードしたりアンロードしたりできない。つか、不可能だろう。皆さん、どうされているのだろうか?あ?C#使ってるから、関係ねぇのか!
よって、DLL_PROCESS_DETACH のタイミングで、スレッドの同期保護オブジェクトを利用して何かを実行しようとすると、たいていは、デッドロックを起こしてしまう。とにかく、厄介な代物なのである。
MSには、DLL_PROCESS_DETACH の他に、DLL_PROCESS_DETACHING とかいった通知をDLL_PROCESS_DETACHの前にしてもらいたいと希望したい。そうすれば、デッドロックを起こさずに済む。結局のところ、このような仕様のおかげで、マルチスレッド絡みで、ほいほいとDLLをロードしたりアンロードしたりできない。つか、不可能だろう。皆さん、どうされているのだろうか?あ?C#使ってるから、関係ねぇのか!
2010年10月14日木曜日
apple id の管理がひどいっぽい
どうも、apple id の管理は、ひどいような気がしてきた。macbook を買った時に登録した apple id が、どうも消失しているような気がする。いや、多分、消失している。おそらく、iphone sdk 用のアカウントを作成した時にでも、統一されて上書きされてしまったのだろう。
macbook のアドレスブックに記載されている apple id をなんとかしようとしても、全くもって、どうにも見つからない。メールを送信しましたって、メッセージは表示されても、いっこうにメールが届かない。アカウントの確認の生年月日が、違うと言われてはじかれるし、どないなっとんねん。
それはそうと、なんでもかんでもサービスで、やれ、ログインIDを作成してパスワードを入力しろだの、アホかっちゅーーーーーねーーーん。
もう、そんなにたくさんのIDとパスワードなんて管理できへんねん。人間の限界を超えてるねん。
最近のアプリやサービスの流行は、ユーザ ーイン。俺のサービスは、こんなにユーザがいてまんねん。おかげで、何かアプリをダウンロードするたびに、サインアップを求められて、ちょーうざい。これからのサービスは、まじめに OpenID を考慮してくれ。
追記:どうやら、apple id と mac.com の id は別物らしい。後者は有料という事でいいのかな?あと、使わないけど iChat のアカウントが AOL で、もう訳がわかんねぇ。
macbook のアドレスブックに記載されている apple id をなんとかしようとしても、全くもって、どうにも見つからない。メールを送信しましたって、メッセージは表示されても、いっこうにメールが届かない。アカウントの確認の生年月日が、違うと言われてはじかれるし、どないなっとんねん。
それはそうと、なんでもかんでもサービスで、やれ、ログインIDを作成してパスワードを入力しろだの、アホかっちゅーーーーーねーーーん。
もう、そんなにたくさんのIDとパスワードなんて管理できへんねん。人間の限界を超えてるねん。
最近のアプリやサービスの流行は、ユーザ ーイン。俺のサービスは、こんなにユーザがいてまんねん。おかげで、何かアプリをダウンロードするたびに、サインアップを求められて、ちょーうざい。これからのサービスは、まじめに OpenID を考慮してくれ。
追記:どうやら、apple id と mac.com の id は別物らしい。後者は有料という事でいいのかな?あと、使わないけど iChat のアカウントが AOL で、もう訳がわかんねぇ。
2010年10月12日火曜日
2010年10月9日土曜日
2010年10月5日火曜日
macでboost
簡単だった。
bjam は、既にコンパイル済みのものが www.boost.org で配布されている。なので、ダウンロードして、
デフォルトで利用する事に、ほんでもって /usr/local/src/boost_1_44_0 を展開して、そこで
を実行すると、めでたくコンパイルも通った。
で、/usr/local/include/boost, /usr/local/lib にインストールされた。
試しに boost::thread のコードをコンパイルしてみたが、よさげだ。
bjam は、既にコンパイル済みのものが www.boost.org で配布されている。なので、ダウンロードして、
$ sudo cp bjam /usr/bin
デフォルトで利用する事に、ほんでもって /usr/local/src/boost_1_44_0 を展開して、そこで
$ sudo bjam
を実行すると、めでたくコンパイルも通った。
$ sudo bjam install
で、/usr/local/include/boost, /usr/local/lib にインストールされた。
試しに boost::thread のコードをコンパイルしてみたが、よさげだ。
$ c++ y.cpp -I /usr/local/include -lboost_thread
2010年10月4日月曜日
mac ぼやきてぇよ
なんか、iconひとつ作成するのにも、えらい面倒くさい。適当なアイコン作成アプリもわかんねぇ。/Develper/Applications/Utilities/Icon Composer 72x72のアイコンはどうすんだ?しかも、先に psd ファイルを生成しろ?えーっ?
ソフトを入れようとしたら、six とか、知らねー圧縮形式出てきて、面食らって、やっと解凍したと思ったら、「クラッシック形式の実行ファイルは対応してません」とか怒られて、、、orz こりゃ、慣れるまでしばらくかかりそう。
ソフトを入れようとしたら、six とか、知らねー圧縮形式出てきて、面食らって、やっと解凍したと思ったら、「クラッシック形式の実行ファイルは対応してません」とか怒られて、、、orz こりゃ、慣れるまでしばらくかかりそう。
2010年10月2日土曜日
本日も親子でツーリング
本日も、親子で自転車ツーリング、ドリームビーチへ行って、森林公園に行って、帰ってきた。
23キロぐらいは走ったでしょうか・・・。
森林公園で、おやつのオールレーズンを鴨にあげたのが、地味に楽しかったらしい。
23キロぐらいは走ったでしょうか・・・。
森林公園で、おやつのオールレーズンを鴨にあげたのが、地味に楽しかったらしい。
登録:
投稿 (Atom)