OmniAICreator/Qiita-1.07M huggingface dataset:
モデルを作成するまでの基本手順（ASP.NET）


# Modelsからクラスを選択する。
ソリューションエクスプローラー＞Models＞追加＞クラス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/19f29609-9329-65e7-d4c2-5a4d11490d1d.png)

# データタブから「ADO.NET Entity Data Model」を選択し、追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/c1ea1585-e2c7-79ad-560a-a47567267595.png)

# モデルのコンテンツの選択は、「データベースからEF Designer」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/577ae35f-2eb1-66f1-b3e0-1dde972759c6.png)

# データ接続は、作成したデータベースを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/d8bc0e21-2dfe-2569-be30-2237648e21f8.png)

# フレームワークを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/d7d34330-c292-7a0b-e77c-5258916df6fb.png)

# モデルに含めるデータベースを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/9af699c8-bf35-9a96-01e1-dff71672196b.png)

# セキュリティ警告はそのままOKを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/1180af22-e158-298f-dc04-97387485b337.png)

# モデルの作成が完了する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/326e7d27-8cd1-913d-1ec2-2e61a1950e97.png)

# 注意事項
- この記事では、visual studio 2022を使用しているので、試してみたい方は事前に準備が必要です。
- 関連する記事の一覧は[こちら](https://qiita.com/portfoliokns3/items/7c789b7e1ba40500abbb#%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E6%89%B1%E3%81%A3%E3%81%A6%E3%81%84%E3%81%8D%E3%81%9F%E3%81%84%E4%BA%BA%E5%90%91%E3%81%91%E3%81%AE%E8%A8%98%E4%BA%8B-1)。
※参照先のリンクが切れている場合は、[トップページ](https://qiita.com/portfoliokns3)から確認してください。

# この記事は誰向けの記事か？
- 試しにASP.NETを始めてみたいと思っている人
- ASP.NETの環境構築の手順を知りたい人

# 環境
- OS：Windows10
- [visual studio 2022](https://visualstudio.microsoft.com/ja/vs/)
- [Visual Studio Community Edition](https://visualstudio.microsoft.com/ja/downloads/)

# 本記事における注意事項
- 本記事は、備忘録としてまとめたものになります。
- 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
- また記載内容はすべて、正しい内容が記載されているとは限りません。
- 誤った内容を見つけた場合は、ご指摘をお願いいたします。
データベース・データテーブルを作成するまでの基本手順（ASP.NET）

# データベースの作成
## App_Dataからクラスを選択する
ソリューションエクスプローラー＞App_Data＞追加＞クラス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/f51c068d-8422-2a27-b776-23655c980402.png)

## SQL Serverデータベースを選択し、追加する。
ファイル名も適宜、変更する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/ceb1ea77-a571-4a80-a9a0-cbafad2d701a.png)

## データベースが作成される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/ff5767aa-85a3-9940-878a-d86b62ba7361.png)

# データテーブルの作成
# 新しいテーブルを追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/9eb67555-0815-ca30-904b-5068f35db7e2.png)

# 各カラム名やデータ型を定義する。
テーブル名は、クエリの中を直接変える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/3ff4f414-780e-8b90-bd76-2377b2295c04.png)

# データベースの更新を行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/712bac8d-be6b-56e5-90c8-824c10ea20ae.png)

# 最新の情報に更新すると、データテーブルが作成される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/127773ab-e48c-27c8-69c1-95ac353a632f.png)

# 注意事項
- この記事では、visual studio 2022を使用しているので、試してみたい方は事前に準備が必要です。
- 関連する記事の一覧は[こちら](https://qiita.com/portfoliokns3/items/7c789b7e1ba40500abbb#%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E6%89%B1%E3%81%A3%E3%81%A6%E3%81%84%E3%81%8D%E3%81%9F%E3%81%84%E4%BA%BA%E5%90%91%E3%81%91%E3%81%AE%E8%A8%98%E4%BA%8B-1)。
※参照先のリンクが切れている場合は、[トップページ](https://qiita.com/portfoliokns3)から確認してください。

# この記事は誰向けの記事か？
- 試しにASP.NETを始めてみたいと思っている人

# 環境
- OS：Windows10
- [visual studio 2022](https://visualstudio.microsoft.com/ja/vs/)
- [Visual Studio Community Edition](https://visualstudio.microsoft.com/ja/downloads/)

# 本記事における注意事項
- 本記事は、備忘録としてまとめたものになります。
- 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
- また記載内容はすべて、正しい内容が記載されているとは限りません。
- 誤った内容を見つけた場合は、ご指摘をお願いいたします。
AWS実務未経験者が18日でSAA-C03に合格した話

このたび、AWS Certified Solutions Architect - Associate（SAA-C03）試験に無事合格したので、その経緯について書いていきます。

これから受験する方々に少しでも参考になるものがあれば幸いです。

## AWS SAA-C03とは
数あるAWS資格の中で、２番めに優しいと言われる資格です。アソシエイトの資格の中では一番やさしいと言われています。
![aws_certi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272102/d0879c88-1f90-ebac-f756-263cb1ab57d4.png)
出典元：[Amazon Web Services](https://aws.amazon.com/jp/certification/)

## 受験を決めた経緯
普段はバックエンドエンジニアをしていますが、実務でAWSに触れる機会はありませんでした。AWS業務は、基本的にはINFチームに依頼することになっていました。

そんな中、半年ほど前から参画している案件で少しながらAWSを使う機会がありました。実務で触るのは初めてです。前々からAWS知識を身につけたいと思っていたので、前向きに捉えていました。ただ、まだ資格受験しようとは思いませんでした。

受験の思いが強まったのは、同じ職場の同僚がSAA資格試験に合格したことです。前もって受験日を決めて毎日のように勉強を続け、ついには試験に合格している様子にかなり刺激を受けました。更に追い風となったのは、[AWS再受験無料キャンペーン](https://www.pearsonvue.co.jp/aws/retake)です。どうせ再受験無料なので、とりあえず一度受験してみようと思い、受験予約をしてしまいました。

その時、受験日まであと**18日**。

## 勉強方法
正直な話、実務未経験の状態でたった１８日で合格できる可能性は低いと感じました。それでも受験するからには、一回目に合格したいという気持ちもどこかにありました。すでに試験に合格している同僚の勉強方法が非常に役に立ちました。

https://qiita.com/siann55/items/ca131fb8eaba3ef9759d

上記の内容の通り、下記２つのサイトで勉強しました。
- [Udmey](https://www.udemy.com/)
言わずと知れたあの動画講座サイトです。私はとにかく時間がなかったので、「短期突破」という言葉に惹かれて、[【SAA-C03版】AWS認定ソリューションアーキテクト アソシエイト試験：短期突破講座（300問の演習問題）](https://www.udemy.com/course/aws-uoyc/)を購入しました。結論をいうと、この講座は短期突破の割には時間がかかりすぎて、半分くらい進んだところで次のTechStockに集中することにしました。

- [TechStock](https://techstock.jp/)
AWSとGCP問題集サイトです。「AWS SAA-C03」の問題は、１セット７問からなる問題セットが多いです（他の問題は見ていないので、不明です）。そして回答するたびに回答の正否・説明が確認できるので、知識としても定着しやすい印象を受けました。更に10分ほどで１セットが解けるので、ちょっとしたスキマ時間でも勉強できるのが良いですね。
一度解いた問題は解答が保存されており、二回目以降は間違った問題のみ解くといった使い方ができます。そして、問題をお気に入りに追加し、お気に入りのみ解くといった使い方も可能です。
結果的には、#80~#160までを一周し、その後は間違った問題のみ解いていき、受験日の朝には#80~#160全問正解にできた状態で試験に挑みました。（#80~#160というのは先人の知恵です。）

## 勉強時間
かなり詰め込みました。毎朝同僚ともくもく会、昼休みも勉強、夜も勉強、土日も勉強・・・用事で勉強できなかった一日以外毎日続けてました。これまた同僚から教えてもらった方法ですが、[Studyplus](https://www.studyplus.jp/)で勉強時間を記録してみたら、トータル61時間になっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272102/4a07f475-aee5-2d35-0c89-97de8e267ef0.png)

## 受験
受験は試験会場とWEBで選べますが、会場で受けることにしました。地方在住で試験会場まで距離があったのですが、旅行がてら出かけるのも悪くないですね。

試験開始時刻より30分ほど早く着いたのですが、そのまま案内されました。席に余裕があると待たなくて良いようです。

試験問題は、TechStockで解いたことのある問題が多かったです。そして、本番試験は長い問題が多かったです。個人的な所感ですが、
- 自信のある問題：6割
- 選択肢を二択まで絞れる問題：2~3割
- 初見の問題：1~2割

です。

試験中、考えても分からない問題はスキップしていき、59/65回答完了した時点で、25分ほど余っていました。残りの6問を終え回答完了しても10分ほど余っていました。

試験を終えても、合格に自信が持てませんでした。合格ラインギリギリで、合格でもそうでなくてもどちらでもおかしくないと思っていました。

試験終了後は24時間以内に結果が出るとのことでした。実際は12時頃試験終了し、18時30分頃に合格メールが届きました。
![スクリーンショット 2023-04-15 21.55.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272102/067fcf20-902e-7b50-dcff-a7e82b98a6d6.png)

「1000点満点中、720点以上で合格」のところ、768点で合格でした。

## 感想
実務経験がほぼなくても、短期間で試験に合格できました。

しかし、先に実務経験を積んでから資格を取得するのが正しい取り方だと思います。実際、[SAAの試験ガイド](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-sa-assoc/AWS-Certified-Solutions-Architect-Associate_Exam-Guide.pdf)にも、「受験対象者には、AWS のサービスを使用するクラウドソリューション設計の実務経験が 1 年以上必要です。」と記載されています。

ただ、職能上難しいこともあり、資格取得が目的になってしまっているのも事実。先に資格を取ってしまった今できることは、なるべく普段AWSに触れる機会を作り、実務経験を積むこと。実務で触る機会がなければUdemyのハンズオンでもやって、ただのペーパー資格で終わらせないことでしょう。
Data Cloud for TableauにSalesforce組織を追加しよう

今日はData Cloud for TabelauにSalesforce組織を追加します。
## 前提
1.Data Cloud for Tabelau環境

https://www.salesforce.com/products/analytics/data-cloud/

2.Salesforce組織

https://www.salesforce.com/jp/form/sem/freetrial/?ef_id=CjwKCAiApvebBhAvEiwAe7mHSPw1yCYdpUdxiMZ5QEoj0Jw0aMj3JZ_atycKf-Cv-zqRMhpn2VonthoCgSkQAvD_BwE:G:s&s_kwcid=AL!4724!3!613320990440!b!!g!!salesforce&d=7013y000002Uoo3AAC&nc=7013y000002NvovAAC&DCMP=Google-JP&gclid=CjwKCAiApvebBhAvEiwAe7mHSPw1yCYdpUdxiMZ5QEoj0Jw0aMj3JZ_atycKf-Cv-zqRMhpn2VonthoCgSkQAvD_BwE%E2%80%8B

## 手順
:::note info
<dt>1.Data Cloud for Tableauの設定画面からSalesforce組織を追加</dt>
<dt>2.追加したSalesforce組織を確認</dt>
:::
## 1.Data Cloud for Tableauの設定画面からSalesforce組織を追加
①右上の歯車→「設定」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/67353ff7-0de2-bd03-0fee-d1d5cf9efac2.png)
②クイック検索ボックスから「Salesforce CRM」を検索し、「新規」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/99a7808c-9231-ca5d-57a5-0620023053c0.png)
③「別の組織を接続」の「接続」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/f35c296e-5fd8-79a9-faec-afb91ebf2763.png)
④追加したいSalesforce組織へログインすると組織が追加される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/81e89bd7-4ba2-9d33-a56e-7fde63be0e0a.png)
## 2.追加したSalesforce組織を確認
①ホーム画面の「データストリーム」→「新規」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/6b7dc20c-aad1-e4bb-c9f4-d0ff229a9454.png)
②「Salesforce CRM」→「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/d71018d3-406e-f97d-018f-0eb8a332e167.png)
③追加したSalesforce組織が表示されることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562390/521491fc-0ab1-0afc-0844-e80b99c732c6.png)
## 参考ドキュメント
https://help.salesforce.com/s/articleView?id=sf.c360_a_set_up_crm_connection.htm&type=5
プログラミング初心者必見！Gitとは何か？

# 1. Gitとは何か？
Gitは、プログラミングにおけるバージョン管理ツールの一つで、コードの変更履歴を管理するために使われています。

# 2. Gitの重要性と役割
Gitを使うと、開発者はコードの変更履歴を記録することができます。
この機能は、コードの過去のバージョンに戻ることや、複数人で作業する場合にコードの競合を防ぐことができるようにするために役に立ちます。

# 3. コードの変更履歴の管理方法
Gitを使うことで、開発者は個々の作業ブランチを作成し、変更を加えたコードをコミットすることができます。

# 4. プルリクエストによるコードのレビュー方法
複数人で作業を行う場合には、プルリクエストを通じてコードの変更をレビューし、承認することができます。

# 5. Gitの基本操作方法
Gitを使う場合には、コマンドラインで操作する方法や、GUIツールを使う方法がありますが、どちらの方法でもGitの基本的な機能を使うことができます。

# 6. Gitのオープンソース性による広く利用される理由
Gitはオープンソースであり、多くの人々が開発に参加し、改善することができます。これにより、安定したバージョン管理ツールとして、世界中で広く利用されています。

# 7. 初心者に向けたGitの使い方のコツ
Gitは初心者にとって難しい印象がありますが、簡単な操作から始め、徐々に慣れていくことが大切です。

# 8. まとめ
プログラミングを学んでいる初心者にとって、Gitは必要不可欠なツールであり、積極的に取り入れることでよりスムーズな開発ができるようになるでしょう。
ev3rtでno implicit conversion of Hash into String (TypeError)と出た時の備忘録

# 概要　
ev3rtをmakeする際、no implicit conversion of Hash into String (TypeError)と出て、対処法が見つからない...。対処を紹介する。
　必ずしもこの方法で解決できるわけではないと思うのでそこはご勘弁を。（いろいろなパターンがあるからね）

ちなみに、私はこれ以外のエラーが計4個程出て、最終的のこのエラー文になったので、またほかのエラーの場合でも役に立つかもしれない。

# 基本の環境構築について
### WSL(Windows System for Linux)
::: note warn
Cygwin,gcc,ruby,perl etc...は念のため削除或いはアンインストールしておく
:::
こちらが成功した。
[簡単！！WSLをインストールしてWindows10でLinux開発環境構築](https://qiita.com/T-Ooshio83/items/d10dc09c3ccdeea7b970)
今回の場合、必要なのは**パッケージの更新**という項目まで。

### 諸々のインストール
Ubuntuターミナルで以下を実行。
`sudo apt install wget;sudo apt install diffutils;sudo apt install make;sudo apt install build-essential;sudo apt install ruby`

>豆知識。
>Linuxでは、コマンドの後に ; と打つと毎度毎度コマンドを打つ煩わしさがなくなる。
>が、難点としてはどこでエラーが起きたかが分かりにくくなるので、使いどころは考えたほうがいい。

　と、ここで注意して欲しい事がある。それはgccのバージョンだ。
　よくある（？）ことでバージョンを変えればすんなり解決する問題も多い。
  それぞれの方法を紹介する。

### gcc
結論。version 9.5.0であるなら、読み飛ばしOK。参考にはなると思うけどね。

まずは現バージョンを確認する。
`gcc -version`

次のコマンドでインストール可能か否かが分かる。gcc-9がなかった場合は、[このサイト](https://e-penguiner.com/installation-of-latest-gcc-on-linux/#:~:text=GCC%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%201%20GMP%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%20%E3%81%BE%E3%81%9A%EF%BC%8CGNU%20Multiple%20Precision%20arithmetic%20library,MPFR%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%20%E6%AC%A1%E3%81%ABMPFR%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%BE%E3%81%99%EF%BC%8E2022%2F10%2F6%E6%99%82%E7%82%B9%E3%81%A7%E3%81%AE%E6%9C%80%E6%96%B0%E7%89%88%E3%81%AF4.1.0%E3%81%A7%E3%81%99%EF%BC%8E%E6%9C%80%E6%96%B0%E7%89%88%E3%81%AF%20%E3%81%93%E3%81%A1%E3%82%89%20%E3%81%8B%E3%82%89%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%EF%BC%8E%20...%203%20MPC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%20)を参考にしてみてほしい。

gcc-9がインストール可能になったなら、次のコマンドを入力。

`sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9;sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 9`

登録もしておく。

`sudo update-alternatives --config gcc；sudo update-alternatives --config g++`

最後にちゃんと出来ているか確認

`gcc -version`

これでgccは完了です。

# ビルド
### プロジェクトデータ

今回使用するのはev3rt-release...ではなく、githubで公開されている方を使用する。

適当な場所（home/username/が個人的にお勧め）でev3rtフォルダを作成。その中のパスで以下のコマンドを入力

`git clone https://github.com/ev3rt-git/ev3rt-hrp3-sdk.git`

:::note warn
`ls sdk`で要チェック。
おそらくsdk内は作成されていないので、その場合は以下のコマンドを。

`git clone https://github.com/ev3rt-git/ev3rt-hrp3-sdk.git`

ファイル名が分かりにくいので、変更しておいたほうが後々が楽になる。
:::

作業フォルダに移動。

`cd sdk/workspace`

ここで、テスト用のサンプルプログラムを実行する。

`make app=helloev3`


# 感想
これで出来る...はず。だ、け、ど
正直これはあくまで方法の一つに過ぎないので、他に最適な方法があるんじゃないかと今でも思っている。とはいっても解決したのはついさっきだが。
私はここに至るまで最低20時間以上は費やした。
一度諦めて、Live ShareでパートナーのPCを介してコンパイルしたこともある。それもありだと思う。
だからもし、このような問題に直面した場合、これをまあ参考程度に気に留めておいて欲しい。

至らないところもあったと思う。
それでは。
【SwiftUI】Realmを使ってみた

# はじめに
普段、ローカルデータベースを使うときはCoreDataを使うのですが、Realmを使う機会があったので記録しておきます。

https://github.com/realm/realm-swift

# 実装
```swift:RealmEntity
import Foundation
import RealmSwift

public class RealmEntity: Object {
    @Persisted(primaryKey: true) public var id: Int = 0
}
```

```swift:RealmRepository
import Foundation
import RealmSwift

public protocol RealmRepositoryProtocol {
    func get() -> Results<RealmEntity>
    func add(_ bookmark: RealmEntity) throws
    func delete(_ bookmark: RealmEntity) throws
}

public final class RealmRepository: RealmRepositoryProtocol {
    let realm: Realm
    
    public init(realm: Realm = try! Realm()) {
        self.realm = realm
    }
    
    public func get() -> Results<RealmEntity> {
        realm.objects(RealmEntity.self)
    }
    
    public func add(_ bookmark: RealmEntity) throws {
        try realm.write {
            realm.add(bookmark)
        }
    }
    
    public func delete(_ bookmark: RealmEntity) throws {
        guard let bookmark = realm.object(ofType: RealmEntity.self, forPrimaryKey: bookmark.id) else {
            throw NSError(domain: "primary key not found", code: 0)
        }
        try realm.write {
            realm.delete(bookmark)
        }
    }
}
```

```swift:ContentView
import SwiftUI

struct ContentView: View {
    private let repository = RealmRepository()
    var body: some View {
        VStack(spacing: 50) {
            Button {
                print(Array(repository.get()))
            } label: {
                Text("取得")
            }
            
            Button {
                let realmEntity = RealmEntity()
                realmEntity.id = 0
                try? repository.add(realmEntity)
            } label: {
                Text("保存")
            }
            
            Button {
                let realmEntity = RealmEntity()
                realmEntity.id = 0
                try? repository.delete(realmEntity)
            } label: {
                Text("削除")
            }
        }
    }
}
```

# おわり
CoreDataより数倍簡単でした。
今度からRealmを使おうと思います。
ポリモーフィズムって何？

# ポリモーフィズムって何？
さて今回は前回に引き続きオブジェクト指向について勉強していきます。
表題にはポリモーフィズムって何？と書いてますが、前回の[class](https://qiita.com/soichiro-saeki/items/5d866296ef082228adc3)に引き続きオブジェクト指向設計に重要な
ポリモーフィズムと継承について書いていきます。


## ポリモーフィズム
"オブジェクト指向でなぜつくるのか"によるとポリモーフィズムはメソッドを呼び出す側を共通化するということらしいです。
よくオブジェクト指向について説明している資料みると動物の鳴き声が出てくるのでそれに倣って…

```
# 動物の鳴き声
class Animal
  def make_sound(sound)
    puts sound
  end
end

my_animal = Animal.new
my_pig = Animal.new
my_dog = Animal.new

my_animal.make_sound("The animal makes a sound")
my_pig.make_sound("The pig oinks")
my_dog.make_sound("The dog barks")

```
~~という感じで、一つのメソッドに対して別の引数を渡したときに別の振る舞いをすることができるような状態をポリモーフィズムというのかな？~~
間違ってたら誰かコメントください💦
→コメントありがとうございます！やっぱり違うみたい。もうちょい勉強しないと


## 継承

継承を使用すると、サブクラスがスーパークラスのメソッドやプロパティを継承することができます。これにより、コードの再利用性が高くなり、コードのメンテナンスが容易になります。

```
# 
class Animal
  def make_sound
    puts "The animal makes a sound"
  end
end

class Pig < Animal
  def make_sound
    puts "The pig oinks"
  end
end

class Dog < Animal
  def make_sound
    puts "The dog barks"
  end
end

my_animal = Animal.new
my_pig = Pig.new
my_dog = Dog.new

my_animal.make_sound
my_pig.make_sound
my_dog.make_sound
```



やっぱり動きは分かってもまだ言語化できるレベルに理解が追いついてない感じがあります。
何かいい学習方法があれば教えてほしいですね。
AWSアカウントを分割する理由

いまやAWSアカウントは環境ごと、または組織ごとに作成して運用するマルチアカウント構成が基本になっています。
改めて分割することで得られるメリットをまとめました。
## 分割するメリット
### 環境ごとのコストを把握しやすくなる
使用したAWSリソース分の請求はAWSアカウントごとに行われるので、環境ごとにコストがどれだけかかっているかを容易に把握・管理できるようになります。

### 誤操作による事故を防ぐ
例えば開発環境用と本番環境それぞれのEC2インスタンスが同じアカウントに存在する状況で開発のEC2だけを停止したい場合、
コンソールから選択を誤って本番環境のEC2を停止してしまう...のようなオペレーションミスが起こる可能性を下げることができます。
また権限管理もしやすくなります。

### アカウントごとのリソース数制限による事故を防ぐ
AWSでは1アカウントで作成できるリソース数に上限が設けられています。
これは`サービスクォータ`と呼ばれ、誤操作等で大量のリソースを作ってしまい大支出になるのを防ぐための仕組みです。
（サービスごとに上限値が設けられていて、一部サービスは申請することで引き上げることが可能です。）
アカウントを分けることで「開発環境のリソースの作りすぎで本番環境のリソースが作れない」のような事故から防ぐことができます。

## マルチアカウント構成に関連するAWSサービス
### AWS Organization
https://aws.amazon.com/jp/organizations/

マルチアカウント構成を採用する場合、AWS Organizationを活用することで以下のメリットを得られます。
- 全てのアカウントの請求情報を1カ所で管理することができます
  - アカウントごとのコストを確認することができます
- 複数のアカウントを組織と呼ばれるグループでまとめて一括で権限を設定することができます

### AWS IAM アイデンティティセンター
https://aws.amazon.com/jp/iam/identity-center/

AWS IAM アイデンティティセンター（旧AWS SSO）を活用することで、アカウントへログインするためのID、パスワードを１カ所で管理できます。

## Customize AWS Console Header（Chrome拡張機能）
https://chrome.google.com/webstore/detail/customize-aws-console-hea/cjpikjjajakahcpglopbmobcoiibcpcd

マルチアカウント構成で分けているとはいえ、誤って意図しないアカウントのコンソール上で誤操作を起こすリスクが存在します。
この拡張機能を使うことでアカウントごとのAWSコンソールのヘッダに好きな色をつけることができるため、そのリスクを下げることができます。
私の場合は本番環境を赤、検証環境を黄色、開発環境を緑色に設定しています。
ラズベリーパイ　備忘録

押し入れに眠ってたraspberry pi b に色々入れて勉強してみる

取りあえず

１，OS入れてみる
２、db入れてみる
３．apache入れてみる
４．php入れてみる
５．２～４でHP作ってみる
６．ラズパイにセンサーつないで、dbに保存→HPでグラフ化


暇つぶし程度にちまちまやっていくを目標に
RWKVの動作画面キャプチャ集

この記事はRWKVの動作スピードを載せただけのものです。
クラウドでの環境構築やGPU購入時の参考になるかもと思い公開しています。
個人的にもどれがどのくらいの早さだったかすぐ忘れるので、、

GPU買ったら追加するかもしれません。RTX4090が欲しいです。

追記）
RTX4090持ってる方がyoutubeにまとめているものを見つけました。RWKV14bでもすごい速さで、これは買おうかホントに迷う。

https://www.youtube.com/channel/UCrxB82I1k4SMSh4Lwmt4Oaw


## 14B系、A100(40G)
![RWKV14b-A100.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/7040f2a2-60fb-f478-008a-15f5a54e8817.gif)

## 14B系、T4(16G)×2
![RWKV14b-T4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/624c00d2-a4d8-8317-3396-d4a618feb632.gif)

## 14B系、RTX3060(12G)
![RWKV14b-RTX3060.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/9d802a5f-061f-ce8f-2be1-c85bb0e77d2b.gif)

## 14B系、i7-10700KF(96G)
![RWKV14b-i7.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/5a6cba69-46ec-e2bb-e214-be0e88f45825.gif)

## 7B系、RTX3060(12G)
![RWKV7b-RTX3060.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/66085e90-f551-0702-06a5-a84fbc15e3c5.gif)

## 7B系、i7-10700KF(96G)
![RWKV14-i7.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301527/b8ceef14-7244-8630-0005-95234a4d6212.gif)


# リンク集

環境構築法はこちら↓

https://zenn.dev/karaage0703/articles/d58d79d8e77ab8

https://qiita.com/yo-yamada/items/ee71cdbb1d95fea5eaf8

https://qiita.com/ahinore@github/items/90189dc2e99baca29f8d

https://qiita.com/Programmer-cbl/items/000da791481ffe4f6085


精度検証はこちら↓

https://qiita.com/Programmer-cbl/items/250393479851d31fbf69
半導体学んだことメモ



# 半導体の性質がトランジスタにどのように影響しているのか


１９世紀の末電波の時代に使われた(無線通信，ラジオの検波器として)
性能は不安定のため，真空管に置き換わられた
真空管には限界があるから第二次世界大戦のときレーダー開発をするときに巨額の研究費が半導体に注ぎ込まれた
不純物がある方が検波器として優れている
戦後，半導体で増幅器を作ろうとした，それまでの真空管はアナログ過ぎた
Nタイプ(-)とPタイプ(+)を組み合わせ半導体だけで増幅器を作り，トランジスタを作った
間の層に入れた信号を右から+の大きな信号として取り出すには層を薄くする必要がある
PNP

# トランジスタの増幅作用とスイッチング作用について

## 半導体と導体
半導体は原子価殻内の電子が多いため通常時は絶縁体であるが，外部エネルギーを供給した場合，伝導帯が非常に近いため電子が飛び出し電流を通す導体となる

## 半導体鉱物
安四面銅鉱
黄鉄鉱
黄銅鉱

## トランジスタとは
ピンは「エミッタ」，「コレクタ」，「ベース」の３つがある
PNPの場合，N層に繋がるベースピンに高電圧をかけるとトランジスタが全開になり，すべての電流を流す

# 半導体の種類と何が流行っているのか

## アナログとデジタルとは
半導体の基本性能ははOn/offで処理を実行すること
例)MPU，演算を01で行う
例)メモリーは0で電化を保持，１で読み出す書き込み
例)CMOSセンサーは０で信号なし，1で画像あり
アナログは入力信号に対する出力信号の大きさを強めたり弱めたりできる

## 製造方法
「CMOS」，「バイポーラプロセス」，「Bi-CMOS」がある
・CMOS
スマホの半導体とかMPUもこれで製造
集積，微細化が用意，シリコンの表面層だけを利用
漏れが少なく，応答性が早いが，ノイズを生み，それに敏感のためMLCC(コンデンサ)を載せてノイズを除去しなければいけない，iphoneに200くらい実装されている
・バイポーラプロセス
瞬発力があり，耐圧が高く，大電流を制御でき，ノイズに敏感
微細化が困難
・Bi-CMOS

|昔|現在| 
|:-----------|------------:|
|システムLSI(SoC)|	システムLSI(SoC)|
|マイクロプロセッサ|	マイコン/MPU|
|メモリ	|DRAM，フラッシュメモリ(NAND/NOR)|
|カスタムLSI|	ASIC，FPGA|
|専用IC/LSI|	ASSP|
|汎用リニアIC|	汎用リニアIC|
|光半導体デバイス(LED，半導体レーザー，CMOSセンサー)|光半導体デバイスCMOSセンサー類(用途開発)|
|トランジスタ|	|
|ダイオード|	パワーデバイス(用途開発)|


# 演算に特化した半導体郡
## システムLSI
一つのチップ上に様々な半導体を実現(SoCシステムオンチップ)SiCとは
CPUコアとかメモリとかね
パッケージでそのシステムを実現する
キオクシアのメモリには半導体が16枚の半導体が積層されている
例)アップルのM1チップとかは一個の半導体チップ上にCPU/GPU/DRAMなどの機能を実現，(分野特化型の)AI半導体などもシステムLSIとして構成
特注品みたいな感じで高い

製造サイクルを短くできるTSMCなんかが適している一方インテルとかは難しい

## マイコン(マイクロコントローラーユニット)
演算と指示出しを行うものなので，車とか家電に使われている(市場規模は1.6兆)
MPUの搭載があるため，コードを格納実行できるフィルターとか付随機能なども内包されている

## MPUマイクロプロセッサ(マイクロプロセッサユニット)
汎用的で演算に特化しているもの
CPUをLSI上に実現したもの
インテル(MPUCPUの王者だった)とAMDがバチバチやっている

## ASIC(機能を組み合わせて設計している)
アップルブロードコムとかが作っている
FPGA
機能をあとから付加することができ，あとから動作を変えられる

## ASSP
データセンタに送る前のデータ前処理用の半導体とかに使われる
エッジデバイス内で処理計算をする必要がありそれに使われる
クアルコム，インテル，nvidiaとか

## NANDフラッシュメモリー，DRAM
→SSDとかに使われているストレージ系
サムスン，インテル，キオクシアとかが使われている
→DRAM
電源接続時にのみ記憶

## 光半導体
LED，レーザーセンサー
・センサー類2.2兆円
CMOSセンサーはスマホとかに使われる
ソニー，サムスン
IoT関連のやつもある
加速度センサー，音響センサー，ジャイロセンサー，光電センサー

## パワーデバイス
モータ指導や制御効率的な回転運動を司る
いいところは小さくできるところ，SiCという新しい材料で作ると軽量化と効率性

## SiCという新材料の良さ
対応領域が拡大している大容量かつ高速
CO2排出0を支えるキーデバイスになる
小規模な発電が増えることから需要が高くなることが期待されている，世の中の電気はロスだらけである変換のロスが発生するため

# 次世代半導体の製造テーマ
・2XD
・3Dパッケージの進化
・微細化・高集積化
・チップレット化
・ポストEUV　３D技術
・マテリアルイノベーション

## 製造工程
・前工程は微細化がテーマだが頭打ちになっている
・後工程は3Dパッケージ化により，システムLSI，ASICを実現している．

## SoCとSiP
SoCは一つの半導体チップにプロセッサやメモリなどの機能を搭載しているもの
SiPは一つの樹脂パッケージの中に別機能を持つ複数のチップを格納しているもの



\:kissing_closed_eyes: chu☆

https://www.youtube.com/watch?v=IPw4PMOFu_o
ライバルがコーディングしていることを知らせてくれる「Sanpo」を作った

![main.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/b5eba25d-6a11-8a6e-3129-63545b6a4a51.jpeg)
# はじめに

最近ChatGPTを見ない日はないほどネットで話が上がっています。
エンジニアもそろそろChatGPTを使いこなして何かを開発しないといけないのではと思ったので、今回は簡単なアプリを作りながらツールとして使ってみることにしました

今回はこちらのアプリケーションを作成しました

https://github.com/jinwatanabe/sanpo

作成時間は5時間ほどで、ChatGPTを活用するために新しい技術を取り入れてみました

# どんなアプリ？

このアプリでは、GitHubのコミット(通称:草)を確認して、今日コミットがされているかを1日1回定期実行で確認してLINEに通知してくれます

1. コミットされているかを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/b9c9e502-45eb-f8bf-90eb-dbcec6a73673.png)

2. コミットされていたらLINEに通知
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/cb71f5db-a2e7-3656-c08d-92eb8c45c2e1.png)

# なぜ作ったのか

転職をして周りがかなりつよつよのエンジニアばかりの中で仕事をしています
周りのエンジニアは毎日のようにプライベートでコードを書いている中で、よわよわの私が毎日コードを書かないと差を埋めるどころか、差をつけられてしまうなと思いました

しかし、毎日コーディングを仕事とは別にやるのはなかなかモチベーション維持が難しいです
そこで会社の人やライバル視しているエンジニアが今日も勉強(コーディング)しているぞというのを通知してくれるLINEボットがあれば負けず嫌いの私は頑張れると思いました

また、自分のコミットを監視することで毎日コーディングする意識をつけることができます

# アプリ名について

今回「Sanpo」と名付けました
なるべくリポジトリ名は自分が気にいるような名前にして、そのリポジトリがたくさん増えることでおしゃれなアカウントを目指しています

「Sanpo」にしたのは、他の人のコミット(草)を見に行くということから、公園に緑を見に歩くというイメージでつけました

# 使用技術

- Deno
- TypeScript
- GitHub Actions
- LINE API
- ChatGPT (ツールとして)

今回は`Deno`を利用して開発を行いました
いままでNodeしか使ったことがなかったのですが、仕事で利用する機会があり良いなと感じたので挑戦します

# 開発について

それぞれの技術について開発して思ったことを書いていきます

## Deno

Denoを今回初めて使ってみましたがかなり良いなと思いました
`npm install`のようなものがないのでリポジトリが膨れ上がることがありません
よく使うライブラリはDenoにも同じようなものが用意されているので困りませんでした

開発は基本的に`TDD`で行っており、TypeScriptの場合`Jest`を使っています。しかし、Denoの場合はDenoのテストライブラリが用意されているので、Jestと同じ感覚で使うことができていちいちインストールする必要もなく使えました


## TypeScript

クリーンアーキテクチャでTDDで開発しました
いつもどおりの開発だったので特に困ったことなどはありませんでした
だんだんTypeScriptが好きになりました

## GitHub Actions

パイプラインの中では

1. テスト実行
2. スクリプトの定期実行

を行っています

定期実行をどのようにするか迷っていた中でGitHub Actionsでできることを知ったので今回初めて試してみました

実行時間から5-10分ほど遅れて実行されてしまうので利用できるシーンは限られますが、今回は特に時間は気にしないので利用することにしました

## ChatGPT

主にわからないことを聞くツールとして利用しました
課金しておりChatGPT-4です

Deno周り、Github Actionsの定期実行について聞いたところほとんど他に調べることなく実装することができました

いまのところかなり便利だなという印象です
エンジニアの仕事無くなりそうと思いました

# こだわり

モチベーションをあげるためにこのアプリを作ったわけですが、これ以外にもモチベーションをあげるための取り組みをしています

それが「**おしゃれなリポジトリ**」を作ることです
リポジトリのバナー画像をみていただけるとわかるかと思いますが、いい感じです
この画像は`Stable Diffusion`で作成しています。このようにリポジトリにバナー画像を用意するだけで愛着がわきます。そしてそのようなリポジトリをたくさん作ってシリーズ化していこうという気分になります。

アプリケーション自体も、規模が大きいものではなく小さいものにするようにしています。
そのアプリの中で試してみたい技術を使うようにしています

またアプリケーションは自分が使いたいものを作るのも意識しています

技術的なこだわりは今回はないです(笑)

またこの記事のように作ったアプリをまとておくのも継続のコツかなと思っています

# おわりに

個人開発した記録として記事を書いてみました
今後は記事に出して終了として行こうかなと思います

このアプリにはまだまだ改善点は多くあります
- コミット数も通知する
- コミットしてないときも通知する
- 定期実行の回数を増やす
...etc

今回はこれで終わりの予定ですが、内容としては初心者でも理解できるくらいのアプリケーションになっているので**プルリク**お待ちしております！

# 参考

https://github.com/jinwatanabe/sanpo
Pythonインストール

# 背景
新しいPCを買ったので、再度pythonのインストールを行った

# 方法
1. やり方わからなかったので、とりあえずネットで検索
Python環境構築ガイド
https://www.python.jp/install/windows/index.html

1. 通常のと、Anaconda版があるみたいだけど、通常版をインストールする
通常版はわかりにくいからと、こっちのページを案内された
とくにこだわりはないので、最新版3.11をインストール
https://pythonlinks.python.jp/ja/index.html

1. パスの設定を忘れるとややこしいので、1の✓はしっかりとする![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676445/31abbd62-1069-9a4f-f9d9-ef4e5e2d0429.png)

1. コマンドプロンプトを開いて ```python```と入力し、インストールしたバージョンが
出てくればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676445/d548d92a-b694-bd96-448c-e7dc69478bed.png)

