06 
August, 2005*
仕事  *
朝洗濯を済ませて、午後から仕事。
最近は通り雨(というか雷)がすごい 
 
 
07 
August, 2005*
08 
August, 2005*
メディアサーバ  *
HDDに撮り貯めるようになって、結構テレビを見るようになった。
行き当たりばったりで見ていたゲームセンターCXも安心して見れます...次最終回だけど。
...しまった...昨日の一挙放送撮り損ねたよ 
やっぱり、地上波以外のキーワード録画いるよ...
マジでショック... 
 
 
09 
August, 2005*
Painter  *
PainterはCPU使用率が100%になるのが仕様らしい。(最新版も?)
そういえば気にしながら使ったことがなかったので、タスクマネージャで確認するとちょうど50%だった。
TOMOくん談「HTの半分のCPUを持っていっているのではー」... (・∀・)ソレダ!
番組ナビゲータ  *
iEPGの予約に、番組ナビゲータを使ってみる。
素敵だ! 
 
 
10 
August, 2005*
自動録画  *
やっぱり自動録画機能が欲しくて、色々と使ってみる。
ケーブルテレビは同じ番組を繰り返しているので、何度も録画してしまった 
微妙に使えない。
録画の設定だけならiEPGを投げれば良いだけなので、自分で作るかな。
番組情報受信  *
番組情報をXMLで配信しているサイトを探すも見つからず。
利用を無料にする代わりに広告収入で元を取るビジネスモデルなので仕方がないのか 
.netならXMLが断然使いやすいので、まずはhtmlをXMLに変換するとこから作ろう。
番組情報受信2  *
番組情報を配信しているところ
全部xhtmlじゃない 
 
 
11 
August, 2005*
番組表取得  *
番組表がなければ始まらないので、ONTV JAPANから番組表を取ってくるコードを書く。
(デバッグしていないの参考にする人は注意...タグや文字実体参照も未対応  )
)
htmlのパーサはmshtmlを使うのが簡単だけど、入っていない環境も多いので使わず。
C#だとXMLを吐いた方が何かと便利なので、XMLで。
将来的にはXMLTVに準拠したほうが何かと便利なのか?
|  | static void Main(string[] args)
{
    int ch = -1;
    if(args.Length > 0)
    {
        try
        {
            ch = Convert.ToInt32(args[0]);
        }
        catch
        {
        }
    }
    if(ch >= 0)
    {
        string chname = "";
        string chid   = string.Format("{0:0000}", ch);
        Uri uri = new Uri(string.Format("http://www.ontvjapan.com/program/gridChannel.php?ch={0}", chid));
        string htmldata = "";
        try
        {
            WebClient wc = new WebClient();
            wc.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)");
            byte[] data = wc.DownloadData(uri.AbsoluteUri);
            htmldata = Encoding.GetEncoding("euc-jp").GetString(data);
        }
        catch
        {
        }
        Match titlemc = Regex.Match(htmldata, "<title.*?>.*?/(.*?)</title>"
                                    , RegexOptions.IgnoreCase | RegexOptions.Singleline);
        if(titlemc.Success) chname = titlemc.Groups[1].Value.Trim();
        XmlTextWriter writer = new XmlTextWriter(Console.Out);
        writer.Formatting = Formatting.Indented;
        writer.WriteStartDocument(true);
        writer.WriteStartElement("tv");
        writer.WriteStartElement("channel");
        writer.WriteAttributeString("id", chid);
        writer.WriteElementString("name", chname);
        writer.WriteEndElement();
        Match tdmc = Regex.Match(htmldata, "<td.*?>(.*?)</td>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
        while (tdmc.Success) 
        {
            Match tdmc2 = Regex.Match(tdmc.Groups[1].Value,
                "<span\\sclass=\"style_title\">" +
                ".*?<a.*?href=\"(.*?hsid=(\\d{15}?))\".*?title=\"(\\d{2}:\\d{2})-(\\d{2}:\\d{2})(\\s.*?)\">(.*?)</a>" +
                ".*?</span>" +
                "(.*?<span\\sclass=\"style_subtitle\">(.*?)</span>|)" +
                ".*?<span\\sclass=\"style_corner\">(.*?)</span>" +
                ".*?<a\\shref=\"(.*?)\">"
                , RegexOptions.IgnoreCase);
            if(tdmc2.Success)
            {
                string hsid;
                int      pgyear, pgmonth, pgdate, pgsthour, pgstmin, pgedhour, pgedmin;
                string   pgtitle, pgsubtitle, pgcorner, pggenre, pgurl, pgiepg;
                DateTime pgstart, pgend;
                hsid       = tdmc2.Groups[2].Value.Trim();
                pgyear     = Convert.ToInt32(hsid.Substring(0, 4));
                pgmonth    = Convert.ToInt32(hsid.Substring(4, 2));
                pgdate     = Convert.ToInt32(hsid.Substring(6, 2));
                pgsthour   = Convert.ToInt32(tdmc2.Groups[3].Value.Substring(0, 2));
                pgstmin    = Convert.ToInt32(tdmc2.Groups[3].Value.Substring(3, 2));
                pgedhour   = Convert.ToInt32(tdmc2.Groups[4].Value.Substring(0, 2));
                pgedmin    = Convert.ToInt32(tdmc2.Groups[4].Value.Substring(3, 2));
                pgstart    = Convert.ToDateTime(string.Format("{0:0000}/{1:00}/{2:00} {3:00}:{4:00}", 
                                                                pgyear, pgmonth, pgdate, pgsthour, pgstmin));
                pgend      = Convert.ToDateTime(string.Format("{0:0000}/{1:00}/{2:00} {3:00}:{4:00}", 
                                                                pgyear, pgmonth, pgdate, pgedhour, pgstmin));
                if(pgsthour < 5)
                {
                    pgstart = pgstart.AddDays(1);
                    pgend   = pgend.AddDays(1);
                }
                if(pgstart  > pgend)
                {
                    pgend   = pgend.AddDays(1);
                }
                pggenre    = tdmc2.Groups[5].Value.Trim();
                pgurl      = (new Uri(uri, tdmc2.Groups[1].Value)).AbsoluteUri;
                pgtitle    = Regex.Replace(tdmc2.Groups[6].Value, "<img.*?>", "", RegexOptions.IgnoreCase).Trim();
                pgsubtitle = Regex.Replace(tdmc2.Groups[8].Value, "<img.*?>", "", RegexOptions.IgnoreCase).Trim();
                pgcorner   = Regex.Replace(tdmc2.Groups[9].Value, "<img.*?>", "", RegexOptions.IgnoreCase).Trim();
                pgiepg     = (new Uri(uri, tdmc2.Groups[10].Value)).AbsoluteUri;
                writer.WriteStartElement("programme");
                writer.WriteAttributeString("channel", chid);
                writer.WriteAttributeString("start", pgstart.ToString("yyyy-MM-ddTHH:mm:00Z"));
                writer.WriteElementString("year",  pgstart.ToString("yyyy"));
                writer.WriteElementString("month", pgstart.ToString("MM"));
                writer.WriteElementString("date",  pgstart.ToString("dd"));
                writer.WriteElementString("start", pgstart.ToString("HH:mm"));
                writer.WriteElementString("end",   pgend.ToString("HH:mm"));
                writer.WriteElementString("genre", pggenre);
                writer.WriteElementString("program-title",    pgtitle);
                writer.WriteElementString("program-subtitle", pgsubtitle);
                writer.WriteElementString("program-corner",   pgcorner);
                writer.WriteElementString("iepg",  pgiepg);
                writer.WriteEndElement();
            }
            tdmc = tdmc.NextMatch();
        }
        writer.WriteEndElement();
        writer.WriteEndDocument();
        if(writer != null) writer.Close();
    }
}
 | 
