## Day 1 (2021/5/10) 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 ### 課題1 imgタグとaタグを使って、画像のアイコンをクリックすると、Googleにジャンプするボタンを作り、それをHTMLファイルとして保存し、ブラウザで表示させる。 ## Day 2 (2021/5/17) 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 ## Day 3 (2021/5/19) 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 ## Day 4 (2021/5/24) 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 練習問題:[[https://github.com/mdn/learning-area/blob/master/javascript/introduction-to-js-1/what-is-js/javascript-label.html|このページ]]のHTMLをメモ帳などに貼り付けて、Javascriptが動作するか見てみる。Javascriptが動いたら、[[https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Strings#concatenation_in_context|ここ]]の「様々な結合」という動きをするようにHTMLに記述する。 練習問題2:問題1のHTMLについて、“水圏生物工学”とダイアログに入力された場合のみ、「ようこそ」とalert関数で表示するボタンを作る。 メモ:ChromeでF12キーを押して、開発者ツールを開き、「Console」タブを開いて、そこにJavascriptを記述する。ChromeのConsole内での改行は「Shift+Enter」で改行できる。 ## Day 5 (2021/5/26) 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 English: https://pietschsoft.com/post/2015/09/05/javascript-basics-how-to-create-a-dictionary-with-keyvalue-pairs https://developer.mozilla.org/ja/docs/Learn/JavaScript/Objects/Basics https://developer.mozilla.org/ja/docs/Learn/JavaScript/Client-side_web_APIs/Manipulating_documents 練習問題:[[https://www.w3.org/People/mimasa/test/|このページ]]のリストの適当な項目にChromeのConsoleからいくつか色を付けてみる。.style.colorプロパティなどを使ってみるなど。 1. "XHTML image map test (XHTML browsers only)"の項目の文字の色を赤にする。(リンク以外の文字の色が変わればOK。もちろん、リンクの色も変えるように変更してもOK。) .style.colorプロパティを使用。 2. querySelectorAllでliをすべて列挙し、偶数番目の項目に対してのみ背景色を黄色にする。 .style.backgroundColorを使用。 偶数かどうかは、演算子「% (剰余算、余り)」を使う。 ## Day 6 (2021/5/31) 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個ずつ図形を描く。 ``` ## Day 7 (2021/6/7) いよいよサーバ側の開発に移行します。 これまでは、ChromeのJavaScript実行エンジンを使ってましたが、サーバではJavaScriptの実行環境としてNodeJSというプログラムを使います。NodeJSのインストールを行う必要があるので、下記のWEBサイトにアクセスしてバージョン14.17.0 LTSをインストールしておいてください。 日本語:https://nodejs.org/ja/ 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の文字をサーバの現在時刻に変更する。 ## Day 8 (2021/6/9) 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/ 課題:[[https://www.w3.org/People/mimasa/test/|このページ]]を再現するように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", ""] ]}; ``` ## Day 9 (2021/6/14) ・クライアントの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に変更しても、クライアントからデータを正しく受け取って、ブラウザ画面上のどこかに表示する ## Day 10 (2021/6/16) ・サーバ側で外部プログラムを起動した結果を、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: https://stackoverflow.com/questions/46482424/how-to-get-textual-stdout-from-console-logrequirechild-process-execsyncls 課題 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ライブラリを使って解凍しておく。 参考:https://webbibouroku.com/Blog/Article/html5-file-accept https://www.yoheim.net/blog.php?q=20141002