7/30 (月)
[Food] 本場タイ屋台料理チャオタイ@川崎
9月に結婚を控えた大場氏と川崎で会食。 先月の24日に行ったタイ料理チャオタイ(公式、ぐるなび、食べログ)へ。
図らずしてタイ料理屋ごとのプー・パッ・ポン・カリーの食べ比べ(ティーヌン 神保町店、ティーヌン 川崎ダイス店)をしているが、店ごとに味が違う。 チャオタイのは蟹は口で殻が噛み切れるようなソフトシェルで、カレーはラー油が浮いていてちょっと四川風だ。
でもプー・パッ・ポン・カリーはどの店で食べても量が多い。
7/28 (土)
[Movie] Dark Knight Rising
川崎チネッタでバッドマンの「Dark Kinght Rising」を観る。 原題は "Dark Knight Rises" で勝手に現在進行形に直されている。 ネタばれになるので感想はここには書かないが、伝説が壮絶に終わるという謳い文句の割には「つ・づ・く」という内容だった。
[Food] 元祖餃子舗みんみん@川崎チネチッタ
川崎チネチッタ内の紅虎餃子房があった場所が「元祖餃子舗みんみん」になっていた。 「みんみん」の「みん」は王編に民と書く。 映画の半券で大部分のメニューが20%引きになる。
7/21 (土)
[Food] Xi'an@横浜ヨドバシレストランゾーン
刀削麺が有名な中国西安料理と火鍋の店「Xi'an(シーアン)」でどちらかというと四川料理風の牛肉の水煮を食べてみた。
中華街の四川料理屋「景徳鎮」で食べるのとはだいぶ違って、山椒よりも唐辛子の効きが強い。 有楽町の刀削麺荘の有楽町支店で牛肉水煮を食べた時も四川料理の牛肉水煮ほど辛く感じなかった。 西安料理と四川料理の差か。 自分的には「景徳鎮」の水煮の方が好みだ。
7/19 (木)
7/16 (月)
[Android] Bluetooth のオーディオヘッドセットを再購入
Android 用の Bluetooth のオーディオヘッドセット(2011年7月30日の日記)が接触不良で、イヤホンジャックの挿さり方によって音声が聞こえたり聞こえなかったりする。 なんとも不具合なので新しいのを買い直した。
今度はロジテックの LBT-AVHP300 だが、勝手からイヤホン一体型だと気づく orz Bluetooth ヘッドセットに呪われているようだ。
7/15 (日)
7/12 (木)
[Linux] Isolate CPU
Linux は処理が集中した CPU から空いている CPU にプロセスをマイグレーションするスケジュール機能が備わっている。 このため 1 つの CPU を特定の処理のために占有するということが難しい。 しかし CPU Isolation を使うと CPU マイグレーション先を制限することができる。 なぜなら Linux のプロセスは init を fork して作ることになるが、init の動作することが可能な CPU アフィニティがカーネルパラメータの CPU Isolation によって制限されるからである。
Linux の CPU Isolate を使うには、ブート時のカーネルパラメータに isolcpus
を指定する。
指定するのはマイグレーション先から外したい全ての CPU の番号である。
複数の CPU を並べる場合はカンマ(,)を、 連続した CPU を指定する場合にはハイフン(-)を指定する。
例えば論理 CPU が 12 ありそのすべてを isolation したい場合には isolcpus=0-11
と指定する。
存在する CPU 数よりも大きい CPU 番号を指定しても構わない(ただし NR_CPUS 未満であること)。
default=0
timeout=5
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=5 serial console
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-274.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-274.el5 ro root=/dev/VolGroup01/LogVol00 nmi_watchdog=0 rhgb quiet isolcpus=0-11 crashkernel=128M@16M console=tty0 console=ttyS0
initrd /initrd-2.6.18-274.el5.img
CPU Isolation はプロセスマイグレーションに関する機能のため、以下には効果がない。
- 割り込みは isolation された CPU にも上がる。
- ksoftirqd/x や events/x のように明示的に CPU を指定して起動しているスレッドは動作する。
CPU Isolation が効いていることを確認するには、ps コマンドに psr を指定して、今動いている CPU を表示するのが簡単である。 CPU Isolation をとらない場合には、プロセスの動作する CPU 番号がバラバラになる。
$ ps -eo uid,pid,ppid,c,stime,tty,time,psr,cmd UID PID PPID C STIME TT TIME PSR CMD 0 6688 1 0 Jul05 ? 00:00:00 5 /usr/sbin/sshd 0 6697 1 0 Jul05 ? 00:00:00 6 cupsd 0 6710 1 0 Jul05 ? 00:00:00 6 xinetd -stayalive -pidfile /var/run/xinetd.pid 0 6719 1 0 Jul05 ? 00:00:00 0 gpm -m /dev/input/mice -t exps2 0 6728 1 0 Jul05 ? 00:00:00 6 crond 43 6761 1 0 Jul05 ? 00:00:00 6 xfs -droppriv -daemon 0 6778 1 0 Jul05 ? 00:00:00 6 /usr/sbin/atd 70 7244 1 0 Jul05 ? 00:00:00 0 avahi-daemon: running [ps1.local] 70 7245 7244 0 Jul05 ? 00:00:00 6 avahi-daemon: chroot helper 0 7291 1 0 Jul05 ? 00:00:00 8 /usr/bin/python -tt /usr/sbin/yum-updatesd 0 7299 1 0 Jul05 ? 00:00:00 11 /usr/libexec/gam_server 0 7481 1 0 Jul05 ? 00:00:00 6 wvAgent /opt/FJSVwvbs
しかし CPU Isolation をとると明示的に実行する CPU を指定して動いているスレッド以外は PSR 0 で動くようになる。
$ ps -eo uid,pid,ppid,c,stime,tty,time,psr,cmd UID PID PPID C STIME TT TIME PSR CMD 0 5926 1 0 17:12 ? 00:00:00 0 cupsd 0 5939 1 0 17:12 ? 00:00:00 0 xinetd -stayalive -pidfile /var/run/xinetd.pid 0 5948 1 0 17:12 ? 00:00:00 0 gpm -m /dev/input/mice -t exps2 0 5957 1 0 17:12 ? 00:00:00 0 crond 43 5990 1 0 17:12 ? 00:00:00 0 xfs -droppriv -daemon 0 6007 1 0 17:12 ? 00:00:00 0 /usr/sbin/atd 70 6191 1 0 17:12 ? 00:00:00 0 avahi-daemon: running [ps0.local] 70 6192 6191 0 17:12 ? 00:00:00 0 avahi-daemon: chroot helper 0 6405 1 0 17:12 ? 00:00:00 0 wvAgent /opt/FJSVwvbs
Isolation された CPU 上でプロセスを動かすにはプログラム中で sched_setaffinity(2)
を使うか、taskset
コマンドなどを使用する。
$ taskset -c 1 a.out
7/11 (水)
[Linux] ethtool でイーサーネットのポートを点滅させる
イーサネットのポートがたくさんあるマシンだと、OS から見えるネットワークインターフェイス(NIC)と物理的なポートの対応関係が付け辛い。
しかし ethtool で -p
/--identify
オプションを使うと、ポートの LED を点滅させることが可能になる。
/sbin/ethtool -p ethN
7/8 (日)
大英博物館 古代エジプト展 & アラブエクスプレス展@森アーツセンターギャラリー
六本木ヒルズの森アーツセンターギャラリーの大英博物館 古代エジプト展がはじまる。 人の入りはかなり少ない。 並ばずに入れた。 前回歌川国芳展に行った時には大名^H行列ができていたのと大違い。
今回の展示の中心は新王朝時代のパピルスとミイラの棺だ。 おなじみの死者の書は死後の世界の案内板として丁寧に記述されているのだが、それ以外の用途のテキストも大量に流通していたのを知る。 こう落書きみたい絵がかかれたパピルスが多い。 なんか新鮮な感じ。
今回の展示を見るまで知らなかったのだが死者の書やミイラのマスクなどはせいぜい新王国時代までだと思っていたのだが、プトレマイオス朝や下手するとローマ帝国の属州になった後にも作られていたのね。 エジプト史は長いから各時代の違いをイメージするのがムズカシイ。
アラブ・エクスプレス展も開催中。
六本木ヒルズから周囲の風景。
[Food] インドネシアレストラン Cabe チャべ@目黒
7/4 (水)
[Prog] UNIX 系 OS でデバッグ情報を別ファイルに分離する
コンパイラ時に -g
を付けることでオブジェクトにデバッグ情報を含めることができる。
これは機械語のコード行がソースコードのどの位置と対応しているかという情報で GDB などでデバッグする時に使える。
ただしデバッグ情報付きバイナリはサイズが大きいので、非開発環境ではデバッグ情報を strip したバイナリを使い、なおかつそのコア解析などではデバッグ情報を使って行えるようにしたい。 そのためにデバッグ情報だけをバイナリから別ファイルに分離する。
- Debugging with GDB | 18.2 Debugging Information in Separate Files
まずプログラム foo があった場合、このデバッグシンボルだけを抽出したファイル foo.debug を作成する。
$ objcopy --only-keep-debug foo foo.debug
完成した foo.debug は適当なディレクトリに格納する。
次に foo からデバッグ情報を剥ぎ取る。 これで foo のサイズは大幅に小さくなる。
$ strip -g foo
最後に foo にデバッグ情報の位置を書き込む。 これはオブジェクト中に .gnu_debuglink セクションを設けその中に先ほどの foo.debug の位置を書き込んで、GDB 等のデバッグツールに位置を教える。 パスは絶対パスで指定したほうがよいだろう。 相対パスでも指定可能。
$ objcopy --add-gnu-debuglink=/path/foo.debug foo
以上でプログラム foo はデバッグ情報のないコンパクトなサイズになったが、GDB では
strip する前と同様にデバッグ情報を使うことができる。
ただし .gnu_debuglink を相対パスで指定した場合、GDB は set debug-file-directory directories
を設定して foo.debug のあるディレクトリを教えてやる必要がある。
追記:8/22
誤解していたが .gnu_debuglink セクションはディレクトリを除いたファイル名で埋め込む必要があるようだ。 そのため絶対パスによる埋め込みはできない。
objcopy --add-gnu-debuglink で埋め込んだ .gnu_debuglink セクションは、objdump で内容を確認できる。
$ objdump -s -j .gnu_debuglink foo
.gnu_debuglink セクションはファイル名に CRC を付けるので、埋め込んだ時の文字列よりも長くなる点に注意。
7/3 (火)
東京証券取引所の株取引方式
もし東京証券取引所の株取引をシミュレーションするプログラムを書いたらどうなるかという観点から、東証の取引処理をまとめてみた。
まず参考になりそうなリンクをあげる。
- 東証 | 売買制度 内国株の売買制度
- 楽天 | 大図解! 株の約定のしくみ! (PDF)
東証の株取引は平日の09:00から11:30までと12:30から15:00までの2回開かれる。 これを「売買立会」と呼び、「午前立会(前場、Morning Session)」、「午後立会(後場, Afternoon Session)」と呼ぶ。 株取引は「板寄せ方式(Itayose method)」と「ザラバ方式(Zaraba method)」があり、基本的に株の取引が開始される時は板寄せ方式で行い、板寄せ方式でいったん値段が付くとザラバ方式に切り替えられる。
注文のパラメータ
株の売り買いをする側は、「銘柄」「株数」「売り or 買い」「注文方式」の4つを決めて注文を出す。
- 注文は前場の始まる1時間前(9:00)と後場が始まる25分前(12:05)から、立会が終わるまで出すことができる。 立会前の注文はシステム内に queuing される。
- 売り注文と買い注文が取引成立すると「約定」する。 注文のうちいったん約定した部分は取り消せない。 逆に約定する前は注文を取り消すことができる。
- 銘柄ごとに売買する場合の最小株数が決まっており単位株数と呼ばれる。 しかし株取引を考える場合は単位株数は本質的でないので、全ての株が単位株数が1として説明する。
- 1,000 株の買い注文と 400 株の売り注文の 2 つがあった場合、400 株分だけ約定するという部分的な約定があり得る。この場合、株数の少ない注文は完全に確定し、残りはその分残る。この例では注文が 1,000 株買いから 600 株買いに変わる。
- 注文に売り・買いがある。説明不要。
- 1日の終わりに約定しなかった注文は全部破棄。
注文方式には基本的に「指値注文(Limit orders)」と「成行注文(Market orders)」がある。 指値注文は値段を指定して売り買うする注文パターンである。
成行注文は値段を指定せず値段がいくらでも即効で売り買いするパターンである。 買いの成行注文は成買と呼ばれ「どんなに高くてもいいから買え」という注文になる。 売りの成行注文は成売と呼ばれ「どんなに安くてもいいから売れ」という注文になる。
特別な注文パターンとして「指値出来ずば引け成行注文」がある。 これはザラバでは「指値注文」として値段を持つが、立会が終わり板寄せに切り替わったら「成行注文」に切り替わる注文方式である。
板寄せ方式
板寄せ方式は株取引が開始される時に使用される取引方式である。 具体的には以下の4パターンで使用される。
- 立会いが開始される場合(「始値」を決める)
- 立会いが終了される場合(「終値」を決める)
- 一時的に売買停止していた銘柄を再開する場合
- 特別気配を出している株
立会が開始された直後は銘柄ごとの値段がない。 そのため銘柄毎の値段をつけるのが板寄せ方式である。 これは売り注文の株数と買い注文の株数が釣り合うポイントを探すところから始まる。 このバランスポイントは成売注文を値段の高い方からその株数累積してゆき、成買い注文を値段の安い方から株数を累積してゆく(成行注文は成売は -∞ 円、成買は +∞ 円の指値注文だとして扱えばよい)。
これが下の表のように並んでいるとすると累計株数は 501 円と 500 円のところで交差していることになる。 よってこの2つの値のどちらか(別のルールで決まっているはず)が「始値」になる。
売り注文 | 値段 | 買い注文 | ||
---|---|---|---|---|
累計 | 数量 | 数量 | 累計 | |
成買 | 4 | 4 | ||
45 | 10 | 503円 | 4 | |
35 | 10 | 502円 | 1 | 5 |
25 | 10 | 501円 | 7 | 12 |
15 | 3 | 500円 | 10 | 22 |
12 | 2 | 499円 | 10 | 32 |
10 | 4 | 498円 | 10 | 42 |
6 | 6 | 成売 |
ここでは始値を 500 円とする。
- 価格優先の原則(Principle of price priority)
- 売り指値注文は値段が安い注文が、買い指値注文は値段が高い注文が優先される。 成行注文は成売は -∞ 円、成買は +∞ 円の指値注文だと思えばよい。
- 同時呼値(Simultaneous orders)
- ザラバでは「時間優先の原則」として同じ値段の注文であれば先に注文を出したほうが優先されるが、板寄せ方式では全ての注文は同時に出したと仮定される。
価格優先の原則により500円以下の売り注文と500円以上の買い注文が、売り注文はより安い注文から、買い注文はより高い注文から約定されてゆく。 ただし成行注文は指値注文に優先する。 価格は約定する時の値段は「始値」である。503円の買い注文は500円で買えるし、498円の売り注文は500円で売れることになるが、損してないというか得したんだからいいでしょう。
501円以上の売り注文と499円以下の買い注文は、板寄せ方式では約定せずザラバに残される(はず)。
優先順位に従って500円以下の売り注文と500円以上の買い注文を約定してゆくと、最後に売り買い株数のどちらかが多くなる。 取引参加者 E が 9 株を売り注文を出しているが、参加者 A〜D が同じ 500 円で計 10 株の買い注文を出している。 板寄せ方式は同時呼値なので、A〜D の買い注文は同時に出したと判断される。 その替わりに取引数量が多い方から約定するとある。 つまり A の 4 株、B の 3 株、C の 2 株が注文が約定し、D の注文が残る。
売り注文 | 値段 | 買い注文 | ||
---|---|---|---|---|
参加者 | 数量 | 参加者 | 数量 | |
500円 | A | 4 | ||
500円 | B | 3 | ||
500円 | C | 2 | ||
500円 | D | 1 | ||
E | 9 | 499円 |
ザラバ方式
板寄せ方式で始値がついた後は、ザラバ方式に切り替わる。 ザラバ方式では以下の原則によって処理される。
- 価格優先の原則
- 売り指値注文は値段が安い注文が、買い指値注文は値段が高い注文が優先される。成行注文は成売は -∞ 円、成買は +∞ 円の指値注文だと思えばよい。
- 時間優先の原則(Principle of time priority)
- 同じ値段の注文であれば先に注文を出したほうが優先される。ただし前場から残った注文は、後場の最初に板寄せが行われるため全ての注文が同時に出たと判断される。
値幅制限の範囲であれば上記の2ルールに従って、一番高い買い注文と一番安い買い売り注文のうち一番注文時間が早いものをマッチングして約定する。 最後の約定に使われた価格が現在の値段になる。
ただし買い注文と売り注文の指値が異なる場合、どちらかが一方に合わせる必要があるのだが、どちらが優先されるかのルールが見つからない。 どうすればいいのだろう?
追記:7/24
指値が異なる場合でも先に入れた注文が優先するようだ。 買い指値注文が残っているところに売り指値注文が入ると買い指値注文側の値段で、売り指値注文が残っているところに買い指値注文が入ると売り指値注文側の値段で売買される。
そのほか
ストップ配分、特別気配、連続約定気配のような株の値幅を制限するルールがあるが説明は割愛。
7/1 (日)
マウリッツハイス美術館展
上野公園の東京都美術館の改装が完了し、最初の特別展として昨日から「マウリッツハイス美術館展」が開催されたので見に行ってみる。
東京都美術館の特別展を開催する棟は、改装前と大きく変わってないように記憶している。 順路が地下2階→地上1階→地上2階と3階分を移動する。 一つのフロアの面積は小さいのでちょっと窮屈だ。
マウリッツハイス美術館はオランダのハーグにある美術館だが改装中のために展示品を海外巡航することになり、その一環として東京都美術館に貸し出された。 今回日本に来たのはオランダ黄金期であるフェルメール、レンブラント、ルーベンスが居た17世紀の絵画がメイン。
今回の展示ではフェルメールの「真珠の耳飾の少女」というかターバンを巻いた少女が一番の目玉。 2階の入り口にこれ専用の部屋が設けられておりこの絵を見るために20〜30分の行列ができていた。 さすがに遠目に見るだけにして、今度休日にもう一度来よう。
[Food] バリカフェ モンキーフォレスト@渋谷
渋谷でインドネシア料理の店を探してここに入る。