第10回 基礎プログラミング II レポート課題
氏名:遠藤裕貴
学籍番号:c1090294
語学クラス:中国語
コース(系):政策マネ
1
A
pstoreとは、データベース専用のdirectoryのことであり、その中に限り、第三者に書き こみを可能にするものである。授業では、comment.rbというプログラムを作成してpstor eというものを学んだ。
実行するには、kterm上で、 %cd ~/public_html/rubycgiとし、このディレクトリ内に入る。
次に、mkdir pstoreとし、pstoreというディレクトリを作成する。また、作成したpstoreというディレクトリをチェンジモードする。
この中に、入力されたデータを出力してデータベースんデータをしまうものを作り、また、このデータベースは、pstoreの中に作られる。
この際データ名が、comment.dbとなる。 そして、%touch comment.dbでデータファイルを作成し、これも同じくチェンジモードする。
そして、 データベースにしまったプログラムをcomment.rbとする。(プログラムから
得られた値を機械が書きこむことができる) これをチェンジモードする。
すべてのファイルで%chmod o+w ×× というのも必要だが、comment.rbはRubyプログ
ラムなので、% chmod +x comment.rb も必要である。
2 プログラム問題
I るびちゃんねる
喋り場トップページ
http://roy/~c109029/advertise2/rubycgi/r2_cgi_best.html
喋り場 実際のページ
http://roy/~c109029/advertise2/rubycgi/best.rb
◯題名とその意図
「喋り場」という名で掲示板を作成した。トップページは本体ページに入場する
ためのものであり、CGIは用意していない。気軽に喋れる場として「喋り場」と
名付けた。名前とコメントを書き込め、名前を入力しなかった場合、「匿名」と
表示される。また、誹謗中傷があった場合にコメントを削除できるようにした。
削除キーを設定し、キーは管理人(自分)しか知らないので他人が勝手に削除する
のを防止している。削除キーは 7890 である。
◯ファイル本体
・r2_cgi_best.html トップページの解説
トップページには本体ページへの入場のリンクと自分のホームページへのリンク
と連絡先が記載した。また著作権についても記載した。
喋り場 トップページ
喋り場
入場
ホームページ
このプログラムは東北公益文科大学2009年度生遠藤裕貴が著作権を保有しています。
このプログラムの入手・実行・改変・再配布は、いずれも無料で自由に行なうことができます。
ただしこのプログラムを取り扱うことで生じたいかなる結果に対しても責任を負いません。
連絡先: c109029@e.koeki-u.ac.jp
・best.rb 本体ファイル
#!/usr/koeki/bin/ruby
$KCODE = 'e'
require 'cgi' #CGI変数を使う宣言
require 'pstore' #pstoreを使う宣言
require 'date' #日付表示するためにdateを使う宣言
cgi = CGI.new("html4") #CGI用のhashをつくり、HTML文書を使う
best = PStore.new("best1.db")
#best.dbという名でデータを作り、bestという変数で処理する
myprog = "best.rb" #CGI変数を受け取るプログラムを変数に置き換える
day = Date.today #投稿日を表示するために設ける変数
now = Time.now #投稿時間を表示するために設ける変数
print("Content-type: text/html; charset=EUC-JP\n\n")
print("\n")
print("\n")
print("喋り場\n")
print("\n")
#スタイルシートを使用
print("\n")
print("\n")
print("
\n")
print("
\n")
print("喋り場
\n")
print("
\n")
print("自由に書きこんで下さい。ただし、誹謗中傷は御遠慮下さい。その場合はコメントを削除します。
また、名前入力をしなかった場合匿名表示になります。
\n")
print("
\n")
print("
\n")
if cgi["toukou"] != "" && cgi["sakujo"] == "7890"
#コメント削除の場合
#投稿ナンバーが空白ではなくて、かつ削除キーが 7890 なら下記の処理
#をする
kesu = cgi["toukou"] #削除したい投稿ナンバーを変数kesuに代入する
t = kesu.to_i #kesuをhashのkeyであるtに代入する。すると、hash
#の特性上、同じkeyだった場合、最新のkeyで情報が更
#新されることを利用して投稿者名とコメントを以下の
#変数を用いて上書きする。
i = day #日付
h = now.hour #時
m = now.min #分
s = now.sec #秒
onamae = "管理人" #削除した人(管理人)
coment = "不適切なコメントのため削除しました。"
#削除したことを伝えるコメント
elsif cgi["nickname"] == ""
#投稿者の入力がなかった場合
onamae = "匿名" #投稿者名を"名無し"に指定する
t = Time.now.to_i #投稿ナンバー
i = day #日付
h = now.hour #時
m = now.min #分
s = now.sec #秒
coment = cgi["question"] #入力されたコメントを変数comentに代入
else #投稿者とコメントの入力があった場合
t = Time.now.to_i #投稿ナンバー
i = day #日付
h = now.hour #時
m = now.min #分
s = now.sec #秒
onamae = cgi["nickname"] #入力された投稿者名を変数onamaeに代入
coment = cgi["question"] #入力されたコメントを変数comentに代入
end
#入力されたデータの引出し、格納を行なう実行文
best.transaction do #pstoreで暗号化したデータファイル best.db を処理
#する
if best == nil #bestにデータが入ってなかった場合
best[t] = Hash.new #t(投稿ナンバー)をkeyとして、hashファイルbestを作成する
end
best[t] = [onamae,i,h,m,s,coment] #hashのvalueに上記のif文で代入し
#た変数を指定する
print("\n") #tagは1行に1人分のコメントを表示する
for time in best.roots.sort
if best[time][0] == "管理人" #名前が管理人だったときの実行文
#下記との違いは名前の表示欄に"さん"がない
printf("%d: %s: %s %d:%d:%d
\n",time,best[time][0],best[time][1],best[time][2],best[time][3],best[time][4])
printf("\n",best[time][5])
elsif best[time][5] != "" #コメントが空白ではないときの実行文
printf("%d: %sさん: %s %d:%d:%d
\n",time,best[time][0],best[time][1],best[time][2],best[time][3],best[time][4])
printf("\n",best[time][5])
end
end
print("
\n")
end
print("
\n")
printf("
\n")
print("喋り場トップページ
\n")
print("\n")
print("\n")
◯実行結果(kterm)
・コメントを書き込んだ場合
roy{c109029}% ./best.rb [~/public_html/advertise2/rubycgi]
(offline mode: enter name=value pairs on standard input)
nickname="きない"
opinion="こんにちは"
Content-type: text/html; charset=EUC-JP
喋り場
喋り場
自由に書きこんで下さい。ただし、誹謗中傷は御遠慮下さい。その場合はコメントを削除します。
また、名前入力をしなかった場合匿名表示になります。
1292053011: 管理人: 2010-12-11 17:12:14
1292055111: こうえきるびおさん: 2010-12-11 17:11:51
1292055167: oooさん: 2010-12-11 17:12:47
1292055628: きないさん: 2010-12-11 17:20:28
喋り場トップページ
・コメントを削除した場合
roy{c109029}% ./best.rb [~/public_html/advertise2/rubycgi]
(offline mode: enter name=value pairs on standard input)
toukou="1292055628"
sakujo="7890"
Content-type: text/html; charset=EUC-JP
喋り場
喋り場
自由に書きこんで下さい。ただし、誹謗中傷は御遠慮下さい。その場合はコメントを削除します。
また、名前入力をしなかった場合匿名表示になります。
1292053011: 管理人: 2010-12-11 17:12:14
1292055111: こうえきるびおさん: 2010-12-11 17:11:51
1292055167: 管理人: 2010-12-11 17:28:49
1292055628: 管理人: 2010-12-11 17:33:25
喋り場トップページ
◯結果の考察
・コメントを書き込んだ場合
コメントがつけ足されて表示されていたので正しく動作していると言える。
・コメントを削除した場合
管理人の名前で不適切なコメントのため削除しましたと表示されているので正し
く動作していると言える。
◯感想
私が興味を引かれた作品は青木千紗さんの花花花です。色を選ぶと花が表示され、
花言葉も表示され勉強になり良かった。投票機能もあって良かった。
◯参考文献
基礎プログラミング I 第8回 電子チケットを作ろう 「CSS の復習」
http://roy/~madoka/2010/r1/08/08_05_review_05_cascadingstylesheet.html
基礎プログラミング II 第10回 CGIことおぼえ 「プログラム部分について」
http://roy/~madoka/2010/r2/10/10_02_theme_02_program.html
◯共同学習者
木内雄、青木千紗、横山広樹、