2009/04/18(土)大和人狼

人狼に参加してきました。

一回目は狼。
狼になると純粋な推理に割く時間や脳みそを作戦とかに回さないといけない分、誰が村サイドなのかを考える余裕がなくなる。
あと、チャットウィンドウに発言するはずの発言を普通に発すること2回。
結果は惨敗。

2回目は牧師。
村人サイドでブロックできるのは俺だけなので、初日のブロック発言に狂人にしろ妖孤にしろ狼サイドであることはわかるが、ほかの村人を説得する材料がないことにやきもき。狼じゃなくてもいいから吊るそうか、とも思ったが俺以外の人にはなんの疑いやらわからないはずで。
いっそ激烈に怪しいトマトあたりと同室になってブロックできないもんかと思うが、それもなくトマトは普通に死亡。むしろこちらが指名する段で狼サイドと思しき人を指名したら疑われるんじゃないか、という気持ちから村人候補を指名するというへたれぶり。
それでも俺だけが知っている偽ブロックの被害者を守り通して村人サイドの勝利。

普通にテキストエディタにメモ書いてるけど、アイデアプロセッサ?的な?グループ分けやその連結を書けるようなものがあると楽なのかもしれない。


トマトが初めてのくせに弁解の場とかで場慣れしてる風に話していたのがだったのがシャクだ。くそぅ、頭よさげでシャクだ。
あと、あんじの狂人率高すぎ。最後は「よくわかんないけど狂人の自殺としてカウントしておこう」という理由で判断したら当たってた。
マウスさんが狼サイドに立ったらデラやばそうだ。ぜひ見てみたい。


あと、Windows7 だと日本語変換の変換候補があさっての場所に表示されるせいでやたらと噛む。決して慌てているわけではないのだよ。

2009/04/17(金)DRM

FreeBSD 7-stable に radeonhd 向けの drm モジュールが導入された。結構前に。
  • drm をガシガシ MFC するぜ!
  • drm って何ですか?
  • Digital Rights Management だよ。
っていう 2ch ばりのやりとりが FreeBSD-stable メーリングリストで繰り広げられていたアレだ。

ports フリーズのタイミングに合わせて kernel を更新してみた。合わせる意味があるかというと、無い。更新後、/dev/dri が生えたことを確認。
我が屋のオンボードな Radeon はまだ調整が必要なため標準では drm はオフ、かつ、カーネル側の drm も 3D アクセラレーションは未対応な状態。で、xorg.conf をほげほげして X を起動すると...、ブラウザのスクロールがカクカクする。ウィンドウを移動した際の再描画が遅い、が、恐らく drm の効果なのだろう、一瞬遅れるもののウィンドウ全面が一気に描画される。当然 GLX な描画は速くならない。
と言う訳で drm は無効に戻しました。
  • Phenom 向け cpufreq はまだ MFC されてこない模様。
  • AMDチップで USB デバイスを挿したまま起動するとそのポートが死ぬ現象は今議論中。
あとはー、hal, dbus VS. X.org あたりをまた試してみるかな。

2009/04/15(水)いまさらながら Windows7

ディスク交換でスペースが空いたので、すごい遅ればせながら Windows7β を試してみた。Ultimate 64bit版。

軽くなったと言われてるけど、比較対象の Vista はノート PC なのでよくわからん.
CPU, メモリの消費が抑えられてもノートの場合はディスクアクセスがボトルネックになるので。
お試しなのでアンチウィルスは無料で使える Avira を入れてみた。
IE を立ち上げたり UO してる分には重いとは特段感じない。もっさり感もない。

Meadow, PuTTY, X 等、日常に必要なものは問題なく動くようだ。ActivePerl も x64 版がリリースされていた。

後はお遊び系が動くかどうかだなー。
音楽関連のドライバは Vista x64 に対応してたのでいける気がする。ソフトは試してないけどハードウェアのおまけに付いてきたやつで古いから微妙。
ゲームは UO が動いてるのでまぁ、いい。IME の変換ウィンドウが変なところに出るのは Vista と変わらずだけど。
DirectX 系のゲームは動かなくても別にいいけど、nVidia が早速 Windows7 向けドライバを出すというフライングをかましていたので下手に低次元なところに手を入れてるようなゲームでなければ動く気がする。
低次元っていうのは低脳じゃなくて下層のレイヤってことね。
HKLM や Program Files の中にユーザーデータを平気で保存してたようなソフトはきっと動かない。マイクロソフトの英断に喝采。

と、Windows7 を試していたら押入れに突っ込んである Vista を使ってもいいような気持ちになる不思議。

2009/04/14(火)閑話休題

プロのプログラマって一日にどのくらいの量のコードを書くんだろう。
(↑コード量で評価される職場があると本気で信じている)

例えば BOD管理プログラムでも、
  • 布バルクを処理する関数
  • 皮バルクを処理する関数
  • 金属鎧バルクを処理する関数
  • 武器バルクを処理する関数
  • 鍛冶小口のみのバルクを処理する関数
を書いたらコード量は一気に5倍なわけだけど、それだと後々の修正がめんどくさそうでなるべくまとめる。
長い条件分岐が関数の頭についたとしても、リファレンスが多重になっても同じ処理は少ないことの方がいいという考えで書く。「バンダナ」<->「bandana」の変換も、現状一単語しかないけどハッシュで辞書を持たせて汎用的に変換することを想定した関数を作る。
条件分岐の中身は変数の設定をしたりリファレンスの向き先を変えるだけで、分岐の中身が長いわけではない。

