OmniAICreator/Qiita-1.07M huggingface dataset:
Microsoft Edgeの動作がおかしい時やってみること

以下の方法を順番に試してみてください。Microsoft Edgeが起動しない場合は、4及び5を行ってみてください。

# 1. Microsoft Edgeが最新版であるか確認する
`「ヘルプとフィードバック」`から`「Microsoft Edgeについて」`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/50e28a9d-d5b0-baf1-c90a-14cdbea50ae7.png)
更新のチェックが始まり、最新の状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/6fa046d0-5477-60a1-ee7e-08390707fd5b.png)

# 2. キャッシュをクリアする
まず、Microsoft Edgeの設定で同期をオフにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/c748f5ef-043e-b54d-faa9-37b38843146e.png)
設定の`「プライバシー、検索、サービス」`から、`「閲覧データをクリア」`の`「クリアするデータの選択」`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/9c9cfc36-09ea-449e-7558-dc9522dd160e.png)
「すべての期間」の「閲覧の履歴」「ダウンロードの履歴」「Cookieおよびその他のサイトデータ」「キャッシュされた画像とファイル」にチェックを入れ、「今すぐクリア」を押します。
その後、PCを再起動して動作が正常に戻ったか確認します。

https://support.microsoft.com/ja-jp/microsoft-edge/microsoft-edge-%E3%81%AE%E9%96%B2%E8%A6%A7%E5%B1%A5%E6%AD%B4%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%BE%E3%81%9F%E3%81%AF%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B-00cf7943-a9e1-975a-a33d-ac10ce454ca4


# 3. 拡張機能を全てオフにする
`「拡張機能の管理」`を開き、全ての拡張機能をオフにして、Windowsを再起動します。再度Microsoft Edgeを起動し、動作に問題がないか確認します。
正常に動作するようでしたら、少しづつオンにして、動作の不安定の原因が拡張機能の問題であるか確認します。

# 4. Microsoft Edgeを修復する

Windowsの設定の`「インストールされているアプリ」`を開き、Microsoft Edgeの右横にある「．．．」をクリックして「変更」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/93112bcd-e499-0113-db28-96055ac29a2b.png)
Microsoft Edgeの修復を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/54716979-f811-fa9c-c9d1-4919a186eeb8.png)

# 5. User Dataを削除する
フォルダーオプションの`「隠しファイル、隠しフォルダー、および隠しドライブを表示する」`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/7f81b65e-0911-8f21-c2e1-efb2f6692b9c.png)
ユーザーフォルダの `"AppData" → "Local" → "Microsoft" → "Edge"` を開き、`"User Data"`のフォルダを削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/29026e61-9582-dc09-d370-0ab0708b2069.png)
PCを再起動し、Microsoft Edgeを起動して動作を確認します。
Audacity  で PC 音声を録音しようとするとエラー


　録音ボタンを押すと「録音デバイスを開く際にエラーが発生しました。」エラー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/2e4db79e-c125-b97e-c0c6-58bb2be01845.png)


# 環境

- MS-Windows 10 Pro 21H2
- Audacity 3.2.1
- Audacity のサウンドデバイス設定：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/0534682d-64ab-9312-4e25-1d75c485aa2a.png)
- MS-Windows のサウンドデバイス状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/6b30916c-918d-e2f5-937d-e858dfd66dce.png)



# プライバシーを設定する

Windowsの「設定」-「プライバシー」-「マイク」で「アプリがマイクにアクセスできるようにする」を「オン」に変更

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/271ed87f-d0ab-aa8e-f46d-b7d4bfc409b6.png)

これでエラーが解消

# PC 音声の録音設定

インターフェースのホストをWindows WASAPIにし、録音デバイスを　What U Hear にすると録音できた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/02dc0543-18db-8a5e-8da8-04f63e116df6.png)

ゲインが小さかったのを、Windows側のデバイスプロパティで調整。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/02852197-2a87-69a6-7683-fb59ad52ae10.png)

うまく録音できるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/6318aee7-0c2d-da93-ba08-f9f90dd77e31.png)
ウォーターフォールとアジャイルの違いを、恋物語で例えてみた

<h2>目次</h2>
<p>１．ウォーターフォール開発とは<br>
２．アジャイル開発とは<br>
３．A君の物語<br>
４．B君の物語<br>
５．まとめ<br>

<h2>１．ウォーターフォール開発とは</h2>
<p>ウォーターフォール開発は、上から下に各工程を後戻りしない前提で進めていく手法</p>

![スクリーンショット 2022-11-20 081742.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745710/3894f51b-8ffa-1a08-46cb-3c79ad450656.png)

<h2>２．アジャイル開発とは</h2>
<p>機能単位で小さくすばやく開発を繰り返していく手法。<br>
チームを組み、要件定義・設計・開発・テスト・リリースといった開発工程を一つひとつの小さな機能単位で繰り返し行い、文字通り素早く（Agile：アジャイル）、ユーザーを巻き込みつつ、機能をブラッシュアップしながらプロダクトを完成させていくという手順</p>

<h2>３．A君の物語</h2>
<p>
20xx年11月20日<br>
高校生のA君には、クリスマスを一緒に過ごしたいと思っているC子ちゃんがいます。​<br>
さて、A君はどうアプローチしますか？
<br>
<br><br>
A君はこう考えました。<br>
クリスマスまでに、自分磨きをしよう。<br>
C子ちゃんの元カレがムキムキマッチョだったから、<br>
きっとC子ちゃんはムキムキな男が好きなはずだ。<br><br>

クリスマスまでの一か月、​<br>A君は学校も休み、血のにじむような努力をする毎日を送りました。​<br>そして、自分磨きに成功しました。​<br>​<br>​


そして、12月24日​<br>A君はC子ちゃんに、​<br>​クリスマスを一緒に過ごさないか？​​と伝えました。​​<br>
その結果は、、、、​

<br>
ごめんなさい、​
私マッチョは好きじゃないの。​
それに、もうB君とクリスマスを過ごすことになってるの、​
ごめんなさい。​
<br><br><br>
A君が血のにじむような努力をしていた間にB君がC子ちゃんと良い感じになっていたのです。​
<br>
</p>
<h2>４．B君の物語</h2>
最初は、B君もC子ちゃんはマッチョが好きだと考えました。​


しかし、C子ちゃんと仲のいいD子に聞いてみたところ、C子ちゃんについて以下の情報を得ました。
・元カレのマッチョが筋トレばかりで構ってくれなかったこと
・食事にもストイックすぎて、一緒に美味しいごはんを食べられなかったこと

そこで、B君は考えました。
C子ちゃんは、お腹いっぱい美味しくごはんを食べたいという欲求があるのでは？

B君は、C子ちゃんを焼肉食べ放題に誘いました。

11/25​
B君とC子ちゃんは一緒に焼肉を食べに行きました。​
そこで、いろんな話をして、​
・食べることが大好き​
・焼肉も好きだけど、それ以上にパスタが好き​
・短髪が好き​
という情報を得ました。​


11/26
B君は、髪の毛を短く切り、C子ちゃんに美味しいパスタを食べに行こうと誘いました。

​12/15​
B君はC子ちゃんとパスタを食べに行きました。​
そこで、いろんな話をして、​
・クリスマスは空いている​
・イルミネーションには丸っきり興味がない​
・ユニバに行きたい​
・ピチピチ系の服よりダボっとした服が好き​
という情報を得ました。​

12/25​
B君とC子ちゃんはミニオンコーデで一緒にユニバに行き、​
楽しいクリスマスを過ごし、めでたくお付き合いしましたとさ。​


めでたし、めでたし。​

<h2>５．まとめ</h2>
<p>・A君のやり方はウオーターフォール。
​<br>
要件：12/25までにマッチョになれば、C子ちゃんの彼氏になれる​<br>
開発：ひたすら筋トレ​​<br>
運用：なし​​<br>
リリース：12/24に一回のみ​​<br>
フィードバック：振られた一回のみ​​<br></p>



<p>・B君のやり方はアジャイル。<br>
要件：12/25までにC子ちゃんの好きなタイプになれば、彼氏になれる​​<br>
開発：散髪、ミニオンコーデの購入​​<br>
運用：焼肉デート、パスタデート、ユニバデート​<br>
リリース：11/25,　12/15,　12/25の三回​​<br>
フィードバック：3回＋カップルになった今後も継続的に​​<br></p>
WEB3.0・DAOで、中央集権的から脱却可能な組織になりえるのか？

![24797989_m.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/a7dce39f-ab1d-202b-ccb6-796c27f3c486.jpeg)

皆さん大好きWeb3.0の話です。
元ZOZO創業者の前澤さんが立ち上げたDAOの会社である、MZDAOが10万人を超えたとリリースがあったのが7月末です。今では50万とかいるのでしょうか？年内に100万人目指すとの事です。
月額費500円なので、10万人でも毎月5000万円で年間6億円のインカムがある組織です。
すごいですね。ワクワクしますね。沢山の人からどうなんだろう？と聞かれます。

# まずDAOとは
分散化型自立組織で、簡単に言えば、完全な民主主義組織です。中央管理者が不在で毎度全員で多数決をとって組織のアクションを決定していきます。多数決は、保有しているトークンを使って投票を行うので、組織にとって一番利害が強い人の意見が強いです。これは、トークンを多数保有している人は、組織が良い方に行けばトークンの価値が保たれるので正しいジャッジをするというゲーム理論に導かれる想定となってます。
通常の組織であれば、マネージャーがいたりと階層構造になってます。日本国家でいえば、国会議員（政党）を国民で選んで、国会議員（政党）で代表を選んで総理大臣が決定します。更に総理大臣が各大臣を決定します。
色々な思惑が絡みそうですね。
それに対してDAOは、完全にフラット組織、且つ、都度、投票するのですごく公平な組織に感じます。
ブロックチェーンは、この組織を作る上で最適な完璧なテクノロジーです。

