5/30 (月)
5/28 (土)
5/27 (金)
今日見かけたねじれた信号
武蔵小杉駅入口の信号機だが、奇妙なねじれ方をしている。 意図してこのように配置しているとも思えないし、車がぶつけたわけでもなさそうなのだが。
今日の自由主義の切り札
近所にこんな看板が立っていた。 ハートのエースをイメージしたらしい。
5/22 (日)
日比谷オクトーバーフェスト2011 (公式)
2005年に「日本におけるドイツ年」にはじまったオクトーバーフェストは毎年恒例になっていたのね毎年恒例になっていた (2005年9月23日の日記)。 本当はミュンヘンで10月に行われるものだけどなぜか5月なのね。
味はともかく値段が香具師並みなのがひどい。 プレッツェルが300〜400円とか、アンティ・アンズ(プレーン220円)より高いよ。 円高差益はどこ行ったのかしら。
P.S.
日比谷公園前の帝国ホテルには警官が厳重な警備をしていた。 中韓の首脳が来日しているからかしら?
今日見かけた変な庭木
日比谷公園内で見たペンギンカットの庭木。
5/17 (火)
5/15 (日)
からあげカーニバル@恵比寿ガーデンパレス
恵比寿ガーデンパレスの恵比寿三越内でからあげカーニバルというのが開催されているらしいので行ってみた。
恵比寿ガーデンパレスは、都内にありながら横浜の赤レンガ倉庫地帯のような雰囲気ののんびりした場所なのね。
恵比寿三越の地下二階の催事場が開催地だったのだが、会場が狭いわりに人・人・人がいる。 名古屋の手羽先「鳥開」に並んだが30分近く待たされた。
やっとの手羽先が買えたよ。 会場には机等がないので、ガーデンパレスの園内に座って食べます。 箸が欲しい。
秋葉原周辺
秋葉原のラジオ会館が改装のために閉館される。 現在のテナントは、 旧石丸電気パソコン館とザコン館の跡地に一時定点するようだ (AKIBA PC Hotline! 2001年4月27日、 4月29)。 長く廃墟を晒していたザコン館もようやくテナントが決まるのか。
日曜日の歩行者天国だが、入り口の所にある車止めはバリゲードのようだ。
[Food] 銀座 SHAKE PARADISE (ロッテ)
銀座で見かけたジェラートシェーキのお店。 ロッテリアの一部らしい。
[Food] 矢場とん@銀座 (公式)
久しぶりに銀座の「矢場とん」を食べに行く。 以前に行ったのは2005年1月15日、2005年2月26日なので随分経つ。
この店は銀座駅と東銀座駅の間と覚えていたのだが、半蔵門線の銀座駅を降りた後に東銀座に向うつもりで気づいたら八重洲の方に行っていた。 1キロ以上迷走した後になんとかお店にたどり着く。
久しぶりに食べた「わらじとんかつ」は、うまうまし。
目についたオブジェ
地下鉄の広告で見た獨協大学の広告。 MauS がイメージキャラクターになっているけど、これは前からだっけ?
秋葉原のまんだらけの近くで見たカッコいい車。
神田で見た東京 元祖カリーどら焼き 福神漬け入りの広告。
5/12 (木)
[MyPC] 自宅を無線LAN化
ブロードバンドルータを Buffalo の BBR-4HG から WZR-HP-AG300H/Y に買い換えた(5月8日の日記)ので、部屋を再び無線LAN化する。 手持ちのThinkPad T40は IEEE 802.11b 準拠。 今でも健気に無線 LAN 接続できるが、古いので WPA2 認証や AES 暗号化が使えないのが玉に瑕。
新しいルーターでは IPv6 ブリッジ機能が使えるようになった。 これでフレッツ・スクェアv6にアクセスできるようになったのだが、久しぶりにアクセスしたフレッツ・スクェアは何かスカスカなサイトになっている。
5/11 (水)
[MyPC] Linux マシンの P2V に成功
先日自宅の Windows2000 マシンの物理マシン→仮想マシン化(P2V)を実行した(4月5の日記)が、今度は会社の物理 Linux マシンを仮想マシン環境に移行する。
移行元は Opteron マシン上に入っている Vine Linux 3.1。 OS が古すぎるのか Windows2000 の P2V で使ったようなVMware vCenter Converter Standaloneが使えない。 インストールができるもののクライアントを立ち上げても、ローカルサーバに接続できないのだ。
仕方がないのでデータは dump → restore する作戦にでる。
ちなみに移行元マシンは IDE で、hda1 がブートパーティション(ext3)で、hda2 がスワップパーティション、hda3(ext3)がルートパーティションとなる。
- 1. 移行元マシンを dump で吸い出し ftp サーバに転送
-
移行元マシンのパーティションは ext3 なので dump ↦ restore が可能。 まず dump でローカルマシンのパーティションを吸い上げて、それを curl コマンドで ftp サーバに叩き込む。
# dump -0uf - /dev/hda3 | curl -T - -u user:password ftp://server-name/path/dump_hda3.dd
- 2. ダミー Linux ゲストを用意
-
VMware Player 上でダミーの Linux ゲストを作成する。 移行元マシンと同じ世代の OS の方がよい。 移行元マシンが IDE だったので、SCSI の方が好都合である。
- 3. QEMU で移行先の仮想マシンのイメージファイルを作成しダミー Linux ゲストにマウント
-
次に QEMU で新しい移行先仮想マシンのイメージファイルを作成する。 QEMU on Windows をインストールした後に、以下のコマンドをたたいて 100G のイメージを作る。
最後のイメージサイズは、仮想ゲストとして見える最大サイズであり、作成直後は数十MBになっている。
qemu-img.exe create -f vmdk new_hda.vmdk 100G
QEMU on Windows のバージョンが古いと、大きなディスクイメージが作れない。 私は 0.9.0 で失敗し 0.13.0 で成功した。
先ほどのダミー Linux ゲストの .vmx を編集し、new_hda.vmdk を追加する。 IDE0 がすでに使われている場合は、別の場所にする。
ide0:0.present = "TRUE" ide0:0.fileName = "new_hda.vmdk"
- 4. ダミー Linux ゲスト上の作業
-
/dev/hda を fdisk し、移行元と同じようにパーティションを切る。
その後に mfs をかけて、ダミー Linux ゲスト上にマウントする。
# mkfs.ext3 /dev/hda1 # mkfs.ext3 /dev/hda3 # mkdir -p /mnt/hda1 /mnt/hda3 # mount -t ext3 /dev/hda1 /mnt/hda1 # mount -t ext3 /dev/hda3 /mnt/hda3
ftp サーバから移行元マシンの dump データをダミー Linux ゲストに移動し、ダミー Linux ゲスト上で restore する。
# cd /mnt/hda1 # restore -rf /path/dump_hda1.dd # cd /mnt/hda3 # restore -rf /path/dump_hda3.dd
これで移行元マシンのデータは移ったので、chroot して移行元マシンと同じ環境であることを確認する。
# umount /mnt/hda1 # mount -t ext3 /dev/hda1 /mnt/hda3/boot # chroot /mnt/hda3
必要に応じて MBR を書き込む。
# /sbin/lilo
最後に /dev/hda2 をスワップパーティションを設定する。
# mkswap /dev/hda2
- 5. 移行先マシンの完成
-
new_hda.vmdk には移行元マシンのイメージができている。 ダミー Linux ゲストの .vmx を編集してもともとあったダミー Linux の vmdk を消してしまうか、新規に作成した移行先ゲストのイメージに new_hda.vmdk を追加する。
VMware Player で起動すれば、移行元の物理マシンと同じ環境が出来上がっている。
手順が多いが移行に成功。
ところで新しい Linux のファイルシステムは ext4 や btrfs が主流になって、ext3 は使われなくなっている。 dump & restore はすでにないのだが、どうやって移動しているのかしら。 rsync?
5/8 (日)
[MyPC] ルーターを新調
長らく2004年2月17日に購入した BBR-4HG を使っていたのだが、NTT東日本のフレッツ・スクウェアがv6接続に変わってからフレッツ・スクウェアにアクセスできなくなっていた。 それ以外にも BBR-4HG に無線 LAN 機能もない点、過アクセス時にしばらく通信不能になる点などが気になっていたので、この際新しいルーターを購入することにした。
横浜のヨドバシで製品を物色した上で、BUFFALO の WZR-HP-AG300H/Y (Buffalo) を購入。
ついでに前々から欲しかった GPS ロガーを探す。 I-O DATA の「旅レコ」 (I-O DATA) を購入。
[Food] Soup Stock Tokyoのスープ (公式)
Soup Stock Tokyo でスープばかり食べている気がする orz
クリームスープは横浜駅ルミネ店で、 玉葱スープはクイーンズ伊勢丹横浜店のものです。
[Food] 「卵と私」@横浜駅
5月5日にオムライスを食べ損なったので、オムライスの専門店「卵と私」に行く。 前回は2006年5月15日に行っている。
季節限定メニューと思われる「チーズインオムライスドリア 春野菜のデミグラスソース」を食べる。 オムライスによって奥手がデミグラスソース、手前側がチーズソースである。 分かり辛いがオムライスの上にのっているメンマみたいなのは竹の子である。
5/6 (金)
[Linux] timer_settime に設定可能な最長時間
timer_settime
は POSIX で定義されたタイマー関数で、基本的には設定時間が来た場合に SIGSEGV シグナルを上げるか、何もしないがタイマー設定時刻の残り時間を timer_gettime
で取得することができる。
timer_settime
はフォーマットとしてはナノ秒単位の時間設定が可能である。
実際のタイマー精度は実装依存である。
あまり短い時間を指定すると、timer_settime
を呼び出したコールサイトに処理が戻る前にシグナルが送信されることがある。
同様に timer_settime
に非常に長い時間を指定すると、実装依存だが、受理されずにタイマー設定に失敗してしまうことがある。
この限界以上の長い時間を指定した場合の設定失敗は POSIX の仕様では決まっていないようだ。
Linux の場合、限界を越える長時間タイマーを指定するとエラーとならず(timer_settime
の戻り値は 0)、可笑しな動作をする。
この動作を検証する timer_max_limit.c というプログラムを書いた。
手持ちの環境では限界を越える長時間を指定すると、いきなり発火してしまうようだ。
timer_settime
で指定できる上限値を取得する方法は今のところ見つけていない。
追記
過去に同じネタで日記を書いてた。
5/5 (木)
コンバーチブル型のタブレットのバリエーション
キーボード付きタブレット、いわゆるコンバーチブル型のタブレットは、構造上の違いから何種類か存在する。 自分的には以下の5種類に分類している。
- ディスプレイが左右回転 … HP TouchSmart、DELL Latitude XT
- ディスプレイフレームの内側で上下回転型 … DELL Inspiron Duo
- スライド型 … SONY Freestyle Hybrid PC
- 分離型 … Asus Eee Pad Transformer
- デュアルディスプレイ仮想キーボード … 東芝 libretto W100/11M
実用的なコンバーチブル型タブレットの構造はこれで尽きているような気もするが、他に構造はないだろうか? 「蓋を閉じた状態からヒンジが360°回転するタブレット」は実現できそうな気がする。
[Food] 日比谷松本楼GRILL@横浜 (食べログ)
横浜で飯を食べることになったので、相鉄ジョイナス店のファンシーレストランアベニューに入って、これだと思った店に飛び込んでみる。
オムレツライスは普通の白いライスなので、玉子の薄焼きが載ったライスという印象。 カツカレーもあんまり美味しくない。 ここは外れか。
5/4 (水)
皇居東御苑 (宮内庁)
東京国立近代美術館でやっている「生誕100年岡本太郎展」を見に来たのだが、すでに行列ができており40分待ち。
仮に入館してもほとんど見れそうにないので諦めた。 代わりにすぐ近くにある皇居東御苑に入場する。
[Food] Soup Stock Tokyo の「生姜入り7種類の野菜の和風スープ」@新御茶ノ水 (公式)
「生姜入り7種類の野菜の和風スープ」を食べる。 7種類の野菜は生姜、玉葱、長ネギ、キャベツ、人参、ごぼう、水菜らしい。 スープの中にでんぷん質の「何か」が入っているが、米粒かしら?
絵師100人展
秋葉原の UDX で「絵師100人展」というのをやっている。 しかし入場料が千円なので、そこまでして見たいと思えず素直に退散。 3時間以上歩き続きで足が痛いのです。
今日見かけたカッコいい車
大手町で見かけたハローキティのバス。
秋葉原で見た軍用車っぽい車。
5/3 (火)
[Prog] 仮想メモリ空間のフォルトチェック関数
プロセスの中から自分が使っている仮想メモリの状態を確認したいことがある。
Windows には VirtualQueryEx
API があるのだが、
これに相当するシステムコールがUNIX系OSにはない。
一部のアーキテクチャは仮想メモリ空間が正しくマップされているかどうかをチェックする命令(2006年3月13日の日記)を持っているが、OSのサポートが十分でないためアクセス位置の仮想メモリのチェックに至らないことがある。
仕方がないので、実際にメモリアクセスを起こしてSIGSEGVシグナルが発生するかどうかをチェックする。
以下は ia32 の例。
probe_r
という関数に渡したアドレス p をチェックし、読み込み可能なアドレスであれば 0 を、SIGSEGV シグナルが発生するようであれば 1 を返す。
/** * gcc -g -O3 -D_GNU_SOURCE probe_r.c */ #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <ucontext.h> /* * アドレス p の位置がアクセス可能なら 0 を、アクセス不能なら 1 を返す。 * * 以下のようにコンパイルされることを期待している。 * * 55 push %ebp * 89 e5 mov %esp,%ebp * 55 08 mov 0x8(%ebp),%edx * 8a 02 mov (%edx),%al * 31 c0 xor %eax,%eax * c9 leave * c3 ret */ int probe_r(void *p) __attribute__((noinline)); int probe_r(void *p) { char c = *(volatile char*)p; return 0; } static void signal_handler(int sig, siginfo_t* info, void* p) { unsigned long eip, func_addr; eip = ((ucontext_t*)p)->uc_mcontext.gregs[REG_EIP]; func_addr = (unsigned long)&probe_r; if (func_addr <= eip && eip < func_addr + 11 /* 関数サイズ */) { /* mov (%edx),%al と xor %eax,%eax をスキップするために4バイトを加算。 */ ((ucontext_t*)p)->uc_mcontext.gregs[REG_EIP] += 4; ((ucontext_t*)p)->uc_mcontext.gregs[REG_EAX] = 1; } else { fprintf(stderr, "SIGSEGV: si_addr=%p\n", info->si_addr); exit(0); } } int main(int argc, char** argv) { struct sigaction act; act.sa_flags = SA_SIGINFO; sigfillset(&act.sa_mask); act.sa_sigaction = signal_handler; sigaction(SIGSEGV, &act, NULL); int data; printf("OK: addr %p = %d\n", &data, probe_r(&data)); printf("NG: addr %p = %d\n", NULL, probe_r(NULL)); return 0; }
probe_r
関数は、生成コードがコンパイラ依存にならないように、アセンブラで書いた方がよい。
5/2 (月)
[時事] ビンラディン殺害
米国はオサマ・ビンラディンをパキスタンの首都イスラマバード郊外で発見。 米海軍特殊部隊SEALSが作成行動を開始、銃撃戦となりビンラディンは死亡。