OmniAICreator/Qiita-1.07M huggingface dataset:
Ubuntu 22.04にOpenJDK 17をインストール（OS標準）

# はじめに

Ubuntu22.04にOpenJDKを標準インストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)

## サポート

不明
OpenJDK 17 プロジェクトをリードするベンダまたはコミュニティが示すサポート期日とUbuntu側のOS EOLの依存する。

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update;apt install -y openjdk-17-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment (build 17.0.3+7-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 17.0.3+7-Ubuntu-0ubuntu0.22.04.1, mixed mode, sharing)
```
エラー `System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down` の対処法

## 環境
- Windows 11 Home
- WSL2
- Ubuntu 20.04.4 LTS

## エラー
[こちらのサイト](https://www.softek.co.jp/SID/support/sidfmvm/guide/install-docker-ubuntu1804.html)を参考に、UbuntuにDockerをインストールしようとしたところ、手順の途中でエラーが出る。

```
sudo systemctl daemon-reload
~~ 省略 ~~
System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down
```

## 解決策
1. 以下のGitHubから、`systemd-genie.deb`をダウンロード
https://github.com/arkane-systems/genie/releases/tag/1.26
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2601631/059a9238-5cd6-b9b2-f8d1-506c388a3796.png)

2. ダウンロードしたファイルを、Linux上の`/home/<username>`に移す
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2601631/898bd646-2cfc-59c1-89b4-7c8f7db047db.png)

3. 以下のコマンド2つを実行
    ```
    sudo apt-get update; \
    sudo apt-get install -y apt-transport-https && \
    sudo apt-get update && \
    sudo apt-get install -y aspnetcore-runtime-3.1
    ```

    ```
    sudo dpkg -i systemd-genie.deb
    ```
4. 以下のコマンドを実行し、エラーが出なければ完了
    ```
    genie -s
    ```
VSCode拡張機能「Live server」リアルタイムで自動更新されない件(Mac m1)

## この記事の概要
VSCodeで編集する際ファイルを変更したらリアルタイムで変更内容が見れたらいいなと思いVSCode拡張機能「Live server」を導入しました!

しかし、リアルタイムで自動更新されません、、、:frowning2:(リロードしたらちゃんと変更してくれます)
そこでどのようにしたら解決したかを共有して行きたいと思います!
同じような症状の方がいらっしゃいましたら是非参考にしていただければと思います!

尚、筆者はMac(m1チップ)を使用していますので他の機器、OSに関しては参考にならないかもしれないです、、、

## 結論
解決策としてwebで調べてみるとVSCodeの自動保存を設定したり、アンインストールしたり色々解決策が合ったのですがどれもうまく行きません:sweat:
試行錯誤すること4時間...

バージョンを一つ古いのに変更したら解消されました!!!!!!
(もっと早く気付けばよかった:frowning:)
![スクリーンショット 2022-05-21 18.16.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2672659/eaffc6a6-7378-53ac-5571-7a5ba1be5042.png)
MacにNodeをインストール、バージョンを切り替える方法とNodeのバージョンについて

Macにnodeをインストール、バージョンを切り替える方法について備忘録としてまとめます。


## 実行環境: 

Mac OS ver.12.1
M1チップ


## インストール方法

nodebrew を使用してインストールします。
homebrew を利用するため、インストールしてない場合は[こちら](https://brew.sh/index_ja "Homebrew")からインストール。


### nodebrew のインストール
```shell
brew install nodebrew
```

### nodeのインストール

#### 最新版のnodeのインストール
LTS versionのインストール。
```shell
nodebrew install-binary latest
```

#### 安定版のインストール
(2022/05時点ではv18.1.0)
```shell
nodebrew install-binary stable
```

#### 現在提供されているバージョンの確認
```shell
nodebrew ls-remote
```

#### バージョンを指定してインストール
ls-remoteに存在するバージョンを指定。
```shell
nodebrew install-binary v16.13.0
```

### インストールに失敗した場合

以下のようなエラーが発生。
```shell
Password:
Fetching: https://nodejs.org/dist/v18.1.0/node-v18.1.0-darwin-x64.tar.gz
Warning: Failed to create the file 
Warning: [HOME]/.nodebrew/src/v18.1.0/node-v18.1.0-darwin-x64.tar.gz: No 
Warning: such file or directory
curl: (23) Failure writing output to destination

download failed: https://nodejs.org/dist/v18.1.0/node-v18.1.0-darwin-x64.tar.gz
```

おそらくnodebrew インストール時の初回のみ発生する。
nodebrew のセットアップを行い、再度インストール。

```shell
nodebrew setup
```

### nodebrewの適用

#### 現在ローカルのnodebrewで管理(?)しているバージョンの確認

```shell
nodebrew ls
```

#### バージョンの切り替え

```shell
nodebrew use v16.13.0
```

#### nodebrew の適用

```shell
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
```

#### 確認

適用したバージョンが表示されればOK!
```shell
node --version
```


## Nodeのバージョンについて

今回、nodeを使用したパッケージをインストールして、`npm start`でlocalhostにサーバーを立てることを行った。

パッケージは`npm`を使用してインストールした。このパッケージは最新版(LTS)のNodeを要求していたため、それに従い最新版のNodeにて実行。

`npm start`でサーバーを起動しようとしたところ、エラーが発生。
どうもMacでは`npm run dev-server`とした方がよいとのこと。


しかし`npm run dev-server`で実行すると以下のエラー(一部抜粋)が発生。

```shell
Browserslist: caniuse-lite is outdated. Please run:
  npx browserslist@latest --update-db
  Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
(node:5681) [DEP_WEBPACK_DEV_SERVER_HTTPS] DeprecationWarning: 'https' option is deprecated. Please use the 'server' option.
(Use `node --trace-deprecation ...` to show where the warning was created)
(node:5681) [DEP_WEBPACK_DEV_SERVER_CACERT] DeprecationWarning: The 'cacert' option is deprecated. Please use the 'ca' option.
node:internal/crypto/hash:67
  this[kHandle] = new _Hash(algorithm, xofLen);
                  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:67:19)
    at Object.createHash (node:crypto:133:10)
