OmniAICreator/Qiita-1.07M huggingface dataset:
初学者がハマったAWS(EC2)へのデプロイ　We're sorry, but something went wrong.

# はじめに
初投稿であり、体裁や伝わりにくい部分があるかと思いますがハマった部分をメモとして、また、同じように困る方の解決の1つとして提供できたら嬉しいです。

# 環境
- AWS【EC2(Amazon Linux2)、RDS(Mysql)】
- Ruby 2.5.1
- Rails 6.0.2.2
- nginx 1.12.2
- unicorn v5.5.5

# We're sorry, but something went wrong.の表示
サーバー環境でデプロイしてさあ、ブラウザで確認！・・・おや？
**We're sorry, but something went wrong.**
調べてみるとエラーログを確認しなさいという記事が見つかる。なのでとりあえず、エラーログの確認

```ruby:サーバー環境(/var/www/rails/アプリ名/)
$ cd log
$ tail -n 30 production.log

ActionView::Template::Error (Webpacker can't find application in /var/www/rails/アプリ名/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest contains:
{
}
):

7:     <%= csp_meta_tag %>
8:
9:     <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
10:    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
11:    <link href="https://fonts.googleapis.com/css?family=Lato:400,700|Noto+Sans+JP:400,700" rel="stylesheet">
12:    <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet">
13:    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
app/views/layouts/application.html.erb:10
```

エラーの記載があればデプロイは出来ているが、アプリ内でエラーが発生しているそうです。
なければ、デプロイがそもそも出来ていないそうです。
今回のエラーの場合は、プリコンパイルが出来ていない可能性が高い模様。。。

$ bundle exec rake assets:precompile RAILS_ENV=production
このコマンドでプリコンパイルの実行となります。

このコマンドを打つ前にやることがあります。
私は、あることをしていなかったため、長い長い沼にハマりました。
それでは見ていきましょう！

```ruby:サーバー環境(/var/www/rails/アプリ名/)
1.nginxを止める
$ sudo systemctl stop nginx
2.止まっているか確認
$ systemctl status nginx.service
3.unicornのプロセスIDを調べる
$ ps aux | grep unicorn
4.killする
$ kill プロセスID
5.一応切れているか確認
$ ps aux | grep unicorn
6.プリコンパイルを実行
$ bundle exec rake assets:precompile RAILS_ENV=production
7.nginxの起動
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo systemctl status nginx.service
8.unicornの起動
$ bundle exec unicorn_rails -c /var/www/rails/アプリ名/config/unicorn.conf.rb -D -E production
```

これで私は解決しました！
大事なのは最初にnginxとunicornを止める事です！
これ、多分当たり前だろと思われると思います。が、知識の乏しい私はにとっては当たり前ではありませんでした。。笑
ずっとこれをやっていなかったがために、ひたすらに調べて出てこない、なんなんだとだいぶ考え込みいろんな方法を試していました。

こちらの記事に沿って作業しています。
[【画像付きで丁寧に解説】AWS(EC2)にRailsアプリをイチから上げる方法【その4〜Railsアプリの公開編〜】](https://qiita.com/Yuki_Nagaoka/items/975b7598806d6ae0c0b2)

# まとめ
初歩的な所で躓くような私ですが、プログラミングは楽しいという思いがあるので、これからも尽きることのない学びを続けたいと思います。前を向いて精進あるのみです。
役に立ったよという方がいればLGTMをください！
初投稿でしたが、書き下ろすことで整理がつくのでこれからも書きたいと思いました。
【覚書】CSSのあれこれ


######-a[href]{}でプロパティを指定するとhref属性のついた\<a>タグのみに適用される

```css:qiita.css
a[href]{
color:red;
}
```
######-アンカータグのテキストデコレーションの解除方法

```css:qiita.css
a{
color:inherit; /*文字色を親要素と同じ色にする*/
text-decoration:none;
}
```
######-文字がコンテナからはみ出した場合の対処法

```css:qiita.css
p{
  word-wrap : break-word;
  overflow-wrap : break-word;
}
```

######-上下中央揃えの方法
 - インライン要素の時 : vertical-align:middle;を指定
 - ブロック要素の時 : 親要素にline-heightプロパティを指定

######-ブロック要素の位置調整
```css:qiita.css
/*左右中央*/
div{ margin :0 auto;}
/*上下中央*/
div{ margin :auto 0;}
/*左寄せ*/
div{ margin :0 0 0 auto;}
/*右寄せ*/
div{ margin :0 auto 0 0;}

```
######-文字の上下中央揃えの方法
テキスト要素のheightとline-heightを親要素のheightと合わせる
 
######-画像下の余白を消すには
 imgにvertical-align:top;をつける

######-buttonデコレーションの解除方法
```css:qiita.css
button{
  background-color:transparent;
  border:none;
  cursor:pointer;
  outline:none;
  padding:0;
  appearance:none;
}
```

######-画面いっぱいに画像を表示させたいとき

```css:qiita.css
.container{ /*画像が入っている要素*/
  width:100%;
  height:auto;
  max-height:100vh;
  position:relative;
}
 img{
  object-fit:cover;
  width:100%;
  height:auto;
}
```

######-positionプロパティで要素の真ん中に要素を置きたい場合

```css:qiita.css
positionedCenter{
  position:relative;
  top:50%;
  left:50%;
  transform:translate(-50%,-50%) /* x軸、y軸 */
}
```
※x軸、y軸の数値は微調整可


######-縦書きにしたい時
```css:qiita.css
.sting{
    writing-mode: vertical-rl;
    -ms-writing-mode: tb-rl;
}
```
######-keyframesがカクカクするとき
linearを入れる
animation: scroll 2s infinite <strong>linear</strong>;
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528355/fc3aef73-17bc-5594-54c9-36627ad7ab6c.png)
参考：https://developer.mozilla.org/ja/docs/Web/CSS/writing-mode
【覚書】HTMLのあれこれ

自身の覚書のためにHTMLのあれこれをメモしていきます。


###### -タグ：strong
\<strong>\</strong>
文字の強調ができる

###### -タグ：section
\<section>\</section>
ページ内の「コンテンツ」を区切る

###### -タグ：article
\<article>\</article>
記事や投稿などの内容が単体で完結するコンテンツ
一般的に【見出し】【画像】【文章】で構成される

###### -アクセシビリティについて
- アンカータグのaltは必ず指定
- \<button>タグや\<nav>タグに付けるラベリングはaria-label
AWSにサーバを立てる（HTTPS、独自ドメイン、Apache）

# 目的は、独自ドメインのhttpsサーバをaws上に立てること

- ドメイン名だけを例えばChromeのアドレスに打って、セキュリティの警告も出ずにサクッと表示されるWebサーバを作る。

<img width="312" alt="無題.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275020/009d6ecd-5dae-81b2-de5b-1b13608e70e0.png">

# Route 53 でドメインの取得
- ダッシュボードから、ドメイン名を購入する。

# Certificate Managerで証明書の取得
- 証明書のリクエストから、指定するドメイン名は、*.domain.exampleだけじゃなくて、別名としてdomain.exampleも追加しておく。
- メール認証等で、approvalする。

# EC2でインスタンスとロードバランサの作成
### インスタンス
- Amazon Linux AMIを選択、適当なタイプを選択して作成する。
- Elastic IPで静的IPの取得と、インスタンスへの関連付けをする。
- パブリックDNSは、sshで入るときに使うのでコピーしておく。
- セキュリティグループのインバウンドルールで、HTTP許可を追加する。

### ロードバランサ
- ロードバランサをClassic Load Balancerで作成し、転送先のインスタンスを作成したインスタンスに指定する。
- リスナーのhttpsには作成済みの証明書を指定して転送先は80ポート、httpも80に転送しておく。
- セキュリティグループのインバウンドは、HTTP、HTTPSを許可しておく。
- ヘルスチェックは、80番ポートのindex.phpとしておく。
- ロードバランサのDNS名をコピーしておく。

# Route 53に戻って、ドメインにエイリアスを設定
- ドメインのレコードセットの作成で、名前は空、タイプはA（IPv4）、エイリアスはハイ、エイリアス先をロードバランサのDNS名にする。

