OmniAICreator/Qiita-1.07M huggingface dataset:
PythonでCodilityのLesson4 MaxCountersのスコア100%

# はじめに 
　タイトル通りです。下の問題をPythonで解きました。
[MaxCounters coding task - Learn to Code - Codility](https://app.codility.com/programmers/lessons/4-counting_elements/max_counters/)

# 回答コード 
```python 
import collections

# Aは空じゃないリスト
# Aの各要素は、1~N+1
def solution(N, A: list):
    if (len(set(A)) == 1):
        if (A[0] == N+1):
            return [0] * N
        else:
            counters = [0] * N
            counters[A[0] - 1] = len(A)
            return counters

    # Aの中から、要素がN+1の全インデックスを探す
    indexs: list = [i for i, x in enumerate(A) if x == N+1]
    # 上のリスト内の各インデックスの間で、インクリメント対象カウンター位置の出現回数の最大値を取得
    max = 0
    prev = 0
    current = 0
    for current in indexs:
        c = collections.Counter(A[prev:current])
        c = c.most_common()
        # max counter operationが最初に来るときは、cが空になり下で例外を吐く
        try:
            max += c[0][1]
        except:
            pass
        prev = current + 1

    counters = [max] * N
    # 上のリスト（要素がN+1の全インデックス）の最後より後の部分で、インクリメント対象カウンター位置の出現回数を取得
    c = collections.Counter(A[current+1:])
    # 各位置で、上で取得した出現回数分だけ各カウンターをインクリメントする
    return [e + c[i+1] for i, e in enumerate(counters)]
```
上の回答で、
- Total score: 100%
- Detected time complexity: O(N + M)  
でした。
![スクリーンショット 2022-10-23 23.48.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/987065/2934db4f-590a-9849-ab66-270d307f0c4b.png)

# おわりに 
　就職活動の一環でCodilityの問題を解いているのですが、track.runとは異なり、回答者がテストできるのは評価対象ケースのほんの一部だけで最終的なスコアは回答を終えるまでわからないというのが大変ですね……。
　あと、LeetCodeのように回答コードを共有する公式の場所が見つからなかったのでとりあえずQiitaに書いていますが、共有する場所をご存知の方は教えていただけますと幸いです。

# おまけ 
　本番のテストを解いたので、注意点を書いておきます。 
1. テストがいくつかのtaskに分かれている場合は、それぞれを別々にsubmitしないといけない。一括でsubmitはできない。
1. 既存のコードのバグ修正をする形式のtaskは、問題文で示されている変更可能行数を上回る行数を変更してはいけない。
typescriptのtypeと同じような動きをpythonで実装したい。

以下のようにObjectに型をtypescriptでつけることがある。これをpythonでも同じようにやりたい。

```typescript
type ProfileInterface = {
    name: string
    title: string
    email: string
}

const profile_objects: ProfileInterface = {
    name: "test",
    title: "mamushi",
    email: "test@hoge.com"
}
```


## 【解決策】TypedDictを使用する。


```python
from typing import TypedDict

class ProfileInterface(TypedDict):
    name: str
    title: str
    email: str


profile_objects: ProfileInterface = {
    "name": "mamushi",
    "title": "typescriptのinterfaceみたいに書きたい。",
    "email": "test@hoge.com",
}

```
Javaで何か作ってみる(2022/10/23 Day3)

## 今日やった事
- VSCodeでJavaプログラムが実行出来るように開発環境を構築した。
- VSCode上で、**Hello Java!** を実行出来た。
## 参考にしたもの
- [Visual Studio CodeでJavaプログラム開発環境構築](https://qiita.com/jsj05543/items/da54e5db258bc9d2538a)
    &rarr; ググった時に出てきたQiitaの投稿。シンプルでわかりやすく、非常に助かった。
## 所感
- 今日も朝からバタバタしており、日中の勉強時間の確保が出来なかった。
    &rarr; もう一層の事、「寝る前にやる」って決めてしまってもいいかもしれない。。。
- 以前参加していた勉強会の時に使っていた、SVNのプロジェクトが残っていて、それを削除するのに時間かかった。
    &rarr; 最近は、gitばかりで、svnのやり方を忘れてた。ただ、ルートの.svnを削除するだけで良かった。。。
## 明日の予定
- 明日は、午後に、例のお注射で、ぐったりするかと思うので、ぼちぼちやろうと思う。
- 明後日の夜までには、復活出来るといいが。。。
【JS】学習したメソッドのMEMO

備忘録として淡々とJSのメソッド書いていくだけです。
随時更新していくつもりですが、だいぶざっくりしてると思います。
# 配列を操作できるメソッド
## push
配列の最後に新しい要素を追加するメソッド
```javascript:例
const fruits = ["りんご", "バナナ", "メロン"];

console.log(fruits); //=> ["りんご", "バナナ", ”メロン”]

fruits.push("いちご"); //配列に新しい要素を追加

console.log(fruits); //=> ["りんご", "バナナ", "メロン", "いちご"]　※要素が追加されてる
```

## forEach
配列の中の要素を1つずつ取り出し、全ての要素に対して繰り返し処理を行う
```javascript:使い方
配列 = [要素１, 要素2, 要素3]

配列.forEach((引数) => {
    処理内容の記述
});

//配列の要素1から順番に引数に渡され、繰り返し処理が行われる
```
引数に渡されている関数を`コールバック関数`と呼ぶ
```javascript:例
const fruits = ["りんご", "バナナ", "メロン"];

fruits.forEach((fruit) => {
    console.log(fruit);
});

//出力結果
りんご
バナナ
メロン
```

## find
条件式に合う**1つ目**の要素を配列の中から取り出すメソッド
```javascript:使い方
配列 = [要素１, 要素2, 要素3]

定数（変数） = 配列.find((引数) => {
   return 条件式の記述
});

// 条件を満たした最初の要素のみが定数（変数）に代入される
```
※配列のオブジェクト要素に対しても使える
オブジェクトのプロパティを条件として使用する場合、そのプロパティを持っている**オブジェクトそのもの**を取り出してくる

## filter
記述した条件に合う要素のみを取り出して**新しい配列を作成する**メソッド
```javascript:使い方
配列 = [要素１, 要素2, 要素3]

定数（変数） = 配列.filter((引数) => {
   return 条件式の記述
});

// 条件を満たした全ての値が取り出され、新しい配列となって定数（変数）に代入される
```
※配列のオブジェクト要素に対しても使える
オブジェクトのプロパティを条件として使用する場合、そのプロパティを持っている**オブジェクトそのもの**を取り出して返ってくる

## map
配列内の**すべての要素**に処理を行い、その戻り値から**新しい配列を作成する**メソッド
```javascript:使い方
配列 = [要素１, 要素2, 要素3]

定数（変数） = 配列.filter((引数) => {
   return 処理  // コールバック関数の中の処理は { return 値 } と書く
});
```
※配列のオブジェクト要素に対しても使える
PPPをかんたんに説明してみる

# 勉強前の理解度
* 電話回線に関係あったはず
* 端末間の一対一の通信を実現するとかしないとか
* たぶんデータリンク層


# PPP(Point-to-Point Protocol)の概要
* 一対一の通信を行うためのデータリンク層のプロトコル
* 認証を行う
* 現在はほとんど使われておらず、後継のPPPoEが主流となっている
* TCP/IP以外のプロトコルとも接続できる

# PPP接続の流れ
　PPPでは、上位層のプロトコルに依存しないプロトコルがLCP(Link Control Protocol)、依存するプロトコルがNCP(Network Control Protocol)を使用する。

　通信は以下のような流れになる。
1. LCPによってコネクションの確立や認証(※)を行う
2. ネットワーク層のプロトコルに応じたNCPによってネットワーク層のプロトコルを特定する
3. 実際にデータのやり取りを行う
4. NCP、LCPの順に切断する

※認証に使用するプロトコルは基本的にPAPかCHAPが用いられる。
PAPはパスワードを平文で送るのに対し、CHAPはOTP(ワンタイムパスワード)とハッシュ値を利用してパスワードを隠蔽しているため、CHAPの方がセキュリティの強度が高い。

# PPPの現在
　PPPはADSLなどの電話回線を利用してインターネットに接続するために利用されていたが、現在ではPPPoEやIPoEが用いられている。

### PPPoE(PPP over Ethernet)の特徴
* PPPを用いてイーサネットに接続するための規格
* 現在でも広く使われている
* ネットワーク終端装置を必要とする(おそらくADSLなどを経由するから？)

### IPoE(IP over Ethernet)の特徴
* 直接インターネットに接続する
* そのためネットワーク終端装置を必要としない
* 前述のPPPoEより高速(10倍程度)
* IPv6のみに対応。IPv4には対応していない(そのためIPsecが標準搭載されている)

# 参考
[PPP（Point to Point Protocol）その１ | KENスクールブログ](https://www.kenschool.jp/blog/?p=4516)
[Point-to-Point Protocol - Wikipedia](https://ja.wikipedia.org/wiki/Point-to-Point_Protocol)
[【図解】PPP/PPPoE の認証 (PAP/CHAP/MS-CHAPv2)とシーケンス, callin オプションについて | SEの道標](https://milestone-of-se.nesuke.com/nw-basic/ppppppoe/pap-chap/)
[PPPoEとは？特徴や接続についてわかりやすく紹介！ | ひかりで繋がるテレビ・インターネット・電話！4K放送もTOKAIケーブルネットワークにお任せ！](https://www.thn.ne.jp/blog_detail/id=34)
[マスタリングTCP/IP](https://www.ohmsha.co.jp/tbc/text_series_0201.htm)
Django ウェブページ(template)にスタイルを適用する

# はじめに
こちらの記事の続きで書いています。

https://qiita.com/Nats72/items/d3ad8d88e9ee1e3f0fde

# CSSファイルを作成
アプリケーション別のstaticディレクトリ内に、CSSファイルを作成します。
なければ作成してください。
```css:./app/static/app/style.css
h1{
  color: red;
  font-size: 60px;
}
p{
  color: #333;
  font-size: 20px;
}
```

staticディレクトリの設定はこちらを参照して設定してください。

https://qiita.com/Nats72/items/95c5b2e903261cfbec3c

# 静的ファイルを静的公開ディレクトリにまとめる
INSTALLED_APPSに追加されたアプリケーションの静的ファイルをまとめてくれます。
```python:./config/settings.py
INSTALLED_APPS = [
    ...略...
    'app',    # 追加
]
```

`python manage.py collectstatic`コマンドでまとめます。
実行するかどうか確認がはいるので、`yes`を選択します。
```console
# python manage.py collectstatic

You have requested to collect static files at the destination
location as specified in your settings:

    /code/static

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: yes

1 static file copied to '/code/static', 129 unmodified.
```

# テンプレートにstaticを読ませる記述をする
```./templates/index.html
{% load static%}
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="{% static 'app/style.css' %}">
  <title>{{ title }}</title>
</head>
<body>
  <h1>{{ title }}</h1>
  <p>{{ message }}</p>
</body>
</html>
```
`{% load static%}`を記述することで、静的ディレクトリを参照できるようにします。
`{% static 'app/style.css' %}`で、`./static/app/stype.css`を読み込ませる設定になります。
Step CIでGitHub Actionsを使ったAPI自動テスト

# Step CIとは

Step CIは、APIのテストとモニタリングを簡単にするOSSツールです。

https://stepci.com/

Node、DockerまたはGitHub Actionsでの実行をサポートしています。

# 使い方

使い方はテストの定義を宣言したYAMLファイルを用意してコマンドを実行するだけです。

公式のGet startedをちょっとアレンジして[JSONPlaceholder](https://jsonplaceholder.typicode.com/)に対してテストを行ってみます。

```yaml:tests/workflow.yml
version: "1.1"
name: My API Tests
env:
  host: jsonplaceholder.typicode.com
tests:
  example:
    steps:
      - name: Status 200 OK
        http:
          url: https://{{env.host}}/todos/1
          method: GET
          check:
            status: /^200/
      - name: JSON Schema Check
        http:
          url: https://{{env.host}}/posts/1
          method: GET
          check:
            schema:
              type: object
              properties:
                userId:
                  type: integer
                id:
                  type: integer
                title:
                  type: string
                body:
                  type: string
              required:
                - userId
                - id
                - title
                - body
      - name: Post JSON and Performance Check
        http:
          url: https://{{env.host}}/posts
          method: POST
          body:
            userId: 1
            title: "qui est esse"
            body: "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
          check:
            status: /^201/
            performance:
              firstByte:
                - lte: 500
              total:
                - lte: 1000
```

単純なステータスコードのチェックや、戻り値のJSONスキーマのチェック、JSONのPOSTやパフォーマンス（TTFB）チェックを行っています。
これを実行すると次のようになります。

```bash
$ npm install -g stepci
$ stepci run tests/workflow.yml

 Status 200 OK  PASSED  in 0.1s

Request

 GET  https://jsonplaceholder.typicode.com/todos/1  200 OK

Checks

Status
✔ 200

 JSON Schema Check  PASSED  in 0.094s

Request

 GET  https://jsonplaceholder.typicode.com/posts/1  200 OK

Checks

JSON Schema
✔ [object Object]

 Post JSON and Performance Check  PASSED  in 0.472s

Request

 POST  https://jsonplaceholder.typicode.com/posts  201 Created

Checks

Status
✔ 201

Performance
✔ firstByte: 448
✔ total: 466

✔ example passed in 0.666s

✔ My API Tests (tests/workflow.yml) passed in 0.713s
```

次にこれをGitHub Actionsを使って動かしてみます。

```yaml:.github/workflows/ci.yml
name: ci

on: [push]

jobs:
  api_test:
    runs-on: ubuntu-latest
    name: API Tests
    steps:
      - uses: actions/checkout@v3
      - name: Step CI Action
        uses: stepci/stepci@main
        with:
          workflow: "tests/workflow.yml"
```

![{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96507/d5450d37-2510-5646-65ff-4afed2a728da.png)

公式のアクションが用意されているので定義ファイルさえあれば簡単にGitHub Actionsで動かすことができます。

他にもコマンドラインで環境変数やシークレットを渡したり、Basic認証やSSLのチェックなど基本的なリクエストに必要な機能は網羅されているようです。
まだリリースされて日が浅いようで公式以外の情報は少ないですが、APIのテストをCI/CDに組み込むのに便利に使えそうです。
AzureではAWS Session Managerに匹敵するものがあるのか？

AzureでVMを作成時、認証の種類でSSH公開キーかパスワードを求められるが、AWSみたいにSession ManagerでSSHキーなしで接続とかできないのかググってみた。

https://learn.microsoft.com/en-us/answers/questions/860151/equivalent-of-aws-session-manager-on-linux.html

`Linux VM用にAWS Seesion Mangerに該当するもの(ここではプライベートポートを公開せず、LinuxインスタンスでSSHキーを管理する必要なく、VMへの安全なアクセスができるという意味のようだ。)が、Azure上でないか？`という質問を上記されているが、回答者の知る限りでは`ない`という答えだった。

回答者は他にも代わりに踏み台サーバであればVMにプライベートIPのみのアクセスに制限ができるとのことだが、`Session Managerみたいに簡単にアクセス制限できるサービスはない`ようだ。

Bastionならブラウザ上で接続ができるものの、SSH(RDP)接続になるのでこの方法でも該当しない。
結局VM作成時にもSSH公開キーかパスワードが求められて、接続でもSSHかRDPかBastionの選択肢になるので、AWSとAzureで接続の種類に違いがあるようだ。
ECCV2022の量子化論文 (1)

# 概要

この記事では、[ECCV2022](https://eccv2022.ecva.net/)の量子化論文を紹介します。[^1]

[^1]: 画像や数式は論文から引用しています。


# Synergistic Self-supervised and Quantization Learning

https://arxiv.org/abs/2207.05432

概要：SSQL. 量子化学習とSSL(自己教師有り学習)を組合せたもの。
新規性：量子化フレンドリーな特徴を学習し、下流タスクに適用できるようにした。
キモ：エンコーダ$f$と量子化したものとでロス計算する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/ffe72f9b-4246-56cd-4209-6887f67b31eb.png)
本ロスを小さくすれば、量子化ロスとSSLのロスを両方小さくできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/0bcff682-b594-702d-fb20-10788ed4c1e3.png)
評価：ResNet-18等で実験した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/3023b5db-2365-ab2c-bc48-8715207a792e.png)


# Fine-grained Data Distribution Alignment for Post-Training Quantization

https://arxiv.org/abs/2109.04186

概要：FDDA. ゼロショット(データを使わない)量子化の方法。
新規性：合成データを使うゼロショット量子化で、低ビットでも精度を落とさない。
キモ：BN統計量の近さ、ばらつきに着目したこのようなロスでデータ合成し、クラス間の類似性やクラス内の多様性も表現できるようにする。
- $\mathcal{L}_{BNS}^G $ はBN統計量を合わせるロス。
- $\mathcal{L}_{D-BNS}^G$は、同じクラス内でもばらつきをもたせるロス。
- $\mathcal{L}_{C-BNS}^G$は、同じクラス間で近づけるロス。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/69508cc4-6116-e3f4-55aa-cfd01c86b8ff.png)
評価：ResNet-18, MobileNet等に適用した。


# Patch Similarity Aware Data-Free Quantization for Vision Transformers

https://arxiv.org/abs/2203.02250

概要：PSAQ-ViT. Vision Transformerへのデータ無し量子化適用。
新規性：従来のデータ無し量子化は、キャリブレーション用データ生成がBN統計量ベースだったが、BNのないViTでも適用できるようにした。
キモ：TransformerはMulti Head Attentionで前景パッチにattentionが当たりやすい観察から、パッチ間の類似性が入力データの特徴として使えるという仮説を見出し、ロス$\mathcal{L}_{PSE}$を最適化するとうまいキャリブレーション画像が作られるようにした。
評価：ViT, DeiT, Swin-Transformerで実験した。
【Terraform】tfstateファイルの操作方法

# はじめに
udemyを使ってTerraformの勉強をしたので、tfstateファイルの操作方法についての学習備忘録です。

https://www.udemy.com/course/iac-with-terraform/
# 作成済み環境のリソース一覧を確認
下記のコマンドで、作成済みのリソース一覧を確認することができます。

```zsh
$ terraform state list
```


# リソース詳細の確認
下記のコマンドで、作成済みの リソース詳細を確認することができます。

```zsh
$ terraform state show <詳細情報を確認したいリソース名>
```

# リソース名の変更
コードのみを変更すると、tfstateファイルと差分が生じるため、tfstateファイルを変更してから、コードの変更をします。

## リソース名の変更方法 
最初に、tfstateファイルを変更する。
```zsh
$ terraform state mv <移動元リソース名> <移動先リソース名>
```

最後にコードを修正し、planで確認します。

```zsh
$ terraform plan #　差分がでなければOK
```


# リソースの取り込み
手動で作成したリソースをterraformで管理したいときに
```$ terraform import <取り込み先のリソース名> <取り込みたい稼働中のリソースID>```します。

## # リソースの取り込み方法 
最初に、空のresourceブロックを作成します。

```terraform
resource "aws_instance" "test" {

}
```

インポートコマンドを実行します
```zsh
$ terraform import aws_instance.test <手動で作成したEC2のID>
```

tfstateファイルに詳細が記入されたので、内容を確認します。
```zsh
$ terraform state show aws_instance.test
```

aws_instanceの必須項目に、確認した内容を記入して、完了です。
```terraform
resource "aws_instance" "test" {
  ami           = ""
  instance_type = ""
}
```

# tfstateからリソースを削除

コードのみを変更すると、tfstateファイルと差分が生じるため、tfstateファイルを変更してから、コードの変更します。

## tfstateからリソースを削除方法
最初にソースコードから、tfstateの管理から対象外にしたいリソースを削除します。
次に、コマンドでtfstateからリソースを削除します

```zsh
$ terraform state rm <管理対象外にしたいリソース名>
```

最後に、planで確認します。

```zsh
$ terraform plan #　差分がでなければOK
```

# 現状の反映
実際のクラウド上の状態をtfstatファイルへ反映します
terraformで監理しているリソースを手動で変更してしまった時などに、コードの状態に戻す方法です。

## 現状の反映方法
コマンドで実際のクラウド上の状態をtfstatファイルへ反映させます。
```zsh
$ terraform refresh
```

コードの状態に戻します
```zsh
$ terraform plan #　手動で操作した箇所が差分で表示されます 
$ terraform apply
```
【Swift】Firebase利用時にThe data couldn’t be read because it is missing.が発生する。

<h1>Firebase利用時にThe data could't be read because it is missing</h1>

<p><b><font color="red">エラーの意味:</font></b><br>
データが欠落しているため、データを読み取ることができませんでした。</p>

<p><b><font color="red">対処法:</b><br>
コードで定義したModelの項目数、項目名と、Firebaseに登録する項目数、項目名が正しいかどうかを確認する。</p>

<h3>エラーになる例</h3>

```swift:Model
/** 項目数は11個*/
struct User : Identifiable,Decodable {
    @DocumentID var id : String?
    var username : String
    var fullname : String
    var profileImageUrl : String
    var email : String
    var job : String
    var birth : String
    var gender : String
    var purpose : String
    var price : String
    var url : String
}
```
```swift:Firebaseに登録する内容
/* 項目数は10個
 * Modelの項目数と差分が出ている状態
 */
let data = ["uid" : user.uid, "username" : username.lowercased() ,
 "fullname" : fullname , "profileImageUrl" : profileImageUrl , 
 "email": email, "job" : job , "birth" : birth , "gender" : gender , 
 "purpose" : purpose , "price" : price]
}
```

<h3>エラーにならない例</h3>

```swift:Model
/** 項目数は11個*/
struct User : Identifiable,Decodable {
    @DocumentID var id : String?
    var username : String
    var fullname : String
    var profileImageUrl : String
    var email : String
    var job : String
    var birth : String
    var gender : String
    var purpose : String
    var price : String
    var url : String
}
```
```swift:Firebaseに登録する内容
/* 項目数は11個
 * Modelの項目数と差分が出ていない状態
 */
let data = ["uid" : user.uid, "username" : username.lowercased() ,
 "fullname" : fullname , "profileImageUrl" : profileImageUrl , 
 "email": email, "job" : job , "birth" : birth , "gender" : gender , 
 "purpose" : purpose , "price" : price , "url" : url]
}
```
<hr>
<h3>まとめ</h3>
<p>Firebaseに登録するカラムを追加した時は、Modelの修正も忘れないようにしましょう✊</p>
[Vagrant][permission] Windows のファイルシステム権限周りをリセット Authentication failure. Retrying 解決法




# 問題
突然、(使っていたWindows 10で) Vagrantを利用したvm にssh できなくなった

`vagrant up` で止まる..

```
$ vagrant up
...
    default: SSH auth method: private key
    default: Warning: Connection reset. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
```

Authentication 認証が失敗のよう..

# 原因



直接ssh してみると..


```
$ ssh vagrant@192.168.3.10
Unable to use key file "C:\\Users\\user\\.vagrant.d\\insecure_private_key" (unable to open file)
```

->
permission系の問題のよう

(VMとのファイル共有のため、権限の問題はたまに出てくる
`winnfsd.exe`
https://github.com/winnfsd/vagrant-winnfsd

# 試み

`insecure_private_key` の読み取り権限が問題のようなので

explorer上で 直接ファイルの右click property  で権限を変えたが、
↑は 変わらず、
それだけではだめなよう..


# 解決法

file systemの権限周りをreset してみる。

administrator権限のある cmdで以下実行

```
$ icacls \Users\user\.vagrant.d /reset /t /c /l.
..
Successfully processed 269 files; Failed processing 0 files
```

->

```
$ vagrant up

Success
```

とりあえず、解決したよう。

# 参考

https://winaero.com/reset-ntfs-permissions-windows-10/
AWS DirectConnect経由の名前解決に躓いた話

※現職でスキルアップ発表会等で作成していたものをQiitaに書き起こすシリーズ④
元がppt資料で口頭説明ありきな文章なのでちょっと分かりづらい部分はごめんなさい。

# 現象
- DirectConnectを介してAWSリソースに接続する端末について、IPv4アドレスを宛先とした場合は成功していたが…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/cb6bc039-5b22-08fc-0766-9b90e9a08c5f.png)

- FQDNを宛先とすると接続失敗してしまった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/3e6f43ac-0e48-083e-9e77-57eff393bcfb.png)

# 原因
- インフラ費を抑えるため、1つのDirect Connect Gatewayに複数のVPCを紐づけ
高額なDirectConnectの回線費用を1本分に抑えていた。
ここまでは良いのだが…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/f728e48a-62ac-1aae-b1ff-6cd784330827.png)

- Direct Connectに設定されているDNSサーバがQA環境のもので、そのDNSサーバはSTG環境の名前解決には使えないことが発覚
- 接続元でDNSサーバをSTG環境のものに指定できれば問題なかったが、端末のF/Wはそれを指定できるような作りにはなっていなかった…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/4f9bc465-86b3-d2a0-01fa-c3d4bd86d69f.png)

# 対策までの道筋…

### 端末をDNSサーバが指定できるように改修しよう！
⇒ その時点で改修は困難と端末F/Wチームに言われる。

### もう一本DirectConnectを構成しよう！！
⇒追加費用はもとよりスケジュールが許容できない（開通に数か月かかる）

### いっそ全てIPアドレスで通信するようにポリシー変えよう！！！
⇒EC2等のサーバはそれで問題ないが、API Gateway&Lambdaの部分はFQDNを使わないと接続が難しい。

orz...

# 辿り着いた対策！！！
### QAとSTGでVPCピアリング構成を構築する
- VPCピアリングをすることで、QAのDNSサーバでもSTGのモジュールの名前解決ができるようになる。
DirectConnect->VPC1->VPC2というトラフィックは許されないと思っていたがこの場合の名前解決には使えるとのこと。びっくり。
- VPCピアリングはトラフィックの従量課金式だが、名前解決のための通信であれば金額は誤差程度に抑えられる。
****起死回生のウルトラＣ！！！****
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/0dfcbaf4-4aef-b1bd-f53b-f26d5b8be7bd.png)

# が・・・駄目っ・・・
- VPC Peeringを構成するVPCはSubnetのSegmentが被ってはいけないという制約がある
- 今回両VPCであまりその部分を意識せず構築しており、後からSegment構成を修正しようにも
モジュールの量が多く影響範囲があまりに大きいため挫折…

# 最終的な結果
- 新しく3つ目のVPCを用意し当初求めていた役割はそのVPCに担ってもらった。
- VPCひとつ分の追加費用がかかるが致し方なし

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/08f041d9-f4ba-b4b7-aa67-3ad0e6a75b59.png)

# まとめ
- DNSサーバを指定できない融通の利かない端末・ソフトウェアからDirectConnectを介して接続する場合は名前解決に注意
- ただしVPC Peeringが可能な環境であればVPCをまたいだ名前解決ができる
Django ウェブページ(template)にデータを渡して表示する

# はじめに
こちらの記事の続きで書いています。

https://qiita.com/Nats72/items/752d22ea515fb11c2a3b

# テンプレートに値を渡す
paramsという辞書型データを追加して、render()関数の引数に渡しました。
```python:./app/views.py
from django.shortcuts import render

def index(request):
  params = {
    'title': 'TEST',
    'message': 'こちらはテストページです。'
  }
  return render(request, 'index.html', params)
```

paramsで渡されたデータは、templateで表示させることができます。
引数paramsの中に記述したtitleやmesssageは、以下のように{{}}で囲まれたマスタッシュ構文で表示させることができます。
```./templates/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>{{ title }}</title>
</head>
<body>
  <h1>{{ title }}</h1>
  <p>{{ message }}</p>
</body>
</html>
```
再帰的にフォルダパスを取得する(node)

## lib xlsx install

[xlsx(SheetJS)()](https://www.npmjs.com/package/xlsx)

```bash
npm install xlsx
```

## source

```js
let XLSX = require('xlsx')
let workbook = XLSX.readFile('./xls/ex_-01.xlsx')
let input_sheet = workbook.Sheets['input']
let input_json = XLSX.utils.sheet_to_json(input_sheet)
// console.log( input_json )
let ab_path = [];

function getPath(json, folder_id) {
  var tmp1 = json.find((v) => v.FOLDER_ID == folder_id);
  if (!tmp1['PARENT_FOLDER_ID']) {
    console.log(`###### PARENT_FOLDER_ID 空 : FOLDER_ID = ${folder_id} ##############`)
    return;
  }
  parent_id = tmp1['PARENT_FOLDER_ID'];
  var ret = "";
  if (parent_id != -1) {
    //console.log(tmp1['FOLDER_NAME']);
    ab_path.push(tmp1['FOLDER_NAME']);
    return getPath(json, parent_id)
  }
  ab_path.push(tmp1['FOLDER_NAME']);
  ret += '/' + ab_path.reverse().join("/")
  //console.log(ret);
  ab_path = []
  return ret
}
let output_data = [
  ['FOLDER_ID', 'AB_PATH']
];
for (let cl of input_json) {
  var tmp = "###### FOLDER_ID 空 ##############";
  //console.log( `################# ${cl['FOLDER_ID']} #################` )
  if (cl['FOLDER_ID']) {
    tmp = getPath(input_json, cl['FOLDER_ID'])
    console.log(`${cl['FOLDER_ID']}\t` + tmp)
  }
  output_data.push([cl['FOLDER_ID'], tmp]);
}

