“Mireille”は「ほんのりと寂れの匂いがしつつもなんとか賑わっている個人サイト向け、 高機能雑談系CGI/Perl掲示板システム」です、目標は。 この目標を達成するためには、多少気乗りしない機能でもつける予定です。 技術的&労力的&需要的に可能ならば。
WinIE5.01以上(WinIE6以上を推奨)、 Mozilla1.0.0以上、 Opera7、 そのほかのブラウザでも多分読み書きできます。 古いブラウザやマイナーなブラウザ、 例えばWinIE4, MacIE, Netscape4, Opera, iCab, Konqueror, Safariなどでも、 記事の読み書きレベルすらできない場合は教えてください。 最低限記事の読み書きは出来るべきだと思っていますので。
まず、Mireille.txtとMireille.html以外は漢字コードがShift_JISでなく、EUC-JPです。 メモ帳で文字化けしてしまうのは仕様であってバグではありません。 詳しい説明はこの文章の「/特筆すべき注意/文字化けするときは」で、
とりあえず必須ファイルだけ。
/bbs/ 777 /bbs/index.cgi 755 /bbs/core.cgi /bbs/iconctlg.cgi /bbs/style.pl /bbs/style.css /bbs/artnavi.js /bbs/log/ 777 /bbs/log/0.cgi 666 or そのまま
広告が自動挿入されるサーバーなどで動かしたときに、画面が真っ白になってしまう場合は、
index.cgiの中の$CF{'conenc'}='|gzip -cfq9';という所を$CF{'conenc'}='';としてください。
(コメントアウトではダメ)
詳しい設置説明は同梱のMireille.htmlを参照してくださいまし。
su=hoehoe;」と入れておくと、
それ以降Cookieに管理者であることが保存され、いちいち管理者パスワードを入れなくても、
記事の削除や修正、 最大子記事数制限に達したスレッドへの返信などができるようになる。
セキュリティホールを作りこみかねないので慎重に実装しないと。BNFもどきで書くと今はこんな感じ。
( 'BEGIN' | 'END' ) '_' ( 'VENDOR' | COPY1' ) (#x20 |#x9)+ <VALUE>? ( 'VENDOR' | 'COPY1' ) '_' ( 'NAME' | URL' | 'LINK' ) (#x20 |#x9)+ <VALUE> 'PAGE-BREAK' #BEGIN_*では<VALUE>を取れる、これは*_NAMEに本来入る<VALUE>である、つまり略記。
これを以下のような感じに拡張したい。
( 'BEGIN' | 'END' ) '_' ( 'VENDOR' | COPY1' ) (#x20 |#x9)+ <VALUE> ( 'VENDOR' | 'COPY1' ) '_' ( 'NAME' | URL' | 'LINK' | 'COMMENT' ) (#x20 |#x9)+ <VALUE> 'PAGE_' ( 'TITLE' | 'GROUP' | 'COMMENT' ) (#x20 |#x9)+ <VALUE> #PAGE_命令群はそのページに対しての情報を付加する
さらに、同じキャラで表情が違う、といったのをグループ化したい。 (Marldiaでは強引にやっているが、その方法では限界がある)
もっといい案がほしいな。。 アイコン配布サイト側がこの形式のアイコンリストを配布する〜までいけば最高ですけどね。
配布圧縮ファイルのディレクトリ構成を変更
省略
ユーザーの入力するSTRONGタグが/<STRONG class="[^"]*">.*<\/STRONG>/
にマッチしないものなら大丈夫です。
語句強調の使用するclass名を、特定の文字列から始めるようにする、
といった対策も検討してはいます。(つまり当分対策予定なし)
少なくとも/^<A class="autolink"/にマッチしなければ大丈夫です。
現実的な対処法を模索中です・・・。
現在のブラウザが一通り入れ替わったら、XHTML2+JavaScript2+CSS3で書き直します。 (成瀬はW3C原理主義者じゃないので・・・) $ENV{'HTTP_USER_AGENT'}みてrequireするstyleを切り替える?
処理の簡便化のため、一部互換性を省いています。 例えば次の、
<OPTION value=hoe.png>ほえ
はHTML4では正当なものですが、Mireilleはvalueの値を""でくくっていない為と、 </OPTION>が無いために解釈することが出来ません。(出来ることもあるけど)
EUC-JPでの使用を前提として、正規表現を決め打ちしている部分が多々存在する。 Perl5.8+UTF-8に変えるか、スクリプト自体はASCIIにしてstyleはopenFileしてとってくる? 今のところあまりは需要はなさそう、かな。
例えば、
などです。 修正案を思いついた方は教えてくださいまし。
普通にやるとアイコンリストが重過ぎるので、 Cookieが保存されている時のみ、Cookieの情報を使うことでできる・・・かな。
現在の青ベースデザインの他に、赤や緑や橙など? もっと大幅にデザインを変えたもの? どなたか改造したものを寄贈してくださると楽なのですけど(ぉぃ
需要がなさそう・・・。
スキンに対応したら、そのときに携帯端末用スキンを作ることで対応する予定です。
いつかやりたいけれど当分できなさそうなこと。
ツリービューにしたり、果ては日記のように使えるようにしたり。
EUC/SJISの呪縛から逃れたい〜use encodingさいこぉ〜。
'テスト'=~/好/がマッチしないのステキ☆
Perl5.8待ちですね。
Storableモジュールなんか使うのいいですね。 XMLデータベースまで使ちゃったら素敵ですね。
RubyとかC#とか。
TODOの逆、みたいなものです。 以下にあげるものは現在、半永久的に実装予定がありません。 理由は「ポリシーに反するから」でも「つけるのが無理だから」でもなく、 「使う人がいなさそうだから」ですので、使う人がいればつけます。
今はquotemeta関数で文字列にしています。 正規表現を使えるとより複雑な検索が出来ます。
そもそもこの存在を知っているユーザーが少ないと思われる。
$DT{'strong'}に' '(半角空白)区切りで、
$CF{'strong'}='// s2f2 > s8184 # s8194 ◇ s819e ◆ s819f □ s81a0 ■ s81a1 ※ s81a6';
のように、強調する記号と対応するCSSのクラスを列挙します。
このとき、最初の一文字が
$CF{'strong'}=' // s2f2f /(/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)/ s2f2a > s8184 # s8194';
のように' '(半角空白)だった場合拡張モードになります。 記号やクラスの前後を//で囲んだものはそのまま正規表現として代入され、
$DT{'body'}=~s[$regexp][$ST{$_}]gm;
と置換作業に利用されます。
ちなみに、記号とクラスは別々に、そのまま正規表現として代入するか、判定されます。 上の例では /* ・・・ */ というC言語のコメント部分に、s2f2aというCSSクラスを与えます。
文字列内に' '(半角空白)を書きたい場合は、8進数文字コードで\040と書くか、 16進数文字コードで\x20と書いてください。
$CF{'icon'}の設定は最後に/を含めてください。
$CF{'icls'}の最初の一文字が' '(半角空白)だった場合複数リストモードになります。 具体的な例を出すと、
タグ方式とSharp方式があります。
HTML4に基づいた形で、SELECTタグ内の要素を羅列するだけです。 管理CGIはその中のOPTGROUPとOPTIONタグを認識して、アイコン見本を作成してくれます。 とりあえず例を、
<OPTGROUP label="グループ名"> <OPTION value="アイコンファイル名">アイコン名</OPTION> <OPTION value="アイコンファイル名">アイコン名</OPTION> </OPTGROUP> <!-- %BEGIN_COPY1 SQUARE --> <!-- %COPY1_URL http://www.playonline.com/ --> <OPTGROUP label="FINAL FANTASY VII"> <OPTION value="cloud.gif">クラウド</OPTION> <OPTION value="tifa.gif">ティファ</OPTION> <OPTION value="aerith.gif">エアリス</OPTION> <OPTION value="yuffie.gif">ユフィ</OPTION> <OPTION value="vin.gif">ヴィンセント</OPTION> <OPTION value="sephi.gif">セフィロス</OPTION> <OPTION value="cid7.gif">シド</OPTION> <OPTION value="red.gif">レッドXIII</OPTION> <OPTION value="barret.gif">バレット</OPTION> <OPTION value="cait.gif">ケットシー</OPTION> </OPTGROUP> <!-- END_COPY1 -->
HTML4の仕様上はOPTIONタグは終了タグを省略できるはずですが、 Mireilleでは省略した場合の動作は保証しません。 ちなみに、OPTGROUPタグは入れ子にできない(<OPTGROUP><OPTGROUP>とできない) ので注意しましょう。 これはHTML4の仕様なので、入れ子をサポートする予定は当分ありません。 HTML4の仕様のせいにしてたりなんかしません(w
その名の通り、"#"を使う方式です。 これも例を見たほうが早いでしょう。 タグ方式と見比べてみてください。
#グループ名
アイコンファイル名#アイコン名
アイコンファイル名#アイコン名
#
<!-- %BEGIN_COPY1 SQUARE -->
<!-- %COPY1_URL http://www.playonline.com/ -->
#FINAL FANTASY VII
cloud.gif#クラウド
tifa.gif#ティファ
aerith.gif#エアリス
yuffie.gif#ユフィ
vin.gif#ヴィンセント
sephi.gif#セフィロス
cid7.gif#シド
red.gif#レッドXIII
barret.gif#バレット
cait.gif#ケットシー
#
<!-- END_COPY1 -->
という感じです。
1.2.9から相対指定アイコンというコマンドが実装されているのですが、 ここではこの機能について説明します。
この機能はrelativeIcon=hutsuha/shitei/dekinai/icon.pngとコマンド欄に入力することで使えます。 利点はアイコンリストに登録されていないものでも使える、ということなのですが、 当然「わざとアイコンリストに登録していないもの」も使えてしまいます。
そのため、セキュリティホールになりそうにも思えますが、 実際にはこの機能が追加されたために、セキュリティホールが増える、ということはありません。 その根拠は以下の三点になります。
どう転んだとしても、いかがわしい目的で本来使えないアイコンを使おうと思ったら、 ファイル名指定アイコン機能を使うよりも、既存のアイコン指定の枠組み内で、 フォームを偽装して投稿した方が自由度が上です。 以上より、この機能の追加によって、Mireilleのセキュリティが下がるということはありません。
絶対パスを指定します。 コマンドはabsoluteIcon=http://www.airemix.com/airemix.pngという感じです。
まだversion0.xなので、将来規格が変わる可能性があります。 注意して使ってください。
かなりの自由度でデザインを変更することが出来ます。 また、メニュー、記事、投稿フォームのデザイン部では以下の変数を使うことが出来ます。
記事番号:$DT{'i'}
返信番号:$DT{'j'}
名前:$DT{'name'}
題名:$DT{'title'}
メールアドレス:$DT{'email'}
ホームページアドレス:$DT{'home'}
投稿日時("????年??月??日(?) ??時??分"型):$DT{'date'}
本文:$DT{'mes'}
アイコン:$DT{'icon'}
パスワード:$DT{'pass'}
コマンド:$DT{'cmd'}
これら以外にも使える変数が存在することはしますが、使うべきものかどうかは微妙です。
Mireilleの管理CGI(manage.cgi)は非常に強い権限をもっているため、 悪意の第三者にアクセスされた場合、非常に危険です。 必ずファイル名を変更しましょう。 (そもそも1.2.3.7以降ではファイル名を変更しないと使えないようになっています)
Mireilleは、このMireille.txtとMireille.htmlを除いて全て、 EUCという漢字コード書かれています。 そのため、メモ帳を筆頭とする、EUC非対応のエディタでは編集することが出来ません。 EUC対応のエディタをご使用ください。 以下は推奨するエディタです。
他にもEmEditorやWZEdiotr,Peggyなどが対応しています。 特に本格的にやるならば、色付けをしてくれるエディタだと格段に、 効率が上がり、かつミスも減ると思います。
PrelFactory ≪http://homepage1.nifty.com/wizman/≫ はその名の通りPerlの開発環境です。 ざっと見た限りではPerl単体の色付けに関してはケチをつけられる所はありませんでした。
アンカーシステムズ株式会社のPeggyPro ≪http://www2.noritz.co.jp/anchor/≫ を、 成瀬は2001年中ごろから使っています。 Perlだけでなく主要な言語からそうでない言語まで幅広いサポートが光ります。 CREC(コンテキスト正規表現カラー表示)を使って新規に言語モードを作ることで、 新たな色づけ規則を、単なるキーワード強調以上のことができます(><
スタイルシートのファイル名は、 必ず[_a-zA-Z0-9]*.cssという形式である必要があります。 つまり、-=~<>\などの記号や日本語名は使えません。
漢字コードがおそらくShift_JISになっています。 MireilleはEUCを使っているのでEUCで保存しなおしてください。 一部のファイルを除いて全ての他のファイルも同様です。 「一部のファイル」がどれかは、最初から何行目かに、
# "This file is written in shift_jis, CRLF." 空
のような行があるので、そこにどの漢字コードを使っているか書いてありますので、 それを参照してください。 ちなみにこのファイルはShift_JISで保存してあります。
確かにShift_JISのほうが楽です。 ほとんどの人はWindowsを使っているでしょうから、標準のShift_JISを使ったほうがいいですね。 わたしも本当はWindows上での利便性を考えればShift_JISを使いたいです。 ただ、Shift_JISだと一部の漢字においてCGI処理の中でうまく処理できないのです。
具体的には、「print"能";」というコマンドでエラーが出ます。 これはShift_JISでの「能」の16進文字コードが\x945cなため下の二つが、 \x5cである特殊文字「\」とかぶってしまうからです。 このような文字は「能」「饅」など数十文字あります。 回避策は何個かありますが、一番確実な回避策がEUCを使う、ということだったわけです。 EUCにはこのようなエラーを誘発する文字が、無いように作られていますので。 このことについては、 perl スクリプトは EUC-JP で書く が詳しいです。
その意味では今流行の、世界中の全ての文字を一つに詰め込もうという無茶な規格、 Unicodeでもいいのですが、まだエディタ側の対応を見ると時期尚早だと思いますので^^;; Perl側の対応もPerl5.8を待たないといまいちですし。
とりあえず今はあきらめることをお勧めします。 それが嫌な場合は親切かつ有能な友人を頼ってください^^;;
確かにログ保存時に「1970年01月01日(木) 09時00分」などとしてしまったほうが、 表示時のサーバー負荷や所要時間は多少なりとも減ると思われます。
しかし、この負荷はログファイルの読み込みに比べれば微々たる物ですし、 所要時間に至ってはHTTPでの転送にかかる時間に比べれば誤差です。
それよりも、 「1970年01月01日(木) 09時00分」という形式に比べ、UNIX秒のほうが他の形式に変換しやすい、 というメリットをとったわけです。
これは歴史的な経緯によります。 とあるレンタルサーバーで、Mireilleの自動作成したファイルを、 FTPから削除できないという現象があったのですが、これの対応策として、 getloginでユーザーを調べ、''だったらumask(0)をかける、としたためです。 そのサーバーは今ではSuEXECを使うようになっためumask(0)する必要ないのですけどね。 もっとスマートな解決方法ってあったのかな。。
歴史的経緯です。 'MS UI Gothic'のような、他のフォントの方がよいという方が多いようだったら変えますよ。
こうした方が使いやすいかなと。
Mireilleの構造について、実装の手法からつらつらと書き連ねておきます。 「ここが知りたい」という個所があれば、言ってくだされば優先的に記述します。
Release1.2.4以降では、 Mireilleを構成する個々のファイルは“?.?”と二桁のRevisionであらわされます。 MireillePackageのバージョンは3桁の場合と4桁の場合があり、 Release版やStable版の場合は3桁、Experiment版の場合は4桁になります。 3桁目はMireille.txtのRevisinの2桁目と、4桁目はcore.cgiのRevisinの2桁目と一致します。 1桁目と2桁目は気分に次第で適当に増やします。 基本的には、行った変更の重要さ(派手さ)加減によって変わる・・・はず。
本来はCSS2の属性セレクタ(Attribute selectors)と擬似クラス(Pseudo-classes)でやるのが理想なのですが、 そうも行かないのでいろいろ知恵をひねることになります。
まず、Mozillaは理想のとおり属性セレクタと擬似クラスで切り替えを行います。 この際に属性セレクタを含んだブロックと含まないブロックの両方を用意する必要があります。
.submit{
background-color: #dde;
border: #355 solid 2px;
color: #355;
cursor: pointer; cursor: hand;
width: 7em;
}
INPUT[type="submit"]{
background-color: #dde;
border: #355 solid 2px;
color: #355;
cursor: pointer;
width: 7em;
}
こうしないと属性セレクタを解釈できないブラウザが.submitまで無視してしまうのです。
次にWindowsInternetExplorerです。 これはMozillaのようには行かないので、フッター直前に置いたJScriptで処理します。 以下は$CF{'jscript_AtSe'}をはしょったものです。
<SCRIPT language="JScript" defer>
<!--
/*@cc_on
if(document.getElementsByTagName){
var tags=document.getElementsByTagName('TEXTAREA')
for(var i in tags){
tags[i].className='blur';
tags[i].onfocus=function(){this.className='focus';};
tags[i].onblur=function(){this.className='blur';};
}
}
// @*/
-->
</SCRIPT>
ここで、他のブラウザに悪影響が出ないように、JScriptの条件コンパイルという方法を使っています。 ≪http://www.microsoft.com/japan/developer/library/script56/js56jsconconditionalcompilation.htm≫ 上のスクリプトは速度上の問題からWinIE5以上にのみ対応していますが、WinIE4で動かすこともできます。 流石に“人類が生み出した三つの最悪なものの一つ”WinIE3では無理ですけど。
さて、残るOpera6やNetscape4などですが、これらは無視します(ぉ。 属性セレクタにも対応しないわ、JavaScriptからのCSS切り替えもできないではどうしようもありません。 やるべきことはこれらの表示に影響が出ないように、前の二つで表示できるようにする、です。
MacIEは6になるころには属性セレクタにも対応してくれることでしょう。 なので様子見;)
基本的にはTSVとname=valueの折衷である、
"name=\tvalue;\tname=\tvalue;\tname=\tvalue;\t"
という=\tと;\tで区切る方式を使っています。 \tはタブ文字のことなので、展開され、
name= value; name= value; name= value;
のようになります。 実際にMireilleのログとして保存する場合は最初に管理情報を埋め込み、 あとは任意のログ項目を列挙します。 現在の「Mir1型」ログ形式だと、
Mir12= ; name= 名前; subject= テスト;
と保存されます。 保存したログから値を読み出す際には、
my%DT=($_=~/([^\t]*)=\t([^\t]*);\t/go);
として一括してハッシュにつめこみ、あとは$DT{'name'}で呼び出します。 このあたりの処理はちょっと気に入っています(何
項目ごとの検索(題名に'Millefeuille'を含む記事を含むスレッドを検索)では、
$sertch_word='Millefeuille'; $log=~/\ttitle=\t$serch_word;\t/o;
とやれば、\tは区切りにしか含まれていないはずなので、必ず目的の項目が見つかります。 前に\tのない、行の最初の項目はこれでは検索できませんが、 Mir12型では行頭は管理領域なので、普通の検索では扱いませんし。(そもそも扱えたら困る) システムがこれにアクセスする場合は/^Mir12/で検索するので、問題ありません。
長年の研究の結果導き出された、最良のリスト形式は、「そのままタグを列挙する」でした(笑。 というわけで、SELECTタグ内に記述されるタグを列挙する、というわかりやすい形式になっています。 また、グループ分けのためHTML4で策定されたOPTGROUPタグの利用を推奨しています。
<OPTGROUP label="グループ名"> <OPTION value="ファイル名">アイコン名</OPTION> </OPTION>
Cookieを使って初期状態で選ばれるアイコンを選択する際には、
s/value="Cookieにあるファイル名"/value="Cookieにあるファイル名" selected="selected"/
とやる安易な方法を用いています。 この一見かつ適当に思えるリスト形式によって、大幅な高速化&耐久性を実現・・・ しているような、気がします(w (とりあえず700個のアイコンでそこそこの速度での動作を確認済) Rev:1.1.3.8以降ではHTMLコメントでアイコンの配布元情報を埋め込んだりも出来るようになっています。
index.cgiに変数群%CFを用意することによって行っています。 style.plで主に変更可能な、HTMLを記述することによって設定するデザインは、 eval関数を使うことによって、文字列内でも変数を普通に使えるように・・・。 やっぱり適当といえば適当な仕様です。
index.cgiの設定は、直接エディタで編集、管理CGI(manage.cgi)から操作、の2種類を用意しています。 基本的には下位互換性を確保するようにしているため、 たいていはバージョンアップをしても問題なく動作するでしょう。 管理CGIからindex.cgiへの書き込みは、地味にテンプレートのようなものを用意して、 それに代入しつつ書き込むというシンプルな方法です。 (foreachなどして多少は自動化してますが)
将来はプログラムとデザインと設定を完全に分離し、各々を別々に組み合わせられるように・・・。 JavaでいうMVCモデルみたいなものを使うのかな?。 もっと勉強&思案しないと。。
早くから(β04から)MireilleはEUC-JP決め打ちで書かれています。 Shift_JISのエスケープ問題や、Perl自体の日本語対応の不完全さを補うためです。 例えば検索部のコードは変なところでマッチしないようにEUC-JP決め打ちで処理を行い、 日本語処理に際しての不具合が出ないようにしています。 ただ、このままだと多国語化できないので、将来的にはPerl5.8+Unicodeに移行したいのですが。。。
ちょっとしたメモなのです。
特にこれを売りとしてはいませんが、何気にかなり手をかけている部分だったりします。
まず、語句強調は何が難しいって、強調すること自体はさして難しくはないのですよ。 設定に応じて正規表現で置換するだけですからね。 問題はMireilleに修正機能が存在することです。 修正する際には強調する前の状態に戻してTEXTAREAに表示しないといけません。 ここは苦労しました・・・。
また自動リンクの精度をあげるのも大変です。
ベースはこのテキストの末尾にも載せてある、Perlメモさんのところの断片なのですが、
これがよくできたもので、
<STRONG title="http://www.airemix.com/">http:www.airemix.com/</STRONG>
などという文字列があるとき、ちゃんと">http:www.airemix.com/</の部分だけに、
リンクを張ってくれるんです。
ただ、ここでも修正機能が話を複雑にします。
<IMG src="http://www.airemix.com/airemixb.png">Airemix
最初にという文字列があったとすると、IMGタグを許可していない場合にはタグが無効化されて、
<IMG src="http://www.airemix.com/airemixb.png">Airemix
となります。ここで、
http://www.airemix.com/bbs/index.cgi?icct&page=1
などの&とエスケープ後の.png"&の区別がつけられなくなります。
記事参照機能というのは、 「>>No.113」などとすると、その掲示板の113番スレッドにリンクが張られ、 「>>No.113-5」などとすると、その掲示板の113番スレッド子記事5にリンクが張られる機能です。 比較的早くからある機能ですが、今まで文章化されていなかった機能だったりします。
一応意識してはいます。 そのまま他のCGI/Perlのセキュリティホールを指摘してしまうことになるので、 具体的に、どこをどのように気をつけているか、は書きませんけど、、
ちなみに、現在Mireilleに存在するセキュリティホールでは、 管理CGIの設置場所が他者に漏洩する、というものがあります。 あくまで潜在的なものであり、直ちに被害が出うるものではありませんが・・・。 なにはともあれ、管理CGIは危険なのでこまめにWeb上から削除するようにしましょう。
(gzip実行部分は`...`を使うよりsystem()の方がいいのかな?)
(open $fh,"-|" or exec{$cmd}@cmd;はWindowsだと効かないのだ。。)
後方互換性のためINPUTやTEXTAREAにはID属性とNAME属性を両方つけています。 そのため、名称はID属性とNAME属性の両方の制限に縛られます。
ID : /[A-Za-z][-.:\w]*/にマッチするもの、大文字小文字を区別する NAME: CDATA、大文字小文字を区別する(HTML4), NMTOKEN(XHTML1.0)
MireilleがHTMLとして出力する時には基本的に英大文字は使いません。
また%INや%CKでkeyが英大文字から始まるものは内部処理用です。 FORMから引数を取得する際も英大文字からはじまるものは読み込みません。
簡単に調べてみましたが、重いかもしれません。 原因は投稿フォームや記事表示にevalを使っているからでも、LogDir方式だからでも、 アイコンリストが肥大化しているからでもなく、(これらは思ったよりも軽い) 連発しているuse群のようで、特にuse Fcntlが重い模様・・・ 実際にコメントアウトすると、(Fcntlだけ外すとエラーになるのでuse Strictも外す) 新規投稿フォームの表示が約1CPU秒から約0.5CPU秒になりました。
ちなみにFcntlが影響を与えるのはsysopen関数とflock関数を使っているところです。 (結局Fcntlは外してしまいました) (それでもsylpheedには勝てません) (多少重くてもHTTP転送の負荷で無視できるだろう、と)
そうそう、HTMLは重いと思います。 短い記事が多いと、HTML全体のバイト数が記事本文のバイト数の倍になる、ということもあるようです。 いわゆるシンプルビューは少なくともv1.3までは実装しません。 (やっぱりevalの負荷も大きそう。。) (それでもローカルのHTML解析-表示のラグで消えますけど) (とある方からダメだしを受けたので、1.2.7において、多少HTMLを軽くしました。)
これは思ったよりも重くありません。 本来の記事表示よりも軽いくらいですね。(アイコン700個の場合でも)
# EUC-JP文字 [\x00-\x7F \x8E\x8F \xA1-\xFC-\xFE] # SJIS文字 [\x00-\x7F-\x8E\x8F\x90-\xA1-\xFC ]
判定用としては、「空(EUC:\xb6\xf5 SJIS:\x8b\xf3」よりも、 「改(EUC:\xb2\xfe SJIS:\x89\xfc)」の方が適任かな? <- EUCの「空(\x8bf3)」は、 SJIS文書内で「半角カタカナの"カ"+外字の1byte目」として現れるかもしれないからと、 この文字だけでは判定してくれないことがある。。
意識して書くようにしているので世の中でもコメントが多いほうではないでしょうか・・・。 r1.2.2.17のcore.cgiではコメントだけで19KBあるようです(ぉ。 まぁ、そのおかげで1年以上時々ブランクあけながらも修正できたわけですけどね。 コメントがなかったら絶対内容忘れていますww ちなみにコメントが他の場所と比べて明らかに少ないところは、あまり変更していないところです。 (変更しない→コメント書かない→忘れて変更できない→コメント書けない・・・)
あと=item〜=cutという所が結構ありますが、POD文書ではないです。 あくまで複数行にわたるコメントとして使っているのであって、それ以上でも以下でもありません。
こう見えて一応やってます、いちおう0.cgiの2行目がそれで、 「スレッド番号:記事内容のCRC32:返信番号」 を保存し、それと新たに来た投稿とを比べることによって行っています。
Mireilleでは面倒なので基本的にタグの省略、属性引用符の省略などには対応していません。 また、引用符は基本的に " を想定しています。 ひねった方法で書くと、処理を通した時に、タグの構成が崩れるかもしれません。
CSS2ではこれによって
INPUT.submitover → INPUT[type="submit"]:hover
などとできるのだけど、IE6でも対応していないの。 今でも IE5=behavior/N6=属性セレクタ でいける? (面倒すぎて事実上いけないようなので諦めました)
Marldiaの表情アイコンとの互換性を保つ目的で、
マッチングを/^\s*([^#]+(?:#\d+)?)\s*\#\s*(.+)$/で行っているため、
「hoe.png#uso#800」は「<OPTION value="hoe.png#uso">800</OPTION>」になりますが、
「hoe.png#777#slot」は「<OPTION value="hoe.png#777">slot</OPTION>」になります。
主に修正時に、記事を更新したことがわかるようにします。
maxChildrenでなく、maxChildsになっているのは仕様です。 「ChildArticles」略して「Childs」なんです。
「lockThread = (all| (revise|delete).. )」 スレッドをロックします。 管理パスワードか、親記事のパスワードを使って、 ロックしたいスレッドに返信するとロックできます オプションを指定しない場合は、そのスレッドに対する返信がロックされます。
「lockArticle」コマンドで記事をロックできます。
パスワードかコマンドで指定された元文字列を、CRC32->Crypt->CRC32としてからログに保存し、 表示時にまたCRC32やCryptしたりして表示します。 総当り対策のため、r1.2.9.20から表示結果には名前の情報が使われるようになりました。 現行では表示結果の署名から元の文字列を推測するのは、たとえ総当りを使っても無理・・・のはず。
指定した文字列が本文含まれる場合はじきます。 ただ、文字参照を使ったりで回避できるのはご愛嬌。
隠し機能として$CF{'itemsCheckingNGWords'}でチェックする項目を決められます。
ISO8601やらRFC822やらRFC2822やらと、日時に関する取り決めはいくつかあります。
現在の“標準”は Combinations of date and time of day として、 ISO 8601の§5.4で定義されたもののようです。 形式は「1970-01-01T00:09:00+09:00」となります。(UNIXepochの時刻を表す場合) 同じものが XML Schema Part 2: Datatypes でも dateTime として定義されています。
HTTPで主に使われるのはこれと異なり、RFC822っぽいもの、です。 「Thu, 01 Jan 1970 09:00:00 GMT」 実際はRFC1123の形式でやり取りされている・・・みたいです。 HTTP関係は規格が定まる前に好き勝手やっていたものなので、色々と難しいみたい。 Last-Modifiedはこの形式でやり取りする模様。
Cookieでexpiresの値として使う形式はまた異なります。 「Thu, 01-Jan-1970 09:00:00 GMT」 と、微妙に上の形式と違います。 CookieもNetscape社が独自に実装し、それを他社が真似た物なのです。 ≪http://www.netscape.com/newsref/std/cookie_spec.html≫ 別にちゃんとRFCでCookieが仕様として策定されているのですが、黙殺されています。
環境変数のTZは日本だと普通は JST-9 でよいとされています。 "set TZ=JST-9" / "$ENV{'TZ'}='JST-9';" タイムゾーンをあらわす文字列は多々存在し、日本時間を表すものとして。 「JST-9」「I」「V」「+0900」「+0900 (JST)」「+09:00」 などなど、Iは-9時間、Vは+9時間を表すようですが、 悲しいかな+/-が混同されたようであったも参考程度にしかならないとか。 数字で書く方では基本的に日本は + です。 「JST-9」が - なのは、日本時間から-9時間すると協定世界時になる、との意とか。 ≪http://www.microsoft.com/JAPAN/developer/library/vccore/_crt__tzset.htm≫
JSTの他にESTとかPSTとかあるけど、LT(LunaTime)やMT(MarsTime)なんてあるのね;)
タイムゾーンをあらわすのに+/-どちらを使うかは慎重にしましょうと。 基本的には標準子午線より東側において、環境変数では - 、W3C系では + のようです。
非WindowsなブラウザはMac OS X Browser Comparisonのコメントを引用しています。 ≪http://www.hut.fi/u/hsivonen/os-x-browsers.html≫
世の中のサーバーには3種類ある。 suEXECが有効になっているApache、suEXECが無効になっているApache、そしてその他。
≪http://msdn.microsoft.com/library/en-us/dnie60/html/cssenhancements.asp≫
HTML,CSSに関する的確な情報がたくさんあります。 HTML,CSSを一通り学びたい場合はここを見るだけで事足りてしまいます。
≪http://www.tg.rim.or.jp/~hexane/ach/≫
HTMLの検証に際し利用しました。 初めてチェックすると、ほとんどの人がショックを受けることでしょう。
≪http://openlab.ring.gr.jp/k16/htmllint/≫
IconPreviewはここからです、便利なので頂きました。 新しい投稿があると教えてくれる〜もここのを見て、です。 他にもいろいろと参考にしています。 管理機能でここを見習う点は数多くあります。
≪http://www.artemis.ac/arrange/≫
ツッコミメインなHTML解説サイト、にわたしは見えました。 「HTML 4.01 のみを、純粋に学問的な興味から研究」しているそうです。 HTMLの構成に際して参考にしました。
≪http://www.ne.jp/asahi/minazuki/bakera/html/hatomaru≫
漢字コード変換用のライブラリです。 Mireille本体では横着しているので使っていません。 管理CGIでは一部を切り出して使っています。
≪http://www.srekcah.org/jcode/≫
jcode.plの後継でPerl5用PerlModuleとなっています。 jcode.plの機能にUnicodeを扱う機能が追加されています。
≪http://openlab.ring.gr.jp/Jcode/index-j.html≫
なにはともあれ日本のCGI/Perl界に与えた影響は少なくはないはずです。 わたし個人では特にYYBOARD,YYCHATにはお世話になりました。 きわめてとっつき易いCGIが多いです。
URI自動リンク機能をつけるに際し参考にしました。 Perlの正規表現に関してとても有用な情報があります。
≪http://www.din.or.jp/~ohzaki/perl.htm≫
HTML規格の策定を行う団体、W3CによるHTML検証サービスです。 Another HTML-lintよりチェック項目は少なめです。
HTML部、Perl部ともに時々リファレンス代わりにしました。 なかなか載っていて便利です。
≪http://tohoho.wakusei.ne.jp/≫
LastPostはここのealisの真似です。 またRev:1.2.2の記事ナビは神乃さんのものベースに作りました。 最近ではPHPに移ってあるべき姿というものを模索していらっしゃるようです。
retroさんにはMireilleでつまづく所No.1と思われるアイコン設定の解説を書いていただきました。 他にもMireilleの解説の不備な点を多数してもらいました。 ちなみに、retroさんのサイト自体はRagnarkOnline系雑談サイトです。
≪http://www10.plala.or.jp/ryokufuudou/kijindou.html≫
Mireilleを作りこむにあたって、半ばオンサイト顧客として、数々の有用なアドバイスを頂きました。 特に管理CGIは西名さんに言われなければ、かなり貧弱なものになっていたでしょう。 現在の初期状態のデザインも西名さんのデザインをベースにしています。 ちなみに、西名さんのサイト自体はKey系CGサイトでした。
imac零式さん、幽霊猫さん、西名さん、神乃さん、Bさん、TAKE4さん、かろかろさん、xbomさん、retroさん、秋宗さん (ある程度ツッコミを入れるとここに晒されるのですw)
Copyright (c) 2001-2003 NARUSE,Yui (Airemix). All rights reserved.