Webアプリケーションって何?
What is Web applications?
https://www.sei-info.co.jp/it-keyword/summary_webapplication.html
HTML、JavaScriptについての入門書は色々ありますが、下記のMDNのページが英語、日本語、中国語など色々な言語に翻訳されているので、今回のトレーニングでは下記の資料を使います。
There are many introductory books on HTML and JavaScript, but the following MDN pages seems to be good to start because there are a lot of documents translated into various languages such as English, Japanese and Chinese.
https://developer.mozilla.org/
まずは下記の「HTML を始めよう」を題材に1回目の講習を行います。
First of all, I would like to hold the first training session on the subject “Getting Started with HTML”.
日本語 (Japanese):https://developer.mozilla.org/ja/docs/Learn/HTML/Introduction_to_HTML/Getting_started
英語 (English): https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started
中国語 (Chinese): https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Introduction_to_HTML/Getting_started
imgタグとaタグを使って、画像のアイコンをクリックすると、Googleにジャンプするボタンを作り、それをHTMLファイルとして保存し、ブラウザで表示させる。
https://developer.mozilla.org/ja/docs/Learn/HTML/Introduction_to_HTML/HTML_text_fundamentals
https://developer.mozilla.org/ja/docs/Web/HTML/Element/table
https://developer.mozilla.org/ja/docs/Learn/HTML/Introduction_to_HTML/Creating_hyperlinks
https://developer.mozilla.org/ja/docs/Learn/HTML/Forms/Your_first_HTML_form https://developer.mozilla.org/ja/docs/Learn/Forms/Sending_and_retrieving_form_data https://developer.mozilla.org/ja/docs/Web/HTML/Element/input/radio https://developer.mozilla.org/ja/docs/Learn/CSS/First_steps/Getting_started
Google Chromeを使用します。インストールしておいてください。
https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/What_is_JavaScript
https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Variables https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Math https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Strings https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Useful_string_methods https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/conditionals
練習問題:このページのHTMLをメモ帳などに貼り付けて、Javascriptが動作するか見てみる。Javascriptが動いたら、ここの「様々な結合」という動きをするようにHTMLに記述する。
練習問題2:問題1のHTMLについて、“水圏生物工学”とダイアログに入力された場合のみ、「ようこそ」とalert関数で表示するボタンを作る。
メモ:ChromeでF12キーを押して、開発者ツールを開き、「Console」タブを開いて、そこにJavascriptを記述する。ChromeのConsole内での改行は「Shift+Enter」で改行できる。
https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Arrays https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/Looping_code
連想配列 Dictionary with Key/Value pairs
日本語:https://techplay.jp/column/528
https://developer.mozilla.org/ja/docs/Learn/JavaScript/Objects/Basics
https://developer.mozilla.org/ja/docs/Learn/JavaScript/Client-side_web_APIs/Manipulating_documents
練習問題:このページのリストの適当な項目にChromeのConsoleからいくつか色を付けてみる。.style.colorプロパティなどを使ってみるなど。
JavaScriptの関数とお絵描きをやってみる予定です。
https://developer.mozilla.org/ja/docs/Web/HTML/Element/canvas https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/Functions https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/Return_values https://developer.mozilla.org/ja/docs/Web/Guide/HTML/Canvas_tutorial/Drawing_shapes
課題1:2つの数字を引数を受けとり、大きいほうの数字を戻してくれる関数を作る。
課題2:3つの図形をランダムな場所に10個ずつ描画する。(下記のステップで進めてみると良いかも。)
1.3つの関数を作る 違う形を描画する3つの関数を作る 2.引数で描画開始地点を指定できるようにする。 3.ループの中で、ランダムに描画開始地点を指定して10個ずつ図形を描く。
いよいよサーバ側の開発に移行します。 これまでは、ChromeのJavaScript実行エンジンを使ってましたが、サーバではJavaScriptの実行環境としてNodeJSというプログラムを使います。NodeJSのインストールを行う必要があるので、下記のWEBサイトにアクセスしてバージョン14.17.0 LTSをインストールしておいてください。
English: https://nodejs.org/en/
https://developer.mozilla.org/ja/docs/Learn/Server-side/Express_Nodejs/Introduction
https://developer.mozilla.org/ja/docs/Learn/Server-side/Express_Nodejs/skeleton_website
https://www.sejuku.net/blog/28449
練習1:/testにアクセスしたら、”Express”ではなくて、“Test2”というタイトルが表示されるように変更する。
練習2:Expressの文字をサーバの現在時刻に変更する。
PUGの練習をします。
日本語:https://qiita.com/c2997108/items/fee5d2ca1d2e524823e5
日本語:https://docs.qranoko.jp/static/pug.html#variable
日本語:https://tr.you84815.space/pug/language/iteration.html
English:https://www.sitepoint.com/a-beginners-guide-to-pug/
課題:このページを再現するようにPUG+JSを書いてみる。
1.上記ページの下記の4項目程度を再現するようにPUGを書いてみる。(リンクも再現すること。)
・Object test (not actively maintained) ・Object test - results ・Java applet test (not actively maintained) ・Java applet test - results
2.index.jsのほうで、下記のように配列を定義して1項目「・Object test (not actively maintained)」がリンク付きで出力されるPUGを書く。
router.get('/', function(req, res, next) { let data = ["object/", "Object test", "(not actively maintained)"]; res.render('index', { title: 'Express', data: data }); });
3.JSのほうで、下記のようにulのIDごとにリンク先のURL、リンクの本文、リンクの後ろの文字列、を入れた連想配列を作成し、その配列を受け取ってeach文で展開するPUGを書く。
let data = {object:[ ["object/", "Object test", "(not actively maintained)"], ["object/results", "Object test - results", ""] ], java:[ ["object/java/", "Java applet test", "(not actively maintained)"], ["object/java/results", "Java applet test - results", ""] ]};
・クライアントのHTMLフォームから、サーバのNodeJSにデータを渡す
https://developer.mozilla.org/ja/docs/Learn/Forms/Sending_and_retrieving_form_data
日本語:
https://qiita.com/Yuuma-ujimoto/items/bc55ecddf4d0302b2992
https://qiita.com/TakeshiNickOsanai/items/b1720dcbe2bb5f9e524f
English: http://www.w3big.com/nodejs/nodejs-express-framework.html
課題
1.フォームの値をGETメソッドで受け取れていることを、console.logで確認する
2.受け取った値をindex.pugに渡して、ブラウザの画面上のどこかに表示する
3.GETからPOSTに変更しても、クライアントからデータを正しく受け取って、ブラウザ画面上のどこかに表示する
・サーバ側で外部プログラムを起動した結果を、PUGに変数で渡してクライアントのWEBブラウザに表示する
日本語:
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions
https://www.javadrive.jp/javascript/function/index16.html#section2
https://tkybpp.hatenablog.com/entry/2016/04/25/163246
https://tech.chakapoko.com/nodejs/file/list.html
https://www.gesource.jp/weblog/?p=8216
English:
課題
1.Expressの実行フォルダの中に適当なファイルを作り、そのファイル名をNodeJSのfsを使って表示する。
2.上記ファイルをNodeJSのfsを使って消す。
必須要件1:expressで動作するWEBアプリケーションを作成し、「http://localhost:3000/list/」にアクセスすると、サーバ上の特定のフォルダ(例:/opt/blast/dbとか、C:\opt\blast\dbとか)の中にある、ファイルの一覧を表示する。ファイルのリストの左横にはチェックボックス、ページ上部か下部に「削除」ボタンを表示し、「削除」ボタンを押すと、選択したチェックボックスのファイルを削除する。
必須要件2:「http://localhost:3000/upload/」にアクセスすると、FASTAファイルをアップロードして、BLASTDBを作成するページを作成する。例:http://suikou.fs.a.u-tokyo.ac.jp/upload_sequenceserver/ 。
BLASTDBの作成は、FASTAが塩基配列であれば、「C:\\Users\\xxx\\Downloads\\makeblastdb -in input.fasta -dbtype nucl -hash_index -parse_seqids
」、FASTAがアミノ酸配列であれば、「/User/xxx/Download/makeblastdb -in input.fasta -dbtype prot -hash_index -parse_seqids
」を使えばよい。ファイルのアップロードは次を参照。https://code-kitchen.dev/html/input-file/ BLASTのダウンロードは「https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/」から。
下記のオプションの内、2つ以上を実装すること。
1.表示するのをファイル一覧ではなく、BLAST DBのファイルのプレフィックス(nr.palとかだと、nrだけ)にして、選択されたDBのファイルたちを全部消す(nrが選ばれると、nr.pal, nr.pdb, nr.pos, nr.pot, nr.ptf, nr.ptoなどをまとめて消す)。
2.makeblastdbのコマンドがエラーになったときは、分かりやすいエラーメッセージを表示する。(例えば、FASTA以外のファイルが入力された時にmakeblastdbがエラー終了するときなど。)
3.URLがhttp://localhost:3000/以外になっても対応できるように、またapacheなどのWEBサーバの下でnodejs-expressを動かすときのために、相対パスでpug, jsを記述する。
4.CSSを使って、見栄えを良くする。
5.BLASTDBファイルを削除するのか、リネームするのか選べるようにする。(リネーム機能には何が必要か考えて実装してみる。)
6.アップロードされるファイルの拡張子の種類を.fasta, .faと.fasta.gz, .fa.gzに限定し、.fasta.gz, .fa.gzの時はnodejsのzlibライブラリを使って解凍しておく。