OmniAICreator/Qiita-1.07M huggingface dataset:
転送電話（ボイスワープ）の罠に対する防衛術

# 序論
先日、こんな記事を書きました。

https://qiita.com/daisuke_yanase/items/0198a793bb0e50c64060

筆者がFreePBXを（真面目に）触るのは多分四年ぶりぐらいなのですが、７、８年ぐらい前に遭遇して**自分でも自分用マニュアルに記載するぐらいハマった**のにまたしても同じ罠にかかってしまったので、戒めと知見共有のために備忘録として残しておきたいと思います。
**案外Asterisk界隈では既知の現象かもしれませんが……**

# 転送電話とは
要は電話番号Aに着信したら別の電話番号Bに着信を転送する。という機能のことです。
条件付転送や無条件転送など、設定可能なパターンは色々ありますが、**この記事で遭遇する罠について設定パターンは関係ありません**ので割愛します。

:::note info
以下、特別に断りのない限り、本記事での転送電話とは「**NTT東西およびNTT東西とのコラボによって提供されるひかり電話での転送電話機能「ボイスワープ」を指す**」ものとします。~~au？ SoftBank？ 知らない子ですね……~~
:::

# ことの発端
:::note warn
~~今は亡き~~「OCNモバイルONE」のかけ放題を契約したSIMを入れたスマホから、**FreePBXに収容された電話番号宛に発信すると、「おかけになった電話番号は現在使われておりません。番号をお確かめください」というガイダンスが流れる**。という話を聞かされました。
:::

:::note warn
このスマホについては色々トラブルが起きているのですが、**結論から言うとスマホ自体に問題があるというわけではありません**。
~~※別にNTTが販売してた機種のくせに0ABJ電話番号を正確に区切れないのは根に持っていません~~
:::

# 調査
兎にも角にも先ずは何が起きていたのかを知る必要があります。
該当スマホからFreePBXに収容された電話番号宛に発信してみて**100％現象が再現する**のを確認。
徐にFreePBXの管理画面を開いてCall Event Loggingを確認します。

:::note info
**Call Event Logging（FreePBXの通話履歴）上では発信電話番号、着信電話番号、共に正確な値が取得されていました。**
:::

:::note warn
**正確な値が取得されているにも関わらず、より詳細なログを見ると、着信がfrom-pstnに落ちた後に行き先不明となってHang Upが記録されていました。**
:::

:::note warn
**さらに詳細なログを知るべく、Asterisk Logfilesを開いて該当着信部分にまつわるAsteriskの挙動を調べます。**
:::

:::note alert
**その結果、FreePBXに設定されていない詳細不明な電話番号宛の着信がダイヤルイン番号としてAsteriskまで到達しており、（当然そんな未知の電話番号からの着信ルートなど設定していないので）インバウンドルートが存在しないためFreePBXが「おかけになった電話番号は現在使われておりません。番号をお確かめください」というガイダンスを流していることが判明しました。**
:::

:::note alert
**更にこの予期しない電話番号を調べたところ、下掲の様なOCNモバイルONEの公式情報に行き当たりました。**
:::

https://support.ocn.ne.jp/ocndenwa/faq/detail/pid2300000eq5/

**着信側の端末によって、着信履歴の表示に「272038027」がついてしまう場合があります。
発生する機種においては回避する方法はありません。**

# つまりどういうことだってばよ……

:::note warn
**Asterisk的にはこの末尾に付与された未知の（OCNでんわのものと思われる）電話番号「272038027（厳密には027-203-8027）」をダイヤルインされた番号（FROM_DID）として認識している。**
:::

:::note warn
**当たり前だが普通のPBXは「設定されていない番号宛の着信も無条件で応答する様な設定（にするとアホほど着信攻撃を受けるので）には普通しない（と思う。きっと。メイビー）。**
:::

:::note warn
**そのため着信ルートが存在せず、PBXの対応としては「おかけになった電話番号は現在使われておりません。番号をお確かめください」というガイダンスを流すことになる。**
:::

# そういえば……
ここまで情報が出揃ったところで、漸く何年も前、**ボイスワープで別の電話番号宛の着信をFreePBXに収容している電話番号宛に転送すると、「何か知らん英語のガイダンスが流れるねんけど！」** という問題に行き当たったことを思い出しました（遅過ぎる）。

**あーなるほど、つまりこういうことだな？**

:::note warn
**OCNでんわのかけ放題の契約があるSIMからの発信は、発信すると無条件で一旦「027-203-8027」の番号宛に着信するようにルーティングされている。**
:::

:::note warn
**「027-203-8027」に着信した通話は、NTTのボイスワープ（に似たような何か）によって本来の宛先電話番号に向けて「027-203-8027宛の通話である」という情報を保ったまま再ルーティングされている（※なお、この時点から通話料は027-203-8027側に発生することになるので、（OCNでんわのかけ放題を契約している方から集めた合計の電話料金＞実際にOCNが使った電話料金になるため、生まれた差額により）通話料が定額になる）。**
:::

:::note info
**普通の日本製メーカーの電話機の場合は、その電話回線に割り当てられた電話番号「ではない」「027-203-8027宛の通話である」という情報を持ったままの着信から「027-203-8027宛の通話である」という情報を切り捨てて処理する。**
:::

:::note alert
**しかしそうではないメーカーの場合、切り捨て処理が行われないか、そもそも自分宛の着信ではないと見做して扱う。**
:::

:::note alert
**ちなみにこのボイスワープによる着信はひかり電話ゲートウェイの通話履歴を見ても転送電話のそれと分かる情報は無い。普通にゲートウェイに収容されている番号宛の着信として見えている。**
:::

**そんなのアリかよォ！？**

# 結論

:::note info
**OCNでんわをお使いの電話番号からの発信が着信しない場合の方は「027-203-8027宛の着信」時のインバウンドルートを作ってやれば解決します。**
:::

:::note info
**同様にボイスワープを使って別拠点宛の着信をPBXに転送した場合に上手く着信しない場合の方は、「別拠点で契約している電話番号宛の着信」時のインバウンドルートを作ってやれば解決します。**
:::

~~※そもそもイマドキなPBXならボイスワープじゃなくてVPNなりクラウド化するなりで1台のPBXに収容するだろ常考、というツッコミはないものとします。~~
【独学】統計検定2級勉強法

<h2>はじめに</h2>

統計検定2級の勉強法を書いていこうと思います。統計学の知識もあまりない状態からのスタートでしたが、約3ヶ月の学習で合格することができました。自分なりの勉強法を以下に書いていこうと思います。

<h2>勉強スケジュールと方法</h2>

<h3>1ヶ月目：基礎固め</h3>

・統計WEB「統計学の時間」：https://bellcurve.jp/statistics/course/

統計WEBは、統計学の基礎を分かりやすく解説しており、統計検定2級の学習に最適です。1章ずつ理解しながら進めていきましょう。1周では完全な理解は難しいので2~3周しましょう。

<h3>2ヶ月目：応用問題演習</h3>

・統計検定2級 公式問題集

公式問題集は、過去問と形式が似ているので、試験対策に最適です。合っていた問題も解説はきちんと読みましょう。間違った問題は解けるようになるまで解き続けましょう。過去問は10年分解くと安心して合格できる力がつくと思います。この段階ではあまり時間は気にしないで大丈夫だと思います。

<h3>3ヶ月目：弱点克服と時間配分練習</h3>

・間違えた問題の復習と時間制限付き過去問演習

間違えた問題は、解説をしっかり読み、理解不足な部分を重点的に復習しました。また、本番を意識して過去問を時間通りに解く練習もしましょう。

<h3>勉強のポイント</h3>

・毎日少しずつでも継続すること
・分からないことはすぐに調べる。
・問題演習をなるべくたくさんこなす。

<h3>合格して</h3>

統計検定2級に合格することで、統計学の基礎をしっかりと身に付けることができました。しかし、機械学習の数学的な理解や高度な統計解析を理解するにはまだまだ勉強が必要です。統計検定準1級は統計解析を重点的に扱っており、データサイエンスと関わりの深い範囲の問題が出ますので、統計学を極めたい方は準1級の勉強をおすすめします。

読んでいただきありがとうございました。
HTMLとReactでのonclickの関数の渡し方の違いについて


# ReactとHTMLのonclickにおける違い
ReactとHTMLにおけるonclick属性の記述方法の違いは、イベントハンドラーの処理方法の違いに起因します。

## React
`onclick={test}`
- 関数オブジェクトの内容を渡す
- イベント発生時に渡された関数オブジェクトが実行される
- イメージ的にはコンポーネント内には関数が存在するけれどscriptタグに記載の無い（レンダリングの中にない）関数の処理の内容をonclickのイベントハンドラに格納している。
## HTML

`onclick="test()"`
- 関数名を文字列として渡す
- イベント発生時に文字列が評価され、関数呼び出しが行われる
- イメージ的にはクリックされると`return "test()";`のようになってscriptタグのtest関数が呼び出される感じ。
## Reactにおける関数オブジェクトの扱い
Reactでは、イベントハンドラーとして関数オブジェクトを直接渡すことができます。これは、JavaScriptの関数オブジェクトは、メモリ上のアドレスを持つオブジェクトであるためです。

`onclick={test}`と記述すると、`test`関数のオブジェクトそのものが`onclick`属性に格納されます。そして、イベント発生時に、このオブジェクトが呼び出され、イベントハンドラーとして処理されます。

## HTMLにおける関数名の扱い
一方、HTMLでは、イベントハンドラーとして関数名を文字列として渡す必要があります。これは、HTMLがJavaScriptよりも古い言語であり、関数オブジェクトを直接扱う機能がなかったためです。

`onclick="test()"`と記述すると、`test`という文字列が`onclick`属性に格納されます。そして、イベント発生時に、この文字列が評価され、`test()`という関数呼び出しが行われます。

まとめ
ReactとHTMLにおけるonclick属性の記述方法の違いは、イベントハンドラーの処理方法の違いに起因します。
Reactは関数オブジェクトを直接渡すことができる一方、HTMLは関数名を文字列として渡す必要があります。
scriptタグにtest関数の記載があれば、reactの方でもonclick="test()"で行けそうですが、Reactではコンポーネント内には関数が存在するけれどscriptタグに記載の無い（レンダリングの中にない）関数を実行することが多いので、`onclick={test}`と記述することでコンポーネント内に定義した関数の処理の内容をonclickのイベントハンドラに格納することが出来るという事です。