意味もなくIEに偽装。
C#  *
実はまだデスクトップにVS2003入れてないのでノートで作成...重いよ 
 
 
12 
August, 2005*
[サーバ]サーバダウン  *
家に帰って録画した番組を見ようと思ったら、サーバにつながらない 
サーバ画面に切り替えると、録画中に止まっていた。
熱さのせいなのか...でも温度計の針はそれほど高くない。
リモコン  *
リモコンが多い。
テレビとビデオを廃止したとはいえ、毎日何種類のリモコンを使うのは辛い。
しかも操作するのが、
- ヤマハAVアンプ
- ケーブルTVチューナ
- IO-DATAアップコンバータ
- IO-DATAリンクプレーヤ
もちろんAVアンプのリモコンは、他社製品のリモコンコードがプリセットされている。
が、ケーブルチューナやIO-DATA製品に対応していない。
学習リモコンかなぁ。
iEPG  *
ONTV JAPANからiEPGをGET
>telnet www.ontvjapan.com 80
GET /program/gigapocket.php3?s_hsid=200508120832024 HTTP/1.0
Date: Fri, 12 Aug 2005 03:27:54 GMT
Server: Apache/1.3.33 (Unix) PHP/4.2.4-dev
X-Powered-By: PHP/4.2.4-dev
X-Accelerated-By: PHPA/1.3.3r2
Content-Type: application/x-tv-program-info
X-Cache: MISS from accel.ontvjapan.com
Connection: close
Content-type: application/x-tv-program-info; charset=shift_jis
version: 1
station: NHK総合
year: 2005
month: 08
date: 12
start: 23:55
end: 24:00
program-title: NHKプレマップ
program-subtitle:
「Content-Type: application/x-tv-program-info」って何って検索したら、
350ml.net
の
iEPGフォーマット解析
というのが見つかった。
ありがたい。
予約  *
FEATHER2005への予約は、CDVRS.exe がやっているようだ。
tvpiの関連付け
C:\Program Files\Canopus\FEATHER\CDVRS.exe "%1"
CDVRS.exeにファイルを渡すと予約の詳細設定ダイアログがでてくるので、自動予約には使えない 
バイナリを眺めていたら、/nogui_iepg という素敵オプションを発見。
C:\Program Files\Canopus\FEATHER\CDVRS.exe /nogui_iepg "%1"
としたら、ダイアログなしでデフォルトで予約できた 
CDVRS.exeオプション一覧?
/add
/capture
/cdvrs
/ExitEvent:
/feather
/id:
/iEPG:RegistExt
/iEPG:OpenURL
/list:show
/mute
/nogui
/nogui_iepg
/overlay
/test
自動予約に必要な情報は集まった。
次は、外部チューナ連動。
 
 
13 
August, 2005*
嬉野へ  *
肥前夢街道に行ったあと、温泉でのんびり 
忍者の人はとても親切でした。
 
 
14 
August, 2005*
実家でのんびり  *
たまには何も考えずにのんびりするのも良いかもー。
リボンレイ  *
姉に針を使わない方のリボンレイの作り方を教えてもらう。
何か使い道はなかろうか...
 
 
15 
August, 2005*
お盆  *
朝からお参り。
[サーバ]時計が狂ってる  *
時計が激しく狂ってる...7月になってるし... 
録画セットしていたのに、まったく録画されてないし 
W32Timeってずれすぎていると補正しなかったかな?
 
 
16 
August, 2005*
17 
August, 2005*
休日出勤  *
引き続き仕事 
RC1400  *
RC1400を色々設定する。
RC1400の素敵なところ
- 下部ソース切り替えボタンにも学習可
- AVアンプのソース切り替えボタンを学習させれば、とても便利*1
 
