class: title, smokescreen, shelf, no-footer # 第05回 Unix演習<br><small>平行プロセスを実行・調査</small> <div class=footnote> <small><small> </small></small> </div> --- class: compact # 体験「在庫処理がおかしいショッピングサイト」 今回は体験するだけです 1. EC2を起動し 1. zaiko.pyをダウンロードしてください(オプションは大文字のオー;OscarのO) ``` curl -O http://api.fml.org/dist/isd/zaiko.py ``` 1. zaiko.pyを実行してみてください。今回sudoは不要です ``` python3 zaiko.py ``` - 実行結果は各自ことなります - よ〜く見ると、在庫数の動きがおかしいことがわかります(次頁を参照) - なお偶然うまくいくこともあります。そのときは、もういちど実行してください --- class: compact # 実行例(講義スライドより再掲) <small><small> ``` $ python3 zaiko.py 在庫 = 50 -> 49 | ユーザ 1が一つ購入 (合計 1個売れた) 在庫 = 49 -> 48 | ユーザ 2が一つ購入 (合計 2個売れた) 在庫 = 48 -> 47 | ユーザ 3が一つ購入 (合計 3個売れた) 在庫 = 47 -> 46 | ユーザ 4が一つ購入 (合計 4個売れた) 在庫 = 46 -> 45 | ユーザ 5が一つ購入 (合計 5個売れた) 在庫 = 45 -> 44 | ユーザ 6が一つ購入 (合計 6個売れた) 在庫 = 44 -> 43 | ユーザ 7が一つ購入 (合計 7個売れた) 在庫 = 43 -> 42 | ユーザ 8が一つ購入 (合計 8個売れた) 在庫 = 42 -> 41 | ユーザ 9が一つ購入 (合計 9個売れた) 在庫 = 41 -> 40 | ユーザ10が一つ購入 (合計10個売れた) 在庫 = 40 -> 39 | ユーザ11が一つ購入 (合計11個売れた) 在庫 = 40 -> 39 | ユーザ12が一つ購入 (合計12個売れた) 在庫 = 39 -> 38 | ユーザ13が一つ購入 (合計13個売れた) 在庫 = 38 -> 37 | ユーザ14が一つ購入 (合計14個売れた) 在庫 = 38 -> 37 | ユーザ15が一つ購入 (合計15個売れた) ... 以下略 ... ``` </small></small> --- name: exercises-aws class: title, smokescreen, shelf, no-footer # 第05回 AWS演習<br><small>FORM文(アップロード)の復習</small> <div class=footnote> <small><small> </small></small> </div> --- class: compact,img-right # 課題(必須): FORM文(アップロード)の復習 ![](../images/www-upload-html.png) ![](../images/www-upload-done.png) <div class=footnote> <small><small> 解説は2ページくらい先から始まるぞ </small></small> </div> <small> 1. index.html (/home/admin/htdocs/index.html)に、右図(上)のようなHTMLを追加してください 1. www.pyはアップロード機能搭載です。 <br> 普通に起動してください 1. ファイルをアップロードしてください - 見本のファイルはポータルで配布します - アップロードに成功すると右図(下)のようにファイルのサイズが表示されます - EC2上に/home/admin/htdocs/file.uploadedというファイルが作成されているはずです。 確認してください <br> 注:なお、このファイル名は固定です、選択したファイル名にはなりません </small> --- class: compact # 課題(自由) <div class=footnote> <small><small> (脚注) もちろん、この課題を理解するには授業で取り上げていない知識がたくさん必要です。 </small></small> </div> <small> 1. 前半のUnix演習で用いたzaiko.pyのソースコードを読み、次の点を具体的に解説せよ - どこが間違っているのか? - どう直せば良いのか?実際に動くコードとともに示せ - 提出先はポータルのレポートボックス(課題ごとに作っておきますね) 1. アップロードしたファイルを「EC2上に『FORMで選択したファイル名』で作成する」には、 www.pyを、どのように改造すればよいか? また、改造の際には何に気をつけるべきか? - 提出物 - 改造例のソースコード - 気をつけるべき点についての考察 - 提出先はポータルのレポートボックス(課題ごとに作っておきますね) - 実演は...次回の演習の時にでも見せてもらうか(つまり提出物が先ということね) 1. このアップロード方法では、あきらかに、スケールするクラウドらしいシステムは作れない。 どのような設計をするべきか?その方針と構成図を示せ (この課題は実装しなくても良い) - 提出先はポータルのレポートボックス(課題ごとに作っておきますね) </small> <!-- section-begin www.html.form.upload-api-v1 --> --- name: www.html.form.janken-api-v2 class: title, smokescreen, shelf, no-footer # <small>ファイルをアップロードするHTML FORM文</small> <div class=footnote> <small><small> </small></small> </div> --- class: compact # FORM文のつづき - 以前、FORM文で値をサーバに送信する方法をやりました - ホームページには、それがあるはずですね? - 似たような書き方をすればファイルのアップロードも可能です - 違いを説明していきます - 以下、「値を送信するFORM文」は分かっている想定です ``` [HTMLの例] <FORM METHOD=POST ENCTYPE=multipart/form-data ACTION=http://www1.学籍番号.cloud.fml.org/api/upload/v1> <INPUT TYPE=file NAME=file> <INPUT TYPE=submit VALUE=upload> </FORM> ``` ![](../images/www-html-form-upload-api-v1.png) --- class: compact # FORM文(1): FORMタグの属性 <div class=footnote> <small><small> (脚注) multipart/form-dataは、 名前のとおり、複数の部品群(マルチなパート)を一気に送る取り決めに関連しています。 過去に遡れば、電子メールのプロトコルに由来するものです。 詳しくは、ぐぐってください </small></small> </div> ``` <FORM METHOD=POST ENCTYPE=multipart/form-data ACTION=http://www1.学籍番号.cloud.fml.org/api/upload/v1 > ``` - FORMタグには`ENCTYPE=multipart/form-data`という属性を追加しています - これはファイルをHTTPに載せて送信する際に必要な"おまじない"です - ACTIONには各自のサーバのwww.pyを指定してください - `http://www1.学籍番号.cloud.fml.org/api/upload/v1` --- class: compact # FORM文(2): 「ファイルを選択」欄 ![](../images/www-html-form-upload-api-v1.png) ``` <INPUT TYPE=file NAME=file> ``` - 属性として`TYPE=file`とすれば「ファイルを選択」欄が表示されます - (www.py側で操作する際に)変数名も必要なので`NAME=file`も指定します --- class: compact # FORM文(3): アップロードボタン ![](../images/www-html-form-upload-api-v1.png) - これはいわゆる送信ボタンとまったく同じで、VALUEをuploadにしてあるだけです ``` <INPUT TYPE=submit VALUE=upload> ```