OmniAICreator/Qiita-1.07M huggingface dataset:
linux mint 再起動時の /oldroot error の解決

# linux mint 再起動時の /oldroot error の解決

# 環境
- surface go 第1世代
    - ntel© Pentium© CPU 4415Y @ 1.60GHz × 2

- kernel : 5.15.0-71-generic
- OS : Linux Mint 21.1 Cinnamon 5.6.8

# error内容

linux mintの再起動実行時`Failed to unmount /oldroot: Device or resource busy`が出て、シャットダウンしない

# 試したこと

https://github.com/systemd/systemd/pull/23348#issuecomment-1200146465

-> 上手くいかず

# 解決

https://ubuntuforums.org/showthread.php?t=2464791

-> 直った

---
※　2023/05/19 加筆

# 再びエラーが

再びエラーが出るようになった。カーネルの問題か。
ChatGPTで「お釣りのパラドックス問題」をもう一度考えてみる

# お釣りのパラドックスとは
詳しくは[「お釣りのパラドックス問題」でChatGPTとGPT-4を比較してみました](https://qiita.com/YutaroOgawa2/items/ebcd9e0d75ef4f7acbf9) を参照してください。

# 疑問点
巷ではChatGPTが人の職業を奪うといわれていますがにわかには信じがたく、今回の件に関してもChatGPT君はただ単にそれっぽい答えを返しているだけなのではないかと推測しました。
そこで、お釣りのパラドックスの数字や名前をいじくって **本当にChatGPTは計算して出力できるのか** を調べようと考えました。

ちなみにここで言う計算とは、そこまで複雑なものではなく多くの人間がしているような真っ当な算術のことです。

# 条件
・使用するのはGPT-4
・新しいトークを作って話す（履歴からの影響を切り離す）
・与えるプロンプトは[過去記事](https://qiita.com/YutaroOgawa2/items/ebcd9e0d75ef4f7acbf9)と同一

# 結果
## 過去記事と同様のプロンプトを与えた場合
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333678/b1f796e6-abb1-148c-4be0-16be26ec68b5.png)
ムムム…まあ間違ってはいないのかな………………………あれっ！？

「**誤った計算方法では、2,700円（食事代）+ 300円（返金された金額）+ 200円（レジの店員がもらった金額）となり、3,000円になる**」

何やら怪しい文言があります。

もう少し詳しく聞いてみましょう。

![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333678/db579d4d-691c-679d-0dac-d93a51a5bff7.png)


**あら………………………………………。**
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333678/cd3b0283-0a00-f663-22a0-d8cf523e1c0b.png)
どうやら足し算が苦手なようです。
あるいは私の計算能力が御雑魚様なのか。

少し問い詰めてみます。
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333678/f4563fca-b1fc-816b-3bcc-2586173f2814.png)
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333678/259b4cb6-7fe7-3dec-c204-c08e377eed79.png)

**すべて解決しました。合計金額は2,900円です！**

## 名前や数字をいじった場合
もし暇な方がいればやってみてください。
まさか元の文章ですらダメになるとは思わなかったのでこの記事はここでストップです。

# 結論
・過去記事で言及されていた理解能力が我が家のChatGPT君には備わっていなかった。
・ChatGPT君に足し算は早い。
・合計金額は2,900円()
スーパーリロード（Ctrl + F5　/　⌘ + R）とは

## スーパーリロードとは？

ブラウザに残っているキャッシュを無視して、最新のページ情報を読み込む方法
→新しいデータが反映されてWebサイトがきちんと表示されるようになる


##### ショートカットキー
- Windows　Ctrl + F5
- Mac　　　⌘ + R


##### キャッシュの削除がなぜ必要か
古いWebページ情報の表示や容量の肥大化を避けるため


##### キャッシュの場所

ChromeのキャッシュはWindows10、8、7ともに同じ場所にある

エクスプローラー↓
C:\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data
この中にDefault ProfileなどのフォルダがありCacheフォルダの中にキャッシュがある

***
memo

このキャッシュはChromeが保持している
トムキャットを立て直しただけではキャッシュは消えていない
Anacondaをinstall for all usersした上にpipを使ってハマった話

Anacondaでinstall for all usersした上にpipを使うというクレイジー行為を行った人の末路を，備忘録として残します．
## 環境
* Windows 11
* Anaconda

## やったこと
* Anacondaをall usersが使えるようにインストール
* 環境変数の手動設定

## 生じた問題
### 問題1
すべてのライブラリが対話モードでimportできなくなった．
エラー文はこんな感じ．
```
ImportError: cannot import name 'Sequence' from 'collections' (C:\ProgramData\Anaconda3\lib\collections\__init__.py)
```

### 問題2
pip によるライブラリのインストール先が
```
c:\users\USERNAME\appdata\roaming\python\python310\site-packages
```
になった．Anacondaをfor all usersでインストールしたため，本来はusersの下ではなく，
```
c:\programdata\anaconda3\lib\site-packages
```
にインストールされてほしい．

## 対処法
* Anacondaのアンインストール
* Anacondaをjust for meでインストール
* c:\users\USERNAME\appdata\roaming\pythonディレクトリの削除

```
c:\users\USERNAME\appdata\roaming\python
```
のディレクトリを削除しないと，
```
C:\Users\USERNAME\AppData\Roaming\Python\Python310\site-packages
```
にpip installされてしまう．

以上の作業により問題は解決した．

## 結論
* Anacondaはjust for meでインストールする
プロジェクトマネジメントのトリセツ

# はじめに
エンジニアに特化した内容ではないが、プロジェクトを進めるにあたり
必要な要素がわかりやすくまとまっていて
PJを進めていく上では理解しておかなくてはいけないことが多かったのでまとめ。
会社でPJを進めていく事例と共に紹介されているので読みやすい。

