name: overview class: title, smokescreen, shelf, no-footer # オペレーティングシステム後半戦<br><small>システム構築演習</small> <div class=footnote> <small> <small> 3年、秋学期後半(4Q)、選択 </small> </small> </div> --- name: final-product class: title, smokescreen, shelf, no-footer # 後半戦で作成する最終課題 <div class=footnote> <small> <small> </small> </small> </div> --- class: img-right,compact # 最終課題 <div class=footnote> <small> <small> (脚注1) どうしてもAWS Academyで出来ない場合、相談を受けようとは思いますが... まずは(普通の)AWSお試しからTRYしてほしいな <br> (脚注2) ICTソリューションプロジェクトと絡めてもOKですが...今さら言ってもテオクレか?:-) </small> </small> </div> ![](images/sysbuild-plan-01.png) <small> - [最終課題](#final-product)では、 複数のシステムを連携させたシステムを構築してください - たいていは**Webベースのシステム** - 作業環境は[AWS Academy](/slides/service/aws/academy/) - AWS を利用したシステム構築演習であって、 **AWSというサービスについて覚える=資格試験対策ではありません** - 期間は後半全部(第9回〜第14回) - 授業時間枠は質問うけつけコーナー - 冬休みもはさまって時間たっぷり感 - github issueを積極的に使っていこう - **第15回は口頭試問 (2023/01/27)** - 構築したものを**アピール**してください </small> --- class: compact # 最終課題の評価、提出方法 <div class=footnote> <small> <small> </small> </small> </div> <small> - 評価について - 作成したシステムの工夫点をアピールしてください <B> - 何を作ってもいいですけど、 作ったものの説明をきちんとしてください。ここが大事です - わかりやすい構成図、 何をしたいと思った?(テーマ)、 連携先の選択、 連携の仕組みの説明など </B> - テーマはネタでもokです。 ネタでも評価は下げりません (むしろ芸術点の可能性も?(確約なし)) <wbr> - スライド数枚程度の解説と動く実物のシステムを用意してください <B> - 実物のデモは必須です。 各自、最大10分くらいは聞ける予定なので、たくさん語ってOK </B> - スライドはポータルのレポート機能で提出してください (楽しく読む,芸術点あり(確約なし)) - Q: 個人戦ですか?グループでも良いですか? A:どちらでもok (グルーピング方法はおまかせ) - ただし口頭試問は個人で受けてください。 もちろん担当部分は詳しいかわりに担当外は概要でも良いですが、 システム全体について一とおり説明できるように準備してください。 「担当外なので、よくわかりません!」と言うと評価が下がります。 (ちなみに、 グループワークなら技術的にワンランク難しいことに挑戦してくれたんだよね? と評価をする側は期待しちゃいますよね〜) - ちなみに、2021年度、パーティを組んだ人は、いませんでした;-) </small> --- name: attention class: compact # [重要な注意] データ収集やAPI連携における注意 <div class=footnote> <small> (脚注) Googleなどの検索エンジンは、世界中のサーバから定期的にデータを収集しています。 この収集プログラムがクローラー(crawler); crawl [動詞] = (赤ちゃんの)はいはい、(水泳の)クロール </small> </small> </div> <small> - 外部のWWWサーバ(Web API サービス)から多くのデータを取得する際には、 **スクレイピング**とか**クローリング**という作業が必要かもしれません - 注: ブラウザでデータを一つだけポチッとするのは、ただのダウンロードです - **以下、サーバの全データをダウンロードするなどといった行為の話です** - 実行時には、 **以下の参考文献の注意点を必ず熟読してから実行してください** - [スクレイピング、クローリングする時の注意点](https://docs.pyq.jp/column/crawler.html) - 最重要チェック項目 - 利用規約 - 相手のサーバに負荷をかけないように注意(ゆっくり実行) </small> --- name: final-product-themes class: title, smokescreen, shelf, no-footer # 最終課題のテーマ例 <div class=footnote> <small> <small> </small> </small> </div> --- class: compact # 設計テンプレート<small><small>(配布中,これを書いてもらってコンサルしましょう)</small></small> <div class=footnote> <small> <small> (脚注) 本日(第6回)は、ふわんとしていていいので、設計をしましょうか </small> </small> </div> ![height480px](images/sysbuild-design-template.png) --- class: img-right,compact # 仕様: 必須の仕様は連携すること <div class=footnote> <small> <small> (脚注1) おすすめのAPIおしえてください!は、 <A HREF="https://github.com/lectures-fmlorg/os-2022/issues/4"> github issue </A>たてておきました。 そちらを参照 <br> (脚注2) <b>フリーソフトウエア(オープンソース)の基本は自分で欲しいものを作る</b>だよ </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> - **ネットワークごしに複数のプロセスを連携させてください**。 連携先の対象の選択肢は無数です - ok 複数のサーバ(EC2) - ok 複数のサーバ(コンテナ) - ok サーバ + API - ok サーバ + API + AWSサービス - ok サーバ + コンテナ + AWSサービス </small> --- class: img-right,compact # 仕様: プログラミング言語 <div class=footnote> <small> <small> (脚注1) おすすめのAPIおしえてください!は、 <A HREF="https://github.com/lectures-fmlorg/os-2022/issues/4"> github issue </A>たてておきました。 そちらを参照 <br> (脚注2) <b>フリーソフトウエア(オープンソース)の基本は自分で欲しいものを作る</b>だよ </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> - 特に(2)を作りこむためのプログラミング言語は得意なものでどうぞやってください - 授業でやったことがあるのはC,Java,Python(?) - 改造の元となるシステム一式(図の(1)(2)(3))の[構築マニュアル](https://exercises-aws.fml.org/ja/)があります - [exercises-aws.fml.org](https://exercises-aws.fml.org/ja/) です。 このガイドには、 (2)を[Python](https://exercises-aws.fml.org/ja/appendix/python/www.py/)で作る方法と、 (2)の[Go言語](https://exercises-aws.fml.org/ja/appendix/golang/www.go/)版、 および、それらのソースコード注解があります。参考にしてください - **(2)の開発を頑張りすぎないようにしてください。この授業、そこが主題ではありません** - 使いまわし上等です。 (2)に他科目の成果物を合体させてOKです </small> --- class: img-right,compact # システム(1) LAMP ベース(改造元) <div class=footnote> <small> <small> </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> - 前半にLAMPを作ったので、それを元にして改造 - LAMPには図の(2)(3)部分しかありません - (物理的には)サーバが一つです - (論理的には) 一つのサーバ上で図の(2)(3)相当の合計3個のソフトウエアを動かしています </small> --- class: img-right,compact # テーマ(1A) LAMP を個別のサーバ群に構築する <div class=footnote> <small> <small> (脚注) 最低限はこれですかね。 でも、単に分離するだけなので、すぐ終わるでしょ? これだけでは<B>とても低い</B>評価になります </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> - 前半にLAMPを作ったので、それを元にして改造 - **3つの要素を別々のサーバ**として構築してください。 AWSなので3つのEC2(図の(1)(2)(3))を作成し、 それらを連携させてください - 図の(1) ... ここは前半に作成したシステムにはありません。 新しくロードバランサーを作成 - 図の(2) ... apache + PHP - 図の(3) ... mysql </small> --- class: img-right,compact # テーマ(1B) LAMP を個別のサーバ群に構築する + 連携 <div class=footnote> <small> <small> (脚注1) プロに「ね〜ね〜何の案件が多いの?」と聞くと「PHP」って言われるよ (Perl入学式しらべ,この何年も同じ回答をもらってる感w)。 滅びるかとおもったのに、 逆に「PHPは永遠に不滅です!」と言えそうな雰囲気の昨今ですよ。 PHPも進化を続けてるしなぁ <br> (脚注2) ちなみにPHPはPerlリスペクトな言語ですよん。 PerlリスペクトしたJavascriptっぽい言語でok?(偏見?) </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> - 前ページのLAMPを元に(2)を改造します。 たとえば、 写真をアップロードすると判定結果を教えてくれるサービスを作るとか ... - **自分の機械学習コードでなくてok**。 図の(4)で Google/AWS/Azureの**画像判定APIを呼び出し、 写真の判定をゆだねてok**です - ただ(2)のところがPHPなので、 **このさいPHPを勉強しよう!という気概のあるひと向きかな?** (脚注も参照) <br> (a) PHPでアップロードされた写真を扱えるようにして (b) PHPから画像判定 API を呼び出し、写真をつっこむ (c) 判定結果をユーザに返す </small> --- class: img-right,compact # システム(2) ベース(改造元) <div class=footnote> <small> <small> (脚注) マニュアルにすべて書いてあるので、 この改造元を作っただけでは、評価は高くないです </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> [AWS構築マニュアル](https://exercises-aws.fml.org/ja/)をもとに作成する改造元システム一式(図の(1)(2)(3)のみ) - 図の(1) ... nginx (リバースプロキシ) - 図の(2) ... MySQLに格納されたデータを検索 - www.py[(Python)](https://exercises-aws.fml.org/ja/appendix/python/www.py/)版 - www.py[(Python)](https://exercises-aws.fml.org/ja/appendix/python/www.py/)を www.go[(Go言語)](https://exercises-aws.fml.org/ja/appendix/golang/www.go/)に差し替えることが出来ます - 図の(3) ... mysql (SQLサーバ) - 図の(4)(5)(6)は外部のリソース(Web APIなど)です。 このベースシステムでは使いません </small> --- class: img-right,compact # テーマ(2A) システム(2)を冗長化 <div class=footnote> <small> <small> (脚注1) マニュアルにすべて書いてあるので、 改造元を作っただけでは、すごく低い評価になります <br> (脚注2) ふところ具合とはAWS Academyのおこづかい毎月100ドルと御相談ということです </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> - [拡張例] システムを**冗長構成**にします (前ページのベースとなるシステムを元に拡張します) - (動作仕様しだいですが)単に複数個うごかすだけ (例:図の(1)の中身が複数個のEC2)でよいこともあります。 でも**AWS のサービスを買う方が楽?** **やりたいことと懐具合をもとに自分で考えてね** - 図の(1) ... nginx を冗長構成?AWSに頼る? - 図の(2) ... (マニュアルどおりの素の)www.py冗長化は単に複数個うごかすだけですが、 改造内容しだいではそんな単純ではありません - 図の(3) ... mysql (SQLサーバ)を冗長構成 - AWS RDSに差し替えてもok - Postgresqlで冗長化とかもok </small> --- class: img-right,compact # テーマ(2B) システム(2) + API連携 (Python) <div class=footnote> <small> <small> </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> - 他科目で作成したPythonの機械学習コードを [www.py](https://exercises-aws.fml.org/ja/appendix/python/www.py/) に合体させます。 たとえば、 写真をアップロードすると判定結果を教えてくれるとか - 図の(1) ... nginx (リバースプロキシ) - 図の(2) ... www.py + 自分の機械学習コード - 図の(3) ... mysql (SQLサーバ) - AWS RDSに差し替えてもok <B> - 図の(4)にGoogle/AWS/Azureなどの画像判定 API サービスを使います。 外部のAPIを呼び出し、 写真の判定をゆだねてok </B> </small> --- class: img-right,compact # テーマ(2C) システム(2) + API連携 <div class=footnote> <small> <small> (脚注1) <B>PHPを使えば、テーマ(1B)と同じ意味です</B> <br> (脚注2) ぼくなら連携せずにimagenetをサーバ上にビルドして、 プログラミング言語はシェルとPerlの合わせ技で、半日仕事だと思う。 ただし、これでは課題の仕様に沿っていません。ダ〜メ </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> - 前ページのテーマ(2B)と同様のしくみをPythonではない言語(自分の得意なプログラミング言語)で書きます。 むずかしいことは外部のWeb APIにやってもらうので大丈夫 - 図の(1) ... リバースプロキシ - 図の(2) ... 自分の好きな言語で書きます。 - 必要な機能は (a)HTTPをあつかえる(WWWサーバ,HTTPクライアント両方の機能が必要) (b)SQLへの読み書き - 図の(3) ... SQLサーバ, AWS RDSでもよい <B> - 図の(4)にGoogle/AWS/Azureなどの画像判定 API サービスを使います。 外部のAPIを呼び出し、 写真の判定をゆだねてok </B> </small> --- class: img-right,compact # テーマ(2D) システム(2) + API連携 (画像) <div class=footnote> <small> <small> (脚注) 画像の編集みたいにやりなおしがきく一発ものならAmazon Lambdaにやらせてよくてよ </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> 前頁までのテーマ(2B,2C)の連携先を変えれば、 いろいろなバリエーションが考えられます (図の(4)〜(6)の連携先および図の(2)のロジックを改変しよう) - アップロードされた画像を編集 - 画像の高画質化 - 背景を透過 - 顔認識APIにかけて... ? - 名前を教えてくれるの? - だれか分かるのなら、入退室管理ができる? - 出席もとれる? (... これはクライアント側デバイスも作らないと面白くないか?) </small> --- class: img-right,compact # テーマ(2E) システム(2) + API連携 (その他) <div class=footnote> <small> <small> (脚注1) 気象庁以外のAPI例: Open Weather Map, OpenWeatherMap API, Livedoor Weather Web Service,... <br> (脚注2) 機械学習とか言われそうですが、 図の(2)部分でプログラムを頑張る授業ではありません。 というわけで、ルールベースでok </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> 1. 図(4)〜(6)に使えるAPIは画像以外も色々あります 1. たとえば気象庁のサイトでは[天気予報と過去の天気のデータベース](https://www.data.jma.go.jp/gmd/risk/obsdl/)を入手できます - 過去のデータ(天気と売上)は事前にダウンロード(スクレイピング)、 予報は随時みにいく 1. **ルールベースでok (expert system, not 機械学習)** - 図の(2)にルール群を書いておけば、 明日の天気予報をもとに助言が出来るよね? <br> 明日は暑い -> いつもより、アイスを多く仕入れましょう (スーパーとかコンビニは、こんなの20世紀のうちからやってるよ) - **図の(2)で10,000行書きますという授業ではないので、ここはがんばらなくてok** </small> --- name: free-themes class: title, smokescreen, shelf, no-footer # 自由課題<br><small>なんでもありなんやで</small> <div class=footnote> <small> <small> 作ってほしいものをつぶやいてみますね〜(発注?) </small> </small> </div> --- class: img-right,compact # テーマ(F1) 推薦図書を自動的にまとめてくれる(URL) <div class=footnote> <small> <small> (脚注1) なんなら開発パーティをくんでもよくてよ <br> (脚注2) ソースコードはgithubで公開してくれるとなおよし。 ライセンスはGNUかMITきぼ〜ん </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> 図書館への推薦図書を自動的にまとめて図書館にエクセルシートを送りたい。 学生アンケートにも学科推薦図書にも使えるよね?以下、動作イメージ(仕様) <small> 1. Amazonとか技術評論社のURLをポチッと貼ると、 自動的にISBNを割り出す(図の(2)) - Amazonほか有名ショッピングサイト対応 - 技術書の出版社有名どころ全社対応 1. タイトル,著者,出版社,ISBN,価格などを割り出す(図(2)(4)) - たしか ISBNから、これらを検索できるほぼ公的なサイト(openBD?)があったはず。 JSONで返してきます。価格は出なかったかもしれない 1. [Google Apps Script] Google SpreadSheet に月単位でまとめていく(図の(5);google API) 1. [Google Apps Script] 毎月1日には Gmail で担当者へ送信(図の(6);google API) </small> </small> --- class: img-right,compact # テーマ(F2) 推薦図書を自動的にまとめてくれる(画像) <div class=footnote> <small> <small> (脚注1) なんなら開発パーティをくんでもよくてよ <br> (脚注2) ソースコードはgithubで公開してくれるとなおよし。 ライセンスはGNUかMITきぼ〜ん </small> </small> </div> ![height480px](images/sysbuild-design-template.png) <small> **画像を貼ると**図書館への推薦図書を自動的にまとめ、 図書館にエクセルシートを送ります。 後半は前頁と一緒です。 スプレッドシートには2系統のリクエストをマージしてほしい。 操作/動作イメージ <small> 1. ユーザは本屋で本の裏表紙を写真にとってアップロード 1. 画像からバーコード部分 (バーコードにはISBNと価格情報などが書いてある)のテキストを抽出 -> 外部のAPIでISBN(文字)を割り出す? (新たに図の(7)を追加) 1. タイトル,著者,出版社,ISBN,価格などを割り出す(図(4)) 1. Google SpreadSheet に月単位でまとめ(図(5))、 毎月1日には Gmail で担当者へ送信(図(6)) </small> </small> --- class: compact # <small><small>テーマ例(X1) 趣味でいいのよ:-)</small></small> <small> - 好きなアニメを入力すると、こちらもいかがですか?とレコメンドしてくれる - そういうAPIはなさそう、でも、 Googleせんせいに聞けば、 個人のblogやtwitterが出てくるでしょう - google 先生の検索結果の最初のURL群をスクレイピング - twitter API をたたく(ただし無料では最近のしか表示してくれないらしい) - togetterとかのほうがいい?(togetter APIなんてあるのか?わからない) - それらの検索結果=文字列を解析して、 アニメの<B>タイトルらしきもの</B>を抽出。 - おそらく、この<B>らしき</B>ものを探すところが曲者。 あらかじめタイトルデータベースを作成しておいて、 それをもとに正規表現で検索?するのが定番でしょうな(<-遅そう) - これ解析する際にアニメ略称データベースとかが必要だと思うよ。 略称で書く人、フルに書く人、両方の結果をマージしないといけない。 たぶんwikipediaをスクレイピングしてアニメ略称データベースを作るのでは? <B>もう、このAPIを作るだけで立派に最終課題の予感</B>(次頁も参照) - アニメAとセットで登場するアニメB,C,D,...のタイトル群を集計(sort して uniq)し、 よく登場するベスト3を教えてくれる </small> --- class: compact # <small><small>テーマ例(X2) アニメ略称データベースAPI、問われる設計のセンス</small></small> <small> - <B>題材はネタですが、問われているのは設計のセンスです</B> <small> - 上級の設計者とかアーキテクトのレベルのセンスが問われています。 スクレイピングの頻度はどれくらいが適切か? これは、相手側への負荷と得られる情報鮮度のトレードオフです - 提供するAPIのURLの命名方法も重要です。 プログラムは作成者の予想より長生きするものです。 10年20年の運用に耐えられるにはどうしておくべきか? - こういうあたりまで配慮できるようなら、すごく立派(高評価) </small> - 前頁のシステムに必要な API サービス自体を実装します。 <B>このAPIを作るだけで立派に最終課題</B> - たぶんwikipediaをスクレイピングしてアニメ略称データベースを作るのです - スクレイピングして、タイトルを抽出、データベースに保存? - APIの設計もしてください,いろいろ考えることがあります <small> - 将来も考えたURLしてください。 - 同じサーバで拡張サービスがありうるか?ありうるなら区別できるURLが必要 - 返すデータ構造は?フォーマットは?フォーマットは選べるの? </small> </small> --- class: compact # <small><small>テーマ例(Z1) 情報処理学会をみならって声優データ機械学習編(オーバスペック)</small></small> <div class=footnote> <small> <small> (脚注) なにより、このはなしの着地点(オチ)をさぐるのが難しい予感(w) </small> </small> </div> <small> <small> - これは完全に機械学習になるので、OSでやる話ではありません - 好きな声優さんのパターンをいれると、こちらの声優さんもいかがですか!?と - 以下に声優データセットがありますが、 これとは違うアノテーションをいれた学習をさせないといけないね; 新人のサンプルボイスを入力すると将来性を教えてくれるとか; 声オタ目線、 しかし煩悩まみれですなぁ(w) - 参考: 情報処理学会 - "声優養成所講師評価付き発話音声データセットの構築", 植野敏昭・山西良典・堀川りょう, (FIT-2022, 2022/09) - これは、 <B>声優養成所の教師の評価を機械学習させたい</B>という話らしい <B>(データセット公開予定あり)</B> - 詳細は、こちら http://id.nii.ac.jp/1001/00220190/ - 堀川りょう - 夢戦士ウィングマン(最初の主演作)は古すぎて分からない? - 機動戦士ガンダム0083 コウ・ウラキ - OVA版銀河英雄伝説のラインハルト・フォン・ローエングラム - アンドロメダ星座の瞬、ベジータ、よこしまくん(GS美神)とか... - これは超絶難しいか? 声質は、FFTにかけて、周波数帯に変換し、スペクトルの形を学習させます。 大まかな形ではなく、 たぶん第一フォルマントの微妙な崩れ具合とかがポイントです (綺麗なカーブのひとは、あまり売れない傾向)。 それに近いプロファイルの人を推薦します。 でも、声質は大事だけど、それだけで売れるわけじゃないからな。 少しだけ混じっている暗い質感とか、微妙な活舌の悪さとか、 しゃべり方のくせの判定は、さらに難しいだろうね〜 </small> </small>