OmniAICreator/Qiita-1.07M huggingface dataset:
AWSアカウント作成してみた

# はじめに
“エンジニアファーストの会社　株式会社CRE-CO”のクワバラと申します。

AWSを使って仕事を行うことが多いので、無料でアカウント登録ができるため、アカウントを作成してみようと考えています。
これができれば無料版のEC2等を検証用に作成してみることもできるので、勉強用に環境を整えたいと思います:relaxed:

需要があるかは置いておいて、、、

それでは、レッツゴー！！

## アカウント作成手順
※公式のドキュメントを参考にしたい方は下記URL
[AWSサイト](https://aws.amazon.com/jp/register-flow/)

### 1 アマゾンウェブサービスへ接続する
[アマゾンウェブサービスURL](https://aws.amazon.com/jp/)へ接続する

### 2 「今すぐ無料サインアップ」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/932f1837-7c2f-fd66-1e9b-2f875dada6a3.png)

### 3 登録するメールとアカウント名の設定を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/0dfb635e-a826-3e4f-af05-f763d0446598.png)

### 4 メールに送信された確認コードを入れて「検証」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/59d9bfda-ca67-e23f-f48b-7c13a105b3ba.png)

### 5 rootユーザーパスワードの作成を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/0e0f0bf7-106f-09c3-84ba-2b794edadc5b.png)

### 6 連絡先情報の入力を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/4ebb86f3-5072-4456-4c6a-277fa859dd70.png)

### 7 請求情報の入力を行う

### 8 本人確認を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/8cdef98b-cdc3-49dc-9689-ec5ffc850c03.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/190524e4-0ef0-035f-2c9e-364b9d61f55e.png)

### 9 サポートプランを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/4fddfe20-3c61-6adc-07bb-e3e4fd833ec0.png)

### 10 設定完了
※「AWSマネジメントコンソールへ進む」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/8daf0dc1-314e-8520-0a6e-e76fa84b68a2.png)

### 11 サインイン情報の入力を行いAWSマネジメントコンソールへログインできることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/fb5fa6a8-c971-f4ff-4c1e-53a5e717b361.png)

# おわりに
AWSのアカウント作成自体は簡単なモノでした。
皆さんも検証用に作成してみてはいかがでしょうか？？

また、今回アカウントを作成できましたので次回はEC2を検証用に作成してみようと思っています:v_tone4:
とりあえずIAMとかSGは置いといて、、、（笑）

今回もクワバラの他愛もない記事を閲覧いただきありがとうございました！
Laravelで、Target class does not exist.とエラーが出た時の対処法

Laravel7とLaravel8で記法が異なることによりこちらのエラーが発生するようです。
バージョンアップ等を行う際は注意してください。

# エラーが起こる箇所
routes直下のweb.phpです。
```php:web.php
Route::resource('hoge', 'hogeController')->only([
    'index', 'show'
]);
```
Controllerの処理をindexとshowのみに限定するコードを書こうとしていたケースとなっていて、
web.phpに書く処理としてはベーシックなものになるので、
上記に似たようなコードであれば参考にしてください。

# エラー文
```php
   Illuminate\Contracts\Container\BindingResolutionException 

  Target class [] does not exist.

  at vendor/laravel/framework/src/Illuminate/Container/Container.php:877
    873▕ 
    874▕         try {
    875▕             $reflector = new ReflectionClass($concrete);
    876▕         } catch (ReflectionException $e) {
  ➜ 877▕             throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
    878▕         }
    879▕ 
    880▕         // If the type is not instantiable, the developer is attempting to resolve
    881▕         // an abstract type such as an Interface or Abstract Class and there is

  1   [internal]:0
      Illuminate\Foundation\Console\RouteListCommand::Illuminate\Foundation\Console\{closure}(Object(Illuminate\Routing\Route))

      [2m+13 vendor frames [22m
  15  [internal]:0
      Illuminate\Foundation\Console\RouteListCommand::Illuminate\Foundation\Console\{closure}(Object(Illuminate\Routing\Route))
```

# エラーが起こる原因
Laravel7とLaravel8のバージョンによる差異なようです。
Laravel8からは完全な名前空間を使用する必要があります。
→[名前空間とは](https://laraweb.net/surrounding/1599/)

# 解決方法

コードを下記のように修正すれば完了です！
### 修正前
```php:web.php
Route::resource('hoge', 'hogeController')->only([
    'index', 'show'
]);
```

### 修正後
```php:web.php
Route::resource('hoge', 'App\Http\Controllers\hogeController')->only([
    'index', 'show'
]);
```
Laravelにおける各Controllerの名前空間は、
App\Http\Controllers\hogeController
ですが、名前空間についての理解が曖昧な方はまずは名前空間に関して学習してからの方が良いでしょう。
scipy.stats: アンダーソン・ダーリング検定 anderson

# scipy.stats: アンダーソン・ダーリング検定 `anderson`

データが特定の分布関数からのものであるかどうかの検定。

`scipy.stats.shapiro` が正規分布を対象にしているのに対して，いろいろな分布に従っているかどうかを検定できる。

`anderson(x, dist='norm')`

`dist` には `'norm'`, `'expon'`, `'logistic'`, `gumbel'`, `'gumbel_l'`, `'gumbel_r'`, `'extreme1'` が指定できる（デフォルトは　`'norm'`）。


```python
from scipy.stats import anderson
import numpy as np

np.random.seed(123)
x = np.random.normal(50, 10, 20)
result = anderson(x)
result
```




    AndersonResult(statistic=0.36238834776122175, critical_values=array([0.506, 0.577, 0.692, 0.807, 0.96 ]), significance_level=array([15. , 10. ,  5. ,  2.5,  1. ]))



検定結果の解釈は，この関数が $p$ 値を返してくれないものだから，面倒くさいことになっている。

**If the returned statistic is larger than these critical values then for the corresponding significance level, the null hypothesis that the data come from the chosen distribution can be rejected.**


0.36238834776122175 < 0.692 なので，帰無仮説は棄却できない。

R の `nortest::ad.test` では，

A = 0.36239, p-value = 0.4078
なので，帰無仮説は棄却できない（ちゃんと $p$ 値を算出してくれている）

`ad.test` が何をやっているのか見てみると，統計量の計算は 4 行で， $p$ 値の近似計算に 9 行もかけている。近似計算を移植する。

`pvalue(statistic, n)`


```python
def pvalue(A, n):
    AA = (1 + 0.75/n + 2.25/n**2) * A
    if AA < 0.2:
        return 1 - np.exp(-13.436 + 101.14 * AA - 223.73 * AA**2)
    elif AA < 0.34:
        return 1 - np.exp(-8.318 + 42.796 * AA - 59.938 * AA**2)
    elif AA < 0.6:
        return np.exp(0.9177 - 4.279 * AA - 1.38 * AA**2)
    elif AA < 10:
        return np.exp(1.2937 - 5.709 * AA + 0.0186 * AA**2)
    else:
        return 3.7e-24
```


```python
pvalue(result[0], len(x))
```




    0.40777940924245076
Puppeteerを使ってみる

puppeteerとは、Node.js上でChromeを制御するためのライブラリ。スクレイピング等に利用することができる。今回はこれの使い方を簡単に見てみる。

ドキュメント

https://github.com/puppeteer/puppeteer

## 導入

これで導入するとChromiumの最新バージョンが含まれる。
```
npm i puppeteer
```

puppeteer-coreで導入するとChromiumは含まれない。
```
npm i puppeteer-core
```

## 動かしてみよう

以下はほとんどドキュメント内のサンプルのまま。

```ts
import puppeteer from 'puppeteer';

(async () => {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.goto('https://qiita.com/');

  await page.screenshot({ path: 'screenshot.png'});
  await page.pdf({ path: 'hn.pdf', format: 'a4' });
  await browser.close();

})();
```

browserオブジェクトを作成、pageオブジェクトを作成、```page.goto```で移動し、```page.screenshot```でスクリーンショットを作成、```page.pdf```でpdfを作成する。

```headless```オプションをfalseにすることでヘッドレスではなく見える状態でブラウザが起動する。

### 表示されるのを待ってからクリック

waitForNavigation([option])で遷移先が開くのを待つ。

```ts
await Promise.all([
  page.waitForNavigation(),
  page.click('a')
]);
```
特定の要素の出現を待ちたい場合は以下のように```waitForSelector```を使う。
```ts
await Promise.all([
  page.page.waitForSelector(selector),
  page.click('a')
]);
```
PowerBIでSharePointのファイルをデータソースにする方法

初歩的な内容ですが、PowerBI初心者の私はこれで2hつまった。

# 結論
SharePointサイトをデータソースとして指定し、
**PowerQueryエディタを使用して、必要なファイルを選択、
「ファイルを結合」（ファイルが1つであっても！）する。**

# 手順
1. データソースとしてSharePointを選択
「データを取得」から「詳細」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26413/39a8a80e-fbb4-9d7f-134e-a9cfe69adb39.png)
"share"とか適当に入れて「SharePointフォルダー」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26413/e09c03fd-e4e2-c474-266c-ec83b9a13dbd.png)
SharePointのアドレスを入力。おそらく下記のような形式のハズ。
"https://[組織ドメインとか].sharepoint.com/sites/[組織のページ]"の部分を入力する

