OmniAICreator/Qiita-1.07M huggingface dataset:
せんせー、仮想原子ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、仮想原子ってなに？

# 仮想原子とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## 仮想原子って何？

みんな、おもちゃのぬいぐるみを知ってる？本物の動物じゃなくて、ぬいぐるみだけど、動物の形をしているものだよね。仮想原子も似たようなもの。実際の原子ではないけれど、原子のように考えるための「ふりをする」ものなんだ。

## どういうこと？

科学者たちは、複雑な計算や研究をするとき、実際の原子を直接使うのは難しいことがあるよ。だから、計算を簡単にするために、実際の原子とは少し違うけど、原子のように振る舞う「仮の原子」を使うことがあるんだ。

## どうしてそれがすごいの？

仮想原子を使うと、難しい計算や研究がとても簡単になることがあるよ。だから、科学者たちは新しい発見をするのに、仮想原子を使うことが多いんだ。

## だから、仮想原子ってなに？

仮想原子は、実際の原子とは少し違うけれど、原子のように振る舞うことができる「ふりをする」もの。この仮想原子を使うことで、科学者たちはもっと簡単に研究を進めることができるんだよ。

# まとめ

このように、仮想原子は、実際の原子とは違うけれど、原子のように振る舞うことができる特別なもの。科学者たちが新しい発見をするための道具として、この仮想原子をよく使っているんだよ。
せんせー、複合材料技術ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、複合材料技術ってなに？

# 複合材料技術とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## 複合材料技術って何？

みんな、お弁当箱にいろんな種類のおかずが入ってること、知ってる？それぞれのおかずが合わさって、美味しいお弁当ができるよね。複合材料も同じで、2つ以上の異なる材料を合わせることで、新しい特別な材料を作る技術のことを言うんだ。

## どういうこと？

たとえば、木とプラスチックを組み合わせた「木製プラスチック」があるよ。それぞれの材料の良いところを取り入れて、新しい材料を作るのが「複合材料技術」なんだ。

## どうしてそれがすごいの？

複合材料を使うと、普通の材料だけでは得られない特別な性質や強さが得られることがあるんだよ。たとえば、軽くて丈夫な材料を作ったり、熱に強い材料を作ったりすることができるよ。

## だから、複合材料技術ってなに？

複合材料技術は、異なる2つ以上の材料を組み合わせて、新しい特別な材料を作る技術のこと。この新しい材料は、元の材料の良いところだけを取り入れて、もっとすごい性質を持つことができるんだ。

# まとめ

このように、複合材料技術は、いろんな材料を組み合わせて新しい特別な材料を作る技術。この技術により、とても強くて、特別な性質を持つ新しい材料ができるんだよ。
せんせー、ナノワイヤーってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、ナノワイヤーってなに？

# ナノワイヤーとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## ナノワイヤーって何？

みんな、細い髪の毛って知ってる？ナノワイヤーは、その髪の毛よりもずっとずっと細い線なんだよ。実際には目で見ることができないくらいの細さだよ。

## どういうこと？

「ナノ」という言葉は「とても小さい」という意味があるんだ。だから、ナノワイヤーはとても細いワイヤーということ。このワイヤーは特別な材料で作られ、電気や情報を運ぶのに使われることがあるんだ。

## どうしてそれがすごいの？

ナノワイヤーはとても細いけれど、特別な性質を持っているんだ。たとえば、電気をとてもよく通すことができたり、特定の光を放ったりすることができるよ。これにより、電子機器や医療の分野での利用が期待されているんだよ。

## だから、ナノワイヤーってなに？

ナノワイヤーは、目で見ることができないほど細い線。この細い線は特別な性質を持っていて、たくさんの技術や研究で使われているんだ。

# まとめ

このように、ナノワイヤーはとても細いけれど、特別な能力を持った線なんだ。未来の技術や医療の進歩に役立てるため、たくさんの人たちが研究しているんだよ。
2023/10/16主にITとかセキュリティの記事

グーグルのAIに自社コンテンツを学習させたくない！ Bardをブロックするrobots.txt指定【海外＆国内SEO情報ウォッチ】(10/14)
https://www.suzukikenichi.com/blog/seowatch20231013/

セキュリティ担当者がよく使う5つのプログラミング言語、何が役立つのか？(10/14)
https://atmarkit.itmedia.co.jp/ait/articles/2310/14/news023.html

標的型攻撃（APT）グループ「Turla」による2014年から2023年までの活動の実態を解説(10/13)
https://www.trendmicro.com/ja_jp/research/23/j/examining-the-activities-of-the-turla-group.html

フィッシングに脅迫メール　ネット上の身近な「脅威」に自衛策は(10/14)
https://news.yahoo.co.jp/articles/a438bd9fe041007e7ce96475be860fc3b015047f

ハッカーがメール詐欺でXRPコミュニティを標的とする新鮮な攻撃を開始(10/13)
https://nextmoney.jp/?p=61609

サンリオで利用者の情報漏えい　オンラインショップ(10/14)
https://www.47news.jp/9989760.html

被害額は約860万円　電話会社名で届いたショートメール信じ70代女性　約60回にわたり現金振り込みだましとられる　《新潟》　(10/13)
https://nordot.app/1085479390550786924

Local Web3 Communityが『Crypto Aid Israel』を立ち上げ、避難民を支援(10/14)
https://crypto-times.jp/crypto-aid-israel-launch/

IoTゲートウェイとは？導入のメリット、活用事例について詳しく解説(10/14)
https://zuuonline.com/archives/267055

【地方再生・創生論 327】生成AIをいかに活用するか　松浪健四郎(10/14)
https://www.kankokeizai.com/%e3%80%90%e5%9c%b0%e6%96%b9%e5%86%8d%e7%94%9f%e3%83%bb%e5%89%b5%e7%94%9f%e8%ab%96-327%e3%80%91%e7%94%9f%e6%88%90ai%e3%82%92%e3%81%84%e3%81%8b%e3%81%ab%e6%b4%bb%e7%94%a8%e3%81%99%e3%82%8b%e3%81%8b/

「中国から毎日数百万回のサイバー攻撃」台湾外交部長(10/12)
https://nordot.app/1085173161194160830?c=220450040231249399

並列処理がとても苦手なPythonはプロセスを分けよう
コードを書く時に意識したい2つのTipsと2つの落とし穴(8/8開催)
https://logmi.jp/tech/articles/329470

（新書・文庫）『ウクライナのサイバー戦争』松原実穂子著(10/14)
https://www.nikkei.com/article/DGKKZO75242440T11C23A0MY6000/
せんせー、バイオインフォマティクスってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、バイオインフォマティクスってなに？

# バイオインフォマティクスとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

#バイオインフォマティクスは、生物学と情報科学を統合した分野であり、生物学的データの収集、管理、分析、および解釈に関連する情報技術の応用を指します。これには、ゲノム配列、タンパク質の構造と機能、メタボロミクスデータ、などの生物情報の大規模なデータセットの解析が含まれます。

以下は、バイオインフォマティクスの主な活動や応用の概要です：

## 配列解析: 

DNA、RNA、タンパク質の配列を比較・解析し、機能的または進化的な意義を見つけ出す。

ゲノミクス: 生物のゲノム全体の情報を解析して、遺伝子の位置、数、機能などを特定します。

## プロテオミクス: 

タンパク質の発現、構造、機能を大規模に解析します。

## 構造バイオインフォマティクス: 

タンパク質やRNAの３次元構造を予測、解析する。

## メタボロミクス: 

生物の代謝物のパターンを大規模に解析し、それらの生物学的役割を理解します。

## 比較ゲノミクス: 

異なる生物種のゲノムを比較し、共通点や違いを探る。

データベースとオントロジー: 生物学的データの収集、整理、共有のためのデータベースを作成・管理する。また、生物学的情報の体系的な表現や分類を行います。

# まとめ

バイオインフォマティクスの方法論やツールは、近年の高度なシーケンシング技術やその他のオミクス技術の進展により、大量の生物学的データが生成されるようになったことから、特に重要性を増しています。このようなデータを効果的に解析し、新しい知見や予測を導き出すために、バイオインフォマティクスのスキルや知識が不可欠となっています。
せんせー、バニシングエレクトロニクスってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、バニシングエレクトロニクスってなに？

# バニシングエレクトロニクスとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## バニシングエレクトロニクスって何？

考えてみて、一時的に使いたい電子デバイスがあるとします。使い終わった後、そのデバイスは自然に土や
水に溶け込んで、環境に害を与えずに消えてしまう…それが「バニシングエレクトロニクス」です。

## なぜ必要なの？