var output_sheet = "output";
var ws = XLSX.utils.aoa_to_sheet(output_data);
// TODO: remove exist sheet 
if (workbook.Sheets[output_sheet]) {
  //   console.log("remove sheet = " + output_sheet);
  console.log("update sheet = " + output_sheet);
  workbook.Sheets[output_sheet] = ws;
} else {
  /* Add the worksheet to the workbook */
  console.log("add sheet = " + output_sheet);
  XLSX.utils.book_append_sheet(workbook, ws, output_sheet);
}
XLSX.writeFile(workbook, './xls/ex_-01.xlsx', {
  type: 'xlsx'
});

// 「yyyymmdd」形式の日付文字列に変換する関数
function formatDateInYyyymmdd(date) {

  const y = date.getFullYear();
  const m = date.getMonth() + 1;
  const d = date.getDate();

  const yyyy = y.toString();
  const mm = ("00" + m).slice(-2);
  const dd = ("00" + d).slice(-2);

  return yyyy + mm + dd;
}

// 「hhmmss」形式の時刻文字列に変換する関数
function formatDateInHhmmss() {

  const h = date.getHours();
  const m = date.getMinutes();
  const s = date.getSeconds();

  const hh = ("00" + h).slice(-2);
  const mm = ("00" + m).slice(-2);
  const ss = ("00" + s).slice(-2);

  return hh + mm + ss;
}