2. PowerQueryエディターでデータソースの選択
すると下記のようにSharePoint内にある全ファイルが一覧形式でリストアップされる。
当然、データソースにしたいデータは全部ではないので、「データの変換」を押して対象ファイルを絞る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26413/2040a1c1-c376-0944-1a5f-ccd749e7ba05.png)
PowerQueryエディタが起動する。
ここでは"output.csv" 1ファイルのみ をデータソースとして指定したい。
「行の削除」で不要なファイルを消去する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26413/4f40b162-864e-561d-a709-36d4332bd093.png)

3. PowerQueryエディターで「Fileの結合」
この謎の工程が必要だということに気づかずに時間を無駄にしました。
初心者に伝えたい最重要ポイント！
このPowerQueryでは、リストアップされたファイルの「中身を読み込んで、複数あれば中身を結合」して、PowerBIへクエリとして渡すということをしています。ｄｆその動作を実施するのがこの工程になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26413/75c6b057-87f0-017e-e05a-f17cff8b1b06.png)
ファイルの中身が正しく表示されていることを確認して「OK」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26413/19f8afb2-1f96-8e62-3199-2260a52b0954.png)
すると、クエリが作成されるので、中身が想定通りであることを確認し、「閉じて適用」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26413/08515282-4d7c-8741-1811-f9d0c86565ef.png)

PowerBIに画面が移り、先ほどのデータソースが「クエリ」となってフィールドに追加されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26413/719ef52f-4459-4eb6-5d53-d22ec132ea7d.png)
VSCode で Webサーバ起動 (LiveServer インストール)

備忘録でLiveServerインストールのメモです
win10, vscode 1.66.2 使用してます

1. 拡張機能 - LiveServer入力 - インストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51758/21c4512b-165f-cd31-2884-18c4b5b75198.png)

1. 開くブラウザ設定
歯車 → 拡張機能の設定 → Settings Custom Browser → 開きたいブラウザを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51758/cd59fac6-e663-a34d-9a8f-02212c389e65.png)

1. VSCode 上で実行したい html を開いて Go Live
対象の html がブラウザで開けばOK（URL が http://～... になってる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51758/303bcef5-e76f-a8ee-2579-1dc61f1b9336.png)

1. Live Server の停止は右下 Port:XXXX（Go Liveだったとこ）をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51758/a266d112-4cb9-e33d-a7ec-563b8a29bcb9.png)
普段使っているテキストエディタと環境

ふと思いついたので自分の環境について書こうかなと思います。
今回はコマンド解説ではないのですが、すぐに続編を出します。（ｺﾞﾒﾝﾅｻｲ）

## 使用しているツール
- Mac
- Visual Studio Code
- Chrome
- Asset Catalog Tinkerer
- PropertyListEdi-tan
## Mac
自分は普段からプログラミングをするときはMacを使用しています。使い勝手がいいのと、持ち運びしやすいという点からMacにしました。
アプリの面から見ると使えるアプリは少ないですが、十分賄えるので十分だと思います。
若干動作が重くなるのがデメリットかと。
## Visual Studio Code
テキストエディターはVisual Studio Codeを使っています。理由としては
・豊富なプラグイン
・GUIが見やすい
・デフォルトで多機能
という点です。
Visual Studio Codeは正直プラグインを入れれば何でも出来のではないかと思うほどプラグインがあり、現在不自由を感じることは特にありません。
## Chrome
これは、シェア率が高く、使い勝手がいいのはもちろんですが、DevToolsがあるのが1番の決め手です。
コードの確認やどこのcssが適用されているのかが1発でわかるからです。

【拡張機能】
ついでに普段使っている拡張機能について紹介します。
・ColorPick Eyedropper
　これはウェブサイト上の色を取得し、コードに組み込める形で表示してくれるものです。
・Wappalyzer - Technology profiler
　これは今開いているウェブサイトがどのようなツールを使っているのかを表示してくれるものです。
・ウェブページ全体をスクリーンショット - FireShot
　その名の通りWebページ全体をスクリーンショットしてくれるものです。ChromeのDevToolsでもできますが、面倒くさいので拡張機能を使っています。
## Asset Catalog Tinkerer
これは正直あまり使っていませんが、　アプリの内部に格納されている画像を見るものです。アプリの分析がしたい方は調べてみてください。
## PropertyListEdi-tan
これもあまり使っていませんが、Xcodeが重たいのでその擬似品のような感じで使っています。プロパティリストが編集・作成することができます。

## まとめ
以上が簡単な使用ツールの説明でした。おそらく開発者の方にとってはツッコミどころが多かったり、すでに知っている、使っているものが多かったと思いますが、今から開発を行いたいと思っている方の参考になれば幸いです。

僕の本領であるコマンド解説については早いうちに続編を投稿します。（編集中）
100日後くらいに個人開発するぞ！day041

## 今日は総合課題にチャレンジしてみた！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/1caa244c-389b-efac-f533-876bf718ff5e.png)

## Ruby学習レッスンIコースを終了！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/78c11293-acd0-fcba-68d4-458bf794cfa0.png)


## 今日の備忘録

* ◯の倍数は割ったときの余りが0かどうかで判別する
    * 例：もし変数numberが3の倍数であれば"3の倍数です"と表記したい場合
        * `if number % 3 == 0`
        * `   puts "3の倍数です"`
        * `end`
* 条件式で等号を用いる際は「＝＝」にする
    * ダメな例
        * `if number % 3 = 0`
    * 良い例
        * `if number % 3 ==　0`
* if文ではendを忘れずに記載する
    * ダメな例
        *  `if number % 3 == 0`
        * `   puts "3の倍数です"`
    * 良い例
        * `if number % 3 == 0`
        * `   puts "3の倍数です"`
        * `end`
useSWRとinput type="file"で勝手にネットワークが動く

# 謎のネットワークアクセスがあると気持ちが悪い現象

useSWRと`input type="file"`が組み合わさったときにネットワークアクセスが発生したので、それを防ぎたいと思った。

useSWRは非常に優れたフックです。面倒な再検証やさまざまな挙動に対して細かい設定が可能になります。

```
// 指定したタイミングでfetcher関数を実行してくれる
const { data: data } = useSWR("hoge", fetcher, {
    // 初期データ
    fallbackData: null,
    // その他さまざまなオプションがある
});
```