昨今、私たちが使う多くの電子デバイスは、使い終わった後も環境に残ります。これは、地球にとって大きな問題となっています。バニシングエレクトロニクスは、この問題の一部を解決する手段として注目されています。

## どんな技術？

バニシングエレクトロニクスを作るためには、特別な素材や技術が必要です。例えば、水に溶ける素材、生分解性のプラスチック、特殊な電気回路などが考えられます。

## どんな用途が考えられる？

短期間でのミッションや研究、一時的な監視やデータ収集など、一時的な使用が求められる場面での使用が考えられます。

# まとめ

バニシングエレクトロニクスは、環境に優しい電子デバイスの新たなアプローチです。未来の持続可能な社会を実現するための、一つの大きなステップと言えるでしょう。
unityを学ぶためのC#の基本文法の学習

今回はUnity上で特によく使う制御構造5種類を学んでいきます
# 制御構造
プログラムを実行するために条件に応じて実行内容を変化させる必要があります。
プログラムの途中で分岐やループをさせるための記述を制御構造と言います。


　① if else文

```csharp:if else文
ver hp = 50;
if(hp < 10) {
    Debug.Log("HPが無くなりそうだよ!");    //　HPが10未満の場合に表示される
} else if (hp < 30){
    Debug.Log("HPが減ってきたよ")          //　HPが30未満の場合に表示される
} else {
    Debug.Log("HPはまだあるよ");           //　それ以外の場合に表示される
}
```

if else文は「もし〜であれば、それ以外の場合は」という条件で処理を分岐させる。


② for文

```csharp:for文
for (var i = 0; i < 10; i++){          //i = 0から始まりiが10未満の場合は処理を繰り返し、処理の最後にiを1増やす
    Debug.Log(i);                      //0~9までが順番に出力される
}

for (var i = 0; i < 10; i++){
    if (i == 5) break;                //5に達したら処理を抜ける
    Debug.Log(value);                 //5で処理が中断されるため0~4までが出力される
}
```

for文は処理を任意の回数繰り返す際に使用する。
途中で処理を抜けたい場合は「break;」の記述をする。


③ foreach
```csharp:foreach
var values = new int[] {1,10,100,1000};
foreach (var value in values) {
    Debug.Log(value);                   //1,10,100,1000が順に出力される
}
```

foreachは配列や、List内の要素を順に読み取りその数だけ処理を繰り返します。


④ while
```csharp:while
var value = 0
while(value < 90) {                    //数値が90未満であれば処理を繰り返す
    value = Random.Range(0,100);       //0~99のランダムな値を生成する
    Debug.Log(value);
}
```
whileは条件が真の間処理を繰り返す。
上記の例では91~99が生成された場合に処理が終わる。


⑤ switch
```csharp:switch
var valuee = 1;                     //値を変えるとログ出力も変わる
switch(valuee)
{
    case 1:
      Debug.Log("おはよう");
      break;
    case 2:
      Debug.Log("こんにちは");
      break;
    case 3:
      Debug.Log("こんばんは");
      break;
    case 4:
      Debug.Log("おやすみなさい");
      break;
}
```
switchでは渡された値に応じて条件が分岐する。
あたいの種類が決まっている列挙型(Enum)と一緒に使うことが多い
watsonx.ai Llhma 2 での日本語表示Tips


IBMが2023年7月より提供している生成AIのサービス、watsonx.aiは、リリース当時は日本語対応したLLMが提供されていませんでしたが、早々に日本語対応しているMeta 社のLlhama2を取り組む発表をし、

https://jp.newsroom.ibm.com/2023-08-10-IBM-Plans-to-Make-Llama-2-Available-within-its-Watsonx-AI-and-Data-Platform

以下の通り、2023年9月8日にLlhama2は、watsonx.ai利用が可能になっています。

https://news.mynavi.jp/techplus/article/20230908-2767289/


日本語対応しているLLMであるLlhama2の概要は、2Meta社のサイトをご覧ください。

https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/

論文では、Fine Tuning などの方法も記載があります。



IBM独自言語モデルであるGraniteでは、日本語対応が2024年初の予定なので、2023年の間はLlhama2を使っていく必要がありそうです。

https://it.impress.co.jp/articles/-/25373

Granite LLMの論文は以下となり、大変に読みごたえがある内容になっています。

https://www.ibm.com/downloads/cas/X9W4O6BM


さて、watsonx.ai上のLlhama2では、未学習の状態で1文では、日本語の入力に対して、
英語で出力されることがあります。

例えば、以下のような例です。多くは「I don't know」と返されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94200/8b952288-8869-5be8-a3a6-beaac75ff0c5.png)


~~~
curl "https://us-south.ml.cloud.ibm.com/ml/v1-beta/generation/text?version=2023-05-29" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -d $'{ "model_id": "meta-llama/llama-2-70b-chat", 
"input": "東京はどこですか？\\n", 
"parameters": {  "decoding_method": "greedy", 
"max_new_tokens": 100,  "min_new_tokens": 0,  "stop_sequences": [   "\n"  ],  "repetition_penalty": 1 }, 
"project_id": "7ef6d21a-2b41-4242-9e61-f0765e819325"}'
~~~

その対策としては、ひとまず、2行にすることをお勧めます。
回答内容はともかく、日本語での出力となりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94200/5d8d897b-1e07-157b-27f9-609c75f12515.png)


~~~
curl "https://us-south.ml.cloud.ibm.com/ml/v1-beta/generation/text?version=2023-05-29" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -d $'{ "model_id": "meta-llama/llama-2-70b-chat",
"input": "東京はどこですか？\\n大阪はどこですか？\\n",
"parameters": {  "decoding_method": "greedy", 
"max_new_tokens": 100,  "min_new_tokens": 0,  "stop_sequences": [   "\n"  ],  "repetition_penalty": 1 },
"project_id": "7ef6d21a-2b41-4242-9e61-f0765e819325"}'
~~~





Prompt TuningのうちでのFew shot Learningを加えると更に精度は良くなります。
回答内容も日本語、かつ、それなりの内容になりました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94200/38cd50cc-2fb2-0de5-0425-9a58a7d712c6.png)


```
curl "https://us-south.ml.cloud.ibm.com/ml/v1-beta/generation/text?version=2023-05-29" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -d $'{
  "model_id": "meta-llama/llama-2-70b-chat",
  "input": "東京はどこですか？\\n\\n日本の関東地方です。\\n\\n大阪はどこですか？\\n\\n日本の関西地方です。\\n\\n東京はどこですか？\\n大阪はどこですか？\\n",
  "parameters": {
    "decoding_method": "greedy",
    "max_new_tokens": 100,
    "min_new_tokens": 0,
    "stop_sequences": [
      "\n"
    ],
    "repetition_penalty": 1
  },
  "project_id": "7ef6d21a-2b41-4242-9e61-f0765e819325"
}'
```


複数行で、Few Shotを加えるのが、watsonx.ai上のLlhama2で日本語出力させる際のTipsです。
（2023年10月時点の状況のため、今後、変わる可能性は大いにあります。）
VSCode - ポートフォリオ制作 コーディング2日目(2023/10/15)

2023/10/15 VScode - ポートフォリオ制作

・デザインカンプの縦横比
・レスポンシブデザインのブレイクポイントについて
	PC (960) : 950~1200px
	タブレット(520) : 600~834px
	スマホ (320) : 375~414px

・フッターに「TOP」ボタンの実装
https://rilaks.jp/blog/pagetop-css/

・ハンバーガーメニューの作り方

☆https://web-camp.io/magazine/archives/88361
https://yypoup.com/display-hamburger-menu-with-css/
↪︎javascript「ページ内リンクに飛ぶ、メニューを消す」
https://aw1.jp/javascript/【脱jquery】cssで動作するハンバーガーメニューでペー/

・ブレイクポイントを幾つ作成するか
	↪︎出来るだけ少なくするには

・マーカーで引いたような下線
「background: linear-gradient(transparent 空白にしたい線の割合、色、0%);」

