日記

11月 1日 (金)

1. Sound

Javaでサウンドプレイヤー。予定通り、スレッド単位で動くようにしました。こうしておけばいつでも停止、巻き戻し等の割り込みが可能です。Windowsでは .WAV フォーマットが再生できるようです。.au とかも多分いけるでしょう。mp3はさすがにダメでしたけど。

MIDIプレイヤーもスレッド化しました。試しにマルチスレッドで違う曲を同時に再生してみたら、わけわからない曲になりました。変なことはやめましょう。

そういえばJMFなんてのもあったような。mp3もOKなんですよね、たしか。イ401の後悔日誌を見ると、かなり簡単そう・・・私の苦労は?(笑)

11月 2日 (土)

1. sound player

JavaでSound。

1.1. repeat

区間リピート(いわゆるA-Bリピート?)みたいなのを搭載してみました。効果音よりは、BGM向けの機能ですね。切れ目なくリピートできるようなので、実用になりそうです。

1.2. volume

音量変更もちょっとだけ実装。Java API にはデシベル単位で指定するんですけど、この「デシベル」ってのがちょっと怪しいです。デシベルじゃなくて、純粋に音圧で指定されてるような感じが。デシベルなら、聞こえる音の大きさとデシベル値はほぼ正比例するはずなんですが、対数的に比例しているように聞こえます。

音圧と、人の耳に聞こえる音の大きさってのは、単純な比例関係にはなく、対数的に比例します(たしか・・・)。ある基準となる音圧に対する音圧の比率の対数(底は10)に20をかけた値、それが音のデシベルだったと思うのですが。

このへんの話はVictorJVCのサイトに説明がありました。