## 補足
Reactでは、イベントハンドラーの処理をより詳細に制御するために、`e => test(e)`のように、イベントオブジェクトを受け取る関数オブジェクトを渡すこともできます。
HTML5では、addEventListener()イベントリスナー APIを用いて、イベントハンドラーを設定することもできます。この方法では、Reactと同様に、関数オブジェクトを直接渡すことができます。
javascript / typescript - 日本時間で今日の日付の文字列を得る

# 概要

- 第一引数に日付フォーマットの国の種類を指定する
- 第二引数の timeZone には得たいタイムゾーンを指定する


# 日付を得る

```js
new Date().toLocaleString('ja-JP', {
    timeZone: 'Asia/Tokyo',
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
})
```

結果の例:

`'2024/03/22'`

# 時刻まで得る

```js
new Date().toLocaleString('ja-JP', {
    timeZone: 'Asia/Tokyo',
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
  })
```

結果の例:

`'2024/03/22 12:19:31'`

# 参考

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
【ChatGPT有 vs Sakana AI＋DALL-E3】で画像解析やってみた。


　どうも、カーブミラーです。

　今回は、Sakana AIという名のAIを使ってみた結果のご報告です。といっても、とあるモデルの画像解析能力だけです。

:::note info
本記事は、ChatGPT（有料版）
＋DALL-E3で行なっております。
画像はあります。　あしからず。
:::

　今回のこれは
　　ニュースであり、
　　　本題でもあります。

　Sakana AIとは？
　　元Googleの研究者ふたりが
　　　東京を拠点に始めた
　　　　AIスタートアップです。

　詳細は
　　ググっていただければ
　　　と思います。

　すでに
　　各社から
　　　多くの投資を受けている
　　　　会社であり、
　　　　　人材募集には
　　　　　　四日で300人の
　　　　　　　応募があったとか。

　ようするに
　　期待されている、
　　　ということですね。

　私も注目していました。
　　新しもの好きなので😅
***
　さて、
　　そんなSakana AIですが
　　　これまで、ものの提示が
　　　　ありませんでした。
　　　　　あったけど見逃したかも。

