2003-02-10 [月]
_ いまさらながら
この一週間ほど、廃から脱出するために月姫やってました。本編4日、プラスディスクと歌月十夜を2日、メルブラを2日くらいで。本編は・・・これでもかってほど長いですね・・・。噂どおり、とても練りこまれたシナリオでした。最近(ってかここ何年か)こういうゲームやってなかったんで比較はできませんが。
2003-02-11 [火]
_ [RO] acoenemy.txtの精度を向上させる
立ちアコに搭載されているキルカウント。これ、#171現在、あまり敵データが正確ではないのです。敵判別にはconfig/acoenemy.txtの内容を参照しているのですが、(acoenemy.txt について)これをもっと精度のよいデータに変えることで、キルカウントの精度が向上します。以下のサイトでより精度のよいacoenemy.txtが入手できるでしょう。
で、ここからが本題。ギルドで経験値上納をしているキャラは、キルカウントが正しく働きません。もらえる経験値が減るわけなので、acoenemy.txtを修正すればいいのですが、重要なのは、修正したデータを「上書き」せずに「追記」すること。すなわち、元の(上納0%の)データも残すということです。なぜなら、現在ROではギルド情報が死んでいることが多く(特に深夜?)、上納0%として計算される可能性があるということと、ギルドに入っていない(あるいは上納0%の)キャラを持っていた場合に、そのキャラのキルカウントが狂ってしまうからです。数キャラ持っていて、それぞれギルドで異なる上納値だった場合、そのすべての上納値(+上納0%)に対応したacoenemy.txtが必要ということになります。これを手作業で修正するのは面倒なので、Perlでさくっと変換してしまいましょう。
#!/usr/local/bin/perl
# 上納値を加えたacoenemy.txtを作成する
# 本家acoenemy.txtをacoenemy_original.txtにリネームした後に実行させること。
#上納%を指定する。,で区切って複数指定できる。
@jono = (2,10);
$, = "\t";
open (IN, "acoenemy_original.txt");
open (OUT,"> acoenemy.txt");
while (<IN>){
@x = split(/\t/,);
print (OUT @x);
@jono = sort {$a <=> $b} @jono;
foreach $per (@jono){
$prev_exp = @x[1];
@x[1] *= (100 - $per) / 100; # 上納値
@x[1] = @x[1] == int(@x[1]) ? int(@x[1]) : int (@x[1] + 1); # 切り上げ
print (OUT @x) if (@x[1] != $prev_exp);
}
}
close IN;
close OUT;
使い方は
- このソースをacoenemy_changer.plとでもして、acoenemy.txtと同じフォルダに入れる。
- @jonoの値を自分用にいぢる(上の例では上納2%、10%のキャラに対応)。
- acoenemy.txtをacoenemy_original.txtにリネームする。
- acoenemy_changer.plを実行。
かなり適当に作ったので、ソースが汚いのはご愛嬌。自己責任で宜しくお願いします。
2003-02-12 [水]
_ [upftp] upftp.pl ver.1.0β4
- ファイル転送の必要があったときに接続するように改良
- fput(強制転送)コマンドの追加
- メッセージのバグ修正
結構大掛かりな修正。今までは、openコマンドで即時接続していたわけですが、これでは転送するファイルがなかった場合に無駄になってました・・・ので改良。これにより、open,cd,ascii,binaryコマンドは状況に応じてスキップされます。
fputは強制転送put。日付に関わらず必ず転送します。
_ [♪] Stay. / Apple project
同人サークルApple projectの一曲。試聴もできるようです。めちゃめちゃはまってます。
2003-02-13 [木]
2003-02-14 [金]
_ ウィルスメールが・・・
なんか同じ人からウィルスメールが28件も・・・W32.Yaha.F@mmにかかっているみたいです。とっとと駆除しる!それともバレンタイン(ウィルス)メールなのでしょうか・・・泣ける(つД`)
_ [♪] 遠いまなざし / Apple project
Apple projectの曲。アレンジバージョンがここで聞けますね。元ネタはONE。いい曲ですねぇ。
2003-02-15 [土]
_ Perlでプログラミング
久々にPerl使ってみると何かプログラム組みたくなってくるものです。ということで、HTMLの更新作業に重宝しているASIというソフトをPerlに移植することに。ちょっと自分用にカスタマイズしたかったのでねぇ。
_ ASI
HTML文書内に、あるファイルの最終更新日やサイズをHTMLに埋め込むツール。通常はSSIやJavaScriptを使って動的に更新するものだが、サーバーやクライアント環境によって左右されてしまう。よって、サーバーにUPする前のローカル時点で埋め込んでしまおうというもの。
ruby版も作られているみたいです。
_ [asi] asi.pl ver.1.0β1
とりあえず完成。互換性は保っているはずです。fdate(最終更新日)とfsize(ファイルサイズ)の指定ができます。対象URLリストファイルの指定はruby版と同じです。
とりあえずカスタマイズしたのは以下。(このために移植したようなもんです)
- 処理内容を画面に表示
- HTMLが書き換えられたらファイル更新日も書き換わる
本家ASIだと書き換わってもファイル更新日が変わらなかったので、upftp.plとの相性が悪かったのです。(そのためにfput(強制アップロード機能)をつけたのですw)
_ [asi] asi.pl ver.1.0β1.1
- ファイルが存在していない・書込み不可の時にメッセージで警告
マイナーアップデート。ちなみに、このスクリプトをTDSやupftp.plと組み合わせることでとっても楽になります。TDSで日記ファイルをつくって、asi.plで最終更新日を埋め込んで、FTPにUP、までの処理をupftp.plで設定しておけばOKなのです。(゚д゚)ウマー
_ [♪] Eternal Melody / Apple project
Apple projectの曲。このごろこれしか紹介していないなぁ・・・それだけここの曲がすばらしいということで。
2003-02-16 [日]
_ [asi] asi.pl ver.1.0β1.2
- 最終更新日が7日以内のファイルには(NEW)を埋め込むように
せっかくなので最終更新日を目立つようにカスタマイズしてみました。まあ、この辺は設定しだいで何とでもなります。
_ 簡易FTPアップローダー(仮)
「送る」とかから簡単にファイルをアップできるFTPソフト。
次はこんな感じのソフトでもつくってみようかなーと思っていたら、すでにありました^^;ちょっと使ってみることにします。
2003-02-17 [月]
_ ショートカットキー
結構使えるのに、以外と知らない人がいたりするショートカットキーを2つ紹介。
- ウィンドウズキー+D ウィンドウを全て最小化
- Ctrl+Shift+Esc タスクマネージャー起動
私の中ではなくてはならない存在になってます。とっても便利。
_ 卒研発表
ついにこの日がやってきてしまいました。この日のためにROをしたり月姫したりPerlで遊卒研を頑張ってきたわけですから発表など簡単なもんです。
・
・・
・・・
・・・まあ、適当に可もなく不可もなくといった感じに乗り切りましたw
2003-02-18 [火]
_ C#
arrin氏にちょいと勧められてC#をちょっと見てみることに。
_ Perl-条件判断文あれこれ
Perlでは条件判断文として、C言語のようにif文が使われます。しかし、C言語とは異なり、if文の後が単文であろうと、{ }を省略することはできません。
if ($x < 5){ # { } を省略することは不可能
print $x;
}
実用上問題はありませんが、少々面倒ではあります。そこを、do文を使うことで簡潔に書くことができます。
do{
print $x;
} if ($x < 5)
ここで、do{...}文が単文であれば、そこを省略することが可能なので、
print $x if ($x < 5);
このように簡潔に書くことができます。
別アプローチとしては、&&演算子を使うという手もあります。&&演算子というのは、左辺値が真ならば右辺値を調べにいき、左辺値が偽ならば、そこで偽と判断する(右辺値を計算しに行かない)という性質を持っています(ショートカット演算子と呼ばれます)。これを用いれば、このように書くことができます。
($x < 5) && print $x;
条件判断式が前方にあるので、C言語に慣れている人はこちらのほうが見やすいかと思います。ちなみに、unless文にあたるのは||を使って表現できます。
unless ($x >= 5) {print $x;} # ($x >= 5)が偽ならばprint $x;
print $x unless ($x >= 5); # do-unlessを用いて表現
($x >= 5) || print $x; # ||演算子を用いて表現
では、if-else文にあたるものはどうやって書けばよいのでしょうか。これは三項演算子?:を用いて表現ができます。
if ($x < 5) {
print "xは5未満です\n";
}else{
print "xは5以上です\n";
}
($x < 5) ? print "xは5未満です\n"
: print "xは5以上です\n";
他人のソースを見る時のために、いろいろなスタイルを知っておくと便利でしょう。
_ [♪] ぱんださんようちえん / 再生ハイパーべるーヴ
えー・・・なんというか、よほどの耐性を持っていないと聞けない曲。このページで試聴が可能です。歌っているのは任意ラジヲのさくら。btmに勧めたところ・・・はまってしまったようです・・・
2003-02-19 [水]
_ cssでの色指定
css(カスケードスタイルシート)とは、まあ、HTMLのレイアウト設定のファイルのことです。現在、3つのページを運営していますが、見てわかるようにデザインが同じで色だけ変えているのです。
Yayaportは赤、Yaya Cityは緑、Yaya a gogo!!は青、というように、ちょうど3原色を使っています。これ、3つとも色を指定しなおすのは大変な作業になるので、どれか1つスタイルシートを作り、RGBの値を入れ替えることで残り2つのスタイルシートを作っているのです。
#RRGGBB → #BBRRGG → #GGBBRR // このような感じに入れ替える
ちなみにこの処理をPerlで書くと
#!/usr/local/bin/perl
my(@css) = <>;
for (1..2){
open (OUT, "> color$_.css");
foreach (@css){
s/\#([a-fA-F\d]{2})([a-fA-F\d]{2})([a-fA-F\d]{2})/\#$2$3$1/ig;
}
print OUT @css;
close OUT;
}
こんな感じで、color1.css、color2.cssが出来上がります。
ここで問題がひとつ。ただ値を入れ替えただけでは困るのです。青や赤に比べ、緑は明るい色なので、特にYaya Cityはちょっとまぶしい色になってしまうのです。これをどうにかしたいと思い、明るさを保ったままの変換をやろうと試行錯誤していたのですが・・・うーん、よくわかりませんです・・・。明るさということで輝度Yを求める以下の式からいろいろ試しているんですが。
Y = 0.3R + 0.59G + 0.11B
というわけで、誰かわかる人、ご教授願いますm(_ _)m
2003-02-20 [木]
_ 健康診断
就職先の会社での健康診断を受けてきました。血を抜かれたのはいつぶりだろう・・・
_ 続・cssでの色指定
さて、輝度を保ったままの変換ですが、とりあえずそれっぽくできました。
#!/usr/local/bin/perl
my(@css) = <>;
foreach (@css){
s/\#([a-fA-F\d]{2})([a-fA-F\d]{2})([a-fA-F\d]{2})/"\#".&Change($1,$2,$3)/eig;
}
open (OUT, "> color.css");
print OUT @css;
close OUT;
sub Change{
my ($r,$g,$b);
foreach (($r,$g,$b) = @_){ $_ = hex; }
my ($y) = &Y($r,$g,$b);
($r,$g,$b) = ($g,$b,$r); # RGB値の入れ替え
# ($r,$g,$b) = ($b,$r,$g); # こちらに変えるともう一つの入れ替え
$y -= &Y($r,$g,$b);
foreach (($r,$g,$b)){
$_ += int($y);
($_ < 0) ? ($_ = 0) : (($_ > 0xff) && ($_ = 0xff));
}
return sprintf("%02x%02x%02x",$r,$g,$b);
}
sub Y{ # 輝度の計算(Y = 0.3R + 0.59G + 0.11B)
return 0.3 * @_[0] + 0.59 * @_[1] + 0.11 * @_[2];
}
やっていることを簡単に言えば、RGB入れ替え前の輝度Yと、入れ替え後の輝度との差を計算し、R,G,B値に加算しているだけです。RGBが0以下になったときは0、255以上になったときは255にしているので、厳密に言えば輝度が保たれないところもありますが・・・
とりあえずYaya a gogo!!の青色を基準にして、Yaya CityとYayaportの色を作りなおしたので、特にYaya Cityの文字が見やすくなったと思います。(緑というより抹茶みたいに渋くなりましたね・・・)
2003-02-22 [土]
_ [upftp] upftp2.pl構想
現在のupftp.pl。私自身が使うのはまあいいとして、あまり汎用的ではない気がします。コマンドも難解(ftp.exeがわかる人用といった感じ)だし・・・。ということで、新しくつくり直すことにします。以下、構想。いくつかはすでに実装済み。
- わかりづらいコマンドをやめる。設定部分はなるべく簡潔に。
- 「送る」コマンドとかで直接アップロード。複数指定も可能。
- ファイルひとつひとつに最終更新時間を指定し、無駄なアップロードをなくす。
- 指定ディレクトリ以下の階層全てのアップロードをつけたいなぁ
「送る」で直接アップロードするというのは、あらかじめサーバーとかの情報を設定しておくことで実現されます。ローカルディレクトリと、アップ先のディレクトリを対応させておくため、全自動でアップロードされます。アップ先のディレクトリを複数指定しておいて、ミラーリングを行うこともできます。機能的には簡易FTPアップローダー(仮)に近いです。
ファイルの最終更新時間という考え方はupftp,plと同じですが、今回はファイルひとつずつに対して行います。これにより、局所的な更新であれば「送る」コマンドで、大幅な更新であれば全体を総検索してアップロード、ということが可能になります(多分)。
現在、ディレクトリ関係以外のところは大体出来上がった感じです。そのうち公開します。
_ sendtoとplファイル
「送る」にあたる「SendTo」ディレクトリ。ここにplファイルのショートカットを置いてもどうやら反映されないみたいです。exe等、アプリケーションのショートカットにしか対応してないモヨン。(´・ω・`)ショボーン
で、仕方がないのでバッチファイルで対処。
upftp2.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
pause
はぅ・・・可変引数ってバッチファイルで書けないのかなぁ・・・
一応、Perlのインストールされているところにあるperl.exeのショートカットを持ってきて、そこにplファイルを引数として指定するというやり方もあるんだけど・・・どちらにしても美しくないですね。
2003-02-23 [日]
_ [upftp] upftp2.pl ver.1.0α2
まだ未公開。ドキュメントとかサンプルも書いてないし。
- 単一ファイルのアップロードがとりあえず完成
- Setup::DirList->{"Server"}をサーバーリストへのリファレンスにした
- Setup::DirList->{"Name"}を追加。名前とファイル名をハッシュのキーにする
- 対象外拡張子(ExtensionFilter)の設定を可能に
とりあえず現時点での設定ファイル(Setup.pl)はこんな感じになってます。
package Setup;
# サーバー情報
%ServerList = (
"Server1" => { # DirListで指定するサーバー名(適当に)
"Host" => "ftp.xxx.xxx.com", # サーバーのホスト
"Name" => "sakura", # ログインネーム
"Pass" => "kero123", # パスワード
},
"Server2" => {
"Host" => "ftp.yyy.yyy.co.jp",
"Name" => "kohaku",
"Pass" => "hisui000",
},
# いくつでも追加可能
);
# ディレクトリ情報
@DirList = (
{ "Name" => "MainPage", # 適当な名前
"LocalDir" => "C:/homepage", # ローカルのディレクトリ
"Server" => $ServerList{"Server1"}, # 対応するサーバー
"RemoteDir" => "/", # LocalDirに対応したサーバーのディレクトリ
"ExtensionFilter" => ["bak","old"], # 対象外にしたい拡張子(省略可)
},
{ "Name" => "MirrorPage",
"LocalDir" => "C:/homepage", # 同じディレクトリを指定→ミラーリングが可能
"Server" => $ServerList{"Server2"},
"RemoteDir" => "/public_html/",
},
{ "Name" => "Text",
"LocalDir" => "D:/data/txt",
"Server" => $ServerList{"Server1"},
"RemoteDir" => "/txt/",
},
# いくつでも追加可能
);
1; # 読み込み正常終了
このような設定ファイルをつくっておくことで、エクスプローラーなどからupftp2.plにファイルを「送る」だけでFTPにアップロードしてくれます。エディタにある「外部プログラムの起動」との連携もいいでねぇ。
ちなみにこの設定ファイルでは、例えばC:\homepage\cg\back.jpgを指定すると、ftp.xxx.xxx.comの/cg/と、ftp.yyy.yyy.co.jpの/public_html/cg/ にアップロードしてくれます。このとき、前回upftp2.plを使った後back.jpgを更新していなかったら、アップロードはされません。また、C:\homepage\txt\history.bakというファイルであれば、ftp.yyy.yyy.co.jpにのみアップロードされます。
2003-02-24 [月]
_ [upftp] upftp2.pl ver.1.0α3
公開開始。
- 指定ディレクトリがLocalDirより浅い階層にあるときのバグ修正
- DateFileからの読み込みバグ修正
- ディレクトリに対応
- -n オプション(転送を行わずにDateFileを構築)追加
- use strict;使用。コマンドオプション処理等の書き換え
- ServerListの"Pass"を省略可能とした(省略時にはログイン時にパスワード入力を求める)
実行速度をもう少し上げたいところ。結構いじっているんですがね。あと、パスワードをどうするか。睦月氏の指摘どおり、暗号化させたいところですが・・・。ログイン時にパスワードを入れるとしても、キーエコーが消えないのが難点。
_ [upftp] upftp2.pl ver.1.0α4
arrin氏に人柱テスターとなってもらい、開発を続けております。
- 引数がない場合はusage表示(リスト読み込みは明示的に-u filenameが必要)
- find時の検索開始パスの効率化
検索開始パスを効率化したので、結構実行速度が改善されました。引数がない場合、リスト読み込みしない仕様になったので、リストを読み込みたかったら
upftp2.pl -u upfiles.txt
このように明示的に指定してください。
2003-02-25 [火]
_ GRANDBERRY MALL
グランべリーモールへ行ってきました。石焼きピビンパを食べたりペットショップをみたり。
_ File::Find
ん、File::Findモジュールですが、&find()を呼び出すことで$_が汚される(findで見つかったファイル名が入る)のです。よって、以下のコードは非常に危険だったりします。
foreach (@dir_list){
my ($dir) = $_; # 几帳面にローカル変数にコピーして
find (\&func() , $dir); # 普通にfindを呼び出しているの・・・だが
};
これ、@dir_listの値がめちゃめちゃに壊されてしまうのですよ。原因不明だったバグの原因がわかってほっと一息です。
2003-02-26 [水]
_ xxx.exe
えっと、PerlプログラムがSendToに入れられない(22日の日記参照)対策として、C++でさくっとプログラムを書いてみました。3分でw
xxxにあたる部分を該当プログラム名にリネームすることで、そのプログラムを実行します。(引数に対応)例えば、xxx.exe→upftp2.pl.exe として、upftp2.plと同じディレクトリに入れておくと
upftp2.pl.exe -u upfiles.txt # upftp2.pl -u upfiles.txtの呼び出し
となります。この、upftp2.pl.exeをSendTo(「送る」フォルダ)に入れておけばよいのです。ま、要するにproxyプログラムなわけです。
_ [upftp] upftp2.pl ver.1.0β1
- date.datに余分な改行がついてしまうバグfix
- パスワードの暗号化に対応(Thx>睦月)
- ファイルの処理順番の効率化
- upftp2.pl.exe(upftp2.plを実行するproxyプログラム)を作成
というわけで、xxx.exeを取り入れてみました。SendTo(「送る」フォルダ)にはupftp.pl.exeのショートカットをおいてください。
で、今回の大きなアップデートは睦月にせかされたパスワードの暗号化です。この機能を使うには、Crypt::CBC,Crypt::Blowfishモジュールが必要です。ActivePerlがインスコされてる環境では、DOSプロンプトから
ppm install Crypt-CBC
ppm install Crypt-Blowfish
のコマンドで入手することができる・・・はずです。
さて、実際の暗号化ですが、変換したいパスワードを-pオプションで実行します。
upftp2.pl -p abc123
'CryptPass' => '52616e646f6d495696f42a2ed93327915fccdbd45dcde4f1' # これ出力ね。
で、暗号パスワードが求まったので、setup.plの"Pass" => "abc123" の部分をこれに書き換えましょう。長いのでコピペ推奨。
あと、ファイルの処理の順番も効率化しました。異なるサーバーへの接続→切断の無駄を減らしたので、ミラーリングの処理効率アップです。
2003-02-28 [金]
_ [RO] さようなら、RO
私と弥生の卒業旅行ということで、マドハンドを見にGHへ。その後まおさんに火スチレを2本作りました(Lv2武器の成功率高いことにビックリ)。最後に本部でプロ女の解散式と引退式を行いました。やりたかったことはまだ山ほどありますが、これで凪の冒険はひとまず終わりです。
リアル友人、ギルドの方々、ROで知り合った沢山の皆さん。
特にころさんと音夢ちゃん。どうもお世話になりました。ありがとう。楽しかったです。
最終ステータス。凪と綾はギルドに所属してましたが、迷惑かかるといけないので伏せてあります。
凪はメイン武器のほかに、+9の綾織4色カタナ(水、火は星2つ入り)を使ってました。