んー、換算するのも面倒なので、しばらく放置に決定(ォ

ちなみに、音のエネルギー(音圧だったかな?)は1m進むごとに約5%減衰するらしいです(周波数にもよります)。こちらは指数関数的に減衰していきますね。

1.3. pan

音の左右振り分けは・・・気が向いたらやってみることにします。これはBGMよりは効果音向けの機能ですね。

1.4. reverb

リバーブはうちの環境では対応していないようなので、放置。インターフェースだけ書いておきましょうか。

11月 3日 (日)

1. 仕事が大すき〜

残業の詩

なんですかこれは?残業CHU!・・・

てきぱきワーキン▽ラブ

はこれでどうかとも思いますけど。

2. りりかメモ

ああそうか、さくらスクリプトの\_qコマンドを使えばいいのか。これならメッセージスピードを考慮しなくても大丈夫そうです。

11月 4日 (月)

1. 今週も目玉

何気に目玉焼きがおいしい今日この頃。目玉焼きばっかり食ってますよ?

2. テレビさいたま

サイタマージャンより、テレビさいたま。それは役なのか。

テレビさいたま

「合併さいたま市」とか、「さいたま!さいたま!さいたまー!」なんていうのもあって笑えます。

11月 5日 (火)

1. 本番

今日から本番稼動なんですが、案の定、トラブりました。ほーら言わんこっちゃない。ざまぁみろ。・・・他人事じゃありませんてば(笑)

2. メモ

11月 6日 (水)

1. さいたまー!

11月 7日 (木)

1. MP3 on Java

J2SDK1.4 + JMF2.1(Win32) でMP3プレイヤーを作ってみました。文字通り再生する「だけ」ですけどね。サンプルどおり(ほぼそのまんま)書いてみたら、いともあっさり。めちゃ簡単でした。

ただ、一時停止、巻き戻し/早送り、指定区間リピートなんかをやろうとすると、かなり面倒なことになりそうな感じです。現状では日本語の資料が乏しく、なかなか良いサンプルに出会えません。JMF付属のJMStudioのソースを読むしかないですかね・・・

11月 8日 (金)

1. ぐるぐるさくさく

JavaでPNGツールを作ってました。(入力)PNGファイル→(出力)PNGファイルです。

  • 任意の矩形領域を切り出す
  • 任意の矩形領域をn個に分割(水平or垂直)
  • 任意の矩形領域を時計回りに(i/n)回転したものを、水平or垂直にn個並べる

今のところこんな感じです。出力がRGB24bit(8*3=24bit)固定ですが(ォ

けむしろう氏PNGライブラリを使ってます。このライブラリ使うと、ピクセル配列データ→PNGエンコードが一発(?)でできてしまうので便利。ピクセルデータの処理は単なる配列操作ですから、これまた楽勝。というわけで、私自身は全然苦労していないのでした。

さて、次はPNGファイルの結合でもやりましょうかね。

11月 10日 (日)

1. お祭り

朝起きたら12時・・・ダメすぎ。

1.1. 魔界

まずは仲間と合流。面子が面子なだけに、場所は秋葉原です。適当にぶらぶらと店をまわって、いざ、目的地へ。

1.2. 寒い

1年ぶりに戻ってきました、某出身大学。今日は学園祭最終日なのです。ここは東京都内なんですが、やや西側のため、ちと冷えますね。つーか、寒いです。よく4年間もこんなとこ通ってましたね、私。もっと厚着してくるべきでした。

気温もそうですが、学園祭そのものもかなり寒い気がします。去年もわりと寂しかったのですが、今年は輪をかけて。なにかこう、活気がないというか、パワー不足というか。

1.3. スペランカー

私が所属してたサークルに顔を出して、マリオとスペランカーをこよなく愛する後輩のSOW君と、1年ぶりの再会。怪しい会話で盛り上がってました。一段と「濃く」なってましたね、彼は(笑)

1.4. 毎年11月上旬の日曜にやって来る怪しい団体

帰りにみんな(20人弱)でレストランでお食事。毎年恒例・・・いつから恒例になったのか不明ですが、食後のデザートにパフェを注文するというのがあります。別にパフェじゃなくてもいいんですけどね。でもって、これまたお約束なんですが、毎回パフェ用の器が足りなくなるという事態に。店側としては、最低限の数しか用意してません。一度にそんなに注文が来るとは思ってませんからね。

今年は20人弱で、一斉にパフェを注文。即死コンボでした(笑)半数以上が本来の容器をゲットできず、普通のグラスにパフェ状態。来年までに容器増やしておいてくださいね、某レストラン様(笑)

2002 11 11

2. PNG

JavaでPNGツール。

  • n個のPNGファイルを水平or垂直方向に結合
  • 任意の矩形領域を上下or左右に反転

先日の機能と合わせれば、そこそこ実用になりそうです。

11月 11日 (月)

1. PNG

JavaでPNGツール。

  • n個のPNGファイルを水平or垂直方向に結合
  • 任意の矩形領域を上下or左右に反転

先日の機能と合わせれば、そこそこ実用になりそうです。

11月 13日 (水)

1. 科学忍法

小麦ちゃん第2話を見せてもらいました。第1話のテンションを維持できるのか心配でしたが、それは杞憂。第1話以上にヤバいことになってました。まんま、ガッチャマンですよ? BGMまでパクってますよ?

秋葉原、お台場(コミケ)ときて、次は何をネタにする気でしょう。こんなものを地上波に乗せるTV神奈川っていったい・・・。つーか、TV東京でも放送してください(笑)

11月 15日 (金)

1. PL/SQL

何を思ったか、唐突にPL/SQL docを作り始めました。要はjavadocのPL/SQL版みたいなものです。PL/SQLのパッケージorプロシージャソースファイルから、HTMLドキュメントを作成します。相応のコメントを書いておくと、それなりのHTMLが吐き出される・・・といいな(ォ

ないんですよね、ドキュメント作成ツール。java, C++, VBなんかはあるんですが。PL/SQLもないことはないのですが、市販品です。フリーでは見かけません。需要がないんでしょうかね。

1.1. parse

ある程度はソースコードをパースしないといけないので、perlで正規表現を駆使しながらゴリゴリと解析していきます。CとPascalを足して2で割ったような言語ですから、文法はそんなに難しくないです。

ただ、厄介なのはプロシージャです。PL/SQLって、declareセクションに入れ子でプロシージャを宣言できるのです(スコープはそのプロシージャ内になります)。C言語よろしくプロトタイプ宣言もあります。C++みたいに、オーバーロード宣言やデフォルトパラメータ指定もできます。でも、見た目はPascal気味です。なんて言語だ(笑)

というわけで、正規表現でサクッといかなそうなので、きちんとトークナイズしなきゃならんなぁ、と。私、トークン処理って苦手なんですよねー。文字列リテラルで 'end;' なんて書かれてたらどうしましょ。やっぱ、まじめにやらないとダメ?

2. Trojan Horse

tcpdumpにトロイの木馬が仕掛けられていたそうです。ディストリビューションに感染させるのって、流行ってるんですか?流行んなくていいですよ、そんなの。

11月 17日 (日)

1. ヤパーリ

「Javaでジョイパッドを扱います。」なんて話は聞いたことがありません。Java House MLでも話に上がっていないので、やっぱり無理でしょう。低レベルなデバイスですからね。

Javaで書かれた格ゲーKFAは、JoyPadに対応しています(マッピングが変ですが)。しかもフルスクリーン機能まで。どうやってるんだろうと思って、付属のドキュメントをよく読むと、Windows専用DLL。ガーン。ああ、やっぱりnative実装ですか・・・

2. the Embodiment of Scarlet Devil.

Windowsの縦シュー、東方紅魔郷をひたすらプレイ。猿。ノーマル残機3で2コンティニューしてクリアするも、バッドエンディング。こらあかん。残機を5にして、ボム使いまくったらノーコンティニューでクリアできました。クリア時の残機数は3。点数は5400万とショボショボですが(笑)

2.1. やめときな。気がふれるぜ。

ノーコンティニュークリア時の追加要素、Extraモードをやってみたのですが、難しすぎです。マジで「気がふれ」ます。最初の中ボスすら倒せませんでした。とても人間のやるゲームとは思えませんでした。クリアできるんかいな、これ。

11月 18日 (月)

1. tokenizer

PL/SQLドキュメント化ツール。

先日立てた構想どおり、全てをトークナイズして処理することにしました。PL/SQLは入れ子の構造が素直で単純なので、思ったほど大変ではありませんでした。とりあえず、

package body /
  procedure declaration(nest) /
    procedure declaration (nest) /
      block declaration (next)

程度の入れ子はOKのようです。ついでにifやforの入れ子も解析してみたり。 ただ、トークナイザを自分で作ったのは初めてなんで、 自分のやり方が良いのか悪いのかはさっぱり。 恐ろしく非効率なことやってるかも知れず。

1.1. overload

おおよそパースができたので、次の課題はプロシージャのオーバーロード解析です。PL/SQLでは(number, integer, binary_integer)や、(varchar2, char)などは、引数の上では同一のものとみなされますから、そこんとこ気をつけないといけません。

1.2. nest

しかし、プロシージャ同士のネストって、最近の言語では珍しい部類に入るんじゃないでしょうか。Javaはクラスのネストはできますが、メソッドのネストはできませんし(やる意味がない)。perl? あれは、まぁ、「型グロブによる動的サブルーチン生成」とか、「文法をアセンブラっぽく変更する」とか、何でもありですから・・・。だから好きなんですけどね。

2. apache

2.1. network

apacheが止まってました・・・ログ循環時の再起動に失敗したっぽいです。今までこんなことなかったのに・・・

11月 20日 (水)

1. tree

インチキPL/SQLパーサ(笑)文法は解析できません(爆)

プロシージャ、変数を解析できるようになりました。全ての変数、プロシージャを、階層(当然スコープも)を維持し、その上でオーバーロード宣言にも対応。ifブロック内のdeclareブロック内のプロシージャ宣言なんかもOK(そんなあやしいコード書くなよ)。

解析結果を階層構造を保ったまま内部で正規化し、これをHTMLに変換。階層ツリーと、各プロシージャ、変数の詳細をアンカーで行き来できるようにしたら、なんだかそれらしく見えてきました。わりといけるかも?

あとは、コメントの解析ですね。プロシージャ、パッケージの説明の記述方法ですが、これはjavadoc用の文法をそのまま流用しようかと思っています。

2. 素足をさらして〜(プツッ)

AIRサントラCDの3曲目(鳥の詩)、3:32のポイントで、必ず音ぶれのような現象が発生します。ヘッドホンで聞くとよくわかります。CDプレイヤーでもLDプレイヤーでも同様に確認できたので、プレイヤーが原因ではないと思います。CDの表面上、物理的なキズはないみたいですし、もちろん、このディスクはかの忌まわしいCCCD(←頼むから市場から消えてくれ)などでもありません。プレスミス? レコーディングミス? それとも仕様

3. メモ

  • *1: 11/21訂正: 1テラじゃなかったです

11月 21日 (木)

1. query

PL/SQLドキュメント化ツール。

1.1. cursor

カーソル宣言の解析時に、SELECT文もついでにパースしてしまおう、そう思ったのがそもそも間違いでした・・・

もともと、SELECT文を軽く整形するだけの予定だったのですが、サブクエリーやUNION結合、DECODE関数の整形を考えると、どうしてもパースが必要になってきます。サブクエリーは再帰的に整形しないといけませんし。

そもそもSELECT文自体、WHERE, GROUP BY, ORDER BY, HAVING句が省略可能なので、かなりややこしいことになります(PostgreSQLはFROMも省略できる)。まぁ、Oracle8まではSQL92のINNER JOIN, LEFT OUTER JOIN句等がないので、幾分楽なんですが(Oracle9iから対応)。

さらに、一口に整形といっても、SELECT文の整形方法は人によって流儀が大きく異なります。

  • フィールド、テーブル区切りのカンマを 前に置くか、後ろに置くか
  • 論理演算子のAND/ORを 前に置くか、後ろに置くか
  • カラムの桁をどの位置に揃えるか
  • DECODE関数をどう整形するか
  • サブクエリーのネスト方法

・・・などなど。私は、カンマ等の結合子を後ろにもっていく「結合子後置派」(?)なんですが、このへんも意見が分かれるところでして。

まぁ整形機能はなくても困らないし、いざとなれば SELECT文を表示しない という手もありますし。ほどほどにしておきましょうかね。

1.2. trigger

トリガーの宣言に暫定対応しました。Oracleのマニュアル見ないでやったんで、激しく間違ってたりするかも(汗)

1.3. type

ユーザー定義型なんてのがありました・・・すっかり忘れてました(笑)文法はカーソル型に似てるから、なんとかなるかなぁ、と。

11月 22日 (金)

1. format

SELECT文の整形。なんか、ムキになってきました(笑)

改行のポイントが難しいです。in() や exists() は、中にクエリーが入ることがあるので、改行つきネストにした方が見やすいです。decode() や in() は、可変長引数をとるので、ほどよく改行していく必要があります。論理演算子の and, or や、カラム名、テーブル名の区切りのカンマでも改行したほうがよいでしょう。逆に、他の関数の括弧、演算の優先順位を明示する括弧、関数の引数の区切りのカンマなどは、改行すると見にくい、いや、醜いです。

トークン処理をする過程で、出現した括弧がいったいどの括弧なのか、ネストレベルと開始指定子、終端指定子をしっかり管理する必要があります。アルゴリズムを見直したほうがいいかも?

なんだか、本筋からそれている気がしてなりません・・・

11月 23日 (土)

1. 10%

朝日新聞。デフレ対策について、経済学者5名が連名で記事を載せています。

所得税を恒久的に引き下げて、消費税を段階的に10%まで引き上げる。消費税アップおよびインフレ直前の駆け込み需要で、消費が大幅に増える。インフレ率が上昇し、GDPが2〜3%上昇する。

だそうです。ただでさえ物価が高い日本で、インフレにしたいんでしょうか?消費税が上がったら、買い物する気なんてなくなりますよ?所得税減税も、駆け込み需要も、たかが知れてますよ?その後のこと考えてるんでしょうか?消費税を10%にしたら、今度は15%に・・・なんて言い出すでしょう、この人たち。

これ、政府に提案するそうです。政治業者の連中は、消費税を「金の成る木」としか見ていませんから、手放しで喜ぶでしょうね。消費税税収のうち、使途不明金がどれくらいあるか、見てみたいですね。

2. USB

Linuxのカーネルを再コンパイルしました。今まで外していた、USBモジュールに対応させてみました。プリンタを接続して、プリンタサーバにしようということで。

とりあえず、インストールまで。再起動をいつにするかは未定です。

・・・はて、プリンタのドライバは存在するのでしょうか(ォ

3. HTML

HTML簡易リファレンスの自動生成スクリプトをメンテしました。主にコメント入れ(笑)今見てみると、結構酷いソースですね。よく動いてるよなぁ。

生成物は酷くはないので、そろそろ公開しても大丈夫かな?

11月 24日 (日)

1. 物資調達

あきば。メディアとか、消耗品を調達しに行ったつもりが、なぜか余計なものまで。

1.1. 遺産

マックスロードに中古MSXが大量に陳列されていました。SANYOの赤いやつとか、PanasonicのFS-A1とか。TURBO-Rもありました。さらに、入り口付近にはスーパーカセットビジョンまで置いてありました。何かあったんでしょうか?Z80懐古?

店の奥にはPCエンジンやMEGA-CDのソフトが。ずっとPCエンジン版のヴァリスIIを探してるんですけど、なかなか見つかりません。IIIとIVはどこの中古屋にもあるんですけど。あ、別にゲームはどうでもいいんです。全然面白くないんで *1 。サントラとして欲しいのです。クセの強い、古き良きテレネットサウンドを堪能したいだけですので。まぁ、ないものはしょうがないですから、ジャンク扱いされていたヴァリスIIIとIVだけでも保護。2つで500円以上しました(笑)ところで私、PCエンジン持ってないんですけど・・・エミュ?

1.2. 18禁

リバティにて、セガサターンの18禁ゲーム、デス・スロットルを発見しました。かなりイカれたレースゲームです。レースというか、シューティングというか。通行人の一人や二人轢き殺しても、全く問題ない。むしろ、轢き殺して遊ぶゲームです。詳しくはレビュー(その1,その2)参照。

ちょっとレア度高いですが、さすがに買う気にはなれず・・・

1.3. 自主制作アニメ

LAOXでコンピュータ雑誌を物色していたところ、ほしのこえDVD-BOOKを発見しました。確保。個人レベルで、ここまで完成度の高いアニメーションを作れるなんて、すごいことですよ。有名なマッドムービー ''GGG To Heart'' 以来の衝撃(違)

1.4. 伝説の婦警さん

某中古屋。PCエンジン後期のソフト、銀河婦警伝説サファイア買取価格が3万円でした。なんじゃそりゃ〜

1.5. 金欠

あ、やば。使いすぎ。所持金が3桁に(笑)

  • *1: 露出度の高いコスチューム+ミニスカ+剣。典型的なヲタク向けキャラを売りにした、単なるキャラゲー(なんて言ってると、ファンに背後から刺されそう・・・)

11月 25日 (月)

1. HTML Tiny Reference

1.1. ソース

自分で作っておいて何ですが、見れば見るほど汚ねぇソース(笑)アドホック的に拡張していったので、こんなになっちゃったんですが。恥ずかしくて他人には見せられませんね、こりゃ。

1.2. 日本語化

DTDからパクったコメントの部分を、HTMLの仕様書(日本語訳)とつき合わせながら和訳してました。語学力の乏しい私にとっては大変な作業です。はぁ、完成はいつになるやら・・・

11月 26日 (火)

1. ログ採り

本番運用が始まっている、現プロジェクト。稼動直後ということで、毎日ログの採取&監視を行っています。私らが担当している部分は、プロセスが1回走るごとに、1〜12個くらいのログファイルが吐き出されます。一日に5,60回くらい走りますから、毎日400〜600前後のログファイルが作成されるわけです。

で、このログ、40日くらい保存しておくんだそうです。単純計算で、20000前後のファイルが常時放置された状態になります(システムの共通部分のログは更に多いです)。それも1つのディレクトリに。これがちと問題でして・・・

ログファイルを採取するとき、諸々の事情により、ファイルの転送をFTPで行うことになってます。取得するファイル名が時刻やプロセス番号に依存する形になっているため、どうしてもディレクトリリストを見ないといけないのですが、ファイル数が1万以上もあると、ディレクトリリストのデータ転送量もバカにならないのです。今のところ、FTPの NLST コマンドを発行するだけで、1.8MB以上のトラフィックが生じています。うっかりリロードなんてすると、ソートの時間も含めて、20〜30秒かかります。

当然、作業は私一人じゃなく、複数の人間が複数の端末でこんなことやってるわけです。telnetで入ってfindで抽出、必要なファイルを特定してからFTPでゲット、っていうのも考えたんですが、それはそれで面倒くさいなぁ、と。cron回して、週単位でディレクトリに振り分ければくれればいいのに・・・

2. 正規表現

職場。近くの島で、先輩らしき人(女)と、その後輩(新人かな?)らしき人(男)が話してました。

新人男
「正規表現」ってなんですか?
先輩女
正規表現っていうのは〜、スラッシュ・・・

ああ、たしかに「ここからここまで正規表現だよ〜」って示すのに、スラッシュ使うことが多いよね。

先輩女
・・・じゃなかった。バックスラッシュに ''n'' とかつけて、改行とか表すの。
新人男
ふぅ〜ん。
先輩女
改行とかタブってそのまま書けないじゃん? だからバックスラッシュと''t''でタブとか。アレのこと。

・・・えっ? ええっ!? お姉さん、そ、それはただの文字エスケープでは? 周りの人、誰かツッコんであげて下さいよ!

11月 27日 (水)

1. だらだら

今日は仕事がお休みだったりします。だからといって、だらだらとゲームばかりやってていいわけがありません。

2. 月光剣

先日からアーマードコア3を再開してます。とりあえずミッションはクリアしており、アリーナ、Exアリーナも制覇したので、強化人間パーツの開発と、隠しアイテム集めを重点的に。

月光剣ことMOONLIGHT。空飛ぶ巨大機動兵器を、仲間なしで墜とせば手に入ります。こいつ、一人でまともに戦うとかなり強いんですが、ステルス機だとほとんどダメージを食らわずに倒せてしまいます。子機分離後、中量ステルス+右腕2連ロケット+左腕投擲銃で、上空からラッシュを浴びせたら、10秒ほどで片付きました。残りAP7000以上。余裕です。

3. GunViper

フリーの3Dシューティング、GunViperをプレイ。これは結構面白いですね。グリッドシーカー+レイストームっぽい雰囲気です。今のところ3面までしかないのですが、今後の展開に期待してます。

4. だらだら

結局ゲームばっかりやん・・・

11月 29日 (金)

1. Linux

cat network先日コンパイルしたカーネルで再起動したところ、起動中に、なんかエラーが出まくりました。ネットワークカードを認識しなかったり、デーモンがいくつかこけたり・・・あ、あれ?起動するカーネル間違えた(爆)

カーネルが4つもあると、紛らわしくていけませんね(←やめれ)。まぁ、2.2系と2.4系は、1つずつあったほうが何かと便利なわけで(謎)邪魔なのは削りましょうかね。どうせデフォルトのカーネル、上書きしちゃったし。

1.1. iptables

カーネル再構築の目的は、USBとiptables対応です。USBはとりあえず置いといて、iptablesを弄くりました(今まではipchains)。パケットフィルタリングやIPマスカレード、ポートフォワーディングの細かい設定が、これ1つでできてしまいます。

また、2.4系はConnection Tracking(接続追跡)に対応してます。ip_conntrack_ftpなんかは、FTP(TCP:21)セッションが確立すると、自動的にFTP_DATA(TCP:20)セッションを追いかけてくれるという、すばらしいモジュールです。

1.2. PASV

そんなわけで、TLECiptablesの簡単な使い方あたりを参考にしながら試行錯誤し、苦節3ヶ月、FTPサーバにパッシブモード接続ができるようになりました。また、今までipfwadm(ipmasqadmだっけ?)が機能していなかったためにあきらめていたポートフォワーディング機能で、WinMXがムフフな状態に(何)

1.3. port scan

あとはパケットフィルタの設定をして、最終確認を行いました。要はポートスキャンなんですが、Sygate Online Servicesでサーバにスキャンをかけたところ、なぜかwww(TCP:80)しか引っかかりません。うむ?おかしいですね。もうひとつ、引っかかるポートがあるはずなんですけど。某外部サーバからは接続できたので、設定は合ってるはずです。なんか不安ですね・・・