トップ «前の日(05-04) 最新 次の日(05-06)» 追記

本 日 の h o g e

hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。

更新情報の取得には rdflirs を使ってもらえると嬉しいです.


05/05/2003

tDiary 193日目

[日記] う

さっさと帰って寝るつもりが話に花が咲いて遅くなってしまった.さてどうしたもんか.

[Gentoo][Linux] Tips and Tricks

相変わらずGentoo Weekly NewsletterのTips and Tricksの項は勉強になる.Gentooユーザもそうでないユーザも見るべし.

[ニュース][小ネタ] 男性パイロット同士が裸、操縦室で何を?

コーヒーをこぼすことは確かに不適切な行為かも知れんな(w

[メモ] Your body is your password

バイオメトリクスの最たるもんかな? あとで読もう.


05/05/2004

tDiary 559日目

[Gentoo] うひ

昨日の mp123.el,微妙に間違い発覚.いやん.

どうしたものか.こっそり直そうかしら.


05/05/2005 うむ

tDiary 924日目

[日記] むー

明らかに風邪だ.熱出てきたくさいなあ.ぼーっとするわ.

[戯言] こまんどができるまで

IRCMemoBot コマンドのつくりかた.仕様が変更される可能性は大いにあり得るけども.

  1. コマンド名を決めます.ここでは「!hoge <url> <description>」なコマンドを作ります.
  2. commands ディレクトリ以下に command_hoge.py を作ります.
  3. command_hoge.py の中に command_hoge クラスを定義します.
  4. command_hoge クラスは supercommand.SuperCommand を継承します.コンストラクタは config オブジェクトと rss オブジェクトを引数にとります.
  5. hoge コマンドは url を第一引数に,description を第二引数にとるので,SuperCommand の初期化では SuperCommand.__init__(self, config, rss, url=1, description=2) となります.
  6. 処理を書きます.

ここで SuperCommand のデフォルト処理フローを見てみます.例えばこの状態でコマンド「!hoge <url> <description>」が打たれると,analyze term → modify term と処理を行います.また,デフォルトで analyze では split,modify では load_rss_for_multi が実行されるようになっています.ここで split や load_rss_for_multi 等の,term 内で実行されるものを proc と呼びます.

split proc ではコマンド引数を解析,分割して保存します.ここで保存された引数は get_arg() メソッドで取得することができます.!hoge では url と description を引数にとっているので,get_arg('url') で第一引数を取得できます.

load_rss_for_multi proc は単純に RSS をリロードします.これは設計がダメダメなことによる苦肉の策なので気にしないで下さい.

さて,各 term に入るときには _before_TERMNAME_term,term から出るときには _after_TERMNAME_term というメソッドが呼ばれます.command_hoge クラスの中でこれを定義しておくと,term に入るとき,term から出るときに何をするかを記述することができます.デフォルトでは何もしません.また,_default メソッドをオーバーライドするとデフォルト動作を変更することができますが,よっぽどのことがない限りはやらない方がいいでしょう.デバッグ等に使うのは良いと思います.

また,proc も同様に,proc を実行する前に _before_PROCNAME,後に _after_PROCNAME を呼びます.デフォルト動作も同様です.

さて,term には proc を複数関連づけておくことができます.append_proc メソッドで,既存の term に proc を追加することができます.例えば self.append_proc('modify', 'hoge_proc') などとすると,modify term で呼ぶメソッドを追加できるということです.

hoge_proc を modify term に追加したので,hoge_proc の処理内容を定義します.メソッド名を _hoge_proc として処理を書きましょう.引数はコネクション,イベント,送信されたメッセージ全文,送信者のニックネーム,送信されたチャンネル名の 5 つです.お好みに応じて _before_hoge_proc や _after_hoge_proc を定義しても良いです.これらのメソッドは真偽値を返すものとします.偽が返った場合,そこで処理がストップします.

もちろん,term も追加することができます.append_term メソッドで write term を追加してみましょう.self.append_term('write', ['write_to_rss', 'write_to_html']) で,第二引数は proc のリストです.これで,処理フローは analyze → modify → write となりました.

write term の proc である write_to_rss, write_to_html ですが,これは実は SuperCommand で用意されています.つまり _write_to_rss,_write_to_html メソッドが定義済みです.RSS や HTML への書き出しをやってくれます.また,write term を出たときに実行される _after_write_term も定義されています.もちろんオーバーライドして処理を変更しても構いません.

他にも term や proc を削除することなどもできますが,そこらへんはめんどくさいのでコード読んで下さい.

さて,できたコードはというと,

from suppercommand import SuperCommand
class command_hoge(SuperCommand):
    def __init__(self, config, rss):
        SuperCommand.__init__(self, config, rss, url=1, description=2)
        self.append_proc('modify', 'hoge_proc')
        self.append_term('write', ['write_to_rss', 'write_to_html'])

    def _hoge_proc(self, c, e, msg, nick, channel):
        self.get_arg('url')         # 第一引数をゲット
        self.get_arg('description') # 第二引数をゲット
        ...
        return True # 処理が終了した時は真偽値を返す

これだけです.ここで処理フローをもう一度確認してみると,

  1. _before_analyze_term
    1. _before_split
    2. _split
    3. _after_split
  2. _after_analyze_term
  3. _before_modify_term
    1. _before_load_rss_for_multi
    2. _load_rss_for_multi
    3. _after_load_rss_for_multi
    4. _before_hoge_proc
    5. _hoge_proc
    6. _after_hoge_proc
  4. _after_modify_term
  5. _before_write_term
    1. _before_write_to_rss
    2. _write_to_rss
    3. _after_write_to_rss
    4. _before_write_to_html
    5. _write_to_html
    6. _after_write_to_html
  6. _after_write_term

という順番にメソッドが呼ばれるわけです.この内,定義されていて呼び出しが行われるものだけを抜き出すと,

  1. _split (SuperCommand でスケジュールされている)
  2. _load_rss_for_multi (SuperCommand でスケジュールされている)
  3. _hoge_proc
  4. _write_to_rss (SuperCommand で定義されたものを呼ぶようにした)
  5. _write_to_html (SuperCommand で定義されたものを呼ぶようにした)
  6. _after_write_term (SuperCommand で定義されたものを呼ぶようにした)

となります.

というわけで何かおもろいコマンド思いついたら作って下さい.主に俺が喜びます.

ここまで書いて,IRCMemoBot 特化でなく irclib にコマンドを送るためのライブラリとして抽象化した方が良かったんじゃないかと思った.

うーん,まぁいいや.

[小ネタ] 個人ニュースサイト管理人の就職活動 反応リンク集

む,反応リンク集が出来ていたとは.


05/05/2006 うひ

tDiary 1289日目

[日記] 飯日記

  • 09時頃:とろろそば
  • 15時頃:豚生姜焼き鳥唐揚げ弁当
  • 19時頃:月見うどん

[日記] GW 東北日記

3 日 16 時半頃-
新幹線に乗って,19 時頃盛岡駅到着.そのまま飲みへ直行.焼酎がうまい店で歓談.友人宅に泊まる予定だったけど,終電を逃してオール決行.変態について語る.
4 日 4 時半頃-
解散後,一人で始発 5 時半までガストでねばる.ここでカルボナーラを食ったら急に気持ち悪くなって,眠気と吐き気との熱き闘いが始まる.
5 時半頃-
何とか眠気と吐き気に勝利し,始発で大学へ.当然のことだけど学生証兼カードキーが使えず中に入れない.お土産を置いてきたかったのに,途方に暮れてしまう.しかも震えるほど寒い.これが東北クオリティ.
7 時頃-
何だか喉が痛くなってきた頃,突然「そうだ,北へ行こう」と思い立つ.駅へ行って適当に切符を買って,下り列車に乗り込む.数分後居眠り開始.
9 時頃-
大いなる眠りから覚めて辺りを見渡すと終点八戸.更に途方に暮れる.3,000 円弱もかかってしまったので,もったいないから観光でもすることにする. 地図も見ずに適当に歩き始めると,「櫛引八幡宮」「史跡根城の広場」の二つの看板を発見.とりあえず八幡宮とやらに寄ってみるか,てことで看板の矢印に沿って歩き出すも,全然それっぽいものが見つからない.
10 時頃-
1 時間強歩いてやっと櫛引八幡宮を見つける.遠すぎだよバカヤロー,疲れたよ.
11 時頃-
次の目的地,根城へ向かう.疲れ果てたので文明の利器バスを使う.どこ行きかも確認せず適当に乗ったけど無事ついた.根城は見る物が多かった.本丸跡の復原をぶらぶらと見物して回る.
13 時頃-
一通り見終わる.しかしこの時点で疲労がピーク.バスで八戸駅へ戻る.バスだと 20 分もかかんねーのか.俺アホ.駅に着いた頃,腹が減ったので駅周辺を散策して,かねてから食べてみたかった煎餅汁を食う.うめー.
14 時頃-
疲労が酷いし,盛岡まで結構かかるので,戻ることにする.駅で切符を買ってホームに行ってみたら,盛岡行きの列車が一時間後までない.それが青い森鉄道クオリティ.座って休みたかったので,三戸行きに乗る.速攻居眠り開始.
14 時半頃-
車掌に起こされる.いつの間にか三戸に着いてた.降りてホームで待ってたら,駅員に「間違って来ちゃったの?」と声を掛けられる.「盛岡行きの列車を待ってるんです」と答えると,「一時間後だから待合室で待ってたら?」と言われたので,素直に従う.とはいえ,待合室でただ待つのも腹立たしいので三戸観光することにする.が,田舎すぎて何もない.廃墟と廃工場と倉庫と田んぼと畑だらけ.すげーな,これはこれで観光になる.
15 時半頃-
やっと盛岡行きの列車が来たので乗り込む.数分後,居眠り開始.
16 時半頃-
気付くと好摩だった.あぶねー,ここで起きられて良かった.その後何駅かで降りて大学へ向かう.事前に友人にアポ取っておいたので,大学に入ることができた.お土産を置いてから,友人宅でだべる.
19 時頃-
後輩宅で飲み.後輩の料理がすげーうまかった.話の内容はやはり変態についてとか「ウホッ」とか「ぬめぬめ」とか「イチゴ味」とか.けどあんま覚えてない.やべー.
5 日 8 時頃-
いつの間にか寝てたらしく,目覚めるとそこは後輩宅だった.2 時くらいまでは覚えてるんだけどな…….後輩はスノボへ行くらしいので盛岡までついでに送ってもらう.
9 時頃-
帰りの新幹線は 16 時のを予約してたんだけど,9 時台のに空きがあったので変更して新幹線に乗り込む.
12 時頃-
東京着.一旦家に戻って洗濯と風呂を済ませた後,築地へ行って飯食って,その後歩いて豊洲まで行って買い物なぞ.で現在 23 時に至る.もう疲労度 MAX だよ.

連日外を歩きまくってたからかなり日焼けしたなー.

本日のツッコミ(全4件) [ツッコミを入れる]

smbd [日焼けした坊主か…もっと短く刈ってサングラスでもかけてくれw ]

saino [よくぞ、こんな日程で... ]

rethi [相変わらず無茶な生活送ってんな(w こちらのGWは某所の日記で見ておくれ。 つーか、なんでまた岩手・・・? ]

atzm [> smbd たん それなんてサンプラザ中野? > saino さん 完全ノープランの旅もまたおつなものです. 終..]


05/05/2007 むう

tDiary 1654日目

[日記] むう

完璧に昼夜逆転してる件について


05/05/2008 ふむ

tDiary 2020日目

[日記] 最近のこと

  • usata (mamoruk) さんの結婚式.めでたい.「新郎 Gentoo 友人」の肩書きで.二次会出れなくて残念...
  • 歌舞伎座で第九の合唱を聴く.演奏もう少し頑張って欲しかった...
  • 東京を離れた大学の友人に会ってだべる.相変わらず.
  • 江戸東京たてもの園へ.ノスタルジーな気分に浸りたい時に良いかもしれん.こどもの日が近かったせいか,独楽や竹馬等で自由に遊べるスペースがあった.血が騒いで俺も手を出したことは言うまでもない.
  • 目黒寄生虫館へ.とてもきもくて怖い.あと思ってたより狭い.
  • また料理に手を出す.親子丼とか各種ソテーとか出汁巻き卵とか.飽きてきたんでもっと別な料理に手を出したいところ.
  • ジョジョ読みまくり.

そういえば

将門の首塚にも行ってたや.

[日記] オワタ

脳の話やってるって聞いて NHK つけたら謎の声優番組が始まった.

コメントが流れてこないことにすごい違和感を感じた.


05/05/2009 うむ

tDiary 2385日目

[日記] 飯日記 数奇な人生

  • 10時頃: そば

昼と夜は何食ったか忘れた.