roy > naoya > 基礎プログラミングII > (10)自由課題実施期間[1]

(10) 11/27の授業内容:自由課題実施期間[1]

⇒複雑なCGIを作る上でのヒント

[1]自由製作課題について

これまでは一人で限られた時間の中でプログラムを作成してきたため、規模の大きなものを作成することが難しかった。1年間続いたRubyの授業もそろそろ終わりを迎えようとしている。そこで、1年間の集大成として、これまで学んだ技術を駆使してグループで規模の大きいログラムを作ってみよう。

作成条件は以下の通りとする。

作成するもの

  1. プログラム(必ず2つ以上作成すること)
    • 理由(1):プログラムが1つだと得意な人が任されることになり、作業量の偏りが生じやすい
    • 理由(2):プログラムが1つだとグループ内の得意な人1~2名の力量により結果が決まってしまう
    • 理由(3):プログラムが1つだと複数の案が出た時に却下される案が多くなる
    • 理由(4):今年は例年と比べて受講生のレベルが高いので2つくらい作れそう
  2. Webページ(プログラムの説明書やプログラム本体を掲載)
  3. プレゼンテーションファイル(発表時に使用)

自由課題グループわけ

これまでに獲得をした得点に基づき、各グループの戦力が同程度になるよう に調整している。

123
C1121103 花山 宥太
C1130473 丸藤 伊織
C113060A 小関 真希
C1130846 佐藤 洸子
C1130941 澁谷 暁
C1131018 鈴木 匠
C113002A 青木 頌
C1130042 天野 祐華
C1130243 梅津 智華
C1130697 今野 稔
C1131165 髙橋 春
C1131283 永澤 理子
C113025A 梅津 直樹
C1130326 遠藤 拓也
C1130668 小山 光歩
C1131372 原 美咲
C1131627 山田 岳人
C1131662 渡部 奈穂子
456
C1130390 岡部 仁彦
C1131099 瀬尾 恭加
C1131314 新沼 悠也
C1131449 藤原 優花
C1131573 三沢 博樹
C1131691 渡辺 玲奈
C1121391 杉村 拓哉
C1130935 柴崎 有希
C1130970 菅原 和
C1131001 菅原 りこ
C1131219 玉山 佳奈
C1131395 日向 清香
C1130071 荒木 勇人
C1130444 加藤 優季
C1130740 齋藤 伸生
C1130869 佐藤 直輝
C113106A 鈴木 縁
C1131254 長南 直樹
7
C1130585 小嶋 凌太
C1130622 後藤 ゆり花
C1130763 齋藤 大樹
C1130875 佐藤 夏海
C1131082 須藤 史椰
C1131308 成澤 和沙

題材設定

後期グループ課題は諸君の実力を公(おおやけ)にアピールできるよう公開しやすい題材を選ぶ形式とする。以下の各部門から好きなものを選んで課題作成する。

  • 地域活性部門

    何か地域を盛り上げる助けになるもの

  • 福祉部門

    不自由を克服する人を支援するものなど

  • 役立ち情報部門

    知りたい人にとってしっかり役立つ情報を提供するもの

  • シミュレーション部門

    実世界でのできごとを計算機上で仮想的に実験するもの

  • 教育部門

    何かを学習する人の強力な助けになるもの

  • ビジュアル部門

    効果的な視覚情報を多数用意した凝った作りのもの

  • エンターテイメント部門

    大人から子供まで幅広く楽しめるもの

他チームの作品を評価するときに、その作品がエントリした部門のテーマに則しているかも大きく加味する。

前期同様の投票を行ない、上位2チームには合同発表会でのクラス代表発表をしてもらう。

過去の自由製作課題

参考までに過去の自由製作課題の例を示す。

作成が望ましくないプログラム

以下のプログラムは作成を避けるか、作成に当たりユーザが実施したいと思うような工夫を相当に考える必要がある。

  • 占い:乱数で結果を出すだけなので求められる技術レベルが低く、1年間学んだ集大成のプログラムとしては達成感に欠ける
  • 心理テスト:学術的に信頼性や妥当性が確認されている心理検査は著作権の問題があり、自由に利用することができない。適当に作った心理テストは根拠がないので面白みに欠ける
  • クイズ:取り扱うジャンルや問題数が豊富であれば実施したいと思うが、いずれかが不足していると実行してもらえない傾向にある

[2]今後の予定

本日の後半より自由製作課題を実施する。5~6人のグループで規模の大きなプログラムを作成する。以降の予定は以下の通りである。1月の授業は1月5日から開始となる。1月に入ると発表日の8日までほとんど時間がない。早め早めで準備を進めておくこと。

  • 11月27日(木)
    • 自由課題グループ分け
    • 楽しいプログラムを作るためのテクニック
    • グループ名の決定
    • 役割分担の決定
    • 作成するプログラムの検討
  • 12月4日(木)
    • プログラムの作成開始
    • Webページの作成開始
    • プレゼンテーションファイルの作成開始
    • 発表の流れの検討
  • 12月11日(木)
    • trr
    • プログラムの完成
    • Webページの完成
    • プレゼンテーションファイルの完成
    • 発表練習
  • 12月18日(木)
    • 休講(作業時間に当てても良い)
  • 1月8日(木)
    • 自由課題発表会(授業内)
  • 1月○日(補講期間)
    • 各クラス上位2チームによる合同自由課題発表会

