ただの備忘記録

忘れないように記録を残します。忘れるから記録に残してます。そして、その記録が役立つといいかな。

将棋掲示板

2009年12月05日 | Perl

将棋の指せる掲示板を作ってみようかと思います。
JavaScriptでは無理なのでperlを使ったCGIになります。
対局モードと閲覧モードを選べるようにして、対局者以外は書き込みできないようにします。
対局モードは、スレ主が対局条件を設定して、対戦者用のパスワードを発行し、それを相手に教えることで書き込み可能になります。
対局の様子は、上から順に表示され、コメントも付すことができます。
対戦が終わった物は閲覧専用になります。閲覧は掲示板形式か棋譜形式とします。

掲示板の構造としては、対局中の一覧と過去の棋譜一覧を用意します。複数のデータを一括して処理できる構造とします。
新規対局は、スレ主の名前とパスワードを設定し、対戦者用の仮パスワードを設定します。対戦者用の仮パスワードを使ってログインすると名前とパスワードを設定し、対戦者として固定されます。
初期の盤面は自由にレイアウト可能とします。対人専用なので、対局中も駒の動きなどはチェックしないこととします。対局中も自由に盤面を編集できることになります。

対局中の書き込みは、対戦者が交互にのみ行えます。コメントは順番に関係なく、その時点の最新盤面に記入可能です。
閲覧者はコメントを付けることができません。
投了は対戦者双方が行うことで、閲覧専用のデータとします。以後、コメントは付けられません。

対局用のデータや、閲覧用のデータの数量には上限値を設定できるようにします。
データの汎用性のある棋譜データ化や再利用も視野に入れておきます。


【追記】

JavaScriptでオセロの盤面を投稿するツールを作ってみました。
http://blog.goo.ne.jp/shurey/e/90d797e989789e9cd808851e6f815ae5


Perl作業メモ

2008年11月18日 | Perl
#現在時間取得
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
#日付の取得
$year = $year + 1900;
$mon = sprintf("%02d",++$mon);
$mday = sprintf("%02d",$mday);
$hour = sprintf("%02d",$hour);
$min = sprintf("%02d",$min);
$sec = sprintf("%02d",$sec);

#バッファ入力
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
$buffer = $ENV{'QUERY_STRING'};
} elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}

#デコード
$buffer =~ s/+/ /eg;
$buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

#ハッシュへの振り分け
if (index($buffer,"&") > 0) {
@lines = split(/&/,$buffer);
foreach (@lines) {
if (index($_,"=") > 0) {
($a,$b) = split(/=/,$_);
#デコード
$b =~ s/+/ /eg;
$b =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#ハッシュ
$get_buffer{$a} = $b;
} else {
$buffer = $_;
}
}
}

#アクセスログ取得
$remote_host = $ENV{'REMOTE_HOST'};
$remote_IP = $ENV{'REMOTE_ADDR'};
if ($remote_host eq '') { $remote_host = $remote_IP; }
if ($remote_host eq $remote_IP) { $remote_host = gethostbyaddr(pack('C4',split(/./,$remote_host)),2) || $remote_IP; }
if ($remote_host =~ /(.*).(d+)$/) { ; }
elsif ($remote_host =~ /(.*).(.*).(.*).(.*)$/) { $remote_host = "$2.$3.$4"; }
elsif ($remote_host =~ /(.*).(.*).(.*)$/) { $remote_host = "$2.$3"; }
$user_agent = $ENV{'HTTP_USER_AGENT'};
$referer = $ENV{'HTTP_REFERER'};

#ファイル読込
$log = "$dir_log$file_log";
@lines = "";
if (-e $log) {
open(LOG,$log);
@lines = <LOG>;
close(LOG);
}

#ファイル書込
open(LOG,">$log");
print LOG @lines;
close(LOG);

Perlで、ニュース見出しを作る

2008年05月10日 | Perl
ここ数日、perlを使ってCGIを作成しています。
WEBサーバで、ホームページをインタラクティブなものにして、データベースのようにしています。
具体的には、セキュリティニュースをまとめるために、各サイトの見出しとURLを記録して表示するCGIのプログラムです。
これまではHTMLファイルに手作業で入力をしていましたが、これを単純作業化しました。
同時に表示のプログラムも改良し、一元管理されたデータを元にして複数の表示を切り替えできるようにし、入力作業や修正ができるようにしてみました。

↓こんな感じです。
http://guardian.ne.jp/news/news.cgi?now

4月以前のデータは手入力のHTMLファイルです。
今後は分類別に記事を表示したり、検索機能を付けようかと思っています。あと、編集機能は手抜きをして作ったので、これも使いやすくしたいかな。