第 10 回 ことおぼえ レポート課題 氏名:加藤恭平 学籍番号:c1100549 語学クラス:英語2 コース(系):政策マネジメント 1.筆記問題 pstore を cgi に組み込むには、まず require 'pstore' によって'pstore' を 用い、入力されたデータを保存するよう宣言する。 次に PStore変数 = PStore.new("データベース.db") と入力し、db(データベー ス)の型式で hashとして作成する。これにより、入力されたデータは pstore の 設定に従い、データベース.db(データベースファイル)に保存されるようになる。 さらに任意のプログラムを
内に挿入し、ユーザーにデータを 入力させるスペースを確保する。 また PStore変数 = transaction do により、変数に代入されたデータを読み込んで表示させる。 2.プログラム問題 選択した問題 I.るびちゃんねる a)考えた設定 2ちゃんねるのように名前とコメントを書き込み、書き込みが行われた投稿日と 投稿時間を表示することが出来る掲示板のようなもの。 削除キーを設定して不適切な書き込みを削除することも出来る。 b)作成したプログラム #!/usr/bin/env ruby $KCODE = 'e' require 'cgi' # cgiの実行を要求 require 'pstore' # pstoreの実行を宣言 require 'date' # 日付表示のためにdataの実行を宣言 cgi = CGI.new("html4") # html4 に準拠してCGIを実行 bbs = PStore.new("rubichannel.db") # rubichannel.dbという名でデータを作り、bbsと いう変数で処理する myprog = "rubichannel.rb" # CGI変数を受け取るプログラムを変数(myprog)に 置き換える day = Date.today # 投稿日を表示する為に変数 dayを作成 now = Time.now # 投稿時間を表示する為に変数 nowを作成 print("Content-type: text/html; charset=EUC-JP\n\n") print("\n") # html文章を書き始める print("\n") # head開始 print("るびちゃんねる弐式\n") print("\n") # スタイルシートを使用する print("\n") # head終了 print("\n") # 本体を書き始める print("
\n") print("
\n") print("

るびちゃんねる弐式

\n") print("
\n") print("

書き込みはマナーを守って行って下さい。
名前を空白で書き込むと\"名無しさん\"になります。

\n") print("
\n") print("
\n") if cgi["touko"] != "" && cgi["sakujo"] == "0619" # 投稿ナンバーが空白ではなく、かつ削除キーが0619の場合 kesu = cgi["touko"] # 削除したい投稿ナンバーを変数kasuに代入 t = kesu.to_i # kesuをhashのkeyであるtに代入する。すると、hash の特性上、同じkeyだった場合、最新のkeyで情報が更 新されることを利用して投稿者名とコメントを以下の 変数を用いて上書きする。 i = day # 日付の変数にdayを代入 h = now.hour # 時の変数に現在(書き込み時)の時間を代入 m = now.min # 分の変数に現在の分を代入 s = now.sec # 秒の変数に現在の秒を代入 onamae = "管理人" coment = "不適切なコメントのため削除しました。" elsif cgi["nickname"] == "" # 投稿者が名前を入力しなかった場合 onamae = "名無し" # 投稿者名を表す変数に"名無し"を代入する t = Time.now.to_i # 投稿ナンバーを表す i = day # 日付の変数に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 bbs.transaction do # pstoreで暗号化したデータファイル rubichannel.db を処理する if bbs == nil # bbsにデータが入ってなかった場合 bbs[t] = Hash.new # t(投稿ナンバー)をkeyとして、hashファイルbbs を作成する end bbs[t] = [onamae,i,h,m,s,coment] # hashのvalueに上記のif文で代入し た変数を指定する # bbs[投稿ナンバー] = [投稿者名,年・月・日,時,分,秒,コメント] #p bbs print("
\n")         # 
tagは1行に1人分のコメントを表示する


  for time in bbs.roots.sort
    if bbs[time][0] == "管理人" # 名前が管理人だったときの実行文
       		       	

      printf("

%d: %s: %s %d:%d:%d

\n",time,bbs[time][0],bbs[time][1],bbs[time][2],bbs[time][3],bbs[time][4]) printf("

%s

\n",bbs[time][5]) elsif bbs[time][5] != "" # コメントが空白ではないときの実行文 printf("

%d: %sさん: %s %d:%d:%d

\n",time,bbs[time][0],bbs[time][1],bbs[time][2],bbs[time][3],bbs[time][4]) printf("

%s

\n",bbs[time][5]) end end print("
\n") end print("
\n") printf("
\n",myprog) # ユーザーに入力を促すところをでくくる # CGI変数を bbs.rbファイル (= 変数myprog)に送信する print("

お名前:

\n") # テキストフィールドを作成して投稿者の名前を入れる print("

\n") # テキストフィールドを作成してコメントを入れる print("

\n") print("\n") # CGI変数をプログラムに送信する print("\n") # 初期設定画面に戻る print("

\n") print("
\n") print("

[管理人用] 投稿ナンバー: \n") # 投稿ナンバー入力のテキストフィールドを作成 print("削除キー:\n") # 削除キー入力のテキストフィールドを作成 print("

\n") # CGI変数をプログラムに送信する print("
\n") print("

るびちゃんねる弐式 トップページ

\n") print("\n") print("\n") -------------------------------------------------------------------------------- 以下はr2_cgi_best.htmlを貼りつける るびちゃんねる弐式 トップページ # タイトルを表示する # スタイルシートを使用する
# divを用いて場所の指定をする
# 横線を引く

るびちゃんねる弐式


# 横線を引く
+

入口

# 掲示板への入口

管理人 加藤恭平のホームページ

# 自分のホームページへのリンク
連絡先: c110054@f.koeki-u.ac.jp
# 連絡先を表示 c)もとにしたプログラム 2009年度授業用ページより、先輩が作成したr2_cgi_best.htmlとbbs.rb d)実行結果 名前付きで書き込みを行った場合 pan{c110054}% ./rubichannel.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) nickname="ギンガナム" question="勝利の美酒も飽きたなあッ" Content-type: text/html; charset=EUC-JP るびちゃんねる弐式

るびちゃんねる弐式/em>


書き込みはマナーを守って行って下さい。
名前を空白で書き込むと"名無しさん"になります。



1323432573: 名無しさん: 2011-12-09 21:9:33

ビームマグナムを使う!! ※テスト

1323432727: 名無しさん: 2011-12-09 21:11:23

V2の光の翼で!!

1260519852: 管理人: 2011-12-09 21:35:0

不適切なコメントのため削除しました。

1260519915: シローさん: 2011-12-09 22:59:55

銃身が焼き付くまで撃ち続けてやる

1260520168: ギンガナムさん: 2011-12-09 23:7:46

勝利の美酒も飽きたなあッ


お名前:


[管理人用] 投稿ナンバー: 削除キー:

るびちゃんねる弐式 トップページ

名前を入力せずに書き込みを行った場合 pan{c110054}% ./rubichannel.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) question="さあ、お前の罪を数えろ!" Content-type: text/html; charset=EUC-JP るびちゃんねる弐式

