このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

UGC シェアウェア/フリーウェア アワード

発言者:田中求之
( Date Tuesday, February 11, 1997 14:21:40 )


Mac Expo 東京にむけて、Mac User Group Conference が、上記の企画を
行っています。詳しいことは、以下のページをご覧ください。

で、なんでこんなことを紹介したかというと、Web の投票システム( CGI )を
私が作って、私のサーバー(このサーバーと同じマシン上で port 8080 で動か
しているほう)で運用しているからなのでした。

時間がなかったので、かなり安易な方法で構築した CGI になってますが、興味の
ある方があれば、おおまかな処理方法や仕掛けを解説します。

投票してみてね。



→  UGCシェアウェア/フリーウェアアワード投票所

柾木 博行 さんからのコメント
( Wednesday, February 12, 1997 16:15:53 )

田中先生、さっそく投票してきました。
基本的に、投票のところのスクリプトは分かる感じがしましたが、重複して登録し
ないようにする仕掛けはどうやって処理しているのですか?
また、投票されて送られてきたデータは、どうやってデータベース化しているの
でしょうか?

田中求之 さんからのコメント
( Wednesday, February 12, 1997 18:17:41 )

重複して登録されたかどうかは、最終的には、手動でチェックするようになってます。
投票ボタンを2度続けて押せないとか、ページはキャッシュされないようにする
といった手段は講じていますが、投票の記録をサーバーに残してありますので、
最終集計の際に、これをチェックすることになります。

基本的には、みなさんのモラルを信頼したシステムになっていますので、厳密な
チェックは投票処理の時点では行っていません(厳密なチェックを行うことに
よって速度が低下するのは避けたいと考えたためです)。


投票されたデータの管理については、管理が簡単で、ディスククラッシュなどの最悪の
事態の場合でもなんとかデータだけは救える可能性があるということで、単純なテキスト
ファイルを利用する方法を取っています。

つまり、ソフトウェアと同じ名前のテキストファイルを作っておいて、そのファイルに
投票数を書き込んである、という非常にシンプルなものです。

たとえば Jedit に投票したとすると、サーバー側にある Jedit という名前の
テキストファイルを開いて、そこに書いてある数値に1を加える、という処理を
行っています。候補にないソフトを投票された時には、あらたにそのソフトと
同じ名前のファイルを作って、そこに1を書き込む、という仕掛けになっています。

ですから、集計の際には、各ファイルに書かれている数値を読み出していけば、
そのソフトの得票数がわかります。

データベースソフト、たとえばファイルメーカーを使うことも考えたのですが、
システムが大がかりになることと、投票の際のレスポンスを少しでも早くしたかった
ので、上記のような方法を使っています。

あと、リストサーバー(ListSTAR)を使って、定期的に、その時点の集計結果
を責任者にメールするようになってます( ListSTAR は、定期的にスクリプトを
実行してその結果によって動作する、という仕掛けが使えるので)。

大西恒樹 さんからのコメント
( Tuesday, March 18, 1997 21:37:22 )

ちょうど、集計スクリプトを考えていて、ここを掘り出してきました。
でも上の投票所はもう終わっていたので、どんな仕組かわかりません。
お話しを伺う限りでは、投票対象ごとにファイルに書き込んでいって、
集計は後で(手作業で?)読み出すような感じですが。実は、私が考えて
いるのは何と152個のラジオボックスなのです。(152個から1個を選ぶ...)
スクリプトでページを仕立てて、なんてことはとてもじゃないがやってられ
ません。あらかじめ.htmlファイルを作っておいて、valueでsearchして、その
数文字あとの数字を書き換えるなんてことができないものでしょうか?クラスが
文字列だから難しい気がします。数字のかわりに星印を書き込んでいくとか...
どなたか良い知恵があったら教えてください。Tanaka's Osaxの用語説明と
長いあいだニラメっこしていましたが、何も浮かびません。よろしくお願いします。

大西恒樹 さんからのコメント
( Wednesday, March 19, 1997 09:28:57 )

度々すみません。
あらかじめ152個のテーブル状の.htmlファイルとそこにラジオボタンを用意して、
ラジオボタンのvalueをkeyにしてTanaka's Osaxのgetlinesで行を指定して、
行の最後に*印かなんかを加えていくというのはできませんでしょうか?
試行錯誤しているのですが、なかなかできなくて。(特にクラスと属性の
扱いが怪しくて)

田中求之 さんからのコメント
( Wednesday, March 19, 1997 13:42:55 )

えっと、投票の集計方法(集計結果を表示するページ)の話ですよね?

HTML うんぬんというのが、何のページのことなのかわからないので、確認です。

大西 恒樹 さんからのコメント
( Wednesday, March 19, 1997 16:00:56 )

あ、すみません、妙な書き方をして。はい、やろうとしていることは、集計ページと
投票ページを一緒にして、投票がある度にどんどん更新していく方法を探して
います。今説明を書いていたのですが、自分でもわけのわからない文章に
なってしまったので質問を変えさせてください。

{"霞ヶ関0001","0","丸ノ内0002","1"} というmyListというリストがあるとします。
これの霞ヶ関を含むitemの次のitemの数字"0"に1を足したいのですが、

set myNum to offset in list myList of "霞ヶ関" with returning next item without exact match
set myList to ACME replace myNum in myList with (myNum + 1)

とすると、
{"霞ヶ関1111","1","丸ノ内1112","1"}が返ってきます。これを、なんとか
{"霞ヶ関0000","1","丸ノ内0002","1"}を返す方法はないでしょうか?

大変わがままな質問で申し訳ありませんが、よろしくお願いします。


 

大西 恒樹 さんからのコメント
( Wednesday, March 19, 1997 17:12:58 )

お騒がせして大変申し訳ございません。
copy (myNum+1) as stringでなんとかできました。
一人で右往左往してほんとに恥ずかしい。