7/30 (日)
[Movie] ゲド戦記
昼過ぎにチネッチタの予約状況を見てみると意外に空いるようなので、川崎へ出かける。 16時に川崎チネチッタに着いてみると 17:30 の部の席がまだ残っているという。公開2日目というのに、なんとも寂しい状況。買い物をしたいので 18:00 の部の席を予約。 劇場は2階の8番シアター(一番大きい幕)で、席は6〜7割ぐらい埋まっている状況。お子様連れが多し。
前半アレン&ハイタカがテルー&テナーと出会うまではテンポ良く話が進み、ネット上の評価も当てにならないと思い直す、、、けど、後半はめちゃめちゃ。 お話の筋は「ゲド」というより「カリオストロの城」だし、やたら説明調のセリフが多くて見ていて消化不良を起こしそうになる。
これを原作者に本当に見せるのかしら?
7/29 (土)
Disney からの Referer スパム?
Web サーバのログを見ていると referer が http://www.disney.com/ を指しているアクセスがボチボチやってくる。 特定の IP アドレスからのアクセスだが Referer をセットしたまま解除し忘れたとは思えず、 スパム行為のために Web を巡回しているようにみえる。
この referer がアダルトサイトのものなら別に不思議でもなんでもないのだが、 http://www.disney.com/ というのが気になる。 Disney が金を払ってスパムをバラ撒いているとも思えないし。
7/28 (金)
郵便為替の払込は ATM で出来るんだね
郵便為替の払込用紙を持って郵便局の窓口に行くと ATM を使って振り込めという。 手数料が窓口だと100円で ATM だと60円で、 ATM で振り込むほうが安いのだと。
ATM に払込取扱票を入れると、 がちゃがちゃと動作してスキャナで内容を読み込んでくれる。 バーコードが付いているわけではないので、 太線の枠内を文字認識しているのね。 通信欄もスキャンして取り込んでくれる。 なるほど便利だ。
こういう機能って最近できたのだろうか? 社会人になってからは、 昼休みの大混乱の最中に払込のために窓口に並んでいたけど、 あれはムダだったのではないだろうか…
7/26 (水)
会社 de TOEIC
TOEIC のインスティチューション試験を受ける。 本家の TOEIC 試験はリスニングのスピーカーがメリケン人以外に拡大されて 英・豪のスピーカーの問題もあるそうだす。 組織で受ける TOEIC は2007年度までメリケン人オンリー。
7/19 (水)
[Prog] シグナルをフック
とよしま氏の Chained Diary の2006.7.18 分 へツッコミ。
先日見つけた改良版screen。 会社のVine Linux環境だけ^z-Cを5回ほど繰り返すと必ずSIGSEGVで落ちる・・・これでは使えない (涙。libSegFault.soを使ってバックトレース表示してやろうと思ったんだけど・・・シグナルハンドラ設定してるプログラムだと駄目か・・・。また明日気が向いたら調べよう。
signal(2)、sigaction(2) をフックして、 シグナルをフックしてしまえばよかんべ。 実行時に環境変数 LD_PRELOAD に libsighook.so を渡し、 screen が仕掛けてくるシグナルハンドラを独自の物に入れ替えるか シグナル・チェインを作ってしまえばよろし。
/* gcc -fPIC -shared -o libsighook.so this-program */ #include <dlfcn.h> #include <signal.h> # define RTLD_NEXT ((void *) -1l) typedef void (*sighandler_t)(int); static sighandler_t (*api_signal_func)(int signum, sighandler_t handler); static int (*api_sigaction_func)(int signum, const struct sigaction *act, struct sigaction *oldact); __attribute__((constructor)) void hook_signal_init(void) { api_signal_func = (sighandler_t (*)(int, sighandler_t))dlsym(RTLD_NEXT, "signal"); api_sigaction_func = (int (*)(int, const struct sigaction*, struct sigaction*))dlsym(RTLD_NEXT, "sigaction"); } sighandler_t signal(int signum, sighandler_t handler) { sighandler_t ret; /* お気にめすまま */ ret = api_signal_func(signum, handler); /* お気にめすまま */ return ret; } int sigaction(int signum, const struct sigaction* act, struct sigaction* oldact) { int ret; /* お気にめすまま */ ret = api_sigaction_func(signum, act, oldact); /* お気にめすまま */ return ret; }
某社の某大学某学部のOB会 (公式、ぐるなび)
今回は珍しく横浜地区で開催。 去年は参加しなったので、前回は 2004年7月21日ですね。
場所はみなとみらいのブコ・ディ・ムーロ。 クイーンズスクエアの2階にあるイタメシ屋を借り切ってパーティ。 テラスからの眺めは素晴らしい。
イタ飯屋が本業なので、ホテルなどと違って段取りはよくないが、飯の味は大変よろし。
吉川氏や豊島氏と再会す。 武蔵中原の方はいろいろ大変なことになっているようだ。 こっちも火がついているけど。
それにしても今年はうちの学科から 8 人も入社という。 去年は3人しか入社していないので変動がすごい激しいよ。
7/17 (月)
[CPU] Precise Interruption
System/370 の命令を調査しながら頭を痛める。 S/370 の命令は例外が起こった場合の処理がおそろしく複雑で手に負えんよ。
- S/370 には1つの命令で複数の箇所にメモリストアをする命令がある。
- S/370 命令の途中でページフォルト例外が起きたら、その命令の実行をなかったことにする。
- 命令の実行をなかったことにするとは、メモリのストアの効果もキャンセルすることである。
- どうするんだヨ〜
x86 にもストリング命令とかがあってかなり酷いとは思うけど、 ここまで酷くはない orz
一方の IA-64 はぶっちゃけ VLIW の一種で、
1バンドルに 3 命令を入れることができる。
バンドルを連結して命令グループを構成することも可能だ。
そして Itanium2 は 1 サイクル毎に命令グループで連結された 2 バンドル分を処理可能となる。
ただし例外が発生して割り込みが掛かった場合は別で、
RISC のようにバンドル内の命令が逐次的に実行されたように振る舞う。
割り込みハンドラから rfi 命令で戻る時もバンドルの途中の命令から実行を再開できる。
アーキテクチャの教科書にも割り込みの設計方法にはあんまりページが割かれていない。 命令仕様書を読む限り各社各様に開発しているような気がする。 アーキテクチャ屋さんは、どういう基準で割り込みを設計するんだろうねぇ?
> アーキテクチャ屋さんは、どういう基準で割り込みを設計するんだろうねぇ?
あんまり深く考えていないような。。。特に古いRISCとか。
7/16 (日)
[CPU] AMD の考える AMD64 の拡張戦略 (の一端)
相変わらず米特許を読み読みしているが、 AMD から申請された特許の中に面白い図を見つけたよ。 US Patent 6,671,791 Processor including a translation unit for selectively translating virtual addresses of different sizes using a plurality of paging tables and mapping mechanisms というもの。 パテントを直接ポイントする方法が良く分からないので ここから検索してみてください。
印象的なのは Fig. 7 で、 AMD64 のページテーブルに関するもの。 図を切り貼りするから見てくださいな。
なんと 6段のページテーブル ですよ!! 今の AMD64 の仮想メモリ空間は 4 段 で 48 ビット分しか使えないけど、 今後不足するようだと 48 (4段) → 57 (5段) → 64 (6段) と広げる気なのね。
6 段のページテーブルを解決するには 6 回メモリをロードしなくてはならず、 その度にキャッシュミスが起きる危険性があることを考えると TLB ミスが恐いよな〜。
[Food] 和風喫茶 嵯峨野@元住吉
会社に行く前に 近所で昼飯を食べて行く。
7/15 (土)
久しぶりに秋葉原へ
壊れたキーボードの替えを買いに秋葉原へ行く。 探していた FKB8744 キーボード は一軒目の T-ZONE PC DIY SHOP で発見。
しばらく秋葉原には出てこなかったが、 東京三菱銀行の一角が再開発されていたり、 パソコンショップが何軒がなくなっていたりと様変わりしている。 変化の速い町ダス。
神保町まで歩いて三省堂で荒俣 宏の 「レックス・ムンディ」を買い、 キッチン南海(livedoor 東京グルメ)でカツカレーを食べて帰る。
7/14 (金)
[Prog] C 言語と C++ 言語の細かな違い
C++ 言語の中で C++ 言語に特有な部分を使わない場合でも、 C 言語と C++ 言語には微妙な文法の差が存在する。 うっかり忘れがちな文法を列挙してみる。
- 文字リテラルの型
-
C 言語では
sizeof('x')
がsizeof(int)
に等しかったのに、 C++ 言語ではsizeof('x')
がsizeof(char)
に一致するように変更になった。 - 型を定義する位置
-
C 言語はキャスト、関数の仮引き数、sizeof の引き数で型定義が出来ていたのだが、
C++ 言語では禁止された。
size_t size = sizeof(struct S1 {int f;}); void foo(struct S2 {int f;} arg);
入れ子になった型定義は、C++ 言語では局所化される。struct X { int f; struct Y { int f; }; }; struct Y y; /* C では OK で、C++ ではエラー */
- goto や switch で局所ジャンプ
-
C++ 言語で goto や switch を使う場合、
局所初期化子を持つ宣言(つまり変数の定義) を飛び越せなくなった。
こういう馬鹿みたいなコードは禁止。int x, y; switch (x % 4) { int a = 0; /* C++ 言語ではこの定義を飛び越えては駄目*/ case 3: a += y; case 2: a += y; case 1: a += y; case 0: return a; }
- 引き数のない関数宣言
- C 言語では引き数のない関数宣言は、
引き数不明の関数宣言とみなされる。
引き数のない関数を宣言するには、
明示的に void を宣言する必要がある。
一方 C++ 言語の場合、 引き数がない関数宣言は void を指定したのと同じ。int function1(); int function2(void); void foo() { function1(100); /* C では OK で、C++ ではエラー */ function2(100); /* 両方ともエラー */ }
- volatile 修飾されたオブジェクトの非 volatile 修飾されたオブジェクトへのコピー
-
volatile の付いた構造体を volatile の付かない構造体へ単純コピーしようとすると
C++ 言語ではエラーとなる。
struct X {int i;}; int foo() { struct X x1; volatile struct X x2 = {0}; struct X x3 = x2; /* C では OK で、C++ ではエラー */ x1 = x2; /* C では OK で、C++ ではエラー */ }
これは構造体をコピーする場合に、 C 言語は単純ベタコピーなのが、 C++ 言語はconst X&
を引数にとるコピーコンストラクタまたは代入演算子を 適用するために起きる。volatile X&
がconst X&
へ暗黙のうちに変換できないのが原因。 - enum の違い
- C 言語の列挙子は int 型だが、 C++ 言語では列挙体の中の最大・最小の値が int 型に入りきらなければ、 より大きな整数型となる。
- const 定義された変数
- ファイル有効範囲で定義された const 定義変数は、
C 言語の場合 extern 宣言のありなしに関わらずグローバルスコープを持つが、
C++ では extern なしの const 定義はファイル内で閉じている。
const int VAR1 = 0; /* C では実体が作られるが、C++ では作られない */ extern const int VAR2 = 0; /* どちらでも実体が作られる */
思い出したら足していくことにする。
7/12 (水)
[Work] キーボードが壊れた
朝のミーティング後に自席のパソコンが勝手にリブートして、 BIOS 画面のメモリチェックの後で固まっている。 パソコンは Pentium3-S 1GHz x2 という 5 年近く使っているマシン。 いつ壊れてもおかしくないマシンだけにいよいよ逝ってしまったと焦ったが、 壊れていたのはマシンではなくキーボードだった。
富士通コンポーネントの FKB8744 (日本語配列)を使っていたのだが、 飲み物をこぼしたりと酷使し続けたせいか壊れてしまったようだ。 キーボードとして認識されなかったり、 キーを叩いても正しいコードが出力されなかったりする。
もう一枚 FKB8744 を買いたいところだが、 入荷量が少なくても ぷらっとホームでは 次回入荷が10/14になっている。 秋葉原で在庫を持っている店があるかしら?
7/10 (月)
[Tips] MS-Word で作った表から任意のセルを消すには
もしかすると世間様ではあたり前田のクラッカーなのかもしれない。 だけど今日まで知らずに生きてきた哀れな LaTeX 使いの私。
下のような表で行の一部分だけを削除したい場合、 どうすればいいか?

こういう場合には「罫線を引く」を選択して、

先に罫線を引っ張って、消したいセルを行化する。

その後で行を選択し「行削除」を行う。
なんとも奥が深い。
7/9 (日)
[Prog] Waiting しているプロセスへシグナルが割り込んできた場合の処理
ちょっとメモ。
- POSIX の mutex や condition variable によるスレッドロック中にシグナルを受けた場合、
ブロックを解いてシグナルハンドラを呼び出すかどうかは決まっていないようだ。
もしロック中でもシグナルを処理する実装を選んだ場合、 そのシグナルハンドラから戻った時には再度ロック状態となり、 mutex/condition variable から見てその割り込みが発生しなかったように振る舞う (pthread_mutex_lock)。 Linux 2.6 系ではこのような動作をする。
ただしpthread_cond_timedwait
は別で、 シグナルによる割り込みがあればブロックを解除して EINTR を戻り値として返す必要がある。 - IPC のメッセージキュー(
msgrcv
) やセマフォ(semop
)によって プロセス/スレッドがブロックされている時にシグナルが送られると、msgrcv
やsemop
はシグナルに割り込まれたことを通知してブロックを解除する。 - ファイル・名前付きパイプ等を read/write でブロックされた場合、 シグナルに割り込まれると EINTR を戻り値として返すとされているが (read)、 Linux 2.6 ではシグナルはペンディングされる。 select/pselect の場合は、ブロックを解除して EINTR を戻り値として返す。
今日のブレーメン通り@元住吉
元住吉のブレーメン通りにはワールドカップにちなんで ドイツビール(ワールドカップ公式)やソーセージの即売会をやってました。 ビールを買うとドイツチームのポスターカードが貰えたみたいです。 私はソーセージだけ召し上がる。
7/7 (金)
[Work] 特許よみよみ
最近は特許調査なるものをやっている。 今日は米特許を読む。
キーワードを絞り込んで 300 件ぐらいの特許を選び、 そこから abstract を読んで関係内分野のものを外していく。 100 件ぐらいが残るので、 後は 1 件を 15 〜 20 分ぐらいで読み飛ばしていく。
どういう特許を調べていたのかはここでは書けないが、 読んでいて面白いことに気づいた。
日本企業の申請した特許の一部が、
米国でしか特許を申請しておらず、
同じ内容の日本の特許が出ていないものがある。
正確な事情は良く分からないけど、
日本企業の海外の研究所・事業所から出たものでもなさそうだ。
国内ではその商売をしていないから、
米特許だけ申請して国内での権利は捨ててしまったのだろうか?
7/4 (火)
[Linux] パフォーマンス・モニタで高精度タイマーを作る?
IA-64/Linux では CPU のインターバル・タイマーを OS のタイムスライスを刻み込むために使用しており、 1/1024 秒単位固定でチクタクやっている(5/22の日記)。
1/1024 秒よりも細かく、できればμ秒単位で指定可能で、 10μ秒〜50μ秒ぐらい誤差でタイマーハンドラが動き始めてくれるタイマー機構が欲しい。 だが IA-64 システムには (標準では) インターバルタイマー以外のハードウェア機構がないのよね。
ということを識者に話すと「パフォーマンス・モニタを使えば」と言われた。 パフォーマンスモニタ機構で CPU サイクルをモニタリングしておき、 オーバーフローしたらパフォーマンスモニタ割り込みを起こさせて それをトラップすればよいとのこと。
そんな手があったのかと膝を叩きそうになるが、 パフォーマンスモニタをそんな用途に利用してもいいのかしら???
PMDレジスタのオーバーフローは、42ビットを越えると、
割り込みが発生しますし、捕獲もできますが、
任意のサイクルでとなると、カーネル部分の変更が必要になります。
あとは、nanosleep() という手段も考えられます。
7/3 (月)
[MyWeb] 掲示板へのスパムコメント対策のいたちごっこ
6/24の日記 からやっていた掲示板のスパムコメント対策だが、 cookie 周辺を弄ることでスパムを遮断。
そもそも過去にスパムコメントを書いたユーザーにはスパムマークの付いた cookie を送って識別し、 cookie にスパムマークの付いたユーザーのコメントはスパムの判定していた (4/25の日記、 5/4の日記)。 しかしスパマーはこの動作に気づいたのか、 投稿の度に cookie をフラッシュするようになった。
今回は以下のような対策を行う。
- スパムコメントは掲示板を GET したタイミングで cookie を送りつける。 この時、時刻情報を記録。
- コメント投稿の POST 時に 1. との時間差を計算し、 それが一定時間より短ければツールによる投稿とみなして弾く。
- コメント投稿の POST 時に 1. の cookie が返ってこなければ、 投稿を認めず弾く。
これもイタチゴッコかしら?
digg のユーザー登録
digg は、 ユーザー登録をしないと記事の本文が読めなくなったようだ。 ``nminoru'' のアカウントで登録してみる。
Sign Out のところに変な T シャツの宣伝が貼り付いてログアウトできないのだが、 これは何かの罠かしら?
7/1 (土)
近所のコンビではコーラスを売ってない… (公式)
Young You 誌が休刊(2005年10月24日の日記)した後、榛野なな恵や羽海野チカは同じ集英社のコーラス誌に移ったのね。
羽海野チカの「ハチミツトクローバ」はコーラスでも連載を引き継いだけど、榛野なな恵の「Papa told me」は終わってしまったようだ。 無念。