るびちゃんねる弐式/em>


書き込みはマナーを守って行って下さい。
名前を空白で書き込むと"名無しさん"になります。



1323432573: 名無しさん: 2011-12-09 21:9:33

ビームマグナムを使う!! ※テスト

1260519852: 名無しさん: 2011-12-09 21:11:23

V2の光の翼で!!

1323432727: 管理人: 2011-12-09 21:35:0

不適切なコメントのため削除しました。

1260519915: シローさん: 2011-12-09 22:59:55

銃身が焼き付くまで撃ち続けてやる

1260520168: ギンガナムさん: 2011-12-09 23:7:46

勝利の美酒も飽きたなあッ

1260520168: 名無しさん: 2011-12-11 19:58:45

さあ、お前の罪を数えろ!


お名前:


[管理人用] 投稿ナンバー: 削除キー:

るびちゃんねる弐式 トップページ

投稿ナンバー1260519852 のコメントを削除した場合 pan{c110054}% ./rubichannel.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) touko="1260519852" sakujo="0619" Content-type: text/html; charset=EUC-JP るびちゃんねる弐式

るびちゃんねる弐式/em>


書き込みはマナーを守って行って下さい。
名前を空白で書き込むと"名無しさん"になります。



1323432573: 名無しさん: 2011-12-09 21:9:33

ビームマグナムを使う!! ※テスト

1260519852: 管理人: 2011-12-09 21:12:42

不適切なコメントのため削除しました。

1323432727: 管理人: 2011-12-09 21:35:0

不適切なコメントのため削除しました。

1260519915: シローさん: 2011-12-09 22:59:55

銃身が焼き付くまで撃ち続けてやる

1260520168: ギンガナムさん: 2011-12-09 23:7:46

勝利の美酒も飽きたなあッ

1260520168: 名無しさん: 2011-12-11 19:58:45

さあ、お前の罪を数えろ!


お名前:


[管理人用] 投稿ナンバー: 削除キー:

るびちゃんねる弐式 トップページ