[プロジェクトマネジメントのトリセツ](https://www.amazon.co.jp/%E3%81%93%E3%82%8C%E4%BB%A5%E4%B8%8A%E3%82%84%E3%81%95%E3%81%97%E3%81%8F%E6%9B%B8%E3%81%91%E3%81%AA%E3%81%84-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E3%83%88%E3%83%AA%E3%82%BB%E3%83%84-%E8%A5%BF%E6%9D%91%E5%85%8B%E5%B7%B1/dp/4909400834/ref=asc_df_4909400834/?tag=jpgo-22&linkCode=df0&hvadid=296235215685&hvpos=&hvnetw=g&hvrand=16509733481818087763&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009435&hvtargid=pla-602317207857&psc=1&th=1&psc=1 "プロジェクトマネジメントのトリセツ")

# プロジェクトを理解しよう
## プロジェクト失敗の色々
- 空中分解プロジェクト
- 言い訳プロジェクト（もみ消しプロジェクト）
結果空中分解プロジェクトとなる。
- オーナー不在プロジェクト
- 見切り発車プロジェクト
- 丸投げプロジェクト
- ダボハゼプロジェクト
あれもやろう、これもやろうとなるプロジェクト。
「選択と集中」が大切。不要なものはやらないこと。
成果に集中すること。

## 既存組織とプロジェクト
- 既存組織
運用。日常業務
毎年の業績目標の達成
継続的組織
- プロジェクト
新しい枠組みを作る
特定の目的・目標を作る
臨時組織

プロジェクトに参加する場合は専任体制なのか兼務なのか決めておく必要がある。
兼務の場合プロジェクトに関与する割合を明確化する。
割合に応じで既存組織のノルマを軽減する。
マトリクス組織ではメンバーの直属の上司の理解が不可欠。

私もこの兼務することが多いのでこのあたりをしっかり握っていないと
パンクするし、うまく進めることができなかった。

# プロジェクトマネジメントを理解しよう
## プロジェクトマネジメントの５原則
- プロジェクトフェーズとライフサイクルの原則
    - プロジェクトの不確実性を回避するために適切なフェーズに区分して実施する
    - プロジェクトの開始と終結（ライフサイクル）を明確にしなければならない
- プロジェクト・ステークホルダー明確化の原則
    - プロジェクトにかかわるステークホルダー（利害関係者）を明確に定め、それぞれのプロジェクトでの位置付けとその期待・ニーズを明らかにしなければならない。
- 組織影響の原則
    - プロジェクトに影響を与える要素を明確にして、プロジェクトを計画しなければならない。
- プロジェクト運営知識・能力確保の原則
    - プロジェクト運営に必要な知識と能力を備えていなければならない
- 社会経済的影響の原則
    - プロジェクトに影響を与える現在および将来の社会経済的要素を十分考慮してプロジェクト運営しなければならない。

# プロジェクトのテーマ設定とフェーズ分割
- 事業目標とプロジェクト目標の方向性を一致させる
- フェーズを分割してプロジェクトにメリハリをつける
- マスタープランを作成してから計画書を作成する

# プロジェクトの立ち上げと計画立案
- プロジェクト計画でPDCAを回す
- ５W２Hを明確化する
- 目的（単純明快に表現）と目標（QCDで定義）を定義する
- 対象範囲の明確化
- 制約条件の確認
- 主要成果物リストを作成する
- WBSとガントチャートの作成

# プロジェクトの実行とフェーズ１
- フェーズ１（戦略策定）
- 中間報告の実施

# プロジェクトの継続と最終報告
- フェーズ２（システム設計）
- フェーズ３（システム開発）
- フェーズ４（導入運用）

## プロジェクト成功のためのチェックリスト
- 事業目的とプロジェクト目的の整合性が明確になっていること
- プロジェクトオーナーを明確化する
- オーナーやステークホルダーのプロジェクトへの理解
- プロジェクトマネジメントの知識を身につける
- 目的志向の風土を目指す
- 結果を立ててPDCAを回す
- ５W２Hを明確にする
- 計画不足、予算不足、準備不足の解消
- マトリックス組織では、関与する割合を明確化する
- 情報を共有し、フラットでオープンな組織に
- コニュニケーションチャネルの明確化
- フォーマットや会議体の明確化
- マイルストーンをおく
- 集中討議の活用で結束力を高める
- 全員が目標達成に向かう状態を作り上げる
- プロジェクトでの活動を、人事考課へ正しく反映させる
- トレードオフ、コンフリクトへの早期対応

# まとめ
PJには多く参加してきているけれどそれなりに大きなPJでも
ここまでしっかり管理できてるPJは少ない。
改めてチェックリストに沿ってできていない部分を対応していこうと思う。
Nuxt3でSSGを生成するとindexが404になる問題

備忘録として

## 環境
### ホスティングサービス
- AWS Amplify(S3)

### フォルダ構成
```
/src
  +--.nuxt
  +--.output
  +--...
```

## 現象
ローカル開発下では問題なかったのに、Amplifyにデプロイするとトップページのみ`404`が帰ってきて真っ白な画面が表示される現象があった。
どうもこの現象はglobalなmiddlewareを作成した時ときのみ発生する模様。

Amplifyのビルドコマンドは以下：
```
version: 1
backend:
  phases:
    build:
      commands:
        - echo "********* IGNORE BACKEND CHECK/PUSH **********"
frontend:
  phases:
    preBuild:
      commands:
        - cd src
        - npm ci
    build:
      commands:
        - echo ${env}
        - npm run generate:${env}
  artifacts:
    baseDirectory: src/dist/
    files:
      - '**/*'
  cache:
    paths: []

```

## 対応
ビルド設定のデプロイファイルパスを`src/dist/`から`src/.output/public/`に変更すると解決した

```
version: 1
backend:
  phases:
    build:
      commands:
        - echo "********* IGNORE BACKEND CHECK/PUSH **********"
frontend:
  phases:
    preBuild:
      commands:
        - cd src
        - npm ci
    build:
      commands:
        - echo ${env}
        - npm run generate:${env}
  artifacts:
    baseDirectory: src/.output/public/
    files:
      - '**/*'
  cache:
    paths: []
```

## メモ
Amplifyでバックエンドを使用していない場合、ビルドコマンドに適当なechoを入れるとデプロイ速度が若干改善する
```
backend:
  phases:
    build:
      commands:
        - echo "********* IGNORE BACKEND CHECK/PUSH **********"
```
バックエンドを使わないのはAmplifyの良さを潰しているような気もしなくもない。
Udemyで英語講座を翻訳する方法

# 背景
英弱なのにUdemyで勉強するとき英語講義動画を購入して，講義内容があまり理解できなかったため
- Symfony（PHPのフレームワーク）の勉強をしようと思っていたのですが，日本語の記事やドキメントがかなり少ないフレームワークです
- そこで，Udemyで動画講義を購入したのですが，こちらも英語なので日本語に翻訳したいという背景です
- 自分で書くより分かりやすい記事があるので貼るだけです

# 方法
いくつかありますが，今回は私が試したものを紹介します

## Chrome拡張機能【Video CC translator】で翻訳してもらう方法
拡張：https://chrome.google.com/webstore/detail/video-cc-translator/fhbpmacbgklobobcieiaoibpjhdnmcfn
やり方：https://nokonokonetwork.com/certificate/how-to-automatically-translate-english-into-japanese-on-udemy.html
自分は拡張の設定で「ビデオの下に表示」にして，Udemyの方の字幕をオフにしてます
![スクリーンショット 2023-05-08 1.04.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519081/48761dee-5ba9-89e2-a315-da82341c8920.png)


## Edgeで翻訳してもらう方法
やり方：https://terupro.net/udemy-translation/
ちなみに右下の「自動スクロール」にチェック入れると勝手にスクロールしてくれて便利
![スクリーンショット 2023-05-08 1.01.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519081/ab68627c-6ad4-09c1-a4f1-da0f4b47ca3e.png)

## ［有料］Chrome拡張機能【Udemyデュアル字幕 - 字幕翻訳者】で翻訳してもらう方法
https://chrome.google.com/webstore/detail/udemy-dual-subtitles-subt/mpedooclpiggpfamidjeemfjoeakebce?hl=ja

# 所感
個人的には動画と字幕を近い位置に表示させられるVideo CC translatorの方が好みです
![スクリーンショット 2023-05-08 1.06.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519081/0fff303c-120a-84ab-8e85-48a5a8981032.png)

ただ，どちらもGoogle翻訳使っているので，誰かChatGPTとかDeepLのAPI使って新しい拡張機能作ってほしいななんて思ってみたり（探したらあるかも？てか自分で作れ）

ではまた
Azure, AWS, Googleで利用可能な量子コンピュータ-2023年版

# 各社のサービス
比較対象のサービスはMicrosoft Azure, AWS, Googleです。
各社ともオリジナルの量子コンピュータを研究開発しつつも、主にユーザー向けに提供しているのは別の他社のハードウェアで、それを自社サービスに統合してサービス提供しています。

## Azure Quantum
https://learn.microsoft.com/en-us/azure/quantum/

## AWS Bracket
https://aws.amazon.com/jp/braket/

## Google Quantum AI
https://quantumai.google/

Azure, AWSとは違い、GCP上では明示的にサービス提供してないのがGoogleの特徴。
GCPは[Cirq](https://quantumai.google/software)というOSSフレームワーク経由で他のバックエンドサービス（ハードウェア）に接続します。
現状は、Cirqを使って、[Google Quantum Engine API](https://quantumai.google/cirq/google/engine)を呼び出すしか方法がないです。

# サポートマトリクス
プロバイダー | 方式 | Azure | AWS | GCP
---|---|---|---|---
[Quantinuum](https://www.quantinuum.com/)| イオントラップ|o|-|-
[IonQ](https://ionq.com/)|イオントラップ|o|o|Cirq
[Alpine Quantum Technologies](https://www.aqt.eu/)|イオントラップ|-|-|Cirq
[Honeywell](https://www.honeywell.com/us/en/company/quantum)|イオントラップ|-|-|Cirq-Pennylane
[Rigetti](https://www.rigetti.com/)|超伝導|o|o|Cirq
[Quantum Circuits, Inc](https://quantumcircuits.com/)|超伝導|o|-|-
[Oxford Quantum Circuits](https://oxfordquantumcircuits.com/)|超伝導|-|o|-
[Google Sycamore](https://quantumai.google/cirq)|超伝導|-|-|o
[Quantum Inspire (Starmon-5)](https://www.quantum-inspire.com/)|超伝導|-|-| Cirq-Pennylane
[Quantum Inspire (Spin-2)](https://www.quantum-inspire.com/)|超伝導|-|-| Cirq-Pennylane
[Pasqal](https://pasqal.io/)|中性原子|o|-|Cirq
[QuEra](https://www.quera.com/)|中性原子|-|o|-
[Xanadu](https://www.xanadu.ai/)|光|-|o|-
[D-Wave](https://www.dwavesys.com/)|量子アニーリング|-|△|-

**凡例**
- o: サービスに直接組み込まれて提供
- -: サービスに直接組み込まれてない
- △: 過去はサービスに直接組み込まれていたが、現在はサポート対象外となってしまった
- Cirq: Cirqによってサポート
- Cirq-Pennylane: Cirqの3rd partyライブラリとしてPennyLaneがサポート
gitで特定ファイルだけコンフリクト無効で強制マージ


言語ファイルなどが当てはまると思うが以下のような条件にあてはまるものを対応させたい

* よくコンフリクトする
* 追記のみ
* どちらも適用させる

## 特定のファイルのみ

```
$ vim .gitattributes

*.json merge=union
```

## すべてのファイル


```
$ vim .gitattributes
merge=verify
```

## 以下コマンドうったときの参考


https://git-scm.com/docs/gitattributes

https://stackoverflow.com/questions/5074452/git-how-to-force-merge-conflict-and-manual-merge-on-selected-file

```json
{
    "ja": {
        "message": {
            "welcome": "ようこそ！",
<<<<<<< HEAD
            "thank": "ありがとう！"
=======
            "byebye": "さようなら！"
>>>>>>> feature/add-byebye
        }
    }
}

```


```json
{
    "ja": {
        "message": {
            "welcome": "ようこそ！",
<<<<<<< HEAD
            "thank": "ありがとう！"
=======
            "byebye": "さようなら！"
>>>>>>> feature/add-byebye
        }
    }
}
```


```json
{
    "ja": {
        "message": {
            "welcome": "ようこそ！",
            "thank": "ありがとう！"
            "byebye": "さようなら！"
        }
    }
}
```
VSCodeのMarkdown PDFでLaTeXを使えるようにする

Markdownファイルの末尾か、``template.html``の``{{{content}}}``の直後（または次の行に）このコードを追加してください。``template.html``は、Windowsの場合は``C:/Users/<USER_NAME>/.vscode/extensions/yzane.markdown-pdf-1.4.4/template/template.html``にあります。

```html
    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
    <script type="text/x-mathjax-config">
        MathJax.Hub.Config({ tex2jax: {inlineMath: [['$', '$']]}, messageStyle: "none" });
    </script>
```

## 余談

[プルリクエスト](https://github.com/yzane/vscode-markdown-pdf/pull/314)は出ていますが、記事執筆時点ではまだマージされていません。数式が長くてはみ出してしまう場合は、[こちら](https://github.com/yzane/vscode-markdown-pdf/pull/314#issuecomment-1502766886)を参考にしてください。

## 参考文献

- [Cant display math formula incorrect · Issue #237 · yzane/vscode-markdown-pdf](https://github.com/yzane/vscode-markdown-pdf/issues/237)
- [Is there an option to render LaTex formulas? · Issue #151 · yzane/vscode-markdown-pdf](https://github.com/yzane/vscode-markdown-pdf/issues/151)
- [how to export pdf with latex · Issue #21 · yzane/vscode-markdown-pdf](https://github.com/yzane/vscode-markdown-pdf/issues/21)
Active DirectoryとAzure AD

## 前書き
Azureの勉強をしていたのですが、どうもActive DirectoryとAzure ADというオンプレ用の認証認可サービスと、クラウド用の認証認可サービスがあるらしい。そういえばAWSの勉強でもActiveDirectoryがでてきてややこしかったのを思い出しました。Azureの勉強をするにあたって、まずここを理解しておいたほうがいいと思ったので、まとめることにしました。

## Active Directory
オンプレミス環境で使用されるディレクトリサービス。
オンプレのイントラネットにおいて、ユーザーやコンピューターなどのリソースの認証・認可をするためのサービスだと思っていればだいたい何とかなるはず。

ディレクトリサービスなので、階層構造を利用して認証・認可の管理をしている。
「フォレスト」「ドメイン」「OU」などの階層構造にまつわるお話は今回は割愛する。
気になる人は[こちら](https://wa3.i-3-i.info/word12820.html)を参照されたい。（されたいって何？これどういう意味で使ってるんやろ。使ってみたかっただけです。）

主にKerberosプロトコルという方式を使用して認証をしている。Kerberos認証といういい方のほうが自然かも？
Kerberos認証だけでも記事をかけそうなので今度書きたい。


## Azure AD
Azureで使うAD(Active Directory)である。
Azure ADと対比して言うなら先ほどのActive DirectoryはオンプレADと言ったところか。

Microsoftのクラウドサービス（Azure、Office 365、Dynamics CRM Onlineなど）と統合されている。
Microsoftのいろいろなクラウドサービスに対して認証・認可を行うサービスだと思っておけばよかろう。

オンプレADはイントラネットにおいての認証・認可サービスだったので、インターネットを通じて利用することがあるクラウドサービスにそのまま移植することができなかった。そのような背景をもとにして、新たに開発された認証・認可サービスなのであろう。

Azure ADは、テナントという単位で管理されている。ディレクトリとかなり近い概念みたいだが、厳密には違うらしい。しかも、テナントとは別でディレクトリも使用するらしい。ディレクトリとテナントは一対一で紐づいていてテナントにアクセスするとディレクトリに存在するリソースが扱え......云々。

これも深追いすれば記事書けそうだが、今回は概要が把握したいだけなので割愛。


認証方式は クラウド対応の認証プロトコルであるOpenID Connect、OAuth、SAMLなどが使用されている。

課金すればするほどリッチなサービスが使えるようになっている。Azure AD Freeは無料で使えるが、シングルサインオンなどの設定を部署や役職ごとに容易に行うためにはAzure AD Premium P1またはP2のライセンスが必要となる。



## 感想
概観はつかめました。
ただ、上記で記事にできそうって書いた箇所以外にも、LDAP、Restful API、（Azure ADにおける）サブスクリプションなど、聞いたことあるけどよくわかってない言葉がたくさん出てきました。
今後も記事を書くことで少しづつネットワークについて理解が深められたら、と思います。
（深められたら、のあとって「いいな」が省略されてるのかな？これ主節が省略されて従属節が残っている？変な構造）
ESLintのavoidEscapeを使って、引用符(')を含む文字列のクォーテーションがPrettierに勝手に「"」にされても許可するようにする

タイトルがすごく分かりにくいですが、つまりこういうことです↓

こんな文字列があったとします。
```text
"Enter your email address below and we'll send you a link to reset your password."
```

`we'll`はアポストロフィとしてシングルクォーテーションが使われてますね。

prettierの下記の設定により、自動的にシングルクォーテーションに置き換えられ…ません！
```json
{
  "singleQuote": true,
　　　　// 他の設定
}

```

というのも、prettierが処理をするプロセスには以下の仕様があるようです。

> FYI, this is how Prettier handles quotes:
> 1. JSX always uses double quotes.
> 2. The quote that results in the least number of escapes is chosen.
> 3. Finally, the singleQuote option is used to choose quote.
https://github.com/prettier/prettier/issues/2338#issuecomment-311776517

つまり、本例は、エスケープすべき「'」があるので、最もエスケープが少ない処理(エスケープ回数0)がされた結果となります。

無理やり(?)シングルクォーテーションを使うと、エスケープ`\'`が1回使われます。これを回避した形になります。

```text
'Enter your email address below and we\'ll'
```

# ESLintと競合してしまう
Prettierにより、例外的にダブルクォーテーションが使われる理由がわかりましたが、今度はESLintの次のルールに違反します。

```json:.eslintrc.js
~~~省略~~~
quotes: ['error', 'single'],
~~~省略~~~
```

![スクリーンショット 2023-05-08 0.34.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256853/61908f16-c7fc-55a7-6182-526d1f66b127.png)

# avoidEscapeで解決
下記Issueで解決されていますが、
`avoidEscape`オプションを指定してあげることで、ESLintが文字列内にシングルクォーテーションが使われているときは無視することができます。

>"avoidEscape": true allows strings to use single-quotes or double-quotes so long as the string contains a quote that would have to be escaped otherwise

```json:.eslintrc.js
~~~省略~~~
quotes: ['error', 'single', { avoidEscape: true }],
~~~省略~~~
```
https://github.com/prettier/prettier/issues/2338
PAY.JPでクレジット決済を行う

## はじめに
PAY.JPを使ってクレジット決済を行なってみました。
サーバサイドの実装は行わず、今回はトークンの発行（JavaScript）と決済処理（curlコマンド）のみです。

### 前準備
こちらで↓アカウント登録を行なってください。

https://pay.jp/



### src
index.htmlファイルを作成して、bodyタグの中に以下のコードを入れます。
actionではAPIのエンドポイントを指定してください。
methodもAPIと合わせてください。
data-keyには管理画面で表示されているテスト公開鍵を指定してください。
```html
    <form action="/pay" method="post">
      <script src="https://checkout.pay.jp/" class="payjp-button" data-key=""></script>
    </form>
```

### 実行結果
フォームのデータに「payjp-token: 」がセットされているので、値をコピーします。
そして、以下のコマンドをターミナル画面で実行します。
```terminal
curl "https://api.pay.jp/v1/charges" \
  -u "テスト秘密鍵": \
  -d "amount=400" \
  -d "currency=jpy" \
  -d "card=コピーしておいたトークン"
```

↓こんな感じで管理画面で見ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/5c8030b9-3f0e-8ed2-b397-b2584fc02537.png)

## おわりに
次回はサーバサイドも実装（Java）しようと考えています。
結構簡単にクレジット決済できるんですね。。
ここまで簡単に実装できるとは思っていませんでした。
postfixコマンドの書式と主なサブコマンド

●Postfixの設定ファイル「/etc/postfix/main.cf」の、デフォルトの値から変更されている設定項目のみを確認するためには「-n」オプションを使用

●postfixコマンドの書式と主なサブコマンド

postfix サブコマンド
・start　Postfixを起動する
・stop　Postfixを停止する
・abort　Postfixを強制的に停止する
・flush　メールキュー内にあるメールを直ちに再送する
・reload　設定ファイルを再読み込みする
・check　設定ファイルの構文をチェックする
S3でファイル操作した時に発生するイベントを調べてみた

S3バケットにファイルを作成した場合にLambdaを実行しているのですが、
削除したファイルを元に戻した場合は何のイベントになるのだろうか？というのが気になりました。
復元？いや作成イベントが起きてLambdaが動いてしまう？
というわけで検証してみました。

# 検証方法

S3バケットのイベント通知にSNSトピックを追加します。
SNSトピックにはEメールのサブスクリプションを追加。
Eメールでイベントの内容を受け取って調べます。
（最初CloudTrailで調べようと思いましたが、ログが多すぎて解読が無理でした💦）

![S3バケットのイベント通知設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1959433/4b4fdda4-dc73-e35c-5ff3-4d38fadb2d65.png)


これでイベントごとにEメールが届くようになります。
メール本文にイベントの内容がJSONで記載されているので、そこから発生したイベントを解読します。

## S3バケットのイベント通知でSNSを使用する場合の注意点

S3バケットのイベント通知でSNSトピックを発行する場合、
トピック側のアクセスポリシーに当該バケットからの発行許可を追加する必要があります。

これについてはインターステラ株式会社様の技術ブログを参考にさせていただきました。
ありがとうございます。

https://blog.interstellar.co.jp/2022/05/19/what-to-do-if-you-get-an-error-unable-to-validate-the-following-destination-configurations-when-trying-to-configure-amazon-s3-to-send-event-notifications-to-amazon-sns/

# 検証結果

念の為、バージョニングあり・なし両方のバケットで調べてみました。

## バージョニングありの場合

| 操作 | イベント | 備考 | 
| ---- | ---- | ---- |
| ファイルのアップロード | ObjectCreated:Put |  |
| ファイルの上書きアップロード | ObjectCreated:Put |  |  
| ファイルの削除 | ObjectRemoved:DeleteMarkerCreated |   |
|　削除ファイルを戻す<br>(削除マーカーの削除) | ObjectRemoved:Delete |  |
| 完全に削除 | ObjectRemoved:Delete | バージョンの数だけ発生 |
| ファイルの移動<br>（移動元） | ObjectRemoved:DeleteMarkerCreated |  |
| ファイルの移動<br>（移動先） | ObjectCreated:Copy |  |
| Glacierに移動 | ObjectCreated:Copy | ストレージクラス：Glacier Flexible Retrieval (旧 Glacier) |
| Glacierから復元 | ObjectRestore:Post<br>ObjectRestore:Completed | ストレージクラス：Glacier Flexible Retrieval (旧 Glacier) |

なんと、削除したファイルを元に戻した場合、発生するのは削除イベントの```ObjectRemoved:Delete```であることがわかりました。

1. バージョニングありのバケットでファイルを削除すると、まず削除マーカーができる。
   ```ObjectRemoved:DeleteMarkerCreated```
2. これを消すことで削除ファイルが元に戻る。
   ```ObjectRemoved:Delete```

削除したファイルを元に戻すのは、「削除マーカー」というバージョンを消す操作なんですね。
わざわざ「削除マーカー」という言葉がある理由がやっとわかりました。
Windowsのゴミ箱の操作とは感覚が違いますね。

あと興味深いのはファイルの移動は削除とコピーであること。
MacOSみたいですね。

## バージョニングなしの場合

| 操作 | イベント | 備考 | 
| ---- | ---- | ---- |
| ファイルのアップロード | ObjectCreated:Put |  |
| ファイルの上書きアップロード | ObjectCreated:Put |  |  
| ファイルの削除 | ObjectRemoved:Delete |   |
| ファイルの移動<br>（移動元） | ObjectRemoved:Delete |  |
| ファイルの移動<br>（移動先） | ObjectCreated:Copy |  |
| Glacierに移動 | ObjectCreated:Copy | ストレージクラス：Glacier Flexible Retrieval (旧 Glacier) |
| Glacierから復元 | ObjectRestore:Post<br>ObjectRestore:Completed | ストレージクラス：Glacier Flexible Retrieval (旧 Glacier) |

「削除マーカー」に関するところがないだけですね。

# 余談

削除したファイルを元に戻すのをマネジメントコンソールでやると、
微妙にわかりづらいので念の為書いておきます。

![削除したファイルを元に戻すのをマネジメントコンソールでやると、微妙にわかりづらい](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1959433/e2c333b9-aa29-3cf7-a2f0-189a27eb649b.png)

タイプ：「削除マーカー」の行をチェックして「削除」です。
【Markdown】バッククォートのエスケープ方法


## インラインコード

インラインコードの場合には以下の方法でバッククォートをエスケープできます。

```markdown
`` `code` ``
```

以下のように表示されます。
`` `code` ``

## コードブロック

コードブロックの場合には以下の方法でバッククォートをエスケープできます。

`````markdown
````markdown
```sample.txt
sample text
```
````
`````

以下のように表示されます。

````markdown
```sample.txt
sample text
```
````

`~~~`を使用することでもエスケープできます。

~~~~markdown
~~~markdown
```sample.txt
sample text
```
~~~
~~~~

以下のように表示されます。

~~~markdown
```sample.txt
sample text
```
~~~
[小ネタ]S3からオブジェクトをダウンロードできない時によくやってしまっている記述ミス

IAMポリシーでバケットに対しての権限を設定する時、
ちょっとしたミスでダウンロードできない状態になり時間を喰ってしまうのをちょいちょいやってしまってるので、
備忘録を書き残しておきます。

# 誤っているポリシー

```json
{
    "Version": "2012-10-17",
    "Id": "ExamplePolicy01",
    "Statement": [
        {
            "Sid": "ExampleStatement01",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Satoshi"
            },
            "Action": [
                "s3:GetObject",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket1"
            ]
        }
    ]
}
```

このポリシーでexample-bucket1のオブジェクトをダウンロードしようとすると、「AccessDenied」になります。

# 誤っている箇所と対策

誤っているのはここです。

```json
"Resource": [
    "arn:aws:s3:::example-bucket1"
]
```

ダウンロードするのは **バケットの中のオブジェクト** なので、下記のようにして「example-bucket1配下のオブジェクトすべて」を指定する必要があります。

```json
"Resource": [
    "arn:aws:s3:::example-bucket1/*"
]
```

なお、この書き方ならOKでした。
前方一致になってARNが`arn:aws:s3:::example-`から始めるすべてがOKになるからでしょうね。
意図しない動きになりそうなのであんまりやりませんが・・・。

```json
"Resource": [
    "arn:aws:s3:::example-*"
]
```

# 参考
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/access-policy-language-overview.html
Linuxのディストリビューションの特徴について

# Linuxのディストリビューションとは
Linuxのディストリビューションとは、Linuxカーネル(OSの核)に、ソフトウェアやアプリケーション、デスクトップ環境などの機能を追加したパッケージのことです。

## 系統について
ディストリビューションには様々な種類がありますが、その中でも主流となっている系統が３つあります。
各系統について簡単に説明します。

- Debian系
    高い安定性と信頼性が特徴。
    サーバーやデスクトップ、組み込みシステムなど、幅広い用途で利用されている。
- RedHat系
    企業向けに特化した機能やサポートが特徴。
    商用ディストリビューションであるRed Hat Enterprise Linux (RHEL)と、その無償版であるCentOSが主なディストリビューション。
- Slackware系
    シンプルさと伝統的なUNIXスタイル
    上級者向けで、システムのカスタマイズや学習に適している
    セキュリティに優れている




## 人気のディストリビューションの特徴
- Ubuntu（Debian系）
「他者への思いやり」がスローガンとなっていて、利用者に優しい作りになっている。
日本語での説明も充実しており、初心者にもおすすめ。

- Fedora（Redhat系）
    Fedoraは最新のLinux技術やソフトウェアを積極的に採用している
    商用ディストリビューションであるRHELのアップストリームとして機能しています。これにより、RHELの新しい機能がFedoraで試験され、安定してからRHELに取り入れられます。

- CentOS（Redhat系）
    Red Hat Enterprise Linux (RHEL) をベースにした無料のLinuxディストリビューションで、主に企業向けに設計されている。
    安定性と信頼性に重点が置かれています。これにより、プロダクション環境やサーバーに適した選択肢になる。
    ※CentOS7は2024年6月に10年のサポート期間が終了予定

- Slackware（Slackware系）
    Slackwareはシンプルで分かりやすい構造を目指しており、システムが最小限の変更で安定して動作することを重視しています。
    GUIに頼らず、ほとんどの設定をテキストファイルで行うため、Linuxの内部構造を理解するのに適したディストリビューションです。


## 最後に
今回記載した以外にも様々なディストリビューションがあるので、みなさんも調べてみて気になるものがあれば使用してみてください。
ざっくりとした内容ですが、以上となります。
iPhoneのスローで撮影した映像がMac上でもスローになってしまう。

# はじめに
今回は備忘録として記事を作っています。同じような条件で困っている人へヒットしましたら幸いです。

# 概要
・ iPhoneで撮影したスローモーションの動画を、iPhoneの写真Appで編集してもMacのQuickTimePlayerで開いた際にスロー動画として扱われてしまう。

# 内容と解説
### iPhoneのスローモーション撮影について
iPhoneのスローモーションは、iPhoneの設定からフレームレートを調節できます。
設定→カメラ→スローモーション撮影(上から三番目)
![スクリーンショット 2023-05-07 23.18.43 2023-05-07 14_19_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570612/2598f2ce-8ef6-2c07-b0cf-4edd258ae843.png)

この設定によりスローモーションでの撮影が行われます。
iPhoneではスローモーションで撮影した動画を、写真Appの編集でスローにする部分を調節できます。(今回はここを調節バーと呼びます。)
![スクリーンショット 2023-05-07 23.22.04 2023-05-07 14_22_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570612/3d4cd39c-9a04-346b-5d59-9d315ed6cba9.png)

この調節バーの中央部分、線の間隔が広くなっている部分はiPhone上でスローとなって再生され、間隔の狭い部分は通常の動画のように再生できます。その端にある縦線を移動させることで、スローの部分を調節できます。
通常、iPhoneではスローの部分を自動判定し再生しますが、あえてこれを通常の動画として再生したい場合、縦線の間隔を0にすることにより、iPhone上では通常の動画のように再生されます。

![最新の写真を表示 2023-05-07 14_26_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570612/cbc45888-60c1-7f4d-de38-7f393568f168.png)

ただこの状態でiPhoneからMacへ動画を送信した場合、Mac上で開く(QuickTimePlayerの場合)とiPhoneで設定した縦線の間隔(スローモーションにする箇所)の変更が更新されず、縦線は初期値に戻ってしまいます。

これでは通常の動画のように再生したいのに、スローになってしまうので困るという知人からの相談でした。

### 具体的な解決策
様々なブログですでに記述されている内容ではありますが、別角度からのアプローチだったため改めて細かく解説します。
まず、iPhoneの写真AppやMacのQuickTimePlayerでは __120fps以上の動画__ をスローモーションの動画だと認識し、編集Appには先ほどの画像のような調節バーが出現してしまいます。
つまりこれを編集ソフトなどを使って60や30fpsにして改めてエンコードすることで、iPhoneやMacでスローモーションとして認識されなくなり調節バーが消えるということになります。私は今回、AdobeのMediaEncodereを使用してフレームレートの調節を行いました。

また、私の実機の調査では動画の種類として72fpsや100fpsの動画も検証してみましたが、これらは通常の動画として扱われ120fps(119.88fps)からスローモーションの動画として扱われる仕様のようです。
![fps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570612/5eebd98e-2318-74ae-0ed5-8dcab7d6516f.png)

# まとめ
これで問題は解決ですがWindowsや多くの動画編集ソフトの場合、120fpsであった場合にスローの調節バーを出現させる仕様がなかったり特に問題がないことが多くあります。
ですので今回の記事もごく狭い範囲の方へ届ける内容となってしまいましたが、参考になれば幸いです。

ただ、120fpsの映像はデータ量としては大きいものになるのでなるべく30~60fpsの映像を記録することをお勧めします。
Ubuntuにおける開始時のホームディレクトリを指定のディレクトリに設定する(WSL2) ※windows

Ubuntuを開くときにpwdコマンドで
現在作業しているディレクトリが見れるかと思いますが、
基本的にUbuntuを開いたときには
このようなディレクトリになっていると思います:raised_hands:
```
/home/"自分で決めたユーザー名"
```

今回はUbuntu開始時における
ディレクトリの初期設定を変えたいと思います!!
行うことはあるパスワードファイルを開いて編集します！

---------------------------------------
設定するファイルの編集画面を開く
-----------------------------------------
Linuxにおけるvimというエディタを用いて
パスワードファイルである "/etc/passwd"を開きます:point_up:
- 以下のコマンドで実行します
```diff_rb
sudo vim/etc/passwd
```

編集を行う
----------------------------
編集画面を開くとこのように文字が羅列しています:raised_hands:
ただ、今回注目するのは画面の下の部分の
**赤い枠で囲んだ部分**になります!
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113349/89aa898a-ba30-8607-399c-8988029e25a4.png)
赤枠の部分のディレクトリを
設定したいディレクトリに書き換えます！
今回は"/home/ユーザー名/Pracitice"としました:bow_tone2:

書き換えが完了したらEscキーを押して、
編集モードから変更します!
![Untitled (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113349/595ab0e2-cef4-3143-8743-d70b911848c9.png)
そして、wqコマンドを入力して保存して終了しましょう

:::note 
保存して終了以外のコマンド
<details><summary>コマンド一覧</summary>

:w - 保存するだけ

:wq - 保存して終了する

:q! - 変更を破棄して終了する

</details>

:::

もし、編集途中でエディタを閉じた場合は警告が出る場合があります

:::note warn
再度エディタを開く際に警告が出た場合
<details><summary>ATTENTIOの解決方法</summary>

- 変更コマンドを入力して途中で編集を終わり、再度開く際にこのような警告が出ますが、
この警告はVimエディタがファイルを編集しているときに異常終了した場合などに、
自動保存された一時的なファイル（swap file）が残っていることを示しています

![Untitled (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113349/f26acee1-d982-6658-d66f-d62fa5277d87.png)

- そして、元のファイルと.swapファイルのどちらを使用するかを尋ねられています。
このため、一時的なファイル(.swpファイル)を削除することをお勧めします
- .swpファイル削除のコマンド

```bash
sudo rm /etc/.passwd.swp
```
</details>

:::

開始ディレクトリの確認
-----------
ファイル内の編集が完了したら確認してみましょう！
まずはホームディレクトリに移動します
```bash
cd ~
```
そして、ホームディレクトリに移動したら
pwdコマンドで現在のディレクトリを確認しましょう
![Untitled (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113349/d65024f9-d15c-7511-d8d0-3f02f4a1c79a.png)
今回の例では編集した
"/home/ユーザー名/Pracitice"
となっているはずです。

これが指定したいディレクトリに
なっていたら作業完了です！

お疲れ様でした:relaxed:
【SwiftUI】複数のSF Symbolの名前指定を一括で変更する

お気に入りに選択されている時は`star.fill`、されてない時は普通の`star`のように、
fillかfillじゃないか、circleかcircleじゃないかとかの違いで、
表示するシンボルを変えたい場合がある。

------

シンボルが1つ・2つなら、以下のように指定する文字列を変えるように実装しても特に問題はない。

![画面収録_2023-05-07_23_27_27_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648522/d6ae6fa5-15cf-7fd9-3195-5c7764f0e809.gif)

```swift
struct HogeView: View {
    @State var selected = false
    
    var body: some View {
        Image(systemName: selected ? "star.fill" : "star")
            .font(.system(size: 100))
            .onTapGesture {
                selected.toggle()
            }
    }
}
```

----

これが複数あるとどうなるか？
三項演算子が大量に並ぶことになる。
![画面収録_2023-05-07_23_37_30_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648522/aa8bdfd7-883b-1831-8621-15c10878397f.gif)

```swift
struct HogeView: View {
    @State var selected = false
    
    var body: some View {
        VStack {
            Image(systemName: selected ? "star.fill" : "star")
                .font(.system(size: 100))
            Image(systemName: selected ? "person.fill" : "person")
                .font(.system(size: 100))
            Image(systemName: selected ? "house.fill" : "house")
                .font(.system(size: 100))
            Image(systemName: selected ? "gearshape.fill" : "gearshape")
                .font(.system(size: 100))
        }
        .onTapGesture {
            selected.toggle()
        }
    }
}
```

----

`symbolVariant`modifierを使うことで、一括して変更することができる。
```swift
struct HogeView: View {
    @State var selected = false
    
    var body: some View {
        VStack {
            Image(systemName: "star")
                .font(.system(size: 100))
            Image(systemName: "person")
                .font(.system(size: 100))
            Image(systemName: "house")
                .font(.system(size: 100))
            Image(systemName: "gearshape")
                .font(.system(size: 100))
        }
        .symbolVariant(selected ? .fill : .none)
        .onTapGesture {
            selected.toggle()
        }
    }
}
```
CKA試験、PersistentVolume Claims

# PersistentVolume Claims

https://kubernetes.io/docs/concepts/storage/_print/#persistentvolumeclaims

### 次の条件に合う、新しいPersistentVolumeClaimを作成しなさい
- 名前: pv-volume
- class: app-hostpath-sc
- capacity: 10Mi

### pv-volume PersistentVolumeClaimをマウントするPodを作成しなさい
- name: web-server-pod
- image: nginx
- MountPath: /usr/share/nginx/html
- Volume でReadWriteManyアクセス権限を持つように構成する



```sh
vi pv-volume.yaml
```

```pv-volume.yaml
```

```(修正前)pv-volume.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 8Gi
  storageClassName: slow
  selector:
    matchLabels:
      release: "stable"
    matchExpressions:
      - {key: environment, operator: In, values: [dev]}
```

```(修正後)pv-volume.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume # name 
spec:
  accessModes:
    - ReadWriteMany # 権限
  volumeMode: Filesystem
  resources:
    requests:
      storage: 10Mi
  storageClassName: app-hostpath-sc # class
```

```sh
kubectl apply -f ./pv-volume.yaml

vi web-server-pod.yaml
```

```(修正前)web-server-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: web-server-pod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/usr/share/nginx/html"
        name: mypd #mypdを利用する
  volumes:
    - name: mypd # mypd
      persistentVolumeClaim:
        claimName: pv-volume # pv-volumeを利用する
```

```sh
kubectl apply -f ./web-server-pod.yaml
```
シェルスクリプトを書いている時に困ったこと・詰まったこと

## シェルスクリプトを書いた中で、困ったこと・詰まったこととその解決方法メモ

最近、学習し始めたシェルスクリプトを書いている時に、困ったこと、詰まったこととその解決方法を書き留める。  

  < 困ったこと、詰まったこと >
  - 代入しても、変数の中身が変わらない。
  - sedで１行削除したけど、ファイルの中身が変わっていない。  
  - 最後の引数が関数に渡っていない。  

#### 1\. (困ったこと)　変数の中身が変わらない。
  ＜症状等＞  
  csvファイルの中身を１行ずつ読み込んで、条件に合致したらカウントアップしたが、hitcountは０のままだった。
```sample.sh
  # csvから１行ずつ読み込む
  hitcount=0
  cat data.csv | while read oneline
  do
      $product_id=$(echo "${oneline}" | cut -d ',' -f 1)
      $product_name=$(echo "${oneline}" | cut -d ',' -f 2)
      $product_type=$(echo "${oneline}" | cut -d ',' -f 3)
      if [ "$product_type" == "量産品" ]; then
        hitcount +=1
      fi
  done
  # ~ 中略 ~
  if test $hitcount -ne 0; then　# <---$hitcount=0のまま

 ```
  ＜解決方法＞
  cat ファイル名 から < ファイル名へ変更したら、上手く動いた。
``` sample2.sh
while read oneline
do
# ~ 省略
done < data.csv
```
#### 2\. (困ったこと)　sedで１行削除したけど、ファイルの中身が変わっていない。
  ＜症状等＞  
  sedで条件に該当する行を削除したが、ファイルの中身は変わらなかった。
  ＜解決方法＞
  iオプション（標準出力せずに直接ファイルを上書き）を付ける。
```sample2.sh
# 最初に書いたコード
sed '/条件/d' data.csv

# 修正後
sed -i '/条件/d' data.csv
```
#### 3\. (困ったこと)　最後の引数が関数に渡っていない。  
  ＜症状等＞  
  最後の引数が渡っていない。

  ＜解決方法＞
  スペースのある引数が原因。渡すときには""で囲む。
```sample3.sh
# 最初に書いたコード
a='AI CHAT'
b='SERVER'
myfunction $a $b

# 修正後
myfunction "${a}" "${b}"
```
#### 感想、メモ
- 困ったり、詰まったら、まずコマンドのヘルプを読んでみることとする。
JavaScript Primerを読んでみた感想・レビュー

JavaScript学習者なら１度は目にしたことがあるだろう、JS学習の技術書JSprimer (https://jsprimer.net/) の感想・レビューします。

JSをこれから勉強しようと思っている人に参考になればと思います。

まず最初に結論ですが、JSを使うなら、１度は読むことをお勧めします。

JSは長い歴史の進化の中で、後方互換性を慎重にしているので、複雑な仕様になっています。JSprimerでは、背景から現在への変遷とともに進化してきたJSの本質的な部分を体系的に学べます！

現代のJSの様々なフレームワークを扱う上でも、これらの知識があれば、理解が深まります。

無料で公開もされているので、是非一度見て下さいね！
https://jsprimer.net/

ここれ

## 良かったところ
- 豊富なコンテンツ: 基本文法から実践的なアプリケーション開発まで幅広いトピックをカバーしています。これにより、一貫した学習体験が得られます。
- わかりやすい説明: 各トピックには、具体的なコード例や図解が用意されており、理解しやすい説明がされています。また、各セクションは短く、一つずつ学習しやすい構成になっています。
- 実践的な演習: JSprimerでは、実際に動作するコードを書いて試すことができます。これにより、理解を深めるとともに、実践的なスキルを習得できます。
- 歴史・背景からの説明：　JSが後方互換性が慎重にしているために複雑な仕様になっていたり、暗黙的な型変換など、、謎な挙動になったり、という面に対しての説明もあり、確実に理解が深まります。

## 悪かったところ 
JSprimerは非常に優れた学習リソースですが、以下のような点で改善の余地があると感じました。
- 初学者には難しい、、、プログラミングやオブジェクト指向などを全く知らない初学者にとっては、JS特有の事象なのかの判断がつかない部分が多く、理解が難しいと思います。また、サンプルコードも結構難しく、理解できないところもあるかもしれません。。
まぁ一度目は、完璧な理解を求めずに、
中級者になって1度返ってくるくらいで、全然OKと思います！

## 学べること
- JavaScriptの基本文法: 変数、関数、制御構文、オブジェクト、配列などの基本的な要素を理解できます。
- 非同期処理について、Promiseやasync/awaitを使った非同期処理の理解と実装方法を学べます。
- JavaScriptのモジュールシステムについて理解し、実践的なコードの構成方法を学べます。
- DOM操作について、ウェブページ上の要素を選択し、属性やテキストを変更する方法を習得しました。また、イベントリスナを追加してユーザー操作に対応する方法も学べます。
- デバッグについて、コンソールを使ってコードのデバッグ方法を学び、エラーの原因を特定する方法を身に付けます。

## 難しいところ
- クロージャーやプロトタイプ継承などの高度なトピックは、理解が難しいです。。理解できなければ、他記事などで理解を深めるのが吉です。
- 〇〇オブジェクトの種類が多くて、初めは難しかったです。例えば下記のようなものがあります。
    - プロトタイプオブジェクト
    例）Object.prototype.toStringのようにObject.prototypeオブジェクトが持っているメソッドのこと。
    説明）
プロトタイプオブジェクトは、特定のコンストラクタ関数に関連付けられたオブジェクトで、そのコンストラクタで生成されたインスタンスにメソッドやプロパティを提供する。
・Objectのインスタンスは、Object.prototypeオブジェクトのメソッドを継承する。
・インスタンスメソッドで同名のメソッドが定義されると、上書きされる。

    - インスタンスオブジェクト
例）const myObject = new Object();
説明）
・インスタンスオブジェクトは、コンストラクタ関数を用いて生成される個別のオブジェクトです。
・インスタンスは、関連するプロトタイプオブジェクトからメソッドとプロパティを継承します。

    - ビルトインオブジェクト
例）Array, String, Number, Date, Math, RegExpなど。
説明）
・ビルトインオブジェクトは、JavaScriptエンジンに組み込まれているオブジェクトで、言語の一部として提供される機能を利用できるようにするものです。
・これらのオブジェクトは、標準的なメソッドやプロパティを提供し、プログラムの実行時に利用できます。


JSは、jQueryやReact、Vue.jsなどのライブラリが非常に人気で、
生のJSを書かなくても事足りることが多いかもしれませんが、
JSの本質を勉強することで、確実に実力がアップします！

是非一度見てみて下さいね〜🍞
AWS Certified Solutions Architect - Professional (SAP-C02) 合格記

2023年3月にAWS SAPを受験し、無事合格いたしましたので合格記として残します。
何かしら参考になれば幸いです。

## 保持していた資格
* AWS Certified Solutions Architect - Associate
* AWS Certified Security – Specialty 

## 受験のきっかけ
約3年前に取得したSAAの更新期限が迫っていたが、ただただ更新するだけの勉強ではいまいちモチベーションが上がらず
「いっそプロフェッショナルとって更新するか！」と半ばノリで受験を決意。

## 結果
798点でなんとか一発合格

## 勉強方法


#### 教本で全体のサービス概要をざっくりつかむ。
[・AWS認定資格試験テキスト＆問題集 AWS認定ソリューションアーキテクト - プロフェッショナル](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%EF%BC%86%E5%95%8F%E9%A1%8C%E9%9B%86-AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB-%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88-%EF%BC%A1%EF%BC%B7%EF%BC%B3%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E5%B1%B1%E4%B8%8B%E5%85%89%E6%B4%8B/dp/4815617929/ref=sr_1_3?crid=3J6SB5L908KB2&keywords=aws+%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88+%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB&qid=1683467500&sprefix=aws%E3%80%80%2Caps%2C210&sr=8-3)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3352474/2c577589-5fb5-77c7-e4da-cccc4800496f.jpeg" width="300">

全部覚えてやるくらいのつもりで読んでいましたが、この時点で全てしっかり暗記するレベルまでは持っていっていけていないです。ほんとざっくり把握する感じでした。


#### 下記3点の模擬問題をひたすら解く &amp; 見直し



①[AWS 公式の無料の問題セット、サンプル問題](https://aws.amazon.com/jp/certification/certified-solutions-architect-professional/)
→AWS SAP 公式のサイトから飛べる、サンプル問題と公式練習問題集を時間をあけて 3 回ずつ受けました。解説もついているため、見直しもしやすかったです。公式が出しているだけあって、似たような問題も出ました。


②[Udemyの模擬試験](https://www.udemy.com/course/aws-53225/)
→Udemy は本試験よりも難解な ( というより問うてるところが深い？) 印象を受けました。絶対ではないかなと思いますが、時間に余裕のある方はやって損はないと思います。私は 5つあるうちの4つの模擬試験を解いて見直ししました。


③[TechStock](https://techstock.jp/)
→#31 ~ #74( 受験時点での最新 ) の範囲を1周解いて本試験。これを2回繰り返しました。1周だけだと忘れていることも多かったため、2周はすることをおすすめします。学習履歴にて「まだ解いていない問題」「間違った問題」など追えるため便利です。本試験モードでも、間違った問題はお気に入りに登録することで復習が可能なことも良かったです。長く難しい本番の試験の中で、TechStock で見たぞこれ ! ということが何度かあり非常に助かりました ( 精神的にも ) 。

## 受験時の感想

分かっていたことですが時間が足りず、私は見直しを満足にできませんでした。
1問に悩みすぎず、しばらく考えて分からなければフラグをつけてさっさと次の問題へ移っていった方がよいかと思います。

本番中は「これ落ちたんじゃ ... 」と弱気になりますが、意外と受かっていたので最後の最後まで決して諦めずに集中することも大切だと感じました。

## 今後
1年後までにAWS資格全冠目指したいと思います。
git add や git push ができない時にやってみたこと（結論：.gitディレクトリを削除した）

## はじめに
gitの学習を始めたのですが、何度か壁に当たり、解決するのに時間がかかった事象がありました。
今回は備忘録という意味合いも込めて、その事象をご紹介したいと思います。
## 今回発生した事象
gitの学習をしている中で、下記2点で詰まってしまった。

事象１：git add . を実行するも、
``` 
$ git add .
error: '<ディレクトリ名>' does not have a commit checked out
fatal: adding files failed
```
と表示され、ステージエリアに追加できないディレクトリがある。

事象２：githubにディレクトリをアップするも、ディレクトリの中のファイルがアップできない
![スクリーンショット 2023-05-07 21.28.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3340824/154ce070-8e0b-0c14-24e0-0349c62f16ca.png)
git push origin <リモートブランチ名>でアップするも、上の画像の通り目的のディレクトリ（week1-2）はアップできているように見えるが、クリックしてもファイルの中身が確認できない。おそらく、中のファイルはアップできていない模様。

## 原因
あるディレクトリが git add できなかったり、git push はできても中身のファイルがアップされなかったりする場合は、過去にそのディレクトリで git init を実行したため、すでにgitの管理対象になっている可能性がある。
管理対象になっている場合は、ディレクトリ内に.gitディレクトリが存在する。
この場合、一度.gitディレクトリを削除し、管理対象から外すことによって、正常にアップすることができる可能性がある。
## 行った対応
とにかく.gitディレクトリを削除してみた。
その後 git add . を実行した。

``` 
% rm -r .git
% git add .
```
→エラーも出ず、無事できた！
（git pushの方は割愛しますが、こちらもできました）
## おわりに
git学習したばかりでまだ仕組みがわかっておらず、なかなかエラーを解消できませんでした。
コマンドを覚えるだけでもある程度使えるようになりますが、やはり裏側の仕組みを理解しておかないとこういう時困りますね...
ということで、これからも学習を継続し、必要あればまた加筆修正していきます。
SQLiteのあれこれ

SQLiteで列区切文字列に『Tab』を指定する場合。※下記は変数に代入する例
`SEPARATOR=$(echo -e '\t')`

上記の変数を使い、CSVデータをSQLiteコマンド(SQLite3コマンド)でインポートする例
`./sqlite3 -separator $SEPARATOR {database_name} ".import /home/hoge/hoge.csv {table_name}"`

下記はEXCEPT演算子でデータの差分件数を比較する例
`select count(*) from (select * from {table_name1} except select * from {table_name2});`
※EXCEPT演算子は左側(table_name1)に対して右側(table_name2)を比較し、差分を抽出する。
第5回自動運転AIチャレンジ2022（シミュレーション）取り組み記録メモ

自動運転AIチャレンジ取り組み記録メモ

本記事は以下の公開情報を中心に自身の頭の整理を目的に作成しています
https://www.jsae.or.jp/jaaic/summary.php

# 自動運転AIチャレンジについて

自動車技術会主催のコンテストです。

> [Japan Automotive AI Challenge　自動運転AIチャレンジとは？](https://www.jsae.or.jp/jaaic/about.php)
> [自動車技術会、「第5回自動運転AIチャレンジ2022（シミュレーション）」表彰式 各チームの手法を解説するエキシビションも実施](https://car.watch.impress.co.jp/docs/news/1483712.html)
> 自動運転AIチャレンジは、これからの自動車業界を牽引する技術者の発掘育成を目的とする新たな取り組みとして2019年にスタート。2022年度からは、自分たちで開発したプログラムを使って実際に自動走行モビリティを走らせる「インテグレーション」、デジタルツインで再現した都市を実際の交通ルールに則って走行する「シミュレーション」の2大会に分けて実施されている。

# 第5回自動運転AIチャレンジ2022（シミュレーション）について

2022/11-2023/1の2ヶ月の期間で開催されました。

> [自動車技術会、「第5回自動運転AIチャレンジ2022（シミュレーション）」表彰式 各チームの手法を解説するエキシビションも実施](https://car.watch.impress.co.jp/docs/news/1483712.html)
> 今回のシミュレーション大会では自動運転ソフトウェアの「Autoware」を使い、デジタルツインに再現された東京都西新宿の市街地を走行する形式で、オンライン上のシミュレータで自動走行車両として再現されたレクサス（トヨタ自動車）「RX450h」による規定区間の走行タイムを競い合った。

# 競技ルールと競争ポイント

特定コースの走行タイムを競います。

> https://www.jsae.or.jp/jaaic/final.php
> 走行環境
　西新宿内の一部の区間を走行します。
> 自動走行車両
　自動走行を行う車両にはLexus RX450hを使用します。
> 競技全体に関するルール
　AWSIM(自動運転向けシミュレータ)上でのシナリオを走破できるソースコードをAutowareを活用して作成いただきます。
　オンライン環境にソースコードをアップロードすることで、オンライン上でシミュレーションが実施されて、タイムが出ます。最後にアップロードされたソースコードのシミュレーション結果のタイムに基づいて順位を決定します。

チャレンジコース、アドバンスコースがあり、難易度が違います。

> チャレンジコースでのイベント
　低速車両への追従
　駐車しようとしている車両の回避
> アドバンストコースでのイベント
　アドバンストコースではチャレンジコースでのイベントに加えて以下のイベントが追加されている他、NPC歩行者・車両も追加されています。
　複数車両の回避
　車両が通行している中での障害物回避

# 開発環境

以下の公開URLから環境構築を行います。

> https://www.jsae.or.jp/jaaic/tutorial.php
> 環境構築について
シミュレーション大会への参加には「Autoware」及び「AWSIM」をローカル環境に導入して頂く必要があります。
下記URLを参考にしながら各自で導入をお願い致します。
▶ https://github.com/AutomotiveAIChallenge/aichallenge2022-sim

以下のような仮想環境/開発環境をつかいます。

- シミュレータ環境（AWSIM）
- autoware
- docker/[rocker(dockerベースのROS環境)](https://github.com/rocker-org/rocker)

それなりのPCの動作環境が必要であり、事前に準備しておくとよいでしょう。

> https://www.jsae.or.jp/jaaic/tutorial.php
> 本大会で使用していただくPCの動作環境として以下を推奨しております。
> OS: Ubuntu 20.04
CPU: Intel Corei7 (8 cores) 以上
GPU: NVIDIA Geforce RTX 3080(VRAM 12 GB) 以上
メモリ: 32 GB 以上
ストレージ: SSD 30 GB 以上

# 想定される課題

以下が想定されます
（一般的な技術コンテストに共通するかもしれません）

1.開発環境構築（オンプレPCへの構築なので、依存関係やPC依存等があると厄介）
2.技術要素についての学習（`autoware/ROS2/AI、他関連技術`）
3.技術要素の使いこなし（本コンテストの競争領域）

2.については以下が参考になります

https://github.com/autowarefoundation/autoware.universe

https://www.youtube.com/watch?v=gQ9brD7E3n8

# コンテスト結果

第五回大会の結果は以下に記載があります。
以下に上位者の取り組みが公開されているようであり、確認してみてはいかがでしょうか。

https://www.jsae.or.jp/jaaic/result.php

https://car.watch.impress.co.jp/docs/news/1483712.html

# 参加した感想

最近ホットな「自動運転」「AI」周辺技術について触れる大変良い機会となりました。
特に普段、自動運転の要素技術に触れる機会が少ない方、学生〜若手技術者を中心に裾野を広げる良い機会になると思います。開催頂きありがとうございます。> 運営の皆さま
私自身、今後も継続的に取り組んでいきたいと思います。

# 後日談

とはいえ☝️を０から初心者1人で取り組むのはハードル高く感じる事もあるかもしれません。
せっかくなので一緒にやっていけると良さそうですね。
（もし同様の事を感じている方おられましたらコメント下さい&何か参加者同士で交流できるコミュニティあれば良いかもしれません。もし何かありましたらお声掛け下さいませ>主催の皆さま等）

# 備考

https://www.jsae.or.jp/jaaic/about.php

https://car.watch.impress.co.jp/docs/news/1483712.html

https://github.com/autowarefoundation/autoware.universe

https://www.youtube.com/watch?v=gQ9brD7E3n8
フォグコンピューティングとは？

# はじめに
毎週1本様々な技術に関する記事を投稿しています。
もし興味のある方は下のリンクから他の記事も見ていただければ幸いです。
 [@7_inai_](https://qiixta.com/7_inai_)


# フォグコンピューティングとは
フォグコンピューティングとは、IoT端末によって`取得したデータをクラウドに送信する前に、端末に近い場所で、ミドルウェアによって分散処理すること`を指します。
### ■フォグの由来
フォグは霧という意味です。クラウド(雲)よりも端末に近い位置で処理することから、フォグコンピューティングと名付けられました。

# フォグコンピューティング と エッジコンピューティング
フォグコンピューティングでは、クラウドではなく端末側でデータの処理を行うと記載しましたが、「エッジコンピューティングと同じでは？」と思った方もいるのではないでしょうか？フォグコンピューティングとエッジコンピューティングは同じ意味で使用している方もいますが、正確には若干の違いがあります。
`エッジコンピューティングは、データ処理を端末やデバイスのエッジで行うことを目的とし、フォグコンピューティングは、エッジとクラウドの両方でデータ処理を行い、データをリアルタイムで処理する`ことを目的としています。


# フォグコンピューティングのメリット
### ■メリット
- 通信速度UP
->近距離のデバイスで行うため。
- セキュリティレベルの向上
->個人情報をクラウドに送信する必要がないため。
- 通信量削減
->データ処理をエッジで行うため。

### ■デメリット
- セキュリティリスク
->メリットでセキュリティレベルの向上を上げましたが、処理を分散するためセキュリティリスクが増対する可能性がある。
- 管理の複雑さUP
->多数のエッジデバイスを管理する必要があるため。

# 終わりに
フォグコンピューティングは、IoTやビッグデータの分野で、ますます重要性を増しています。エッジデバイスの処理能力を活用し、クラウドサービスにアクセスしなくてもデータをリアルタイムで処理することができるため、今後ますます普及していくことが予想されます。

最後までお付き合いくださりありがとうございました。
DHCPサーバ構築メモ

主流のipv6では必要が無いのであれですが。
<p>1、dhcpサーバをインストールする</p>

```bash
sudo yum -y install dhcp
```
<p>2、dhcpサーバの設定をする</p>
<p>設定ファイルは/etc/dhcp/dhcpd.confです</p>

```bash
sudo vi /etc/dhcp/dhcpd.conf
```
<p>設定項目は割と大量にあります。</p>

```bash
subnet 192.168.1.0　netmask 255.255.255.0 # 割り当てるネットワーク　
{
  range 192.168.1.1 192.168.1.50; # 割り当て開始アドレス　割り当て最終アドレス
  default-lease-time 貸出期間(秒); # デフォルトは43200秒(12時間)
  option domain-name-servers 192.168.1.100; # DNSサーバ
 host ホスト名 # クライアントで固定ipアドレスを使用
 {
  hardware ethernet 00:11:22:33:44:aa;  # ハードウェアタイプとMACアドレス
  fixed-address 192.168.1.80;  # 割り当てるipアドレス
 }
}
```
他にも大量にあります。
<p>3、ファイアウォール設定</p>

```bash
sudo firewall-cmd --zobe=public --add-service=dhcp --permanent
sudo firewall-cmd --reload
```
<p>4、起動、自動起動設定</p>

```bash
systemctl start dhcpd
systemctl enable dhcpd
```
クライアントからはdhclientコマンドでipを取得します
SupabaseにPrismaからマイグレーションした際のbouncer config error

初歩的なミスですが同じように困る人もいるかもしれないのでメモ程度に残しておきます。

環境：Prisma Client 4.13

`npx prisma migrate dev --name init`
コマンドを実行してマイグレーションを実行したところ、以下のエラーが発生しました。


```
Error: db error: FATAL: bouncer config error
   0: schema_core::state::DevDiagnostic
             at schema-engine/core/src/state.rs:266
```

### 原因と対策

DATABASE_URLで設定しているSupabaseのポート番号が間違っていた（6543になっていた）ことが原因でした。
公式サイトの情報をもとに以下の形式に合わせてポート番号5432を指定することで解決しました。

```:.env
DATABASE_URL="postgres://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF].supabase.co:5432/postgres"
```

6543はコネクションプール用のポート番号なので、Supabaseから接続情報をコピーしてくる際に誤ってConnection stringではなくConnection Poolingの方からコピーしてしまったようでした:joy:


### 参考

https://supabase.com/docs/guides/integrations/prisma
GitHub初回アップロード方法

備忘録
## GitHubにアップロードする一連の流れ(新規アップロード)
※github側のリポジトリ作成は割愛
### ローカルリポジトリを作成
```
git init
```
### アップロード対象のファイルを追加
```
git add <パス/ファイル名>
# ex) git add .
```
「git add .」で、対象フォルダに入っている全てのファイルやフォルダを、アップロードの対象にできる。
### コミットメッセージ入力
```
git commit -m “コミット名”
# ex) git commit -m “first commit”
```
### リモートとの紐付けをする(GItHubとの連携)
```
git remote add origin url名
```
URLはurl名の部分には、新規リポジトリを作成したときの画面にある、urlをコピペ(HTTPS)
### GitHubへアップロード
```
git push origin main
```

## その他よく使うコマンド
### アップロードしたいフォルダへ移動
```
cd ディレクトリ名
```

## 終わりに
二回目(ファイルを変更時)のアップロード方法とチーム開発時のアップロード方法は別途記載予定。
【Docker初心者】Dockerの基本操作について　Part１（buildコマンド、runコマンド等）

# １.はじめに
最近、山浦清透さんが運営されているプログラミング学習サービス「独学エンジニア」にてDockerについて学び始めましたので、備忘録も兼ねて自分なりにまとめていきたいと思います。

# ２.Dockerとは
アプリケーションとその依存関係にあるOS・ライブラリを軽量で移植性のあるコンテナと呼ばれる箱に入れて、あたかも違うコンピュータのように扱えるものです。

![コンテナ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117662/c2f7a205-c30d-bb26-9445-2ff622d50097.jpeg)




# ３.Dockerのメリット
メリットについては多数あるのですが、いくつか紹介します。

* **環境の一貫性**
開発、テスト、本番環境で同じDockerイメージを使用することで、環境の違いによる問題を軽減できます。

* **セットアップの容易さ**
Dockerイメージを使用することで、開発者はOSやインストール方法の違いを気にせず、簡単にアプリケーションの環境を構築できます。

* **移植性**
Dockerコンテナは異なるマシンやクラウドプラットフォームで簡単に実行できるため、デプロイメントの柔軟性が向上します。

* **チームの協調性**
Dockerを使用することで、開発者間で環境設定の共有が容易になり、チーム全体の生産性が向上します。

* **インフラストラクチャ効率**
Dockerコンテナは軽量であり、同じホスト上で複数のコンテナを実行できるため、リソース使用効率が向上し、インフラストラクチャのコストが削減されます。

# ４.Dockerの基本操作
# （1） イメージを取得・ビルドする
コンテナの設計書となるイメージには２通りの作成方法があります。
* **Dockerレジストリより取得する**
```zsh:コマンド
# DockerHubから任意のDockerイメージ(imagename)を取得する場合
$ docker image pull imagename
```

* **Dockerfileをビルドする**
```zsh:コマンド
# Dockerfileがカレントディレクトリにある場合
$ docker image build .

#　タグを付ける場合（-tオプション）
#　タグの書式：　　名前空間/イメージ名:タグ名
$ docker image build -t test/apache:latest .

#　ファイル名を指定する場合（-fオプション）
$ docker image build -f Dockerfile-test .
```

# （2）イメージの一覧を確認する
```zsh:コマンド
# 現在のイメージの一覧を確認する
$ docker image ls
```

# （3） コンテナを生成・起動する


![コンテナ (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117662/67f76153-8b58-1485-f24c-c9f4b3686d8d.jpeg)

コンテナの生成・起動には「run」コマンドを、
生成だけには「create」コマンドを、起動だけには「start」コマンドを用います。
```zsh:コマンド
# 書式：docker container run [オプション] イメージ [コマンド]
$ docker container run test/apache:latest

# コンテナをバックグランドで実行する（-dオプション）
$ docker container run　 -d test/apache:latest

# コンテナに名前を付ける(--nameオプション)
$ docker container run --name apache_test test/apache:latest

# 標準出力とターミナルをアタッチする（-itオプション）
$ docker container run　 -it test/apache:latest
```
「-it」オプションはinteractiveの-iオプションとttyの-tオプションの２つを繋げたもので、
コンテナ上で最初に実行されるプロセスがシェルの場合、「-it」オプションを付けることによりコンテナを終了させずに使用できるようになります。

 
# （4） コンテナの一覧を確認する

```zsh:コマンド
# 起動中のコンテナ一覧を確認する
$ docker container ls

# 全コンテナの一覧を確認する（-aオプション）
$ docker container ls　 -a
```

# 5.終わりに
Dockerの超基本的なことまとめただけなのですが、やはり自分でアウトプットするとモヤモヤしていた部分がスッキリしたので、積極的にQiita等にアウトプットしていきたいと思います！

[Part2](https://qiita.com/gon0821/items/8765a32a89d56335c10a)では、ポートを公開したり、コンテナ内でコマンドの実行等の基本操作についてまとめて行きたいと思います。

Dockerは使いこなせると環境構築等で本当に便利そうなので早くマスターしたいですね。
また、ポートフォリオにもDockerを使用して作成したいので引き続き学んでいきたいと思います(*^^*)

# ６.参考資料
* [独学エンジニア（Lesson33・34参照）](https://dokugaku-engineer.com/)
独学エンジニアとても分かりやすく、記事の内容は講義内容を参考に作成しております。
月額約1,000円でオススメです！
カラー画像を白黒や5色のみで描画する

# 環境
実行環境：Google Colaboratory
言語：Python3


# 経緯
アート画像を作成する前段階として、この処理が必要であったため作成した。


# カラー画像を5色のみで再度描画する
## Before①
![ex.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758644/5bb28bf2-6e6a-511d-f912-06acdb56a48f.png)

## After①
![output.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758644/63319ad8-6892-73fe-ae34-ca4a1bc6431c.jpeg)

## Before②
![ダウンロード.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758644/304bdf89-ad45-578a-2ace-9d12a89e35d5.jpeg)

## After②
![ダウンロード (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758644/80e435ff-69aa-c146-af5d-fc8f740e9b17.jpeg)


# コード
```python
from google.colab import files
import io
import cv2
import numpy as np
from IPython.display import Image

import PIL.Image
import PIL.ImageDraw
import PIL.ImageFont

# 画像のアップロード
uploaded = files.upload()

# アップロードされた画像の読み込み
uploaded_file_name = next(iter(uploaded))
img = cv2.imread(uploaded_file_name)

# 画像の高さと幅を取得
height, width, _ = img.shape

# RGBの平均値を算出し、画像を5色に分割する
img_colors = np.zeros((height, width, 3), np.uint8)

for i in range(height):
    for j in range(width):
        # RGBを抽出
        b,g,r = img[i][j]

# 赤の定義は、R成分がG成分とB成分よりも大きく、かつ、R-Gが30以上であり、R-Bが30以上であること。他も同様
        if r > g and r > b and (r - g) > 30 and (r - b) > 30:
            img_colors[i][j] = [0, 0, 255]  # 赤
        elif g > r and g > b and (g - r) > 30 and (g - b) > 30:
            img_colors[i][j] = [0, 255, 0]  # 緑
        elif b > r and b > g and (b - r) > 30 and (b -g) > 30:
            img_colors[i][j] = [255, 0, 0]  # 青
        elif r > 180 and g > 180 and b > 180:
            img_colors[i][j] = [255, 255, 255]  # 白
        else:
            img_colors[i][j] = [0, 0, 0]  # 黒
            
# 出力
cv2.imwrite('output.jpg', img_colors)

# 出力画像の表示
display(Image(filename='output.jpg'))

```
基本ディレクトリコマンド一覧

# 基本ディレクトリコマンド一覧
自分のためによく使うやつを置いときます！



## 現在のディレクトリを確認

### A. pwd

## ルートディレクトリ

### A. cd/

## ホームディレクトリ
### A. cd~

## 一つ上のディレクトリに移動

### A. cd..　 or 相対パス

## ディレクトリの内容

### A. ls でリストが出るこれによりディレクトリ内のファイルが確認できる

## 隠しファイル
ps.隠しファイルを用いる事でOSの重要なフォルダを誤って削除しないようにしたり、重要な情報を隠せる！

### A. ls -a

## 詳細なリスト形式

### A. ls -l/etc

## ディレクトリの作成

### A. mkdir　(ディレクトリ名：例 mkdir cook)

## ディレクトリの削除

### A.rm -r (例　rm -r cook/)


このコマンドは、rm コマンドを使用して"cook"ディレクトリを削除するものです。"-r" オプションを使用すると、cook ディレクトリ内にあるすべてのファイルやサブディレクトリを再帰的に削除します。ただし、この操作は取り消せないため、慎重に実行してください

## 強制的的に終了

### A. control + C 
このコマンドを使用すると入力を求められた際やいろんな場面で処理を終了させる事だできる  
  
## ファイルの新規作成　　
  
### A. touch (ファイル名）  
  
## ファイルの中身を出力  
  
### A.cat (ファイル名）  


# 他にもいろんなコマンドがありますが基本中の基本はざっとこんな感じです！！　　
## 最後に　　
今回描かさせてもらった経緯と言いますか自分がコマンドを知りたての時にこういったシンプルに羅列したものが欲しかったので書かさせていただきました、この他にも "-a"などを使ったりして意味が変わってきたりするのでまずはこれで用語を知っていただけたらなと思います！　　
最後までご覧いただきありがとうございました〜