/* 30%下線にマーカー表示 */
.marker-border-3{
    background: linear-gradient(transparent 70%, #ffcccc 0%);
}

・テキストに下線
    text-decoration: underline;
    text-decoration-color: #8A9FCC; 
    text-decoration-thickness: 7px;

——

- 680 メインビジュアルの画像を、(ブレイクポイント1280px)縮小の際に右側固定で左からカットするには。

- 680 / mainvisual p : 文字位置

- 680 / about text : テキスト画像の修正

お問合せクリックでメール起動



——
company : 1280 / 縦並び
footer : 1280 / 余白
company :  900 文字を中央配置
header : 900 / ハンバーガーメニュー
news list : 900 / 縦並
footer : 900 / フッター文字サイズ

*about : 600 / 文章
about : 414 / 文章

<変更>
company -  枠線あり
footer - 配置変更
GitHubで現在利用できるMermaidのバージョンを確認する

# はじめに
Mermaidの公式で紹介されているにもかかわらず、GitHub上でプレビューされない記法がありました。

プレビューされなかった記法のセクション：[Actor Creation and Destruction (v10.3.0+)](http://mermaid.js.org/syntax/sequenceDiagram.html#actor-creation-and-destruction-v10-3-0)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366737/4f19bf3c-0270-ee2e-197d-388980ac541e.png)

セクションタイトルにも`(v10.3.0+)`と書いてあるし、十中八九デプロイされているバージョンのせいだろうなーと思いつつ、じゃあ実際にGitHub上で利用できるバージョンはいくつなの？を知るのに意外と情報が出てこなかったので書いておきます。

# GitHub上で現在利用できるMermaidのバージョンを知る方法
GitHub内のwikiやmdファイルに
```
　```mermaid
　info
　```
```
と書くことで知ることができます。

結果：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366737/4564cb39-c8a4-516b-20b1-87005739cd91.png)

やっぱり古いせいでしたね。


# おわりに代えて：Qiitaで利用できるMermaidのバージョン
Qiitaでは現在、以下のバージョンのMermaid記法が利用できるようです。
```mermaid
info
```
Qiitaでも同じように冒頭の記法は使えませんが、こんな感じ↓でバージョン付きでSyntax errorを教えてくれるので親切ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366737/8f91f1b2-fdb9-e9c6-2675-daa9e167130f.png)

GitHubもこうやって書いてくれるとわかりやすいんだけどな～

# 参考ページ
https://github.com/orgs/community/discussions/37498#discussioncomment-7152968
phpでTwitterに変わるようなSNSを作りたかった話

# phpでTwitterに変わるようなSNSを作りたかった話
こんにちは～～～～～～
今回は今年の夏にやったSNSの開発について振り返ります～
ソースコードも配布しているので触っていただけるとうれしいかも

## なぜ作ろうと思ったか
__*2023年7月26日 午後1:08*__
__*一人のゆっくり実況者はつぶやいた...*__
*今思ったんだけどもしTwitterがなくなるならTwitterの商標とかもなくなるわけでしょ？*
*そしたら自分がTwitter作ればいいんじゃね？（？）*
__*ここから伝説は始まった...*__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3227805/15853d0c-3697-740a-e985-dbe12c8dfa35.png)

## 最初期
────────────リプライWorld─────────────
Twitterユーザーの人:「タ〇ッツーの開発者さんと共同制作してみたり」
だいちまる:「こちらから話しかけるのもなかなか勇気のいるもので...」
────────────────────────────────

こうして完全オリジナルのSNS開発は始まった。

## 模索期
いろいろあってPHPでのWebサービスの開発を開始。
アカウント登録機能だけのWebサービスが完成...(まだSNSですらない)
ここの時点で今のuwuzuのログインページが完成
※この頃はまだ本人確認サービスでした
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3227805/a7f69008-f0bb-9068-2036-39870f71e11f.png "7/31")


## 制作初期 - 2023年7月23日 ~
まず最初に実装したのは...
投稿機能...
あっカスタム絵文字とプロフィールもこのころだったはず。
まだこの頃はいいねすら完成していなかった...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3227805/47cfe1af-d33f-0bc8-f069-28db27198d8b.png "8/8")

※ChatGPTにゴリゴリに頼り散らかしてた

## 制作中期 - 2023年8月3日 ~ 
ここからuwuzuは始まった(サービス名決定)

いいね、返信やフォローなど徐々に機能が充実してきた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3227805/454977d6-5486-4abe-0a31-647c2e79f799.png "8/8")
これは開発初期のいいね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3227805/074b0eb8-ad83-f0c4-dcae-10c626b2a1ae.png "8/13")
結局最終的に「追記」機能になった背景情報機能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3227805/77d6b286-38bd-48b9-1b6a-bd3e4abe1f86.png "8/13")
返信機能開発中...
既に画像は投稿できてたみたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3227805/9099a02a-b32c-6adb-b9a4-f9a64a7818e1.png "8/14")

## 公開が最大の学び - 2023年8月16日 ~ 8月17日
さくらのレンタルサーバーで小規模ながら公開、
あっさりユーザー数が100人を超え503エラーが多発。
およそ半日でサーバーをCoreserverに移行！
したはいいけどまだまだユーザー数は増え続け...
致命的なバグも多発。
現在の共同開発者により脆弱性が発見されたり普通に攻撃されたり...
いろいろあって一日でサービス終了した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3227805/ef6f25f7-78a0-2915-53bb-6f66f6dee5ef.png "8/17")

## やめようかと思うがとある人からの連絡により開発継続 - 2023年8月17日 ~ 
正直この時の僕は本当に焦っていた。
どう対応するべきか。
ベテランであると思われるプログラマー様からたくさんの連絡が来て...
つらかったので開発自体をやめようとも思ったけど、
いろんな人から期待の声もあって、手伝ってくれる人も出てきてくれた。

そんなこんなあり非公開で開発再開。

## ほぼ公開せずに開発再開 - 2023年8月18日 ~ 
ここからdev.uwuzu.netのサービスが始まる。
本当にただのデバッグサーバーながら少しずつデバッグに協力してくれる人が来てくれた。
招待機能もここで実装。
ここから大幅に進化してゆく。

## サーバー代に苦しむ - 2023年10月14日 ~ 
公開サーバーが無くなってからもうすでに2カ月がたとうとしていた。
あのときuwuzuに興味を持っていた人もかなり離れてしまった。
そんななか毎月990円を払うのはきつかった～

## 今 - 2023年10月15日 ~ 
みらいが見えないながら勢いで寄付の受付を開始。
本当に開発を継続することができるのだろうか...

## 未来 - 2023年 ~ 
uwuzuのサーバー数は増えるのか、ユーザー数は増えるのか。
uwuzuは無くなるのか、知らぬ間に消えたサービスとなるのか。
どう進化するかが自分にあると思うと怖く思うが楽しみでもある。