```

`sudo`で実行したりパッケージやNodeを再インストール、検証したりと色々試したが、最終的な解決策としては、Nodeのバージョンを安定版よりも落として、うまくいった。

最終的な解決方法
```shell
# インストールと切り替え
nodebrew install-binary v16.13.0
nodebrew use v16.13.0
# 適用
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
# nodeのversionの確認
node --version
```

node って、古いバージョンじゃないと動かないとかってよくあるんですかね？
僕は詳しくないので、詳しい方いたらぜひ教えていただけると幸いです。


## 参考

https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09

https://qiita.com/7110/items/efe0be1be11bed1db143
[RealityKit] Lightに関して

### PointLight
* 点光源のことを指す。点座標に向けて光を当てる光源で全方向に光を与えるエンティティのことを指す。
他にもライトの色や強度を設定することができる

* HasPointLightプロトコルに準拠している

* 持っているコンポーネント
Transformコンポーネント
Synchronizationコンポーネント
PointLightコンポーネント

サンプルコード
```swift
let lightEntity = PointLight()
let anchorEntity = AnchorEntity(plane: .horizontal)
// .light で PointLightが持っているPointLightコンポーネントのプロパティにアクセスできる。
lightEntity.light.color = .red 　色
lightEntity.light.intensity = 1500　強度
lightEntity.light.attenuationRadius = 0.5 // ライトが影響する距離
lightEntity.look(at: [0,0,0], from: [0,0,0.1], relativeTo:　anchorEntity) // ライトをどこから(from)どこに(relativeTo)に向けるか
anchorEntity.addChild(lightEntity)
arView.scene.anchors.append(anchorEntity)
```

### SpotLight
＊　円錐状の光をある方向から与えるエンティティ
＊　HasSpotLightを準拠している
*持っているコンポーネント
Transformコンポーネント
Synchronizationコンポーネント
SpotLightコンポーネント
コード
```swift
let lightEntity = SpotLight()
lightEntity.light.color = .red //色
lightEntity.light.intensity = 2000 // 強さ
lightEntity.look(at: [0,0,0], from: [0,0.03,0.1], relativeTo: lightAnchor) // 方向を決める
// ここら辺でどのような円錐の形で光を与えるのかを決めるっぽいがあんまりわかってない。
lightEntity.light.innerAngleInDegrees = 40 // 光を与える円錐の内角
lightEntity.light.outerAngleInDegrees = 60　// 光を与える円錐の外角
lightEntity.light.attenuationRadius = 15 // 光の量がゼロになる円錐の半径

let lightAnchor = AnchorEntity(plane: .horizontal)
lightAnchor.addChild(lightEntity)
arView.scene.anchors.append(lightAnchor)
```

### DirectionalLight
特定の方向から一直線に光を与えるエンティティのことを指す。
* HasDirectionalLightコンポーネントを持つ
* 持っているコンポーネント
Transformコンポーネント
DirectionalLightコンポーネント
Synchronizationコンポーネント

```swift
let lightEntity = DirectionalLight()
lightEntity.light.color = .red // 色
lightEntity.light.intensity = 1500 // 強さ
lightEntity.shadow?.maximumDistance = 5　// 影の最大の距離
lightEntity.shadow?.depthBias = 5 // 影の深度

let lightAnchor = AnchorEntity(plane: .horizontal)
lightAnchor.addChild(lightEntity)
arView.scene.anchors.append(lightAnchor)
```
Ubuntu 22.04にOpenJDK 11をインストール（OS標準）

# はじめに

Ubuntu22.04にOpenJDKを標準インストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)

## サポート

[Java Is Still Free](https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/edit?usp=sharing) ([日本語版](https://docs.google.com/document/d/1HtUnuAkUEDGL2gwUOkrDrmLe_zrD6wpAyqYBZxRmHv4/edit?usp=sharing))では、”At least through Sept 2025” という記載がある。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update;apt install -y openjdk-11-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1, mixed mode, sharing)
```
Vue.js provide/inject

vue.jsではコンポーネント間のデータの受け渡し方法がいくつかります。親子間だけでなくで複数のコンポーネントにまたがってデータの受け渡しができるprovide/inject についての基本的な使い方を書いていきます。

## 「provide」の設定

provideはデータを提供する側になります。まずはその値の設定をします。

```jsx
Vue.createApp({})
  .component('first-component', {
    provide: {
      title: 'provide！'  {/* provideで値を設定 */} 
    },
    template: `<div>
                <second-component />
              </div>`,
  })
```

「provide」の値はそれを使用する範囲の最上位のコンポーネントで設定をします 。形式として

```
provide: { 名前: 値 }
```

という形で設定します。上位で設定したprovideは階層に関わらず全ての下位コンポーネントで使用することができます。

## 「inject」の設定

次に、値をコンポーネントで使用するためにinjectを設定します。

```jsx
Vue.createApp({})
  .component('first-component', {
    provide: {
      title: 'provide！'
    },
    template: `<div>
                <second-component />
              </div>`,
  })
  .component('second-component', 
    template: `<div>
                <third-component />  
              </div>`
  })
  .component('third-component', {
    inject: ['title'],             
    template: `<div>
                <p>{{ title }}</p>  
              </div>`
  }).mount('#app')
```

propsとの違いを明確にするため今回は子コンポーネントと孫コンポーネントを用意し、孫コンポーネントのみでinjectしていきます。（子コンポーネントでもinjectできますが、それだけだとpropsとの機能の違いが出ないため。）

injectを設定する場合の形式は

```
inject: ['injectaする名前']  # 配列で設定
```

とします。provideはオブジェクト形式でしたがinjectは読み込みたい値の名のみを配列形式で設定します。

基本的な設定は以上です。今回は3階層でのデータのやりとりでしたが、これが何階層に跨ったとしても同じように設定することができます。

## オブジェクトを渡す時の注意

先程の例ではprovide値に文字列を渡しているだけですが、値にオブジェクトを渡す場合は少しやり方が違うので注意が必要です。

### オブジェクトを返す関数として渡す

```jsx
Vue.createApp({})
  .component('first-component', {
    provide: function(){
      return {
        title: 'provide！' {/* オブジェクトを返す関数として設定する */}  
      }
    },
    template: `<div>
                <second-component />
              </div>`,
.
.
.
  }).mount('#app')
```

オブジェクトをprovideに設定する場合、名前に値を設定するだけでなく「データを返す関数として定義」しなければいけません。

## 変化する値を渡す場合

上位のコンポーネントで値が変化する場合はより複雑になります。

```jsx
Vue.createApp({})
  .component('first-component', {
    data: function() {
      return {
        title: 'provide！'
      }
    },
    provide: function(){
      return {
        title: Vue.computed(() => this.title)
      }
    },
    template: `<div>
                <imput type="text" v-model="title"/>
                <second-component />
              </div>`,
.
.
.
  }).mount('#app')
```

provideで設定する値にコンポーネントそのものに設定されているtitleプロパティの値を返す算出プロパティを定義しています。これで上位のコンポーネントでtitleプロパティに変化があったときに、下位コンポーネントの表示も変化させることができます。
Ubuntu 22.04にOpenJDK 8(1.8)をインストール（OS標準）

# はじめに

Ubuntu22.04にOpenJDKを標準インストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)

## サポート

