日記

2月 1日 (火)

1. WinSock

WinSockで遊ぶ。題材としては、SSTPがお手軽でいいですね。

さて、簡単なテキストベースのTCP/IP通信ができたので、明日にでも本題に移るとしましょうか。

2月 3日 (木)

1. 吉里吉里 ネットワーク対応

繋がりました。相手はローカルホストのSSTPサーバ、つまりSSP(伺かクローン)です。苦労した甲斐があったよ……て、あんまり苦労してないか。

当面は、クライアント機能を充実させる方向で動きましょう。サーバ機能は気が向いたときに手を出します。

2月 4日 (金)

1. 吉里吉里 ネットワーク対応

1.1. Server

気が向いたときとか言っておきながら、一日と経たないうちに気が変わって、サーバ機能を実装してみました。

一応、簡単なクライアント〜サーバ間通信はできました。しかし、クライアントもサーバも、送受信機能は同期モードしかサポートしていないので、実用になるかというとちょっと、といったところです。試しに非同期モードも実装してみようと思ったのですが、Windowsメッセージループやら何やらわけがわからず、二時間余りで挫折。Windowsプログラミングって良く知らないんですよ、私(ォ

1.2. Octet Stream

サーバ機能は置いといて、オクテット列データの送受信機能を追加しました。

// クライアント側のコードはこんな感じ
Plugins.link("util_socket.dll");
Plugins.link("util_generic.dll");
var sendData = <%
 53 45 4e 44 20 53 53 54 50 2f 31 2e 34 0d 0a 53
 65 6e 64 65 72 3a 20 54 56 50 0d 0a 53 63 72 69
 70 74 3a 20 5c 30 5c 73 5b 35 5d 83 49 83 4e 83
 65 83 62 83 67 97 f1 91 97 90 4d 82 c9 91 ce 89
 9e 82 b5 82 dc 82 b5 82 bd 5c 31 81 63 82 b3 82
 e6 82 a9 0d 0a 43 68 61 72 53 65 74 3a 20 53 68
 69 66 74 5f 4a 49 53 0d 0a 0d 0a
%>;

var sstp = new Socket(); // create socket
sstp.open("localhost", 9801); // open socket
sstp.connect(); // connect to server
var sentSize = sstp.send(sendData); // send data
var recvData = sstp.receiveAsOctet(128); // receive response data
sstp.close(); // close(shutdown) socket
System.inform(Debug.hexDump(recvData));

2月 6日 (日)

1. 吉里吉里

メモリ使用状況取得関数、OSバージョン情報取得関数を作りました。といっても、Windows APIの結果をそのまま返しているだけです。

メモリ使用状況のような揮発性の情報は、一回の呼び出しでまとめて取得したほうが良いですね。二度連続で呼んだとしても、同じ情報を得られるとは限りませんから。そういうわけで、まとめて取得した情報は、辞書配列でまとめて返すことにしました。

ところで、VER_SUITE_SECURITY_APPLIANCE ってどんな製品スイートなんでしょう。よくわかりません。

2. 葡萄とか遷都とか

サーバリプレース中です。先にリプレース先、つまり新サーバを構築しているのですが、なかなかうまくいきません。

OSはLinuxということで、VineとかCentOSとかdebianとかいろんなディストリビューションを、インストールしてはアンインストールして、と繰り返していました。どれを入れても、ネットワークカードが不安定だったり、OSが起動しなかったり、それ以前にブートローダが起動しなかったり。なんでやねん。

なんでこんなに梃子摺るんでしょうか。

何が悪いんでしょうか。

…日頃の行い…(ギクッ)

2月 7日 (月)

1. こんなに手のかかる子だとは思いませんでした

リプレース中です。が、しかし!

  • LILOがコケて、例によって 'LI' で止まる
  • 起動時に kernel panic (<0>Kernel panic : Aiee, killing interrupt hundler!)
  • ネットワークカードが不安定
  • ほか

ああ、もしかして、SMPは鬼門ですかね。インストール時にSMPカーネルを選ぶと、ディストリビューションを問わず、LILOがこけたり、kernelがパニクったりしますね。

ネットワークカードが不安定なのは良くわかりません。debian 3.0r4、CentOS 3.4 だとまともに動作しませんが、Vine 3.1/2.6 だと安定します。謎。

それにしても、Pentium III 800MHz って速いですねー。カーネルのコンパイルとか、今までのマシンと比べて、目に見えて違いますね。あとは安定してくれればいいんですが。

2月 11日 (金)

1. お買い物

  • 地下鉄に乗って
  • 奇貨居くべし 天命篇
  • 孟嘗君 (2,3,4)
  • 悲しみよこんにちは
  • 浪花少年探偵団
  • シャーロック・ホームズの叡智

近所の古本屋、全体的に値上がりしててアレだなあ。

それよりも、自室の本を置く場所がアレだなあ。

2. Hidouki Mode

2.1. 非同期モードでーす

吉里吉里で非同期送受信対応。

ここ数日、WWWで情報を集めたり、吉里吉里プラグインサンプルを参考にしたり、WinSock サンプルのソースを読んだりしているうちに、目処が立ちました。何とかなりそうです。

2.2. 接続、したくなっちゃった

試行錯誤の末、クライアントモードでの接続〜送信はできました。多分、できてます。…本当に非同期になっているのかしらん。

今のところ、Windowオブジェクトを使用しないと、非同期モードにはできない仕様になってます。Window.registerMessageReceiver() メソッドでメッセージ受信関数を登録する必要があるので、この仕様は仕方がないと思います。

  const CRLF = "\r\n";
  var sendData = [
    "SEND SSTP/1.4", 
    "Sender: TVP", 
    "Script: \\0\\s[5]私のしもべー\\1\\s[11]ええっ", 
    "CharSet: Shift_JIS", 
    ""
    ].join(CRLF) + CRLF;

  var win  = new ASWindow();
  var sstp = new Socket(); // create socket
  sstp.open("localhost", 9801, true, win); // open socket (as asynchronous mode)
  sstp.connect(); // connect to server
  var sentSize = sstp.send(sendData); // send data
  sstp.close(); // close(shutdown) socket

受信機能も近日中に実装したいところ。

あー、サーバ機能はねえ、まあ、アレですねえ(何)。

2月 13日 (日)

1. ISBN

以前作った書籍管理プログラムに、ISBNから国名と出版社名を引く機能を追加しました。

2月 16日 (水)

1. 地震?

夜だったか、朝方だったか。

揺れていたような、揺れていなかったような。

朝刊にも載っていなかったし、高層建築のような本棚も、積み上げてある空き箱類も無事だったので、あれはきっと夢だったんだろうなー、と考えつつ会社に着くと、「朝方なんだから朝刊に載るわけないじゃん」とか「寝ぼけてたんでしょー」とか、いろいろ突っ込まれました。「寝ぼけてるのはいつものことだよ!」って全然反論になってないし、いや、どうやら本当に揺れていたようですね。

ということは、私は地震で目を覚ましたことになります。震度3以下では起きませんから、すなわち震度4以上だったことになります。ふむ、結構揺れたのか。

2. やっぱり罠が好き

影牢 II -Dark illusion-が出るようです。シリーズ二作目の影牢は名作なので、気になるといえば気になるのですが、前作(シリーズ三作目)の蒼魔灯は出来があまり良くなかったので、微妙ですね。

しかし、相変わらずミニスカートだな…

2月 17日 (木)

1. お買い物

アキバでいろいろ買ってきました。重かったー。

  • 花右京メイド隊(8-10)
  • 二十面相の娘(4)
  • 義経ちゃん剣風帖(1)
  • 夕凪の街 桜の国
  • Linux Magazine the DVD 2005
  • Lethal Application
  • Raiders Sphere
  • ATOK 2005
  • Z7

寝る前にうっかり二十面相の娘と夕凪の街を読んでしまって、寝るのが遅くなりました。明日もきっと睡眠不足。

2月 18日 (金)

1. ATOK 2005

使いにくっ!

まあ、慣れの問題なんでしょうけど。MS-IMEのキーバインドに慣れてしまったせいで、ATOKのキー操作が全くできません。カーソル下で確定だっけ?ああ、覚えてないよ。ATOKを最後に使ったのは、高校生の時だったような。確か、一太郎Ver.3だか4だか、そのへん。いつの時代だよ。

とりあえず、キーバインドはMS-IME型に直しました。

アクセサリのカタカナ語英語辞書は便利ですねえ。

2月 19日 (土)

1. Lethal Application

早い話、アストロロボSASA。めちゃ楽しいです。

Normal(Applica)で761万、Ultimate(Reminisce)で809万でした。うまい人はUltimateで1000万オーバーだそうです。すごいですね。

それにしてもこのゲーム、ロード時間が長すぎます。何とかならんかの。

2. RaidersSphere

早い話、エースコンバット。すごいクオリティです。

EasyでMission 1だけクリアしました。

2月 20日 (日)

1. RaidersSphere

Easyクリア。純粋に戦闘を楽しめますね。

そういや某5作目のThe Unsung War、ロックオン機能はバグってるし、ミッションは陰険だしで、全然やってないや。

2. Lethal Application

2.1. Applica

ついにでました、Normal(Applica)で822万(リプレイ ver.1.02用)。かなり乱暴なプレイですが。

基本は開幕バーストで、ひたすらブレイクチェインを狙います。また、ボスをブレイクチェインで倒すと、地味ではありますがそこそこ点数が入ります。Clarino(3)だけはバーストせずに、逃げ回った方がいいような…へたれ?

2.2. Reminisce

Allで988万でした。1000万まであと少し。惜しかった

2月 21日 (月)

1. Lethal Application

Normal(Applica)で、SP封印、バースト封印のマゾプレイ。スコアはALLで300万くらいでした。中途半端に辛いだけであまり面白くないので、このプレイは封印。

Ultimateでこんなことやったら、恐ろしい難易度になります。特に「ナ」×2戦が。

2. お買い物

  • 夏への扉
  • 奇貨居くべし 春風篇

2月 22日 (火)

1. Lethal Application

低スコアプレイ。Normal(Applica) ALLで116万でした。意外と難しいです。

2. 吉里吉里

プラグイン。make release で生成されるリリースファイルを、バイナリアーカイブとソースアーカイブの2種類に分けました。

2月 23日 (水)

1. 吉里吉里

プラグイン。動作をSQLiteプラグインやソケットプラグインに合わせた方がいいよなあ、ということで、汎用関数プラグインとグラフィックプラグインの仕様というかポリシーを変更。対応していない描画モードで描こうとしたときなど、ちょっとでも変な指示が来たときには、どんどん例外を投げる方針に切り替えました。

2月 24日 (木)

1. 吉里吉里 〜 SQLitePlus 〜 哀昆布

SQLite ver. 3.1.3 がリリースされたことに伴い、SQLitePlus ver. 3.1.3 もリリースされました。が、SQLitePlus 3.1.3 からは、Linuxでも動くようにソース刷新され、文字コード変換にiconvが使われるようになり、主に文字列に関わる部分の仕様・インターフェースが変わりました。

大問題です。

SQLitePlusをバージョンアップさせるとなると、吉里吉里の自作プラグインである util_sqlite を書き換えねばなりません。試しにプラグイン側を書き換えてみたりしましたが、途中で挫折しました。かなり面倒くさいです。

しかしよくよく考えてみると、今のところ、吉里吉里プラグインとしては、Linuxで動かすとかShift_JIS、UTF8/16以外の符号化方法を使う予定はありません。ということは、無理にSQLitePlusをバージョンアップする必要はないわけです。結局、SQLitePlusはver. 3.0.7のままで、SQLite本体(DLL)はver. 3.1.3(or later)を使うことにしました。今後も、特に必要がない限り、SQLitePlus 3.0.7をベースに開発するかもしれません。

2月 25日 (金)

1. 今日も超重力♪〜LOKI 8時36分の歌〜

ROはよく知りませんが、面白い歌。

2. 吉里吉里

プラグイン。辞書配列をダンプしたいことが多々あるので、作っておきました。この程度ならTJS実装でもいいんですが、せっかくだからプラグインで。

var dic = %[
  'foo'  => 100,
  'bar'  => 'xyzzy',
  'hoge' => null
];
var text = dictionaryDump(dic, ' => ', '\n');
// text には 
//  (string)"bar => xyzzy\nfoo => 100\nhoge => (object 0x00000000:0x00000000)"
// が格納されます。

あとは、Bスプライン開曲線(チャイキンのアルゴリズム)描画関数のバリエーションを追加したり、垂直/水平線描画関数のバグを修正したり。

2月 26日 (土)

1. Lethal Application

「ナ」×2戦をステージセレクトで練習。Reminisceで133万点、ブレイクチェイン252です(リプレイ)。バーストしなければチェイン数はもうちょっと増えるかもしれませんが、クリア時のバーストボーナスが減ってしまいます。難しいところ。

2. Lethal Application

って書いてるそばから記録更新。150万点、274チェインです(リプレイ)。バーストボーナスよりもブレイクチェインで稼いだ方がいいみたいです。

2月 27日 (日)

1. 赤い帽子のペンギン

某 Dual Pentium !!! on 440BXマザーなマシンですが、redhat linuxにしたらSMPでもあっさり動きました。今までの苦労は何だったのかと。

2. Lethal Application

「ナ」×2戦、今日も記録更新。245万点、355チェインです(Ver.1.02用 リプレイ)。全ステージの中で最も稼げるところではないでしょうか。