▲もどる

くずなぷろじぇくと

くずはすくりぷとに代わる次世代型のあやしいわーるど向けスクリプトを開発しています。

[ 公式バージョン ]


現状は漏れ一人しか開発していませんが、個人的にはみんなの共同作業での完成を目指しています。
多少のプログラミングスキルがある人は一部でも手伝って下されば幸いです。
そういうスキルのない人でも、アイディアや要望や意見を教えて下さるだけでも非常に役立ちます。


■特徴
・JavaScriptを活用した先進的インターフェイス
・Ajaxの採用でリロード操作が完全に不要化
・キーボードショートカットによる画期的操作感
・くずはすくりぷとに比べ非常に軽いサーバー負荷


■開発方針

基本的なコンセプトはくずはすくりぷと型のチャット。
必ずしもくずはすくりぷとには似せず、より洗練された形を模索する。
あやしいわーるどでの利用に特化して、そのために不要な機能は省く。
デザインには全面的にCSSを使う。将来性を考えて可能な限りIDを振る。
低サーバー負荷を常に意識する。格安サーバーでのメイン級掲示板の運営が目標。
ユーザー側は1GHzでサクサクと動く程度にしたい。動作の引っ掛かりは極力無くす。
CGI側には必要最低限の機能しか与えない。
非Ajaxインターフェイスは携帯電話向け以外は公式には用意しない。
画像投稿などの常用されない機能は標準のスクリプトには付けない。
画像などは使わず、シンプルなデザインにする。
誰にでも簡単に設置することができるよう、ファイル数は少なくする。

基本構成

bbs.html - CSS と JS は別ファイルには分けない。
bbs.cgi - 書き込みCGI、設定は少なめに。
bbs.dat - ログデータ。自動生成はさせない。
log
 index.html - ログ閲覧用インターフェイス。
 20080401.dat - 過去ログ。自動生成する。
iplog.dat - 外部からは読めないパーミッションに。



■今後の予定(優先度)

・データの差分読み込み(4) ★0.2.0で完了
2KBずつの読み込みを予定。簡単に変えられるようにしておく。転送量が現在の半分以下、くずはすくりぷとから比べれば数分の一になるので、格安サーバーにもメイン級掲示板の設置が可能になる。

・ページの廃止(2) ★0.2.0で完了
ページという概念は旧時代的なので、他の方法に変えたいが、それが何なのかは未だ決まっていない。

・簡易検索及びNGワード機能(5) ★0.2.0で完了
記事移動が正常に動かなくなるバグがあるので、それの修正。かなり重い部分なので、根本的な見直しが必要。

・ツリー表示(2)
ツリー表示ができるようにする。要望の声は多そうだが、一から作らなければならないのでかなり面倒くさい。誰か代わりに作ってください。

・ソースを綺麗にする(1)
ソースが意外に大きくなってきてしまったので、オブジェクト指向などを使って見易く書き直したい。コメントももう少しちゃんと入れる。

・過去ログ(3)
データ形式のみを予定。掲示板とは別で表示用のスクリプトを開発する。気が向いたらデータからHTMLへの変換用プログラム(PerlかD言語を予定)も作る。→■過去ログについて

・内部データ形式の変更(5) ★0.2.0で完了
差分読み込みの導入にも必要。データを記事番号のハッシュで管理する予定。全データ(ハッシュ)>検索及び除外>表示データ(リスト)、という二段階構成にする。

・mod_perl 及び PHP 対応(2)
書き込みに使っているCGIを上のものに対応させることによってサーバーへの負荷を著しく軽減させる。元々の機能が単純なため、対応は非常に容易いはず。

・クロスブラウザ化(5) ☆FireFoxは0.2.0で完了
まだFireFoxで正常に動かない部分が多い。優先順位はIE>FireFox>Opera。他は無視する。

・携帯電話向けスクリプト(1)
CGIのみで実装する。表示、投稿、返信のみの単純なもの。ずっと昔に作ったくずはすくりぷと向けのやつを流用するつもり。

・Remix化(0)
基本的な部分はできて既に搭載されているが、必要性があまりなく、バグの原因にもなるので、コードは削除予定。複数掲示板タイプは標準タイプの改造版として開発する。

・荒らし対策(1)
必要になったら実装。IP弾きとプロキシ制限を付ける。制限ユーザーには画像によって投稿用コードを表示する。データとは別に、外部からは読めないパーミッションで投稿者のIPを記録する。

・インクリメンタルサーチの改良(0)★0.2.0で正規表現化したので無意味になった
前回の検索文字列を記憶しておいて、それからの文字追記なら、表示リストから再検索するという方法で、インクリメンタルサーチをかなり軽量化する。こんなことしなくても今のパソコンなら問題ないかも。

・スレッド非表示(2)
何かの操作をすることで、興味のない話題のスレッドを表示させないようにする機能。暫定にあるようなやつ。

・サウンド(2)
メッセンジャーなどのように、ウィンドウにフォーカスが当たっていない状態で新しい記事があった時に音を鳴らす機能。個人的に欲しい。投稿失敗時などにも音が鳴ると親切かも。余計なところでは鳴らさない。

・視覚効果(3) ★0.2.0で完了
キーボードなどでの記事移動時に、瞬時に移動するのではなく滑らかにスクロールさせることで、移動を視覚的に解りやすくする。ページ変遷時にも何かの視覚効果を入れたい。新規投稿もパッと出てくるよりは、何らかの動きがあったほうがユーザーに親切だと思う。

・リロード連動スクロール(2) ★0.2.0で完了
自動リロード時に、表示されている記事が画面上で動かないように新しく増えた投稿の分だけ自動でスクロールさせることで記事を読みやすくする。良い実装方法が思い付かないので、誰かアイディアください。