## おわりに
ソースコードはGithubでちょくちょく更新してます。
Releaseからどうぞ～
何かありましたらuwuzuサポートDiscordサーバーからご報告よろしくお願いいたします。
サーバーを立てる際は自己責任でお願いします～
[Github](https://github.com/Daichimarukana/uwuzu)

変な記事でしたが以上です。
だいちまるでした～
React開発環境の用意

## Node.js

推奨版バージョンのNode.js https://nodejs.org/ja をインストールする

## React 公式サイト
https://ja.legacy.reactjs.org/

# スキャフォールディングにてReact PJを新規作成する
## Create React App

Create React AppはReactが公式に推奨されている、最も使用されているスキャフォールディング

公式サイト https://create-react-app.dev/


### プロジェクトを作成する

TypeScriptを使用する

```shell
### npx を使用する
npx create-react-app my-app --template typescript

### npm を使用する
npm init react-app my-app --template typescript

### yarn を使用する
yarn create react-app my-app --template typescript
```

### プロジェクト構造

プロジェクトの入り口 `src/App.tsx`


### プロジェクトを起動する

`npm run start`

## vite

Vite は Vue の作者がリリースしたパッケージングツールで、起動速度も速く、近年で非常に人気です。

公式サイト https://vitejs.dev/guide/

### プロジェクトを作成する

```shell
npm create vite@latest react-demo-vite --template react-ts

yarn create vite react-demo-vite --template react-ts
```

その他の作成方法は公式サイトをご参考ください。

### プロジェクトの構造

プロジェクトの入り口 `src/App.tsx`


### プロジェクトを起動する

`npm run dev`
(デカ文字)ESP32でカラー液晶、温度計を作って遊ぶ2(センサー仕様)


(デカ文字)ESP32でカラー液晶、温度計を作って遊ぶ2(完成するか不明)


参考


https://qiita.com/caa45040/items/1c0616cc38053efe00cc


テスト結果

![o_cop676.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/47b2f17f-d6ce-ea76-5354-cc1f769d43e0.jpeg)


![o_cop677.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/b88bbe10-7330-9d54-1f0f-e789b09eaf18.jpeg)

![o_cop678.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/639c15d6-a05e-a36d-a52f-025dec09eb5a.jpeg)


stm32g031側の処理





```c++


//I2C_5851_HS_031_color1

#include <Arduino.h>
#include <Wire.h>
#include <HardwareSerial.h>

#define S5851A 0x48


//初期化
void setup()
{

  delay(3000); //not delete

  //シリアルの初期化
  Serial.setTx(PA2_ALT1);
  Serial.setHalfDuplex();
  Serial.begin(9600);

  //i2cの初期化
  Wire.setSDA(PA12);
  Wire.setSCL(PA11);
  Wire.begin(); //pa12 pa11

} //setup


//メインループ
void loop()
{

  //0番目のレジスター
  Wire.beginTransmission(S5851A);
  Wire.write(0);
  Wire.endTransmission();
  delay(1);

  //温度の読み込み
  int s; //センサーの値
  
  Wire.requestFrom(S5851A, 1);

  //1
  while(Wire.available())  {    // 要求より短いデータが来る可能性あり
    s = (int)Wire.read();       // 1バイトを受信
  }//while

  //sのエラー処理
  if( (s < 0) || (s > 99)) { s = 99;}


  //1の桁と10の桁を分離して二進化十進へ
  int bh,bl,bc;

  bh = s / 10;
  bl = s - (bh * 10);

  bc = (bh*16)+bl;

  //温度の表示 debug
  //Serial.print( "[" );
  //Serial.print( s );
  //Serial.print( "]" );
  //Serial.println();


  //温度の表示 キャストする　強制文字化
  //Serial.print( "<" ); //debug
  Serial.print( (char)bc );
  //Serial.print( ">" ); //debug


  //1秒の待ち
  delay(1000);

} //loop



```
github enterprise × codebuild でビルドプロセスを自動化する -後編-

## はじめに
こちらの前編で、githubとECRの更新までを実施しました！
lambdaの更新は手動で実施する方法を記載しましたが、後編ではそのパートを自動化します。
これにより、ローカルからgithubにpushすると、対象のlambdaまで自動で更新できるようになります！
https://qiita.com/JamyJamy/items/e79c6c4b632162c26f96

## アーキテクチャ概要
前編で実施したECRの更新をトリガーに、EventBridgeを呼び出します。
そして、そのEventBridgeが、対象となるlambdaを更新するlambdaを作成することで、アプリケーションコードの更新が自動化されます！
![スクリーンショット 2023-10-15 23.24.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3351273/b04c2daa-b1eb-d46d-da25-fd7129123423.png)

## 実装例
### 更新用Lambda
EventBridgeから呼び出される更新用Lambdaを作成します！
こちらについてはシンプルにコードを書くだけなので、動いた例として記載します！
今回の例だと、マッピング用にdicやlistを用意して、新しい機能が追加されるたびに、こちらにも追記していくような形になります！
（アプリケーションにもよりますが、もう少しいい方法はありそうですね、、）

大まかな流れとしては、以下のような処理になっています！
* EventBridgeからのイベント情報を取得（ECRリポジトリ名）
* 取得したリポジトリ名と、更新するlambda関数名をマッピング
* マッピングしたLambda関数のイメージを更新

Lambda関数の更新に関係あるECRかどうかは、この関数内で判断しています。
EventBridgeのルールで追加してもOKですが、今回は一括で関数内で判定してしまいます！

```python:lambda_updage
import boto3

def lambda_handler(event, context):
    #ECRからのイベント情報を取得
    event_detail = event.get('detail', {})

    #ECRのリポジトリ名を取得
    repository_name = event_detail.get('repository-name', None)

    #ECRのリポジトリ名にインデックスを付与
    ecr_index_dict = {
        "ECR_repo1":0,
        "ECR_repo2":1,
        "ECR_repo3":2
    }

    #lambda関数のリスト（順番をインデックスと対応させる）
    lambda_function_list = [
        "Lambda1",
        "Lambda2",
        "Lambda3"
        ]

    #ECRのURIリスト（順番をインデックスと対応させる）
    ecr_uri_list = [
        "<account-id>.dkr.ecr.ap-northeast-1.amazonaws.com/<リポジトリ名1>:latest",
        "<account-id>.dkr.ecr.ap-northeast-1.amazonaws.com/<リポジトリ名2>:latest",
        "<account-id>.dkr.ecr.ap-northeast-1.amazonaws.com/<リポジトリ名3>:latest"
        ]


    #更新対象のLambda関数のECRが更新されたら、Lambda関数を更新
    if repository_name in ecr_index_dict:
        function_index = ecr_index_dict[repository_name]
        
        lambda_function_name = lambda_function_list[int(function_index)]
        image_uri = ecr_uri_list[int(function_index)]
        
        #lambda関数のイメージを最新化
        lambda_client = boto3.client('lambda')
        
        response = lambda_client.update_function_code(
            FunctionName = lambda_function_name,
            ImageUri= image_uri,
            )

    #try-catchでも良いが、関係ないECRは無視するだけなので一旦printだけ
    else:
        print("登録なし")
```

### EventBridge
* コンソールからEventBridgeを選択
* ルールを作成
* 任意のイベント名を設定
* 「イベントパターン」以外はデフォルトでOK
* 「パターンを編集」で書き込む
    * イベントソースの下でも、GUIで設定ができます！
![スクリーンショット 2023-10-15 23.35.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3351273/7aba6eb8-9170-6186-44b1-87ba381910a0.png)

```json:イベントパターン例
{
  "source": ["aws.ecr"],
  "detail-type": ["ECR Image Action"],
  "detail": {
    "result": ["SUCCESS"]
  }
}
```
* 「ターゲットを選択」でLambda関数を選択
* 上記で作成した、更新用Lambda関数を選択
* 「ルールを作成」を選択


## おわりに
これで、前編と合わせて、git pushからLambda関数を自動で更新することができました！

このパイプラインの実装方法は他にもありますが、Dockerを使ったパイプラインで、git-CodeBuild-ECR-EventBridge-lambdaで実装している記事は見つけられなかったので、ご参考になれば幸いです！

お読みいただき、ありがとうございました！
WireSharkでフラグメント化されたUDPパケットをキャプチャする

# 元のフィルタ(フラグメント化されたパケットがキャプチャされない)
`udp port 12345`

# フラグメント化されたパケットもキャプチャできるようにしたフィルタ
`udp port 12345 or (ip[6:2] & 0x1fff != 0)`

# 背景
UDPパケットをポート番号指定でキャプチャすると、フラグメント化されたパケットがキャプチャされない。
以下の例ではUDPのペイロードを900から100ずつ増やしたパケットを送っている。

* ポート番号のみ指定したケース
`udp port 12345`

ペイロード長1500を超えるあたりからフラグメント化された最初のパケットしかキャプチャできていない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/970678/a4774209-0fb2-acd6-e20b-136e03344a06.png)

* フラグメントを含むようにしたケース
 `udp port 12345 or (ip[6:2] & 0x1fff != 0)`

ペイロード長1500以降のパケットもフラグメント化された続きの部分がキャプチャされ、全体が再構成されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/970678/2a0e6134-66de-2f6e-a598-19aad182e2b6.png)

# 備考
フラグメント化された残りの部分にはUDPヘッダが含まれていないので、ポート番号での絞り込みができない。
IPアドレスでの絞り込みは可能で、宛先が192.168.0.1の場合は以下のようにする。
`udp port 12345 or (ip[6:2] & 0x1fff != 0 and ip dst host 192.168.0.1)`

# 検証環境
WireShark Version 3.4.8 (v3.4.8-0-g3e1ffae201b8) 

# 参考記事
https://osqa-ask.wireshark.org/questions/25645/what-is-the-capture-filter-equivalent-of-the-display-filter-ipfrag_offset-0/
FirebaseUI(iOS)を日本語対応で使う方法 〜多言語対応〜

# FirebaseUI日本語対応
FirebaseUIはデフォルトで下記のように英語になっています。
これを日本語に変更する方法を紹介します！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/ed6c3548-b73e-b61d-cdf4-a782cbd7edde.png" width=300>
### FirebaseUIを日本語に変更する方法を紹介します！
PROJECT > Info > Localization > +からJapanese選択し、追加
![eb511ae6593d000a6c8a2b1269371f9b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/b4cb6708-832b-8035-59ac-8c11a0fab310.png)
Main.storyboardとLaunchScreen.storyboardファイルを選択し、Finishをおす！
![110e18e2709a6b94e70251469267b821.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/46f63372-b672-f9ea-207d-b3cd09f864ae.png)
そうすると選択したMain.storyboardとLaunchScreen.storyboardに日本語と英語に対応のStrings Fileが作成されています！
![3ef8c8343e11834786ef667ea93948d1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/00f0a789-494e-fc7e-9720-1170fee0acf3.png)
シミュレーターの設定 > 一般　> 言語と地域　>　優先する言語を日本語にするとFirebaseUIを日本語対応することができました！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/82b31b5f-69f9-4870-ab73-9f85b19e70dd.png" width=300>