// 使用例
const date = new Date();
const yyyymmdd = formatDateInYyyymmdd(date);
const hhmmss = formatDateInHhmmss(date);
console.log(yyyymmdd);
console.log(hhmmss);
```
001~300の連番を持ったフォルダを作成する

(2022/10/23 22:06追記) ShellScript版も追記しました。

# Ruby

```rb
1.upto(300) do |i|
  `mkdir #{sprintf('%03i', i)}`
end
```

# ShellScript

```sh
for i in $(seq -w 1 300); do
  mkdir $i
done
```

---

# 参考にした記事

## Ruby

- [Ruby 3.1 リファレンスマニュアル sprintf フォーマット](https://docs.ruby-lang.org/ja/latest/doc/print_format.html)

## ShellScript

- [創作メモ帳 シェルスクリプトで指定した範囲の数値 (range) を取得する](https://sousaku-memo.net/php-system/1213)
- [UNIX/Linuxの部屋 seqコマンドの使い方](http://x68000.q-e-d.net/~68user/unix/pickup?seq)
簡易検索ビューをカスタマイズする

簡易検索ビューを作っておくと、Datverse検索と簡易な検索で検索をかけられる列を指定できます。

# 簡易検索ビュー作成手順
対象のテーブルの詳細画面にて、[ビュー]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/722c1ee7-0d54-3bec-97e9-d92e202a2ccb.png)

ビューの種類が簡易検索ビュー（Quick Find View）のビューを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/982857a0-32bd-e6f4-5ede-c3ff9a694c3a.png)

ビューの編集画面にて右下の「次で検索...」の「テーブル列の検索を編集します」をクリック
ここで、検索できる列を設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/0b8d19e3-1c98-bf73-4406-09b5635ccfc1.png)

検索をかけたい列を選択し、[適用]ボタンをクリック

:::note warn
ここで複数の列の検索を可能にすることができます。ここで列が選択されてないと検索にかけられません。
:::
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/2cdb586d-12b6-ef13-1cbd-703a626b24ae.png" width=50%>

追加されたことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/3a5edcf1-7020-4e95-9a6d-c567e3d4f61b.png)

さらに検索をかけた時にビューに表示させたい列を表示させ、[公開]ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/55aa6281-93b7-c9b5-aa15-3710bb90a461.png)


## モデル駆動型アプリに簡易検索ビューを追加する
表示させたいモデル駆動型アプリの編集画面にて簡易検索ビューを追加する。
[ページ]＞対象のテーブル＞[ビュー]＞[ビューの追加]で対象の簡易検索ビューを追加で完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/b9c83af7-d79d-57a8-c4da-0a1972412fd3.png)

:::note warn
同じモデル駆動型アプリに入ってるほかのテーブルも検索かけたい場合は、個別でそちらのテーブルでも設定しないといけないのでご注意を！
:::

# 実際の画面
モデル駆動型の実際の画面で確認してみましょう。
右の簡易な検索バーで検索をかけると選択した列でのみ検索がかかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/ff185d55-62f6-0af8-1d1f-a6b82d451711.png)


今度はDataverse検索を使ってみます。こちらはモデル駆動型アプリに埋め込まれたテーブルを横断的に検索をかけることができます。そして、その検索結果には「簡易な検索ビュー」で設定した検索対象が反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/e0789c54-ca19-6457-d0c8-1d18b8add648.png)

# まとめ
簡易検索ビューでは簡易検索とDataverse検索の検索対象を設定することができます。
検索機能を便利に使いたいはぜひここのカスタマイズをやってみてください。
Djangoでウェブページ公開する最低限の設定

# アプリケーションを作成する
以下のコマンドでappディレクトリと付属ファイル一式が作成されます。
```console
# python manage.py startapp app
```

# ルーティングの記述
コンフィグのurls.pyと、アプリケーションのurls.pyにルーティング情報を記述します。
以下は、ルートとなるパスにアクセスがあった場合、appディレクトリのurls.pyを参照する設定です。
```python:./config/urls.py
from django.urls import path, include    # なければ追記

