roy > naoya > 基礎プログラミングII > (11)自由課題実施期間[1]
(11) 12/21の授業内容:自由課題実施期間[1]
[1]自由製作課題について
これまでは一人で限られた時間の中でプログラムを作成してきたため、規模の大きなものを作成することが難しかった。1年間続いたRubyの授業もそろそろ終わりを迎えようとしている。そこで、1年間の集大成として、これまで学んだ技術を駆使してグループで規模の大きいログラムを作ってみよう。
作成条件は以下の通りとする。
作成するもの
- プログラム(大きなもの1つ・もしくは中程度のもの2つ)
- Webページ(プログラムの説明書やプログラム本体を掲載)
- プレゼンテーションファイル(発表時に使用)
自由課題グループわけ(2限)
これまでに獲得をした得点に基づき、各グループの戦力が同じになるように調整しています。
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
渡辺誠 川村俊貴 工藤拓磨 齋藤和之 齋藤佳祐 笹原大介 中村勇磨 長谷川創 |
荒川良太 池田悠一郎 釼持美月 小松聖恵 佐藤和音 島貫祐磨 菅野香織 本間雄佑 |
相澤優也 太田祐志 大場優太 川村裕 駒林秀征 齋藤春樹 佐藤吉久 |
斉藤智広 五十嵐良平 池田洋和 加藤寛也 佐藤朋和 塚本愛 沼下優海 |
伊藤直樹 栗田俊樹 齋藤妙 鈴木裕介 高木悦子 田中和幸 熊谷基 |
池田涼 上林智美 後藤祐樹 今野雅士 櫻井志保里 志賀美和子 嶋貫紘斗 |
石倉勇佑 磯部直之 柿崎翔太 後藤泰紀 佐々木勇輔 佐藤拓 戸澤翔平 |
題材設定
後期グループ課題は諸君の実力を公(おおやけ)にアピールできるよう公開しやすい題材を選ぶ形式とする。以下の各部門から好きなものを選んで課題作成する。
- 地域活性部門
何か地域を盛り上げる助けになるもの
- 福祉部門
不自由を克服する人を支援するものなど
- 役立ち情報部門
知りたい人にとってしっかり役立つ情報を提供するもの
- シミュレーション部門
実世界でのできごとを計算機上で仮想的に実験するもの
- 教育部門
何かを学習する人の強力な助けになるもの
- ビジュアル部門
効果的な視覚情報を多数用意した凝った作りのもの
- エンターテイメント部門
大人から子供まで幅広く楽しめるもの
他チームの作品を評価するときに、その作品がエントリした部門のテーマに則しているかも大きく加味する。
前期同様の投票を行ない、上位2チームには合同発表会でのクラス代表発表をしてもらう。
過去の自由製作課題
参考までに過去の自由製作課題の例を示す。
[2]今後の予定
本日の後半より自由製作課題を実施する。5〜6人のグループで規模の大きなプログラムを作成する。以降の予定は以下の通りである。1月の授業は19日からであるが、すでに発表1週間前であるため、本日中に作業分担を行い、各自で作業を進めておくとよい。
- 12月21日(月)
- 自由課題グループ分け
- 楽しいプログラムを作るためのテクニック
- グループ名の決定
- 役割分担の決定
- 作成するプログラムの検討
- 1月14日(木)
- trr
- プログラムの作成開始
- Webページの作成開始
- プレゼンテーションファイルの作成開始
- 発表の流れの検討
- 1月18日(月)
- プログラムの完成
- Webページの完成
- プレゼンテーションファイルの完成
- 発表練習
- 1月25日(月)
- 自由課題発表会
[3]本日の作業内容
役割分担を決める。その上で何をいつまでにやるのかを相談する。役割としては例えば以下がある。準備期間中、当日それぞれについて役割を決定し、何もすることがない人が出ないようにしよう。
授業以外の時間に集まって作業を行う可能性があるので、連絡が取り合えるようにしておこう。後で、連絡が取れなくなって困ることがないようにしておくこと。
準備期間の役割(例)
- プログラム作成
- プログラムデータ作成(クイズなどの場合)
- プログラムシナリオ作成(シミュレーションゲームなどの場合)
- Webページ作成
- 画像作成(Webページやプログラムで使用)
- プレゼンテーションファイル作成
- 発表シナリオ作成(時間配分や発表の流れ)
当日の役割(例)
- 発表役
- タイムキーパー
- コンピュータ操作役
「応援」や「遊軍」、「パシリ」などの実質的に仕事のない役割は定めず、各人が何かしらグループ活動に貢献できるように分担を考えること。
役割分担が決まったら、作成するプログラムやWebページのイメージ、作成する画像などについて相談し、早速作成に取り掛かること。
[4]作成するプログラムについて
例えば以下のようなプログラムが考えられる。面白いものや実用的なものを作ってみよう。
- 検索プログラム
- RPG
- 対戦型ゲーム
- 四択クイズ
- タイピングゲーム
- ブログ
- 占い・心理テスト
ただし、占いや心理テストはいい加減に作ってしまうと面白みが薄れる一方、診断の根拠を何らかの資料に求めると著作権の問題が発生してしまう。また、構造も単純なため、半年間学んだ集大成のプログラムとしては達成感に欠ける。あくまでも最終手段と考えておこう。
なお、最終的に公開することを考え、以下の点に留意しよう。
- 操作方法をわかりやすくする:ユーザ≠プログラム作成者であるため、初めて実行した人でも操作方法がわかりやすいことが望ましい。例えば、実行直後にprint"好きな数字を入力してください\n"とすると、何をするプログラムであるのか、何のために数字を入力しなければならないのかがわからない。ただし、余りにも細かく説明しすぎると、読むのが煩わしくなってしまう。プログラム作成担当でないグループ内の他のメンバに意見を求めると良い。
- プログラムの構造をわかりやすくする:どこでどのような処理をしているのかについてコメントを残しておくと良い。複数人で協力して作成する場合、他人が書いたプログラムを理解するためには時間がかかることがある。また、よく出来たプログラムの場合、次年度以降の自由課題作成において参考にされる可能性もある。せっかく作ったプログラムであるため、将来的に活用してもらえるよう、構造をわかりやすくしておこう。
- 協力して作成する:例えばクイズを作る場合、一人で問題を考えると20問程度が限界かもしれない。しかし、全員で考えれば100問以上の問題を作ることも出来る。毎回同じ問題が同じ順番で出題されるプログラムは1〜2回しか実行してもらえないが、プールした100問の問題からランダムに10問出題するようなプログラムであれば、何度でも楽しむことができる。せっかく作るのであるから、多くの人に繰り返し実行してもらえるようなものを作ろう。
- 技術レベルの高いプログラムを作成する:1年間Rubyを学んできた集大成のプログラムである。単に楽しい/役に立つだけではなく、技術的にもレベルの高いものを目指そう。if文を使ったシナリオ分岐型のプログラムは、ストーリーとしては面白いかもしれないが、それほど難しい技術を使っているわけではない。open-endやハッシュ、CGIなどを使うことを考えてみよう。
[5]作成するWebページについて
すばらしいプログラムが出来上がったとしても、Webページが訪問者の目を惹くように作られていなければ、読んでみようという気持ちにはならない。デザイン、内容いずれも工夫しよう。
内容
Webページを作成する際は、以下の項目を必ず含めよう(それぞれ別のページに書いても良いし、1ページにまとめても良い)。
- メンバー紹介:メンバーの名前や役割分担。各自のページ(1年生のときに作成したもの)へのハイパーリンク
- 説明:以下の項目について記載しよう
- プログラム名
- プログラム概要
- 保存方法
- 実行方法
- 使い方・遊び方
- 著作権の表記
- プログラム:プログラム自体も~/public_html/におき、ダウンロードできるようにする
各項目の内容については、架空のプログラム「Five Seconds!!」のページを参考にしてみよう。
Webページの作成について、自信がない場合はリテラシーのページを確認しておこう。
プログラム名・プログラムの概要
何をするプログラムだかわからないままに実行する人はいない。何ができるのかというのはまさにプログラムの売りになる点である。ゲームであれば難易度が数段階に分かれていることが売りになるかもしれないし、実用的なプログラムでは細かな設定ができる点が売りになるかもしれない。淡々と機能を説明するのが良いのか楽しさを前面に出すのが良いのかは、作成するプログラムによって変わってくる。実際にプログラムを公開しているページを確認し、参考にしてみよう。
保存方法・実行方法
これまで、この授業を受けてきた人であれば詳しく説明しなくてもわかるため、これらは不要と感じるかもしれない。しかし、Webページにプログラムを掲載するということは、(学内のみに制限されているが)誰でも自由に閲覧することができる。プログラムを実行したことのない1年生が、先取りをして勉強しようと考え、閲覧しているかもしれない。こうした点を踏まえ、誰でも保存して実行できるよう詳しく説明しておこう。
遊び方
実行しても、どのように操作をすればよいのかわからないプログラムでは、積極的に使ってみようとは思ってもらえない。プログラムを作成する際にprintメソッドなどで説明を盛り込むことも重要であるが、「遊び方」(取扱説明書)のページを作ることも考えるべきである。プログラム内に表示されるメッセージはその時しか見ることが出来ないが、Webページに記載しておけば、実行しながら随時確認することができる。懇切丁寧な説明は不要だが、最低限知っておいて欲しいことを書いておくとよい。
著作権
プログラムの著作権は作成者に帰属する。プログラムをダウンロードした人は著作権を取得できるわけではない。著作権を保有する作成者は、作成したプログラムについて改変(内容を書き換えること)や再配布(ダウンロードしたプログラムを第三者に配布すること)の可否、免責事項(このプログラムを使用して生じたいかなる損害に対しても作成者は責任を負わないというようなこと)などを定めることができる。現在では、OpenOfficeやFirefoxなど、プログラムのソースを公開し、誰でも改変、再配布が認められたオープンソースが普及してきている。今回作成するプログラムも営利を目的としたものではないため、改変や再配布など厳しく制限しないようにしよう。
ページのデザイン
背景と文字色のコントラストを考え読みづらくならないようにすること、文字を小さくしすぎないようにすること、重要な点を強調することなどに加えてページのデザインにもこだわってみよう。プログラムの中味だけでなく、Webページの見栄えでも勝負しよう。
[6] プレゼンテーションファイルの構成
14回目の授業では、作成したプログラムの発表会を行う。プレゼンテーションを上手に行うことは、出来栄えの良いプログラムを作るのと同じくらい重要である。いくら素晴らしいものが出来上がっていても、聞くに堪えない発表であれば、聞き手は話を聞かずに他のことを始めてしまうだろう。発表時間は10分間とするが、聞き手の10分間を無駄にすることがないよう時間を有効に活用しよう。
そのためには、行き当たりばったりで発表するのではなく、発表の流れを決めておく必要がある。また、単に口頭で発表するだけでは重要なところがわかりづらいし、音声情報は時間的に保存ができないので、聞き手がWebページに注意を向けた際に聞き逃してしまう可能性がある。プレゼンテーションソフトでスライドを作成しておくと、発表者は重要な点を言い忘れることなく発表することができ、聞き手は聞き逃してもスライドを確認して内容を把握することができる。
以下が発表内容になるだろうが、これらの項目の順番や内容は各グループで自由に決めてよい。社会に出れば大学卒の皆さんはプレゼンテーションをできることが当然だと思われる。「もう少ししっかり準備していればよかった」とならないよう、この機会を有効に活用しよう。
- チーム名の由来
- メンバー紹介
- プログラムの概要
- プログラム作成理由
- 使い方・遊び方
- セールスポイント
[7] 乱数の発生(rand)
[8] 少し間を空ける(sleep)
[9] 時刻を取得する(Time.now)
[10] 大きな文字を出す(systemを用いたbannerコマンド)
[11] ポップアップで画像を表示(systemを用いたdisplayコマンド)
[12] 文字色変更・画面操作(\e[Xm)
[13] 配列に関するTips
[14] プログレスバーを作る
[15] 文字列操作
[16]出席課題
グループのメンバー、チーム名、役割分担、作成するプログラムの案について報告する。グループの他のメンバーにお任せにしていないことを確認するため、グループの代表者のみではなく、全員が提出する。
提出要領は下記の通り。
- 提出先:課題提出用メールアドレス
- メールのSubject:attend11
- 提出期限(問題1):授業終了時まで
Tips:emacsでの日本語入力のオンオフはCtrl-oです
Tips:Mewによるメールの送り方はMewコマンドを参照