[3]本日の作業内容

役割分担を決める。その上で何をいつまでにやるのかを相談する。役割としては例えば以下がある。準備期間中、当日それぞれについて役割を決定し、何もすることがない人が出ないようにしよう。

授業以外の時間に集まって作業を行う可能性があるので、連絡が取り合えるようにしておこう。後で、連絡が取れなくなって困ることがないようにしておくこと。

準備期間の役割(例)

  • プログラム作成
  • プログラムデータ作成(クイズなどの場合)
  • プログラムシナリオ作成(シミュレーションゲームなどの場合)
  • Webページ作成
  • 画像作成(Webページやプログラムで使用)
  • プレゼンテーションファイル作成
  • 発表シナリオ作成(時間配分や発表の流れ)

当日の役割(例)

  • 発表役
  • タイムキーパー
  • コンピュータ操作役

「応援」や「遊軍」、「パシリ」などの実質的に仕事のない役割は定めず、各人が何かしらグループ活動に貢献できるように分担を考えること。

役割分担が決まったら、作成するプログラムやWebページのイメージ、作成する画像などについて相談し、早速作成に取り掛かること。

[4]作業の進め方

役割が決まったら各自で作業を行うが、その際担当に応じて該当するページを確認しておくと良いだろう。

[5]プログラム作成上の注意

作成するプログラムは公開することを考え、以下の点に留意しよう。

  • 操作方法をわかりやすくする:ユーザ≠プログラム作成者であるため、初めて実行した人でも操作方法がわかりやすいことが望ましい。例えば、実行直後にprint"好きな数字を入力してください\n"とすると、何をするプログラムであるのか、何のために数字を入力しなければならないのかがわからない。ただし、余りにも細かく説明しすぎると、読むのが煩わしくなってしまう。プログラム作成担当でないグループ内の他のメンバに意見を求めると良い。
  • プログラムの構造をわかりやすくする:どこでどのような処理をしているのかについてコメントを残しておくと良い。複数人で協力して作成する場合、他人が書いたプログラムを理解するためには時間がかかることがある。また、よく出来たプログラムの場合、次年度以降の自由課題作成において参考にされる可能性もある。せっかく作ったプログラムであるため、将来的に活用してもらえるよう、構造をわかりやすくしておこう。
  • 協力して作成する:例えばクイズを作る場合、一人で問題を考えると20問程度が限界かもしれない。しかし、全員で考えれば100問以上の問題を作ることも出来る。毎回同じ問題が同じ順番で出題されるプログラムは1~2回しか実行してもらえないが、プールした100問の問題からランダムに10問出題するようなプログラムであれば、何度でも楽しむことができる。せっかく作るのであるから、多くの人に繰り返し実行してもらえるようなものを作ろう。
  • 技術レベルの高いプログラムを作成する:1年間Rubyを学んできた集大成のプログラムである。単に楽しい/役に立つだけではなく、技術的にもレベルの高いものを目指そう。if文を使ったシナリオ分岐型のプログラムは、ストーリーとしては面白いかもしれないが、それほど難しい技術を使っているわけではない。open-endやハッシュ、CGIなどを使うことを考えてみよう。

[6] 特定の文字・文字列の出現回数を調べる(count, scan)

>>More

[7] 乱数の発生(rand)

>>More

[8] 少し間を空ける(sleep)

>>More

[9] 時刻を取得する(Time.now)

>>More

[10] 大きな文字を出す(systemを用いたbannerコマンド)

>>More

[11] ポップアップで画像を表示(systemを用いたdisplayコマンド)

>>More

[12] 文字色変更・画面操作(\e[Xm)

>>More

[13] 配列に関するTips

>>More

[14] プログレスバーを作る

>>More

[15] 文字列操作

>>More

[16-1] コマンドラインを用いたデータ入力(ARGV)

>>More

[16-2] コマンドラインを用いたファイル出力

>>More

[16-3] STDERRとSTDIN・プログラムの強制終了

>>More

[17] 正規表現で文字列を分割

>>More

[18] プログラムからFirefoxを起動

>>More

[19]出席課題

グループのメンバー、チーム名、役割分担、作成するプログラムの案について報告する。グループの他のメンバーにお任せにしていないことを確認するため、グループの代表者のみではなく、全員が提出する。

提出要領は下記の通り。

  • 提出先:課題提出用メールアドレス
  • メールのSubject:attend10
  • 提出期限:授業終了時まで

Tips:emacsでの日本語入力のオンオフはCtrl-oです

Tips:Mewによるメールの送り方はMewコマンドを参照