憂鬱な午後のひととき
職場で風が流行ってる. 既に二順目に入ってるようだが幸い私はまだ大丈夫. ただ最近寝不足なので時間の問題かも.
・Windowsのスタック領域は4KBずつ延びる.
だからアセンブリ言語ルーチン内でローカル変数を自前で確保していて,
まだそこがページインしていない場合, 4KBを超えてアクセスすると
例外で落ちる.
それまでに一度でも触っていれば(readで十分)大丈夫なので大抵は問題ないけど,
本当は, 適当に[esp]を4KBずつ触るコードを入れないといけないようだ.
_alloca()を呼ぶと単にespを変更するだけでなく, そういうコードが埋め込まれる.
・吠えてても回りに迷惑をかけるだけなのでしばらく我慢しよう.
なんか吠えまくってるし. 原因は自明なんだが, うー, うー, うー.
・散歩先の店のケーキを楽しみにしてたが, 一切れ572円に気合負けで退散.
・少し間が空いたけど,
離散対数問題再び加筆.
VC6 + STLport 5.0でiostreamを使うとリンクエラーになる. 調べたら
デフォではシングルスレッド用staticライブラリが作られないためだった.
マニュアルを見てもそれらしい記述がなかったので適当に作る.
1. もともとのstlport**.libたちの名前をstlport**_mt.libに変更.
2. VC6用Makefileの/MTdや/MTとなっている部分を/MLdや/MLに
変更してライブラリを作成.
3. stlport/config/stl_msvc.hのライブラリ自動リンクの部分を
+# if defined (_MT)
+# define _STLP_MT "_mt"
+# else
+# define _STLP_MT ""
+# endif
-# define _STLP_STLPORT_LIB "stlport"_STLP_LIB_OPTIM_MODE"" \
_STLP_LIB_TYPE"."_STLP_VERSION_STR".lib"
+# define _STLP_STLPORT_LIB "stlport"_STLP_LIB_OPTIM_MODE"" \
_STLP_LIB_TYPE""_STLP_MT"."_STLP_VERSION_STR".lib"
...
+# undef _STLP_MT
と変更.
これで
error LNK2001:外部シンボル"class stlpmtx_std::basic_ostream<char,
class stlpmtx_std::char_traits<char> > stlpmtx_std::cout"(?cout@
stlpmtx_std@@3V?$basic_ostream@DV?$char_traits@D@stlpmtx_std@@@1@A)"
は未解決です
みたいなエラーがでなくなった.
しかし, なんで_STLP_NO_THREADSや_NOTHREADSを定義しても駄目なんだろう.
英語のフレーズを繰り返し聞くのにはWindows media playerは使いにくい.
み「Winampは好かんしなあ, 作るか」
友「職場では『ありもん使え, 二度同じコードを書くな』って言ってなかった?」
み「そぅだっけ」
結局, コマンドラインプレーヤをちょいなちょいなと作ってしまった莫迦.
試験前に掃除したくなる心境に似てるかもしれない
どうやら私はcoderからdecoder*に転職したらしい.
稀に見る神掛かりな大作にご対面. 作業量はここしばらくマイナス2000行/日(心中ご察しください...).
cleanerとも言う
つい最近どこかのニュースサイトに急激に増えるというニュアンスで「対数的に増える」という用語が使われていてあれっと思った.
そういうときは「指数的に増える」だろう.
そういう表現をわざわざ選ぶ人は多少なりとも理系だから間違うことは無いと思うんだけど, それともそういう使い方もありなのか.
「指数対数的」という表現も見つかったがこれは「指数関数的」の間違いだろうな
机に座って英語の勉強なんて何年ぶりだ. 私は中1のとき,
「マイクさん(, あなた)はテレビを見るの?」が「Do Mike watch TV?」でないことに理不尽さを感じて以来,
英語が大ッ嫌いになった気がする.
なにかとweb上での申し込みの多いこのご時世,
なんで住所や電話番号の入力インタフェースは全然よくならないんだろう.
やれ, 半角じゃないと駄目, 全角じゃないと駄目, ハイフンつけろ, ハイフンなしで.
そのぐらい, サーバ側のちょっとの努力で利便性はずっとあがるのに.
整数のビット長分のシフトは規格上未定義なんだけど, 何年かに一度うっかりやらかしてしまう.
たとえばuint32, uint64をそれぞれ32, 64ビット長符号無し整数として
uint32 a;
uint64 b;
a >>= 32;
b >>= 64;
の直後でaやbは0になってるか否かは未定義.
aの方は(8086除く)x86系CPUでは普通コンパイラによらずシフトしないのと同じ挙動を示す(ので比較的間違いを見つけやすい)が, bの方はコンパイラによって違うようだ.
たとえばVC6ではデバッグモードだときっちり0にするが, リリースモードでは上位32ビットの値になる.
他のコンパイラでは後者の挙動が多いみたい. 気をつけましょう.
目医者で目を酷使するなら眼鏡の度を下げた方がよいと言われてパソコン用眼鏡を購入.
4万円. 見にくくなったら強くすればよいとばかり思い込んでいたのでこれは盲点.
頭痛が少しでも減ればよいけど, 度数が変わったのでなんだかゆがんで見える. しばらく慣れないと大変そう.
少しだけだけど研究集会に参加. やっぱり刺激を受けてよい.
えらい方を見ると刺激になっていいのだけど, それが強すぎると凹むばっかりなんよね.
ぎっくり腰にならないための録画番組を見る.
幸い私はなったことがないのだけど見てるだけで腰がむずむずしてしまった.
不意打ちにならないよう気をつけないといかんのね.
・ソースが使われているか否かを見るにはasmのオブジェクトコード一致の方が確信が持てそう.
ってふと今気づいたが午後の一部は本家にバックポートされてたのね. LGPL的にはその旨が記されてないとあかん?(笑)
・リストなのに端点へのデータ追加コストがO(n)な実装とはこれ如何に.
固定長配列を毎回mallocするがごとし. どっちもいやん
きんぴらごぼうの「きんぴら」って金太郎の子どもの名前だったのか. 知らんだ.
それからゴボウを洗ってあくを抜いたら栄養が抜けちゃうことも. 皮を使わなあかんのね.
スパムフィルタの設定ミスでもしかしたら私宛てのメールが消えていたかもしれない.
今日メールして心配な方は申し訳ないけど再送してください.
こんなコードに知人がえらくうけていた. 以前どこかで見たことがあるはずなんだけど, どこだっけかな.
char *p;
...
p[strlen(p)] = '\0';
↓2 サイズ1/8, 速度4~5倍いったかも...勝った(笑). 確かにfarは邪魔.
それでも以前関わった, 20年ぐらい前に書かれたFORTRANがそのままCになったものよりましやけど.
goto _1020; みたいなコード入ってたし.
・電車で移動中にまとめ読み.
『落語手帖』(江國滋)
落語に関するエッセイ集.
とても面白いんだけど, それだけに書かれた内容に対して「時を同じうして生きてゐる」至福が味わえない(34年前---生まれてないし).
上方の人に焦点を当てたのもあるのだろうか.
今度探してみよう.
・眼鏡屋さんで視力検査. てっきり悪くなっていたと思っていたのに12年前から殆ど変化は無いらしい.
若干乱視が増えてるっぽいけど. これ以上度を強くしても近いのをみるのが疲れるので現状維持にする.
あとフレームの微調整とか. 次は目医者さんだな.
ここしばらく, とある古典的なライブラリの主要部だけを切り出しひたすらコンパクトにする作業.
多少の性能劣化と特殊な条件を付加する代わりにより速く, より小さく(最重要). ただいまサイズ1/7, 速度4倍.
こういうのはある条件下におけるより簡単な同値表現をいかに見つけるかが大事だが, 限りなく必要条件に近い十分条件を見つけるのがもっと大事.
「この処理ならこうであるべきだ」とか, 「直感的にこんなに複雑であるはずが無い」という経験と直感でブレイクスルーを見つけたときが一番楽しい.
まあ, 神経使うのと意外とすぐ飽きるのが難だけど.
昔
御意見は光成滋生<herumi@nifty.com>までお願いします