OmniAICreator/Qiita-1.07M huggingface dataset:
Google Functions: console.infoやconsole.errorなどとログビューアの「重大度」の関係性

JavaScriptのConsole APIには、ロギングで良く使う`console.log`以外に、`console.info`や`console.error`など、ログに「情報」や「エラー」といった色をつけるメソッドがあります。

一方、Google Cloud Platform(GCP)のログビューアの「[重大度(SEVERITY)](https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#LogSeverity)」という概念があり、ログごとに「INFO」や「ERROR」などの意味合いを持たせることができます。

では、Console APIとGCPの「重大度」はどのような関係になっているのでしょうか？ 実験してみたので、この投稿ではその結果をお伝えしたいと思います。

## 結論

先に結論を示します。JavaScriptのConsole APIのメソッドの違いは、基本的にGCPの重大度に影響しません。ただし、`console.warn`と`console.error`が`Error`オブジェクトをロギングした場合に限り、重大度が「ERROR」になります。

__`Error`オブジェクト以外をロギングした場合__

Console API | GCPの重大度
---|---
console.log | DEFAULT
console.info | DEFAULT
console.warn | DEFAULT
console.error | DEFAULT

__`Error`オブジェクトをロギングした場合__

Console API | GCPの重大度
---|---
console.log | DEFAULT
console.info | DEFAULT
console.warn | ERROR
console.error | ERROR

## console.infoやconsole.errorなどが、ログビューアでどの「重大度」になるか検証する

各種メソッドを検証するために、次のような関数を用意しました:

```javascript:index.js
exports.logging = (req, res) => {
  console.log('テキストをconsole.log')
  console.info('テキストをconsole.info')
  console.warn('テキストをconsole.warn')
  console.error('テキストをconsole.error')
  console.log(new Error('Errorオブジェクトをconsole.log'))
  console.info(new Error('Errorオブジェクトをconsole.info'))
  console.warn(new Error('Errorオブジェクトをconsole.warn'))
  console.error(new Error('Errorオブジェクトをconsole.error'))
  res.send('OK')
}
```

これをデプロイして、

```bash
gcloud functions deploy logging --runtime=nodejs12 --trigger-http
```

実行してみます:

```bash
curl https://asia-northeast1-${PROJECT}.cloudfunctions.net/logging
```

すると、ログビューアには次のようなログが残りました:

<img width="780" alt="CleanShot 2020-08-05 at 12.10.12@2x.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889/7d7f2866-ff29-3218-ee66-53d80a9481ef.png">

この結果を確認すると、`console.warn`と`console.error`が`Error`オブジェクトをロギングした場合は、重大度がERRORになり、それ以外はDEFAULTになったことが分かります。

## 次に読む

* [Google Functions: Node.jsで重要度付きのロギング - Qiita](https://qiita.com/suin/items/d2b4188174e58aa1345c)
* [Google Functions & Node.js: winstonで高レベルなロギングをする方法 - Qiita](https://qiita.com/suin/items/538914e47bbd4d9c4dab)
* [Google Functions & Node.js: bunyanで高レベルなロギングをする方法 - Qiita](https://qiita.com/suin/items/1f45d77672a7b6174465)
tableviewのサイズを中身のサイズに合わせる。


tableviewを設定画面に利用するとき、数個しか要素がないのにtableviewのサイズが大きいままで気持ち良くなかった。

```swift
override func viewWillLayoutSubviews() {
    table.frame.size = table.contentSize
}
```

サイズを中身の大きさに合わせて変更してやればいい感じになった。

# わーい！
githubでwebの修正対応する流れ


$ git pull
gitを最新にする


$ git branch feature/aaaaa 
feature/aaaaaっているブランチを作る



$ git checkout feature/aaaaa 
  master
  policy-text
* feature/aaaaa 

feature/aaaaa　に移動


$作業する


$ git status
On branch feature/aaaaa
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   _exsample.ejs

commitしていないファイルが出る
addしていないとファイル名が赤っぽく出る

$ git add _exsample.ejs
Git 
修正したファイルの追加

$ git status
On branch feature/aaaaa
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   _exsample.ejs

commitしていないファイルが出る
addしているとファイル名は緑

$ git commit -a
[feature-aaaaa 9c15100] 修正内容のテキストを入れる
 1 file changed, 1 insertion(+), 1 deletion(-)
コミットする


$ git status
On branch feature/aaaaa
nothing to commit, working tree clean
なくなる

$ git push origin feature/aaaaa
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 4 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 532 bytes | 532.00 KiB/s, done.
Total 6 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), completed with 5 local objects.
remote: 
remote: Create a pull request for 'policy-text' on GitHub by visiting:
remote:      https://github.com/aaa/aaa-static/pull/new/feature-aaaaa
remote: 
To github.com:aaa/aaa-static.git
 * [new branch]      feature/aaaaa -> feature/aaaaa
PUSHする

この後、pullreqを発行する
LGTMもらったらmargeする

$ git branch -d feature/aaaaa
branchを消す

$ git branch
* master
  policy-text
マスターに戻る

$ git pull
修正を取り込む
AWS-SAA試験勉強メモ1

###AWSでの負荷試験

考慮事項

- ELBのプレウォーミング申請
 →ELBはデフォルトでのスケールアウト機能はない（要AWSへの申請）

- サーバに負荷をかけるようサーバーの性能
 →しっかりと負荷をかけるために必要

###S3を使用した静的WEBサイトの構築

必要設定

- S3バケットポリシーを編集して、外部からのアクセスを許可

- 静的WEBサイトのホスティング機能を有効化

###IAMユーザー作成の自動化

Cloudformationを利用する
（リソースだけではなく、IAMユーザーも作成可能）

###CodeDeploy

オンプレでもEC2でも**エージェントのインストールは必須**
逆にエージェントが入れられれば、オンプレでもEC2でも利用可能

####（備忘）開発プロセスの自動化
CodeCommit（Git）
→CodeBuild（ビルド・テスティング）
→CodeDeploy（デプロイ）
のパイプラインをCodePipelineを使って自動化

###AWSのキャッシュサービス
- CloudFront（CDNサービス）
 →HTML、CSS、動画、画像などの静的コンテンツをキャッシュ

- ElastiCache
 →DBのキャッシュ

###セキュリティグループとネットワークACL

||セキュリティグループ|ネットワークACL|
|:------------------:|:------------------:|:------------------:|
|**特徴**|ステートフル|ステートレス|
|**紐づけ対象**|EC2|サブネット

###SES
メールの送受信可能
※送信できなかったメール（バウンスメール）の処理が必須。（通常のメールサーバーでも同様）
SQL　エラーUnknown column ’user01’ in ’field list’ 

PHPを使った課題に取り組んでいるとき、SQLコマンドの打ち込みでエラーが発生した。

発生したエラーは

```
Unknown column ’user01’ in ’field list’ 
```


入力したのは、

```
INSERT INTO user_table (user_name, password, name, profile) VALUE (user01, 1111, red, "こんにちは");
```

エラーが出た原因は、テーブルを作ったときの型の種類！
VARCHARに設定していたため、ダブルクォーテーション(多分シングルクォーテーションでもOK)で
囲まなければいけなかった。

```
INSERT INTO user_table (user_name, password, name, profile) VALUE ("user01", "1111", "red", "こんにちは");
```

エラー表示されたのはuser01の部分だけだったが、他の要素もVARCHARに設定していたため、ダブルクォーテーションを付けて再度INSERTしたら無事、クリアできました。
Db2 11.5.4 on Openshift デプロイのための前提作業 (3) container_manage_cgroup 有効化 (→不要)


**（Db2 11.5.4 on OpenShift インストーラ内で当該構成変更が実施されているため、当該手順は不要と判明）**


## Db2 on OpenShift インストールの前提

Db2 11.5.4 をRed Hat OpenShift上で稼働させるための前提要件は、こちらのサイトに整理されています。

Db2 Community Edition 11.5.4.0
https://github.com/IBM/charts/tree/master/stable/ibm-db2

#### 前提要件

 - Kubernetes Level - ">=1.11.0"
 - Helm Level:
    - Power: ">=2.12(*) and < 3.0"
    - X86: ">=2.14(*) and < 3.0"
      - (*) Tested Integrations
 - OpenShift Version - "3.11, 4.3"
 - PersistentVolume requirements - requires one of the following:
    - NFS
    - IBM Cloud File Storage (gold storage class)
    - Portworx
    - Red Hat OpenShift Container Storage 4.3 and above
    - or a hostPath PV that is a mounted clustered filesystem
 - An [IBM Cloud](https://cloud.ibm.com/login) account

#### その他、推奨される設定項目

他にも、Db2 on OpenShift 導入前提手順としては下記の項目があります。

 - container_manage_cgroup 有効化
 - CRI-O PID拡張(オプション)

ここでは、Db2 on OpenShift 導入前に、ワーカーノードの container_manage_cgroup 有効化を行います。

## container_manage_cgroup 有効化の手順

container_manage_cgroupをtrueに設定するためのMachineConfigを作成する。

MachineConfig 作成には、OCP Web コンソールの ナビゲーションメニュー Compute -> Machine Configs から、「Create Machine Config」を押下する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/cee47879-9ad0-0b26-2e67-37b746cd317f.png)

バージョン「version:」は、2.2.0 から Openshift でデプロイしたバージョンに更新する必要がある場合がある。(※4.3では2.2.0になっているものと思われる)
バージョンを確認するには、他のMachineConfigをクリックして、使用しているバージョンを確認する。バージョンが変更された場合は osImageURL を更新する必要がある。

Machine Config 作成画面に下記のYAML定義をペーストし、「Create」を押下する。

```yaml
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  name: 01-worker-setsebool
  labels:
    machineconfiguration.openshift.io/role: worker
spec:
  config:
    ignition:
      config: {}
      security:
        tls: {}
      timeouts: {}
      version: 2.2.0
    networkd: {}
    passwd: {}
    storage: {}
    systemd:
      units:
        - contents: |
            [Unit]
            Description=Setsebool
            Before=kubelet.service

            [Service]
            Type=notify

            ExecStart=/usr/sbin/setsebool container_manage_cgroup true
            Before=kubelet.service
            Restart=always
            RestartSec=100

            [Install]
            WantedBy=multi-user.target
          enabled: true
          name: setsebool.service
  fips: false
  kernelArguments: null
  osImageURL: >-
    quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:8c4059f184596157f64d69c4edbea9c9ef600560b7804a482779f513c3e0f40e

```



-----
container_manage_cgroup 有効化の手順は以上となります。

前提作業の完了後、Db2 11.5.4 on OpenShift を導入した時の手順・ログはこちらに書きました。
　---> [Db2 11.5.4 on OpenShift をデプロイしてみた](https://qiita.com/mi-kana/items/fed0d47fca56853fdd4e)
jestのmoduleNameMapperは，順序が大事

## 問題

```js
moduleNameMapper: {
    "^~/(.+)": "<rootDir>/src/$1",
    "\\.(css|less|sass|scss)$": "identity-obj-proxy",
  }
```

という定義をしていて，JSXファイル内で，

```jsx
// components/foo.tsx
import styles from "~/styles/Foo.module.css"
```

と書いていると，

```
   Jest encountered an unexpected token

    This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.

    By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".

    Here's what you can do:
     • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
     • If you need a custom transformation specify a "transform" option in your config.
     • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.

    You'll find more details and examples of these config options in the docs:
    https://jestjs.io/docs/en/configuration.html

    Details:

    /work/src/styles/Layout.module.css:1
    .flexContainer {
    ^

    SyntaxError: Unexpected token '.'
        at compileFunction (<anonymous>)
```

というエラーが出て，「あれ，ちゃんとCSSはtestでは読み込まないようにしているはずなのに？」と首をかしげることになる．

## 原因

[公式ドキュメント](https://jestjs.io/docs/en/configuration#modulenamemapper-objectstring-string--arraystring) をちゃんと読め，ということなのだが，`moduleNameMapper`に定義されたパターンは，**上から順番にひとつずつチェックされていき，最初にマッチしたパターンだけが適用される**．

上記の場合，最初に`~`の解決を行ってしまうと，`css`なファイルのときに適用してほしかった`identity-obj-proxy`が適用されないのだ．

> The most specific rule should be listed first. 

とドキュメントにあるように，**上から順に，詳細なパターン→適用範囲の広いパターン（例えば今回のようなalias設定）となるように設定を書いていく必要がある**ことに注意してくださいね．

## Note

[2020年初頭における Next.js をベースとしたフロントエンドの環境構築#8-1. Jest を設定](https://qiita.com/syuji-higa/items/931e44046c17f53b432b#8-1-jest-%E3%82%92%E8%A8%AD%E5%AE%9A)を参照して，Next.jsでjestを設定した人は，気をつけたし．
Next.jsでbootstrap4の色をカスタマイズして使う

まず `bootstrap` と `sass` をインストールする。

```
npm i bootstrap
npm i sass
```

ファイル構成は以下の想定で、 `bootstrap-variables.scss` を新しく作成する。

```
/
├ pages/
│ ├ _app.js
│ ├ index.js
│ └ ...
└ bootstrap-variables.scss
```

アプリケーション全体に適用したいので、 `_app.js` の先頭に記述します。

``` js
// import 'bootstrap/dist/css/bootstrap.min.css' // ← カスタマイズ不要な場合
// import 'bootstrap/scss/bootstrap.scss' // ← bootstrapをsassで読み込みたい場合
import '../bootstrap-variables.scss' // カスタマイズ用
```

`bootstrap-variables.scss` には、上書きする値を記入して、最後に `bootstrap.scss` をimportすればOKです。

``` scss
$theme-colors: (
    "primary": #467AFF,
    "danger": #FF4646
);

@import "node_modules/bootstrap/scss/bootstrap.scss";
```

これでボタンの色を変更できます。

before | after
---|---
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95200/9254aced-2cc5-d7d2-d993-8e5a4e56e157.png) | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95200/9ee83193-3be1-ccbc-d0f7-745181517d9e.png)

編集可能なパラメータは `node_modules/bootstrap/scss/_variables.scss` を参照のこと。
Rails Tutorial　第9章完了

## 2020/7/19 0.5時間
## 2020/7/20 0.5時間
class methodがよく分からず、ネットで調べました。
https://magazine.rubyist.net/articles/0046/0046-SingletonClassForBeginners.html
## 2020/7/21 0.5時間
class methodの記法がなかなか理解できず時間がかかりました。
## 2020/7/22 0.5時間
「永続化」とは何のことか、ネットで調べました。データをディスクに保存することと理解しました。
## 2020/7/23 3.5時間
うまく動かず、デバッグしました。デバッガーを使いこなせず、PUTSを入れては進め、入れては進めでした。
## 2020/7/24 1.5時間
## 2020/7/25 2.0時間
午前中にやるのですが、途中眠気が襲ってきて寝てしまいました。
## 2020/7/26 1.0時間
上手く動かず、raiseで止められることは分かりました。ひたすらPUTSです。
## 2020/7/27 1.0時間
def で何も返さないとnilになることを理解するまで時間がかかりました。
## 2020/7/28 0.5時間
これで9章を完了しました。
所要時間は11.5時間です。

さらに難易度が上がり、時間がかかりました。特にデバッグにデバッガーを使わずPUTSでデバッグするのに時間がかかりました。

## 文字列'1'と数字の1の書き間違いでエラー
エラー

```ruby:sessions_controller.rb
     params[:session][:remember_me] == 1 ? remember(user) : forget(user)
```

正しくは

```ruby:sessions_controller.rb
     params[:session][:remember_me] == '1' ? remember(user) : forget(user)
```

でコンソールで確かめたところ、

```ruby:console
>> 1 == '1'
=> false
```


と文字列と数字は違うと分かり、動かなかった原因が分かりました。

## シンボルと文字列の使い分けが分からない

演習9.3.1
テストではなぜか
cookies[:xxx]
でなく
cookies['xxx']
とシンボルでなく文字列を使っています。

```ruby:users_login_test.rb
 assert_equal cookies['remember_token'], assigns(:user).remember_token
```

どう使い分けているのか分かりませんでした。ネットで調べると、シンボルと文字列は同じように扱えて処理速度が違うとありました。
シェルソート　整列法

平成31年春期 午前問題6

次の手順はシェルソートによる整列を示している。データ列7，2，8，3，1，9，4，5，6を手順(1)～(4)に従って整列するとき，手順(3)を何回繰り返して完了するか。ここで，[ ]は小数点以下を切り捨てた結果を表す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/43dea615-cf1c-dd96-b081-eb2636fcfe56.png)

手順２は理解しくいですね。

手順に沿って整列を行うと次のようになります。
（１）H←9÷3＝3
（２）要素ごとが互いに3つずつ離れた要素から成る3つの部分文字列に分解し、それぞれ整列を行います。　←こんな意味ですよ。
　　　[部分列1] 7,3,4 →(整列)→ 3,4,7
　　　[部分列2] 2,1,5 →(整列)→ 1,2,5
　　　[部分列3] 8,9,6 →(整列)→ 6,8,9

（３）H←3÷3＝1 //1回目
（４）H≠0なので2に戻る

（２）要素ごとが互いに1つずつ離れた要素から成る 3,4,7,1,2,5,6,8,9 を整列し、1,2,3,4,5,6,7,8,9 とします。
H←1÷3＝0(小数点未満切り捨て) //2回目

この時点でHが0になるためデータ列の整列は完了します。したがって(3)の処理が繰り返される回数は2回です。

**挿入法**
挿入ソート（基本挿入法）とは
挿入ソートとは、「未整列な配列」から値を1つずつ取り出し「整列済み配列」の適切な位置に挿入していく手法です。

・「未整列配列」から値から1つ取り出します。
・取り出した値を「整列済み配列」の適切な位置に挿入します。
・1と2を繰り返し全て「整列済み配列」に挿入し終われば完了となります。


つまり、シェルソートは、まずデータ列を小さい若干データ列に分けて、各自が挿入法によりソースしていて、あとは、合わせてソートするということですね。


参考：
https://www.ap-siken.com/kakomon/24_haru/q7.html

挿入法
https://medium-company.com/%E6%8C%BF%E5%85%A5%E3%82%BD%E3%83%BC%E3%83%88/
xampp使用時にTNTSearchをインストールしようとしてエラー

#状況
xamppを使用してLaravel7でアプリを作成し、Scout全文検索に使うTNTSearchをコンポーザーからインストールしようとしたら、エラーが出た。
XAMPP for Windowsのバージョンは 7.3.10

```:コマンドプロンプト
PC >> composer require teamtnt/tntsearch
Using version ^2.3 for teamtnt/tntsearch
./composer.json has been updated
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
    - Installation request for teamtnt/tntsearch ^2.3 -> satisfiable by teamtnt/tntsearch[v2.3.0].
    - teamtnt/tntsearch v2.3.0 requires ext-sqlite3 * -> the requested PHP extension sqlite3 is missing from your system.

  To enable extensions, verify that they are enabled in your .ini files:
    - C:\xampp\php\php.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

Installation failed, reverting ./composer.json to its original content
```

#解決法
C:\xampp\php\php.iniの

- extension=pdo_sqlite (927行目)
- extension=sqlite3 (938行目)

のコメントアウトを外すと、いけた。

php.ini自体は重要な設定ファイルなので、編集前にphp.iniの**バックアップファイル**の作成を行うことをお勧めします。

##参考
[Canvas: Failed Install Via Composer](https://cnvs.readme.io/discuss/5a309a04258936001cb32c97)
Cloud KMSのclient APIのバージョンを2.0にしたら AttributeError: 'KeyManagementServiceClient' object has no attribute 'crypto_key_path_path' エラー

# 背景
Cloud KMSの復号化処理をv1.4で行っていたものをv2.0にしたら以下のエラーが発生した。

```
AttributeError: 'KeyManagementServiceClient' object has no attribute 'crypto_key_path_path'
```

ややこしいのが、documentもまだ更新されてない(?)のか、v2.0 でも `crypto_key_path_path` が使えるように見えてしまっているので注意が必要↓

#### [Client for Cloud Key Management Service (KMS) API](https://googleapis.dev/python/cloudkms/latest/gapic/v1/api.html)

![スクリーンショット 2020-08-05 11.20.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20307/0a116912-9271-19aa-f9bf-b08a38afaa3e.png)




# 対応
1. `crypto_key_path_path` -> `crypto_key_path` に変更。

2. `client.decrypt(name, ciphertext)` の引数を、`request`をkeyとするハッシュで渡すようにする

以下サンプル

```python

from google.cloud import kms
# Create the client.
client = kms.KeyManagementServiceClient()
# Build the key name.
key_name = client.crypto_key_path(project_id, location_id, key_ring_id, key_id)
# Call the API.
decrypt_response = client.decrypt(request={'name': key_name, 'ciphertext': ciphertext})
print('Plaintext: {}'.format(decrypt_response.plaintext))
return decrypt_response
```

# 参考
[python-kms/samples/snippets/decrypt_symmetric.py /
](https://github.com/googleapis/python-kms/blob/master/samples/snippets/decrypt_symmetric.py)
[自分用メモ] WSL2, homebrew, list and aws cli / aws cli v2

# 自分用メモ

家の Windows 10 の WSL2(Ubuntu18) で homebrew を使ってみてる。

インストール済のパッケージの記録と、バックアップ用に aws cli v1 と v2 を使い分ける方法をメモ。

# brew list

```sh
~ $ brew list
amazon-ecs-cli  awscli    aws-iam-authenticator  gdbm  groff  helmfile  kubectx         libffi   ncurses    openssl@1.1  patchelf    readline  sqlite  tfenv  xz  zlib
anyenv          awscli@1  bzip2                  gist  helm   jq        kubernetes-cli  libyaml  oniguruma  packer       python@3.8  ruby      stern   unzip  yq
```

# use direnv

```sh
v1 $ cat .envrc
export PATH="/home/linuxbrew/.linuxbrew/opt/awscli@1/bin:$PATH"
v1 $ aws --version
aws-cli/1.18.90 Python/3.8.5 Linux/4.19.104-microsoft-standard botocore/1.17.13
v1 $ cd ../v2/
direnv: unloading
v2 $ aws --version
aws-cli/2.0.33 Python/3.8.5 Linux/4.19.104-microsoft-standard botocore/2.0.0dev37
```

# conclusion

- direnv を使って PATH の書き換え
- v1 のパスを優先させる（だけ）
- 通常は（direnvの範囲外では）v2を使う
[自分用メモ]修飾子について軽く勉強してみた

## 自己紹介
Javaを勉強したての社会人一年目です。
昨日書いた以下の記事のコメントで、「**アクセス修飾子**」「**class設計**」というワードが出てきたので、それらについて勉強してまとめようとこの記事を書いています。
https://qiita.com/N46_myHearter/items/891b660b8748171779b1

Javaに関するアドバイス等募集中です。

## 修飾子とは
**クラス**や**メソッド**、**変数**に指定することができ、指定する修飾子によって様々な効果があるみたい。
自分は、Javaで修飾子だと**public private**等の**アクセス修飾子**ぐらいしかまだ知らなかったのですが、修飾子ってむっちゃあるんですね笑笑

**アクセス修飾子**、**abstract**、**static**、**final**までは知ってたが、**transient**、**volatile**、**synchronized**、**native**、**strictfp** **....**って何や！？笑笑

## アクセス修飾子
public、protected、privateがあり、アクセス修飾子を設計している**クラスやその変数、メソッドがどこからアクセス可能**かを示しているみたい。

### 1. public
すべてのクラスからアクセス可能

### 2. protected
現在のクラスとそのサブクラスからアクセス可能

### 3. private
現在のクラスからのみアクセス可能

**アクセスできる範囲は、public > protected > private**な感じかな。

## abstract修飾子
abstractが設定されている**クラス・メソッドは、抽象クラス・メソッドと言う**みたい。。。(昨日勉強した抽象がさっそくでてきた...)
親クラスでabstractを設定している場合、その子クラスはオーバーライドしないといけない。

### 抽象メソッド
本体がなく、メソッド名や引数、戻り値だけで構成されたメソッド。

### 抽象クラス
抽象メソッドを含むクラス。
インスタンス化が出来なくなり、継承したサブクラスの作成が必要になる。

## static修飾子
staticが設定されていると、**インスタンス化せずにアクセス可能になる**(C言語でも静的ななんちゃらであったから分かる気がする...笑笑)。
変数、メソッドに指定可能。
オーバーライドはできない。
**クラス名.メンバー名でアクセス可能**のこと。

### インスタンス化
クラスをアクセス可能にして、利用できるようにすること(クラスを初期化するってことかな！？)。

## final修飾子
finalが設定されていると、**メンバーの上書き、サブクラスでのオーバーライド、extends句での継承等を禁止にする**みたい。
クラスや変数、メソッドに指定でき、指定したものによって、意味合いが変わるみたい。

### クラスに指定した場合
指定したクラスは継承不可になる。

### 変数に指定した場合
指定した変数は定数(変数宣言時、初期化必須となり、以後変数の値を変えることは不可)になる。

### メソッドに指定した場合
指定したメソッドはオーバーライド不可になる。

### オーバーライド
親クラスで定義しているのを、子クラスで再定義すること(継承みたいだね)。

## transient修飾子
transientが設定されていると、**シリアライズの対象外にする**みたいです(シリアライズって何や...笑笑)。
変数に指定可能。

### シリアライズ
オブジェクトをバイト配列に変換すること。

## volatile修飾子
volatileが設定されていると、**キャッシュの対象外にする**みたいです。
変数に指定可能。

## synchronized修飾子
synchronizedが設定されていると、**メソッドを同期実行する**。
メソッドに指定可能。

### 同期実行
ほぼ同時に複数の呼び出しがあったときに、先に呼び出した方を優先して、その処理が終わるまで後から呼び出した方は待機させること。

## native修飾子
nativeが設定されていると、**Java以外の言語で実装されているということになる**(Javaプログラム上で別の言語を使えるってことかな)。
メソッドに指定可能。

## strictfp修飾子
strictfpが設定されていると、**浮動小数点を厳密に処理することが可能**みたい。
クラスやメソッドに指定可能。

## おわり
あくまでも、Java初心者が勉強したことをメモしてるので、内容薄いです笑笑
修飾子多いので、まずアクセス修飾子からもっと勉強していこうと思っています(他は後回しww)。
API作成するのでSwagger導入してみた


ちょっと詰まったとこ備忘録として残す。  

## NuGetパッケージインストール

[ツール]→[NuGet パッケージマネージャー]→[ソリューションのNuGet パッケージ管理]
Swashbuckle.AspNetCoreをインストール

## Startup.cs

以下を追加。それに伴い必要なusing句の追加。

``` C#
public void ConfigureServices(IServiceCollection services)
        {
            /************ 省略 ********************/
            // Swagger
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "Hoge.API", Version = "v1" });

                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                c.IncludeXmlComments(xmlPath);
            });
            services.AddApplicationInsightsTelemetry();
        }
```

``` C#
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            /************ 省略 ********************/
            // Swagger
            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                c.RoutePrefix = string.Empty;
            });
            /************ 省略 ********************/
        }
```

👇によりpathが空白だったらSwaggerに飛ぶように設定できる。

``` C#
c.RoutePrefix = string.Empty;
```

デバッグしてエラーが出なければ成功だと思いきや、エラーを吐いてしまい沼にはまった。  
下記を行うことで沼から脱出した。

## csprojの編集

<PropertyGroup>に👇を追加することでなんとかSwaggerの導入が完了した。

```cs
<PropertyGroup>
  /* 省略 */
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
```
TOF(Time of Flight)方式のセンサ、遠近法、GPS、ステレオカメラ方式

平成31年春期 午前問題4

家庭用ゲーム機に採用され、自動車の先端運転支援システムにも使われる距離画像センサの一つである、TOF (Time of Flight) 方式のセンサの説明として、適切なものはどれか。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/b9b0a240-d1d5-df8a-5ca1-3fc2e54ad71e.png)


１、TOF(Time of Flight)
TOF方式は、光源から発せられた光が対象物に当たり、その反射光が光源と同じ位置にあるセンサに返ってくるまでの時間によって対象物との距離を測定する方式です。カメラを用いる方式と比較すると、カメラが不要な単純な構成、昼夜及び天候の影響を受けないなどの利点があります。

光の速度は約30万キロメートル／秒なので、1ナノ秒に約30cm進むことになります。反射光を受け取るまでの時間が1ナノ秒増加すると、対象物との距離が「30cm÷2＝15cm」だけ離れたことになるというわけです。

なお、TOF方式のセンサが採用されている家庭用ゲーム機とはMicroSoftのXboxです。

２、ステレオカメラ
ステレオカメラ(すてれおかめら、stereo camera)とは、人が物を見る原理と同じように、2つのカメラ(2眼のカメラ)を用いて対象物を複数の異なる方向から同時に撮影することにより、カメラの画素の位置情報から、奥行き方向の情報も計測することが可能なカメラのことです。

先端運転支援システムは、ADAS (Advanced Driver Assistance System = 先進運転支援システム)にも使われている技術であるが、TOF方式のセンサの説明ではない。

ADAS(先進運転支援システム)においてステレオカメラ（ステレオビジョン）は前方の車間距離や取得した画像を使い、自動ブレーキや白線認識などの運転支援に活用されるデバイスです。

３、
遠近法（えんきんほう、英: perspective）は、広義には絵画や作図などにおいて、遠近感を持った表現を行う手法を指す。ここでは特に、目に映る像を平面に正確に写すための技法である「透視図法」（透視法、線遠近法ともいう）について記す。

４、GPSで距離を測定する方式センサ
GPS (Global Positioning System) は、人工衛星を利用して地球上の現在位置を正確に測位するシステムのことである。


参考：
https://www.ap-siken.com/kakomon/31_haru/q4.html

http://fast-macro.com/Johosyori/h31HaruOuyou/h31HaruOuyou-04.html

https://ja.wikipedia.org/wiki/%E9%81%A0%E8%BF%91%E6%B3%95
ActiveModel::UnknownAttributeError: unknown attribute 'foreign_type' for PaperTrail::VersionAssociation のエラー対応

## 起こったこと
`rails db:migrate`したら以下のようなエラーを吐いた。
エラー文を読むと、「`VersionAssociation` テーブルに `foreign_type` カラムがない！」と怒られている。

```
ActiveModel::UnknownAttributeError: unknown attribute 'foreign_type' for PaperTrail::VersionAssociation

```

## 原因
paper_trailというgemをアップデートしたことで発生。
公式リポジトリのCHANGELOG.mdを見ると`foreign_type`に関する記述を発見。。
> How to Upgrade from v1.0.0 or earlier
Run rails g paper_trail_association_tracking:add_foreign_type_to_version_associations and then migrate your database.

カラムを追加するマイグレーションファイルを作成してから `rails db:migrate`すればよさそう。


## 解決方法

```bash:terminal
# カラムを追加するマイグレーションファイルを作成
rails g paper_trail_association_tracking:add_foreign_type_to_version_associations
# 作成したマイグレーションファイルを適応
rails db:migrate
```

## 参考

- [paper\_trail\-association\_tracking/CHANGELOG\.md at cffe83d0519e715f4aaac1bd2a581a2c3a4a20ff · westonganger/paper\_trail\-association\_tracking](https://github.com/westonganger/paper_trail-association_tracking/blob/cffe83d0519e715f4aaac1bd2a581a2c3a4a20ff/CHANGELOG.md)

- [You need to add column foreign\_type into version\_associations tables after upgrading gem paper\_trail\.](https://stackoverflow.com/questions/57376989/activemodelunknownattributeerror-unknown-attribute-foreign-type-for-papertr)
PHPって使いづらい・・・

**愚痴を連ねた記事です。**(あくまで個人の感想です。)

#生産性低くね・・・？
とふと思いました。仕事で半年程度ですが、使った感想を書いていきます。


##PHPの特徴
PHPの特徴はWEB関係のフレームワークが多く存在し、WordPressなどもよく用いられます(WordPressはCMSですが・・・)。案件ではCAKE PHPやLaravelを用いて開発をしていましたし、WEB関係の実装はやりやすいとは感じました。

動的型付言語であり変数型をあまり考えずに変数を実装できるので、あまり頭を使わずに変数を利用できます。実際、文字列型と数値型をあまり意識せずに値を入れられるのは便利でした。

##ただ生産性がちょっとね・・・
- ロクなIDEが無い
    - Eclipse、VSCode、NetBeansと使いましたが、定義ジャンプが無かったり自動インポートが無かったりと不便でした。特にVS使ってて自動インポート無いのは辛い・・・。VSStudioでは使えたのに。

- 動的型付けめんどくさ！
    -  数値と文字列考えなくて良いとは言ったが、引数型は合わせないといけない。これはフレームワークのせいかもしれませんが、i18nFormat使っていたら、string型は入らないとエラー吐きました。FrozenTime型しか取らないのね・・・:cry:

##終わり
とまあ愚痴ってみたわけですが、お前が使いこなせてねーよで終わるかなと思います笑。
ただASP.Netを使った時は割とスラスラ書けて書き味も悪くなかったので、やはり言語の問題と思います。PHPじゃなくて他の言語、できればC#使いたいなぁと思いました。
AIにおけるディープラーニング、機械学習

平成31年春期 午前問題3

AIにおけるディープラーニングに関する記述として，最も適切なものはどれか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/d375ae1e-5cd2-4663-18c6-db82d60c1c9d.png)

１、
ディープラーニング(Deep Learning)は、人間や動物の脳神経をモデル化したアルゴリズムを多層化したものを用意し、それに「十分な量のデータを与えることで、人間の力なしに自動的に特徴点やパターンを学習させる」ことをいいます。人工知能の機械学習分野における要素技術の1つで、深層学習とも呼ばれます。従来の機械学習方式と異なり、中間層の多層化によって複雑なパターンの表現と計算を可能にしていることが特徴です。

Deep Learningとは、十分なデータ量があれば、人間の力なしに機械が自動的にデータから特徴を抽出してくれるディープニューラルネットワーク（DNN）を用いた学習のことです。

２、
Deep Learningと人工知能、機械学習の違い
３つのキーワードの関係は、大まかにいうと「人工知能＞機械学習＞Deep Learning」という構造になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/463107d0-7ed9-e3ea-ebf9-add376400151.png)

３、人工知能（AI）
大量の知識データに対して、高度な推論を的確に行うことを目指したもの 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/e109d7c5-483e-236a-cd48-b1c05f41ec90.png)


４、機械学習（ML）
人が明示的に挙動を指示することなしにコンピューターに学習能力を与えること

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/2eb917f8-2751-b57f-8f20-f6955a3d69fe.png)

５、Deep Learning (DL)
ニューラルネットワーク（NN）というパターン認識をするように設計された、人間や動物の脳神経回路をモデルとしたアルゴリズムを多層構造化したもの

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/9ad69bd9-9514-c1b9-2fba-c6d436cd5aee.png)


■DNN（Deep Neural Network，ディープニューラルネットワーク）

ニューラルネットワーク（NN）というパターン認識をするように設計された、人間や動物の脳神経回路をモデルとしたアルゴリズムを多層構造化したもの。

■CNN（Convolutional Neural Network，畳み込みニューラルネットワーク）

局所的な情報の抽象化及び位置普遍性をもたせた順伝播型ニューラルネットワークを利用したアルゴリズム。DNNを2次元データに対応させたもので、画像に対して高いパターン認識能力を示します。

主な用途：**画像認識**

■RNN（Recurrent Neural Network，再帰型ニューラルネットワーク）

音声、動画データのような可変長のデータを扱えるようにするために中間層に再帰的な構造をもたせた双方向に信号が伝播するニューラルネットワークを利用したアルゴリズム。

DNNを横に繋いで時間変化する、連続的なデータに対応させたものですが、あまり長時間のデータには向きません。

また最近では、Google Translateなど自然言語処理にも使われています。

主な用途：**音声認識、動画認識、自然言語処理**

そもそもビジネスに導入したい際には、Deep Learningのアルゴリズム等を検討する前に、それが機械学習の方が適切なのか、DeepLearningの方が適切なのかでも変わってきます。



参考：
ディープラーニング（Deep Learning）とは？
https://leapmind.io/blog/2017/06/16/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%EF%BC%88deep-learning%EF%BC%89%E3%81%A8%E3%81%AF%EF%BC%9F%E3%80%90%E5%85%A5%E9%96%80%E7%B7%A8%E3%80%91/
GAS 基本文法 備忘録②【関数リテラル メソッド】

## 備忘録です。

[GoogleAppsScript 完全入門](https://www.amazon.co.jp/dp/B07BNB1Z9L/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)で学んだことを備忘録としてまとめていきます。

- 自分が知っていることや、解説、今は必要ないなと思ったことは省いています。
- 解説などは自分が分かりやすい言葉で書いているので厳密に違うこともあるかもしれません。


## 関数リテラル

関数の宣言の1つ。
関数リテラルで定義することで、変数に代入したり、オブジェクトの要素として追加できたり、引数として渡すことができる。

**関数名を記述せずに定義するのが特徴。**

```javascript:構文
function (仮引数1, 仮引数2, ...) {
  // 処理
  return 戻り値;
}
```

関数リテラルで定義した関数は変数に代入できる。
この代入式のことを**関数式**という。

```javascript:構文
var 変数名 = function (仮引数1, 仮引数2, ...) {
  // 処理
}
```

関数式で定義した関数は、関数を代入した変数を使用し下記のように呼び出すことができる。

```javascript:構文
変数名(仮引数1, 仮引数2, ...)
```

関数式の定義、呼び出し方の例⇩

```javascript:例
// 関数の定義
function Goodbey() {
  // 関数式の呼び出し
  Hello();
  Logger.log('Good bey!');
}

// 関数式の定義
var Hello = function () {
  Logger.log('Hello!');
}
```

<img width="348" alt="スクリーンショット 2020-08-05 9.03.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646383/6ac11236-4086-99ea-9151-13237c695826.png">

戻り値がある場合⇩

```javascript:例
function func() {
  Logger.log('長方形の面積は' + calcArea(3, 4));
}

var calcArea = function(x, y) {
  return x * y;
}
```

<img width="385" alt="スクリーンショット 2020-08-05 9.11.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646383/59e08d25-9761-d343-9b0c-3f4dde983236.png">

## メソッド
関数が格納されたオブジェクトは要素をプロパティではなく**メソッド**と呼ぶ。

```javascript:構文
// メソッドの定義
メソッド: function(仮引数1, 仮引数2, ...) {
  // 処理
  return;
}


// メソッドの呼び出し
オブジェクト名.メソッド(仮引数1, 仮引数2, ...)


// メソッドの代入・追加
オブジェクト名.メソッド = function(仮引数1, 仮引数2, ...) {
  // 処理
  return 戻り値;
}
```

```javascript:例
// メソッドの定義
var myGreet = {
  sayHello: function() {
    return 'Hello!';
  }
}

// メソッドの呼び出し
function myFunction() {
  Logger.log(myGreet.sayHello());
}
```

<img width="300" alt="スクリーンショット 2020-08-05 9.59.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646383/de5c29e2-9e58-d7b7-a42f-53a254021598.png">

```javascript:例
// メソッドの定義
var myGreet = {
  sayHello: function() {
    return 'Hello!';
  }
}

// メソッドの追加
myGreet.sayGoodbey = function() {
  return 'Good Bey!';
}

// メソッドの呼び出し
function myFunction() {
  Logger.log(myGreet.sayHello());
  Logger.log(myGreet.sayGoodbey());
}
```

<img width="322" alt="スクリーンショット 2020-08-05 10.01.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646383/36086d13-0488-eedb-831c-c9198664012e.png">
AWS EC2 インスタンスの情報をssh configに記載して簡単にssh接続する

# 目的

- ssh configファイルにAWS EC2のインスタンス情報を記載して短いコマンドでssh接続する方法をまとめる

# 実施環境

- ハードウェア環境(ssh接続元)

| 項目 | 情報 |
| --- | --- |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

- EC2インスタンス環境(ssh接続先)

| 項目 | 情報 | 備考 |
| --- | --- | --- |
| インスタンス種類 | AmazonLinux2 | こちらの方法で構築→[AWS EC2 をMacで使ってみよう!](https://qiita.com/miriwo/items/a1ab84c098008e43d042) |


# 前提条件

- 先に記載した方法でAWS EC2のインスタンスが起動しssh接続ができること。

# 前提情報

- 今回の説明で実行するコマンドは特に記載がない場合、ssh接続元にて実行する物とする。

# 読後感

- `$ ssh ssh設定名`のみでEC2のインスタンスにssh接続できる様になる。

# 概要

1. 情報の確認
1. ssh configファイルの作成と記載
1. 確認

# 詳細

1. 情報の確認
    1. AWSにログインしてEC2のインスタンス一覧ページを開き「接続」をクリックする。

        ![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_306417_81cd75ae-66c4-7f87-ad0f-5b7c8ed2c27a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/2540e081-8cc0-9bdf-ca48-e58490fa3943.png)

    1. 表示された下記画像の赤枠で囲まれた部分(HostName情報)の情報をどこかにメモしておく。

        ![https___qiita-image-store_s3_ap-northeast-1_amazonaws_com_0_306417_9e224e56-bffc-9e66-e6a9-348883e56b35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/1125412d-fc69-a269-4364-25f8eb2ed803.png)

    1. 表示された下記画像の赤枠で囲まれた部分(User情報)の情報をどこかにメモしておく。

        ![https___qiita-image-store_s3_ap-northeast-1_amazonaws_com_0_306417_9e224e56-bffc-9e66-e6a9-348883e56b35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/27b5c430-6dca-32e1-3952-19949ad75684.png)


        
    1. 現在ssh接続する際にコマンドで指定している接続鍵が格納されているディレクトリまで移動して、下記コマンドを実行し表示されたパスの末尾に鍵の名前をくっつけた文字列(接続鍵のフルパス)をどこかにメモしておく。(例えば、出力されたパスが`/Users/miriwo`で接続鍵の名前が`test.pem`だった場合`/Users/miriwo/test.pem`という文字列をメモする。)

        ```terminal
        $ pwd
        ```
        
1. ssh configファイルの作成と記載
    1. 下記コマンドを実行して.sshディレクトリを作成する。

        ```terminal
        $ mkdir -p ~/.ssh
        ```
    1. 下記コマンドを実行してssh configファイルを作成して開く。

        ```terminal
        $ vi ~/.ssh/config 
        ```
    1. 下記の内容を記載する。

        ```~/.ssh/config
        Host 接続先情報名(任意の物を入力)
            HostName 先にメモしたHostName情報を記載する
	    User 先にメモしたUser情報を記載する
	    IdentityFile 先にメモした接続鍵のフルパスを記載する
        ```
    1. 例えば接続策情報名が「aws-test」、HostName情報が「ec2-13-59-146-25.us-east-2.compute.amazonaws.com」、User情報が「ec2-user」、接続鍵のフルパスが「/Users/miriwo/MyWebServer.pem」だった時の記載は下記の様になる。

        ```~/.ssh/config
        Host aws-test
            HostName ec2-13-59-146-25.us-east-2.compute.amazonaws.com
	    User ec2-user
	    IdentityFile /Users/miriwo/MyWebServer.pem
        ```
    1. 記載を保存してssh configファイルを閉じる。
1. 確認
    1. 下記コマンドを実行して接続できることを確認する。

        ```terminal
        $ ssh 接続先情報名
        ```
bash: cannot create temp file for here-document: No space left on device が表示された時の対処法

# エラー概要

cd でディレクトリを移動しよとしてtabを押していたら何度も `bash: cannot create temp file for here-document: No space left on device` が表示されました。よくよく英語を読むとディスクフルになっていることが分かり、対応しました。

環境はUbuntu(18.04)です。

# 対応

## 1. 全体のディスク容量を確認

落ち着いて、`df`コマンドでディスク容量を確認します。`-h` オプションを付けることで、容量が読みやすい状態で表示されます。

```docker
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             16G     0   16G   0% /dev
tmpfs           3.2G  114M  3.1G   4% /run
/dev/sda2       219G  208G     0 100% /
tmpfs            16G  784K   16G   1% /dev/shm
（以下略
```

`/dev/sda2       219G  208G     0 100% /`とありほぼ一杯になっており、ここの容量を下げる必要があります。

## 2. 原因のファイルを特定する

ルートディレクトリから順番にディレクトリを辿りつつ、`du`コマンドでどのファイルが大きいかどうかを確認します。使うコマンドは以下の通り。

```docker
sudo du -sh *
```

単純にduと打ってしまうと、膨大なファイル容量が表示されてしまい、容量の表示も分かりにくいです。上記コマンドは、以下の方法で対応しています。

- `-h` オプションで容量を読みやすいものに変える
- `-s` オプションでサブディレクトリを含めない結果にする
- アクセスできないファイルがある場合には`sudo`を利用して、ファイル容量を確認できるようにする
- `*` を付けることで、カレントディレクトリ直下のディレクトリとファイルの容量を表示する（付けない場合、カレントディレクトリのサイズ）

また、sortを使うことで容量順に表示することも可能です。ただし、この場合、`-h`を付ける私の環境では正しくソートしてくれなかったので、以下のようなコマンドを使いました。

```docker
du -s * | sort -nr
```

`-n` で数値の並び替え、`-r`で逆順にして大きい容量が先に来るようにします。

容量の大きいファイルを特定し、削除可能であることを確認できれば、削除して完了です。

## おまけ

head と sort を併せて利用して、容量の大きいファイルから順に数行だけ並べることもできます。

```docker
du |sort -nr | head -n 5
```

ただ、当然ながら大きいファイルであればすぐに消していいなんてことはないので、結局は地道に削除できそうなディレクトリ・ファイルを探していくことになるかと思います。

# 参考

- [Linuxでディスクが一杯になった時の対処法](https://qiita.com/masarufuruya/items/0c794083fc4ea03cd9f9)
- [【 du 】コマンド――ディスクの使用量を表示する：Linux基本コマンドTips（59） - ＠IT](https://www.atmarkit.co.jp/ait/articles/1610/25/news016.html)
- [【 sort 】コマンド――テキストファイルを行単位で並べ替える：Linux基本コマンドTips（63） - ＠IT](https://www.atmarkit.co.jp/ait/articles/1611/09/news020.html)
tailwind メモ

リスト
bg-(color name)
Control the background color of an element
https://tailwindcss.com/docs/background-color/#app

breakpoint(sm 640,md 768,lg 1024,xl 1280)
The .container class sets the max-width of an element to match the min-width of the current breakpoint.
(ex) <div class="h-8 sm:h-12 md:h-16 lg:h-20 xl:h-24 w-32 bg-gray-400"></div>

h-auto
Use h-auto to let the browser determine the height for the element.

h-full 
Use h-full to set an element's height to 100% of its parent, as long as the parent has a defined height.

What is different between h-auto and h-full.
h-auto: contents height
h-full: parent’s element height
https://www.quora.com/What-is-the-difference-between-auto-and-100-value-in-CSS

h-screen (=height:100vh →vh means viewpoint height. 1vh=1/100viewpoint)
Use h-screen to make an element span the entire height of the viewport.
https://hysryt.com/archives/1092

.max-h-full
Height is same as parent’s element.if over,→overflow
https://web-designer.cman.jp/css_ref/abc_list/max-height/
https://stackoverflow.com/questions/45552111/height-100-not-working-when-parent-div-only-has-max-height/45552551



Overflow(visible,:hidden,scroll,auto).
 Note that any content that overflows the bounds of the element will then be visible.
to clip any content within an element that overflows the bounds of that element.
to allow horizontal scrolling if needed.
this utility will only show them if scrolling is necessary.
https://techacademy.jp/magazine/9428


When I wanna add only smart phone size.
Use lg:hidden
http://bootstrap3.cyberlab.info/css/responsiveUtilities.html
1

When I use ml-auto,mr-auto (=mx-auto)
Center 

When I use ml-auto,mr-0,
Right


Position absolute relative fixed
Use Top-0 right-0 left-0 bottom-0
Parents→relative child→absolute
https://www.w3schools.com/css/css_positioning.asp

CSS Grid Layout
Grid=display:grid
grid-row: アイテムが占める行のラインの番号をスラッシュ区切りで指定する
grid-column: アイテムが占める列のラインの番号をスラッシュ区切りで指定する
https://qiita.com/kura07/items/e633b35e33e43240d363

display:block
https://www.sejuku.net/blog/52636
https://www.w3schools.com/css/css_inline-block.asp

flex (inlineblock,float is same function)
https://mamewaza.com/support/blog/howto-use-flex.html
flex col
https://tailwindcss.com/docs/flex-direction/

border-radius: → rounded
https://tailwindcss.com/docs/border-radius/#app

items-center
https://tailwindcss.com/docs/align-items/#app
items-center justify-contents
https://goodsan.jp/wp/justifycontent/
UiPathに認定資格はあるの？基本情報を解説！

こんにちは！Peaceful Morningでインターンをしている高橋です！

先週、**こちらの記事(https://qiita.com/RPAHACK/items/c9efdbbe0f7cd86e4622)**
でWinactorのRPA技術者検定についてお話ししました。

**Winactorってどんなツール？という方はこちらをご覧ください↓**
**純国産RPA『WinActor®』とは？歴史～特徴まで完全ガイド**
https://rpahack.com/winactor
**WinActorがさらに進化！ WinActor Ver.7を解説**
https://rpahack.com/winactor_ver7


今回の記事ではUiPathにも検定があるということでその詳細を紹介したいと思います。資格名としては、**UiPath Certified Professional(UCP)** というものになります。取得することで価値の高いRPAソリューションの設計を提供できる専門家という証明になります。

##資格取得への道
**注意：UiPath Certified Professional(UCP)の受験言語は英語となっております。**

###1.試験選び
UiPath Certified Professional(UCP)には試験が２種類あります。AssociateとAdvancedの２種類です。Associateはあらゆる方を対象としていて、RPAの基礎的な知識とスキルを中心とした試験になっています。AdvancedはAssociateよりレベルは高くなっていて、技術に自身がある方を対象としていて、複雑なRPAの設計・開発面で専門的な知識を要する試験になっています。

###2.試験勉強
UiPath認定資格は全文英語となっています。そのため勉強の際には英語のスキルを要します。勉強の手段としてはUiPathアカデミーの無料トレーニング(https://www.uipath.com/ja/rpa/academy) を利用するのもおすすめです！

###3.模擬試験
試験勉強をしたら次は模擬試験を受けてみましょう！本試験を直ぐに受ける前に模擬試験を受けてみて試験耐性をつけましょう。

模擬試験は以下のリンクからご覧ください。
**Associate**
https://uipath.onlinetests.app/Assess.aspx?guid=1F76202BB013459995222FB22DFDD6A8&a=L1

**Advanced**
https://uipath.onlinetests.app/Assess.aspx?guid=C47310C641FE49B68B3B2B7306E9439F&a=L1

###4.受験
Associateは試験時間が90分、受験料がUS$150、正答率70%以上で合格となっています。
Advancedは試験時間が120分、受験料がUS$200、正答率70％以上で合格となっています。
受験方法としてはピアソンVUEテストセンター又はオンラインでOnVUE経由で受験という形になります。受験料の支払いについてはUiPath認定資格の公式サイトをチェックしてください。

https://www.uipath.com/ja/learning/certification

###記事を読んで、実際にRPAを動かしてみたい人に向けて
**これからUiPathを勉強したい人向けにUiPathエンジニアがマンツーマンで学習をサポートするコースを運営しています！**
https://uipath-academy.rpahack.tech

**UiPath StudioXでCSV/Word/Outlookメールを自動化！**
https://rpahack.com/uipath_studiox_4

**【UiPath StudioXの使い方】Excelを自動化！**
https://rpahack.com/uipath_studiox_3

**UiPath StudioXでUI操作を自動化！～入金システムインプット例①**
https://rpahack.com/uipath_studiox_2

**UiPath StudioXの基本をマスター！～画面構成/カード/アクション**
https://rpahack.com/uipath_studiox_1
GPSマルチユニットSORACOM Edition で位置情報(Googleマップ)をLINEに通知する

#やったこと
GPSマルチユニットSORACOM Editionのデータを、SORACOM Funk経由でAWS Lambdaに送り、位置情報をLINE Notifyを使用して通知する。位置情報はGoogleマップのリンクで。使用する言語は、Python。

#GPS マルチユニット SORACOM Edition とは
以下、[公式サイト](https://dev.soracom.io/jp/gps_multiunit/what-is-gps_multiunit/)より引用
>GPS マルチユニット SORACOM Editionは、「位置情報（GPS）」「温度」「湿度」「加速度」の4つのセンサーと充電式バッテリーを内蔵し、 セルラーLPWAであるLTE-M通信がご利用可能なデバイスです。

詳細については、以下を参照ください。
[(公式)GPS マルチユニット SORACOM Edition とは](https://dev.soracom.io/jp/gps_multiunit/what-is-gps_multiunit/)
[GPSマルチユニット SORACOM Editionで遊ぶ](https://qiita.com/mokatsumo/items/db171596197ab0d46e6c)

#SORACOM Funkとは
クラウドサービスの Function を直接実行できるサービスです。
今回は、AWS Lambdaを実行します。

以下参照ください
[(公式)SORACOM Funk とは](https://dev.soracom.io/jp/funk/what-is-funk/)
[SORACOM Funkを使ってみた。](https://qiita.com/keni_w/items/4b511f89c8dbd259a78d)

#LINE Notifyとは
以下、[公式サイト](https://notify-bot.line.me/ja/)より
>Webサービスからの通知をLINEで受信
Webサービスと連携すると、LINEが提供する公式アカウント"LINE Notify"から通知が届きます。
複数のサービスと連携でき、グループでも通知を受信することが可能です。

以下参照
[Python で LINE にメッセージを送信（LINE Notify）](https://qiita.com/shibata0523/items/13424c747e912dbff410)

#AWS LambdaでLINE Notifyを呼び出す
SORACOM、AWS Lambda、LINE Notifyの設定については、省略します。

以下を AWS Lambdaに。
Python 3.6
時刻も通知してます。

```lambda_function.py
import os
import requests
import datetime

def lambda_handler(event, context):
    lat = event['lat']     #緯度
    lon = event['lon']     #経度

# 現在日時を取得(日本時間)
    now = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))) 

# 位置情報が取得できない場合
    if lat == None or lon == None:
      msg = now.strftime('%Y-%m-%d') + " " + now.strftime('%H:%M:%S') + " " + "位置情報を取得できませんでした"
      line_notify(msg)
      return

# Google マップで表示
    mapurl = "https://maps.google.co.jp/maps?q=" + str(lat) + "," + str(lon)  # google map用
    msg = now.strftime('%Y-%m-%d') + " " + now.strftime('%H:%M:%S') + " " +  "現在地はここです" + " " + mapurl
    line_notify(msg)

# LINE Notifyに通知
def line_notify(msg):
    url = "https://notify-api.line.me/api/notify"
    headers = {"Authorization" : "Bearer "+ "<LINEのTOKENを設定>"}
    data = {"message" : msg}
    s3 = requests.Session()
    r3 = s3.post(url, data=data, headers=headers)
```

#結果
![IMG_2719.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22526/d03da557-d53e-b2ae-0e78-10470affc80d.jpeg)
※文字列[SORACOM GPS]は、LINE Notify内で設定

####位置情報が取得できない場合は以下
![IMG_2720.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22526/70756b45-a3de-0d3e-efb3-2ddd63b5e68f.jpeg)
Calendar 関連


```Java
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, -1);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);

c.getTime();

```


```Java
Date.from(LocalDate.now().minusYear(1L).atStartOfDay(ZoneId.systemDefault().toInstant());
```
powershellでkubectlの結果からexternal IPを取得する方法

# 概要
Azure CLIでIaCしていたら、Azure Front DoorとAKSを連携させたくなったので、AKSに振られたEXTERNAL IPを取得してあれこれしようというだけ。

# やり方
色々やり方はあるだろうけど、今回はkubectlコマンドから取得する方法で。
ノードプールのロードバランサーに割り当てられたPublic IPからでも取得できそうだけど、複数のロードバランサーがあると探すのが面倒そうだったので、単純にkubectl get serivceでEXTERNAL IPを取得するという流れに。

- 普通にkubectl get serviceした結果

```
> kubectl get service
NAME               TYPE           CLUSTER-IP   EXTERNAL-IP    PORT(S)        AGE
azure-vote-back    ClusterIP      10.1.0.111   <none>         6379/TCP       56m
azure-vote-front   LoadBalancer   10.1.0.182   xx.xx.xx.xx    80:31284/TCP   56m
```

- EXTERNAL-IPがあるのはazure-vote-frontなのでserviceを指定して単独で表示させる

```
> kubectl get service azure-vote-front
NAME               TYPE           CLUSTER-IP   EXTERNAL-IP    PORT(S)        AGE
azure-vote-front   LoadBalancer   10.1.0.182   xx.xx.xx.xx    80:31284/TCP   58m
```

- 以下のようにしてEXTERNAL-IPのみを取り出して適当な変数にいれるなりなんなり

```
> $EXTERNAL_IP=$(kubectl get service | ?{ $_ -match '^azure-vote-front'} | Select-Object -first 1 | %{$_ -split "\s+"})[3]
> echo $EXTERNAL_IP
xx.xx.xx.xx
```

以上
Sinatraで家族用todoリストを作る

# はじめに
@kirinri さんが *[素敵な記事 - Qiita](https://qiita.com/kirinri/items/83822af364e7f922df28)* を投稿されているので、それに乗っかってみる
#　完成画面
![20200805.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/f81695e1-c5b1-492a-e815-6bfbcbdafad1.png)
# 工夫した点
## ユーザを削除した際、当該ユーザのTodoを削除
```main.rb
post '/destroy_user' do
  Todos.where('users_id = ?', params[:users_id]).destroy_all
  Users.find(params[:users_id]).destroy
  redirect to('/')
end
```
`activerecord`ってSQLを書かなくてもいいので素敵です。
## アイテムの角を丸くする
```style.css
.user_btn {
  height: 28px;
  background-color: #FFAD90;
  border-style: none;
  border-radius: 5px;
}
```
~~後半の3行~~最後の一行が丸くする処理です
@scivola さんに教えていただきました。
# 追記
ユーザを削除した場合、リロードされないのでドロップダウンリストに削除したユーザが残ってしまいます。
![20200806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/bc317d3a-6b6c-3770-9332-97778850ee3e.png)
そのユーザでリストに追加すると例外が発生します。
![20200806error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/83e386c1-0169-4691-b61b-1e880e74bbd5.png)

```main.rb
post '/create_todo' do
  begin
    Todos.create(body: params[:body],users_id: params[:users_id])
  rescue => e
  end
  redirect to('/')
end
```
例外処理を追加しましたが、スルーしているだけですので褒められたものではないと思います。
# まとめ
+ @kirinri さんありがとうございました
+ Sinatra でtodoリストを作った
+ ActiveRecord が便利すぎる

参照したサイト
*[Sinatraで家族用todoリストを作る](https://qiita.com/kirinri/items/83822af364e7f922df28)*
アルファベットを２６進数に変換＋配列の長さについて

＃paizaの問題を解く時に参考になったものを載せます

##アルファベットを２６進数に変換(1~26)
S="abcdefghijklmnopqrstuvwxyz"
S.index(x)+1
Sで２６番目までの文字列にして、実際のアルファベットがその何番目に当たるかで数字に変換してます。
（もっといいやり方ありそうです。。。。）

##配列の長さ
x = [1,2,3,4,5]
x.length (=5)
(x.length -1) (=4)
一個短い長さとかでもでも使えます。
Linux で内蔵カメラが認識されない時の解決方法

次のような状態で内蔵カメラが使えませんでした。

```text
$ sudo ls /dev/video*
ls: '/dev/video*' にアクセスできません: そのようなファイルやディレクトリはありません
```

解決策は、
F10 のキーを押すことです。

```text
$ sudo ls /dev/video*
/dev/video0  /dev/video1
```

次のコマンドでカメラの動作を確認します。

```bash
cheese
```
勉強中の疑問 + 備忘2(メモリ~実効アクセス時間あたり。)

# 疑問解消系2
2つめ。
## Chapter1 プロセッサ

### 1. キャッシュメモリについて

メモリの勉強が終わったけれど、キャッシュとは..？という気持ちになったので。

#### Word Def

1. メモリキャッシュ（1~3次キャッシュ、L1~L3）  
  主記憶装置からデータを読み書きするときにCPUとの性能差、速度差を埋めるために主記憶装置とCPUの間に存在する高速なメモリ。  
  それを適宜CPUorメモリから読みだして使用するようにして差分を埋めている。  
  CPUがメモリの速度に合わせなくて良くなることがメリット。  
  CPUチップの外部にキャッシュメモリを搭載するのが主流だったらしいが、現在はCPUチップ上にキャッシュメモリを搭載することが多いらしい。  
  レジスタとは違うよ。  
1. ディスクキャッシュ  
  主記憶装置、補助記憶装置間の性能差、速度差を埋めるために存在する高速なメモリ。  
  理論はメモリキャッシュと同じ。  
  補助記憶装置側にキャッシュメモリがある場合と、主記憶装置の一部をディスクキャッシュとして用いる場合がある（イメージめっちゃ遅そう）。  
1. キャッシュメモリ  
  上記メモリキャッシュ、ディスクキャッシュに用いられるメモリ。  
  SRAMが多い。  

#### 所感
遠ければ遠いほどおそかろうとも思っていたし、前にDRAMの遅さとかも見たから気にはなっていたけどそんな仕組みなのねと。

#### 参考文献
[メモリキャッシュとディスクキャッシュ](https://oshiete.goo.ne.jp/qa/130054.html)
[レジスタとキャッシュメモリ](https://www.foresight.jp/blog/it/archives/994)
[キャッシュに関しての注意事項](https://www.uquest.co.jp/embedded/learning/lecture12.html) <= ライトスルーとライトバックについても書いてある。
[CPUとメモリの関係について](https://elite-lane.com/cache-memory/) <= L1~L3でデータの遷移も書いてあるので後で読みたい。


### 1. 実効アクセス時間とヒット率

単語を知らなかったのだ。

#### Word Def
1. ヒット率  
  CPUが必要としている情報をキャッシュメモリが保持している確率のこと  
1. 実効アクセス時間（平均アクセス時間）  
  キャッシュメモリに存在している場合はヒット率との演算結果、なければ主記憶には常にあるのでそちらのアクセス時間が用いられる。  


#### 実効アクセス時間の計算
L1のヒット率をp_L1, L2のヒット率をp_L2とし、アクセス時間をL1,L2,主記憶それぞれt_L1,t_L2,t_mainとした時、下記のように平均アクセス時間は求められる。（L3がある場合も同じ感じで。）  
L2へ実際アクセスする確率はp_L2_actualとすると

  ```math
  p\_L2\_actual =  (1-p\_L1) * p\_L2
  ```

同様に主記憶に実際アクセスする確率はp_main_actualとすると

```math
p\_main\_actual = 1 - p\_L1 - p\_L2\_actual
```

実効アクセス時間

```math
p\_L1 * t\_L1 + p\_L2\_actual * t_L2 + p\_main\_actual * t\_main
```

で計算できるはず。なるほろ。L1に置きたいって思ったとしてもCPUがよしなにやってそうだから、難しいんだろうな。。  
あと一回読み込まれたものはL1とかに移動するだろうから、そのあたりの遷移もあとで読んでおきたい。

#### 参考文献

[試験問題解説](https://pe.hpeo.jp/entry/pe/1k/2324#a)


#### 所感
そもそも問題なんだけど、SSDとDRAM系の速度ってどのくらい違うんだろう？もし差が小さいならSSDを用いてもいい気がするけど。
Agile開発は先行改善

Agile開発は先行改善をソフトウェア開発で実現している。
先週、トヨタ自動車の生産調査室（トヨタのDNAを継承・推進している部署）出身で、現在、豊田マネジメント研究所の副社長である熊倉氏とWebイベントで会話したなかで、この事が確信となりました。
**先行改善**：もの作りの上流で品質を作り込む行為である。

過去・・・現在でも、システム開発において『品質は設計で担保しろ』というような事が言われて、『正しく要求を把握する事』と上流工程での品質を上げる行動が良いとされている風潮があります。
私の経験からすると、**要求を正しく出すことは全く困難です。先が分からない中で、正しい要求は出せません。**
私が30年前にある基幹系刷新プロジェクトでDOA（データ中心設計)にパターン志向を取り入れたコードジェネレータツールを使用して、受注～製造～出荷までのシステムを5名のチームで3ヶ月で構築し、それをユーザー部門へデモンストレーションを行い、要求仕様を整理しました。**従来の紙ベースのヒアリングよりも10倍の要望整理ができ、紙ベースでの使用調整ではユーザーの真の要求を掘り起こせない**と感じました。この時期、画面のイメージや画面遷移を端末画面で確認して進めるプロトタイプ・アプローチがありましたが、我々が実践したのは全く違います。**生の業務データを扱えるシステムであり、ユーザー部門が承認すれば即リリースできる品質**です。
このデモンストレーションに対する**ユーザー部門の真剣度・自分事度はとても高かった**のです。

もう一つ、これも30年間に大手非鉄金属のシステム開発プロセスの棚卸を行いました。
この棚卸は、CASEツール（**C**omputer **A**ided **S**oftware **E**ngineering)を適応するために実施しました。その際に、**最終成果物となる各種コードの為に必要なドキュメントは全体の3割程度**しかなかったのです。これは正味作業が3割しかないと言えます。
他のドキュメントは組織や関係者の意見調整や誤解・齟齬を軽減するための用途でした。ムダとは言えないでしょうが、付帯作業が圧倒的の多いのです。現在、PCベースでCloud環境で使用できる様々なツールが登場しているので、この付帯作業に代わるものがツール化され、正味を上げる環境が整っています。

前置きが長くなりましたが、要約すると、**ユーザーは実際に働くソフトウェアを前にしないと、自分の要求に気づかない、要求を出せない**事です。もう一つ、**従来手法では圧倒的に正味が少ない**です。

私は、アジャイル開発のイテレーション（スプリント）の行為は、従来手法の製造工程とマッピングするのではなく、要求精査＆設計工程であると言えます。従来手法に馴染んでいるので、どうしてもソフトウエアを作る（コーディング）は製造に入れたがるし、下流工程に位置付けたがります。
このイテレーション（スプリント）には次の行為と等価なのです。
**１．現時点での要求を具現する為の詳細化（スプリント・ミーティング）**
**２．現時点での要求の具現化（タスク作業）**
**３．具現化したものでのユーザーとの確認・仕様調整（ユーザー・レビュー）**
**４．作業・振舞・等　全ての改善（レトロスペクティブ）**

上場企業の基幹系刷新プロジェクトをAgile開発で実施した結果、**417件の仕様変更**が発生しました。
そして、元々のRFPとは全く違ったモノになりました。このプロジェクトで発注元のシステム部長にアジャイル開発を理解していただくために、**イテレーション（スプリント）は仕様設計と等価**です。
開発チームの技量が優れていれば品質（バグフリー）が担保されています。ですから、必要があればスプリント後にユーザー部門へ提供して新システムの教育にも使用できます。と解説しました。

これまでの内容からアジャイル開発は先行改善であると宣言した意図は分かると思います。
熊倉氏との講演は下記をご覧ください。
https://www.youtube.com/watch?v=RIMsK-DvFoM
Herokuコマンドのインストール方法

# はじめに

Herokuを利用しようとしたときに、エラーが発生したので解消方法を残しておこうとおもいました。

# Herokuコマンドのインストール

下記のコマンドを実行します。

```sh:Herokuインストールコマンド
brew tap heroku/brew && brew install heroku
```

このコマンドでインストールが完了してコマンドが利用できると思っていたのですが、実行中にエラーが発生していました。

```sh:エラーの内容
Error: The `brew link` step did not complete successfully
```

brewのリンクができなかったようです。

## brewのリンク

下記のコマンドでbrewのリンクを設定します。

```sh:リンク設定
brew link heroku
```
このコマンドを実行しても、エラーが発生しました。

```sh:エラー内容
Linking /usr/local/Cellar/heroku/7.42.1... 
Error: Could not symlink bin/heroku
Target /usr/local/bin/heroku
is a symlink belonging to heroku-toolbelt. You can unlink it:
  brew unlink heroku-toolbelt

To force the link and overwrite all conflicting files:
  brew link --overwrite heroku

To list all files that would be deleted:
  brew link --overwrite --dry-run heroku
```
このエラーが発生した時に、昔Herokuを利用していた事を思い出しました。

強制的に、最新の物をリンクしたいので、下記のコマンドを実行します。

```sh:brew強制リンク設定
brew link --overwrite heroku
```

# コマンドの確認

```sh:バージョン確認コマンド
heroku --version
```

上記のコマンドを実行して、バージョンが表示されれば正常にインストールされています。
AIきりたん使い方備忘録

#AIきりたんとは
無料で使えるAIシンガー。
NEUTRINOというSHACHI(@SHACHI_KRTN)氏が開発したAI歌声合成ソフトに含まれている。

# オフィシャルサイト
https://n3utrino.work
ここからNEUTRINO（AIきりたんのエンジン）をダウンロード。
解凍やインストールは必要ないので任意の場所にNEUTRINOフォルダを置いておく。

#楽譜ファイル
.musicxml形式が推奨。
musescoreを使用して作成。

↓musescoreダウンロードサイト
https://musescore.org/ja

###歌詞入力
音符を入力して⌘＋Lで歌詞入力。
###ブレス
ブレスはパレットの追加から選べるようになる。
###.musicxmlファイルの作成
ファイル > エクスポート > 非圧縮MusicXML形式

####保存場所：
/NEUTRINO/score/musicxml

#歌唱用ファイルの作成。
###Run.shの編集
環境によるみたい。
今回は**MacOS Catalina**で作成。
NEUTRINOフォルダ直下のRun.shファイルによって作成する。

###主に変更する点

```sample1をサンプル名に変更（拡張子なし）.
# Project settings
BASENAME=sample1
```

```AIシンガーをKIRITANかYOKO選択.
# NEUTRINO
ModelDir=KIRITAN
```

```ピッチと声色のシフト値.
# WORLD
PitchShift=1.0
FormantShift=1.0
```

以下を変更して保存。

###Run.shの実行
ターミナルを起動し、実行する

```
cd NEUTRINOフォルダのpath
sh Run.sh
```

outputフォルダ内に「サンプル名_syn.wav」ファイルが生成されていたら完成。