メモ。
rsyncならこんな感じ。APNICだけは同期できなかったのでwget。パスが違うのか?
rsync -avzL www.apnic.net::stats/arin/delegated-arin-latest ./ rsync -avzL www.apnic.net::stats/lacnic/delegated-lacnic-latest ./ rsync -avzL www.apnic.net::stats/ripe-ncc/delegated-ripencc-latest ./ rsync -avzL www.apnic.net::stats/afrinic/delegated-afrinic-latest ./ wget http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
姉vorteXを買ってきた。初回特典のサントラ付き。肝心の本体持ってないけどね。まあ気にしない。本体は引っ越してから買う。バレッチもそのうち買う。予定。未定。
サントラ。姉シリーズは意外といい曲(というか俺好みの曲)が多い。シリーズ作を重ねるたびに品質が向上しており、成長を感じさせる点も好印象。特にトラック22のGet out!(姉X)は傑作だと思う。
吉里吉里にはプラグインを自動的にリンクする機能がある。吉里吉里専用プラグインの拡張子を.DLLから.TPMに変更するだけで、吉里吉里起動時に勝手にリンクしてくれる。リンクされる順番は、プラグインファイル名を辞書的に昇順に並べたときの順である。細かいことは吉里吉里のリファレンスに書いてある。この機能自体は前から知っていたのだが、せいぜいPlugins.link('hogehoge.dll');
って書かなくて済むね、くらいにしか考えていなかった。
今日、ちょっと面白いことを思いついたので実装してみた。吉里吉里作品にプラグインを自動リンクさせて、リンク時に特定のスクリプトを実行させてしまおうというもの。リンクの実行中(V2Link()中)ということもあって、そのスクリプト中にさらに別のプラグインをリンクさせるのは無理っぽいが、それを除けば大抵のものは動くようだ。試しに作ってみたのがリソースモニタ。実行中の吉里吉里プロセスが消費しているCPUパワーとメモリを、Windows附属のタスクマネージャのようにリアルタイムでグラフにする(サンプル画像 *1 )。このモニタ自体はTJSで実装されている(描画やOS寄りのコアな部分は拙作のプラグインを使用)ので、カスタマイズは比較的容易にできる。
では早速その辺の作品で試してみようかと思ったが、吉里吉里の作品が手許にないことに気づいた。そういえば、吉里吉里を弄り始めて久しいが、吉里吉里で作られた作品って何があるんだろうと考えてみると、あまり思い浮かばない。ぱっと出てくるのはFateと姉歯くらい? うーむ、どこかで体験版を探して拾ってくるしか。それも実行ファイルが吉里吉里 2.26以降、という制約付き(プラグインのリンク仕様)で。
昨日の続き。吉里吉里作品を探そうと思ったが、どう探すのが効率がいいのかわからん。2.26で実装された同人ソフトの体験版を何とか2〜3見つけて試してみた。まあ、普通に動いた。ただ、このスクリプトが作ったウィンドウがプライマリウィンドウ(というのか? 最初に作られたウィンドウ)になると、作品本体側で何かと不具合が生ずるようなので、タイマなどを利用して、ウィンドウがインスタンス化するのを遅らせるようにした方がいいみたい。ほか、これといった問題点はない模様。
リソースモニタ。改造していろいろと無駄に表示させてみた(サンプル画像)。モニタ自身がかなりリソースを食っているんじゃないかと思われがちだが、気にしたら負けだ。
久しぶりにBSOD(Blue Screen of Death)を経験した。ここ二年以上見ていないな。0x0a(IRQL_NOT_LESS_OR_EQUAL)だって。ドライバ周りが原因かもしれない。
ここのところSQLiteを追っていなかったのだが、いつの間にか全文検索ができるようになっていた。FTS1だそうな。FTS1は永遠の実験モジュールで、本格的な実装はFTS2だそうだ。ちなみに他のDBMSはというと、OracleにはOracle Text、PostgreSQLにはSenna(Ludia)などがある。
ハヤトがどんどんかわいそうになっていく。脚本も演出もどんどんいい加減になっていく。ような気がする。
調子に乗ってKAGモニタを作ってみた。KAGシステム内部で何が起こっているのかを覗き見するツール。本体附属の監視式でいいじゃん、という気がしないでもない。
諸々の事情によりコンソールも監視式も使用できないような状況でも、強制的に表示させることができる…くらいしかメリットがないなあ。
ああ、obj instanceof 'Function'
でオブジェクトが関数かどうかを調べられるのか。初めて知った。何言ってんの、今更。
ああ、'Class'と'Property'もあるのか。初めて(略)
調子に乗ってユーザ定義のTJS式をモニタできるようにしてみた(サンプル画像:右半分は各種実験の痕跡)。これを更に進めて、デフォルトで監視していたものを削除して全てユーザ定義とした。何を「監視」するかはユーザが決めることだ。
何だかますます「監視式」です。
痛いニュース 韓国人 「日本のガンダム、クレしん、イースは日本だけのものではない」経由。凄い理屈を展開する韓国人。日本ではこれを屁理屈という。
どうでもいいようなソフトに無駄に労力を注ぎ込んで、プラグイン機構を追加した。設定ファイルはもちろんのこと、プラグインも随時リロードできる。これはTJSだからこそ実現しやすかった。TJSって素敵。まあ、リロード時にコンパイルエラーが発生したら落ちるけどね…落とさない方がいいか?
あと、エラー処理を強化したいけど、とりあえずコンソールログに吐いておけばいいや。投げ遣り。
任意に監視を中断できるようにしたり、エラー処理をちょっとまともにしたり、コンソールログ強制書き出しプラグインを作ったり。いろいろ無駄に充実。
- 『アイドル八犬伝』より「君はホエホエ娘」(ボーナストラック)
キター!歌詞までありながら今の今まで誰もカバーしなかったあの迷曲がついに。しかし、この曲を選ぶとはさすがモモーイ。よくわかっていらっしゃる。
そういえばモモーイって「マニアックな歌手」ってことくらいしか知らないなあ。あと某看護婦魔女中原小麦。どんな人が調べてみた。
また、生徒会副会長も務め、文化祭のパンフレットには、ゲーム「ときめきメモリアル」のキャラクター藤崎詩織のコスプレで載っている。なお、高校時代の通学証明書は、綾波レイのコスプレで写っていた。
格が違う。この人には絶対勝てないと思った。
プラグイン。環境変数一覧を取得する関数を追加した。Windowsでグローバル変数environ を見ると、"="で始まる名前の環境変数が混ざっていてイヤンな感じ。
出力形式としてsprintfのフォーマットを使用できるようにした。複数の監視対象オブジェクトをまとめて配列にし、その配列をsprintf関数の引数へ展開して渡すことで、書式を一括適用できる。つまり、書式'%s=(%d,%d)'
に対して[ 'Pos', 7, -5 ]
という配列を食わせると'Pos=(7,-5)'
が出力されるということ。
このサイトの(X)HTMLは、ほとんどがTDSというソフトを使用して作られている。TDSは元々は日記システムなのだが、通常のHTML作成機能も搭載されており、それに手を入れて使っている。地味ではあるが便利なソフトで、使い始めて五年近くになる。
ただ、TDSにはちょっとした欠点がある。インライン要素の開始タグの直前に、必ず改行文字が入ってしまうのである。(X)HTMLでは、二字以上の連続した空白または改行は、一文字の空白に集約されて解釈される。つまり、TDSで出力された(X)HTMLでは、インライン要素の開始タグの前に余計な空白文字が入っているということだ。大抵のブラウザはこの空白を律儀にレンダリングするから、少々見苦しい状態になる。
そこで、TDSが出力した(X)HTMLから余計な改行コードを削除するツールを作成し、サイトの(X)HTMLリソースに対して一括変換をかけてみた。全リソースをチェックしたわけではないので、期待通りに変換されているか少し不安。
ちなみに、TDSは数年前から絶賛開発停止中のようだ。
やたら露出の多い地獄少女と、傀儡ネタのひまわりっ!! ゴルゴ米澤君。
ATOKって「くぐつ」を変換できないのか。
アイテム出現比率のメモ。サンプル数が少ないのであまりあてにならない。
簡単な整数比にすると、小:大:アーマー:ウェポン = 5:1:7:2 くらいか。
効率良くアーマーを稼ぐならEASY「22.停泊」。ペイル専用。マスターレイピアT推奨。ペイル二人で、二機のキャリアの真下でひたすら蟻を狩るだけ。効率は一時間で約4000匹。アイテム出現確率を30%、アーマー出現率を7/15、アーマー一個あたりの耐久力上昇値を0.75とすると、一時間で耐久力が約410アップすることになる。ステージクリア時に持って帰れるアイテム数は上限があるから、一時間半くらい稼いだら一旦クリアした方がよい。
ちなみに「45.占拠」でも理論的には効率は同じだが、処理落ちが激しいため、効率は「22.停泊」の八割程度。
HTMLでは改行文字は空白文字と同等に扱われる(pre要素中を除く)。複数の連続した空白文字は、一文字の空白文字に集約されて解釈される。つまり、これらは最終的に同一のものと解釈される。
No, God's my judge,
No, God's my judge,
No, God's my judge,
欧米語のような、単語単語で分かち書きする言語であれば、この仕様は実に都合がよい。単語間でさえあれば、どこで改行しても空白に置き換えられ、結果的に空白文字で単語を区切ったことになるからだ。
Gave it a judge's clerk! No, God's my judge, The clerk will ne'er wear hair on's face that had it.
Gave it a judge's clerk! No, God's my judge, The clerk will ne'er wear hair on's face that had it.
しかし、日本語のように、分かち書きをせず文字を連続させて記述する言語にとってはあまりよろしくない。改行は即空白文字と看做されるから、下手に改行してしまうと無駄な空白文字が含まれてしまう。
ったく、人間の霊の分際で。悔しかったら物理レイヤーで来いや。
ったく、 人間の 霊の 分際で。 悔しかったら 物理レイヤーで 来いや。
ったく、 人間の 霊の 分際で。 悔しかったら 物理レイヤーで 来いや。
日本語で文章を書き、HTMLでマーク付けする場合、改行する場所は句点や感嘆符の後など、文の区切りの部分だけに止めておくのが望ましい。でないと、上記の例のように変な空白が入ってしまい、レンダラによってはなんともパラパラした文書になってしまう。音声ブラウザが読み上げるときにも障害になるかもしれない。そもそも日本語では、通常このように空白で単語を区切ることはしない。
TDSとHNSは設計思想もよく似ているし、TDSのメイン開発者はHNSの開発にも携わっていたわけで、HNSも同じ問題を抱えている
のは当然かな、と思う。
で、この問題を、出力後のHTMLを整形することで回避したわけだが、こういうやり方はいまいちだなと思っていた。なにしろ、TDF作成→HTML変換→整形という処理の流れが全然美しくない。
仕方がないので、HNS本体を改造し、PRE以外のタグでは文字列から改行を取り払う処理を追加しました。
そうだよね。TDS内部で片付けるべきことだよね。つーか、プログラマなら改造すべきだよね(そうなの?)。というわけで、気合い入れて解析して改造した。久々のTDS手術。
仕様追加。StringTableの設定項目にkeep_crを追加。これはCommand::KeepCrに対応する。継承有り、デフォルトは0で、改行が残らなくなる。pre要素を含むものやnoparse系は、コマンド定義ファイルでkeep_cr = 1
とすれば従来通り改行は残る(noparse系ではそもそも不要かも?)。これで外部プログラムに頼ることなく、余計な改行は綺麗サッパリ消え去る。…はず!(弱気)
というか、(俺の記憶が正しければ) IE も Fx も Opera も Safari も、target 属性を無視して常に今の窓に開くというオプションがないんだよねぇ (←間違ってたら言ってね)。
Firefox 1.5なら「オプション」→「タブ」で「新しいウィンドウを開くリンクは次の場所に開く」をチェックして「現在のタブまたはウィンドウ」を選択すれば可能。確か、プラグインとかは不要だったはず。新規タブで開きたい時はCtrlキーを押しながらリンクをクリックする。
Opera 8.5(古いな…)にはそのような設定は見あたらない。リンクを右クリックして「コンテキストメニュー」→「開く」で同じタブに表示されるが、リンクを辿るたびに「右クリック」→「選択して左クリック」なんて面倒臭くてやってられない。Opera 9は使ったことがない。
うちのサイトのコンテンツはほとんどアウトですかそうですか。そんなにオコチャマによろしくない単語、書いているかなあ。
毎度毎度のベタな展開。引き籠り兼登校拒否のつきよ姫が大活躍。「お前も一緒に融けちゃうよ〜」って真紅の少年伝説にもあったような気が。あれは「燃えちゃうよ」だっけ。古いな俺。
プラグイン。いつになったらVersion 1.0になるんだろうな。永遠のバージョン・ゼロ宣言でもしようかな、某声優ライクに。
Firefox 2をインストールした。「オプション」→「タブ」→「新しいウィンドウを開くリンクは次の場所に開く」→「現在のタブまたはウィンドウ」がなくなっていて、不便になった。なぜバージョンが上がるとカスタマイズ性が下がるのか。そもそも、バージョンが変わるたびにころころとUIが変わるのは何なのだ。
回避策。about:configでbrowser.link.open_newwindow
を1にする。これでtarget='_blank'
でも現在のタブで開くことができる。