urlpatterns = [
    ...略...
    path('', include('app.urls')),    # 追記
    ...略...
]
```

appディレクトリ内には、urls.pyはありませんので作成します。
以下の記述により、ルートとなるパスにアクセスがあった場合、views.pyのindex()関数を参照するという設定になります。
```python:./app/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index"),
]
```

# ビューの記述
index()関数を参照した場合、index.htmlを参照する設定が書かれています。
ウェブブラウザでアクセスがあった場合、index.htmlの内容が描画されます。
```python:./app/views.py
from django.shortcuts import render

def index(request):
  return render(request, 'index.html')
```

index.htmlの記述です。とりあえず表示させたかったので中身スカスカです。
```html:./templates/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>TopPage</title>
</head>
<body>
  <h1>TopPage</h1>
</body>
</html>
```
KVMを用いた仮想ネットワーク、仮想ルーター構築

※現職でスキルアップ発表会等で作成していたものをQiitaに書き起こすシリーズ③
元がppt資料で口頭説明ありきな文章なのでちょっと分かりづらい部分はごめんなさい。

# KVMとは？
- KVM( Karnel-based Virtual Machine)
    - 名前の通り、Linuxカーネル上にQEMU(CPUエミュレーションソフト)を置き、その上でゲストOSを動作させる。
    - ハイパーバイザ型、完全仮想化(OSに手を入れずに動作する)
    - 2009年～のLinux系OSには標準搭載。
    - それまではLinuxに搭載される仮想化ソフトはXenが主流。
    - 2008年にQEMUをRed Hat社が買収したことでKVMに置き換わった。
    - 仮想ハードウェアを提供するのはQEMU。
    - KVMはLinuxのCPU演算のみをQEMUに仲介する。
⇒KVMはQEMUを高速化するモジュールに過ぎない
    - つまりQEMUとKVMは切っても切り離せない関係

# KVMのメリット
- タダで使える
     - LinuxOS標準搭載だから
    - Windows Serverに標準搭載されているHyper-V等もあるが、KVMは無償Linuxを用いることでOS代すらも節約できる。
    - 有償版Red Hatを用いた場合はベンダーサポートが受けられる。
- カーネル標準搭載で使いやすい
    - 導入の手間がいらない
    - Linux用のドライバがそのまま利用できる
    - Xenは対応カーネルを作る為にカーネルコンパイルせねばならない

# KVMのデメリット
- 準仮想化が使えない
    - 完全仮想化よりも準仮想化の方が処理が早い。
    - ちなみにXenは準仮想化・完全仮想化両方に対応している。
    - virtioを用いることで、完全仮想化の処理遅延はそこそこ解消。
- 歴史が浅い
    - 資料や障害時の事例が少なく、実績も乏しい。
    …と言われてきたが、もはや出てから15年近く経つので多分十分ある。
- GPL
    - 自社内で使う分には気にする必要なし

# 今回の目標
- KVMで仮想ネットワークを構築
- 複数のルータを持ち、必要に応じてビジー状態等を再現できるような環境を作る
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/13c0ffbc-d4e8-c29e-57f6-9e65e9f73381.png)

# KVM管理ツール
- 今回は virt-managerを使用
    - LinuxのX Window System上で動作するGUIなツール
    - API「libvirt」が提供する全ての仮想環境を管理できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/3a191d34-4ced-50b3-9969-ca43a755187b.png)

# KVM管理環境の導入
- OSはCentOS
- yumでqemu-kvm, libvirt, virt-managerをインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/b4e9056e-9976-b8ff-c2e9-1c3a814ed417.png)

# 仮想ルータ作成
①仮想マシン（CentOS）を作成
②作成した仮想マシンのNICを2つに増設
③IPv4フォワーディングを有効にしルーティングの設定を行う

※IPフォワーディング：
　他のホストから受け取ったＩＰパケットをルーティングテーブルに従い別の経路へ
　再送信すること。セキュリティ上の理由から、通常は無効化されている

#### /etc/sysctl.conf
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/9860490a-ad0e-85fe-f294-11ff02670845.png)
### ⇒192.168.10.0セグメントと192.168.11.0セグメントをルーティングするルータが誕生!

# ルーティングテスト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/fd02a352-37a6-e32c-6af7-9fcba2fc1f0c.png)
- Tracerouteし仮想マシンAを経由してpingできてることを確認

# まとめ
- KVMで仮想サーバを作るのは存外簡単
- 今回使ったのはCentOSだが、1マシンあたり最低512MBのメモリを要求してくる。大規模な仮想ネットワーク作成時は十分なメモリを用意すること
Internal-combustion engines, ボッシュ自動車handbook 11版(48) p.642

Internal-combustion engines, Internal-combustion engines, ボッシュ自動車handbook 11版(48)


人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
Internal-combustion engines,642


# Internal-combustion engines,
p.642
## Thermal engines
### Operating principles and concept
### Cycle direction
### Efficiency
### Reclprocating piston engine
### Real cycles

# Reference

[1] WOSCHNI G., Die Berechnung der Wandverluste und der thermischen Belastung der Bauteile von Dieselmotoren MTZ 32, 1970

https://cir.nii.ac.jp/crid/1571417125666520576



# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20221023

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
Electronic transmission control , ボッシュ自動車handbook 11版(47) p.630

Drivetrain, Electronic transmission control  ボッシュ自動車handbook 11版(47)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
# Electronic transmission control(電子変速制御)
p.630
## Fybctuibs abd reqyurenebts
## Transmission control components
## Shift point control
## Hydraulic control
## Electrohydraulic actuators





# Reference

[1] W. Schmnid G.S. Seminar, Aktuatorik zur Steuerung von ktz Automatikgetrieben, Robert Bosch GmbH. 


# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20221023

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
脆弱性診断ってなんぞ？

※現職でスキルアップ発表会等で作成していたものをQiitaに書き起こすシリーズ②
元がppt資料で口頭説明ありきな文章なのでちょっと分かりづらい部分はごめんなさい。

# 脆弱性とは？
-  Webアプリケーション系の脆弱性
    - Webページで想定していないページに直リンできてしまう
    - たくさんクリックされると簡単にサーバダウンする
- 組込みシステム系の脆弱性
    - 「root/root」でログインできてしまう
    - 偽造されたパケットを受け取ると大切な情報を返信してしまう
　　　　　　　　　　　　　　　　　　　　　　　　　　　　…等々
- 放っておくとリスクに晒されることはもちろん
ユーザから「脆弱性に関する認識が甘い」という烙印を押されてしまう

## 脆弱性調査(Webアプリケーション編)
- 自社開発のWebアプリケーションに対し、単体・結合テストで様々なオペレーションを試すものの
あらゆる入力パターン等をテストで網羅することは不可能
そのままだと脆弱性が潜んでいるかも…

- IPAが提示している主なWebアプリケーションの脆弱性11個
①SQLインジェクション　　　
②OSコマンドインジェクション
③パス名パラメータの未チェック/ディレクトリ・トラバーサル
④セッション管理の不備　　　
⑤クロスサイト・スクリプティング
⑥クロスサイト・リクエスト・フォージェトリ
⑦HTTPヘッダ・インジェクション
⑧メールヘッダ・インジェクション
⑨クリックジャッキング　　　
⑩バッファオーバーフロー
⑪アクセス権限や認可制御の欠落

- これだけある脆弱性要素をどうやって検出するか？
⇒脆弱性診断ソフトを使おう！

### OWASP ZAP
- OWASP ZAPは様々なOS用に提供されている無料のWebアプリケーション脆弱性診断ツール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/55f577ef-429d-ce5d-a213-1fda8e4b3ed9.png)
↑こんなの

- 様々な攻撃パターンでWebサーバを攻撃し判明した脆弱性を8段階の深刻度に分けてユーザに教えてくれる

- 弱点
あくまで簡易チェックが目的の無料ツールなので、OSコマンドインジェクションやメールヘッダインジェクションは
満足に検出できないという欠点を抱えている

## 脆弱性調査(組込みシステム編)
- 組込みシステムの脆弱性対応のよくある流れ
①各団体が「○○というソフトに××な脆弱性がある」と公表
②CVE等の脆弱性情報データベースに登録される
③それを見て各エンジニアが自社製品に影響がないか調査
④影響があれば修正しファームウェア更新

### 例：ntp-4.2.8p7で発覚した脆弱性の対処
（システムの時刻を調整するデーモンNTPDのこと)
#### ①CVEやJVNにまとめられた脆弱性概要を確認
#### ②NTPのReadmeを見て更新内容を確認(全文英語）
#### ③4.2.8p6と4.2.8p7のdiffを取り、細かい変更点を確認
#### ④変更された箇所を自社製品が使用しているかどうか確認
#### ⑤使用している場合は部分修正したF/Wを作成しリリース

# まとめ
- Webアプリケーションの脆弱性調査は製品リリース前に是非とも実施しておきたい。ツールは便利。

- CVEに上がるような脆弱性も、顧客から問い合わせを受けることを想定して早めに調査をしておきたい。

- クリエイティブな仕事とは程遠いため退屈な作業だが我慢して推進すべし。
Differential , ボッシュ自動車handbook 11版(46) p.626

Drivetrain, Differential,  ボッシュ自動車handbook 11版(46)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
# Differential(差動器)
p.626 
## Final drive differentials
### Beval gear differential
### Spur  gear differential
### Locking  differential
### Brake intervention with  Locking  differential effect
# Reference
[1] Bernd-Robert Höhn, Klaus Michaelis & Matthias Heizenröther , Kompaktes Achsgetriebe für Fahrzeuge mit Frontantrieb und quer eingebautem Motor, Automobillechnische Zeitschrift Edition, 1/2006

https://link.springer.com/article/10.1007/BF03221762


https://link.springer.com/article/10.1007/BF03221762




# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20221023

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
統計検定2級受かったので実践した勉強法と反省点を書いてみる

# はじめに
本日統計検定２級にギリギリで合格しました。(64/100、合格点60点)
![kd4xnl.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273325/2a8143ae-4af0-91be-4d83-d2afed6a0670.jpeg)
お世辞にも褒められた点数ではありませんが、一応受かったので、どんな勉強法を行ったのかを公開してみたいと思います。
また、これから同試験を受けようとする人たちに向けて、「こんな危なっかしい橋を渡るなよ！」という反面教師として、反省の弁を述べていきたいと思います。

# 著者のスペック
* 20代後半、男性
* 4年制大学卒、文系
* SIer、5年目社員
* 業務で統計学を使用していない

# 統計検定を受けようと思ったきっかけ
　大学に在学中に統計学を面白いと感じており、Rなどを使用した簡単なデータ分析を行っていました。
　しかし、不真面目な学生であった著者は、まじめに勉強などせず、所属していたゼミの目標であった「統計検定2級合格」という目標も叶えられず、そのまま卒業をしてしまいました。(先生が優しい方だったので、単位はくれた)
　そのまま社会人になり5年目、業務には使用していないものの、データ分析業務って面白そうだなぁ～と興味を持ったので調べてみたところ、それに統計学の知識が必要であることがわかりました。
　「それなら、学生の頃に叶えられなかった目標を、5年越しに叶えてやる！」という発想になり、今回の受験に至りました。

# 統計検定の勉強に使った教材
　もともと大学の授業やゼミで勉強していたものの、(ただでさえ中途半端な知識だったうえに)5年もの月日が経ったことですっかり埃をかぶってしまっていました。
　ので、体系的に学ぶため、下記のUdemyの講座を受講しました。
　[統計検定®2級対策講座](https://www.udemy.com/course/toukei-kentei/)

　こちらの講座は、試験用に暗記させるものではなく、体系的な理解をするための解説が丁寧にされており、自分の中で取っ散らかっていた知識を整理させるのにとても役立ちました！
　また、練習問題もあるので、自分がどこで躓いたかが分かりやすいです！
　自分が知識を取り入れるのに使用したものは、上記の講座のみになります。

# 過去問演習
　過去問については、公式サイトに載っている過去問を拾い集めて解いていました。
　[過去問題(2021年版のみ)](https://www.toukei-kentei.jp/prepare/kakomon/)
　[過去問に挑戦(2018-19年の4開催分)](https://www.toukei-kentei.jp/prepare/challengekako/)
　こちらの過去問はPBT方式(紙媒体のマークシート方式)のものだけで、現在行われているCBT方式のものはありません。
　それでも、試験の内容は上記の過去問を解ければ問題なく対応できる内容ですし、問題数と制限時間も同じになっているので、時間配分などの予行演習にもなります！
　また、どういった問題がよく出てくるかも、傾向としてつかめると思います！
　ちなみに、上記サイトでは解説までは載せてくれていないので、下記のブログの解説記事を読み込み、解法の理解に役立てました(大変お世話になりました)
　[統計WEB](https://bellcurve.jp/statistics/blog/19188.html)

# 合格までの道のり
　さて、では実際に勉強し始めた時期からですが、上記の講座を受け始めたのは、今からおよそ2か月前くらいからです。
　(自分の場合は、大学の授業等で予備知識があったこともあるので、完全な初学者の方は、もう少し時間がかかるかもしれません。)
　講座の内容を一通り勉強を終えたのが1か月前ほどで、実はその直後に、一度受験をしました。
　最新の過去問を一度だけ解いてみて、受験してみたところ…

　**結果は、58点で惜しくも不合格**

　原因は様々考えられますが(後述します)、とりあえず合格するためには、「過去問をもっと解く必要がある！」
　そう考えた私は、毎週末に過去問を一開催分解いてみて、時間配分や、出題傾向、さらに、出題範囲の復習を行っていました。

　そうして迎えた本日、冒頭の通り、なんとか**合格**することができました。

# 反省点
　今回、一度不合格になったことも含めて、反省点が多数あるように感じました
　自分が今時点で感じる反省点としては、下記の通りです。

## 時間配分ができていなかった
　一か月前に受けた初回の試験は、特にこれがうまくできていなかったと感じました。
　90分間で30問以上解く必要があるので、1問当たり3分かけることができない計算です。
　解けない問題を早めに飛ばして、解ける問題に時間を充てる、試験独特のスキルを過去問を通じて身につけておくべきと痛感しました。

## 学習時間が短すぎた
　今回の試験に向けた勉強時間は、多めに見積もってみても30～40時間程度です。
　目安として出されている時間数としては、50～80時間とされています。
　時間数だけですべてを測ることはできませんが、自分自身の今回の点数を見た限り、やはりもう少し勉強時間をとり、知識として定着させる必要があったのではないかと感じました。

## 毎日勉強をしておらず、学習間隔が空きすぎていた
　今回の反省点として、最も大きい部分かなと感じています。
　毎週末に過去問を解いて実践練習はしていましたが、[エビングハウスの忘却曲線](https://ja.wikipedia.org/wiki/%E5%BF%98%E5%8D%B4%E6%9B%B2%E7%B7%9A)に見られるように、毎日触れていないと知識は薄れていってしまうものです。(業務で触れていないならなおさら)
　毎日30分でもいいから、講座動画の復習をする、もしくは参考書を買ってそれを読むといった学習をするべきだったのかなと反省しています。

# 最後に
　今回ギリギリではあったものの、文系出身の自分でも**合格**の二文字を手にすることができました！
　この記事が、自分と同じような文系出身の方々を勇気づけられたり、参考になるポイントがあれば幸いです。
　また、今後自分が別の試験を受ける際に、同じ轍を踏まないよう次につなげていきたいと思います！
python chromedriverのpathを通せなくて困った話し

python3でselenium　chromedriverをmacでインストールするのにターミナル
`brew install chromedriver`

で、インストールまでは良かったけど
```
driver = webdriver.Chrome() 〜省略〜
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH
```
のエラーメッセージ
パスが通ってないのはすぐに分かったけど、
homebrewでインストールしたchromedriverがどこにあるのか見当たらず。
下記のコマンドでHomebrewにインストールされたパッケージの場所の確認ができるとのことなので実行
```
brew --prefix chromedriver
Error: No available formula with the name "chromedriver". Did you mean chrome-cli?
```
なんでー！
再インストールしたり色々やったが手も足も出ず。

https://qiita.com/derodero24/items/9e9567790bde9e4b9d0c

こちらの記事で
`import chromedriver_binary`でパスを通すと記載を見つけました。
なかなかコピペだけで出来るものでもないことを認識しました。

感謝です。

結果的に的外れだったけど参考にしたサイト
・https://miyashinblog.com/chromedriver-selenium/
・https://qiita.com/w5966qzh/items/4c1164bd7c611820c187
・https://www.wakuwakubank.com/posts/398-mac-homebrew/
・https://boardtechlog.com/2020/08/programming/seleniumchrome%E3%81%A7%E3%82%88%E3%81%8F%E4%BD%BF%E3%81%86chromeoptions%E3%81%BE%E3%81%A8%E3%82%81/
・https://hacknote.jp/archives/26262/
・https://doku-pro.com/chromedriver-mac-windows/
Linux起動時の大まかな流れ

※現職でスキルアップ発表会等で作成していたものをQiitaに書き起こすシリーズ①

# Linux起動時のおおまかな流れ
カーネルの読み込み
↓
CPUの初期化、各種ドライバの読み込み
↓
initプロセスの開始

# カーネルの読み込み
- カーネルの読み込みはブートローダを介して行われる
　(grub等)

- 新しくカーネルを入れ替える場合
    - apt-getを使う、Kernel.orgからインストールする等してカーネルソースを取得
    - make installすると、/boot下にカーネルイメージファイルが生成される　
（このとき、必要でない機能の部分を組み込まずにモジュール化することによってカーネルのスリム化を図れる）
    - ブートローダにカーネルイメージを登録する
（新しいカーネルが上手く起動されなかった場合に備え、古いカーネルも登録しておくのが常套手段とされる）

### 具体例(Fedora)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/212865a7-4209-9a82-e8d0-e97efbbdb807.png)

※/boot/ymlinuz-*** がカーネルイメージファイル

#### /etc/grub2.cfg   (同様にFedora)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/0830b761-377e-7811-c7d7-12668f6a3a5f.png)


# CPUの初期化、各種ドライバの読み込み
- 起動に必要なドライバは以下のどちらかの手段で置かれている
①カーネルに組み込まれている
②initrdファイルに格納されている


- initrd(Initial RAM Disk) 
           初期化用の仮想RAMディスクファイル
※前頁の「grub2.cfg」でもカーネルイメージと同時に登録されている

## 何故わざわざドライバを「カーネル組込み」と「initrd」に分ける必要があったのか？

- Linuxは多機能化によるカーネルイメージの肥大化対策として機能をモジュール化している
- モジュール化の対象には各種ドライバも含まれているが、起動時に必要なドライバは起動時RAMに展開する必要があった
- カーネルが新しいH/Wに対応していなくても、その装置に対応したモジュールをinitrdに用意すれば、そのドライバがRAMディスク上に展開される


# initプロセスの開始

- init
カーネルが一番最初に実行するプログラム
/etc/inittabに従って、ホスト名やIPアドレスのセット、キーボードの設定などを行う。

- inittab
initがどのスクリプトを呼び出すかが定義されていた
0~6のランレベル毎に初期化スクリプト/etc/rc3.d , /etc/rc5.d等が定義されている。

※現在はsystemdがinittabの代わりを務めている。
　ランレベルに相当する概念 **.target により幅広い状態に対応した初期化スクリプトを実現している

### /lib/systemd/system/rc-local.service (Fedora)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920930/ba88993a-4992-690b-859b-bd9b3a4f0cf4.png)

# まとめ
- カーネル立ち上げ時に実行したい処理を挿入、あるいは削除する際はsystemd配下の処理を修正することで実現可能
- とはいえこの情報は2016年の頃のFedoraのものなので今のLinuxで通用するかは…？
Step-up gear units, ボッシュ自動車handbook 11版(45) p.608

Drivetrain, Step-up gear units, ボッシュ自動車handbook 11版(45)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022

https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
# Step-up gear units(変速器)
p.608
## Components in manually shifted transmission
## Manually shifted transmission
## Automated manual transmissions 
## Dual-clutch transmissions 
## Automatic planetary transmissions 
## Continuously variable transmissions 
## Commercial vehicle transmissions
# Reference
[1] H. Naunbeimer, B. Bertsche, J. Ryberz, W. Novark, 
前の章と参考文献が同じ。理由は？

# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20221023
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
【Rails】Twitterクローンを作ってみた 〜ログイン周り編〜

## はじめに
現在、railsを用いてtwitterのクローンを作成しております。今回はログインまわりについて私が書いたコードをもとに、アウトプットしていきます。※こちらはdockerでの環境構築を省きます。
## サービス環境
- ruby 3.0.0
- Rails 6.0.4
- docker
- mysql 8.0.2
- Slim, SCSS

## ログインとサインアップ
#### 条件
- ログイン・サインアップ・トップページの作成
- ユーザーモデルの作成
- ログイン画面・サインアップ画面の作成
- ログイン中はトップページに自分の名前とつぶやきボタンが出る。(ボタンはまだ動作しなくて良いです。)
- ログアウトができること
- トップページはタイムライン以外の部分を作成してください。
- Deviseを使用しユーザーを作成してください。そしてログイン・ログアウト・サインアップができるようにしてください。
#### 実装流れ(簡略)
① gem(bootstrap, slim, devise等)の追加、bundle install
② deviseをインストールし、ビューとモデル(User)を作成する
③ routes.rb編集
④ userクラスにnameカラムを追加(rails g migration)
⑤ db:migrate、userモデル編集
⑥ deviseでusersコントローラ作成
⑦ routes.rb編集
⑧ ログインとサインアップのビューを作成し、見た目を整える
⑨ homeコントローラ作成
⑩ TOPページ(homeコントローラのビュー)を作成し、見た目を整える
#### ログイン画面
![スクリーンショット 2022-10-23 19.56.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1961802/4e45732e-310b-67e3-d01f-0857707fb40d.png)
ここではgithubでのサインインの実装はしておりません。

#### サインアップ画面

![スクリーンショット 2022-10-23 19.56.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1961802/acb6f743-ef98-39e9-6510-674b855e19ea.png)
見た目は Amazonのログインページを参考にしました。

## 実装を通して学んだこと
#### 1. deviseの活用方法
deviseコマンドを用いて、Userモデルやそのコントローラ、ログイン、サインアップのビューを自動的に作成できることを学んだ(今回は条件に合わせてhtmlを変えた)。非常に便利なものでした。
#### 2. 様々なgemについて
bootstrap, slim, rspec-rails, devise, kaminari等色々なgemの機能を知ることができました。
#### 3. コミットについて
機能を追加するごとにコミットを分けると後から見たときにとてもわかりやすいことに気づくことができました。
## 感想
今回の実装はdeviseの活用方法以外は割とすんなりできたのではないかなと感じました。どちらかというとhtmlとcssに苦労しました。慣れるまでたくさん書いていこうと思います。
次回は**ユーザー詳細ページの作成**についてアウトプットしていこうと思います！読んでいただきありがとうございました。
Concurrencyとは

Goでの並列処理について調べていたらConcurrencyというキーワードが出て来たのでなんぞと思って調べてみました。

## Concurrencyとは
- 「同時性」という意味。「並行性」とも呼ばれる
- 複数のタスクを同時に実行している状態
- 一つのタスクが完了してから次のタスクを始めるわけではなく、**複数のタスクがそれぞれ実行中**の状態になる
- アプリケーションを**高速化**するための仕組み・プログラムのデザイン
- Parallelism(並列性)は言葉は似ているが、プログラムというよりランタイムの性質で、「複数のCPUを使っている状態」を指す。「並行かつ並列」な状態や「並行だけど並列じゃない状態」は両方ありえる

ConcurrencyとParallelismの違い
[Difference between Concurrency and Parallelism](https://www.geeksforgeeks.org/difference-between-concurrency-and-parallelism/)

## Concurrencyで速くなる仕組み
一つのCPUしか使わないんだったらいくらタスクを切り刻んで順番入れ替えてもトータルの速さは変わらないんじゃ？と考える人もいるかも知れませんが、「**I/OなどCPUを使わないけど時間がかかる処理**をしているタスクは他のタスクにCPUを譲り、CPUの待ち時間を減らすことで、結果的に全部のタスクが終わる時間が速くなる」ということのようです。

**コンロが一個しかない料理屋**みたいな感じです。（自分の料理を作り終わってから他の人にコンロを渡すのではなく、コンロを使ってないときは他の人に使わせる）

↓Concurrentじゃないプログラムで複数のタスクを実行した場合（CPUの待ち時間が発生する）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253501/77289c3a-7c96-69ab-fcaf-d1e24e538985.png)

↓Concurrentにした場合（CPUの待ち時間が無い）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253501/144982a7-2dde-847c-e240-b0e856644465.png)

画像引用元: https://realpython.com/python-concurrency/#what-is-concurrency

## Concurrentなプログラムのデメリット
一見画期的に見えますが、以下のようなデメリットがあり、闇雲に導入すればいいというわけではないようです。

- 複雑さが増す
- 工数がかかる
- Concurrencyをキープするための仕組み（semaphore、mutex、lockなど）の初期化と終了にかかる時間、デッドロックやリソーススタベーションを防ぐための処理が追加されるので場合によっては遅くなる

Concurrencyのオーバーヘッドについての記事
[Is Concurrency Really Increase the Performance?](https://towardsdatascience.com/is-concurrency-really-increases-the-performance-8cd06dd762f6)
Power take-up elements and Vibration isolation, ボッシュ自動車handbook 11版(44) p.600

Drivetrain, Power take-up elements and Vibration isolation,  ボッシュ自動車handbook 11版(44)

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

に掲載した本のうち、「新人プログラマ応援」企画で「私の推薦書３３冊」として３３冊紹介した。

新人プログラマ応援　私の推薦書３３冊
http://qiita.com/kaizen_nagoya/items/98c62f051dbdb4f8aca2
残りの６７冊から、順に過去の読書感想を引用し、新たな読書感想文を追記する。

 <この項は書きかけです。順次追記します。>


# ボッシュ自動車ハンドブック version 11, 2022

Automotive Handbook  May 2, 2022
https://www.amazon.co.jp/dp/1119911907/

ボッシュ自動車handbook(英語)11版(0)＜エンジニア夏休み企画>【読書感想文】
https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538
Refrigerants for air-conditioning systems, 591
Drivetrain(駆動系), 594
#  Power take-up elements and Vibration isolation
p.600

## Single clutch 
## Dual clutch 
## Hydrodynamic torque converter 
## Vibration isolation

# Reference

[1] H.Maimbeomer, B. Barlsche, J. Ryberz, W. Novak, P. Fletkan, Fahrzeuggebtebe, Grundlagen, Auswahl, Auslegung und Konstruktion

https://link.springer.com/book/10.1007/978-3-662-58883-3

[2] Nutzfanhizeugtech


# 自己参考資料(self reference)

ボッシュ自動車ハンドブック 

https://qiita.com/kaizen_nagoya/items/8e330ce57880f04d71d9
ボッシュ自動車handbook(英語)10版　目次

https://qiita.com/kaizen_nagoya/items/57c799ff544c96efdea9

自動車工学とBosch Vehicle Handbook

https://qiita.com/kaizen_nagoya/items/d13ff6b0e4d7c8907c0d

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20221023

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.