第 9 回 CGI ことえらび レポート課題 氏名: 松本 洋輔 学籍番号: C111133A 語学クラス: 英語1 コース: 環境サイエンス 1.筆記問題 A.ラジオボタンのしくみ ラジオボタンとは複数の選択肢の中から1つを選ぶ方法。 (例)ホームページ上では以下のように表示される。 選択肢 ◯選択1 ◯選択2 ◯選択3 [ OK ] [reset] 選んだ選択肢には○の中に黒い●が表示される。 *作り方 html文に選択肢名 という文をいれる。input type="radio"はラジオボタンであると宣言、name はボタンの名前、valueはCGI 変数の値を表している。 B.チェックボックスのしくみ チェックボックスとはラジオボタンと異なり、複数の選択肢の中から複数選ぶ ことのできる方法。 (例)ホームページ上では以下のように表示される。 □選択肢1 □選択肢2 □選択肢3 □選択肢4 選んだ選択肢には「チェックマーク」が表示される。 *作り方 html文に選択肢名 という文をいれる。input type="checkbox"はチェックボックスであると宣言、 name はボックスの名前、valueはCGI 変数の値を表している。 C.基礎プログラミングのキャラクター 広告ページ:http://roy/~c111133/adv2/index.html 作品URL:http://roy/~c111133/adv2/char_r2_c111133.png 題名「ドリルモグラ」 前々回の最高傑作として作成したゲーム「地底探検」の主人公。イメージはドリ ルを被ったモグラ。元々は以前課題で作成した「るびおっち的ゲーム」で別のキャ ラクターとして使用していたがゲームのテーマにあったデザインだったので再利 用した。 作った方法は円を重ねて体を作り、線画ツールで細かい部分を作った。 工夫した点は頭のドリルで三角形に細い長方形を重ねて立体感を出した。 それと目を書き加えた。 2.プログラム問題 課題ホームページ URL:http://roy/~c111133/rubycgi/fork_c111133.html A.(count.rb) URL:http://roy/~c111133/rubycgi/count.rb *設定 アクセス数をカウントするプログラムを作成する。 *作成したプログラム #!/usr/bin/env ruby #coding: euc-jp require 'cgi' #cgiを使用するという宣言 cgi = CGI.new(:accept_charset => "EUC-JP") #html から受け取り print("Content-type: text/html; charset=EUC-JP\n\n") #html に書き出し number = 0 #カウントの初期値(0から数える) open("number.txt","r") do |no| #txt ファイルを読み込む while data = no.gets #txtファイル から読み込み、動作 を繰り返す if /(\d+)/ =~ data #数値をとりだす number = $1.to_i #number = とりだした数値の変数 end end end print("\n") print("\n") print("アクセスカウンター\n") print("\n") print("\n") printf("

あなたは %d 人目の訪問者です!!

\n", number) #%d に number の値を代入する print("\n") print("\n") number += 1 #number は1ずつ増加する open("number.txt","w") do |write| write.printf("%d\n",number) #実行結果を繰り返し上書きする end *プログラムの変更点 カウンタ例を参考に作成した。主な変更点は変数名と表示される文章を変更した。 *実行結果 ウェブページ上での実行結果その1 アクセスカウンター

あなたは 10 人目の訪問者です!!

ウェブページ上での実行結果その2 アクセスカウンター

あなたは 11 人目の訪問者です!!

--------------------------------------- ktermでの実行結果その1 pan{c111133}% ./count.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-JP アクセスカウンター

あなたは 12 人目の訪問者です!!

ktermでの実行結果その2 pan{c111133}% ./count.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-JP アクセスカウンター

あなたは 13 人目の訪問者です!!