# Apache, PHP, MySQLのインストール
- [Amazon Linuxでサーバを作成 (Apache2.4 + PHP7.2 + MySQL5.7)](https://qiita.com/reflet/items/11ad79e01e808876caa1)を参考にさせて頂きました。
- /var/www/html/index.phpを適当に作っておく。

# HTTPをHTTPSにリダイレクト
- /etc/httpd/conf/httpd.conf の最後に以下を追加する。

```/etc/httpd/conf/httpd.conf
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</VirtualHost>
```

- ロードバランサからHTTPで来たものを、X-Forwarded-Protoで判定し、httpsに送るようにクライアントに依頼する。
- ロードバランサ自体は、何もしていない。

# ドメイン名だけをブラウザのアドレス欄に入力して、つながればOK！
### その他
- ロードバランサをClassic Load Balancerではなく、Applicatin Load Balancerにするとhttpからhttpsへの転送設定ができるっぽい。
- 証明書は、ロードバランサではなくCloudFrontに関連付けることもできる。インスタンスに直接は、できないもよう。
EC2 phpMyAdminのエラー（SET lc_messages = 'ja_JP';）対処法

#EC2 phpMyAdminのエラー（SET lc_messages = 'ja_JP';）対処法

EC2のLAMPサーバーインストールマニュアルに沿って実行していたところ、ブラウザからphpMyAdminに接続したときにエラーが発生したときの対処法。

##エラー内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/7f63b198-bde5-0330-2232-ca6c8e76c897.png)

```
SET lc_messages = 'ja_JP';

MySQL のメッセージ: 
#1231 - Variable 'lc_messages' can't be set to the value of 'ja_JP'
```

日本語が読み込めていない。


##対処法
ログイン時の言語設定を「English」にするとエラーなく入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/3af0aaf1-8ec5-da99-1b41-cf19ca0c7f14.png)



AWSのチュートリアルで自動的に最新バージョンのphpMyAdminをインストールしているので、日本語対応していない？？
`wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz`

ファイルにall-languagesとあるんだが、、



<br>追記
EC2のインスタンスを削除し、別途作成後、公式マニュアルのLAMPサーバーのインストール手順に従って操作したところ、日本語でもログインできた。

最初のEC2インスタンスを作ったときに、nodemanやfoerverなどnodejs関連で色々とインストールしてしまったことが問題？
Vue Cli 4で GitHubPagesに公開する方法