1. おまけに、
PowerSHellの初期設定もおこなう.
以下をpowershell内で入力
```Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force```

    意味は
    ```Set-ExecutionPolicy RemoteSigned```
    実行ポリシーを変更。「RemoteSigned」はローカルは可、インターネットダウンロードは署名付きを許可。
    
    ```-Scope CurrentUser```
    コンピューターの現在のユーザーのグループ 
    ```-Force```
    強制的に上書き

おわり

### 参考
https://www.python.jp/install/windows/index.html
https://harikofu.blog.fc2.com/blog-entry-36.html
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.3
デザインパターン、何それおいしいの？

# はじめに

プログラムを書くにあたり、ファイル構成を最近意識するようになりました。また、最近よく聞くドメイン駆動って何だろう。そんな中、デザインパターン学びと良いよと、昔講師が言っていたのを思い出し、勉強してみました。

デザインパターン何それおいしいの？そういうレベルですので、間違っていることなどコメントにてあれば教えて頂けると助かります。
<small>※以下はChatGPT4.0で学習した内容です。</small>
# デザインパターンとは

ソフトウェア設計において、課題に対して効果的な解決策のパターン集です。
要は、**旧来のエンジニアが考え出した問題の解決策の集めたツヨツヨナレッジ**ですね。
過去のプロジェクトや経験から得られた知識を、再利用可能で柔軟な設計原則として共有することを目的としていて、デザインパターンは、**コードの再利用性、拡張性、保守性**を向上させることができるらしいです。それだけで学習する価値がありそうですね


