[Exp2013]シェルスクリプト課題

提出について

  • 提出期限: 8/29(木) 23:59
  • 修正期限: 9/5 (木) 23:59

レポートの作成方法

  • ITPASS サーバでレポートを公開するには を参照してください. また, 簡単なレポートの書き方指南 も良く読みましょう.
  • レポートの一番上に以下のことを必ず明記してください.
    • タイトル (例: ITPASS 実習レポート1)
    • 名前
      • 学籍番号は書かないでください.
    • 担当情報実験機名 (例: joho01)
  • レポートの HTML ファイルの名前は index.html にしてください. 複数の HTML ファイルを作る場合は, 以下の要件を満たすようにしてください.
    • index.html を表紙, 目次とする
    • どの HTML ファイルも index.html との相互リンクが張ってある
  • レポートのテンプレート を置いてあります. 自由に使ってもらってかまいません.
  • HTML の書き方については実習の時間内では解説しません. Web や書籍などで書き方を調べてください. 上記のテンプレートを参照するのもよいでしょう. これもレポートの一環としてがんばってください.
  • 問題の難易度を高めに設定しています. 解けない場合は, 未完成のスクリプトを提出し, どこまでできて, 何につまづいたかを詳しく解説してください. 問題そのものができていなくても, きちんとした解説があるレポートには高い評価を与えます.
  • 自力で頑張っても分からない場合は, 他の人が提出したレポート (実習のメーリングリストに投げられたレポート提出報告メールに 書かれている (はずの) URL から見られます) を参考にすることを推奨します. その場合, 参考にしたレポートを参考資料に挙げるようにしてください. また, 丸写しにするのではなく, 自分なりの改良も加えましょう.
  • 2008 年のレポート課題, 2009 年のレポート課題, 2010 年のレポート課題 , 2011 年のレポート課題 , 2012 年のレポート課題も参考にしてみてください.

授業時間外のレポート作成について

  • 自宅, 学内から ITPASS サーバ (ika-itpass) にログインする場合, [TEBIKI]SSHサーバへの公開鍵認証によるログイン を参考にして下さい.
    • Windows からの接続については, こちら

      • [TEBIKI]Tera Term を用いた SSH サーバへのログイン
      • [TEBIKI]Xming を用いた X (ウィンドウ) の飛ばし方
      • [TEBIKI]ITPASS サーバへのファイル転送方法

      を参考にすると良いでしょう.

    • なお, 学外からは情報実験機 (johoXX-itpass) に直接ログインすることはできません. 学外からは itpass サーバ (itpass.scitec.kobe-u.ac.jp) にログインし, itpass サーバから情報実験機に ssh でログインしましょう.
  • シェルスクリプトを作って実行するだけなら学内の Mac でもできます.
  • 507 号室にある自分の担当マシンは, 部屋の使用予定がない限り, 許可なく使ってもらってもよいです. ゼミなどで使用している場合も, その場で許可をとってもらえば使用してかまいません.
  • 507 号室への入室にあたり事前に許可は不要ですが, 鍵がかかっていて入れないことがあります. 希望者には鍵を貸し出しますので, TA にご一報ください.
  • 部屋を使用するときには, 506 号室 もしくは 508 号室にいる人に一言断ってから使用してください. [Exp2013]実習部屋(507号室)の使い方 もよく読んでください.

レポートの提出方法

ファイルを置く

今回のレポートは全て ITPASS サーバ (ika-itpass) の ~/public_html/report01/ 以下に置いてください. 置き場所となるディレクトリは必要に応じて自分で作ってください.

情報実験機で作ったファイルを ITPASS サーバに転送するには scp というコマンドを使うとよいでしょう. 詳しくは man を見てください. 各ファイルの置き方は以下のようにしてください.

  • html ファイルは ~/public_html/report01/ 以下に置く.
  • シェルスクリプトは ~/public_html/report01/scripts/ 以下に置く.
  • 結果として出力されたファイルは ~/public_html/report01/results/ 以下に置く.
  • 注意: 問題として配布するデータファイルは置かなくても結構です. ただし, どこからどうやって入手したかはレポート本文に明記しておきましょう.