[vue-cliで始めるVue.jsチュートリアル (1)](https://qiita.com/sin_tanaka/items/29769266b3b078ea0f7c#srcrouterindexjs)
の記事を参考にvueをちょっくらハローワールドしてみるかと思ったら結構つまずいたので記事に残す。

作成物の
- リポジトリはこちら
https://github.com/kuimac/vue_todo_app.io
- GitHub Pagesはこちら
https://kuimac.github.io/vue_todo_app.io/

### 環境
```
$ sw_vers ProductName: Mac OS X ProductVersion: 10.15.3 BuildVersion: 19D76

$ node -v v12.1.0

npm -v 6.14.5

vue -V @vue/cli 4.3.1
```

### 目次
- 作成した時につまづいたこと
- GitHubPagesに公開した時につまづいたこと

## 作成した時につまづいたこと
参考記事[vue-cliで始めるVue.jsチュートリアル (1)](https://qiita.com/sin_tanaka/items/29769266b3b078ea0f7c#srcrouterindexjs)
の記事の環境が

```
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11.6
BuildVersion:   15G1611

$ node -v
v6.11.3

$ npm -v
3.10.10

vue --version
2.8.2

```

とのことで、僕の環境と大きく違い、特にvue cliのバージョンの違いで結構つまづいた

つまづいた場所だけ抜粋すると
①　sass-loaderをインストールした後の依存関係が解消できなかった
`vue init`で作ると依存関係が解消できなかったから`vue create`で作り直したらするとうまくいった
ついでに`@vue -V @vue/cli 4.3.1`で構築した。←重要

②data: function()の記述をするとエラー

```
Failed to compile.

./src/components/HelloWorld.vue
Module Error (from ./node_modules/eslint-loader/index.js):

/Users/[僕の名前だよ]/Documents/code/vue_js/todo/src/components/HelloWorld.vue
  42:23  error  'event' is defined but never used  no-unused-vars

✖ 1 problem (1 error, 0 warnings)
```
原因：
ESLintの`un-used-vars`のルールで宣言はしているが利用していない不要な変数に対しての警告を受けている

解決：
[ESLintで特定のソースコードのチェックを無効にする](https://qiita.com/blajir/items/82127aaa57e4d73a8389)

の記事を参考に特定の行のみESLintを無効にする
// eslint-disable-lineを記述
`function(event) { // eslint-disable-line`

③`npm run build`して`/dist/index.html`にアクセスすると真っ白！

[Vue-CLI3でbuildすると画面が真っ白になる](https://qiita.com/heyheyww/items/5d06936745118045a308)
の記事を参考に

```vue.config.js
module.exports = {
    baseUrl: './'
}
```
してもう一度`npm run build`するとうまく行った。

## GitHubPagesに公開した時につまづいたこと
`npm run build`をすると`/dist`配下にファイルが作成されるが、GitHubPagesで公開するには`/docs`配下にコンパイルしなければいけない。

調べてみると`config/index.js`に設定を記述するらしいけどそんなものは無い！（笑）
解決:`vue.config.js`に`outputDir: 'docs/',`を記述

```vue.config.js
module.exports = {
    publicPath: './',
    outputDir: 'docs/', //これ
  }

```

あとは[GitHubのmasterブランチをWebページとして公開する手順（GitHub Pages）](https://qiita.com/tonkotsuboy_com/items/f98667b89228b98bc096)を参考にGitHubPagesを設定する。

無事公開できました:tada: 

## 参考にさせていただいたもの
- [vue-cliで始めるVue.jsチュートリアル (1)](https://qiita.com/sin_tanaka/items/29769266b3b078ea0f7c#srcrouterindexjs)
- [vue-cliで始めるVue.jsチュートリアル (2)
](https://qiita.com/sin_tanaka/items/6d5d9089eb76dda4ce88)
- [ESLintで特定のソースコードのチェックを無効にする](https://qiita.com/blajir/items/82127aaa57e4d73a8389)
- [Vue-CLI3でbuildすると画面が真っ白になる](https://qiita.com/heyheyww/items/5d06936745118045a308)
- [GitHubのmasterブランチをWebページとして公開する手順（GitHub Pages）](https://qiita.com/tonkotsuboy_com/items/f98667b89228b98bc096)
Windows WSL + VcXsrv で OpenGL 2 アプリを GPU accelerated させて動かす

## 背景

* WSL 経由の Linux プログラムで, GUI を imgui など OpenGL 系で描画したい.
* 機械学習などで, 3D 形状データを可視化したい.
* レイトレーシングなど, CPU intensive な計算をする(then 結果画像を GUI で表示)ので, CPU リソースを無駄に使いたくないので GUI の描画を GPU で行いたい.

NVIDIA GPU で OpenGL 2 は動きました. OpenGL 3.x はだめでしたが, データ可視化などでは GL 3 の機能を使う必要もなさそうな気がしますから, GL 2 でよさそうです.

## 手順

WSL+ubuntu18.04+VcXsrv+OpenAI Gym 動くまでのメモ（修正）
https://qiita.com/antimon2/items/b1611dca09edcf93db03

あたりを参考にします.

Windows 側には, GPU ベンダー(NVIDIA, AMD, Intel)のドライバが入っているものとします.

VcXsrv 起動時に,  `Native opengl` にチェックを入れておきます.


WSL 側で, `DISPLAY` 環境変数(通常は `DISPLAY=:0.0` でいける)と, `LIBGL_ALWAYS_INDIRECT=1` を設定しておきます.

`LIBGL_ALWAYS_INDIRECT=1` で, WSL(Linux)側アプリの OpenGL コマンドを, Windows(VcXsrv)側に転送し, VcXsrv が Windows 側の OpenGL(GPU)を使って HW 描画する仕組みのようです.

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">imgui glfw3 + OpenGL 2 + WSL Ubuntu 18.04 + VcXsrv with LIBGL_ALWAYS_INDIRECT=1 gives linux app with HW accelerated OpenGL rendering on Windows for the win 🎉🎉✌️✌️✌️✌️✌️💯💯💯🥳🥳(unfortunately OpenGL 3 context cannot be created 😢 but GL2 should be enough for most GUI app☺️) <a href="https://t.co/AUbKlqymcd">pic.twitter.com/AUbKlqymcd</a></p>&mdash; Syoyo Fujita 🌸 レイトラ 🐯 2 周年 🎉 (@syoyo) <a href="https://twitter.com/syoyo/status/1259041435648618497?ref_src=twsrc%5Etfw">May 9, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

imgui glfw3 + opengl2 サンプルが, 60 fps + CPU リソース使わずに描画できているのを確認しました :tada:


### 問題点

こちらの環境だと, glxgears はアニメーションせずに止まったままでした. vsync 周りの問題でしょうか.

OpenGL 3.x コンテキストは生成できませんでした

macOS の場合は昨今(10.6 くらいから?), OpenGL のコンテキストは最低 3.3 が生成されるようになりましたので, Linux/macOS で共通して動かしたい場合は 2.0, 3.x 両方を考慮して OpenGL コードを書く必要があります.

このあたりは X server の出来次第かと思いますので, Xming で $10 払うバージョンだともしかしたら OpenGL 3.x 使えるかもしれません.

## CPU 描画

XvcSrv で `Native opengl` off, もしくは WSL で `LIBGL_ALWAYS_INDIRECT` を定義しなければ, llvmpile での描画が行われます.
i9 9900K だと, 40% ほど描画に CPU リソースを取られました(GPU も 20% くらい負荷が発生していたので, 一部 GPU 処理されているのかもしれません)

CPU 描画だと, 処理が重くなければ GUI のレスポンスは良いので(i9 9900K で imgui sample で 200 fps くらい), 開発中などは CPU 描画する手もありそうです. llvmpipe の GL version は 3.3 でしたので, imgui OpenGL3 サンプルも動きました.

## 今後

WSL で GPU 対応(GPU 仮想化(?)がアナウンスされました.

Windows 10、WSL 2でGUIアプリケーションとGPUベース機械学習に対応
https://news.mynavi.jp/article/20200520-1039322/

来年あたりには, 特になにも考えずに, WSL 経由で GPU(OpenGL) で GUI 描画できるかもですね.
イラスト付きでオブジェクト指向を説明

#オブジェクト思考って何？
いろんなサイトを見ても難しい言葉ばかりでよく分からない。
そんな方向けに説明します。

プログラマではない方にも分かりやすくするために、イメージだけ説明します。

#オブジェクト思考は「フォルダ整理」のこと
![photo_omoide.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/2f4f45d6-4047-9004-db2f-d2dca60dfa6d.png)

例えば写真を整理する時、「箱根旅行」とか「ディズニーランド２０１９」みたいにフォルダで分けますよね。

几帳面な人は細かくフォルダ分けするでしょう

- 箱根旅行の写真
    - 初日
    - 2日目
    - 全員の写真

こうすれば後で見返しやすいですよね。

#オブジェクト思考はプログラムの「フォルダ整理」のこと
写真整理をしておくと後で見返すのがしやすいように、
プログラムも機能ごとにファイル分けしておくと何かと便利です。

![douga_haishin_youtuber (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/2f82e0de-2358-0e27-9ef3-e4e54a2a4949.png)


- Youtubeのプログラム
    - 動画再生のプログラム
    - 再生数をカウントするプログラム
    - Youtubeタイトル画面のプログラム

こうしておくことで、欲しい写真がすぐとりだせるように、
どのプログラムを修正するか分かりやすくなります。

#汎用的なプログラムは他のプログラムにも使える
Youtubeを作ったプログラマは、
きっとニコニコ動画も作れますよね。

![video_text_scroll_douga.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/4931d7d7-5381-afee-b1b7-8174e6f57a47.png)


さて、もうすでにYoutubeで3つのプログラムを作っています。
この中で、再利用できるのはどれでしょう
[★再利用]・動画再生のプログラム
[★再利用]・再生数をカウントするプログラム
[ダメ]・Youtubeタイトル画面のプログラム

オブジェクト指向でフォルダ分けしておくと、流用しやすいというのがわかるでしょうか。

#最後に
当たり前のことのようですが、
プログラムのフォルダ分けは少し経験がいる作業です。
また、フォルダが細かすぎるとファイルを探すのが大変なように、オブジェクト指向でフォルダ分けをしすぎると開発速度が遅くなる場合もあります。
オブジェクト指向は絶対！というものでもありません。
何事もほどほどにですね。
PMP試験に出てくる(5.1) Plan Scope ManagementのITTOを覚えよう

# (5.1) Plan Scope Management
プロジェクトスコープ管理の6つのプロセスにある`スコープ管理計画`プロセスのこと

- [プロジェクトスコープ管理の6つのプロセス](https://qiita.com/Yumenoshima/items/1f313379b20aacb30c7a)

## (5.1) Plan Scope ManagementはPMBOKガイドのどこに出てくるか
PMBOKガイド`134ページ`の`5.1`に出てくるよ！

# ITTOとは
プロセスに対するインプット、ツールと技法、アウトプット(成果物)!

## (5.1) Plan Scope ManagementのITTOのI(インプット)
- Project charter
- Project management plan
- Enterprise environmental factors
- Organizational process assets

## (5.1) Plan Scope ManagementのTT(ツールと技法)
- Expert judgement
- Data analysis
- Meetings

## (5.1) Plan Scope ManagementのO(アウトプット)
- Scope management plan
- Requirements management plan

# まとめ
`(5.1) Plan Scope Management`プロセスの`ITTO`を覚えて、インプットとアウトプットの成果物テンプレートも押さえよう！ 

----
以上
深層学習(Coral TPU)とかでのPythonエラー「ValueError: Failed to load delegate from edgetpu.dll」への対処(0秒解決）。

#目的

Coral TPUをCoralのページをみて動かそうとして、
おおぼけで、
以下の難しそうなエラーをたたき出した。

```
ValueError: Failed to load delegate from edgetpu.dll
```

エラー全体を以下に示す。

```
C:\_work1\_win_corel1\edgetpu_runtime\corel\tflite-master\python\examples\classification>python classify_image.py --model efficientnet-edgetpu-M_quant_edgetpu.tflite --labels imagenet_labels.txt --input images/parrot.jpg
Traceback (most recent call last):
  File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\tflite_runtime\interpreter.py", line 162, in load_delegate
    delegate = Delegate(library, options)
  File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\tflite_runtime\interpreter.py", line 121, in __init__
    raise ValueError(capture.message)
ValueError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "classify_image.py", line 122, in <module>
    main()
  File "classify_image.py", line 99, in main
    interpreter = make_interpreter(args.model)
  File "classify_image.py", line 73, in make_interpreter
    {'device': device[0]} if device else {})
  File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\tflite_runtime\interpreter.py", line 165, in load_delegate
    library, str(e)))
ValueError: Failed to load delegate from edgetpu.dll

```

**対処方法は、以下に示しますが。。。。**
自分で解決したほうが、気持ちがいいと思うので、
**まず、自分で考えて下さい。**

答えが見えないように、少々、余白。

| 余白|
|:---:|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|

ヒント。
**考えるというよりは、よく環境を見て下さい。**

| 余白|
|:---:|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|
| 余白|

#対処方法

（たぶん、USBのアクセラレータ、付け忘れてませんか？）
**付け忘れているUSBアクセラレータを挿入する。**

想像ですが、
上記以外で、このエラーはなかなか出せないのでは。

#まとめ
特にありません。
おそらく、一人二人に、僅かには役に立つはず、この記事。
コメントなどあれば、宜しくお願いします。:candy:
このエラーメッセージ自体については、自分でも、少し、コメントしたい気もしますが、ちょっと、考え中。
【windows】Win-SPCを使ってEC2に接続する方法

#【windows】Win-SPCを使ってEC2に接続する方法

公式ページにもマニュアルがあるが、わかりにくいので補足程度にメモ。

##１．Win-SCPのダウンロード
[公式ページ](https://winscp.net/eng/download.php)


##２．ツールを開き新しいサイトを選択し設定をする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/08799cff-67e0-c7f4-fd1b-3fda03073f06.png)

初期画面で設定するのは３箇所。それ以外はデフォルトでOK。
①ホスト名
　└ EC2インスタンスのIPv4パブリックIPをコピペ

②ユーザー名
　└ 初期設定の場合は ec2-user

③設定をクリック


##３．秘密鍵のファイルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/8107c475-db07-d540-b4a4-710c0ed36ed7.png)

①左カラムのメニューで「認証」を選択。
②ファイル検索でEC2のプライベートキー（ファイル名.pem）を選択。
　└ 表示するファイルの種別をすべての秘密鍵ファイルにすれば表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/596cba49-710e-74ad-4740-3273bf84491d.png)


②WinSPCが「.ppk」形式に変換してくれるのでOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/2a464523-f56f-b9bb-d0c7-afc37e8cfc07.png)


以上で接続完了


##４．ワークスペースの保存
次回接続時にすぐつなげるよう、現在の表示に名前をつけて保存する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/7523004c-5f9c-3a7e-a07c-1df3a6d67b98.png)

ワークスペースに名前をつけて完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/9e39878b-2d79-2f27-aff2-020ac7be7987.png)


Win-SPCを起動するとログイン画面が表示され、保存したワークスペースにすぐに接続できる。
[Rust] the book 2nd サンプルコードのサーバーがChromeだと失敗する → bufferを増やす

# 問題

「TRPL」または「the book」こと、Rustの公式入門ガイド: [The Rust Programming Language](https://doc.rust-lang.org/book/) 。
最終章（20章）の課題として簡易サーバーを作成した。
しかしサンプルコードそのままだとChromeからではページが表示されなかった（Firefoxからなら問題なく表示される）。

原著: https://doc.rust-lang.org/book/ch20-03-graceful-shutdown-and-cleanup.html
日本語訳（少し古い）: https://doc.rust-jp.rs/book/second-edition/ch20-03-graceful-shutdown-and-cleanup.html

# 解決法
バッファサイズを増やせばChromeでも表示できるようになる。

```rust:src/bin/main.rs
fn handle_connection(mut stream: TcpStream) {
    let mut buffer = [0; 1024]; // ここを 512 → 1024 に変更。
    stream.read(&mut buffer).unwrap();
    // --snip--
}
```

またこの問題と直接の関係はないが、スレッド数と接続回数（？）の上限値を増やしたほうが動作確認しやすかった。
サンプルコードそのままだと1回の接続だけでサーバーがシャットダウンしてしまう。

```rust:src/bin/main.rs
fn main() {
    let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
    let pool = ThreadPool::new(8); // 4 → 8 に変更。

    for stream in listener.incoming().take(20) { // 2 → 20 に変更。
        // --snip--
    }
    // --snip--
}
```
よほど性能の低いマシンでもなければ問題なく動作するはず。

# 参考
https://users.rust-lang.org/t/rust-web-server-not-working-with-requests-from-chrome/34835
Google Analytics 個人認定資格 (GAIQ) 取得備忘録

#試験について
試験時間：90分
問題数：70問 (選択式)
合格ライン：80% (56問) 以上
受験料：無料
受験形式：オンライン
有効期限：1年間
※不合格の場合は24時間待てば再度受験可能

#勉強方法
[Google Skillshop アナリティクスアカデミー](https://skillshop.exceedlms.com/student/path/2949-google-gaiq)にて学習。
動画形式だが、動画右下の[文字情報]からテキストを表示すると早い。

#勉強時間
15時間程度
はじめは律儀に動画を見ながらノートを取っていたので時間を食ってしまった。
文字情報のテキストでやればもっと少ない時間で合格できると思います。

#結果
正答率88% (62/70) 合格

#感想
理解度テストからもそのまま出るので、最低でも理解度テストは完璧にしておくこと。
何度でも再受験できるので、一通りコースを受講し終えたら一旦受験してみると良いと思う。
受験後に表示されるのは正答率のみで、どの問題を間違えたかはわからないのが難点。
デザインを依頼する際に気をつけるポイント（初級）反省用

HPをデザイナーに依頼するときに気をつけたポイント

・最初に手書きでラフ画を作成
・はじめに必要なページ作成
・Atfirstできちんと説明をしていた。
目的と、何枚目にどんな内容を記載しているのかを載せている。

目的と、参考HPと色使いの指定。
・メインカラーとイメージが大事。
・多言語対応の為、英語表記想定で依頼するのを忘れていた。
(日本語よりも英語で文字数が増えがち)
・レスポンシブデザインであることを伝える。
・どこにイラストのつけるつけないを指定していなかった。
・参考にしたURLを載せる
PMP試験に出てくる第13章Project Stakeholder Managementの4つのプロセスを覚えよう！

# Project Stakeholder Managementとは
PMBOKの`10の知識エリア`の中の`プロジェクトステークホルダー管理`のことである。

[PMBOKの10の知識エリア](https://qiita.com/Yumenoshima/items/0982785d1a481dfc6a27)

## PMBOKガイドのどこに出てくるか
第13章(PMBOKガイド503ページ)

## プロジェクトステークホルダー管理の4つのプロセス
- Initiating 立ち上げ
    - (13.1) Identify Stakeholders
        - 13.1のITTO
- Planning 計画
    - (13.2) Plan Stakeholder Engagement
        - 13.2のITTO
- Executing 実行
    - (13.3) Manage Stakeholder Engagement
        - 13.3.のITTO
- Monitor and Controlling 監視と制御  
    - (13.4) Monitor Stakeholder Engagement
        - 13.4のITTO
- Closing クロージング

## まとめ
`プロジェクトステークホルダー管理`の`4つのプロセス`がどのフェーズで使われているか覚えれば完璧だね！3つのプロセスの`ITTO`も暗記しよう！

----

以上
React Routerのexactとは何か

## 追記@2021/11

2021年11月にリリースされた[React Router v6](https://reactrouter.com/)では、
デフォルトが完全一致になったため、`exact`の記述は不要になりました。

> `<Route exact>` is gone. Instead, routes with descendant routes (defined in other components) use a trailing `*` in their path to indicate they match deeply

> `<Route exact>`はなくなりました。代わりに、（他のコンポーネントで定義されている）子孫ルートを持つルートは、パスに末尾の`*`を使用して、それらが深く一致していることを示します。

> v6のドキュメントより引用

[React Router | Upgrading from v5](https://reactrouter.com/docs/en/v6/upgrading/v5)

以下、`exact`の説明は[v4 or v5](https://v5.reactrouter.com/)対象の説明になりますので、
ご注意ください。

## React Router v5までの`exact`について

```jsx
<Route exact path="/" component={Home} />
```

[React Router](https://reacttraining.com/react-router/)の`<Route />`に`exact`を記述すると、`path`に指定したパス文字列と、`location.pathName`（windowオブジェクトのlocation.pathName）が完全一致した場合のみコンポーネントを返すようになります。

`exact`はbool値で、デフォルトは`false`（`exact`記述無し）で部分一致でコンポーネントを返します。

公式ドキュメントには下記の例で示されています。

| path       |       location.pathname	 |    exact    |    matches?    |
|:-----------------|:------------------|:------------------:|:------------------:|
| /one             | /one/two |        true        | no |
| /one           | /one/two |       false       | yes |

[React Router: Declarative Routing for React.js](https://reacttraining.com/react-router/web/api/Route/exact-bool)

上記の通り、`exact`を指定しない場合、`path`を`/one`に指定していても、
部分一致によりlocation.pathnameが`/one/two`にマッチしてしまうとのことです。

Homeコンポーネントのようなindexページを表示する`<Route />`で`exact`が指定されているのは、
指定しないと全ての`path`に部分一致してしまうからなのですね。

## 参照

[reactjs - React : difference between \<Route exact path="/" /\> and \<Route path="/" /\> - Stack Overflow](https://stackoverflow.com/questions/49162311/react-difference-between-route-exact-path-and-route-path)
Railsチュートリアル：14章(わからないとこメモです)

#第14章ユーザーをフォローする

この章で扱っている手法は本書全体の中で最も難易度が高い

##14.1 Relationshipモデル

followersとfollowingとusersの紐付けが重要

Facebookのような友好関係 (Friendships) では本質的に左右対称のデータモデルが成り立ちますが、Twitterのようなフォロー関係では左右非対称の性質

##14.1.2 User/Relationshipの関連付け

##14.1.3 Relationshipのバリデーション

##14.1.4 フォローしているユーザー

##14.1.5 フォロワー

完全に理解不能。。。

##14.2 [Follow] のWebインターフェイス

##14.2.1 フォローのサンプルデータ

ここでdb/seeds.rbのコードが間違えてたことにきづく。endの位置がおかしかった。

##14.2.2 統計と [Follow] フォーム

まじでいみわからん

##14.2.3 [Following] と [Followers] ページ

##14.2.4 [Follow] ボタン (基本編)

##14.2.5 [Follow] ボタン (Ajax編)

急にJSの話が出てくる。

##14.2.6 フォローをテストする

##14.3 ステータスフィード

この節で扱われている内容は、本書の中でも最も高度なものです

##14.3.2 フィードを初めて実装する

##14.3.3 サブセレクト

##14.4 最後に

##14.4.1 サンプルアプリケーションの機能を拡張する

まじでなんもわからんママに終わってしまった。。。
PMP試験に出てくる第12章Project Procurement Managementの3つのプロセスを覚えよう！

# Project Procurement Managementとは
PMBOKの`10の知識エリア`の中の`プロジェクト調達管理`のことである。

[PMBOKの10の知識エリア](https://qiita.com/Yumenoshima/items/0982785d1a481dfc6a27)

## PMBOKガイドのどこに出てくるか
第12章(PMBOKガイド459ページ)

## プロジェクト調達管理の3つのプロセス
- Initiating Phase 立ち上げ
- Planning 計画
    - (12.1) Plan Procurement Management
        - 12.1のITTO
- Executing 実行
    - (12.2) Conduct Procurements
        - １２.２のITTO
- Monitor and Controlling 監視と制御  
    - (12.3) Control Procurements
        - １２.３のITTO
- Closing クロージング

## まとめ
`プロジェクト調達管理`の`3つのプロセス`がどのフェーズで使われているか覚えれば完璧だね！3つのプロセスの`ITTO`も暗記しよう！

----

以上
Teams修業日記：会社のメンバを追加しても予定表が使えない(表示)されない

#困った事
新しく会社メンバを追加したけど`予定表`が使えない！！！
散々`Teamsの予定表アイコンが表示されない`でググっても、出てきた内容がこれさっぱり・・・。

散々ポリシーを他の使えるメンバと比較しまくって調べてみましたが何も変わらない！

もぉぉぉ！

#解決
ありました・・・結論：`数時間～1日程度`待ちましょう！

[MS Teams の「予定表」アイコンが表示されない](https://www.cc.tsukuba.ac.jp/wp/support/faqs/teams_schedule_icon/)

やっぱり皆さん困ってるのね。

そして`一晩待てば表示される`んだって。

#感想
ハマるよね･･･フツー。
会議とか開催したいから使うんであって、肝心の機能が使えないなんて！？

どっかで走ってるバッチ処理の完了待ちなんて・・・。
PMP試験に出てくる第11章Project Risk Managementの7つのプロセスを覚えよう！

# Project Risk Managementとは
PMBOKの`10の知識エリア`の中の`プロジェクトリスク管理`のことである。

[PMBOKの10の知識エリア](https://qiita.com/Yumenoshima/items/0982785d1a481dfc6a27)

## PMBOKガイドのどこに出てくるか
第11章(PMBOKガイド395ページ)

## プロジェクトリスク管理の7つのプロセス
- Initiating 立ち上げ
- Planning 計画
    - (11.1) Plan Risk Management
        - 11.1のITTO
    - (11.2) Identify Risks
        - 11.2のITTO
    - (11.3) Perform Qualitative Risk Analysis
        - 11.3のITTO
    - (11.4) Perform Quantitative Risk Analysis
        - 11.4のITTO
    - (11.5) Plan Risk Responses
        - 11.5のITTO
- Executing 実行
    - (11.6) Implement Risk Responses
        - 11.6のITTO
- Monitor and Controlling 監視と制御   
    - (11.7) Monitor Risks
        - 11.7のITTO
- Closing クロージング

## まとめ
`プロジェクトリスク管理`の`7つのプロセス`がどのフェーズで使われているか覚えれば完璧だね！7つのプロセスの`ITTO`も暗記しよう！

----

以上
【ラビットチャレンジ】深層学習

E資格取得のためラビットチャレンジに挑戦しています。



#深層学習の目的
+ 学習を通して誤差を最小にするネットワークを作成すること
    + 誤差$E(w)$を最小化するパラメータ$w$を発見すること
        + 勾配降下法を利用してパラメータを最適化  

#レポート目次
1.Day1:(https://qiita.com/fantahide/private/b76474f4918ccfdca9f6)
2.Day2:(https://qiita.com/fantahide/private/20588d2747118b52eb51)
3-1.Day3:(https://qiita.com/fantahide/private/dec56b16c0efcd183d26)
3-2.Day3:(https://qiita.com/fantahide2/items/09ba263f633677eab99a)
4.Day4: (https://qiita.com/fantahide2/private/b55231444117593edb59)
【GAS】Instagram Graph APIを利用して投稿毎のいいね数を取得する

こんにちわ、さかぐち（[@sakaguchi_mamii](https://twitter.com/sakaguchi_mamii)）です。

我が家ではハムスターを飼っています。
[Instagramで我が子自慢](https://www.instagram.com/hamtarosan2020/)をしているのですが、どの投稿が反応がいいのか管理したくなる！
とはいえ、投稿毎に「いいね」を確認するのは手間なので、GASと[Instagram Graph API](https://developers.facebook.com/docs/instagram-api/?locale=ja_JP)を利用して自動でスプレットシートに記録してきます。

#Instagram Graph APIを実行する準備

Instagram Graph APIには以下の手順が必要です。

- Instagramをプロアカウントに切り替え
- Facebookページ作成
- 1つ目のアカウントトークン取得
- 2つ目のアカウントトークン取得
- 3つ目のアカウントトークン取得
- API実行

大変でした！笑

以下のページで丁寧に解説してありますので、参照ください。

[Instagram Graph APIとGAS（Google Apps Script）を使ってインスタグラムのフォロワー数を自動的に日々記録する](https://qiita.com/joh_luck/items/af6f02c43e2f4497e15e)

#スプレットシート作成

取得したデータ記録用にスプレットシートを準備します。（シート名：投稿別）
※スクリプト内でシート名を指定し記録処理を実行します。
<img width="691" alt="スクリーンショット_2020-05-09_17_07_30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/4f8531c2-0a5e-e6b5-cb5f-3dadb87ce1e4.png">

#スクリプト

IGメディアオブジェクトのメタデータを取得します。（[リファレンス](https://developers.facebook.com/docs/instagram-api/reference/media#metadata)）
`GET /{ig-media-id}?fields={fields}`

```javascript
function myFunction() {

  var instragramID = 'InstagramのビジネスアカウントID';
  var ACCESS_TOKEN = "3つ目のアクセストークン";

  var num = 100; // 取得件数
  var facebook_url = 'https://graph.facebook.com/v7.0/' + instragramID + '?fields=media.limit(' + num + '){timestamp,like_count,media_type,permalink}&access_token=' + ACCESS_TOKEN;

  var encodedURI = encodeURI(facebook_url);
  var response = UrlFetchApp.fetch(encodedURI);
  var jsonData = JSON.parse(response);

  // スプレットシート読み込み
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('投稿別');
  var sheet_row = 2; // スプレットシートの開始行（2行目から）

  // 取得したデータの分だけくり返し
  for(var i=0; i<jsonData['media']['data'].length; i++){
    var timestamp = jsonData['media']['data'][i]['timestamp']; // 投稿日時
    var like_count = jsonData['media']['data'][i]['like_count']; // いいね数
    var media_type = jsonData['media']['data'][i]['media_type']; // メディア種別
    var permalink = jsonData['media']['data'][i]['permalink']; // リンク
    sheet.getRange(sheet_row,1).setValue(Utilities.formatDate(new Date(timestamp), 'Asia/Tokyo','yyyy/MM/dd HH:mm:ss'));
    sheet.getRange(sheet_row,2).setValue(like_count);
    sheet.getRange(sheet_row,3).setValue(media_type);
    sheet.getRange(sheet_row,4).setValue(permalink);
    sheet_row++;
  }

}
```

`timestamp,like_count,media_type,permalink`部分に指定できるパラメータは以下を参照ください。

[リファレンス - 値が返されるフィールド](https://developers.facebook.com/docs/instagram-api/reference/media#returnable-fields)

#テスト

取得できました！
<img width="699" alt="スクリーンショット_2020-05-09_17_24_40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/917713c9-0103-736f-e09c-261eacb24b13.png">

赤枠のリンクをクリックし、いいね数があってることを確認しました。
<img width="940" alt="スクリーンショット_2020-05-09_16_52_19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136275/8f36468a-c9a9-83ca-f79c-2a742a937e50.png">

#最後に

Instagramは最近始めたばかりなので、今回取得した結果を分析し「いい感じに」運用していこうと思います。

※投稿内容は所属組織とは一切関係ありません。
AutoScalingの動作テストでstressを使ったので備忘録


### 目的

AutoScalingのスケールアウト/インを確認するために、stressを試して見たので備忘録。


#### インストール

```bash:stressのインストール
sudo amazon-linux-extras install epel -y
sudo yum install stress -y
```

#### CPU負荷をかける

```bash:CPU使用率を上昇させるコマンド
stress -i 1
```

#### CPU負荷がかかっているか確認

```bash:CPU使用率を確認するコマンド
top
```

#### 停止方法

```bash:stressプロセスをKillするコマンド
ps aux | grep stress
root      5275  0.0  0.0   7572  1032 pts/0    S+   08:13   0:00 stress -i 1
root      5276 99.9  0.0   7572   100 pts/0    R+   08:13  20:20 stress -i 1
root      5458  0.0  0.0 119420   960 pts/3    S+   08:33   0:00 grep --color=auto stress
kill 5275 5276
```
Teams修業日記：初めてゲストユーザを追加するのに苦戦した

#躓きはじめ
今まで`Microsoft365`なんて使ってこなかったのですが、
色々と外部とコラボレーションするのに必要になってきましてスモールスタートしています。

で、いよいよ外部ユーザを招待しようとなったんですがコレがハマった。

# TeamsはデフォルトではゲストアクセスOFF
Teamsは、組織で最初に使い始めると「ゲストアクセス」はOFFになっています。
自分とこのユーザは`Microsoft356管理センター`のアクティブなユーザから追加すれば良いので
同じようにゲストユーザに対しても
　`Microsoft356管理センター`→`ユーザ`→`ゲストユーザ`
から追加しようと思うのがフツーだと思います。

# ゲストユーザは`Microsoft356管理センター`からは追加できない苦行①
？？なんでって思うけどこれが出来ない・・・フツーにできない。
画面には

```
Teams‎ にゲストがアクセスできるようにすることで、すべてのユーザーがリモートで共同作業できるようになります。
‎Teams‎ へのゲスト アクセスを許可する
```

なんてそれっぽいリンクがあるじゃないですか？
でこのリンクをクリックするとTeamsの管理画面に飛ばされます。
ここで悦び勇んで

```
Teams へのゲスト アクセスを許可する　OFF→ON
```
するじゃないですかフツー？ でもちろん”ON”にするわけです。
そうすると・・・

```
すげー時間かかるかもしれんからちょっと待っといてね
```
みたいな表示がされるので、喜んでまた
　`Microsoft356管理センター`→`ユーザ`→`ゲストユーザ`
で待つわけですよ。

・・・でも`追加`のボタンは、待てど暮らせど表示される事はありませんでした。

# ゲストユーザは`Microsoft356管理センター`からは追加できない苦行②
一夜明けて流石にもう追加できるだろうと
　`Microsoft356管理センター`→`ユーザ`→`ゲストユーザ`
を見てみても・・・`追加`のボタンは表示されません。

これは流石におかしいなと思いググってみると・・・ありました！
 [Microsoft Teams のゲスト アクセスのチェックリスト](https://docs.microsoft.com/ja-JP/microsoftteams/guest-access-checklist?WT.mc_id=TeamsAdminCenterCSH)
もうナンだよ･･･早よ言ってくれ。

ふむふむ・・・フム！？
[手順 2: Azure AD ビジネス ツー ビジネスの設定を構成する](https://docs.microsoft.com/ja-JP/microsoftteams/guest-access-checklist?WT.mc_id=TeamsAdminCenterCSH#step-2-configure-azure-ad-business-to-business-settings)

#衝撃のAzure portal編
なんと！　ゲストユーザを有効にするには`Azure portal`から操作する必要あるんです！
　`Azure Active Directory `→`管理`→`組織の関係`→`設定` の順に移動します

みっけた！！`ゲスト ユーザーのアクセス許可を制限する`

結論から言うとコレが根っこで追加を阻んで居たのです。
こいつを

```
ゲスト ユーザーのアクセス許可を制限する 　いいえ→はい
```
で切り替えればOKでした。
上の方の手順書に他ツラツラと確認方法が書いてますが・・・コレが根っこです。


# ゲストユーザは`Microsoft356管理センター`からは追加できない苦行③
さていよいよコレで設定は万全です！
　`Microsoft356管理センター`→`ユーザ`→`ゲストユーザ`
で・・・`追加`のボタンを？！　やっぱり表示されません。

https://qiita.com/amatatsuk/items/cb6e08cf6d85c5945f5a

##結論
`Microsoft356管理センター`からはゲストは追加出来ない。

#正しいTeamsのゲストユーザの追加手順
ゲストユーザの追加は`Teams`からやりましょう。
ゲストを追加したいチームを選びます。
　`チーム`→`オプション`→`メンバーを追加`
するとポップアップしてきた画面の入力欄に`外部のメアド`を入力すると、
無事招待が行えるようになります。

めでたしめでたし・・・フー疲れる。


#補足
何かとお世話になる「Microsoft365管理センター」について書きました。

https://qiita.com/amatatsuk/items/cb6e08cf6d85c5945f5a

#余談
Teamsって`Active Directory`の拡張なのね？
機械学習 ロジスティック回帰

○この記事の要点
ロジスティック回帰を学習したのでメモ

ロジスティック回帰：
・分類問題の予測を行うアルゴリズム
（回帰という名前だが、分類で利用される）
・データが各クラスに所属する確率を計算することで分類を行う
（クラス１：0.3,クラス２：0.5,クラス３：0.2のようなアウトプットを出力する）
・教師あり学習

#○ソースコード(Python)
```ruby:ロジスティック回帰モデル
# ロジスティック回帰
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score

# アヤメのデータをロード
data = load_iris()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.DataFrame(data.target, columns=["Species"])
df # アヤメのデータを表示
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628917/678ac1f5-33c8-9ed0-338c-33af06821f36.png)
・・・・・・・・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628917/a85840ef-71b4-01da-829a-e229fb1a3ee0.png)

Sepal.Length（がく片の長さ），Sepal.Width（がく片の幅）， Petal.Length（花弁の長さ），Petal.Width（花弁の幅）の4つの量的変数
Species（種，setosa，versicolor，virginica の3種類）

#○ソースコード(Python)
```ruby:ロジスティック回帰モデル（続き）
# ロジスティック回帰モデルの作成と学習、予測
model = LogisticRegression()
model.fit(X, y)
y_pred = model.predict(X)
print(y_pred) # 150件のアヤメのデータに対し、予測した結果

# モデルの評価
print(mean_squared_error(y, y_pred)) # 平均二乗誤差。小さいほど良い
print(r2_score(y, y_pred)) # 決定係数。0～1の間で大きいほど良い
```

実行結果
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1
 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
0.02666666666666667
0.96


・分類問題で一番簡単に理解できるモデルかと思う
・結果について1が並んでいるところにたまに表れている1と2が並んでいるところにたまに表れている1が正解と予測が合っていないところ。
PyODE スライダで非線形バネ

PyODE のスライダ（ode.SliderJoint）にてバネに働く力（バネ係数とか）を任意関数で設定できるか試してみました。

前の記事です　→　[PyODE スライダーを2重にしてみる](https://qiita.com/emuai/items/dee88c1e889d401a05f4)

##1 動機
この手の物理エンジン使った計算例というものは、
　・要素数が多め（ 10 個で少ないほうかな）
　・バネやダンパなんかは一番単純なもの。
といった具合のものが常です。

しかし私はバネ・ダンパ系を扱う目的です。
単純な線形バネしか設定できないのでは意味がない。
果たしてODE（PyODE）でバネ係数を任意設定することは可能でしょうか。
これがもし駄目だったらODEの利用はいったんあきらめることになります。

###先に結論
各時刻ごとに、「```slideJoint```」のインスタンスメソッド「 ```addForce()``` 」から任意の力を値で渡せることがわかりました。
したがってバネ係数や減衰を好きな特性に設定できます。


##2 設定方法

####スライダに生じる力を直接設定
まずスライダーに生じる力を値で渡す部分です。↓

```python:addForceで任意の駆動力を与える
while() :    ####    時間進行のループ
    #中略

    f = spring( j01 , KP, KD )    
    j01.addForce( f )

    world.step(dt)
```
```j01``` というのはスライダすなわち ode.SliderJoint インスタンスです。
後述の```spring()```という自作関数で決めた値を ```f``` としてます。

メソッド addForce で任意の値を駆動力として与えられます。
```world.step()``` が ode の1ステップの時間進行ですから
その直前とかで addForce を呼べばよいでしょう。

####スライダの状態から力を決める
```spring()``` は、スライダの状態から力を得る自作の関数です。

```python:バネ・ダンパ関数
def spring( j, kp, kd=None ):
    r = j.getPosition()
    f = r*r*r * kp
    if None is not kd:
        f += j.getPositionRate() * kd
    return - f
```
ここでは```j```がスライダ（ode.SliderJoint インスタンス）
スライダの変位量はインスタンスメソッド```getPosition()```で取得できます。
同じく変位速度は```getPositionRate()```です。

ここでは**変位の3乗に比例した反発力が生じるバネ**としました。
（ 2 乗で試したところ線形バネとの違いが不明瞭に見えたため 3 乗にした。）


※　これらのコーディングにより、単純な線形バネではC/C++側にあった処理がPythonコード側に移ったことになります。
なにがしかのパフォーマンス低下はありえます。

##3 結果
Pygameによる可視化です。↓
![tutorial_1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469875/994a6588-46f0-1340-ffb2-74d2dc8ffa45.gif)

黒丸が固定オブジェクト。
線はバネ（スライダ）の位置をあらわしています。
赤茶丸がバネの上に乗って揺れています。

↓　こちらは赤茶丸の高さと速度それぞれの時間変化。
![y_DT0.0005_kp20_kd0_zeta0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469875/5d236089-eb98-dbf9-d0e0-0fae77ecf86b.png)
```KP = 100.0``` ```KD = 0```としています。
非線形にした甲斐あって
正弦波とは違った、歪んだ波形が見られます。


##4 総括
```addForce()``` で力を好きに設定できることがわかりました。
これならいろいろと試せそうです。
ということで、しばらくこの PyODE を使っていこうと思います。
PMP試験に出てくる第10章Project Communications Managementの3つのプロセスを覚えよう！

# Project Communications Managementとは
PMBOKの`10の知識エリア`の中の`プロジェクトコミュニケーション管理`のことである。

[PMBOKの10の知識エリア](https://qiita.com/Yumenoshima/items/0982785d1a481dfc6a27)

## PMBOKガイドのどこに出てくるか
第10章(PMBOKガイド359ページ)

## プロジェクトコミュニケーション管理の3つのプロセス
- Initiating 立ち上げ
- Planning 計画
    - (10.1) Plan Communications Management
        - 10.1のITTO
- Executing 実行
    - (10.2) Manage Communications
        - 10.2のITTO
- Monitor and Controlling 監視と制御   
    - (10.3) Monitor Communications
        - 10.3のITTO
- Closing クロージング

## まとめ
`プロジェクトコミュニケーション管理`の`3つのプロセス`がどのフェーズで使われているか覚えれば完璧だね！3つのプロセスの`ITTO`も暗記しよう！

----

以上
Javascriptの変数 const,let,varについての覚書

###変数の宣言ルール
- 変数名のイニシャルレターは$,_,英文字のどれか
- 変数名は基本的にcamelCaseで宣言されるのが一般的


##const, let, var それぞれの特徴
###constについて
☑再代入不可
☑再宣言不可
☑厳密には定数ではない

→再代入**不可**

```js
const number =100;
✖number = 200; //数値を変更できない
```

→再宣言**不可**

```js
const number =100;
✖const number = 200; //同じ変数を再度宣言できない
```

→配列やオブジェクトは後から変更できるので厳密には定数ではない

```js
const object ={
 number = 100;
};
object.number = 200;//再代入できてしまう
```

###letについて
☑再代入可
☑再宣言不可

→再代入**可**

```js
let number =100;
number = 200; //数値を変更できる
```

→再宣言**不可**

```js
let number =100;
✖let number = 200; //同じ変数を再度宣言できない
```

###varについて
☑再代入可
☑再宣言可

→再代入**可**

```js
var number =100;
number = 200; //数値を変更できる
```

→再宣言**可**

```js
var number =100;
var number = 200; //再度宣言できる
```

##const, let, var 使い分け

仕様優先順位const>let>var

- varとletのスコープの違い
 - var →関数スコープ　関数内全域からアクセス可
 - let →ブロックスコープ　ifやfor等で宣言した場合｛｝外からアクセス不可
Google Compute EngineでSSH接続できなくなってからでもパスワードを設定する

Google Compute Engineで焦ってDebianのアップグレードをしてしまったらSSH接続が出来なくなってしまいました。

※自分の場合は個人利用のf1-microマシンなので適当ですが、まともなVMでアップグレードをする際にはスナップショットを取るなど、巻き戻せる準備もしておくべきですね。

いろいろ試しながら検索したところでは、
[GCPでstretchをbusterに上げたらSSH鍵が転送されなくなった－blog.akimasa.jp](https://blog.akimasa.jp/2019/12/12/gcp%E3%81%A7stretch%E3%82%92buster%E3%81%AB%E4%B8%8A%E3%81%92%E3%81%9F%E3%82%89ssh%E9%8D%B5%E3%81%8C%E8%BB%A2%E9%80%81%E3%81%95%E3%82%8C%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F/)

```
結局、ゲスト環境パッケージのインストールを行ったら直った。
google-compute-engine-osloginとgoogle-compute-engineが入っていなかったようだ。
```
というわけで、google-compute-engine-osloginを入れねば、と思いました。

SSHログインできないときはシリアルコンソール接続になります。
が、 **パスワード設定していないのでログイン出来ません**。

さらに調べたところ、
[ゲスト環境のインストール &nbsp;|&nbsp; Compute Engine ドキュメント](https://cloud.google.com/compute/docs/images/install-guest-environment?hl=ja#startup_script)
の 「ブートディスクのクローンを作成して起動スクリプトでゲスト環境をインストール」をやっていけばなんとかなりそうです。

もうひとつVMインスタンスを立ち上げ、今使っているディスクをコピーしてrc.localに仕込んで動かす、という寸法です。

が、自分の環境の場合、別の依存関係で失敗してしまいます。
```google-compute-engine : Depends: python3-google-compute-engine (= 20190124-3) but 2.8.16-1 is to be installed```
みたいな感じです。アップグレードが古すぎたのですね。

都度都度rc.localに仕込んでブート時に対処するのは厳しいので、この仕組みを応用してアカウントにパスワードを設定することにしました。

Debian だと chpasswdでファイルを読み込めばパスワード設定できるはずです。

```
gcloud compute ssh rescue


export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
DEV="/dev/sdb1"
sudo mkdir "$NEW_DISK_MOUNT_POINT"
sudo mount "$DEV" "$NEW_DISK_MOUNT_POINT"
cat <<'EOF' >/tmp/rc.local
#!/bin/bash
cat <<'EOL' > /tmp/myuser.txt
ログインユーザー名:パスワード
EOL
sudo chpasswd < /tmp/myuser.txt
rm /tmp/myuser.txt
reboot now
EOF
if [ -f "$NEW_DISK_MOUNT_POINT/etc/rc.local" ]; then
   sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.local" \
   "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
fi
sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.local"
sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.local"
sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.local"

sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
```
みたいなことをしてみたら、パスワード設定されたディスクを準備できました。

ちなみに上記のサイトだと、さらに別のインスタンスを用意して新ディスクで動かしてね、みたいな流れでしたが、
ぶっちゃけ旧インスタンスのブートディスクを外してrescueインスタンスで上記みたいなrc.localを仕込めば2インスタンスで作業は済みます。

シリアルコンソール接続できれば、あとは 
```apt --fix-broken install```
とかなんとか右往左往してSSH接続出来るようになりました。

いやーヒヤヒヤしました！
Apacheにsecretを設定して、安全にTomcatとAJP通信する

## 結論

以下のように設定すると、secretを使ってApache HTTP Server(Apache)とTomcatを通信させることができます。

* Apacheの設定

``` httpd.conf
ProxyPass / ajp://tomcat:8009/ secret=YOUR_PASSWORD
ProxyPassReverse / ajp://tomcat:8009/ secret=YOUR_PASSWORD
```

`httpd.conf`内で読み込んでいる、他のconfファイルに記述しても問題ありません。

* Tomcatの設定

```  server.xml
<Connector protocol="AJP/1.3"
			address="0.0.0.0"
			port="8009"
			redirectPort="8443"
			secret="YOUR_PASSWORD" />
```

`address`はTomcatへのリクエストを許可する接続元IPです。デフォルトでは同一マシンからのアクセスのみ許可されています。`0.0.0.0`はすべてのホストからのアクセスを許可するという意味です。



## はじめに

[CVE-2020-1938](https://www.jpcert.or.jp/at/2020/at200009.html)の発覚により、Tomcat9では9.0.31以降からAJPでの通信をするためにはTomcat側で初期設定が必要となりました。

一般にHTTPよりもAJPで通信するほうが高速である(参考：[Tomcatハンドブック]([https://www.amazon.co.jp/Tomcat%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC2%E7%89%88-Jason-Brittain/dp/4873113881](https://www.amazon.co.jp/Tomcatハンドブック-第2版-Jason-Brittain/dp/4873113881)))ため、AJPを使い続けたいという考えはあると思います。信頼できないAJP通信を防ぐことができれば良いので、AJPを安全に使い続ける手段はいくつか考えられます。

* AJPコネクタへの接続元IPを限定する
* アクセス制限はファイアウォール等の別ソフトに任せる
* AJPコネクタにsecretを設定する(**Apache 2.4.42以降のみ**)

接続元IPを限定するのは、やや面倒です。基本的に固定値で設定することになるため、リバースプロキシのIPアドレスが変わると設定し直すことになります。リバースプロキシとTomcatが常に同一マシン上にあるならば`127.0.0.1`を設定すればよいのですが、サービス同士の結合を疎にするために別ホストで動かしたい場合もあるでしょう。
ファイアウォール等を利用するという手段も、ApacheとTomcatで完結しなくなってしまうので面倒です。

そこで本記事では、接続元IPは制限せずTomcatのAJPコネクタにsecretを設定することで、AJPを安全に使用する方法を紹介します。

## 環境

* CentOS Linux release 7.8.2003
* Apache HTTP Server 2.4.43
* Apache Tomcat 9.0.34

## 設定

### 1.Apacheの`mod_proxy`モジュールと`mod_ajp`モジュールを使えるようにする

   `/etc/httpd/conf.modules.d/00-proxy.conf`の以下2モジュールが有効であることを確認します。
   デフォルトで外れていると思いますが、もし先頭に#がついていたら外してください。

```00-proxy.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
```

### 2. Apacheの`ProxyPass`、`ProxyPassReverse`ディレクティブにsecretを設定する
   `httpd.conf`を直接編集してもよいですが、基本的に独自設定は`conf.d/`以下にconfファイルを作成して配置するのが安全です。(`conf/httpd.conf`に`conf.d/*.conf`を読み込むという設定があります。)
   `proxy.conf`というファイルを作り、受け取ったリクエストをすべてTomcatに流すようにします。

```
# cd /etc/httpd/conf.d
# vi proxy.conf 
```

```proxy.conf
ProxyPass / ajp://tomcat:8009/ secret=password
ProxyPassReverse / ajp://tomcat:8009/ secret=password
```

### 3. Tomcatのsever.xmlにsecret属性を設定する
同じsecretをTomcatの`conf/server.xml`に設定します。また、AJPコネクタの設定はデフォルトでコメントアウトされているため、解除して有効にします。

```
<Connector protocol="AJP/1.3"
			address="0.0.0.0"
			port="8009"
			redirectPort="8443"
			secret="password" />
```

address属性を`0.0.0.0`とすると、すべてのホストからのリクエストを受け付けるという意味になります。しかし、secretが設定されているためsecretのないリクエストはパーミッションエラーとなります。



以上で、secretを使ったTomcatのAJP通信設定は完了です。
Apacheの80番ポートに接続して、以下のようにTomcatのトップページが表示されれば成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199887/78b067cd-b1c6-1f12-3620-797a8ecf3e54.png)

## 補足

セキュリティなんて必要ない場合は、以下のようにすると手っ取り早くAJPを使えます。
当然ながら非推奨ですが、検証時には便利だと思います。

* Apacheの設定

``` httpd.conf
ProxyPass / ajp://tomcat:8009/
ProxyPassReverse / ajp://tomcat:8009/
```

* Tomcatの設定

```  server.xml
<Connector protocol="AJP/1.3"
			address="0.0.0.0"
			port="8009"
			redirectPort="8443"
			secretRequired="false" />
```
簡易なMySQL5.6をdocker-composeで用意

SQLステートメントの挙動を勉強するためにMySQLだけの環境がほしかったのでDockerで作成しました。
少し前に利用していたものですが、今も使えるのでここに認めておきます。

# 概要

[達人に学ぶSQL徹底指南書](https://www.shoeisha.co.jp/book/detail/9784798157825)を読んでSQLを勉強していましたが、やはり直接SQLを叩いて学びたいので環境を用意しました。
この書籍の第２版ではウィンドウ関数について記述されています。**ウィンドウ関数が対応しているMySQLのバージョンは8.0以上が必要なのでご注意ください。**

対応したこと

 - linux内の日本語入出力に対応
 - mysqlの日本語利用に対応
 - viを導入してmysql入力を楽に

今回使う書籍がtable定義で日本語を多用するので少し苦労しました。

## 構成

```shell
.
├── Dockerfile
├── data
└── docker-compose.yml
```


### Dockerfile

```Dockerfile
FROM mysql:5.6

RUN apt-get update && \
    apt-get install -y locales vim && \
    rm -rf /var/lib/apt/lists/* && \
    echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \
    locale-gen ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8

RUN { \
    echo '[mysqld]'; \
    echo 'character-set-server=utf8mb4'; \
    echo 'collation-server=utf8mb4_general_ci'; \
    echo '[client]'; \
    echo 'default-character-set=utf8mb4'; \
} > /etc/mysql/conf.d/charset.cnf
```

### docker-compose.yml

```yml
mysql:
  build: .
  dockerfile: Dockerfile-MySQL
  environment:
    MYSQL_ROOT_PASSWORD: root         #rootユーザ用のパスワード
    MYSQL_USER: user                  #作業ユーザ名
    MYSQL_PASSWORD: password          #作業ユーザ用のパスワード
    MYSQL_DATABASE: test              #作成するDB名
    TZ: "Asia/Tokyo"
  ports:
    - 3306:3306
  volumes:
    - ./data:/var/lib/mysql
```

## Docker起動

```shell
docker-compose build
docker-compose up -d
```

## コンテナ内にログイン

```shell
docker-compose exec mysql # コンテナ内に入る
docker-compose exec mysql mysql -u root -p # mysqlにrootとしてログイン password: root
docker-compose exec mysql mysql -u user -p # mysqlにuserとしてログイン password: password
```

文字コードを確認してみましょう。

```m
mysql> use test
Database changed
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

```

## MySQL内でviを起動

以下でviが起動

```m
mysql> \e
```

```sql
CREATE TABLE `test_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL,
  `income` int(11) DEFAULT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
```

`:wq`でviから抜けると`mysql>`に戻るので以下のように`;`とエンターを入力すると実行されます。

```m
mysql> \e
mysql> ;
```
GitHubプロジェクト(カンバン)をターミナルで確認するツールを作ってみた

## はじめに
仕事でGitHubプロジェクト(カンバン)を利用しており、Terminalで閲覧したかったため、作成してみました。
Organizationに紐づいているGitHubプロジェクトにはまだ未対応ですが、今後対応する予定です。
リポジトリは[こちら](https://github.com/shuntaka9576/kanban)。

## どんなツール？
例として`microsoft/vscode`のGitHub Projectを本ツールでターミナル上に表示してみます。
<img width="1414" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159755/f8b180fa-7a7f-ac4d-98a9-8e5dd16b82f9.png">

コマンドは下記のような形で以下を指定します。
`repo`オプション(必須): リポジトリOWNER/リポジトリNAME
`search`オプション: プロジェクト名(デフォルトで1番目が選択される)

```bash
$ kanban --repo microsoft/vscode --search "Deepak & Ben"
```

<img width="937" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159755/e233c62d-9658-2423-6cba-64f50ee639ad.png">

動いている様子は、こちらです。
![kanban.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159755/f1b31f56-01b6-683b-b9d7-334f85443dd3.gif)


## 機能
### 出来ること
* プロジェクトの閲覧
* issue内容の確認(CtrN/CtrPでスクロール)
* 画面のリフレッシュ(R)
* プロジェクトをブラウザで開く(P)
* issueをブラウザで開く(p)

### これから出来るようにしたいこと
* Organizationに紐づいたプロジェクトの表示
* issueの編集
* issue、メモのカラム間移動
* APIエラーの詳細を画面に表示して通知

## インストール/使い方
リポジトリの[README.md](https://github.com/shuntaka9576/kanban#installation)に記載しています。(InstallationとConfigurationの項目で設定は完了です)
GitHubのトークンが必要となりますので、利用の際には注意してください。

## 技術
Goで作成しています。
Go自体業務で利用経験がなく、ほぼ初めてのため、コードは不安なところが多いです。。
至らない点がありましたら、FBを頂けるとありがたいです。

[tview](https://github.com/rivo/tview)というTUI用のライブラリが、マルチバイト文字列をかける事なく表示でき、助かりました。

## 参考
[docui](https://github.com/skanehira/docui)
実装ともにすごく参考にさせて頂きました。コードもとても読みやすかったです。

[gh](https://github.com/cli/cli)
GitHubの公式CLIです。GraphQLのリクエスト方法など参考にさせて頂きました。

## 最後に
作成する過程で、いくつかハマりポイントがあったのでそちらは別記事で書こうと思います！
勿論、issueやPR大歓迎です！
Bootstrapとは素人メモ

Bootstrap素人メモ

#twitter社のBootstrapとは
BootstrapはTwitter社が開発したCSS・JavaScriptのフレームワーク（ライブラリ）です。

通常CSSを書く場合、全てのスタイルを自分で作っていく必要がありますが、
このフレームワーク（ライブラリ）にはよく使われるスタイルがあらかじめ定義してあるので、
ルールに沿って利用するだけで整ったデザインのページを作成できます。
また、レスポンシブWebデザインに対応しています。

#感想
私はデザイン専門ではないのですが、
このライブラリを使用することでそれっぽくみえるデザインのWEBページを作ることができるから、
ありやなぁと思いました。

#参考
・https://ja.wikipedia.org/wiki/Bootstrap
・https://techacademy.jp/magazine/6270
PMP試験に出てくる第9章Project Resource Managementの6つのプロセスを覚えよう！

# Project Resource Managementとは
PMBOKの`10の知識エリア`の中の`プロジェクトリソース管理`のことである。

[PMBOKの10の知識エリア](https://qiita.com/Yumenoshima/items/0982785d1a481dfc6a27)

## PMBOKガイドのどこに出てくるか
第9章(PMBOKガイド307ページ)

## プロジェクトリソース管理の6つのプロセス
- Initiating 立ち上げ
- Planning 計画
    - (9.1) Plan Resource Management
        - 9.1のITTO
    - (9.2) Estimate Activity Resources
        - 9.2のITTO
- Executing 実行
    - (9.3) Acquire Resources
        - 9.3のITTO
    - (9.4) Develop Team
        - 9.4のITTO
    - (9.5) Manage Team
        - 9.5のITTO
- Monitor and Controlling 監視と制御   
    - (9.6) Control Resources
        - 9.6のITTO
- Closing クロージング

## まとめ
`プロジェクトリソース管理`の`6つのプロセス`がどのフェーズで使われているか覚えれば完璧だね！6つのプロセスの`ITTO`も暗記しよう！

----

以上
PMP試験に出てくる第8章Project Quality Managementの3つのプロセスを覚えよう！

# Project Quality Managementとは
PMBOKの`10の知識エリア`の中の`プロジェクト品質管理`のことである。

[PMBOKの10の知識エリア](https://qiita.com/Yumenoshima/items/0982785d1a481dfc6a27)

## PMBOKガイドのどこに出てくるか
第8章(PMBOKガイド271ページ)

## プロジェクト品質管理の3つのプロセス
- Initiating 立ち上げ
- Planning 計画
    - (8.1) Plan Quality Management
        - [8.1のITTO](https://qiita.com/Yumenoshima/items/8c6a679a4f9e7948f7a5)
- Executing 実行
    - (8.2) Manage Quality
        - [8.2のITTO](https://qiita.com/Yumenoshima/items/195d702bf52b05e5a6a9)
- Monitor and Controlling 監視と制御   
    - (8.3) Control Quality
        - [8.3のITTO](https://qiita.com/Yumenoshima/items/a74a4f5b3c9e2ea9584b)
- Closing クロージング

## まとめ
`プロジェクト品質管理`の`3つのプロセス`がどのフェーズで使われているか覚えれば完璧だね！3つのプロセスの`ITTO`も暗記しよう！

----
以上