オプションは[公式サイト](https://swr.vercel.app/ja/docs/options#%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3)で確認。

このオプションにネットワークアクセスの原因がいました。

```
revalidateOnFocus = true: ウィンドウがフォーカスされたときに自動的に再検証します
```

`input type="file"`はデフォルトではブラウザのモーダルが発生するのですが、その状態は元のウィンドウからフォーカスが外れた状態となります。(Chromeで発生を確認)
それが戻るときに自動的に再検証が発生してしまいます。

自動再検証は便利な機能ですが、仕様に合わないので、GlobalでOFFにしました。

[グローバルな設定](https://swr.vercel.app/ja/docs/global-configuration)

```
<SWRConfig value={{revalidateOnFocus:false}}>
  <Component/>
</SWRConfig>
```
TypeScriptを勉強してみた#1

## 背景
今までは趣味でpythonを使ってデスクトップアプリやツールを開発していました。
最近、いろんなWebサービスを目にするようになったことと
スキルアップのためにDjangoを使ったWebアプリ開発をしてみたいという気持ちになり、
Webアプリのフロントエンド側を開発するためにTypeScriptを学んでみようとなりました。
そこで、[サバイバルTypeScript](https://typescriptbook.jp/ "サバイバルTypeScript")のチュートリアルを進めていくことにしました。
進めている内容はサイトを見てもらえばいいと思いますので、つまったことや感じたことをここには記載していきます。

## 開発環境
WIndows11
Docker
VsCode

## 環境構築
色々とインストールしてしまうとPCが汚くなってしまうということと、
Webアプリ開発ではDockerが主流(?)らしいということから
今回はDocker+VsCodeで環境構築を進めていくことにしました。

参考にしたサイトは[こちら](https://zenn.dev/leftletter/articles/0969dcef061ff8 "DockerとVS Code Remote Containersを用いたフロントエンド開発環境構築")です。

## チュートリアル開始
### 簡単な関数を作ってみよう
サバイバルTypeScriptの[簡単な関数を作ってみよう](https://typescriptbook.jp/tutorials/make-a-simple-function-via-cli)になります。
ここは特につまりポイントはなかったです。

ここで理解したことは
**TypeScriptで作成したファイルは開発用であって実際に組み込むのはJavaScriptだということです。**
TypeScriptで作成したファイルをコンパイルするとjsファイルが作成されていたので、
上記の解釈だと思いました。

あと、気を付けないといけないのはコード編集は必ずTypeScriptにしなければいけないということですね。
静的型付けで不具合を発生させないように組んだにも関わらず、組み込んだjsを編集してしまうと整合性が取れなくなってしまうと思いました。

## おわりに
今日はここまでです。
またチュートリアルを進めていったら記事を書いていきます。
WORDCLOUDをCYTOSCAPEにマッピング

# 内容 
* 業務で機械学習をやっています
* テキストマイニングのビジュアル化を検討していて、CYTOSCAPE.JSにたどり着きました。
* 今後はREACT+GATSBY+CYTOSCAPE+FASTAPI+PYTORCHを使ったＭＬアプリを作っていきます

# Cytoscape.JS
* WEB-APIでPYTHONでWORDCLOUDをSVGで返し、CYTOSCAPEにマッピングします
* cy.filter('node[id = "a"]').css() ---> ここでCSSプロパティを追加できます

```index.html

<body>
  <div id="cy" ></div>
  <button id="btn">image add</button>
</body>

<script>
  var myData = [
    { data: { id: "a", parent: "o" } }
  ];

  var cy = window.cy = cytoscape({
    container: document.getElementById("cy"),
    elements: myData
  });

// htmlのオブジェクトボタン
//  document.getElementById("btn").addEventListener("click", function () {
//    cy.filter('node[id = "a"]').css('background-image', 'image.svg')
//  });

//こっちの方がスマート
cy.on('mouseover', 'node', function(evt){
  var node = evt.target;
  node.css('background-image', 'image.svg');
});

</script>
```

# VIZ.JS

* nodesは、オブジェクトとして宣言必要
* shapeの定義が無いと、SVGが表示されない
* imageはdummyを張り付けている　→　無いとエラーがでる

```index.html
<script>
    var nodes = new vis.DataSet([
      { id: 1, shape: "circularImage", image: "dummy.png" },
      { id: 2, shape: "circularImage", image: "dummy.png" },
    ]);

    network = new vis.Network(container, data, options);

    network.on("click", function(properties) {
          nodes.update({ id: properties.nodes[0], image: 'image.svg' });
        });
    });
```

# SVGをAPIで持ってくる場合

```index.js

      const params = {
        id: 番号,
      };
      const query = new URLSearchParams(params);//GETのクエリを渡す
      fetch(apiurl + "/wordcloud?" + query.toString())
        .then((r) => r.text())
        .then((data) => {
          data = data
            .replaceAll("\\", "") 　　//apiからのレスポンス中のゴミ削除
            .slice(1)　　　　　　　　　//apiからのレスポンス中のゴミ削除
            .slice(0, -1);　　　　　　//apiからのレスポンス中のゴミ削除
　　　　　svg = "data:image/svg+xml;utf8," + encodeURIComponent(data);//SVGストリングで渡す
```

# API設計

事前にTEXTはTFIDFベクトル化して、テーブルに入っている前提


```python.py

def get_wordcloud(dics, cutoff=5)->WordCloud:

    df = pd.DataFrame(list(dics.items()),columns=['word', 'tfidf'])
    df = df.astype({'word': 'str', 'tfidf': 'float'})
    df = df.sort_values(by='tfidf', ascending=False).head(cutoff)
    dict_parse = dict(zip(df['word'], df['tfidf']))

    if dict_parse:
        wc = WordCloud(
            width=800,
        prefer_horizontal=1,
        background_color='white',
        include_numbers=True,
       font_path='C:\Windows\Fonts\meiryo.ttc',
        stopwords=STOPWORDS).generate_from_frequencies(dict_parse)
   
      return wc.to_svg()#SVG文字列としてresponse-bodyに返す 

```
AtCoder Beginner Contest 254 参戦記

# AtCoder Beginner Contest 254 参戦記

## [ABC254A - Last Two Digits](https://atcoder.jp/contests/abc254/tasks/abc254_a)

1分くらいで解いたけど遅刻したせいで2分半で突破. 書くだけ.

```python
N = input()

print(N[-2:])
```

## [ABC254B - Practical Computing](https://atcoder.jp/contests/abc254/tasks/abc254_b)

11分半で突破、TLE1. 見た瞬間にパスカルの三角形だと分かったのに、なぜこんなに時間がかかって TLE までしてしまうのか orz.

```python
from functools import lru_cache

N = int(input())


def print_pascal(d):
    for i in range(d):
        t = []
        for j in range(i + 1):
            t.append(choice(i, j))
        print(*t)


@lru_cache(maxsize=None)
def choice(n, r):
    if r < 0 or r > n:
        return 0
    elif r == 0:
        return 1
    else:
        return choice(n - 1, r - 1) + choice(n - 1, r)


print_pascal(N)
```

## [ABC254C - K Swap](https://atcoder.jp/contests/abc254/tasks/abc254_c)

14分半で突破. 実際にK個おきにソートして、比較すればいいだけ. なんでこんなに時間をかけてしまったんだ…….

```python
N, K, *a = map(int, open(0).read().split())

b = a[:]
for x in range(K):
    b[x::K] = sorted(b[x::K])

if sorted(a) == b:
    print('Yes')
else:
    print('No')
```
Single team remote wall とは


## tl;dr

- チーム全体のタスク・進捗などをひと目でわかる１つの壁を、リモートチームにおいても取り入れること
- 壁というよりもボードとかのほうがイメージとしてはわかりやすい気がした。壁って言うとなにかを分断するためのものなのかと思ったけど、むしろその逆に近い方向性だった。

## Single Team Remote Wall

thoughtworks 社の Technology Radar(Volume 26)のTechniquesカテゴリの#2 この概念が紹介されていたが、知らない概念だったので簡単なメモ

- on-siteのチームでは存在した「壁」をremoteのチームにも取り入れる
- 「壁」には、そのチームの様々な情報がパット見でわかるような情報が網羅されていてhubとしても機能していた
- remoteになった結果、チームの「壁」がなくなった結果、各メンバーが個別に「壁」を管理するようになってしまった。
- その結果、ひと目見てプロジェクトのことを理解することが難しくなってしまった。

### 原文と翻訳

> A single team remote wall is a simple technique to reintroduce the team wall virtually. We recommend that distributed teams adopt this approach; one of the things we hear from teams who moved to remote working is that they miss having the physical team wall. This was a single place where all the various story cards, tasks, status and progress could be displayed, acting as an information radiator and hub for the team. The wall acted as an integration point with the actual data being stored in different systems. As teams have become remote, they've had to revert to looking into the individual source systems and getting an "at a glance" view of a project has become very difficult. While there might be some overhead in keeping this up-to-date, we feel the benefits to the team are worth it. For some teams, updating the physical wall formed part of the daily "ceremonies" the team did together, and the same can be done with a remote wall. -- https://www.thoughtworks.com/radar/techniques?blipid=202110040

> google translate
> 単一チームのリモートウォールは、チームウォールを仮想的に再導入するための簡単な手法です。 分散したチームがこのアプローチを採用することをお勧めします。 在宅勤務に移行したチームから聞いたことの1つは、物理的なチームの壁がないことです。 これは、さまざまなストーリーカード、タスク、ステータス、進捗状況をすべて表示できる単一の場所であり、チームの情報ラジエーターおよびハブとして機能しました。 壁は、実際のデータがさまざまなシステムに保存されている統合ポイントとして機能しました。 チームが遠隔地になっているため、個々のソースシステムの調査に戻る必要があり、プロジェクトの「一目でわかる」ビューを取得することは非常に困難になっています。 これを最新の状態に保つには多少のオーバーヘッドがあるかもしれませんが、チームにとってのメリットはそれだけの価値があると感じています。 一部のチームでは、物理的な壁の更新は、チームが一緒に行った毎日の「式典」の一部を形成しました。同じことは、リモートの壁でも行うことができます。  -

## REF

https://www.thoughtworks.com/radar/techniques?blipid=202110040
2022/6/8主にITとかセキュリティの記事

勤怠システムがランサム被害、総当たり攻撃で侵入か - ヴィアックス
https://www.security-next.com/137056

保護者の約1割が子どものネット履歴を確認 - 国内外でギャップも
https://www.security-next.com/137115

メール誤送信後の対応、「上司に報告」2割強
https://www.security-next.com/137112

ランサムウェア：安全なバックアップは企業の最終防衛線(6/6)
https://ascii.jp/elem/000/004/093/4093798/?rss

月桂冠、不正アクセス受け個人情報流出の可能性(6/6)
https://news.nissyoku.co.jp/news/fujibayashi20220531013320232

ランサムウェア攻撃が2021年に急増--ベライゾン調査(6/6)
https://japan.zdnet.com/article/35188490/

QRコードに潜むリスクと、サイバー攻撃から身を守るための7つの方法(6/5)
https://news.infoseek.co.jp/article/mynavi_2425219/?tpgnr=it

Bored Ape Yach ClubとOthersideDiscordServerが再びハッキング被害に(6/6)
https://nextmoney.jp/?p=50833

米パロアルトのアローラ氏「サイバー攻撃がビジネス化」(6/6)
https://www.nikkei.com/article/DGXZQOUC051XR0V00C22A6000000/

ハッキングされたら検索履歴が傍受される？対処法まで解説(6/6)
https://cybersecurity-jp.com/column/67226

京都大学大学院工学研究科の教職員のパソコンがEmotet感染、メールの不正送信は停止済み(6/6)
https://scan.netsecurity.ne.jp/article/2022/06/06/47692.html

ロシア建設省のサイトにサイバー攻撃＝ＲＩＡ(6/6)
https://jp.reuters.com/article/ukraine-crisis-russia-cyber-idJPKBN2NN07F

野放しにされているWindowsの脆弱性「Follina」には、遠隔操作に悪用される危険が潜んでいる(6/6)
https://wired.jp/article/microsoft-follina-vulnerability-windows-office-365/

Firefoxに完全ローカルで機能する翻訳アドオン登場、EU支援での研究開発(6/6)
https://news.mynavi.jp/techplus/article/20220606-2358215/

EvernoteやOneNoteに変わるメモアプリ、データベースが超便利な「Notion」(6/6)
https://xtech.nikkei.com/atcl/nxt/column/18/02057/051000004/

流動的ステーキングがETHにもたらすリスク、イーサリアム財団が警告(6/6)
https://coinpost.jp/?p=356254

そのホームページ大丈夫？　クリック・ジャッキングって何？　それは「HP（ホームページ）で利用者に意図しない操作を行わせる攻撃方法」です！(6/6)
https://mbp-japan.com/tokyo/itlaboj/column/5112717/

1PasswordがFIDO Allianceへ参加。今後1Passwordでパスワードレス・サインインも提供。(6/6)
https://applech2.com/archives/20220606-1password-join-the-fido-alliance.html

ウェブ3がウクライナでの戦争犯罪記録に一役【コラム】(6/6)
https://finance.yahoo.co.jp/news/detail/20220606-00170632-coindesk-bus_all

NFTによってDNAデータを個人が所有できる時代に(6/6)
https://hedge.guide/feature/nft-for-personal-dna-data-bc202206.html

「Web3.0」を最近のニュースから紐解いてみる、、、(6/6)
https://japan.cnet.com/blog/natsuhiko_tsuchiya/2022/06/06/entry_30030154/

Microsoftのポイントプログラム、ポイント引き換えでアカウント停止に(6/6)
https://www.zaikei.co.jp/article/20220606/675317.html

特許保護、海外サーバーの壁 侵害に「抜け道」、ニコ動が敗訴 法運用「時代遅れ」懸念(6/6)
https://www.nikkei.com/article/DGKKZO61398020T00C22A6TCJ000/

富裕層が資産を隠しやすい国ランキング！　あの大国は抜け穴だらけ？　日本は何位？(6/5)
https://zuuonline.com/archives/238832

Gitコマンドあれこれ(6/6)
https://qiita.com/shiho97797/items/6bd26431c3a1026145c6

暗号資産の詐欺被害額、2021年以降10億ドル以上＝米当局(6/6)
https://jp.reuters.com/article/crypto-currency-scams-ftc-idJPL4N2XT00N

サーバーがランサムウエア感染　バックアップも暗号化され復旧長期化(6/7)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600011/060200109/

テレワークで変わる自宅のセキュリティー対策、ウイルス対策ソフト導入は必要か(6/7)
https://xtech.nikkei.com/atcl/nxt/column/18/02092/060600003/

情シスから独立して起業、そんなキャリアが「普通」になる日(6/7)
https://xtech.nikkei.com/atcl/nxt/column/18/00138/052401045/

多要素認証やパスワードレス設定、うまく組み合わせてアカウントをより強固に(6/7)
https://xtech.nikkei.com/atcl/nxt/column/18/02050/042800004/

フジテレビ関連会社のサービスから利用者3万件超の情報漏洩、100回／秒以上の攻撃で(6/7)
https://xtech.nikkei.com/atcl/nxt/column/18/00598/121600167/

勘定系を抜本的に見直す　技術者は「領空侵犯」を
越智 俊城 氏　三菱UFJフィナンシャル・グループ 執行役常務グループCIO(6/7)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600003/053000056/
Web3.0簡介


# Web3.0簡介

## 什麼是區塊鏈與Web3.0

近年大家可能很常聽到區塊鏈等各種去中心化的介紹與想法，不過比較多的應用與著墨都是在各種幣，以太幣，狗狗幣等挖礦等題材，所以聽到最後其實有些人(包括我)，其實都會對這些想法有點反感 :-

但其實從技術層面的角度來看，區塊鏈上其實還是有滿多技術特性吸引人的，比如說加密性被用來處理各種契約或保險相關的應用，或是可以提供End to End(E2E)的加密來讓資料與資訊的傳輸更為安全。所以認識一下也好，如果剛好有跟到炒幣浪潮賺到錢更好(我沒有ＱＱ)

那區塊鏈跟前端又有什麼關係呢？這就是今天要介紹的web3.0的主題了。

過去中心化的架構如大小型機房，線上虛擬環境，各種雲端服務AWS，GCP，Azure提供了很穩定以及強大的基礎設施，讓開發者或公司把各種service或應用架設在上頭，以便提供給全世界的使用者高速便利的服務，也導致越來越多的服務都往三大雲上去，變成大者恆大的概念，一旦出事，也會導致很大的災情，如不久前NetXXXXX很多用戶無法收看，或是知名證券銀行將服務架在雲端但收到駭客集團勒索以及DDoS導致服務無法提供。

而Web3.0則是想要打破這種由大型服務

[@j1mmyeth](https://twitter.com/j1mmyeth/status/1459003044067258370)
>i’ve started to describe web3 as the ownership layer - could have been inspired by one of yours or another recent thought leaders tweets.
Web 1.0 read
Web 2.0 read / write
Web 3.0 read / write / own

### 優點

#### 1. 所有權

Web3特別強調使用者將擁有所有數位資產的所有權。
雖然目前大部分的服務google，IG等在使用者條款上都會特別強調使用者可以下載或是管理所有的個人資料，但使用者其實並不直接擁有這些數位資產的所有權。

目前的線上服務或是遊戲，使用者會在平台上創造內容與任何的個人紀錄，萬一你常用的某個線上服務因為新創公司倒閉，可能就會導致你的所有資料歸零。

#### 2. 內容審查

在目前所有的網路服務裡，平台所擁有的權利跟使用者是相當不對稱的，大部分的人並不仔細瀏覽使用者的內容政策，也任意的信任這些平台，而平台卻可以隨時修改內容政策，來限定或審查你所產生的數位資產與相關內容。

甚至透過你個人含有隱私的內容來訓練人工智慧？有想過很多郵件服務的怎麼能夠有很強大的搜尋？甚至能夠幫你偵測郵件內容自動加註到行事曆或是產生各種會議連結？各式各樣的社群平台很多便利的功能背後其實都能夠探討許多隱私資料是否有被使用的可能性。

因此，抗內容審查，這也是Web3中特別強調的特性，透過加密與內容擁有權，你可以擁有更多隱私權。

#### 3. 帳戶

在現今的網路世界裡，你可能會有google,facebook,ig,小紅書等各種不同平台的帳號，同意了一堆使用者條款，設定了許多個人資料與驗證，更甚至需要實名制才能建立帳號。

而在Web3裡特別強調你只需要使用單一個Ethereum上的token address，便可以跨平台與完成單一登入與驗證。
身份

### 缺點

看完上面的敘述有沒有覺得太過理想或是不切實際？  
那再來一點耐心看看兩個目前Web3最大的缺點。

#### 1. Centralized Infrastructure

整個全球的網路系統在過去幾十年才陸陸續續穩定下來，各種網路的骨幹，DNS Root Server，雲端平台所建立起來的中心化基礎架構，然後再過去10年陸陸續續產生的各大網路服務，各種獨角獸目前都還是依賴中心化的基礎架構才得以提供服務。

而Web3近幾年才陸陸續續開始，雖然透過加密貨幣讓很多人認識了區塊鏈，但對於上面提到的那些優點所需要的基礎架構，目前才屬於萌芽階段，甚至很多號稱去中心化的服務目前也是架設在中心化的基礎架構上...

但Web3還年輕嘛，也許就像網路這玩意剛出現一樣，需要一點時間發芽長大，陸陸續續改善與建立自己的Infrastructure。

#### 2. Low Accessibility

你可能可以輕易的下載app來使用產生token取得各種幣，但相關的服務或應用目前對於普羅大眾的可存取性是相對很低的，甚至是零知識的，這都還滿需要許多的成本來教育使用者或是提供更低的門檻讓使用者體驗。

## 小結

所有的技術都會有他自己的價值，這是我一直相信的，雖然目前個人觀感對於Ｗeb 3.0是保持觀望態度，不過覺得有些初步的認識也不錯。
Github for Unityを使用したGithubとUnityの連携


「__Github for Unity__」は「__Git for Unity__」に置き換わってしまったようなので記事の内容消しています。

下記の「__Readme.md__」に導入方法が書かれています。

https://github.com/spoiledcat/git-for-unity

また、「__Git for Unity__」ではありませんが、「__VSCode__」を使用したGitHubへの上げる方法の記事を作成したのでそちらもよろしければご覧ください。

https://qiita.com/T-H9703EnAc/items/7d6d0b072efe5a032ed4
openairinterface5gのビルド＆実行方法メモ

# openairinterface5gのビルド＆実行方法メモ

1. OSのインストール
    - Ubuntu18.04をインストールする
        - 【注意】VMを使用するとビルドができない

2. OAIのダウンロード
    - gitがインストールされていない場合はインストールする
        - `sudo apt install git`
    - `git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git`
    - ブランチをdevelopブランチに変更
        - `git checkout develop`
3. OAIのビルド
    - EPCやHSSを使用する場合はfreeDiameterを別途インストールする必要がある
        - http://www.freediameter.net/hg/freeDiameter
        - バージョンは最新のものを使用(現在2022/6/3時点)
        - Ubuntu18以降でないとインストールできない模様
    - 実行するコマンド
        - `cd <oaiのディレクトリ>`
        - `source oaienv`
        - `cd cmake_targets`
        - `export BUILD_UHD_FROM_SOURCE=True`
        - `export UHD_VERSION=4.1.0.0`
        - `sudo ./build_oai -I -w <SIMUまたはUSRP> --gNB --nrUE`

4. OAIの設定
    - gNBの設定
        - `<oaiのディレクトリ>/targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf`のファイルを編集
            - amf(CORE側)のIPアドレスを指定する
            - コンフィグ内のplmn_listの値をCORE側と揃える。
            - gNBのIPアドレスを動作マシンのIPアドレスで指定する
5. OAIの実行
    - ディレクトリの移動
        - `cd <oaiのディレクトリ>/cmake_targets/ran_build/build/`
    - RFシミュレータで実行する場合
        - gNBの実行コマンド
            - `sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --rfsim --sa`
        - UEの実行コマンド
            - `sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 -s 516 --rfsim --sa`
    - USRPデバイスで実行する場合
        - gNBの実行コマンド
            - `sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --sa -E`
            - 公式Docには-Eが入ってないがUSRPのB210はサンプルレートが61440000に対応してないので、B210を使うときには必要
        - UEの実行コマンド
            - `sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 -s 516 --sa`
【Vue】「vue-cli」を4から5にアップグレードしたら、scssが反映されない

一応解決はしたのですが、備忘録として残します。

## 「main.js」でimportした.scssファイルが読み込まれない

タイトル通り、vue-cliをアップグレードしたら、今までは問題なかった`npm run serve`(vue-cli-service serve)で起動できる開発サーバーで、importしたscssファイルが反映されなくなりました。

ただし、反映されなくなったと言ってもエラーが出るわけではなく、コンパイルはされてるしサーバーも起動するけど、scssに記述したcssだけが反映されません。

## 結論

色々と迷走しながらも一日悩み、結果、「package.json」のsideEffectsが原因だったことが判明しました。

現在自作してるプロジェクトはビルドにrollupを使用しているのですが、package.jsonで`sideEffects:false`が設定されているとビルド時にcssが出力されず、それの解決策としてネットに情報があったので、よく分からないままに記述していました（今もよく分かってません）。

とりあえず、「package.json」から`sideEffects`を削除したところcssが読み込まれるようになったので、しばらく様子見したいと思います。
【yocto】buildディレクトリに中間生成物を残さない方法

# 概要
- rm_work.bbclassを使用して、bitbakeの終わりにbuildディレクトリの中間生成物を削除する

# 方法
- local.confに以下の文を追記する
~~~
INHERIT += "rm_work"
~~~
##### 補足
- 基本的には、+=を使用しよう
- = は機能設定を意味し、+= は機能追加を意味する
    - 例
        - INHERIT=A、INHERIT=B ⇒ B機能のみが有効
        - INHERIT=A、INHERIT+=B ⇒ A機能,B機能が有効

# 動作確認
`INHERIT += "rm_work"`有り、無しbitbakeを行い、buildディレクトリの差分を確認する

#### まずは、通常bitbake
~~~md:bitbakeの準備を行う
takeshi@X250:~/yocto/poky$ source oe-init-build-env 
(略)
~~~
~~~md:bitbakeを実行する
takeshi@X250:~/yocto/poky/build$ bitbake -k core-image-minimal
(略)
NOTE: Tasks Summary: Attempted 2654 tasks of which 2424 didn't need to be rerun and all succeeded.

Summary: There was 1 WARNING message shown.
~~~
~~~md:tmp/workのサイズを確認する
takeshi@X250:~/yocto/poky/build$ du -sh tmp/work
2.1G	tmp/work
~~~
#### local.confに`INHERIT += "rm_work"`を追記してbitbake
~~~md:bitbakeの準備を行う
takeshi@X250:~/yocto/poky$ source oe-init-build-env 
(略)
~~~
~~~md:local.confにINHERIT += "rm_work"を追記する
takeshi@X250:~/yocto/poky/build$ echo "INHERIT += \"rm_work\"" >> conf/local.conf
~~~
~~~md:bitbakeを実行する
takeshi@X250:~/yocto/poky/build$ bitbake -k core-image-minimal
(略)
NOTE: Tasks Summary: Attempted 3093 tasks of which 2424 didn't need to be rerun and all succeeded.

Summary: There was 1 WARNING message shown.
~~~
~~~md:tmp/workのサイズを確認する
takeshi@X250:~/yocto/poky/build$ du -sh tmp/work
778M	tmp/work
~~~

#### おまけ：生成物の違いを確認
##### 例えば、ca-certificatesの生成物を比較してみる
- 通常bitbakeの場合、色々あるなディレクトリが残っている
- INHERIT += "rm_work"を記述したbitbakeは、temp(ビルドログ)しかない
~~~md:通常bitbake
takeshi@X250:~/yocto/poky/build$ ls tmp/work/all-poky-linux/ca-certificates/20190110-r0/
deploy-rpms      pkgdata-pdata-input        sstate-install-package_write_rpm  sstate-install-populate_lic      sysroot-destdir
license-destdir  sstate-install-package_qa  sstate-install-packagedata        sstate-install-populate_sysroot  temp
~~~
~~~md:INHERIT += "rm_work"を記述したbitbake
takeshi@X250:~/yocto/poky/build$ ls tmp/work/all-poky-linux/ca-certificates/20190110-r0/
temp
~~~
4週目spring

スプリング

@Controller//1.遠隔呼び出し可能なプログラムへの呼び出し

public class Hello {

@RequestMapping("/hello")//2.URLとメソッドを接続

public void main() {

System.out.println("Hello");
}
}


ローカルサーバーから呼び出すと>
トムキャット内部で何かがオブジェクトを生成してくれるのでインスタンスメソッドも呼び出される。（staticがなくてもよい）

ちょっと　java
int iv=10;//インスタント変数 
static int cv=20;//スタティック変数
public void main() {

System.out.println("Hello");//インスタンス·マーサードiv,cv使用可能
}

public static void main(){//スタティックメソッドcvのみ使用可能

System.out.println(cv); ok 
System.out.println(iv);エラー

ReflectionAPI=privateなので外部呼び出しが不可能なメソッドを呼び出せるようにし、クラス情報を得て強力な機能を提供 
スプリングにあるからある程度だけ知ってから進めよう。

HTTPリクエストと応答
リモートプログラムをURLから要請すると、トム·ギャットがHttpServletRequestオブジェクトを作成し、要請した情報を作成する。 
要請した情報が必要なときはメインメソッドから媒介変数として入力すればよい

?year=2021&month=6&day=21
=getQueryString()
String year = request.getParameter(“year”);
String year = request.getParameter(“month”);
String year = request.getParameter(“day”);


@Controller 
public class Hello {
@RequestMapping(“/requestInfo”) 
public void main(HttpServletRequest request,HttpServletResponse respons) {

}
その後、HttpServletResponseを利用したブラウザーに出力する。

出力部分にこのように書かなければならない。
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");//ハングル文字化け
PrintWriterout=response.getWriter();//responseオブジェクトからブラウザーへの出力ストリームを得る。 
out.println(year+"年"+month+"月"+day+"日は");
out.println(yoli+"曜日です");

実行するたびに結果が変わること=動的リソース
画像ファイルみたいなもの変わらないもの=静的リソース

サーバが提供するリソースは2つあり、1.動的リソース、2.静的リソースがある。

クライアント:サービスを要請するアプリケーション
サーバ:サービスを提供するアプリケーショントムキャット(サーバアプリケーション)

クライアント>リクエスト>サーバ(データ処理)>応答>出力

サーバには様々な種類があるが、どのようなサービスを行うかによって異なる。
Emailserver=Eメールサービスを提供
Fileserver=ファイルサービスを提供
Webserver=ブラウザを通じて受けられるすべてのサービスウェブサービスが提供するサービス

クライアントがipアドレスに要請したとき、どのサーバに対する要請なのかわからないので、 
この時必要なのがポート番号だ。 ウェブサーバーは基本80のため省略可能だがトムキャットを使うと:8080なので省略不可

WASとは何か。Webアプリケーション（プログラム）をサービスするサーバWebApplicationServer
サーバにプログラムをインストールしてクライアントがこれを使用できるようにするクライアントは実行結果のみ受け取る
トムキャットをWASと呼ぶ。 
アップデートの容易性と容量の確保

トムキャットの内部構造
クライアントが要請すると8080ポートに行くとそこでスレッドプールが待っている リクエストにつきスレッド1つが処理する
サーバの中(トルクキャット)にサービス(コネクトhttp:灯に合わせて)があり、そのサービスを処理するのがエンジンですが、エンジンの中にはホストが複数いる可能性があり、
ホストの中にはコンテキストがいくつかありうる。それがスプリングプロジェクト設置されることができ、その中にプログラムがタブレットがコントローラメソッドを呼び出す。 

トムキャットの設定ファイル
トムキャット設置経路/conf/server.xml:Tomcatサーバー設定ファイル
トムキャット設置経路/conf/web.xml:Tomcatのすべてのwebappの共通設定1
ウェブアプリ名/WEB-INF/web.xml:webappの個別設定2

server.xmlタブレットまでの流れあり
web.xmlを見ると、複数のサブレットが作られていますが、1.遠隔プログラム登録2.URLマッピングなどがありますが、これをいちいち作るのは難しいので、 
1.@Contoller2.@RequestMappingのアノテーションに変わる
[C#][ASP.NET Web API]WebAPIのみのプロジェクトのデバッグ実行で起動時にブラウザを表示させないようにする

WebAPIのみで画面が不要(MVCなし)な場合、毎回ブラウザが開くと困る…というときに使える設定。

プロジェクトのプロパティ＞
Web＞開始動作＞「ページを開かずに外部アプリケーションからの要求を待つ」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538652/66c7aaed-fb17-e711-2725-e14c93fa15f4.png)


デバッグ実行を開始すると、ブラウザが起動せず何も起きていないように見えてわかりにくいですが、POSTMAN等でアクセスすると実行されていることを確認できます。
HTMLによる基本の入力フォーム部品について

# HTMLによる入力フォームのまとめ
サイトで目にする入力フォームのパターンをいくつかまとめてみました。

```html:index.html
<!DOCTYPE html>
<html lang="ja">
 <head>
   <meta charset="UTF-8">
   <title>My Site</title>
 </head>
 <body>

  <!-- 1行テキスト -->
  <input type="text">

  <!-- 1行テキスト(初期値あり) -->
  <input type="text" value="hello">

  <!-- 1行テキスト(入力例あり) -->
  <input type="text" placeholder="taguchi">

  <!-- パスワード入力用 -->
  <input type="password">
  
  <!-- 複数行テキストエリア -->
  <textarea></textarea>

  <!-- 複数行テキストエリア(初期値あり) -->
  <textarea>hello</textarea>

 </body>
</html>
```

### 結果

右から、一行テキスト、初期値あり、入力例あり、パスワード入力用ver.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185869/9a277f54-3782-911e-c083-f90e9993f1bc.png)

複数行テキストエリアと初期値ありver.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185869/2a98368d-093d-576a-5e0c-3ae79cfca11a.png)

```html:index.html
  <!-- 1行テキスト(ラベルあり) -->
  <label for="name">名前</label>
  <input type="text" id="name">
  
  <!-- 1行テキスト(ラベルタグの中にinputタグを挿入) -->
  <label>名前 <input type="text"></label>
```
### 結果
フォームの前に「名前」のラベルがついている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185869/0466ac20-e206-d85e-83ae-16622b495f03.png)
NFTドメインについて

Web 3.0の世界において重要な役割を果たすNFTドメインについて調べてみた。

## NFTとは
NFTとは、Non-Fungible Token の頭文字をとったもので、仮想通貨などをつかって代替え不可能なトークンのことで、デジタル資産の所有を明確にすることができます。

## NFTドメインとは
NFTドメインとはデジタル世界において個人を主張する為のアイデンティティの事で、以下のようにインターネットにおけるドメインと同じような任意の文字列で構成される。
`euonymus.blockchain`

## NFTドメインの特徴
NFTドメインは一度購入すると本当にあなたの所有物となります。これまでのインターネットのドメインの場合は実際にはDNSの所有権は有しておらず、あくまで期間を限定した利用権としてのみ所有する事ができた。そのため毎年費用をはらって更新する必要があった。NFTドメインは一度購入してミントするとシステム的にもう誰にもアクセスする事ができなくなり名実共にあなたの所有物となる。必要に応じて売却する事もできる。
　
## NFTドメインの用途
- 暗号資産の送受信アドレスとして利用
- インターネット上の自分の名前として利用
- インターネット上のプロフィールとして利用
- インターネットサービスへのログインに利用
- Web3.0対応ウェブサイトのドメインとして利用

### 暗号資産の送受信アドレスとして利用
暗号資産の送受信は基本的にブロックチェーンの自分のウォレット・アドレスを使って行われる。暗号資産の送信の際、送り主は自分のウォレットから送信先のウォレットアドレスを指定する。送り主は数十文字のランダム文字列を送り先に指定する必要があり、送り先を記憶する事は困難であり、送り先をタイプミスしたり誤送信の危険性などが伴う。
NFTドメインはこのウォレット・アドレスを自分の選んだ視認しやすいドメイン文字列にて代替えする事ができる。送り主は相手のウォレット・アドレスの代わりにNFTドメインを指定する事で暗号資産を送ることができる。
　　
### インターネット上の自分の名前として利用
NFTドメインに指定した名前をインターネット上の自分のユーザーネームとしてどのサービスでも統一して同一人物であると主張する事ができる

### インターネット上のプロフィールとして利用
NFTドメインと連携した普遍的なプロフィールページをつくり、TwitterやFacebookなどのSNSとリンクして、各サービスが自信のアカウントであると主張する事ができる。
　
### インターネットサービスへのログインに利用
NFTドメインでシングルサインオンをする事で、各サービス毎にIDとパスワードを管理してログインする事が不要になります。

### Web3.0対応ウェブサイトのドメインとして利用
これまでのインターネットでは、ドメインがIPアドレスを指し示していたが、これと同じように、NFTドメインにてIPFSなどで作られたWeb3.0対応のサイトを指し示す事でWebサイトのドメインとして利用する事ができる。

　
## NFTドメインの種類
### NFTドメインの取得は以下でできる
- [ENS (Ethereum Name Service)](https://ens.domains/ja/)
- [Unstoppable Domains](https://unstoppabledomains.com/ja-jp)

| サービス | 取得可能ドメイン | 購入タイプ | 対応ブロックチェーン |
| -- | -- | -- | -- |
| ENS | .eth のみ | 定期更新が必要 | Ethereum |
| Unstoppable Domains | `.zil` `.crypto` `.coin` `.wallet` `.bitcoin` `.x` `.888` `.nft` `.dao` | 買い切り | Ethereum, Bitcoin, Cardano, Solana |




## 参考サイト
- [What is a Domain NFT: What You Need to Know About NFT Domains](https://coincentral.com/nft-domain-guide/)
自作するDIコンテナ 0

# 動機

最近, Javaのリフレクションについて知り, フレームワークなどの中身に使われているらしいということを知りました. リフレクションは簡単にカプセル化を破壊してしまうので多用は禁物ですが, いろいろ便利な使い方ができるようです. そこで, ひとつのアプリケーションとしてDIコンテナを自作してみることにしました. 

# DIとは

DIとはDependency injectionのことで, 依存性の注入です. これだけ聞いてもよくわからないですが, デザインパターンの一種のようです. [Wikipedia](https://ja.wikipedia.org/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E3%81%AE%E6%B3%A8%E5%85%A5)によると, 

>依存性の注入（いぞんせいのちゅうにゅう、英: Dependency injection）とは、コンポーネント間の依存関係をプログラムのソースコードから排除するために、外部の設定ファイルなどでオブジェクトを注入できるようにするソフトウェアパターンである。

ということです. 

Javaでいうと, インスタンスを使うためにはどこかに`new`と書いて実装クラスをインスタンス化する必要があります. その一方, 仕様変更等に柔軟に対応するため, 実装クラスをハードコーディングしたくないという考えもあります. このとき, 

- 実装クラスを準備しておくから, クラスのリストを適宜検索, インスタンス化してフィールドに代入しておいてね ← DI

といったことができれば, これは解決できると思います. DIコンテナは, このような機能を持つオブジェクトです. 

# DIコンテナの実現

以下では「クラスのリストを検索しインスタンス化して, 適宜フィールドに代入する」という機能を対象として, それを実現するために必要な技術を考えます. 

- 管理下のクラスをリスト化する機能
- インスタンスを代入するべきフィールドを判別する機能
- クラスの型を与えると, それにアサインできる具象クラスを検索する機能
- 具象クラスをインスタンス化する機能

が必要と考えられます. フィールドの判別と具象クラスのインスタンス化は, クラスファイルの内部構造に言及しているので, リフレクションが必要になってきます. 

次回以降, コードを書きながら, 実装していこうと思います. 

## 参考

以下のYoutube動画から刺激を受けて, やってみようと思いました. 
[https://www.youtube.com/watch?v=LR0nSDRR0Ac&t=4s](https://www.youtube.com/watch?v=LR0nSDRR0Ac&t=4s)
Looker の LookMLエディタのデザインをカスタマイズする（色やフォントサイズなど）

# 概要

Web上にて、LookerのmodelやviewをLookMLで書く際に利用するエディタのデザインをカスタマイズする方法です。

下記の情報を参考にしています。

https://community.looker.com/lookml-5/customizing-the-ide-7935

# こんな感じにできます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10525/6d84d7ab-971b-7e1f-7788-dfe50ce92c55.png)

# はじめに

Google拡張の「[Stylebot](https://chrome.google.com/webstore/detail/stylebot/oiaejidbmkiecgbjeifoejpgmdaleoha?hl=ja)」を利用することが前提になりますので、この拡張を導入しておきます。

# やり方

Stylebotにて、新しいスタイルを作成して保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10525/801bb888-6aa2-3240-cf60-9a3b8f441ad4.png)

<details><summary>こちらを展開したものは、私がGruvboxを似せて作ったものになります。</summary><div>

```yaml
.ace_editor {
    background-color: #1E1E1E;
    color: #93A1A1;
    font-size: 18px;
    font-family: 'Inconsolata','Menlo';
}

.ace_identifier {
    color: #CFB88B;
}

.ace_gutter {
    background: #1E1E1E;
    color: #d0edf7;
}

.ace_print-margin {
    width: 1px;
    background: #33555E;
}

.ace_entity.ace_other.ace_attribute-name, .ace_storage {
    color: #FEB749;
}

.ace_cursor, .ace_string.ace_regexp {
    color: #D30102;
}

.ace_marker-layer .ace_active-line, .ace_marker-layer .ace_selection {
    background: rgba(255, 255, 255, 0.1);
}

.ace_multiselect .ace_selection.ace_start {
    box-shadow: 0 0 3px 0px #002B36;
    border-radius: 2px;
}

.ace_marker-layer .ace_step {
    background: rgb(102, 82, 0);
}

.ace_marker-layer .ace_bracket {
    margin: -1px 0 0 -1px;
    border: 1px solid rgba(147, 161, 161, 0.50);
}

.ace_gutter-active-line {
    background-color: #0d3440;
}

.ace_marker-layer .ace_selected-word {
    border: 1px solid #073642;
}

.ace_invisible {
    color: rgba(147, 161, 161, 0.50);
}

.ace_keyword, .ace_meta, .ace_support.ace_class, .ace_support.ace_type {
    color: #CE5D15;
}

.ace_constant.ace_character, .ace_constant.ace_other {
    color: #CB4B16;
}

.ace_constant.ace_language {
    color: #B58900;
}

.ace_constant.ace_numeric {
    color: #D33682;
}

.ace_fold {
    background-color: #268BD2;
    border-color: #93A1A1;
}

.ace_entity.ace_name.ace_function, .ace_entity.ace_name.ace_tag, .ace_support.ace_function, .ace_variable, .ace_variable.ace_language {
    color: #CE5D15;
}

.ace_string {
    color: #AAB106;
}

.ace_comment {
    font-style: italic;
    color: #B6803D;
}

.ace_line.ends_with_foreign:not(.starts_with_foreign) .ace_token, .ace_line.ends_with_foreign:not(.starts_with_foreign) .ace_indent-guide {
    background-color: transparent;
}

.ace_gutter-cell.modified {
    background-color: #8f9489;
}

.ace_paren {
    color: #FECE0A;
}

.ace_indent-guide {
    opacity: 0.15;
}

.ace_constant_ref {
    color: #dc322f;
}
```

</div></details>

本家のスタイル（Solarized Dark Theme）は、下記をご確認ください。

https://github.com/MartinGuindon/looker-ide-solarized-dark-theme

フォントサイズなども調整すると、LookMLがだいぶ見やすくなります。

以上です。
新 App Store 審査ガイドライン 翻訳&差分ガイド 2022年6月号

# はじめに

これは2022年6月6日付けで変更された App Store 審査ガイドラインの翻訳&差分ガイドです。

[前回](https://qiita.com/midnightSuyama/items/14ae8afc7636bd704302)からの変更に新規項目はありませんが、既存要件が削られ緩和されています。これまでは、バイナリに最低限のデータを含める必要がありましたが、旧 4.2.3 (ii) が削除されたことで、今後はデータを完全に切り分けて管理できるようです。

全体的に表記が `countries` から `countries or regions` に変更されていますが、今回の修正項目には含めていません。

[https://developer.apple.com/app-store/review/guidelines/](https://developer.apple.com/app-store/review/guidelines/)

# 修正項目

## 1.1.4 ポルノ表現は不可。

> Overtly sexual or pornographic material, defined as “explicit descriptions or displays of sexual organs or activities intended to stimulate erotic rather than aesthetic or emotional feelings.” This includes “hookup” apps that may include pornography or be used to facilitate prostitution.

`by Webster’s Dictionary` を削除。

10年以上明記されていた定義元が消滅しただけ。

## 2.5.4 バックグラウンド処理は規程用途に限定。

> Multitasking apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.

`If your app uses location background mode, include a reminder that doing so may dramatically decrease battery life.` を削除。

バッテリー消費の注意書きが不要に。

## 4.2.3

項目 (ii) が消滅。旧 (iii) が 新 (ii) に移行。

旧 (ii) の内容は下記。

> Make sure you include sufficient content in the binary for the app to function at launch.

## 4.7.1 Software offered under this rule must:

### ● 現金賭博へのアクセスは不可。

> ● not provide access to real money gaming;

`lotteries, or charitable donations` を削除。

宝くじや慈善寄付が対象外に。

## 5.2.5 Apple Products:

### Apple 製品に類似したインターフェースは不可。iTunes ミュージック試聴のコンテンツ利用は不可。アクティビティコントロールに類似した表現は不可。Apple Weather の利用は WeatherKit 必須。

> Don’t create an app that appears confusingly similar to an existing Apple product, interface (e.g. Finder), app (such as the App Store, iTunes Store, or Messages) or advertising theme. Apps and extensions, including third-party keyboards and Sticker packs, may not include Apple emoji. iTunes music previews may not be used for their entertainment value (e.g. as the background music to a photo collage or the soundtrack to a game) or in any other unauthorized manner. If your app displays Activity rings, they should not visualize Move, Exercise, or Stand data in a way that resembles the Activity control. The Human Interface Guidelines have more information on how to use Activity rings. If your app displays Apple Weather data, it should follow the attribution requirements provided in the WeatherKit documentation.

`If your app displays Apple Weather data, it should follow the attribution requirements provided in the WeatherKit documentation.` を追記。

iOS 16 から提供される Apple の天気サービスは WeatherKit 経由で。

## 5.3.3 現金賭博に関連するアプリ内課金は不可。

> Apps may not use in-app purchase to purchase credit or currency for use in conjunction with real money gaming of any kind.

`and may not enable people to purchase lottery or raffle tickets or initiate fund transfers in the app.` を削除。

4.7.1 と同様の対応。
tWASを導入する時の覚えがき　Linux

#### 1-1.忘れやすいインストールの前提
- umaskが022
- rootのlimitsを8192に変更→
 addnodeするときのopenfile数の上限に引っかからないようにするため(ND版のみ対応が必要)
- IIM(IBM Installation Manager)が必要

詳細リンク
https://www.ibm.com/docs/ja/was-nd/9.0.5?topic=installation-preparing-linux-systems

#### 1-2.インストール資材
|コンポーネント名|説明|
|:--|:--|
|WebSphere Application Server|IBM製のアプリケーションサーバ本体のやつ、いろいろ種類がある|
|Web Server Plug-in for IBM WebSphere Application Server|WebサーバとAPサーバをつなぐためのコンポーネントIHS側で動作する|
|IBM HTTP Server for WebSphere Application Server|Webサーバ|
|IBM SDK, Java Technology Edition バージョン 8|WAS Plug-in IHSを動かすため/操作するために使用するJavaSDK|
|IBM® Installation Manager|上記コンポーネントをインストールするために必要|
|WebSphere Customization Toolbox|APサーバにIHSを登録するためのツール。http.confを編集してくれる|

詳細リンク
https://www.ibm.com/docs/ja/was-nd/9.0.5?topic=ppi-online-product-repositories-websphere-application-server-offerings

#### 1-3.インストール先のディレクトリ
空ディレクトリでないと導入できないので下記にファイルシステムを作っている場合は「lost+found」を消す必要がある
＊下記のpathはデフォルト
|コンポーネント名|Path|
|:--|:--|
|WebSphere Application Server|/opt/IBM/WebSphere/AppServer|
|Web Server Plug-in for IBM WebSphere Application Server|/opt/IBM/WebSphere/Plugins|
|IBM HTTP Server for WebSphere Application Server|/opt/IBM/HTTPServer|
|IBM® Installation Manager|/opt/IBM/IMShared|
|WebSphere Customization Toolbox|/opt/IBM/WebSphere/Toolbox|


#### 1-4.サイレントインストールで使うコマンド
~~~shell
◆下記のコマンドで<response_file_name>に操作内容を書き出す
./IBMIM -skipInstall <user_home>/var/temp/imRegistry -record <response_file_name>

◆下記のコマンドでxmlファイルを読み込んでインストール
./imcl -acceptLicense -input <response_file_name> -log <log_file_name>
~~~
詳細リンク
https://www.ibm.com/docs/ja/imdmcdhsa/11.5.0?topic=mode-creating-response-file-without-installing-product
https://www.ibm.com/docs/ja/installation-manager/1.8.5?topic=line-command-arguments-imcl-command


#### 1-5.導入後の確認
大体各コンポーネントのインストール先にbin/versionInfo.shが
存在するので実行すればインストールされた内容が確認できる
~~~shell
/opt/IBM/WebSphere/AppServer/bin/versionInfo.sh 
~~~

fixやifixを適用した後は下記オプションを付けることで確認できる
~~~shell
/opt/IBM/WebSphere/AppServer/bin/versionInfo.sh -fixpackDetail	
/opt/IBM/WebSphere/AppServer/bin/versionInfo.sh -ifixDetail	
~~~

詳細リンク
https://www.ibm.com/support/pages/versioninfo-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%AE%E8%A9%B3%E7%B4%B0%E6%83%85%E5%A0%B1%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
【Unity】アプリ実行中に使用できるキャプチャ取得＆読み込み方法

# はじめに
UnityEditorでスクリーンショットの撮影方法を調べるとUnityRecorderが沢山ヒットしますが、ビルド後にキャプチャすることはできないため、ビルド後も利用可能なスクリーンショットの取得方法を調べてみました。

https://docs.unity3d.com/Packages/com.unity.recorder@2.2/manual/index.html

# 2Dのキャプチャを取得してから読み込む方法
### UnityEngine標準機能でキャプチャ
UnityEnginに含まれる`ScreenCapture.CaptureScreenshot`を利用すると`Application.persistentDataPath`内にpng形式で生成される。

https://docs.unity3d.com/ja/current/ScriptReference/ScreenCapture.CaptureScreenshot.html

### pngファイルからTexture2Dに読み込む
https://forum.unity.com/threads/how-to-load-pngs-in-a-folder-in-the-built-project-files-into-an-array.1024162/

### Texture2DをSpriteに変換する

https://docs.unity3d.com/jp/current/ScriptReference/Sprite.Create.html


# 360°のキャプチャを取得してから読み込む方法
### 360°スクリーンショットの撮影（Unity標準機能では無理っぽい）
バイト配列まではコチラのリポジトリを利用する。
※Unity標準の機能では2Dしか撮影できない。

https://github.com/yasirkula/Unity360ScreenshotCapture

### バイト配列をTexture2Dに変換する

https://docs.unity3d.com/ja/2018.4/ScriptReference/ImageConversion.LoadImage.html

### Texture2DをSpriteに変換する

https://docs.unity3d.com/jp/current/ScriptReference/Sprite.Create.html
ActiveHashにて値のない選択肢を追加する

FakerBotを使ってActiveHashを含んだテストコードを作成しようとした際、問題が発生してしまったので、その問題と解決法を書いていきます。
## 問題点：FactoryBotがバリデーションにかかるidを選択してしまい、テストに失敗する
```ruby
class Prefecture < ActiveHash::Base
  self.data = [
    { id: 1, name: '---' },
    { id: 2, name: '北海道' },
    { id: 3, name: '青森県' },
```
```ruby
class Item < ApplicationRecord
  extend ActiveHash::Associations::ActiveRecordExtensions
  validates :prefecture_id, numericality: { other_than: 1 }
```
選択肢の'---'に該当するprefecture_id: 1を選択すると、バリデーションにかかるように設定してあります。

```ruby
FactoryBot.define do
  factory :item do
    prefecture { Prefecture.all.sample }
```
しかし上記のprefecture { Prefecture.all.sample }では、FactoryBotを生成時にバリデーションに設定したprefecture_id: 1も選択されてしまい、テストが失敗することがあるので、それを阻止したいところです。
## 解決策：collection_selectのオプションに値のない選択肢を追加する
```ruby
<%= f.collection_select(:prefecture_id, Prefecture.all, :id, :name, {include_blank: "---"}, {class:"select-box", id:"item-prefecture"}) %>
```
collection_selectの第5引数に`include_blank: "---"`を記述します。
このinclude_blankオプションを使うことにより、`値のない選択肢`を追加することができました。
これによりバリデーションに設定していた選択肢"---"は値を持たなくなったため、FactoryBot生成時に"---"が選択されることがなくなり問題が解決しました。
Androidのスマホでの不具合はメーカーのせいかも？

Androidのスマホは、メーカー毎にその機種に最適化された(ようするにハックされた)Androidをつんでいます。

そこで、メーカーの一部は ~~ベンチマークでいい点を取る~~ ユーザーエクスペリエンスを良くするために、電力消費を抑えるためのギミックをコードしています。

そのギミック(消費電力最適化、ストレージ最適化など)のせいで、意図しないアプリの強制終了が行われているようです。

https://qiita.com/RandomScientist/items/deaaadd29c9bd5844c99

`Samsung`や`One Plus`などを筆頭として、前に投稿したSpotifyなど、様々なアプリで意図しない挙動が報告されています。機種変えやアプリ開発をする際の一助となれば幸いです。

具体的なメーカー名や不具合の報告、その対処法は下記のサイトなどでチェックできます。

https://dontkillmyapp.com/

そのうち私生活が一段落したらSamsung Galaxy TabのOS換装記事を書きたいと思います。
OpenSearch（ElasticSearch）のIAMを利用した権限制御のややこしかったところ

VPC内のOpenSearch（ElasticSearch）のIAMを利用した権限制御がややこしかったです


## まとめ
ドメインアクセスポリシーは3パターンある（それぞれの設定のプリンシパルに対するアクションを理解すること）
ドメインでIAMを指定しなかった場合kibana側のロールマッピングで制御することでAPI操作が可能になる
ロールマッピングしていてもドメインアクセスポリシーで明示的に拒否してしまっていた場合（②）はAPI操作ができない
ロールマッピングしていなくてもドメインアクセスポリシーで明示的に許可されていれば（①にするか、③で指定）API操作ができる
## 前提知識

### ドメインアクセスポリシー３パターン

①きめ細かなアクセスコントロールのみを使用（設定後の状態）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/407141df-cc4a-9cd7-6d5b-75b8507b1f71.png)

②ドメインレベルのアクセスポリシーを設定しない（設定後の状態）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969819/54b5ff0b-08a1-aba4-c6ad-5c2378503467.png)

③ドメインレベルのアクセスポリシーの設定
↑自身で設定した任意のIAMARNまたはIpv4アドレスを設定する

### 疎通
①セキュリティグループでポート443,9200のインバウンドルールを設定しておきましょう

### 実施

```txt:実行コマンド
es-curl.sh -XPUT -H "Content-Type: applicattion/json" 'https://YOURDOMAIN.com/twitter/user/kimchy' -d '{ "name" : ""Shay Ban" }'
```
上記コマンドを実施するに当たり以下の参考リンクをもとに準備してください
https://chariosan.com/2021/09/26/curl_aws-sigv4_iamrole_access_opensearch/

[ここが一番言いたいこと]
まとめでも書いてあった通りロールマッピングあるいはIAMロールのいずれかを明示的に許可していればAPI操作はできます（成功）。
一方でいずれも設定していない。もしくは一方で拒否されていた場合API操作はできません（失敗）。
以下に上記実行コマンドによるAPI操作の成功パターン失敗パターンを示しておきます

```txt:成功パターン→kibanaのダッシュボードを見ればindexが追加されていることが確認できます
{"_index":"twitterss","_type":"user","_id":"kimchy","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}
```

```txt:失敗パターン
{"Message":"User: arn:aws:sts::------- is not authorized to perform: es:ESHttpPut with an explicit deny in a resource-based policy"}
```



curlを利用したAPI操作のための準備
https://chariosan.com/2021/09/26/curl_aws-sigv4_iamrole_access_opensearch/

シェルスクリプト作り方参考：https://shellscript.sunone.me/tutorial.html

ドキュメント：https://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/request-signing.html