雑記帳 2004年 2月第3週

2004/02/15 Sun.

Microsoft」のWindowsのソース流出について、地元の連中で誤解してる人がいるんでちょっとばかり補足。
ソース自体は「Microsoft」から流れ出たワケではありませんよ?ビル・ゲイツの自演とか言ってる連中は勘違い君。
もともとは「Mainsoft Corporation」に対して提供されたもの。特定の条件下でしかソースの公開は行われない。
Windows版のソフトウェアをUnixに移植するためにソース提供を受けたらしく、開発もUnix系マシンで行われていたとか。
ソース内には「Mainsoft Corporation」のEyal Alaluf副社長の名前も。この会社、今後は平気なんかい?
このソースの譲渡が行われたのは4年前の2000年とされている。「Windows XPのソースは無い」というのは事実らしい。

さて、こんな内容のは専門のサイトに丸投げしますか。どうせソースが手に入らないんじゃ、興味もイマイチ。
今日はフリーの掲示板CGIを調べて回ってます。管理者にもゲストにとっても、機能的にどんなものがあれば便利なのか。
最低限必要なものも含めて、色々考えてみる。

  1. 記事削除機能
  2. Cookie利用による情報の保存
  3. URLの自動リンク化
  4. 管理者専用メニュー(いちいちログファイルを操作しないでも、ブラウザ経由で全情報を取得・操作可能にする)
  5. ファイルアップローダー兼用
  6. レス番指定アンカーによるリンク(>>774みたいな「2ch BBS」っぽい表記)
  7. アイコン掲示板とか(絶対に実装しませんが)
  8. タグ利用可、不可の切り替え機能(特定のタグくらいは利用可にする?)
  9. ページ遷移(一回の表示は最大xx件までとして、次ページへのリンクを貼る)
  10. 掲示板に書き込まれたら管理者にメールで通知

頭はあまり良くないんで、他にどんなものがあるか思い浮かばない。
知らず知らずのうちに使ってる機能とかも多いんだろうな。やはり「したらば」や「2ch BBS」は非常に高性能だな。
「l50」とか「201-300」のように範囲指定で閲覧できるようなのは便利。これくらいは実装したいかも。CGIで実現可能か?
そもそも、自分の技術をいきなり上回るようなものに手を出すってのが、すでに間違いなのかね。
でも、それを長い間しなかったせいで知識やら発想やらが伸び悩んでたワケだし。最近は色々学んで面白くなってきたかも。
普段利用してるサイトや掲示板群とかからも、まだまだ学べることが多いし。デザイン性にしても機能性にしても。
こういうのが仕事に直結するとは思えないけど(ってかBREWやるだろうし)、趣味の向上というかそんな感じで。

……何を書いてるのかわからなくなってきたんで、今日はこの辺で。

2004/02/16 Mon.

気が付けば2月も半分終わった。
今日は職場のネットワーク状況が良くなかったため、作業にあれこれと弊害が出まくりだった。
何が原因だかわからないけど、どうせ別フロアの連中がnyでも立ち上げていたんだろう。ポート閉じようぜー。
帯域の殆どを持っていかれていたせいか、FTP繋ぐのにも一苦労。ネットも重いので画像表示もオフ。
BREWについてもう少し調べようと思ったのに、全然できなかった。マジで勘弁。

