自己紹介ページを復活させたついでに、情報を更新してデザインをこちらの日記と合わせました。以前はXHTMLで書いていたのですがHTML 4.01に戻しました。スラッシュを書くのがうっとおしくてねえ。
当サイトは筆者が所属している(していた)組織、大学、会社などは一切関係ありません。日記の内容に関する苦情などは私個人にお送り下さるよう、よろしくお願い致します。
あとは上記の文言を付け足しておいたくらいでしょうか。今更といえば今更ですけどね。
世は忘年会シーズンです。夜になれば電車には赤い顔のサラリーマンがたくさんいます。
同期の人達と飲もうとしたのですが、高槻付近の飲み屋が全部一杯だったのには驚きました。このシーズンでなければ大抵なんとかなっていましたが、年末の飲み会に予約なしで突っ込むのは無理があった。
結局、ラーメン屋でラーメンを食べてから飲み会に行くというちょっと変わったプランになりました。食べ過ぎ、飲み過ぎ防止としては、これはこれで良いかもしれない…。
ScreenではCtrl+a Sで二画面分割ができ、Ctrl+a [Tab] で画面のフォーカスを切り替えることができます。画面の破棄はCtrl+a Xです。Shift押し忘れたり、Ctrlを押しっぱなしにしてxを押すと、画面のロックになるのでうっとおしいです。気になる人はキーバインドを変えましょう。
一方EmacsではCtrl+x 2で二画面に分割でき、Ctrl+x oで画面のフォーカスを切り替えられます。Ctrl+x 1で他の画面を全部閉じて、一つの画面になります。
両者を同時に使いだすと、段々Emacsの画面なのかScreenの画面なのかがわからなくなって、フォーカスを切り替えるときに難儀します。…え?自分だけですか…そうですか。
サイトを作り直したときにすっかり忘れさってしまってた旧サイトのページ。自己紹介ページだけ残すことにしました。右のメニューに追加してあります。内容はそのうち直します。
出てねーぞ?って人は強制リロード(Ctrl+F5だっけ?)をすると見えます。よろしくお願いします。
以前作って(2007年10月21日の日記参照)ほったらかしだったユーザエージェントのパーサですが、たかだか1000件の解析に3秒もかかるもんだから、遅くて使えずじまいでした。
正直に1文字ずつ見ていくプログラムにしたので、当然ながら文字数分だけ関数呼び出しが発生します。効率悪いです。さらにうまくないことにPHPは関数呼び出しが苦手なようで、関数呼び出しを連発すると異常なほどスローダウンします(´д`;)
というわけで一番良く通るループをチューンしたところ、0.5秒まで縮まりました。それでもたいがい遅いけど、あまりチューンするとコードがいじりづらくなるし、仕方なかろう…。
うちのATOKは「ってひとは」を変換すると「ッt絵人は」になります。ぽつんと残されたアルファベットがCoooooool!! ですね。
推し量るにATOKの辞書には「ってひとは」という単語がなく、一致する部分を探した結果、後ろの「ehitoha -> えひとは」に最長一致したのでしょう。そのためあぶれてしまった "tt" を素直に解釈した結果(tt -> っt)、上記のCoooool!! な結果となったのでしょう。たぶんね…。
初めは子音の補足/削除機能(※)が働いたのかと思いましたが、良く見ると母音も子音も数が変わっていません。恐らく違うと思われます。
どういう力が働いたのか知りませんが、今回のように文字を切ってしまうような例は珍しいかもねえ?
(※)足りない子音の補足(例:「nen -> ねn -> 年(ねん)」)や、余計な母音/子音の削除(例:「shiiinn -> しいいん -> 死因(しいん)」)などを行う機能です。
ドラクエIVをクリアしまして、ファミコン版にはなかった第6章もクリアしました。王道のゲームだけあって、システム、操作性も慣れたもんです。
以下、ネタバレ注意。といってもみんな知ってるでしょうけど。
楽しく暮らしていた故郷をピサロ御一行に襲われ、親友のシンシアが自分(勇者)の身代わりに殺される。復讐心に燃え旅立つ主人公。長い旅路の中、ピサロもまた愛するものを奪われた復讐者なのだと…、勇者はそれに気づきながらも、ピサロとの戦いを選ぶ。死闘の末にデスピサロ(ピサロ)を打ち倒し、世界に平和が訪れた。
エンディングでは勇者が仲間をそれぞれの故郷に送り届け、最後に一人自身の故郷に戻る。廃墟となった故郷の恐らくシンシアが倒れただろう広場で、俺(or私)の故郷は返ってこない、この旅は一体何だったのか…と。勇者は立ち尽くします。
これだとまぎれもないバッドエンドに見えますから、最後にシンシアが奇跡の復活を遂げてハッピーエンドとなります。しかし育ての両親や村のおっちゃん達は誰一人帰ってきません。勇者は幸せなのかと、考えてしまう話です。
ところがDS版では6章が追加されて、ロザリーがゾンビよろしく蘇るわ、ピサロ様が改心して仲間になるわで、もう何でもありです。しまいには
Ω <全てはエビルプリーストの陰謀だったんだ!
ΩΩΩ <な、なん(略
と来たもんだ。こういう展開でも別に悪かないけどさ。ドラクエIVでやってしまうと、かつての雰囲気がぶち壊しです。ちょっと残念だったなあ。
ドラクエIVは敵の息系の攻撃が、ありえんダメージになっています。タフなキャラでも最大HP 400が良いところに対して、全員に200なんてのもありますよ。耐性防具(息系ダメージ1/4軽減か、固定ダメージ軽減が多い)とフバーハ(息系ダメージ1/2軽減)がないと凌げません。
後半は1ターンで仲間全員が100以上くらって回復が全く追いつかないため、ベホマズンを連射することになります。ベホマズンの使い手たる勇者は、回復役に回ることになるでしょう。他のドラクエシリーズではベホマズンなんて滅多に使わないだけに、非常に新鮮です。
一方でスカラ系が強力無比です。スクルトを2回かければ、ほとんどの敵は被ダメが1 orミスになります。ドラクエIVでは防御力無視の打撃はほとんどないので、スクルトで打撃がほぼ無効化できます。これで息系とおあいこってとこでしょうか。
スクルト一発で防御力が200以上上がるんで、特にボス戦においては10や20の防御力差は無意味です。雑魚戦なら毎回スクルトかけるわけにはいかないからまだしも、ボス戦に挑むなら防御力より息系攻撃への耐性がある防具を探した方が強いです。
部署の忘年会がありました。二次会の後は大先輩の方に連れられ、サシで朝までダラダラ飲んでました。気を遣うなよと何回か言われましたが、さすがに20年以上上の方に気を遣うなってのは無理です!
その大先輩は部署内でとにかくすごいと噂に聞く方です。今回は少ししか話聞けませんでしたが、すごさの片鱗を感じたエピソードもちらほら。例えば、昔のCPUは音でプログラムがどこ走ってるかわかった、今のCPUは可聴域越えたねえ、とか。真似できませんね…。
後は道を歩きながら、役立つ仕事術とか、最初の4〜5年は嫌なことでも全力でやれ、ミスっても周りがサポートできるのは今だけ、と色々教えていただきました。
会社入って思ったのは、ちゃんと調べてここがわからんって聞けば皆さん親切に教えてくれるってことです。さすがにろくに調べもせず変な質問したら時間の無駄!!って怒られるでしょうけどね…。自分が右も左もわからない新人君だからってのもあるな、きっと。皆さんが親切なうちに吸収できるもんはしたいね。
目次: Linux
たまにLinux kernelをコンパイルしていると 'func' is deprecated. と言われることがあります。自分が見かけたのは、kernel/intermodule.cというファイルのinter_module_registerという関数でした。(昔の2.6系には残っていましたが、最新版(2.6.23.8)では存在しません)
見てみると関数の宣言に __deprecatedと書いてあり、define部分を探すとinclude/linux/compiler.hに書いてあります。しかし宣言の中身は空、というのもgccだけがdeprecated警告をするので、include/linux/compiler-gcc.hの方に書いてあるんですね。
#define __deprecated __attribute__((deprecated))
こんな定義です。関数プロトタイプに対して __attribute__((deprecated)) と書いておくと、その関数を使った人に対して冒頭で述べたような警告がでます。
これはコードの作者あるいは古いコードをいつまでも使っている人への警告でしょうね。もう使われない(deprecated)関数をお使いのようですけど、いずれなくなってあなたのコードは動かなくなりますよ!それまでには直してくれよ、ヨロシクね!ってことです。
他にcompiler.hで面白いなと思うのは、likelyとunlikelyマクロでしょうか。以下のようなマクロです。
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
キーワード __builtin_expectはコンパイラに対して、第一引数の結果が第二引数の結果になるときに高速動作するコードを出力しなさい、とコンパイラにヒントを与えます。ヒントが正しければプログラムが高速に動作するはずです。
具体的には likelyマクロは引数xが真であるとき、unlikelyは逆にxが偽であるときに高速動作せよと、コンパイラに指示しています。ではlikelyとunlikelyの効果を以下の実験コードで確かめてみましょう。
int func_likely();
int func_unlikely();
volatile int i;
int main(int argc, char *argv[])
{
func_likely();
func_unlikely();
return 0;
}
int func_likely()
{
int c = 0;
while (likely(i)) {
c++;
}
return c;
}
int func_unlikely()
{
int c = 0;
while (unlikely(i)) {
c++;
}
return c;
}
注目点はfunc_likelyとfunc_unlikelyです。ループの条件に付けたlikelyマクロとunlikelyマクロ以外に違いがないことを確認していただけると思います。これをgccでコンパイルしてみましょう。2.95でも対応していたと思いますが、3.xくらいのgccなら確実だと思います。
あとコンパイル時に -O2を付けることを忘れずに。
$ emacs a.c $ gcc --version gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) $ gcc -O2 -S a.c $ cat a.s (コードは一部抜粋です) (func_likelyの説明) カウント文と分岐文が連続している。条件は真の可能性が高いと信じて いるから、「カウント分」「条件判定」「分岐」という一連の命令を連 続して並べる。これにはキャッシュに乗りやすい、プリフェッチしやす いなど様々な理由があると思う。 一方、リターン文は遠くに配置される。これはコンパイラにとって、ルー プの条件が成立しないのは、稀なケースであって滅多に実行しないと信 じているから。 func_likely: jmp .L8 ;(条件判定へ) .p2align 4,,7 .L9: incl %edx ;(カウント文) .L8: movl i, %eax testl %eax, %eax ;(i != 0の条件チェック) jne .L9 ;(分岐文、真だったらループの先頭へ) popl %ebp movl %edx, %eax ret ;(リターン文) (func_unlikelyの説明) カウント文とリターン文が連続している。 分岐文もあるが真じゃない可能性が高いと信じているので、条件は成立 せずに即座に終了するはずである。 逆に、条件が成立するときは遠くに置いた判定文へ飛ぶ。これはコンパ イラにとって、条件が成立することが稀なケースであって、滅多に実行 しないと信じているから。 func_unlikely: .L2: movl i, %eax testl %eax, %eax ;(i != 0の条件チェック) jne .L3 ;(分岐文、真だったらカウント文へ) popl %ebp movl %edx, %eax ret ;(リターン文) .L3: incl %edx ;(カウント文) jmp .L2 ;(条件判定へ)
ヒントがどういう効果をおよぼすか、ご理解いただけたかと思います。このくらいの小さい関数では効率が変わらないので、例としてはあまり良くないかも…。
最後に !!(x) と引数を二重否定している理由ですが、1ではないけど真(5とか10とか -1とか)である値を1に正規化するためです。以下の例を見ていただくとわかるかと思います。
x = 5 //真だけど1ではない !(x) => 0 //偽 !!(x) => 1 //真で1である
お前の説明じゃまったくわからんぞ!!って人はGoogle先生にも聞きましょう。有名なマクロなので、他のサイトでも紹介されています。
平日は家、仕事、家、仕事…の繰り返しなので、特に日記に書くことがないんですな。
学生時代は忙しいと連呼する社会人が不思議に思えましたが、いざやってみるとうっすら理由がわかります。忙しいというより「まとまった時間」が取れなくて、やる気が失せると言う方が近いです。朝起きるためには夜更かしできない、帰ってきたら既に夜、土日は平日にたまった用事を片付けて終わりです。一気にやりたいのにできないなんて、やる気なくなるでしょ?
ぱっと思いついたアイデアを実践してみる、なんてことが難しくなります。だからこそ何かにトライすべきですが、夜は眠くなっちゃうし、机で寝たら風邪引くしなあ。いかんな…既にやる気が削げてるじゃないかよ。
ファミコン時代のドラクエ4の二大バグ技と言えば、「838861枚のコインを5Gで買う」と「8回逃げた後は100%会心の一撃が出る」ですよね。当時はこのバグを当たり前のように使っていたため、DS版をプレイするにあたり大きな壁にぶち当たっています。
カジノをまじめにやるとすると、闘技場が一番効率良いと思います。それでもまぐれで3連勝してせいぜい2000枚です。はぐれメタルヘルムが許されざるハイパーぼったくり景品(必要枚数100,000枚)だということに今更気づきました。こんな枚数ありえねぇー。
カジノのコインを貯めることがこんなに難しいなんてー!!
ラスボス(ピサロ様)とご対面するところまでは楽勝で進めたので、このままエンディング見ちゃうぞーっとか思ってたんですけど、ピサロ様ったら異常に強いです。特に最終形態が強すぎます。最大HP 250くらいなのに一発120強くらって、瞬殺されたーヨ。
で、デスピサロがこんなに強いなんてー!!
カードとETCの車載器が届きました。カードは普段使っているクレディセゾンの派生カード(下の写真)でカードは無料です。さらに塚田氏から教えてもらった JRSのETC無料キャンペーンを利用し、車載器も無料です。車載器は古野電気製でした。
あの狭い駐車場でETCの機械を車に付ける作業なんてできるんかな。店に頼むと数千円取られるらしいので、自分でやるしかないなあと諦めています。年内に付けたいな…。
会社に何も貢献していないのに、金曜日にボーナスをいただいたわけですけども、所得税と厚生年金でがさっと減る様が悲しいです。
ボーナスをもらうといきなり人が変わったように買い物を始める人が居ますけど、ここは一つ何も買わないで放置をオススメ。お金が遊んでいる状態こそ、これぞ究極の贅沢だと思いませんか?
…勢いで書いてたら意味がわからなくなってきた。やめやめ。
いざつくばへ。昼に出たもんだから、ついたら既に日が暮れてました。園芸の皆さんと食事に行くも和食屋には嫌われてしまいました。海鮮料理屋(旭屋?、土浦市R6沿い)で食事しました。
少し早いですが大下さんからクリスマスプレゼントをもらいました。言われてみれば年内はもう会えなさそうだなあ。こちらも考えて持って行くべきだった。
< | 2007 | > | ||||
<< | < | 12 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | - | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | - | - | - | - | - |
合計:
本日: