roy > naoya > 基礎プログラミングII > (10)自由課題実施期間[1]
(10) 自由課題実施期間[1]
[1]自由製作課題について
これまでは一人で限られた時間の中でプログラムを作成してきたため、規模の大きなものを作成することが難しかった。1年間続いたRubyの授業もそろそろ終わりを迎えようとしている。そこで、1年間の集大成として、これまで学んだ技術を駆使してグループで規模の大きいログラムを作ってみよう。
作成条件は以下の通りとする。
作成するもの
- プログラム(必ず2つ以上作成すること)
- 理由(1):プログラムが1つだと得意な人が任されることになり、作業量の偏りが生じやすい
 - 理由(2):プログラムが1つだとグループ内の得意な人1~2名の力量により結果が決まってしまう
 - 理由(3):プログラムが1つだと複数の案が出た時に却下される案が多くなる
 - 理由(4):今年は例年と比べて受講生のレベルが高いので2つくらい作れそう
 
 - Webページ(プログラムの説明書やプログラム本体を掲載)
 - プレゼンテーションファイル(発表時に使用)
 - ポスター(合同成果発表会で使用)
 - レジュメ(合同成果発表会で使用)
 
ポスターとレジュメの例を示す。
レジュメ tubuan48.pdf 2g5k.pdf
レジュメはプログラムのセールスポイントを必ず書くこと。
自由課題グループわけ
これまでに獲得をした得点に基づき、各グループの戦力が同程度になるよう に調整している。発表時間は交代時間を含めて6分とする。
| 1 | 2 | 3 | 4 | 5 | 6 | 
|---|---|---|---|---|---|
| 
齋藤 有里 蘭 新宇 五十嵐 悠基 今野 涼介 難波 万琴 本間 可楠  | 
田村 成彬 押切 碧海 齋藤 昂大 佐藤 誠 佐藤 雄大 二宮 大将  | 
鬼澤 つぐみ 斉藤 和憲 佐藤 真梨 田中 有伽子 本間 大輝 松浦 光希  | 
伊藤 志帆 大江山 愛 菊地 理紅 日下部 康二 菅井 達也 橘 俊栄  | 
酒井 広太 佐藤 知紅 菅原 梓 沼沢 翔 本間 匡平 山崎 侑斗  | 
安達 春美 井面 凌 及川 純明 五十嵐 拓海 斉藤 智紀 本田 祐希  | 
| 7 | 8 | 9 | 10 | 11 | |
| 
工藤 岬 小林 千尋 櫻井 廉 早坂 奈津美 三上 凌太 渡部 竜太  | 
森山 拓哉 柏倉 彩 熊澤 捷馬 三部 歩 高橋 智彦 東海林 研太  | 
樋口 さおり 石垣 智隆 小山 北斗 國井 慶弘 後藤 南 渡辺 渉子  | 
荒井 太喜 井上 道貴 風間 貴斗 髙橋 花紀 鶴巻 彩花 渡邊 沙枝  | 
佐藤 敬介 遠藤 麻佑 大瀧 晴 齋藤 高彬 羽賀 千夏 本木 祐太  | 
題材設定
後期グループ課題は諸君の実力を公(おおやけ)にアピールできるよう公開しやすい題材を選ぶ形式とする。以下の各部門から好きなものを選んで課題作成する。
-  地域活性部門
      
何か地域を盛り上げる助けになるもの
 -  福祉部門
      
不自由を克服する人を支援するものなど
 -  役立ち情報部門
      
知りたい人にとってしっかり役立つ情報を提供するもの
 -  シミュレーション部門
      
実世界でのできごとを計算機上で仮想的に実験するもの
 -  教育部門
      
何かを学習する人の強力な助けになるもの
 -  ビジュアル部門
      
効果的な視覚情報を多数用意した凝った作りのもの
 -  エンターテイメント部門
      
大人から子供まで幅広く楽しめるもの
 
他チームの作品を評価するときに、その作品がエントリした部門のテーマに則しているかも大きく加味する。
前期同様の投票を行ない、上位2チームには合同発表会でのクラス代表発表をしてもらう。
過去の自由製作課題
参考までに過去の自由製作課題の例を示す。
- 2015年度(後期)自由製作課題
 - 2014年度(後期)自由製作課題
 - 2013年度(後期)自由製作課題
 - 2012年度(後期)自由製作課題
 - 2011年度(後期)自由製作課題
 - 2010年度(後期)自由製作課題
 
作成が望ましくないプログラム
以下のプログラムは作成を避けるか、作成に当たりユーザが実施したいと思うような工夫を相当に考える必要がある。
- 占い:乱数で結果を出すだけなので求められる技術レベルが低く、1年間学んだ集大成のプログラムとしては達成感に欠ける
 - 心理テスト:学術的に信頼性や妥当性が確認されている心理検査は著作権の問題があり、自由に利用することができない。適当に作った心理テストは根拠がないので面白みに欠ける
 - クイズ:取り扱うジャンルや問題数が豊富であれば実施したいと思うが、いずれかが不足していると実行してもらえない傾向にある
 
[2]今後の予定
本日の後半より自由製作課題を実施する。5~6人のグループで規模の大きなプログラムを作成する。以降の予定は以下の通りである。
- 10回目
 - 自由課題グループ分け
 - 楽しいプログラムを作るためのテクニック
 - グループ名の決定
 - 役割分担の決定
 - 作成するプログラムの検討
 - 11回目
 - プログラムの作成開始
 - Webページの作成開始
 - プレゼンテーションファイルの作成開始
 - 発表の流れの検討
 - 12回目
 - trr
 - プログラムの完成
 - Webページの完成
 - プレゼンテーションファイルの完成
 - 発表練習
 - 13回目
 - プレゼンテーションに向けた準備
 - 14回目
 - 自由課題発表会(授業内)
 - 15回目
 - 各クラス上位2チームによる合同自由課題発表会
 
[3]本日の作業内容
役割分担を決める。その上で何をいつまでにやるのかを相談する。役割としては例えば以下がある。準備期間中、当日それぞれについて役割を決定し、何もすることがない人が出ないようにしよう。
授業以外の時間に集まって作業を行う可能性があるので、連絡が取り合えるようにしておこう。後で、連絡が取れなくなって困ることがないようにしておくこと。
準備期間の役割(例)
- プログラム作成
 - プログラムデータ作成(クイズなどの場合)
 - プログラムシナリオ作成(シミュレーションゲームなどの場合)
 - Webページ作成
 - 画像作成(Webページやプログラムで使用)
 - プレゼンテーションファイル作成
 - 発表シナリオ作成(時間配分や発表の流れ)
 
当日の役割(例)
- 発表役
 - タイムキーパー
 - コンピュータ操作役
 
「応援」や「遊軍」、「パシリ」などの実質的に仕事のない役割は定めず、各人が何かしらグループ活動に貢献できるように分担を考えること。
役割分担が決まったら、作成するプログラムやWebページのイメージ、作成する画像などについて相談し、早速作成に取り掛かること。
[4]作業の進め方
役割が決まったら各自で作業を行うが、その際担当に応じて該当するページを確認しておくと良いだろう。
- プログラムを作成する上でのTIPS(今日のページ)
 - Webページを作成する上でのTIPS(第11回のページ)
 - プレゼンテーションファイルを作成する上でのTIPS(第12回のページ)
 - 発表をする上でのTIPS(第13回のページ)
 - 自由課題の評価について(第14回のページ)
 
[5]プログラム作成上の注意
作成するプログラムは公開することを考え、以下の点に留意しよう。
- 操作方法をわかりやすくする:ユーザ≠プログラム作成者であるため、初めて実行した人でも操作方法がわかりやすいことが望ましい。例えば、実行直後にprint"好きな数字を入力してください\n"とすると、何をするプログラムであるのか、何のために数字を入力しなければならないのかがわからない。ただし、余りにも細かく説明しすぎると、読むのが煩わしくなってしまう。プログラム作成担当でないグループ内の他のメンバに意見を求めると良い。
 - プログラムの構造をわかりやすくする:どこでどのような処理をしているのかについてコメントを残しておくと良い。複数人で協力して作成する場合、他人が書いたプログラムを理解するためには時間がかかることがある。また、よく出来たプログラムの場合、次年度以降の自由課題作成において参考にされる可能性もある。せっかく作ったプログラムであるため、将来的に活用してもらえるよう、構造をわかりやすくしておこう。
 - 協力して作成する:例えばクイズを作る場合、一人で問題を考えると20問程度が限界かもしれない。しかし、全員で考えれば100問以上の問題を作ることも出来る。毎回同じ問題が同じ順番で出題されるプログラムは1~2回しか実行してもらえないが、プールした100問の問題からランダムに10問出題するようなプログラムであれば、何度でも楽しむことができる。せっかく作るのであるから、多くの人に繰り返し実行してもらえるようなものを作ろう。
 - 技術レベルの高いプログラムを作成する:1年間Rubyを学んできた集大成のプログラムである。単に楽しい/役に立つだけではなく、技術的にもレベルの高いものを目指そう。if文を使ったシナリオ分岐型のプログラムは、ストーリーとしては面白いかもしれないが、それほど難しい技術を使っているわけではない。open-endやハッシュ、CGIなどを使うことを考えてみよう。
 
[6] 特定の文字・文字列の出現回数を調べる(count, scan)
[7] 乱数の発生(rand)
[8] 少し間を空ける(sleep)
[9] 時刻を取得する(Time.now)
[10] 大きな文字を出す(systemを用いたbannerコマンド)
[11] ポップアップで画像を表示(systemを用いたdisplayコマンド)
[12] 文字色変更・画面操作(\e[Xm)
[13] 配列に関するTips
[14] プログレスバーを作る
[15] 文字列操作
[16-1] コマンドラインを用いたデータ入力(ARGV)
[16-2] コマンドラインを用いたファイル出力
[16-3] STDERRとSTDIN・プログラムの強制終了
[17] 正規表現で文字列を分割
[18] プログラムからFirefoxを起動
[19]出席課題
グループのメンバー、チーム名、役割分担、作成するプログラムの案について報告する。グループの他のメンバーにお任せにしていないことを確認するため、グループの代表者のみではなく、全員が提出する。
提出要領は下記の通り。
- 提出先:課題提出用メールアドレス
 - メールのSubject:attend10
 - 提出期限:授業終了時まで
 
Tips:emacsでの日本語入力のオンオフはCtrl-oです
Tips:Mewによるメールの送り方はMewコマンドを参照