(農業)情報工学(2016/11/17)

水稲の生育予測プログラムの作成(4)(【参考】)

今回は、あくまで、参考のために掲載した。課題では無いので興味のある人だけ読んで下さい。

ウェブ・アプリケーション

今回の講義で、いよいよ、水稲生育予測モデルの完成である。
前回までのプログラムは、JAVAの実行可能ファイルとして、手元のコンピュータの上でのみ動作していた。 今回は、これを、ウェブ・アプリケーションとして、実行可能な形式に変更する。つまり、ウェブ環境さえあれば、世界中どこからでも実行可能になるのでである。また、あわせて、GUIアプリケーションとしての体裁も整える。
Javaアプレット
前回までの課題において作成したJAVAプログラム(アプリケーション)は、コマンドライン引数を与えることにより、各種のパラメータ解析が可能になり、かなり完成度の高い物となっていた。ただし、実行環境は手元のコンピュータ上に限られていた。
今回は、このプログラムを、ネットワーク環境下で動作するJAVAのアプレットとして作り直すこととする。appletとは、小さな(let)アプリケーション(application)という意味で、ファイルサイズも小さく、インターネット上で読み込んで動作させるのも容易なプログラムの事である。これこそが、JAVAプログラミングの醍醐味であろう。
ただ、ネット上で動作させるために、セキュリティ上の制約や、ブラウザによる解釈の違い、java仮想マシンの不可解な動作状況などがあり、使いこなすには若干の(というより相当の)ノウハウが必要となっている。

アプレットとHTML
今回作成したプログラムを、ウェブ上のアプレットとして動作させるためには、
  1. アプレット本体(javacでコンパイルしたclassファイル) (今回のプログラム:Model04.class)
  2. アプレットを呼び出すためのhtmlファイル (今回の呼び出しHTMLの内容 : Model4.html)
の2つが必要である。
上の例に見るように、HTML内で、JAVAアプレットを呼び出す際には、<applet>タグを利用する。また、HTMLファイルから、アプレットに、パラメータを渡すしかけとしては, <name>タグ を用いて、次のように利用できる。 一方、HTMLから、パラメータを受け取るJAVAプログラムは、getParameterメソッドを用いる。 さらに、今回のプログラムでは、気象データファイルを、簡便に変更できる「選択リスト」を実装した。これは、JAVAのAWT(Abstract Windows Toolkit)の、LIST機能を用いた。
実際にModel4.htmlを実行すると、動作の概要が把握できると思う。
アプレットとHTMLに関する説明は、次のリンクなどで確かめて見ること。(パラメータに関する説明は無い)
アプレット(はいぱあワークブックより)
プログラムの動作
今回の課題プログラム(Model4.java)は、次のような構成になっている。
  1. イベント入力プログラムであることの宣言 ActionListener()クラス
  2. パブリック変数の宣言
  3. 初期化(一回だけ実行) init()
  4. 地域・品種データ・定植日の読み込み(入力パラメータの解釈)
  5. イベント待ち(気象データファイルの変更可能部分) actionPerformed()
  6. ペイント関数(複数回実行される)・気温データの読み込み(ファイル入力)
    積算気温の算出、各種ファクターの計算、結果の出力(標準出力) paint()
  7. 終了
今回の課題プログラムは、とりあえず、動作するように作ってある。しかし、このままでは、諸君が、従来までに取り組んできたイネのモデルを、十分に反映させているとは言えない。また、ウェブのアプリケーションとは言っても、手元のPCで実行できるだけである。そこで、今回の課題としては、次の内容を実行してもらう。

HTMLの基礎
HTMLとは?
Hyper Text Mark-up Languageの省略形で、「エイチ・ティー・エム・エル」と呼ぶ。
通常の文章に、タグ< >即ちかぎ括弧をつけて、表現力を豊かにした文章である。通常のテキスト(文章)を超越した(ハイパー)なテキストを作成するということから、「ハイパーテキスト」と呼ばれている。
特に、他の文章や画像などを、自由に文章の中に埋め込むことができる。(例:ここをクリックすると、ヤフーのトップページが表示される。)
この仕組みを「ハイパーリンク」と呼ぶが、HTMLはそのハイパーリンクなども自由に書き込むことのできる言語のことである。
HTMLTESTのページでは、タグの機能を学ぶことが出来るので、実際にいくつか試してみよう。
課題ファイルへのリンク