- 10,11,12ボタンがない
- CATVしか使わない人には0ボタンだけの方がいい*2
 
- ソース、ダイレクトボタンの名前を設定できる
- バックライト付き
RC1400のイマイチなところ
- ちょっとデカイ
- ちょっと高い
- 電池が長持ちしない
- 早送り巻戻しボタンがない
部屋の照明も赤外線リモコンにしたいなぁ 
ソース切り替えが12個もついてるけど、まだ4つしか使ってないよ 
久々にブラボーミュージック  *
...指ツリマシタ 
 
 
18 
August, 2005*
正規表現  *
友人からのツッコミで、正規表現にSinglelineモードがあるということを知る。
知らないほうが珍しい?
恥ずかしいので、前に書いたヤツをコッソリ修正。
シートシンク  *
高速電脳にi915GMm-HFS用の新しいシートシンクが出てるー。
古いヤツとより素敵さアップ。
欲しい...
Wordで改行を検索  *
新しいヤツなら「^p」で、古いヤツなら「^13」
 
 
19 
August, 2005*
ヘッドホン  *
SE-A1000を1年半ほど愛用している。
(住んでいるアパートは壁が薄いので、音楽を聴くときはヘッドホン必須)
値段のわりに高低音出てくれるので気に入っているけど、パソコンのライン出力のノイズが気になって仕方がない 
前まで使っていたパソコンにはデジタル出力があったのでノイズは皆無だったのに、新しいパソコン(SX280)にはデジタル出力が付いてなかった 
ビジネスモデルだから?それともDELL一般付いていないのか?
ヨドバシまでUSB-Audioのデジタル出力が付いているのを探しに行くが、気に入るヤツは見つからず。
学習リモコン  *
使えば使うほどいい感じだ。
サーバに学習リモコン的な機能をつければ、ケーブルチューナ連動録画機能が簡単に実装できそう 
 
 
20 
August, 2005*
コロプラ  *
コロプラの今の状態がWebで公開できる機能があったので、貼り付けてみた。
ちょっとでかい 
[買い物]  *
久々に天神まで行ったので、帰りにワルキューレの降誕を購入。
冨士宏ワールド
 
