kaihou999 (3844) の日記

2002 年 10 月 18 日
午後 11:48

微笑みの爆弾

 M1が来ました。
 今回は当日に書き込みます(笑

 モデレート対象にしたのはここ
 面白く、興味深い話題でしたので、+モデ爆弾を投下しました(笑

 前回は8月の下旬でした。
 1ヶ月半です。

# 今日は書き留めておきたいことが多い…。

午後 11:27

メールアドレス

 tramonlineがサービス停止の模様。残念。そしてありがとうございました。

 ということで、比較的mboxが大きな無料サービスを探さなきゃならない。
 まぁ、自宅に飛ばすって言う手もあるけど…それはある意味面倒だしなぁ。

 悩

午後 10:08

ネタ

 文章の形態からネタがあることくらいは気づいて欲しいなぁ(^^;;
 完全にオフトピだからこっちに書くけど…。

 分からなくて興味がある方は、「諸君私は戦争が好きだ」で検索してください。
 テンプレートネタです。

# 本来は分かる人だけ笑ってください系なんだけど…なんだかなぁ。

午後 09:32

OutOfMemoryError(3)

 TOMCAT君は冤罪でした。
 ファイルを一旦メモリに保存していたのがいけなかったらしい。
 しかも、保存先としてByteArrayOutputStreamを利用してたのが
悪かったようだ。

 ってなわけで、そこを変更。
 冤罪、ゴメン。

午後 05:01

Tomcat4.1.12のコンパイル

 やっとこさ完了。
 Eclipseでnever used importをwarningにしておくと、面白いほど
warningが出たので(1600くらい)、importを最適化した結果、
だいたい800弱に減った

 never used variableも結構あるなぁ。
 というか、前準備にえらいかかってしまった…。
 さて、debug debug。

# /.のシステムが軽くなった気がします。お疲れ様でした>スタッフの皆様

午後 12:04

OutOfMemoryError(2)

 友よ。覚悟は定まった。(誰?
 ハックってことで決定~

午前 10:44

OutOfMemoryError

 おお勇者TOMCATよ。たかだか23Mのファイルで死んでしまうとは何事だ。(ドラクエ風)

 昨日テスト中に発見した現象。
 ファイルのアップロードで、数十Mのファイルを受信すると、落ちてしまう。
 TOMCAT側で落ちるので、対策はTOMCATの設定かパッチのどっちかに
なるのじゃないかとにらんでいる。

 本日はこいつの解決方法を探す予定なのだけど…はてさて、どこが
悪戯をしているのやら。
 なるべくなら、パッチは避けたいなぁ

# 最終的には、運用で禁止って事でもいいのだけど、一応対策の洗い出し
# だけはしないと、客への説明が出来ないしなぁ。

2002 年 10 月 17 日
午後 11:30

ログと解析

 retry数100にしても、40人くらいで落ちることがある。
 ってことは、retry3回につき1回くらい、sleepさせたほうがいいのかも…。
 むむぅ。

 他に改造したい点は、
  ・ライトモードの組み込み
  ・コメント追加の検出
  ・コメントへのリンク修正
 と記録だけする。

 …そろそろ日記に書き込むのがアレになってきたなぁ。
 自サイトの方においても宜しいでしょうか?>Silphireさん

[11:35 追記]
  ・ユーザのメタデータ作成
  ・ユーザ名からのDL
  ・ストーリー取得
  ・国民投票の取得

[18日 10:17追記]
 なんでAMIGAトピックになっていたんだろう?

2002 年 10 月 16 日
午後 10:18

んで、ちぃっと機能追加

 全員の日記を取得できるようにしてみるテスト
 -all オプションでできるようになってます。

 例によって簡単な正常系結合テストしかしてません。
 なもんで、品質に対する突っ込み歓迎

# コードは、書いてないと感覚が鈍るもの…。

========================================================================================
#!/usr/local/bin/ruby -Ke

require 'net/http'

=begin
http://slashdot.jp の特定ユーザの日記を取得するクラス。コメントがあったらコメントも取得する

    list = GetSlashdotJapanDiary.new
    list.getList(uid)

=end

class GetSlashdotJapanDiary
    SERVER = 'slashdot.jp'
    JOURNAL_START = /<!-- start template: ID (\d+), journallist;journal;default -->/
    JOURNAL_PATTERN = /<TD VALIGN=.*?><A HREF="(.*?)"><B>.*?<\/B><\/A><\/TD>/
    JOURNAL_COMMENT_PATTERN = /(\d+)\xB8\xC4\xA4\xCE<A HREF="http:\/\/slashdot.jp(\/comments.pl\?sid=\d+)">/

    def initialize(limit = 3)
        @errorLimit = limit
        @cache = false
    end

    def setErrorLimit(limit)
        @errorLimit = limit
    end

    def setEnableCache(able)
        @cache = able
    end

    # HTMLを取得
    def getHTML(path)
        # 初期化
        Net::HTTP.version_1_2
        errCount = 0

        while true
            begin
                Net::HTTP.start(SERVER, 80) do |http|
                    res , = http.get(path)
                    return res.body
                end
            rescue => evar
                p evar
                errCount += 1

                if @errorLimit <= errCount
                    raise "取得失敗"
                end
            end
        end
    end

    # 日記を取得
    def getJournal(url, fn)
        html = getHTML(url)
        open(fn, "w"){|fh|
            fh.write(html)
        }

        # ファイルに保存
        /&id=(\d+)/ =~ url
        id = $1
        yield html, id
    end

    def getJournalComment(html, id)
        #日記コメントの取得
        if JOURNAL_COMMENT_PATTERN =~ html
            if 1 < $1.to_i()
                puts "http:\/\/slashdot.jp#{$2}"
                html = getHTML("#{$2}&threshold=-1&mode=flat&commentsort=0&op=%CA%D1%B9%B9")
                open(id + 'COMMENT.html', 'w'){|fh|
                    fh.write(html)
                }
            end
        end
    end

    # 日記のリストを取得
    def getList(uid)

        # html取得
        html = getHTML("/journal.pl?op=list&uid=#{uid}").gsub(/\s+/m, ' ')

        # リストの手前まで移動
        JOURNAL_START =~ html
        html = $'

        if html == nil
            return false
        end

        # uidのディレクトリを作成
        Dir.mkdir(uid) unless FileTest.directory?(uid)
        Dir.chdir(uid)

        # リストから日記を取得
        html.scan(JOURNAL_PATTERN){|s|
            url = s.shift.gsub(/&\s?amp;/, '&')

            # ファイルが存在していなければ取得
            /&id=(\d+)/ =~ url
            fn = "#{$1}.html"
            unless File.exist? fn
                puts url
                getJournal(url, fn){|html, id|
                    getJournalComment(html, id)
                }
            end
        }
        Dir.chdir('..')
        return true
    end
end

#================================ main =================================
if __FILE__ == $0
    if ARGV.empty?
        print "Usage: #{$0} [user ID]\n"
        exit
    end

    uid = ARGV.shift

    # 日記取得

    list = GetSlashdotJapanDiary.new

    if uid == '-all'
        id = 1
        while true
            puts "UID:#{id} の日記を取得します."
            unless list.getList(id.to_s)
                html = list.getHTML("/users.pl?op=userinfo&uid=#{id}")
                if /The\sUID\s\d+\scould\snot\sbe\sfound\./ =~ html
                    exit
                end
            end
            id += 1
        end
    else
        if list.getList(uid)
            puts "UID:#{id} の日記取得が完了しました."
        else
            puts "UID:#{id} は日記を書いていないようです."
        end
    end
end

午後 07:22

風邪、ぶり返し

 なわけで寝ているのだけど…。
 officepigさんの日記経由でeuleさんの日記より、うつ病診断テスト

テストの結果は 17 点でした。
あなたは軽症うつ症が疑われます。
 あなたは軽症うつ症が疑われます。まずは一度専門の相談機関に
相談に行かれることをお勧めいたします。このまま十分な休養を
取らずに放置しておくと、ますます悪化してしまい、生きている
こと自体にも疲れてしまう危険性もあるのです。

 当社契約企業の社員及び家族の方は、当ホームページからも
電子メール相談を無料でご利用頂けます。まずは一度、ご相談を
してみて下さい。詳しい対処法についてお伝えさせて頂きます。

 …風邪ぇひいている時に看病してくれる娘さんを紹介してください(ぷ

 というか、昨日の日記じゃないですけど、最近また、短気になった気がします。
 もう少しおおらかに生きたい…。

人生unstable -- あるハッカー

処理中...