2011年1月31日月曜日

新掲示板 - FEX(Perl)の仕様

やっぱ母音が無いとおかしいよね、ということでFRWXからFEX(フェックス)に名称を変更。

まだほとんど決まっていない(正しくは過去に考えた仕様を取り消した)上に、
コードの大半は書き直しになった(掲示板の記事の出力には一切触れていない)。

一応仕様はぼちぼち決まっているので書いておきます。
掲示板を作る予定の方は参考にでも。
Web Patio の内部的な問題点と新掲示板の仕様を一緒に解説。

  • エラーページが送信フォームと別箇になっている
一部の環境(モバイル等)でエラーページから送信フォームに戻ると、入力データがクリアされる。それに前画面に戻るのが面倒。

そこで新掲示板では、送信フォームと一緒に(エラーがある場合は)エラーを表示し、入力データをテキストエリアに反映する予定。
コードを書き直す羽目になった原因がこれ。

  • パスワードが先頭8バイトまでしか有効でない
これはPerlの関数 "crypt" で使われる暗号方式の仕様で、先頭8バイト以降は無視される。
crypt関数はシステム側(OS)で提供されている暗号方式を利用するため、結果がどのようになるかはシステムに依存する。
salt(暗号種)もパスワードから決定すれば実質10バイトまで有効になるが、saltはランダムに決定するのが望ましい。

新掲示板では、暗号方式に「SHA1」を使い、パスワードと20バイトのランダムなsalt(種)を連結し(saltが前)、その文字列からハッシュ値を取得してHex-Stringに変換したsaltと一緒に保存する予定。
ちなみにパスワードは30バイトまで有効にするつもり(英数字のみに制限)。

  • IPアドレスによるアクセス規制は弱すぎる
Web Patioではアクセス規制にIPアドレスを使用する。
しかしIPアドレスは本来、ネットワーク接続の度更新(変更)されるものであり、IPアドレスについて1%でも知っていれば簡単に掻い潜ることができる。

新掲示板では、記事の投稿をログイン式にし、アカウント作成から実際にログインが可能になるまでの期間を設ける。
これによって、その期間は絶対に投稿することはできなくなる(アカウントを規制するには、アカウントの削除やその他の手段を提供するつもり)。
ログイン式にすることによってユーザーをほぼ完全に識別することができたり、投稿ボット避けにもなったりする。

初めてのユーザーには申し訳ないが、この方法で得られる恩恵は大きい。
この機能の考案が原因で、新掲示板のコードを書くのが面倒臭くなった。

  • 文法が滅茶苦茶
サブルーチンが別サブルーチンの値を引き継いでいたり(引数で渡すのではなく、サブルーチン内部の変数が値を直接引き継いでいる)、
設定用変数を全て別名のスカラ変数としており、実際に処理を行うコードでどれがどれだか判らなくなる。

新掲示板のコードは値は全て引数から渡し、設定は一つのグローバルな連想配列に統一する。
グローバル変数の宣言はできるだけ一箇所にまとめる。

これはどんなプログラムでも意識すべきこと。


重要な点だけ書くとこんくらいです。
とても面倒でやる気が起きません。誰か助けて下さい。

最後に、「実装して欲しい」ではなく「実装したい」機能について質問する方に助言。
なんでサポートがあるのにそこで質問してはならないか...

サポート側が書いてくれたコードに重大なバグがあったらまたサポートで質問するのか?
誰かが回答してくれるまで待つのか?
ユーザーを必要以上に待たせていいのか?
ユーザーには サポートに問い合わせ中ですので解決されるまでお待ちください とでも知らせるのか?

もしあなたが「実装したい」機能についてサポートで質問すれば、
「私は管理者ですが他人に振らないと自分で設置し公開した物もまともに扱えない人です」
と公表するのと同じこと。

フリーウェアのサポート側はソフトウェアをより良くする為の要望を望むが、
「実装したい」などというソフトウェアの向上に何の役にも立たないポストなんてどうでもいい。
サポート側がそれに対応してくれたなら、それはただの「暇つぶし」だと思うこと。

欲しい機能があるならそれは創作に対する意欲でもある。
意欲があるなら実際にプログラミングを学び、自分で自分が欲しい機能を実装しましょう。
他人の手を煩わすことも無い上に、やりたいことが自由にできますよ。

何か痛いこと言ってる気もするけど、時が経てば忘れるさ。

0 件のコメント:

コメントを投稿