アプレットの作成と実行方法
プログラムはJAVAで作成する。
JAVAの使い方は、はいぱーワークブックなどで復習して欲しい。最も単純な使い方は、ターミナルから、
  1. javac Model04.java
のように、アプレットを、まず、1.コンパイルする。 次に、htmlファイルをエディターなどで作成する。そして、そのHTMLファイルを、Safariなどのブラウザで見ると、結果が正しいかどうかが、確認できる。なお、この段階では、 として、ブラウザを通さずに、アプレットビューアーで結果を確認することもできる。ただ、この場合はブラウザを通した結果と異なる場合があるので、注意が必要である。
サーバへの公開と提出
(2014/11/23:追加)
一部の記述を修正し、また、現在、変更となった記述は打ち消し線が引いてある。
なお、東大でのwebサイトの開設については、次のリンクが役立つ ECCSでのウェブサイトの作り方(はいぱあワークブックより)
自分用にウェブサーバの場所を確保する。公開設定では自宅でも確認できるようにすると良い。
その場所に、今回作成したデータ一式をアップロードしてもらいたい。
アップロードする際には、HTMLファイル、classファイル、気象データファイル、をすべて、送らなければならない。
アップロードが完了すれば、
http://user.ecc.u-tokyo.ac.jp/users/user-xxxxxx/Model4.html
として、アクセス可能になる。
(2016/11/10:追加)公開用ウェブサーバーへのアプロード方法としては、フリーソフトの「Filezilla」を用いる事により、さらに快適にファイルのアップロードが可能になる。ぜひ、利用してみてほしい。
FileZillaのサイト:https://filezilla-project.org
追加:従来、公開用ウェブサーバーへのアプロード方法としては、ファイルを一つずつ指定していたが、フリーソフトの「CyberDuck」を用いる事により、より快適にファイルのアップロードが可能になる。ぜひ、利用してみてほしい。
CyberDuckのサイト:http://cyberduck.ch/
簡単なCyberDuckの使い方:Cyberduckの利用方法
簡単なCyberDuckの使い方:Cyberduckの利用方法
(2014/12/05:追加)プログラムで必要な全てのファイル(気象データ)をアップロードしておかないと、エラーになる。注意する事。
(2014/11/23:追加)CyperDuckでは、sftp(ポート番号22)でアップロードすること。
今回のHTMLファイル、データ、classファイルをアップロードする場所は、次の通りになる。
サーバー user.ecc.u-tokyo.ac.jp
ディレクトリ名 user-xxxxxx (自分の固有番号)
.public_html
なお、CyberDuckの環境設定で、.で始まるファイルを表示するにチェックを入れ、再接続する必要がある。
また、アップロード後にclassファイルのパーミッションを誰でも読み込み可(644)にする必要がある。これは、アップロードしたファイルを「右クリック」して、「情報」を見ることによって変更できる。
今回の課題は、
  1. アップロードした、Model4に関する、自分のURL
    ともかく、実行可能になっていれば、OK!(動かなくても取りあえず提出)
  2. 自分のイネの生育モデルに関する説明。
     例:いもち病の発生モデルは組み込んだ。
       高温障害のモデルも入れてみた。
  3. どの気象データを用いると、どんな結果が表示されるかについての説明
  4. これまでに取り組んだ、イネの生育モデルに関する感想。
  5. 授業の内容や進め方に関する、意見、感想などなど。
を、ITC-LMSを用いて、課題として提出することである。課題は、一つのファイル(テキストファイルが好ましいが、ワードのファイルでも良い)の中に、記述すること。
健闘を祈る。
参考(応用)課題

新しいテキストフィールドを追加する方法

ここでは、いもちのトリガー温度i_triggerを、ブラウザ上で指定できるようにする方法を紹介する。
  1. TextFieldの定義(tf2の定義)
    TextField tf = new TextField(20);
    TextField tf2 = new TextField(5);
    java.awt.List lt = new java.awt.List(3, true);
  2. 新TextField(tf2)の表示の追加
    add(tf);
    add(tf2);
    add(bt);
  3. tf2に入力されたデータの読み込み
    tf.setText( tempfile );
    i_trigger = Double.parseDouble( tf2.getText() );
    repaint();

Valid HTML 4.01 Transitional