# googleは、マネージャーを廃止して失敗した
googleは過去にマネージャーを廃止した事があります。googleの様な先進的な企業では、完全フラットな組織であるべきだ、それが理想だとなったのだと思いますが、組織をフラット化した後に、エンジニアにヒヤリングしたら、マネージャーが必要という回答が得られたみたいです。
フラットになると、決定権を持つ人が居なくなり、話し合いで物事が決まります。これは一見理想的に見えますが、いつまで立っても決まらない事があります。又、時に人は誰か権威のある人の決めて欲しいと思います。何が正しいか分からないためです。

# 産業を作る出す時は、中央集権が必要
昨今、日本の産業は衰退したとよく言われてます。確かにスマートフォンは海外製ばかり、TVも海外製ばかり、車はテスラ等の電気自動車が主流になりそうだし、日本製はドンドン弱くなっている様に感じます。
これに対して、2022年11月10日、トヨタ自動車やソニーグループ、NTTなどの国内大手企業8社が、次世代半導体の国産化をめざす新会社に、共同で出資。これに政府も補助金出すという形になってます。
日本国家をあげての半導体産業の強化です。
過去にも強くなった産業の影には、いつも国家の下支えがあります。フラットでは無いかもしれませんが、こうする事で産業が育つためです。

# DAOの様な組織はありえるのか？
先述の通りDAOには、様々な難しさがあります。フラットな投票でも間違いを起こすこともあります。ガーシーの様な国会議員が誕生したのも投票によるポピュリズムの欠点です。
不確実性の高い物事を決める様な組織にはDAOは、難しいと思います。しかし、会社の立上げや事業立上げには向かなさそうですが、特定部分の運用フェースには向きそうです。
例えば、全員でお金を出し合って、何起きた時に分配する様な保険制度の様な仕組みは、相性が良さそうです。
DAOに関しては、思想も絡んだ難しい考え方だと僕は認識してます。難しいとはいえ、理想の組織に向けた創意工夫は、CTOや経営者の立場ではとても重要な事ですので今後も情報収集していきたいと思います。
[docker]lease: input/output error の解決例

## 何をしたら起こった？
これまで動いていた(docker-composeで構成していた)Dockerfileの１つを編集して、`docker-compose build`したら、正しく動く箇所（触っていない箇所）で止まり、
```
lease: input/output error
```
というエラーを吐いた。

Docker Desktopのバージョンは3.6.0だった。

## 解決方法
筆者の場合、依存していたdocker imageをすべて削除して`docker-compose build`したら正常に動いた。

※ちなみに、理由は不明だが、`docker-compose build --no-cache`はうまく行かなかったので削除することとした。

## 考察
一度作ったコンテナ同士の依存が触っていないイメージに残っていて、その内容と合致しなかったからエラーを吐いたのではないかと筆者は予想している。
JavaScriptでクラスなのかを判定してメンバを列挙する

# 概要

Javascriptでクラスを判定してメンバを列挙する必要が出てきたのでやり方を探してみた。
Node.js・Chromeで確認
JavaScriptのクラス関係の命名がよくわからなかったのでJava基準で

# クラスの判別

クラス・インスタンスを普通にtypeofに通すとクラスは`function`、インスタンスは`object`と返ります。JavaScriptのクラスが単なる糖衣構文に過ぎないことがよくわかります。

```javascript
class TestClass {
    static classMethodTest(){}
    static classFieldTest;
    static arguments;
    instanceMethodTest(){}
    instanceFieldTest;
}

let TestObject = {
    constructor: ''
}

let TestFunction = function() {
}

let TestInstance = new TestClass();

console.log(typeof TestClass);       // "function"

console.log(typeof TestInstance);    // "object"
```

クラスであることを判定するにはtoString()でコードを取得して先頭がclassであるかどうかを確認するのが確実なんじゃないかと思います。
一応クラスにはfunctionオブジェクトにあるはずの`argument`プロパティがないのですが、自分でargumentクラスフィールドを追加したら判別のしようがなくなるので・・・

```javascript
console.log(TestClass.toString().startsWith('class'));   //true
```

インスタンスの場合は`constructor`プロパティでクラスを取得できるはずなのでそこから`toString()`でクラスかどうかを判別します。

```javascript
console.log(TestInstance.constructor.toString().startsWith('class'));    //true
```


# 基底クラスの取得

`Object.getPrototypeOf(TestClass);`とすると基底クラスを取得できます。

ルートクラスにあたるObjectクラス?に行き当たるとtoStringの結果が`function () { [native code] }`になるので基底クラスを辿っていくのは簡単です。

```javascript
thisobj = TestClass;
while (true) {
    classname = thisobj.name;
    console.log(classname);
    thisobj = Object.getPrototypeOf(thisobj);
    if (!thisobj.toString().startsWith('class')) break;
}
```


# メンバの列挙

クラスに定義したメンバはなぜか`Object.keys()`では取得できません、代わりに`Object.getOwnPropertyNames()`を使います。

JavaScriptには列挙可能なプロパティと列挙不可能なプロパティってのがあるらしくObject.Keys()で取得できるのは前者だけだかららしい。

```javascript
//(1) ['constructor']
console.log(Object.getOwnPropertyNames(TestObject));

//(5) ['length', 'name', 'arguments', 'caller', 'prototype']
console.log(Object.getOwnPropertyNames(TestFunction));

//(6) ['length', 'name', 'prototype', 'classMethodTest', 'classFieldTest', 'arguments']
console.log(Object.getOwnPropertyNames(TestClass));

//(2) ['constructor', 'instanceMethodTest']
console.log(Object.getOwnPropertyNames(TestClass.prototype));

//(1) ['instanceFieldTest']
console.log(Object.getOwnPropertyNames(TestInstance));
```

クラスメソッド・フィールドの列挙はクラスから、インスタンスメソッドの列挙はクラスのprototypeプロパティから、インスタンスフィールドの列挙はインスタンスからしかできないらしい。
「Azure 定番システム設計・実装・運用ガイド」という実用本のメモ