# FirebaseUI多言語対応
日本語と英語のみならず、FirebaseUI多言語に対応することができます！
例として韓国語に対応させてみます！
PROJECT > Info > Localization > +からKorean選択
![f1e04cf30c8150b2f5a3f672e76566ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/4bf3963f-fe1a-bfc7-3cd7-111ff9dbcbf5.png)
シミュレーターの設定 > 一般　> 言語と地域　>　優先する言語を韓国語にするとFirebaseUIを韓国語対応することができました！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/d7ec3679-5dc7-f55d-7231-6d36b3ee0b07.png" width=300>

上記の例だとユーザーのiPhoneの言語設定によって、英語、日本語、韓国語の3言語に対応することができます！多言語対応することで、世界のユーザーがアプリで使用する言語をiPhoneの設定から選べるのは良いですよね！

# おまけ〜実験〜
Localizationにイタリア語を追加してないにも関わらず、iPhoneの設定言語がイタリア語である場合、SetDefaultで設定している言語が表示されます。
![5a04dc299b1bd98196738636cd9794eb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/3c3fd7c7-d572-af8e-0667-093f4f653fc8.png)

iPhoneの設定言語がイタリア語にし、試してみた。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/b5f9151e-620f-d54b-f9ea-213235ea775c.png" width=300>


Localizationにイタリア語を追加してないので、SetDefaultで設定している日本語が表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/64c3d4cb-f399-b1ee-ea22-d17980f43307.png" width=300>

※英語は例外的にLocalizationに英語を設定していなくても、iPhoneの設定言語を英語にすると対応してくれるようです！
FirebaseUIのDefault初期値が英語になっているためかと考察しました！

# 参考文献

https://sunny10side.com/localization-settings-in-xcode/
機械学習 不動産データの線形回帰分析 メモ

## データを使って予測をしたい
### やること
- データセットを作る
- データを特徴量、ターゲットに分割
    - 特徴量
        - 予測に必要なデータ
    - ターゲット
        - 予測したいデータ
- モデルの作成
- モデルの学習
- 特定の物件のデータを投入して価格の予測

### コード
必要最小限のものに絞る
```python
import pandas as pd
from sklearn.linear_model import LinearRegression
import joblib

# オリジナルの物件データセットを作成
data = {
    '専有面積': [70, 80, 100, 120, 150],
    '築年数': [5, 10, 8, 15, 20],
    '価格': [3000, 4000, 5000, 5500, 6000]
}

df = pd.DataFrame(data)

# 特徴量とターゲット変数の分割
X = df[['専有面積', '築年数']]
y = df['価格']

# モデルの作成と学習
model = LinearRegression()
model.fit(X, y)

# 特定の物件情報を入力して価格を予測
new_property = pd.DataFrame({'専有面積': [90], '築年数': [12]})
predicted_price = model.predict(new_property)

print(f'予測価格: {predicted_price[0]}')

# 学習したモデルを出力
joblib.dump(model, 'linear_regression_model.joblib')
```

### 学習したモデルを読みこんで予測をする
```python
import joblib

# 保存したモデルを読み取り
loaded_model = joblib.load('linear_regression_model.joblib')

# 特定の物件情報を入力して価格を予測
new_property = pd.DataFrame({'専有面積': [90], '築年数': [12]})
predicted_price = loaded_model.predict(new_property)

print(f'予測価格: {predicted_price[0]}')
```

## まとめ
機械学習って何？ってよくわからなかったが、手を動かしてやってみることで「ああ、そういう感じ？」みたいな感覚がつかめた。
【React】内容に合わせて高さが変わるtextarea

以下のように記述することで内容に合わせてtextareaの高さを自動で変更できます。

```tsx:Textarea.tsx

export default function TextArea() {
  return (
    <textarea
        onChange={(ev) => {
          ev.currentTarget.style.height = 'auto'
          ev.currentTarget.style.height = `${ev.currentTarget.scrollHeight}px`
        }}
    />
  )
}

```
Javascriptによるカラーピッカー

Javascriptによるカラーピッカーを使用するためのソースコードを紹介させていただこうと思います。
各構文に以下のコードを追加していただくと使用可能になるかと思います。
<html>
<input type="color" id="colorPicker" value="#000000">

<script>
const colorPicker = document.getElementById('colorPicker');
    
let currentColor = colorPicker.value;
   
colorPicker.addEventListener('input', () => {
      currentColor = colorPicker.value;
});
</script>
</html>
【初心者向け】RGBとCMYKとは？Photoshopで気になった2つの違いについて解説！

## はじめに
こんにちは。
Photoshopを模索中のエンジニアです。
最近AI昨日が増えてきて色々ついていけるようにしたいものです、、！！
そのためにもQiitaでアウトプットとして記事を書いていこうと思います。

## 概要
最近HP作成をしていて、「RGB」と「CMYK」という単語を知り、気になったので今回詳しく調べてみました！！

## RGBとCMYKって何？？？
RGBは「R=Red(レッド)」「G=Green(グリーン)」「B=Blue(ブルー)」のそれぞれの頭文字をとってRGBと呼ばれています。
RGBは色を混ぜれば混ぜるほど明るい色へ変化します。
テレビやパソコン、スマホなどモニターの色をRed、Green、Blueの三原色で色を再現しています。

CMYKは「C=Cyan（シアン）」「M=Magenta（マゼンタ）」「Y=Yellow（イエロー）」「K=Key Plate（黒）」のそれぞれの頭文字をとってCMYKと呼ばれています。
CMYKは、色を混ぜれば混ぜるほど濃い色へと変化していきます。
CMYKは印刷物で色を表現するためのものとなります。

## RGBとは
モニターの色を作る3色の光です。
テレビやパソコン、スマホなどモニターは光を発するものなので、色より「光」になります。

モニターは「小さいマス（ピクセル）」が集まっていて、その１つ１つに色があり「レッド」「グリーン」「ブルー」の　3色を混ぜ合わせてできています。
Photoshopで見てみると、画像をアップにするとわかるように「１つ１つのマス（ピクセル）」が見えます。
この１つ１つは「レッド」「グリーン」「ブルー」の　3色が混ざり合ってできた色となります。

<img width="300" alt="mojikyo45_640-2.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524155/90dffcec-30d2-4919-a291-b5e87a51b2f8.jpeg">
<img width="300" alt="mojikyo45_640-2.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524155/bbcac59e-6489-3b7a-93f6-1fbf4c2b12ef.jpeg">

## CMYKとは
印刷物の色合いを作り出す4色です。
印刷物には小さなドットがあり、その１つ１つのドットは「シアン」「マゼンタ」「イエロー」「黒」の4色が重なり合って色が作られています。

## RGBとCMYKの違いは？
| RGB | CMYK |
|:-----------:|:------------:|
| モニター    | 印刷物      |
| 「レッド」「グリーン」「ブルー」の３つの光  | 「シアン」「マゼンタ」「イエロー」「黒」の4色  |

なのでRGBでデザインしたものは印刷するとCMYKで出てきてしまいます。
 「レッド」「グリーン」「ブルー」で表現していたものが 「シアン」「マゼンタ」「イエロー」「黒」で出てきてしまうので、色合いが異なって出てきてしまいます。


## まとめ
今回は、「RGB」と「CMYK」について解説しました。
次回はそれぞれをPhotoshopで作成して比較してみたいと思います。
「RGB」と「CMYK」は、どちらも色を表現するための仕組みであり、RGBとCMYKの2つの特性を理解して今後活かしていきたいです！
(デカ文字)ESP32でカラー液晶、温度計を作って遊ぶ1(インターフェス仕様)


目的
カラー液晶、ESP32、STM32G031、I2C温度センサーを
上手く連動させて温度計を作る

図


![o_cop666.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/f51b6a1c-9bad-4ea8-b316-923546e11cda.jpeg)



ESP32と(昔、秋月で売っていた)STM32G031との
インターフェース仕様

1バイトバイナリ、パック、2進化10進で温度を
0から99まで送る


ESP32の受信プロトコル
おもに小マイコンを意識した、アルゴリズム(風呂に入りながら考えた。)
x シフトには、論理シフトと算術シフトがあるから注意せよ!!


```c++

#include <iostream>
using namespace std;
int main(void){
    // Your code here!
    
    printf("START\n");
    
    //                 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
    //                 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
    //                 -------------------------------
    int henkan1[16] = {0,1,2,3,4,5,6,7,8,9,9,9,9,9,9,9};

    //char ch=getcNS();
    char ch=0x46;

    int bh; //10の桁
    int bl; // 1の桁

    bh = henkan1[   (ch>>4) & 0x0f ];

    bl = henkan1[    ch     & 0x0f ];

    printf("bh=[%d]\r\n",bh);
    printf("bl=[%d]\r\n",bl);

    
    
}




```

結果

```

START
bh=[4]
bl=[6]

```
暗号プロトコルの「安全」という言葉の意味を考える (備忘録：その1)

# はじめに
現在私たちが利用している暗号化技術は「安全」であることが保証されています．
では，この **「安全」** とはどのように定義されるのでしょうか？
今回から数回に渡る記事では公開鍵暗号方式の一つであるElGamal暗号を例に安全性を証明することで，情報セキュリティの暗号理論における安全とは何か，雰囲気だけでも掴んでもらうことを目標とします．

現代暗号に触れたことある人にとっては当たり前すぎる記事かもしれませんが，暗号理論を研究する身として安全性証明は非常に重要であり，なおかつ非常に難しいため，私自身の備忘録としてこの記事を書きます．

本当は1つの記事で安全性証明まで行うつもりでしたが，煩雑になりすぎるので分けることにしました．ごめんなさい．

**今回の記事では「安全」という言葉を定義することをゴールとします．**

# ElGamal暗号の概要
まずどのような暗号なのか知るためにWikipediaの概要から見ていきます．
> ElGamal暗号（エルガマルあんごう、ElGamal encryption）とは、位数が大きな群の離散対数問題が困難であることを安全性の根拠とした公開鍵暗号の一つである。1984年Taher Elgamalが発表した。
([Wikipedia](https://ja.wikipedia.org/wiki/ElGamal%E6%9A%97%E5%8F%B7)より引用)

今回の記事内では，ElGamal暗号の具体的なプロトコルには触れません．
安全性の根拠として非常に重要となる**離散対数問題**に触れていき，これを説明します．(群論などの一般的な代数学の説明は省きます)

# 離散対数問題(Discrete Logarithm Problem: DLP)
<ins>素数$p$，位数が$p$となる乗法巡回群$\mathbb{G}$の生成元$g$が与えられた時に，$g^a\\ {\rm{mod}} \\ p$となる$a$を求めよ</ins>

離散対数問題の具体例は[こちらの記事](https://medium.com/acompany/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%A7%E4%BD%BF%E3%82%8F%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E6%9A%97%E5%8F%B7%E3%81%AE%E8%A7%A3%E8%AA%AD%E5%9B%B0%E9%9B%A3%E6%80%A7%E3%81%AE%E6%A0%B9%E6%8B%A0%E3%81%A8%E3%81%AA%E3%82%8B%E9%9B%A2%E6%95%A3%E5%AF%BE%E6%95%B0%E5%95%8F%E9%A1%8C%E3%82%92%E3%81%96%E3%81%A3%E3%81%8F%E3%82%8A%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B-b0612b6d256c)が参考になります．
<br>
そして，暗号理論の文脈では以下の仮定を利用します．

# 離散対数問題の仮定
<ins>離散対数問題を**多項式時間**で求めるアルゴリズムが存在しない(と仮定する)</ins>


## 仮定の妥当性
この仮定の妥当性を見ていきます．
実際には離散対数問題が多項式時間で解けるかどうかは判明していません．しかし，現在までに多項式時間で離散対数問題を解くアルゴリズムが発見されていないことから，**存在しないことを**前提とした安全性を示しています．
計算量理論の観点で言えばこの問題がPクラスの問題かもしれませんし，もっと上のクラスの問題かもしれません．

# 仮定の意味を考える
ElGamal暗号の概要から，次の一文を取り出します．
`位数が大きな群の離散対数問題が困難であることを安全性の根拠とした公開鍵暗号の一つである`

上記の文における「**離散対数問題が困難である**」が意味することは，先程の仮定における「**離散対数問題を多項式時間で求めるアルゴリズムが存在しない**」に該当します．
ここから反対に，「**ある問題(を解くこと)が効率的である**」とは「**ある問題を多項式時間で求めるアルゴリズムが存在する**」となります．

離散対数問題の一般的な説明では
「$(g,a,p)$から$g^a\\ {\rm{mod}} \\ p $を求めることは**容易**で，$(g,p,g^a\\ {\rm{mod}} \\ p)$から$a$を求めることは**困難**である」
などのように説明されていることが多いと思います．説明の中に含まれる **「容易」，「困難」** という言葉の裏には求解アルゴリズムの計算量が関係しています．

# 「安全」の本質
以上をまとめると安全性とはどのように定義されているのか見えてきます．

**暗号プロトコル上のある公開の情報から秘密の情報(例えば，公開鍵から秘密鍵，暗号文から平文など)を求めることが困難である．すなわち，ある公開の情報から秘密の情報を多項式時間で求める事ができない．**

これが「安全」という言葉の定義となります．

# 今回のまとめ
ElGamal暗号における安全性の根拠となる離散対数問題の仮定を例に「安全」とはどのように定義されているのか触れていきました．
今回の内容は自然言語による定義で，「理論といえば数式！」のような話はあまり出てきませんでしたが，次回以降は数式による定義が増えていきます．

次回の記事ではElGamal暗号のプロトコルを説明し，実際に「安全」であることを証明していきます．
値のグループ化 / Tableau Prep

Tableau Prep環境：Ver.2023.2.2

表記ゆれを修正したい場合に、この機能。
推測でグルーピングがある程度できます！
（画面が英語ですみません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531257/95251c6f-ccff-b8e6-0287-0029f42a2fbc.png)

設定画面では、上に丸いつまみがあり、これでグループ化のレベルが設定できます。
レベルでやってみた感じがこちら↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531257/2cd5f00d-171c-3e59-e5f0-e9a6329c2b2f.png)

今回は３つ目あたりがよさそうです。
４つめでいくと、FraceがGermanyに含まれてしまいました。

さて、あれ、グルーピングが違う場合に使えないか・・・そんなことはありません。
ある程度グルーピングでいい感じにいったところでグループをクリックすると
グループへ値の追加、削除ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531257/369c9005-765f-ae10-669f-e24793f662f6.png)
花粉の飛散量予測モデルを作る2023　その1

ごきげんようQiita。
何年か前に<a href="http://hatanakaaibo.blog.fc2.com/">こんなブログ</a>を作ってスギ花粉の飛散量をなんとか予測できないか、と考えておりました。
この記事はその続きになります。

とは言っても前のブログをそのままここにコピペするのも芸がないので、ざっくりダイジェストを載せておきます。

# 花粉飛散予測モデル作成ダイジェスト
<dl>
<dt>一般的に、翌年の花粉飛散量は前年夏季の日照量、気温、降水量によって決定すると言われている</dt>
<dd>なんか違うっぽい、日照量と気温はかなり相関あるからどっちかで良いのでは</dd>
</dl>
<dl>
<dt>そもそも『夏季』っていつのこと？</dt>
<dd>7月と8月は間違いなく『夏季』。この2か月間は日照量と気温がものすごく正の相関を示す</dd>
<dd>→7月と8月だけで分析をする場合、気温か日照時間のどちらかで十分</dd>
<dd>6月と9月はむしろ『雨期』という第五の季節で日照量と気温に相関無し</dd>
<dd>→6月～9月で分析をする場合、気温と日照時間の両方が必要になるかも。</dd>
</dl>
<dl>
<dt>ゲリラ豪雨とか最近多いけど、これ降った量全部『降水量』に入れて良いわけ？</dt>
<dd>直感的には入らない方が良い気がするけど、前回の結果としてはよくわからなかった</dd>
</dl>

_________________________

というところで、良い感じのモデルを作る前に挫折してしまって放置していたのですが、今回はそのリベンジになります。
当時書いたのが2019年でいま書いているのが2023年。この4年間の間に日本はとんでもなく暑くなり、豪雨も増えました。
……2023年の気温は全く参考にならないかも知れないですね。暑さが尋常じゃなかった。

# 今回のモデル改良点は？

前回の反省を踏まえ、今回はこんな感じで（技術的なことも含め）やっていきたいです。

### データ入手時期と地点、入手ソースの再設定
前回花粉の飛散量データをとった環境省の『はなこさん』が令和3年でサービス終了してしまったので、他の情報サービスを頼らなくてはいけません。
候補は以下の3か所でしょうか。

<a href="https://wxtech.weathernews.com/pollen/index.html">ウェザーニュース様</a>：2022-2023まで・全国
<a href="https://pollen-net.com/">NPO法人花粉情報協会様</a>：2020-2023まで・全国
<a href="https://www.agri-kanagawa.jp/12kahun/index.htm">神奈川県自然環境保全センター様</a>：2008-2023まで・神奈川県厚木市のみ

私は神奈川県民なので、神奈川県自然環境保全センター様のデータを使っていきましょうか。スギとヒノキのデータを公開しているようです。
そしてこちらのサイトは生データのダウンロードではできずにHPからデータを拾い集めなければならないようです。せっかくなのでPythonとか使って迷惑にならない程度にミニマムスクレイピングとかをできるように頑張っていきましょう。