e)考察 実行結果を見るとまず、名前付きでコメントした場合コメント表示覧の一番下に 書き込んだ内容と日時名前がエラー無く表示されている。 名前無しでコメントした場合は"名無しさん"となり、それ以外はエラー無く表示 されている。 コメントを削除した場合は名前が"管理人"になり、"不適切なコメントのため削 除しました"と表示されて日付、時間は削除された時のものに更新されている。 全ての機能がWeb上だけではなくktermでも機能しているので、このプログラムは 正しいと言える。 4.感想 興味を引かれた作品 吉住貴則さんのページ http://roy/~madoka/2011/r2/10/rpt/rpt.html です。 配色やリンクの配置など、ホームページとhtmlページのレイアウトが全体的に見 やすかったからです。 プログラムの作成自体は金曜日に終わらせられたのだが、htmlページの編集をし て全ての動作を確認し、レポートのためにプログラムの解説や考察をした後のrubycgiをadadvertise2の中に移動させ、課題ページに指定されていたURLにすると言う作業にかなり時間を使ってしまった 。 廣瀬先生の授業用ページや、ktermの操作を解説したページを参考に移動はさせ たのだが、今度は作成したhtmlページの掲示板への入口をクリックするとプログラム本文が表示されるようになってしまった。それだけではなく過去に作成したCGIの課題も 全て同様になっていた。リンクのURLを移動後のものに直す以外にも自分なりに原因を考えて授業用ページを振り返りながら「.htaccess」ファイルを移動した先でもう一度作成する、pstore作成の際の作業をもう一度行う等の作業を実行したのだが変わらなかった。 ディレクトリ移動前は問題なく正常に動作していたので非常に悔しいですが自分 の中では万策尽きたのでこのまま提出します。感想の項目で質問をして申しわけ ないですがよろしければ解決法を教えて下さい。 作成した課題のリンク 「http://roy/~c110054/advertise2/rubycgi/r2_cgi_best.html」 後期広告ページ 「http://roy/~c110054/advertise2/index.html」 参考文献 Unixの基本コマンド http://roy/unix/commands.html 著者 廣瀬 雄二 UNIXの部屋 http://x68000.q-e-d.net/~68user/unix/ 著者 サイト上に明記無し 基礎プログラミング II 第09回 CGI ことえらび ファイルを使ってみよう http://roy/~madoka/2011/r2/09/r2_09_08_theme_08_hashfile.html 基礎プログラミング II 第09回 CGI ことえらび テキストエリアの作り方 http://roy/~madoka/2011/r2/09/r2_09_07_theme_07_textarea.html 基礎プログラミング II 第09回 CGI ことえらび テキストフィールドの作り方 http://roy/~madoka/2011/r2/09/r2_09_06_theme_06_textfield.html 基礎プログラミング II 第09回 CGI ことえらび CGI スクリプトによる結果表示 http://roy/~madoka/2011/r2/09/r2_09_03_theme_03_result.html 基礎プログラミング II 第09回 CGI ことえらび 結果を分岐させるには http://roy/~madoka/2011/r2/09/r2_09_01_theme_01_branch.html 基礎プログラミング II 第08回 CGI ことはじめ Ruby で CGI を作る宣言 http://roy/~madoka/2011/r2/08/r2_08_09_theme_09_declare.html 基礎プログラミング II 第08回 CGI ことはじめ 動作プログラム作成 http://roy/~madoka/2011/r2/08/r2_08_08_theme_08_ruby.html 基礎プログラミング II 第08回 CGI ことはじめ CGI スクリプトの解説 http://roy/~madoka/2011/r2/08/r2_08_07_theme_07_actionprogram.html 基礎プログラミング II 第08回 CGI ことはじめ CGI を使用することを宣言しよ う http://roy/~madoka/2011/r2/08/r2_08_04_theme_04_declare.html 基礎プログラミング II 第08回 CGI ことはじめ CGI 専用作業 directory http://roy/~madoka/2011/r2/08/r2_08_02_theme_02_mkdir.html 基礎プログラミング II 第10回 CGI ことおぼえ CGI で使うことのできるデータ ベース http://roy/~madoka/2011/r2/10/r2_10_01_theme_01_pstore.html 基礎プログラミング II 第10回 CGI ことおぼえ プログラム部分について http://roy/~madoka/2011/r2/10/r2_10_02_theme_02_program.html 基礎プログラミング II 第10回 CGI ことおぼえ 時間を Key として http://roy/~madoka/2011/r2/10/r2_10_03_appendix_01_time.html 基礎プログラミング II 第10回 CGI ことおぼえ コメント受け付けプログラム http://roy/~madoka/2009/r2/10/10-04-rubichannel.html 基礎プログラミング II 第10回 CGI ことおぼえ データベースに入力 http://roy/~madoka/2009/r2/10/10-05-pstore_cgi.html 基礎プログラミング II 第10回 CGI ことおぼえ データベースからとりだして表 示 http://roy/~madoka/2009/r2/10/10-06-hash-pstore.html 以上の著者 西村まどか