もちろん、短ければいい、という考えではなくあくまでも同じ処理は複数存在しない、という考え。いわゆる難読プログラムコンテストみたいなコードは書かないし、スカラー一つ分のメモリをケチる、とかはしない。
同じ処理が複数存在しない、といっても、コードパスが異なる場所に必要な場合は複数存在させる。この場合でも、完全に汎用的に書けるものは追い出す。例えば上の辞書変換みたいな関数。

正規表現についても、グローバルマッチアンカー等を使ってまとめられるならまとめる。

とか考えて書いてると、多くて数百行でお腹いっぱいになる。

いわゆるデスマーチとかの現場の人ってどのくらい書くんだろうなぁ、と気になった次第。デスマーチだと1日っていう時間単位は存在しないか。

# 最近 C 書いてねーなー

2009/04/14(火)続・UOA ベンダーエージェントの(略

このために UOA 買ったぜ!ベンダーエージェントの使い方以外よくわかんねぇ。
サンプルデータを用意して、パーサーを書いた。バンダナのローカライズにも対応した。
これで行けそうだ。が、コードが凄く汚いので直す必要あり、でも疲れたので暫くやらない。

サンプルデータ:
Bulk Order Deed Blessed 重量: 1 大口 Spined Leather 高品質 個数: 15 leather skirt: 15 leather bustier: 0 leather shorts: 0 female leather armor: 0 studded bustier: 0 studded armor: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 Spined Leather 高品質 個数: 15 female leather armor: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 大口 Barbed Leather 標準 個数: 15 studded gorget: 15 studded gloves: 15 studded sleeves: 15 studded leggings: 15 studded tunic: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 Horned Leather 高品質 個数: 10 studded leggings: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 大口 Horned Leather 標準 個数: 15 leather skirt: 0 leather bustier: 0 leather shorts: 0 female leather armor: 0 studded bustier: 0 studded armor: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 大口 Barbed Leather 高品質 個数: 15 leather cap: 0 leather gorget: 0 leather gloves: 0 leather sleeves: 0 leather leggings: 0 leather tunic: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 大口 Agapite Ingot 高品質 個数: 20 platemail gorget: 0 platemail gloves: 0 plate helm: 0 platemail arms: 0 platemail legs: 0 platemail tunic: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 大口 Agapite Ingot 高品質 個数: 20 chainmail coif: 0 chainmail leggings: 0 chainmail tunic: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 Barbed Leather 標準 個数: 20 bone armor: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 大口 Dull Copper Ingot 高品質 個数: 20 chainmail coif: 0 chainmail leggings: 0 chainmail tunic: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 Shadow Iron Ingot 標準 個数: 20 chainmail coif: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 Shadow Iron Ingot 標準 個数: 15 ringmail leggings: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 大口 Verite Ingot 高品質 個数: 20 ringmail gloves: 0 ringmail sleeves: 0 ringmail leggings: 0 ringmail tunic: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 Dull Copper Ingot 高品質 個数: 20 platemail legs: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 iron ingots 高品質 個数: 20 platemail tunic: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 Dull Copper Ingot 高品質 個数: 10 plate helm: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 cloth 高品質 個数: 20 kilt: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 cloth 高品質 個数: 20 バンダナ: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 大口 cloth 標準 個数: 20 バンダナ: 20 shirt: 20 skirt: 20 thigh boots: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 大口 Copper Ingot 標準 個数: 20 chainmail coif: 0 chainmail leggings: 0 chainmail tunic: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 iron ingots 高品質 個数: 20 ringmail gloves: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 iron ingots 高品質 個数: 20 ringmail leggings: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 iron ingots 高品質 個数: 20 ringmail leggings: 0, 価格: --
Bulk Order Deed Blessed 重量: 1 小口 iron ingots 高品質 個数: 20 ringmail sleeves: 0, 価格: --
出力:
出力内容は、素材-ブツ-品質-数 で、これが内部のハッシュDB のキー名になる。ブツのスペースはアンダースコアに変換してある。
spined-leather_female_large-HQ-15
spined-female_leather_armor-HQ-15
barbed-studded_large-NQ-15
horned-studded_leggings-HQ-10
horned-leather_female_large-NQ-15
barbed-leather_male_large-HQ-15
agapite-plate_large-HQ-20
agapite-chain_large-HQ-20
barbed-bone_armor-NQ-20
dull_copper-chain_large-HQ-20
shadow_iron-chainmail_coif-NQ-20
shadow_iron-ringmail_leggings-NQ-15
verite-ring_large-HQ-20
dull_copper-platemail_legs-HQ-20
iron-platemail_tunic-HQ-20
dull_copper-plate_helm-HQ-10
iron-fences_large-HQ-15
shadow_iron-tear_kite_shield-NQ-10
leather-leather_male_large-HQ-20
leather-studded_armor-HQ-15
cloth-kilt-HQ-20
cloth-bandana-HQ-20
cloth-girl_large-NQ-20
copper-chain_large-NQ-20
iron-ringmail_gloves-HQ-20
iron-ringmail_leggings-HQ-20
iron-ringmail_leggings-HQ-20
iron-ringmail_sleeves-HQ-20
ここまで整形すれば、この形のデータを処理する機能はすでに付いてるので後は本体にマージするだけ。

しっかし、コンピュータが処理するのに優しくないデータを処理するといろいろ例外的な処理が必要になって無駄にコードが増える。そうすると、
  • 気持ち的にすごい疲れる
  • 後の仕様変更やローカライズによるデータの変化の可能性を考えると戦々恐々
で、現状の汚いコードだとデータが変わった時の修正箇所がワケワカメ。


確認中に既存のスクリプトにバグが2個見つかりました。
  • ringmail glove がありませんでした。
  • plate helm が platemail helm になっていました。
直していません。