OmniAICreator/Qiita-1.07M huggingface dataset:
関西Kagler会でのLTと、いただいたQA・コメントから感じたこと

## はじめに
こんにちは。
先日(2024/03/01)、 [関西Kaggler会 交流会 in Osaka 2024#1](https://kansaikaggler.connpass.com/event/303413/) に参加させて頂き、
Lightning Talk(20分枠）で発表する機会をいただきました。

LTなんて私レベルがやってよいのか？と恐縮ではあったのですが、
せっかくの機会ですし、関西Kaggler会は誰でも参加OK の優しい会なので、
大した内容ではないですが、LTさせていただきました。
(関西kaggler会は、kaggleやデータ分析が好きで、関西在住の方、関西に縁がある方、関西が好きな方が参加できます。)

暖かい雰囲気を作ってくださった幹事の皆様、参加者の皆様、
本当にありがとうございます。:bow_tone1:


## 発表内容
発表タイトルは、「内輪コンペ・チーム参加によるKaggle能力向上」としました。
2020年頃からKaggleをやり始めて、少しずつメダルも取れるようになっていたのですが、
そのなかで、2023年は「内輪コンペ」と「チーム参加」が、
自分の学びやEnjoy kagglingに有益だったので、そんな体験を紹介してみました。

- 内輪コンペ：In-classコンペ、限られた仲間うちで実施するデータ分析コンペのこと
- チーム参加：文字通り、仲間とチームを組んでKaggleに参加すること

発表スライドは、SlideShareにUpしてみました。
<iframe src="https://www.slideshare.net/slideshow/embed_code/key/2v132O5Hr0uBgy?hostedIn=slideshare&page=upload" width="476" height="400" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>


## kagger も、会社内のデータ活用文化構築で苦労している？
緊張しつつも、無事LT発表を終えたのですが、QandAセッションやX(旧twitter)上では、
「社内にAI同好会があるのすごい」、「社内にKaggler見つけるの難しいので羨ましい」、「マネージャがKaggleのチームに入っていると心理的安全性高そう」など、
皆、社内でデータサイエンス(以下、DS)活用を広げることに苦労しているのだなぁと
感じるコメントをいただきました。

データ分析が好き、データ分析が高い価値を持っていると思っているkaggler の皆様も、
会社内では、なかなか仲間作りや周囲の理解に苦労されているのだなと、改めて感じることができました。

私の会社も製造業なので、DSは「本業の課題を解決するための1つのツール」という位置づけで認識されています。(悲しいかな。。)
DS以外の専門性は高い人材なのに、DSには興味がない・活用しようとしない、という人が多いのは、DSの価値や楽しさを感じている我々としては、とっても勿体ない気がしますよね。

今後も、社内のDS文化構築・浸透を頑張って行きたいと思いました。
企業間でタッグを組んで、一緒に盛り上げていくのも良い手かもしれませんね。

## チーム組んだ時の連絡ツールは何がBest？
別のコメントとして、LINEでチームの連絡をしているのが斬新！なぜLINEなの？
というコメントもいただきました。

なんとなくLINEが連絡ツールになっていて、特に理由はなかったのですが、
「LINEだと、可愛いスタンプが押せてモチベがあがる！」というのは
確かにそうだなぁと思いました。

なんとなくですが、slack, discord, Xなどを連絡ツールにしている人が
多いような気がしていますが、
会社内だとTEAMSとかもありますし、いろいろなツールを試してみたいですね。


## おわりに
今回、関西Kaggler会で発表したLTと、そのときに質問・コメントを頂いて感じたことを
徒然なるままに書いてみました。
他の発表者の皆様の発表や、いろいろなkagglerの方と交流することができ、
大変楽しく・大変有益な時間でした。

次回も参加したいなぁ:sunny:
broken pipe を表示したくない

どうでもいいワンライナーを書いていて，broken pipe が邪魔だったので，無視したかった

```shell-session
$ cat filelist | while read f; do echo $f; gzip -dc $f | head -1; echo; done
(snip)
[2]    28744 broken pipe  gzip -dc $f | 
       28745 done         head -1
(snip)
```

みたいな

## 解決する

```shell-session
$ setopt no_print_exit_value
$ cat filelist | while read f; do echo $f; gzip -dc $f | head -1; echo; done
```

```shell-session
$ ( cat filelist | while read f; do echo $f; gzip -dc $f | head -1; echo; done )
```

サブシェルにしても大丈夫そうだった．

## Refs

https://stackoverflow.com/questions/67738240/fix-broken-pipe-with-zsh

https://linux.die.net/man/1/zshoptions
unityroomからアクセスするlolipopに置いたphpのCORS設定

CORS設定の備忘録です。

UnityWebRequestとのやりとりはjsonで行う場合を想定。

unityroomにゲームをアップロードすると
ゲームごとに番号(5桁？)が割り当てられるようです。

php側で
https://[ゲームの番号].play.unityroom.com
というURLからのブラウザアクセスを許可します。
```
<?php
header("Access-Control-Allow-Origin: https://[ゲームの番号].play.unityroom.com");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Allow-Headers: Content-Disposition, Content-Type, Content-Length, Accept-Encoding");
header("Content-type:application/json");

// ここにDBアクセスなどの処理と結果のjson出力を行うコードを書く
?>
```
rex0220 計算式プラグイン テーブル行の自動削除 TABLE_SORT関数版

[計算式プラグイン](https://qiita.com/rex0220/items/ae83c6d5ce50ff7a9a73)で不要なテーブル行の自動削除を行います。

# 概要

計算式プラグイン Ver.76 で追加された TABLE_SORT関数を使って不要なテーブル行の自動削除を行います。
指定した条件で、レコード保存時に不要なテーブル行の自動削除が可能です。
テーブル内項目がすべて未入力のテーブル行を自動削除する例です。

![2024-03-04_09h05_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/c649bbdd-5a16-955b-fe6f-451efde6b6c1.png)

ルックアップ項目・添付ファイル項目を含むテーブル行の自動削除も可能です。

![2024-03-04_09h13_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/6077ecdb-6ab8-a6a9-575e-da94cae04434.png)

# 計算式プラグイン設定

「循環参照を許可」をチェックします。
TABLE_SORT 関数の TPFILTER オプションで、削除しない条件を指定します。

![2024-03-04_09h17_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/308548ef-24f6-b4b8-05b7-ea6b1b7f86f3.png)

- テーブル内項目にルックアップ・添付ファイル項目が無い場合は、レコード保存時イベントでテーブル行を削除
    - IF(EV_INFO("mode")="submit"
- テーブル内項目にルックアップ・添付ファイル項目がある場合は、レコード保存後イベントでテーブル行を削除
    - IF(EV_INFO("mode")="success"&&更新日時
        - 計算式に更新日時があるとレコード保存後イベントで計算処理を行う

```.js
OPTION: 循環参照を許可

// テーブル SUBTABLE (editable)
IF(EV_INFO("mode")="submit",
  TABLE_SORT(テーブル,
    TPFILTER(OR(日付,区分,数値,チェックボックス,ユーザー選択))
  )
)

// テーブル.番号 NUMBER
ROWNO(テーブル)+1

// テーブル2 SUBTABLE (editable)
IF(EV_INFO("mode")="success"&&更新日時,
  TABLE_SORT(テーブル2,
    TPFILTER(OR(ルックアップ,文字列T2,数値T2,添付ファイル))
  )
)
```
【JavaScript】分割代入

O'reillyのJavaScript 第7版を読んで、
今まであまり使用していない技術がいろいろ載っていました。

今回はその中の**分割代入**についてまとめてみました。

# 分割代入とは
そもそも分割代入とは何でしょうか。

MDN web docsには次のように記載されています。
 > 分割代入 (Destructuring assignment) 構文は、配列から値を取り出して、あるいはオブジェクトからプロパティを取り出して別個の変数に代入することを可能にする JavaScript の式です。
> 
> -- [分割代入 - JavaScript - MDN Web Docs - Mozilla](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)

# 使い方
説明文だけでは分かりづらいので、使い方の例を見てみましょう。

## 配列の代入
```js
let [x, y] = [1, 2];

console.log(x); // 1
console.log(y); // 2
```
<br>

左辺と右辺の要素数を揃える必要はありません。
```js
let [x, y] = [1];

console.log(x); // 1
console.log(y); // undefined
```

<br>

特定の要素を飛ばすこともできます。
```js
[x,,y,] = [1, 2, 3, 4]; // 1, 3

console.log(x); // 1
console.log(y); // 3
```

<br>

入れ子になっている場合。
```js
let [x, [y, z]] = [1, [2, 3], 4];

console.log(x); // 1
console.log(y); // 2
console.log(z); // 3
```

## オブジェクトの代入

```js
const airports = {
    kix: "Kansai International Airport",
    icn: "Incheon International Airport",
    ala: "Almaty International Airport",
};
const {kix, icn, ala} = airports;

console.log(kix, icn, ala);
// Kansai International
// Airport Incheon International 
// Airport Almaty International Airport
```

## レスト構文
配列から代入する際に、使用されていない残りの値をすべて1つの変数に集めることができます。

```js
let [x, ...y] = [1, 2, 3, 4];

console.log(x); // 1
console.log(y); // [2, 3, 4]
```

# おわりに
今までほとんど使ってこなかったため勉強になりました。

入れ子になったオブジェクトや配列のオブジェクトなど、複雑な分割代入は可読性の下がる可能性がありますが、記述を簡潔にまとめることができるのは大きなメリットです。

適切な箇所で使用し、美しいコードの記述を心がけたいと思います。

それでは。

# 参考サイト
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

https://qiita.com/daishiman/items/e0d9e2e16382231f6200
表皮効果の図示

# はじめに
電線に高周波電流を流すと表面付近の電流密度が極端に大きくなってしまうという現象がある。これを表皮効果と呼ぶ。導線内部に生じる電流密度は、マクスウェル方程式を円筒座標系で解くことによって導出することができ、ベッセル関数で表すことができる。そこで、今回は解析解を用いて表皮効果によって生じる電流分布についてPythonで再現してみることを目的とする。


![anime.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/db02d39f-956f-93ff-da87-6d51af74c28b.gif)

# 表皮効果の解析解
交流電流$I$を空間に存在する無限長の半径$a$の一本の導線に流した場合、電流密度は半径のみに依存して以下のような式になる。（これの導出は参考文献1を参照）

```math
J(r)=\frac{k I}{2 \pi a} \frac{J_0(kr)}{J_1(ka)}
```

ただし、$k=\sqrt{-j \sigma \mu \omega }$であり、$\sigma,\mu$は導線の電気伝導率、透磁率であるものとする。また$\omega$は交流電流の角速度である。

# 図示
それでは、実際に上式を用いて導線断面における電流密度をコンター図を用いて図示するプログラムを作成しよう。

``` python skin_effect_3d.py
import matplotlib.pyplot as plt
#円周率の算出
import math 
import numpy as np
#ベッセル関数の読み込み
from scipy.special import jv
#3dデータを上手く加工する
from scipy.interpolate import griddata



#円筒銅線の材料パラメーター

#電気伝導率σ
sigma = 1.0
#透磁率μ
mu = 1.0

#角周波数
omega = 10
#電流値
I=1.0
#銅線の半径
r_0=10

k= (-1j*omega*mu*sigma)**0.5

#プロット

NUM=10000                          # サンプリング数
x=0                                     # 点のx値
y=0                                     # 点のy値                                  
#zを求めるために使用
i=0   



#a<r<b つまり -r_0<r<r_0の範囲で乱数を生成する
a=-1*r_0
b=r_0

x_a=[]
y_a=[]
z_a=[]
                                  # ループカウンタ
while i<NUM:                            # NUM回ループ
    x=(b - a) * np.random.rand() + a                  # ランダムな点の位置x a<x<bにおけるランダムな点を作成
    y=(b - a) * np.random.rand() + a                  # ランダムな点の位置y
    if x**2+y**2<r_0**2:                      # 円筒内部ならば
 
        z= (k*I/(2*math.pi))*jv(0,k*(x**2+y**2)**0.5)/jv(1,k*r_0)
        x_a.append(x)
        y_a.append(y)
        z_a.append(z)
    else:                               # 円の外
        #plt.scatter(x,y,color='blue')
        z=0   
    i+=1                                # ループカウンタ増


#データの整理
x_new, y_new = np.meshgrid(np.unique(x_a), np.unique(y_a))
z_new = griddata((x_a, y_a), z_a, (x_new, y_new))


#コンター図で表示する
plt.contourf(x_new, y_new, z_new)
#カラーバー
plt.colorbar()
#保存
plt.savefig("hixyouhi_entouzahixyou_con.png")
plt.show()
```

これを実行すると以下のような画像が出力される。

![hixyouhi_entouzahixyou_con.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/aaecc569-77f6-15d1-09bc-8e8d06c9c5f3.png)

このように、表面付近の電流密度が高いのが分かるだろう。

このプログラムを使って、$\omega$を変化させた場合においてどの様に電流密度が変化するのかを調べたところ以下のような図になった。

![anime.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/db02d39f-956f-93ff-da87-6d51af74c28b.gif)

このように、周波数を変化させることによって、同じ電流の大きさでも導線内部の電流密度分布を変化させることができるということが分かった。



# まとめ
今回はPythonを用いて表皮効果を図示することを試みた。結果確かに、周波数を変化させることによって、導線表面付近の電流密度を変化させることができ、表面付近に電流が集中するということが分かった。したがって、高周波電流を扱う場合は小型化をする際にこのような現象も考慮しなければならないため、適切な周波数を選択することが重要となる。


# 参考文献
https://denki-no-shinzui.com/skin-effect/
https://qiita.com/kzm4269/items/8ea85f3d90caecef704b
Docked Composer

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)


[Docked Composer](https://www.lightningdesignsystem.com/components/docked-composer/)

Docked Composer は、ユーザーがコンポーザー ウィンドウを展開/折りたたみしながらアプリを継続的に使用してタスクを完了したり、情報を収集したりできるようにする永続的なユーティリティ バーです。

+ [How to get the body of a Docked Composer to vertically scroll?](https://salesforce.stackexchange.com/questions/403433/how-to-get-the-body-of-a-docked-composer-to-vertically-scroll)

:::note
The platform's inbuilt Docked Composer panels appear to have a hard-coded body height of 379px to make the scrolling work.

Copying that:

```
/* Platform's UI has this hard-coded value so copy that */
.fixed-body-height {
    height: 379px;
}
```
:::
LPIC201対策 - 記憶装置へのアクセス

# この記事について

Linux Level 2 取得を目標としている筆者です。
先日 Level 1 を取得しましたが、短期詰め込みの暗記がしんどかったので、Level2はじっくり時間をかけていいから、ちゃんと理解してやっていきたい。

一方で、暗記も暗記で重要。

ということで、理解を深めるためにと、暗記しやすいように、両方の目的で、覚えたことを Qiita に整理してまとめながら受験対策することにしました。

# この分野で覚えること

## デバイスファイルのネーミングルール

| デバイスファイル |説明 |
|:-|:-|
|**/dev/sd**[a-z]|**SCSI/SATA HDD**。末尾のa,b,c...が1番目、2番目、3番目...となる|
|**/dev/hd**[a-d]|**IDE**。末尾は<br>a - プライマリ Master<br>b - プライマリ Slave<br>c - セカンダリ Master<br>d - セカンダリ Slave|
|**/dev/sr**[0-9]|**SCSI/SATA CD-ROM**<br>末尾の数字は0始まりのインデックスで、何番目のCD-ROMかをあらわす|
|**/dev/st**[0-9]|**SCSI テープ**<br>末尾の数字は0始まりのインデックスで、何番目のCD-ROMかをあらわす|
|**/dev/md**[0-9]|RAIDデバイス<br>md = Multiple Device|

## fdisk コマンド

ハードディスクのパーティション設定を行うコマンド。

| オプション | 説明 |
|:-|:-|
|なし|HDのパーティション設定を対話的に行う|
|-l|ハードディスク内の現在のパーティション情報を表示|

## hdparm コマンド

ハードディスクの転送モードの設定、確認、速度のベンチマークなどを行うコマンド。

```:書式
hdparm [オプション] ハードディスクデバイス
```

| オプション | 説明 |
|:-|:-|
|-i|IDEベースの詳細情報を表示<br>ハードディスクの型番など|
|-I|ドライブから直接詳細情報を得る|
|-c0|32bit I/O を OFF|
|-c1|32bit I/O を ON|
|-d0|DMA モードを OFF|
|-d1|DMA モードを ON|
|-t|バッファキャッシュを **OFF** で読み込み速度を計測|
|-T|バッファキャッシュy **のみ** で読み込み速度を計測|
|-W0|ライトキャッシュの OFF|
|-W1|ライトキャッシュの ON|

:::note
オプションなしで実行すると、設定されている転送モードなど現在のパラメータの一覧を表示
:::

## iSCSI - Internet Small Computer System Interface

IPネットワークを利用してSANを構築するプロトコル規格。

https://www.fujitsu.com/jp/products/computing/storage/lib-f/tech/interface/iscsi/

### ホスト側
- イニシエータという
- iscsid を常駐させる

### デバイス側
- ターゲットという
- iscsiadm コマンドで管理
- ログイン時のデーモンは iscsi ※ iscsid **ではない*！

### iscsiadm コマンドのオプション

| オプション | 説明 |
|:-|:-|
|-m, --mode モード|代表的なモード:<br>discovery 接続先のiSCSIターゲットの一覧取得<br>node 登録済みのiSCSIターゲットの一覧取得<br>session セッションの一覧取得|
|-l, --login|iSCSIターゲットにログイン<br>(nodeモードで利用)|
|-u, --logout|iSCSIターゲットからログアウト<br>(nodeモードで利用)|
|-t, --type=タイプ|discoveryモードのとき、タイプを指定する<br>例：sendtargets(使用可能なiSCSIターゲットを古ー他に送信する)など|
|-p, --portal=IPアドレス[:ポート]|接続先の指定。<br>デフォルトのポートは3260|
|-T, --targetname=IQN|iSCSIターゲットの指定|

## WWID あるいは WWN

- World Wide Identifier、またの名をWorld Wide Name
- 記憶装置を一意に識別するための名前あるいはID
    - ファイバーチャネルやSCSIによるSAN（Storage Area Network）で使う
- SCSI接続の記憶装置の場合はscsi_idコマンドで確認できる

## LUN

- Logical Unit Number
- SCSI接続の記憶装置内に論理的に作成された記憶装置を識別するための番号

## その他のコマンド

| コマンド | 説明 |
|:-|:-|
|fstrim|削除フラグのあるデータを完全に初期化する<br>引数でマウントポイントを指定|

## その他の暗記事項

| 暗記事項 | 説明 |
|:-|:-|
|NVMe|PCI Express バスから SSDに接続する規格<br>(SSDの性能を活かせる)<br>PCI Express Gen3 4xn条件下で、フラッシュメモリストレージに最適化されたバス|
|AHCI|SATAのインターフェース|


# 以上！

勉強が進んだら適宜追記・修正などしていきます。
ActionPlanTemplate

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)



+ [ActionPlanTemplate](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_actionplantemplate.htm)

Represents the instance of an action plan template. This object is available in API version 44.0 and later.

+ [ActionPlanTemplate オブジェクトでクイック アクションまたはボタンを作成できません](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007YvopB)

:::note alert
Validation Errors While Saving Record(s)

There were custom validation error(s) encountered while saving the affected record(s). The first validation error encountered was "Object Name: bad value for restricted picklist field: ActionPlanTemplate".

Insufficient Privileges

You do not have the level of access necessary to perform the operation you requested. Please contact the owner of the record or your administrator if access is necessary. For more information, see Insufficient Privileges Errors.
:::

:::note
Please check this article.

**Error 'bad value for restricted picklist field' appears when a record is created**
https://help.salesforce.com/s/articleView?id=000384095&type=1
:::
iOSのARアプリの公式のサンプルを実機にいれた話


# はじめに

こんにちは、iOSアプリ開発の初心者のkeitaMaxです。


今回はswiftを触るのが初めてということで、以下のURLにある`Displaying a Point Cloud Using Scene Depth`を実機に入れてみようと思います。

https://developer.apple.com/documentation/arkit/arkit_in_ios/environmental_analysis/creating_a_fog_effect_using_scene_depth



# ダウンロードして実行してみる

まずは以下URLサイトのダウンロードボタンからダウンロードします。

https://developer.apple.com/documentation/arkit/arkit_in_ios/environmental_analysis/creating_a_fog_effect_using_scene_depth



次にダウンロードしたファイルを解凍して、Xcodeでプロジェクトを開きます。


そして、チームの設定をしてデプロイボタンを押します。

すると実機でアプリが立ち上がり、以下かのように遠いところに白く霧がかかっているようになっています。

![スクリーンショット 2024-03-03 23.31.30.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/237f3c5a-dfff-c0bb-e763-b83b8624f3ea.jpeg)


# 困ったこと


https://developer.apple.com/documentation/arkit/arkit_in_ios/environmental_analysis/displaying_a_point_cloud_using_scene_depth


これをダウンロードして実機(iOS17.3)で試してみようと思ったのですが、
`
A build only device cannot be used to run this target.
`
となってしまい、できませんでした。

![スクリーンショット 2024-03-03 22.25.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/8d67f363-4758-cc79-bb26-3dd775490f8e.png)

こんな感じでXcode15.2はiOS17.2までしかサポートしていなかったらしいので、ベータ版を入れてみるか、少し纏ってみようかなと思います。


# さいごに

このサンプルアプリを元に色々開発していこうかなと思っています。

やり方が違ったり、もっといいやり方、認識が間違っているよというようなことをお気づきの方は、はコメントしていただけると幸いです。

最後まで読んでいただきありがとうございました。
暗号化：Encrypt New Data in Standard Fields


どうも設定場所が変わったようです。

[Encrypt New Data in Standard Fields](https://help.salesforce.com/s/articleView?id=sf.security_pe_enable_standard_fields.htm&type=5)

+ [please delete my Shield Platform Encryption module i am not getting encryption policy option in second part i think i deleted that playground or i cant find that](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZBfcZ)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6a03e9be-a370-582a-016d-0cf571354181.png)

:::note
It seems that the display location has changed.

SETUP --> PLATFORM ENCRYPTION

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/000bb811-8cc9-fc25-812a-5d2d5255a176.png)
:::

+ [i am not getting encryption policy option in quick find](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZAZH7SAP)

:::note
Depending on the size of your org, enabling a standard field for encryption can take a few minutes.

1. Make sure that your org has an active encryption key. If you’re not sure, check with your administrator.
2. From Setup, in the Quick Find box, enter Encryption Settings, and then select Encryption Settings.
3. In the Advanced Encryption Settings section, click Select Fields.
4. Click Edit.
5. Select the fields that you want to encrypt.
All new data entered in this field is encrypted. By default, data is encrypted using a probabilistic encryption scheme. To apply deterministic encryption to your data, select Deterministic from the Encryption Scheme list. For more information, see “How Deterministic Encryption Supports Filtering” in Salesforce Help.
6. Save your work.

https://help.salesforce.com/s/articleView?id=sf.security_pe_enable_standard_fields.htm&type=5
:::
【React】exportとexport defaultの違い

# exportとexport defaultの違い
Reactコンポーネントをエクスポートする際に、`export`と`export default`の違いがあります。

1\. **export** : このキーワードを使用して、モジュール内の関数、クラス、変数などを名前付きでエクスポートします。名前付きエクスポートでは、エクスポートされたコンポーネントをインポートする際に、エクスポートされた名前を使用してアクセスします。例えば、次のように使用します。
```js
// MyComponent.js
export class MyComponent extends React.Component {
  // コンポーネントの定義
}
```
```js
// 別のファイルでインポートする
import { MyComponent } from './MyComponent';
```
2\. **export default** : このキーワードを使用して、モジュールのデフォルトエクスポートを定義します。デフォルトエクスポートでは、モジュール内で一つだけのエクスポートを行うことができます。名前がなく、インポート時に任意の名前を指定することができます。例えば、次のように使用します。
```js
// MyComponent.js
class MyComponent extends React.Component {
  // コンポーネントの定義
}
export default MyComponent;
```
```js
// 別のファイルでインポートする
import MyComponent from './MyComponent';
```
要約すると、`export`は名前付きエクスポートを提供し、`export default`はデフォルトエクスポートを提供します。名前付きエクスポートは複数のエクスポートを可能にし、インポート時にエクスポートされた名前を使用します。一方、デフォルトエクスポートは一つのエクスポートのみを許可し、インポート時に自由な名前を使用します。
【React】コンバータとは

# コンバータとは
JavaScriptにおける「コンバータ」という用語は、広範囲にわたる機能やデータ形式の変換ツールや処理方法を指す場合があります。具体的には以下のようなものがあります。

1\. **データ型変換器** : JavaScriptではさまざまなデータ型がありますが、これらを相互に変換する機能を提供するものです。例えば、文字列から数値への変換や、数値から文字列への変換、配列からオブジェクトへの変換などが含まれます。

2\. **単位変換器** : 数値を異なる単位に変換する機能を提供するものです。例えば、長さの単位をメートルからフィートに変換する、重さの単位をキログラムからポンドに変換するなどの機能が含まれます。

3\. **フォーマット変換器** : データのフォーマットを変換する機能を提供するものです。例えば、日付や時刻のフォーマットを変更する、JSON形式からXML形式に変換するなどの機能が含まれます。

4\. **画像/動画コンバータ** : 画像や動画の形式を変換する機能を提供するものです。例えば、画像のサイズを変更する、JPEG形式からPNG形式に変換する、動画ファイルを異なる形式に変換するなどの機能が含まれます。

5\. **テキスト変換器** : テキストの処理を行う機能を提供するものです。例えば、テキストのエンコーディングを変換する、テキストを大文字や小文字に変換する、特定の文字列を置換するなどの機能が含まれます。

これらは一般的なコンバータの例であり、JavaScriptの様々な用途やニーズに応じて様々な種類のコンバータが存在します。
.NET MAUIで普通のデスクトップアプリをビルドするには

# 概要

.NET MAUIで、普通のデスクトップアプリをビルドする方法の話です。普通というのは、msixインストーラで配布するパッケージではなく、exeとdllを作ってmsiインストーラなどで配布するタイプのアプリです。

# 先に結論まとめ

 * プロジェクトファイルに`<WindowsPackageType>None</WindowsPackageType>`を追加
 * launchSettings.jsonのcommandNameをProjectに
 * 発行はdotnet publishコマンドに「p:WindowsPackageType=None」を付ける
 * 以上で、普通のデスクトップアプリとしてビルド・デバッグ・発行ができます
 * ただしまだ問題点が多いようなので、実運用の開発への採用は要注意

# 話の背景

.NET MAUIでWindowsアプリを作ろうとすると、msixインストーラで配布するという形の、どちらかというと個人向けのアプリ開発に特化したテンプレートや説明になっています。

しかし今までWPFなどでビジネス向けアプリのGUIを作っていたという場合、普通のデスクトップアプリを作って、msiインストーラなどで配布したい、となると思います。私はそうです。

MAUIやWinUI 3ではそういうものをパッケージされていない（Unpackaged）アプリと呼ぶようです。しかしそれを作ろうとすると・・・意外なほどテンプレートも説明もまとまっていません。どちらかというと、「少しずつサポートしていく予定だが、後回し」という雰囲気です。

そのためWebの情報などを色々当たって、正しそうだと思ったやり方をまとめました。

# やりかた

## ビルド・デバッグ

テンプレートでプロジェクトを作成した直後は、msixを使用したストアアプリを作る設定になっています。そのためUWPなどと同様に、デバッグ実行しようとすると「開発者モードをONにしろ」と言われます。

まずはこれを、WPFなどと同様にデスクトップアプリをビルド・デバッグ実行する設定に変更します。

プロジェクトファイルを開きます。VisualStudioなら、プロジェクトファイルをダブルクリックです。
XMLを`Project`、`PropertyGroup`と辿り、その中に`<WindowsPackageType>None</WindowsPackageType>`という要素を追加します。

次のようになります。XML全体は長いので追加分は上の方に入れて、それ以降は省略しました。

```xml
<Project Sdk="Microsoft.NET.Sdk">
	<PropertyGroup>
		<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
		<WindowsPackageType>None</WindowsPackageType>

```

次にソリューションエクスプローラへ戻り、プロジェクトの「Properties\launchSettings.json」ファイルを開きます。

次のようにMsixPackageを指定している部分があるので、これをProjectに変更します。

```json
"commandName": "MsixPackage"
```

↓

```json
"commandName": "Project"
```

次のようになります。

```json
{
  "profiles": {
    "Windows Machine": {
      "commandName": "Project",
      "nativeDebugging": false
    }
  }
}
```

以上の変更で、ビルド・デバッグはOKです。そのままビルド・デバッグ実行すると、デスクトップアプリとしてデバッグ実行されます。Windowsの開発者モードをONにする必要もありません。

## 発行

2024/2頃のVisualStudio 2022 Ver.17.9.1で試すと、プロジェクトファイルを上記のように変更した時点で、GUIからの「発行」が無効になります。発行はコマンドでやるしかなさそうです。

これについてはMS Docsにも情報がありました。
[Use the CLI to publish unpackaged apps for Windows - .NET MAUI | Microsoft Learn](https://learn.microsoft.com/en-us/dotnet/maui/windows/deployment/publish-unpackaged-cli?view=net-maui-8.0)

基本は次のようなコマンドになると思います。

```
dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64 -p:WindowsPackageType=None
```

この記事でのポイントは `-p:WindowsPackageType=None` になります。プロジェクトファイルの記載と同じで、これによって普通のデスクトップアプリとして発行されます。

### PublishSingleFileは未完成の様子

発行は問題なくできますが、大量のdllファイルが一緒に出来上がるので、1ファイルにまとめられるならまとめてしまいたい場合も有ると思います。この記事のように普通のデスクトップアプリにする場合でも、dotnet publishのPublishSingleFileオプションが使えます。

使えますが・・・未完成なのか、正常動作しないようです。

オプションを付けて実行すると、dllファイルはかなり減り、その分だけexeファイルのサイズが大きくなります。しかし、かなり減っただけでdllファイルはいくつか残っています。（ネイティブのdllかもしれませんが）また、実行するとエラーコード0xc000027bで異常終了します。

# 注意点

以上で普通のデスクトップアプリを作って動かすことは一応できました。ただ、次のissueを見た感じでは、まだまだ課題が残っていて開発途上のようです。実運用の開発に採用するにはまだ、クリティカルな問題が無いかどうかを慎重にチェックしながら使う必要がありそうです。

[Windows Unpackaged support in .NET MAUI · Issue #10564 · dotnet/maui · GitHub](https://github.com/dotnet/maui/issues/10564)

# まとめ

.NET MAUIで普通のデスクトップアプリを作ることは、情報を集めれば一応できるようです。まだ実用には怖いところですが、WinUI 3やWPFなどの状況を考えると今後.NET MAUIがデスクトップアプリの有力な選択肢に入ってくる可能性は高いと思うので、少しずつでも調べて実戦投入に備えておくのが良いと思います。
【JavaScript】pure functionとは

# pure functionとは
JavaScriptにおける「pure function（純粋関数）」とは、次の2つの特性を持つ関数のことを指します。

1\. **副作用のない** : 純粋関数は、外部の状態を変更せず、引数の値だけに依存して結果を返します。つまり、関数内でグローバル変数の変更や、引数以外の外部のデータへのアクセス、ファイルの読み書き、ネットワークリクエストの送信などの副作用がないことが求められます。

2\. **同じ入力に対して常に同じ結果を返す** : 同じ引数が与えられた場合、純粋関数は常に同じ結果を返します。関数が外部の状態に依存しないため、同じ入力が与えられれば常に同じ結果が得られることが保証されます。この特性は、関数の予測可能性を高めます。

# 使用方法
純粋関数は、プログラムの理解やテスト、デバッグを容易にし、並行処理や再利用性の向上にも役立ちます。また、関数型プログラミングの中心的な概念であり、関数型プログラミングの原則に従うことで、より堅牢で保守しやすいコードを書くことができます。

例えば、以下は純粋関数の例です。
```js
function add(a, b) {
    return a + b;
}

console.log(add(3, 5)); // 8
console.log(add(3, 5)); // 8
```
この関数は、引数 `a` と `b` の値だけを使って結果を返し、外部の状態に依存することなく同じ入力に対して常に同じ結果を返します。
【JavaScript】論理AND演算子とは

# 論理AND演算子とは
JavaScriptの論理AND演算子は、二項演算子であり、`&&`という記号で表されます。この演算子は、二つのオペランド（条件）を取り、両方の条件が真である場合に真を返し、そうでない場合は偽を返します。

# 使用方法
具体的には、次のような形式を取ります：
```
条件1 && 条件2
```
`条件1`と`条件2`がどちらも真であれば、結果は真（true）となります。そうでない場合、つまりどちらか一方または両方が偽であれば、結果は偽（false）となります。

例えば：
```js
var x = 10;
var y = 5;

if (x > 0 && y > 0) {
    console.log("両方の条件が真です");
} else {
    console.log("少なくとも一つの条件が偽です");
}
```
この場合、`x`と`y`がどちらも0より大きいので、両方の条件が真となり、"両方の条件が真です"というメッセージがコンソールに表示されます。

# まとめ
論理AND演算子は、条件文や制御フローにおいて特定の条件が複数必要な場合に便利です。また、条件式を短絡評価するため、最初の条件が偽であれば、2番目の条件を評価せずに結果を返すという動作も持ちます。
【JavaScript】三項演算子とは

# 三項演算子とは
JavaScriptの三項演算子は、条件演算子とも呼ばれ、条件式を評価してその結果に応じて値を返す演算子です。一般的な形式は以下の通りです：
```
条件式 ? 式1 : 式2
```
条件式が真であれば、式1が評価されます。条件式が偽であれば、式2が評価されます。その結果、三項演算子は式1または式2のどちらか一方を返します。

# 使用方法
例えば、以下のようなコードがあります：
```js
var age = 20;
var message = (age >= 18) ? "成人です" : "未成年です";
console.log(message);
```
この場合、`age`が18以上であれば`message`には"成人です"が代入され、それ以外の場合は"未成年です"が代入されます。

# まとめ
三項演算子は、単純な条件分岐を短く書くのに便利であり、コードの可読性を向上させることができます。しかし、複雑な条件分岐や複数の式を含む場合は、他の方法（例えばif文やswitch文）を使用した方が理解しやすい場合があります。
画像にカラーマップを重ねて表示する

## 目的
GradCAMの出力みたいな画像が作りたい、と思い調べてみたメモ。

## サンプルコード環境

||バージョン|
|--|--|
|python|3.10.9|
|cv2|4.6.0|

## 手順
1. ベース画像の読み込み
1. 同サイズの出力をヒートマップ(カラーマップ)化
1. アルファブレンディングでオーバーレイする

## サンプルコード
### 0. 使用ライブラリ
```python
import cv2 
import numpy as np # サンプルマップ生成用
import matplotlib.pyplot as plt # 画像表示確認用
import skimage.data import cat # サンプル画像用
```

### 1. 画像読み込み

scikit-imageのサンプルデータで。

```python
# img = cv2.imread("path/to/img")
img = cat()
height, width, _channel = img.shape
plt.imshow(img)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462067/e41e0ff2-7782-f1c8-9493-f3e1c3f07b66.png)

### 2. カラーマップ生成

ここが本来処理・解析結果の部分になる。
基本的にuint8のndarrayとなるように作成し、cv2.applyColorMapに渡せばよい。

```python
# 適当な格子列生成
x = np.arange(width)
y = np.arange(height)
X, Y = np.meshgrid(x, y)
Z = X + Y

# Zを0-255にスケーリング
Z_uint8 = np.array((Z - Z.min()) / (Z.max() - Z.min()) * 255, dtype=np.uint8)

# カラーマップ化
colormap = cv2.applyColorMap(Z_uint8, cv2.COLORMAP_JET)

plt.imshow(colormap)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462067/b56c614b-3f48-24d9-3a8f-5ca73396a2b9.png)

### 3. アルファブレンディング

アルファブレンディング(=透過処理して画像をオーバーレイ)を適用。cv2.addWeightedを使えばOK

```python
alpha = 0.5 # 割合は0-1で調整。

blend = cv2.addWeighted(img, alpha, colormap, 1-alpha, 0)
plt.imshow(blend)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462067/c505db74-ab48-8683-4ea5-a364daf16a22.png)

ひとまずこれで満足。
Windows Server での JEA エンドポイント （Microsoft Learnトレーニング）

参考URL：　Microsoft　Learn  トレーニング＞  参照＞  ハイブリッド環境で Windows Servers とワークロードを管理する＞  Windows Server での Just Enough Administration 
https://learn.microsoft.com/ja-jp/training/modules/just-enough-administration-windows-server/5-describe-how-jea-endpoints-work-to-limit-access-to-powershell-session

「JEA エンドポイントによって PowerShell セッションへのアクセスが制限されるしくみついて説明する」について構成図を書きました。

![スクリーンショット 2024-03-04 040732.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587793/6daba624-2392-b512-e610-f436fe079442.png)

![スクリーンショット 2024-03-04 041029.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587793/579b1c61-f4ad-59c9-9ecd-f379e44b1b9b.png)

～エンジニアファーストの会社、助け合いの醸成～
株式会社CRE-CO　伊藤 俊広
https://www.cre-co.jp/
2024/3/4主にITとかセキュリティの記事

EUユーザー歓喜！Apple、ホーム画面Webアプリのサポート継続(3/2)
https://iphone-mania.jp/news-576628/

中国政府による「サイバー攻撃が活発化」か、外国の知的財産を狙う(3/2)
https://forbesjapan.com/articles/detail/69444

穀物メジャーＡＤＭ、内部統制に重大なぜい弱性と報告へ(3/1)
https://www.bloomberg.co.jp/news/articles/2024-03-01/S9O30HT1UM0W00?srnd=cojp-v2

Appleのホワイトペーパー解説！サイドローディングの安全対策(3/2)
https://iphone-mania.jp/news-576631/

LINEヤフー、見えぬ信頼回復　個人情報の流出問題
キーマンも退任　PayPay連携に懸念(3/2)
https://www.nikkei.com/article/DGKKZO78921790R00C24A3TB0000/

Facebookにゼロクリックの脆弱性、アカウント乗っ取りの危険(3/2)
https://news.mynavi.jp/techplus/article/20240302-2896170/

アングル：海路で遭難する移民、ハイテク技術が命を救う(3/2)
https://jp.reuters.com/world/europe/QQPVT7JGLJLJLE3NBMRH6WRSPE-2024-03-02/

ビットコインの歴史を完全解説｜誕生から現在までの経緯とは？【初心者向け】(3/2)
https://crypto-times.jp/history-of-bitcoin/

［急迫　サイバー危機］防御法整備　政治決断で…前経済安全保障相　小林鷹之　４９(3/2)
https://www.yomiuri.co.jp/politics/20240301-OYT1T50230/

中共が秘密保護法を改正　国民管理がますます強化(3/2)
https://www.epochtimes.jp/2024/03/208423.html

欧米の合同宇宙演習、日本も参加へ　衛星攻撃など想定(3/2)
https://www.nikkei.com/article/DGXZQOGR290620Z20C24A2000000/

全町民6939人個人情報、HPに2週間誤掲載　防災無線で町長謝罪(3/2)
https://news.yahoo.co.jp/articles/c2d183a7f1f1123ca2499de377cd5105ab6934ad

全ての町民約7000人の個人情報がホームページに…　綾町が謝罪(3/2)
https://news.yahoo.co.jp/articles/0713a4a8c57ab302a6d62d145e0651031aadab0e?source=rss

全町民の個人情報を漏えい　綾町が謝罪会見(3/2)
https://news.yahoo.co.jp/articles/6fe559eb8c50034decbd2789319ac35f826ddd8e?source=rss
https://news.yahoo.co.jp/articles/6fe559eb8c50034decbd2789319ac35f826ddd8e
SourcetreeでのGithub連携エラー対処方法

# 初めに
sourcetreeでpushをしようと思ったら、GitHubとの連携でエラーが出たのでその対処方法を解説します。

# エラーメッセージ
```
git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks fetch --no-tags origin
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: unable to access 'https://github.com/xxxxx/xxxxx.git/': The requested URL returned error: 403
```
エラー文はこちらの記事から引用させていただきました。ありがとうございます。

https://codesapuri.com/articles/31

CODESAPURIさんの【SourceTree】Gitでエラー「remote: Support for password authentication was removed ...」が出るようになった場合の対処法


# 解決までの手順

1. GitHubでアクセストークンを作成する

2. SoucetreeとGitHubを連携させる

# GitHubでアクセストークンを作成する

https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens

GitHub公式　個人用アクセストークンを管理する

この記事を参考にアクセストークンを作成してください。

# SourcetreeとGitHubを連携させる

アクセストークンを作ったら、SourcetreeとGitHubを連携させていきます。

## Sourcetreeでアカウントを追加する
![スクリーンショット 2024-03-04 2.12.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/9074c7fa-3b2d-2cbf-0352-0d903bc8261e.png)

上の写真のようにSourcetreeのアプリに移動します。

右上にある⚪︎に・・・みたいなボタンを押してもらって、
アカウントボタンを押します。

押してもらうと・・・
![スクリーンショット 2024-03-04 2.12.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/83caf155-b75b-ab3e-cab7-e97d5602e0c5.png)

こんな画面に行くと思うので、
"追加..."を押してもらって
![スクリーンショット 2024-03-04 3.02.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/31ac4b0e-1860-e4f6-8ffa-cb916371c3e9.png)

こんな感じに設定してみてください。

その後、"アカウントを接続"を押してもらって、
![スクリーンショット 2024-03-04 2.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/2fb4d9c4-85c9-b111-3a88-3895586434ca.png)

こんな感じの画面が出てくるので、
"Authorize atlassian"を押してもらって、

![スクリーンショット 2024-03-04 2.16.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/de1caf54-263c-26cc-f047-d421f8996ca7.png)

この画面では
パソコン起動時のパスワードを入力してもらって、"許可"を押してください


# アカウントを確認する

Sourcetreeに戻ってもらって、
右上の⚪︎に・・・みたいなボタンを押してもらって、"アカウント"を押して中身を見てみると、自分のGitHubアカウントのユーザー名が追加されていると思います。
![スクリーンショット 2024-03-04 2.19.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/ef52218e-a5e8-c923-86bc-865317d61907.png)
"保存"を押してもらって完了です。


# 終わりに

GitHubとSourcetreeの連携で困っている方がいたらぜひ参考にしてください！

# 参考文献

https://flat-kids.net/2022/02/18/%E3%80%90%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E5%AF%BE%E5%BF%9C%E3%80%91sourcetree%E3%81%A7github%E9%80%A3%E6%90%BA%E3%81%A7%E3%82%A8%E3%83%A9%E3%83%BC%EF%BC%9Asupport-for-password-authentication-was/

FlatKids IT Developper Blog.さんの
【トラブル対応】SourceTreeでGithub連携でエラー：Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

全体の流れをこの記事を参考にさせていただきました。ありがとうございます。
React Hooksを理解する

## Hooksとは
React はコンポーネント(再利用可能なUI)ベースで構築されるUIライブラリです。コンポーネントには、クラスコンポーネントと関数コンポーネントの2種類があります。
従来、状態管理やライフサイクルメソッド等のReactの機能はクラスコンポーネントでなければ使用できなかった為、クラスコンポーネントで書くことが一般的でした。

ですが、React 16.8（2019 年 2 月リリース）で導入されたReact Hooksにより、関数コンポーネント内でも状態管理等の機能を使用することができるようになりました。

React公式ドキュメントではクラスコンポーネントに比べてコードを簡略化させ、可読性を向上させることができるフックを用いた関数コンポーネントの使用が推奨されています。

フックには種類がありますが、ここでは主に使用されることが多いフックを解説します。（私自身Reactが学習途中である為、ある程度自分の中で理解ができたものから都度追記していきます。）


## useState
useStateは、コンポーネントの現在の状態を管理するために使用されるフックです。クラスコンポーネントのthis.stateとthis.setStateと同じ機能を持ちます。

useStateは、配列の分割代入を使用して、状態変数とそれを更新するための関数の2つの要素を持つ配列を返します。状態を更新するたための関数を呼び出すと、指定された新しい状態値に基づいてコンポーネントが再レンダリングされて、新しい状態値が反映されます。


### 使用例
```ruby:
import React, { useState } from 'react';

const Component = () => {
  const [age, setAge] = useState(30);

  const handleChange = (event) => {
    setAge(event.target.value);
  };

  return (
    <div>
      <p>Your age is {age} years old</p>
      <input value={age} onChange={handleChange} />
    </div>
  );
}
```
フックを使用する際は該当のフックをimportする必要があります。
使用例では、ageという状態変数とsetAgeという更新関数で状態を管理しています。ユーザーが入力フィールドに年齢を入力すると、handleChange関数が呼び出され、新しい年齢がsetAge更新関数によってage状態変数にセットされます。

※更新関数は非同期に動作する為、更新関数が呼び出された後、即座に状態が更新されるという訳ではなく、再レンダリングが行われてから新しい状態値がコンポーネント内に反映されます。

## useEffect
関数コンポーネント内で副作用を実行することができるHookです。
useEffectは、コンポーネントがレンダリングされた後に実行されます。
また、第二引数に何を指定するかによって実行されるタイミングが異なります。
<ul>
<li>
何も指定しない場合<br>
→レンダリング毎に実行
</li>
<li>
空の配列を指定した場合<br>
→初回レンダリング時のみ
</li>
<li>
1つ以上の値が指定されている場合<br>
→渡された値がレンダリング前後で変更がなければ処理をスキップし、再レンダリング後に変更していれば実行
</li>
</ul>
DockerとFastAPIでHello Worldした

## 実行環境
- Visual Studio Code: 1.87.0
- OS: MacOS Sonoma 14.2.1

> 学習者が記録用に書いた記事です。
> ご指摘、追加情報などあれば些細なことでもコメントからいただけると励みになります。

## ファイルの構成

```shell
$ tree .
.
├── app
│   └── main.py
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
```

## Dockerfile

```Dockerfile
FROM python:3.11-slim-bullseye
EXPOSE 8000
WORKDIR /app
RUN apt update -y && apt-get update -y
RUN pip install --upgrade pip
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY app .
CMD ["uvicorn", "main:app", "--host=0.0.0.0", "--reload"]
```

- 別パターン(alpineを使用した場合)

```Dockerfile
FROM python:3.11-alpine3.19
EXPOSE 8000
WORKDIR /app

RUN apk update
RUN pip install --upgrade pip
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY app .
CMD ["uvicorn", "main:app", "--host=0.0.0.0", "--reload"]
```

## Docker Composeの設定(docker-compose.yml)

```yaml
version: '3'
services:
  sample:
    build:
      context: .
    ports:
      - 8000:8000
```

## FastAPIアプリケーション(app/main.py)

```python
from typing import Union
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}
```

## 依存パッケージのインストール(requirements.txt)

```plaintext
fastapi==0.110.0
uvicorn[standard]==0.27.1
```

## 実行

以下のコマンドを使用してDockerコンテナをビルドし、起動します。

```shell
docker-compose up --build
```

## 実行結果

- clientからGETリクエスト(curlを使用)

```shell
curl http://127.0.0.1:8000/
```

```shell
>> {"Hello":"World"}
```

8000番ポートにアクセスし、Hello Worldを得た。

## 参考文献
- [fastapi公式ドキュメント](https://fastapi.tiangolo.com/)
今後のシステム運用の考え方を自分なりにまとめてみた！

# 1. キャパシティ管理
## 1.1 基本的なキャパシティ管理の考え方
下記、3つの指標を<b>"計測"</b>した状態で<b>"バランス"</b>を保っていく必要があります。
いづれかの指標が崩れた監視運用になっていないかを確認することが監視マネジメントの基本となります。
1. 業務量
1. リソース（コスト）
1. サービス

上記のバランスを取っていく為に、どのような活動を実施すればよいのか。
1. プロアクティブな改善
クライアントより先に劣化検知し、受け身にならない改善を常に実施していく。
1. 性能問題の迅速な解決
検知した問題を迅速に解決し、属人化させずナレッジ化する。
1. 急激なアクセス増加
ユーザ通知で満足度維持 / 即時リソース追加等
1. 無駄なリソース投資の発見
クラウドサービスの利用でコスト削減

## 1.2 現状と未来
現状|未来
--|--
計測のサイロ化 / 情報の散在|状況の完全な可視化
アラートストームで開発に専念できない|適切なアラート管理で開発に集中
現場の高齢化 / スキル不足|ナレッジ化 / ノウハウ化 / 教育体制
無駄な定例 / 読まれないレポー|情報に基づく分析 / プライオリティを決めた情報発信
IT費用の拡大|クラウド活用によるITコストの最適化 / 新規施策への挑戦
経営人と現場でのDXの認識のズレ|インテリジェンスを意識した経営陣の意思決定

# 2. 運用のあるべき形
## 2.1 フレームワーク
- ITIL v2
  - 業務フローが定義、導入しやすい
  - 個々のプロセスの有効性、効率性
  - 運用現場中心のフレームワーク
- ITIL v3
  - ビジネスをITで解決する
  - 正常稼働ではなく、提供価値に注目
- ITIL v4
  - 企業活動とITを分けずにとらえる
  - 組み換え可能なシステム構成
  - 会社全体で取り組んでいく姿勢

フレームワーク|目的
--|--
ITIL|堅牢性：壊れないことを前提にシステム構築
DevOps|故障前提：壊れることを前提にシステム構築
SRE|回復性：故障時の復旧を見越してシステム構築(アプリレイヤーを含む)

## 2.2 ITへの期待
- 間違いなく動き続ける → **素早くビジネスを立ち上げる**
- 正しく動き続ける → **効果が測定できる**

## 2.3 性能管理
- **リソース**
リソース調達コストは減 / 調達スピードは高速化
⇒リソース管理の価値は相対的に低下
- **業務量**
現場の業務量がダイナミックに変動する
⇒ 業務量計測がビジネス成功 / コスト最適化のカギとなる
- **サービス**
システムの正常稼働を示す指標として、サービスの計測、可視化が重要性を増す

上記から、**業務量**のみが外的要因によって変化する値であり、可視化が必須なKPIとして位置づけられる。

# 3. サービスについて
## 3.1 基本的なサービス管理の考え方
- 目的
  - ユーザ部門へ提供するITサービスの品質管理を行う
- ITサービス
  - 計測可能であること
    ⇒ レスポンス時間/パッチ終了時間/使用可能度/..…など
- 実施作業
  - ユーザ部門との合意としてのSLAを明確化する 
  - ITサービス状況を計測し、定められたSLAを満たしているかを監視し報告する
- 計測データを適切な手法で集約する
  - 平均值 or 最大值/ピーク時 or 全時間帯/...など
- SLAもしくはSLOに違反した場合を問題として捉える 問題発生時には必要に応じてチューニングを実施する
  ⇒ ITサービスをSLA内に収めることが目的
- ボトルネック
  - 一つ改善してもボトルネックは一生消える事無く常に移動し続けるという事実。
  　⇒ **常に改善を！**

## 3.2 基本的な指標
1. SLA
サービスの提供事業者とその利用者の間で結ばれる、サービスのレベル（定義、範囲、内容、達成目標等）に関する合意サービス水準
1. SLO
事業者が設定するサービスに関する目標
1. SLI
サービスの動作を直接測定したもので、システムのプローブが成功した頻度

# 4. ワークロード
## 4.1 ワークロード管理の基本的な考え方
- 目的
  - 業務量の増加予測
  - 業務量増加に伴うリソース不足時期の把握
- 実施作業
  - 2種類の業務量を収集する
    - システムから見た仕事量 (ワークロード)
      例) トランザクション数
    - ユーザから見た仕事量 (ビジネス指標)
      例) 業務を正しく分類する
- 将来を予測する
  - ワークロードの増加傾向を予測する
    例)売り上げ、契約数、システムの利用者数
  - ワークロード増加に伴う不足リソースを把握する

# 5. リソース
## 5.1 リソース管理
- 目的
  - 的確にボトルネック箇所を把押し、必要に応じたチューニングの実施
- ボトルネックとは?・・・待ち
  - 性能低下の要因が全体から見れば小さい部分にあり、かつ他所をいくら向上させても状況改画されないような場合、その原因菌所をボトルネックと呼ぶ。
  - ボトルネックは性能低下の原因となるほかりか、ワークロード管理などの将来予測の精度を著しく低 下させてしまう。
  - ボトルネックを解消すると別の箇所がボトルネックとして潜在化する
- 定期的な実施作業
  - リソースの余力を管理
  - 性能分析(ボトルネックの把握)
  - 必要に応じたチューニング

## 5.2 リソース調達の考え方
### 古い考え方
- ハードウェアの調達には (数か月単位の) 時間がかかる
- リソースは高価で途中での追加には大きな工数がかかる
- 稼働期間中の構成変更は行わない(例外的にサーバ追加での補強はある)

**つまり・・・資源計画、キャパシティブランニングが重要**

### これからの考え方
- クラウド、仮想基盤ではリソースの調達は瞬間的にできる
- リソースの追加、削減は動的に変更可能 
  (クラウドでは従量課金なので使わなければコスト削減につながる) 
- 稼働期間中の変更も柔軟に対応できるように抽象化が進んでいる
  (OSやパッケージのバージョンからの解放案としてのコンテナやSaaSの隆盛)

**つまり・・・稼働データから必要量の設定をするほうが簡単、且つ正しい設定がしやすい**
低気圧の風速分布の検討

旋衡風平衡する低気圧の風速分布について考える。前回はこちら。

https://qiita.com/e_toyoda/items/90ae1f073b7fdd72030b

# 旋衡風平衡の式

旋衡風バランスしている場合、気圧場 $p(r)$ と風速場 $V(r)$ はともに半径 $r$ の関数であって、次の関係になる。

```math
\frac{dp(r)}{dr} = \rho \frac{V(r)^2}{r}
```

問題は $V(r)$ にどのような形を仮定するかである。

実際にみられるものは多様である。たとえば台風の風速分布についていえば 100km よりかなり近い所に風速の最大があることが知られている。そこに向かって気圧傾度は高まっていく。

https://www.jma.go.jp/jma/kishou/know/typhoon/2-1.html

逆のパターンとしては、温帯低気圧で鍋底状構造がみられることがある。中心から数百キロ離れたところに風速の最大があって、中心付近の気圧傾度は緩い。

実は今回の問題ではそこまでは解像しようがない。風速分布は経緯度1.25度格子で与えられるだけだし、気圧のポアソン方程式も同じ格子上で解かれることになる。

# 気圧傾度一定モデル

多様な低気圧形状のひとつの折衷として、気圧傾度一定を考える。

```math
\frac{d}{dr}p(r) = {\rm const.}
```
いちおう風速分布をチェックすると $r$ の平方根に比例する。

```math
V(r) = \sqrt{\frac{1}{\rho}\frac{dp}{dr}} \sqrt{r}
```

単位の扱いなど面倒だな、と感じられるが、実はあまり心配いらなくて、気圧の二回微分にすればなんのことはないゼロである。

```math
\frac{d^2}{dr^2}p = 0
```

つまり、気圧傾度一様モデルを想定するのであれば、わざわざポアソン方程式の修正量のために遠心力項を計算することはないわけである。

# 風速一様モデル（中心付近で使えないことを確認）

考えるのがめんどくさいので風速一定はどうだろうか。
```math
V(r) = {\rm const.}
```
気圧の二回微分をみると、周縁部では $r\to\infty \Rightarrow d^2p/dr^2 \to 0 $ なことは一応もっともらしいが、中心 $r=0$ では無限大になる。
```math
\frac{d^2}{dr^2}p(r) = -\rho V^2 \frac{1}{r^2}
```
積分したほうがわかりやすい。中心では気圧はマイナス無限大である。使えない。
```math
p = \rho V^2 \ln r
```

# ランキン渦モデル

中心付近では負の気圧を防ぐために $r\to 0 \Rightarrow V\to 0$ であってほしいし、周縁部では $r\to\infty \Rightarrow V \to 0$ であってほしい。
これにかなう簡素な関数形がランキン渦である。

https://en.wikipedia.org/wiki/Rankine_vortex

ウィキペディアと違えて $r$ の次数を強調して書くと:

```math
V(r) = \left\{ \begin{matrix}
(V_\max r_\max^{-1})r & \text{if } 0\le r<r_\max \\
(V_\max r_\max)r^{-1} & \text{if } r_\max<r
\end{matrix} \right.
```

ここで最大風速 $V_\max$ が半径 $r_\max$ で現れる。 

```math
\frac{d^2}{dr^2}p = \left\{\begin{matrix}
\rho V_\max^2r_\max^{-2} & \text{if } 0\le r<r_\max \\
-3\rho V_\max^2r_\max^2 r^{-4} & \text{if } r_\max<r
\end{matrix}\right.
```

```math
p = \left\{\begin{matrix}
\frac{1}{2} \rho V_\max^2r_\max^{-2}r^2+p_0 & \text{if } 0\le r<r_\max \\
-\frac{1}{2} \rho V_\max^2r_\max^2 r^{-2} + p_\infty & \text{if } r_\max<r
\end{matrix}\right.
```

積分定数は $p_0$, $p_\infty$ であるが、$r=r_\max$ の気圧が等しい制約があるので次の関係が知れる。

```math
p_\infty - p_0 = \rho V_\max^2
```

つまり手順としては

* 半径と渦方向風速の関係を調べる
* 最大風速 $V_\max$ と最大風速半径 $r_\max$ が知れる
* 気圧データもあれば $p_\infty - p_0$ をみて、 $V_\max$ が過大であれば修正する
AtCoder Beginner Contest 343 振り返り

昨日のAtCoderの振り返りです。
## 今回の結果

A,B,C 3完でした。今回は簡単めでしたが、久しぶりの3完。
簡単目だったためか、レートはあまり上がりませんでした。(D問題は気が抜けて解ききれなかった。)

![スクリーンショット 2024-03-04 1.38.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167729/51b57dba-20d6-060c-4abc-1f0a6cca6efc.png)

![スクリーンショット 2024-03-04 1.40.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167729/b0a536c3-2703-c136-1b0f-f69f8640e0ea.png)

## 各問題の振り返り

### A - Wrong Answer

- [問題](https://atcoder.jp/contests/abc343/tasks/abc343_a)
- [自分の回答](https://atcoder.jp/contests/abc343/submissions/50780529)

a+bを除いたリストの先頭を取得しました。

```haskell
main :: IO ()
main = do
  [a, b] <- readInputInts

  let lst = [0 .. 9]

  print $ head $ L.filter (/= (a + b)) lst
```

### B - Adjacency Matrix

- [問題](https://atcoder.jp/contests/abc343/tasks/abc343_b)
- [自分の回答](https://atcoder.jp/contests/abc343/submissions/50800837)

グラフの問題だから`buildG`使って…とか考えたのですが、問題をよく読んでグラフ関係ないじゃん、ということに気がつきました。要は各行の1となっている箇所を出力すれば良いだけです。
`elemIndices`を使えばサクッと取得できます。

```haskell
main :: IO ()
main = do
  n <- readLn @Int
  as <- replicateM n readInputInts

  forM_ as (putStrLn . unwords . map (show . (+ 1)) . L.elemIndices 1)
```

### C - 343

- [問題](https://atcoder.jp/contests/abc343/tasks/abc343_c)
- [自分の回答](https://atcoder.jp/contests/abc343/submissions/50829205)

制約条件に"Nは10^18以下の正整数"とあるので、その立方根は10^6以下であることがわかります。それが回文となっていれば良いので、以下のようにして全ての回文立法数を取得することができます。

```haskell
isPalindrome :: Int -> Bool
isPalindrome n =
  if even numDigits
    then leftHalf == reverse rightHalf
    else leftHalf == reverse (tail rightHalf)
  where
    str = show n
    numDigits = length str
    (leftHalf, rightHalf) = splitAt (numDigits `div` 2) str
    
let lst = filter isPalindrome $ map (^ 3) [1 .. 1000000]
```

数自体多くないので、ハードコーディングして解いてしまいます。　

```haskell
main :: IO ()
main = do
  n <- readLn @Int

  let target = IS.fromList [1, 8, 343, 1331, 1030301, 1367631, 1003003001, 10662526601, 1000300030001, 1030607060301, 1334996994331, 1000030000300001, 1033394994933301, 1331399339931331]

  print $ fromJust $ IS.lookupLE n target
```

## 全体を振り返って

今回調子良かったので、次も頑張りたいと思います。
useRefでEメールバリデーション

## アジェンダ

React でフォームのバリデーションを実装する際、`useRef` フックを使用すると、DOM 要素へ直接アクセスできるため便利です。ここでは、`input type='email'` で入力される E メールアドレスのバリデーションを `useRef` を用いてどのように実装するかを記述させていただきます。

## 手順

### ステップ 1: `useRef` のインポート

まず、`useRef` フックを React からインポートします。

```tsx
import React, { useRef } from 'react';
```

### ステップ 2: `useRef` の利用

次に、`useRef` を使って input 要素への参照を作成します。

```tsx
const emailInputRef = useRef<HTMLInputElement>(null);
```

### ステップ 3: バリデーション関数の作成

Eメールのバリデーションロジックを関数として定義します。この例では、簡単な正規表現を使っていますが、実際にはもっと複雑なロジックが必要になるかもしれません。

```tsx
const validateEmail = (email: string): boolean => {
  const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return re.test(email);
};
```

### ステップ 4: バリデーションの実行とフィードバックの表示

続いて、フォームの送信イベントでバリデーションを実行し、結果に基づいてユーザーにフィードバックを表示します。

```tsx
const handleSubmit = (event: React.FormEvent) => {
  event.preventDefault();
  const email = emailInputRef.current?.value;

  if (email && validateEmail(email)) {
    alert('Eメールが有効です。');
  } else {
    alert('無効なEメールアドレスです。');
  }
};
```

### ステップ 5: コンポーネントのレンダリング

最後に、input 要素と送信ボタンを含むフォームをレンダリングします。

```tsx
const EmailForm = () => {
  return (
    <form onSubmit={handleSubmit}>
      <label htmlFor="email">Eメール:</label>
      <input type="email" id="email" ref={emailInputRef} required />
      <button type="submit">送信</button>
    </form>
  );
};
```

これで、完成になります。上記のコードは基本的な E メールバリデーションを示していますが、`useRef`を用いてHTML5のバリデーション機能を直接利用する方法も紹介します。これにより、よりリッチなバリデーションフィードバックを提供することができます。

### 追加の実装: HTML5バリデーションの利用

フォームが送信された際に、`useRef`を通じて直接アクセスしたinput要素のHTML5バリデーション結果を使用する方法をおまけで記述します。

```tsx
import React, { useRef } from 'react';

function EmailForm() {
  const emailInputRef = useRef<HTMLInputElement>(null);

  const handleSubmit = (event: React.FormEvent) => {
    event.preventDefault();

    if (!emailInputRef.current.validity.valid) {
      alert('入力されたメールアドレスは無効です。');
    } else {
      alert('送信成功！');
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        メールアドレス:
        <input type="email" ref={emailInputRef} required />
      </label>
      <button type="submit">送信</button>
    </form>
  );
}

export default EmailForm;
```
NFS Culture on Snapchat: An Insight into Digital Etiquette

Snapchat has emerged as a vibrant platform for ephemeral content sharing, creating a unique digital culture where acronyms like NFS (Not For Sale) play a significant role. This culture fosters a sense of community, emphasizes privacy, and encourages casual sharing among its users. In this article, we delve into how NFS shapes interactions on Snapchat and the broader implications for digital etiquette and community building.

Unpacking the Meanings of NFS on Snapchat
A Tool for Privacy
NFS on Snapchat primarily serves as a marker for privacy, allowing users to specify that certain content is meant to remain within a select group. This usage aligns with Snapchat's core philosophy of temporary, intimate sharing, providing a digital space where users feel comfortable sharing moments without the fear of unwanted distribution. The NFS tag acts as a reminder of the boundaries set by the content creator, reinforcing the importance of consent in the digital age.

Fostering Casual Connections
Snapchat's casual and spontaneous nature is further emphasized through the NFS tag. It signals that the shared content is meant for light-hearted, informal engagement, free from the pressures of external judgment or the need for it to have any commercial value. This encourages a genuine exchange of experiences and moments, fostering closer ties between users.

Building Community
The use of NFS on Snapchat extends beyond privacy and casual sharing; it's instrumental in building a sense of community. By marking content as NFS, users create exclusive spaces where shared experiences and inside jokes can flourish. This sense of exclusivity strengthens community bonds, making Snapchat a platform not just for sharing moments but for nurturing connections.

Digital Etiquette and the NFS Tag
The NFS tag on Snapchat underscores the evolving landscape of digital etiquette. It serves as a mutual understanding between users to respect the privacy and intentions behind shared content. In a digital environment where content can be easily forwarded or misused, NFS acts as a safeguard, promoting a culture of respect and mindfulness.

Conclusion
The multifaceted nature of NFS on Snapchat offers a glimpse into how digital platforms can foster intimate, secure, and community-oriented spaces. As depicted in the vibrant illustration, the interplay between privacy, casual sharing, and community building forms the backbone of Snapchat's digital culture. Through symbols such as the lock for privacy, a group of people for community, and a relaxed emoji for casual sharing, the essence of NFS is captured, highlighting the interconnectedness of these concepts within the platform.
https://teckhustlers.com/nfs-mean-on-snapchat/
As digital communication continues to evolve, understanding and respecting the nuances of acronyms like NFS is crucial in navigating online spaces thoughtfully and responsibly. Snapchat's NFS culture is a testament to the platform's ability to adapt to its users' needs, fostering a space where connections are not just made but cherished.
コマンドを打ったときにshell (bash) が対話(インタラクティブ)か非対話(ノンインタラクティブ)かで挙動が変わるので注意した方がいいなと思った話

```
最終更新日: 20240305
```

# 体験談
```ReactNativeExpo```をやってるときに```npx expo start```を打っても
サーバーが立ち上がらないなと結構な時間悩んでいたら
コマンドをノンインタラクティブで処理する```gitbash```(windowsでもUnixコマンドを使えるbash)を使っていたのが原因でした


# まとめ
コマンドを打ったときに挙動がおかしいときは
使用しているshell・bashが非対話になっていないか確認してみてください！




# おわりに

こういう知見は0と1じゃ全く違いますよね
雰囲気だけ頭の片隅に置いておけば解決の糸口になります！
<br>
CUDA+OpenGL Dockerイメージの作成方法

# はじめに
* NVIDIA CUDA + OpenGLを利用可能なDockerイメージの作成方法
  * 用途: NVIDIA GPUを使ってコンテナ内でGPGPU処理とGUI表示する
* Ubuntu20.04までは、NVIDIAが公式で「[cudagl](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/cudagl)」というDockerイメージを用意していた
  *  Ubuntu22.04ベースは用意されていない（2024.3.1時点）

# 方法

## Ubuntu20.04

下記からcudaglイメージを使う。

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/cudagl

例：Ubuntu20.04 + CUDA11.3.0(devel) + OpenGLの場合
```bash
docker pull nvcr.io/nvidia/cudagl:11.3.0-devel-ubuntu20.04
```

## Ubuntu22.04

ベースのCUDAイメージを起点にして、OpenGL関連の必要なファイルをインストールする。  

Dockerfileは以下のようになっているので、build-argで指定するか、自身のDockerfileに組み込んでビルドする。

https://gitlab.com/nvidia/container-images/opengl/-/blob/ubuntu22.04/glvnd/devel/Dockerfile?ref_type=heads

```Dockerfile
ARG from

FROM ${from}

RUN apt-get update && apt-get install -y --no-install-recommends \
        pkg-config \
        libglvnd-dev libglvnd-dev:i386 \
        libgl1-mesa-dev libgl1-mesa-dev:i386 \
        libegl1-mesa-dev libegl1-mesa-dev:i386 \
        libgles2-mesa-dev libgles2-mesa-dev:i386 && \
    rm -rf /var/lib/apt/lists/*
```

* ポイント
   下記部分がOpenGLの部分。この部分を自身のDockerfileに追記すればよい。
   ```Dockerfile
   RUN apt-get update && apt-get install -y --no-install-recommends \
        pkg-config \
        libglvnd-dev libglvnd-dev:i386 \
        libgl1-mesa-dev libgl1-mesa-dev:i386 \
        libegl1-mesa-dev libegl1-mesa-dev:i386 \
        libgles2-mesa-dev libgles2-mesa-dev:i386 && \
    rm -rf /var/lib/apt/lists/*
   ```

起点となるCUDAイメージは以下を参照。

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/cuda


例：Ubuntu22.04 + CUDA 12.3.2(devel) + OpenGL
```bash
docker build -t {YOUR_IMAGE_NAME} --build-arg "from=nvcr.io/nvidia/cuda:12.3.2-devel-ubuntu22.04" .
```


# 参考

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/cudagl

https://gitlab.com/nvidia/container-images/opengl/-/tree/ubuntu22.04/glvnd?ref_type=heads

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/cuda

# トラブルシューティング
## 32bit(i386)用OpenGLライブラリのインストールが失敗する

```bash
E: Unable to locate package libglvnd-dev:i386
E: Unable to locate package libgl1-mesa-dev:i386
E: Unable to locate package libegl1-mesa-dev:i386
E: Unable to locate package libgles2-mesa-dev:i386
```
* 対処方法
  * 上記パッケージを除いて、インストールする。
HTTPメソッド

# HTTPメソッドとは
HTTPでのアクセス時に指定するもの。HTTPリクエストヘッダの先頭につけられていて、サーバーに送信されます。

GET/POSTなどが有名。
本記事ではその種類についてAPIを学習し始めた人向けに軽く解説します。
### GETメソッド
GETメソッドはWebへのアクセスで多く利用されているもので、「情報の取得」を表すメソッドです。URIで指定されたリソースを取得するために用います。
### POSTメソッド
POSTメソッドは「情報の新規登録」を表すメソッドです。指定したURIに新しいリソースを送信することができます。
情報の変更や削除には別のメソッドを使えばいいので、あくまで情報の更新ではなく新規登録として扱いましょう。
### PUTメソッド
PUTメソッドはサーバー側の情報を変更するためのメソッドです。（Web APIにおいてはデータを修正する際に用います。）
送信するデータでもともとのリソースを完全に上書きする、というものです。データの一部だけを更新する場合には後述するPATCHメソッドを使いましょう。
### DELETEメソッド
リソースの削除を行うメソッドです。URIで指定したリソースを削除するのに用います。
### PATCHメソッド
PUTと同じく指定したリソースを更新するために利用するメソッドですが、前にも述べたように、すべてを変更するのではなく、一部を変更するということを示したメソッドです。変更箇所のみの小さなデータを送るだけで済むので、そういった場合で用いましょう。
### 引用
水野貴明（2022）「Web API: The Good Parts」
# まとめ
最近APIの勉強を始めたので勉強したことのまとめとして記事を書かせていただきました。間違っているところ、分かりにくいところなどあるかもしれないので、本気で勉強したい場合は、引用に記した著書「Web API: The Good Parts」を読むことがおすすめです。