--------------------------------------- *考察 プログラムの実行、ウェブページへのアクセスを繰り返す度にカウントされた。 よってこのプログラムは正しく作動したと言える。 このプログラムの仕組みは number += 1 によって1ずつ加算、 open("number.txt","w") do |write| write.printf("%d\n",number) で上書きを繰り返すのでカウンターとして機能している。 また、ウェブページで使用するためには txtファイルを chmod o+w ファイル名 とし外部からの書きこみを可能にしなければならない。 B.(calculator.rb) URL:http://roy/~c111133/rubycgi/calculator.html *設定 ホームページで計算できる CGI スクリプトプログラムを作成する。 *作成したプログラム #!/usr/bin/env ruby #coding: euc-jp require 'cgi' #cgiを使用するという宣言 cgi = CGI.new(:accept_charset => "EUC-JP") #html から受け取り print("Content-type: text/html; charset=EUC-JP\n\n") #html に書き出し a = cgi["no1"] #a = Web上で入力された値の変数 b = cgi["no2"] #b = Web上で入力された値の変数 sign = cgi["cal"] #sign = Web上で入力された計算記号の変数 def formula(a,b,sign) #計算式のメソッド if sign == "+" #sign が+なら足し算を行う a.to_f + b.to_f elsif sign == "−" #sign が−なら引き算を行う a.to_f - b.to_f elsif sign == "×" #sign が×なら掛け算を行う a.to_f * b.to_f elsif sign == "÷" #sign が÷なら割り算を行う a.to_f / b.to_f end end print("\n") print("\n") print("電卓\n") print("\n") print("\n") print("

計算結果

\n") if sign == "+" #sign が+なら足し算の式と結果を表示 printf("

%2.1f + %2.1f = %2.1f

",a,b,formula(a,b,sign)) elsif sign == "−" #sign が−なら引き算の式と結果を表示 printf("

%2.1f - %2.1f = %2.1f

",a,b,formula(a,b,sign)) elsif sign == "×" #sign が×なら掛け算の式と結果を表示 printf("

%2.1f * %2.1f = %2.1f

",a,b,formula(a,b,sign)) elsif sign == "÷" #sign が÷なら割り算の式と結果を表示 printf("

%2.1f / %2.1f = %2.1f

",a,b,formula(a,b,sign)) end print("\n") print("\n") *プログラムの変更点 過去に作成された先輩のプログラムを参考に、記号やボタンで電卓をイメージ して作成した。 *実行結果 「足し算」 ktermでの実行結果 pan{c111133}% ./calculator.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) no1=5 no2=2 cal="" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP

5.0 + 2.0 = 7.0

ウェブページ上での実行結果 電卓

計算結果

5.0 + 2.0 = 7.0

------------------------------------------ 「引き算」 ktermでの実行結果 pan{c111133}% ./calculator.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) no1=10 no2=3 cal="−" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP 電卓

計算結果

10.0 - 3.0 = 7.0

ウェブページ上での実行結果 電卓

計算結果

10.0 - 3.0 = 7.0

------------------------------------------ 「掛け算」 ktermでの実行結果 pan{c111133}% ./calculator.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) no1=7 no2=10 cal="×" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP 電卓

計算結果

7.0 * 10.0 = 70.0

ウェブページ上での実行結果 電卓

計算結果

7.0 * 10.0 = 70.0

------------------------------------------ 「割り算」 ktermでの実行結果 pan{c111133}% ./calculator.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) no1=28 no2=4 cal="÷" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP 電卓

計算結果

28.0 / 4.0 = 7.0

ウェブページ上での実行結果 電卓

計算結果

28.0 / 4.0 = 7.0

------------------------------------------ *考察 ウェブページと ktermの実行結果が一致しているためプログラムは機能してい ると言える。 計算結果があっているか bc -l で確かめ算を行う。 pan{c111133}% bc -l [~/public_html/rubycgi] 5+2 7 10-3 7 7*10 70 28/4 7.00000000000000000000 確かめ算の結果も一致したためこのプログラムは正しく作動したと言える。 D.(change.rb) URL:http://roy/~c111133/rubycgi/change.html *設定 色を選ぶと CSS を自動生成するプログラムを作成する。 *作成したプログラム #!/usr/bin/env ruby #coding: euc-jp require 'cgi' cgi = CGI.new(:accept_charset => "EUC-JP") print("Content-type: text/html; charset=EUC-JP\n\n") c = cgi["color"] #c = Webで入力された色を代入 print("\n") print("\n") print("After\n") print("\n") print("\n") printf("