BBS」の改良もそこそこ進んでる。って言っても、空き時間に少しずつしか手を入れられないけど。
ログから一行取り込んで配列に渡す時の、末尾の改行コードの存在をすっかり忘れていたんで、
連続投稿を禁止するという簡単なはずの作業にえらい時間かかってしまった。未熟すぎです、自分。
そんなややこしいものでもなく、ログの最新のデータを持ってきて、書き込む際にその内容と比較するっていう簡単なもの。
あと、ログの形式とかを変更。今までは古いデータがログの上段にあったのを、最新のデータを上段に持ってくるようにした。
別に以前の状態でも弊害は無いんだけど、ログを開いた瞬間に最新のデータが確認できないってのも問題かなと。
おかげで、ログを書き込むあたりのソースが随分と変わった。でも、こっちの方がいいんだろうな。
ってか、URL自動リンクのバグもさっさと直さなければ。しかし、都合のいいロジックが思い浮かばない……。
要は「Project junmix」関連のページへのリンクと、その他のページへのリンクでスタイルシートを切り替えたい。
雑記読んでくれてる人はわかると思うけど、リンクが青くなってたり赤くなってたりするアレ関係。
URLを書き込んでからソースを見ると、何がおかしいかってのはわかると思う。誰かロジックのアイディアを下されー。

そろそろ家のCRTディスプレイが寿命。画面が赤くなったりちらついたり、すごいイライラする。目にも悪そうだし。
そう言えば、今月の最初に「液晶ディスプレイを買う」みたいな事を明言した記憶が。来週か再来週にでも買うか。
ってか、通販で買っちゃおうかな。どのディスプレイを買うかは決まってるんだし。予算5万円。
今から通販のサイトでも巡ってみようかな。勢いでそのまま購入しちゃっても問題無いっしょ。
このCRTも何年間使ったんだろうか。もともと親父が使ってたものだし、8年くらいは経ちそうだ。
ってか、別に場所さえ取らなければCRTでも構わないんだよね。目とディスプレイが近いのがイヤなだけだし。
何かとLCDの方が目にも優しいらしいし、いい加減本気になって検討しよう。

2004/02/17 Tue.

今日は一日中「BBS」のバグとの闘い。おぉ、PGっぽい生活になってきましたよ。中身が伴ってないけど。
変更点、というか追加点は以下の三つ。

  1. 一回に表示するログの件数を、管理者によって設定可能とした。
  2. ログファイルが存在しない時などのエラー処理を追加。サーバーがUNIXかどうかで処理手順を変更。
  3. サーバーがUNIXであれば、ログを表示すると同時にログファイルのファイルサイズを表示。

こんなもんかと思うでしょうけど、駆け出しPGにはまだキツいんです。まぁPerlは趣味でしか使いませんから。
条件文が多重ネストになってくると、もう考えるのがメンドくさくなってきます。
最初の頃は思いつくがままにコーディングしていったんで、もうロジックもソースもかなりメチャクチャ。
せめて、コメントの割合くらいは100%にしていくことにします。ってか、そうじゃないとデバッグできない……。
あと、mkdir()を使ったファイルロックのサブルーチンを追加しようと思ってます。
「着メロjunmix」のテキストカウンターとかは自作なんだけど、当時は頻繁にカウンターログが飛んでました。
昨日まではカウンターが3070000だったのに、翌日見ると300とか。一回飛んで、また動いたってことなんですが。
同時にログファイルへのアクセスが集中すると、ロジックが正確でないカウンターはこうなってしまうワケです。
あとは「BBS」で使ってる<DL><DT><DD>タグの修正もした。普通こんなタグ使わないよなぁ。
うまい具合に段落とかつけて綺麗に表示できないかなと思ってて、とりあえず代表例として「2ch BBS」を見てみる。
最初は<TABLE>で揃えようと思ったんだけど、IEが重くなりそうだし。どんなもんかと思って見てみたら。
……見事なまでに<DL><DT><DD>タグを使ってるワケなんですよ。ちょっと驚き。
初めて見た時にはこのタグの存在知らなかったんで、いちいちタグ辞典で調べちゃいました。
ってか、手元にあるこのタグ辞典、ちと古すぎ。99年発行とか書いてあるし。今じゃ推奨されないタグも載ってます。
タグ辞典なんて余程凝ったものを作らない限り不要だと思うんだけど、どうしよっかな。いちおう古本探してみるか。
今ふと気になって「したらば」も見てみた。<DL><DT><DD>タグ使ってますね。普通に標準だったりする?