GoF本というものにたくさん記載されているらしい

# デザインパターンは大きく分けると三つ

生成パターン、構造パターン、振る舞いパターンに分けられる。

### 生成パターン

オブジェクトの生成方法に関するパターンで、オブジェクトの生成プロセスを効率的かつ柔軟にすることを目的としています。これにより、オブジェクトの再利用性と拡張性が向上します。

### 構造パターン

オブジェクトやクラスの構成方法に関するパターンで、ソフトウェアアーキテクチャの柔軟性と効率性を向上させることを目的としています。これにより、システムの保守性や拡張性が向上します。

### 振る舞いパターン

オブジェクト間の相互作用や通信方法に関するパターンで、オブジェクト間の関係を効果的に管理し、柔軟で再利用可能なコードを実現することを目的としています。これにより、システムのオブジェクトの再利用性と拡張性が向上します。

| カテゴリ | パターン名 | 説明 |
| --- | --- | --- |
| 生成パターン | Singleton | クラスのインスタンス化が1つだけであることを保証します。 |
|  | Factory Method | オブジェクトの生成をサブクラスに委譲し、依存関係をなくします。 |
|  | Abstract Factory | 関連するオブジェクトのグループを一貫して生成するインターフェースを提供します。 |
|  | Builder | 複雑なオブジェクトの構築プロセスをカプセル化します。 |
|  | Prototype | 既存のオブジェクトを複製することで新しいオブジェクトを生成します。 |
| 構造パターン | Adapter | 互換性のあるインターフェースに異なるインターフェースを変換します。 |
|  | Bridge | 抽象化と実装を分離し、それらを独立に変更できるようにします。 |
|  | Composite | オブジェクトの階層構造を構築し、個々のオブジェクトを同一視できるようにします。 |
|  | Decorator | オブジェクトに新しい機能を動的に追加する柔軟な構造を提供します。 |
|  | Facade | 複数のサブシステムを簡単なインターフェースで外部に公開します。 |
|  | Flyweight | 大量の類似オブジェクトを効率的に共有し、メモリ使用量を削減します。 |
|  | Proxy | オブジェクトへのアクセスを制御するための代理オブジェクトを提供します。 |
| 振る舞いパターン | Chain of Responsibility | 責任の連鎖を通じてリクエストを適切なオブジェクトに渡します。 |
|  | Command | リクエストをオブジェクトにカプセル化し、依存関係をなくします。 |
|  | Interpreter | 文法を表現するためのクラス階層を定義し、言語を解釈します。 |
| | Iterator | 集合体の要素に順番にアクセスする方法を定義し、要素を分離します。 |
|  | Mediator | オブジェクト間の相互作用をカプセル化し、直接相互作用せずに協調できるようにします。 |
|  | Memento | オブジェクトの内部状態をキャプチャし、後で復元することができるようにします。 |
|  | Observer | オブジェクト間の一対多の依存関係を定義し、状態が変更された際に、すべての依存オブジェクトに通知します。 |
|  | State | オブジェクトの内部状態に応じて、オブジェクトの振る舞いを変更します。 |
|  | Strategy | 系列のアルゴリズムを定義し、それらを互換性のあるインターフェースにカプセル化し、アルゴリズムを選択して実行できるようにします。 |
|  | Template Method | オペレーションのスケルトンを定義し、サブクラスでオペレーションの詳細を実装できるようにします。 |
|  | Visitor | オブジェクト構造の要素に対する新しい操作を追加することができる柔軟性を提供します。 |

