OmniAICreator/Qiita-1.07M huggingface dataset:
python file からデータ抽出

次のようなファイルからxyzのデータだけ抽出したい

```
header: 
  seq: 1
  stamp: 
    secs: 1666429992
    nsecs: 873829108
  frame_id: "camera_depth_optical_frame"
point: 
  x: -0.027914434671401978
  y: 0.02820553630590439
  z: 0.5456792712211609
---
header: 
  seq: 2
  stamp: 
    secs: 1666430004
    nsecs: 579051551
  frame_id: "camera_depth_optical_frame"
point: 
  x: -0.028040047734975815
  y: -0.01734834909439087
  z: 0.5262469053268433
---
header: 
  seq: 3
  stamp: 
    secs: 1666430018
    nsecs: 916446553
  frame_id: "camera_depth_optical_frame"
point: 
  x: 0.07294759899377823
  y: -0.0181780606508255
  z: 0.5236693620681763
---
header: 
  seq: 4
  stamp: 
    secs: 1666430027
    nsecs: 753083919
  frame_id: "camera_depth_optical_frame"
point: 
  x: 0.07170296460390091
  y: 0.03082507848739624
  z: 0.5377740859985352
---
header: 
  seq: 5
  stamp: 
    secs: 1666430080
    nsecs: 448720876
  frame_id: "camera_depth_optical_frame"
point: 
  x: -0.029203645884990692
  y: 0.03928879648447037
  z: 0.5081203579902649
---
header: 
  seq: 6
  stamp: 
    secs: 1666430093
    nsecs: 199850911
  frame_id: "camera_depth_optical_frame"
point: 
  x: -0.02828790619969368
  y: -0.006579136475920677
  z: 0.48882704973220825
---
header: 
  seq: 7
  stamp: 
    secs: 1666430105
    nsecs: 607030476
  frame_id: "camera_depth_optical_frame"
point: 
  x: 0.07050076127052307
  y: -0.005021311342716217
  z: 0.4861147403717041
---
header: 
  seq: 8
  stamp: 
    secs: 1666430115
    nsecs: 348506727
  frame_id: "camera_depth_optical_frame"
point: 
  x: 0.06972650438547134
  y: 0.040438100695610046
  z: 0.5042555332183838
---

```

次のようなプログラムを作成
         
```python:get_xyz.py

p = [0,0,0] 
with open('./data1022') as f:
    for line in f:
      if "x" in line:
       p[0] = (float(line.split()[1]))
      if "y" in line:
       p[1] = (float(line.split()[1]))
      if "z" in line:
       p[2] = (float(line.split()[1]))
       print(p)
```

結果

```
[-0.027914434671401978, 0.02820553630590439, 0.5456792712211609]
[-0.028040047734975815, -0.01734834909439087, 0.5262469053268433]
[0.07294759899377823, -0.0181780606508255, 0.5236693620681763]
[0.07170296460390091, 0.03082507848739624, 0.5377740859985352]
[-0.029203645884990692, 0.03928879648447037, 0.5081203579902649]
[-0.02828790619969368, -0.006579136475920677, 0.48882704973220825]
[0.07050076127052307, -0.005021311342716217, 0.4861147403717041]
[0.06972650438547134, 0.040438100695610046, 0.5042555332183838]
```
sk_bufferに対するメモ