%sページ

\n",c) printf("

%sバージョンに模様替えしました。

\n",c) print("

戻るときはブラウザからお願いします。

\n") print("\n") print("\n") if c == "ブラック" #ブラックが選ばれたらブラックのページを表示 print("\n") elsif c == "グリーン" #グリーンが選ばれたらグリーンのページを表示 print("\n") elsif c == "ブルー" #ブルーが選ばれたらブルーのページを表示 print("\n") elsif c == "パープル" #パープルが選ばれたらパープルのページを表示 print("\n") end *プログラムの変更点 過去に作成された先輩のプログラムを参考に、変数や文章をプログラムに合う ものにした。 *実行結果 「ブラック」を選択 ktermでの実行結果 pan{c111133}% ./change.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) color="ブラック" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP After

ブラックページ

ブラックバージョンに模様替えしました。

戻るときはブラウザからお願いします。

ウェブページ上での実行結果 After

ブラックページ

ブラックバージョンに模様替えしました。

戻るときはブラウザからお願いします。

------------------------------------------ 「グリーン」を選択 ktermでの実行結果 pan{c111133}% ./change.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) color="グリーン" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP After

グリーンページ

グリーンバージョンに模様替えしました。

戻るときはブラウザからお願いします。

ウェブページ上での実行結果 After

グリーンページ

グリーンバージョンに模様替えしました。

戻るときはブラウザからお願いします。

------------------------------------------ 「ブルー」を選択 ktermでの実行結果 pan{c111133}% ./change.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) color="ブルー" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP After

ブルーページ

ブルーバージョンに模様替えしました。

戻るときはブラウザからお願いします。

ウェブページ上での実行結果 After

ブルーページ

ブルーバージョンに模様替えしました。

戻るときはブラウザからお願いします。

------------------------------------------ 「パープル」を選択 ktermでの実行結果 pan{c111133}% ./change.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) color="パープル" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP After

パープルページ

パープルバージョンに模様替えしました。

戻るときはブラウザからお願いします。

ウェブページ上での実行結果 After

パープルページ

パープルバージョンに模様替えしました。

戻るときはブラウザからお願いします。

------------------------------------------ *考察 ktermとウェブページの実行結果が一致した。また、ラジオボタンも各々が対応 するページに繋がったため、このプログラムは正しく作動したと言える。 3.Writer の復習「基礎プログラミングを学んで」 広告ページ(意見広告に記載) URL:http://roy/~c111133/adv2/index.html 4.感想 今回は課題の問題数が多くて大変だった。プログラム問題も難しく苦労したが過 去のレポートを読み返すことで理解が深まった。 参考文献 基礎プログラミング II 第 9 回 (CGI ことえらび) 「File Open を使ってみよ う」 http://roy/~madoka/2012/r2/09/r2_09_08_theme_03_fileopen.html 製作者 西村 まどか 基礎プログラミング II 第 9 回 (CGI ことえらび) 「ラジオボタンの作り方」 http://roy/~madoka/2012/r2/09/r2_09_04_appendix_01_radio.html 製作者 西村 まどか 基礎プログラミング II 第 9 回 (CGI ことえらび) 「チェックボックスの作り方」 http://roy/~madoka/2012/r2/09/r2_09_05_appendix_02_checkbox.html 製作者 西村 まどか 基礎プログラミング II 第 9 回 「ことえらび」 レポート講評 http://roy/~madoka/2011/r2/09/rpt/crt.html 製作者 西村 まどか 基礎プログラミング I 第 12 回 (自由課題コンペティション / 画像作成) 「日 本語の出し方」 http://roy/~madoka/2012/r1/12/r1_12_03_theme_03_japanese.html 製作者 西村 まどか