アップロード確認

ブラウザから全部のファイルにアクセスできるか確認してみましょう. 例えば, ITPASS サーバ (ika-itpass) では, ~/public_html/report01/index.html に対応する URL は

http://itpass.scitec.kobe-u.ac.jp/~(自分のアカウント名)/report01/index.html

になります.

提出完了の報告

提出期限までに以下のメールを送ってください. 内容を確認した後, 修正すべき点があればその旨を連絡します. 修正完了後, 再度メールで報告してください. こちらから, レポート提出完了のメールが送られた時点で レポートを提出したことになります.

  • メールの内容
    • 件名
      • 「ITPASS実習レポート 8/9 出題分 (自分の氏名)」
    • 宛先
      • itpass のメーリングリスト
    • メール本文に必ず記入すること
      • 情報実験機番号
      • 氏名
      • レポートの URL

必須課題

問題 1

問題 1 画像ファイルの名前を修正し, 動画を作成するスクリプト

2011年1月1日から1月7日までの, 1時間ごとに撮影された地球の気象衛星画像があります. これらの画像は複数のディレクトリに分かれて格納されています. これらの画像の名前を(0001.jpg, 0002.jpg, 0003.jpg, ...)のように変更して 一つのディレクトリに格納したうえで, アニメーションを作るようなスクリプトを作成してください.

  • もとのディレクトリ構造は以下のようになっています.
/home/hoge/kadai1_data
|-- 01/
    |-- 01/
    |   | -- ql.11010100.jpg
    |   | -- ql.11010101.jpg
    |   | -- ql.11010102.jpg
    |   | -- ......
    |
    |-- 02
    |   | -- ql.11010200.jpg
    |   | -- ql.11010201.jpg
    |   | -- ql.11010202.jpg
    |   | -- ......
    |
    |-- 03/
    |   | -- ql.11010300.jpg
    |   | -- ql.11010301.jpg
    |   | -- ql.11010302.jpg
    |   | -- ......

このように各日付ごとに分かれて格納されています.

  • スクリプト実行後のディレクトリ構造は以下のようになるよう, スクリプトを作成してください. 必須課題は1月のみです.
/home/hoge/kadai1_data_new
|-- 01/
|   |-- 000001.jpg
|   |-- 000002.jpg
|   |-- 000003.jpg
|   |-- 000004.jpg
|   |-- 000005.jpg
|   |-- 000006.jpg
|   |-- 000007.jpg
|   |-- .......

このようにひとつのディレクトリにまとめて画像を格納してください. その際に名前は(000001.jpg, 000002.jpg, 000003.jpg, ...)のように変更してください.

さらに, gif アニメーションを作成してください convert というコマンドを用いることで gif アニメーションを作成することができます. convert コマンドの使い方については各自で調べてください.

  • convert コマンドは計算機のリソースを大量に消費するので, ITPASS サーバ上では行わず, 各情報実験機で行ってください.
事前準備

スクリプトを作成する前に, ITPASSサーバ上の画像ファイルを自分のホームディレクトリに持ってきてください. 次のコマンドをITPASSサーバで実行します。

cp /home/itpass/ftp/exp/fy2013/130809/practice_kadai/kadai1_data.tgz /home/hoge/

サンプル画像ファイルは圧縮ファイルにまとめられています. tar コマンドを用いて圧縮ファイルを展開してください.

cd ~hoge
tar xvzf ./kadai1_data.tgz

さらに自分が使用している情報実験機に画像ファイルをコピーしてください.

cd ~hoge
scp -r ./kadai1_data/ hoge@133.30.109.??:kadai1_data/

?? には, 自分が使用している情報実験機のIPアドレスを入力してください.

興味のある方は, 2011年1月から3月までのデータを

/home/itpass/ftp/exp/fy2013/130809/practice_kadai/kadai1_data_full.tgz

に用意しましたので, 1週間より長い動画を作成してみてもよいでしょう.

レポートに書く内容