# 最後に

次回、Facade patternについて勉強し説明したいと思います

>[ChatGPT4.0](https://openai.com/)
IT用語のメモ（備忘）

# IT関連用語のメモ

・バッククォート
`@が書いてあるキーにある、「'（シングルクォート）」みたいなやつ`
このバッククォートで文字列を囲うとコードの一部を表現できる

・SaaS
インターネット経由で利用できるソフトウェアのこと

・Markdown記法
「# 見出し」、「- リスト」などシンプルにテキストを構造的に記述するマークアップ言語の一つ

・DX
>企業が、ビッグデータなどのデータとAIやIoTを始めとするデジタル技術を活用して、業務プロセスを改善していくだけでなく、製品やサービス、ビジネスモデルそのものを変革するとともに、組織、企業文化、風土をも改革し、競争上の優位性を確立すること。
引用：https://www.nri.com/jp/knowledge/glossary/lst/alphabet/dx

・ネスト
入れ子のこと
個人的なブックマーク

自身が迷った時及び参考にさせてもらった記事及び外部ページを記載
※気付き次第、随時更新

# VirtualBox関係
https://qiita.com/paco_itengineer/items/3997b79170924ed79fb7

https://qiita.com/tireidev/items/9eb2dd106307dba0c1c3

# Subversion,リポジトリ
WandiscoSVN

https://qiita.com/K-029/items/30b069073ae04aa4ae43

VisualSVN

https://go-journey.club/archives/13911


# Active Direcotory
https://nwengblog.com/winsv-ad-attributes/

https://social.technet.microsoft.com/wiki/contents/articles/12814.active-directory-lastlogontimestamp-conversion.aspx

https://atmarkit.itmedia.co.jp/bbs/phpBB/viewtopic.php?topic=18527&forum=6

※Large Integer/Intervalの存在は知らなかったので、Win32APIのFileTimeToSystemTimeに辿り着いた

# Excel/VBA
https://qiita.com/Q11Q/items/351b3ec01b58dfcbad57

※実際のファイルタイムを調べる為ではなかったが…

https://qiita.com/Q11Q/items/c688646dfdb5923c0ebd

ソースコードExport時の参考資料

http://officetanaka.net/excel/vba/vbe/

該当のページでは一度ワークシートへ転記した上での実装をされているが
VBProject > CodeModuleレベルでの実装を行い、ワークシートへの一覧出力が出来ない物か
試みたいがためにメモとして取る

https://excel-vba.jpn.org/section/37/FunctionList

# WebDriver

https://sqa.stackexchange.com/questions/7898/selenium-c-4-0-release-says-you-can-hide-the-command-prompt-how-do-you-actual

※「Starting ChromeDriver～」で始まるコンソールログの非表示化

# Visual Studio 2022
・単一実行ファイル化してビルドする

https://fsbblog.jp/archive/entry-181.html

https://qiita.com/devneko94/items/52faeb5964c2696d7c1b

https://qiita.com/OkitaSystemDesign/items/7bb4463b946dae50c96c

> - [x] **単一ファイルの作成**
 
発行手段までは到達したが、「**単一ファイルの作成**」をONにし忘れて大量にファイルが出力してしまい
「なんだ、これつかえねぇなぁ！」となってしまわない様に(1敗)

・ConsoleプロジェクトでSystem.Windows.Formsを参照する

https://qiita.com/ymd65536-ms/items/c2b289b30d4b136e160b

https://blog.yucchiy.com/2021/08/dotnet-windows-form/

> 注意点有り

https://takap-tech.com/entry/2020/08/31/231836

・効率化

https://qiita.com/soiyayios/items/2c67231cfa8ae758c92e

# Visual Studio Code
https://zenn.dev/yumemi_inc/articles/45ffb104c1d0a9

https://kinsta.com/jp/blog/vscode-extensions/

# Font
https://monaspace.githubnext.com/

# Windows 10 標準アプリ削除
https://ygkb.jp/471#%E8%8B%B1-office-%E3%82%92%E5%A7%8B%E3%82%81%E3%82%88%E3%81%86
売り場の商品の残り具合を自動で判断し、値引きに活かしたい

こんにちは、2回目の投稿です。
私はスーパーマーケットで惣菜部門のチーフとして働いている27歳男性です。

## 毎日の業務
スーパーでは商品が売れ残って、廃棄にならないために __値引き__ を実施しています。
お惣菜はその日で消費期限が切れる商品がほとんどのため、毎日、値引きの作業をしています。
値引きは __担当のパートさん__ が基本的には __マニュアル通りの値引き__ を実施してくれています。

## 値引きにおける課題

マニュアルで __値引きの時間帯__ や __何％オフにするか__ はおおよそ決まっていますが、
 __気温、天気__ などの外的要因（雨であればおおよそ客数が２割減します）や __発注過多、製造過多__ による内的要因により、
マニュアル通りやると、廃棄が __千円単位__ で多く出てしまうことがあります。
チーフがいれば逐一値引き変更の指示をしていますが、 __不在時はそうはいきません。__ 

### チーフ不在時の値引き方法による廃棄過多。

これが今、職場で抱えている課題の一つです。
まずは  __廃棄率を0.5%削減__ を一つの目標とし、
日々、パートの教育など、課題解決に奮闘しています。

今回は課題解決の一つの手段として、__機械学習の画像認識__ を用いて、
自動的に売り場の残り具合から、値引きの割合を判断するという方法を試してみました。

## 使用するツール
・Teachable Machine
・Node-RED
・OpenWeatherMap
・LINE Notify

## 作り方
完成した模様はこちらからご覧ください。

https://twitter.com/sato45287047196/status/1649045268300697602?s=20

まず最初に __Teachable Machine__ で画像判定をします。
今回は売り場に商品が多ければ __半額__ 、少なければ __30％オフ__ で判定させました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294174/9596bbf7-26de-8d55-72a8-f29da6635d9e.png"width=75%>

次にNode-REDでTeachable Machineで得られた画像判定の結果に
 __天気の良し悪し__ を加味し、最終的な値引き判断をLINEに送るという仕組みを作ります。

こちらが完成したNode-REDの __フロー図__ です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294174/1c5e64fc-2a35-b0c8-141d-16f4c68c0c82.png"width=75%>

カメラノードのボタンから写真を撮り、Teachable Machineノードで画像判定をします。
次にswitchノードで判定によって次のアクションを変えていきます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294174/e2f7704d-35e4-f4f6-fe59-8163c5343659.png"width=75%>

半額であれば __line notify__ ノードに情報を送ります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294174/69795c63-8878-4961-4548-574e29a931ce.png"width=75%>


情報を送ると、このようにLINE上で結果が得られます。

判定が30％オフの場合は天気によって値引きを変えたいので、
 __open weather mapノード__ に情報を送ります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294174/a44c6843-97a5-ef74-61dd-ebe4cff8ee08.png"width=75%>

情報を送るとデバックメッセージに選択した地点の現在の気象情報が表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294174/ef165b6b-022e-e560-66de-cbc3c951323d.png"width=75%>


open weather mapノードの設定はこのようにしました。
 __事前にopen weather mapのサイトからAPIキーを取得する必要があります。__ 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294174/15e0b723-87ee-5ca7-60f0-bc5763f7dbd2.png"width=75%>


次にデバックメッセージに表示されている気象情報の中から、天気の情報だけを抽出したいので、
templateノードの中の「payload」の後に「weather」を入れます。

Clear（晴れ）、Clouds（曇り）、Rain（雨）などの天気の情報を抽出できたので、
さらに天気によって値引きの割合を変えていきます。
今回は
 __晴れ＝30％オフのまま__
 __曇り＝30％オフのまま__
 __雨＝半額に変更__
と決めました。
雨だと客数が減り、これ以上の集客が見込めず、早めに半額にしないと廃棄に繋がります。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294174/3011919d-18e8-a2d3-d778-e8fd6c29e690.png"width=75%>

 __changeノード__ で天気の情報から値引きの情報に変え、line notifyノードに送ります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294174/592a8423-2ded-0514-7e7c-9596ebc64f78.png"width=75%>

結果、画像判定で、30％オフだった場合、天気によって値引きを変えるという仕組みができました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294174/eec47166-b5e2-f524-c8ec-1925d222951a.png"width=75%>

最後に値引きの判定の流れを図にまとめました。

## 今後の展望
今回は売り場の商品の残り具合と天気という二つの要因で値引きの判断をしましたが、
今後は曜日、気温、特売日、など、いろいろの内的要因、外的要因を加味した精度の高い
AIを作っていき、 __よりチーフの判断に近いツール__ を目指していきたいと考えています。
【Svelte】親から子コンポーネントのスタイルを指定する方法

最近の開発で同じコンポーネントを利用したいのに、ページによって文字色やサイズを変更しないといけないシチュエーションがありました。この時に上手く実装できるのか試行錯誤して自分的にしっくりきた方法を紹介させていただきます。

# 親コンポーネントからクラス名とスタイルを指定する
先に結論をお伝えすると、このような実装になります。

```html:Child
<p class={$$restProps.class || ''}>Child component</p>
```

```html:Parent
<Child class="red" />

<style lang="scss">
:global(.red-text) {
  color: red;
  font-size: 16px;
}
</style>
```

## なぜ:global()とクラス名をプロパティの合わせ技になったのか
Svelteで親コンポーエントから子コンポーネントのスタイルを指定する方法として、:global()を利用する方法、クラス名をプロパティにする方法、スタイル要素をプロパティにするなどいくつかあります。

どちらか一方の方法でも親コンポーネントから子コンポーネントのスタイル指定は実装可能なのですが、メリット・デメリットを考慮した結果合わせ技になりました。
それぞれのメリット・デメリットを表にまとめました。

| 方法 | メリット | デメリット |
|:-----------|:------------|:------------|
| :global()を使う       | 呼び出し元の親コンポーネントからスタイル指定できるので、コーンポーネント毎にスタイルが変化することが分かりやすい        | コンポーネントごとに指定しても最後に呼び出されたスタイルに上書きされる[^1]         |
| クラス名をプロパティにする     | 親コンポーネントからクラス名を指示するだけで済む      | 呼び出し元のコンポーネント毎にスタイルが変化することが分かりづらい       |
| スタイル要素をプロパティにする     |   呼び出し元の親コンポーネントからスタイル指定できるので、コンポーネント毎にスタイルが変化することが分かりやすい    | プロパティが増えすぎると管理が面倒になる       |

[^1]:コンポーネントライブラリ「Storybook」でこの事象が起きていて、この方法は断念しました。

### 参考
比較した３つの実装例も参考に残しておきます。
コードを比較してみて、みなさんの環境でベストだと思う方法で実装してください。

### :global()を使う方法
```html:Child
<p>Child component</p>
```

```html:Parent
<div class="red-text">
  <Child />
</div>

<style lang="scss">
.red-text :global(p) {
  color: red;
  font-size: 16px;
}
</style>
```

### クラス名をプロパティにする
```html:Child
<p class={$$restProps.class || ''}>Child component</p>

<style lang="scss">
.red-text {
  color: red;
  font-size: 16px;
}
</style>
```

```html:Parent
<Child class="red-text" />
```

### スタイル要素をプロパティにする
```html:Child
<script lang="ts">
  export let color: 'red' | 'blue'
  export let fontSize: 'S' | 'M' | 'L'
</script

<p class={color} {fontSize}>Child component</p>

<style lang="scss">
.red {
  color: red;
}
.blue {
  color: blue;
}
.S {
  font-size: 12px;
}
.M {
  font-size: 16px;
}
.L {
  font-size: 20px;
}
</style>
```

```html:Parent
<Child color="red" fontSize="M" />
```

---

そもそも親コンポーネントから子コンポーネントのスタイルを制御するのはアンチパターンな気がしてならないですが...w
少しでもお役に立てれば幸いです🙇‍♂️
【GAS】Slack Tokenをプロパティに保存する

Slackのトークン確認
![slack-tokneの場所.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2640876/a0d659ab-61ee-e083-0da3-e831e2f62079.png)


```
function SetScriptProperty() {
  PropertiesService.getScriptProperties().setProperty('slack_token', 'ここにslackAPIトークンを入力する');

}
```
npm（Node.js）をパッケージインストールした後、VSCodeのターミナルでnpmが認識されないときの対処法

## TL;DR

VSCodeの再起動で解決する。
※23年4月15日現在の情報

Microsoft Windows [Version 10.0.19044.2846]
VScode バージョン: 1.77.3 (user setup)

## 参考
https://qiita.com/coticoticotty/items/b730ecfe69372bd69a3e

こちらの記事ではWindowsの再起動が必要でしたが、VSCodeの再起動だけで解決しました。

## 教訓
エンジニアあるあるだけど難しく考えがちで、PATH通ってないのかとか、他のパッケージと競合したのか、など考えていた
先入観だけに囚われず、奢らず謙虚に学んでいきたい。
【Bash】リダイレクト先が書き込めない場合、そのコマンドは実行されない

# TL;DR
```shell:bash
$ #実行すると標準出力と標準エラー出力に文字列を出す関数を作る
$ f() { echo "stdout"; echo "stderr" >&2; }
$ f
stdout
stderr
$
$ #リダイレクトに成功する場合、標準エラー出力が画面に出ることを確認
$ #つまり"stderr"が画面表示＝コマンド実行されている
$ f > /tmp/f.log
stderr
$
$ #存在しないディレクトリのファイルにリダイレクトしてみる
$ #標準エラー出力が表示されない=コマンド自体が実行されていない
$ f > /tmp/hoge/fuga/f.log
-bash: /tmp/hoge/fuga/piyo.log: No such file or directory
$
$ #書き込めないディレクトリとして、tmpfsをReadOnlyマウントする
$ #標準エラー出力が表示されない=コマンド自体が実行されていない
$ mkdir -p /tmp/ro-tmpfs
$ sudo mount -t tmpfs -o ro tmpfs /tmp/ro-tmpfs
$ f > /tmp/ro-tmpfs/f.log
-bash: /tmp/ro-tmpfs/f.log: Read-only file system

```
# 備考
このときの終了ステータスは 1 になる。

# 環境
GNU bash, version 4.4.23(1)-release 

# 日記
コマンドの実行時出力をファイルに残そうとしてハマった。
冷静に考えると当たり前の挙動だが、意外と悩んだ。
Deno: GitLab で GraphQL を使う

こちらのプログラムを Deno で書き換えました。
[Curl: GitLab で GraphQL を使う](https://qiita.com/ekzemplaro/items/9b60efecfecd7a15ae46)

## プログラム

```bash:get_data.sh
export ACCESS_TOKEN="glpat-******"
deno run --allow-all get_data.ts query.json
```

```ts:get_data.ts
// ---------------------------------------------------------------
//	get_data.ts
//
//					Apr/15/2023
//
// ---------------------------------------------------------------
import process from "node:process"

const file_in:string =Deno.args[0]
console.log (file_in)

const url = "https://gitlab.com/api/graphql"

const query:string = Deno.readTextFileSync (file_in,{ encoding: "utf8" })

console.log(query)

const headers = new Headers({
  "Authorization": `bearer ${process.env.ACCESS_TOKEN}`,
  "Content-Type": "application/json",
})

const response = await fetch(url, {
  method: "POST",
  headers: headers,
  body: query,
})

const data = await response.json()
console.log(data)

// ---------------------------------------------------------------
```

```json:query.json
{"query": "query {currentUser {name location username webUrl}}"}
```

## 実行結果

```text
$ ./get_data.sh 
query.json
{"query": "query {currentUser {name location username webUrl}}"}

{
  data: {
    currentUser: {
      name: "Uchida Masatomo",
      location: "栃木県",
      username: "ekzemplaro",
      webUrl: "https://gitlab.com/ekzemplaro"
    }
  }
}
```

## 確認したバージョン

```text
$ deno --version
deno 1.32.4 (release, x86_64-unknown-linux-gnu)
v8 11.2.214.9
typescript 5.0.3
```
Axiosとは

## axiosとは？
ブラウザやNode.jsで動く**PromiseベースのHTTPクライアント**です｡ HTTPリクエストを簡単に行うことができます。

※　HTTPクライアントは、HTTPリクエストを送信して、HTTPレスポンスを受信するクライアント側のコードのことです。JavaScriptを使用してHTTPクライアントを実装するには、XMLHttpRequestを使用します

**サーバー側ではNode.js**のHTTPモジュールを使用し、**クライアント側ではXMLHttpRequest**を使用することで、ウェブアプリを開発できます。XMLHttpRequestを使用することで、非同期通信が可能になり、ユーザーがページを更新することなくデータを取得することができます。Node.jsのhttpモジュールを使用することで、サーバー側でのリクエスト処理が可能になる仕組みです。

:::note info
Node.jsには、HTTP通信を扱うためのHTTPモジュールが用意されています。このモジュールを使用することで、HTTPサーバーの作成や、HTTPクライアントの作成などが可能になります。
:::

## axiosのユースケース
外部APIからデータを取得する場合などに使用されます。例えば、REST-APIの実行など､これを使うと簡単に実装できます｡

## axiosの特徴
Axiosは、多数のオプションを提供し、ヘッダーのカスタマイズ、クッキーの処理、リダイレクトのハンドリングなどが可能です。AxiosはPromiseを返すため、非同期処理を簡単に行えます。大量のリクエストを行う場合は、Axiosのパフォーマンスに注意です。

## 処理の流れ
まず、ライブラリをインポートします。

```npm
$ npm i axios
```

#### 1: axiosのインスタンスを作成する
```javascript:js
const axiosInstance = axios.create({
  baseURL: 'https://example.com/api/',
  timeout: 1000,
  headers: {
    'X-Custom-Header': 'foobar',
  },
});
```
axiosの`create()`メソッドを使用して、axiosのインスタンスを作成します。baseURLプロパティには、リクエスト先のベースとなるURLを指定できます。timeoutプロパティは、リクエストがタイムアウトするまでの時間を指定。headersプロパティは、リクエストに含めるヘッダーを指定できます。


#### 2: HTTPリクエストを送信する
```javascript:js
axiosInstance.get('/users')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });
```
`get()`メソッドを使用して、GETリクエストを送信しています。レスポンスが正常に受信できた場合、`then()`メソッドのコールバック関数が実行され、レスポンスのデータが引数として渡されます。エラー時は、`catch()`メソッドのコールバック関数が実行され、エラーオブジェクトが引数として渡されます。

#### 3: HTTPリクエストのキャンセル
```javascript:js
const source = axios.CancelToken.source();
axiosInstance.get('/users', {
  cancelToken: source.token,
})
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    if (axios.isCancel(error)) {
      console.log('Request canceled', error.message);
    } else {
      console.error(error);
    }
  });

// キャンセルする
source.cancel('Operation canceled by the user.');
```
キャンセルトークンを作成して、HTTPリクエストのcancelTokenオプションに指定しています。キャンセルが必要な場合は、キャンセルトークンの`cancel()`メソッドを呼び出すことで、HTTPリクエストをキャンセルできます。キャンセルが発生した場合は、`catch()`メソッドのコールバック関数内で、`axios.isCancel()`メソッドを使用して、キャンセルかどうかを判定できます。

:::note info
キャンセルトークンは、非同期処理をキャンセルするためのトークン。キャンセルトークンを使用すると非同期リクエストをキャンセルできます。「ページ遷移のキャンセル」「非同期処理のタイムアウト」などに活用します。
:::
Docker Desktop for Windows が起動しなくなった：解決

# 環境
・Docker Desktop for windows 4.18.0
・windows11 home

# 経緯
Windows上の他のツールをインストールし直したところ、Docker Desktop for windowsが起動しなくなった。

# やったこと
ググって、同じトラブルの複数の記事の内容を試してみたが解決しない。
→Docker Desktop のアンインストールと再インストール、プロセスの強制停止、「WSL 2」再インストールなど。

# 解決
コントロールパネル
－プログラムと機能
－Windowsの機能の有効化と無効化
　－linux用windowsサブシステム
　－仮想マシンプラットフォーム
をチェックを消してPC再起動、
再起動後にチェックを入れてPC再起動。
その後、docker desktopをインストールしなおしたら、起動するようになった。
OnStartを使用する際の注意点

# 初めに
この記事では私がPowerAppsを用いてアプリを作成する上で学んだことを記載しております。

備忘録用として記載しておりますので読みにくいなどございましたらご容赦ください。

# OnStartとは

Appコントロールのプロパティで、アプリが実行されて一番最初に実行されます。
OnStartの他には以下のプロパティがあります。
　OnVisible
　OnNew
　OnEdit

実行順序としては下記の順で実行されます。
OnStart > [OnVisible、OnNew、OnEdit]

[参考:OnStartやOnEditなどのプロパティの実行順序と注意点について](https://hitsuji-techblog.hatenablog.com/entry/2022/11/30/210817)

## 使用用途
OnStartプロパティはAPP属性で選択することができ、ユーザーのアカウント情報を変数に定義もしくは初期化するために使用することが多いです。

例えばLoginUserというコレクションのEmail列にUser().Emailを入れることでユーザーアカウント情報の中のメールを値に入れたりとか...

# なぜ注意する必要があるのか？

結論から言うとOnStartプロパティの使用は2023年4月時点で公式ではOnStartを使用すると不具合の可能性があるため初期値を設定するならOnVisibleプロパティを使用することを推奨すると記載があったためです。

[参考:PowerAppsのAppプロジェクト](https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/object-app)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587896/4dea4378-3295-db8b-487d-e65e59c8a19b.png)

# まとめ
OnStartプロパティについてまとめると以下がポイントです。

1.***OnStartは2023年4月時点で使用すると不具合を起こす可能性があるため非推奨とされていること。***
※ゴリゴリ記載せずにシンプルな記載なら不具合は起きにくいと思うので個人的にはシンプルな記述のみ活用しています。

2.***初期値を設定するならOnVisibleプロパティに記載する。***

以上となります。最後まで読んでいただきありがとうございました。
オブジェクト指向ー①バックエンド言語の立ち位置

<h1>・バックエンド言語の立ち位置</h1>
　はじめにフロントエンド、バックエンド、データベースの立ち位置について書いていきます。<br><br>
　①フロントエンドは、主に出力を行います。ユーザーが操作する画面と値の受け渡しを行います。<br>
　②バックエンドは、主に値の受け渡しと処理を行います。ユーザーが入力した値を処理して出力したり、データベースにあるデータを引っ張ってきたりします。<br>
　③データベースは、主に値の受け渡しと値を保存します。バックエンドから送られた値を半永久的に保存します。

↓これを図に表すとこうなります
![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850098/324f6a8a-a4bf-bee7-c84a-c5b18e4b4274.png)
![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850098/bd0a33e3-45c1-07b1-c74d-f351c21630bc.png)
![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850098/faaea031-d487-3849-6a41-f49aaac9c2a6.png)

　このようにバックエンド言語は①データを受け取り、（②データベースに問い合わせ）、②処理をするという大きく３つのことを行います。オブジェクト指向では、<b>「データを受け渡すクラス」</b>、<b>「任意の処理をするクラス」</b>の２つのクラスを作ります。それぞれの<b>共通点</b>を引き出してクラスを作るという考え方です。
何もしてないのにdocker-desktopが起動しなくなった、原因はWSLでした【解決済】

ある日、docker-desktopを起動すると、前日まで動いていたのにも関わらず、  
突然```An unexpected error occurred```でdocker-desktopが起動できなかった。（何もしてないのに壊れた！）

docker-desktopが起動できるようになるまでの試行錯誤を書きます。
![スクリーンショット 2023-04-15 172248.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260835/deb17bae-de78-d743-0b24-2baa3186db7c.png)

## 動作環境

docker-desktopは２年以上使用しています。
- Windows10 21H2
- WSL2導入済
- docker-desktopを2年程度使用中

## エラー内容

WSLへの接続エラーが原因のよう。WSLが怪しいので動作確認してみる。

>An unexpected error occurred
>Failed to deploy distro docker-desktop to C:\Users\XXX\AppData\Local\Docker\wsl\distro: : 
>Some WSL system related access rights are not set correctly.This sometimes happens after waking the computer or not being connected to your domain/active directory. Please try to reboot the computer. If not sufficient, WSL may need to be reinstalled fully. As a last resort, try to uninstall/reinstall Docker Desktop.

## 調査

### WSL動作状況

Windows起動時にWSLが起動できていないみたい。  
まずはWSLを起動することを目指す。

```
 wsl -v                                                                   
指定されたサービスは無効であるか、または
有効なデバイスが関連付けられていないため、開始できません。
```
Ubuntuを起動するとエラーが出てしまう。
![スクリーンショット 2023-04-15 174547.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260835/e4c5f10b-781a-8cb1-40fe-070fd3ecedb6.png)

- [WSL の基本的なコマンド](https://learn.microsoft.com/ja-jp/windows/wsl/basic-commands)

### WSL起動方法

#### 再起動

PC再起動してWSLが起動するか確認  
→起動せず

#### Linux用サブシステム　無効化→有効化
 

「コントロールパネル→プログラムと機能→Windowsの機能の有効化または無効化」よりLinux用サブシステムを無効化し、再起動する。  
次にLinux用サブシステムを有効化し、再起動する。  
![スクリーンショット 2023-04-15 175618.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260835/beacb323-3857-0811-ae4b-0d618a1e283e.png)

WSLが起動できていることを確認。

```
 wsl --list                                                                      
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
Ubuntu-22.04
Ubuntu-18.04
docker-desktop
```

docker-desktopが起動した。  
PC再起動時の動作はまだ確認していないけど、一旦これでよし。
![スクリーンショット 2023-04-15 180828.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260835/954205a8-4df0-5629-7548-e5c6067ba08d.png)

## まとめ

突然、docker-desktopが起動しなくなったら、まずWSLを確認しましょう。

## 参考

- [Docker が起動出来ない メモ。](https://qiita.com/snowmoon/items/833eda048abe22634a89)
- [起動しなくなったWSL2を復活させるまでにしたあれこれ](https://zenn.dev/karaage0703/articles/e30c9614a55bdb)

- [以前のバージョンの WSL の手動インストール手順](https://learn.microsoft.com/ja-jp/windows/wsl/install-manual)
AWS CLI で多要素認証（MFA）で SwitchRole するための credentials / config ファイルの書き方

AWS CLI / CDK をコマンドで利用するときにも多要素認証（MFA）を使いたいです。

* https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-role.html

上記に利用方法が記載されていますが、たまに credentials のみしか参照しないツールもあるので、わたしは mfa_serial 等を credentials へ記載しています。


# この記事でわかること

* SwitchRole するための credentials / config ファイルの書き方
* 多要素認証（MFA）で credentials / config ファイルの書き方


# 記述方法

```config:~/.aws/credentials
[default]
aws_access_key_id = <Switch元AWSアクセスキーID>
aws_secret_access_key = <Switch元AWSシークレットアクセスキー>

[switch-role1]
mfa_serial = arn:aws:iam::<Switch元AWSアカウントID>:mfa/<アカウント>
role_arn = arn:aws:iam::<Switch先AWSアカウントID>:role/<Switch先ロール>
source_profile = default
```

```config:~/.aws/config
[default]
region = ap-northeast-1
output = json

[profile switch-role1]
region = ap-northeast-1
output = json
```

# 実行例

profile を指定して、AWS CLI コマンドを実行すると以下のように表示されるので、MFAコードを入力してください。
正しいMFAコードを入力すると、コマンドが実行されます。

```
$ aws s3 ls --profile switch-role1
Enter MFA code for arn:aws:iam::<Switch元AWSアカウントID>:mfa/<アカウント>:
```
UnrealEngine5(C++)includeメモ

includeしないと使用できないクラスがあるため、自分用メモ
- ```FDamageEvent```
```#include "Engine/DamageEvents.h"```
- ```UGameplayStatics```
```#include "Kismet/GameplayStatics.h"```
- ```UButton```
```#include "Components/Button.h"```
Azure App Service の Azure AD 認証で「認証されていないアクセスを許可する」を試してみた

Azure AD 認証済みの Azure App Service があるとして、外周監視をやりたかったとします。当然認証がかかっているので監視用の専用サインインユーザーアカウントを用意して外周監視をする必要がありますよね。シンプルに監視するなら特定の IP アドレスからは認証がかからないようにしたいです。という事で、今回は Azure App Service for Linux の PHP8.0 に組み込まれている Nginx を使って、特定の IP アドレスからは認証させず、かつ認証されていないアクセスを強制認証するような設定を追加してみました。

## Azure App Service の「認証されていないアクセスを許可する」

![appservice-anonymouse.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/eb0331cf-fc58-e422-fd0a-7ac839e16375.png)

## Azure CLI で「認証されていないアクセスを許可する」に変更

```bash:bash
prefix=mnrnginx

az webapp auth update \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --unauthenticated-client-action AllowAnonymous
```

## Azure ポータルから SSH して Nginx 設定ファイルを編集

```bash:bash
cp /etc/nginx/sites-enabled/default /home/default

vi default
```

## Nginx 設定ファイルに判定処理を追加

* 強制リダイレクト判定用の変数を用意します。
* 最初は、特定の IP アドレスにマッチしなければ、強制リダイレクト判定用の変数を 1 にします。
* 次に、認証済みの場合にセットされる変数 HTTP_X_MS_CLIENT_PRINCIPAL_NAME が空欄でなければ 0 に上書きします。
* 最後に、強制リダイレクト判定用の変数が 1 だったら、Azure AD 認証にリダイレクトします。

```nginx:default
    set $force_redirect 0;
    if ($HTTP_X_CLIENT_IP !~ ^(123.123.123.123|211.211.211.211)$) {
        set $force_redirect 1;
    }
    if ($HTTP_X_MS_CLIENT_PRINCIPAL_NAME != "") {
        set $force_redirect 0;
    }
    if ($force_redirect) {
        return 302 /.auth/login/aad?post_login_redirect_uri=/;
    }
```

## Azure App Service のスタートアップスクリプトを設定

```bash:bash
az webapp config set \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --startup-file "cp /home/default /etc/nginx/sites-enabled/default; service nginx restart"
```

## 参考

https://techcommunity.microsoft.com/t5/apps-on-azure-blog/configure-nginx-for-php-8-linux-azure-app-service/ba-p/3069373

https://learn.microsoft.com/ja-jp/azure/app-service/configure-authentication-customize-sign-in-out#use-multiple-sign-in-providers
JAVAでDBからデータを取得する

データベースからデータを取得するために調べてみた。

https://packpak.hatenablog.com/entry/2019/04/12/043254

データを一括して取得し、JSON形式で変換するので、
ResultSetMetaData.getType()を使用する。
データ型については以下を参照

https://docs.oracle.com/cd/E16338_01/java.112/b56281/datacc.htm