　それが昨日（2024/03/21）、
　　X-Twitterにポストが上がり、
[Sakana AIからのポスト](https://x.com/SakanaAILabs/status/1770610943149682803?t=QJUc595wKgQSWWG_U7dY7Q&s=03)
　　　その基盤モデルの
　　　　試作モデルが
　　　　　公表されたのです。

　ちなみに、
　　このポストは日本語でした。
***
　以下の三つのモデルが
　　試験的に構築されました。

　すべて日本語対話モデルです。
　・大規模言語モデル
　　「EvoLLM-JP」
　・対話可能な画像言語モデル
　　「EvoVLM-JP」
　・高速な画像生成モデル
　　「EvoSDXL-JP」

　一般に公開されたのは、
　　二番目の「EvoVLM-JP」です。
　　　Hugging Faceにての公開です。

　今回、試すのは、
　　この「EvoVLM-JP」です。
***
　UIは、単純な構成です。

　画像の入力枠
　画像に関する質問枠
　SUBMITボタン（送信ですね）
　モデルからの返答

　上から下に入力していけば、
　　最後に結果が出てくるわけです。
***
　さて、
　　実食！じゃないやw

　実験に
　　EvoVLM-JPで
　　　画像解析をしてみます。

　ここでは
　　DALL-E3で描画した
　　　画像を使用します。
![1711075705586.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/944d8f12-a481-7ac3-57de-7e0213cf48f5.jpeg)

　画像を入力して
　　質問を入力します。

　質問：
　　“この写真について詳細な説明を箇条書きでしてください。”

***
***EvoVLM-JP***
1. この写真は、日本の漫画やアニメによく見られる和風の衣装を着た女性のイラストです。
2. 女性は長い金髪をしており、その髪は大きく広がっています。
3. 女性は緑色の和風の着物を着ています。
4. 着物には花の模様が描かれています
***
　（昨日と今日やりましたが、
　　　同一文言でした。
　　　　一字一句違わずに）

　ChatGPTでも
　　同じ画像とプロンプトで
　　　やってみました。
***
***ChatGPT***
- 女性のキャラクターが描かれている
- 長い金髪が風になびいている
- 青い瞳をしている
- 春らしい装いで、緑色の衣を着用
- 衣には桜の花の刺繍が施されている
- 髪にも桜の花が飾られている
- 衣は薄い緑色の透け感のある布で構成されている
- 立っている姿勢で、柔らかく女性らしい雰囲気を醸し出している
***
　（こちらもやってみましたが
　　　文言の中身は違いなし）

　うん、ChatGPTの方が
　　細かい点まで、出してくれます。

　細かい、っていうことは
　　それだけガチャ要素が
　　　減るわけです。

　ちなみに
　　両者を描画させると
　　　以下のとおり。

EvoVLM-JP
![1711075722400.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/81056e83-867a-aaa8-b24c-a60caf141d63.jpeg)

ChatGPT
![1711075739992.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/e198a33d-b6de-7605-1c80-fb3f77826f6d.jpeg)


　結果は
　　ChatGPTさんが
　　　解析した方が
　　　　良い結果でしたね。

　ただし、
　　AIの動きは、
　　　日進月歩どころの
　　　　スピードではありません。

　これから
　　どんなAIに化けるかを
　　　注視したいと思います。

　このことが
　　みなさんの
　　　作品制作の糧に
　　　　なれば、幸いです。

　今回は、ここまで。
Qiita投稿手順

Qiita初投稿！
インプットだけではなく、アウトプットの量を増やす為にQiitaを活用して情報を発信していこうと思っています！
練習でこの記事を作成しています。

## 初めに
まず最初にどうやって投稿するの？と疑問に思った方いませんか？そんな方の参考になれば幸いです。

## Qiitaアカウント作成
[Qiita](http://qiita.com)のトップページにアクセスをしてアカウントを作成します。

・GitHub(連携)
・Google(連携)
・X(Twitter)(連携)
が可能です。

## どんな内容を書くの？
Qiita公式ガイドに[「良い記事を書くためのガイドライン」](https://help.qiita.com/ja/articles/qiita-article-guideline)が掲載されています。
記事を書く上での意識する事が載ってました。

## 投稿手順
右上の「投稿する」ボタンをクリックすると下記の様な場面になります。
![スクリーンショット 2024-03-22 11.34.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744656/7a0f6c8d-b11f-cba6-fb94-63a278c63423.png)

・右側のマークダウンを参考にして左側に本文を記述していく。
・本文を記述していくと、右側にレビューが表示されます。
・画像は「本文」右隣にカーソルを合わせると添付できます。
・マークダウン記述が分からなくなったら「？」をクリックしましょう。
・右上で下書きの保存・投稿が出来ます。

## 投稿
![スクリーンショット 2024-03-22 11.42.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744656/b637ea75-9198-db46-fee9-cb6e47aca94a.png)
[下記の2箇所にチェックを入れる]
・利用規約に同意する。
・プライバシーポリシーに同意する。

その後、右上の「記事を投稿する」ボタンをクリック

## 最後に
今回初めて、Qiita投稿をしてみました。どんな内容を書いたら良いのか最初は躊躇していましたが、あまり考えずに気楽に投稿していこうと思います。皆さんの参考になるような記事を投稿できるように頑張っていきます！
10 ギガビット電気ポート 10GBase-T およびギガビット電気ポート SFP-GE-T の分類

まとめ：
10 ギガビット電気ポート 10GBase-T とギガビット電気ポート モジュール SFP-GE-T は、2 つの一般的なネットワーク ソリューションとして、ネットワーク接続とデータ送信において重要な役割を果たします。 純粋な 10 ギガビット電気ポート モジュール 10GBase-T は、10 ギガビット伝送速度をサポートするように特別に設計された電気ポートであり、ギガビット電気ポート SFP-GE-T モジュールの接続には適応できません。 10Gbase-T 電気ポート モジュールと同様、ギガビット電気ポート モジュール SFP-GE-T にも、純粋なギガビット モジュールとアダプティブ電気ポート モジュールの 2 つのタイプがあります。
文章：

デジタル時代の到来とネットワーク アプリケーションの普及に伴い、ユーザーや企業にとってネットワークの速度とパフォーマンスの重要性がますます高まっています。 10 ギガビット電気ポート 10GBase-T とギガビット電気ポート モジュール SFP-GE-T は、2 つの一般的なネットワーク ソリューションとして、ネットワーク接続とデータ送信において重要な役割を果たします。 この記事では、ギガビットおよび 10 ギガビット電気ポート モジュールの分類、および 10 ギガビットとギガビット電気ポート モジュール間の相互運用性について紹介します。
1. 10GBase-T電気インターフェースモジュールの分類
10 ギガビット電気ポート モジュール 10GBase-T は、アダプティブ 10 ギガビットと純粋な 10 ギガビットの 2 つのタイプに分類できます。
適応型 10 ギガビット電気ポート モジュール 10GBase-T は、接続された機器やケーブルの種類に応じて自動的に適応および調整できる柔軟な電気ポート タイプです。 ギガビット電気ポート SFP-GE-T モジュールと 10 ギガビット電気ポート モジュール 10GBase-T の間のネットワーク接続を自動的に検出して適応できます。 これは、同じポート上で、アダプティブ 10GBase-T 電気ポート モジュールが、ケーブルや機器を変更することなく、ギガビットと 10G の両方の速度を同時にサポートできることを意味します。 これにより、ユーザーはより高い柔軟性と利便性を得ることができます。
純粋な 10 ギガビット電気ポート モジュール 10GBase-T は、10 ギガビット伝送速度をサポートするように特別に設計された電気ポートを指し、ギガビット電気ポート SFP-GE-T モジュールの接続には適応できません。 純粋な 10 ギガビット電気インターフェイス モジュール 10GBase-T は、通常、長距離伝送時の安定性と信頼性を確保するために、高品質のケーブルとインターフェイスを使用します。
アダプティブ 10GbE 電気ポート モジュール 10GBase-T と純粋な 10GbE 電気ポート モジュール 10GBase-T の選択は、実際のニーズに基づいて決定する必要があります。 ネットワーク内にギガビットと 10 ギガビットの両方のデバイスがあり、柔軟に切り替えてさまざまな接続ニーズに適応できるようにしたい場合は、適応型 10 ギガビット電気ポート モジュール 10GBase-T が適しています。 また、ネットワークが主に 10G 機器を使用しており、安定性と信頼性に対してより高い要件がある場合は、純粋な 10G 電気ポート モジュール 10GBase-T を選択する方が適切な場合があります。
2. ギガビット電気ポート SFP-GE-T モジュールの分類
10Gbase-T 電気ポート モジュールと同様、ギガビット電気ポート モジュール SFP-GE-T にも、純粋なギガビット モジュールとアダプティブ電気ポート モジュールの 2 つのタイプがあります。
アダプティブ電気ポートの互換性と安定性にはいくつかの制限がある場合があるため、選択する際にはさまざまな要素を慎重に評価し、メーカーに確認する必要があることに注意してください。
3. 10 ギガビット電気ポート モジュール 10GBase-T およびギガビット電気ポート モジュール SFP-GE-T の通信の問題について
10GBase-T モジュールと SFP-GE-T ギガビット電気ポート モジュールは相互に直接通信できないことがよくありますが、これはモジュール自体と使用するネットワーク機器のポート設定に密接に関係しています。 一部のデバイスは、モード設定または構成を通じて 10GBase-T 電気ポート モジュールと SFP-GE-T ギガビット電気ポート モジュール間の相互運用性をサポートする場合があります。 ただし、この相互運用性は制限され、パフォーマンスに影響が出る可能性があります。 したがって、安定した信頼性の高いネットワーク接続を確保するには、同じタイプの電気ポート モジュールを使用することをお勧めします。
つまり、10GBase-T とギガビット電気ポート モジュール SFP-GE-T の間には、速度、伝送距離、消費電力、コストの点で明らかな違いがあります。 ネットワーク接続要件については、実際のニーズに基づいて適切な電気ポート モジュールを選択し、ネットワーク機器の互換性と安定性を確保することをお勧めします。![4-en.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3736721/2afebd70-0278-8717-1f9e-6a96a3f415cf.jpeg)
CSRF対策について


PHPでのCSRF対策についてアウトプットとして記事をまとめる。

## 1.初めに
CSRFとはWebアプリケーションに存在する脆弱性、もしくはその脆弱性を利用した攻撃方法のこと。

## 2.具体例
**ワンタイムトークン**を利用した対策を紹介する。

## 3. ワンタイムトークンとは
簡単に１度きりの**合言葉**を生成し、その合言葉が一致した場合のみログインを認め、それ以外は不正リクエストとして拒否する。

### 3.1 実装手順
1. トークンによるリクエストチェック
2. ユーザ操作によるリクエストの送信時にトークン（合言葉）をランダム生成する
3. リクエストと共に、トークンをセッションに格納かつPOST送信する 
4. 受け取ったトークンとセッションに格納されているトークンを照合する
5. 一致していれば正規リクエストとして正常処理し、
6. 不一致なら不正リクエストとして拒否する

### 3.2　実装
```php:form.php
<?php
    //セッションの利用を開始
    session_start();
    //ワンタイムトークン生成
    $token = openssl_random_pseudo_bytes(16);
    $csrf_token = bin2hex($token);
    // トークンをセッションに保存
    $_SESSION['csrf_token'] = $csrf_token;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ログイン</title>
</head>
<body>
    <form action="login.php" method="post">
    <div>
        <label>
            ユーザーID:
            <input type="text" name="user_id">
        </label>
    </div>

    <div>
        <label>
            パスワード：
            <input type="password" name="pass">
        </label>
    </div>
    
    <input type="hidden" name="csrf_token" value="<?php echo $csrf_token; ?>" />

    <input type="submit" value="ログイン">
    </form>
</body>
</html>

```
```php:login.php

    session_start();

    $token = filter_input(INPUT_POST, 'csrf_token');
    //トークンがない、もしくは一致しない場合、処理を中止
    if (!isset($_SESSION['csrf_token']) || $token !== $_SESSION['csrf_token']) {
      exit('不正なリクエスト');
    }
    unset($_SESSION['csrf_token']);

```
## 解説

解説すると、まず、ログインフォームのあるform.phpでトークンをセッションで保存するため、`session_start()`をします。
次に、ワンタイムトークンを生成します。phpではランダムな暗号を生成する関数が用意されています。

用意されている関数参考までに
`random_bytes()`
`openssl_random_pseudo_bytes()`

::: note info
`公式によると、random_bytes()`を使用することを推奨しています。
ただ、どちらでも使用できます。
:::

今回は`openssl_random_pseudo_bytes()`を使います。
引数には希望するバイト長を入れてください。

そして、ランダムな暗号を１６進数に変換します。
`bin2hex($token);`

その値をセッションに保存します。

作成したワンタイムトークンを送信するために、`<form>`中の`<input>`で送信します。
この時に、inputの形式をhiddenにして送信します。

::: note info
トークンを送信するinputタグはform内であればどこでも大丈夫です。

:::


デベロッパーツールで確認すると、inputタグのvalue属性の値にトークンがあります。

送られたトークンはlogin.phpで処理されます。

ここからはlogin.phpの処理です。
まず、セッションを利用するので`session_start()`を文頭に記述します。

その後送られてきたトークンが**POST**で送られてきたのがをチェックします。

**トークンがセットされているか**、**セッションで保存したトークンと送られてきたトークンの値が合っているか**を確認し、一致しない場合はエラーメッセージとともに、以降の処理を終了します。

一致する場合は`unset($_SESSION['csrf_token'])`でセッションの割り当てを解除します。

::: note info
セッションは使用を終えた時点で破棄するのが良いとされていますが、破棄をしなくてもエラーが起きるわけではない。
:::


そして、その後の処理に移ります。


## 参考

こちらの記事とドキュメントを参考にしました。

https://qiita.com/Takahiro_Nago/items/43422dc46a4a0646c89e

https://qiita.com/s79ns/items/87b9849e23a87ea4b17f


## 最後に
初めて記事を書いたため、間違っている場合や見づらい場合が指摘していただけると幸いです。
これからもアウトプットとして書いていきますので、ご参考になれば幸いです。
10 ギガビット電気ポート モジュール 10GBase-T: 大規模なデータ伝送のニーズを満たすソリューション

まとめ：
10GBase-T電気インターフェースモジュールは、データセンター、クラウドコンピューティング、ビデオ会議、ハイパフォーマンスコンピューティング、人工知能などで使用されており、10G電気インターフェースモジュールの適用により、大規模データ伝送技術の開発と革新がさらに促進されます。 技術の継続的な進歩とアプリケーションへの需要の増大により、10G 電気インターフェース モジュールは将来さらに重要な役割を果たし、あらゆる分野の発展を強力にサポートすると予想されます。
文章：
ビッグデータ時代の到来により、大規模なデータ伝送要件があらゆる分野で共通の課題となっています。 データセンター、クラウドコンピューティング、人工知能などの分野では、高帯域幅、低遅延のデータ伝送に対する特に緊急の需要があります。 この需要を満たすために、高性能ネットワーク通信技術としての 10Gbase-T 電気インターフェイス モジュールが、大規模データ伝送に徐々に推奨されるソリューションになりつつあります。 この記事では、大規模なデータ伝送のニーズを満たす 10Gbase-T 電気インターフェース モジュールの利点と応用の見通しを深く探ります。
1. 大規模データ伝送の課題
大規模なデータ伝送は、伝送速度、帯域幅容量、遅延、安定性、セキュリティなどの一連の課題に直面しています。 従来のギガビット電気インターフェースモジュールでは高速・大容量データ伝送のニーズを満たすことができなくなり、大規模なデータ伝送をサポートするには効率的で信頼性の高いネットワーク通信技術が必要となります。
2. 10Gbase-T電気インターフェースモジュールの利点
新しいネットワーク通信テクノロジーとして、10 ギガビット電気ポート モジュール 10GBase-T には次のような大きな利点があります。
高速: 10G 電気ポート モジュールの伝送速度は、ギガビット モジュールと比較して 10Gbps と高速です。 より大きな帯域幅容量を提供し、大規模なデータ送信の高帯域幅要件を満たすことができます。
低遅延: 10Gbase-T 電気インターフェイス モジュールの高速伝送および処理機能により、ネットワーク遅延が効果的に短縮され、システムのリアルタイム応答能力が向上します。 これは、低遅延が必要なアプリケーション シナリオでは特に重要です。
高信頼性：10Gbase-T電気インターフェースモジュールは高品質の材料と製造プロセスを採用しており、高い信頼性を備えています。 複雑で変化しやすい環境でも安定した動作を保証し、障害の可能性を低減できます。
強力な互換性: 10Gbase-T 電気インターフェイス モジュールは国際標準に準拠しており、優れた互換性と相互運用性を備えています。 さまざまな主流ネットワーク デバイスにシームレスに接続できるため、導入と統合のコストが削減されます。
3. 10G電気ポートモジュールのアプリケーションシナリオ
10 ギガビット電気インターフェイス モジュール 10GBase-T は、データセンター、クラウド コンピューティング、ビデオ会議、ハイ パフォーマンス コンピューティング、人工知能など、大規模なデータ伝送を必要とするさまざまなシナリオに適しています。 これらのシナリオでは、10G 電気インターフェイス モジュールの高帯域幅、低遅延、信頼性により、さまざまなアプリケーションに強力なサポートを提供できます。
データセンター: データセンターは、10GBase-T 10G 電気インターフェイス モジュールのアプリケーションにとって重要なエリアです。 クラウド コンピューティングとビッグ データ テクノロジの急速な発展に伴い、データ センターでは大規模なデータの保存と処理が必要になっています。 10 ギガビット電気インターフェイス モジュール 10GBase-T の高帯域幅および低遅延機能は、データセンター内のサーバー間の高速データ送信のニーズを満たし、全体的なパフォーマンスと効率を向上させることができます。
クラウド コンピューティング: クラウド コンピューティング サービス プロバイダーは、信頼性が高く効率的なデータ ストレージとコンピューティング サービスを多数のユーザーに提供する必要があります。 10 ギガビット電気インターフェース モジュール 10GBase-T は、クラウド コンピューティング プラットフォームにおける大規模データの高速伝送と処理をサポートし、クラウド コンピューティング サービスの応答速度とスループットを向上させます。
ビデオ会議: 高解像度ビデオ会議では、ビデオの品質と滑らかさを確保するために、大量の帯域幅と低遅延が必要です。 10 ギガビット電気インターフェイス モジュール 10GBase-T は、スムーズな高解像度ビデオ会議をサポートするのに十分な帯域幅と低遅延機能を提供します。
ハイパフォーマンス コンピューティング: ハイパフォーマンス コンピューティングには、大規模なデータ転送とコンピューティング能力が必要です。 10 ギガビット電気インターフェイス モジュール 10GBase-T の高帯域幅と低遅延は、高性能コンピューティングのニーズを満たし、コンピューティングの速度と効率を向上させることができます。
人工知能: 人工知能アプリケーションには大量のデータ トレーニングと推論計算が必要で、データ送信と処理速度に対して非常に高い要件が求められます。 10 ギガビット電気インターフェイス モジュール 10GBase-T は、人工知能アプリケーションに高速で信頼性の高いデータ伝送サービスを提供し、人工知能の開発と応用を加速します。
高性能ネットワーク通信テクノロジーとして、10 ギガビット電気ポート モジュール 10GBase-T は、高帯域幅、低遅延、高信頼性という利点を備えており、さまざまな大規模データ伝送シナリオに適しています。 データセンター、クラウドコンピューティング、ビデオ会議、ハイパフォーマンスコンピューティング、人工知能などの分野では、10G電気インターフェースモジュールの適用により、大規模データ伝送技術の開発と革新がさらに促進されます。 技術の継続的な進歩とアプリケーションへの需要の増大により、10G 電気インターフェース モジュールは将来さらに重要な役割を果たし、あらゆる分野の発展に強力なサポートを提供すると予想されます。![3-en.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3736721/0b301646-d347-97d3-3f38-197252d92986.jpeg)
SFP+ 10GBase-T: ネットワークパフォーマンスの向上

まとめ：
10ギガビット電気インターフェースモジュール10GBase-Tは、データセンター、大規模企業ネットワーク、ハイパフォーマンスコンピューティング、クラウドコンピューティングなどの分野で広く使用されており、低消費電力、高性能、コンパクトな設計という特徴を備えています。 10G 電気ポート モジュールは既存のネットワーク機器との互換性が高く、光ケーブル配線やイーサネット スイッチや光電変換器の追加を必要とせずに、既存の銅線ケーブル配線システムで直接使用して 10G 伝送を実現できます。その他の設備。
文章：
デジタル時代の到来により、データ伝送速度はあらゆる分野で不可欠な要件になりました。 データセンターやエンタープライズネットワークでは、ネットワーク機器もますます高帯域幅の要件に直面しています。 この需要を満たす過程で、10 ギガビット電気インターフェイス モジュール 10GBase-T が重要なソリューションになりました。 この記事では、10G 電気ポート モジュールについて説明し、ネットワーク パフォーマンスの向上におけるその利点とアプリケーション シナリオを探ります。
1. 10G電気ポートモジュールの利点
10Gbase-T 電気インターフェース モジュールは最大 10Gbps の伝送速度を備え、低消費電力、高性能、コンパクト設計の特徴を備えており、ほとんどの使用シナリオに対応できます。 第二に、10G電気ポートモジュールはRJ-45インターフェースを採用しており、既存のネットワーク機器との互換性が高く、既存の銅線ケーブル配線システムに直接使用して、光ケーブル配線を必要とせずに10G伝送を実現できます。イーサネットの追加、スイッチや光電変換器などの機器。 より便利に、より経済的に。
2. 他のモジュールと比較した 10G 電気ポート モジュールの利点
1. ギガビット電気ポート モジュール 10GBase-T と比較して、10G 電気ポート モジュールの伝送速度は高くなります。 データセンターや大規模な企業ネットワークなど、データ集約型のアプリケーション シナリオでは、スムーズなネットワーク運用と迅速なデータ交換を確保するために、高い伝送速度が鍵となります。 10 ギガビット電気インターフェイス モジュールは、これらのニーズをより適切に満たし、より効率的なデータ処理機能を提供します。
2. 10G 光モジュール、10 ギガビット電気インターフェイス モジュール 10GBase-T との比較: 10 ギガビット光モジュールと比較して、10 ギガビット電気インターフェイス モジュールにはいくつかの独自の利点もあります。 まず第一に、10G 電気インターフェース モジュールの価格はより手頃であり、導入コストも低くなります。 企業やデータセンターではコストが重要な考慮事項であり、10G 電気インターフェイス モジュールはよりコスト効率の高いソリューションを提供します。 第二に、10G 電気インターフェース モジュールで使用される RJ-45 インターフェースは比較的一般的であり、既存のネットワーク ケーブルと互換性があるため、光ファイバー ケーブルを交換する必要がなく、既存のインフラストラクチャへの依存と改造コストが削減されます。 さらに、電気ポート モジュールは光モジュールよりも導入と保守が容易で、ネットワーク管理者の作業効率が向上します。 さらに、10G電気ポートモジュールの消費電力は光モジュールの消費電力のほぼ半分であるため、非常に優れたネットワークソリューションです。
3. 10Gbase-T電気インターフェースモジュールの応用
10 ギガビット イーサネットの主要コンポーネントの 1 つとして、10 ギガビット電気ポート モジュール 10GBase-T は、最新のネットワークで広く使用されています。 まず、高速データ伝送と処理のニーズを満たすために、データセンターや大規模企業ネットワークで広く使用されています。 これらのシナリオでは、高帯域幅と低遅延が重要な要件であり、10G 電気インターフェイス モジュールは優れたパフォーマンス サポートを提供できます。 次に、10 ギガビット電気インターフェース モジュールは、ハイパフォーマンス コンピューティングやクラウド コンピューティングなどの分野でも使用され、大規模コンピューティングとデータ処理を強力にサポートします。 さらに、産業用モノのインターネットの急速な発展に伴い、10G 電気インターフェイス モジュールも産業用制御システムで広く使用され、リアルタイムのデータ収集と送信を実現しています。
4. 10Gbase-T 電気インターフェイス モジュールがネットワーク アーキテクチャに与える影響
10Gbase-T 電気インターフェイス モジュールの出現は、ネットワーク アーキテクチャに大きな影響を与えました。 まず、ネットワーク拡張の柔軟性と実現可能性が高まります。 高速データ伝送機能により、ネットワーク管理者はネットワーク トポロジをより柔軟に設計および最適化できます。 次に、10G 電気ポート モジュールの導入により、ネットワークの高い同時実行性と高密度な展開も促進されます。 ネットワーク デバイス間の接続がより緊密になり、複数のノード間のデータ送信がより高速かつ安定して行われるため、ネットワーク全体の処理能力とスループットが向上します。 さらに、10G 電気インターフェイス モジュールの適用により、高帯域幅と低遅延へのネットワークの進化も加速し、将来のネットワーク開発のための強固な基盤が築かれます。
要約すると、10Gbase-T 電気インターフェイス モジュールは、重要なネットワーク デバイスとして、高い伝送速度、長い伝送距離、既存の機器との良好な互換性、および低コストという利点があります。 データセンター、エンタープライズネットワーク、ハイパフォーマンスコンピューティングなどの分野で重要な役割を果たしています。 その出現はネットワーク アーキテクチャに大きな影響を与え、ネットワーク パフォーマンスを向上させるための重要なサポートを提供しました。 データ需要が増大し続ける中、10G電気インターフェースモジュールはネットワークの急速な発展を促進する上で引き続き重要な役割を果たし続けると考えられています。![2-en.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3736721/c7716d6e-3d8a-27b5-c872-5c6973df46ca.jpeg)
CSS positionについて

## 　positiontとは
ボックスプロパティの基準位置を指定するプロパティのことで、
positionプロパティを使うことで、要素を重ねたり、固定したりするなど、さまざまなレイアウトを作ることができます。

positionプロパティはCSSで以下のように書きます。
```
position : 値
```


## positionの値

値には色々な種類があり、したいレイアウトによって変えます。

## static
positionのデフォルトで設定されている初期値です。
初期値であるため、使用する機会はあまりありません。
## relative
relativeは、現在の位置を起点に指定した要素を動かすことができます。
topやleftを指定することで好きな位置に要素を配置することができます。
覚え方としては「元いた位置から○○px移動させる。」と覚えましょう。

## absolute
relativeで指定されている要素を基準として、位置を指定します。
absoluteは「絶対位置」と呼ばれ、「最も近い親要素の位置に対して絶対的」に配置します。基準となるのは、親要素の左上の位置です。

## fixed
スクロールした際に移動せず、決まった位置に固定することができるプロパティです。
よくヘッダー部分などで使われることが多く、スクロールしてもヘッダー部分だけ固定されます。

## 最後に
このように、positionプロパティを使うと、要素を様々な場所へ配置することができますので、例えば、要素の上に写真を配置したり、写真の位置を変えたり、デザインの幅が非常に広がります。
OCI - HPC Cluster: FAQ - プリポスト関連

:::note info
本ページは [OCI: HPC Cluster](https://qiita.com/itokazu/items/63d2e3cebdcdda5afce0) のサブページになります。
:::

本ページではHPC Cluster環境におけるプリポストノードの準備に関するFAQを記載します。

# Q: GPUで動作するプリポストアプリをLinuxで実行したいです
以下のURLを参照してセットアップしてください。

https://qiita.com/itokazu/items/f96a97b04582d614d029

# Q: Oracle Linux 8でGUI環境を構成しRDPでアクセスするには？

以下の手順でGUI環境のインストールとRDPの設定を行います。

#### インスタンス作成
インスタンスを任意のShapeとOracle Linux8で適切なSubnet上に作成ます。
作成に合わせて配置したSubnetのSecurity Listにてイングレスのルールで3389ポートへの接続許可を追加します。

#### GUI環境とxRDPをインストール
```
sudo dnf groupinstall -y "Server with GUI"
sudo dnf --enablerepo=ol8_developer_EPEL install -y xrdp
```

GUI環境でOSが起動するように変更する
```
sudo systemctl set-default graphical.target
```

xRDPがOS起動時に自動起動するようにします
```
sudo systemctl enable xrdp
```

xRDPのパラメータを変更して画面転送レスポンスを改善します。
```
sudo vi /etc/xrdp/xrdp.ini

# tcp_send_buffer_bytesパラメータを以下のように変更する
tcp_send_buffer_bytes=8388608
```

上記に合わせてtcpのバッファサイズも変更します。
```
sudo vi /etc/sysctl.d/xrdp.conf

# 以下を追加
net.core.wmem_max = 8388608
net.ipv4.tcp_wmem = 4096 16384 8388608
```

RDPでアクセスに必要な3389ポートをfirewalldで解放します
```
sudo firewall-cmd --permanent --add-port=3389/tcp
sudo firewall-cmd --reload
```

rebootを実施し、起動したらRDPクライアントから接続を行なってください
```
sudo reboot
```

# Q: プリポストノードをヘッドノードのLDAPクライアントとして設定したい
ヘッドノードがLDAPサーバーとなっておりますので、それを参照する手順が以下になります。

プリポストノードで以下を実行してください。

### 必要なファイルをヘッドノードからコピーする
#### sssd.conf
ヘッドノードの`/etc/sssd/sssd.conf`ファイルをプリポストノードにコピーします。
コピー後、パーミッションを600に設定してください。
```
sudo chmod 600 /etc/sssd/sssd.conf
```

#### cluster-ca.crt
ヘッドノードの`/etc/openldap/certs/cluster-ca.crt`をプリポストノードにコピーします。

以下のコマンドをプリポストノードで実行し、設定を有効にします。
```
sudo authconfig --enablemkhomedir --enablesssd --enablesssdauth --update
```

### ヘッドノードの/home領域のマウント

SE Linuxが有効な状態ではNFSホームが許可されていないため、以下の設定で有効化します。
```
sudo setsebool -P use_nfs_home_dirs 1
```

プリポイントノードで以下を実行し、マウントができることを確認します。
```
sudo mount 172.16.x.x:/home /home
```
※IPはヘッドノードのものに置き換えてください

問題なくマウントできたら/etc/fstabに追加してOS起動時に自動マウントされるように設定を追加します。
```
172.16.x.x:/home	/home	nfs	defaults 0 0
```
※IPはヘッドノードのものに置き換えてください
※マウントオプションは環境に応じて適切に変更してください
reactのコンポーネントのコメントのテンプレート

備忘録

訂正
小生はReact初学者であるため、簡単なコードの場合は下記のテンプレートを使用していましたが、ちゃんとしたコードを書きたい場合は下記のコメント欄の@honey321998さんのコメントを参照した方が良いです。
下記の参考になるコメントを残したい為、この記事は投稿したままにします。


```react
import React from "react";

const test = () => {
    // ------------------------------------
    // 変数宣言
    // ------------------------------------
    //
    // ------------------------------------
    // 関数定義
    // ------------------------------------
    //
    // ------------------------------------
    // useEffect
    // ------------------------------------
    //
    // ------------------------------------
    // スタイル
    // ------------------------------------
    // 
    // ------------------------------------
    // 戻り値
    // ------------------------------------
    return <div>test</div>;
};

export default test;
```
SFP+ 10GBase-T 銅線 RJ45、データセンター、データ伝送

情報技術の急速な発展に伴い、データセンターは現代社会の運営を支える重要なインフラとなっています。 データ処理と送信の需要の高まりに応えるため、データセンターのネットワーク機器に対する要求性能はますます高まっています。 中でも、10ギガビット電気インターフェースモジュール10GBase-Tは、高性能ネットワーク伝送装置として、データセンター分野で徐々に普及しつつあります。 この記事では、10 ギガビット電気ポート モジュール 10GBase-T について詳しく紹介します。
一、10G電気ポートモジュールとは何ですか?
10 ギガビット電気インターフェイス モジュールは、10GBase-T モジュールとしても知られ、データ送信に使用される高速ネットワーク インターフェイス モジュールです。 10GBase-T テクノロジーを使用しており、1 秒あたり 10GB のデータ速度を実現します。 このモジュールは通常、サーバー、スイッチ、ルーターなどのネットワーク デバイスを接続して、より高いネットワーク速度と帯域幅を提供するために使用されます。
二、10ギガビット電気ポートモジュール10GBase-Tの技術パラメータ
10G 電気ポート モジュールは、カテゴリ 6A (CAT6A) またはカテゴリ 7 (CAT7) の銅線ケーブル配線システムでのデータ伝送に RJ-45 インターフェイスを使用します。 その主な技術パラメータは次のとおりです。
1. データ速度: 1 秒あたり 10 GB のデータが送信され、従来のギガビット イーサネット インターフェイスよりも高速です。
2. 伝送距離: 10G 電気ポート モジュールは、30 メートルと 80 メートルの 2 つの異なる伝送距離をサポートできます。 2 つの製品の主な違いは、チップが異なることです。 80m 10G 電気インターフェイス モジュールは、産業グレードの温度をサポートできます。
3、 10G 電気ポートモジュールの規格
10G 電気ポート モジュールは、IEEE 802.3an、SFF-8431、および SFF-8432 MSA の仕様と要件に準拠しています。 これは、異なるメーカーが製造した 10G 電気インターフェイス モジュールを異なるネットワーク機器で正常に使用できることを意味します。 10G 電気ポート モジュールを使用する場合、10G 電気ポート モジュールとの互換性の問題が発生する可能性があります。 これは主に、一部のメーカーがネットワーク機器を製造する際に暗号化処理を行う場合があり、互換性に影響を与えるためです。 しかし現時点では、市場で主流のネットワーク機器ブランドの互換性の問題は、互換性のあるメーカーが解決する必要があります。
四、10ギガビット電気ポートモジュールの応用シナリオ
10G 電気インターフェイス モジュールは、データ センター、エンタープライズ ネットワーク、クラウド コンピューティングなどのさまざまなシナリオで広く使用されています。 データセンターでは、10 ギガビット電気インターフェイス モジュールによりデバイス間の高速接続を実現し、データ伝送効率を向上させることができます。 エンタープライズ ネットワークでは、コア スイッチやルーターに高い帯域幅を提供して、大規模なデータ トラフィックをサポートできます。 クラウド コンピューティング環境では、10 ギガビット電気インターフェイス モジュールによってデータ センター間の相互接続が高速化され、ハイ パフォーマンス コンピューティングと大規模なデータ処理のニーズを満たすことができます。

五、10G電気ポートモジュールの評価
10G 電気インターフェース モジュールの評価には、通常、データ伝送速度、安定性、互換性などの複数の側面が含まれます。 評価を行う際には、実際のネットワークテストを通じてモジュールの性能や性能を評価することができます。 さらに、製造元が提供する技術ドキュメントやユーザー フィードバックを参照して、さまざまなシナリオでのモジュールのパフォーマンスと使用エクスペリエンスを理解することもできます。
要約すると、10G 電気インターフェイス モジュールは、幅広いアプリケーション シナリオを備えた高速ネットワーク インターフェイス モジュールです。 10G電気インターフェースモジュールを選択する際には、その互換性と適用範囲に注意を払い、評価を通じてその性能と信頼性を評価する必要があります。 ここで皆様に、10G 電気ポート モジュールを購入する際には、価格だけに注目するのではなく、総合的に比較する必要があることを思い出していただきたいと思います。![1-en.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3736721/1c632449-07f9-cad0-3ef1-aa88013fee01.jpeg)
Fire Damage Public Adjuster

![firedamagepublicadjuster 625x415.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752796/99b96773-a91a-65b6-36c6-385c622a8edc.jpeg)

Fire damage can be devastating, leaving homeowners and businesses struggling to pick up the pieces and rebuild their lives. In these difficult times, having the support of a fire damage public adjuster can make all the difference.

<a href="https://www.firedamagepublicadjuster.com/">Fire damage public adjusters</a> are professionals who specialize in helping policyholders navigate the complex process of filing insurance claims for fire-related losses. They work on behalf of the policyholder, not the insurance company, to ensure that the policyholder receives the maximum compensation they are entitled to under their insurance policy.

One of the main benefits of hiring a fire damage public adjuster is their expertise in dealing with insurance claims. They understand the intricacies of insurance policies and can help policyholders interpret their coverage to determine what is covered and what is not. This can be especially valuable in fire damage claims, where the extent of the damage may not be immediately apparent.

Another advantage of hiring a fire damage public adjuster is that they can handle the entire claims process on behalf of the policyholder. This can save the policyholder time and stress, as the adjuster will handle all communications with the insurance company and ensure that all necessary documentation is submitted in a timely manner.

Furthermore, fire damage public adjusters can help policyholders negotiate with their insurance company to ensure that they receive a fair settlement. Insurance companies may try to minimize payouts, but a public adjuster will fight on behalf of the policyholder to ensure that they receive the compensation they deserve.

In addition to their expertise and advocacy, fire damage public adjusters can also provide policyholders with peace of mind during a difficult time. Knowing that a knowledgeable professional is handling their insurance claim can alleviate some of the stress and anxiety that often accompanies a fire damage loss.

It is important to note that fire damage public adjusters work on a contingency fee basis, meaning that they only get paid if the policyholder receives a settlement. This can provide further assurance to policyholders that the adjuster is motivated to work in their best interests.

In conclusion, hiring a fire damage public adjuster can be a wise decision for policyholders dealing with the aftermath of a fire. Their expertise, advocacy, and support can help policyholders navigate the insurance claims process and ensure that they receive the compensation they deserve.

Contact: (325) 425-3683

Location: 1920 McKinney Ave, Dallas, TX 75201
連想配列(query)、ソートと検索（通常・query）

https://paiza.jp/works/mondai/query_primer/query_primer__map_normal

何も見ずに解いたもの。
もっともクラスを使えばもっとスマートにかけるのかもしれないですが。
一応辞書という意味ではこんな感じになるのかなと。

```py

N,K = map(int,input().split())
A = dict(input().split() for _ in range(N))
for _ in range(K):
    command = input().split()
    if command[0] == 'call':
        print(A[command[1]])
    elif command[0] == 'leave':
        del A[command[1]]
    elif command[0] == 'join':
        A[command[1]] = command[2]
```

https://paiza.jp/works/mondai/query_primer/query_primer__sort_find_single

extendとsort，そしてindexというのがポイントですかね

```py
N,X,P = map(int,input().split())
A = [int(input()) for _ in range(N)]
A.extend([X,P])
A.sort(reverse=False)
print(A.index(P)+1)
#上２行を１行にするなら
print(sorted(A).index(P)+1)
```

https://paiza.jp/works/mondai/query_primer/query_primer__sort_find_multi

たぶん通常ならこれなんですが
queryってことは違うんですよね
現にケース４だと１０秒かかってたので

```py
N,K,P = map(int,input().split())
A = [int(input()) for _ in range(N)]
A.append(P)
for _ in range(K):
    command = input().split()
    if command[0] == 'join':
        A.append(int(command[1]))
    else:
        print(sorted(A).index(P) + 1)
```

他にいい案も見つからないので答えを見ると
「背の低い順に並ぶとき、順番が変わるのはPaizaくんより背が低い人が入った場合」だということで、そのときだけ順番を＋１してやればいいと。
なるほど！

じゃあその視点でやってみます

```py
N,K,P = map(int,input().split())
A = [int(input()) for _ in range(N)]
A.append(P)
#あらかじめ並べて答えを取得しておく
Ans = sorted(A).index(P) + 1

for _ in range(K):
    command = input().split()
    if command[0] == 'join':
        if int(command[1]) < P:
            Ans += 1
            continue
    else:
        print(Ans)
    
```
こんな感じかな。
これでやってみるとケース４は0.25秒でした。
やったね！
でも上のはifが多すぎるので減らせないか考えます

```py
N,K,P = map(int,input().split())
A = [int(input()) for _ in range(N)]
A.append(P)
#あらかじめ並べて答えを取得しておく
Ans = sorted(A).index(P) + 1

for _ in range(K):
    command = input().split()
    if command[0] == 'sorting':
        print(Ans)
        continue
    #普通ならelseにするが、continueでスキップさせられる
    #これでifを深くしなくてすむ
    if int(command[1]) < P:
        Ans += 1
```
ちなみに時間は0.25秒、同じでしたが
シンプルになって読みやすくなりました。

ということで。queryって難しいのかなと思ったのですが、
ちょっと考え方を変えるだけで計算回数も少なくなるよということですね。
下のとあわせて復習しておきたいところですね。

https://qiita.com/Atsulabo/items/354f4ea1026ded7ae2af

今日は以上です。
そのサイトがどこで動いているのかわかるスクリプト

# はじめに

今回紹介するのは、普段行っている作業の一部を自動化・省力化する目的で作成したスクリプトです。

1日1分の削減ができれば1年で約6時間削減されるだけでなく、人為的ミスも減少できるメリットが得られます。また、作業に対して脳のリソースを使わなくて済むので、他へリソースを充てられるというメリットもあります。
ChatGPTを使えば短時間で効率化できる世の中になったので、積極的に自動化・省力化を行いましょう。

# スクリプト

## 概要

実装は簡単で、`dig`, `whois`コマンドを使用するだけです。
1. `dig`コマンドの応答のうち、Aレコードに記載のIPアドレスを取得
1. 取得したIPアドレスで`whois`コマンドを実行する。応答から登録機関を取得し、表示する


## 実行結果

QiitaはAmazon上で動いているようです。

```sh
% ./whois_lookup.sh qiita.com
Organization for 54.168.45.175:
NetName:        AMAZON
OrgName:        Amazon Technologies Inc.
--------
Organization for 18.182.115.198:
NetName:        AT-88-Z
OrgName:        Amazon Technologies Inc.
--------
Organization for 35.75.52.124:
NetName:        AT-88-Z
OrgName:        Amazon Technologies Inc.
--------
```


## 実装の詳細

```sh
#!/bin/bash

# 第一引数（$1）をドメイン名として使用
domain=$1

# 引数が指定されていない場合は、使用方法を表示して終了
if [ -z "$domain" ]; then
    echo "Usage: $0 <domain>"
    exit 1
fi

# digコマンドでドメインのIPアドレスを取得
ips=$(dig $domain | awk '/;; ANSWER SECTION:/{flag=1; next} /;; AUTHORITY SECTION:/{flag=0} flag' | awk '/IN\tA/{print $5}')

# 各IPアドレスに対してwhoisコマンドを実行し、組織情報を抽出
for ip in $ips; do
    echo "Organization for $ip:"
    whois $ip | grep -E 'OrgName:|Registrant Organization:|descr:|NetName:|netname:'
    echo "--------"
done

```

# さいごに

## 便利なコマンド紹介

今回作ったスクリプトの上位互換がありました。
コマンドとして整備されており、starも100近く付いているようです。

https://github.com/harakeishi/whris

https://zenn.dev/harachan/articles/0f6cf2bf521a1d
Windows Server 2022 セットアップ(インストール)

#### 1. CD/USB/ネットワーク  ブートを行う

#### 2. インストール時の言語・キーボードの配列を選択する
* 日本語が選択されていればOK

#### 3. [今すぐインストール]を選択する

#### 4. プロダクトキーの入力をする
* ボリュームライセンス契約で Windows Server 2022 を購入している場合など、購入方法によってはこの画面は表示されない。

#### 5. セットアップする Windows Server 2022 のエディションを選択する
* プロダクトキーを入力した場合
⇒　GUIを使用するか否かの選択
* プロダクトキーを入力しなかった場合
⇒　Standard or Datacenter + GUIを使用するか否かの選択 

#### 6. ライセンス契約への同意
* 基本的には同意でOK
* 構築のエビデンスを取得する際はどこまで取得するか要確認

#### 7. 新規インストールかアップグレードかを選択する
* 新規インストール　⇒　カスタム：～～

#### 8. インストールする領域の選択
* 未使用のハードディスクの場合は選択肢は１つだけのはず
* 既にパーティションが存在する場合は、パーティションをすべて[削除]してから選択する

#### 9.インストールが開始される

#### 10. プロダクトキーの入力をする

#### 11. ライセンス契約への承諾

#### 12. Administratorのパスワードを設定する
* ここまでできたら完了
rubyの個人的推しメソッド take_while を使ってみよう

rubyの組み込みメソッド一覧を見ていると
「こんなメソッドがあったんだ！」という
マイナー（個人の感想です）なメソッドを見つけることがありますよね。
痒いところに手が届くような、豊富なメソッドがrubyにはありますが
そんなメソッドの中、個人的推しメソッドである`take_while`を紹介します。

## take_whileの機能
`take_while`は、Enumerableモジュールのメソッドです。

**Enumerableオブジェクトの要素を順に評価し、
falseになった最初の要素の、手前の要素までを配列で返却します**

## こんな時につかおう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391935/7710e1fc-be69-3505-eaba-671124132451.png)

例えば、シャッフルしたデッキのトップからカードを順に引いていき、JOKERが出るまで手札に加えるような処理を想定します。

```ruby
deck = ['♠️2', '♦️5', '♠️3', '❤️7', 'JOKER', '♦️8', '❤️K', '♣️A']

hand_cards = deck.take_while { |card| card != 'JOKER' }
#=> ["♠️2", "♦️5", "♠️3", "❤️7"]
```
このように、`take_while`を使用することで簡単に実装できました。

## 同様の結果を得る処理
以下のようなコードが使われている箇所があれば、`take_while`に代替できるかもしれません。
```ruby
deck = ['♠️2', '♦️5', '♠️3', '❤️7', 'JOKER', '♦️8', '❤️K', '♣️A']

# eachを使用
hand_cards = []
deck.each do |card|
  break hand_cards if card == 'JOKER'
  hand_cards << card
end
#=> ["♠️2", "♦️5", "♠️3", "❤️7"]


# each_with_objectを使用
hand_cards = deck.each_with_object([]) do |card, arr|
  break arr if card == 'JOKER'
  arr << card
end
#=> ["♠️2", "♦️5", "♠️3", "❤️7"]
```

## 逆の効果を持つdrop_whileもあるぞ！
`take_while`とは逆に
**Enumerableオブジェクトの要素を順に評価し、
falseになった最初の要素"以降"の要素を配列で返却する**
`deop_while`というメソッドも用意されています。

```ruby
deck = ['♠️2', '♦️5', '♠️3', '❤️7', 'JOKER', '♦️8', '❤️K', '♣️A']

# JOKERを引くまでのカードは捨て、JOKER以降のカードを取得する
deck.drop_while { |card| card != 'JOKER' }
#=> ["JOKER", "♦️8", "❤️K", "♣️A"]
```
こちらも、うまく使ってあげればシンプルな実装ができるシーンがありそうですね :sparkles:

## ところで、なんでこのメソッドが推しなの？
**深い理由はありません！！！**

強いて言うなら、eachメソッドで結構簡単に代替できるのに
わざわざ用意されているというところに、rubyの気が利く感じというか…
そんなマインドを感じるからかもしれません。

あなたの推しメソッドはなんですか？
是非Qiitaに記事を作成して教えてください😆

## 参考
Rubyリファレンスマニュアル

https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/take_while.html

https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/drop_while.html
flex row-gapでパーセント値が効かない時の対処法

# はじめに
flexをレスポンシブに実装する時、row-gapにパーセント値が効かなかったため、その時はvwを使用すればよいと知ったので、その内容について共有します。


# おさらい
今回に出てくるgapと長さの単位についてざっくりおさらいします。
## gap
gapは **flexやgrid等のすき間の大きさを決める** cssのプロパティで、わざわざmarginやnth-childを使って余白調整しなくても良くなります。

詳しくは[こちら](https://developer.mozilla.org/ja/docs/Web/CSS/gap)
## 長さの単位
cssで使用する長さの単位は **絶対長の単位** と **相対長の単位** に分類されています。
* 絶対長：px（ピクセル）、pt（ポイント）、cm（センチメートル）
* 相対長：%（パーセント）、vw、em

絶対長は他の長さとの関係で決まらず一定の値で、相対長は親要素のフォントサイズや画面幅といった何かとの比較でサイズが決まり、基準となる要素の大きさを変更することで相対的に変化します。

詳しくは[こちら](https://developer.mozilla.org/ja/docs/Learn/CSS/Building_blocks/Values_and_units)

# %を使った余白指定
flexのgapを%指定で実装してみます。
使用したhtml,cssは以下の通りです。


```html:html
<div id="flexbox">
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
      </div>
```
```css:css
 #flexbox {
  display: flex;
  flex-wrap: wrap;
  width: 300px;
  gap:10% 10%;  /*row-gap,column-gapを%で指定*/
 
}

#flexbox > div {
  border: 1px solid green;
  background-color: lime;
  box-sizing: border-box;
  flex: 1 1 auto;
  width: 100px;
  height: 50px;
}
```

**結果**
![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3751751/98fa9996-1d6b-6999-3bc0-47cd4b3c38de.png)

row-gapは正常に効きましたが、column-gapは効きませんでした。




# vwを使った余白指定
今度はvwを使ってgapの指定をしてみます。
```css:css
 #flexbox {
  display: flex;
  flex-wrap: wrap;
  width: 300px;
  gap:10vw 10vw;  /*row-gap,column-gapをvwで指定*/
 
}

#flexbox > div {
  border: 1px solid green;
  background-color: lime;
  box-sizing: border-box;
  flex: 1 1 auto;
  width: 100px;
  height: 50px;
}
```

**結果**
![スクリーンショット 2024-03-21 23.20.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3751751/1683bc69-2932-763f-97fc-6bf180e04deb.png)


row-gap、column-gap共に効いていることが確認できました。

:::note warn
注意点
vwの性質上、画面幅がコンテンツ幅より大きくなるとgapが大きくなりすぎるため、ある程度のブレイクポイントで絶対長を使ってgapを指定する必要があります。
:::

# まとめ
flexをレスポンシブデザインにするため、gapを相対長のvwwを使って実装してみました。
ただ、根本の％（パーセント）指定が効かない原因については調べてもわからなかったため、分かり次第追記しようと思います。

# 参考
mdn web docs -gap(grid-gap)
https://developer.mozilla.org/ja/docs/Web/CSS/gap

mdn web docs -CSS の値と単位
https://developer.mozilla.org/ja/docs/Learn/CSS/Building_blocks/Values_and_units
【ウェブデザイン技能検定2級】1週間で合格できた方法

先月、令和5年度第4回ウェブデザイン技能検定2級を受験しました。なんとか1週間勉強して一発で合格できたので勉強法をご紹介したいと思います；）

## 目次
<ol> 
<li>そもそもウェブデザイン技能検定とは？</li>
<li>【学科編】ひたすらに過去問（5日間）</li>
<li>【実技編】YouTubeで対策（2日間）</li>
</ol>

## 1. そもそもウェブデザイン技能検定とは？
ウェブデザイン技能検定は、国家検定制度である技能検定制度の一つとして、厚生労働省より指定試験機関の指定を受け、特定非営利活動法人インターネットスキル認定普及協会が実施しているものです。

試験は実技および学科試験で実施され、関連国際標準規格等に基づきウェブデザインに関する知識・技能、実務能力等が問われます。

<cite>参考：<a href=https://www.webdesign.gr.jp>ウェブデザイン技能検定公式ホームページ</a></cite>

合格すると「○級ウェブデザイン技能士」という<b>国家資格</b>を得ることができるので、Webエンジニアは自分の能力を証明するために持っておいて損はないはずです◎

1級〜3級とあり、3級はどなたでも受験できるのですが、<b>1・2級は「下の級に合格している」だったり「実務経験」など受験資格が必要</b>です。

詳しくは、<a href=https://www.webdesign.gr.jp/summery/conditions/>ウェブデザイン技能検定公式ホームページ</a>をご覧ください：）


## 2. 【学科編】ひたすらに過去問（5日間）
それでは実際に私の勉強法についてご紹介していきます！

まずは学科なのですが、私はひたすらに<b>「過去問を解く→間違えたところを中心に不明な点をクリアにしていく」</b>という作業を過去3年全12回分何度も何度も満足がいくまで続けました。

少し多いように感じますが、やっていくときっと<b>「あ、この問題前にやった！解ける、、、！」という進〇ゼミモード</b>を味わうことができます。つまりは結構重複している問題が多く、サクッと解けるようになるんです！

私が受けた回でも、新しい問題ももちろんありましたが、進〇ゼミモードを無事発動することができました！

なので過去問は解けば解くほどより良いかと思います◎

ちなみに、<a href=https://www.webdesign.gr.jp/measures/publication/>ウェブデザイン技能検定公式ホームページ</a>で過去3回分の過去問が公開されているのでチェックしてみてください◎


## 3. 【実技編】YouTubeで対策（2日間）
### 対策方法
実技に関しては、私はYouTubeで対策しました。

「ウェブデザイン技能検定2級　実技」と検索するといくつか解説動画がヒットします。私は解説動画を一度見て、自分でやってみるという流れで勉強を進めました（解説動画を出してらっしゃる方、本当にありがとうございます、、、！）。

過去問を見る限り基本的に同じような問題が毎回出題されています（細かい数値や設定が変動するだけです）。<b>「1回分は動画を見て実装方法を学んでみる→他の過去問を解いてみる（2、3回分ほど）」</b>で無事合格することができました◎

あとは、受験前に本番はどのソフトウェアが使えるのか分からず不安だったのですが、実際には<b>「Adobe Dreamweaver」や「VSCode」「サクラエディタ」「Terapad」「Sublime Text」と多くの環境が用意</b>されておりました。この中で使い慣れているエディタで対策して問題ないと思います◎

### Tips
個人的に覚えていてよかったと感じたのが<b>「option[value="$"]{$}*個数」</b>です。
実技は最後の一問が a もしくは b の選択式で、aを選択した場合にこれが大いに役に立ちます。
これが何を表すかというと、form内で使うoptionタグを指定した個数分連番で入れてくれるものです。

▼option[value="$"]{$}*<b>3</b>の場合
```ruby:HTML
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
```

これを使うことで、時間の「分」など選択肢を量産するときにすごく楽ができました。
ぜひ使ってみてください；）


ということで、以上が私がウェブデザイン技能検定2級に１週間で合格することができた方法でした！
少しでも参考になれば幸いです；）
pythonのfor文（match文）python3.10～

phpなどでは、子の変数にはこの数字しかない！答えが一つしかないときはif文よりswich文。

swich文がpythonでは実装されていなかったが、python3.10よりmatch文として実装。



```py
face = ['目','口','鼻','喉','耳','手']
for f in face:
    match f:
        case'目':
            print('eyes')
        case'口':
            print('mouth')
        case'鼻':
            print('nose')
        case'喉':
            print('throat')
        case'耳':
            print('ear')
        case n:
            print(n + 'は存在しない')
    #出力結果
    eyes
    mouth
    nose
    throat
    ear
    手は存在しない
```
習慣化することの大事さと大変さ

### はじめに
習慣化は成功への道のりにおいて重要なことだと考えます。特にエンジニアとしてのキャリアを築いていく上で、継続的な成長や学習は不可欠です。今回は、習慣化の重要性と習慣化の難しさについて書いてみます。

### 習慣化の大事さ
習慣化は、目標達成やスキルの向上において不可欠です。例えば、毎日のコーディングや読書、30分でも行うといった習慣が、エンジニアとしてのスキルを向上させると考えます。また、モチベーションを維持するための習慣も重要です。定期的な運動やリラックスする時間、趣味の時間を設けることで、オンとオフが切り替えられ集中力などが向上し、生産性が高まります。

個人的にモチベーションを高いまま保ち続けるのは苦手なので、オンとオフをしっかり意識して過ごすようにしています

### 習慣化の大変さ
そんな習慣化ですが身に付けるのは簡単ではありません。新しい習慣を身につけるためには、意志や継続力が必要です。特に忙しい日々の中で、新しい習慣を継続することは容易ではありません。また、習慣を身につける過程での挫折や失敗もあると思います。しかし、そんな挫折も自身の成長のチャンスであり、習慣化するために行ったことが学びとなります。

私の知り合いに、筋トレが趣味の方がいます。その方から聞いた話で、筋トレも挫折する人は結構いて、理由としてすぐに変化が出ず成長が分かりづらいことも原因の一つと話してくれました。その方も挫折しかけたのですが、ふとした瞬間に筋トレの成果が目に見えて分かりだしたときは諦めず続けてよかったという達成感を感じたそうです。

### さいごに
習慣化はレベルの高いエンジニアを目指す上で重要な要素です。継続的に成長や学習をし、モチベーションの維持にも役立ちます。しかし、その実践は簡単ではなく、自分自身の意志や継続力が必要です。挫折や失敗もあるかもしれません、そこはプラスに考え成長の機会であり、次の習慣化の挑戦で失敗しないための学びとなります。習慣化を通じて、レベルの高いエンジニアを一緒に目指しましょう！！
Pgpool-IIはPostgreSQLに対応したVerをインストールする必要がある

# Pgpool-IIの運用にあたり注意すべき点
Pgpool-IIはPostgreSQLに対応したVerをインストールする必要があります。これは[公式マニュアル](https://www.pgpool.net/docs/latest/ja/html/install-rpm.html#INSTALLING-RPM)に書いてあります。

このため、PostgreSQLをバージョンアップする際には、Pgpoolも対応するものに更新する必要があります。

# 注意すべき点に気付いた経緯

私はPgpoolを更新する必要性に気付いておらず、以下のような組み合わせでサービスを運用していました。
- PostgreSQLは15
- Pgpoolはpgpool-II-pg11-4.1.17-1pgdg.rhel8.x86_64.rpm、つまりPostgreSQL 11対応版

この不適切な組み合わせでサービスを運用していたことに気付いたのは、2024年3月22日現在、Pgpoolの最新バージョンが4.1.19であるという事実からです。
4.1.18がリリースされた際に`dnf update`を実行したものの、Pgpoolのバージョンアップが候補に上がらず、「まだRPMがリリースされていないのかな？」と考えていました。
4.1.19がリリースされた際に再び`dnf update`を実行しましたが、Pgpoolのバージョンアップが再び候補に上がらなかったため、何か問題があると感じました。

調査の結果、以下のことが明らかになりました。

- PostgreSQL 11はすでにサポート終了(EOL)を迎えている
- そのため、PgpoolのPostgreSQL 11対応バージョンは4.1.17で更新が終了している

PostgreSQL 15に対応するPgpoolをインストールすることで問題は解決しました。

Pgpool-IIを使用する際は、PostgreSQLに対応したバージョンをインストールする必要があるため、次回のPostgreSQLのバージョンアップ時にはこの点を忘れないようにします。
最強のlsを作りたいんですよ〜〜！！

# はじめに

`ls`コマンド、使ってますか？

![スクリーンショット 2024-03-21 14.38.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/f8f61240-25e8-a6d5-dec8-3c28ae814eef.png)

こんな感じで、ディレクトリの中身を見ることができるコマンドです。
便利なんですが、ちょっと見づらい。書き込み権限とかも見たい。

ということで、オプションを駆使して最強の`ls`コマンドを作っていきたいと思います。
# 汎用性のかまたり：`ls -hlG`

`-l`オプションは有名ですね。
![スクリーンショット 2024-03-21 14.50.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/157609a8-5406-682f-2f7a-f87b64250693.png)

こんな感じで、読み書き権限（`-rw-r--r--`）やら最終更新日時（3 19 09:17）やらが表示されます。

ここを詳しく知りたい方は以下の記事をどうぞ。
https://qiita.com/keitean/items/f109dcad89b2e7ad66e5

これをさらに見やすくしていきます。
## `-h`オプション

`-l`オプションのサイズ表示は「バイト」のみです。「キロバイト」「メガバイト」などで表示したいケースもあります。それを叶えてくれます。
![スクリーンショット 2024-03-21 15.00.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/4a4a67e7-d540-0164-ff78-89350352dbaf.png)

真ん中の表示が`265B`や`1.4K`などに変わったのがわかりますでしょうか？
見やすくなりましたね！

## `-G`オプション

さらに`-G`オプションを追加して、`-hlG`で実行してみましょう！
![スクリーンショット 2024-03-21 16.46.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/f6da890a-242f-f3ba-5854-6b16332ed966.png)

ディレクトリは色付きで表示されてます！
さらに見やすくなりましたね！

# 隠しファイルの表示`-A`

隠しファイルを探しているときは`-a`と`-A`の2つのオプションがあります。
おすすめは`-A`です！理由は、カレントディレクトリ`.`と上位ディレクトリ`..`が表示されないから。
隠しファイルを表示するとなると、ただでさえ表示が多いので・・・

逆に、カレントディレクトリの表示が見たければ`-a`・・・
ではなく、`-d`オプションがあります。
`-a`でも表示はされますが、`-d`はカレントディレクトリのみ表示してくれるので見やすいです。

# サイズ順に表示 `-S` / 更新日時順に表示 `-t`

使うことがあるかもしれないので、備忘録として。

# おわりに

`-F`や`-R`も候補にはあったのですが、今回は見送り。
汎用性の高い`ls -hlG`に落ち着きました。
ぜひ`ls -hlG`を使ってみてください！

より良いアイデアがある方はコメントお願いします。

次は何を書こうかしら・・・

# 参考
[エンジニアなら知っておきたいmacOS環境のキホン コマンド・Docker・サーバなどをイチから解説 | 大津 真 |本 | 通販 | Amazon](https://www.amazon.co.jp/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AA%E3%82%89%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84macOS%E7%92%B0%E5%A2%83%E3%81%AE%E3%82%AD%E3%83%9B%E3%83%B3-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%BBDocker%E3%83%BB%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AA%E3%81%A9%E3%82%92%E3%82%A4%E3%83%81%E3%81%8B%E3%82%89%E8%A7%A3%E8%AA%AC-%E5%A4%A7%E6%B4%A5-%E7%9C%9F/dp/4295015032)

[【Linux】lsコマンド #Linux - Qiita](https://qiita.com/chihiro/items/6e1404c41e1236a9efe1)

[lsコマンドの使い方と覚えたい15のオプション【Linuxコマンド集】](https://eng-entrance.com/linux_command_ls#-ii-node)

[lsコマンドのオプションなんだっけな](https://zenn.dev/oreo2990/articles/148c2b548d68cc)
AWS勉強備忘録18 - S3のバージョニング、ライフサイクルポリシー

# AWS S3で過去のバージョンを復元する2つの方法

AWS S3のバージョニング機能を使うと、ファイルの過去のバージョンを保持し、必要に応じてそれらを復元することができます。誤ってファイルを上書きしたり、削除したりした場合でも安心です。ここでは、AWS S3で過去のバージョンを復元する2つの主な方法について説明します。

## 方法1: 過去のバージョンを新たなバージョンとしてコピーする

この方法では、復元したい過去のバージョンを現在のバージョンとして設定することにより、ファイルを復元します。

手順は以下の通りです（現行のバージョンをバージョンnとします）:

1. **バージョンIDの確認**: 復元したいバージョンのファイルを特定し、そのバージョンIDを確認します。
2. **コピー操作**: 特定した過去のバージョンを同じバケット内の同じオブジェクト名でコピーします。この操作により、選択したバージョンが最新のバージョンとして設定されます。

このプロセスにより、バージョンn-k（kはnより小さい自然数）の内容がバージョンn+1として新たに保存され、これが最新バージョンとみなされます。もとのバージョンnは保持されるため、必要に応じて後で参照することができます。

## 方法2: 最新バージョンを削除する

もう一つの方法は、最新バージョンを削除し、その結果として自動的に一つ前のバージョンが最新バージョンとして扱われるようにすることです。

手順は以下の通りです:

1. **最新バージョンの削除**: 最新バージョンのファイルを削除します。この操作により、ファイル自体は削除されますが、過去のバージョンは保持されます。
2. **自動復元**: 最新バージョンを削除すると、S3は自動的に一つ前のバージョンを最新バージョンとして扱います。

この方法の利点は、特定の操作を行う必要がないことです。ただし、意図しないバージョンが最新バージョンとして設定されるリスクがあります。したがって、この方法を使う場合は、どのバージョンが復元されるかを正確に理解しておくことが重要です。
また、最新バージョンのオブジェクトを削除して一つ前のバージョンを「最新」として復元する場合、その操作を元に戻す直接的な方法はありませんので注意が必要です。

# AWS S3ライフサイクルポリシーの理解と効果的なデータ管理戦略

AWS S3のライフサイクルポリシーは、ストレージ管理の自動化とコスト削減に非常に有効なツールです。この記事では、S3ライフサイクルポリシーの基本的なアクションとその設定方法について詳しく説明します。

## ライフサイクルポリシーとは

AWS S3ライフサイクルポリシーを使用すると、オブジェクトのストレージクラスの変更や、不要になったデータの自動削除など、S3バケット内のデータ管理をルールベースで自動化できます。これにより、手動での管理作業を削減し、ストレージコストの最適化を図ることが可能になります。

## ライフサイクルポリシーの主要アクション

### 1. Transition（遷移）

- **最新バージョンの遷移**: 特定の期間が経過した後、オブジェクトをよりコスト効率の良いストレージクラスへ自動的に移動します。例えば、アクセス頻度の低下したデータをStandardからStandard-IAやGlacierへ移動させることができます。

### 2. Expiration（有効期限切れ）

- **オブジェクトの自動削除**: 指定した期間が経過したオブジェクトを自動的に削除します。このアクションは、古くなったデータや一時的なデータのクリーンアップに役立ちます。

### 3. NoncurrentVersionTransition（非現行バージョンの遷移）

- **非現行バージョンの遷移**: バージョニングが有効なバケット内の、最新ではないバージョンのオブジェクトを特定の期間経過後に別のストレージクラスに移動します。これは一括で適用され、個別に選択する必要はありません。

### 4. NoncurrentVersionExpiration（非現行バージョンの有効期限切れ）

- **非現行バージョンの自動削除**: 特定の期間が経過した非現行バージョンのオブジェクトを自動的に削除します。これにより、不要になった過去のバージョンを効率的に管理できます。

### 5. AbortIncompleteMultipartUpload（不完全なマルチパートアップロードの中断）

- **不完全なアップロードのクリーンアップ**: 指定した期間が経過した後に、完了していないマルチパートアップロードを自動的に中断し、関連するパーツを削除します。

### 6. ExpiredObjectDeleteMarker（期限切れオブジェクト削除マーカーの削除）

- **削除マーカーの自動クリーンアップ**: バージョニングが有効なバケットで、削除マーカーのみが存在するオブジェクトを自動的にクリーンアップします。

## ライフサイクルポリシーの設定方法

ライフサイクルポリシーは、AWS管理コンソール、AWS CLI、またはAWS SDKを通じて設定できます。設定プロセスは直感的で、特定のアクション（遷移、有効期限切れなど）とその条件（例えば、オブジェクトの作成後の経過日数）を指定することで、自動的なデータ管理ルールを作成できます。

1. **AWS管理コンソールを使用する場合**:
   - S3バケットを選択し、「管理」タブに移動します。
   - 「ライフサイクル」セクションを開き、「ルールを追加」を選択します。
   - 必要なアクション（Transition、Expirationなど）と条件を指定し、ルールに名前を付けます。
   - ルールを保存します。

2. **AWS CLIを使用する場合**:
   - `aws s3api put-bucket-lifecycle-configuration` コマンドを使用して、バケットにライフサイクルポリシーを設定します。ポリシーの詳細（アクションと条件）はJSON形式で指定します。

3. **AWS SDKを使用する場合**:
   - 使用しているプログラミング言語のAWS SDKを利用して、ライフサイクルポリシーを設定します。この方法も、ポリシーの定義にはJSON形式を使用します。

## 注意点

- **バージョニングが有効なバケット**では、`NoncurrentVersionTransition`や`NoncurrentVersionExpiration`のような非現行バージョンに対するアクションを設定することで、最新ではないオブジェクトバージョンの管理が可能です。これらの設定は一括で適用され、最新バージョン以外のすべてのバージョンに対して効果を発揮します。

- **コスト削減**のために、頻繁にアクセスされなくなったデータをコスト効率の良いストレージクラスに自動的に移行させることができますが、ストレージクラスによっては、データの取り出しコストや最低保管期間が異なるため、ポリシー設定時にこれらの条件を考慮することが重要です。

- **データの自動削除**は、不要なデータをクリーンアップしストレージコストを削減する強力な手段ですが、誤って重要なデータを削除しないよう、ポリシーの設定には慎重に行う必要があります。
PowerApps　sharepoint Copy as new Button機能実現

# 手順
1,APP OnStart:Set(varCopyFlg,false);
2,Copy as new Button::Set(varCopyFlg,true);
3,Submit button:
  
   IfError(
          　If(varCopyFlg
                       ,Patch(リスト名,Defalut(リスト名),SharepointForm1.Updates)
                    ,SubmitForm(SharepointForm1))
              　,Notify(SharepointForm1.Error)
  ;



  
  # 画面イメージ
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/40d919dc-9713-4f0e-da73-a680a2598f2a.png)

# 参考サイト
https://powerusers.microsoft.com/t5/Building-Power-Apps/Duplicate-an-item/td-p/1633866