Last-Modified 2010/10/25 11:35:18

その日あった事ダス第216週


10月28日(日曜日)[前年][翌年]

久々に家の手伝いで田んぼに連れて行かれる。今日のお仕事は鴨よけの網を張ること。鴨が食うんですよ。レンコンを。生なんてあくが強くて食えた代物じゃないと思うのだが(ぉ

田んぼのあぜ道を通ると、そこに4匹の鴨(の変わり果てた姿)が。まともな形の鴨ははじめて見た(この時期に田んぼ行かないもん)。くちばしが鴨ですよ! ホントにあんなくちばししてますよ! でもなんであぜに? と聞いたらカラスが引っ張ってくるらしい。よく見たら田んぼにも数匹浮いてたり。なるほど。

ちなみに網を張りにきたのに既に死んでるのは何故という質問にはノーコメントで(汗; 猟師さんが鉄砲で売ってくれたわけではないとだけ言っておきます。
…いや、そういう方法ばっかりを取るわけにはいかないので網なのですよ(苦笑

午前中で作業は終わったけど、肩が痛い^^;

歌月十夜。怪しいルートはひたすら避けてルート埋め。さすがに途中で苦痛になってきたので設定で読んだテキストはスキップにしたり。ほとんどのルートは埋めたと思うけど、組み合わせによってはまだ抜けているところがあるんだろうなぁ。ここまでやれば許してくれるだろう<?

PhantomDVD 起動。うちの環境は WinDVD3.0。…ソフトウエア DVD プレイヤでやってるとできの悪い PC ゲームをやってるような気になる。選択肢もマウスで選択できるし。普通の DVD プレイヤ持ってない人には買う価値はほとんどないかと:-)

んで本編。老ルシオ暗殺まで。いや、反転アイン(誤認)までは見たかったので。最初からぶっ通しで2時間半。…まだ 1/4 ぐらいだっけ?(汗; 個人的にはキャルが出てくるぐらいまですっとばしても良いのだけど(ぉ

キングスフィールド。ようやく5層へ。うお、一気に難易度上昇。魔法どんどん食らってます。必要最低限だけ倒して先に進むのが吉なのかな。ちょこっと進んで魔法が切れた頃に一旦離脱。4層に戻って金ためて竜王草の実を買いこんで再挑戦中。


10月29日(月曜日)[前年][翌年]
歌月十夜・本編完了

歌月十夜。本編の方はようやく終了。長かった。時間はそれほどではなかったかもしれないけど、気分的に長かった。なるほど、そういうことね、と思った事以外はさして語るものなしかも。シエル先輩と琥珀さんの扱いがどんどんアレになっていくのう。いや、翡翠以外みんなアレか。ま、お祭りディスクだし。

ついで夢十夜。ああ、こっちの方が方向性が明確で楽しいかも。悔しいのはななこちゃん。気が付いてしかるべきなのにアノヒトがでてくるまで分かってなかったよ。くぅ。上から6つ目まで読んだ。

土曜日に神戸市長選の事を書いたのでちょろっと。結果は思ったとおりになったらしい。神戸市民じゃないから関心がなくて、誰が出馬してるのか知らなかったのだけど、なんだこんなに候補者いたのか。投票率の低さが泣けるね。

う、ちょっと WindowsXP を入れたくなってきた^^;

ちょこちょこと PhantomDVD のパスワードを見かけたので途中で疲れたら参照するようにしよう(ぉぃ
しかし、ながら作業でするにも適当なものがない。もともと頭がシングルタスクだったりするし。プログラム組みながらだと没頭して気が付けば選択肢まで、なんてことも十分ありうるしなぁ。ゲームしながらだとテレビが埋まる。本も無理だろ。むー。

ADSL 回線が調子悪いからメーラを落としてくれという謎の通達が社内に。何故メーラ。メーラがアクセスするのは社内のメールサーバなんだから関係ないのでわ。
というか、OCN エコノミーと ADSL の2回線あるんだから、ルータで制御して各ユーザが何も意識しないで済むようにすればいいのに。できるんだから。ADSL 導入する際にいろいろ進言したんだけど「(私の本職の方が忙しいから)作業できないでしょ?」との理由でことごとく却下くらったし。私よりもネットワーク詳しい人はみんな社外だし。なんや不安やなぁ。


10月30日(火曜日)[前年][翌年]
引数の型チェックをしてみよう

鼻水が。なんか首も痛いし。肩が凝ってるんだろうな。マッサージにでも行きたい気分。あと眠い。誰か膝枕して…。
今までの積み重ねのおかげで「風邪を引くと4日は休む」と認識されている様子(汗; 夏冬問わず、年に1回ぐらいのペースでそうなってるからなぁ。昨日の夜、むちゃくちゃ寒い中をチャリでしゃこしゃこ 30 分かけて帰ったのがまずかったんだろう。

どうしようもない時ほど現実逃避したくなるもので(ぉぃ

今日のお題は「メソッドの引数の型チェック」。ruby-list だか ruby-dev だかでちょろっと話に出たやつ。とりあえずこんな感じ。

class Object
  def self.method_added(name)
    if caller(0).delete_if{|d| !(d =~ /\`method_added'/)}.size < 2 then
      if self._argument_check_methods.include? name then
        self._argument_check_method_alias_create(name)
      end
    end
  end
  def self._argument_check_method_alias_create(name)
    class_eval <<METHOD
      alias :#{name}_original :#{name}
      alias :#{name} :#{name}_with_argument_check
METHOD
  end
  def self._argument_check_methods
    []
  end
end
class Module
  def argument_check(*args)
    if args.size > 1 then
      name = args.shift
      ary = module_eval{self._argument_check_methods} << name
      module_eval("def self._argument_check_methods; #{ary.inspect}; end")
      args_string = args.map{|m| m.keys[0]}.join(",")
      code_string = args.map{|m|
        key = m.keys[0]
        unless m[key].nil? then
          format("raise ArgumentError,\"required not \#{#{key}.class} but #{m[key]}\" unless #{key}.kind_of? #{m[key]}\n")
        else
          ""
        end
      }.join
      module_eval <<METHOD
        def #{name}_with_argument_check(#{args_string})
          #{code_string}
          #{name}_original(#{args_string})
        end
METHOD
    end
  end
end
class Foo
  argument_check :initialize,{:arg=>String}
  def initialize(arg)
  end
end
Foo::new("hoge")    # => #<Foo:0x80f6340>
Foo::new(1)         # => (eval):2:in `initialize_with_argument_check': required not Fixnum but String (ArgumentError)

ちなみに試しに作ったので、引数の名前や数のチェックはしてないわ、クラスメソッドには対応してないわ、public/private/protected の区別がないわ、argument_check は def よりも前に書かないといけないわ、問題点はたくさん。

あと、argument_check の引数が Hash なのは単に見た目の問題。見た目重要。しかし引数は順番も意味があるので、サイズ1の Hash がずらずらと並ぶことになります(汗;

…ん? 見た目重要ならもしかして以下の様にできるとうれしいかも? (書く方が)かなり面倒ではあるけど。

class Foo
  argument_check <<CHECK
    initialize(arg1,arg2)
      arg1 is Integer
      arg2 is String (default="")
CHECK
  def initialize(arg1,arg2)
  end
end

こういう指定ができるようにすれば、ソースを scan(/argument_check <<(\w+).*?[\r\n]+((?:.*[\r\n]+)+?)\1/){ puts $2 } で型宣言だけ抽出できるな。

しかしここ最近作るスクリプトって eval 使いまくりやな(汗;

変な改行が入ってたのと日本語が変だったのを修正(苦笑


10月31日(水曜日)[前年][翌年]

あれ? amstd/must.rb は型チェックだけですよね?

いやま、私の昨日スクリプトはかなり思いつきで組んでるし^^; まあ、容易にメソッドの引数の型チェックを分離できるところが利点かな。例えば、こんな感じ。

check.rb
--------
class Foo
  argument_check :fufu,{:niya=>String}
end
foo.rb
--------
require 'check' if $DEBUG
class Foo
  def fufu(niya)
  end
end

でも実際のところは amstd/must.rb 的なアプローチに「飽きた」というのが正解かな。


11月1日(木曜日)[前年][翌年]
ヲレアンテナ サイドバー対応/久々に roguelike(何年ぶり?)

ヲレアンテナを sidebar に追加する為のページ。sidebar 用のスクリプトは今改良中なので見た目がいろいろと変わるかもしれません。

そういや IE6 にはベータ版にはあったパーソナルバーがなくなってるのね。なんでだろう?

↑もしかしたら先にヲレアンテナでユーザー登録してブラウザに cookie 食わせとかないと応答返ってこないかも。cookie 使えない人のために mod_rewrite とか使えるようにしとくべきかな。いろいろと sidebar で実験したいものだ。

…ってもうこんな時間かい。寝なければ。

そうそう、先ほど NN6.2(J) をフルインストールしたら、残りダウンロード時間がマイナスになると現象が発生しましたよ! 残り時間がアテにならないのはよくあることだけど、マイナスは見たことなかったかも。って単にサイズ計算間違いなんだろうけど。

↑そういや Windows2000 でもファイルコピーの残り時間が急に爆発することがあったのだが、もしかしてコレも同じ原因? 内部では signed で計算して、画面に出す時に unsigned で扱ってるとか。

寝坊(汗; 起きたら 10時過ぎてましたよ。一昨日に遅くまで仕事してたのが響いたなぁ。急いで出社。

sidebar 用のページに再読込機能というか自分自身へのリンクが欲しいかも>ぐっさー ボタン一発で更新できるから。

間違って日記のデータがあるディレクトリで rm * なんてしてしまって大汗。まあ、データは2重化しているのですぐに復帰できたが、うかつすぎ。

Ruby 本が大川出版賞受賞だそうな。
…って今ごろ? これって最初の ruby 本だよね。

夕方の会社の掃除で腰をいわしてしまったらしい。まだ痛い。運動不足やなぁ。

なんか zangband の話題が多いので、試しに落としてきて NetBSD なマシン上でコンパイル。日本語化パッチが 404 なのでそのまま。あ、デフォルトだと X 有効なのか、と makefile.std を書き換えてコンパイル。そして実行。なんだこの遅さは。Pentium100程度のマシンじゃ力不足? カーソルがあちこち飛び回る。うーん。
なら hengband を試してみようと落としてくる。おお、こっちは autoconf 使ってるやん。./configure して make…ありま、コンパイル通らん。X 周りっぽい。はて、無効にするにはどうすれば。--without-x しても同じだった。ううむ。

って、こんなことしてるから帰れないんだよな(苦笑


11月2日(金曜日)[前年][翌年]
curses 万歳(←安直)

起きたら左肩が上がらなくなってた。何があったんだ?(汗;
珍しく家にいた母親が「(日曜日に)網張ったからちゃうん?」と言ってたが、日曜日っていつの話だよ…。運動不足、ここに極まれリってか。

昨日の hengband のコンパイルが通らなかったのは curses 周りの様子。curses ってあんまり良く知らないんだけど、z-config.h,h-config.h,autoconf 辺りを見ると何か分かるかな…。

とりあえず起動したらしい:-)

↑ってコンパイル通らなかった3行をちこっと修正しただけ。一応 patch。./configure --without-x してるので、main-x11.c がコンパイル通るかは試してません。色も付きません。結局 curses のなんたるかを理解する前に終わってしまったので拍子抜け(ぉ

ついでに zangband にも同様の修正をしてみる。おお、curses 万歳。普通に遊べるようになりましたよ。昨日のヘンなのは、curses 使わずに自前で実装してて重たかったのか、TeraTerm の VT100 エミュレーションと相性が悪かったのか、まあ、その辺だろう。

次は ncurses 入れてみて、色が出るようにいじくってみようかしらん。出せるのかどうか知らないけど^^;


11月3日(土曜日)[前年][翌年]
curses で 文字化けします

curses でも色が出ますか。ありまちょうございます。…あ、pkgsrc がある(汗;

pkgsrc の patch-* を見て脱力。can_change_colors ですか…何故にそんな微妙に違う名前を…。

とりあえず自前でパッチ当ててバイナリを作成。ありま、^r が効かない(ように見える)。同じ環境で -DUSE_NCURSES すると効く(ように見える)。結構頻繁に文字化けしてるんで ^r ないととても困る。しかしなんで文字化けするんだろう。ちょこっとソース追いかけてみたけど分からんかった。

そんな感じでもう 10 回近く死んでます(ぉ

なんか hengband 三昧。といっても遊んでるわけじゃなくて…いや、私にとっては遊んでるも同然だけど。文字化けの調査をしてたり。やっぱし waddstr に渡している文字列はおかしくないので curses の問題かな。TeraTerm なので vt100 だし、うまく日本語(というか multi-byte 文字)が処理できてなさげ。1 バイト目が同じ場合に化けてる様子。IRC で質問しつつ、日本語書き込む前にスペースで一回埋めるとかすると、なんか違った化け方をし始めた。こっちは化ける条件が分からん。

そういえば z-term.c を見たらのっけに FIRST の文字があってちょっとウケた<何故

うう、右腕がだるいぞ^^;


このページは基本的にリンクフリーです。

written by Shin'ya Adzumi 'あづみ しんや'
adzumi@denpa.org