- コロプラの画像がリアルタイムに変わってイイ感じ -- JuJu 
 
21 
August, 2005*
休日出勤  *
雨 
[サーバ]ヒートシンク  *
高速電脳のi915GMm-HFS用のシートシンクを購入。
(元々はPentiumM用のファンレスヒートシンクに、追加工したものっぽい)
早速取り付けようとすると、コイルと干渉してはまらない 
でも90度回転させるとファン停止時での放熱効果が落ちるから、この角度で付けたい。
(90度回転させても、若干の干渉あり)
仕方がないので付いていた側板を外して、ヒートシンクに直接タップを切ってスペーサをねじ込んだ。
なかなかいい感じで取り付け完了。
上に長くなるので、マイクロATX用ケースを使っているとCD-ROMドライブに干渉する。
とりあえずサーバにはCD-ROMをつないでいないので、問題なし。
はじめからシートシンクだけ買ってきてファンを取り付けるたほうが安上がりだったような気もするが、あまり考えないとこにする。
室内でハンドドリルを使うのもどうかと 
 
 
22 
August, 2005*
ヨドバシ  *
仕事を終えてヨドバシへ。
ヨドバシで偶然TOMOくんと遭遇。
テキトウに買い物を済ませて、帰りに謎のインド料理店で食事。
辛さは普通って頼んだら、全然辛くなかったよ...日本人向け?
[買い物]PlayStation2専用コンポーネントAVケーブル  *
ヨドバシへPS2用のコンポーネントケーブルを買う。
TVBOXes(SXGAアスペクト比固定)+コンポーネント出力で素敵度アップ 
TVBOXesユーザにはかなりおすすめ。
 
 
23 
August, 2005*
24 
August, 2005*
25 
August, 2005*
[サーバ]ダウン  *
家に帰るとサーバが落ちていた 
録画中に落ちていたので、MTVX2005絡みなのは間違えなさそうだ。
以前も同様の落ち方をしていたので、再発する可能性はかなり高い。
[サーバ]ネットワーク絡み  *
サーバにUzuを立ち上げて、録画した番組を見ているとなぜか定期的に停滞する。
転送レートが足りていないのかと思っていたら、停滞中はICMP ECHOも返さない様子。
ネットワーク絡み?
とりあえず、こっちのほうが最優先事項っぽい。
トレーサ  *
http://www.rakuten.co.jp/kawachigazai/569805/806292/
あると色々と便利なトレーサ。最近はのヤツはかなり薄いらしい。
かなり欲しいかも。
先週からペンタブを探すが発見できず。
収納が少ないのですぐに見つかると思ったのに...なぜかペンだけ発見 
 
 
26 
August, 2005*
年年歳歳  *
古人無復洛城東
今人環対落花風
年年歳歳花相似
歳歳年年人不同
一青窈の歌を聴いたいたら、この詩を思い出した。
(漢詩を縦に書いてくれるプラグインはないのか...)
高校時代の国語の先生が、日本人は中国人より漢文が得意だと言っていたが本当だろうか?
古人復タ洛城ノ東二無ク
今人還ッテ対ス落花ノ風
年年歳歳花相似タリ
歳歳年年人同ジカラズ
 
 
27 
August, 2005*
休日出勤  *
朝掃除機をかけて、昼から仕事。
LANDISKを分解  *
LANDISKからHDDを取り出すついでに写真撮影。
分解してみよう/LANDISK
今更って感じも 
 
 
28 
August, 2005*
地獄の業火に焼かれ、それでも天国に憧れる  *
this loathsome gargoyle,
who burns in hell,
but secretly yearns for heaven,
secretly... secretly...
朝、金田一少年の事件簿をテレビで見ていたら、観たくなったよ。
メール通知機能もあるので、Gmail Notifierプラグインは使わなくてよくなるのかな。
そういえば、Gmailの招待券もあまっているので、ご希望の方はどうぞ。
時計がずれる  *
パソコンの時計が1日20秒程度進むけど仕様?あとでDELLに問い合わせよう。
掃除  *
何かをやらないといけないときに限って、徹底的に掃除をしたくなる。
学生のときから変わらない 