そう言えば、ちょい前までIEのバグで「スクロールバーのスクロール範囲がおかしくなる」ってのがあったと思うんだけど、
いつの間にか直ってるな。知らない間に「Windows Update」で修正パッチでも当てたのかな。
ついでに、Windows関連で下らないテクニックでも。
先日にタスクマネージャ関連の話を書きました。「Shift」「Alt」「Ctrl」同時押下するやつ。
でも、「Shift」「Ctrl」「Esc」の同時押下でタスクマネージャ起動するのね……。SetDefaultValues()の意味無いじゃん。
左手だけでタスクマネージャ立ち上がるのは結構便利かも。スタートバーの右クリックとかはメンドいんでね。
あと何かあったかなぁ。Javascriptを使ったもので、普段から良く使うものでも。
例えば、何でもいいんでフォルダを開いて、サイズとか位置とか変更して閉じる。また開くと変更前のになってる時がある。
これって結構イヤじゃないっすか。いちいち細かく調整したのにサイズも位置もリセットされたりすると。
自分はJavascriptのお気に入りを作って、それでウィンドウサイズとかを制御してます。
何でもいいんでフォルダ開いて下さい。で、アドレスバーに次のソースを打ち込んでリターンしてみて下さい。

javascript:window.moveTo(0, 0); window.resizeTo(1024, 768);

この例だと、フォルダの位置が画面左上に移動し、ウィンドウサイズが1024x768になります。
こういうスクリプトをいくつか作ってお気に入りに入れておくと便利。
いつも決まったフォルダを開いて作業する時とかに、フォルダの場所とかが綺麗に揃ってると作業しやすいですよ。
ってか、Javascript知ってる人なら普段から使ってますよね……。無駄知識でした。
こういう下らない事にしか時間を費やせない自分、激しく逝ってよし。

2016/01/24 追記
IEなら動くんだけど、まあChromeとかだと、そりゃ動かないよね。

2004/02/18 Wed.

ようやく「BBS」がまともな形になってきました。
今日の変更点は以下の通り。

  1. メインルーチンの書き直しによる、処理順序の最適化。
  2. 管理者用メニューへのログインフォーム、及び専用メニューの作成(現在はまだログファイルの初期化のみ)。
  3. ログ参照ページと書き込みフォームの分離。

この程度の修正でも、今日は随分と知識が増えました。ロジックを思いつく柔軟な発想ができる頭が欲しい今日この頃。
配列やハッシュの使い方が上手くなかったせいか、えらい量の修正点が出てきましたよ。多すぎ。
フォームから標準入力に渡された値を配列に突っ込み、foreach()文の中でsplit()で分割するまでは今までと同じなんですが、
foreach()の中で以下の処理に目からウロコだったり。

foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    (中略)
    $FORM{"$name"} = $value;
    (後略)
}

こういう都合のいい使い方があったとは……。今までの発想の無さにショック。ってか、逆に感激。
わかる人から見れば当たり前の処理なのかもしれませんが、今までの自分はいちいちグローバル変数を用意してたり。
で、いちいち値を受け取るたびにその変数に放り込んで処理してたんですよ。今思えば、あれはメンドかった。
その辺を踏まえた上でフリーのBBSのソースを読んでみると、おぉーって感じ。今までの俺がダメなだけですか、そうですか。
ハッシュが便利だということを改めて再確認。もうちょっと上手い具合に使えるといいんだけど。
……ここまで書いてて気が付いた。$ENV{"QUERY_STRING"}とかって普通に使ってたじゃん。環境変数ハッシュ%ENV。
答えは目の前にあったのねー。自分、文盲ですか。観察眼も身に付けたくなってきました。

