FC2ブログ

Debug

今更何を、というC99のマクロ。

C99では待望の__VA_ARGS__が使えるようになったので、デバグ用の出力なんてのは、
#define Debug(...) printf("%s:%d:%s ", __FILE__, __LINE__, __FUNCTION__); \
printf(__VA_ARGS__);

(セミコロン付きの指摘により訂正m(__)m)
#define Debug(...) (printf("%s:%d:%s ",__FILE__,__LINE__,__FUNCTION__), \
printf(__VA_ARGS__))

なんて風に書けるようになった。
プログラムからは、
Debug("key=%s value=%d\n", skey, nval);
のように使えて、
foo.c:128:bar key=ABC value=-2
のような出力が得られる。

また、C99対応かどうかは、
#if __STDC__VERSION__ >= 199901L
...
#endif

で判別できる。

※_(アンダースコア)で始まるシンボルは処理系予約なので、ユーザが作っちゃいけないよ。
ヘッダの番兵で良く使われちゃう、#ifndef _FOO_H_ なんて書き方はNG。#ifndef FOO_H_ と後ろだけにするのが普通。>良い子へ


すぐ忘れちゃって、毎回検索するのも何なので備忘録。
スポンサーサイト

The Internet

一般的にはtheが付こうが付くまいが変わりはない程普及したインターネット。
仕様書などで大きい相手にはなるべくtheをつけるようにしているが、小さい相手ではこのtheが鼻につくので必要な時以外はつけない。

で、このインターネット、フィンランドが国民の権利とした。
世界初!フィンランドで「インターネット接続」が法的権利に - CNN.co.jp

インターネットが普及して、現在の貨幣経済がどう変化するのか興味のあるところだったんだが、いまのところかろうじてその体系は保たれているような感じ。
しかしデジタルコンテンツは常に”複製”に脅かされていて、いずれは保護しきれなくなってくるんじゃなかろか。
つまり広域ネットワーク上のデジタルコンテンツという存在は、貨幣を基本とした資本主義には馴染まないんじゃなかろうか。
で、貨幣に変わる何かが創造されない限り、資本主義はどんどん矛盾を溜め込んで崩壊へと進むんじゃなかろうか、、とか20世紀のうちは思っていたんだけれども。
この不況で我が家の家計もそれどころじゃなくなってきてるんで、金を生まない妄想はもうちょっと先に送ることにした。

うちの場合のインターネットにかけてる経費は、通常接続の光回線が月額5千円くらい。IP電話がルータレンタル料込みで千円くらい、いざという時のためのダイヤルアップ接続プロバイダ契約料が2千円くらい、モバイル端末としてe-mobileが2千円くらい・・・
なもんで、だいたい1万円くらい毎月支払っている。

子供3人がそれぞれ使うし、DSiやWiiなどのゲーム機も利用するので、まぁこのくらいはしょうがないかという線なんだが、もっと景気が悪くなったらどんどん縮小していかなきゃならんですねぇ。
それでもパソコン通信時代の月額5万円超の電話代に比べれば安いと言えなくもなく。
ちうか、そんな金どこから出てたんだか今思えば不思議・・・

尋ね人

狸小路で俺の名前出してた、白髪で眼鏡でヒゲ生やした小柄で細いやつ、ちょっとこい。

お前誰やねん?

Let's enjoy your life

なんか良くわからんけど気になるので。

Let's enjoy your life

こんなとことかのTOPで見かける言い回しなんだが、どうも違和感あって。

一緒に楽しもうぜ!
お前の人生をな!


ちぃと乱暴すぎるんじゃないかと。
your lifeなんだから、Let usでEnjoyしちゃっちゃぁまずいんちゃう?

Eee PC 4G + Ubuntu 9.04 Netbook Remix

e-mobileのおまけだったEee PC 4G(Celeron M)に、Ubuntu 9.04 Netbook Remixを入れてみた。

もともとWin-XP Homeがプリインストールされたモデルだが、Cドライブが4GBなので、常に「空きが少なくなりました」の警告がうざい限り。
2~300MBの空き容量ではどうにもならず、それならいっそUbuntuにしちまえってことで。

Netbook RemixのimgをダウンロードしてUSBメモリに起動イメージを作成。
サクっとさして、後は特別な手間もかけず全ディスク使用でインストール。
予め無線LANが接続できることは確認しておいたし、e-mobileのUSBモデムもなんとか使えるようだし、Win-XP Homeはちょっともったいないのだが、どうせ仕事で使えるわけでもないマシンなので思い切って。
ubuntu 9.04 Netbook Remix Favorite

使い勝手はどうかというと、メニュー画面がいまいちモタモタして気になるが、それ以外はサクサク動くし、OpenOffice.orgも動くし、音も出るしカメラも使えるし、このとおり日本語変換もデスクトップと同様に使えるし、NetworkもSambaもまるで問題なし。
何もできなかった感が強かったWindowsとは印象が全然変わった。ちょっと持って歩きたくなった。

インストール直後は動画ではGstreamerが入っていないし、ブラウザにはFlashが入ってなかったりで、ちょこちょこ追加インストールは必要なんだけど、まぁそれはおいおい。

なかなかいいかもネットブック。
(なんかスクショのサイズが怪しいのはご愛嬌(^^;)

※ランチャのモタモタはアップデートを当てると解消。快適快適。

Cygwinでの共有メモリ

最近はCygwinでもipc関係が使えるようになってるんだが・・・
(Cygwinでのipcの使い方は各々ぐぐれ)

Windows上でのなんちゃってipcなので、たぶん実装としてはMMFを使っちゃってるんだろうな、と思いつついぢっていると、
shmatの戻り値が違う。やっぱりというかなんというか。

共有メモリってやつは、参照(ポインタ)を持たないデータ型(構造体)にアタッチして利用する場面が多い。
でこれをちょっと使いやすくするために、インデクス部を持たせて複数テーブルを格納したりもする。

+----------------+
| index |
+----------------+
| table-1 |
+----------------+
| table-2 |
+----------------+
| table-3 |
+----------------+

名称を与えるとtable-nのアドレスを返してくれるような仕組みを作ってやると、複数テーブルでも共有メモリとしては一つで済むので事後の操作が簡単というメリットがあったり。
で、普通はこのindex部には、[名称]と対応するtableの先頭からのオフセットを格納したりするんだけれども。

Unix機の場合は共有メモリのアドレスは物理アドレスであって、どのプロセスから見ても同じアドレスだから、このindex部へは実アドレスをそのまま格納してやっても問題は無い事が多いんだが、Windows(MMF)だとそうもいかず。shmatへは物理アドレスを渡さない限りは、プロセス毎に異なるアドレスにマッピングされる
MapViewOfFileの返すMMFのアドレスは論理アドレスなのでプロセス毎に異なる(同じ事もある)から、index部を作るなら先頭アドレスからのオフセット程度でないとならん。
shmatに実アドレスをセットしてやればCygwinでも同じ値が得られるのかは未確認

同様に、参照を含むデータ構造を共有メモリに構築したいために、共有メモリ上のアドレスを参照ポインタに設定しなおすような技はWindowsでは使えない。(というかUnixであっても使いたくない)

という事で、あるUnixのソースをCygwinで動かそうという試みは崩れ去ったのでした。
Linuxならたぶん大丈夫なんだろな・・・

## 2009/10/08 修正
うーん、良く見るとshmatに渡すアドレスが0になってる・・・これだといくらUnixだろうとプロセス毎に違う値が返ってくるだろうに・・・

プロフィール

f_yamaki

Author:f_yamaki

アクセスカウンタ
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク