OmniAICreator/Qiita-1.07M huggingface dataset:
カラーモードの影響から解き放たれよう

# light/darkモードが問題になる

egui自体はOSのカラーモードに自動で対応したり、はたまた簡単に自身のカラーモードを切り替えるためのウィジットがあったりして一見してなにも問題が無いように感じるのですが、現在どのモードで表示しているのか知るすべが無い（無いはずは無いと思うんだけど結構かじりついて見ていても取得方法が分かりません。<br>
で、このままではダークモードでは見づらいとかその逆とかが起きてしまいます。<br>
起動時にカラーモードを選択して動作するようには出来るのですが、途中でOSのカラーモードが切り替わるとeguiもそれに追従してしまいます。親切なんだかいやがらせなんだか。<br>

![スクリーンショット 2024-01-27 025950](https://gist.github.com/assets/12671694/ccc8b730-61db-44b4-b030-eb23f021a113)<br>
*このようにライトモードでは画像が見えなくなってしまった*


簡単に使えるのが良くてeguiを使いたいわけなので丁寧にユーザビリティがどうの、というよりはとりあえず使えるものを素早くビルドしたい、そっちに全振りしたい。そういうスタンスでこの問題に向き合ってみましょう。（つまり、カラーモードが取得できるようになったとしても面倒だから対応したくないというスタンスです）

## 今回の対象バージョン
- egui : 0.25.0
- egui_extras : 0.25.0
- eframe : 0.25.0


## 問題は背景の色が変わってしまうところにある。

ならば背景色が固定出来ればいい、そうでしょう。
ウィンドウの背景やパネルの背景は直接は指示出来ない様ですがフレームを使って色が指定できる様です。

### コード

以下のようなコードをどこかに用意します。

```rs
fn new_frame(bgcolor: Color32) -> egui::containers::Frame {
    egui::containers::Frame {
        inner_margin: egui::style::Margin { left: 0.0, right: 0.0, top: 0.0, bottom: 0.0 },
        outer_margin: egui::style::Margin { left: 0.0, right: 0.0, top: 0.0, bottom: 0.0 },
        rounding: egui::Rounding { nw: 0.0, ne: 0.0, sw: 0.0, se: 0.0 },
        shadow: eframe::epaint::Shadow { extrusion: 0.0, color: Color32::DARK_GRAY },
        fill: bgcolor,
        stroke: egui::Stroke::new(0.0, Color32::BLACK),
    }
}
```

次に、**update**内の、**CentralPanel**を作成するところで```.frame(...)```を追加。

```rs
egui::CentralPanel::default()
    .frame(new_frame(Color32::DARK_GRAY))
    .show(&ctx, |ui| { .....
```

これで今回の問題は解決です。<br>
実行するとダークグレーの背景で動作して、OSの方でカラーモードを変更しても表示については影響を受けなくなりました。<br>

![スクリーンショット 2024-01-27 030121](https://gist.github.com/assets/12671694/9a9ccb82-6857-4fda-a7d4-ff353396b453)
![スクリーンショット 2024-01-27 030147](https://gist.github.com/assets/12671694/3043b4fd-60c0-4d45-935c-5c6b9b75e7e3)

文字の色などはまだカラーモードの影響を受けていますがとりあえず画像が見えなくなるような事態は防げそうです。

### 文字要素にRichTextを使う

カラーモードの影響から抜け出しつつ、もっと自由に色とか大きさとか変えたくなるのでどっちにしてもこれを使います。

```rs
ui.label("Hello, world!);
```
これを

```rs
ui.label(
    egui::RichText::new("Hello, world!")
        .color(Color32::WHITE)
        .size(24.0)
);
```
こうします。

すると…

![スクリーンショット 2024-01-27 031359](https://gist.github.com/assets/12671694/467a04a8-aa28-4f67-a72b-ef585ef221d1)

いろいろと自由を手にいれることができました。<br>
*※ フレームのマージンを整えるともっと見栄えするようになります*

## 〆

今回はダーク/ライトモードの影響を受けて実際の運用で問題が起きない簡単な方法としてこのようにやってみました。<br>
手軽なのがeguiのいいところだと思います…本当はもっといい解決方法があるかもしれませんがそれはのちのち…
golang[Go言語]でインポート分のパスを指定する方法。

# 記事作成背景
import分変えたいなって思った時どこを変えたらよいか自分用のメモです。

# 修正内容
go.modのmoduleを変える。
```go:go.mod
module business←ここ

go 1.15

require (
	github.com/go-sql-driver/mysql v1.5.0
	github.com/joho/godotenv v1.3.0
)

puts 'The best way to log and share programmers knowledge.'
```
10進数から2進数に変換

https://paiza.jp/works/mondai/loop_problems2/loop_problems2__conv_binary

たとえば
１だったら　1
２だったら繰り上がるので 10 
３だったら　11
4だったら繰り上がるので100
こんな感じ。

（pythonにpow()メソッドがあるのは知らないという設定で）

```py
def make_pow(x,y):
    ret = 1
    for i in range(y):
        ret *= x
    return ret

N = int(input())

binary = 0
i = 0
while N > 0:
    digit = N % 2
    binary += digit * make_pow(10,i)
#    binary += digit * pow(10, i)
    N //= 2
    i += 1

print(binary)
```
Amazon EBSボリュームのDelete on Terminationについての備忘録

### Delete on Termination
オンの時：　EBSボリュームは削除
オフの時：　EBSボリュームは保存

デフォルトでは・・・・？
ルートボリュームのDeleteOnTermination はTrue→保存しない（削除）
追加のボリュームDeleteOnTermination はFalse→保存（保持）


ここは、違う、ここはこうじゃない？等々ございましたら、ご指摘いただけますと騒いです。
【Terraform】AWS CodeDeployだけはマネジメントコンソール上から消さない方がいい

## はじめに

AWS環境をTerraformで構築している場合、Terraformでリソースを削除するのではなく、マネジメントコンソール上でリソースを削除するということも時々発生すると思います。
ただし、CodeDeployだけは削除するのはお勧めしません。
「<font color="red">ApplicationDoesNotExistException</font>」が発生するからです。

## エラー内容 - ApplicationDoesNotExistException

その名前の通り、対象の名前のCodeDeployアプリケーションが存在していない場合に発生します。

これは
TerraformでCodeDeployアプリケーションを構築
→マネジメントコンソール上でそのリソースを削除
→terraform planを実行　
した場合に発生します。

## 対応方法

上記エラーが発生した場合、CodeDeployアプリケーションとデプロイメントグループを<font color="red">Terraformで作成したリソース名で</font>再作成する必要があります（あくまでリソース名だけでid等は違っても問題ないみたいです）。
そうしないといつまでもterraform planするたびにApplicationDoesNotExistExceptionが発生して先に進めません。

## 結論

既に作成したリソース名を覚えていなかったり、仮に覚えていても他のデプロイメントグループで使用されていないECS Clusterを用意したり、IAMを作成したりしないとデプロイメントグループが作成できないので、結構面倒くさいです。

他のAWSリソースに関してはマネジメントコンソール上で削除してもterraform planやterraform applyで特に問題は生じていないですが、CodeDeployだけはこの問題が発生するので、マネジメントコンソール上で削除するのではなく、Terraformで削除することをお勧めします。
[outlook] Mail Templateを作成する

# はじめに

Outlook新しくなりましたね！

![new outlook](https://store-images.s-microsoft.com/image/apps.46065.14374512070697751.b8c0d5fc-cec2-42f9-924b-60723d59e3f2.b69611ff-648d-4827-9bb1-8a7bc4653719?h=380 "new outlook icon")

https://www.microsoft.com/ja-jp/microsoft-365/outlook/outlook-for-windows

でも新しすぎて、やりたいことをうまく検索できない印象です。
今まで製品の`ヘルプ`を使ったことなかったのですが、今回ヘルプによってやりたいことに辿り着きました。そこでメモしておきます。

# 背景
日報を送っています。
"宛先"・"件名"・"記載項目"を調べたり、入力したり***毎回面倒くさい***！
テンプレート作れないのかと思って調べても、
古い情報しかない...助けて！から始まりました。


# テンプレート作成方法
1. 作成中のメッセージで、テンプレートコンテンツを挿入する場所にカーソル置く
1. [ 挿入 ] タブ > アプリ > マイテンプレート
1. [ :heavy_plus_sign:テンプレート ]
1. タイトルとテンプレート文記載
1. 保存

# テンプレート使い方
1. [ 挿入 ] タブ > アプリ > マイテンプレート
1. 右側の [ マイ テンプレート ] ウィンドウで、挿入するテンプレートを選択
1. テキストはすぐにメッセージに追加される
1. ウィンドウを閉じて、メッセージの編集を続ける

:::note 
宛先と件名を指定はできなかったので、
一番上に記載して、コピペするようにしています
（これでもとても楽になりました。小さいですが効率化ですね。）
:::



# 今回の情報のたどり着き方
`[ ヘルプ ]タブ > ヘルプ > ヘルプの検索 > "テンプレート"と検索`
すると以下リンクが出てきました。

https://support.microsoft.com/en-gb/office/open-or-use-an-email-template-c5fbd2dc-4d19-45ae-8f06-4419c21a0018?ns=NWOUTWIN8#ID0EBBD=Monarch

このリンク、どれだけ調べても出てこない。なぜなのか。。（投稿日時点）
`Open or use an email template`と検索しても出てこない！

でもヘルプが便利で助かりましたとさ。

# 参考リンク
new outlook iconは以下リンクの画像埋め込みです。

https://apps.microsoft.com/detail/9NRX63209R7B?ocid=cmmdoli6tgo&hl=en-us&gl=US

# おわりに
最後まで見ていただき、ありがとうございます。
よかったらチャンネル登録（フォロー）と高評価（いいね:heart_decoration:）お願いします:pray:
週一で投稿目指してます。もしフォローかいいね:heart_decoration:をしてくださると、やる気出るので、次週は投稿することを約束します！絶対！絶対！

※今週も約束守れました。いつもありがとうございます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659255/83d29d04-d41d-d2fb-8c52-9f47b2ca22e1.png)
Web技術の基本をまとめてみた

## はじめに
この記事は『プロになるためのWeb技術入門』――なぜ，あなたはWebシステムを開発できないのかを読んでエンジニアの基本的な用語を自分なりにまとめてみました。
## ステートフルとステートレス
 - ステートフルとは **前回のリクエスト（情報）の結果が残っている状態。**　リクエストが残っているおかげでECサイトでのログイン情報や買い物カゴ情報が残っている ステートレスは **前回のリクエスト（情報）の結果が残っていない状態。** ステートフルの方が良さそうに思えるが全てステートフルだと全てのユーザーごとのリクエストを残さないといけなくなるので膨大な手間がかかる
 ## リクエストとレスポンス
 - リクエストとは **ユーザーからサーバーに対する要求のこと。** レスポンスとは　**サーバーからユーザーに対する応答のこと。** お店に例えるとお客が商品頼む時の注文がリクエスト。お店がその注文を聞いて渡す商品がレスポンス。
 ## Cookie（クッキー）
 - Webブラウザに状態（リクエスト）を持たせることができる技術。
 ## プロトコル
 - コンピュータ同士でやり取りするための手順や規約
 ## ポート番号
 - TCP/IPの情報を受け取るアプリケーションが使用する番号
 ## まとめ
 - まだまだわからないことが多いのでこれからも学習していきたいと思う
hummingbotを使ってハイリキ（Hyperliquid）でBTCマーケットメイキングしてみた件

復習がてらハイリキでhummingbotを使ってみたので以下に記録します。
操作方法は全て公式ドキュメントに記載されています。
本記事は私がhummingbotの使い方を忘れないようにするために準備したものです。

:::note alert
投資や投機を推奨するものではなく単なる使い方の説明なのでご使用の際は自己責任でお願いします。
:::

![Screenshot 2024-01-26 at 16.52.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670541/5ef18c7c-709d-920a-d73a-ad61d9d86ba5.png)

今回は具体例にハイリキ（Hyperliquid）を使用しますが、CEXや他のDEXでも同じことができます。

# インストール方法
Dockerを使う方法とGithubから直接ダウンロードする方法があるのですが、Dockerのことをよく理解できていないのでGithubの方を使います。
### 必要なもの
* Mac M1（WindowsでもMac Intelでも可能ですが、今回は私の環境を使います）
* Anaconda

Anacondaは以下のURLからダウンロードしてインストールします。

https://www.anaconda.com/download/

インストールが終わったらターミナルにて以下のコマンドを実行します。
```bash
curl -o Miniconda3-latest-MacOSX-arm64.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
bash Miniconda3-latest-MacOSX-arm64.sh
```

仮想環境を立ち上がるか確認します。
```bash
conda
conda deactivate
```

hummingbotをダウンロードします
```bash
git clone https://github.com/hummingbot/hummingbot.git
cd hummingbot
```

ダウンロードしたファイルをインストールします。
```bash
./install
```

hummingbot用の仮想環境を立ち上げます。
```bash
conda activate hummingbot
```

コンパイラーを起動します。
```bash
./compile
```

hummingbotを起動します。
```bash
./start
```
:::note info
エラーが発生したら直接ドキュメントを確認して対処。
https://hummingbot.org/installation/mac/
:::

起動時にhummingbot用のパスワードを設定するよう求められます。
APIキーを保管するので推測されづらいパスワードが良いです。

# 取引所APIのセット方法

hummingbot上で以下のコマンドを打つとEVMのアドレス、そのプライベートキーを要求されるのでコピペで貼り付けます。
```bash
connect hyperliquid_perpetual
```

# ストラテジーの設定
実際にhummingbotを動かすためには特定取引所の特定銘柄の売買方法を指定をするためのストラテジーというものが必要になります。
以下のコマンドから作成できます。

```bash
create
```
上のコマンドを入力するとWhat is your market making strategy? と聞かれます。
perpetual_market_makingと答えます。

その後はBidやAskやスプレッドの数値などを逐一設定していきます。
下記の写真のようになります。

:::note warn
こちらの設定を真似しても収益の出るマーケットメイキングにはなりません。
本記事はあくまでもサンプルです。
:::


![Screenshot 2024-01-26 at 17.02.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670541/76c0cf52-2e99-2bef-26b6-6caa2db626c1.png)

:::note info
もしエラーなどがあればドキュメントで仕様を確認します。
https://hummingbot.org/exchanges/hyperliquid/
:::

## 起動と停止の方法
ストラテジー作成直後はそのストラテジーが既にロードされている状態になっているので以下のコマンドですぐに起動できます。

```bash
start
```
中止したい場合は以下のコマンドです。
```bash
stop
```
hummingbotを完全に停止したい場合は以下のコマンドです。
```bash
exit
```

# その他使えるコマンド
* status
注文状況やポジション状況の一覧を表示します。
* help
利用可能なコマンドを全て表示します。
* previous
前回使用したストラテジーをロードします。
* import
ストラテジーをロードします。
* order_book
板情報を表示します。
* balance
アカウントの残高を表示します。
AndroidStudioのスペルチェック機能で特定の文字を警告しないようにする方法

AndroidStudioで開発中に地名などの名称で、スペルチェック機能により警告がでてしまいました。
自分で設定した文字を警告しないようにする方法です。


# スペルチェック機能で特定の文字を警告しないようにする方法

Preferences > Editor > Spelling で設定できます。

![スクリーンショット 2024-01-27 1.06.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/b9f9d5b7-a20c-4575-6cf5-ca275a218b95.png)

Spellingを開くとこのような画面が出てきます。

![スクリーンショット 2024-01-27 1.06.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/270f9e2d-3714-cef2-b64a-4febf52d8296.png)

赤矢印のAccepted wordsの＋をクリックして警告を無効にしたい文字を入力すれば完了です！
[React]hoverで表示するツールチップなどはstateを使わずに切り替えるべし

# hoverで表示する時はstateを使うんじゃない

タイトルはキャッチーな感じで

## 本題

``` jsx
const [isHover, setIsHover] = useState(false)

...

const handleMouseOver = () => {
  setIsHover(true)
}

const handleMouseLeave = () => {
  setIsHover(false)
}

...

return (
  <div onMouseOver={handleMouseOver} onMouseLeave={handleMouseLeave}>
  {
    isHover && <>ツールチップ</>
  }
  </div>
)
```
上記のような実装でツールチップやアイコンの表示・非表示を切り替えていることがあるかもしれませんが
この手法だとマウスを早く動かされたりするなどで切り替えがうまくいかないことがあります。
またツールチップの表示・非表示するだけでその個数分`state`を作らないといけないのも非効率です。
ですので
`hover`を使用した実装にするのが良いです。

``` jsx
...
// 今回はTailwindcss
// 他でも同じように使用できます
return (
  <div className='hover:[&>div]:block'>
    <div className='none'>ツールチップ</div>
  </div>
)
```

`[&>div]`を修正すれば`svg`などにも対応できるので、非常に便利です。
ぜひ皆さんもこちらで切り替えをしてみてください。

### 最後に

|| display | visiblity |
| ----| ---- | ---- |
|非表示時の領域確保|　 × 　| 　 ⚪︎ |

非表示時に使う代表的なこの２つの違いを認識しておくと使う時に根拠がはっきりすると思います。


閲覧ありがとうございました。
OpenCLを使って簡易なレイトレーシングをする

# はじめに  
[Ray Tracing in One Weekend](https://raytracing.github.io/books/RayTracingInOneWeekend.html)の完成物相当のものを作ってみました。いくつかの変更点や気になったところを書き留めておきます。  
[OpenCL_Simple_RayTracing](https://github.com/53544556454E/OpenCL_Simple_RayTracing)にソースコードを置いておきます。  
次のような画像(1200*675 pixel, 50回反射, 500サンプル)をメモリ上に生成するのにIntel UHD 630で215秒ほど、AMD Radeon Vega 56で42秒ほどかかりました。  
![Simple_RayTracing.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419233/bd0aa6d7-40cd-9d90-25bd-0a7f27d448aa.png)

# GPUで処理する際に変更したところ  
* 再帰呼出をなくす  
* double型のところをfloat型にする  
* 長時間のGPUの占有を避ける  
* 乱数の生成をワークアイテムごとに行う  
* その他  

## 再帰呼出をなくす  
OpenCL Cでは再帰呼出は非サポートです。  
Ray Tracing in One Weekendのプログラムではレイの反射・屈折のたびに再帰呼出をしていますが、ここをループで済むよう書換えました。反射する割合を掛け合わせていくだけです。    

## double型のところをfloat型にする  
double型はfloat型に比べて概ね演算に16倍ほど時間がかかるようです。  

![GCN_Instruction_Throughput.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419233/620090b3-2ac1-9b06-af09-4f478544bb56.png)
[AMD APP SDK OpenCL Optimization Guide](https://www.amd.com/system/files/TechDocs/AMD_OpenCL_Programming_Optimization_Guide2.pdf) より抜粋  

## 長時間のGPUの占有を避ける  
[ドライバー開発中の TDR のテストとデバッグ](https://learn.microsoft.com/ja-jp/windows-hardware/drivers/display/tdr-registry-keys)にあるようにレジストリに手を加えれば問題はなさそうなのですが、極力GPUを掴みっぱなしにしないほうがよさそうなので。  
アンチエイリアシングのために同一ピクセルにレイを何度も撃ち足し合わせるところを、カーネルの呼出ごとに1回のみにしました。  

## 乱数の生成をワークアイテムごとに行う  
[OpenCLのはじめかたなど](https://qiita.com/53544556454E/items/f184415430a4ada44977)で記述したものを用いました。  
乱数を書きこむ領域をダブルバッファリングして、デバイスの処理中にホストで乱数を生成するという手でもよかったかもしれません。  

## その他  
乱数生成の際に棄却法としているところを、別の方法に書換えました。  
```
inline vec3 random_in_unit_disk() {
    while (true) {
        auto p = vec3(random_double(-1,1), random_double(-1,1), 0);
        if (p.length_squared() < 1)
            return p;
    }
}

inline vec3 random_in_unit_sphere() {
    while (true) {
        auto p = vec3::random(-1,1);
        if (p.length_squared() < 1)
            return p;
    }
}
```

```
float2 GetRandamVectorinUnitDisk(uint *random_state)
{
	float theta = GetRangedFloat(random_state, -M_PI_F, M_PI_F);
	float r = sqrt(GetRandomUnitFloat(random_state));

	return (float2)(r*cos(theta), r*sin(theta));
}

float3 GetRandomVectorInUnitSphere(uint *random_state)
{
	float phi = GetRangedFloat(random_state, 0.0f, 2 * M_PI_F);
	float z = GetRangedFloat(random_state, -1.0f, 1.0f);
	float r = GetRandomUnitFloat(random_state);

	float x = cbrt(r) * sqrt(1.0f - z*z) * cos(phi);
	float y = cbrt(r) * sqrt(1.0f - z*z) * sin(phi);
	z = cbrt(r) * z;

	return (float3)(x, y, z);
}
```

# 感想など  
Ray Tracing in One Weekendの原文を邦訳したものには古いものもあるので、原文にも目を通すのがよさそうです。  
今回のように分岐の中身が多いプログラムではパフォーマンスが低くなりがちかもしれません。  
レイを撃って得た色を加算する際、その回数が多すぎると情報落ちにより加算が反映されなくなります。緩和策はあるのですが煩雑なものになります。  
GPUを連続して長時間占有するとOSの介入によりデバイスのリセットが発生するかもしれません。予防策として小分けにした領域ごとに処理するくらいならまだ易しいのですが、反射屈折ごとにカーネルを走らせるようにすると難しくなりそうです。  

# 参考文献  
[そら飛ぶタピオカ 球表面・球内に一様分布する点をいっぱい生成する](https://tapioca.hatenablog.jp/entry/2017/02/19/015556)  
[KAYAC engineers&#39; blog 円や球面にランダムに点を散らしたい〜高校数学を使って分布関数を作る〜](https://techblog.kayac.com/how-to-distribute-points-randomly-using-high-school-math)
HTMLであまり知られていないタグ（自己偏見）

# おはよう
皆さん、おはようございます・こんにちは・こんばんは・おかえり(?)
今回はタイトル通りHTMLであまり知られていないタグについて紹介します。
# むっちゃ短い本編
皆さんはHTMLといえば`<div></div>`や`<h1></h1>`を思い浮かべると思います。いろいろありますが、HTMLでは独自のタグが普通利用できません。Custom Elementsを使うのは別の話になりますが、例えば`<qiita></qiita>`というタグを作ってもダメなわけです。
## タグ10選
### No.1
`<template>`
`<template>` は HTML の要素で、ページが読み込まれたときにすぐにレンダリングされるのではなく、実行時に JavaScript を使って後からインスタンス化することができる HTML を保持するためのメカニズムです。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/template
### No.2
`<section>`
`<section>` は HTML の要素で、文書の自立した一般的なセクション（区間）を表します。そのセクションを表現するより意味的に具体的な要素がない場合に使用します。少数の例外を除いて、セクションには見出しを置いてください。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/section
### No.3
`<tfoot>`
`<tfoot>` は HTML の要素で、表の一連の列を総括する行のセットを定義します。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/tfoot
### No.4
`<var>`
`<var>` は HTML の要素で、数式やプログラムコード内の変数の名前を表します。挙動はブラウザーに依存しますが、通常は現在のフォントのイタリック体を使って表示されます。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/var
### No.5
`<sub>`
`<sub>` は HTML の要素で、表記上の理由で下付き文字として表示するべきインラインテキストを示します。下付き文字は普通、小さめのテキストを使用してベースラインよりも低く表示されます。
<sub>こういう感じ</sub>

https://developer.mozilla.org/ja/docs/Web/HTML/Element/sub
### No.6
`<small>`
`<small>` は HTML の要素で、スタイルの表現とは独立して、著作権表示や法的表記のような、注釈や小さく表示される文を表します。既定では、 small から x-small のように、一段階小さいフォントでテキストが表示されます。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/small
### No.7
`<search>`
`<search>` は HTML の要素で、文書やアプリケーションのうち、検索や絞り込み操作を行うことに関連する、フォームコントロールやその他のコンテンツの部分を表すコンテナーです。`<search>` 要素は意味的に、要素の内容の目的が検索や絞り込み機能であることを示します。検索や絞り込み機能は、ウェブサイトやアプリケーション、現在のウェブページや文書、あるいはインターネット全体やそのサブセクションを対象とする可能性があります。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/search
### No.8
`<ruby>`
`<ruby>` は HTML の要素で、ベーステキストの上、下、隣に描画される小さな注釈であり、よく東アジアの文字の発音を表すのに使われます。他の種類の注釈にも使われることがありますが、この使い方はあまり一般的ではありません。
<ruby>こんな感じ<rp>(</rp><rt>Konnnakannji</rt><rp>)</rp></ruby>

https://developer.mozilla.org/ja/docs/Web/HTML/Element/ruby
### No.9
`<progress>`
`<progress>` は HTML の要素で、タスクの進捗状況を表示します。ふつうはプログレスバーとして表示されます。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/progress
### No.10
`<ol>`
`<ol>` は HTML の要素で、項目の順序付きリストを表します。ふつうは番号付きのリストとして表示されます。
<ol>
  <li>こういう感じ</li>
  <li>こういう感じでやんす</li>
  <li>こういう感じなのである</li>
  <li>こういう感じだぁぁ</li>
  <li>こういう感じよ♡</li>
</ol>

https://developer.mozilla.org/ja/docs/Web/HTML/Element/ol
# まとめ
どうでしたか？皆さんが知らないタグや、ここには載っていないほとんど使う機会がないようなタグがあったら教えてください。
サ◯ーターズの1on1イベントに参加したけどちょっとモヤる点（概ね良かったけどな！）

:::note warn
注意
この記事は俺の主観的考えが含まれています。
:::
# はじめに
サ◯ーターズの1on1イベントに関する記事が沢山上がっているけど、個人的に参加してみて思ったことがいくつかあるので
ちまちまと書いていこうと思う。

もしかしたらサ◯ーターズさんに不利益な記事になってしまう可能性もあるので、そこはすまん。

# そもそも1on1イベントってなんなん？


- みんなが知っている企業（メガベンチャー）の人事の方やエンジニアの方々と個別で話せる逆求人イベントである。
- 最大８社と面談することができる（。。。がちょっときになるので後述）
- 参加した学生には何円か就活応援支援金を貰える（アマギフとかで）

#  参加へのハードルは？

ハードルは正直言って高い。２年生の夏に申し込みをしてみたが速攻で門前払いを食らってしまった。
プロフィールに個人開発の制作物を記載していたのだが、インターンが未経験だった為それで落選した模様。
個人的に１on1に受かるコツ的なものは
- インターンに参加している実績があり実務経験があること
- 個人開発などの成果物があること

の２つが重要そうだと感じる。ちなみに学歴とかでフィルターをかけてそうな感じはしなかった。（俺はFランやけど通過したので）

# イベントの流れ

| イベント名 | 概要 |
|--------|--------|
| 企業プレゼンテーション | 企業の５分ほどの説明を聞き、アンケートに記入していく。（ちなみに時間がかつかつなので、アンケートに記入するのがマジでキチい。もうちょい時間欲しい）
| 昼休憩 | 一旦昼休憩。この間にサ◯ーターズ側が記入したアンケートをもとに、俺がどの企業と面談をするか決める。（ちなみに決め方などは一切非公開なのでブラックボックスみたいやわ）
|個別面談|大体5分の自己紹介の後、２０分の面談を行っていく

# 企業説明を聞いてみて
いろんな業種の会社が参加してんなぁと感じた。
モバイルアプリとかWebとかゲームとかマジで業種が幅広いなと感じた。

# 参加してみてどうだった？

一言で言うと**マジで疲れる**
朝の10時から夜の20時まで掛けての長時間のイベントになるため、腰と肩と目が逝く。
あとひたすら企業の方と面談をするため、喉が枯れるから水はマジで必須。

ただ企業の方々に自分の強みや開発物のアピールをすることができる貴重な機会なのでコレは本当に良かった。
（自分は個人開発でアプリを作っててリリースまでできているので、そこが結構ウケることが多かった）

あと運が良ければ、インターンに招待されたり選考なども免除されたりするので受けてみる価値はめっちゃあると思う。

# 面談の雰囲気はどう？
ぶっちゃけ”面接”ではなく、”面談”なので基本的には和やかな雰囲気やね。
ただ人事の方から「将来どんなエンジニアになりたいか？」「就活の軸は何か？」「開発をする上で大切にしていることは？」
などの質問が来たので、この返答次第で選考免除などをしているのかな？と感じた。

ちなみに面談終了後には各企業からフィードバックを貰うことができるで。
基本的には褒めてもらえる感じやわ。（ちょっとDisってほしいなとは思うけど）

# 不満点
。。。とここまでは他の「1on1に参加してみた」的な記事だが、ここからは俺がちょっともやった本音をバンバン言っていこうと思う。
（この記事消されるかも）

# 不満点その１：最大8社は誇張表現じゃない？
サ◯ーターズのイベントには2回参加させてもらっているのだが、実際に面談できた企業の数は４つぐらいしか無かった。
同じく参加していた友達も4社しか面談をすることができなかったので、最大8社と面談できると広告を出すのはちょっとどうなん？？？と思う。
てか冷静に考えると、参加者の人数と時間的に最大8社と面談できるのは現実的では無いと感じるね。
企業の数が15で、参加していた学生の人数が30人くらいかつ最大8ターンの面接の時間しかないと考えると（単純計算したら）
15×8÷30=4になるので、実質４社としか面談できないよね？？？

# 不満点その2:どれだけ頑張っても面談できない企業がある（というか希望する企業と面談できないことがある）
まあ時間と参加している人数的に無理なものはしょうがないが、どれだけアンケートに熱心に書いても希望する企業との面談が組まれないことがある。
自分の場合M*XIと面談したかったが、２回参加して２回ともだめだった。

あと面談の組まれ方が非公開なのがちょっとなーモヤるよね。



# 不満点その3:強制的にエントリーさせられる企業がある
これがわりと俺の中でモヤッとする部分やな。
面談の前に会社説明会があって、その後のアンケートに
「この会社を受けたいか？受けたくないか？」
と回答を記入するのだが、受けたくないと答えた会社から普通に
「エントリーさせていただきました」
みたいなメールがめっちゃ来るのでマジで迷惑。個人的にサ◯ーターズとかに登録するメアドはサブのメアドとかにしたほうがいいと感じる。


# まとめると
メリット
- 自分を企業に向けてアピールしまくれる
- 運が良ければ選考免除などがある
- 就活をより良く進めることができる
- 面談をすることにより、大人と話す練習にもなる

デメリット
- 結構強制的に興味のない会社へのエントリーが勝手にされることがある（マジでこれどうなん？）
- 最大８社と面談できるが、実際は最大４社（誇張表現しすぎやな）
- 希望する企業と必ずしも面談ができるわけではない


個人的にメリットのほうがデカいけど、デメリットというか注意点があるなーと感じた。
shadcnを触ってみた

# はじめに
shadcnを触ってみたので、備忘録として書いていきます。

# shadcnとは
shadcn/ui はReact の UI コンポーネントライブラリ Radix UI とTailwind CSS をベースに利用した再利用可能なコンポーネントのコレクションです。

ライブラリではなくツールなので、使いたいUIをインストールして、カスタマイズすることで使用することができます。

## サポートしているフレームワーク
以下のReact をサポートする任意のフレームワークを使用できます。
Next.js、Astro、Remix、Gatsbyなど

# 参考

https://ui.shadcn.com/docs/installation/vite

https://ui.shadcn.com/docs

# Viteでプロジェクトを作成
今回はViteを使用したプロジェクトを作成します。
```npm
npm create vite@latest
```
以下のサイトを参考にしました。

https://ja.vitejs.dev/guide/

# TailwindCSSをインストール

以下の2つのコマンドで、TailwindCSSをインストールして、
tailwind.config.jsファイルを生成します
```npm
npm install -D tailwindcss postcss autoprefixer
```
```
npx tailwindcss init -p
```

パスを解決するために、tsconfig.jsonを以下のように編集します。

```ts
{
  "compilerOptions": {
    "target": "ES2020",
    "useDefineForClassFields": true,
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "module": "ESNext",
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    },

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true
  },
  "include": ["src"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

```
アプリがエラーなしでパスを解決できるように、次のコードを vite.config.ts に追加します。
```
npm i -D @types/node
```

```vite.config.ts
import path from "path";
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "./src"),
    },
  },
});

```
init コマンドを実行してshadcn-uiプロジェクトをセットアップします。

```
npx shadcn-ui@latest init

? Would you like to use TypeScript (recommended)? > yes
? Which style would you like to use? > Default
? Which color would you like to use as base color? > Slate
? Where is your global CSS file? > src/index.css
? Would you like to use CSS variables for colors > yes
? Where is your tailwind.config.js located? > tailwind.config.js
? Configure the import alias for components: > @/components
? Configure the import alias for utils: > @/lib/utils
? Are you using React Server Components? > no
? Write cofiguration to components.json. Procced? > Yesを選択
```
これで、プロジェクトへのコンポーネントの追加を開始できるようになりました。
試しに、ボタンをインストールして使ってみます。

```
npx shadcn-ui@latest add button
```

```App.tsx

import "./App.css";
import { Button } from "@/components/ui/button";

function App() {
  return (
    <>
      <div>
        <Button>Click me</Button>
      </div>
    </>
  );
}

export default App;

```

以下のようにボタンが表示されるはずです！

![スクリーンショット 2024-01-27 0.06.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2613586/2e70d610-2b70-6b01-8b38-1e91568a3191.png)



# 最後に
他にも色々な記事を書いているので、よければ読んでいってください、、、

https://qiita.com/hukuryo/items/97797a91d7e2ee0bcabc

https://qiita.com/hukuryo/items/2c07c52ff3386d5d75b9

https://qiita.com/hukuryo/items/ebeb26823f944f143b11
ArcGIS Proのダウンロード(ArcMap利用者向け)

自分用の備忘録です。
内容は2022年11月現在で、下書きページに眠っていました。2024年1月に確認したところヘルプページのリンク切れが発生していたので更新しています。

この記事は、大学に所属していた際に教育機関向けライセンスで使用していた際に執筆しました。

### ArcGISProを使う理由
最近だとArcMapがサ終に近づき、所属機関からArcGISの割り当てを受けている方もArcMapからArcGISProに移行しつつあるのではないでしょうか。
私はArcMapでは出来ない解析をするために、所属教育機関よりライセンスの割り当てを受けました。研究目的でのみ利用をしています。場合によっては商用に購入するかも…ですが、今のところQGISで事足りています。購入はArcGIS Onlineでおよそ20万くらいから。

### ArcGISProのダウンロード
まずは、ArcGIS Onlineのアカウントを作成します。
ライセンスがあればマイページからダウンロードが選択できるようになります。Office365とかAdobe Creative Cloudと同じ方式ですね。
[サインインのページ](https://www.arcgis.com/home/signin.html)

https://www.arcgis.com/home/signin.html


### ダウンロードするときにおきたエラー
>「Microsoft Windows Desktop Runtime - 6.0.5 (x64) 以上が必要です。」

というメッセージが出てきました。
[こちらのヘルプページ](https://tech-support.esrij.com/arcgis/article/web/knowledge3472.html)に解決方法が掲載されています。

https://tech-support.esrij.com/arcgis/article/web/knowledge3472.html

ダウンロードページはこちら。
2022/11現在では、.NET7.0はだめらしいです。最初7をDLしたらエラー吐いたので6も入れたらダウンロードができました。
[ダウンロードページ](https://dotnet.microsoft.com/en-us/download/dotnet)

https://dotnet.microsoft.com/en-us/download/dotnet

というわけで、Runtimeを導入すれば、ArcGISProがダウンロードできるようになります。

### ArcGIS Onlineでのダウンロード方法
右上のユーザー名を押して、「設定」から「ライセンス」を選ぶと、ArcGIS Proのダウンロードが可能になるかと思います。
VMに置いたアプリに新しくフォルダを作ったら、「アクセスできない」と怒られた

# 経緯

AWSのVMにビルドしたファイルを設置し、IISの設定で本番環境にしているC#のWebAPIアプリがある。
そのアプリに「一時的にファイルを作成し、処理が完了したら削除する」処理を実装した際、一時的にファイルを保存するTempフォルダを新しく作成、設置した。
しかし、本番環境で動かしてみたところ、「Tempフォルダにアクセスできない」という感じのエラーが返ってきた。

# 状況

IISで設定されているフォルダに、ビルドしたソースコードを設置している。
Tempフォルダはビルドされないため、同じ階層に「右クリック→新しいフォルダ」と操作して作った。

# 原因、解決方法

エクスプローラーでフォルダのプロパティを確認したところ、セキュリティタブで確認できるIISの権限に「書き込み」がなかった。
そこで、「書き込み」の権限の許可にチェックを入れたところ、正常に動くようになった。
三菱GOT　タッチパネルプログラム　デバイスとは？

三菱GOTタッチパネル画面作成ソフトウェア「GT Designer3」にて、オブジェクト作成時に設定する「デバイス」について基礎知識を確認していきましょう。

# PLCとタッチパネルのやりとりに必要
タッチパネルはPLCに命令を送ります。なので、PLCに接続された各機器を制御する上でデバイス設定は正確に設定する必要があります。

# 色々なデバイス
GT Designer3の「オブジェクト」タブをクリックすると以下のようなダイアログが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297464/9ffc2faf-8f64-eac4-8851-c11dce0402c8.png)
画像上の「スイッチ」や「ランプ」、「数値表示/入力」、「文字列表示/入力」をタッチパネルに配置する際にデバイスを設定します。

### ビットとワード
デバイスにはビットデバイスとワードデバイスがあります。
#### ビットデバイス
ビットデバイスには、入力リレー(X)、出力リレー(Y)、補助リレー(M)があります。
ビットデバイスの名通り、デバイスの状態は０か１です。
例）ランプがOFFの時は０、ONの時は１
#### ワードデバイス
ワードデバイスにはデータレジスタ(D)、リンクレジスタ(W)があります。
ビットデバイスが0/1であるのに対してワードデバイスは100や10000などの大きな数字を使用します。
デフォルトでは16bitです。
例）モーター回転数の設定値→ [360]rpm

# ビットスイッチの機能
一番使われるビットスイッチの機能には4種類あります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297464/fdcdc3af-bcd8-18cc-0446-0b2ed6d8fe7b.png)

### ビットモーメンタリ
スイッチを押している間だけON状態になります。
### ビット反転
状態を反転させます。OFF状態だったものを押すとON状態に。ON状態だったものはOFF状態にする。
### ビットセット
スイッチを押すとONのままになる。
### ビットリセット
スイッチを押すとOFFのままになる。

#  

以上、タッチパネルのデバイスについて基礎知識を確認しました。
【第1回】初心者のためのDiscordBot制作への道 ～環境構築編～

# はじめに
本記事では、DiscordBotを通してプログラミングを学びたいという友人へのハンドアウトも兼ねて、プログラミング初心者の方向けに順番に基礎を解説しながら、Pythonを使ったDiscordBotの制作を目指して行きたいと思います。
**『プログラミングにチャレンジしたいけど、環境構築とか色々ややこしいし取っ掛かりが難しくて手が出せない』** という方でも理解できるよう、できるだけ分かりやすく、そして詳しく解説していこうと思います。
第1回の本記事では、ひとまず環境構築について解説していきます。

# 環境
今回使用した開発環境です。完全初心者の方は読み飛ばして頂いてOKです。
- Windows10
- python 3.10.11
- Visual Studio Code

# 開発環境の用意
### ※既にPythonを実行可能な開発環境が整っている方は読み飛ばして第2回へ。
プログラミングをするためには、まず最初に開発のための環境を整える必要があります。
どんなものを開発したいかによって、使用するプログラミング言語やその他ソフトウェア等を選ぶ必要があり、その後それらを準備して初めてプログラミングに取り掛かれるわけです。

## pythonのインストール
まずは、今回使用するPythonというプログラミング言語の環境を準備します。
今の状態のパソコンにはPythonのプログラムを実行する環境がないので、それをインストールします。
今回はPythonバージョン3.10.11をインストールします。

:::note warn
ただPythonと言っても、古いものから新しいものまで様々なバージョンがあり、後ほど解説する『ライブラリ』の使用可否等や細かい仕様が変わってきたりもします。
少なくとも、初心者の間に何かを参考にしたり真似したりする場合は、参考元のPythonバージョンに合わせるようにしましょう。
:::

[こちら](https://www.python.org/ftp/python/3.10.11/python-3.10.11-amd64.exe)からインストーラーをダウンロードし起動。

画面下部のAdd python.exe to PATH にチェックを入れ、上部のInstall Nowをクリックしてインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842664/699e0a93-624b-41c8-fa4e-cb9981a8ac9e.png)


# テキストエディタ（VSCode）のインストール
プログラミングをする上で、実際にコードを書くための『テキストエディタ』と呼ばれるソフトウェアは不可欠です。テキストエディタにはWindows標準搭載の『メモ帳』から、プログラミングに便利な機能を搭載したものなど、様々なものがあります。
今回は、Microsoftが提供している無料のテキストエディタであるVisual Studio Code（以下VSCode）を使用します。

以下のサイトにアクセスします。

https://code.visualstudio.com/download

下記画像の矢印で示した部分をクリックしてインストーラーをダウンロードし、完了したら起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842664/1a3320f9-8630-fcd4-0968-b8d7f38a7553.png)

インストール画面は、こだわりがなければ基本的に次へを押していけばOKです。
ただし、デフォルトではデスクトップにアイコンが設置されないため、置きたい場合は以下の画像の画面でチェックを入れましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842664/60058b31-5776-130a-9a98-51b429c4b251.png)

インストールが完了したらVSCodeを起動します。

-----
次に、VSCodeを日本語に対応させます。
VSCodeには拡張機能を追加することができ、様々な便利機能を必要に応じて自分好みに追加・削除することで自由にカスタマイズ出来ます。
まずはVSCodeを日本語化させるための拡張機能を追加してみます。

下記画像で示したアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842664/4d67ca80-c70f-f621-f6da-74252c297eb7.png)

出現した画面の上部の検索バーに『japan』と入力し、ヒットしたものの一番上に表示されている『Japanese Language Pack for Visual Studio Code』の右下のInstallボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842664/c5a95540-2406-8721-de2f-044024255b51.png)

インストールが完了したら、画面右下の『Change Language and Restart』をクリックし、再起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842664/3937e64b-9cea-c2d4-adaf-f28b30296b2b.png)

### 起動後、日本語化されていれば無事完了です。
-----

同様の方法で他の必要な拡張機能も追加していきます。
検索バーに『py』と入力し、出てきた下記画像の4つをインストールします。
念のため、インストールが完了したらVSCodeを一度終了して再起動しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842664/d37ed1f3-bb0d-34c2-4ebc-193f403db04b.png)

# おわりに
今回はPythonプログラミングのための環境構築を解説しました。
環境構築はプログラミング初心者の方がよく詰まりがちな部分かなと思います。
でも実はそんなに難しいことはしていないので、慣れてしまえば環境構築なんて片目瞑ってても出来ます！

ということで次回は早速プログラミングをしていきます。

次回

https://qiita.com/NaruNeko/items/f28f5e16cc3de45dcd61
Nuxt3(SSR)とLaravel9(sanctum)で認証機能をつける方法

メールアドレス＆パスワードによる認証(ソーシャルログイン無し)

## 環境
- Nuxt3(SSRモード)
- Laravel9(sanctum)
- MySQL

## 参考動画

[Laravel & Nuxt 3 Authentication Guide](https://www.youtube.com/watch?v=NY9yoqoN72w&list=WL&index=2&t=133s)
[Build & Deploy: Full Stack Linktree Clone with Camera, Nuxt 3, Vue3, PWA, Tailwind CSS, Laravel](https://www.youtube.com/watch?v=NtsbjB8QD3Y&list=WL&index=1&t=88s)

## 開発環境構築

coming soon...
【Swift】reduce(into:)が便利という話

## 概要
reduce(into:)が便利だったので、備忘録として記録しておきます。

:::note warn
注意
この記事は新卒エンジニアが執筆しています。
そのため内容に間違いや不備がある場合があります。
もし間違いを発見しましたら、どんどん指摘していただけると幸いです。
:::

## reduce関数とは
reduce関数とは、配列やコレクションの要素を結合して単一の値を生成するための高度なメソッドです。
よくInt型の配列の合計値を求める際などに使われます。
``` Swift
func reduce<Result>(
    _ initialResult: Result,
    _ nextPartialResult: (Result, Self.Element) throws -> Result
) rethrows -> Result
```

``` Swift
let array: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let sum = array.reduce(0) { sum, value in sum + value } // 45
```

## reduce(into:)
reduce関数には`into`パラメータが付いた別バージョンがあります。
大きな違いは、Resultとして渡される1つ目の引数が変更可能であることです。
``` Swift
func reduce<Result>(
    into initialResult: Result,
    _ updateAccumulatingResult: (inout Result, Self.Element) throws -> ()
) rethrows -> Result
```
Resultが`inout`として渡されているので、クロージャー内で変更が可能になっています。
そのおかげでResultをreturnする必要がなく、コードを簡潔に書くことができます。

辞書型を扱う上でこれが便利だったので、使用例を紹介します。
### ArrayからDictionaryへの変換
普通のreduceを使った場合と、reduce(into:)を使った場合のコードを比べてみましょう。
この例ではArray型から辞書型への変換を行なっています。

``` Swift:普通のreduce
let array: [(Int, String)] = [(1, "A"), (2, "B"), (3, "C")]

let dictionary: [Int: String] = array.reduce([:]) { result, tuple in
    var copyResult = result
    copyResult[tuple.0] = tuple.1
    return copyResult
}

print(dictionary) // [1: "A", 2: "B", 3: "C"]
```

``` Swift:reduce(into:)
let array: [(Int, String)] = [(1, "A"), (2, "B"), (3, "C")]

let dictionary: [Int: String] = array.reduce(into: [:]) { result, tuple in
    result[tuple.0] = tuple.1
}
print(dictionary) // [1: "A", 2: "B", 3: "C"]
```
result(into:)を使うことで、かなり簡潔に書けていると思います。

### 偶数の数をカウントする
もう1つ具体例を挙げてみます。
いかはInt型の配列から、偶数の数をカウントするコードです。
``` Swift:普通のreduce
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let countOfEvenNumbers = numbers.reduce(0) { result, number in
    if number % 2 == 0 { return result + 1 } 
    else { return result }
}
print(countOfEvenNumbers) // 5

```

``` Swift: reduce(into:)
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let countOfEvenNumbers = numbers.reduce(into: 0) { result, number in
    if number % 2 == 0 { result += 1 }
}
print(countOfEvenNumbers) // 5
```
地味な変化ですが、`reduce(into:)`を使ったほうが簡潔に書くことができます。

## まとめ
普通のreduceを使うときは、`reduce(into:)`を使ってシンプルに書けないかを考えてみてください。
また他の型から辞書、配列に変換するときも`reduce(into:)`を使うと割と簡単に実装できます。
InternetExplorerにWindows11,23H2-24H2で会う方法(非推奨)

Windows11...以前にWindows10以降ではIEがふさがれています
iexplorer.exeがMSEdgeにリダイレクトするだけの骨抜きになっているせいですね()
<br>
んで、本来IEを使いたければ
Rufusで古いisoをゲットするなり、Microsoftと特殊な契約をするなり、<strike>学校や職場などのグループポリシーでバージョンが固定された奴や特殊Windowsをつかったり</strike>なんですが、
もっといい方法を偶然見つけました
<br>
それは、HSPのaxobj命令で呼び出したIE7上で「新しいタブを開く」ことです。
おそらくActiveX経由でIEを召還した場合どうにかなってどうにかなるんでしょう(?)(レジストリ的にIE7が指定されているだけなので、VBSで11を呼び出すとかでもいいと思います)
<h2>動作環境</h2>・HSP3.6<br>・Windows11Pro 23H2, Windows11Home 23H2で検証<br>・中古Dynabookとマウスコンピューター製PC
<br>
追記:Windows11 24H2でも動作しました
<h2>免責</h2>・普通にIEは危険です。自己責任でどうぞ。<br>・私はこのコードに著作権を主張しません。<br>・このコードはActiveXを呼び出すだけです。
たとえWindowsに互換性がなかった場合でも、せいぜいWindowsに怒られるか何も起こらないでしょうが。<br><br>IEの設定を引き継ぐ・IE環境が欲しいなどの場合Edgeをどうぞ。もしくはReactIE

<h2>コード</h2></div><div><div>cls 2</div><div>axobj IE, "Shell.Explorer.2", ginfo(12), ginfo(13)</div><div>ie-&gt;"Navigate" "about:&lt;a href=\"about:blank\" target=\"_blank\"&gt;Click&lt;/a&gt;"</div></div><div><br /></div><div>(HSP3.6でどうぞ。)</div><div>うまくいった場合:白い背景で、「Click」というリンクが表示される。押すとIE11が開く(about:blankだが自由に使える)</div><div>うまくいかなかった場合:グレーの背景(ActiveX不発)</div><div><br /></div><div><h2>解説</h2></div><div><div>cls 2</div><div><span>ウィンドウ全体を灰色にします。ActiveXを呼び出せた場合上書きされるため、灰色が続いたら失敗ってこと</span></div><div><br /></div><div>axobj IE, "Shell.Explorer.2", ginfo(12), ginfo(13)</div><div><span>IEコンポーネントを配置します。ginfoはそのサイズ指定ね</span></div><div><br /></div><div>ie-&gt;"Navigate" "about:&lt;a href=\"about:blank\" target=\"_blank\"&gt;Click&lt;/a&gt;"</div><div><span>強制的に新しいタブで「about:blank」を開かせるコードをナビゲートする。(HSP上のIEは7なのでできる限り短いコード推奨</span>)
FC-SAN IP-SAN について知ったことまとめ

## SANはストレージ専用のネットワーク
SANはストレージ専用のネットワークであり、FC/FCoE/ISCSI/NVMeoFといったプロトコルが使用されている。
FC/FCoE/ISCSIはいづれもSCSIプロトコルをカプセル化しており、ブロックアクセスを行う。
コンピュータからストレージのネットワーク接続について、
従来はSCSIケーブルを利用し、サーバーとストレージをそれぞれ1対1で接続する方式であった。
SANでは、1対nで接続できるためディスク容量を有効活用でき、
ストレージ統合による運用の軽減にもつながっている

### FC
- 大容量データを高速転送できるよう、ストレージに最適化された方式。
- 他のプロトコルに比べ、TCP/IPなどのカプセル化を行わず、余計なオーバーヘッドが少ないため、高速よ。
- 光ファイバーケーブルでサーバとストレージを接続する。
- 8Gbps/16Gbps/32Gbpsのスループット（データ転送速度）が出る規格が一般的に選択される。
- 信頼性/拡張性が高く、レイテンシが小さい。
- 32Gbpsの4つのレーン（データの通り道）を束ねれば、最大128Gbpsのスループットが得られる。実効12.8GB/sで伝送できる。
- データの損失がない通信を実現し、信頼性が高い。
　ただしFCは専用のアダプタとスイッチが必要であり、高価かつ専門的な技術知識が必要。

#### 参考サイト
https://techtarget.itmedia.co.jp/tt/news/2002/10/news03.html

### iSCSI
- イーサネットベースのストレージインタフェース（プロトコル）であり、TCP/IPネットワークで
　SCSIのパケットを転送できるようになっている。(SCSIをTCPでカプセル化)
　簡単に言うとEthernet上でSCSIを使えるようにした規格。
- FC、FCoEに比べTCP/IPのカプセル化が生じるので転送処理でオーバーヘッドが生じる。
- FCと異なり、標準的なイーサネットのネットワークインタフェースカード（NIC）とスイッチを使用する。
- iSCSIは既存のイーサネットのネットワークで動作するので、FCより低コストかつ容易に導入可能
- 最大100Gbpsのスループットが出る。

#### 参考サイト
https://www.fujitsu.com/jp/products/computing/storage/lib-f/tech/interface/iscsi/index.html

### FCoE
大規模システムではLANとSANを構築しなければならず、ネットワーク構成が複雑化する。
例えばサーバにはイーサネットのLANボードとFC-SAN用のHBAが必要。冗長かすると各ボードが２枚ずつ、
合計4枚の搭載が求められ、4本のケーブルが差し込まれます。
そのコストや運用負荷増加、障害ポイントの縮小化に対する解決策としてFCoEが考えられた。

FCoEの統合後は高価なインターフェースとケーブルの数を半減しています。これによる
　コスト削減、電力削減、シンプルな物理配線による管理効率化のメリットがあります。すでにFC-SANが
　ある場合、FCoEでも既存のFCの運用管理の仕組みをそのまま踏襲できるのでそれが最大のメリットです。
　※ 当然ながら、新規にストレージネットワークを構築する場合、小規模ならiSCSIによるIP-SANの方がコスト的に優れています。


- FCをイーサネット上で使えるようにした規格。
　FCoEによってFCフレームをイーサネットフレームのデータ部分に組み込むよ。
　サーバとの通信はTCP/IPでのカプセル化がないので、iSCSIより効率的。
- サーバに専用のインタフェースボード（CNA）を使用し、その1枚でLANとFC-FANを統合できる。(冗長化するなら2枚)
- FCoEスイッチを経由して、既存LANや既存FC-SANを接続する。
　光ケーブル使ったFCとメタルケーブル使ったLAN両方接続できるよ！

#### 参考サイト
https://www.infraexpert.com/study/networking7.html



https://www.infraexpert.com/study/networking6.html


### NVMe-oF
#### 参考サイト
https://www.storagereview.com/ja/review/nvme-nvme-of-background-overview?amp


### ストレージパフォーマンスのボトルネック

パフォーマンスのボトルネックがあるとすればストレージインタフェース以外にある可能性が高い。
ストレージシステムを制御するストレージコントローラーのキュー深度（キューに格納できるコマンド数）、
クラスタ構成、ディスク数、ディスクの種類といった点に問題がある可能性がある。
他にも物理サーバ、SANファブリックのオーバーサブスクリプション比
（スイッチの全ポート合計の通信路容量がファブリックの容量をどれだけ超えているかを示す数値）
に問題がある可能性もある。

#### 参考サイト
https://techtarget.itmedia.co.jp/tt/news/2002/18/news03.html
sort_byメソッドについて

## sort_byメソッドについて

array,hashに対して使えるメソッド
ブロックに渡した、値をソートキーとし昇順に並び替えて返す
:::note info
ここで言う、ソートキーとは、要素に紐づけた値
数字だと、そのままの値がキーとなりなんの意味これ・・・？と思うが
lengthなどで考えてみるとわかりやすい
appleという値が飛んできた時に、こいつは5っていうソートキーを基準に比較するで・・・的な感じ
:::

このメソッドは破壊的なメソッドではないため、元のarray,hashを変更しない
変更をしたい場合は、sort_by!を使用する

```
### arrayの場合
const nums = [3, 2, 1, 4, 5]
nums.sort_by { |num| num }
 →[1, 2, 3, 4, 5]

### hashの場合
const ages = [{age: 1}, {age: 5}, {age: 3}]
ages.sort_by {|hash| hash[:age]}
 →[{age: 1}, {age: 3} {age: 5}]
```
KISSの原則について

# はじめに
毎週1本様々な技術に関する記事を投稿してきましたが、本記事にて丁度100本目の投稿となりますので、これを機に一旦休止しますり。

# KISSの原則とは？
`KISS(Keep It Simple Stupid)は、コードはシンプルにしておくべきである。`という原則のことです。
簡潔性に要点を置いてコーディングするのが、KISSの特徴です。

# KISSの原則を守るために
### ■冗長性の排除
KISSは、__冗長なコードや機能の排除__ を奨励します。シンプルで明快な実装は、バグの発生を減少させ、コードの保守性を向上させます。

### ■今必要な要件を実装する
将来必要になりそうなコードを、今のうちに実装しておきたくなる時がありますが、それは今実装すべきではありません。__必要になった時に必要なコードを実装する__ のが、KISSの原則に沿ったコーディングです。

# 他の原則の紹介
### ■DRY
DRY(Don't Repeat Yourself）は、同じコードや同じ情報を何度も繰り返すのを避けることを奨励します。

### ■WET
WET(Write Every Time/Write Everything Twice)という概念があります。これはDRYに対応するように作られた言葉で、略語としても単語の意味としてもWETと対義するようになっており、プログラミングにおいては、守るべきではないアンチパターンとして使われます。

### ■オープン・クローズドの原則
__「拡張に対しては開かれ、修正に対しては閉じられていなければならない」__ という原則です。
- 拡張に対して開いている＝コードの振る舞いを拡張できる
- 修正に対して閉じている＝コードの振る舞いを拡張しても、その他のコードは影響を受けない


# 終わりに
今回紹介した原則の他にも、SOLIDの原則、YAGNIの原則、PIDの原則等様々な原則があります。より良いコードを書くためにも、先人の経験と知識から生み出されたこれらの原則を有効活用し、コーディングに活かしましょう。
最後までお付き合いくださりありがとうございました。
new new ニュース!!

---
C++のnewのエラー処理
---

**news 速報**
　最近くらいニュースばかりが続き、嫌になりますね。
 日本人が108人くらい同時にノーベル賞とか受賞するとか、太陽みたいな宝石が見つかったとか、LLLED(LONG light LED)が開発されたとか。
 
&emsp;あ、そういう明るいではないか。

　今読んでいるあなたが、どんな時代でどんな環境にいるかは分かりませんが、明るく生きる秘訣を教えます。

 　上を向いて生きることです。物理的に。
別に常にでは無いですが、特に辛い時にそうした方が良いと思います。

　何故なら太陽は上にあるから&hellip;&hellip;(良いこと言った風)。

**目次**
1. [newとは](#1-newとは)
2. [newのエラー処理](#2-newのエラー処理) 
3. [おわりに](#3-おわりに)

# 1. newとは

&emsp;newはC++でメモリを動的に割り当てるために使われている演算子です。
C言語ではmallocで動的に確保しますが、C++ではnewを使います。

　そしてその型のコンストラクタを呼び出してオブジェクトを初期化します。
 
&emsp;つまり、mallocは動的確保だけですが、new はメモリ割り当てとオブジェクト構築の両方を行います。
<br>

<font color="green">**使用例**</font>

```php
int* myInt = new int(100);  // int型のオブジェクトを割り当て、100で初期化
```

# 2. newのエラー処理

　通常C言語のmallocではエラーだとNULLが返ってくるので、if文で見て、エラーをmainに返したり、exitしたりできます。

<font color="green">**mallocのエラー処理の例**</font>
```php
int* myInt = (int*)malloc(sizeof(int));
if (myInt == NULL)
{
    exit(1);
}
```

　しかし、newでは例外（std::bad_alloc）を投げます。
 ですので、例外を投げずNULLを返すモードにするのか、例外をキャッチするのかを選ぶ必要があります。

<font color="green">**例外を投げないnothrowモード**</font>
```php
#include <iostream>
#include <new>

int* myInt = new(std::nothrow) int(100);
if (myInt == NULL)  // nullptrでも良い
{
    std::cerr << "Memory allocation failed." << std::endl;
    std::exit(1);
}
```

 また、通常のエラー処理だと

<font color="green">**try,catchモード**</font>
```php
#include <iostream>
#include <new>

int* myInt;
try {
    myInt = new int(100); // ここでnothrowは使用しない
} catch (const std::bad_alloc& e) {
    std::cerr << "Memory allocation failed: " << e.what() << std::endl;
    std::exit(1);
}
```

と言う風になります。
どちらにするかはお好みで。


# 3. おわりに
　newのエラーはあまり起こりにくいと思いますが、こういったエラー処理を学ぶことで、他のエラー処理にも生きてくると思います。
&emsp;だれかの何かのお役に立てれば&hellip;&hellip;。
Gmail⇒Teams⇒Gmail⇒Teams⇒...異なるコミュニケーションツールをWorkatoが連携させる！

# こんな人に参考にしてほしい
- ### コミュニケーションツールを使い分けしてる
###
- ### Gmailの確認を忘れてしまう
###
- ### Teamsだけで仕事を完結させたい
###

WorkatoはiPaaS製品です。
クラウド上で、コミュニケーションツールも連携させることができます。

異なるチャネルを連携させることで、コミュニケーションが一元化され、作業効率があがります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/9d217109-03c9-2fe9-6a5a-74c2281091f0.png)

記事では **「Gmailの新着メールを、Teamsで確認し、Teamsからメール返信する」** Workatoのレシピ（ワークフロー）を紹介します。

メール受信用とメール送信用の、2つのシンプルなレシピになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/b3431c23-c471-a0c9-4b8b-28c2cd4c8c75.png)

Workatoは、ローコードで開発ができます。
なので、カスタマイズをすることが可能です。

例えば
- 宛先を追加したい(CC、BCCなど)
- 添付ファイルも取得したい。
- SlackやOutlookなど、他のツールと連携させたい

業務プロセスにあわせて、直感的にワークフローを構築することができます。

# Workatoレシピ
### ①.Gmailの新着メールをTeamsで受信

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/b9c6dadb-69f2-cc42-8fcf-91caffcf1c0e.png)

WorkatoがGmailを監視して、新着メールがあればTeamsにも通知します。
通知先はMicrosoftのメールアドレスから設定することができます。
メッセージには、「メールの情報」「返信用の入力ボックス」「返信ボタン」を表示させます。

Gmailの監視は最短で5分毎になります。リアルタイムでは無い点に注意が必要です。

### ②.Teamsでメール返信
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/1f3f71a7-74e7-7302-1e64-93ef055d3607.png)

WorkatoがTeamsを監視して、返信アクションがあればGmailアカウントでメール送信します。
返信アクションとは、「返信ボタン」を押下することです。

この2つのレシピで **「Gmailの新着メールを、Teamsで確認し、Teamsからメール返信する」** ことが可能になります。

今回はGmailとTeamsを例としましたが、Workatoは多数のアプリケーションと連携することができます。

例えば
- OutLookとSlackを繋げたい
- TeamsとLINEを繋げたい
- GmailとSlackとTeamsを繋げたい

プログラミングの基本的な知識があると、さらに簡単に開発することもできます。
弊社では他の記事も紹介しています。あわせて参考にしてみてください。
[→会社概要と記事一覧はこちら](https://qiita.com/organizations/bstylevt/profile)


# おわりに
Workatoがコミュニケーションツールを一元化させるサンプルとして、GmailとTeamsの連携を紹介しました。

レシピやアクションの説明はだいぶ省略しています。ここ最近、Teams × Workatoの記事を書いていたので、参考にしてみてください。

[・Workbot for Microsoft Teams の設定から簡単なアクションまで実行してみた](https://qiita.com/ueno_bvt/items/5d8ee9f5278a5c65eb69)

[・Teams有効活用！予約メッセージを設定する方法！Workatoでは定期実行が可能](https://qiita.com/ueno_bvt/items/4e96d89c438ce780ae4b)

[・TeamsとWorkatoで打刻漏れ対策！勤怠システムと連携もできる！](https://qiita.com/ueno_bvt/items/bc85e4a6fe2aa7284c90)
【徹底解説】SharePointの参照（ルックアップ）列はいいぞ！

# はじめに
SharePointの参照(ルックアップ)列
- 「自分が思っていたのと違った」
- 「なんか意味わかんないし、いいや」

という方はいませんか？

初見でやろうとすると挫折すると思います。
最大の理由は**ExcelのVLookup**と違う！！ ということかなと。

この記事は、その誤解を取り除き、SharePointにおける**参照(LookUp)列**の良さを解説します。

# 参照列とは
SharePoint Lists（ドキュメント ライブラリ）で使える列の一種です。
- 同じSharePointサイト内で
- 別のSharePoint Lists（ドキュメント ライブラリ）の値を
- 参照して、選択した列の値を返す

**便利な[列項目](https://support.microsoft.com/ja-jp/office/%E3%83%AB%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E5%88%97%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%AA%E3%82%B9%E3%83%88-%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B7%E3%83%83%E3%83%97%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-80a3e0a6-8016-41fb-ad09-8bf16d490632)** です。

https://support.microsoft.com/ja-jp/office/%E3%83%AB%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E5%88%97%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%AA%E3%82%B9%E3%83%88-%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B7%E3%83%83%E3%83%97%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-80a3e0a6-8016-41fb-ad09-8bf16d490632

参照列に設定することにより、**LookUpのデータ元にある値のみ入力できる** という入力規則の活用もできますし、複数間のListsを繋げて、リレーショナルデータベースのように使うこともできます。

小難しい話は一旦置いて、図解してみてみましょう。

# 図解
徹底的に資料を読み込む方もいれば、
一切見ずに**勘でできない時点で~~くそ~~**とか思ってしまう方もいるでしょう。

勘は経験によるもの。
圧倒的に経験値の差で言えば、Excelに軍配が上がります。

ここでExcelの`VLookUp関数`に焦点を当てましょう。

 - ExcelでいうVlookup（Xlookup）のイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/63fb9b18-2a77-0bd4-2449-88030576ad3b.png)

VlookUp関数は、（キー, データソース, 列番号, 絶対or相対）で構成されます。
解説は`キー`に焦点を当てましょう。

VlookUp関数は、指定した**外部の列**を参照する考え方になります。

それに対するSharePoint Listsの参照列は異なります。

## SharePointの参照(Lookp)のイメージ
それに対し、`SharePoint Lists`は、参照列を選択した場合、その列に入力する値は、
`キー`そのものになります。
 - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/e27902c3-52e8-1732-498a-c86b629acdc7.png)

なんとなーく癖でみると、どこかしらの別の列を参照するのでは・・・？
と誤解してしまいそうですが、設定した列そのものが、`キー`の入力列になります。

ちなみに、選択する場所はこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/cebed484-f4d3-7066-a0a7-5b34928e6d78.png)

:::note warn
この違いで挫折してしまうケースもあるのではないでしょうか。
:::

設定はコチラを参照

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/96b37f48-88e9-935a-4c98-bfe8d2bae983.png)

### メリット
- LookUpで出力値が自動的に返される
- 参照列は`参照するデータソースにある値しか選択できない`という入力規則になる

といったメリットになります。
SharePointの`選択列`が非常に手間になるときにも活躍します！

# おわりに
今回は短いSharePointの参照列を解説しました！
Power Platformが盛り上がりまくっている最中で、SharePointの重要性も高まります！

なんとなくわかんねーではなく、使いこなして楽しみましょう～～！

おすすめのほん

- [ひと目でわかるMicrosoft 365 SharePoint運用管理編](https://amzn.to/48LAndn)

https://amzn.to/48LAndn
ssh接続先のros2 launchでGDBを使う方法

# Answer
### 手順１. デバッグ向けにビルド

**・コマンドラインで指定する方法**
ビルド時に、`colcon build` に、下記オプションを付ける。
```shell
--cmake-args -DCMAKE_BUILD_TYPE=Debug
```

**・CMakeLists.txtで指定する方法**
CMakeLists.txtに下記の１行を追加する。
```cmake
add_compile_options(-g)
```

### 手順２. 実行ファイル実行コマンドにprefixを付ける
ローンチファイルで、Node()またはLifecycleNode()の引数に
```python
prefix='xterm -e gdb -ex "break main" -ex run --args'
```
を加える。

**以上。**

　
以上でおしまい。
ローンチすると新規ウィンドウでGDBプロンプトが開き、mainの直前でブレークしてくれる。

# 背景
ros2 launchでは、GDBプロンプトが使えなさそう。
私はFoxyで使えませんでした。
[参考リンク](https://qiita.com/Nasupl_r/items/f3462d2036349366b969 "ROS2 DashingのC++のソースコードをgdbでデバッグする方法")

もう少し調べると、[抜け道を発見した記事](https://qiita.com/Nyarn/items/ffe9c591f5d4937f7837 "WSL2 + WSLg＋ROS2 Launch でGDBのバックトレースをしてみる")を見つけました。
その記事ではWSLで成功したことを報告していますが、
私はWSL2だけでなく、ネイティブのLinuxマシンでも成功することを確認しました。


# ros2 run でGDBを使いたい場合
参考：https://zenn.dev/shotaak/articles/e03f4c85497395

手順としては、ビルド時にコンパイルオプションを付けるところまでは同じ（[本記事の上部に記載](https://zenn.dev/shotaak/articles/e03f4c85497395)）。

そして、ros2 runするときに、
```shell
ros2 run --prefix 'xterm -e gdb -ex "break main" -ex run --args' <パッケージ名> <実行ファイル名>
```

つまり、ローンチファイルの `Node()` のオプションで `prefix='...'` と書いたのは、ros2 run の prefixを設定していたということなんですね。


# ssh接続していない場合
リモート環境ではない場合、xtermを使う必要が無い。
単に `xterm -e` が不要となって、prefix は `gdb -ex "break main" -ex run --args` でよい。
mui-datatablesについての忘備録

# 前書き
mui-datatablesに関することをメモしていきます。
必要なことのみメモしますので歯抜けなことや、調べながらかいているので間違っていることなどがあります。

参考サイトです。
https://github.com/gregnb/mui-datatables
https://www.npmjs.com/package/mui-datatables#muidatatable-

---
# オプション (propsのoptionsの値)

## ツールバーの各項目をオプション

<table>
  <thead>
    <tr>
      <th>名前</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> download </td> <td>ダウンロードアイコン</td>
  </tr>
  <tr>
    <td> print </td> <td>印刷アイコン</td>
  </tr>
  <tr>
    <td> viewColumns </td> <td>viewColumnsアイコン</td>
  </tr>
  <tr>
    <td> filter </td> <td>フィルターアイコン</td>
  </tr>
  <tr>
    <td> search </td> <td>検索アイコン</td>
  </tr>
  <tr>
    <td> searchOpen </td> <td>最初は検索バーが表示</td>
  </tr>
  <tr>
    <td> searchAlwaysOpen </td> <td>検索バーを表示し、ツールバーの検索アイコンを非表示</td>
  </tr>
</table>

```React:ツールバーすべて非表示
const options = {
      download : false,
      print: false,
      viewColumns:false,
      filter: false,
      search: false,
}
```
---

## 各列のオプションの有効無効

<table>
  <thead>
    <tr>
      <th>名前</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> filter </td> <td>列をデフォルトフィルターポップアップに表示・非表示</td>
  </tr>
  <tr>
    <td> sort </td> <td>列のソート</td>
  </tr>
</table>

```React:Name列ソート無効・フィルター非表示
const columns = [
      {
        name: 'Name',
        options: {
            filter: false,
            sort: false,
        },
    },
}
```

## フィルターボタンを外部に作成

``` React
/*
 props:url:url
 props:filterList:フィルターの値リスト
 filter済みテーブルデータが返す
 ここはバックエンドで別ファイルに記入
*/
xhrRequest = (url, filterList) => {
    return new Promise(resolve => {
        window.setTimeout(
            () => {
                const data = theData;
                if (filterList.reduce( (accu, cur) => accu + cur.length, 0) === 0) {
                    resolve({ data });
                } else {
                    /*
                      This code simulates filtering that would occur on the back-end
                    */
                    var filteredData = data.filter(row => {
                        var ret = true;
                        for (var ii = 0; ii <= 4; ii++) {
                            if (filterList[ii] && filterList[ii].length) {
                                ret = ret && filterList[ii].filter(ff => {
                                    return row[ii] == ff;
                                }).length > 0;
                            }
                        }
                        return ret;
                    });
                    resolve({ data: filteredData });
                }
            },
            2000
        );
    });
}
/* 
 props:filterList:フィルターの値リスト
 xhrRequestにfilterListを渡すとfilter済みテーブルデータが返る
 filter済みテーブルデータをテーブルにセットする
 
*/
filterexe = (filterList) =>{
    this.xhrRequest(`/myApiServer?filters=${filterList}`, filterList).then(res => {
        console.log(filterList);
        this.setState({ isLoading: false, data: res.data });
    });
}

/* 
フィルター対象の列分配列作成　
対象列のインデックスの配列にフィルターの値を入力
*/
<button onClick={() => this.filterexe([
    ['1列目の値'],
    ['2列目の値'],
    ['3列目の値'],
    ['4列目の値'],
    ['5列目の値'],
])}>

```

https://github.com/gregnb/mui-datatables/blob/master/examples/serverside-filters/index.js

こちらのコードから抜き出し

----
Linux系便利コマンド? CentOS OracleLinux RHEL

# 概要
Linux系の便利系コマンドをざっくり

# コマンド
## バージョン情報確認
```zsh:OS
cat /etc/redhat-release

# CentOS Linux release 8.9.333 (Core)
# Red Hat Enterprise Linux release 0.29 (Ootpa)
```

## /tmp配下ファイルの削除タイミング

```zsh:どのタイミングで削除されるかの設定確認
cat /usr/lib/systemd/system/systemd-tmpfiles-clean.timer | grep -A 2 Timer

# [Timer]
# OnBootSec=15min     # OS起動後15分後
# OnUnitActiveSec=1d  # 前回のファイル実行から1日後
```

## リダイレクト出力 標準/エラー

```zsh:標準出力だけ表示
$ ./sample.sh 2>/dev/null
```
```zsh:エラー出力だけ表示
$ ./sample.sh 1>/dev/null
```


## グローバルIP確認
```zsh:
curl inet-ip.info
```

## 当日日付をファイル名に含めてファイル作成
```zsh:年%Y月%m日%d
touch test-`date +%Y%m%d`.txt
# ls
# test-20240209.txt
```


# 過去記事リンク
気になって調べた内容しか書いてないシリーズ

https://qiita.com/ntkgcj/items/c804fa955821513b265c

https://qiita.com/ntkgcj/items/f0ca3d6b0a0e83b372b9

https://qiita.com/ntkgcj/items/e9c085559c1baeaed46e

https://qiita.com/ntkgcj/items/5fbbc609734b0bb1dc39

https://qiita.com/ntkgcj/items/f7c3ad8a61fce1a7b2d8

# 参考

https://densan-hoshigumi.com/server/tmp-file-disappearance

https://qiita.com/i35_267/items/158cd20ed26f73a3d894

https://qiita.com/kanpou0108/items/734b947f5a95109e7bb9

https://qiita.com/yasu_kousys/items/182840b0cceb03ca54fd

# 感想
過去記事見直してたら新規の内容がほぼなくなった。。