[Azure定番システム設計・実装・運用ガイド 改訂新版 (Amazon)](https://www.amazon.co.jp/dp/4296080121?language=ja_JP) という実用本（というか、実戦形式の良本）に関する読書記録です。太字が肝。

![](https://m.media-amazon.com/images/I/41Fiiyvx4VL._SX387_BO1,204,203,200_.jpg)

- オンプレEコマースサイトを Azure に移行する
- イントラネット環境を Azure と接続しイントラネットを延伸する

というシナリオに基づいて書かれています。


## 要点
- [[公式リンク集] 2018/9/6 発売 Azure定番システム設計・実装・運用ガイド | Microsoft Learn](https://learn.microsoft.com/ja-jp/archive/blogs/jpaztech/azure_book_links)
- **Azureの基本と特徴**
    - [Azure リージョンの決定ガイド - Cloud Adoption Framework | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions)
- **リフト＆シフトによる既存環境の移行**
   	- [Azure Storage Explorer – cloud storage management | Microsoft Azure](https://azure.microsoft.com/en-us/products/storage/storage-explorer/#features)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/a7ef3d32-3ddc-8573-99f0-17b44f6d8b2d.png)
- **データベースサービスを使う**
    - SQL Server から PaaSサービスへ
    - [Azure SQL のドキュメント - Azure SQL | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/azure-sql/?view=azuresql)
- **App Serviceを使う**
    - SLA: [サービス レベル契約 - ホーム | Microsoft Azure](https://azure.microsoft.com/ja-jp/support/legal/sla/)
    - Kudu
        - [ローカル Git リポジトリからデプロイする - Azure App Service | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/app-service/deploy-local-git?tabs=cli)]
        - [projectkudu/kudu: Kudu is the engine behind git/hg deployments, WebJobs, and various other features in Azure Web Sites. It can also run outside of Azure.](https://github.com/projectkudu/kudu)
    - [Azure Cache for Redis の構成方法 | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/azure-cache-for-redis/cache-configure)
- 負荷分散と地理冗長
    - [Azure Traffic Manager | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/traffic-manager/traffic-manager-overview)
- イントラネットをAzureに延伸する
    - [Azure Virtual Network のドキュメント - チュートリアル、クイックスタート、API リファレンス | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/virtual-network/)
- **Azureサポートチームからのベストプラクティス紹介**
    - [日本マイクロソフト サポート情報](https://cssjpn.github.io/)
	- [クラウド監視戦略 - Cloud Adoption Framework | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/strategy/monitoring-strategy#high-level-modeling)  （クラウドモデル）
![](https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/strategy/media/monitoring-strategy/cloud-models.png)
	- [Azure でクラウドのデータをセキュリティ保護するラーニング パス - Training | Microsoft Learn](https://learn.microsoft.com/ja-jp/training/paths/secure-your-cloud-data/)
		- Azure 開発チーム公式ブログ: https://azure.microsoft.com/en-us/blog/

以上です～
「Create Link」Markdown の記事中にWebページのリンクを貼るのに良いGoogle拡張機能


## Google で「chrome create link」と検索するとでてきます。

[Create Link \- Chrome ウェブストア](https://chrome.google.com/webstore/detail/create-link/gcmghdmnkfdbncmnmlkkglmnnhagajbm?hl=ja)

ChromeまたはEdgeに登録すると
![](https://storage.googleapis.com/zenn-user-upload/z4q98jx2xznyhsoqs9968ws5p17i)
のようなアイコンが追加されます。

クリックすると
![](https://storage.googleapis.com/zenn-user-upload/u1n97gbnv9kr7kp9e8u6fsk020l4)
のように表示されるのでタイトルとURLをコピーしいたいWebページを開いた状態で「markdown」を選べば、ページのタイトルとURLをマークダウンのリンク形式に加工してクリップボードに入れてくれます。後は、Zenn や Qiita や GitHub の編集画面に張り付けるだけ。

## Chrome 用ですが、Chromium版Edgeでも使えます。

お試しあれ！

## こちらも見てください。

https://dev.classmethod.jp/articles/recommend-create-link/
クラウドとオンプレミスの比較

# はじめに

インフラってなーに？の段階で入社した新卒が自学のために書きます。誰かの参考になれば幸いです。
間違いなどございましたら、ご指摘ください。


# cloudってなーに？

>「ユーザーがインフラ※やソフトウェアを持たなくても、インターネットを通じて、サービスを必要な時に必要な分だけ利用する考え方」のことです。

引用:https://altus.gmocloud.com/suggest/cloud/

要は
~~~
自分が持ってないものを貸してもらう代わりに、お金を払う！
~~~
ってこと
ちなみによく比較されるオンプレミスの場合は
~~~
持ってないものがあったらお店で買って用意する！
~~~
といった感じ

# 身近なクラウドサービス
私たちの生活にはすでに、クラウド技術が活用されています。身近な例だと、写真を保存できたり、ゲームのサーバーがクラウド上にたっていたりとさまざま。
また、現在クラウド導入が進んでいるものには
- 電子メールの送受信
- 事務所理系
- サーバー
- ストレージ
- 給料計算

などがあがります。
コロナの影響もあり、在宅勤務が増えた昨今ではクラウドのニーズが急増しています。


# cloudを使うメリット
クラウドとオンプレミスを比較するとこんなイメージ
||クラウド| オンプレミス |
|:-----------|------------:|:------------:|
|料金|利用した分だけ|都度購入|
|準備期間|すぐ準備できる|時間がかかる|
|拡張性|簡単|ハードル高め|
|カスタマイズ性|限度あり|自由|

それぞれ詳しくみていきます。

- 料金


オンプレミスの場合だと使うためには買わなきゃいけないからそれなりのお金がかかります。
使っていても使わないでいても、最初に払うお金は変わらないから割高。

クラウドの場合だと使った分だけの支払いをすればOK
たとえ借りっぱなしでも、実際に使用した分のみの料金しかかからないからコスパがいい


一度しか使わなかったりするものを毎回購入していたら大変ですよね、、、

- 準備期間

オンプレミスの場合だと　
何が必要か考える→注文→届く→設置→環境構築→etc...
使いたいと思ったタイミングから実際に使えるまでに数ヶ月単位で時間がかかることも、、、

クラウドの場合だとほんとにびっくりするぐらい早く作れます。
どれくらい早いかと言うとほんとにすごい早い。


準備は早めに終わらせたほうがいいですよね！

- 拡張性

オンプレミスの場合だともし追加で必要になってもまた準備するのに時間がかかるし、いらなくなってもそのままにするしかないですよね

クラウドの場合使い始めてからでも、簡単に増やしたり減らしたりできます。
これなら初期費用を抑えて、あとから必要な分を増やすとかも簡単にできますよね！


- カスタマイズ性

オンプレミスの場合だと自分が買った物だから自由にカスタムできます。
シールを貼るのも水をかけるのもあなた次第

クラウドの場合だと使うにあたって全部思い通りになるわけじゃない。

借りてるもの勝手にデコったら怒られちゃうよね。

# cloudを選ぶ基準
クラウドとオンプレミス、自分が重要視する項目がある方を選ぼう！


- コスパ良く設計したい！
- 早く作りたい！
- 使う時と使わない時の波がはげしい

　→cloudがおすすめ

- 自由にカスタマイズしたい！
- 安定して使う用事がある！
- 時間は余裕がある！

→オンプレミスがおすすめ

# 最後に
以上で終わりです！
自分がわからなかった言葉を使わないように書いたので、知識のある人からは逆に見づらいかもしれません、、、
同期が頑張ってかいた素晴らしい記事もあるので、ぜひご覧ください！！

# 参考サイト
https://altus.gmocloud.com/suggest/cloud/

https://biz.kddi.com/column/d0251/it_environment_issues/

https://www.stock-app.info/media/?p=15203

https://www.kddimatomete.com/magazine/221005140511/
Oculus Interaction SDKを使ってみました ～ Poke編 ～

前回「 [Oculus Interaction SDKを使ってみました](https://qiita.com/b0bmat0ca/items/d9da45209939cffcf361)」では、Oculus Interaction SDKを利用して、物を掴めるようにするところまでまとめました。

今回は、Poke編ということで、ボタン押すなどに利用できるインタラクションの設定についてまとめます。

:::note warn
前回の設定が行われている前提の手順となります
:::

# シーンの準備
## つつく側
### 手の設定
1. OVRHandsのLeftHand、RightHandの配下にあるHandInteractorsLeft、HandInteractorsRightにHandPokeInteractorを追加します
![1-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/039af873-9595-a343-9130-514e0acb0a6b.png)
1. OVRHandsのLeftHand、RightHandの配下にあるHandPokeInteractorにそれぞれ、LeftHand、RightHandを設定します
![2-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/d2ca1a53-976b-44f7-57f8-4169eb20162a.png)
1. OVRHandsのLeftHand、RightHandの配下にあるHandInteractorsLeft、HandInteractorsRightにそれぞれのHandPokeInteractorを設定します
![3-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/81c0c519-328c-a3e5-dbe1-300807f4814b.png)

### コントローラーの設定
1. OVRControllersのLeftController、RightControllerの配下にあるControllerInteractorsにControllerPokeInteractorを追加します
![4-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/237be872-741e-2092-c6a9-9474cd613472.png)
OVRControllersのLeftController、RightControllerの配下にあるControllerPokeInteractorにそれぞれ、LeftController、RightControllerを設定します
![5-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/c973778c-e26d-80d4-2b96-f2520853db83.png)
1. OVRControllersのLeftController、RightControllerの配下にあるControllerInteractorsにそれぞれのControllerPokeInteractorを設定します
![6-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/4a156652-8b5b-03a4-0cd7-1b9f05eb1cd2.png)

## つつかれる側
1. 空のオブジェクトを作成し、その下にボタンの土台としてCubeを追加します
![7-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/5f0ad909-c9dd-bf5a-b470-9d78f4c2232f.png)
1. PokeInteractableを空のオブジェクトの下に追加します
![8-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/2620748d-3d34-f498-ccd3-cf3396dae45c.png)
1. PokeInteractableのTransformを調整し、ボタンのように押せる準備をします![9-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/943b76a7-4bf8-ae68-c0c6-609647cb40dc.png)
1. ボタンとしてSphereをPokeInteractable配下のButtonVisualに追加し、大きさ、位置を調整します
![10-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/5eddc75b-dd11-3c10-62ca-109cb27df8f3.png)
![11-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/686161fd-8d4b-906a-7619-919baafe5817.png)
1. これで、ボタンを押すインタラクションを行うことができます
![12-poke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729904/4009c76e-0e12-3150-1960-79c76ab03707.png)
2022/11/21主にITとかセキュリティの記事

謎のハッカー集団が保険会社の個人情報を人質に身代金を要求(11/19)
https://news.nicovideo.jp/watch/nw11716529

突如大注目のWeb3.0、メタバースと市場を奪い合うか？―中国メディア(11/19)
https://www.recordchina.co.jp/b904680-s6-c20-d0190.html

FTXが破産法申請、「暗号資産の冬」は2023年末まで長引く【11/12～11/18のトップニュース】(11/19)
https://www.coindeskjapan.com/165977/

FBI長官「中国が盗んだ米国のデータ、他のすべての国の合計よりも多い」―仏メディア(11/19)
https://www.recordchina.co.jp/b904609-s25-c100-d0192.html

金融庁が求めるものは？ 自社で進める「資産、アクセス、ログ」管理の勘所(11/18)
https://news.yahoo.co.jp/articles/4d9e2db995de4668545815ff9e1fbe924bced0a6

Web3.0（Web3）(11/18)
https://eset-info.canon-its.jp/malware_info/term/detail/00182.html

インパーバ、小売業界のセキュリティトレンドを解説--“転売ボット”に注意(11/18)
https://japan.zdnet.com/article/35196293/

FacebookやTwitterを代替する存在となるか？web3のソーシャルメディア注目株5選(11/19)
https://news.yahoo.co.jp/articles/266e07f9c6282942d2560c1428742a423f8790f1
開発環境で開発したWordPressテーマをGitHubからPullして本番環境にリリース :)

前回の記事では、開発したものをGitにどんどんコミット、GitHubのリモートリポジトリにプッシュしておりました。

今日は、ついにテーマが完成したので、リモートリポジトリから本番サーバにPullして、無事本番サーバへのリリースを終えました。初めて自分で自分の開発環境で開発したものをリリースして嬉しいホクホクの気持ちを残すために書きます:relaxed:　あ、ちがう、、、。作業の記録のために！書きます。

# 1．本番サーバにてgit init
git initし、.gitファイルを作成しました。

ここで迷ったのが、git initする場所。
ちょっとよく仕組みが分かっていないままで申し訳ない（誰に？自分に）のですが、pullする側と、pushする側、は、同じ場所に.gitファイルがあったほうがいいかなと思ったので、開発環境で作った場所と同じ場所に.gitファイルをつくりました。

# 2. 本番サーバにてgitの設定
初期設定です（そのサーバでもともとしてあればしなくてOKなはず）
~~~
git config --global user.name "your_user_name"
git config --global user.email your_email
~~~

# 3. リモートリポジトリの追加
pullしてきたいリモートリポジトリのURLを追加
~~~
git remote add origin your_repos_url
~~~

# 4. Pull!!
順調すぎる。こんなあっさりリリースできるのか？と思いつつ、とりあえずPullしてみる。
~~~
git pull origin master
~~~

...エラーが出た。（よかった。）
~~~
fatal: cannot create directory at 'wp-content/themes/myblog': Permission denied
~~~

パーミッションがないらしかったので、ls -lして権限を調べてみたら、所有者・所有グループさんともにapacheさんとのこと。誰やねん。わしはec2-userさんやぞ！
~~~
[~~~]$ ls -l wp-content
total 4
drwxr-sr-x 4 apache apache  86 Oct 23 22:26 plugins
drwxr-sr-x 5 apache apache  85 Nov 20 16:43 themes
drwxrwxr-x 2 apache apache   6 Nov 16 05:46 upgrade
drwxr-sr-x 3 apache apache  18 Oct 23 21:46 uploads
~~~

誰やねん、とグーグル先生に伺ったところ、わたしがapacheさんになれる方法を教えてくれたので、なった。

https://gist.github.com/lostandfound/4bee82837886902e1b14bbf548fe5d1e

上記設定後、再度pullしたら、うまくいった:relaxed:　完了！

おめでとう！
【JavaScript】Day.jsでタイムゾーンを変更しつつフォーマットする

## 概要
Day.jsではparseやformatの際に、日付のタイムゾーンを設定することができます。
今回はUTCのタイムゾーンで受け取った日付の文字列を、日本時間に変換しつつformatする、といった場合にどうするかというののメモ書きです。

## 対応方針
まず、parse時にドキュメントの[Parsing in Zone](https://day.js.org/docs/en/timezone/parsing-in-zone)にある通り、`dayjs.tz`の関数を呼び出してUTCのタイムゾーン指定でparseします。
parse後のオブジェクトをドキュメントの[Time Zone](https://day.js.org/docs/en/timezone/timezone)にある通り、もう一度`dayjs.tz`関数を呼び出して、日本時間に変換します。


## 実装サンプル
```js
function getDayJsObj() {
  const dayjs = require("dayjs");
  const utc = require("dayjs/plugin/utc");
  const timezone = require("dayjs/plugin/timezone");
  dayjs.extend(utc);
  dayjs.extend(timezone);
  return dayjs;
}

export function getDisplayDateMinuteUnit(dateStr) {
  const dayjs = getDayJsObj();
  // UTCとして日付文字列を読み込み
  const dayjsTz = dayjs.tz(dateStr, "YYYY-MM-DD HH:mm:ss", "UTC");
  // 日本時間で分まで出力
  return dayjsTz.tz("Asia/Tokyo").format("YYYY-MM-DD HH:mm");
}
```

## その他参考
[Day.jsの.tz.setDefault()が動かないと思ったけど使い方が間違ってただけだった](https://dev.classmethod.jp/articles/day-js-timezone-set-default/)
[Day.jsのフォーマット指定一覧（ドキュメント）](https://day.js.org/docs/en/display/format)
juliaのスパコン等での環境構築の注意点

超個人的な備忘録。
スパコン等(といっても千差万別なのでなんともですが)のrootがない環境でjuliaのreplとかを起動すると
```
ERROR: IOError: mkdir("XXX/.julia"; mode=0o777): permission denied (EACCES)
```
と出る場合があります。このときの`XXX`は`$HOME`であり、ここに権限がない状態で発生すると思われます。
この状態だとパッケージのインストールも出来ません。
どうやらjuliaではreplの立ち上げやパッケージインストール時に(デフォルトでは)`$HOME/.julia`を参照するらしく、これがないと勝手に作ろうとするようです。
これがおそらくエラーの正体。

最も(雑だが)単純な回避方法は`export HOME=YYY`みたい自分の権限のある場所に変えてしまうことです(ただし、その結果`$HOME`を参照している他のソフトに影響を与える可能性があります)。
**もう少し「お行儀のよい」方法はhttps://docs.julialang.org/en/v1/manual/environment-variables/ を参考にjulia関係の環境変数を書き換えることです。**
例えば
```
export JULIA_DEPOT_PATH=YYY
```
と指定すればこちらの環境では動きました(https://stackoverflow.com/questions/67794194/permissions-for-installing-packages-on-julia-in-slurm-cluster も見てみてください)。


replを起動するだけなら`julia --startup-file=no --history-file=no`とすればエラーは出ません(がパッケージのインストールは依然として出来ません)。
とくにスパコン等ではログイン時の環境と計算の環境が異なる場合があることを忘れているとハマります(恥ずかしながら実体験)......
**もちろん個人の環境に大きく依存する話なので、上記が当てはまらないケースもあるでしょうが、参考までに。**
Python学習#1

Pythonで学んだことをアウトプットすることにしました。
まずは1日目。

環境は
- VS code
- Python3.9.12
- M1 Mac たまにWindows

だいたいこんな感じです…
学習は基本的にインターネット、書籍の独学です。
今日は辞書型、for文のzip,enumerate,tqdmについて学びました。
基本的なことですがしっかりと理解をしておきたいので復習です。
調べたり解説を見たりしているとまだまだ自分のものにないと実感、、、

# 辞書から
```Python
x = {'apple':120,'orange':200,'painapple':500}
apple_price = x[apple]
```
辞書の値を取り出せる
```Python
x = {'apple':120,'orange':200,'painapple':500}
x[apple] = 150
```
keyのappleに対しての値の書き換え
```Python
x = {'apple':120,'orange':200,'painapple':500}
y = {'tomato':170,'poteto':190}
x.update(y)
```
xとyの辞書を結合できる
```Python
x = {'apple':120,'orange':200,'painapple':500}
y = {'tomato':170,'poteto':190}
z = x | y
```
zにxとyを結合させたものを代入

# for関連

## zip関数
```Python
x = [1,2,3]
y = [4,5,6]
for i,n in zip(x,y):
    print(i,n)
```
複数のリストの要素を順番に取り出せる。またリストの要素数が違う時は少ない方に合わせて終了される。

## enumerate関数
```Python
name = ['佐藤','鈴木','高橋']
for i,n in enumerate(name,start=1):
    print(f'{i}位{n}さん')
```
iには０から始まるカウント数が代入されている。
二つ目の引数でstart=1を渡すと1から始まる。
nにはnameリストの要素が一つずつ代入される。

## tqdm関数
この関数は組み込み関数ではないのであらかじめpip install tqdmでインストールする必要がある。
```Python
from tqdm import tqdm
for i in tqdm(range(10**9)):
        pass
```
for文で莫大な処理をする時に進捗状況を可視化してくれる。

# 補足
importできないエラーの原因はインストールされていない、スペルミス、あとインタープリタが未選択の場合である。
色々調べてみたがインタープリタが未選択でエラーになっている可能性が記述された記事は無かったので一応。

以上今日はこんな感じお疲れ様でした:sunny:
【AWS】SOAに合格しました

先日、AWS SysOps アドミニストレータ(SOA)に3回目の受験で合格しました。
備忘のために記事を投稿します。

# SOA試験について
https://aws.amazon.com/jp/certification/certified-sysops-admin-associate/

[試験ガイド](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-sysops-associate/AWS-Certified-SysOps-Administrator-Associate_Exam-Guide_C02.pdf)

選択問題に加えて、ラボ試験と呼ばれるAWSコンソールを使った実技問題があります。

# AWS関連の所有資格
* ソリューションアーキテクトアソシエイト(SAA)
  * 2020/9 合格
* ソリューションアーキテクトプロフェッショナル(SAP)
  * 2022/1 合格
* デベロッパーアソシエイト(DVA)
  * 2022/8 合格

# 学習期間
2カ月くらいです。(平日30分～1時間、休日2～3時間くらい)

# 使用した教材
①テキスト
[【AWS認定資格試験テキスト AWS認定SysOpsアドミニストレーター - アソシエイト AWS認定資格試験テキスト](https://www.sbcr.jp/product/4815609085/)
内容が分かりやすいので、試験範囲の内容を体系的に理解するのに役立ちました。

②問題集
[【SOA-C02版】AWS 認定SysOpsアドミニストレーター アソシエイト模擬試験問題集（全4回分294問）| Udemy](https://www.udemy.com/course/draft/2897780/)
ラボ試験の問題が選択形式で解けるのでラボ試験対策としても役立ちました。
本番試験よりも難易度が高めな印象でした。

[TechStock | AWS WEB問題集で学習しよう](https://techstock.jp/)
本番の試験問題にかなり近いと思います。

③資料
[AWS Black Belt](https://aws.amazon.com/jp/events/aws-event-resource/archive/?cards.sort-by=item.additionalFields.SortDate&cards.sort-order=desc&awsf.tech-category=*all)
各サービスが具体的にどう使われるのかを理解するのに役立ちました。

④ラボ試験対策
[【SAA-C03版】これだけでOK！ AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座 | Udemy](https://www.udemy.com/course/aws-associate/)
ラボ試験の対策としてハンズオン学習に使用しました。

# 学習方法
* 1回目
  * ①のテキストを読む、②のUdemy問題集を解く、を2周しました。
* 2回目
  * 1回目の学習方法に加えて、ラボ試験対策として④に取り組みました。
* 3回目
  * 2回目までとは学習方法を変えて、③のBlack Beltの資料を読み込んだ後に②のAWS WEB問題集で学習しよう、を3周しました。

# 所感
2回落ちた原因としては、各サービスの理解度不足だと思います。
サービスの細かい内容を問われる問題が多く、概要だけざっくり覚えているだけだと合格点に届かないです。
個人的には、SOA>SAA>DVAの順の難易度でした。

# さいごに
1回目はともかく2回目で合格できなかったのは個人的に反省しています。
とりあえず目標だったアソシエイト3冠は達成できたので、次はDOP取得を目指したいと思います。
最後までお読みいただき、ありがとうございました。
redashをdockerだけで起動するメモ

2022/11/21現在

redash、みんな導入に苦労してる気配があるけど主に、
- v8.0.0からdocker-compose.ymlが更新されてない（そのままじゃ動かない
- Dockerでの初期設定が玄人向けの仕様になってて難しい
- npmをdockerの外でやらないといけない（？）
- docker-compose upでやってもgithubからcloneしたやつは動かない
みたいな難しさがあるからな気がする

2021年にdatabricksに買収されてSaaSがとまってるけど一応Githubは動いてるので最新版は存在してる。


dockerのイメージファイルからやってもいいはずなんだけど、どうせ適当にやったら動かなかったのでgithubのコードから動かすみんなの方法をトレースしつつ、npmはdocker内でって言うのをやったメモ。

基本は以下のメモに沿ってるが

https://hotatekun.hatenablog.com/entry/2021/06/16/222241

またちょっと違うのでメモ


下記のリポジトリをcloneする。は同じ。
```git clone https://github.com/getredash/redash.git```

DOCKERFILEをいじっていく。
今のGithubのmasterだと実はnodejsを入れてビルドするところまでやってるんだが、なんか自分の環境ではうまくいかなかったので書き換えていく。
最初の行からPythonがでてくるとこまでとりあえずコメントアウト

RUN apt-get update && \のあとに
```
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt -y install nodejs
```
で14系のnodejsをPythonの中にいれる

WORKDIR /app　のあとに
```
COPY --chown=redash package.json yarn.lock .yarnrc /app/
COPY --chown=redash viz-lib /app/viz-lib

RUN npm install --global yarn@1.22.10
```
をいれる。これでnpmとyarnがはいった。
上記記事の時はyarnじゃないのよね…。


で、最後の方にある
```# COPY --from=frontend-builder --chown=redash /frontend/client/dist /app/client/dist```
をコメントアウト。

このままビルドしたらいいはずなんだけど自分のテクではうまくできなかった。

たぶんentrypointをいじるべきな気がしてる。。。


いったん
```
docker-comose build
```
でビルドだけする。で、
```
docker-compose run --rm server create_db
```
でデータベースを作成

んでもって
```
docker-compose up -d
```
で立ち上げ。
いちおうこの時点で http://localhost:5000 いけば動いてはいるが表示がくずれてて登録とかしてもindexがないエラーを吐く

redash_sever_1のコンテナの中に入って cd /app でappがあるフォルダにいってここでyarn buildかける
```
yarn --frozen-lockfile
yarn build
```

とりあえずこれで自分はうごいた。

docker-compose のポスグレのところのvolumeを永続化したほうがいいとか、本番環境用の設定とかその辺はまだわかってない。
自分の中のQiita記事の立ち位置(?)


## 記事を執筆するきっかけ
先日ある企業のエンジニアの方とカジュアル面談をしました。
その中で、記事書くことってハードルちょっと高いですよね〜みたいに話した時に、アドバイスをもらったので、自分も記事を書くことにチャレンジしてみようと思いました。

###  ルール
#### 1. あくまで自分のメモとして考える
公開するので、いろんな人に見られる可能性があるがそこまで深く考えず、あくまで自分のメモ、として考えておく。
また、自分で見やすいように書いておけば、大抵他人が見ても見やすく感じるはず。
#### 2. 目指す投稿数は月5本
自分の性格上、続けるためには、縛りは極力緩く、労力を少なくすることが必要なので、大体月に5本程度投稿できたら万々歳くらいに考えておく。
習慣になってしまえば勝ち。続けていきたい、、、
#### 3. 一日に一本まで
色々必要なことを調べてまとめる上で、たくさん記事が書けたとき(ノってる時)は、一旦下書きに置いておく。
月末に「今月一本しか投稿してない、、、！」ってなった時に、下書きに記事が残っていれば、それ投稿すればいい。

どうやったら続くか、ということを最優先に考えていきたい。
【HTTPS】サーバ証明書の作成～検証について整理してみた

## はじめに
サーバ証明書の発行について最近業務で扱うことが多いので調べてみました。
基本情報などで共通鍵、公開鍵、CAの概念は出てきますが、どうしても覚えられず。。
これは何の役に立つのかと、同じ思いをしている方は多いのではないでしょうか？

## HTTPS通信とは
HTTPSは「Hyper Text Transfer Protocol over SSL/TLS」の略で、セキュアなインターネット通信を行うためのプロトコル。
クライアントPCとサーバ間のデータのやり取りを暗号化することによって、第三者のアクセスを防ぐ。
顧客からアクセスのある商用WebサイトはすべからくHTTPS通信にするものだと思ってます。

## 証明書の種類
HTTPS通信をするためにはまず証明書が必要となります。
証明書は自分を証明するので免許証のようなものですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609368/6f396f62-139f-69b1-d54f-dad5d343c817.png)


## サーバ証明書の作成～検証までの詳細
クライアント証明書とサーバ証明書の作成～検証までの流れは同じなので、サーバ証明書を例に図示しました。基本情報で習った共通鍵と公開鍵の概念が出てきます。
この鍵自体はOpenSSLなどのツールで簡単に作成できます。
CA（認証局）は具体的にデジサートやGMOグローバルサインなど証明書を発行する機関を指します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609368/b18f7513-0269-c18e-b2b7-4669ea672377.png)


## あとがき
ここまで壮大な流れがあって初めてHTTPS通信ができると知りました。
この他にもブラウザ内での処理やWebサーバ、CA内での色々なやり取りもあるので非常に奥深いです。
まだ学び中なので追記していきます。間違い等あれば指摘いただけると幸いです。
GO言語で並列実行するサンプルコード。ワーカーのキャンセル機能付き

個人的な備忘録として。

```golang
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/pkg/errors"
)

type Result struct {
	Task Task
	Err  error
}

type Task struct {
	Bar int
}

func worker(workerID int, ctx context.Context, taskChannel <-chan Task, resultChannel chan<- Result) {
    // taskCannelがなくなるまで動作する
	for task := range taskChannel {
		select {
		case <-ctx.Done(): // 親からcancel()が実行された場合、動きを止める
			fmt.Printf("[%d] got Cancel\n", workerID)
			return
		default:
			fmt.Printf("[%d] do task = %v\n", workerID, task)
			time.Sleep(time.Second * 1)
		}
	}
}

func main() {

	// タスクのリスト
	taskList := []Task{{1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}}
	taskChannel := make(chan Task, len(taskList))
	resultChannel := make(chan Result)
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	// タスクチャンネルに入れる
	for _, task := range taskList {
		taskChannel <- task
	}
	close(taskChannel)
	// 複数のワーカーを起動
	for i := 0; i < 4; i++ {
		go worker(i, ctx, taskChannel, resultChannel)
	}
	// 全ての完了を待つ
	var count int
	var err error
	err = nil
	for {
		result := <-resultChannel
		count += 1
		if result.Err != nil { // タスクの一つがエラー
			err = errors.Wrapf(result.Err, "task=%v has error\n", result.Task)
			fmt.Printf("%v\n", err)
			// 他のワーカーを止める
			fmt.Printf("cancel other worker\n")
			cancel()
			break
		} else {
			fmt.Printf("task=%v finish\n", result.Task)
		}
		if count == len(taskList) { // 全てのタスクが完了
			break
		}
	}
	if err != nil {
		panic(err)
	}
}
```
【React + Electron】ポケモン実況に便利なツールを作りたい人生だった【OBS】


# ポケモンSVの配信やってますか～～～～～～～～～～？？？？？？？？？？？？？
やってますよね。
**やってる前提でいきます。**

ポケモン配信をやっていると、こんな欲求が生まれると言われています。

**手持ちのポケモンを配信画面に表示して～～～～！！！！！！！**

対戦配信とかだとあらかじめポケモンの絵を用意するなどして対応できますが、ストーリーを進めているうちは頻繁に手持ちポケモンが変わるので難しいと思います。
**でもその都度入れ替えて表示したいんじゃい（できるだけ楽に）！！！！！！！！！！！**

そこで、以下のツールを作成することにします。
- 動的に手持ちポケモン（最大6体）を変更し表示する
- それをOBSに取り込み世界平和が叶う

**やってみよう！！！！！！**

*この記事で扱うポケモンの画像に関するあらゆる権利は株式会社ポケモン、任天堂株式会社、株式会社ゲームフリーク、株式会社クリーチャーズに帰属します*

## 挫折
この章では開発開始時点での技術的な限界を思い知るまでの挫折を解説します。
そもそも「ReactとElectronと使おう！」となった経緯のあらましでもあります。

***は？結果だけ知りたいんだが？***　って方は、この章を丸々飛ばして大丈夫です。

### どうやって実現するか考えた
まずOBS上にどうやって表示するかを考えました。
**「htmlで組んでそれを表示してるブラウザをOBSに持っていくだけやん！！」** と至り、OBSの「ウィンドウキャプチャ」機能を使用することにしました。

そこで出来上がったのが以下。
(素のHTML+CSS+JS)
![動作イメージ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983623/e7cff98d-7b2b-9a6e-874f-4645bb17d52b.gif)

「あとはOBSに取り込むだけ！！」
と考えたのですが、問題発生。

**透過できん！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！**

そう、ポケモンたちが表示されている箇所のcssをどう調整しようとも、ブラウザに表示される以上背景が白くなるのです。
背景色を設定してクロマキーで抜こうかとも思い試しましたが、キレイに抜いてくれなかったため断念しました。
（縁が1px残るような感じで表示された）

OBSの「ブラウザ」機能を使ったら透過できるかとも思いましたが、そもそもOBS上でブラウザが起動される（語弊アリ）のでinput部分の操作が出来ずダメ。
（ブラウザ機能のインタラクトではセレクトボックスの操作ができない）

なんとかweb上で解決できないかと足掻きましたが解決できず、知り合いのエンジニア（よく食べる）に相談したところ
***「そういう事しようと思ったらスタンドアローンで動くアプリ作ったほうが良いね～」***
とのこと。

そういえば、配信でOBSと一緒によく使われるソフト[「わんコメ」](https://onecomme.com/)でもOBSのブラウザ機能を使って色々やってるなと回想。

さらに
***「Electronっての使えば簡単にNodeとかの環境をパッケージングしてソフト化できるよ」***
との有難すぎる助言を頂きました。

この神託に従い、Electron（と前から興味があったReact）を使って超絶完全無敵なスタンドアロンアプリを作ろうと思い至った次第でございます。

## その後いろいろあって
無事にerectronでアプリ化できました。
![2022-12-29_18h30_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983623/08647730-c55a-39cf-baa8-b1d5ffae81dd.png)
ちゃんと設定した内容は自動保存され、リセット処理も出来ます。

**が**

**ダメ！！！！！！！**

結局Reactで構築したものが表示されるだけ（当たり前）なので、*OBSのブラウザ機能をうまく扱えない*という根本的な解決には至らず。

💩💩💩💩💩💩

# 今後の改善案
以下をできるようにする

1. http-serverを使用してローカルサーバーを起動するようにする
1. アプリとローカルサーバー間で通信して、アプリ側の操作をローカルサーバーに反映
1. OBSのブラウザ機能からローカルサーバーを開いて表示

# Github
https://github.com/daipoyo48/pokemon-stream
BLOBの種類

●コンテナの作成と管理
コンテナの作成時にはコンテナの名前の他にパブリックアクセスレベルというパラメータを構成する。

■プライベート
インターネット経由での匿名アクセスが禁止されるため、Azure仮想マシンのプロぐらっむから参照するなどする必要がある

■BLOB
コンテナの配下に格納されるファイルに対して、インターネット経由での匿名アクセスが許可される。

※コンテナ内のファイル一覧を取得することはできない

■コンテナ
BLOBと同様、コンテナは以下に格納されるファイルに対してインターネット経由での匿名アクセスが許可される。また、コンテナ内nおんファイル一覧も取得できる。


●BLOBの種類
オブジェウトストレージに対する基本操作にはアップロード、ダウンロード、削除の3つがある。
アップロードを行う際はBLOBの種類というパラメータを選択する必要がある。
次の３つである

■ブロックBLOB
一般的なファイルや画像、ビデオなどのデータをクラウドに格納するほとんどの場合に適している。

■追加BLOB(BLOBの場合)
ここで許可される変更は、BLOB末尾へのブロック追加だけであり、既存ブロックの更新または削除はサポートされていない。仮想マシンのログや監視ログを格納するシナリオに適している。
ブロックBLOBと異なり、ブロックIDを公開しない

■ページBLOB
512バイトのページの集まりであり、Azure仮想マシンで使用する仮想ディスクのプラットフォーうのバックボーンでもある。
ページBLOBとしてVHDファイルを格納すると、Azure仮想マシンのあんマネージドディスクとして接続して使用でｓキル。
そのため、オンプレミスのHyper-V環境で作成したVHDファイルをアップロードしてAzure仮想マシンで使用したい場合は、アップロード時時にページｂLOBを選択する
ITILファンデーション（v4）について

# はじめに
ITILファンデーション（v3）認定資格が今までは無期限で有効だったのですが、2023年1月から変わるらしいということで記事にしてみました。

# Who am i ?
しがないエンジニアです。趣味はゲームと読書、あとは資格の勉強です。
ITILはファンデーション（v3）を取得しています。


# この記事の想定読者

- ITILファンデーション認定資格をこれから取得しようと思っている人
- ITILファンデーション認定資格の更新について知りたい人
- その他


# ITILについて

ITILとはInformation Technology Infrastructure Libraryの略のことです。
いわゆるプロマネとかそのあたりの資格で、入門的な資格としてITILファンデーション認定資格というものがあります。私も新人１年目あたりに取得した覚えがあります。今現在で最新がv4です。v3はそろそろ廃止されると聞いています。日本では17万人近くの資格取得者がいるそうです。

# 本題

私は以下から更新が必要になることを知りました。

https://itstrategy.jp/archives/18922

資格の棚卸しをしていたときに気づきました。いやー危なかった。。
v3のファンデーション試験に合格している方たちは更新のためにv4のファンデーション試験を受けてみるのもいいかもしれないですね。

また、2023年1月から受験料が値上げするらしいです。。

https://itstrategy.jp/archives/19734

認定試験対策等の講習と受験費用とかだけなのにコロナって関係あるんですかね？人件費とかですかな。。

（追記）資格の更新方法について、一部発表があったようです。

https://itstrategy.jp/archives/21761

CPD（継続教育）については2023年の3月に公表されるそうです。

# 試験勉強（v3）
本（日本語）を読みました。あとはPeopleCertで模擬問題が購入できるのでオススメかもしれません。テキストが基本的に英語だからなぁ。。最近はテストセンターではなく自宅での受験もできるようになったみたいですね。せっかくなんで、v4の取得もしてみようかなと思っています。

# 最後に
認定団体が資格の要件を急に変更することがあるので、その辺は逐次ウォッチする必要がありますね。更新要件がはっきりしてきたら、こちらにも書いていこうかと思います。
デプロイをした後の運用方法

## デプロイの運用方法
今後も使う事があると思うのでメモとして残しておきます。

#### EC2へSSHでログインする
```
username:~/environment $ ssh -i ~/.ssh/practice-aws.pem ec2-user@xx.xx.xx.xx
```

@xx.xx.xx.xxはEC2のパブリックIPアドレス

## アプリケーションへ移動
```
[ec2-user@ip-xx-xx-xx-xx ~]$ cd アプリケーション名
```
##  GitHubからpull
最新のコードをGitHubからpullして持ってくる
```
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$git pull origin main
```


## 変更したフォルダーによる運用方法
Gemfileを変更した場合
１. ローカルからリモートリポジトリへpush
２. SSHでEC2へ接続
３. EC2上でアプリケーションへ移動
４. git pullする
５. 以下コマンドを実行
```
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ bundle install --path vendor/bundle --without test development
```
## CSS/JavaScript/画像を変更した場合
１. ローカルからリモートリポジトリへpush
２. SSHでEC2へ接続
３. EC2上でアプリケーションへ移動
４. git pullする
５. プリコンパイルを行う
```
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ bundle exec rails assets:precompile RAILS_ENV=production
```
## マイグレーションファイルを変更した場合
１. ローカルからリモートリポジトリへpush
２. SSHでEC2へ接続
３. EC2上でアプリケーションへ移動
４. git pullする
５. マイグレーションを行う
```
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ bundle exec rails db:migrate RAILS_ENV=production
```
## アプリケーションサーバーを起動
```
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ rails s -e production
```

##  アプリケーションサーバーを停止するとき
```
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ kill $(cat tmp/pids/puma.pid)
```

## 本番環境でデータベースをリセットしたいとき
```
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rails db:drop
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ rails db:create RAILS_ENV=production
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$ rails db:migrate RAILS_ENV=production
```
開発開始から約2年たったBotくん

# はじめに

これは [防災アプリ Advent Calendar 2022](https://adventar.org/calendars/7488)  の11日目の記事です。
こんにちは！前回も参加しましたが、今年も書きます。孤独のコーヒーです。
初めましての方は初めまして、お久しぶりの方はお久しぶりです。
自己紹介すると、北海道胆振東部地震で被災し、地震界隈に参加して、
Pythonでいろいろ書いてる学生です。
現在はDPIという名前のDiscordBotを開発・運営・稼働しています。
久しぶりにQiitaを書くのでお見苦しい点があるかもしれませんが、ご了承ください。
# 概要

約２年間DPIとゆうBotを開発・運営をしていていろいろ気づいたことなどを今日は書きます

### いままでの経緯
さて、、去年のカレンダーにも参加し、書いたものが１年たったことで、いろいろ変わりました。
（自分自身も大きく変わりました（？）
まず、、自分自身ですが去年書いた記事は中３に書いた記事ですそして１年たった今は高１とゆう大きく変わり、忙しくなったのでが現状です。今は24時間稼働しほぼ放置状態となっています。
まぁ、自分自身のことは置いといて、Botくんで変化・改善したところを大雑把に上げます
まず、去年時点のBotは限られた鯖での導入が可能でしたが、複数の方から嬉しいことに、自分の鯖にも導入したいという人が現れ、今年の５月ぐらいに、だれでも導入することができるようにいたしました。また誰でも導入可になったので、一層24時間稼働できるように努力しました。
~~現在は約60鯖に導入してただき~~、 現在115鯖とゆう記事を書き始めたころよりも急成長しています。日々感動しています。。。

# 本題
さて、概要を話すだけで長文となってしまいましたが、、現在DPIは先程も書きましたが約60鯖に導入されていますが、1つの鯖で1つの情報だけを申請することはほぼなく、きっちりとした計算はしていませんが、だいたい１つの鯖で６〜10の情報を申請しており、またdiscordはチャンネルを分けれるので、このチャンネルはこの情報など概要別にしている鯖も多く見られます。

そこでどれぐらいの気象庁など
の情報を申請しているのか、まとめてみると、このようになりました。
![2022-12-10_08h12_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/357f9a9a-baf5-87d2-3352-62d2e9b2ef55.png)

（あとすこしで1000....）

やはり、災害につながる情報の申請数が多いことがわかり、
第1位は記録的短時間大雨情報

![2022-12-10_08h40_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/745d2824-2762-ce40-e860-9b61e3a181c0.png)

第2位は土砂災害警戒情報
![2022-12-10_08h41_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/0ee140ed-d580-f712-d0c7-5717f14752b6.png)

第3位は津波情報
![2022-12-10_08h42_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/9c81f596-2c09-af1c-5071-3e62723d6711.png)

となっていました。

自分的にはやはりEEWや地震情報や津波情報などがTOP3を占める割合が高いのかなと思いましたが、このような結果となり驚きつつ、まぁそうなるわなとゆう感想です、、

そして、現在Botは気象庁xmlのデータを利用しており、気象庁xmlデータは無料ですが発表後5～10分ほど掲載まで遅延があり、一応利用規約などにもこの文面を乗せていますが、さすがに115鯖導入Botが遅延があるのはやばいだろぉ、、と思い
約1年前からdmdataの存在を知っており早く契約したい！！と思っていましたが、
学生には厳しく断念しておりましたが、昨日契約を結んだので、よりいままでより早く提供できるのがうれしく思っています、、
（有料で提供する気持ちは一切合切なので赤字です）、、
赤字と行ってもなぜ、このBotを開発しようと思ったのか、それは**わざわざ気象庁のＨＰやＴＶみなくてもこのBotを利用して、所在地や他の地域の警報など見れたらいいよね**当時、そのようなBotはほぼなく、EEWと地震情報だけなら存在しましたが、　じゃぁ自分で作ればいいやん！！　とゆう思いから開発を開始いたしました。
そして現在に戻り、先ほど太字の思いと　**このBotを利用して一人でも多く防災に努めてくれれば、そして少しでも被害にあう人が少なくなれければ**　もあります
以上のことから無料でより迅速に提供することに努めています。
### おわりに
ここまで読んでくれてありがとうございます。
いろいろ話は脱線しましたが、、、前回このBotの記事を書いた時はまだ限定鯖だっただけに、24時間稼働は念頭にありませんでしたが今年の6月からパブリックしたために、このことが念頭に浮かんで現在稼働しているところです。

さて、、翌日はあのJQuakeの作者様であるフランソワ様ですね、、、
フランソワ様の記事もぜひ読んでみてください。
AKBONE2022 LEDパネルキットでNewsを流す

## はじめに
AKBONE2022 LEDパネルキットで、少し前の新幹線のドアの上にあったNews表示を実現してみます。
Newsは比較的簡単にNewsデータが取得できるYahoo! Newsを使用します。

https://twitter.com/pokibon/status/1593800819018588161?s=20&t=2tOMyzibUr-smNrSswwGRg


## 事前準備
SSL ( https )ページを取得するには、ブラウザと同じように公開鍵を含んだルート証明書をマイコンに保存しておく必要があります。あらかじめ、以下の記事を参考にYahoo! Japan RSS ニュースサイトのルート証明書を取得しておいてください。  
private.hppには仮の鍵が記載してあります

https://www.mgo-tec.com/blog-entry-arduino-esp32-ssl-stable-root-ca.html/2

上記記事から、Chromeの証明書ビューアの表示と操作方法が変更になっています。証明書の取得は、詳細タブの証明書のフィールドで、サブジェクトの公開鍵を選択後、エクスポートボタンを押下してください。

![2022-11-20-11-14-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/1154b433-21e0-6181-37dc-afaaad6d6024.png)

## ビルド時の注意事項
### スケッチのダウンロード
スケッチは以下のGitHubから取得してください。
https://github.com/nanbuwks/AKBONE2022/tree/main/Arduino/sketchbook/akbone2022_news
Arduinoの開発環境は以下の記事を参考に構築してください。
PlatformIOでも可能です。（Windows環境では、ビルドが早いPlatformIOがおすすめです）

### ルート証明書の変更
先程取得したYahoo! Japan RSS ニュースサイトのルート証明書をprivate.hppに埋め込みます。private.hppには予め仮の証明書が記載されています。

### Partition Sizeの拡大
スケッチが1MBを超えてしまうので、Arduino IDEのPartition Sizeを「No OTA」などに変更し2MBに拡大しておく必要があります。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/acc15c33-9e0a-0584-4047-58bed3b65b43.png)

PlatformIOの場合は、platformio.iniに以下を追加してください。  
```
board_build.partitions = no_ota.csv
```  

### パネルの選択
使用するパネルに合わせてakbone.hppのパネル設定を変更します。
```
//===========================================================
//	LED Panel difinition
//===========================================================
// support panels
// P2 1nd K716-V3.2 , HUB75E,BRG, 128x64pixel , 256x128mm,Y座標パラレル指定
// P2 2nd P2-128X64-32S-V6.1 ,HUB75E,RGB, 128x64pixel  , 256x128mm,Y座標シフトレジスタ
// P2 3rd J1-02064128CB-SMV6.1  ,HUB75E,RGB, 128x64pixel  , 256x128mm,Y座標シフトレジスタ,Bピンディスチャージ,初期設定コマンド必要, AVTOKYO で頒布
// P3 2nd TEC-N3.051515-16A2  ,HUB75,RGB, 64x32pixel  , 192x96mm,Y座標パラレル X座標ZIGGAZ形式 AVTOKYO で頒布 TECNONブランド 
// P3 3rd P3(2121)64X64-32S-M5.1 ,HUB75E,RGB, 64x64pixel  , 192x192mm,Y座標パラレル 未頒布 
// P4 1st P4-2121-64*32-16S-HL1  ,HUB75,RGB, 64x32pixel  , 256x128mm,Y座標パラレル  AVTOKYO で頒布

//
// select one of panel panel 
//
//#define PANEL_P2_1st
//#define PANEL_P2_2nd
//#define PANEL_P2_3rd
//#define PANEL_P3_1st
#define PANEL_P3_2nd
//#define PANEL_P3_3rd
//#define PANEL_P4_1st
```


## 使用方法
初回起動時やWiFi環境が異なる場所での利用の場合、以下の画面時にSmartConfig(ESPTouch)でWiFiの設定を行ってください。  

https://www.espressif.com/en/products/software/esp-touch/overview

![2022-11-20-10-50-03.png).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337553/1797ee08-8d42-57bf-050b-245fbfc3996b.png)
意思決定に疲れたのでAI🤖による行動レコメンドアプリを作ってみた【人工無能】

# はじめに

有名な話ですが、[ケンブリッジ大学のバーバラ・サハキアン教授の研究](https://go.roberts.edu/leadingedge/the-great-choices-of-strategic-leaders)によると、私たちは1日に最大で3万5000回の決断を下しているそうです。そこで、AIによるレコメンドを用いて、ちょっとした意思決定の積み重ねを減らすことができれば、パフォーマンスを上げることができるのではないかと考えました。この行動レコメンドアプリの名前は、**AI Behavior Captain**にしました！

# AI🤖による行動レコメンドアプリの実装
* ソースコードは[こちらのGithubレポジトリ](https://github.com/Isaka-code/ai-behavior-captain)で公開しています。使い方も書いていますので良かったら見てください！
* 今回はPythonのGUIライブラリであるPySimpleGUIを用いています。PySimpleGUIの勉強には[こちらの動画](https://www.youtube.com/watch?v=pk6fgvKQ7q4)が大変参考になりました。
 
完成したGUIアプリ
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/847bf6a5-85a8-6574-94ee-aaa2af4f37a6.png">


* 行動テーブル(data/behaviors.csv)と行動履歴(data/history.csv)からAIに行動をレコメンドしてもらったり、新規の行動を追加したりできます。例として、下記の行動を初期値としています。

行動初期値
| ID | NAME |
|:-:|:-:|
|0|studying|
|1|reading|
|2|sleeping|
|3|coding|
|4|eating|
|5|training|
|6|walking|
|7|journaling|


* レコメンドアルゴリズムの中身は、①”人工知能おすすめボタン”として[Softmax関数](https://python.atelierkobato.com/softmax/)を用いた過去の選択から確率的なレコメンド、②”人工無能おすすめボタン”として完全にランダムにレコメンドの2つの手法を選択しました。
:::note warn
どちらもAIですが、機械学習ではないです。気が向いたら機械学習ボタンも実装するかもしれません。
[参考：AIと機械学習の違い](https://www.tryeting.jp/column/2525/#:~:text=AI%E3%81%AF%E3%80%81%E4%BA%BA%E5%B7%A5%E7%9A%84%E3%81%AB,%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E6%89%8B%E6%B3%95%E3%81%A7%E3%81%99%E3%80%82)
:::




# 実際に遊んでみた

* 最初は人工知能ボタンと人工無能ボタン、両者ともにランダムにレコメンドします。 
 
人工知能レコメンド
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/1926b954-bdce-a2b4-4be6-f2243fc6908b.png">

人工無能レコメンド
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/02d68f59-5c37-c0db-d265-031332862d30.png">
  

* readingボタンを押しました。★マークで強調され、Let's reading ! という表示が出ます。  
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/8649ae6f-1790-0a82-e5e1-c5c144be2c97.png">


* 人工知能おすすめボタンを何回か押すと、readingが上位にレコメンドされる確率的が上がっていることが直感的に確認できました！  
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/34169f1a-ba3b-aa5d-1521-634466089e82.png">
  
* 人工無能は変わらずランダムにレコメンドします。   
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/98e0bf5d-6131-749c-86cb-cdc56ac714f7.png">

* drinkingを行動テーブルに追加してみます。  
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/174b42de-7ce9-4376-df06-3aca3629298c.png">

* ちなみにもう一度drinkingを追加しようとすると、drinking exsit ! という表示が出ます。  
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/e5b83e98-ba0f-7341-43dd-b982ccb75f86.png">

* レコメンドボタンを押すと、drinkingがレコメンドの候補に追加されていることが確認できました！  
  
<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/ab18608c-fd51-6175-f411-700db7d7e9ef.png">

# まとめ
完全にAIに行動を決めてもらうのではなく、あくまでいくつかの候補の順位を提示してもらえるようにしているのがポイントです。意思決定の主導権は人類にあります。（あれ、意思決定疲れの話は？）

:::note warn
完全にAIに行動を決めてもらいたい人は、引数の recommend_num を 1 にしてください。
ai_behavior_captain.py
```
if __name__ == "__main__":
    # ハイパーパラメータ
    recomend_num = 5 # レコメンド数　⇐これを1にすると一つしかレコメンドされなくなります
```
:::
AWS認定クラウドプラクティショナー合格に向けて Day17

 # 前回の内容
[AWS認定クラウドプラクティショナー合格に向けて Day16](https://qiita.com/Ayako_0224/private/423d61e754b7eeee8519)

# AWS Well Architected Framework
ベストプラクティスを利用することで最適解や改善点を把握する
あくまで参考
- 要件定義
- 設計
- 構築
- 運用

の各フェーズで確認し、参考にすることが大事

Well Architected Frameworkは次の3つの内容で構成される
## 1.ホワイトペーパー
AWSを使う上で意識するべき6つの設計原則がある
### Reliability
回復性の高いアーキテクチャを設計する
### Performance Efficiency
パフォーマンスに優れたアーキテクチャを定義する
### Security
セキュアなアプリケーションおよびアーキテクチャを規定する
### Cost Optimization
コスト最適化アーキテクチャを設計する
### Operational Excellence
オペレーショナルエクセレンスを備えたアーキテクチャを定義する
### Sustainability
持続可能性が高いアプリケーション運用を実施する

## 2.AWSのSAまたは認定パートナーによる支援制度
SA...AWS公認のサポーター社員
認定パートナー...公認企業
コンサルのような形でサポートをしてくれる

## 3.セルフチェック向けのWell Architected Tool
使用しているAWSが本当にあっているのか検証できるツール
構築アプリケーションを設定し、6つの設計原則に関する質問に回答することで改善点などが提示される
### ワークロード
ウェブサイト、アプリのバックエンド、分析プラットフォームなどビジネス価値をもたらす一連のコンポーネントが特定する
### マイルストーン
設計、テスト、実稼働、本稼働の製品ライフサイクルを通して進歩するアーキテクチャでの重要な変更内容のこと
### レンズ
ベストプラクティスに照らしてアーキテクチャを評価時、改善すべき分野を特定する一環した方法
### HRI
高リスクの問題
### MRI
HRIより低いリスクの問題

To be continued...
Mastodonのインスタンスを立ててみた

(これは2022年の「ユニークビジョン株式会社 Advent Calendar」向けに書いた記事です。)

## きっかけ

ユニークビジョンでの開発は、Twitter等、いわゆるSNSのAPIを利用することが多く、当然私もそれぞれのアカウントを持っているのですが、それほど私はアクティブに利用しているとはいえません。

来年はもう少しきちんと利用してみよう、と思いつつも(去年も一昨年も思ったような気がする)、いまさらただつぶやくのも芸がないなぁ、と思い、Mastodonのインスタンスを立ててみようと思いたちました。いまさら感がありますけれど。

## インスタンスの準備

自宅サーバでたててもいいのですが、Railsを起動する必要があり、ちょこっと重そうなので、さくらのVPSを契約してみることにしました。

既にさくらのVPSのページには、[スタートアップスクリプトMastodon](https://manual.sakura.ad.jp/vps/startupscript/mastodon.html)が用意されており、簡単に立てられそうな雰囲気です。

で、実際にやってみたのですが、ドメインさえ決めておいてしまえば、本当に簡単にインストールができました。

ちなみに、「スタートアップスクリプト Mastodon」内に4G推奨との記述があり、「メモリ容量が少いプランでは動作しません。」とありました。ほんまかいなと1Gのプランで起動をしようとしたところ、その記述通り、動きませんでした。ので、素直に4Gのプランで動かしました。


## で、

とりあえずつぶやいてみました。

https://mastodon.snthtns.jp/@hhh


![2022-12-10 22.33.17 mastodon.snthtns.jp f9deb29afa95.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317920/ddc8657a-3d58-c0a2-854f-cafb6b08710c.png)


## 感想

他のインスタンスのアカウントをフォローしてみたのですが、実際に操作をしてみて「分散」の意味がよく分かりました。なるほど、そのインスタンスにはログインをせず、自分のインスタンスからそのインスタンスのURLを(検索フォームに)入力してフォローするのですね。

![2022-12-10 23.06.21 mastodon.snthtns.jp dbf4383fe503.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317920/4621ae29-a234-9726-2c9b-02bce9a2b2c2.png)

一年後、飽きずにまだつぶやき続けていたら、「Mastodonで1年間つぶやいた感想」、でもアドベントカレンダーに書こうと思います。



それではよいクリスマスを。
勉強し続けて成長するためのシンプルな方法

本投稿は、以下の「新人エンジニアにすすめたい、あなたの勉強法をシェアしよう！ by Udemy Advent Calendar 2022」の11日目です。

https://qiita.com/advent-calendar/2022/udemy

今回、初めてアドベントカレンダーで投稿させていただきます、**ふるや**です。

普段は[大阪のゲーム会社](https://www.dank-hearts.co.jp/)でエンジニアとして働いています。
趣味はボードゲームで、会社でボドゲ会を開催しています。
（リアルの人との駆け引きが楽しくて好きです🎲）
社外のボドゲ会にもお誘いいただく機会があり、遊びに行くこともあります！

...さて、早速本題に移らせていただきます。

**※本投稿は私個人の経験談や考えになります。ご留意ください。**


## 勉強方法について

世の中には数多の勉強方法が存在しています。

勉強方法を探す時、
「**プログラミング言語によって違う？**」という疑問や、
「**自分のレベルに合ったものを知りたい**」などの想いがあるかもしれません。

個人的には「**どの勉強方法が自分に合うのか、探すのがそもそも大変**」と思いますが、皆さんはいかがでしょうか。

私は「特定のものを勉強する方法」を知るより「**どんなものにも対応できる勉強方法**」のほうがシンプルかつ応用が可能なので**効率が良い**と思っています。

この記事では私なりの勉強方法をまとめました。
どこか皆さんのお力になれる箇所があれば幸いです。


## 勉強の目的

そもそも勉強する目的は何でしょうか？
私は何かの「知識を得ること」と思っていて、
「知識を得ること」によってこんな良いことがあるとも思っています（一例です）
```
・自身の仕事の幅が広がり、自分だけで何かを作り上げることができるようになる
・自身の作業の前提、あるいは後続の作業を把握すると、自身の効率の良い動き方が見えてくる
・専門的な知識を得ることで複数の作業をこなすことができるようになる → 収入アップにつながる
```


## 私が信じる勉強方法

シンプルに **「続けること」が大事** だと思っています。

「学び続ける」には体力が必要です。
「仕事から帰ってからやろう」とか「明日やろう」は経験上「やらない」ことが多いです。
「つらくても何かやる」ことで「継続している意識」が生まれるので、
続けるべきだと思っています。

では「続ける」にはどうすればよいでしょうか？

私は **<font color=red>モチベーションを上げる</font>** ことで続けられると考えています。

## モチベーションを上げるには

これについても様々な方法があります。
私はプログラマになりたいと思っていた頃、以下の書籍に出会い
勉強し始めました。

**『わかりやすいJava入門編』**
https://www.amazon.co.jp/gp/product/4798024031/

内容はプログラミング言語 **Java** の基礎的なものになっています
（本書には「オブジェクト指向」は含んでいません。続本に取り扱われています）
こちらの書籍は全体で600超のページ数があります。
腰が重くなると思うのですが、逆に「**これを終えれたらプログラムを組めるようになる！**」と思うとワクワクしていました。

書籍の構成は
```
・用語などの説明
・設問
```
の繰り返しとなっており、一つずつ着実に理解を深めて進めていくことができます。

半分ぐらい進んだところで、「**おぉ、こんなにもやってきたのか**」と開いたページ数を目で認識することでモチベーションの向上につながりました。

**物理的な進捗を視覚的に脳に認識させる**のが大事かなと感じました。

![物理的な進捗](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/556460a9-3620-d3ba-392b-d0197e729a17.jpeg)

書籍でなくとも「やったこと」が物理的に認識できる形であれば良いとも思っています。

分からないところは繰り返し読んだり、ネットで調べたりしつつ、徐々にでしたが
やがて、全てを終えることができました。

文章はとても丁寧に書かれているので**独学に適している**とも感じました。
書籍のタイトル通り、わかりやすかったです。


## 知識の定着のために

使われない知識は脳が不要なものと判断し記憶から抜け去っていきます。
（強烈なインパクトなど、記憶の方法にもよる）
* [忘却曲線 - Wikipedia](https://ja.wikipedia.org/wiki/%E5%BF%98%E5%8D%B4%E6%9B%B2%E7%B7%9A)

見たり、聴いたりすることで「**インプット**」した「**知識**」は
実際に仕事など実務で**使ったり**、同僚に**教えたり**、勉強会やLTで**発表したり**など「**アウトプット**」することで定着しやすいです。

社内勉強会や社内LTがあれば参加してみるのも良いかもと思います。


## 最近のWebでの勉強について

若手のエンジニアには [**Udemy**](https://www.udemy.com/) や [**Progate**](https://prog-8.com/) をおすすめしています。

学びの入口として、とても丁寧に分かりやすく取り扱われているものが多いので
初学者の助けになると感じています。

### Web開発をやってみたい方へ
ハンズオン形式でわかりやすいものがあったので紹介となります。

https://www.udemy.com/course/laravel8mysql/


## まとめ

* 勉強を続けるにはモチベーション向上が必要。
* モチベーションを上げるには物理的に「やったこと」を脳に認識させることが大事。
* インプット後はアウトプットして知識を定着させる。
* 最近はWebで学べる環境が充実しているのでそれらを使うのもあり。

<br><br>

以上です。
かなり固めな内容になってしまいましたが...
どこか皆さんのお力になれる箇所があれば幸いです。

最後まで読んでいただきありがとうございました！