レポート内には以下を記述してください. ただしリンクを貼る際は相対パスで指定するようにしてください.

  • シェルスクリプトファイル quiz1.sh.txt へのリンク

    上記で作成した quiz1.sh を quiz1.sh.txt という名前に変更してください. ブラウザ上から読めるようにするためです.

  • シェルスクリプトの解説

    スクリプト内の各行が何をしているのか, スクリプト内にコメント文として書く.

  • スクリプトの使い方の解説

    これをもとに TA が実際にテストします.  実行する際のスクリプト, データの置き場を明示すること.

  • 実行例 quiz1.txt へのリンク

    実行例とは, スクリプトの作業記録です. 自分が実際にスクリプトを実行したときのコンソールをテキストファイルにコピーするなどしてください.

  • 生成された実行結果 result_1.gif ページへのリンク
  • 参考資料

    URL をベタ書きにするのではなく, そのページの作者やタイトル, および何を参考にしたのかも明記する.

  • 共同作業した人の名前
  • 工夫したこと, 感想など

実行結果の例

なお, 本課題に使用している気象衛星画像は高知大学気象情報頁からダウンロードしました.

問題 2

問題 2 ゆるキャラグランプリ 2012 の結果を解析するスクリプト

ここに, ゆるキャラグランプリ2012の結果をまとめたデータファイルがあります. このファイルの各行には, 次のような形式でそれぞれのゆるキャラに対するグランプリの結果が記されています.

<エントリーNo>, <ゆるキャラの名前>, <出身地(都道府県)>, <得票数>

このファイルから必要なデータを適宜読み込んで, 指定された都道府県内でのゆるきゃらランキングを出力するスクリプトを作成してください. ただし, スクリプトには以下の処理を必ず組み込むようにしてください.

  • どの都道府県に対して行うかを, 実行時引数で指定できるようにする. また, 存在しない都道府県が指定された場合はエラー処理をきちんと行う.
  • 指定された都道府県の得票数が, 全国の得票数の何%(小数点一桁目まで計算すること)にあたるかを計算する.
  • 都道府県別ランキングの情報は, 以下のようにコンソールに出力する.
[<都道府県名>内ゆるキャラランキング(全国得票数中 **.* %)]
1位 <投票数> <エントリーNo> <ゆるきゃらの名前> 
2位 <投票数> <エントリーNo> <ゆるきゃらの名前> 
3位 <投票数> <エントリーNo> <ゆるきゃらの名前>
.
. 

なお, 本課題で使用するゆるきゃらグランプリのデータファイルは, ゆるキャラグランプリ2012をもとに作成しました.

レポートに書く内容

レポート内には以下を記述してください. ただしリンクを貼る際は相対パスで指定するようにしてください.

  • シェルスクリプトファイル quiz2.sh.txt へのリンク

    上記で作成した quiz2.sh を quiz2.sh.txt という名前に変更してください. ブラウザ上から読めるようにするためです.

  • シェルスクリプトの解説

    スクリプト内の各行が何をしているのか, スクリプト内にコメント文として書く.

  • スクリプトの使い方の解説

    これをもとに TA が実際にテストします.  実行する際のスクリプト, データの置き場を明示すること.

  • 実行結果 result_2.txt ページへのリンク

    47都道府県の中から10都道府県を適当に指定してスクリプトを実行し, その結果をresult_2.txt にリダイレクトしてください. また, 存在しない都道府県を指定した場合の出力結果も result_2.txt の最後に加えてください.

  • 参考資料

    URL をベタ書きにするのではなく, そのページの作者やタイトル, および何を参考にしたのかも明記する.

  • 共同作業した人の名前
  • 工夫したこと, 感想など

実行結果の例

$ ./quiz2.sh 兵庫県
[兵庫県内のゆるキャラランキング(全国得票数中 2.7%)]
 1位  73513pt No.261  ちっちゃいおっさん  
 2位  33036pt No.180  ぼっくりん              
 3位  31770pt No.405  みやたん                 
 4位   7432pt No.554  しろまるひめ           
 5位   5460pt No.115  わたる                    
(以下略)

$ ./quiz2.sh アキレス県
  アキレス県は存在しません. 適切な都道府県名を指定してください.  