[Java Is Still Free](https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/edit?usp=sharing) ([日本語版](https://docs.google.com/document/d/1HtUnuAkUEDGL2gwUOkrDrmLe_zrD6wpAyqYBZxRmHv4/edit?usp=sharing))では、”At least through Sept 2023” という記載がある。またOSのEOLは2027-04となる。
ただし[Announcing OpenJDK 11 packages in Ubuntu 18.04 LTS | Ubuntu](https://ubuntu.com/blog/announcing-openjdk-11-packages-in-ubuntu-18-04-lts)によると、Ubuntu18.04は2021-04までの保守になる模様。
Ubuntu22.04での保守期間がどうなるかは不明。

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update;apt install -y openjdk-8-jdk
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
```
Django デプロイ前後のエラー対処(初学者)

# はじめに
<!-- 発端や概要を記載 -->
こちらの記事はDjangoで作成したものをHerokuにてデプロイする際にエラーにとてもつまずいたので、また見返す用に作成しました。誰かのためになれば嬉しいです。

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [push前のエラー](#Chapter1)
1. [push後のエラー](#Chapter2)
1. [参考文献](#reference)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# push前のエラー
## 「error: failed to push some refs to」について
Herokuで「git push heroku main」を実行する際に、以下のようなエラーが出ることがあります。
```
To https://git.heroku.com/<アプリ名>.git
![remote rejected]main -> main (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/<アプリ名>.git'
```
上記のエラーは、To から始まるログの前に複数行のログが表示されているのですが、その中にAbortingなど、エラーを示唆する文言があるエラー行があるのでそこを見ることで解決につながりました。
例えば、
```
Requested runtime (python-3.8.1) is not available for this stack ~.
```
のようなHerokuに対応していないPythonのバージョンを「runtime.txt」で指定する。
あるいは
```
remote:  !     Error while running '$ python manage.py collectstatic --noinput'.
```
というエラーもありました。
こちらのエラーは、「push」する前に、
```
heroku config:set DISABLE_COLLECTSTATIC=1
```
というふうにすることでエラーを解決できました。push後は、
```
heroku config:set DISABLE_COLLECTSTATIC=0
```
という様に戻すことを忘れないでください。

<a id="#Chapter2"></a>
# push後のエラー
デプロイした後にもいくつかのエラーが出ました。
1つ目は、
「Internal Server Error」です。
これについての1つ目の原因は、「settings.py」において、
```
DEBUG=False
```
を入れ忘れていたことです。凡ミスですね。
2つ目の原因は、
「Procifile」にありました。
「Procifile」は、BASE_DIRにありますが、このファイルを作成する際に「wsgi.py」のディレクトリ指定が間違っていたいことが原因でした。
このファイルのルールとしては、
```
web: gunicorn (あなたのプロジェクトのwsgi.pyがあるディレクトリの名前).wsgi
```
と書く必要があります。つまり、wsgi.pyがprojectディレクトリに入ってる場合は、以下の様に書きます。
```
web: gunicorn project.wsgi
```

2つ目のエラーはデータベースについてのエラーです。1つ目のエラーを解消し後で次の様なエラーが出てきました。
```
django.db.utils.OperationalError: no such table:
```
あれ、テーブルあるはずなのになとおもいましたが、調べていくとこれは、.gitignoreファイルでデータベースを無視する様に書いていたからでした。なので、.gitignoreから「db.sqlite3」を削除すれば解決しました。


<a id="#reference"></a>
# 参考文献
- [error:failed to push some refs toエラーについて](https://algorithm.joho.info/heroku/error-failed-to-push-some-refs-to/)
- [pythonバージョンが対応されていないエラーの話](https://stackoverflow.com/questions/71712258/error-could-not-build-wheels-for-backports-zoneinfo-which-is-required-to-insta)
- [Error while running '$ python manage.py collectstatic --noinput'](https://qiita.com/Kohey222/items/82f3a76e0247b2d387db)
- [Procfileエラーについて](https://www.mathpython.com/ja/procfile/)
- [django.db.utils.OperationalError: no such table:](https://qiita.com/kotaaaa/items/f1d9df26d114cf886f35)
Ubuntu 22.04にNginx mainline最新版をインストール（公式repository）

# はじめに

公式repositoryを利用してUbuntu 20.04にNginx mainline最新版をインストール
親記事：[Nginxの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/df4a0baaaad9c932ea30)
参考：[nginx: Linux packages](https://nginx.org/en/linux_packages.html#Ubuntu)

## サポート

本手法で導入した場合、nginxの開発が停止するまでサポートされると思われる。
特定のバージョンを指定しなければ、mainline最新版が常に提供されると思われる。

## LOG

### レポジトリ登録

```shell-session
# apt update; apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
# curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
# gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid                      nginx signing key <signing-key@nginx.com>

# echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
# echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | tee /etc/apt/preferences.d/99nginx
```

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update; apt install -y nginx
... 略
```

### 各種確認

```shell-session
# which nginx
/usr/sbin/nginx

# nginx -v
nginx version: nginx/1.21.6

# apt show nginx
Package: nginx
Version: 1.21.6-1~jammy
Priority: optional
Section: httpd
Maintainer: NGINX Packaging <nginx-packaging@f5.com>
Installed-Size: 3254 kB
Provides: httpd, nginx, nginx-r1.21.6
Depends: libc6 (>= 2.34), libcrypt1 (>= 1:4.1.0), libpcre2-8-0 (>= 10.22), libssl3 (>= 3.0.0~~alpha1), zlib1g (>= 1:1.1.4), lsb-base (>= 3.0-6), adduser
Conflicts: nginx-common, nginx-core
Replaces: nginx-common, nginx-core
Homepage: https://nginx.org
Download-Size: 1002 kB
APT-Manual-Installed: yes
APT-Sources: http://nginx.org/packages/mainline/ubuntu jammy/nginx amd64 Packages
Description: high performance web server
 nginx [engine x] is an HTTP and reverse proxy server, as well as
 a mail proxy server.

N: There are 2 additional records. Please use the '-a' switch to see them.
```
IBM Cloudの新マスタリー試験IBM Cloud DevSecOps v1 Specialtyを受けてみた

# IBM Cloud DevSecOps v1 Specialtyとは

IBMのマスタリー試験（特定製品スペシャリストの適格認定試験）の1つです。主にIBM CloudのContinuous Deliveryサービスやセキュリティ関連の専門性を認定する試験です。2022年5月から受験可能になりました。

<img width="160" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/f5620b05-1969-e6b3-a072-499b6b32a798.png">

認定資格および試験の概要はこちら。

> https://www.ibm.com/training/certification/S2112100

# 学習方法

難易度は私には少々「高め」でした。普段Continuous Deliveryサービス、Delivery Pipeline、Schematicsサービスを使いこなしている人には簡単かもしれません。

公式の学習パスは下記のとおり公開されています。

> https://www.ibm.com/training/path/ibmcloudforfinancialservices

# 受験方法

PearsonVUE社のサイトで予約して受験してください。

https://www.pearsonvue.co.jp/Clients/IBM.aspx

以前は最寄りのテストセンターでしか受験できなかったのですが、最近はカメラ付きPCがあれば自宅でも受験可能になりました。こういうご時世ですので、可能であれば自宅での受験をお勧めします。ただし部屋の片づけはきちんとしておいてください。

# 合格点

41問中27問以上の正解で合格です。正答率は65%です。

# 出題内容

試験規約により具体的な問題文は書けませんので、雰囲気になりますが、いくつか問われそうな箇所を書きます。

* CI/CDの目的・概念
* 関連部門の役割
* Activity Trackerの用途・動作
* IBM Cloud Monitoringの構成方法
* DevOps Insightsの役割
* ツールチェーン・テンプレートの種類
* SchematicsとAnsible、Terraformの連携
* Security and Compliance Centerとの連携
* コンテナセキュリティの実現方法
* CRA (Code Risk Analyzer)の使い方
* Sauce Labsの役割
* SPAの認証フロー

# 感想

例によって無勉強で受けにいきましたが、かなりぎりぎりの点数で合格できました。これから受ける方は、きちんとラーニングパスで勉強することをお勧めします。
Ubuntu 22.04にNginx stable最新版をインストール（公式repository）

# はじめに

公式repositoryを利用してUbuntu 20.04にNginx stable最新版をインストール
親記事：[Nginxの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/df4a0baaaad9c932ea30)
参考：[nginx: Linux packages](https://nginx.org/en/linux_packages.html#Ubuntu)

## サポート

本手法で導入した場合、nginxの開発が停止するまでサポートされると思われる。
特定のバージョンを指定しなければ、stable最新版が常に提供されると思われる。

## LOG

### レポジトリ登録

```shell-session
# apt update; apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
# curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
# gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid                      nginx signing key <signing-key@nginx.com>

# echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
# echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | tee /etc/apt/preferences.d/99nginx
```

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update; apt install -y nginx
... 略
```

### 各種確認

```shell-session
# which nginx
/usr/sbin/nginx

# nginx -v
nginx version: nginx/1.20.2

# apt show nginx
Package: nginx
Version: 1.20.2-1~jammy
Priority: optional
Section: httpd
Maintainer: NGINX Packaging <nginx-packaging@f5.com>
Installed-Size: 3222 kB
Provides: httpd, nginx, nginx-r1.20.2
Depends: libc6 (>= 2.34), libcrypt1 (>= 1:4.1.0), libpcre3, libssl3 (>= 3.0.0~~alpha1), zlib1g (>= 1:1.1.4), lsb-base (>= 3.0-6), adduser
Conflicts: nginx-common, nginx-core
Replaces: nginx-common, nginx-core
Homepage: https://nginx.org
Download-Size: 991 kB
APT-Manual-Installed: yes
APT-Sources: http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
Description: high performance web server
 nginx [engine x] is an HTTP and reverse proxy server, as well as
 a mail proxy server.

N: There are 2 additional records. Please use the '-a' switch to see them.
```
しばらく使わなかったらmacOSのRancher Desktopでdocker imagesほかコマンドが通らなくなったのを解決したメモ

* [Rancher Desktop 1.3.0(latest) で非互換の変更があった](https://github.com/rancher-sandbox/rancher-desktop/releases/tag/v1.3.0)。
  * Root権限を必要としていた `/var/run/docker.sock` を作らなくなった。
* だからそれを利用者が調達しないといけないよ。
    * 自分でやってね。(やったのが以下)
* macOS環境で、Rancher Desktopはlimaに依存している。
    * [limaの公式GitHubにdocker互換環境を作れるdocker.yamlがある](https://github.com/lima-vm/lima/blob/master/examples/docker.yaml)から、それを使ってlimaのQemu VMを調達してね。
    * limactl startすると、 `docker context` で参照すべきsocketファイルを生成しているメッセージが出てくる。
* 作るDocker Contextは `$HOME/.lima/docker(limaのVM名)/socks/docker.sock` に自動生成されるので、これを `docker context update` に食わせれば動く。

地味に手間だった。めんどくさい。
pathを通そうと思ってvimを編集したら、コマンドが使えなくなった

環境構築をしようと思ってvimを編集したら、コマンドが使えなくなってしまいとても焦りました。


# 現象
vimにpathを書き込んで、:wqで保存しました。
pathがうまく通らなかったので、もう一度vimをを開こうと思ったら、
```
$vim .zshrc
zsh not commnd found
```
となってしまいました。

# 解決
まずターミナルからvimを開こうと思ってもコマンドが使えないので、直接入力して開きました。
```
% /usr/bin/vi ~/.zshrc
```
そして、iでinsertにして、pathを編集し直して、escで戻り:wqで上書き保存しました。

何がうまくいってなかったのかまではわかりませんでした。

# 参考記事
*[Pathを通すとは、環境変数とは](https://qiita.com/fuwamaki/items/3d8af42cf7abee760a81)
*[環境変数の設定を間違えてほとんどのコマンドが command not found になってしまったときの対処法](https://qiita.com/noraworld/items/4556f91bc31f641d187d)
*[【zsh, bash】macでPATHを通す方法 - not found と出てしまったら](https://qiita.com/k3ntar0/items/eb8cdbd8eba9da388def)
Ubuntu 22.04にNginx 1.18をインストール（OS標準）

# はじめに

Ubuntu22.04にNginxを標準インストール
親記事：[Nginxの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/df4a0baaaad9c932ea30)

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update; apt install -y nginx
... 略
```

### 各種確認

```shell-session
# which nginx
/usr/sbin/nginx

# nginx -v
nginx version: nginx/1.18.0 (Ubuntu)

# apt show nginx
Package: nginx
Version: 1.18.0-6ubuntu14.1
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@alioth-lists.debian.net>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 50.2 kB
Depends: nginx-core (<< 1.18.0-6ubuntu14.1.1~) | nginx-full (<< 1.18.0-6ubuntu14.1.1~) | nginx-light (<< 1.18.0-6ubuntu14.1.1~) | nginx-extras (<< 1.18.0-6ubuntu14.1.1~), nginx-core (>= 1.18.0-6ubuntu14.1) | nginx-full (>= 1.18.0-6ubuntu14.1) | nginx-light (>= 1.18.0-6ubuntu14.1) | nginx-extras (>= 1.18.0-6ubuntu14.1)
Breaks: libnginx-mod-http-lua (<< 1.18.0-6ubuntu5)
Homepage: https://nginx.net
Download-Size: 3884 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
Description: small, powerful, scalable web/proxy server

N: There is 1 additional record. Please use the '-a' switch to see it
```
Macで簡単にLinux環境を構築して「1日1問、半年以内に習得 シェル・ワンライナー160本ノック」を行う方法

### Macでもシェルワンライナーがやりたい！！

最初の２つの段落は導入に関係ないので、飛ばしたい方は「Limaの導入準備」からお読みください。

https://www.amazon.co.jp/1%E6%97%A51%E5%95%8F%E3%80%81%E5%8D%8A%E5%B9%B4%E4%BB%A5%E5%86%85%E3%81%AB%E7%BF%92%E5%BE%97-%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%BB%E3%83%AF%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%8A%E3%83%BC160%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4297122677?&linkCode=ll1&tag=pspde-22&linkId=5a6983c98960e45af52cf0120647b354&language=ja_JP&ref_=as_li_ss_tl

**※盛大な勘違いによりMacには最新のbashは入らないのだろうと盛大に勘違いしていました。
2022-05-22に記事にHomebrewを使ったbashのアップデート方法を追加しました！
１番簡単にMacでシェルワンライナーを使う方法はそちらになります。**

【導入方法】
・Homebrewをインストールする。
```
brew install bash
```
・ターミナルを再起動する。
```
bash
```
これでアップデートされたbashが起動します。
**

今回はWindowsのWSL2のように使えるMacのLimaでシェルワンライナーを行ってみたいと思います。

その前に、Limaを導入する以外の方法でシェルワンライナーを行う方法はどんな方法があるかを紹介したいと思います。

私が今まで取っていた方法は下記の３つです。

**①webshを使う**

https://websh.jiro4989.com

こちらのサイトでは基本的なLinuxコマンドでの操作を体感することができます。
手軽にコマンドを実行して、Twitterに投稿できるので非常に便利です。

ただ、Githubからシェルワンライナーの問題がダウンロードできないなど一部のシェルワンライナーの問題をこなすのには不向きです。

**②VirtualBoxを使う、もしくはデュアルブート環境を作る**

VirtualBoxは面倒くさい・・・。
ただそれだけです。

また、Linux専用のパソコンで複数のLinuxをブートできる環境を作るのは良いと思うのですがMacではやりたくないなあと思いました。

**③zashにHomebrewを導入して簡易的なbash環境を作る。**

これは何が入っていて、何が入っていないのか？という管理がめんどくさかったです。

そうです！MacでちょっとLinuxコマンドを練習しようと思うと意外とめんどくさいのです！
WSL2の様に簡単に起動できて色々できるものはないだろうか？

それがLimaです。

#### Limaってどういう物ですか？

Limaの機能は主に２つです。

①Linux仮想マシンをMacOS上で提供

②containerdの起動
（Dockerなどのコンテナサービスのバックエンド）

なので、Limaを使えばより便利にMac上でDockerと連携することができます。
むしろこっちをメインに使っている方の方が絶対に多いです・・・。

今回はそんなLimaをLinux仮想マシンの起動目的のみで利用するというわけです。

使い心地としてはWASL2に近いです。

#### Limaの導入準備

シェルワンライナーをやるための準備を行います。

基本的なターミナル操作の知識がある前提でお話しします。

Limaを導入する前に下記の要件を満たしてください。

**要件：Homebrewを導入済**

#### Limaのインストールから環境設定まで

下記のコマンドをターミナル上で実行します。
``` 
brew install lima
```

インストール完了後に更に下記のコマンドを実行します。
```
limactl start
```

下記のような画像の画面が立ち上がります。

シェルワンライナーをやるだけでしたら、最上部のProceed with the current configurationを選択するだけです。

自動でUbuntuがインストールされます。

Choose another exampleを選択すればインストールするLinuxディストリビューションを選択できます。

![スクリーンショット 2022-05-21 17.49.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2636207/75bb91db-0de5-2938-e183-92fdaa24478a.png)


インストール終了後は
```
lima
```

で起動することができます。

**これで各種Linuxコマンドを自由に使えるようになりました。
思う存分シェルワンライナーを楽しみましょう！！**

※Limaはパーミッション許可を設定しないと書き込みができないので、デフォルトで書き込み権限のある「Users/tmp」に移動してshell-gei160のリポジトリをgit cloneしてください。
インストール後の書き込みパーミッションの変更方法については現在調べています。
普通のchmodじゃ出来ない気がするのですが気のせい・・・？

今後新しいLimaのインスタンス（別のLinuxディストリビューション）を作りたいときは
```
limactl start --name=NAME 
//NAME部分を自由に指定
//起動時もこのコマンドを使います
```

他に基本的な操作として、インスタンスの停止と削除があります。

```
limactl stop NAME 
//NAMEは作成時に指定した名前
```

```
limactl delete NAME 
//stopしていないと削除できません
```
Ubuntu 22.04にPHP-FPM 8.1をインストール（OS標準）

# はじめに

Ubuntu22.04にPHP-FPMを標準インストール
親記事：[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update;apt install -y php-fpm
... 略
```

### 各種確認

```shell-session
# which php
/usr/bin/php

# which php-fpm8.1
/usr/sbin/php-fpm8.1

# php -v
PHP 8.1.2 (cli) (built: Apr  7 2022 17:46:26) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

# php-fpm8.1 -v
PHP 8.1.2 (fpm-fcgi) (built: Apr  7 2022 17:46:26)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

# apt show php-fpm
Package: php-fpm
Version: 2:8.1+92ubuntu1
Priority: optional
Section: universe/php
Source: php-defaults (92ubuntu1)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP Maintainers <team+pkg-php@tracker.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 14.3 kB
Depends: php8.1-fpm
Download-Size: 2838 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
Description: server-side, HTML-embedded scripting language (FPM-CGI binary) (default)
```
Raspberry Pi Zeroを使ってAmazon Kinesis Video Streamsにカメラ映像送信 (2)

# 1. 概要
Raspberry Pi Zeroを使ってAmazon Kinesis Video Streamsに送信したカメラ映像をWebブラウザで再生していると停止してしまう現象を調べる。ついでに、フレームレートが指定通りでないように見える件も調べる。

# 2. 前置き
前の記事でKinesis Video Streams(KVS)にカメラ映像を送信できることを確認した。この方法を確かめた知人が2時間くらいクライアントで映像再生していると停止してしまうと連絡があり確かめることにした。また、フレームレートが安定していないとも言っていた。

前記事

https://qiita.com/tetsuoMikami/items/d9fa860cab026ba36690

## 2.1 使用機器
* Raspberry Pi Zero WH
  OSはBuster(Debian 10)
* UVCカメラ: Buffalo BSW500M
* USB HUB(カメラ以外にキーボードやマウスをつなぐ場合)
* 再生用クライアント（これは知人が指定してきた）
  https://aws-samples.github.io/amazon-kinesis-video-streams-media-viewer/

# 3. 映像再生が停止するか確認
まずは、前記事の方法でKVSにカメラ映像をアップロード開始する。次に、再生用クライアントをWebブラウザで起動する。指定するのは、
* Region ← aws-regionの値
* AWS Access Key ← access-keyの値
* AWS Secret Key ← secret-keyの値
* Stream name ← stream-nameの値

これらはアップロード時のコマンド（下記参照）内にある
```
$ gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480 ! omxh264enc control-rate=2 target-bitrate=512000 periodicity-idr=45 inline-header=FALSE ! h264parse ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! kvssink stream-name="MyKinesisVideoStream" access-key="＜アクセスキー＞" secret-key="＜シークレットアクセスキー＞" aws-region="ap-northeast-1" 
```

そして、ページ下部にある「Start Playback」をクリックすると、再生開始する。
そして、5分で再生停止した・・・

# 4. 原因調査
## 4.1. クライアント側の情報
WebブラウザにはEdgeを使用した。F12で開発者ツールを使用した以下を確認した。これを見るとサーバー側の問題に見える。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1865486/be5556a6-c8d9-9056-f470-b5b725705960.png)

もう1つ情報を得た。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1865486/09f7bf48-5727-6a21-d368-c3d0463c054b.png)

## 4.2. マスター側(カメラ)の確認
エラーはなかったが、以下の警告が出ていた。タイムスタンプの問題？
```
[WARN ] [15-05-2022 05:11:34:192.582 GMT] putKinesisVideoFrame(): Failed to submit frame to Kinesis Video client. status: 0x32000002 decoding timestamp: 17951451 presentation timestamp: 16525914943046922
```

# 5. 対策
# 5.1. マスター側で「Failed to submit frame ～」が
kvssinkのパラメータを調べた
https://docs.aws.amazon.com/ja_jp/kinesisvideostreams/latest/dg/examples-gstreamer-plugin-parameters.html
どうやら以下が使用できることが分かった。UVCカメラのフレームにはタイムスタンプがなかったのかも？
```
frame-timecodes=false
```

# 5.2. クライアント側でStreaming session token is expired
最初は。ブラウザにある「AWS Session Token (Optional)」かなと思ったが、「Expires (seconds)」の項目だと分かった。
ここがからの場合、自分の環境では5分で再生停止したが、1800にすると30分で再生停止し、7200ににすると2時間で再生停止した。勝手に停止してしまう原因はここで間違いにだろう。デフォルトが5分なのか？

# 5.3. フレームレートが安定しない
再生映像を見ていると確かに一定していない気がする。マスター側のコマンドをよく見るとフレームレート設定していないが、それとは別にkvsのパラメータにframerateがあることも気が付いた。
以下のように設定すると再生映像が心なしか安定したようだ。
```
framerate=30
```

# 6. 結論
上記の結果を知人に連絡したところ、再生停止はしなくなり、フレームレートも安定したように見えるとのことだ。ちなみ教わったクライアントではなく自作クライアントらしい。再現できていなかったかもしれんので、そこは言っておいてほしかったねー。

【まとめ】
* マスター側でWarningが出るなら、「frame-timecodes=false」はあった方がよい。
* 24時間365日見続けるつもりがないなら、「Expires (seconds)」で再生する時間を指定した方がよい。
* フレームレートはkvsのパラメータだけでなく、入力側も設定した方がおそらく良い。 
 こんな感じ「video/x-raw,width=640,height=480,framerate=30/1」

以上
Ubuntu 22.04にPHP 8.1をインストール（OS標準）

# はじめに

Ubuntu22.04にPHPを標準インストール
親記事：[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update;apt install -y php
... 略
```

### 各種確認

```shell-session
# which php
/usr/bin/php

# php -v
PHP 8.1.2 (cli) (built: Apr  7 2022 17:46:26) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

# php -i | grep php.ini
Configuration File (php.ini) Path => /etc/php/8.1/cli
Loaded Configuration File => /etc/php/8.1/cli/php.ini

# apt show php
Package: php
Version: 2:8.1+92ubuntu1
Priority: optional
Section: php
Source: php-defaults (92ubuntu1)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP Maintainers <team+pkg-php@tracker.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 14.3 kB
Depends: php8.1
Download-Size: 2756 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
Description: server-side, HTML-embedded scripting language (default)
```
Ubuntu 22.04にMariaDB 10.6をインストール（OS標準）

# はじめに

Ubuntu22.04にMariaDB10.6をインストール
親記事：[MySQL, MariaDBの各種インストール方法とEOLまとめ \- Qiita](https://qiita.com/witchcraze/items/72291ee035437ec83273)

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update; apt install -y mariadb-server
... 略
```

### 各種確認

```shell-session
# service mariadb start
# mysql -u root -e'select version();'
+-------------------------+
| version()               |
+-------------------------+
| 10.6.7-MariaDB-2ubuntu1 |
+-------------------------+
```

### 注意

特定環境だと下記設定をしないとMariaDBが起動しない模様
[mysql \- Unable to start mariadb service on WSL2 \(Win10\) Ubuntu 22\.04 \- Ask Ubuntu](https://askubuntu.com/questions/1408001/unable-to-start-mariadb-service-on-wsl2-win10-ubuntu-22-04)
https://askubuntu.com/a/1409701
jenkinsのfavicon設定 jenkins:ver 2.348

simple themeでのfaviconや、cssの使い方について少し記載したけど、ver 2.348のjenkins落としてきて再度やってみることにする記事。

前回やったのはこれ

https://qiita.com/bluelemmon/items/1ccae9bc606e1b16c22b

# Simple Theme Plugin
インストール方法は、前回記載したので割愛

## Simple Theme の設定を確認
これをインストールすると、
jenkinsのディレクトリ/userContent/readme.txt が作成されます。
中を見るとこんな記載。URLを指定することについての記載。

>このディレクトリのファイルは、http://server/jenkins/userContent/ として提供されます。

では、一旦jenkins側のSimple Theme設定をチェックする。

| ![スクリーンショット 2022-05-21 18.13.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026740/efaf95a3-f491-0ff7-da88-abc12df6460b.png) |
|:--|

faviconの設定ができるので、アドレスを先ほど記載されていたreadme.txtに合わせて変更します。
保存すると任意のicoで、反映されます。

| ![スクリーンショット 2022-05-21 18.12.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026740/1877c0c7-61d2-5507-8009-f2088a2b6c4f.png) |
|:--|

ただ、TOPページのjenkinsおじさんはこのままですね。
これは、cssを変更しないといけないので次回変更方法について記載します。
[Webを支える技術] 第5部 Webサービスの設計　個人的重要部分まとめ

# 読み取り専用のWebサービスの設計
## リソース設計
リソース設計において必要となるのはリソースの種類、リソースの操作方法、リソースとリソースのリンク関係など。
WebサービスとWeb apiは同じ技術を用い、同じアーキテクチャのもとで動いているのでを分けて考えないことが重要。
(別のものとして考えない)
## リソース指向アーキテクチャのアプローチ
リソース設計として存在するリソース指向のアーキテクチャは
1. Webサービスで提供するデータを特定する
1. データをリソースにわける
1. リソースにURIで名前をつける
1. クライアントに提供するリソースの表現を設計する
1. リンクとフォームを利用してリソース同士を結びつける
1. イベントの標準的なコースを検討する
1. エラーについて検討する

のステップで設計をする。

イベントの標準的なコースの検討とは郵便番号のapiであれば郵便番号を検索する、住所から郵便番号を検索する、地域リソースの階層をたどりながら郵便番号を選択する、など。
エラーについての検討は存在しないURIの指定、必須のパラメータを指定していない、サポートしていないメソッドの利用など。

# 書き込み可能なWebサービスの設計
## リソースの作成
リソースを作成するための特別なリソースをファクトリソースという。
## リソースの更新
### バルクアップデート
リソースを更新する際に、リソース全体を送信し更新する方法をバルクアップデートという。バルクアップデートはクライアント側の実装が簡単になるというメリットがある反面、送受信するデータが大きくなるというデメリットがある。
### パーシャルアップデート
リソースを更新する際に、リソースの一部分だけを送信する方法をパーシャルアップデートという。パーシャルアップデートは送受信するデータの量が少なくなるというメリットの反面、GETしたリソースの一部を修正してそのままPUTする、という使い方ができなくなる。

サーバー側でパーシャルアップデートをサポートする場合には、バルクアップデートもサポートするのが望ましい。

## バッチ処理
バッチ処理のリクエストを受け付けたサーバーはデータを分解し、それぞれの更新処理を行う。途中でエラーが起きてしまった場合の対処法は2つあり、1つはバッチ処理を __トランザクション化__ し、途中で失敗した場合には何も処理しないことをwebサービスの内部で保証する方法。もう1つは処理が成功したリソースと失敗したリソースをクライアントに伝えるという方法。

## 排他制御
### 悲観的ロック
ユーザーをあまり信用せずにリソース編集の競合が決して起きないようにするためにロックの権限を持った人以外が編集できないように制限するのが悲観的ロック。少人数で用いる際には誰がロック中なのか、というのが簡単にわかるけれど、世界中の不特定多数のユーザーが同時に編集するような大規模システムでは、文書をロックしたままずっと編集できないなどの問題が発生する。
### 楽観的ロック
常に同じ文章を複数の人が編集し続けることはないという経験則から、通常時はロックせずに、競合が起きたときのみロックする方法が楽観的ロック。頻繁に更新が起きない場合などに採用する。

## 設計のバランス
Webサービス設計において
- なるべくシンプルに保つ。不要な機能の削除等。
- 困ったらリソースに戻って考える。検索機能の実装をする際にSEARCHメソッドを追加するのではなく、検索結果リソースをGETするという考え方。
- PUTが更新処理として使うメソッドではあるが、バッチ処理などの際にPOSTメソッドの方が優れている場合にはPOSTメソッドを用いる。


等のことが大事である。

# リソースの設計
- 関係モデルからの導出
- オブジェクト指向モデルからの導出
- 情報アーキテクチャからの導出

等のやり方がある。関係モデルからの導出、オブジェクト指向モデルからの導出はいくつか注意点を押さえれば十分にリソース設計ができる。この中で特に情報アーキテクチャからの導出は相性がよい。ただし、設計手法としてはまだ完成度が低いため、これから成長していく分野である。
FHS ってなに？

## 勉強前イメージ

linuxのファイルシステムの構成的なやつだった気がする・・・
HDDとかのやつだっけ？忘れた

## 調査

### FHS とは

Filesystem Hierarchy Standard の略で、linuxの標準のディレクトリ構成の仕様です。

linuxのファイルシステムの標準化は最初のFSSTNDというのが1994年に作られ、数回改版されています。
その後linuxだけじゃなく他のunix系も含めたものをFHSとなりました。

元々FHSがない頃、/etcに設定ファイルを置く などは慣例であって取り決めはなくディストリビューションによって様々でした。
他にも様々な不都合がありFHSが制定されました。

今のFHSのバージョンは3.0で2015年に発表されました。
現在は多くにlinuxのディストリビューションはFHSに準拠しています。

## 勉強後イメージ

雰囲気覚えてたけど、FHSないときも大体似たような感じで作ってたって感じかな？
ちなみにFSSTNDはFilesystem Standardらしい、FHSも大体意味は同じな感じ

## 参考

- [FHS（Filesystem Hierarchy Standard）](https://linuc.org/study/knowledge/503/)
【Bootstrap】チェックボタンのホバーが分かりづらい

## Bootstrapのチェックボタンのホバー仕様
スマホなどで見ると顕著で、ボタンをオンオフ切り替えしたときにボタンを押した後どこか触るまでホバーがかかっており、ONになったのかOFFになったのかわかりづらい。

### 応急処置　ホバーを消す

scss/mixins/_buttons.scssの

```
 &:hover {
    color: $hover-color;
    @include gradient-bg($hover-background);
    border-color: $hover-border;
    }
```
を
```
  &:hover {
    color: $color;
    border-color: $border;
    box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);
    }
  }
```
みたいな感じにする。
色変更のホバーエフェクトを無くす代わりに、フォーカス時と同じようなbox-shadowをかけてホバー状態であることは分かるようにした。

アウトラインボタンも同様で、
```
&:hover {
    color: $color-hover;
    background-color: $active-background;
    border-color: $active-border;
  }
```
の部分を
```
  &:hover {
    color: $color;
    background-color: transparent;
    border-color: $color;
    box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
  }
```
こんな感じにすると、ホバー時のエフェクトがbox-shadowだけになる。

### SCSSを使っていない場合
上記のようにSCSSファイルを変更すると、CSSは以下のようになるので、自力で変更もできる。
```
.btn-secondary:hover {
  color: #fff;
  border-color: #6c757d; //ボタンの背景色そのまま
  -webkit-box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);
          box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);
}
```

### おわりに
あくまで応急処置なので、上記の対応ではチェックボタンではないすべてのボタンのホバーまで変更されることに注意。
一部のみに適用したい場合は、新規にクラスを作成するなどの手間が必要？


- - -
## 追記
### labelのアウトラインボタンに対してのみホバー効果を変更する
```
@at-root :not(label)#{&}:hover {
    color: $color-hover;
    background-color: $active-background;
    border-color: $active-border;
  }

  @at-root label#{&}:hover {
    color: $color;
    background-color: transparent;
    border-color: $color;
    box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
  }
```

### labelのボタンに対してのみホバー効果を変更する
```
  @at-root :not(label)#{&}:hover {
    color: $hover-color;
    @include gradient-bg($hover-background);
    border-color: $hover-border;
  }

  @at-root label#{&}:hover {
    color: $color;
    border-color: $border;
  }
