今後のアレ

ぼくもようやく夏休みに入ったのでいろいろやりたいことをやる


・チャットの改良
これは最善策に見通しが立たないんだけど、今不具合が多いのでどうにかしなくてはならない。
いろいろやろうとするとやっぱり難しい。ローカルでうまくいっても実際サーバ上だとどんな不具合が出るのかわからない。
むしろPHPで作り直したら面白いのかもしれない
作る側が面白いってだけでそれはそれでまた問題でまくりなんだろうけど


HSPで糞ゲーを作る
別にゲームじゃなくてもいいんだけどHSPコンテストになんかインパクトある変なものを投下したい。
賞とかはいらないけど無駄に審査員の印象に残るようなやつ


iPhoneアプリ
未定


・未定
未定

Perlでチャット(15) 何をどうしたって問題は出る

最初に無駄な負荷が高すぎるスクリプトを設置したせいで、隔離サーバに入れられてしまった。
負荷を減らすためにPerlコンパイル常駐させるSpeedyCGIというのを試したらめちゃくちゃ処理早くなった。初めからこれ試せばよかった。
で、ここでまた問題点が。入室後はいいんだけど、退室後や閲覧時に会話ログがなかなか更新されないという問題が。(更新やページを開きなおしたとしても同様)俺の環境ではIEでこの現象が起きた。
入室時は絶対そんなことないのになんでだろう、ってことでいろいろ試してみたら、要は「前回読み込んだときと内容が変わっていないであろう」出力を、毎回処理せずに前回読み込んだものをそのまま表示するというような仕様になっているようだ。(ブラウザ側ではなくサーバ側が)要はまあブラウザのキャッシュと同じなんだけど、このままだと退室したら退室前の会話ログが表示されるという状態になってしまう。これでは困る。
で、いろいろ試行錯誤していたんだけど、結局、入室時はなんでログが更新されるのかと言うと、更新あるいは発言毎にフォームデータを送信しているため、サーバ側が「フォームデータの受信により内容が変わる可能性がある」と判断しているためらしい。つまり、閲覧時はフォームデータのやりとりを行わないので、前回のキャッシュを出力してしまうのだ。というわけでもう今回も荒技としか思えないが、ページを開くたびに無意味なフォームデータを送信し、サーバ側には「会話ログ表示スクリプトはフォームデータの内容によって出力内容を変えている」と思わせる処理を書き加えた。要するにフォームデータにより無意味な分岐を行わせたわけだ。実際には分岐しても全く内容は同じなんだけど、サーバ側に変わると思わせられればそれでいい。
これを実装したら、とりあえず問題は解決した。


↑フォームデータ送信だけでいいっぽい?
ていうか500エラー出た
SpeedyCGI解除したら直った
もうなんなの

Perlでチャット(14) ファイルロックの見直し

ファイルロック関係でいろいろあったので、ちょっと考え直してみた。もっと良い方法がないだろうか。
調べてるうちに、Symlink Checker(http://www.kent-web.com/utility/)というものを発見。サーバでsymlinkとflockが使えるかを確かめてくれるcgi。mkdirに拘る意味はないし、これを試してみたら普通に使える模様。まあusamimiサーバはFreeBSDだし、使えるよな・・
ということでflock関数を試してみることにした。
いくつかのサイトを参考にして実装。実用してみてどうかが楽しみだ


参考URL
http://www.tohoho-web.com/wwwcgi8.htm
http://www.tohoho-web.com/wwwperl2.htm#flock
http://homepage1.nifty.com/glass/tom_neko/web/web_04.html#flock

Perlでチャット(13) 実用での問題点

更新するたびにメンバリストに更新時刻を書き込むことで、退室ボタンを押さなくても最後に更新した時間から自動でメンバリストからユーザを削除する、ということをしていたが・・
更新のたびにファイル書き込みおこなっていたら負担がやばい。ユーザが増えると特に。
しかも前述の通りファイルロックを二重に行っていたので、余計に負担がやばい。テンポりまくるのもそれが原因だと気づいた。
というわけでとりあえずなんとかしよう。
更新とは関係なしに一定時間に生存信号を送るようにして無意味な負担を減らそう、ということで一定時間ごとに別に用意したメンバリスト管理用のcgiファイルに生存しているというformdataを送ることにした。
これだとログ更新以外でもブラウザ上で更新処理したみたいに見えるから気に食わないんだが・・・今のままほっとくとusamimiにも負担かかりそうであれなんでとりあえずこの方法で修正。
何かいい方法思いついたらそのときに直す。

Perlでチャット 雑談

cgi-boyの説明見ると、

携帯電話での使い勝手を考慮したwebチャットです。パソコン/携帯電話共に更新された分のログのみを転送するシステムによりパケット量を大幅に減少し、軽快な体感速度で会話を楽しめます。

と書いてある。無駄に軽いのはその為か・・・・
しかしそれどうやってんだ?
ソースコードが見たい・・・

Perlでチャット(11) 携帯からのアクセスの振り分け

を実現する手法としてはいくつかあるんだけど・・・
まあcgiで、ブラウザ情報読んで分けるのが手っ取り早いんだけど・・・PCでアクセスしたとき表示されるアドレスと携帯からアクセスするアドレスが共通にできない。
いや、できるんだけど、今の状態からだとめんどくさい。
現在の状態は、チャットそのものを「index.html」で書き込み部とログ表示部をフレーム分割している。なので実際のチャットcgiに振り分けを組み込むと、携帯はフレーム分割を読み取ってから振り分けすることになる。携帯がフレーム無視してくれるならよかったんだけど、imodeシミュレータで確認したら分割はされちゃってる。分割された場合、振り分け後はフレーム分割ではなく_topに携帯用ページを表示したい。
しかしHTTPのLocationによるリダイレクトではtargetが指定できない。ていうかそもそも最初にフレーム読み込ませるの自体が気に食わない(機種によって色々ありそうなので)
それじゃあhtaccessで振り分ければいいんじゃないの、ってなるけど、これもうまくいかなかった。多分サーバでRewriteが認められてない?
で、結局やるとしたらチャットcgi内でフレーム分割するってことになるんだけど、今から書き直すのはめんどいことが多い。(こんなことの為に)

というわけでまあ結局、PCからのアクセスと携帯からのアクセスを別ファイルに振り分けることにした。
PCでアクセス後に表示されるアドレスと携帯からアクセスするアドレスは変わることになるのが利用者にとって軽くややこしくてアレなんだが、まあしょうがない。最初にお気に入りに入れるときだけだしな問題あるの・・・

Perlでチャット(12) とりあえず完成

やったー
というわけでとりあえず当初の目標の機能は全部実現した!
最後にちょっといくつかメモ。
・1つのform内に複数のsubmitがある場合の処理なんてsubmitにnameとvalueつけて、各submitにvalueが入っているかどうかで判断すれば簡単にできんじゃん!アホか!
なんかすごい無駄なことしてた気がするけどあれはJavaScriptの勉強になったので結果オーライ。そもそもcgi-boyがform分けてたからなんか混乱したんだよな。
auはmultipart/form-dataが使えない。というかチャットでそもそもこれ使う必要なかったんだけど、画像掲示板作ったときの名残で使ってた。

あとは水面下で余計な機能を付ける作業だ!正直ここからが楽しい!