オプション課題

問題 3

自分の生まれた年・月の東西平均温度分布図を描く ruby スクリプト

1948年1月から2013年6月までの, ひと月ごとの月平均温度データがあります. このデータを用いて, 自分の生まれた年月の東西平均温度分布図 (横軸: 緯度, 縦軸: 気圧) を描く ruby スクリプトを作成してください.

  • 描画には, 電脳 ruby プロジェクト で開発された, GPhys, GGraph を用いてください.
  • GPhys, GGraph の使い方の詳細は, チュートリアル を使って自習してください.
  • 描画に用いる気象データは, itpass サーバの /home/itpass/ftp/exp/fy2013/130809/practice_kadai3/data/air.mon.mean.nc を使ってください.
レポートに書く内容

レポート内には以下を記述してください. ただしリンクを貼る際は相対パスで指定するようにしてください.

  • シェルスクリプトファイル quiz3.rb.txt へのリンク

    上記で作成した quiz3.rb を quiz3.rb.txt という名前に変更してください. ブラウザ上から読めるようにするためです.

  • ruby スクリプトの解説

    スクリプト内の各行が何をしているのか, スクリプト内にコメント文として書く.

  • スクリプトの使い方の解説

    これをもとに TA が実際にテストします.  実行する際のスクリプト, データの置き場を明示すること.

  • 実行例 quiz3.txt へのリンク

    実行例とは, スクリプトの作業記録です. 自分が実際にスクリプトを実行したときのコンソールをテキストファイルにコピーするなどしてください. 具体的には下記の実行例のようなものです.

  • 実行の結果得られた画像ファイル result_3.png (or result_3.ps, ..., など) へのリンク
  • 参考資料

    URL をベタ書きにするのではなく, そのページの作者やタイトル, および何を参考にしたのかも明記する.

  • 共同作業した人の名前
  • 工夫したこと, 感想など

実行結果の例

2013 年 6 月の温度分布は下のようになります.

実行結果のサンプル

ヒント

Ruby および GPhys のインストール

インストールは, debian パッケージを使うと良いでしょう.

  • /etc/apt/sources.list の編集

    /etc/apt/sources.list に下の行を追記します.

    deb http://www.gfd-dennou.org/library/cc-env/Linux/debian-dennou wheezy/

    deb-src http://www.gfd-dennou.org/library/cc-env/Linux/debian-dennou wheezy/

  • パッケージデータの更新

    # apt-get update

  • 最後にインストール

    # apt-get install gphys

    gphys をインストールすることで, ruby などの関連するソフトウェアもインストールされます.

インストールについての詳細は, こちらを参照してください.

データの時刻指定

データのなかの時刻を指定するためには Date.parse を用いると良いでしょう. 例えば, 下のスクリプトの例では 2013 年 1 月 (1 日) を指定しています.

require "numru/ggraph"
include NumRu
gphys = GPhys::NetCDF_IO.open('air.mon.mean.nc', 'air')  # データファイルのオー プン
DCL.gropn(1)                 # DCLのオープン
DCL.sgpset('lcntl', false)   # 制御文字を解釈しない
DCL.sgpset('lfull',true)     # 全画面表示
DCL.uzfact(0.75)             # 座標軸の文字列サイズを 0.75 倍
DCL.sgpset('lfprop',true)    # プロポーショナルフォントを使う
GGraph.set_fig 'itr'=>1, 'viewport'=>[0.15,0.85,0.1,0.6] # 軸, 描画範囲指定
gphysout = gphys.cut('time'=>Date.parse('2013-01-01'))   # 2013/01 データの切り 出し
GGraph.tone( gphysout, true, 'map_axes'=>true )          # 描画
GGraph.color_bar                                         # カラーバー描画
DCL.grcls

出力画像フォーマット

GPhys (dcl) では, gropn の引数を変えることで出力画像フォーマットを 変更することができます.

しかし, あらゆるフォーマットに対応しているわけではありません. 良く使われる出力形式は postscript (ps) ですが, そのままで使いにくい 場合には, convert を使って png や gif に変換すると良いでしょう.