### 参考サイト
* [How SKBs work](http://vger.kernel.org/~davem/skb_data.html)	
    * skbの制御イメージが付く
* [Linuxネットワークドライバの開発](https://lv4.hateblo.jp/entry/linux_network_driver)
* [ネットワークスタック内の謎の2バイトについて探る](https://lv4.hateblo.jp/entry/2016/12/25/235121)
    * ネットワークドライバの書き方、チップスなどのブログ
* [SKBパケット選抜総選挙 〜 僕たちは誰について行けばいい？ 〜 /osc21do](https://speakerdeck.com/chikuwait/osc21do)
    * 新しめのskbの制御イメージ。コンテナでのネットワーク制御の仕組みも載っている
SCSIとIDEをかんたんに説明してみる

# 勉強前の理解度
* コンピュータとHDDや周辺機器を接続する規格
* 基本情報技術者試験を勉強したときによく見た
* たぶん古い

# SCSIの概要
* SCSI(Small Computer System Interface)
* 読み方は「スカジー」
* **7台までの機器を数珠つなぎにして接続する**(デイジーチェーンと呼ばれる)
* 1986年頃から急速に普及して、当初の5MB/s(SCSI)から320MB/s(Ultra320)まで高速化が進んだ
* **現在は後継規格のSASが主流**

# IDEの概要
* IDE(Integrated Device Electronics)
* 読み方は「アイディーイー」
* 「ATA(エーティーエー)」「パラレルATA」と呼ばれることもある
* 1980年代終盤ごろ～2000年代初めごろまで、HDDの接続規格として主流だった
* 当初のIDEでは**504MiBを超える容量が認識できなかった**(504MiBの壁)ため、それを解決する後継規格としてEIDEが登場している
* **現在は後継規格のSATA(Serial ATA)が主流**だが、古いマシンではまだIDEが使用されていることがある

# SCSIとSAS
　SCSIとSASの違いの最も大きな点は、SCSIが「パラレル伝送」を採用しているが、SASが「**シリアル伝送**」を採用している点。複数の銅線を束ねて転送を行うパラレル伝送では、通信速度が大きくなるにつれて、束になった銅線の間で

* ノイズが発生する(クロストーク)
* 到達に時差が発生する(スキュー)

などが問題となり、SAS(Serial Attached SCSI)へと移行が進み、2006年頃から普及が進んだ。
なお、SCSIの転送速度320MB/sに対し、SAS 4.0の転送速度は24Gbpsである。

# IDEとSATA
　上記同様、IDEもパラレル転送方式を採用していたため、**IDEをシリアル転送方式として後継したものがSATA**である。(IDEのケーブルは帯状に長いため、サーバーの冷却効率が下がるみたいな話をどこかで聞いた気がする)
　なお、前述のSATAは半二重通信を行うが、SASは全二重通信を行い、SATA3の通信速度は6.0Gbps(実際は600MB/s)である。


# 参考
[こんなにある！HDDの種類 – バックアップ・データ復旧 | GUARDIAN+R](https://www.guardian-r.com/blog/bcp/20190731/3516/)
[容量の壁 - Wikipedia](https://ja.wikipedia.org/wiki/%E5%AE%B9%E9%87%8F%E3%81%AE%E5%A3%81)
[ハードディスクの構造とパーティション by eslab](http://park12.wakwak.com/~eslab/pcmemo/hdisk/hdisk2.html)
[SAS（サス）とは : 富士通](https://www.fujitsu.com/jp/products/computing/storage/lib-f/tech/interface/sas/)
[SATAの転送速度は世代で異なる？PCIeとの比較や接続で注意することは | 分かりやすく解説！HDD・SSD！！](https://www.pro.logitec.co.jp/about_hdd/hddssd/20191227/)
[シリアルATA - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%ABATA)
LXD で AlmaLinux を使う

Ubuntu 22.10 にインストールされた lxd 5.6 に AlmaLinux 9 をインストールし設定する方法です。
インストールが完了してログインすると次のようになります。

```text
$ ssh alma.local
Last login: Sat Oct 22 09:04:23 2022 from 10.253.196.1
[uchida@alma ~]$ uname -a
Linux alma 5.19.0-21-generic #21-Ubuntu SMP PREEMPT_DYNAMIC Wed Oct 12 18:33:17 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[uchida@alma ~]$ cat /etc/os-release 
NAME="AlmaLinux"
VERSION="9.0 (Emerald Puma)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.0"
PLATFORM_ID="platform:el9"
PRETTY_NAME="AlmaLinux 9.0 (Emerald Puma)"
ANSI_COLOR="0;34"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:almalinux:almalinux:9::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"

ALMALINUX_MANTISBT_PROJECT="AlmaLinux-9"
ALMALINUX_MANTISBT_PROJECT_VERSION="9.0"
REDHAT_SUPPORT_PRODUCT="AlmaLinux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.0"
```

OS のインストール

```bash
lxc launch images:almalinux/9/amd64 alma
```

root のパスワードを設定

```text
$ lxc exec alma bash
[root@alma ~]# passwd
Changing password for user root.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
```

login

```text
$ lxc console alma
To detach from the console, press: <ctrl>+a q

alma login:
```

login 後の設定

ユーザー、グループの追加、パスワードの設定

```bash
useradd -u 1200 -m -g wheel uchida
groupadd -g 1200 uchida
passwd uchida
```

sudo のインストール

```bash
yum install sudo
```

sshd のインストール

```bash
sudo yum -y install openssh-server
sudo systemctl start sshd
```

avahi のインストール

```bash
sudo yum -y install avahi
sudo systemctl start avahi-daemon
```

パッケージのアップデート

```bash
sudo dnf update
```

## 参考情報
[Currently available images](https://uk.lxd.images.canonical.com/)
ESLintの基本

今までなんとなく使っていたので、ちょっと調べてみた。

■ESLint・・・構文の間違いやルールに沿ってコードが記述されているかをチェックするツール
■Prettier・・・コードの整形をするフォーマッター


### ESLint設定ファイル

ESLintではルールを.eslintrc.jsファイルのrulesに書く。

```.eslintrc.js
module.exports = {
  省略
  rules: {
    “@typescript-eslint/no-unused-vars”: “off”,
    “no-unused-vars”: “off”,
　　　　　　　“quotes”: [1, 'single'],
  　　　“semi”: ['error', 'always'],
    indent: [“error”, 2],
  },
};
```

ルールはここに載ってる・・・https://eslint.org/docs/latest/rules/
  vueに関してはここ（https://eslint.vuejs.org/rules/）
エラーレベル・・・off、warn、error



### Prettier設定ファイル

ESLintでもフォーマットできるのになぜPrettierを使うのかよくわかりませんが・・
いろいろできるのかな

```.prettierrc
  "tabWidth": 4,
  "semi": false,
  "singleQuote": true
```


-----------
.eslintrc.jsファイルのrulesにprettierの設定も書けるみたい。

```
module.exports = {
  省略
  rules: {
    “@typescript-eslint/no-unused-vars”: “off”,
    “no-unused-vars”: “off”,
    "prettier/prettier": [
      "error",
      {
        tabWidth: 2,
        singleQuote: false,
        semi: true,
      },
    ],
  },
};
```
【Vue/Nuxt】テストデータの置き場所について

※初学者の記事です。
テストデータを書くところ、書かれているところがわからなかったので、この記事を書く。
![スクリーンショット 2022-10-22 17.55.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931766/f3a93c74-97c8-8907-0652-962aadbad58f.png)
今回ディレクトリ直下のassetsの中にjsonディレクトリを作り、users.jsonを作成しておりますが、ぶっちゃけどこでもいい。
でも、aseetsに作成されていることが多いようです。
どこにあるかわからなかったら率直に先輩エンジニアに聞いてください。
無いなら、assetsに作ったらいいんじゃないでしょうか。
以上。
EditorGUILayout.Popup()の不思議な挙動とその対策

https://twitter.com/su10_dev/status/1583726395825397760?s=20&t=JIct9xngMIMwKXjseyenzg

`EditorGUILayout.Popup()` の不思議な挙動に出くわしたので、原因(?)とその対策のメモ。

# 環境
* Unity2021.3.0f1

# 再現方法
```InspectorHeaderGUI.cs
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;

[InitializeOnLoad]
internal static class InspectorHeaderGUI
{
    private static readonly string[] _displayedOptions =
    {
        "aaa",
        "_bbb",
        "ccc _ccc",
        "ddd _ddd ddd",
        "_eee eee eee",
        "5: aaa",
        "6: _bbb",
        "7: ccc _ccc",
        "8: ddd _ddd ddd",
        "9: _eee eee eee",
    };

    static InspectorHeaderGUI()
    {
        Editor.finishedDefaultHeaderGUI -= OnGUI;
        Editor.finishedDefaultHeaderGUI += OnGUI;
    }

    private static void OnGUI(Editor editor)
    {
        var gameObject = editor.target switch
        {
            GameObject go => go,
            Component component => component.gameObject,
            _ => null,
        };

        if (gameObject == null) return;

        EditorGUI.BeginChangeCheck();

        var selected = EditorGUILayout.Popup("Strange Behaviour", gameObject.layer, _displayedOptions);

        if (EditorGUI.EndChangeCheck())
        {
            gameObject.layer = selected;
        }
    }
}
#endif
```

このスクリプトを適当なところに置いてHierarchy上の `GameObject` をクリックしてInspectorを確認すると、ヘッダーが拡張されてこんな感じになります。

![Oct-22-2022 17-21-20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27863/e0a8a005-fe2a-f47e-6e05-645e855e1627.gif)

←ポップアップ　　実際のコード→

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27863/792a8cf5-1734-4185-c826-38a5b7c643fe.png" width="300">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27863/df0d52f9-4ffd-448c-db7b-965829e7b34a.png" width="220">

上から３番目の `ccc _ccc` の後半の `_ccc` など、ポップアップの中ではなぜか一部の文字列が消えてしまっています。

どうやら以下のルールに従ってるように見えます。

0. スペースが入ってなければそのまま表示
0. スペースで区切ったときに最後の塊が `_` で始まってたらそれ以降は空文字

ちなみにクリックして開く前は正しい文字列で表示されます（ `6: _bbb` になってる）。

# 対策方法
スペースが含まれなければいいみたいなので、通常のスペースを他のスペースっぽい適当な文字コードに変換してあげます。

```cs
for (var i = 0; i < _displayedOptions.Length; i++)
{
    _displayedOptions[i] = _displayedOptions[i].Replace(" ", "\u00A0");
}
```

結果：

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27863/82c3d9f4-fefc-5256-7ef3-167768d96f8f.png" width="310">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27863/df0d52f9-4ffd-448c-db7b-965829e7b34a.png" width="220">

# 最後に
たまたま遭遇したけど条件が限定的なので自分以外経験者いなさそう。

詳しい人いたら教えて下さい。
piyopiyo.exポータルチュートリアル～感想投稿サイト構築を例にLiveView+tailwindcssの基礎を学ぶ～

# 本チュートリアルの目的

本チュートリアルはElixirにより実装されたWebアプリケーションサーバーPhoenixにおける、サーバーサイドレンダリング技術であるLiveViewを用いてWebアプリケーションの実装、および関連技術を学ぶ事を目的とします。

このチュートリアルではElixir/Phoenixの入門者向けコミュニティー[piyopiyo.ex](https://piyopiyoex.connpass.com/)の中で作成された感想投稿サイト[piyopiyo.exポータル](https://piyopiyoex-portal.gigalixirapp.com/)を題材に、基本的なLivewViewの実装の流れを体験し、開発の全体像をつかんでいただくことを目的としております。

https://piyopiyoex-portal.gigalixirapp.com/

当時の経緯の振り返りについては主催者の @nako_sleep_9h さんのまとめ記事 [piyopiyo.exで作ったLiveView感想投稿サイトの話](https://qiita.com/nako_sleep_9h/items/0bb06fa05988c9ecea7d) をご覧ください。

https://qiita.com/nako_sleep_9h/items/0bb06fa05988c9ecea7d


# 本チュートリアル実施の前提

本チュートリアルでは、コピー＆ペーストで実行可能なコマンド、コード断片、リソースを用意してあります。
本チュートリアルどおりの操作を実施いただくことで、ElixirやWebアプリケーション開発に関する知識のない方でも開発の流れを体験いただけることを目標としております。

- 基本的なブラウザ操作ができること
- Replit、GitHubなど一般的なWebサービスのアカウント開設ができること


# チュートリアルメニュー

| タイトル | 所要時間 | できるようになること |
| ---- | ---- | ---- |
| [０章～できるだけ楽して環境を準備する～](https://qiita.com/tuchiro/items/19c69865d6206135bb71) | 約5~10分 | WebIDE環境Replitを使ったLivewView開発環境の準備と簡単な使い方がわかる |
| [１章～コマンド一発でWebアプリケーションを作ってみる～](https://qiita.com/tuchiro/items/0bbead6902fcf2372a48) | 約5分 | Phoenixの基本機能をつかってデザインの入っていないWebアプリケーションを作成できる。Phoenixのモデル実装を修正して機能を変更できる |
| [２章～ライブラリを使って簡単にtailwindcssを導入する～](https://qiita.com/tuchiro/items/0a1090e432ccc2ff4e9a) | 約5分 | 用意されたElixirのライブラリを使用してCSSフレームワーク、UIライブラリを導入できる |
| [３章～トップページをイイカンジにする～](https://qiita.com/tuchiro/items/df820f7e0c0dae873127) | 約4分 | tailwindcssを使ってデザインを変更できる、Phoenixのルーティンを変更できる |
| [４章～トップページから画面遷移する機能を追加する～](https://qiita.com/tuchiro/items/cefd39f98d0ae295a02a) | 約4分 | liveviewのイベントハンドラーを修正して画面間の遷移を修正できる |
| [５章～faviconとページタイトルを設定する～](https://qiita.com/tuchiro/items/edba925c6eee8466e6de) | 約4分 | Phoenixで作成されたサイトのfaviconとページタイトルを変更できる |

# 関連情報

- 本チュートリアルのGitHubリポジトリ

https://github.com/TakutoYoshimura/LiveViewJpTutorial_PiyoPiyoExPortal

- 元となったpiyopiyo.exポータルのGitHubリポジトリ

https://github.com/nako-9h-sleep/piyopiyoex_portal
Gradle Version Catalog の dependencies のチェックをターミナルから行う

あやしいです。

![スクリーンショット 2022-10-22 17.28.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/0ee4163a-59b5-dfe6-c886-8b537b7e2159.png)

別の信頼できるツールを使います。

[👉 ben-manes/gradle-versions-plugin: Gradle plugin to discover dependency updates](https://github.com/ben-manes/gradle-versions-plugin)

![画面収録 2022-10-22 16.33.37.-2gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/01ddc66b-5d11-60c7-0234-1cbed98fb991.gif)
便利です!

[👉 「⚠ This project uses Gradle Version Catalogs: this tool may not behave as expected.」→ 今現在、Gradle Version Catalog には gradle-versions-plugin が必須では?](https://android.benigumo.com/20221022/this-tool-may-not-behave-as-expected/)
脳波関連論文まとめ(conference)title: Few-Shot Relation Learning with Attention for EEG-based Motor Imagery Classification

# 脳波関係の論文をまとめていきます。
### 国際会議で出されている論文を中心に落合フォーマットにまとめていきます。
質問、間違いはガンガン受け入れます。コメントに書いてもらえると感謝です。
# Few-Shot Relation Learning with Attention for EEG-based Motor Imagery Classification
## 1.どんなもの？

限られた MI EEG データでそれらを分類する方法を効率的に学習できる、新しい双方向少数ショット ネットワークを提案しています。

限られたとは脳波はノイズが多く空間分解能(近い距離にある２つの物体を２つのものとして区別できる最小の距離)が低いため分類が難しい。

少数ショット分類はクラスごとに少数のラベル付きサンプルのみが与えられた場合に、トレーニング中に見られないクラスに対応するために分類器を適応させる。

Few-Shotに関して詳しく知りたい方はこちらをどうぞ
https://qiita.com/ell/items/9e9de65521c8b935d28f

E2E学習が行われています。

## 2.先行研究と比べてどこがすごい？
従来研究の機械学習はXGBoostなどを使用し分類が行われている。
しかしながら、周波数帯域を定義するなどのヒューリスティックなパラメーター設定が必要であり、タスクや被験者ごとに最適なパラメーターが異なるため、パフォーマンスが制限されていました。

深層学習手法は従来の方法よりもパフォーマンスが向上しているにもかかわらず、被験者ごとのトレーニング サンプルが限られている場合、深層学習の方法は失敗することがよくあります。

## 3.技術や手法のキモはどこ？
Embedding Module->Attention Module->Relation Moduleという構造(画像は著作権が怖いので載せてません）
Few-shot learningは脳波で応用されている事例[1][2]が少ないよってEEG分類としてはこれが初めてだと思われる。

## 4.どうやって有効だと検証した？

データはBCIコンペティションと７人での検証データを使用

HS-CNN-Few,ALL[1]とRelationNetで精度比較とこれらにfew shot settingした時のそれぞれの精度尾の違い。

few shot settingの効果
同じ被験者データ内でのトレーニングとテストにデータ拡張を使用すると、HS-CNN のパフォーマンスが向上した。
BCIコンペティションのデータもは精度が向上した。
## 5.議論はある？
BCIコンペティションのデータもは精度が向上したが上がり幅がそこまで大きく効果があるか疑問。

## 6.次に読むべき論文は？
[1]HS-CNN: a CNN with hybrid convolution scale for EEG motor imagery classification
MQコマンド個人的メモ

# 目次
[1.MQSCコマンド](#1-MQSCコマンド)
[2.キューマネージャ](#2-キューマネージャ)
[3.キュー](#3-キュー)
[4.チャネル](#4-チャネル)
[5.参考サイト](#5-参考サイト)

# 1. MQSCコマンド
### runmqsc コマンド開始
```
runmqsc キューマネージャ名
```
### runmqsc コマンド終了
```
end
```
# 2. キューマネージャ
### キューマネージャ作成
```
crtmqm 任意のキューマネージャ名
```
### キューマネージャ起動
```
strmqm
```
### 全キューマネージャーの詳細を表示する
```
dis qmgr
```
### キューマネージャーの状態確認
```
echo “dis qmstatus(*)” | runmqsc (qmgr名)
``` 
### キューマネージャーの詳細情報表示
```
echo “dis qmgr” | runmqsc (qmgr名)
``` 
# 3. キュー
### キューの作成
```
define qlocal (キュー名)
```
もしくは
```
def ql(キュー名) descr(`キュー定義に対する説明`)
```
### キューの再定義
replace を引数に設定すると、既に存在しているオブジェクトを再定義し直すことになる。
```
def ql(キュー名) replace maxdepth(2000)
```
### キューにメッセージを書き込む(PUT)
```
amqsput キュー名 キューマネージャ名
```
### キューに複数メッセージ送る(PUT)
```
/opt/mqm/samp/bin/amqsblst (キューマネージャー名) (キュー名) -W -c (回数) -s (サイズ)
```
### キューからメッセージを取得する(GET)
```
amqsget キュー名 キューマネージャ名
```
### キューのメッセージを表示する
```
amqsbcg キュー名 キューマネージャ名
```


### キューに溜まっているメッセージの数確認
```
echo “dis queue(キュー名)” | runmqsc (qmgr名)
```
※CURDEPTH(XX) の( )内の数字が溜まっているメッセージの数

### キューの状態確認
```
echo “dis qstatus(*)” | runmqsc (qmgr名)
``` 
### systemで始まる全てのキュー名を表示
```
dis q(system*)
```
### キューの全属性を表示
```
dis ql(キュー名)
```
### キューの属性を部分的に表示
maxdepth,descrを表示する場合を例に。
```
dis ql(キュー名) maxdepth descr
```
### キューの詳細情報表示
```
echo “dis queue(*)” | runmqsc (qmgr名)
```
### キューの属性変更
maxdepthを変更する場合を例に。
```
alter ql(キュー名) maxdepth(2000)
```
### キューの滞留数の確認
```
echo “dis q((キュー名) CURDEPTH)” | runmqsc (キューマネージャー名)
```
### キュー内メッセージの削除
```
clear ql(キュー名)
```
# 4. チャネル

### チャネルの状態確認
```
echo “dis chstatus(*)” | runmqsc (qmgr名)
``` 
### チャネルの詳細情報表示
```
echo “dis channel(*)” | runmqsc (qmgr名)
``` 
# 5. 参考サイト
### 虎の巻
https://community.ibm.com/community/user/integration/blogs/momoko-furukawa/2022/02/17/mq-toranomaki-index

### MQ用語
http://itdoc.hitachi.co.jp/manuals/3000/30003D9200/MQPG0199.HTM

### 実務でよく使うコマンド
http://g-network.boo.jp/wiki/2018/03/post-989/

### 神サイト
コマンド＋実行結果を綺麗にまとめているサイト。見やすい。

https://yukun.info/websphere-mq-runmqsc/
Fuels, ボッシュ自動車handbook 11版(40) p.560

Operating fluids, Fuels, ボッシュ自動車handbook 11版(40)

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

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

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

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


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

Automotive Handbook  May 2, 2022

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

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

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538


# Fuels
p.560
## Overview
## Characteristics
## Gasoline 
## Diesel fuel
## Mathane
### Natural gas
## Liquefied petroleum gas
## Hydrogen
## Electricity generated regenerative fuels
## Ethers
# Reference
[1] DIN EN 228 2017
[2] ASTM D4814
[3] DIN EN ISO 5164 2014
[4] DIN EN ISO 5163 2014


# 自己参考資料(self reference)

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

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

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

自動車工学とBosch Vehicle Handbook

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

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

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

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
令和4年秋の応用情報技術者試験の頑張りまとめ（不合格）③

# 目的
応用情報技術者試験に落ちました。(解答速報による答え合わせ)
今までの学習内容をまとめて、
再試験するときの備忘録を作ります。

不合格者がまとめる内容なので、
自己責任でご覧ください。

# 本記事の内容
今回は午後問題をターゲットとしてます。
私が受験した
　セキュリティ
　システムアーキテクチャ
　データベース
　情報システム開発
　監査
について、令和4年春、令和3年秋、令和3年春の問題を閲覧して、
問題傾向やコツを自分なりにまとめました。

ざっくりとまとめるため説明不足があるかもしれません。
誤った内容があれば、ご指摘して頂けると嬉しいです🙇‍♀️

# 分析結果
#### セキュリティ
* ウェブシステムに関するセキュリティ
* オフィスに関するセキュリティ
が問われました。
ウェブシステムを構築するうえで注意する内容(クロスサイトスクリプティング、DNSキャッシュポイズニング)などを抑えることが重要と感じました。
オフィスに関するセキュリティは初見の内容が多いですが、
文章と自分の常識を照らし合わせて対応させる必要があります。

#### システムアーキテクチャ
クラウドシステムを構築する問題が多い。
ストレージ、処理件数、処理時間、時間当たりのデータ転送量とその料金などの計算が毎年問われます。計算式自体は難しくなく、同じような計算問題が出題される傾向があるため、復習すれば何とかなりそうでした。

#### データベース
SQL文とE-R図が毎年出題されます。
SQLについて、CREATE文やUPDATE文など基本句の穴埋めやJOIN句やUNION句などの長いSQL文なども出題されます。
E-R図について、外部キーや主キーについて抑えていれば基本的には答えられる問題が多いです。まれに要件からカラムやテーブルの関連(1対多など)を問われる。

#### 情報システム開発
忘れました。。。

#### 監査
文章からシステム開発の状況、監査項目を抽出して穴埋めをすることが重要。(日付など考慮する必要あり)

# 最後に
各門で毎年出題される内容を抑えることも需要ですが、
専門用語を直接問う問題もありますが、長い文章と問いを照らし合わせることが重要です。

上記は私の個人的な見解なので、自己責任で参考にしてください。🙇‍♀️
Brake fluids,ボッシュ自動車handbook 11版(39) p.556

Operating fluids, Brake fluids, ボッシュ自動車handbook 11版(37)

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

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

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

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


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

Automotive Handbook  May 2, 2022

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

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

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538


# Brake fluids
p.556
## Requirements
## Characteristics 
## Chemical composition.
# Reference
[1] SAE J1703
[2] SAE J1704
[3] FMVSS 116
[4] ISO 4952
[5] JIS K2233
[6] ISO 4925
[7] SAE J1705
[8] ISO 7308
[9] SAE J1709
[10] SAE J1708




# 自己参考資料(self reference)

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

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

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

自動車工学とBosch Vehicle Handbook

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

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

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

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

動的ルーティングを実装した際に404が出たのでこの記事を書く。
![スクリーンショット 2022-10-22 16.45.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2931766/bf8786e4-6619-078f-cfa5-dedceff5dd69.png)
ディレクトリはこんな感じ。
[http://localhost:3000/pages/lesson/1](http://localhost:3000/lesson/1)にアクセスすると画面が表示されるかと思ってたら表示されなかった。
[http://localhost:3000/lesson/1](http://localhost:3000/lesson/1)で表示されるようになりました。
Nuxt3の仕様でフォルダー名(pages)は必要ないようです。
Coolants for internal-combustion engines, ボッシュ自動車handbook 11版(38) p.553

Operating fluids, Coolants for internal-combustion engines, ボッシュ自動車handbook 11版(37)

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

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

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

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


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

Automotive Handbook  May 2, 2022

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

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

https://qiita.com/kaizen_nagoya/items/dfa35aa6f669e5df983e
# Contents
Motor vehicle, 28
Basic principles, 32
Mathematics and methods, 204
Materials, 258
Machine parts, 354
Joining and bonding techniques, 426
Vehicle physics, 462
Operating fluids, 538

#  Coolants for internal-combustion engines
p.553

## Requirements
## Composition of coolants
### Water
### Radiator protection agents
## Types of radiator protection agents
### Conventional radiator protection agents containing sllicats
#### Service title
### OAT radiator protection agents
OAT:Organic act technology


# Reference
参照なし

# 自己参考資料(self reference)

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

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

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

自動車工学とBosch Vehicle Handbook

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

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

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

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

## はじめに
C言語が職場で必要になるが、経験があまり無いということで
C言語の勉強を兼ねてずっとやりたいと思っていた室内環境可視化アプリを作成します。

この機会にシステム構成図や設計図も書きながら地道に進めていきます。
ドキュメント経験もあまりないのでアドバイスを頂けると幸いです。

第一回はシステム構成を記載していきます。
## 本記事を書くことにした背景
アウトプットすることで色んなエンジニアの方からアドバイスを頂きたいと思ったため本記事を書こうと思いました。

## やりたいこと・条件
- 室内の温湿度を時系列で可視化できるようにしたい
- C言語が勉強できること
- 維持費はかけたくない

とりあえず、こんな条件の中でシステム構成図を作成しました。

## システム構成図
![system.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606282/a1872466-feab-fb69-744c-b4df2a1821eb.png)

### 利用する機能・マイコン等
- rasberry pi pico w
    - 色々込みで9000円以内に買えて安かった(最新のものだと25000円とかした。。。)
    - ArudinoにしなかったのはC言語ライクであってC言語ではなかったから
- DHT11(温湿度センサー)
    - rasberry pi pico wのセットについてきてたから
- AWS IoT
    - AWSを利用してみたかったという理由で採用
- Kibana
    - データ可視化が簡単にできるオープンソースの認識

## おわりに
今回はシステム構成図を作成していきました。
次回はrasberry pi やAWSの環境構築周りを実施していこうと思います。

ちなみに今回は[AWS IoTのチュートリアル](https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-embedded-c-sdk.html)を参考に進めていく予定です。
Uncaught SyntaxError: Unexpected non-whitespace character after JSON at position 3

Uncaught SyntaxError: Unexpected non-whitespace character after JSON at position 3

`JSON.parse()`を使用したときのエラー

## 原因
- 引数に渡った文字列がJSONの文法になっていない

```:json
'"{"result":{"data":[[1652040000,34361.96,34751.28,33701.01,...
```
サーバーサイドから渡したデータを、不必要にシングルクォーテーションで囲っていたことが原因となっていた

```JavaScript:sample.cshtml
<script>
    const tmp = '@Html.Raw(ViewData["response"])';
    const data = JSON.parse(tmp);
</script>
```
Rstudio で折れ線グラフを作図

東京都の新型コロナ感染者数（2022年10月15日から21日）をプロットします。

```text
> tokyo <- c(3239,2714,1588,4213,4204,3489,2840)
> plot(tokyo, type='l')
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/766e6c99-81e7-8dc0-e3eb-245cf78ab052.png)

```text
> plot(tokyo, type='l',lwd=3)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/06449c8a-c412-db7d-635e-4c4607129ccc.png)


```text
> plot(tokyo, type='l',lwd=3, lty=2)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/4299c86d-bd4c-6fc3-db2a-2a62de3f2b72.png)

```text
> plot(tokyo, type='l',lwd=3, lty=3)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/7dd5b80d-08c8-bdd1-1085-0f5aa4313409.png)
配列風(ArrayLike)オブジェクトってなんだよ、'風'ってよぉ～

# ググったら秒で~~分かった~~（わかってなかった）
関数の引数である**arguments**や**NodeList**が該当するみたい。
Arrayのメソッドを継承しているわけでないから、配列として操作する時にひと手間必要ってわけね。
変換もできるし、**'風'と名乗っていることも許せる。**

>「配列風」とは、 arguments が length プロパティと 0 から始まる添字のプロパティを持っているものの、 Array の組込みメソッド、例えば forEach() や map() を持っていないということです
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/arguments

**ご指摘いただき追記：**
ES2022に配列風オブジェクトの正式な定義が載っており、Arrayが満たしているiterableとArrayLikeを混同しておりました。
>[iterableとArrayLikeの解説](https://qiita.com/SynchronEnginee/items/4c2c04dee98ac47dfce3#comment-84be7262a2c70f98c4a2)


# なぜスプレッド構文を使っていたかの謎が解けた
~~いちいちスプレッド構文を使って配列に格納し直しているコードを見かけるけど、Arrayのメソッドを使うためだったとは...~~
理由を調べていなかったことに反省。
どうりで予測変換でmapメソッドとか出ないわけだ。

>ArrayLikeは Array.from() で配列(new Array)に変換可能ですが、SpreadElementでは展開できません

→スプレッド構文を利用した配列変換とArray.from()による配列変換は明確に違いがある。

```JavaScript
// 例のため実用性のあるコードではない
const nodeList = document.querySelectorAll('.aaa, .bbb');
const func = () => [...nodeList].map(t => t);
```

# スプレッド構文以外にもargumentsを配列として扱う方法はある

argumentsの場合は、基本的にslice()やArray.from()でシャローコピーして配列生成を行う
**iterableでなく、ArrayLikeのみ満たしているオブジェクトの場合はスプレッド構文で変換できず、Array.from()による変換が正規の方法となります**。

```JavaScript:Arrayへの変換
const hello = function (x, y) {
  // arguments.slice ←Arrayのメソッドは使えないがインデックスで参照はできる
  return [arguments[0], arguments[1]];
};

// 配列風オブジェクトであるargumentsでArrayのsliceメソッドを利用
const helloArgumentsSlice = function (x, y) {
  // 配列のsliceメソッドを代入
  const slice = Array.prototype.slice;
  // call()で呼び出して引数として渡せば配列として生成可能
  return slice.call(arguments);
};

// 配列風オブジェクトであるargumentsでArrayのsliceメソッドを利用
const helloArgumentsSliceSugar = function (x, y) {
  // Array.prototype.call()の糖衣構文
  return [].slice.call(arguments);
};

// 配列にしてslice()呼ぶ
const helloArgumentsSliceSugar2 = function (x, y) {
  // スプレッド構文で配列として生成(ES2015以降)
  return [...arguments].slice();
};

// 配列にしてslice()呼ぶ
const helloArgumentsSliceSugar3 = function (x, y) {
  // この変換のみ配列として生成(ES2015以降)
  return Array.from(arguments).slice();
};

```

ArrayLikeオブジェクトの場合はスプレッド構文を使った変換だとエラーになりました。
```JavaScript:スプレッド構文だとエラー 
const arrayLikeConvertArray = function () {
  // arrayLikeオブジェクト追記
  const arrayLike = { 0: 1, 1: 2, length: 2 };
  console.log("Array.from", Array.from(arrayLike));
  console.log("Array.prototype.slice", Array.prototype.slice.call(arrayLike));
  console.log("[].slice", [].slice.call(arrayLike));
  // これは変換できずにTypeError
  // console.log([...arrayLike].slice());
  return "ArrayLikeの変換はconsoleを参照してください";
};
```
[出力結果の確認などのコード全行はこちら](https://codesandbox.io/s/use-arguments-array-like-y5qkip?file=/src/index.js)


# 参考
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/arguments

https://qiita.com/LightSpeedC/items/5cf07f94b051d0a8d4f1
【Puppeteer】スクリーンショットを撮る／ページのソースを取得する方法

Puppeteerを使用する機会がありました。

https://github.com/puppeteer/puppeteer

デバッグの際、以下の２つのコマンドがすごく便利だったのでメモしておきます。

スクリーンショットを撮る
```
await page.screenshot({ path: 'screenshot.png' });
```

ページのソースを取得する
```
const bodyHandle = await page.$('body');
const html = await page.evaluate((body) => body.innerHTML, bodyHandle);
console.log(html);
```
piyopiyo.exポータルチュートリアル ２章～ライブラリを使って簡単にtailwindcssを導入する～

本記事はpiyopiyo.exポータルチュートリアルの２章となります。

https://qiita.com/tuchiro/items/050e6b86afc35a843a7c

# 本章の目的

本章ではデザイン変更の準備としてCSSフレームワークと、UIライブラリを導入します。

@the_haigo さんの記事[Phoenixにtailwindとdaisyuiを導入する](https://qiita.com/the_haigo/items/bb839bfc20b8864dd7ac)を参考に、phx_gen_tailwindを使用してお手軽にtailwindcss+daisyUIをPhoenixに導入します。


# 実行環境のNodeJSのバージョン確認

用意した実行環境に導入されているNodeJsの環境を確認します。

```shell:Cosole
node -v
```

執筆時点のReplitのPhoenix実行環境では初期状態ではNodeJSが導入されていませんが、Nixというパッケージマネージャが導入されており、導入されていないコマンドを実行すると、対応するパッケージのインストールを提案されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243163/286ee873-b024-05e6-87bc-7f4a8eea0f5a.png)

表示されたプロンプトでEnterを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243163/c77c95f2-b9c9-5864-52fb-a537a2396e68.png)

これでNodeJsのv16.13.2が導入されれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243163/c1d32eda-de1d-8586-5d8e-1124857e2611.png)


# CSSフレームワーク tailwindcss の導入

tailwindcssを導入するためPhoenixにphx_gen_tailwindライブラリを導入します。
mixの依存ライブラリ定義にphx_gen_tailwindを追加します。

```Elixir:mix.exs
defp deps do
    [
      ～前略～
      {:plug_cowboy, "~> 2.5"},
      {:phx_gen_tailwind, "~> 0.1.3", only: :dev},
    ]
  end
```

deps.getを実行し、ライブラリをダウンロードします。

```shell:console
mix deps.get
```

phx_gen_tailwindが導入されたことを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243163/458057dc-cd39-0f3a-1d3d-e7901cdc734e.png)

phx_gen_tailwindを実行し、tailwindcssを導入します。

```shell:Console
mix phx.gen.tailwind
```

途中でnpm(NodeJSのパッケージマネージャ)のインストールを促されます。
プロンプトに
```
NPM install new dependencies? [Yn]
```
が表示されたら Y を入力してEnterを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243163/ade1778d-86c7-897a-7b3d-81963d958323.png)


### UIライブラリdaisyUIを追加する

インストールされたnpmを使ってdaisyUIをインストールします

```:Console
cd assets
npm i daisyui
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243163/620babf3-2961-cf2d-d3e1-0551b33f345b.png)

インストールされたdaisyUIをtailwindcssのプラグインとしてconfigに登録します

```JavaScript:assets/tailwind.config.js
～前略～
  plugins: [
     require("daisyui") // <-- add here
  ],
}
```

ここまでの作業でデフォルトのスタイルが崩れ、なんかPhoenix君が大人びた感じになります。
※PhoenixアプリケーションがCompileエラーになっている場合は一度「Stop」ボタンを押して、Phoenixを再起動してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243163/ffbaba77-af1d-a3b1-7824-99e0758d03bf.png)

事象では導入したtailwindcssをつかってスタイルを修正しデザインを変更します。

# 次の章

https://qiita.com/tuchiro/items/df820f7e0c0dae873127

# 関連情報

- この演習完了時点のリポジトリ断面

https://github.com/TakutoYoshimura/LiveViewJpTutorial_PiyoPiyoExPortal/releases/tag/v0.2.0-configure-tailwindcss

- 参考にした記事

https://qiita.com/the_haigo/items/bb839bfc20b8864dd7ac
情報セキュリティ管理

# 情報セキュリティマネジメントシステム(ISMS: Information Security Management Systems)
企業などの組織が```セキュリティレビルを保つための仕組みや取り組み```のこと。
ISMSに関する規格は(JIS Q 27001: 2014)では、組織が保護すべき情報資産についてついて三大要素をバランスよく維持し改善することとしている。

## 情報セキュリティの三大要素＋四要素
### 機密性
情報資産を正当なユーザのみに使用可能にすること
### 完全性
資産の正確さ、完全さ
### 可用性
必要なとき使用可能な状態にあること
### 責任追跡性
情報の履歴をたどれること
### 真正性
主張するとおりであること
### 信頼性
矛盾がなく一貫していること
### 否認防止
事実ではない主張をされないようにすること

# リスクマネジメント
### リスク特定
保有する情報資産を調査して```重要性の分類```を行い、この結果に基づき、要求される```セキュリティの水準を定める```。
### リスク分析と評価
情報資産を取り巻く脅威の```発生頻度(発生確率)```、及び発生した際の```被害の大きさ(損害額など)```を分析。```リスクの大きさ（リスクレベル)```を評価し、```優先順位を付ける```。

### リスク対応
リスクの大きさによって優先順位をつけ、リスクを回避したり、リスクを減らすための措置を講じ、```不利益が発生する確率を減らす```。

# リスク対策の方法
## リスクコントロール
### リスク軽減（リスク最適化)
予想できるリスクの大きさに応じて、```さまざまな措置を講じ、リスクをできるだけ少なくする方法```。
性能が安定し故障が少ない機器を導入する、作業の教育訓練を充実して作業ミスを減らすといった対策を行う。

### リスク回避
```リスクが発生する可能性のある業務を止めて、リスク回避を行う。```
だたし利便性が低下することがある。

### リスク分散
大きなリスクや同時多発リスクが発生しないように、業務や情報資産を分離する方法```。
運用をアウトソーシングしたり、酢ステムを分散させるなどの方法がある。ただし、別リスクを生み出す要因にもなり得る。

#### アウトソーシングとは？
業務の一部を外部の協力先に発注することを示します。つまり、業務に必要な人やサービスを、外部（アウト）から調達（ソーシング）するという意味です。
出典 https://www.smbc-card.com/hojin/magazine/bizi-dora/general-affairs/outsourcing.jsp

### リスク集中
```リスクとなる要因を一箇所に集中させ、そこを重点的に管理する方法```。
管理コストがかかっても構わない機密情報などが該当する。

## リスクファイナンシング
### リスク共有（リスク移転)
```保険をかけるなどして、リスクを他者に移転する方法```。
万一のときには保険会社が損害額を支払う。

### リスク保有（リスクを無視・受容する)
予想リスクが小さく、万一発生しても大きな影響を与えない場合は、特にリスク対策を行わない。
FlutterWebでURLからハッシュ#を取り除いたらハマった。

FlutterWebでアプリをビルドするとUrlに#が入って不恰好になります。
これを取り除くにはmain関数でrunApp()を呼ぶ前にusePathUrlStrategyを呼んであげると取り除けます。知らんけど。

```dart:公式からの引用
import 'package:flutter_web_plugins/url_strategy.dart';

void main() {
  usePathUrlStrategy();
  runApp(ExampleApp());
}
```

https://docs.flutter.dev/development/ui/navigation/url-strategies


自分はFirebase Hostingを使ってFlutter Webでビルドしたアプリを公開していたのですが、ある時ルートパス以外のページのurlを叩くと404 NotFoundエラーが返ってきていることに気づきました。
調べていると、usePathUrlStrategyで#を消していることが原因の模様。

試しにusePathUrlStrategyを呼ばずにurlに#が含まれた状態でデプロイしてみるとルートパス以外のページのurlを叩いても問題なくページが開けました。。。。はて？


検索を色々して同様の状況になっている人がそこそこいることにも気づきましたが、Flutter Webで#なしのurlのまま問題なくページが開けているサイトがあることにも気づいた頃にFlutterの公式ページに辿り着きました。。。

[ここ](https://docs.flutter.dev/development/ui/navigation/url-strategies)にそのまま答えが書いてありました。

Firebase Hostingの設定でSinglePageApplicationを指定する必要があるみたいです。
Firebase initをし直して、"Configure as a single-page app"の質問にYesと答えると設定してくれます。

はい、うまくいきました。
あんまり理解してませんが、SinglePageApplicationだと常にトップページのindex.htmlを参照してくれるみたいです。なんで#がないURLだとうまくいくのかはよくわからん。

最初から公式ドキュメントをちゃんと読みましょうという自戒の念を込めて記事にします。
Rstudio-server を ubuntu 22.10 にインストール


ダウンロード

```bash
wget https://download2.rstudio.org/server/jammy/amd64/rstudio-server-2022.07.2-576-amd64.deb
```

必要なライブラリーのインストール

```bash
sudo apt install libclang-dev
```

インストール

```bash
sudo dpkg -i rstudio-server-2022.07.2-576-amd64.deb
```

サーバーが動いていることの確認

```bash
sudo systemctl status rstudio-server
```

## クライアント

http://localhost:8787
にアクセス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/a81e26ca-4324-9877-0323-ad9ec25b218a.png)

Linux のアカウントでサインイン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/7a6131d5-f2ff-8822-4a19-a3994e180adf.png)

## 簡単な計算

```text
> 1 + 2
[1] 3
> 10 - 8
[1] 2
> 25 * 4
[1] 100
> 30 / 5
[1] 6
> (3+4) * 2
[1] 14
> 10.2 + 3.5
[1] 13.7
> 8.1 * 2.2
[1] 17.82
```

関数計算

```bash
> sqrt(3)
[1] 1.732051
> pi * 2
[1] 6.283185
> sin(pi / 2)
[1] 1
> sin(pi/6)
[1] 0.5
> cos(pi/6)
[1] 0.8660254
> tan(pi/ 8)
[1] 0.4142136
> tan(pi/ 4)
[1] 1
```
ARC150回答メモ

0.はじめに
　2週間前の開催分ですが、inoutファイルが公開されたので
　再チャレンジ。
　試験時は、Aを回避してBに挑戦したけど結局正解無しという惨憺たる結果でした。
　今回、解説動画も見ながらA・Bの解答をしてみました。

1.A - Continuous 1
　ぱっと見、細かい場合分けで行けるかなと思いましたが
　場合分けパターンが多くなりそう＆Bがいけるかもと思いスルーしました。
　
　後で解説を見て、目からうろこでした。

　考え方(解説内容の整理)
　　条件を満たすパターンは
　　K個の1の連続が左から右に移動していくような感じになる。
　　　例）N=5、K=3の時
　　　　①11100
　　　　②01110
　　　　③00111
　　文字列Sが、1)～3)をそれぞれ満たせるかを判断し、
　　満たせる場合が1個だけの時Yes、それ以外はNoを表示する。

　実装
　　1)文字列Sのアドレスiを0～R(N-K)まで移動させていく。
　　　変数ansに0をセット
　　　1チェック用変数(連続1判定範囲内で1を取りうる桁の数を保持) C1と
　　　0チェック用変数(連続1判定範囲外で0を取りうる桁の数を保持) C0を準備
　　　1-1)i＝0の時
　　　　連続1判定範囲が右端の場合のC1、C0をカウント
　　　　文字列Sを変数jを0～N-1まで推移してチェックしていく。
　　　　　・j<kの時
　　　　　　S[j]が1か?の時C1に1を加算
　　　　　・j≧kの時
　　　　　　S[j]が0か?の時C0に1を加算
　　　　C1=Kかつ、C0=N-Kの時ansに1を加算
　　　1-2)i!=0の時
　　　　連続1判定範囲が、右に1つずれるので、範囲から出るS[i-1]と
　　　　範囲に入るS[i+K-1]について、判定を行う
　　　　S[i-1]が、”1”の時→C1から1を減算
　　　　S[i-1]が、”?”の時→C1から1を減算、C0に1を加算
　　　　S[i-1]が、”0”の時→C0から1を減算
　　　　S[i+K-1]が、”1”の時→C1に1を加算
　　　　S[i+K-1]が、”?”の時→C1に1を加算、C0から1を減算
　　　　S[i+K-1]が、”0”の時→C0から1を減算
　　　　C1=Kかつ、C0=N-Kの時ansに1を加算
　　2)ans＝1の時”Yes”、それ以外の時”No”を表示　

　https://atcoder.jp/contests/arc150/submissions/35830614

2.B - Make Divisible
　考え方１
　1)以下の場合分け
　　(1)B%Aが0
　　　答えは0
　　(2)AがBより大きい
　　　答えはA-B
　　(3)上記以外
　　　Xが0からA-(B%A)までの間の答えをすべて求め最小値を答えとする
　　　答え、(A+X)-(B％(A+X))+X
　と、安易に考え実装したところ、例題は通ったのでいけるかも！と提出
　WA6、TLE16という結果に負け、試験日はここまでで断念
　後日開示された答え見ると、TLEのところも、WAっぽい。
　解説を見ながら再挑戦
　
　考え方２(解説の内容を自分なりに飲み込むための整理)
　(1)B%Aが0の時答えは0
　(2)それ以外の時
　　以下の式を基本とし、A+xとzを遷移域内で変動させ、x+yの最小値を求める
　　B+y=(A+x)z
　
　　(2-1)遷移域の考え方
　　　(2-1-1)回答の最大値
　　　　x+yの最小値を求める前提を一旦おいておいて、zを1としたとき
　　　　A>Bの場合
　　　　　・x=0、y=A-Bとすれば、B+y=A+xとなり、A+xがB+yの倍数という条件を満たす
　　　　B>Aの場合
　　　　　・y=0、x=B-Aとすれば、B+y=A+xとなり、A+xがB+yの倍数という条件を満たす
　　　　よって、答えはx=max(B-A,0)y=max(A-B,0)であるため、解=max(A,B)となる
　　　(2-1-2)B+yの上限
　　　　B+yは、B+max(A,B)(最大でも)となるため、B+y≦2*max(A,B)
　　　(2-1-3)A+x　および　zの上限
　　　　B+y=(A+x)zかつ、B+y≦2*max(A,B)の時
　　　　A+xとzのどちらか一方は√2*max(A,B)以下となる。
　　
　　(2-2)A+x=kとしkを可動させた場合の解
　　　(2-2-1)kの範囲
　　　　・A≦k≦√2*max(A,B)
　　　(2-2-2)B+yの値
　　　　・kで割り切れるB以上の最小値
　　　　　B%k=0の時
　　　　　　B+y＝B
　　　　　それ以外の時
　　　　　　B+y＝k(B//k+1)
　　　(2-2-3)x,yの値
　　　　　B%k=0の時
　　　　　　x=(B//k)-A
　　　　　　y=0
　　　　　B%k!=0の時
　　　　　　y=B*(B//k+1)-B
　　　　　　x=k-A

　　(2-3)z=kとしkを可動させた場合の解
　　　(2-3-1)kの範囲
　　　　・1≦k≦√2*max(A,B)
　　　(2-3-2)B+yの値
　　　　　B≦k*Aの時
　　　　　　・k*A
　　　　　B＞k*Aの時
　　　　　　・k*((B//k)+1)
　　　(2-3-3)x,yの値
　　　　　B≦k*Aの時
　　　　　　・x=0
　　　　　　・y=k*A-B
　　　　　B＞k*Aの時
　　　　　　・x=((B//k)+1)-A
　　　　　　・y=x*k-B
　
　　(2-4)2-2・2-3で求めた答えの最小値を出力

　実装時にちょいちょい修正したので実際の式はだいぶ変わってしまったが
　なんとなく上のような考えでACいけました。

　https://atcoder.jp/contests/arc150/submissions/35853163
AWSでリザーブドインスタンスを活用し、RDSの支払い費用を半分に削減した話

# 🧑‍💻自己紹介
初めまして。私は都内でwebエンジニアをしています。

今の会社はインターンを経て、新卒入社しました。早いもので社会人2年目になりました。

今は担当プロジェクトの開発チームリーダーとして日々プロダクトの改善を行なっています。

今回初めてQiitaに投稿を行うことにしました。励みになりますのでぜひ意見やコメントを頂けますと幸いです。

# 💻背景
担当プロダクトはAWSを利用していたのですが、プロダクトの成長とともに、サーバ費が増加してきたことに加え、昨今の円安によりサーバ費用の増加が顕著になってきました。

ユーザー数が増えてきたのは嬉しい一方で、ユーザー数の増加と共に運用費用がかさんでしまってはビジネス観点からもよろしくないと考え、今回利用しているAWSのコスト削減へ踏み切りました。

# 📝前提
## 利用しているAWSのサービス
今回のプロダクトで利用していたAWSのサービスの一例です。

- Amazon EC2
- Amazon Elastic Container Registry (ECR)
- Amazon Elastic Container Service (ECS)
- Amazon Elastic Kubernetes Service (EKS)
- Amazon ElastiCache
- Amazon OpenSearch Service
- Amazon RDS
- AWS CodeBuild
- AWS CodePipeline
- Amazon CloudWatch
- その他...

# ⚙️改善策
## SQLスロークエリ改善
まず、ボトルネックになっていたのがスロークエリの存在でした。

複数テーブルで複雑なクエリを実行している部分があり、処理時間が必要以上にかかってしまうのですが、サービスとしてリクエストからレスポンスまでの時間が長いのはユーザーにとってストレスでもあります。今までは、負荷が高くなった場合は都度ReaderのRDSをスケールアウトさせ、負荷分散を行うことで暫定対応していました。

この運用に着目し、まずはスロークエリ改善を行うことを決定しました。

ここを改善することで、常設のRDSを削減できランニングコストが削減できる、またレスポンス速度改善によるUXの改善が期待できると考えたためです。

### DBのテーブルのindexの確認
Amazon CloudWatchを利用し、クエリごとのレスポンス時間を集計、時間がかかっているクエリを洗い出しました。

その後、該当のクエリの実行計画を確認しました。

実行計画について触れていない方は以下の記事が参考になるかと思います。

https://tech-blog.rakus.co.jp/entry/20200612/postgreSQL

ということで、該当のクエリの実行計画を確認したところ、costの大きな```Seq Scan```が大量に走っており、これはcolumnにindexが設定されていないのでは？と思って確認したところこれが当たりでした。

すでに存在するテーブルにindexを設定する```CREATE INDEX```コマンドは、テーブルロックがかかると言われていたので、実行時間によってはサービス影響が大きくなる可能性があったため、検証環境でも実行時間をしっかりと確認しながら検証しました。結果今回対象のテーブルのレコード数は40万件以上はありましたが、5秒かからないくらいでそこまで時間はかかりませんでした。

このindexの設置によって、実行計画の中の無駄な```Seq Scan```は```Index Scan```に変更され、総costも減少しました。

### クエリ自体の見直し
当時同チームの@genta-kawabataさんにご尽力いただき、処理時間を98%カットすることができました。ありがとうございました。
こちらの内容は以下の記事にまとまっていますのでこちらをご覧ください。

https://qiita.com/genta-kawabata/items/e631c77a3e7969a2100f

## リザーブドインスタンスの利用
今回の費用削減のキモはここになります。

AWSにはリザーブドインスタンス(以下RI)と呼ばれる仕組みがあります。一定期間分のインスタンスタイプとインスタンス数の枠を事前に購入しておくことで、割引を受けることができます。

https://aws.amazon.com/jp/ec2/pricing/reserved-instances/

プランや購入期間などによって割引率は前後するようで、基本的には長期間分買うほど割引率は高くなるようですが、長期間分買いすぎて逆に困ったなどの話も聞いたので、今回は現用のインスタンスタイプのRIを一年分事前購入することにしました。

今回は、費用の多くの割合を占めていた```Amazon EC2```、```Amazon ElastiCache```、```Amazon OpenSearch Service```、```Amazon RDS```に 対してRIの導入を行いました。

前述のクエリの見直しにより、必要な常設のread replicaのDB数がかなり減ったため(対応前の半分ほど)、相乗効果もかなりあったと思います。

見積もりの段階で20~40%弱程の費用削減を見込めたのと、長期購入によるインスタンスを、利用せずとも費用が発生するリスク以外に、特段これといったリスクがなさそうだったため、実行に踏み切りました。

# 💰結果
前月で多くの割合を占めていたRDSが約半分程度の費用になりました。その他のサービスでもRDS程までではないですが効果が見られました。

具体的な金額はお伝えできませんが、全体の費用としては年換算で数百万の費用圧縮を実現することができました。これは前期比で20%以上の割合でした。

会社全体における金額としては微々たるものかもしれませんが、サービスレベルを下げず無駄なコストを削減したことは前向きに捉えてて良いことだと思います。

そして何より、エンジニアが主体となり技術的アプローチによって課題を解決できたことは私の経験として大きなプラスになりました。

# 👤今後について
普段より事業サイドと密に連携をとりながらプロダクト開発を進めていますが、今回のケースのようなエンジニアからしか提案ができない部分も多くあると思います。

開発サイドが主体的に動くことで直接事業にプラスになる可能性はありますし、怯むことなく前のめりにプロダクトをより良くする意識を開発チームが持てるよう、これからも施策を進めていきたいと思います。
IT学習者・新人が気づきにくいポイント：端数処理

私が個人的に感じる
学習段階ではなかなか気づきにくく、実務ではよく使うロジックについて
かいていこうかなと思う。

今回は「端数処理」について。
「端数処理」のおおまかな説明はこの記事で説明させています。
https://qiita.com/yaju/items/6c90e600f9ca7fb30eef

上記を具体例まじえてもう少しかみ砕いて説明しようとおもう。

例えば、下のデータで2022年09月の営業部の全体給与を
三人（太郎さん、花子さん、次郎さん）で均一に分配することを考えましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2898306/552baa24-91c0-ea89-8361-1425c1a2b3e2.png)

100万 / 3人で計算すると33.333万 → 給与なので小数以下を切り下げると、
1人あたり給与は33万となる。

ただこの計算では実務では問題になることがある。
なぜなら、2022年9月の営業部の給与は100万。。。
対して、営業部3人の社員給与の合計は33万×3人 = 99万。。。
矛盾が生じている！！

なのでこの手の計算の際は、よく「端数処理」が行われる。

具体的には
①給与分配した後に3人の給与の合計を求める
   33万×3人 = 99万

②営業部の全体給与から①の金額を差し引き、誤差を求める。
   100万 - 99万 = 1万

③例として入社日が一番古い太郎さんに②の誤差1万円を追加する。
  太郎（入社日が一番古い) : 33万 + 1万 = 34万
  花子(据え置き) : 33万
  次郎(据え置き) : 33万
  
なかなか学習している段階や新人ではきづきにくいポイント。
今後も上げていこうと思う。
初めてのQiita

# 初めまして
Qiita初投稿のkawarataniです！
## 勉強中の学生です
・C言語の中級的なこと
・pythonやLinuxの基礎勉強中
・応用情報受けてきた(落ちそうです)
### 好きなこと
電子工作や3Dプリンターでものづくり
## 作ったものなど投稿
Arduinoで作ったものや勉強の過程でつくったものなどを投稿しようと思っています
いずれラズパイで何か作って投稿してみたいです
# 最後に
記事などを書くのは初めてで文が下手くそですが頑張りたいです！
読んでいただきありがとうございました
長いコマンドをまとめることができるMakefileが便利

例えば、初めてRailsサーバーを起動するのに以下のコマンドが必要だとします。

```bash
$ docker-compose run web yarn install --check-files
$ docker-compose run web rails db:create
$ docker-compose run web rails db:migrate
```

これらを入力するのは面倒です。そこでMakefileが役立ちます。

Makefileはタスク名、コマンドで最低限OKです。コマンドの前にはTabを入れます。

```makefile:Makefile
タスク名:
    コマンド
```

先程のRailsのコマンドを入れるとこのようになります。

```makefile:Makefile
setup-rails:
	docker-compose run web yarn install --check-files && \
	docker-compose run web rails db:create && \
	docker-compose run web rails db:migrate

```

実際に実行するときは`$ make task-name`です。

```bash
$ make setup-rails
```

コマンドが長い、繰り返し使うようなコマンドはMakefileにまとめてしまうと便利ですね。
Singularityついて学ぶ -その1-

# はじめに
筆者はSingularityと同じくコンテナ型仮想環境であるDockerを日常的に使用しているのですが、次のような問題点を改善できないかと調べていたところSingularityにたどり着きました。

- Dockerではコンテナの操作及び作成にroot権限が必要であること
- 外部のデバイスやGUI,GPUを使うための設定が面倒臭い
など。この記事ではSingularityについて学びながら、その内容をアウトプットしていければ幸いです。


## Singularityとは

> Singularity（シンギュラリティ）は、ユーザーが自身の計算環境を完全に再現し、保持できるようにした新しい Linux コンテナです。
Singularityは、アプリケーションの本体及び動作に必要なライブラリ、さらにはデータをパッケージ化します。作成されたコンテナイメージは、Singularityがインストールされている他のLinuxサーバーで動作可能。
また、既にDockerをお使いの場合はDockerイメージをそのままインポートすることもできます。
例えば、ご自身がお使いのアプリケーションを複数のシステムで共有するようなケースでは、パッケージ化された環境をSingularityコンテナに入れるだけで共有でき、不足している依存関係をそれぞれのシステムにインストールする必要がありません。
ホスト上の環境がアプリケーションの要求するものと大幅に違っていても、Singularity コンテナ内のパッケージ化された環境が使われるためアプリケーションを確実に実行することができます。

とのこと。参考: [HPCシステムズ Singularity](https://www.hpc.co.jp/product/software/singularity/)   
Dokcerのイメージなどがそのまま流用出来るそうなので便利そうです。

## Singularityの環境構築
早速 [公式ドキュメント](https://docs.sylabs.io/guides/latest/user-guide/quick_start.html)を参考にしつつ、環境構築を行いました。
次のスクリプトを実行すれば環境構築自体はできるはずです。
Singularity及びその環境構築時に必要なGoのバージョンに関しては適宜変更してください。
```bash
#! /bin/bash

# Singularity 環境構築用のシェルスクリプト(Singularity v3.9.5)

# 依存関係のインストール
sudo apt update && sudo apt install -y \
    build-essential \
    libssl-dev \
    uuid-dev \
    libgpgme11-dev \
    squashfs-tools \
    libseccomp-dev \
    wget \
    pkg-config \
    git

# Goのインストール(バージョンは適宜変更)
    export VERSION=1.17.2 OS=linux ARCH=amd64 && \
    wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz && \
    sudo tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz && \
    rm go$VERSION.$OS-$ARCH.tar.gz

# Goの 環境設定
    export GOPATH=${HOME}/go && \
    export PATH=/usr/local/go/bin:${PATH}:${GOPATH}/bin

# githubからSinguralityをインストール
    git clone https://github.com/sylabs/singularity.git && \
    cd singularity && \
    git checkout v3.9.5

# Singuralityをコンパイル
    ./mconfig && \
    make -C ./builddir && \
    sudo make -C ./builddir install

# bash補完
    . /usr/local/etc/bash_completion.d/singularity
```

コードの内容についてはここでは詳しくは言及しません。と言っても、コード内のコメントに書かれている通りです。
もっと詳しく学びたい方は公式ドキュメントを参考にしてください。
この後 
```
singularity version
```
とターミナル上でコマンドを打ち込んだ際に、バージョンの情報(今回はv3.9.5)が出て来れば環境構築できています。





## まとめ
とりあえずSingularityの環境構築を行いました。
以降はSingularityでのコマンドなどの細かい部分に触れていきたいと思います。
WSL2の環境をきれいに使う方法

# 困ってた事

WSLを開発環境として使ってます。開発環境が散らからないように
- WSLの環境には開発環境を入れず、docker環境で開発する
- asdfを使って切り替えながら開発する
等、気を付けてるんですが

- GPUのドライバーをいれた
- GUI関係のパッケージを入れてた
- 動かないからいろんなパッケージをとりあえずいれてみた

等の戻れない成長を繰り返していました。WSLのディスク領域も肥大化してます。

# 複数のWSL環境を持てる

朗報を発見。

https://qiita.com/sakai00kou/items/63eb506eb87282268b44

WSL2に複数のdestro(Ubuntu等）を構築できるってこと。
これです。求めていたのは。

用途専用のWSL環境や、使い捨てのWSL2環境を用意すれば、WSL2の環境をクリーンに保てて助かるぅ。

検証時には検証用のWSLを使って検証したり、専用のWSLを用意するというだけの話ですが、
ポイントは、Ubunuのインストール直後のイメージを保存しておくこと。これがあると、初期状態のUbuntuを後から作れて便利です。
以下は、私の場合の作業記録です。
参考になることがあったら参照ください。

# 作業記録

Ubuntuをインストール（2022/10月現在、Ubuntu 22.04.1 LTSがインストールされる）
updateを実行しておく
```
sudo apt update
sudo apt upgrade
```

デフォルトのユーザを指定しておく
user-nameの部分を、自分のユーザ名（ubuntuをインストール時に指定したユーザ）に変更して実行
```
$ cat << EOF > /etc/wsl.conf
[user]
default=user-name
```

Ubuntuをexportして削除する
```powershell
>wsl --shutdown Ubuntu
>wsl --export Ubuntu d:\Ubuntu-22.04.tar
>wsl --unregister Ubuntu
```

デフォルトではc:\にイメージが保存されている。d:\に保存したかったので、一端unrigisterで削除して以下でd:\にインストールしています。


Ubuntu-20.04をMicrosoft storeからinstall。updateや、wsl.confを同様に作成する。

Ubuntu-20.04.tarとしてexportして、unrigisterで削除

```powershell
>wsl --shutdown Ubuntu-20.04
>wsl --export Ubuntu-20.04 d:\Ubuntu-20.04.tar
>wsl --unregister Ubuntu-20.04
```

デフォルトで使用するUbuntuを作成

```
> mkdir d:\wsl
> wsl --import Ubuntu-default d:\wsl\Ubuntu-default D:\ubuntu-22.04.tar
> wsl --set-default Ubuntu-default
```

使い捨て用Ubuntu22.04のWSL2を作成

```
> wsl --import Dev-22.04 d:\wsl\Dev-22.04 D:\ubuntu-22.04.tar
```

使い捨て用Ubuntu20.04のWSL2を作成

```
> wsl --import Dev-20.04 d:\wsl\Dev-20.04 D:\ubuntu-20.04.tar
```


旧ubuntu環境をリストア

```
>wsl --import Ubuntu-20.04 d:\wsl\Ubuntu-20.04 D:\ubuntu2004.tar
```

# 課題

調査中の課題です（ご存じの方コメント歓迎です）

## ディストリビューション間の通信

ディストリビューション間でscpしたいとか、NFSサーバでホームディレクトリを共有したい。

方法調査中（ご存じの方コメント歓迎です）

## dockerがdefaultのWSLからしか使えない

Docker Desktop環境は、set-defaultで指定したWSLで動作していて、
defaultのWSLからは、dockerコマンドが使えますが、そのほかのWSLからは、次のエラーがでて使用できません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532235/8b3831ba-a24e-46ce-a6c2-d75e8df87f7b.png)

この問題も、ディストリビューション間の通信ができればこれも解決すると思うんですが・・・。
この問題が解決するまでは、dockerを使用するのはデフォルトのディストリビューションからだけにするしかない。



参考
https://devlights.hatenablog.com/entry/2021/05/29/070000
https://qiita.com/sakai00kou/items/63eb506eb87282268b44
SNS共有リンクまとめ（LINE、Twitter、Facebook）

# リンクの挙動
LINE：友達に送る
Twitter：タイムラインに投稿
Facebook：タイムラインに投稿

## LINE
```html
<a href="http://line.me/R/msg/text/?「ここに入力した内容が表示される」https://example.com" target="_blank">LINEで共有</a>
```

## Twitter
```html
<a href="http://twitter.com/share?url=https://example.com&text=ページタイトルなど" target="_blank">Twiiterで共有</a>
```

## Facebook
```html
<a href="https://www.facebook.com/sharer/sharer.php?u=https://example.com" target="_blank">Facebookで共有</a>
```


# まとめ
検索するとアイコンがあらかじめ用意されていたり、iframeが使われているものが多かったため、aタグで実装できるようにまとめました。


パラメータ付きURLを設定したい場合はこちら。

https://qiita.com/kakuta_yu/items/73fa3e9c27032fa98e44
【Terraform】複数ユーザーでAWSのインフラ管理する場合、S3にtfstateファイルを保管しよう

# はじめに
udemyを使ってTerraformの勉強をしたので、複数ユーザーでAWSのインフラ管理する場合についての学習備忘録です。

https://www.udemy.com/course/iac-with-terraform/

# 複数ユーザーでAWSのインフラ管理する
各々の環境でTerraformを実行すると、tfstateが各々の環境に作成され、整合性が取れなくなります。
そのため、tfstateファイルは、S3を使って管理します。

管理外のバケットが本番にできることや、ご適用を防ぐため、```terraform管理対象```と```tfstateの保管先```は、**別のアカウントにする**のが望ましいです。


# tfstateをS3へ保管する
tfstateファイルをS3バケットで保管するための設定をしましょう。

####  はじめにAWSコンソールからS3バケットを作成します。
![スクリーンショット 2022-10-16 20.07.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95954/0470cbee-f6f2-b19c-9cb1-a7cf5bdc82f5.png)

#### バケットポリシーを編集します

最初に、ブロックパブリックアクセス (バケット設定)を一旦OFFにします。
次に、ポリシージェネレーターでバケットポリシーを作成します。

![スクリーンショット 2022-10-16 20.11.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95954/fcd350bf-df1b-d924-2e93-7e37f6844fd8.png)

バケットのARNは、「バケットのARN/*」の形で入力します。
![スクリーンショット 2022-10-16 20.14.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95954/4ffeb1b6-f3c2-4784-c0df-eb449ba4e5d3.png)

作成できたポリシーをバケットポリシーに入力して完了です。
Sidはいらないので削除してもOKです。
最後に、ブロックパブリックアクセス (バケット設定)をONに戻します。


#### terraformブロックの編集
terraformブロックに```backend```を追加して、作成したバケット名を記入します。

```terraform:main.tf
terraform {
  required_version = ">=0.13"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0" 
    }
  }
  backend "s3" {
    bucket  = "作成したバケット名"
    key     = "tfstateのファイル名(****.tfstate)"
    region  = "リージョン"
    profile = "作成したプロフィール"

  }
}
```

最後に初期化します

```zsh
$ terraform init
```

特にエラーが表示されなければ、これで設定は完了です。
作成したS3バケットにtfstateファイルが作成されるようになります。