気象データは信頼と伝統の気象庁様から引き続きいただきます。

### 豪雨の扱いをどうするか？

常識的に考えて、ゲリラ豪雨などで一気にドパッと降っても山にはその雨を吸収できるキャパシティ以上の水分を吸収できません。だから川とか氾濫するんだし。
なので豪雨の場合はどこまで雨が降ったことにするかを考えなければなりません。

そう言えば前回分析したときは、豪雨フラグとしてひとつパラメータを作って行いました。
しかし結果はあまり芳しくありませんでした。
なので今回は2通りの方法で行っていきたいと考えています。

1.前回と同じく豪雨フラグを作る
2.1日の降水量である閾値を超えたらその分はマイナスする（山に吸収されずに海に流れ出たカウントにする）


以上、これから張り切っていきましょう。
Meta QuestのMRアプリのテンプレートプロジェクトを作った

# 概要
Meta Quest 3！2023年10月10日発売されましたね！
Quest 3は以下の理由からMRアプリにとても向いています。

- カラーパススルーの品質がこれまでのQuestより良い
- 深度センサーによってスキャンされた部屋のメッシュをアプリ側で使用できる

しかし、MRアプリの基本的な部分を作るのは中々面倒くさいものです。
そこで多くのQuest向けMRアプリで共通するであろう機能を搭載したテンプレートUnityプロジェクトを作成しました。

# 公開場所
GitHubで公開しています。
https://github.com/noritsune/quest3-mr-template

# 機能
- 頭とコントローラー/手のトラッキング
- 視界全体のパススルー表示
- ルーム設定に基づくオクルージョン
  - 家具
  - 壁、床、天井
  - 深度センサーによってスキャンされたメッシュ
- 現実にCGの影を落とす
- コントローラーのトリガーを押すと玉と豆腐を発射する
  - おまけ機能

![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413932/e3a62551-2b52-0816-ea8d-30a6b429e624.gif)

# 使い方
上記GitHubリポジトリのREADME.mdを参照下さい。

# Depth-APIについて
実験的機能であるDepth APIを使用した動的なオクルージョンにも対応することを試しました。
しかし、以下の理由から見送りました

- 品質がそこまで良くない
  - 縁がガビガビで不正確
- 前提条件が多い
  - Unityバージョン
  - 必要なパッケージ
  - Quest側の実験的機能フラグをadbコマンドで立てておく

# まとめ
ぜひこのテンプレートを使って色々なMRアプリを作ってみてください！
MR楽しい！

# 参考リンク集
https://tech.framesynthesis.co.jp/unity/metaquest/#%E9%83%A8%E5%B1%8B%E3%81%A8%E5%B9%B2%E6%B8%89%E3%81%99%E3%82%8Bmr%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%AB%E3%81%AF

https://developer.oculus.com/blog/mesh-depth-api-meta-quest-3-developers-mixed-reality/

https://developer.oculus.com/documentation/unity/unity-scene-overview/

https://developer.oculus.com/documentation/unity/unity-scene-mesh/

https://developer.oculus.com/experimental/scene-depth-unity
【Swift】CIFilterで画像に色をオーバーレイブレンドする

# はじめに
CIFilter関係の記事4日目です

# サンプルアプリ
![Simulator Screen Recording - iPhone 15 - 2023-10-15 at 22.35.08.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/9c509652-b1c2-4683-5c33-2c50a1bb9010.gif)

# 実装
```swift
import SwiftUI

struct ContentView: View {
    private let image = UIImage(named: "sample")!

    @State private var uiImage: UIImage?

    var body: some View {
        ScrollView {
            VStack {
                if let uiImage {
                    Image(uiImage: uiImage)
                        .resizable()
                        .scaledToFit()
                } else {
                    Image(uiImage: image)
                        .resizable()
                        .scaledToFit()
                }

                HStack(spacing: 15) {
                    Button {
                        applyOverlayBlendFilter()
                    } label: {
                        Text("適用")
                    }
                    
                    Button {
                        uiImage = nil
                    } label: {
                        Text("リセット")
                    }
                }
            }
            .padding(.horizontal, 20)
        }
    }

    func applyOverlayBlendFilter() {
        let context = CIContext()
        let inputImage = CIImage(image: image)!

        let overlayColor = CIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.5)
        guard let overlayFilter = CIFilter(name: "CIOverlayBlendMode", parameters: [
            kCIInputImageKey: inputImage,
            kCIInputBackgroundImageKey: CIImage(color: overlayColor)
        ]) else { return }
        guard let outputImage = overlayFilter.outputImage else { return }
        guard let cgImage = context.createCGImage(outputImage, from: inputImage.extent) else { return }
        self.uiImage = UIImage(cgImage: cgImage)
    }
}
```

# おわり
やってることはSwiftUIの`.blendMode(.overlay)`と同じです！

https://qiita.com/takehito-koshimizu/items/3aef4fd73245b1f4d4a6
数値を含む文字列のリストを数値順でソートするときに使うPythonのラムダ式

## はじめに
Pythonでのプログラミング中に、「数値を含む文字列のリストを数値順でソートする処理」が必要になり、試行錯誤していました。本来の処理に直接関係ない部分なので、可読性を犠牲にしてでもコンパクトにしたくなり、勉強がてらにラムダ式を使ってみました。シンプルに書けたのでメモとして残します。

## ラムダ式
変数に代入して関数として使う方法を使いました。
* `変数名` = lambda `引数`: `処理`

```python
num_in_str = lambda str: [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', str) ]
```

## 動作確認
### コード
```python
import re

num_in_str = lambda str: [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', str) ]

lists = ['S23', 'S14', 'S7', 'S11', 'S1']
lists.sort(key=num_in_str)
print(lists)
```
### 結果
```
['S1', 'S7', 'S11', 'S14', 'S23']
```