自分はコーディングする時はPerlもHTMLも「TeraPad」ってのを使ってます。
HTMLだけとかならブラウザに放り込めば確認できるからいいんですけど、Perlとか確認できないのがメンドかったり。
そういや何で自宅のマシンにはPerl入れてないんだ。いちいちFTPでアップしてから確認してたからか。
思い立ったが吉日、とりあえず「Activestate」からPerl落としました。最新版がVer 5.8.3 Build 809ですか。
自分はそこまでモジュール使いまくったりしてないんで、Ver 5.004以上なら問題なし。ってか、違いがよくわからん。
JDK(Java Development Kit)とかもそうだけど、全部の変更点なんてとても確認してらんないよ。やる気Nothingですな。
そのうち痛い目に遭うことでしょう。それも、そう遠くないうちに。やっぱり根っからの不真面目な人間ですわ……。

2004/02/19 Thu.

いきなりなんですが、叫ばせて下さい。

                        、__人__人__人_人__人_人__人_人_,
                       _,ノ                   し
                       丿 l  !      l            n  (
            、ミ`´ ´ " '丶  ) -┼十'つ  -┼‐        |.|   (
             >、"",>ィ, ヽ ゝ   |    ー‐、 | '⌒ゝ ー‐、  |!   (´
             !≧、 ≦ |rヽ!  )   !    ー' l  、_,  ー'   o  (
            |/ _、~~ lL/l  ⌒)                    (´
   r‐、nn、      「⊆三〕/∨ヽ   ⌒ヽ'⌒ヽ'⌒ヽ'⌒ヽ'⌒ヽ'⌒ヽ'⌒ヽ'⌒
.   |.卩」⊂}    ,.-‐ゝニイ  /  :トn、.._         _
   ! ノ r '  /| |/,.へ/`ー7/\ | ||  >、     r;「r,'ニヽ
   |.  !  /ヽ | ||コ |====| E二||コ ./  ∧    ヽ)L「r' 〉
    |   | /ヽ  | ||__|__|___||  |  〃∧    ノ` 、ン
.   |    l/    | |  f"ニニニ"l   |┐ l  ノ  ゝ /  /
  │   :ト、     |.|  L|.  │|   |.」  l  / 'y'   /
   l       ヽ./ |_|    ∠/     |   ト、/  ′   ./
   ヽ    /   「 ̄「 ̄ ̄| ̄ ̄ ̄ヾ=| \    /

やったっ……!やったっ……!やったっ……!
ページ遷移のロジックがわかった……!
長かった……!これから先……
ようやく理解したロジックとともに歩むPerlがオレの未来っ……!
ページ遷移……!

今まで突っかかっていた最大の関門、ページ遷移のロジックについてようやく理解できました。
これが理解できなかったために、一体どれだけの時間をPerlに費やしたんだろうか……。
まぁロジックなんで、別にPerlに限ったことじゃないんですけど。これで「BBS」もまともになってきた。
管理画面でログを参照して、各チェックボックスで選択して削除するという機能も実現可能になったかな。
Perlのソースが一部気に食わないけど、生成されたHTMLのソースを最重要視するので、これはしょうがないということで。
完成してみれば、そんなに難しいことしてるワケでもないんだけどね……。今日のキーとなるソースはこんなんです。

if ($FORM{"page"} eq "") {
    $page = 1;
} else {
    $page = $FORM{"page"};
}
$start = ($page - 1) * $view;
$end = ($page * $view) - 1;
$next = $page + 1;
$prev = $page - 1;
@line = @line[$start .. $end];

確かに考えてみれば、全くその通りだよな。でも、そのアイディアに思いつくかどうかがポイントか。
フリーのBBSのソースにでも目を通してみるかな。考え方は十人十色なので、もっといいロジックがあるかも。
例えばログの配列への突っ込み方とか。頭の中にもう一つロジックあるけど、ベンチマークでもしないと速さが比較できない。
この場合の例だと、ログを全部突っ込んだ配列をそのページで参照する部分だけに置き換えてるけど、
いちいち置き換えしないで、全部突っ込んだ状態で参照したい部分だけを引っ張ってくるとか。どっちがいいんだろう。
何つーか、もう初心者丸出しのPGの雑記になってるけど、そこはご勘弁を。必死すぎます。
やっぱり昨日ようやく理解したハッシュを使えるようになったのが大きいか。変数引っ張り放題。
あとは「BBS」下部のフォームとかの整理もしなきゃ。見た目がよろしくない。
<FORM>タグとか使ってると、思い通りのレイアウトにならないのがキツい。微妙にズレるのが嫌い。何とかするかー。

そういや変数で思い出したけど、「gadult」は変数の概念をさっぱり理解できないらしい。数学得意なはずなんだけど。
まぁ数学できる人がPGの考え方をできるかといえば、そうじゃないだろうし。俺はその逆。数学ダメすぎ。
$num = $num + 1;ってのがすでにわからんらしいし。適正というか思考回路というか。向き不向きがある世界です。
……書いてて思った。自分にこの世界って合ってるのかな。PGの適正があるかなんて分析してみたことも無いし。
そもそも自分がこの業界を選んだのは興味本位だし。キーボード叩いてりゃ幸せな人間ですから。

あと、自分のサイトを巡回してて思った。「着メロjunmix」からのデータの移行が終わってないじゃん。
vodafone」関連だけは終えたけど、「DoCoMo」関連はさっぱり進んでない。ってか量が多すぎ。
さっさと全部のデータを移しちゃって、「着メロjunmix」からテキスト系の部分だけは切り離さないといけない。
サーバーの容量もあまり多くないしね。ってか「@nifty」の容量少ないって。何ですか10MBって。
その容量の中で90%以上占めてるのが壁紙だし。別アカウントのサーバーにでも移しちゃうかな。
infoseek」とかは無料でも50MBもあるのにね。有料にすると300MBだっけ。ウェブコンテンツだけじゃ使い切れんよ。
それくらい容量あれば、携帯の待ち受けFlashとかも作ってもいいんだけどな。505iシリーズのみしか使えないっぽいけど。
もう携帯の知識も古くなってしまったなー。最近のはさっぱり調べてないし。ってか、携帯調べるよりもPerl書くほうが面白い。
いい加減に余分なコンテンツは切り落として、コンパクトにまとめるかな。

2004/02/20 Fri.

久々に寝過ごして、朝食抜きだった……。週末なのにやる気低下。昨日は午前1時には寝たはずなんだが。
BBS」の改装が進む進む。予定してた機能の実現がかなり容易になった。今日も色々と改造。

  • 投稿時に一定の文字量を超えると、エラーとして処理を落とす。
  • 新規サブルーチンの追加による、環境変数周辺の整理。
  • 管理者用メニューでのブラウザ上からの過去ログ等編集・修正(改竄?)機能。

最後の項目はまだ未完成だけど、頭の中にロジックが8割ほど出来上がってるんで、すぐに完成するかも。
ようやく100%自作のBBSが出来上がる……。長かったなーホントに。かなり勉強になった。
発想の転換というか柔軟性というか。こういう思考がPGに求められるものなのか。まだまだ適正職とは言えないっぽい。
結構似たような処理を走らせてる部分もあるし、多少はソースサイズを減らせるか。現時点で62KBくらい。
コメント率100%ってのが大きいか。でも、消すと後から保守・改造がやりにくくなるし、ここは我慢で。
そういや、今まで散々悩んできた環境変数や標準入力からのフォームのデータの受け取りについてなんだけど、
何で自分はモジュールを使わなかったんだろうか。普通に存在そのものを忘れてました。CGI.pm使えば早かったな。
一般的に言うBBSってのは、他にどんな機能があれば使いやすいものなんだろうか。こうなったらとことん追求。
投稿者によるログ削除はつけようかどうしようか迷い中。フォームが多くなりすぎて、見た目がよろしくない。
あぁ、デザインセンスがない俺がダメなだけですか、そうですか。精進します。
ログの範囲指定による表示はできるかも。「2ch BBS」っぽく言うと「101-200」みたいな書き方。
ただ、環境変数使いすぎるのもイマイチだよな。ただでさえページ遷移だけでも環境変数4つくらい使ってるのに。
あまり複雑にしても、管理がメンドくなりそうな気もするし。頃合いを見て「gadult」のFTPにでもアップして、様子を見てみるか。
あと、メソッドがGETだと環境変数の取得が最大で8KBまでしかできないことを今日知った。これは結構重要な項目か。
POSTの場合だと、一応10KB制限をつけてある。10KBもあるようなコピペもあまり無いと思うけどね。

そうそう、さっさとPerlとサーバーアプリを入れようと思ってたんだ。すっかり忘れてた。
いちいちFTPでアップしてから確認って作業、やっぱりかなりメンドいかも。
職場で使ってるサーバーアプリ使ったら、随分と確認の手間が省けたし。ただ、UNIXじゃないからchmodが効かない罠。
経路障害とか起こった時にも便利だろうし、今日はその辺のアプリを入れてから寝るとしますか。

2004/02/21 Sat.

何にもしない一日だったなぁ。せっかくの休日を無為にした感じが。
家にあるCDを片っ端からリッピングしていったくらいか。またHDDの容量が少なくなるっつーに。
昔から聞いてたものにTRFがある。久々に聞いて懐かしい。けど、どうやらシングルをコンプしていなかった模様。
中古CDも大量買いするかな。普段あまり金使わないし、年がら年中聞いてる音楽にくらい金を費やしてもいいっしょ。
千聖さんの昔のCDとかって、もうどこでも見かけなくなったな。ずっと探してるんだけど。VENUSとか聞きたい。

昨日の雑記で書いたPerlとサーバーアプリのインストール、ついさっきやりましたよ。
サーバーアプリも何にしようか迷ったけど、手軽に済ますために「AN HTTPD」ってのにしました。
ローカルIPは固定してあるんで、グローバルIPと関連付ければWWWに公開できるんだけど、それはまたの機会という事で。
完全に容量がヤバくなったり、内容があまりにアレなものを公開するときとかにでも使いますか。
あ、でも自宅サーバーで公開しちゃえば、著作権に引っかかったりするような色々な制約も無くなるワケですな。
幸いにも今日ネットでその辺の知識がある程度増えたんで、その内実験。FTPにでもしちゃうかね。
話があちこちに飛んでるけど、とりあえずローカルでのPerlの実行環境はできました。やっぱ速いです。かなり速いです。
ベンチマークを取ると、実際に使用するサーバーで出したベンチマークの結果とは著しく異なりますが。
まともなベンチマークの方法じゃないですけど。benchmark.pmの使い方くらい覚えなければ。これから使用頻度上がるし。
やっぱ軽くて速くてを目指す以上、細かい部分でもテストしていかなきゃいかんです。いや、速さよりも負荷の確認かな。
実際に自分が書いたベンチマークでCGI走らせると、処理にかかる時間は0.015CPU秒とかなんで、速さは関係ないか。
この際、モジュールとかの使い方も色々覚えていくかー。ライブラリならjcode.plくらいは触るけど。でも中身見たことないな。

今ごろになって「2chブラウザ」を導入してみた。色々と種類がありすぎて、どれがいいのかよくわからん。
一時期「かちゅ~しゃ」は使ってたけど、もう更新されてないんだね。「kage」のおかげで残ってるようなもんか。
とりあえず以前触った経験があるというだけで「かちゅ~しゃ」を導入。そういや、これかなり重かった記憶が。
うわ、タスクマネージャ見たら30MBちかくメモリ食ってるし……。ブラウザとほとんど変わらん。
まぁ負担軽減に協力することにしよう。板に飛ばれると不便な事この上ないし。
さて、明日は何しようかなー。誰かボウリング行こうぜー。