・クッキーへの記事データ保存(0)
可能かどうか解らないが、もし出来ればウィンドウを一度閉じて再び開いた場合の転送量を何割か減らすことができる。

・インテリジェントリロード(0)★0.2.0で完了
差分の読み込み量を自動で調整したり、記事の更新が活発なときにはHEADリクエストをしないで直接にGETリクエストをしたり、逆に投稿が少ない時にはリロード間隔を長くしたりして、サーバーへの負荷をいくらか軽減させる。機能自体の実装は難しくないが、条件判定などがややこしい上に、効果もそこまで大きくはない気がする。将来的に。

・多重起動防止(0)
リロードが自動なので、ウィンドウを二つ三つと開かれるとそれだけ負荷が掛かる。最後に開いたウィンドウ以外は自動リロードを停止させるという仕組みを設けようかと思うが、ユーザーの利便性は悪くなる。フォーカスが移ったら再びリロードを始めるようにすれば問題ないだろうか。


■くずはすくりぷとから意図的に外すもの

・メールアドレスと件名の入力欄
誰も使っていないので不要。

・URL入力欄
本文欄の自動リンク機能があるので不要。

・複数の過去ログからの検索
サーバーへの負荷があまりに大きい。

・投稿者名による検索(★ボタン)
少なくとも自分は活用したことがない。簡易検索で代用可能。

・スレッド表示(◆ボタン)
ツリー表示があればいらないような。実装自体は容易だと思うので、要望次第。

・カウンタ
構造上不可能。そもそもカウンタが付いている意味がよく解らない。

・管理者騙り防止機能
処理が複雑な割に利用される機会が少ない。

・各種荒らし対策
あまりに簡単に破れるので不要。もっと強固な方法を導入する。

・gzip圧縮
ちょっと難しい。差分読み込みをすれば圧縮をしなくても転送量をかなり小さくできるので、やはり不要か。→■圧縮についての考察


■要望されたけど却下したもの

・未読リロードが欲しい。
マークという新機能で代用が可能。

・リンクに下線を付けて欲しい。
URLは見れば解るし、それ以外はリンクじゃなくてボタン。無いほうがすっきりと見える。

・投稿フォームがないと落ち着かない。
要らない。どうしても常に表示していたい人は、画面の右上にでも置いてもらう。

・タブキーでフォーカスを移せない。
もっと便利なキー操作があるのでそれを使ってもらう。

・JavaScriptはオフにしている。
特定のページでのみオンにする機能を使ってもらう。


■圧縮についての考察
Ajaxでのgzipの扱いは試していないので解らないが、ブラウザ側で展開されるのであれば実装はすぐにでも可能。スクリプト側での展開は不可能ではないが、速度的に実用になりそうにない。
圧縮に関しては二つの方法があり、一つは転送時にサーバー側で mod_deflate などを使う、もう一つは書き込み時にデータを圧縮する。CPU負荷と汎用性を考えれば後者のほうが良いのだが、差分読み込みができなくなってしまうので、現行くずはと同じ転送時圧縮を使うしかない。ただ、数KBの小さいデータには圧縮が利きにくいので、効果の程は期待できない。スクリプトのHTMLと、最初の一括送信データだけ圧縮するのが良いかも。
圧縮をしなくてもデータ形式のバイナリ化で300件当たり10KBくらいは削減できるので、そちらを先に考えたほうが良い。また、かなり大袈裟な方法だが、ひらがなに特化した固定辞書を使って簡易的なハフマンエンコードを掛けることでも一割くらいは削減できるのではないだろうか。


■過去ログについて
データ形式で保存し、Ajaxな専用ビューアで見る。専用ビューアは将来的にはメインスクリプトに統合したい。差分読み込みはあまり意味がなさそうなのでしない。ファイルサイズが大きくなるので、可能ならば圧縮をさせたい。


■サーバー負荷についての希望的考察

・CGI起動
一番のボトルネック。くずはすくりぷと(以下、現)はメイン画面表示、フォロー投稿画面表示、投稿時に起動されるのに対して、くずなすくりぷと(以下、新)は投稿時にのみ起動される。投稿は割合としてはリロードの数分の一なので、負荷はかなり小さくなる。使える環境が限定されるが、mod_perl化でほぼゼロに近付けることが可能。

・CPU負荷
(新)はCGIの処理自体が単純なので理論的には(現)よりも小さいのだが、実際には誤差程度の違いしかないだろう。それよりも、上にも書いたように(新)のCGIはそもそもの起動回数が極端に少ないので、それによる差が大きいと思う。また、(新)では(現)でかなりの負荷を与えていると思われるgzip圧縮を基本的にしないので、CPU負荷は(現)と比べれば殆ど無いに等しいとも言える。

・転送量
あまりに方式が違うので比べにくいが、少なくとも数割は削減できると思う。(現)の場合はHTMLを全て送るので、必ず数十KBの通信が発生するが、(新)は最初の一回こそ数十KBになるが、以後のリロードでは差分データのみを送ることで僅か数KBと極端に削減される。また、(新)はフォロー投稿画面の表示やページの移動には一切の通信を行わないのも大きいだろう。

・ファイルアクセス
(現)はスクリプトとデータファイルの二つが必ず全部読み込まれているが、(新)のスクリプトはユーザー側にキャッシュされるので殆ど読み込まれず、データファイルも更新時に一部のみしか読み込まれないようになっている。ただその分、ファイルの更新日時のチェック回数が(現)の数倍になっているが、これはファイル自体ではなくファイルシステムへのアクセスなので負荷は僅かしか掛けないと思う。



■あなたの協力を求めています

・要らないパソコンください。
・サーバーを貸してください。
・バグ報告してください。
・開発を手伝ってください。
・住人になってください。