## 参考にした情報
[数値を含む文字列のリストを数値順でソート (numerical sort, python)](https://dlrecord.hatenablog.com/entry/2020/07/30/230234)

### 参考にしたコード部分
```python
import re

def atoi(text):
    return int(text) if text.isdigit() else text

def natural_keys(text):
    return [ atoi(c) for c in re.split(r'(\d+)', text) ]

sorted(l, key=natural_keys)
```
このコードで私のやりたかったソートが実現できました。`natural_keys()`の中で呼ばれる`atoi()`部分は他で使わないことから、これをラムダ式にできると思い、1つにまとめてみました。少なくとも私の使い方だと同じ結果になっています。

## おわりに
可読性については様々な議論があると思います。この例ではソートのキーに指定できるライブラリ的なものとしてラムダ式にしてみました。ライブラリをimportする場合、関数の中身は見ないですよね。それと同じ使い方で、必要なソースに「目をつぶってコピペして使える1行」になりました。
ソートの動作については、親文字列の中から正規表現で「連続した数字」を見つけて分解し、子文字列と数値の混合リストにしてソートするのですが、詳しくは[参考にした記事](https://dlrecord.hatenablog.com/entry/2020/07/30/230234)をご覧ください。
PlayCanvasのFPVでpointerLockを制御する（暫定）

# 備忘録
FPVでここは一旦ポインタロックされたくないなって時は、first-person-view.jsのmouseDown()に以下のような条件を追加してやる。
```javascript
var mouseDown = function (e) {
        if (document.pointerLockElement !== canvas && canvas.requestPointerLock) {
            if(container.classList.contains("is-open")){
                return;
            }
            canvas.requestPointerLock();
        }
    };
```
2つ目のif文でis-openというclassが付与されているかどうかをチェックし、付いているタグがあればポインタロックせず、関数を抜ける。
classにis-openが付与されていなければ、ポインタロックする。

どういう時に使いたかったと言うと、FPVで歩き回っている時に、イベントを発生させてHTMLを表示した際、そのHTMLを閉じるときに閉じるボタンを設置したが、どうしても先にポインタロックがかかってしまい、閉じるボタンが押せずイライラした。

別の方法として、document.getElementById()を使う方法なども試したが、表示させるものがHTMLだった場合など、仕様によってはあらかじめ表示させるHTMLをプリロードしている場合があり、この場合、画面には見えていないが、検索したidやclassはすでにdocument上にあると言う判断がされてしまうようで、ポインタロックがかからなくなってしまった。
classListを使うことで解除できることがわかった。

You know what I mean?

もう少し研究して、もっと良い方法がわかったらこの記事を改修しますが、暫定的に公開しておきます。
Power Automate: Team へのメンションは、Tag Mention で賄う

# 背景

Automate を使って Teams でメンションをする際、現状可能なのは未だに、User & Tag のみ

Team に対するメンションをしたい、という要望があったので、その解決策の提示

https://qiita.com/baku2san/items/2122f5ea0bc4d0be2caa

# 概要

Team 用の Tag Member を Team 自体のメンバー一覧で自動更新して、その Tag を使ってメンションする。

とはいえ、注意点がいくつか

:::note warn
- List Team Members が何故か Channel 非対応になっている（たぶんバグ） 2023/10/15 現在
    - これに関しては一時的と思われるので、Group Action で代替
:::

:::note warn
- Tag の一時的な Tag 生成＆削除は、出来ないので、あらかじめ Tag 自体は用意する必要がある
    - 完全削除方法はなく、削除しても、復元可能なように内部的には残る為。
:::



# 実装例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/d3cf30df-6f91-852c-4cf3-21dbdf4e4d68.png)

# 補足
## Jsonデータの配列化

Select Action で配列化。[詳細はここ](https://qiita.com/baku2san/items/39e7a40c1a1fb327362a#%E5%AE%9F%E3%81%AF%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E5%86%8D%E6%A7%8B%E7%AF%89%E3%81%A0%E3%81%91%E3%81%98%E3%82%83%E3%81%AA%E3%81%8F%E7%B0%A1%E5%8D%98%E3%81%AB%E5%8D%98%E7%B4%94%E9%85%8D%E5%88%97%E5%8C%96%E3%82%82%E5%87%BA%E6%9D%A5%E3%81%BE%E3%81%99)

## メンバーの合成方法

Union() を利用して、メンバー一覧を合成する

https://qiita.com/baku2san/items/39e7a40c1a1fb327362a

# 利用例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/b83ad975-a40c-dd2f-b516-ea450bccf17c.png)


# あとがき

特に難しいことはないけれど、こんなことしなくてもよいように早く Team/Channel Mention 対応してほしいですね・・
[Android] BottomSheetDialog の高さを設定する

## BottomSheetDialogとは

下から出てくるモーダルのようなDialogです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346644/86700d5d-ad3e-b0f5-63f9-5cb151959339.png" width="300" alt="base_dialog">

ソースコード
https://github.com/nishimy432/BottomSheetDialogSample/blob/main/app/src/main/java/com/example/bottomsheetdialogsample/FirstBottomSheetDialogFragment.kt

## 初期値の高さを調整する
`peekHeight`に初期値にしたい高さを設定して、`state`を`BottomSheetBehavior.STATE_COLLAPSED`にします。

```kotlin:FirstBottomSheetDialogFragment.kt
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    val bottomSheetDialog = BottomSheetDialog(requireContext())

    bottomSheetDialog.setOnShowListener { dialog ->
        (dialog as? BottomSheetDialog)?.findViewById<FrameLayout>(R.id.design_bottom_sheet)
            ?.let {
                BottomSheetBehavior.from(it).apply {
                    val displayHeight = getFullScreenHeight() - getStatusBarHeight()
                    peekHeight = (displayHeight * 0.5).toInt()
                    state = BottomSheetBehavior.STATE_COLLAPSED
                }
            }
    }
}

private fun getFullScreenHeight(): Int {
    // ・・・
}

private fun getStatusBarHeight(): Int {
    // ・・・
}
```
`BottomSheetBehavior.STATE_COLLAPSED`は折りたたまれている状態、つまり`peekHeight`の高さの時の状態です。
`peekHeight`は普通に数値で指定することができますが、今回は画面サイズの50%という指定をしています。

<details><summary>画面の高さを取得するコード</summary><div>

```kotlin
    private fun getFullScreenHeight(): Int {
        val manager = requireContext().getSystemService(Context.WINDOW_SERVICE) as WindowManager

        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            val metrics = manager.currentWindowMetrics
            metrics.bounds.height()
        } else {
            val metrics = DisplayMetrics()
            manager.defaultDisplay.getRealMetrics(metrics)
            metrics.heightPixels
        }
    }

    private fun getStatusBarHeight(): Int {
        val outRect = Rect()
        requireActivity().window.decorView.getWindowVisibleDisplayFrame(outRect)
        return outRect.top
    }
```

</div></details>

### 結果
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2346644/56678e47-e8b1-d755-c61d-ab83e30bc1b4.gif" width="300" alt="初期値を設定した時のgif">


## 参考
[BottomSheetDialog - Android Developers](https://developer.android.com/reference/com/google/android/material/bottomsheet/BottomSheetDialog)
[【Kotlin】BottomSheetDialogを触ってみた](https://hiropoppo.hatenablog.com/entry/kotlin_recipe/bottom_sheet_dialog)
[【Kotlin/Android Studio】画面(スクリーン)の横幅を取得する方法！デバイスサイズ](https://tech.amefure.com/android-devise-size)
Reactでパスワード入力項目の目マークを押下してもキーボードが非表示にならない方法(備忘録 アプリ開発)

# パスワードの項目の目のマークを押下してもキーボードを非表示にしない

## [背景]
　子コンポーネントで、パスワード入力項目の目のマーク(目隠し切り替えの目アイコン)を押下
　した時に仮想キーボードが非表示なってしまう状態になっていた為、目のマークを押下して
　パスワードのマスク切り替えしてもキーボードを非表示にせず入力エリアをフォーカスした
　ままにしたい。

## [問題]
　通常のref属性をただ使用すると
　`'ref' が複数回指定されているため、ここでの使用は上書きされます。ts(2783)`
　というエラーが表示され使えない。

## 解決した実装イメージ

```
import { useRef, useState } from 'react'
import classNames from 'classnames'
import { useFormContext } from 'react-hook-form'
import classes from '・・省略'
import closeIcon from '・・省略/close_icon.svg'
import openIcon from '・・省略/open_icon.svg'

・・・Type定義省略

/**
 * パスワード入力欄
 */
export const PassInput: React.FC<Props> = () => {
  const { register } = useFormContext()

  const [isMask, setIsMask] = useState(true)

  const inputRef = useRef<HTMLInputElement | null>(null)

  const { ref, ...rest } = register('registerName')

  /**
   * 表示切替処理
   */
  const handleMaskChange = () => {
    setIsMask(!isMask)
    // ↓これで入力エリアをフォーカスする
    inputRef.current?.focus()
  }

　・・・省略

  return (
    <div>
      <div className={classes['クラス名']}>
        <input
          type={isMask ? 'password' : 'text'}
          className={classNames( クラス名 )}
          {...rest}
          onChange={(event) => イベントファンクション(event.target.value)}
          // ↓ここの部分
          ref={(e) => {
            ref(e)
            inputRef.current = e
          }}
        　// ↑ここまでの部分が今回必要な部分
        />
        <span
          className={classes[' クラス名 ']}
          onClick={handleMaskChange}
          role='presentation'
        >
          <img src={isMask ? closeIcon : openIcon} alt='' />
        </span>
      </div>
    </div>
  )
}


```
銅の表皮厚さを計算する

# はじめに
銅板の表皮厚さが知りたくて、Excelで計算したのでその結果を記す。

# 動作環境
Excel2016

# 作成したVBAマクロ
入力を比透磁率、導電率、周波数　で入れると、表皮厚さを返してくれる関数。

こちらのサイト様のほうが有用かも？
https://keisan.casio.jp/exec/user/1470493163


```VBA
Function CalculateSkinDepth(RelativePermeability As Double, ElectricalConductivity As Double, Frequency As Double) As Double
    Dim SkinDepth As Double
    
    Dim mu0 As Double
    
    mu0 = 4 * 3.14159265358979 * 0.0000001
    
    ' 理論表皮厚を計算
    SkinDepth = 1 / (Sqr(3.14159265358979 * mu0 * RelativePermeability * ElectricalConductivity * Frequency))
    
    ' 計算結果を関数の戻り値として返す
    CalculateSkinDepth = SkinDepth
End Function
````

# 実行結果
大体2,3kHzで　1mmといったところでしょうか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/915299/2473a43b-6968-ab5d-e094-86ff27b7c75b.png)

# 終わりに
こんなマクロを使うよりネットを探したほうが、動作検証もされていて
早いことがわかった。
Goのべき乗をintで出力

べき乗は、Goのmath.Pow()で計算すると引数の型はfloat64にする必要があり、結果はそのままだとfloat64型で出てきます。

結果をintで出す方法について考え、いろいろ試して成功したやり方をご紹介します。

```
   var a,b,c int
    var result int
    
    a = 2
    b = 3
    c = 4
    
    result = int(math.Pow(float64((a+b+c),2))
    
    fmt.Println(result)
```

引数となる変数の値をfloat64型に変換してやり
Pow関数が返す結果をint型に変換してやればよいだけでした。