OmniAICreator/Qiita-1.07M huggingface dataset:
VSCode で remote-ssh するには相手先の platform を指定せねばならんらしい

※個人的なメモです。知ってる人はどんどん先へ進んでください。

[MQTTを使用して、Lambdaからブラウザを更新する方法〜aws-iot-device-sdk(aws-iot-sdk-browser-bundle.js)を使用する場合〜](https://dev.classmethod.jp/articles/aws-iot-browser-refresh/) の例を自分でも試してみようと思って手元の環境を準備していたら、 https://github.com/aws/aws-iot-device-sdk-js の browserize の段で bash 登場…。あかん、私はまだ Windows 使いなのだ。

仕方ないと、久しぶりに EC2 と VSCode をつないで remote-ssh で作業しようかと思い立って(どうせ bundle 作るだけなんだからシンプルに ssh すりゃいいのに、わざわざ苦労を買い込む質)、EC2 立てて ssh key の設定して VSCode から接続！…あれ、つながらない。

```bash
[16:25:47.592] Log Level: 2
[16:25:47.599] remote-ssh@0.51.0
[16:25:47.599] win32 x64
[16:25:47.601] SSH Resolver called for "ssh-remote+dev", attempt 1
[16:25:47.601] SSH Resolver called for host: dev
[16:25:47.601] Setting up SSH remote "dev"
[16:25:47.624] Using commit id "17299e413d5590b14ab0340ea477cdd86ff13daf" and quality "stable" for server
[16:25:47.626] Install and start server if needed
[16:25:49.135] getPlatformForHost was canceled
[16:25:49.136] Resolver error: Connecting was canceled
[16:25:49.145] ------
```

解決策をあちこち探してなかなか見つからず、諦めかけてた頃にようやく、 [同じエラーに遭遇している人](https://stackoverflow.com/questions/60974357/cant-connect-vs-code-to-linux-machine-for-remote-development) を発見。コメントに「設定を追加すればいい」とあるのでやってみたら、確かにつながった。

settings.json に次のような記述を追加する。

```json
  "remote.SSH.remotePlatform": {
    "$remote_server_name": "linux"
  }
```

`$remote_server_name` には接続先のホスト名を、値には接続先のプラットフォームの種別 ( `linux`, `macOS`, `windows` のいずれか) を指定するということらしい。以前こんな設定あったかな？

画面からだとこんな感じになる。
![remote-platform-config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180213/8b8efb52-155c-f30b-0c6f-c00fe0c4aa46.png)
このエラーメッセージだけで原因がわかった人はエラいなと思う。

(追記) これをやるきっかけになった AWS IoT Device SDK、もう [v2 が出てる](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html#iot-javascript-sdk) じゃん :frowning2:
gitコマンド初心者覚書

### git初心者、すぐに忘れるので覚書

- githubで + New repositoryで、パブリックで nodeを選び、
できたリポジトリをローカルにクローンする。


```ターミナル
$ yarn global add create-react-app

$ git checkout -b hello-world

$ create-react-app ファイル名


$ git clone https://github.com/----/----.git//githubに新しいリポジトリを作り、ローカルにgit clone する

$ cd 作りたいディレクトリ //移動

$ git status //
git add されているけどまだ git commit されていないファイルの一覧
編集・変更・削除されているが、まだ git add されていないファイルの一覧
Git管理されていない、かつ .gitignore で管理除外対象にもされていないものの一覧

$ git add .gitignore //管理外にする

$ git add //変更内容をインデックスに追加してコミット対象にする

$ git diff

$ git checkout -b hello-world //ブランチを作る

$ git commit //コミットする
```
ITIL 2011 editionによれば，サービス・パッケージの説明

応用情報技術者令和元年秋期 午前問55

ITIL 2011 editionによれば，サービス・パッケージの説明として，適切なものはどれか。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/c71f99cf-493d-f5d0-e09a-d7cce2b5189e.png)


**サービス・パッケージ**は、特定のタイプの顧客ニーズにソリューションを提供したり、特定のビジネス成果を支えるために組み合わされた2つ以上のサービスのことです。 サービスパッケージは、コアサービス、有効化サービス、および拡張サービスの組み合わせで構成されます。 サービスパッケージは、特定のレベルのユーティリティと保証を提供します。

**サービス・ポートフォリオ**

**サービス・カタログ**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/3f6b361e-c29d-80dd-3503-6f3eee87dc73.png)


From https://www.ap-siken.com/kakomon/01_aki/q55.html
AWS認定 DOP学習における 「こんなんあったんか」AWSサービス

## 目的
結構DevOpsだとCode兄弟主軸なイメージだった。
数多あるAWSのサービスと統合させるということもあり、学習の中で

**「こんなんあったんか」**

というサービスをいずれ使うかもしれんから書いていく

## とりあえず
いずれ用途別・種類別へ...

### IAM サービスアドバイザー
[Ref_URL](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_access-advisor-view-data.html)
AWS マネジメントコンソール、AWS CLI、または AWS API を使用して、IAM の最終アクセス時間情報を表示できます。
最終アクセス時間情報には、Amazon S3 で最後にアクセスされたアクションに関する情報が含まれます。

#### 使い所
指定期間におけるユーザのIAM権限のアクセス記録が判るため、以下の様な権限の棚卸しができる。
例えば、CloudWatch event rule等で自動&定期的にLambdaでAPI実行＆結果を解析して「不要なアクセス権限の排除」が行える。

- 全然このユーザ使ってないな
- 「このユーザにこのIAM権限いらないんじゃないか」

## AWS System Manager
良く見る。知っている。けど書かずにはいられない。
多すぎだからたまに勘違いするんよ...

### AWS System Manager Automation
Systems Manager オートメーションは、EC2 インスタンスおよび他の AWS リソースの一般的なメンテナンスとデプロイのタスクを簡素化します。オートメーションでは、以下の操作を行うことができます。

- 自動化ワークフローを構築して、インスタンスおよび AWS リソースを設定し、管理します。
- 独自のカスタムワークフローを作成するか、または AWS によって管理された定義済みのワークフローを使用します。
- Amazon CloudWatch Events を使用して自動化タスクおよびワークフローに関する通知を受信します
- Amazon EC2 または AWS Systems Manager コンソールを使用して、自動化の進捗状況および実行の詳細を監視します。

#### 使いどころ
CodePiplineでカスタムAMIを作る際の自動化に役立つ。
最終的にはAMI IDを AWS SSM Parameter Storeに登録可能
自粛期間中に制作した成果物まとめ

# はじめに
新型コロナウイルスの影響で4月から休業を余儀なくされたので
個人制作物がそこそこ溜まってきました。

ここではその溜まった成果物をまとめておきます。

## 成果物まとめ

### # 001 AdobeXD WEBデザインテンプレート（随時更新中）
AdobeXDで、Webとアプリデザインのテンプレートを制作しまとめてあるものになります。
モックアップを制作する際にご利用ください。
こちらはこれからも随時更新していく予定です。

[URL]
- [xd_webdesign_sample](https://github.com/dai-570415/xd_webdesign_sample)
- [Demo](https://xd.adobe.com/view/a4f3e4b0-a865-4427-91ff-a65d1fa41dc4-f1a0/)


### # 002 React製 WhiteBoardアプリ
[create-react-app](https://ja.reactjs.org/docs/create-a-new-react-app.html)ベースで開発したWhiteBoard（付箋投稿）アプリです。
バックエンドはFirebase（リアルタイムデータベース）を使用。

[コア機能]
- 付箋リアルタイム投稿

[URL]
- [react-board](https://github.com/dai-570415/react-board)
- [Demo](https://react-whiteboard-200521.web.app/)

### # 003 React製 SNS風アプリ
[create-react-app](https://ja.reactjs.org/docs/create-a-new-react-app.html)ベースで開発したSNS風アプリです。
バックエンドはFirebase（cloud Firestore）を使用。

[コア機能]
- Firebaseログイン(メール、Twitter、Google)
- お問い合わせフォーム（cloud Firestore使用）
- チャット機能（cloud Firestore使用）
- ニュースAPI情報取得・表示

[URL]
- [engineer-chat](https://github.com/dai-570415/engineer-chat)
- [Demo](https://react-crud-200429.web.app/)

### # 004 React製 Firestorage画像アップロード
Firebaseの一機能Firestorage（画像を格納できる場所）に画像アップロード機能を実装しました。
※cloud Firestoreにpathをアップする機能は実装していません（こちらは今後の目標）

[コア機能]
- Firestorage画像アップロード

[URL]
- [react-image-upload](https://github.com/dai-570415/react-image-upload)

### # 005 Next.jsチュートリアルからアーキテクチャ設計
Reactフレームワークである[NEXT.js](https://nextjs.org/)のチュートリアルを一巡してから、自分なりにアーキテクチャを設計しました。
また独自のAPIも組み込んだコンポーネントも追加しています。

[URL]
- [hello-next](https://github.com/dai-570415/hello-next)

### その他
その他、VueやNuxt、ReactとLaravelのサンプルなど制作しています。

[https://github.com/dai-570415](https://github.com/dai-570415)
RTX1200をセットアップする(CUI編)Part3

##目的
このページではRTX1200を初期化してからipv4/ipv6で通信できるようにするところまでを目的とする。[前回](https://qiita.com/yunimisaka/items/0632c402ac5606d993e9)は無名ユーザのパスワード設定とadministratorのパスワードを設定するところまでやったので今回はユーザの作成とユーザ権限の設定を行っていきたい。[次回](https://qiita.com/yunimisaka/items/5f562ce12fbcdb0f8ad8)はipv4の設定を行う。
例のごとく筆者がCUIが好きなので使いやすいGUIが用意されているがガン無視していく。
いつものことながら筆者が環境作りなおすときに見るためのメモ書きなのでわかりにくいところが多い気がする。

##使用機材・ソフトウェア
このあたりは前回と一緒だが今回も記載をしておく。
・RTX1200([リンク](https://network.yamaha.com/products/routers/rtx1200/index))
・PC(Ubuntu16.0.4)
・GTKTerm 0.99.7-rc1
・telnet
・ifconfig
・USBシリアルケーブル(クロス)([amazonで筆者が買った物](https://www.amazon.co.jp/dp/B01N0F91GH/ref=cm_sw_r_tw_dp_x_IiNgFb4TCTWJ8))

##ログイン
前回ログインまでは行ったので前回と同じ手順でログインをする。
今回も例のごとくシリアルケーブルを買ったのでシリアル通信で行っていく。

##ユーザの作成
ユーザを作成するときは下記のコマンドを実行する。もちろん`administrator`で実行する。

```
login user (ユーザ名) 
```

この後パスワードを設定するよう指示されるのでパスワードを設定する。
同じユーザ名のユーザは作成することが出来ないので、このコマンドを発行するとパスワードの変更扱いになる。

##ユーザ権限の設定
ユーザ権限を設定するときは下記のコマンドを実行する。もちろん`administrator`で実行する。`(権限名)=(設定値)`の部分は繰り返し書くことで複数の権限を同時に設定可能。
また、一部の設定値以外はカンマ区切りで書くことが可能。
ユーザ名を省略すると無名ユーザに対する権限設定になる。

```
user attribute (ユーザ名) (権限名)=(設定値)
```

コマンド発行の例としては以下のようになる。
もちろん`misaka`と言うユーザかなければエラーになる。

```
user attribute misaka administrator=on connection=serial,ssh,sftp host=any
```
権限の一覧や設定値については[ヤマハさんのページ](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/setup/user_attribute.html)を参考にしてほしい。
WSL上で実行したRSpecにエラー(NotImplementedError:fork() function is unimplemented on this machine)が出る問題の解決法

ポートフォリオ作成のために勉強目的で作成していたプログラムでRSpecがエラーで動作しなかったので解決方法を記載します。

結論から先に書くとWSL1にはUbuntu 18.04をインストールしましょうということです。

#環境
- ホストOS：Windows 10 64bit
- 仮想環境：WSL1
- ゲストOS：Ubuntu 20.04 LTS
- Ruby：Ruby2.6.6
- Rails：Rails5.2.4.3 

**使用しているGem**

- better_errors
- byebug
- capybara
- factory_bot_rails
- pry-byebug
- rspec-rails
- spring-commands-rspec
- sqlite3
- webdrivers

全部だと多いのでテストグループに記載しているgemのみです

#エラー内容と解決方法
まずはWSL1上で開発していたプログラムをRSpecを使ってテストを開始しました。

しかし**NotImplementedError:fork() function is unimplemented on this machine**というエラーが出て動作しません。


```
Got 0 failures and 2 other errors:
     1.1) Failure/Error: visit '/'
          NotImplementedError:
            fork() function is unimplemented on this machine

          # ./spec/system/users_spec.rb:10:in `block (4 levels) in <top (required)>'

     1.2) Failure/Error:
                    @pid = Kernel.fork {
                      # Children of the forked process will inherit its process group
                      # This is to make sure that all grandchildren dies when this Process instance is killed
                      ::Process.setpgid 0, 0 if leader?
                      if @cwd
                        Dir.chdir(@cwd)
                      end
                      exec_r.close
          NotImplementedError:
            fork() function is unimplemented on this machine
```

エラーが出たものと同じソースコードを他のPC(Ubuntu 20.04)上で実行するとエラーもなく通ります。

ここで同じバージョンのOSで動くのでWSLが原因ではと考えます。

次にエラー名で検索するとGitHubのWSLリポジトリのIssueに同じエラーが出るというものがありました。
https://github.com/microsoft/WSL/issues/5238

RSpecでエラーが出た訳では無いですがWSL上でUbuntu 20.04を起動してエラーが出た点というのは一致しています。

なのでWSL1上でUbuntu 20.04を起動しているのが原因ではと考えます。
＊ちなみにIssueにはWSL2を利用した場合は動作したと記載があるのでWSL2が利用できる場合は利用したほうが簡単に済むと思います。

調べてみるとQiitaにWSL1にはUbuntu 20.04をインストールしないほうが良いという記事がありました。
https://qiita.com/AumyF/items/eaf42dd3345a2285ff9e

RSpecでエラーが出るとは書いていないのでこれが原因かはわかりませんがとりあえずUbuntu 18.04をインストールしRSpecを実行してみるとエラーが無く通りました。

やっぱり最新版を使用するより安定している少し古いバージョンの方が開発には向いているかもと思いました。
これを教訓に最新版を使用する際は気をつけます。

最後にQiita初投稿&初心者なのでどこか問題点があれば教えていただきたいです。
Kerberos.io Setting @ docker

 
  Kerberos.oiは監視カメラ ソリューションで、設定も単純。Dockerで導入するのも簡単だけど、ドキュメントが少ないのでdocker-compose.yamlを作成してみた時のメモを公開。

　kerberos.io
　https://www.kerberos.io/

設定数分で簡易NVRとしては十分な機能が利用できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139265/6cf16103-e13d-e3fc-329f-0fa481dec7a7.png)


## 準備
 - Linux Server：Ubuntu 20.04 LTS　[hogehoge.com]
 - カメラ1：IP Camera: Axis M2026LE Mk-II. StreamはH264の入力には対応していないのでMJPEGを選択。
 <pre>
  RTSP Address: rtsp://username:pass@192.168.1.149/onvif-media/media.amp?profile=profile_1_jpeg&sessiontimeout=60&streamtype=unicast&
 </pre>
 - カメラ2：USB UVC Camera:中国で買った安いもの。ラズパイならPiCameraでもOK。
  <pre>
 /dev/video0
 </pre>

### UVC Camera Setting
　
* ディレクトリ作成と認証ファイルのシンボリックリンク
  <pre>
  $> mkdir kerberos_usb
  $> cd kerberos_usb
  $> touch docker-compose.yaml
  </pre>
  
* docker-compose.yaml
  <pre>
  version: '2'
  services:
    app_krb:
      image: kerberos/kerberos
      devices:
      \- /dev/video0:/dev/video0:mwr
      environment:
      \- VIRTUAL_HOST
      \- TZ=Asia/Tokyo
      ports:
      \- 30080:80
      \- 8889:8889
      volumes:
      \- ./kerberosio:/etc/opt/kerberosio
  </pre>
  
  
* アクセスして確認
  http://hogehoge.com:3380/
  
* USB UVCカメラ設定
  LoginしてConfiguration->Machinery->Advanced設定->Capture->USBcamera
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139265/8d6509f2-fde0-f895-fb10-5bed94976ddd.png)

* ストリーム確認
  http://user:pass@hogehoge.com:8889/mjpeg

### IP Camera Setting  
* ディレクトリ作成と認証ファイルのシンボリックリンク
  <pre>
  $> mkdir kerberos_ip
  $> cd kerberos_ip
  $> touch docker-compose.yaml
  </pre>
  
* docker-compose.yaml
  <pre>
  version: '2'
  services:
    app_krb:
      image: kerberos/kerberos
      environment:
      \- VIRTUAL_HOST
      \- TZ=Asia/Tokyo
      ports:
      \- 30081:80
      \- 8888:8889
      volumes:
      \- ./kerberosio:/etc/opt/kerberosio
  </pre>
  
  
* アクセスして確認
  http://hogehoge.com:3381/
  
* IPカメラ設定
  LoginしてConfiguration->Machinery->Advanced設定->Capture->IP Camera
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139265/869c59c6-cad2-8f92-62c4-9653e48544ac.png)

 
* ストリーム確認
  http://hogehoge.com:8888/mjpeg
OSD335Xをカスタム基板でU-Bootをカスタムする方法（メモ）

# 前回までの話
OSD335Xをカスタム基板でU-bootを動かすまで（メモ）
https://qiita.com/nonNoise/items/ef6702fd666421bd5688

# 今回の話

U-Bootの仕組みが少し見えてきたので、その話を。

# 前回の話に出た重要なコマンド

U-Bootにパッチを充てる

wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.01/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.01/0002-U-Boot-BeagleBone-Cape-Manager.patch
wget -c https://raw.githubusercontent.com/RobertCNelson/Bootloader-Builder/master/patches/v2018.03-rc1/0002-NFM-Production-eeprom-assume-device-is-BeagleBone-Bl.patch

patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
patch -p1 < 0002-U-Boot-BeagleBone-Cape-Manager.patch
patch -p1 < 0002-NFM-Production-eeprom-assume-device-is-BeagleBone-Bl.patch

# U-Bootのパッチ

U-Bootのパッチについて調べた。
用はU-Bootをカスタムしてオリジナルボード用にしたいんだ。
まず、Pach がそもそも何をしているかを調べた。
何かのコンパイルした内容かなと思ってソースを探していたが見当たらない。
コンパイル前にパッチ当ててるし・・・もしかして・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/30c20805-5adf-fc8d-5ba6-befb537b268e.png)

patchファイルは普通にgitのdiff情報が載ってるファイルだった。
なるほど、パッチコマンドがあったから、何か仕組みがあると思ったら、こういう仕組みか。
そうなると、パッチの差分を把握して、U-Boot本体のソースを書き換えて、差分をパッチにすると自作パッチが出来上がるのかな。
なるほどね、知らなかった。
# 各パッチについて

gitのdiff情報を見ていくと、どのファイルを弄ったか一目でわかるの便利

◎　**0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/d4a0dd96-ea5b-e006-e712-c3ae9cb79789.png)

◎　**0002-U-Boot-BeagleBone-Cape-Manager.patch**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/061af856-dd50-c264-60f7-4f4342f635e9.png)

◎　**0002-NFM-Production-eeprom-assume-device-is-BeagleBone-Bl.patch**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/e899dbd6-e373-692e-266b-837ce3a31ca7.png)

# パッチの予想

Diffを見てると、同じファイルを別々のパッチで処理してるのがいるので、順番間違えたら衝突するんじゃないかって思った。

とりあえず、ひとつづつ

◎　**0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch**

最初に当てるパッチだね。
am335x_pocketbeagle_defconfigが一番多く修正されてる。
ここは、U-Boot/configsのブロックで、どの機能をy/nするかを設定しているそうだ。


◎　**0002-U-Boot-BeagleBone-Cape-Manager.patch**

次に当てるパッチ。
board/ti/am335x/board.c   が最も変更されている。
ここはボードについてのパッチを充てているような気がしている。
特に、BeagleBone-Capeという、BeagleBoneの中では少し新しめのボード
https://github.com/u-boot/u-boot/tree/master/board/ti/am335x

◎　**0002-NFM-Production-eeprom-assume-device-is-BeagleBone-Bl.patch**

最後に当ててるパッチ。
board/ti/common/board_detect.c が最も変更されている。
commonなので、ボード特有のインターフェース（外部拡張機能）に対して修正しているような気がする。
https://github.com/u-boot/u-boot/tree/master/board/ti/common

# で、結局どこを弄ればいいの？

わからない。結局、基礎のU-bootのソースを見て、次にパッチ３種類の差分を把握して、自分がやりたい修正パッチを当てるという流れかな。
Diffなので、修正（削除）した個所はマイナスで表示されるので、とりあえず３種類のパッチを当てて、そのうえでソースを弄ってDiffを残しておくと、再現性高いU-Bootパッチが出来上がるんじゃないかな。

気持ち、最新のU-boot版でパッチを作り直したいが、そういうのも差分理解、ソース理解があっての技なのだろう。
【エディタ拡張】UI BuilderでC#コードを生成できるようにしてみる【UI Builder Extensions】

# 概要
<font color=blue>UI Builder</font>＋UI Elementsでエディタ拡張（やランタイム）のUIを視覚的に実装できるようになりました。
UIBuilderではレイアウトの構造(UXML)とスタイル(USS)を生成できます。

* 構造＝＞UXML（UI Builderで生成可能）
* スタイル＝＞USS（UI Builderで生成可能）
* ロジック＝＞C#（UI Builder 未対応??)

今回`UI Builder Extensions`というものを作り、C#ロジックを生成できるようにしてみましたので紹介します。
![UIBuilderExtensions.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148284/cba7edb4-8a1f-c06c-515f-6b5045590cfe.gif)

# 環境
- Unity2019.4.1f1～
- UI Builder 1.0.0 preview

# インストール
manifestに下記を追加してください。

```
{
  "dependencies": {
    "com.t-macnaga.ui-builder-extensions": "https://github.com/t-macnaga/UIBuilderExtensions.git",
  }
}
```

## コード生成
`UI Builder Extensions`をインストールしますと、
UIBuilderにEventのインスペクターがあらわれます。
![2020-07-25_00h54_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148284/15acddab-819b-2094-cb12-b868862f9c47.png)

Eventsを開きますと、
Buttonなら`OnClick`、TextFieldやToggleなら`OnValueChanged`、といった具合に
イベント一覧があります。

追加したいコールバックを **ダブルクリック** しますと、
そのUXMLと同じ階層にC#　EditorWindow　コードが作成される仕掛けとなっております。

※ダブルクリックするまえに下記の注意点があります。

* VisualElementの<font color=red>Nameを登録してください</font>。
* Name`に登録したら、<font color=red>UXMLを保存してください</font>。

# 生成されるコードサンプル
```csharp
using UnityEngine;
using UnityEngine.UIElements;
using UnityEditor;
using UnityEditor.UIElements;

public partial class SampleWindow : EditorWindowBase
{
    [MenuItem("Window/SampleWindow")]
    static void Init()
    {
        GetWindow<SampleWindow>();
    }

    void OnEnable()
    {
        InitializeComponents();
    }

    void OnClick_button1()
    {
        Debug.Log("button1 Clicked");
    }
}

```

```csharp
//AUTOGENERATED
using UnityEngine;
using UnityEngine.UIElements;
using UnityEditor;
using UnityEditor.UIElements;

public partial class SampleWindow
{
    protected override string TreeAssetPath => "Assets/Samples/Editor/SampleWindow.uxml";
    protected override void RegisterCallbacks()
    {
        rootVisualElement.Q<Button>("button1").clicked += OnClick_button1;
    }
}

```

# プロジェクトデータ
GitHubで公開しました。
https://github.com/t-macnaga/UIBuilderExtensions

# まとめ
UIBuilder+UIElementsと、さらに今回作成のUIBuilderExtensionsを使えば
エディタ拡張ウィンドウのコード作成が楽になるかもです。

# 参考記事

下記参考にさせていただきました。
* [UIElements+UI BuilderでEditor拡張を作ろう](https://www.slideshare.net/UnityTechnologiesJapan/uielementsui-buildereditor)
[Python] np.padの引数"reflect"を理解する

## はじめに
np.pad関数の"reflect"がわからなかったので具体例を入れて備忘録がてら残しておきます

## "reflect"具体例

文字列 "A","B","C"の時 

```python
str_list = ["A","B","C"] 
pad_str_list = np.pad(str_list, 3, 'reflect')
print(pad_str_list)                                                                                                          
['B', 'C', 'B', 'A', 'B', 'C', 'B', 'A', 'B']
```
ここで```pad_str_list[3:6]```が元の```str_list```の要素です．
左右に3個ずつpaddingしています．
左側の3つ```pad_str_list[:3]```をみてみると```pad_str_list[3]="A"```を対称に文字列が並んでます．
右側の3つ```pad_str_list[6:]```をみてみると```pad_str_list[5]="C"```を対称に文字列が並んでいます．
なので"reflect"のパディング方法は入力したリストの先頭と最後の要素を軸として対称になるようになっています(1)．

## 最後に
np.padはpaddingだけを理解するなら早いんですが，どうゆう方法でパディングするってなった時に意外と詰まるので，自分でも困ってます．後，意外とこの辺りは畳み込みやプーリングの際も考える必要出てきそうなので知れてよかったです．


## 参考文献
(1):[numpy.pad](https://numpy.org/doc/stable/reference/generated/numpy.pad.html)
プロジェクトのスケジュールを短縮する技法

応用情報技術者令和元年秋期 午前問53

プロジェクトのスケジュールを短縮するために，アクティビティに割り当てる資源を増やして，アクティビティの所要期間を短縮する技法はどれか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/0923bb7f-7b30-a515-5e5a-b676136f8432.png)

既に数回出題していましたね。

プロジェクトの所要時間を短縮する方法は「クラッシング」と「ファストトラッキング」に大別されます。
**クラッシング**
メンバの時間外勤務を増やしたり、業務内容に精通したメンバを新たに増員するなど、クリティカルパス上のアクティビティに資源を追加投入して短縮を図る。

**ファストトラッキング**
全体の設計が完了する前に、仕様が固まっているモジュールの開発を開始するなど、当初の計画では順番に行う予定だったアクティビティを並行して行うことによって短縮を図る。

なお、下記２方法は、スケジュール短縮技法ではないですね。
**クリティカルチェーン法**は、資源制限の考慮を加えたすケージュル技法ですね。
**モンテカルロ法**は、コストや所要日数を予測する手法ですね。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/d5d09d51-578f-0430-a945-8cc393a89598.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/7dc5e817-99b2-6104-ebf0-b6f29e3ea1a8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/f0fc86e8-b5ab-44e7-f813-955a33ddd6f8.png)


From　https://www.ap-siken.com/kakomon/01_aki/q53.html
http://e-words.jp/w/%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%B3%E3%82%B0.html
http://e-words.jp/w/%E3%83%95%E3%82%A1%E3%82%B9%E3%83%88%E3%83%88%E3%83%A9%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0.html
【Vue.js】propsのプロパティ名にキャメルケースを使う場合の注意点

# propsのプロパティ名
Vue.jsにおいて、propsのプロパティ名にキャメルケースを使う場合に1つだけ注意点があります。それは、**HTMLとJavaScriptでは文字の処理方法が異なる**ということです。

HTMLでは、属性名の大文字と小文字を区別せず、すべての大文字を小文字として認識します。つまり、HTMLのテンプレート内では、キャメルケースのプロパティ名はケバブケースで書く必要があります。具体的には下記のとおりです。

```ruby:JavaScript
Vue.component('comp-child', {
  template: '<p>{{ compText }}</p>',
  props: {
    compText: String
  },
})
```

```ruby:HTML
<comp-child comp-text="HTMLではケバブケースで書きましょう"></comp-child>
```

JavaScriptではキャメルケースを使用したcompTextというプロパティ名を、HTMLではケバブケースを使用したcomp-textとすることで正常に動作します。

## まとめ
Vue.jsのpropsのプロパティ名においてキャメルケースを使うことはよくあるかと思いますが、HTMLとJavaScriptでの文字の処理方法の違いを押さえ、HTMLではケバブケースを使う必要があることを覚えておきましょう。

## Twitterアカウント
Twitterも更新していますので、よかったらフォローお願いします！
[Twitterアカウントはこちら](https://twitter.com/flat_ito)
【AWS】開始前知っておくべきポイント - 無料利用枠


# アカウント使用の流れ
0. **開始前知っておくべきポイント**
1. [アカウント申請](https://qiita.com/hello112334/items/39548933eeec92af8486)
2. [ログイン](https://qiita.com/hello112334/items/235993219d1f16ac7434)
3. [IAM設定](https://qiita.com/hello112334/items/052f1232f6f54a2531c1)
4. [MFA多要素認証](https://qiita.com/hello112334/items/2180a1f59c4d4d69d4a4)
5. [アカウント削除](https://qiita.com/hello112334/items/a7943f064221b4bf0870)

# 参考資料
「Youtube」の「Amazon Web Services Japan 公式」を参照
https://www.youtube.com/watch?v=nPEp0L3MIfc

# 開始前知っておくべきポイント
### AWS 無料利用枠

AWSの無料利用枠については、3種類のタイプがありますが、よく使うのは「新規登録ができてから12カ月間無料の枠」と「無期限無料の枠」です。それぞれの使用条件を気を付けないと、知らずに利用料金を請求されるかもしれません。

詳細は、「AWS」の公式サイトを参照
- https://aws.amazon.com/jp/free
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680439/1b67e5f5-f003-eb1d-6477-bd27a629db5d.png)

#### １. 12カ月間無料

>AWS の新規のお客様のみが対象であり、AWS にサインアップした日から 12 か月間ご利用いただけます。12 か月間の無料利用の有効期限が切れた場合、またはアプリケーション使用量が無料利用枠を超えた場合は、標準の料金、つまり従量課金制でお支払いください (価格の詳細については、各サービスのページをご覧ください)。ご利用にあたっての条件が適用されます。詳細については、提供規約をご覧ください。

- EC2、RDSなど

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680439/8d5032b0-b954-ba4b-2628-d8162815389e.png)


#### ２. 無期限無料

>これらの無料利用枠は、12 か月間の AWS 無料利用枠の期間が終了しても自動的に期限切れにはなりません。既存および新規の AWS のお客様のいずれも、無期限にご利用いただけます。

- DynamoDB、Lambdaなど

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680439/a4962dde-e6da-6de3-b76c-cd0800c766ab.png)
AirPodsの接続先、Mac↔iPhoneの切り替えを早くする

# この記事で扱うこと

AirPodsの接続先の変更 Mac ↔ iPhone どちらももっと早くシンプルにスイッチしたい。 
**イヤホン装着 → 1アクション → 接続完了** を目指します。

具体的な方法は以下です。

1. Mac(Catalina) : AlfredでAirpodsを再接続 
1. iPhone(ios13) : SiriでAirpodsを再接続 

※ もっと早く切り替えられる方法をご存知の方がいたら是非!コメントください！

# はじめに

一度使ったらもう戻れない、便利なイヤホン、**AirPods**。朝から晩まで酷使しているほど好きな人は多いはず。 (私です)

仕事中はMacに接続、席を立ったり、外出したりする際はiPhoneと、頻繁に接続先を変えることが多いのですが、なんだかこの **再接続作業がしんどい**。

数アクション、急いでも10秒ほど時間がかかってしまいます。

## 現状の、Macに接続する場合

- 環境設定 → Bluetooth → 【AirPods名】をクリック
- 環境設定 → サウンド → 【AirPods名】をクリック
- ("メニューバーにBluetoothを表示"をON) → 画面右上のBluetoothアイコンをクリック → 【AirPods名】をクリック

このあたりでしょうか。
言いたいことはシンプルに、**マウスで2クリック以上かかる**。これは非常に辛いです。

## 現状の、iPhoneに接続する場合

- 設定アプリ → Bluetooth → 【AirPods名】をクリック
- コントロールセンター →　Bluetoothを長押し * 2回 → 【AirPods名】をクリック

こちらもなかなかの辛さです。


# 1. Macへ素早く接続する

まずはMacの接続を早くする方法を考えます。


## Alfred

キーボードを前にしているので、私の大好きなランチャーアプリ [Alfred](https://www.alfredapp.com/) を軸に考えてみます。
今回は`Workflows`を使うので、もしまだ無料版を使ってる方はサクッと[ここから購入](https://www.alfredapp.com/shop/)しましょう。
買って絶対に損はありません。

## AirPods Connector

神の力を借ります。
使っているのがどっちのイヤホンかで導入すべき`Workflows`が違います。

- AirPodsの場合 : [AirPods Connector](https://www.packal.org/workflow/airpods-connector)
- AirPods Proの場合 : [Alfred AirPods Pro Connector](http://www.packal.org/workflow/alfred-airpods-pro-connector)

概要はほぼ同じです。

### インストール

上記のページからDLした、`.alfredwファイル` をダブルクリックでインストール。

あとは[こちら](https://github.com/mariuskiessling/alfred-airpods-connector)のドキュメンの通りにインストールします。
もしこの時点で**homebrew**がインストールされてなければ[インストール](https://brew.sh/index_ja)してください。

ターミナルで以下を入力

```zsh
# BluetoothConnector使用してユーティリティをインストール
% brew install bluetoothconnector

# アップグレード
% brew upgrade bluetoothconnector
```

## 使い方

ここまできたら、Alfredを起動し、ざっと `airp` くらいまで入力すると `Configure AirPods Pro device` と表示されるので、自分の【AirPods名】を選択すると、接続します。
楽ちんです。

# 2. iPhoneへ素早く接続する

siri経由で、workflowを叩く案を採用してみました。

[こちら](https://note.com/tamiyamoto/n/n7e27ef639e19)を参考にさせていて頂いています。ありがとうございます。

ほぼこの記事の通りですが、一応ここにも手順を残します

## 設定手順

- iPhoneで「ショートカット」アプリを起動
- 「ショートカットを作成」をタップ
- 「＋ アクションを追加」をタップ
- 候補画面にある検索バーで「再生出力先を設定」を探してタップ
- 再生出力先を【AirPods名】に変更する。（このとき表示されてなければAirPodsをiPhoneに近づける）
- 画面右上の「次へ」をタップ
- 最後にSiri実行時のキーワードを決めて保存
- 設定から「ホーム画面に追加」を行えば、siri不要でアイコンタップでも実行可能 (← 2020/08/17 追記)

## 使い方

キーワードを `AirPodsに接続` などとしておけば、イヤホンを耳にはめた状態で **「Hey Siri、AirPodsに接続」** と呼ぶと接続できます。


# 参考記事

ありがとうございます。

- https://gary.mcad.am/easily-connect-your-airpods-to-your-mac-with-alfred-workflows-feea1b2fce78
- https://note.com/tamiyamoto/n/n7e27ef639e19
ListView.builderの使い方

#はじめに
Flutterでアイテムを縦に並べるときに使用する
ソーシャルメディアのタイムラインのイメージ

#方法
タイトルにある通り、ListView Widgetを利用
このウィジェットの中のbuilderメソッドを使うことで動的にリストを生成することが可能

#builderの使い方
builder内の書き方を解説
##引数
itemBuilder
itemCount
###itemBuilder
リストを作ってくれる
BuildContext contextとint indexを引数にした、無名関数を書く
contextは、画面表示内容を生成するために必要なもの（詳しいことわかりません。ごめんなさい。）
indexは、1行目、2行目、3行目、、、と増加していくインクリメンタ。下のitemCountを設定していないと、無限に増加しようとする


###itemCount
リストにするアイテムの数を指定
指定しないと無限にリストを生成する、または、配列内のアイテムの個数を超過するとエラーが発生
よって、配列の長さを渡しておくのがよい

#コードと画面イメージ
##コード
※runAppなどは含めていない

```flutter
  static const _userNames = <String>[
    'Alex',
    'Bob',
    'Cathy',
    'David',
    'Edward',
    'Frank',
    'George',
    'Henry',
  ];

  @override
  Widget build(BuildContext context) {
    return Container(
      child: ListView.builder(
        itemBuilder: (BuildContext context, int index){
          String rtnStr = _userNames[index];
          return Container(
              padding: EdgeInsets.all(8.0),
              child: Text('$rtnStr'),);
        },
        itemCount: _userNames.length,
      ),
    );
  }
```

##画面イメージ
以下の通り、上から配列（_userNames）の内容が表示される
※ヘッター、フッターは上記のコードでは生成されない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435360/2f88ad8e-637f-b6ed-83c7-605eb4cf9d39.png)


#参考にした記事
[ListView, Flutter Doc Jp](https://flutter.ctrnost.com/basic/layout/listview/)
Reactアクセシビリティ

[Reactの記事](https://ja.reactjs.org/docs/accessibility.html)を参考に初心者がなんとか覚書を書いています。
<React.Fragment>ってそういう意味だったのかー、と思いました。

- Webアクセシビリティ a11yとも呼ばれる
  - Web Content Accessibility Guidelines (WCAG) Overview
  アクセシビリティを備えたウェブサイトを構築するためのガイドラインを提供
  - WAI-ARIA
    React においてほとんどの DOM プロパティと属性がキャメルケースである一方で、これらの属性は純粋な HTML と同じようにハイフンケース（ケバブケースやリスプケースなどとも言われる）である必要があります。
  - セマンティックな HTML
    - <React.Fragment> 正しい子要素の出力


```Fragment.js
    class Columns extends React.Component {
      render() {
        return (
          <React.Fragment>
            <td>Hello</td>
            <td>World</td>
          </React.Fragment>
        );
      }
    }
```

    - key 付きフラグメント
    明示的に <React.Fragment> と宣言したフラグメントでは key を持つことができる
Raspberry Pi ssh設定方法(Mac編)

# Raspberry Pi ssh設定方法(Mac編)

## sshの有効化

RaspberryPiのGUIからターミナルを起動して、bootディレクトリ配下にsshファイルを作成

`cd /boot`

`sudo touch ssh`


再起動

`sudo reboot`

再起動後、下記のメッセージが表示される

```
SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and run Raspberry Pi Configuration to set a new password.
```

## ssh接続

### デフォルト設定

```
ユーザー名： pi
パスワード： raspberry
```

### IPアドレスを確認

`ifconfig`

wlan0のinetに記載されているIPアドレスを確認

### ssh接続

ホストPCで入力

`ssh pi@IPアドレス`

接続できるのを確認後、raspberrypiからログアウト

`exit`


## 鍵ファイルの設定

### 鍵ファイルを作成

```
mkdir ~/.ssh

cd ~/.ssh

ssh-keygen
```

鍵ファイルのファイル名を聞かれるので`id_rsa_raspberrypi`を設定

※ ファイル名は好きに設定してください。

### ホストPCのパーミッションを設定

```
chmod 700 .ssh
chmod 600 id_rsa_raspberrypi
```

### 公開鍵をRasberryPiへ送信

scpでホストPCから、RaspberryPiへ送信

```
scp -p 22 id_rsa_raspberrypi.pub pi@192.168.1.196:~/
```

### RaspberryPiに.sshフォルダを作成

```
ssh pi@IPアドレス

mkdir ~/.ssh
```

### authorized_keysに公開鍵を設定

```
cat ~/id_rsa_raspberrypi.pub >> .ssh/authorized_keys
```

### フォルダとファイルにパーミッションを設定

```
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
```

### RaspberryPiからログアウト

`exit`

### 鍵ファイルを使用してログイン

鍵ファイルでログインできるのを確認

```
ssh -i ~/.ssh/id_rsa_raspberrypi pi@192.168.1.196
```

## vi設定

```
sudo apt-get -y --purge remove vim-common vim-tiny
sudo apt-get -y install vim

cat <<EOS > ~/.vimrc
set nocompatible
set backspace=indent,eol,start
set autoindent
set nowrap
set ruler
syntax on
EOS
```

## sshの設定ファイルを修正

```
sudo chmod 777 /etc/ssh/sshd_config

vi /etc/ssh/sshd_config
```

### sshd_config 設定「PubkeyAuthentication」コメントを外す

```
#PubkeyAuthentication yes
```

↓

```
PubkeyAuthentication yes
```

### sshd_config 設定「AuthorizedKeysFile」コメントを外す

```
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
```

↓

```
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
```

### sshd_config 設定「PasswordAuthentication」コメントを外すしてNoにする

```
#PasswordAuthentication yes
```

↓

```
PasswordAuthentication no
```

### パーミッションを戻す

```
sudo chmod 644 /etc/ssh/sshd_config
```

### 再起動して完了

```
sudo reboot
```

## 接続確認

下記で接続できないことを確認

```
ssh pi@ipアドレス
```

下記で接続できることを確認

```
ssh -i ~/.ssh/id_rsa_raspberrypi pi@192.168.1.196
```
laravel-enum入れてみる。(入れようとしたら難航した)

#なにがおきたか

laravel-enumを入れようとすると死ぬ。

```
 composer require bensampo/laravel-enum

Using version ^2.1 for bensampo/laravel-enum
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Killed
```

調べるとメモリがたりんと

ならばと5GBくらいスワップ作ってみる

```
sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=5000
sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1
```

が変わらず死ぬ

composer updateしてみる

```

Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Conclusion: don't install laravel/framework v6.18.26
    - Conclusion: don't install laravel/framework v6.18.25
    - Conclusion: don't install laravel/framework v6.18.24
    - Conclusion: don't install laravel/framework v6.18.23
    - Conclusion: don't install laravel/framework v6.1
(以下大量に)

```

Laravel6にbensampo/laravel-enumのv2が使えないのではと思ってドキュメント見てみる


>Laravel 7.5 or newer
>PHP 7.2.5 or newer

だめやん...

`bensampo/laravel-enum: ^1.38`で入れてみると
うまくいった

#結論

```bash
composer require bensampo/laravel-enum:^1.38 
#メモリー足りなかったら
sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=2048
sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1

#それでもだめなら
 php -d memory_limit=-1 /usr/local/bin/composer require bensampo/laravel-enum:^1.38 
```

composer updateしたり、lock消したり、vendor消したりめっちゃはまった...
web MIDI apiでテストアプリ作成


# 概要・目的

昔、仕事の関係で、AUDIO,MIDI関連の仕事をしている影響で、以下のような記事を見つけました。

https://html5experts.jp/ryoyakawai/16787/

ここで使われているweb MIDI APIを使えば、楽にaudioやmidi用のテストアプリを作れたため、それに関してここに残しておこうかと思います。

最終的にraspberry pi+USBキーボード+小型モニタでシンセサイザーみたいなものを作れたらなと思っています

# web MIDI apiとは

まず、web MIDI apiとは、webブラウザを介して、MIDIデバイス(USBキーボード・オーディオインターフェイス・電子楽器等)と通信を行うためのAPIです。
要は、webブラウザを操作することでMIDIデバイスを操作したり、MIDIデバイスを操作することでwebブラウザを介して音を鳴らしたりすることを可能にします。

## そもそもMIDIとは

簡単に言ってしまえば、MIDIとは演奏情報のことになります。
wavファイルやmp3ファイルなどには曲そのものが入っているのに対し、midiファイルにはその曲の演奏情報が入っています。ですので、midファイルは再生させる機械によって顕著に音が変わったりします。
ちなみに、MIDIデータを使う理由として、wavデータやmp3データよりもmidiデータの方が格段にサイズが小さいことと、システムエクスクルーシブメッセージというのを利用することで演奏情報以外のデータのやり取りも可能になることがあるかと思います(他にも利点はあるかと思います)。

# 環境作成

必要なソフトウェアは以下の二つです。リンク先からインストールしてください
~~(google chrome以外のブラウザでも使用可能かとは思いますが、確認していません)~~
- [vs code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)
- [google chrome](https://www.google.com/intl/ja_jp/chrome/)

また、以下のリンク先から、web MIDI api用のソースコードを入手します。
https://github.com/ryoyakawai/x-webmidi/archive/0.10.23.zip

【追記】現状、chromium 系統のブラウザでしか動かないようです(@nagtkk さん、ご指摘ありがとうございます)
https://caniuse.com/#feat=midi

# 実装

(javascriptの勉強不足にて、後々に更新予定。)


# 起動方法

まず、vscodeを開き、「拡張機能」、もしくは「extension」(下図の青で囲まれたアイコン)をクリックし、「Live Server」(下図の赤で囲まれたコンテンツ)ををインストールしてください
<img width="437" alt="スクリーンショット 2020-07-25 14.49.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266944/9e26208d-6cb0-2e2e-8191-49b82741e9f2.png">

次に、入手した「midiPlayground」フォルダをvscodeで開き。「src」フォルダにある「keyboard.html」を右クリックします。
そうすると、下図のようにウインドウが出るので「Open with Live Server」をクリックします。
これで、google chromeが開き、アプリケーションが開かれます。
<img width="422" alt="スクリーンショット 2020-07-25 14.56.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266944/caedf79e-c0c4-fbc9-a6db-1707be40ff6c.png">



# 実際の起動画面

実際の起動画面は以下になります。
キーボードの箇所をクリックすることで音がなるかと思います。また、「Program」の赤色のバーを動かすことで、キーボードを押した時の音が変わります(MIDIでいうプログラムチェンジメッセージを出します)。

<img width="949" alt="スクリーンショット 2020-07-19 17.15.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266944/edfd3ccb-83da-5798-048f-34c2aef66d74.png">



# 成果物

今回作成したものを、以下のリンク先においています。ご自由にお使いください。
https://github.com/TomSak13/webApp/tree/master/midiPlayground

# 参考文献

https://html5experts.jp/ryoyakawai/16787/

https://caniuse.com/#feat=midi
RTX1200をセットアップする(CUI編)Part2

##目的
このページではRTX1200を初期化してからipv4/ipv6で通信できるようにするところまでを目的とする。[前回](https://qiita.com/yunimisaka/items/019add5cc0f6c43ccacf)はとりあえず接続するところまでやったので今回はパスワード設定を行っていきたい。
例のごとく筆者がCUIが好きなので使いやすいGUIが用意されているがガン無視していく。
いつものことながら筆者が環境作りなおすときに見るためのメモ書きなのでわかりにくいところが多い気がする。
文字コードでお困りの方は私の記事の[1.5](https://qiita.com/yunimisaka/items/cba774c96659dfdbe81b)を参照されたし。
次回は[こちら](https://qiita.com/yunimisaka/items/6b176b7262ad1cdac760)。


##使用機材・ソフトウェア
このあたりは前回と一緒だが今回も記載をしておく。
・RTX1200([リンク](https://network.yamaha.com/products/routers/rtx1200/index))
・PC(Ubuntu16.0.4)
・GTKTerm 0.99.7-rc1
・telnet
・ifconfig
・USBシリアルケーブル(クロス)([amazonで筆者が買った物](https://www.amazon.co.jp/dp/B01N0F91GH/ref=cm_sw_r_tw_dp_x_IiNgFb4TCTWJ8))

##ログイン
前回ログインまでは行ったので前回と同じ手順でログインをする。
今回もせっかくシリアルケーブルを買ったのでシリアル通信で行っていく。
何から何まで時代に逆行してけんかを売っている気がするけれどもきっと気のせい。


##ログインパスワードの設定
画面キャプチャを見ていただければ分かるように「ログインパスワードを設定しろや」と以下のようなメッセージで怒られているのでそこから設定をしていこうと思う。

```
The login password is factory default setting.\
 Please request an administrator to change the password\
 by the 'login password' command.
```

コマンドとしては以下を発行する。

```
administrator
login password
save
```

古いパスワードは設定していなければ(初期設定では)何も入力せずにエンター。
新しいパスワードを2回入力して完了。
パスワードの最大長は32文字。
完了するとパスワードの強度がどれくらいかを教えてくれる。
パスワードを暗号化して保存する場合は次のコマンドを使用する。

```
administrator
login password encrypted
save
```

![Screenshot from 2020-07-25 12-59-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408603/16fbd078-50d9-d15a-48e2-dc6d3a6b116c.png)


##administratorパスワードの設定
ログインパスワードを変更した時の画面キャプチャを見ていただければ分かるように「administratorパスワードを設定しろや」と以下のようなメッセージで怒られているので次はそこを設定していこうと思う。

```
The administrator password is factory default setting.\
 Please change the password\
 by the 'administrator password' command.
```


コマンドとしては以下を発行する。既にadministratorになっているのであればadministratorコマンドは不要。

```
administrator
administrator password
save
```

![Screenshot from 2020-07-25 13-30-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408603/730940f3-7334-67fa-50d8-7781a2b0d709.png)

パスワードを暗号化して保存する場合は次のコマンドを使用する。

```
administrator
administrator password encrypted
save
```

##参考
[ ヤマハネットワーク周辺機器 技術情報ページ コマンドリファレンス 機器の設定](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/setup/setup_chapter.html)
- 4.1 ログインパスワードの設定
- 4.2 ログインパスワードの暗号化保存
- 4.3 管理パスワードの設定
- 4.4 管理パスワードの暗号化保存
アジャイル開発プラクティス

応用情報技術者令和元年秋期 午前問49

(1)～(7)に示した七つの原則を適用して，アジャイル開発プラクティスを実践する考え方はどれか。
(1)、ムダをなくす
(2)、品質を作り込む
(3)、知識を作り出す
(4)、決定を遅らせる
(5)、早く提供する
(6)、人を尊重する
(7)、全体を最適化する


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/1690d151-2ad4-0cbf-4059-8afb3f417f77.png)

**エクストリームプログラミング(XP)**は、プログラム中心のアジャイル開発のフレームワーク

**スクラム**は、アジャイル開発の方法論の1つで、開発プロジェクトを数週間程度の短期間ごとに区切り、その期間内に分析、設計、実装、テストの一連の活動を行い、一部分の機能を完成させるという作業を繰り返しながら、段階的に動作可能なシステムを作り上げるフレームワークです。

**フィーチャ駆動型開発(FDD)**は、ユーザにとって価値のある小さな機能のかたまり(フィーチャ)を単位として、実際に動作するソフトウェアを短期反復的に開発し、徐々に完成に近づけていくアジャイル開発のフレームワークです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/952980fe-578e-63f5-1b19-ff0f97417c76.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/d9b19c48-1242-8c83-156d-3d2eec4eb9ac.png)


From https://www.ap-siken.com/kakomon/01_aki/q49.html
【こりゃ便利！】SLACK便利機能 10選（その１）

さて今回私がご紹介するのは、**「こりゃ便利！Slack便利機能 10選」**と題しまして、**誰でも簡単に利用出来て（＝プログラミング知識不要）、**私が**「こりゃ便利！」と日々活用しまくっている、**Slackに搭載された標準機能について私の独断で選んだ***10選***のご紹介となります。
※10選ともなると文章が長くなるので、２回に分けて紹介したいと思います。

#▼こりゃ便利１_マイキーワード
※Slackメニューの「環境設定」＞「通知」＞「マイキーワード」に任意のキーワードを登録しておくと、チャンネルリストでバッジ（１）が表示されます。
　私は、ココに自分の名前を登録しています。そうする事で、チャンネル内で自分がメンションされていない自分の名前が含まれた投稿もSlackが教えてくれます。
　投稿メッセージのマイキーワードがハイライト表示されるし、「@メンション＆リアクション」の欄にも集まります。<br>![pic_マイキーワード_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/ab878162-e2f6-d975-5ff0-867140b79e97.jpeg)<br>
![pic_マイキーワード_２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/f0a971e9-de8d-33e0-2655-ccece1b2711f.png)

#▼こりゃ便利２_ミュート
※今の自分にとって優先順位の高くないチャンネルや、会議中の時やデスクワークに集中したいときには**ミュート**機能が便利です。<br>特定のチャンネル毎に設定する事や、一括して全てのチャンネルの通知をミュートする事が出来ます。<br>マナーとして、自分のステータスが他者にもわかるように、今の自分の「ステータス」も設定しておきましょう。（例示の画像は「会議中」を設定しています）<br>![pic_ミュート_１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/cc249e8c-ca26-0fb0-59b1-bf056a0861ef.png)<br>
![pic_ミュート_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/28a2dc65-ee93-14bf-7477-c351f3f16e1b.png)

#▼こりゃ便利３_未読の投稿をまとめて読む
※Slackメニューの「環境設定」＞「サイドバー」＞「全未読を表示する」にチェックしておくと、全ての未読メッセージを一箇所にまとめて表示できます。<br>例示の画面のように、ざっと内容を確認してまとめて既読にすることも出来ます。未読メッセージをまとめて確認出来たり、ミュート機能と使い合わせて、自分の業務の中で、「Slackの確認・対応の集中時間」を設ける場合には有効ですね。<br>![pic_全未読表示_１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/9e48c7f2-ebd0-618e-1bc2-a2a11b902ca3.png)<br>![pic_全未読表示_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/0c352be9-a72a-1e03-9a34-840e222c270d.png)

#▼こりゃ便利４_リマインダー
※「Slackコマンド」の「/remind」を使います。<br>
`/remind [@メンバー/#チャンネル] [何を（日本語OK）] [任意：いつ（英語）]　`<br>例示の画面のように、「いつ（英語）」を入力無しで送信しても、Slackが優しくガイドしてくれます。<br>リマインドしたい期日を設定すると、その時間にSlackbotが設定したメッセージをリマインドしてくれます。自分のToDoタスクや他の人へのリマインド連絡に便利です。
本記事の＜その２＞でご紹介予定の「Slackワークフロービルダー」ではもっと複雑な設定が可能です。<br>![pic_リマインダー_１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/a729e4f9-c838-ea89-27d9-239fdcee49a8.png)<br>![pic_リマインダー_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/c955f4d5-3de1-f89e-4fde-70b583dc0306.png)<br>![pic_リマインダー_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/49710d9b-05d8-d233-0a81-132909ae5d2a.png)

#▼こりゃ便利５_ブックマーク
※「後でじっくり読みたい」、「このメッセージ忘れちゃダメだ、大事」というようなメッセージは「ブックマークに登録」を付けておきましょう。<br>左画面の「ブックマーク」にメッセージが集約されるので便利です。ブックマークが必要無くなったら「ブックマークから外す」こともできます。<br>![pic_ブックマーク_１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/ae76831b-c048-955d-9f7f-0a7ea7755cce.png)
<br>![pic_ブックマーク_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656547/9f6c6960-dcb4-4471-2826-e460016827e9.png)
<br>

#【こりゃ便利！】SLACK便利機能 10選（その１）は以上です
皆さん、いかがでしたでしょうか？<br>今回はSlackの**誰でも簡単に利用出来て（＝プログラミング知識不要）**の個人の独断による10選のうち、**「5選」**をご紹介させていただきました。
*「知らなかった、こりゃ便利！」*とか、*「こんな風に使ってみたよ」*とか、*「このやり方の方が便利だよ」* などなど、皆さんからのご意見、ご感想を頂けると幸いです。　<br>他にも「こりゃ便利！」な機能がありましたら是非教えてください。<br>残りの**「5選」**は追って[（20/8/7リンク追記）【 こりゃ便利！】SLACK便利機能 10選（その２）](https://qiita.com/takeC74/items/5bd2f6b433c7874146df)でご紹介させていただきたいと思います。<br>
<br>以上、最後までお読みいただきありがとうございました。
GitLab CI/CDとwebpackで環境変数を扱う

API_KEYなどの秘匿情報をどのように保持して、どのように呼び出しているのか、みなさん当たり前のようにやっているはずなのに、ずっと謎だったので調べながらわかったことを残しておきます。


##対象者

- （私のような）webpack初心者
- サーバレス(JAM Stack等)でなんか作りたい人
- GitLab Runner (CI/CD pipeline)が使える



##やりたかったこと

サーバレスな環境でAPIを叩きたかった（が、API_KEYをベタ書きしたら死ぬ）


##わかったこと

ローカルと本番では以下の二つの方法を分ける必要がある
1. ローカルの.envファイルからビルドする方法
2. GitLabに環境変数を登録しCI/CDでビルドする方法



##1．ローカルでの使用
ローカルでは.envファイルを用意してそれをビルド時に読むようにすればOKです。

具体的に見ていきます。

私の場合、[dotenv-webpack](https://www.npmjs.com/package/dotenv-webpack)というプラグインを利用しました。使い方は簡単で、

```
npm install dotenv-webpack --save-dev
```

でインストール後、



.envファイルに入れたい環境変数を書きます。


```
// .env
DB_HOST=127.0.0.1
DB_PASS=foobar
API_KEY=mysecretkey
```

あとはwebpack.configにプラグインを追加すれば

```JavaScript:webpack.config.js
const Dotenv = require('dotenv-webpack');

module.exports = {
  ...
  plugins: [
    new Dotenv()
  ]
  ...
};
```

好きなjsファイルで呼ぶことができます。

``` file1.js
console.log(process.env.DB_HOST);
// '127.0.0.1'
```

バンドル後は以下のようになります。

``` bundle.js
console.log('127.0.0.1');
```



（dotenv-webpackのreadmeそのままですね。。）



ローカルでビルドする分にはこれで十分です。

しかし.envファイルを公開されているGitLab(hub)にあげるのはセキュリティー的に危険ですので、.envはgitignoreします。

でも、書いたコードは公開したい、、！！！
そこでGitLabのCI機能を用いて、以下のように対処しました。



##2．本番環境での使用


まず、環境変数の置き場所ですがGitLabでは、**Project** > (サイドバーの) **Settings** > **CI/CD** > **Variables**

で登録することができます。



(参考：https://qiita.com/ynott/items/4c5085b4cd6221bb71c5#%E5%A4%89%E6%95%B0-1)



ここで登録した環境変数を使うには.gitlab-ci.ymlファイルをいじる必要があります。
参考のため、環境変数と関係のない部分も載せます。

``` .gitlab-ci.yml
image: python:3.6.5
variables:
    S3_BUCKET: <バケット名>
   AWS_DEFAULT_REGION: ap-northeast-1
stages:
    - build
    - deploy


bulid:
    image: node:10.13.0
    stage: build
    only:
      - master
    before_script:
      - npm install
      # .envを作成し、環境変数を追加する
      - echo "BASE_URL = $BASE_URL" > .env
      - echo "API_KEY = $API_KEY" >> .env
    cache:
      paths: 
        - node_modules/
    script:
      - echo start to build
      - npm run build
    artifacts:
      paths:
        - dist/
      expire_in: 30 minutes
    after_script:
      # .envを削除する
      - rm .env
deploy:
    image: python:latest
    stage: deploy
    only:
      - master
    before_script:
      - pip install awscli
    script:
      - echo start to deploy
      - aws s3 sync ./dist s3://<ドメイン>.com --cache-control noCache --content-language ja-JP
```

beforeScript内で.envファイルを作成し、そこに先ほど登録した環境変数を入れています。

yamlファイル内で$ENV_NAMEとすれば環境変数を使うことができます。（なお、>が上書きで、>>が追記です。）

そして、作られた.envファイルを使ってビルドします。

ビルドされたartifacts(dist)をS3にデプロイしているのですが、このままだと.envをそのままあげるのと同じなので

デプロイ前に.envファイルを削除しています。



これでデプロイされたファイルには秘匿情報が含まれないようにできました。


手探りでやったので他にもっといい方法、もしくは、ここ違くね？等あれば教えてください、、！！
GoogleDriveにある画像をWordPressで使う方法

# 手順
## GoogleDrive側
画像から「共有可能なリンクを取得」↓
[ https\://drive.google.com/file/d/<font color="Red">1DQTE36FmbHqQEY3vWSuSbV2Iardm_6Oz</font>/view?usp=sharing ]
IDを抽出↓
<font color="Red">1DQTE36FmbHqQEY3vWSuSbV2Iardm_6Oz</font>

これ↓とIDを合体

```xxx:URL
https://drive.google.com/uc?export=view&id=
```

合体結果 = https\://drive.google.com/uc?export=view&id=<font color="Red">1DQTE36FmbHqQEY3vWSuSbV2Iardm_6Oz</font>

## WordPress側
「メディアを追加」ボタンを押して
URLから挿入で合体結果を貼る
チャットアプリ制作

個人の学習の知見を広げるため、チャットアプリを制作しました。


## アプリの概要

・ユーザーの登録ができる
・ユーザーがグループを作成できる
・グループを指定して、メッセージを送ることができる

## 使用技術

・Ruby
・Ruby on Rails
・JavaScript
・MySQL
・AWS
・nginx
・unicorn
・Capistrano

## 本番環境のリンク

[18.178.232.222
](http://...)

## githubのリンク

https://github.com/mitsugu3/ChatSpace

## 感想

アプリ制作の流れを掴むことができた。
AWSで、本番環境にあげるのが
シークレットキーなどの知識が必要だったので難しく感じたが、
検索記事を参考に自走することができた。
.DS_storeとgitignore_globalの設定方法

## はじめに
gitignore_globalを設定した時にどこに配置すべきかわからなかったため、
gitconfigの仕組みを学びながら解決法をまとめました。

## できるようになること
- gitignore_globalの適切な配置場所がわかる
- .DS_storeをignoreできる
 
## 設定ファイルの影響範囲と置き場所
gitの設定ファイルが影響を及ぼす範囲は３段階あります。  
#### 1. local（ローカル）
対象リポジトリ内の 
**.git/config**

#### 2. global（ユーザ全体）
HOMEディレクトリ配下の 
**~/.gitconfig**

#### 3. system（システム全体）
systemについては、Gitの種類、バージョン、インストールなどによって
格納場所が変わるようです。
**/usr/local/etc/gitconfig**
**/usr/local/git/etc/gitconfig**

##gitignore_globalの格納場所
configの影響範囲を考えると、HOMEディレクトリ配下に格納するのが良いと考えられます。
**~/.gitignore_global** がよさそう

配置したgitignore_globalに.DS_storeを追記します。

```~/.gitignore_global
.DS_store
```
設定を有効にします。
`git config --global core.excludesfile ~/.gitignore_global`

~.gitconfigに以下の内容が記載されており、
設定が有効になっていることを確認します。

```~.gitconfig
[core]  
        excludesfile = /Users/(username)/.gitignore_global
```

以上の設定により、
.DS_storeをプロジェクト毎にgitignoreする必要がなくなります。

### 参考にさせていただいた記事
stackoverflowの記事
https://stackoverflow.com/questions/18393498/gitignore-all-the-ds-store-files-in-every-folder-and-subfolder?rq=1
~「クラウドAI開発講座」に挑戦してみたとある高専生の道のり#3~

#目次

- この記事について
- 進捗報告
- 次回の目標

##この記事について
　これはMicrosoftと高専キャリアがコラボした「クラウドAI開発講座」での進捗報告となる記事第3弾です。最終目標はAzureを活用しteams連携botを作ることです！([第1弾](https://qiita.com/CB_haruna/items/a0eeaf9f4b3c729cbabe) 、[第2弾](https://qiita.com/CB_haruna/items/3593af9c71ce2bd46f6e)はこちら)これを書いている人は開発経験皆無・プログラミング初心者で、プログラミング以前の環境を整える所からひ〜:scream:となっている高専生です。（Mac Book（2017）を使ってます。）8/29の最終プレゼンに向けて完成出来るよう頑張っています！



##進捗報告
　
今週はteamsの連携、デプロイといった一連の流れを実行し理解し（遅まきながら💦）、今は[2つ目](https://qiita.com/miokawa/items/6f1a3e480580e1e29abc)とTwitter Developer登録をしている所です。

- step4:[ちょまどさんのレッスン](https://qiita.com/chomado/items/6bda10abde0551f25723)　消化!

- step5:[おーちょさんのレッスン](https://qiita.com/miokawa/items/6f1a3e480580e1e29abc)　消化不良！←7/25までに消化出来ませんでした:tired_face:

　[おーちょさんのレッスン](https://qiita.com/miokawa/items/6f1a3e480580e1e29abc)の[1つ目](https://qiita.com/miokawa/items/6f1a3e480580e1e29abc)でのvisual studioの環境設定に手間取ってしまいました。メンターさん（ご本人）に助けていただいた所[こちらの方法](https://qiita.com/miokawa/items/f2e0a4ffa36c1ec2a8e7)でbotを作ることにし、できました！(結局[1つ目](https://qiita.com/miokawa/items/6f1a3e480580e1e29abc)の方法でやることは諦めました:sweat:)

##次回の目標
- ７月中におーちょさんの残りのレッスンを消化すること
- オリジナルbotを作ること！

　7/25までのミッションを消化しきれず、プログラミング以前でつまづいてで本当に完成させることが出来るのかな…と落ち込み気味でしたが本っっ当にメンターさんが優しく教えてくれるので元気になりました✨もし分からずつまづいてなかなか次に進めていない、でも恥ずかしくて聞けない…という方がいましたらぜひ質問したらいいと思います！（私だけなのかもしれませんが…:sweat_smile:）
【水文水質データベース】【使い方】流量データを自動で簡単にダウンロードしてみよう！【スクレイピング】

# 移転のお知らせ

こちらの記事は下記のサイトに移転しました。

> [NNテックブログ](https://nnhiroba.xsrv.jp/nnTechBlog/Article/Article?ID=29)
Vue3（beta）+ TypeScript + vue-router + Vuex 環境構築メモ

## Vue CLI をインストール

```
yarn global add @vue/cli
```

## プロジェクトを作成

Typescript, Router, Vuexを入れておきます。

```.sh
vue create try-vue-next

? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, TS, Router, Vuex, Linter
? Use class-style component syntax? No
? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling
JSX)? No
? Use history mode for router? (Requires proper server setup for index fallback in production) No

? Pick a linter / formatter config: Prettier
? Pick additional lint features: Lint on save
? Where do you prefer placing config for Babel, ESLint, etc.? In dedicated config files
```

## Vue 3 CLI プラグインを追加

```
cd try-vue-next
vue add vue-next
```

## package.json の更新
最新バージョンの `Vue beta` を使用するようにします。

```
  ...
  "dependencies": {
    "vue": "^3.0.0-beta.24" 
  },
  "devDependencies": {
    ...
    "@vue/compiler-sfc": "^3.0.0-beta.24",
    ...
```

## エラーの修正
このままだと動かないのでいくつか修正します。
参考までに変更前のコードはコメントアウトしました。

- shims-tsx.d.ts  
削除します

- shims-vue.d.ts

```shims-vue.d.ts
declare module "*.vue" {declare module "*.vue" {
  // import Vue from "vue";
  // export default Vue;
  import { defineComponent } from 'vue'
  export default defineComponent
}

```

- component/HelloWorld.vue

```HelloWorld.vue
...
<script lang="ts">
// import Vue from "vue";
import { defineComponent } from 'vue'

// export default Vue.extend({
export default defineComponent({
  name: "HelloWorld",
  props: {
    msg: String
  }
});
</script>
...
```

- router/index.ts

```index.ts
// import { RouteConfig, createRouter, createWebHashHistory } from "vue-router";
import { RouteRecordRaw, createRouter, createWebHashHistory } from "vue-router";
import Home from "../views/Home.vue";

// const routes: Array<RouteConfig> = [
const routes: Array<RouteRecordRaw> = [
  {
    path: "/",
    name: "Home",
    component: Home
  },
...
```

- store/index.ts

```index.ts
// import Vuex from "vuex";
import { createStore } from "vuex";

// export default Vuex.createStore({
export default createStore({
  state: {},
  mutations: {},
  actions: {},
  modules: {}
});
```

## 動作確認
```
yarn serve
```
いつものページが表示されました。

![コメント 2020-07-25 122107.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220881/a4662580-e0c3-7a11-6814-93ac56d27c9a.png)

## 参考
[Vue 3.0.0-betaのお試し環境をVue CLIで作ってみた](https://qiita.com/mascii/items/331c084d8e2d6c68197f)
☆AI_DEV_03_AI開発講座_shinchanEchoBotの作成★

☆AI_DEV_03_AI開発講座_shinchanEchoBotの作成★

  これは
高専キャリア × Microsoft　がコラボ主催するonline講座の進捗報告作業記事です！
https://online.kosen-career.tech/ai
 
今回のミッションは下記
「shinchanEchoBotの作成」
![2020-07-25 (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668443/d3920cc0-2db6-e4d4-a868-16278632ff63.png)



参考資料は下記です♪
https://qiita.com/chomado/items/6bda10abde0551f25723
@chomado

[完全無料で] Microsoft Teams で動く オレオレ bot を 1 時間で作る

→スクショ豊富で、順番通りにやっていったら、うまくできました(*´д｀*)

次回は、Teamsで動くように挑戦します♪

---------------------------------------------------------
▶ スケジュール
7/4 20:00-21:00 キックオフ・セッション（完了）
7/25 15:00-18:00 中間プレゼン
8/29 15:00-18:00 最終プレゼン

---------------------------------------------------------
▶ 7/25までのミッション

- [x] Azure for studensに登録する
	https://azure.microsoft.com/ja-jp/free/students/?WT.mc_id=azureforstudents-docs-nosuzuk
　→Microsoft Azureで対応

- [x] de:code2020の以下コンテンツを視聴して学習する
	https://www.microsoft.com/ja-jp/events/decode/2020session/detail.aspx?sid=Z01
        Z01:学生諸君！ Azure であそぼう！ ～Microsoft の AI を自作アプリに取り入れるまで～
	
	https://www.microsoft.com/ja-jp/events/decode/2020session/detail.aspx?sid=A02
	A02:Azure Bot Services を使って Teams bot を開発する


- [ ] Microsoft Learn for Studentsで学習する
https://docs.microsoft.com/ja-jp/learn/roles/student?WT.mc_id=BlendedCurriculum-MSLearn-nosuzuk

- [x] ちょまどさんとおーちょさんのレッスンを消化する
https://qiita.com/chomado/items/6bda10abde0551f25723
→仕掛中

https://qiita.com/miokawa/items/6f1a3e480580e1e29abc
→未着手

---------------------------------------------------------


20200725 やったことまとめ
・「shinchanEchoBotの作成」

ではでは、よろしくお願いいたします。

By shin-chan-chan