OmniAICreator/Qiita-1.07M huggingface dataset:
最小努力と最短時間でMB-920合格記

今回はFundamentals最終の試験、MB-920（DynamicsのERP）も無事一回で合格しました。
勉強時間は3時間程度です。
毎度の如くほぼ前日＆当日の詰め込みショートカット勉強法なので、きちんと正攻法で勉強することをお勧めします。
今回、正直納得がいかない内容で、試験範囲として提示されているもの以上の内容が出て正直落ちたかと思いました。。。


過去の体験記はこちら：

https://qiita.com/ponponmikankan/items/fd363bb0323569d3676f

https://qiita.com/ponponmikankan/items/77202be0de32cda5893d

https://qiita.com/ponponmikankan/items/4b64124be47a34467019

https://qiita.com/ponponmikankan/items/c27d6db74bac7cb44fef

https://qiita.com/ponponmikankan/items/f25fa53b13f10df574d6

https://qiita.com/ponponmikankan/items/95790b6892a3c6d3e285

https://qiita.com/ponponmikankan/items/d19606c99f902f57a4ca

https://qiita.com/ponponmikankan/items/b6dc613024c1fcfeb7b1


## 前提

Dynamics系製品は全く使ったことがなく、マイクロソフトよ…そんなことまでやってたのねと勉強してからいろいろと知りました。
ERPについては業務でユーザーとして浅い使い方をするくらい…。
財務知識については簿記3級を超昔に取得したくらいの知識です。


## 参考にした勉強法
ネットに落ちている合格受験がそもそも数少なく、年数も経っていたため参考にも正直なりませんでした。。

MB-920のスタディーガイドをみると、主にDynamics 365 Finance と Dynamics 365 Supply Chain Managementに特化していることがわかりますが、これ全然嘘なので気を付けてください（一応2024年7月31日で試験範囲が変わっているようですが…。。）。
テストセンターの端末のデータセットが更新されているのかされていないのか不明ですが、普通にHRの話やCommerce、Project Operationsの話も出てきました。そしてみたことも聞いたこともなかったDynamics 365 Fraud Protectionについてもなんと出てきました。。。。試験始まってから普通にパニック！！

ラーニングパスがDynamics 365 Finance と Dynamics 365 Supply Chain Managementしか提示されておらずまったく勉強していない分野から出てくることになります。そのためこの記事を見ている方はMB-920で提示されているラーニングパス以外にもERP系の基礎的なLearnを見ておくことをおすすめします。

https://learn.microsoft.com/ja-jp/credentials/certifications/resources/study-guides/mb-920

## 実際の勉強でやったこと

### Learnを飛ばし読み（2時間程度）

https://learn.microsoft.com/ja-jp/training/courses/mb-920t00/

学習ガイドを信じて読みましたが、、、もっと信じすぎずほかのところも読んでおけばよかったと後悔です。
Financeについてはもう簿記じゃんってくらい会計的なワードが出てきます。簿記の勉強をしたことがなかったり、会計全然わかりませんな人だとちょっと読むの苦労するかもしれません。

### プラクティス評価の実施（5周くらい）

https://learn.microsoft.com/ja-jp/credentials/certifications/d365-fundamentals-finance-and-operations-apps-erp/practice/assessment?assessment-type=practice&assessmentId=54&practice-assessment-type=certification

最初は3割程度でしたが、3回目以降8割くらいとれるようになります。

### Exam Topicsでの練習

前回CRMのほうは一度落ちたため、Exam Topicsも20問程度ときました。
ただし、プラクティス評価と若干正答が異なる質問があったので自分でLearnで正答を確認し、丸暗記はしないほうがよいです。

https://www.examtopics.com/exams/microsoft/mb-920/

### 試験の感想

想定外の内容だったため、試験時間時間まるまる使ってしまいました。（見直し1周）。
形式としてはほかの900系同様、択一やドラッグドロップ系なので焦ることはないです。
これもうマイクロソフトじゃなくて簿記じゃん…みたいな問題も数問ありました。

それにしても学習ガイド以外の範囲が出るってどういうことなの？

▼[学習ガイド](https://learn.microsoft.com/ja-jp/credentials/certifications/resources/study-guides/mb-920)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/54a2bed2-e39e-4163-6a0f-a4a89c6853c4.png)


▼実際の試験後に出てきたレポート
![IMG_8021.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/8192efba-971f-a77f-9af9-a1c042802550.jpeg)

ぜんぜん話がちげーじゃんよ！！！
開始1問目から全く範囲外の部分が出て試験全体の4－5割が範囲外のところから出てきました。

…というわけで、想定外のこともあり焦りましたが、今回も超最低限勉強法で無事合格（点数も取れてた）！
これにてFundamentals制覇でございます！！
MTTFとはなんぞや

結論から言うと、**MTBFと同じです**。

私が国家試験（基本情報、応用情報）の勉強をしているときに、えっとなったので、軽ーく調べた結果をここに書きます。

---

MTBF、MTTR、MTTFはすべて可用性と信頼性の指標ですが、~~どうも計算モデルが二つあるっぽいです。~~ 後で説明するので、とりあえず以下の二つの計算モデルを見てください。

一つ目はこれ。[^a1][^a2]

[^a1]: [閲覧：2024/09/21] https://ja.wikipedia.org/wiki/%E5%B9%B3%E5%9D%87%E6%95%85%E9%9A%9C%E9%96%93%E9%9A%94
[^a2]: [閲覧：2024/09/21] https://www.ibm.com/topics/mtbf

![TV - 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553028/8a42ec30-c91d-59ff-b09e-4b1518667bfa.png)

先に言ってしまうと、こちらが現在の主流で、国家試験もこっちで出ます。
「故障したら終わりの製品」と書いてありますが、これはどういうことかというと、「MTTFはMTBFと同じ計算方法ですが、故障を回復させない製品について言う文脈で使われます」というような説明が多かったので、こう書きました。[^b1][^b2][^b3]

[^b1]: [閲覧：2024/09/21] https://product.tdk.com/ja/contact/faq/power-supplies-0019.html
[^b2]: [閲覧：2024/09/21] https://ja.wikipedia.org/wiki/%E5%B9%B3%E5%9D%87%E6%95%85%E9%9A%9C%E9%96%93%E9%9A%94#%E6%A6%82%E8%A6%81
[^b3]: [閲覧：2024/09/21] https://www.atlassian.com/ja/incident-management/kpis/common-metrics

二つ目はこれ。

![TV - 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553028/f013e0ff-aad3-b684-64e8-f64d53c3cb22.png)


一つ目では、MTBFの意味が、稼働中だけの平均だったのが、二つ目では故障から故障までの全体の時間の平均になっています。その代わり、同じ意味を表すものが、MTTFとなっています。

計算方法が違うので、当然、別の数字になってしまうのですが、~~普通にグーグル検索すると、どっちの説明も出てきます。~~ グーグルで画像検索すると、上の意味のように見える図がたくさん出てきます。でも、これは間違った図です（画像の本文を見てみると違う説明が書いてあります[^c1]）。先生が、画像検索はいいぞって言ってたからやってみたのに。しくしく。

[^c1]: [閲覧：2024/09/21] https://www.manageengine.com/network-monitoring/tech-topics/mtbf-mttf-mttr.html#mttf

そもそもなんで私が「えっ」てなったかというと、MTBFとMTTRの英語である"Mean Time Between Failure"と"Mean Time To Recover"が明らかに対義語としては違和感あるし、MTTFって検索したら普通に出て来るし、おかしいなあと思ったからです。そういう意味では、この二つ目の図の方が自然なように見えます。

で、どっちが正解なのかという話ですが、[ここ](https://ja.wikipedia.org/wiki/%E5%B9%B3%E5%9D%87%E6%95%85%E9%9A%9C%E9%96%93%E9%9A%94#cite_note-1)にこんな記述があります。

> JIS Z 8115:2000は、MTBFは「平均故障間動作時間」で、「故障間動作時間の期待値」と定義し、「ある特定期間中のMTBFは、その期間中の総動作時間を総故障数で除した値である。」としている。「平均故障間隔」については、「MTBFという略号は現在この意味では使われない」としている。

詳しく見てないのですが、たぶんこの「平均故障間動作時間」が一つ目のMTBFで、「平均故障時間」が二つ目のMTBFです。間違っていたらコメントで指摘してください。

これをうのみにするなら、二つ目の図は「現在この意味では使われない」そうなので、一つ目の図が正解と言うことになります。Q.E.D.（笑）

念のため、一つ目の図をもう一度置いときます。

![TV - 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553028/93e9f2dc-24b4-ef36-a4f8-c9d779e4527f.png)

結論は、**現在の意味では、MTBFとMTTFは同じ計算方法で、使われる文脈が違う**となります。
Kaggleの楽しみ方 〜コンペだけじゃない！データセットで気軽にEDAに挑戦しよう〜

# はじめに
こんにちは！
Kaggleという名前を聞くと、どうしても「世界中のデータサイエンティストたちが集まる競争の場」というイメージを持ってしまいませんか？  
でも実は、Kaggleはコンペに参加しなくても十分に楽しめる、データサイエンスのおもちゃ箱なんです！今回は、競争とは違うKaggleの楽しみ方「データセットを使ったEDA（探索的データ解析）」を中心に、その魅力をご紹介します。

---

## 1. コンペに参加しなくてもOK！💡

「Kaggleって競争がメインじゃないの？」という声、よく聞きます。  
たしかに、Kaggleにはたくさんのコンペが開催されていますが、これだけが全てじゃありません！むしろ、データセットを使って **自分なりの発見を楽しむ** ことができるのも、Kaggleの醍醐味なんです。

たとえば、Kaggleの「データセット」ページには数えきれないほどのデータが公開されています。それを自由に使って、自分のペースで分析をしたり、可視化したりするだけでも十分に楽しめますよ！  
しかも、他の人が公開しているEDAノートブックにコメントや「いいね！」が付くこともあるので、「このデータ面白い！」と思ったらどんどんシェアしてみましょう。

---

## 2. EDAって何？どこから始める？🔍

「EDAって聞いたことあるけど、具体的に何をするの？」という疑問があるかもしれません。EDAとは「Exploratory Data Analysis」の略で、**データを理解するための最初のステップ**です。主な作業は以下の通り：

- **データの形を確認**：データに欠損値や異常値がないか、まずは全体像を把握しましょう。
- **基本統計量の確認**：平均や中央値など、簡単な統計情報を見て、データの特徴をつかみます。
- **グラフで可視化**：棒グラフや散布図を使って、データのパターンや傾向を視覚的に確認します。

たとえば、こんなステップで進めてみると良いですね：

```python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# データセットを読み込む
df = pd.read_csv('/path/to/your/kaggle-dataset.csv')

# 欠損値を確認
print(df.isnull().sum())

# 基本統計量を表示
print(df.describe())

# カテゴリ変数の分布を可視化
sns.countplot(data=df, x='category_column')
plt.show()
```

「何をすればいいのかわからない」という場合でも、他のKaggleユーザーの公開しているEDAノートブックを参考にすれば、どんどんアイデアが湧いてきますよ！

---

## 3. コンペでなくても褒めてもらえる✨

実は、Kaggleの魅力は **気軽にコミュニティに参加できる** ところ！  
Kaggleで公開したEDAノートブックに「いいね！」を押されたり、コメントでフィードバックをもらえたりすることがあるんです。Kaggleユーザーは基本的にフレンドリーで、「コンペに勝たないと評価されない」なんてことは全くありません。むしろ、斬新な視点や面白いグラフを描くだけで、しっかり褒めてもらえます！

試しに、面白いデータを見つけたらシンプルに分析してみてください。例えば：

- **気になるテーマでデータを探してみる**：映画のデータや、天気のデータ、アニメのデータまで幅広いジャンルが揃っています。
- **ちょっとした分析を投稿する**：可視化や簡単な統計を使っただけでも十分OKです！
- **他のユーザーのEDAを「fork」**：他の人が投稿したノートブックをコピーして、自分なりに改良したりアレンジしたりできます。

---

## 4. 自分のペースで成長できる📈

Kaggleのいいところは、競争がプレッシャーに感じることなく、**自分のペースで学べる**こと。  
Kaggleにはさまざまなレベルの人が集まっており、初心者向けの「Getting Started」カテゴリや、豊富なチュートリアルがあるので、まずは気軽にトライしてみましょう。

毎日少しずつでも、自分なりにEDAをやっていれば、いつの間にか分析スキルが上達していることに気づくはずです！

---

## 5. データセットから新たな発見を！🔎

実際にKaggleのデータセットを覗いてみると、「こんなデータがあるんだ！」と驚くことも多いです。以下は、気軽に始められそうなデータセットの例です：

- [Titanic - Machine Learning from Disaster](https://www.kaggle.com/c/titanic/data)  
  これはKaggleで最も有名なデータセットの1つです。生存者を予測するのも楽しいですが、乗客データを使って面白いグラフを作るのも面白いですよ。

- [Netflix Movies and TV Shows](https://www.kaggle.com/shivamb/netflix-shows)  
  Netflixの映画や番組に関するデータを使って、お気に入りのジャンルの傾向を調べたり、視聴傾向を分析したりすることができます。

- [Global Land Temperatures](https://www.kaggle.com/berkeleyearth/climate-change-earth-surface-temperature-data)  
  地球温暖化に関するデータセット。長期的な気温の変化を可視化して、気候変動をデータから見てみるのも一興です。

---

## まとめ🎉

Kaggleはコンペだけじゃない！  
データセットを使って自分なりにデータを探求し、楽しく学べる場でもあります。EDAを通じて、データの面白さや奥深さを感じることができれば、それだけでKaggleの楽しみ方は無限大です。

競争が苦手な人も、気軽にKaggleを始めてみてください。きっとデータの世界に引き込まれるはずです！
AIエージェント活用 サザエさん一家 未来の一日

前に書いた記事から、未来を予想した

https://qiita.com/EasyCording/items/15f15e5bbf678d5b6d8f


## AIエージェント活用 サザエさん一家 未来の一日

**舞台:** 磯野家 リビング (20年後)

**登場人物:**

* サザエ: 主婦、人気ブログ「サザエの愉快な食卓」運営
* マスオ: 会社員、副業で投資ブログ執筆
* タラオ: 小学生、将来YouTuber志望
* 波平: 会社役員 (リタイア後)、趣味で歴史ブログ執筆
* フネ: 主婦、得意料理レシピをNotionで管理


**シーン1: 朝食**

サザエ: (スマホを見ながら) あら、今日のブログ記事のアクセス数、好調だわ！AIエージェントが分析してくれたトレンドキーワード「時短レシピ」が当たったみたい。

マスオ: 僕もAIエージェントが選んだ米国株が値上がりしたよ！副業ブログの収益も順調で嬉しいな。

タラオ: 僕もAIエージェントに手伝ってもらって、面白い動画編集に挑戦してみる！将来は人気YouTuberになるんだ！

波平: わしもAIエージェントに江戸時代の資料を分析してもらって、歴史ブログの記事を更新するぞ！

フネ: 私のNotionレシピ集も、AIエージェントが自動でカテゴリ分けしてくれるから、すごく便利なのよ。


**シーン2: 昼休み**

マスオ: (会社でスマホを見ながら) AIエージェントがFX市場の急変を知らせてくれた！すぐに対応しないと！

サザエ: (自宅で) AIエージェントが読者コメントを分析して、次のブログ記事のテーマ候補を提案してくれたわ。今日は「簡単手作りパン」にしようかしら。


**シーン3: 夕食後**

波平: わしの歴史ブログ、海外からもアクセスが増えてきたぞ！AIエージェントが自動で多言語翻訳してくれたおかげじゃ。

サザエ: 私のブログも、AIエージェントが読者一人ひとりの好みに合わせた記事を推薦してくれるから、読者満足度が高いみたい。

タラオ: AIエージェントが動画編集のコツを教えてくれたから、もっとクオリティの高い動画を作れるようになったよ！

フネ: AIエージェントがレシピの栄養価計算もしてくれるから、健康的な献立作りに役立つのよ。


**ナレーション:**

AIエージェントの活躍により、サザエさん一家は、情報収集、コンテンツ作成、分析、多言語対応などを効率的に行い、それぞれの得意分野で活躍しています。AIエージェントは、人間の創造性をサポートし、より豊かな生活を実現するパートナーとして、未来の社会に欠かせない存在となるでしょう。


**ポイント:**

* AIエージェントは、情報収集、分析、コンテンツ作成、多言語対応など、様々なタスクを自動化
* 人間は、AIエージェントを活用することで、より創造的な活動に集中
* AIエージェントは、個人の能力を最大限に引き出し、自己実現を支援


**まとめ:**

AIエージェントは、サザエさん一家のように、個人の情報発信やナレッジ管理をサポートし、より豊かな生活を実現する可能性を秘めています。近い将来、AIエージェントは私たちの生活に欠かせない存在となるでしょう。
ユーザーは自分のダッシュボードを編集できません




+ [ユーザーは自分のダッシュボードを編集できません](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007aiV2z)

このユーザーに次の権限セットを割り当てました:

+ パブリックフォルダ内のダッシュボードを管理する
+ 動的ダッシュボードの管理
+ ダッシュボードを編集する
+ ドラッグアンドドロップダッシュボードビルダー
+ ダッシュボードの作成とカスタマイズ

:::note
編集ボタンを表示するには、以下の権限を付与する必要がありました。

+ 翻訳の管理
+ セットアップと構成を表示
+ アプリケーションをカスタマイズする
:::

+ [他のユーザーが作成したダッシュボードを編集できない。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ifq9H)


教えていただた7つの権限を付与しましたが、編集できませんでした。

編集ボタンから編集はできるのですが、保存ボタンを押すと「このダッシュボードを編集する権限がありません。Salesforceシステム管理者またはダッシュボード所有者にお問い合わせください。」と表示されます。

やはり、他の人のダッシュボードを編集するには「すべてのデータ参照」権限が必要なのでしょうか。


次のユーザーとしてダッシュボードを参照を変更したらできたらしいですが、何に変更したのでしょうかね。

This worked for me without "Manage Dynamic Dashboards," I think the "View As Me" change was the trick

https://ideas.salesforce.com/s/idea/a0B8W00000Gdmr8UAB/edit-dashboards-created-by-different-user-with-manageedit-permissions
Create a Process for Managing Support Cases



https://trailhead.salesforce.com/content/learn/projects/create-a-process-for-managing-support-cases


# Record Type Inquiry is assigned to the support process 'Inquiry Process'.

+ [Create Record Types - Creating a Process for Managing Support Cases](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007RIv8p)

:::note
Please make sure you are checking the challenge in correct org
:::

# レコードタイプを作ってない？

+ [I am not able to see any option related to Inquiry process when creating record type. I completed all the mention steps accurately.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007erqXC)

:::note
Solved. Somehow I skipped point add inquiry process in to support process area and thats why it wasn't available to select in record type section. 
:::
UnityプロジェクトをGitHubに初プッシュする際の注意点

# UnityプロジェクトをGitHubに初プッシュする際の注意点

UnityプロジェクトをGitHubに初めてアップロードする際には、不要なファイルが含まれないように注意が必要です。特に、プロジェクトのサイズを大きくするだけでなく、他の環境でのビルドエラーやバグの原因となることもあります。そのため、`gitignore`ファイルを作成し、無視するファイルやディレクトリを適切に指定してからプッシュしましょう。

## ステップ1: `.gitignore`ファイルの作成

Gitにアップロードするファイルを制御するためには、`.gitignore`というファイルをプロジェクトのルートディレクトリに配置します。このファイルは、Gitが無視すべきファイルやフォルダをリストアップするもので、Unityプロジェクトには専用の`.gitignore`テンプレートが存在します。

## ステップ2: Unity用の`.gitignore`テンプレートを使用する

GitHubでは、Unityプロジェクト用に適した`.gitignore`テンプレートを公開しています。以下のリンクからテンプレートをコピーして使用することができます。

- [Unity用`.gitignore`テンプレート](https://github.com/github/gitignore/blob/main/Unity.gitignore)

上記のリンク先から`.gitignore`の内容をコピーし、プロジェクトルートに`.gitignore`という名前のファイルを作成して貼り付けましょう。
【2024年版】Xserver VPSにMacのターミナルからSSH接続

Xserver VPSを契約し、ターミナルからSHH接続をしようとしましたが
ネットで調べても古い情報しかなくうまくいかず苦戦したのでメモを残します。

## STEP.1
まずは、VPSパネル画面に行き、パケットフィルターか設定から"パケットフィルター設定を追加する"を押して"SSH TCP22"を追加します。

(参考)
https://vps.xserver.ne.jp/support/faq/vps_ssh_timeout.php

![vpsパケット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332453/e1689d7c-6f0d-e8fd-0bda-aee04e703083.png)


## STEP.2
ssh Keyの権限を変更します。(適切な権限でなければエラーが出るため接続できません)
以下のコマンドをローカルのターミナルで実行します。
```
chmod 600 ~/.ssh/(sshキーファイルの名前).pem
```


## STEP.3
以下のコマンドで、SSH接続を実行します。
```
ssh -i ~/.ssh/(sshキーファイルの名前).pem root@IPアドレス

(ex.)
ssh -i ~/.ssh/example.pem root@123.45.67.89
```

以上で完了です。
【AWS ネットワークインターフェース】依存関係エラーが発生した場合の削除の仕方

練習でAWS環境を構築していたのですが、課金が気になって一旦すべてリセットしようとしたときに遭遇したエラーです。

ネットワークインターフェースを削除しようとしたところ、「ネットワークインターフェイスは現在使用されており、そのタイプは "interface" です.」というエラーが生じました。検索しても「説明欄に書いてあるサービスを停止しましょう」といった説明欄頼みの内容が多く困りました。

結論、自分の場合はRDSと紐づいたネットワークインターフェースだったのでRDSを削除して完了できました。

サブネットやセキュリティグループにも言えるかもしれませんが、どのサービスと紐づいてるか一目でわかりやすい名前を付けると解決への時間を短縮できるかもと思いました。
米田の補題絵本

米田の補題絵本をつくるプロジェクト　開始ページです。
陣地確保のためにまずは作成
キャラクター選定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48387/2d4f4333-d44b-f7ee-df8a-4cd3b662828f.png)
【備忘録】Gitで自分のサーバ上にリモートレポジトリを作成してローカルリポジトリに設定する方法

Android Studio上で作成したプロジェクトをバージョン管理するために記録

【前提条件】
・すでにPC内にGitがインストールされていること前提
・Windowsで作業している
・ローカルレポジトリには

手順
１．エクスプローラーを開き適当なパスに移動してリモートレポジトリ
　　を入れるフォルダを作成
  
２．作成したフォルダを開いて右クリックを押してGitBushを立ち上げる

３．GitBushにリモートレポジトリを作成するためのコマンドを打つ
　　git init --bare --shared=true
  
４．GitBushにリモートレポジトリを設定しようとしているローカルレポ
　　ジトリのパスまで移動するためのコマンドを打つ
  　cd <ローカルレポジトリまでのパス>
   
５．GitBushにローカルレポジトリにリモートレポジトリを設定するため
　　のコマンドを打つ
  　git remote add origin file:/<作成したリモートレポジトリのパス>

ローカルレポジトリにリモートレポジトリを設定するのは完了

GitBushにリモートレポジトリからクローンを作成するコマンドを打てば最新状態のレポジトリを取得できる

手順
１．まずはGitBushにクローンを作成したい場所まで移動するコマンドを打つ
　　cd <クローンを作成したい場所のパス>
  
２．クローンを作成するためのコマンドを打つ
　　git clone <リモートレポジトリのパス>

完了！
【AWS】クラウド (クラウドサービス) とは？

# AWSについて学びたい！
業務では切っても離せない関係にあるAWS。何気なく使っていますが、結局のところベースの知識がないため、言われたことを淡々とすることしかできていません。
そんな状態から脱却し、強強エンジニアを目指すためにも、AWSの学習が必須だと思い、記事を残すことにしました。間違ったことも多く言っているかもしれませんがその際は指摘していただければと思います。

# クラウド (クラウドサービス) とは？

https://aws.amazon.com/jp/cloud/

## クラウドサービスの基本的な仕組み
インターネット経由でコンピューティング、データベース、ストレージ、アプリケーションをはじめとした、さまざまなITリソースを必要なときにリアルタイムで利用することができるサービス。利用料金は実際に使った分のお支払いのみと行った従量課金が一般的。

## 導入のメリット
### 固定の焼却コストが変動コストになる
データセンターやサーバーに多額の投資を行う必要があるが、クラウドサービスを利用することで、リソースを使用した時に使用した分だけ支払うことができる。

### スケールによる大きなコストメリット
多くのユーザーがクラウドサービスを利用することで自社環境よりも低い変動コストを実現することができる。

### キャパシティ予想が不要に
必要に応じてリソースを増減させることができるので、インフラ容量を予想する必要がなくなる。
また、リソースの増減も数分で行うことができるため、機能制限という問題が発生する心配がない。

### 速度と迅速性の向上
分単位の短い時間でITリソースを利用することが可能になるため、検証や開発にかかるコストと時間を大幅に減らすことができる。

### データセンターの運用保守投資が不要
サーバの設置、連携、起動といった重労働が不要になり、プロジェクトに専念できる。

### わずか数分で世界中にデプロイ
数回のクリックでアプリケーションを容易に世界に展開できる。また、シンプルな操作と最小のコストで、送信による遅延を抑え、より良い顧客体験を提供できる。

## 代表的なクラウドのタイプ
### Infrastructure as a Service (IaaS)
サーバー、仮想または専用ハードウェアー、データストレージ領域へのアクセスを提供するもの。
ITリソースに柔軟性と管理統制がもたらされると同時に、現在の多くのIT部門や開発者にとって馴染み深い既存のITリソースに類似するシステムを利用できる。

### Platform as a Service (PaaS)
基板となるインフラストラクチャ（ハードウェアやオペレーティングシステム）を組織内で管理する必要がなくなり、アプリケーションのデプロイと管理に集中することができる。リソースの調達、容量計画、ソフトウェアメンテナンス、パッチの適用、またはアプリケーションの実行に関連するその他のわずらわしい作業について心配する必要がなくなる。

### SaaS (Software as a Service)
サービスプロバイダーが実行および管理している完成した製品を利用できる。サービスのメンテナンスや基盤となるインフラストラクチャの管理をどのように行うかを考える必要がなくなり、特定のソフトウェアを使用する方法を考えるだけでよくなる。

## クラウドのデプロイモデル


### クラウド
アプリケーションを完全にクラウド上でデプロイされており、アプリケーション全体がクラウド上で実行される。また、クラウドコンピューティングのメリットを受けることができたり、クラウドネイティブアーキテクチャを採用することもできる。

クラウドネイティブとは、CNCF（Cloud Native Computing Foundation)によってこのように定義されいるアーキテクチャのこと。
>「クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 代表例として、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型 API があり、
回復性、管理力、および可観測性のある疎結合システムが実現します。 また、これらを自動化することで、インパクトのある変更を簡単に行うことができます。」

https://aws.amazon.com/jp/what-is/cloud-native/

### ハイブリッド
クラウドベースのリソースと、クラウド上にない既存のリソースとの間でインフラストラクチャとアプリケーションを接続する方法。
一般的な方法として、クラウドのリソースをオンプレミスのインフラストラクチャと接続することでインフラストラクチャを拡張することができる。

### オンプレミス（プライベートクラウド）
リソースをオンプレミスでデプロイすることや、仮想化およびリソース管理のツールを使用する。クラウドコンピューティングのメリットを利用できない分、専用のリソースを提供することが可能。

| 特徴              | オンプレミス                                           | クラウド                                             |
|-------------------|--------------------------------------------------------|------------------------------------------------------|
| コントロール      | 自社で全てを管理、完全なコントロールが可能              | 外部プロバイダーに一部を委託                          |
| 初期コスト        | 高額（ハードウェア購入、設備投資）                      | 低コスト（リソースはオンデマンドで利用）              |
| スケーラビリティ  | 拡張が難しく、時間がかかる                               | 動的にスケーリングが可能、即座にリソースを追加可能     |
| セキュリティ      | 社内で物理的な管理ができ、外部依存がない                 | プロバイダーによる高度なセキュリティ対策が標準提供    |
| 維持管理コスト    | 高い（ハードウェア保守、アップグレード、人件費）         | 比較的低い（プロバイダーが保守管理を担当）             |
| 災害対策          | 自社で計画・実行が必要                                   | クラウドプロバイダーが多くの冗長化とバックアップを提供 |
| カスタマイズ性    | 自由にカスタマイズが可能                                 | 一部制約あり                                          |


# まとめ
### クラウドは自由
ElCapitanでNTSC

雪豹ではmacamが使えるのですが、ElCapitanでは署名がなくて起動できないので、Amazonで800円くらいでNTSC UVCなモジュールを買ってみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/ea8f1616-25fa-f15a-568f-ddbdf819aa3f.png)

UVCであればドライバーは必要ありません。

ichigojamをつかいでphotoboothで見てみます。

![写真（2024-09-20 10.07）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/fef889c9-9587-5953-473f-993cbc597928.jpeg)

入力は黄色いコネクタのコンポジットとS入力があります。デフォルトの入力はコンポジットになり変更することはできません。

左右反転して、具合がわるいです。AppStoreで調べて無料のQuick Cameraというアプリを試してみます。

![スクリーンショット 2024-09-20 10.46.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/8ca82f53-1a01-5bad-5e38-6bde2baa30a8.png)

~~EX-80の白黒画面は表示できませんでした。~~ 出来ましたが、あまり綺麗ではありません。

![ex-80.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/d6021a99-7f4a-4219-949f-fdbe52ddcca6.png)

Windows 10でデバイスは認識されますがカメラアプリでは表示できませんでした。

こちらが入手したモジュールではMacroSilicon MS2106Eが使われていましたが、同じ形状でも中身が違うものがあるようなので、必ずしもこのような結果になるわけではないです。

uvc-utilというオープンソースを試してみました。

https://github.com/jtfrey/uvc-util

```
$ ./uvc-util -V 0x534d:0x0021 -c
UVC controls implemented by this device:
  brightness
  backlight-compensation
  saturation
  contrast
  hue
```
ビジュアルリモートアシスタント(Visual Remote Assistant)

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)


https://trailhead.salesforce.com/ja/trailblazer-community/groups/0F94S000000GzWmSAK?tab=discussion&sort=LAST_MODIFIED_DATE_DESC

-------------


+ [VRA で「招待を送信」ボタンを使用できるようにするには、どのような権限が必要ですか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ernlC)

:::note
Please check this article.

VRA - “Send Invite” button is disabled (Greyed Out)
https://help.salesforce.com/s/articleView?id=000395645&type=1

Visual Remote Assistant - Invite button greyed Out
https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgSN7SAN
:::

I am having trouble with the button being grayed out when I log in as a user without using the “Login as” mechanism.

This issue appears to be due to IP address restrictions set in the profile.

+ [ビジュアルリモートアシスタントの設定の前提条件](https://help.salesforce.com/s/articleView?id=000390838&type=1)

+ [ラベル等を日本語化したい](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000Omaz)

:::note
以下のページをみると言語はEnglishだけが書かれています。また、Visual Remote Assistantのグループをみても言語設定につては触れられていないです。英語しか選択できないのかもしれません。

https://edo.my.site.com/edo/s/article/Visual-Remote-Assistant

https://trailhead.salesforce.com/ja/trailblazer-community/groups/0F94S000000GzWmSAK?tab=discussion&sort=LAST_MODIFIED_DATE_DESC
:::

+ [When will the next version be released?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000MXzXc)

次のバージョンは3/11
sandboxのユーザーアドレスからinvalidを削除した際のアドレス検証


解決できませんね

+ [sandboxのユーザーアドレスからinvalidを削除した際のアドレス検証について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007err6W)

上記の手順でリンクを押下すると他のsandboxでは
①：アドレスの検証が完了しました。というメッセージが表示
②：ログイン画面に遷移

という流れになるのですが、新しく作成したsandboxでは①が行われず②に直接遷移します。

-------------

ヘルプには以下のように記載されています。

＞ ②で変更したユーザーにメールは届くのですが、アドレスが検証済みにならずアドレスが変更されません。 

とのことですが、何かエラーとかはありますか？

以下の回答ではサポートに依頼すると書かれています。
https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T6JCbSAN

Sandbox 組織のユーザー

Sandbox 組織のユーザのメールアドレスには「.invalid」 が付けられているため、確認コードのメールを受信することができません。他の検証手段がない場合、パスワードリセットを完了して新しいメールアドレスを有効化することができません。

この問題を解決するには、次のオプションを使用します。

[パスワードをリセットしてユーザにすぐに通知する] の選択を解除して、パスワードリセットを無効にします。 
信頼できる IP 範囲を組織に設定して、特定のユーザへの ID 確認を行わないようにします。詳細は、「ネットワークアクセス、セッションの設定、プロファイル毎の ログイン IP アドレスの制限の違い」を参照してください。
 https://help.salesforce.com/s/articleView?id=000387986&type=1

 -----------------

 IPの制御に関しては問題ありません。開放されています。

.invalid削除時にヘルプページに記載があるように『[パスワードをリセットしてユーザにすぐに通知する] の選択を解除』した上で通知されてくるリンクを押下してもアドレスが検証済にはなりません。

---------------

Outlookなら、同じようにログイン画面にリダイレクトされてしまうという内容が投稿されています。

メール変更の確認ボタン（リンクかも）をクリックしないで、右クリックしてそのURLをコピーできませんか？もしリンクをコピー出来たら、そのURLをブラウザで開いてみてください。

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007er8zoSAA

--------------

残念ながらリンク文字列をコピーしてブラウザ上で直接開いても同様の結果となりました。

+ 新規のユーザーのアドレスを.invalidで登録して、その後invalidを外しても正常に検証が走ります。
+ 既存のユーザーのみ何故か上手くいきません(リンクを押下してもアドレス検証になりません)

----------

プロファイルのパスワードポリシーの中にある

「パスワードを忘れた場合のメールに記載されたリンクをすぐに期限切れにしない」をチェックするとどうなりますか？

パスワードを忘れた場合のメールに記載された [パスワードのリセット] リンクを複数回使用できるようにします。ユーザーがパスワードのリセット要求を確認するまでこのリンクは有効です。

とのことです。メールが届いた時にサーバー側でクリックできるところを自動でクリックして悪意のあるURLがないかを調べているのかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7c70ddfd-8cbd-c186-9147-615bc4db10c2.png)

-----------
該当ユーザーが属しているプロファイルの該当項目にチェックを入れて

直ぐのパスワードリセット有無のどちらも試してみましたが結果は変わらずでした。


:::note
ユーザーが『凍結』状態になっておりました。
解除することで正常にアドレス承認が行われることを確認致しました。
:::
カット作業を自動化

カット作業を自動化するプログラム

プログラムの方針
不要な部分を定義→必要な部分だけを抽出→結合


ffmpegのインストールと環境パス設定が必要です。
chatGPT(無料)に「ffmpegのインストールと環境パス設定を教えて」と言えば5分以内で完了します。　　　https://chatgpt.com/
```
import subprocess
from moviepy.editor import VideoFileClip
import soundfile as sf
import numpy as np
from matplotlib import pyplot as plt
import os
import shutil
import time

# 動画のパスを挿入(フォルダ名は英語推奨)
inputVideo_path = "元動画のパス"
outputVideo_path = "出力先のファイルパス"
#〇以下の音を無音とする
thres = 0.25
#〇秒以上無音が続けばカット
min_silence_duration = 0.2
# 無音でない〇秒以下の音は全てカット(咳払いなど一瞬の音)
min_keep_duration = 0.2
# カットの前後〇秒を残す
padding_time = 0.05
```

ここから先のコードを変更する必要はありません。
ffmpegの都合により日本語のフォルダ名はエラーが発生します。
もしデスクトップなどで動画を実行する場合は移動する必要があります。



```
#元動画と同じフォルダに作業フォルダを作成(後に削除)
out_dir = os.path.join(os.path.dirname(inputVideo_path),  "{}".format(int(time.time())))
os.mkdir(out_dir)

# 動画から音声を抽出
video = VideoFileClip(inputVideo_path)
audio_path = out_dir+"temp_audio.wav"
video.audio.write_audiofile(audio_path)

# 音声ファイル読込
data, samplerate = sf.read(audio_path)

#〇秒以上無音の箇所を探す
amp = np.abs(data)
b = amp > thres

#〇秒以上無音の箇所を抽出
silences = []
prev = 0
entered = 0
for i, v in enumerate(b):
    if prev == 1 and v[0] == 0:  # enter silence
        entered = i
    if prev == 0 and v[0] == 1:  # exit silence
        duration = (i - entered) / samplerate
        if duration > min_silence_duration:
            silences.append({"from": entered, "to": i, "suffix": "cut"})
            entered = 0
    prev = v[0]
if entered > 0 and entered < len(b):
    silences.append({"from": entered, "to": len(b), "suffix": "cut"})

#全体から無音部分とノイズ部分(瞬間的な音)を除いて残す箇所を抽出
keep_blocks = []
for i, block in enumerate(cut_blocks):
    if i == 0 and block["from"] > 0:
        keep_blocks.append({"from": 0, "to": block["from"], "suffix": "keep"})
    if i > 0:
        prev = cut_blocks[i - 1]
        keep_blocks.append({"from": prev["to"], "to": block["from"], "suffix": "keep"})
    if i == len(cut_blocks) - 1 and block["to"] < len(data):
        keep_blocks.append({"from": block["to"], "to": len(data), "suffix": "keep"})


#複数のファイルパスを記入したtxtファイルを作成
file_list_path = os.path.join(out_dir, "file_list.txt")

# カットの前後〇秒を残す
with open(file_list_path, 'w') as file_list:
    for i, block in enumerate(keep_blocks):
        fr = max(block["from"] / samplerate - padding_time, 0)
        to = min(block["to"] / samplerate + padding_time, len(data) / samplerate)
        duration = to - fr
        out_path = os.path.join(out_dir, "{:2d}_{}.mov".format(i, block["suffix"]))

        # ffmpegコマンドを実行
        # subprocess.run([
        #     'ffmpeg', '-ss', str(fr), '-i', inputVideo_path, '-t', str(duration), out_path
        # ])
        subprocess.run([
            'ffmpeg', '-ss', str(fr), '-i', inputVideo_path, '-t', str(duration), out_path
            ], check=True)

        file_list.write("file '{}'\n".format(out_path))


subprocess.run([
    'ffmpeg', '-f', 'concat', '-safe', '0', '-i', file_list_path, '-c', 'copy', outputVideo_path
])

# 一時保存フォルダと音声ファイルを削除
shutil.rmtree(out_dir)
os.unlink(audio_path)
```
Laravelで簡単にセキュリティ強化！encryptedキャストを使った自動暗号化・複合化

## はじめに
アプリケーション開発において、データのセキュリティは非常に重要な要素です。
特に、クレジットカード情報や個人情報などのセンシティブデータを扱う場合、適切な暗号化の実装が求められます。
Laravelでは、`encrypted`キャストを活用することで、簡単にデータの暗号化・複合化を実現できます。
本記事では、`encrypted`キャストの使用方法とそのメリット・デメリットについて詳しく解説します。


## encryptedキャストの概要
Laravelの`encrypted`キャストは、特定のカラムを自動的に暗号化・復号化する便利な機能です。
これを使うことで、暗号化の複雑なロジックを実装することなく、簡単にセキュリティを強化することができます。


例えば、クレジットカード番号のようなセンシティブなデータは、そのまま保存するのではなく、必ず暗号化する必要があります。

### 実装例
ユーザーのクレジットカード番号を暗号化してデータベースに保存する場合、Userモデルに以下のような設定を行います。


```php:User.php
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $casts = [
        'credit_card_number' => 'encrypted',
    ];
}
```
この設定により、データベースに保存されるクレジットカード番号は自動的に暗号化され、取得時には自動的に復号化されます。


### 暗号化されたデータの例
実際のデータベースに保存される暗号化データは、通常の文字列ではなく、暗号化されたランダムな文字列として保存されます。

```
| id  | credit_card_number                  |
| --- | ----------------------------------- |
| 1   | eyJpdiI6InNZ4k5FTOTdlZwMzc5ZmFjA... |

```

## メリット
### 簡単な実装
`$casts`プロパティに`encrypted`を指定するだけで済むため、自身で暗号化ロジックを記述する必要がありません。

### 強力なセキュリティ
暗号化はLaravelの`APP_KEY`を使用して行われ、データベースには暗号化された形式で保存されます。
当然ながら第三者がデータベースにアクセスしても、復号化されることはありません。


## デメリット
### 暗号化したカラムは検索不可
当然ではありますが、暗号化されたカラムに対して直接検索を行うことはできません。
例えば、クレジットカード番号を直接検索することはできないため、検索が必要なデータは暗号化を避ける必要があります。

### APP_KEYの変更が容易でなくなる
暗号化と復号化には`APP_KEY`が使用されます。
したがって、`APP_KEY`を変更すると、過去に暗号化されたデータは復号化できなくなります。
そのため`APP_KEY`の変更が、（不可能ではないものの）難しくなります。


## 注意点
### Eloquent以外で保存・取得する際は暗号化・複合化されない
`encrypted`キャストによる暗号化・複合化はEloquentを使用して保存・取得する場合に限ります。
クエリビルダや直接SQLを使用して保存・取得する場合は暗号化・複合化されませんので、ご注意ください。


## まとめ
`encrypted`キャストを使用することで、Laravelアプリケーションのセキュリティをシンプルかつ効果的に強化できます。
しかし、暗号化の性質上、検索機能や`APP_KEY`の扱いに注意が必要です。
これらのメリット・デメリットをしっかりと理解した上で`encrypted`キャストを使用することをお勧めいたします。

Laravelの強力な機能を活用し、あなたのアプリケーションのセキュリティをさらに一段階高めましょう！
タンゴ、タンゴ)単五で遊ぶ(HT7750A)DC-DC 5V M5NANO C6等


参考

https://qiita.com/caa45040/items/07d4e864c2365604e1ef

目的
M5NANO C6等の小型機器に5Vを給電する。


結果


![o_coq446.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ac70169c-6f67-50fe-d666-6132eb36a398.jpeg)
パブリックパラメータを使用する

一部のAWSサービスは、共通のアーティファクトをAWS Systems Managerのパブリックパラメータとして公開します。例えば、Amazon EC2サービスは、AMIsに関する情報をパブリックパラメータとして公開しています。

パブリックパラメータを利用することで、AWS CLIからEC2を作成する場合のAMIを指定することができます。

# パブリックパラメータを検索する
すべてのパラメータの一覧を表示する場合は以下のコマンドを実行してください。
```
aws ssm get-parameters-by-path --path /aws/service/list --query "Parameters[*].Name"
```
　
AMIsのパラメータを表示する場合は以下のコマンドを実行してください
```
aws ssm get-parameters-by-path --path /aws/service/ami-amazon-linux-latest --query "Parameters[*].Name"
```
　
Amazon Linux2のAMIのパラメータを表示する場合は以下のコマンドを実行してください。
```
aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
```
　
詳細は[AWSの公式ドキュメント](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/parameter-store-public-parameters.html)を参照してください。
ビジュアルプログラミングで高位合成 その4

# 概要
ビジュアルプログラミングで組み合わせ回路を組み立てて、シュミレーションして、verilogを生成します。
高位合成です。
実は、今の実装では、半加算器、全加算器が高位合成できません。
半加算器の高位合成を計画します。
設計編

# 半加算器を動作させて、真理値表を作る。
こちらに、simcirjsがあります。動作させて、真理値表を作成しましょう。

https://embed.plnkr.co/plunk/UOeNFNBciol1kqprJ2Pu

左のデバイス一覧から、HalfAdder、DC、In、Out、Toggle、LEDをドラッグします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/e6e84eaa-0315-90fe-942e-f11bd64b1582.png)

ワイヤーをつなぎます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/6c2c5210-59ff-4d10-112b-d1ac9e6ab913.png)

Toggleボタンを押して、シュミレーションします。

真理値表を書きます。

|A|B|Sum|Carry|
|:-|:-|:-|:-|
|0|0|0|0|
|0|1|1|0|
|1|0|1|0|
|1|1|0|1|

SumはXORで、CarryはANDですね。置き換えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/4cf7defa-1eb4-1a13-5e2a-8b1173136c75.png)

これを、高位合成するのが、目標です。

以上。
M5S3)Grove Starter Kit for BeagleBone Green まとめ(M5Stamp S3)






![o_coq429.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/4241b7f0-e3a0-cd39-9ba2-9a88e273d9e2.jpeg)


販売コード 109796
型番 110060131
発売日 2015/10/01
メーカーカテゴリ Seeed Studio(シードスタジオ)


https://akizukidenshi.com/catalog/g/g109796/





・[Grove I2C ADC](https://qiita.com/caa45040/items/92b3bd50095f90904f4f#grove-i2c-adc)

・[Grove I2C Hub](https://qiita.com/caa45040/items/92b3bd50095f90904f4f#grove-i2c-hub)

・[Grove リレー](https://qiita.com/caa45040/items/92b3bd50095f90904f4f#grove-%E3%83%AA%E3%83%AC%E3%83%BC)

・[Grove ブザー](https://qiita.com/caa45040/items/92b3bd50095f90904f4f#grove-%E3%83%96%E3%82%B6%E3%83%BC)

・[Grove ボタン](https://qiita.com/caa45040/items/92b3bd50095f90904f4f#grove-%E3%83%9C%E3%82%BF%E3%83%B3)

・[Grove 温度センサー](https://qiita.com/caa45040/items/92b3bd50095f90904f4f#grove-%E6%B8%A9%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC)

・[Grove 音センサー](https://qiita.com/caa45040/items/92b3bd50095f90904f4f#grove-%E9%9F%B3%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC)

・[Grove OLEDディスプレイ](https://qiita.com/caa45040/items/92b3bd50095f90904f4f#grove-oled%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4)

・[Grove 3軸加速度センサ](https://qiita.com/caa45040/items/92b3bd50095f90904f4f#grove-3%E8%BB%B8%E5%8A%A0%E9%80%9F%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5)

・[Grove RGB-LED](https://qiita.com/caa45040/items/92b3bd50095f90904f4f#grove-rgb-led)






・Grove I2C ADC
-------------------------

https://qiita.com/caa45040/items/a93202a308b80e6f8134


・Grove I2C Hub
-------------------------

準備中


・Grove リレー
-------------------------

準備中

・Grove ブザー
-------------------------

準備中

・Grove ボタン
-------------------------

https://qiita.com/caa45040/items/547cd742dca5a4852a6c


・Grove 温度センサー
-------------------------

https://qiita.com/caa45040/items/3c3da5c79f0c80f8d30a

・Grove 音センサー
-------------------------

https://qiita.com/caa45040/items/4d96876075fdccc564f9


・Grove OLEDディスプレイ
-------------------------

https://qiita.com/caa45040/items/df59008017b0bf0069b8


・Grove 3軸加速度センサ
-------------------------

https://qiita.com/caa45040/items/04cafcaa808c05005c5c

・Grove RGB-LED
-------------------------

https://qiita.com/caa45040/items/d76dc4d269586c668e97
実在する人間一人につき１アカウントのみを付与できるSNSサービスを作ってみた

# はじめに
:::note warn
皆さん実在する人間一人に１アカウントのみを付与するSNSサービスが今だに実現できてないことをご存じでしょうか？
:::

ちなみに`ChatGPT（MS Cpilot）で以下のような質問`を投げかけてみました。

**(Q）SNSで一人１アカウントを付与するサービスは技術的に実現してませんよね？**

>**(ChatGPT)** 
>はい、現時点ではSNSで一人1アカウントを付与するサービスは技術的に実現していません。これは、以下のような理由によります：
ユーザー認証の難しさ：一人一人を確実に識別するためには、非常に高度な認証技術が必要です。例えば、顔認証や指紋認証などの生体認証を導入する必要がありますが、これにはプライバシーの問題や技術的な制約があります。
プライバシーとセキュリティの問題：ユーザーの個人情報を一元管理することは、セキュリティリスクを高める可能性があります。データ漏洩やハッキングのリスクが増大するため、慎重な対応が求められます。
運用コスト：一人一アカウントを厳密に管理するためには、膨大なリソースとコストがかかります。これを実現するためには、SNS運営企業にとって大きな負担となります。
これらの理由から、現時点では技術的に実現が難しいとされています。


さらにこんなことも聞いてみました。

**(Q) それが実現したらすごいですか？**

>**(ChatGPT)**
>はい、それが実現したら非常に画期的なことです！以下のようなメリットが考えられます：
アカウントの信頼性向上：一人一アカウントが保証されることで、偽アカウントやスパムアカウントの削減が期待できます。これにより、SNS上の情報の信頼性が向上します。
プライバシー保護の強化：ユーザーが複数のアカウントを持つことができないため、個人情報の漏洩リスクが減少します。
コミュニティの健全化：実名制に近い形での運用が可能となり、誹謗中傷や悪質なコメントの抑制が期待できます。
マーケティングの精度向上：企業はより正確なユーザーデータを基にマーケティング戦略を立てることができ、効果的な広告配信が可能になります。
ただし、これを実現するためには技術的な課題やプライバシーの問題を解決する必要があります。それでも、もし実現できたらSNSの利用体験が大きく変わるでしょうね！


**一人１アカウントのみを付与する個人識別システムは存在しなくて当たり前のように扱われ、気にもされていない課題なのです。**

しかし、これを実現したらどのようなことが起こるかはChatGPTも指摘しているところです。

<br>

**今回立ち上げたサービスでは、`この課題を克服し投票型SNSとして実装`しました。**

<br>

**名前を　`Rivus（リーウス）`　といいます。**

<br>

Real Voting Systemの頭文字からヒントを得てラテン語で川を意味する言葉を当てることにしました。　

主な特徴は以下の通りです。

**主な特徴**
・ユーザーが端末で定期的に測位した`位置情報を相互に比較することで個人識別`を行い実際の人間一人につき１つの投票権を付与するサービスを提供する。これにより`一人が複数の端末で複数のアカウントを生成しても投票権は１つのアカウントにしか与えられない`。

・`氏名等の個人情報の登録は行う必要がない`。サービス側が持つ情報は個人の位置情報しかない。この位置情報も３日以前の情報は削除される。

・一人に１つの投票権、意見投稿権、評価権を与えられるので、`公平性の高いサービスが実現`できる。これらのシステムを利用し、発議された議題をユーザーの評価が評価して行き、`評価の高いものを広く拡散するシステム`を導入している。


このサービスは位置情報を利用するため、完全に個人情報を使用しないとは言えませんが、
名前などの個人情報は登録されず、３日前の位置情報は削除されるため、`個人を識別する状態であるにもかかわらず、その個人の特定が難しい状態（「識別不特定」状態という）を実現したシステム`とも言えます。

<br>
サービスの広報Webサイトは<a href="https://rivus-co.com">こちら</a>です。

https://rivus-co.com

・現在iPhoneアプリのみの提供です。
・この`個人識別システムの基本的なアイデアは日本国および米国で特許`を受けています。
・この`発明の実装についても世界初`です。
<br>

<br>
　　　　　　　　　　　　　　<a href="https://rivus-co.com"><img width=33% src="https://rivus-co.com/img/RivusWhiteIcon3@0.5x.png">

# おわりに
・**興味関心のある方は是非お試しください！**

・また、この個人識別システムについて、IT技術に関心の高い方々、学識経験者やプログラマー、投資家の皆様など、**より多くの方々に知っていただき、ご議論いただくことを願っています！**
<br>
全角、半角の判別方法

Kotlinでの全角、半角の変換方法をメモする。

Normalizeを使用した方法。全角半角などの表記揺れを統一するために使用するもので全角半角変換目的ではあまり使用できない。
```kotlin
normalize("①1１", Normalizer.Form.NFKC)
// 111
normalize("コンニチハ", Normalizer.Form.NFKC)
// コンニチハ
normalize("ｺﾝﾆﾁﾊ", Normalizer.Form.NFKC)
// コンニチハ
normalize("Hello", Normalizer.Form.NFKC)
// Hello
normalize("Ｈｅｌｌｏ", Normalizer.Form.NFKC)
// Hello
```


Replaceで1つ1つの変換先を登録する。確実に意図した文字変換が可能だが全て登録するのは手間がかかる。
```kotlin
fun convertString(target : String ):String
{
    var str : String

    str = target.replace("Ａ","A" ).replace("Ｂ","B" ).replace("Ｃ","C" ).replace("Ｄ","D" ).replace("Ｅ","E" ).replace("Ｆ","F" ).replace("Ｇ","G" ).replace("Ｈ","H" ).replace("Ｉ","I" ).replace("Ｊ","J" ).replace("Ｋ","K" ).replace("Ｌ","L" ).replace("Ｍ","M" ).replace("Ｎ","N" ).replace("Ｏ","O" ).replace("Ｐ","P" ).replace("Ｑ","Q" ).replace("Ｒ","R" ).replace("Ｓ","S" ).replace("Ｔ","T" ).replace("Ｕ","U" ).replace("Ｖ","V" ).replace("Ｗ","W" ).replace("Ｘ","X" ).replace("Ｙ","Y" ).replace("Ｚ","Z" ) 

    str = str.replace("ａ","a" ).replace("ｂ","b" ).replace("ｃ","c" ).replace("ｄ","d" ).replace("ｅ","e" ).replace("ｆ","f" ).replace("ｇ","g" ).replace("ｈ","h" ).replace("ｉ","i" ).replace("ｊ","j" ).replace("ｋ","k" ).replace("ｌ","l" ).replace("ｍ","m" ).replace("ｎ","n" ).replace("ｏ","o" ).replace("ｐ","p" ).replace("ｑ","q" ).replace("ｒ","r" ).replace("ｓ","s" ).replace("ｔ","t" ).replace("ｕ","u" ).replace("ｖ","v" ).replace("ｗ","w" ).replace("ｘ","x" ).replace("ｙ","y" ).replace("ｚ","z" )

    str = str.replace("０","0" ).replace("１","1" ).replace("２","2" ).replace("３","3" ).replace("４","4" ).replace("５","5" ).replace("６","6" ).replace("７","7" ).replace("８","8" ).replace("９","9" )
    
    return str 
}
println(convertString("０１２３ａｂｃ"))
// 0123abc
```


`toByteArray()`を使用すれば半角、全角の文字を判別することが可能。以下のコードは全角文字が1つでも含まれていた場合にtureとなる。

```kotlin
"Good morning!".any { it.toString().toByteArray(Charsets.UTF_8).size > 1 }
// false
"おはようございます！".any { it.toString().toByteArray(Charsets.UTF_8).size > 1 }
// true
"123456".any { it.toString().toByteArray(Charsets.UTF_8).size > 1 }
// false
```



#### 参考

https://zenn.dev/fujishiro/scraps/ebe79fcea83939

https://postgresweb.com/post-3134

https://jp-seemore.com/app/15007/
ざっくり画像の拡張子の使い分け方

## アジェンダ
ざっくり画像の拡張子の使い分けに方について簡潔にまとめます。

## 画像の拡張子の使い分け方

1. **JPEG (.jpg, .jpeg)**
   - 写真やグラデーションを含む画像に適している。
   - **ファイルサイズを小さくできる**ので、**ウェブページ**の**背景画像**や**バナー**によく使われる。
   - 高圧縮でファイルサイズを小さくできるが、画質の一部が失われる可能性がある。

2. **PNG (.png)**
   - **透明部分**が必要な場合に最適なフォーマット。
   - 圧縮しても画質が劣化しにくく、ロゴやアイコンなどに使われるが、ファイルサイズはJPEGより大きくなることがある。

3. **SVG (.svg)**
   - **拡大・縮小しても品質が落ちない**ベクター形式の画像。
   - シンプルなデザイン、アイコン、図形に向いていて、ウェブデザインで頻繁に使用される。
   - HTMLやCSSで直接扱えるため、動的なグラフィックにも適している。

4. **GIF (.gif)**
   - **アニメーション**が必要な場合に適している。
   - 色数が少ない画像やアニメーションに使用され、短い動画や動きのあるボタン、バナーに最適。ただし、色数制限があるため、複雑な画像には向かない。
【Flutter】inapp_webviewの使用で ITMS-91061: Missing privacy manifest の警告が来る

# iOSの審査に出すと問題があるといわれる
iOSの審査に提出
ITMS-91061: Missing privacy manifest - Your app includes “Frameworks/OrderedSet.framework/OrderedSet”, which includes OrderedSet, an SDK that was identified in the documentation as a privacy-impacting third-party SDK. Starting November 12, 2024, if a new app includes a privacy-impacting SDK, or an app update adds a new privacy-impacting SDK, the SDK must include a privacy manifest file. Please contact the provider of the SDK that includes this file to get an updated SDK version with a privacy manifest. For more details about this policy, including a list of SDKs that are required to include signatures and manifests, visit: https://developer.apple.com/support/third-party-SDK-requirements.

# 原因はflutter_inappwebview
[issues](https://github.com/pichillilorenzo/flutter_inappwebview/issues/1909)として挙げられていた。ここによると、OrderedSetv6.0.2でPrivacyManifestは追加されているが、inappwebviewの更新がないために、OrderedSet5.0.0を読み込むためにPrivacyManifestの対応ができていないというものです。

# 解決方法
inappwebviewが更新されるまではレポジトリをフォークし、自分でOrderedSetの依存関係を編集することで解決するしかなさそう。
https://github.com/Cmirai39/flutter_inappwebview
上のレポジトリは自分が編集したものです。pubspec.yamlを下のように変更することで自分が編集したレポジトリ経由でinstallできます。
```pubspec.yaml
dependencies:
    #flutter_inappwebview: ^6.0.0 
    flutter_inappwebview:
        git: 
          url: https://github.com/Cmirai39/flutter_inappwebview #OrderedSetのバージョン対応するまで自分のリポジトリを使う
          path: flutter_inappwebview
```
再インストールしてちゃんと、編集後のレポジトリが読み込まれているか確認しましょう。Vscodeの場合は左側のDependenciesタブのdirect dependenciesの中にあるflutter_inappwebviewフォルダの中にあるpubspec.yamlがCmirai39の下のやつを読み込むように変わっていれば、ちゃんと読み込めています。
```
flutter_inappwebview_platform_interface: 
    git: 
      url: https://github.com/Cmirai39/flutter_inappwebview
      path: flutter_inappwebview_platform_interface
  flutter_inappwebview_android: 
    git: 
      url: https://github.com/Cmirai39/flutter_inappwebview
      path: flutter_inappwebview_android
  flutter_inappwebview_ios: 
    git: 
      url: https://github.com/Cmirai39/flutter_inappwebview
      path: flutter_inappwebview_ios
  flutter_inappwebview_macos:
    git: 
      url: https://github.com/Cmirai39/flutter_inappwebview
      path: flutter_inappwebview_macos
  flutter_inappwebview_web:
    git: 
      url: https://github.com/Cmirai39/flutter_inappwebview
      path: flutter_inappwebview_web
```
React「実践入門」Part１

# はじめに
実践入門とか書いてますが、**だいぶ入門**です。
とりあえずReactを使えるレベルにはなると思います。
とりあえず始めていきましょう！

# Reactとは
Reactでは、ユーザインターフェース（UI）を**コンポーネント**と呼ばれる部品を組み合わせることで構築できます。　

また、各コンポーネントは、**JavaScriptの関数**なので、普段のJavaScriptのノリで記述することが出来ます。

ただ、あくまでReactは**ライブラリ**なので、ルーティングなどは指定されていません。フルスタックなどの開発をする場合は、**Next.js**などのフレームワークを使いましょう！


https://ja.react.dev/

https://nextjs.org/
# Reactの重要な３つの概念
Reactには、**Components** , **Props** , **State**という３つの重要な概念があります。
## Components（コンポーネント）
コンポーネントはユーザインターフェースを構築する**最小単位**といえます。

このコンポーネントを組み合わせてユーザインターフェースを構築します。

以降実際のプログラムを交えながら説明します。

https://codesandbox.io/

を使用すると、環境を構築することなくReactを実行できます。

コンポーネントを実際に作ってみましょう。CodeSandboxで以下を実行してみてください。
```App.js
export default function App() {
  return (
    <div className="App">
      こんにちは
    </div>
  );
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3887061/42f04177-e7d7-158b-1682-ec65bc20bde8.png)

React におけるコンポーネントとは、マークアップを返す JavaScript 関数です。

また、各コンポーネントは、**ネスト**（コンポーネントの中にコンポーネントを入れる）が可能です。

``` App.js
export default function App() {
  function Button() {
    return <button>ボタン</button>;
  }
  return (
    <div className="App">
      <Button />
      <Button />
      <Button />
    </div>
  );
}
```
ボタンが３つ表示されたはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3887061/af384763-fc8f-4f72-2bb7-328999906285.png)

コンポーネントの中にコンポーネントがあることが分かります。

これこそが**Reactの強み**なのです。

コンポーネントを利用することでコードの視認性が向上し、大規模な開発などでは非常に役に立ちます。（**Reactの関数は大文字で始める必要があります**）

## Props（プロップス）
上の例では、<Button />を再利用すると、すべて同じコンテンツが表示されていました。

しかし、React コンポーネントにプロパティとして情報を渡すこともできます。
これを**Props**と呼びます。

また例を見てみましょう。
```App.js
export default function App() {
  function Button({ name }) {
    return <button>{name}</button>;
  }
  return (
    <div className="App">
      <Button name="ボタン１" />
      <Button name="ボタン２" />
      <Button name="ボタン３" />
    </div>
  );
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3887061/b3f72c96-a75e-5cd5-847b-b1309e3dc113.png)

このようにコンポーネントにデータを渡せることが分かりました。

## State（ステート）
ステートを利用することで、インタラクティブなユーザインタフェースを構築できます。
例を見てみましょう

```App.js
import { useState } from "react";

export default function App() {
  const [likes, setLikes] = useState(0);

  function handleClick() {
    setLikes(likes + 1);
  }

  return (
    <div className="App">
      <button onClick={handleClick}>(・∀・)ｲｲﾈ!! ({likes})</button>
    </div>
  );
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3887061/901ebfe0-fd81-d906-e743-1568dfad63b8.png)

ボタンを押すたびにいいねの数が増えていくことが分かるでしょう。

ステートとは、**ユーザの動作によって時間の経過とともに変化する情報**といえます。

use で始まる関数は、**フック** (Hook) と呼ばれます。useState は React が提供する組み込みのフックです。他にも多くのフックがあり、独自に組み合わせることもできます。

今回の例では、onClickでユーザの動作を取得し、その動作によっていいねの数（ステート）が変わったということです。

# 最後に
今回は、Reactの基礎の基礎についてまとめてみました。Reactは公式のドキュメントが非常に理解しやすいので、ぜひ一度読んでみることをお勧めします。

この投稿よりも分かりやすいです。

https://ja.react.dev/learn

今度はNext.jsについても投稿しようと思っています。

自分の専門はLLMなので、Django REST framework と Next.jsを用いたAIアプリの開発についても投稿するつもりです。
ローカルIPの例になぜ192.168.x.xが使われるのか

# 結論
あらかじめプライベートIPアドレス用に予約されているから。

## ローカルIPアドレスとは？
**ローカルIPアドレス** は、家庭やオフィス内のネットワークで使われるIPアドレスです。
外部のネットワークから直接アクセスすることはできません。
同じWi-Fiだったら行けるよーてきなね。

### ローカルIPアドレスの範囲
ローカルIPアドレス範囲は **IANA（Internet Assigned Numbers Authority）** によって予約されています。

- **10.0.0.0 ～ 10.255.255.255**
- **172.16.0.0 ～ 172.31.255.255**
- **192.168.0.0 ～ 192.168.255.255**

これらの範囲に該当するIPアドレスはすべてローカルIPアドレスとして扱われます。
たとえば「192.168.1.1」とか。


## グローバルIPアドレスとは？
**グローバルIPアドレス** は、インターネット上で一意に割り当てられるIPアドレス。
世界中のどこからでもアクセス可能な一意な値

### IPv4におけるグローバルIPアドレスの範囲

- **10.0.0.0 ～ 10.255.255.255**（プライベート）
- **172.16.0.0 ～ 172.31.255.255**（プライベート）
- **192.168.0.0 ～ 192.168.255.255**（プライベート）
- **127.0.0.0 ～ 127.255.255.255**（ループバック）
- **169.254.0.0 ～ 169.254.255.255**（リンクローカル、APIPA）
- **224.0.0.0 ～ 239.255.255.255**（マルチキャスト）
- **240.0.0.0 ～ 255.255.255.255**（予約済み）

### IPv6におけるグローバルIPアドレスの範囲

- **2000::/3**（2000から3FFFまでの範囲）

この範囲は、インターネット上で一意に使われるアドレスとして予約されています
#01 C# WinFormsによるメール受信検索アプリ

次回記事
[#02 C# WinFormsによるメール受信検索アプリ](https://qiita.com/rin-bamboo/items/1f0af7ddb20eba1d62f4)

# 「受信したメールを細かく検索したい」
この言葉が始まりであった‥

使用しているメーラーは細かい検索ができない。
なんならブラウザのメーラーなんて検索機能がまともに機能しない。
細かい検索　ANDやらOR条件でメール件名やら本文やらに検索ワードが含まれていたらそのメールをフィルターし表示させたかった。
例えば

```text : Mail
フォルダ名: メルマガ
送信日付: 2024年9月15日
件名: 9月号ニュースレター
送信者: ABCニュースレター
送信者メールアドレス: newsletter@abcnews.com
To: suzuki.hanako@example.com
Cc: -
本文:
鈴木様

ABCニュースレター9月号をご覧いただき
ありがとうございます。
今月の特集記事では、秋の旅行先ベスト10
をご紹介しています。

また、最新のテクノロジー動向やお得な
キャンペーン情報もお見逃しなく。

詳細は下記リンクよりご確認ください。

引き続きご愛顧のほど、よろしくお願い申し上げます。

ABCニュースレター編集部

添付ファイル名: ABC_Newsletter_September.pdf
```

みたいなメールを受信してたら
(検索は全て含む検索)
件名と本文に
(「秋」かつ「旅行」) かつ　(「9月」または「10月」または「11月」)
を検索した時に対象のメールを抽出する機能が欲しかった。
あとは添付メールがあるのかメールの送信日時を指定した抽出をする必要もある。

## 何を使って実現するのか

VBAで作れないか考えたが、色々調べて無理そうとなった…(てかこんなのVBAで作るなよ…)

ってわけで勉強がてらC# WinFormを使ってみることに
(WindowsFormアプリケーションの略称はWinForm？きっと伝わる)

色々調べたら「MailKit」というオープンソースを発見
NuGetパッケージマネージャーで簡単に導入できるしサクッと導入し開発を開始
(インストール方法やらは他の方々が詳しく記載してるのでそちらを参照してください)

### 使用した環境
<dl>
  <dt>言語</dt>
  <dd>C# .NET 6.0</dd>
  <dt>開発ツール</dt>
  <dd>Visual Studio 2022</dd>
  <dt>ライブラリ</dt>
  <dd>MailKit 4.7.1.1</dd>
</dl>

## メール受信
まずはメールを受信するところから。
メールの接続設定・メールサーバーへの接続はMailKitのドキュメントの通り。
簡単に設定変更ができるようにメール設定からメールホスト・ユーザーID・パスワード・ポートを設定できるように作成

### 受信のプロセス
ちなみにメーラーのようにローカルに受信メールを保存して表示させる方法ではなく、メールサーバーからメール情報を都度取得→CSVに出力
という形でメールを受信している
(他でもデータを利用したい場合に便利そうなので一旦こういうことにしました)

画面上での操作は、取得したい日付範囲とCSVを保存するフォルダを選択してボタンを押すだけ。
この時メール全部を取り込みながらチェックをすると鬼のようにメールがあるとレスポンスが悪くなってしまうため、受信取り込みの段階で日付範囲指定を行います。

🌾メールサーバーへの接続は行われている状態とする
ちなみに私の場合は、メール受信クラスを作成し接続情報をクラス内で保持しています。
これを行うことで、メール接続の管理を簡単にできます。
(この辺りも解説予定:解説記事書いた時にURL貼ります)

``` C#:MailReceives.cs
    // 日付範囲でメール情報を取得する部分のみ抜粋
        DateTime FromDate = DateClass.FromDate;
        DateTime ToDate = DateClass.ToDate;

        //IMAPフォルダを開く
        folder.Open(FolderAccess.ReadOnly);

        // 指定した日付範囲内のメールを検索
        var query = SearchQuery.DeliveredAfter(FromDate).And(SearchQuery.DeliveredBefore(ToDate));
        var uids = folder.Search(query);
        
```
この日付範囲指定をして抽出することで大幅にレスポンスを向上させることが可能です。

## 取得したメール情報をCSVに出力
CSVに1行ずつ入れ込むのも大変なので、CSVHelperを使用しました
メール情報クラスに必要情報を保存し、CSVに吐き出してもらいます

### 必要な情報(最低限)
1. 送信日
1. 送信メールアドレス
1. 送信者
1. 件名
1. 本文

このクラスに情報を載せ替えます。
そしてCSVに出力

## CSVを見て気づいたこと
文字化けしてる…？
メール送信者が変な文字コードで送信してると文字化けしてることが判明例えば
GB18030…中国の文字コード…
いや内容日本語やん

ということがあり、変換を試みる。
が、なぜか変換されない…

調べてみるも全くと言っていいほどこの辺りのドキュメントが見つからない…
送信の情報はたくさんあるのに…

現在対応している文字コードは
* UTF-8
* ISO-2022-JP(JIS)
の二つ。
GB18030と同じくSJIS(Shift-JIS)もなぜかうまく変換されなかった…

## 改善の必要あり
文字化けしていると検索に引っかからないので文字化けしていない状態にする必要がある。
現状それぞれの文字コードをメール情報から取得(CharSet)しその情報に合わせて変換を実施している。

この対応だとなぜか変換されない文字コードがあり文字化けのまま出力される…
(メーラーがいろんな文字コード表示できてるからもっといい方法がありそうと言うか、絶対ある…)

次回「文字コードは変換できたのか」
この記事を書いてる段階ではまだ解決してません。
捜査中です。。。。

解決したら再度記事として載せていきます。
MailKitの受信方法について案外情報がなかったので、参考になればと思い作成しております。

今回はなぜ作り始めたのかを書いています。
次回から細かく技術的な内容を書いていきたいと思います。

この方法ならいけるんじゃないか等ご存じの方居ましたら
是非コメントで教えていただけますと幸いです。。。。
技術力と開発力の違いと重要性：エンジニアが求められる2つの力

# はじめに
 エンジニアとして働いている方々には共感いただけると思いますが、技術力が高いことと開発ができることは、必ずしもイコールではないと考えています。
ただ、「技術力」が高ければエンジニアの仕事ができるのではなく、別の「開発力」が必要になるのかなという持論を紹介します。
この「開発力」さえ身に着ければ、未経験の方でもエンジニアとしてやっていけると考えています。

# 技術力と開発力
技術力：ITの特定分野の深い知識や技術を保持しており、実際に扱える力
開発力：プロダクト開発する力
 
私は、技術力と開発力は別軸だと考えています。例えば、AtCorderのようなプログラミングコンテストで高いランクを保有してても、開発ができるかと言うとそれは違うと思います。
プログラミングコンテストではアルゴリズムの素養は身につきますが、それだけでアプリ開発やWeb開発ができるかというと、また別のスキルが必要になります。
技術力が高ければ、開発力が身につくわけではなく、両方の力をそれぞれ高める必要があります。

# 技術力が高いとは
 技術力が高いかどうかの基準は人それぞれ異なるかもしれませんが、私が考える「技術力の高いエンジニア」とは、特定の高度な分野に精通している人を指します。
技術力が高いエンジニアは、単に基本的なスキルを持つだけでなく、より複雑な課題に対応できる専門性を持っていることが多いです。例えば、AI（人工知能）、セキュリティ、ブロックチェーンといった高度な分野は、深い専門知識と正しい技術が求められます。これらの分野では、基礎的な知識だけでは不十分で、実践に応じた高度な技術を身に付けていなければ、効果的に取り組むことができません。これに対し、Web開発やアプリ開発は、技術力がなくてもある程度の実装が可能な場合もありますが、AIやセキュリティといった特定の専門領域では、しっかりとした知識が必要です。

# 開発力とは
 現在、受託開発の業務をしているので、受託開発目線で話していきます。開発力の中で最も大事な力を2つ挙げます。

### 1. コードを読む力
　最初に求められる力は、コードを読む力だと考えます。これは新規開発は違ってくるのかなと思われますが、それは除いて説明します。チームで開発を進める際、他人のコードを読む機会は避けられません。既存のシステムに携わるようなプロジェクトの時も、既に作成されている誰かが作ったコードを読まないといけないです。そのコード自体は、必ずしもリーダブルコードのような理想のコードで書かれているわけではないので、どれだけ汚いコードでも、そのコードを読まないといけないです。どういう意図で書いてあるのかを読み取り、そのコードに加えて自身の書いたコードを反映させることが大事です。このコードを読む力を鍛えれば、レビューにも生かすことができると思います。

### 2. 新しいものに抵抗がない
　2つ目は、新しいものに抵抗がなく、キャッチアップが早い力だと考えます。IT業界は常に新しい技術やスキルが求められるため、この業界で生き残るには、新しい技術に素早く順応する能力が不可欠です。10年前に流行っていた言語やフレームワークは一部廃れて、ここ数年で生まれた言語やフレームワークが活躍しています。生成AI自体も昔にはなかった概念で、昔はコードを書く際、詰まった個所があればwebで調べて解決する時代でしたが、今はChatGPTやCloudeなどの生成AIに尋ねて解決する時代になっています。ここから先の時代は、生成AIを上手く使いこなす人が活躍できる時代になっているように、エンジニアの在り方も変わってきています。古い技術にとらわれず、新しい概念や技術を自身に取り入れることができる人が今後の開発も活躍できると考えられます。

# 技術力は必要ないのか
　結論、技術力がなくても開発力さえあれば、開発自体はできます。Web業界などの高い技術力が求めれない特定の分野であれば、高い技術力は必要ないです。それでも、技術力は必要だと思います。開発力だけでシステムは作れますが、技術力がないと良いものは作れないです。開発力が基盤にあって、品質の高いものにしようとした時に技術力が求められます。この両方を満たすことで、納得ができるいいものが作れるのかなと思います。あとは、技術力がないと下の子たちもついてこないです。（技術重視の人だと）いつまで経っても、両方の力は大事だと思います。

# 最後に
　エンジニアに求められる力は細分化すると様々な力に分解することができます。今回は大まかに2つに分解してみました。まだまだ新人なので、今後は技術力と開発力の両方をバランス良く高め、IT業界でさらなる成長を目指していきます。