```

加えて、focusの部分から以下の記述を削除するのもアリ
```
 @include gradient-bg($hover-background);
Requirements on Core Test,  No.258, AUTOSAR R21-11(91) CP

Requirements on Core Test,  No.258,  2021-11
https://www.autosar.org/fileadmin/user_upload/standards/classic/21-11/AUTOSAR_SRS_CoreTest.pdf

AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。
https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。
https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成
https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Term| Description|
|:--|:--|
|CPU |Central Processing Unit
|MPU| Memory Protection Unit
|L1 |1st level memory
|L2 |2nd level memory
|MCU|Microcontroller Unit
|BIST |Built in Self Test
|IRQ |Interrupt Request
|Core |A CPU plus closely located functional resources
|Atomic sequence/atomic part|Sequence of software code execution which must not be interrupted at any time
|Partial test |A partial test is defined as the test of one or more ‘hardware resources’. (A partial test is interruptible because it is executed in background mode).
|PCB| Printed Circuit Board
|External device |A physical external entity; e.g. a second microcontroller
|Resource| A core internal unit which executes a unique functionality (e.g. IRQ-controller)
|Checksum/signature|A numerical representation of the result of a test execution oratomic sequence of a test execution.
|Caller/calling| entity The caller/calling entity is located on a higher AUTOSAR or ISOlayer. It is the user of the API call.
|Background test| Background test is called periodically by a SW-scheduler.
|Foreground test| Foreground test is called via users call.
ValueGolden (Ref.)|Value|Reference value used for comparison (e.g. Checksum/Signature)
|Good Case |The execution finished without reporting an error

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
[DOC_LAYERED_ARCH] Layered Software Architecture,
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[AUTOSAR_GLOSSARY] Glossary,
AUTOSAR_TR_Glossary.pdf
[SRS_BSW_GENERAL] General Requirements on Basic Software Modules,
AUTOSAR_SRS_BSWGeneral.pdf
[SRS_BSW_SPAL] General Requirements on SPAL,
AUTOSAR_SRS_SPALGeneral.pdf
[SWS_BSW_DEM] Specification of Diagnostic Event Manager,
AUTOSAR_SWS_DiagnosticEventManager.pdf
[SWS_BSW_ECU] Specification of ECU state manager,
AUTOSAR_SWS_ECUStateManager.pdf
[RS_Features] Requirements on AUTOSAR Features,
AUTOSAR_RS_Features.pdf
[TPS_STDT_0078] Standardization Template
AUTOSAR_TPS_StandardizationTemplate.pdf
ISO 26262:2018 (all parts) - Road vehicles - Functional Safety http://www.iso.org
【個人開発】通学時間からの私立中学逆引き検索

