6/28 (水)
Amazon おまかせリンク ™ ベータ版
Amazon アソシエイト・プログラム に新しいリンクタイプ「Amazon おまかせリンク」が登場した。 Google AdSense に似たコンテンツターゲット型の広告だ。
フッターについている Google AdSense と入れ替えてみたが、ページの内容によらず一定の商品の紹介が繰り返される。 この日記は書籍の紹介(Amazon.co.jp へリンク)が多いのだが、「おまかせリンク」はそれを反映していない。 まだまだ調整の余地が多そうだ。
一方で 2005年11月20日の日記に述べたように、「Amazon おまかせリンク」と「Google AdSense」は AdSense 側の規約に抵触してしまうので同一ページに両掲載するわけにはいかない。 どちらを選ぶかは考えもの。
6/26 (月)
[CPU] Itanium2 でストア・バッファの内容をキャッシュに書き出すには?
あいかわらず Itanium2 との死闘の日々。
Itanium2 のマルチプロセッサ構成で、 ローカルプロセッサのストア命令の内容を 他のリモートプロセッサから観測可能であることを保証させるにはどうすればいいのか? L1 データキャッシュでコヒーレントをとっているので、 理論上はローカルプロセッサのストアバッファをフラッシュすればいいとは分かるのだが、 それを保証してくれる操作命令が存在しない (涙)。
- メモリフェンス命令 mf はメモリの順序を制限するだけで、
mf 以前のストアの内容が書き出されるかどうかとは無関係だ。
- シリアライズ命令 srlz は、
日本語の命令仕様書では
srlz を使用して、先行するデータ・メモリ参照またはメモリ・フェンスが外部プラットフォームによって検出可能になるか「受け入れられる」まで、 プロセッサのデータ・メモリ参照を停止できない。
と思わせぶりな訳文が書かれている。
しかし英語だとA srlz cannot be used to stall processor data memory references until prior data memory references, or memory fences are visible or ``accepted'' by the external platform.
とはっきりダメって書いてある。
- メモリ同期化命令 sync.i は
先行するキャッシュのフラッシュ操作の完了を待つだけ。
- フラッシュ・ライト・バッファ命令 fwb は ストアバッファをフラッシュする「ヒント」を出すけど、 保証はないとソフトウェアマニュアルには書いてある。
mf → fwb の順で命令を実行するとストアバッファを吐き出してくれる可能性が高い。 ただ、どうやったら検証手段できるのかしら???
備忘録
家賃払った。
割り込みハンドラの中とかでしょうか。
IA-64 上で、別のアーキのメモリモデルをエミュレーションする際に問題になっています。
例えばローカル CPU が「ストア」→「ストアバッファ・フラッシュ」→「CPUカウンタを読む」、リモート CPU が「CPUカウンタを読む」→「ロード」を実行した時、2 つの CPU のカウンタが同時刻ならローカル CPU のストア値とリモート CPU のロード値が一致することが保証したいのです。
# CPU カウンタは当然同期している前提です。
ストア→メモリバリア→ロード
といったシーケンスを使ったと思います
もっともストアもロードもキャッシュされない領域でしたが
釈迦に説法ですね^^;;
6/24 (土)
[MyWeb] 掲示板へのスパムコメント対策の妙手はないものか?
うちの掲示板は 4/25・ 5/4 でスパムコメント対策を行い、 スパムコメントが投稿されても表側には表示されない処理を行っている。 しかしスパムコメントの投稿自体は今も続いていて、 なんとか食い止めたいので対策を考え中。
とりあえず一連のスパム投稿アクセスを見ると、 以下のようなことが言えそうだ。
- クライアントの IP アドレスはバラバラ
- スパムを送ってくるサイトの IP アドレスはバラバラだ。
最初はボットネットのようなものを利用しているのかと思ったが、 アクセス元をよく調べると open proxy になっているものが多い。 スパムの送信元は、 大量のプロキシサーバリストを持っていて、 それを切り替えながらアクセスを続けていると予想する。 - User-Agent では区別できない
- User-Agent は
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
というのが多いが、 時々 異なるエージェント名を名乗ることもある。 特定 User-Agent を弾くことは一定の効果はあるものの、 根本的な対策にはならないようだ。 - アクセスパターンでは区別できない
- コメントスパムのアクセスは、まずページを実際に GET して、
その後にフォームを埋めて POST を行っている。
Hidden フィールドに ID を埋めてみるが、
GET したページ分を POST している点は確認できた。
また GET から POST まで 6〜8 秒の間隔が必ず空いていて、 手動でアクセスしている振りをしている。 GET と POST の間隔が早すぎることを理由に拒否するという手法は使えないようだ。
つまり今のところ内容で判断する以外にない。
画像を見せて何がかかれているかを答えさせるようなインターフェイスを導入すればスパムは弾けるだろうが、 それをやると負けたような気がする。 スパマーの裏をかくような手はないものか。
必ず投稿フォームの特定のチェックボックスをチェックさせてから
投稿しないと受け付けない(ex:□ 左のチェックボックスを
チェックしてから投稿してください)とか、
限られたコミュニティならば共通の知識をバックにした
パスワード欄をつくり、そこに記入した内容を基に
選別するとかやっている実績ならばみたことがあります。
(ex:高校での英語教師名は?等)
簡単な設問でもいいかもしれません。
ex:初回は一桁同士の足し算。一度回答すると
cookieを喰わせて、expireしなければ以降は
省略、等。
> ぶぅさん
ベイジアンフィルターという手がありましたね。
今まではのスパムコメントを捨ててしまっていたのですが、しばらく採取してみます。
日に10コメントぐらいは来るので 10 日もあれば、それなりに溜まるかしら?
> Miura さん
う〜ん。
正規の投稿者に負担をかけるのは負けたような気が (\'A`)
これは最後の手段です。
やはりスパムコメンターだけを確実に沈黙させるような手法が (・∀・)イイ!!
ということで、今ひそかに「MIME マルチパートと圧縮アルゴリズムを利用したスパム対策方法」を考えています。
> tikarano さん
おぉ、OpenProxy リストの登録された RBL があるのですね。
これは知りませんでした。
minibbs.cgi に追加して試してみます。
6/23 (金)
[Work] 特許を読み読み
特許調査中。 この三日間で4桁の特許の抄録を読み、 100本ぐらいは中身を読む。
特許は「請求項」→「発明の分野」→「発明が解決しようとする課題」→「課題を解決するための手段」と続くけど、 高速に読みたい場合には「請求項」を読み飛ばすのがミソだよなぁ。 最初に「請求項」を読んだら混乱するだけで、 ちっとも発明の概要がわからん。
[Work] 読むべきか、読まざるべきか。それが問題だ
PCI/PCI Express に絡むソフト開発を本気でやりたい人は、
やっぱりみんなこの本
を読でいるのだろうか?
この本は分厚いんだよな。
900 ページもあるよ。
ほとんど鈍器なんだよなぁ。
6/21 (水)
祝日と休日の計算の仕方
移動前の部署で担当していた Web スケジュールシステムの設定をちょろちょろと書き直す。
このシステムの設定ファイルは
祝・休日の設定を日付決めうちだけでなく
second Monday in Jan
のように柔軟に設定できる。
それでもここ数年の法改正の重なりで、
毎年の微調整が必要になっている。
ついでなので (今日以降の) 日本の祝日・休日を計算で求めるためのノウハウをメモしておく。
国民の祝日
祝日名 | 日時 | 備考 |
---|---|---|
元旦 | 1/1 | |
成人の日 | 1月の第2月曜日 | |
建国記念の日 | 2/11 | |
春分の日 | 春分日 | |
みどりの日 | 4/29 | 2007年から「昭和の日」へ名称変更 |
憲法記念日 | 5/3 | |
みどりの日 | 5/4 | 2007年から施行 |
こどもの日 | 5/5 | |
海の日 | 7月の第3月曜日 | |
敬老の日 | 9月の第3月曜日 | |
秋分の日 | 秋分日 | |
体育の日 | 10月の第2月曜日 | |
文化の日 | 11/3 | |
勤労感謝の日 | 11/23 | |
天皇誕生日 | 12/23 |
振替休日と国民の休日
上の祝日以外に、 以下のルールで休日が設定される。
- 日曜日と祝日が重なると、祝日直後の平日が休日となる。
- 祝日と祝日に挟まれた日が休日となる。
春分日と秋分日
春分日・秋分日とは、太陽が春分点・秋分点を通過する瞬間を含む日のこと。
これを UNIX epoch (西暦1970年1月1日の0時を起点の経過秒数) を使って求めると、
2006 年に太陽が春分点を通過した 1142879271 なので、
ここを基準にして回帰年(365.242198781日)分を毎年足してやればよい。
秋分点は 0.5 + n 年分を足すことになる。
後は Perl なら localtime
で元に戻せば日時が出てくる。
正確にいうと うるう秒・歳差・自転の遅れなどの影響があるので、 春分日・秋分日を計算式でも求めるには限界がある。 だがその程度の誤差など、 UNIX epoch が 2037 年には破綻してしまう という仕様の前では 問題にならないナリ。
6/18 (日)
6/16 (金)
[MyWeb] 1万5千のユニーク User-Agent
HTTP リクエストの中に含まれている user-agent のフィールドは、 アクセスを行った Web クライアントをおぼろげながら映し出している。
このサイト(www.nminoru.jp)にやってきた Web アクセスを集計すると、 2004年の4月からの GET リクエスト(ただし画像ファイルに対するものを除く)だけで、 15,524 個のユニークな user-agent が見つかった。
2005年からの月毎の初出 User-agent 数を数えてみると下のようになる。 当サイトのアクセス数の増減は加味していないが、 毎月の 500 〜 800 の user-agent が新たに生まれている勘定だ。
Jan/2005 550 Feb/2005 532 Mar/2005 598 Apr/2005 545 May/2005 659 Jun/2005 632 Jul/2005 609 Aug/2005 815 Sep/2005 613 Oct/2005 552 Nov/2005 683 Dec/2005 539 Jan/2006 426 Feb/2006 432 Mar/2006 644 Apr/2006 687 May/2006 814
当然ながら毎月新しい Web クライアントが開発されているわけではなく、 ビルドバージョン日付が入っているものや UUID が見えてしまっているものによって バリエーションが増えているわけだ。 僅かながら User-Agent Spam も存在する。
それでも亜種を取り除いてみると、 新しい検索サイトエンジンや Web クライアントツールに出合えることもある。
データ
- uniq_agent_list.txt.zip (ZIP 形式、249KB)
ユニーク user-agent を下の例のように 1 行づつ初出時刻、user-agent 文字列に分けて出力したデータを公開します。 タブ区切りです。 当然ながら個人情報は含まれていません。 ご自由にお使いください。
[24/Apr/2004:20:37:23 +0900] "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)"
6/15 (木)
SNTP を使って何ができる?
情報通信研究機構 日本標準時プロジェクトが 国内の NTP クライアントを全部賄える NTP サーバ を 公開してくれたので、 www.nminoru.jp もそちらに ntp.nict.jp に NTP クエリーを向けることにした。
NICT は FPGA を使った専用ボードを起こして秒間 100 万リクエストを捌くようだ。 確かに NTP クライアントは時刻以外に情報源が不要なので、 ハード化するには理想的なサービスだよね。
NICT は同時に NTP クライアントコンテスト の開催する。 「精度部門」・「付加機能部門」・「アイデア部門」の 3 部門だが、 NICT NTP サーバを利用した という縛りがついてくる。 寝る前におちおちアイデアを考えようとしているのだが、 何も思いつかない (T_T)
P.S.
それとは別に SMP の CPU 間でリアルタイム・タイムスタンプ・カウンタ (x86 だと RDTSC 命令で取れる奴)を精確に同期させる方法を考えている。 マイクロ秒未満、できれば 10 ナノ秒ぐらいの精度が欲しい。
volatile uint64_t global_timestamp; /* システムユニーク */ uint64_t timestamp_drift; /* CPU ローカル */ uint64_t get_timestamp() { do { uint64_t t1 = global_timestamp; uint64_t t2 = get_local_cpu_timestamp() + timestamp_drift; if (t1 >= t2) { timestamp_drift += t1 - t2; continue; } if (compare_and_swap(&global_timestamp, t1, t2)) { return t2; } } while(1); }
メモリ上に compare & swap で タイムスタンプをすりすりあわせてゆくようなプログラムを書くと、 各 CPU のドリフト値がずりずりと前進して行くよ…
6/14 (水)
[Food] 元住吉にサーティーワン・アイスクリーム
暫く前に元住吉のブレーメン通りのビッグアップル(ハンバーグ屋)の1階の肉屋が閉店したのだが、 その跡地に本日サーティーワン・アイスクリームが開店した。
帰宅中に通りかかったのが9時ごろにだったが、 客が50人ぐらいの長蛇の列をなしている。 記念に自分も並んでみたが、 アイスクリームが買えるまでに40分かかるとは!!
6/12 (月)
お馬鹿ソング
エレックレコード復刻盤シリーズ からつボイノリオとまりちゃんズが発売されているのに気づき Amazon.co.jp で購入。 「宮崎吐夢記念館」 に続き馬鹿歌ゲット。
- ジョーズ・ヘタ (つボイノリオ)
-
1976年に発売されたつボイノリオの同名レコードの復刻。
すでに「あっ超ー」を 持っているのでだいぶ被っているのだが、 放送禁止ソング「吉田松陰物語」をついに聞くことができた (吉田松陰の時代には鉛筆もシンガポールもないだろう…)。
ところで「つボイノリオ」って「つ ボイノリオ」みたいだね。- オー・ジョーズ
- 金太の大冒険
- 女学生
- ヤイヤイオウオウイエイエ ウェスタンハピネスイッツオールライト
- 怪傑黒ズキン
- 極付け!お万の方
- 一宮の夜
- 男の子守唄
- わっぱ人生
- 吉田松陰物語
- 気楽な時代も過ぎました
- 三巴狂歌 (まりちゃんズ)
-
70年中期(?)に活躍したフォークトリオだが、
私は「SM(サドマゾ)夜曲」なんかを断片的に知っているだけだった。
今回 CD を聞いてみるが、全曲が SM 夜曲みたいな調子なのね…
この人たちの曲って当時の公共放送の電波にのったのかしら?- まりちゃん
- くちづけ
- ひがみブルース
- まりちゃんが結婚してしまう
- 僕等はドラ息子
- もう冬
- もうすぐ23才
- 尾崎家の祖母 PARTII
- 君を食べちゃいたい
- オザキの逆上節
- 続まりちゃん
- 編みかけのセーター
- 男の世界
6/10 (土)
[Prog][Linux] リアルタイムシグナルで送れるデータサイズ
リアルタイムシグナルは sigqueue(2)
を利用してシグナルを送信するが、
その際に sigval_t
型の情報をパラメータとして送れる。
int sigqueue(pid_t pid, int sig, const union sigval value);
sigval_t
型は int
型と void*
型の共用体なので、
結局 ポインタと同じサイズのデータを一緒に送れる。
typedef union sigval{ int sival_int; void* sival_ptr; } sigval_t;
一方で Linux でリアルタイムシグナルを送信するシステムコールは、
siginfo_t
型のデータを送信可能になっている。
extern long sys_rt_sigqueueinfo (int pid, int sig, siginfo_t *uinfo);
siginfo_t
型は IA-32 で 128 バイトだ。
si_signo
など共用のフィールドを除くと
_pad
が 29 個分使える。
typedef struct siginfo { int si_signo; int si_errno; int si_code; int __pad0; /* Explicit padding. */ union { int _pad[__SI_PAD_SIZE]; /* POSIX.1b signals. */ struct { __pid_t si_pid; /* Sending process ID. */ __uid_t si_uid; /* Real user ID of sending process. */ sigval_t si_sigval; /* Signal value. */ } _rt; } _sifields; } siginfo_t;
実際には sys_rt_sigqueueinfo
システムコールは、
si_signo
にシグナル番号、
si_code
に SI_QUEUE
、
si_pid (=_pad[0])
と si_upid (=_pad[1])
にプロセスIDと実行プロセスIDを
設定しないとエラーになる。
結局、(29 - 2) * 4 = 108 バイトがシグナルと一緒に送信できるデータサイズになる。
実際に sys_rt_sigqueueinfo
システムコールを使うプログラムを書いてみると、
プロセス間で 108 バイト分のオプション情報が送れていることが確認できた(Linux カーネル 2.6.11)。
108 バイト分のデータを送れるのは実装の都合にすぎないので、
sigval_t
型以上の部分は将来反故になる可能性がある。
ただこれだけ情報が送れると、なんか色々利用したくなるナリ。
6/9 (金)
GyaO on FLET'S (紹介ページ)
USEN のインターネット TV GayO が、 いつのまにかフレッツ・スクウェアで見られるようになっていた。 フレッツ・スクェア自身はコンテンツ不足だから、いい提携の仕方だと思うよ。 いっそ YouTube ともピアしてくれるとありがたい。
インターネットを経由せずのフレッツネットワーク内でのアクセスなので、 ストレスなしでアクセスできる。 アクセスサイトは www.gyao.flets なんだけど、 認証は gyao.jp で行っているようで gyao.jp へのプロキシ設定を行う必要がある点が少し奇妙だ。
リンク
- GyaO on フレッツ (イントラネット)
6/7 (水)
ワンクリック料金請求詐欺スパム (/.J)
ワンクリック料金詐欺の容疑者が捕まって、 スパムのクリック率などが明らかになったそうだ。 1億8千万通以上のスパムメールを送って 2,600人から 7,500万円を詐取。 スパムメール100万通あたり100人がサイトを訪れているそうだ。
詐欺に引っかかる人がいるからスパマーはスパムを送るわけだが、 啓蒙活動をしても引っかかる人の割合は変わらないのではないだろうか。 それよりシステマティックな方法で、 スパマー側の損害を増やす方法はないだろうか?
例えば、 受信したメールの中に書かれている URL をバックグラウンドで先読みさせる機能が標準になったとする。 今まで 1,000人がサイトを訪れて10〜20人が金を払うとするとコンバージョン率は 1〜2% だが、 出したスパムが全部サイトアクセスに変わるとコンバージョン率は 0.001 〜 0.002% まで低下する。 スパマーに出稿したサイトは新たな設備投資が必要になるし、 それをさぼるとサイトが繋がりにくくなるので、 金を払っていた鴨の 10〜20人にも逃げられてしまう。
今回の件だと8,000万アクセスで7,500万円の売り上げがあるから、 それでもペイしそうだな。 ダメか…
[Food] 職場のお土産と冷性コーンポタージュ
職場の自動販売機で見つけた冷たいコーンポタージュ。 ちょっと珍しい。
職場のお土産で貰った「壱万円の里」というゴーフルみたいなお菓子。 福沢諭吉と書いてないと菓子の人物が誰だか分からない…
6/6 (火)
オーメンの呪い?
職場に持ち出していた 外付け USB HDD BOX がお役御免になったので、中身の HDD を取り外して持って帰ろうとする。 しかしお日柄が悪かったのか 80GB の Western Digital の IDE HDD (WD800AB-00BA0) から電源コネクタを外そうとすると、電源ピンがポッキリと折れる羽目に。
中身は無事なのにもう使えないディスクというのが痛い…
6/2 (金)
[Work] 初徹夜
一日の夜からこの事業所に移ってから初めての徹夜。
日中は寒いぐらいに冷房が効いているのだが 12時前後で空調が切れるようだ。 それからはパソコンの熱でグリグリと室温が上がってゆく。
2時を過ぎると建物全体から人が居なくなる。 疲れた時には外気にあたりたいが、 いったん外に出ると守衛さんに入れて貰わないと建物の中に入れないので、 建屋の中をぐるぐる歩いて気分転換する。 かなり怪しい人だ。
4時を過ぎたので机につっぷして仮眠を取る。 椅子が堅くて辛いなり。