# はじめに


:::note info
Update 2022/09/15
私立中学だけでなく、高校にも対応しました。
:::


中学受験において、学校の選びの基準の一つとして、通学時間があります。
家から通えそうな学校を探す場合、

1. 地図から家から**直線距離**で近い学校を目視で探して、
2. Google Mapなどを使って通学時間を検索

という作業を繰り返す必要がありました。

特に都内の電車通学の場合、直線距離が近くても意外と通学時間がかかったり、その逆の場合もあります。特に後者の場合では、上記１での候補にあがらずに、見過ごすことになります。
そこで、通学時間からの私立中学の逆引き検索サイトを [通える学校](https://kayoeru-gakkou.com/)を作成しました。

私立中学選びのツールの一つとして、是非つかってみてください。

# サービス概要

[こちら](https://kayoeru-gakkou.com/)で試せます。 

自宅の最寄り駅（出発駅）を入力して検索すると、最寄駅からの通学時間順に学校が表示されます。
検索オプションとして、次のものが可能です。
* 最大通学時間
* 最大乗換回数
* 学校区分（私立、国立、公立一貫）
* 男女区分（男子校、女子校、共学）
* 偏差値


![scereen1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22885/a4569f49-84df-e5f8-8d7c-466413e91993.jpeg)


# 使用技術

* Firebase Firestore
* Firebase Functions
* NuxtJS (2.15.8)
* Vuetify
* [NAVITIME Reachable](https://api.rakuten.net/navitimejapan-navitimejapan/api/navitime-reachable)
    * 指定した駅から、所定の時間内で到達できる駅を返してくれる
* Google Forms 
    * フィードバックフォームに利用
* [Yahoo!ジオコーダAPI](https://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/geocoder.html)

出発駅から到達可能な駅と、各学校の最寄り駅情報を合わせることで、出発駅からの通学時間順に学校を表示しています。



## TODO 

* 高速化。都内は、駅数が多いので、各駅からの到達可能学校一覧の計算に時間がかかる。２度目以降はキャッシュして高速化しているが、初回検索が遅く当初１分ぐらいかかっていた。 Firebase FunctionのCPUを変更することで １０秒程度までに削減（力技)。 もっと早くしたい。

*  ~~高校~~、大学などの追加。 大学はキャンパスもたくさんあるのでどうしたものか。
* 首都圏以外の地域の追加。駅入力UIはどうするのがよいか。
* 検索結果を地図で表示。



# おわりに

今後も引き続き、改善していきたいと思っているのでフィードバックなど貰えると幸いです。
[Flutter] 良さそうなダイアログのパッケージ集

![eyecatch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/1548cf0f-461d-5759-8288-47f0fa1bfd72.png)



こんにちわ。アプリ開発をする中で、ゲームに近いようなダイアログを作ろと思った時に、`Dart Package`で何かいいものはないかと探してみた結果、色々あったので共有します👍


# panara_dialogs


https://pub.dev/packages/panara_dialogs

![info_success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/b7cc7313-3021-db25-40c8-b99aa2096635.png)


# flutter_custom_dialog

https://pub.dev/packages/flutter_custom_dialog

![スクリーンショット 2022-05-21 17.29.18（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/fce1755d-9e4c-244d-3b13-317c62d85abd.png)


# aesthetic_dialogs

https://pub.dev/packages/aesthetic_dialogs

![スクリーンショット 2022-05-21 17.30.33（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/eaccfa43-857d-6f5e-c106-86a2a986841f.png)


# giffy_dialog

https://pub.dev/packages/giffy_dialog

![51350453-379afc80-1ace-11e9-91b4-3ceea44e7bad.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/97bcb7e4-fd77-bad7-1f45-f190cd21a665.gif)

# customprompt

https://pub.dev/packages/customprompt


![44mn8i.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/831d83c2-1370-3398-e9ac-62103cbf4937.gif)



# release_notes_dialog

https://pub.dev/packages/release_notes_dialog


![README_example_screenshot.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/1959e69b-b647-0358-6141-842f774b5b55.jpeg)


# material_dialogs 

https://pub.dev/packages/material_dialogs

![normal_animated.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/9b29b9d7-8569-0abd-b433-7f77fbd3a395.gif)


# select_form_field

https://pub.dev/packages/select_form_field

![select_form_field.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/9232f0d7-8cbf-3f8c-a71b-3a6b6dffe91e.gif)


# 最後に

ぜひ使ってみてください。もし良さそうなものがあれば、教えてもらえると嬉しいです。
Requirements on GPT Driver, No.187, AUTOSAR R21-11(89) CP

Requirements on GPT Driver, No.187, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SRS_GPTDriver.pdf

AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|Term|Description|
|:--|:--|
|CS |Chip select
|DIO |Digital Input Output
|ECU |Electric Control Unit
|EOL| End Of Line Often used in the term ‘EOL Programming’ or ‘EOL Configuration’
|ICU |Input Capture Unit
|MAL| Old name of Microconroller Abstraction Layer (replaced by MCAL because ‘MAL’ is a french term meaning ‘bad’)
|MCAL| Microconroller Abstraction Layer
|MCU |Microcontroller Unit
|MMU| Memory Management Unit
|Master| A device controlling other devices (slaves, see below)
|Slave |A device being completely controlled by a master device
|NMI| Non maskable interrupt
|OS| Operating System
|PLL |Phase Locked Loop
|PWM |Pulse Width Modulation
|RX |Reception (in the context of bus communication)
|SPAL |The name of this working group (Standard Peripheral Abstraction Layer)
|SFR |Special Function Register
|RTE| Runtime environment
|WP |Work Package
|STD |Standard
|REQ |Requirement
|UNINIT |Uninitialized (= not initialized)

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[DOC_LAYERED_ARCH] Layered Software Architecture,
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[AUTOSAR_GLOSSARY] Glossary,
AUTOSAR_TR_Glossary.pdf
[SRS_BSW_GENERAL] General Requirements on Basic Software Modules,
AUTOSAR_SRS_BSWGeneral.pdf
[SRS_BSW_SPAL] General Requirements on SPAL,
AUTOSAR_SRS_SPALGeneral.pdf
[TPS_STDT_0078] Software Standardization Template
AUTOSAR_TPS_StandardizationTemplate.pdf
Ubuntu 22.04にMySQL 8.0をインストール（OS標準）

# はじめに

Ubuntu22.04にMySQL8.0をインストール
親記事：[MySQL, MariaDBの各種インストール方法とEOLまとめ \- Qiita](https://qiita.com/witchcraze/items/72291ee035437ec83273)

## LOG

### インストール

```shell-session
$ docker run -it --rm ubuntu:22.04
root@6e6dbe5bd07d:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

# apt update; apt install -y mysql-server
... 略
```

### 各種確認

```shell-session
# service mysql start
# mysql -u root -e'select version();'
+-------------------------+
| version()               |
+-------------------------+
| 8.0.29-0ubuntu0.22.04.2 |
+-------------------------+
```