OmniAICreator/Qiita-1.07M huggingface dataset:
OpenChain Japan Work GroupのOSPO SubWGについて

### はじめに
今回は、[OpenChain Japan Work Group][OC-Japan]で行っているOSPO SubWGについて、ご紹介したいと思います。
OSPO SubWGは、[OpenChain Japan Work Group][OC-Japan]の活動であると同時に、[TODO Group][TODO-g]のOSPO Meet UpのJapan Chapterでもあります。なので、活動の正式名称は **”Japan OSPO Local Meetup supported by TODO Group and OpenChain Japan WG”** となっています。 OSPO Local Meetup と呼ぶことが多いですが、短く OSPOjp と呼ぶ人もいます。
### OSPO SubWGへの参加方法
[OpenChain Japan Work Group][OC-Japan]と同様に、OSPO SubWGも誰でも自由に参加、退出することができます。[Linux Foundation][LF-j]のメンバー企業である必要もなく、参加資格条件もありません。そもそも、参加する際に、これといった手続きはありません。Slackに参加するのが一般的ですが、指定のURLを使って自分で登録すれば参加できます[^参加方法]。OSPO Local Meetupの開催案内は、[Linux Foundationのページ][LF-OSPO Local Meetup]にも掲載されるので、Slackに参加していなくても、参加情報を知ることができます。
### OSPO SubWGの活動
現在のOSPO SubWGの活動は、主に、月に2回、オンライン開催されるOSPO Local Meetupでの議論です。
毎月、第二金曜日の15:00-16:00には、[企業におけるOpen Sourceの戦略について議論](https://qiita.com/drafts#ospo-strategy--hosting)しています。第四金曜日の15:00-16:00は、OSPOに関するFAQについて意見交換をしています。
活動の参加者に求められる最低限のルールは、[Linux Foundationの行動規範][LF-CoC]に従うこと、[独占禁止法順守][LF-AntiTrust]、そして、[チャタムハウスルール][Chathum-House-Rule]に合意することです。これらは、参加者が安心・安全に意見交換できる環境を作り、生産的な議論となることを可能にするものだと考えています。
#### OSPO Strategy & Hostingの議論
第二金曜日のOpen Source戦略についての議論では、OSSと事業の関係を整理して、OSPOの事業戦略のあり方を模索しています。
業界の違いや、サプライチェーンのどの位置の企業であるかによって、OSSとの関わり方に違いを整理し、そこから事業戦略としてOSSをどう扱うのが良いかを見つけられないかと取り組んでいます。これは成熟したOSPOの役割である「OSS・コミュニティに対する戦略的な事業活動の推進」を具体化するためのヒントを探していると言えます。
#### OSPO Easy Q&Aの議論
第四金曜日のOSPOに関するFAQについて意見交換では、OSPOとは何か、OSSとは何か、といった疑問にどう答えると良いかを議論しています。参加者から集めたSimpleな疑問への答えを議論し、まとめることでOSPOの理解を参加者自身が深め、それを周囲に広めることができるようになろうとする取り組みです。
OSSやOSPOに関する文献や発表は多く存在しますが、それらを見聞きするだけではなかなか理解や納得するのは難しいと思います。周囲から問われた疑問にどう答えるかを自分自身で考えることによって理解が深まり、その上で文献等を見直すことで、企業内に自分の言葉でOSPOの意義を広め、OSPO活動をより効果的なものにしてゆくことができると考えています。
この活動によって、OSPOをこれからスタートさせようとしていたり、スタートして間もないOSPOをうまく企業内で定着させようとする場合のヒントを得ようとしています。
### OSPO Local Meetupへのお誘い
OSPOはこの２年ぐらいでとても注目されいている言葉だと思います。OSPOって何だろう、OSPOに配属されたけれど、どうしたらいいのだろう、という方も増えているのではないでしょうか。少しでも、”Japan OSPO Local Meetup supported by TODO Group and OpenChain Japan WG”に興味を持っていただけたなら、ぜひ、オンライン会合を覗いてみてください。先に述べたように、参加手続きはいりません。もしかすると、参加の一番の障壁は、あなたの所属する会社内のルールかもしれません。その場合の対応のヒントとして、チャタムハウスルールによって、企業の代表ではなく、OSS・OSPOに興味がある個人として集まっている場であることを説明するといいと思います。
オンライン会合のスケジュールとURLは、[OpenChain Projectホームページ][OC Home]中ごろのJoin Our Community Callsや[Linux FoundationのOSPO Local Meetupのページ][LF-OSPO Local Meetup]に掲載されます。今月は、今度の金曜日の12月13日 ~~と12月27日~~ [^キャンセル]です。一度、オンライン会合を覗いてみて、Slackに参加[^参加方法]するかどうかを決めていただいてもいいと思います。
ご参加をお待ちしています。

[OC Home]: https://openchainproject.org/
[OC-Japan]: https://openchain-project.github.io/OpenChain-JWG/
[TODO-g]: https://todogroup.org/
[LF-CoC]: https://events.linuxfoundation.org/about/code-of-conduct/
[LF-AntiTrust]: https://www.linuxfoundation.org/legal/antitrust-policy
[LF-AntiTrust-j]: https://www.linuxfoundation.jp/antitrust-policy/
[Chathum-House-Rule]: https://www.chathamhouse.org/about-us/chatham-house-rule
[LF-j]: https://www.linuxfoundation.jp/
[LF-OSPO Local Meetup]: https://community.linuxfoundation.org/ospo-local-meetup-japan-japanese-speaking/
[^参加方法]: [OpenChain Japan Work Groupのページ][OC-Japan]のSlackのところに参加方法が書かれています。
[^キャンセル]: 年末のため、キャンセルとなりました。
atcoder練習(2024.12.07)

# 問題
https://atcoder.jp/contests/abc374/tasks/abc374_a

キーエンスでは、役割や年齢、立場の違いに関係なく「さん」付けして呼ぶという文化があります。
英小文字のみからなる文字列Sが与えられます。
Sがsanで終わっているならばYesを、終わっていないならばNoを出力してください。

## 制約
S は英小文字のみからなる長さ 4 以上 30 以下の文字列

## 入力
入力は以下の形式で標準入力から与えられる。
S

## 出力
S が san で終わっているならば Yes を、終わっていないならば No を出力せよ。

## 入力例 1
takahashisan

## 出力例 1
Yes

文字列 S=takahashisan は san で終わっているため、 Yes を出力します。

## 入力例 2
aokikun

## 出力例 2
No

文字列 S=aokikun は san で終わっていないため、 No を出力します。

# 回答
```Python
s = input()

if s[-3:] == "san":
  print("Yes")
else:
  print("No")
```

# 参考
https://www.curict.com/item/9b/9bbe6ab.html
# 備考
- 問題が簡単だった。一瞬でアルゴリズムが浮かんだ。この状態をある程度のレベルまで高めたい。
- とりあえずはアルゴリズムが浮かぶに加えて、簡単なコードであれば調べなくても思い浮かぶようにしたい。
- 究極的なことを言えば、例えば「[富士山(ふじさん)](https://myoji-yurai.net/searchResult.htm?myojiKanji=%E5%AF%8C%E5%A3%AB%E5%B1%B1)」みたいな名前があると少し頭がよぎったけど無視した。
レッサーパンダがたくさん見れるサイトを作成したよ

:::note info
この記事はZOZO Advent Calendar 2024 シリーズ7の7日目の記事です。
:::

## はじめに
突然レッサーパンダの写真を見たくなる瞬間がよくあると思います
自分は各SNSのアルゴリズムがしっかりチューニングされているので、いつでもレッサーパンダを見ることができます
しかし誰しもそうでなはないと思うので、そんな人に向けて今回はレッサーパンダがたくさん見れるサイトを作成しました


## 作ったもの
今回作ったのはこちらのサイトです

https://redpanda-site.vercel.app/

![スクリーンショット 2024-12-07 12.27.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1602210/84b75126-0335-6afc-86be-f11015ad7d41.png)


ソースコードも公開してますので興味ある方は覗いてみてください

https://github.com/kensiiwasaki/redpanda-site


### 技術スタック
- Remix
- TailwindCSS

### API
今回レッサーパンダの画像取得には[TinyFox](https://tinyfox.dev/)というAPIを使っています

#### 使い方
画像を取得するエンドポイントはこちらです

```
https://api.tinyfox.dev/img.json
```

パラメーターに`animal`を指定することができ様々な動物の画像を取得することができます
詳しくは[APIドキュメント](https://tinyfox.dev/docs/)をご覧ください
今回はレッサーパンダの画像を取得したいので`animal=wah`を指定します

```
https://api.tinyfox.dev/img.json?animal=wah
```

そして取得したデータの`loc`プロパティに画像のパスが入っているので、それを元に画像を表示するURLを生成できます

```ts
`https://api.tinyfox.dev${data.loc}`
```


## おわり
今回はレッサーパンダがたくさんみれるサイトを作ってみました！
使ったAPIは非常に簡単に使え、様々な動物に対応しているのでぜひ使ったみてください
APIの制作者様ありがとうございます！

レッサーパンダについて語り足りないところですが、記事の本質と外れてしまうので別の機会にしようと思います...
レッサーパンダについてわからないことがあればぜひ質問してみてください！
Generate a Signature

[Previous << Network Status](https://qiita.com/flowcadence/items/bf5ff242f33c9f0630ff)
[Next >> Verify Signature](https://qiita.com/flowcadence/items/7ddd38a2546a5009d186)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#flow-cli-と-fcl

(署名者の)アカウントの秘密鍵を使用して署名を生成します。
```ruby
flow signatures generate <message>
```
⚠️ 署名に使用するアカウントが`flow.json`設定ファイルに設定されていることを確認してください。アカウントのアドレスは重要ではなく、秘密鍵のみが重要です。

<h1>Example Usage</h1>

```ruby
> flow signatures generate 'The quick brown fox jumps over the lazy dog' --signer alice

Signature 		 b33eabfb05d374b...f09929da96f5beec167fd1f123ec
Message 		 The quick brown fox jumps over the lazy dog
Public Key 		 0xc92a7c...042c4025d241fd430242368ce662d39636987
Hash Algorithm 		 SHA3_256
Signature Algorithm 	 ECDSA_P256
```

<h1>Arguments</h1>

<h3>Message</h3>

* Name: `message`

署名に使用するメッセージを指定します

<h1>Flags</h1>

<h3>Signer</h3>

* Flag: `--signer`
* Valid inputs: the name of an account defined in the configuration (`flow.json`)

トランザクションに署名する際に使用するアカウントの名前を指定します。

<h3>Filter</h3>

* Flag: `--filter`
* Short Flag: `-x`
* Valid inputs: case-sensitive name of the result property.

結果から、唯一の値として取得したいプロパティの名前を指定します。

<h3>Output</h3>

* Flag: `--output`
* Short Flag: `-o`
* Valid inputs: `json`, `inline`

コマンド結果のフォーマットを指定します。

<h3>Save</h3>

* Flag: `--save`
* Short Flag: `-s`
* Valid inputs: valid filename

結果を保存したいファイル名を指定してください。

<h3>Log</h3>

* Flag: `--log`
* Short Flag: `-l`
* Valid inputs: `none`, `error`, `debug`
* Default: `info`

ログレベルを指定します。コマンド実行中に表示する出力を制御します。

<h3>Configuration</h3>

* Flag: `--config-path`
* Short Flag: `-f`
* Valid inputs: a path in the current filesystem.
* Default: `flow.json`

`flow.json` コンフィギュレーションファイルへのパスを指定します。`-f` フラグを複数回使用して複数のコンフィグレーションファイルをマージすることもできます。

<h3>Version Check</h3>

* Flag: `--skip-version-check`
* Default: `false`

低速な接続を避けて処理を高速化するために、起動時のバージョンチェックをスキップします。

*Last updated on **Nov 26, 2024** by **Giovanni Sanchez***

翻訳元

https://developers.flow.com/tools/flow-cli/utils/signature-generate

***
<b>[Previous << Network Status](https://qiita.com/flowcadence/items/bf5ff242f33c9f0630ff)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Generate a Signature)

<b>[Next >> Verify Signature](https://qiita.com/flowcadence/items/7ddd38a2546a5009d186)</b>
WSL2でinterop enabled=trueなのにWindows EXEが起動しなくなった場合のメモ

# 概要
WSL2 Linuxシステムを動かしてる環境で
なぜか各種Windows EXEを実行させようとすると
"Invalid argument"になってしまいました

```bash
$ /mnt/c/Windows/System32/notepad.exe &
/mnt/c/Windows/System32/notepad.exe : Invalid argument
```

# 環境
```powershell
PS> wsl.exe --status
既定のディストリビューション: Fedora
既定のバージョン: 2
WSL1 は、現在のマシン構成ではサポートされていません。
WSL1 を使用するには、"Linux 用 Windows サブシステム" オプション コンポーネントを有効にしてください。

PS> wsl.exe --version
WSL バージョン: 2.3.26.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26100.2454
```

```bash
$ cat /etc/wsl.conf
[boot]
systemd = true

[interop]
enabled = true
appendWindowsPath = false

[automount]
enabled = true
options = "metadata,uid=1000,gid=1000,umask=22,fmask=11,case=off"
mountFsTab = true

[network]
generateHosts = true
generateResolvConf = true
```

# 対処方法
1. WSL2 Linuxシステムにてsystemdを利用している場合は、一旦/etc/wsl.confを書き換え、`systemd=false`にして保存し全shellは閉じる
1. Windows上のCMD or PowerShellから`wsl.exe --shutdown`
1. WSL2 Linuxシステムを起動
1. 一度適当なWindows EXEが動くか確認
1. 再度 /etc/wsl.confを書き換え、`systemd=true`に戻す
1. Windows上のCMD or PowerShellから`wsl.exe --shutdown`
1. 再度WSL2 Linuxシステムを起動
1. Windows EXEが動くか確認

これで直りました

1の段階では
`/proc/sys/fs/binfmt_misc/WSLInterop-late`
が存在せず、
8まで進んだところ
`/proc/sys/fs/binfmt_misc/WSLInterop-late`
が見えるようになりました

固有環境だけの問題かもしれませんが、覚えとして残しておきます
履修要件を満たしているか確認できる拡張機能を作成した話

kstm AdventCalender 2024 8日目を担当するhinoです。

以前に大学の履修要件チェッカーのChrome拡張機能を作成しました。

## 経緯

たまたまTwitterを眺めていたら以下のツイートを見つけました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">履修システム、卒業や進級にどの科目が何単位足りないかを明示するようにしないと、分厚い卒業要件の冊子を配っただけでは説明責任を果たせていないと思うんだよな</p>— みゅーもり (@myuuuuun) <a href="[https://twitter.com/myuuuuun/status/1771822201181753729?ref_src=twsrc^tfw](https://twitter.com/myuuuuun/status/1771822201181753729?ref_src=twsrc%5Etfw)">March 24, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

私も卒業判定出る直前に要件と取得単位数をにらめっこして大丈夫だよな？
と友人と確認しあったなと思い出しました...(笑)

更に色々調べてみたところ、大学によっては不足している事をシステム側が提示してくれるところもあるようだったので、そのようなシステムを作ることにしました。

## 修得単位数の画面

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1611491/efe679da-7a33-fc72-ed8d-7a3e2be243ce.png'>

画面はシンプルな構成になっており、JavaScriptをちょっといじってあげるといい感じに判定できそうですね。
また、大学ページは認証前提となるので、ブラウザの拡張機能で作ってあげるのが楽だなと思い、Chromeの拡張機能として作成しました。

## Chromeの拡張機能の作成方法

Chromeの拡張機能を作成するのは初めてだったので、[とほほのChrome拡張機能開発入門](https://www.tohoho-web.com/ex/chrome_extension.html) を読みながら作成しました。
思ったよりも手軽に作れたので、拡張機能作成には今後も色々試していきたいと思いました。

## 動作について

ボタンを押すと、不足単位がある区分は赤く、足りている区分は緑にするようにしました。
また、要件単位数も表示することで何単位足りていないかもわかるようにしました。

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1611491/04f85908-05f3-2c67-82df-2bcc70b63216.gif'>
AWS Security Hub: 安全なAWS環境へのゲートウェイ


# はじめに

現代のデジタル環境では、クラウドインフラのセキュリティ確保が都市の防衛システムを維持するように重要です。
企業がクラウドへ移行する中で、セキュリティ管理は複雑で時間がかかります。ここで登場するのが **AWS Security Hub**。
これはAWSエコシステム内でセキュリティ管理を集中化し、効率化する強力なツールです。

本ガイドでは、ITプロフェッショナルやクラウド初心者向けに、AWS Security Hubの理解と活用方法を紹介します。

## AWS Security Hubとは？

**AWS Security Hub** は、AWSが提供する集中型セキュリティおよびコンプライアンスサービスです。
セキュリティの「中枢神経系」として機能し、複数のAWSサービスやサードパーティツールから検出結果を集約・整理・優先順位付けします。
航空管制塔が空の安全を監視するように、Security Hubはセキュリティのコマンドセンターとして脆弱性の特定、コンプライアンスの監視、脅威への迅速な対応を支援します。

## 主な機能

### 1. 集中型セキュリティビュー
- **集約された検出結果**: Amazon GuardDuty、Amazon Inspector、AWS Configなどからデータを一元化。パズルのピースを一つのボードに集めるように全体像を把握。
- **統一ダッシュボード**: セキュリティアラートを一括管理。スマートフォンのホーム画面のように必要な情報に即アクセス。

### 2. 自動化されたコンプライアンスチェック
- **組み込みの標準**: AWS Foundational Security Best PracticesやCIS AWS Foundations Benchmarkを含む。車の安全装置のように基本対策が標準装備。
- **継続的な監視**: 定期的にAWSリソースを評価。健康診断のようにセキュリティの健康状態を維持。

### 3. インテリジェントなインサイトと優先順位付け
- **リスクベースの優先順位付け**: 機械学習で重要度を判断。消防士が火災の危険度に応じて対応するように。
- **カスタムインサイト**: 特定ニーズに合わせたクエリやフィルター。料理人がレシピに合わせて調味料を調整するように。

### 4. 自動化された対応と修復
- **AWSサービスとの統合**: AWS LambdaやAWS Systems Managerと連携。緊急時に自動ドアが開くように自動対処。
- **カスタムアクション**: 特定イベント時にワークフローや通知をトリガー。スマートホームシステムのように自動操作。

### 5. スケーラビリティとマルチアカウントサポート
- **集中管理**: 複数アカウントやリージョンを一元管理。大規模ビルのセキュリティを一つのシステムで管理。
- **スケーラブルなアーキテクチャ**: 事業規模に応じて柔軟に対応。拡張可能なストレージシステムのように成長に対応。

## 利用するメリット

- **可視性の向上**: 全体像を把握しやすく、迅速な判断が可能。
- **効率の改善**: ルーチン作業を自動化し、戦略的な取り組みに集中。
- **コスト効率**: 複数ツールの統合でコスト削減。
- **コンプライアンスの確保**: 継続的チェックで規制遵守を維持。
- **コラボレーションと統合**: 既存ツールと連携し、セキュリティ戦略を強化。

## 始め方

### 1. Security Hubを有効化する
- **AWSマネジメントコンソールにアクセス**し、Security Hubサービスを選択。
- 「Security Hubを有効にする」をクリック。AWS Organizationsを使って複数アカウントに有効化も可能。

### 2. セキュリティ標準を設定する
- **コンプライアンス標準を選択**: AWS Foundational Security Best PracticesやCIS AWS Foundations Benchmarkから。
- **ルールをカスタマイズ**: 組織のセキュリティポリシーに合わせて調整。

### 3. セキュリティサービスとサードパーティツールを統合する
- **AWSネイティブサービス**との統合を有効化。
- **サードパーティツール**を接続し、検出結果を一元化。

### 4. 検出結果をレビューし、優先順位を付ける
- **ダッシュボードで確認**: 検出結果を重大性やコンプライアンス状況で表示。
- **優先順位付け機能**で重要な問題に集中。

### 5. 対応と修復を自動化する
- **自動化アクションを設定**: AWS LambdaやSystems Managerを利用。
- **カスタムワークフローを作成**し、一貫した対応を確保。

## ベストプラクティス

1. **コンプライアンス標準を定期更新**
   - 最新のベストプラクティスや規制に基づきチェックを更新。

2. **カスタムインサイトを活用**
   - 組織固有の指標を監視するカスタムインサイトを作成。

3. **インシデント対応計画と統合**
   - 自動対応をインシデント対応計画と連携。

4. **継続的な監視と改善**
   - 定期的に検出結果をレビューし、ポリシーを調整。

5. **チームのトレーニング**
   - Security Hubの使い方や結果の解釈をチームに教育。

## ユースケース

### 1. 脅威の検出と対応
- **検出結果の集約と統合**で脅威対応を強化。セキュリティカメラが不審者を検知し警備員に通知するように。

### 2. コンプライアンス管理
- **継続的な監視とレポート**で規制遵守を確保。税務監査に向けた書類整理のように。

### 3. 脆弱性管理
- **脆弱性の特定と修復**を自動化。健康診断で病気を早期発見するように。

### 4. セキュリティポスチャーの評価
- **ダッシュボードで定期評価**し、安全なインフラを維持。建物の定期点検に似ています。

## まとめ

クラウドセキュリティが重要な今、AWS Security Hubは集中管理と強化を可能にする強力なソリューションです。
統一ビューで検出結果を表示し、コンプライアンスを自動化、脅威を優先的に対処することで、安全なクラウド環境を維持できます。
AWS初心者でも、セキュリティ運用を効率化したい方でも、Security Hubは貴重なツールです。
Security Hubを活用して安全なAWSインフラを構築しましょう。

---
### 会社紹介

**株式会社 Mosaica**  
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。  

詳しくは [公式サイト](https://mosaica.co.jp/) までお気軽にご相談ください。
公式サイト： https://mosaica.co.jp/
ThingSpeakでAlert MAIL

ThingSpeakでMATLABを定期的に実行して、自分宛のメールを送信する事ができます。

ここに説明があります。

https://jp.mathworks.com/help/thingspeak/analyze-channel-data-to-send-email.html

この中のalertApiKeyについてここに説明があります。

https://jp.mathworks.com/help/thingspeak/alerts-api.html

[前回の](https://qiita.com/yamori813/items/ee4f4a1eb2cd816c0984)MATLABのスクリプトをこんなふうに代えました。

```MATLAB
uptime = last - fast;
rate = total / current * 100;

alertApiKey = 'himitu';
alertUrl = "https://api.thingspeak.com/alerts/send";
alertBody = 'Total: ' + string(total) + '/' + string(current) + ', Rate: ' + string(rate) + '%' +  char(10);
alertBody = alertBody + string(fast) + ' - ' + string(last) + char(10);
alertBody = alertBody + string(days(uptime)) + ' days' + char(10);
alertSubject = sprintf("IoT information");
options = weboptions("HeaderFields", ["ThingSpeak-Alerts-API-Key", alertApiKey ]);

try
    webwrite(alertUrl , "body", alertBody, "subject", alertSubject, options);

    catch someException
    fprintf("Failed to send alert: %s\n", someException.message);
end
```

毎日朝9時に実行するようにしてメールが届くようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/321d3eb0-7f60-c243-8fb3-1c4616143b06.png)

ThingSpeakは無料でもいろいろ使えて楽しいです。
インターネットの歴史についてまとめてみた

インターネットの歴史についてまとめてみました。
本文の文字数は25,000文字程度で
1時間から2時間ほどで読めるようになっています。
興味のある方はこちらのリンクからぜひ読んでみてください。

https://www.izawa-ry.com/historyoftheinternet

## こういう人に読んでほしい
エンジニア界隈には「マスタリングTCP/IP」や「ネットワークはなぜつながるのか」といったネットワークを理解するための良本が存在します。
しかし、私含めエンジニア初心者にはもしかするととっつきづらいかもしれません。
そんな時、「インターネットの歴史」から理解すると俄然興味が湧き、
個々の技術に対する定着度が変わってくると思っています。

これからネットワークの知識を深めたい方や、インターネット技術の背景を楽しく学びたい方におすすめの記事です。



## 私が書いた「インターネットの歴史」の特徴
他のサイトとの違いや特徴は以下の通りです。
- オリジナルの年表を作成し、ぱっと見でなんとなく把握できるようにしたこと
- インターネットの歴史を知る上で最低限必要であろう重要な人物とキーワードをまとめたこと
- いろいろな文献から抽出し、最低限の短さでかつ読みやすいストーリーにまとめたこと


![history_of_the_internet_qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631096/2214ccea-b2c2-9dc7-2bdc-e0ac4e5a6a81.png)


![スクリーンショット 2024-12-07 12.29.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631096/13104c0b-5198-1846-a242-4b96d56acefa.png)

![スクリーンショット 2024-12-07 12.29.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631096/d4d91e27-02b6-fd0f-4474-c067a25aafa3.png)
Elixirでリズムマシンを作る

# 目標
- MIDI（ソフトシンセ）でリズムマシンを作る
- 同時発音を攻略する

2年前このコラムで同時発音を諦めていました

https://qiita.com/t-yamanashi/items/1c502f6d8b375749f47d

midi_synthをdepsに設定

```diff_elixir:mix.exs
defmodule ElixirSynth.MixProject do
  use Mix.Project

  def project do
    [
      app: :elixir_synth,
      version: "0.1.0",
      elixir: "~> 1.17",
      start_permanent: Mix.env() == :prod,
      deps: deps()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
+     {:midi_synth, "~> 0.4.0"}
      # {:dep_from_hexpm, "~> 0.3.0"},
      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
    ]
  end
end

```

Task.asyncを使ってパートごと非同期処理をする
計算がめんどくさいから、プロセスを分けてしまう
Task.awaitで各プロセスの同期を取る


```elixir
defmodule ElixirSynth do
  @moduledoc """
  Documentation for `ElixirSynth`.
  """
  @hi 42
  @bass_drum 36
  @snare 38

  def hello do
    # MIDI 初期化
    {:ok, synth} = MIDISynth.start_link([])

    # 最初だけ同期が取れなかったから、ダミーで1音ならす　理由はわからない
    note(@snare, synth, 1000, 0)
    Process.sleep(100)

    # 8小節鳴らす
    Enum.each(1..8, fn _ ->
      play(synth)
    end)

    :world
  end

  def play(synth) do
    #ハイハット 8分刻み
    hi_task = notes(@hi, 100, 8, synth)

    #バスドラ 4分刻み
    bass_drum_task = notes(@bass_drum, 400, 4, synth)

    #スネア 裏拍
    snare_task = notes(@snare, 400, 2, synth, 600)

    # 小節終わるまで待機
    Task.await(hi_task)
    Task.await(bass_drum_task)
    Task.await(snare_task)
  end

  def notes(note, time, conut, synth, before \\ 0) do
    # 指定した回数音を鳴らす
    # note　ノートナンバー
    # time 間隔
    # 鳴らす回数
    # synth　MIDIオープンした変数
    # 事前のスリーブ時間
    Task.async(fn ->
      Enum.each(1..conut, fn _ ->
        note(note, synth, time, before)
      end)
    end)
  end

  def note(note, synth, time, before) do
    Process.sleep(before)
    MIDISynth.Keyboard.play(synth, note, 200, 127, 9)
    Process.sleep(time)
  end
end
```

<iframe width="560" height="315" src="https://www.youtube.com/embed/Pcme0V2D6xo?si=88DqvXXb9Cnm2FPd" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
サポーターズのハッカソンに初参加した感想

# 初めてのハッカソン参加

今回、私は初めて **サポーターズ** という企業が主催するハッカソンに参加しました。これまでは、Next.jsやReactを使ったWebアプリケーション開発をUdemyの動画で学んでいました。ハンズオン形式で理解を深めることはできましたが、アウトプットをする機会が少なかったため、ハッカソンで実際に手を動かしてみたいと思いました。

ただし、チーム開発の経験がなく、GitHubも基本的な操作（`add`、`push`、`clone`、`pull`など）しか使ったことがありませんでした。そのため、初めてのチーム開発と初めてのハッカソンに、とても緊張して臨みました。

---

## 初めてのチーム開発

今回のハッカソンでは、個人で申し込み、即席で編成された4人チームで参加しました。チームメンバーのうち2人は過去にハッカソン経験があり、その方々の意見を参考にしながら開発を進める方針を決めました。

初めてのチーム開発でしたが、メンバーは皆とても優しく、すぐに打ち解けることができました。

---

## 作成したアプリ

私たちのチームは、**[Fashonista](https://fashonista-pi.vercel.app/)** というアプリを作成しました。このアプリは以下の機能を備えています：

- **今日の天気情報を取得**し、その情報をもとに適した服装を提案  
- 提案した服装に応じた**画像の表示**  
- **NextAuth** を用いたログイン機能  
- ログインユーザーが**過去に調べた服装の履歴を確認可能**

このアプリは、天気情報を活用して日々の生活に役立つ提案を行うことを目的にしています。

https://x.com/geek_pjt/status/1850453218884780240

---

## 苦戦したこと

### 1. GitHubのコンフリクト解決  
チーム開発でGitHubを使うのが初めてだったため、コンフリクトが発生した際の対応方法が全く分かりませんでした。最終的には **ChatGPT** を活用し、何とか解決することができました。

### 2. 状態管理の混乱  
メンバーそれぞれがコンポーネントや状態管理をバラバラの場所で実装したため、リファクタリングに時間がかかりました。

---

## 学んだこと

### 1. 開発前の設計の重要性  
開発を始める前に、ある程度の設計をしておく必要性を痛感しました。特に、以下の点をチームで共有することが重要です：

- ステートの管理方法  
- コンポーネントや機能の依存関係の整理  

Next.jsの場合、最低限 **`src` ディレクトリの直下に `components` フォルダを作成** し、大まかな機能ごとにステート管理を分けるべきです。また、複数の機能で共有するステートがある場合、その管理方法を事前に決めておくとスムーズに進みます。

### 2. GitHubブランチの運用  
今回、ブランチ設計をほとんどせずに進めたため、マージ時に多くのコンフリクトが発生しました。その結果、以下の運用が必要だと感じました：

- **役割ごとにブランチを分ける**（例：`frontend`、`backend`）  
- 各役割の中でさらに機能ごとのブランチを作成  
- 不要なブランチは適宜削除する  

特に、Pull Requestでマージ後に使わなくなったブランチは、その時点で削除するのが理想的です。

---

## 参加して感じたこと

サポーターズのハッカソンでは、2日間とも19時ごろに**交流会**がありました。この場で、他のチームがどんなアプリを作成しているかや、大学での学び、就活状況などを話すことができました。また、最終発表では、どのチームも素晴らしいアプリを作成しており、大きな刺激を受けました。

この経験を通じて、勉強のモチベーションが大幅に向上しました。また、即席チームでの参加でしたが、メンバーとは非常に仲良くなりました。

結果として、**努力賞** を受賞することができました。このハッカソンでは、参加するだけで1,000円をもらえるうえ、受賞すると賞金も追加で受け取れます。

https://x.com/geek_pjt/status/1850465290146230697

---

## ハッカソンへの参加をおすすめする理由

ハッカソンに参加すると、自分の足りない部分が明確になります。そのため、ある程度インプットを終えた方には、積極的な参加をおすすめします。チーム開発や新しい技術の実践的な経験が得られるだけでなく、モチベーション向上にもつながります。
【OpenAI ChatGPTクリスマスイベント第２日目】強化ファインチューニング（Reinforcement Fine-Tuning）プログラム。


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

　今回は、OpenAIのクリスマスイベントの12日間。今日はその第二日目。内容は、強化ファインチューニング（Reinforcement Fine-Tuning）プログラムです。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。画像は
ありません。　あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)

***
　さて、【本題】です。

　OpenAIのクリスマスイベントの
　　第二日目は
　　　強化ファインチューニング
　　　　（Reinforcement Fine-Tuning）
　　　　　プログラムです。

[サム・アルトマンポスト](https://x.com/sama/status/1865096566467686909?t=TZxOFwg_Vg7igWzySB8aog&s=19)
>（DeepL翻訳＋修正）
>今日、私たちは強化ファインチューニングを発表します。これにより、わずかなトレーニングデータで、特定のドメインのエキスパート・モデルを本当に簡単に作成できるようになります。
>
>アルファプログラム開始、第1四半期に一般公開予定
>
>感想：
>2024年の最大のサプライズのひとつだ。
>みんなが何を作るのか楽しみだ！

[OpenAI公式ポスト](https://x.com/OpenAI/status/1865136373491208674?t=8tvpE7lrVeaUFMC9fSeWKA&s=19)
>（DeepL翻訳）
>これは、コーディング、科学研究、金融などのドメインにおいて、特定の複雑なタスクのためのエキスパート・モデルを構築することを可能にする、新しいモデル・カスタマイズ・テクニックである。
>
>強化ファインチューニング研究プログラムを通じて、研究者、大学、企業へのアルファ・アクセスを拡大します。 募集枠には限りがあります。

[Greg Brockmanポスト](https://x.com/gdb/status/1865142859697131774?t=ulFZLbV1Zrt30vBjix2j3A&s=19)
>（DeepL翻訳）
>少量の専門家データを使用して、あなたのドメインのカスタムモデルを構築します。
>
>現在アルファ版で、来年第1四半期に発売予定。

　詳細は、こちら。
　　[OpenAI公式ページ](https://openai.com/form/rft-research-program/)

　「OpenAI's 
　　　Reinforcement
　　　　Fine-Tuning Research Program」

　このページをChatGPTに
　　読み込ませ、和訳しました。
>（GPT-4o）
>OpenAIは、特定の複雑で専門的なタスクに優れたモデルを作成するための「強化ファインチューニング研究プログラム」を拡大しています。この手法は、高品質なタスクと参照解答を用いてモデルの応答を評価し、類似の問題に対するモデルの推論方法を強化し、特定の分野での精度を向上させることを目的としています。
>
>**応募対象者:**
>
>このプログラムは、研究機関、大学、企業を対象としており、特に専門家が主導する狭い範囲の複雑なタスクを実行し、AI支援の恩恵を受ける組織を歓迎しています。法務、保険、医療、金融、工学などの分野で有望な結果が得られています。
>
>**プログラム内容:**
>
>参加者は、ドメイン固有のタスクに対してこの手法をテストするための強化ファインチューニングAPIのアルファ版にアクセスできます。また、公開リリース前にAPIを改善するためのフィードバック提供が求められます。データセットを共有してモデルの改善に協力する組織との連携も積極的に行っています。
>
>興味があり、このプログラムに適しているとお考えの方は、上記のフォームから応募してください。募集枠には限りがあり、応募状況については追って連絡いたします。強化ファインチューニングの一般公開は2025年初頭を予定しています。 

　こちらの方のポストが
　　簡潔にまとめられていて
　　　わかりやすかったです。
　　　　[elvisさんポスト](https://x.com/omarsar0/status/1865095444012912704?t=-ECeXPsKUqZSeVdkfmF8bQ&s=19)
>（GPT-4o和訳）
>本日のOpenAIの発表の要約：
>
>- o1モデルの「強化ファインチューニング（RFT）」を導入  
>- o1を調整することで、新しい方法で推論を行い、特定の分野での応答を改善  
>- RFTは従来のファインチューニングよりも優れており効率的。少数の例だけで十分な調整が可能

　また、
　　K.Ishiさんのポストも
　　　参考に。
　　　　[K.Ishiさんポスト](https://x.com/K_Ishi_AI/status/1865217074802626881?t=z62DV8KWNoNcqRHeHUy9fQ&s=03)

　ここでは
　　o1とo1-miniと
　　　o1-mini（Fine-Tuning）を
　　　　比較した折れ線グラフが
　　　　　載せられています。

　　その結果は、
　　　o1-mini（Fine-Tuning）が
　　　　o1を越えた性能を
　　　　　示していました。

　この強化ファインチューニングの
　　利用先は、専門分野の特化型o1に
　　　なるのでしょう。

　法務、保険、医療、金融、工学などと
　　あらゆる分野に浸透するかも
　　　しれませんね。

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

　今回は、ここまで。
Lightning Experience ホームページの設定

**使っているクラウドなどの小ネタ Advent Calendar 2024 23日目**

+ [Lightning Experience ホームページの設定](https://help.salesforce.com/s/articleView?id=sf.admin_home_lex_intro.htm&type=5)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d3c41fd3-a2f8-5480-08cb-1157caa35c06.png)

Lightning アプリケーションビルダーからでしか設定できないと思ったけど、設定 -->ホーム からでもできそうな感じですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/75b555de-8a19-00a7-4544-73fa95072d07.png)

+ [ユーザーのホームページの割り当てをどのように決定しますか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000H1Twd)

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

メタデータAPIで取得できるかも

+ [Apex メタデータ API はプロファイルに割り当てられた PageLayout を取得します。](https://salesforce.stackexchange.com/questions/226883/apex-metadata-api-retrieve-pagelayout-assigned-to-profile)
+ [Lightning ページの割り当て - ショートカットはありますか?](https://www.reddit.com/r/salesforce/comments/up1h75/lightning_page_assignments_any_shortcuts/)
SharePointリストの集計列でTODAY関数を使用し、現在の日付を表示する

# やりたいこと
SharePointリストで現在の日付を保持する集計列を作成したいと考えています。

しかし、集計列にTODAY関数を使用して、列の作成を実行すると、「<INS>集計列には、'Today'および'Me'等の値が可変する関数を含むことはできません。</INS>」というエラーが発生します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/0ae648da-b154-7187-9d30-f0482b74ad31.png)

**本記事では、集計列でTODAY関数を使用して、現在の日付を表示するための回避方法を紹介します。**

# 手順1.「Today」という名前の列を作成する
列名で「Today」と入力して、列の情報の種類を［１行テキスト］を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/846e48ce-bf13-7bc7-f3b5-c1ea952fa089.png)


# 手順2. 集計列を作成し、手順1で作成した列を参照する
現在の日付を表示する集計列を作成します。列の名前を入力して、列の情報の種類を［集計値］を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/08fd7af8-8d54-a369-32d0-3a28f37f709c.png)

数式セクションで、手順1で作成した列「Today」を数式に追加し、この式から返されるデータの種類を［日付と時刻］を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/f188251d-b5da-435c-2a06-6ddf7aed9453.png)

# 手順3. 手順1で作成した列「Today」を削除する
手順1で作成した列「Today」を削除します。

こちらの手順で、［集計列］に現在の日付を表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640497/8bad9954-954d-933f-4f0c-e35c7092c9f4.png)

# 参考記事
以下は、SharePointリストの関数に関するMicrosoft公式リファレンスです。

https://support.microsoft.com/ja-jp/office/%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E6%95%B0%E5%BC%8F%E3%81%AE%E4%BE%8B-d81f5f21-2b4e-45ce-b170-bf7ebf6988b3
大きなPICOでテグスプロトタイピング

## はじめに
　2024年の目標の一つに、ものづくりの展示に挑戦するというのがありました。HamamatsuMicroMakerFaire2024、つくろか！３で「自分応援ロボット」と題して、ロボット作り初心者が展示に挑戦しました。

https://makezine.jp/event/makerfaire/hmmf2024/

https://tsukuroka3.notion.site/3-WEB-26e2a0c5174641bc8382d63a6dd70ab0

　HamamatsuMicroMakerFaire2024での屋号は「浜松Fuzixユーザーグループ」つくろか！3での屋号は「百舌鳥堂」でした。
　つくろか！３の展示は以下の通り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/af120a2d-7240-8b86-f91a-a0732852fd6b.png)
　そのなかで、電子工作やプログラミングに精通している方々の心に届いたのが、手芸用テグスを活用した、はんだ付け無しにジャンプワイヤで配線する技術（以降、テグスプロトタイピング）でした。
![WIN_20241207_11_55_21_Pro2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/644f0dd8-97f0-7113-30f9-0708b0906676.jpeg)
　本稿では、最近入手した、JUMBO PICOを使った、テグスプロトタイピングの例を紹介します。
## テグスプロトタイピング
　テグスプロトタイピングとは、スルーホール基板の穴より少し小さな太さのテグスを差し込むことで、テグスの弾力性を使って、スルーホールからジャンプワイヤを抜けなくする技術です。
　テグスの通し方には、「波縫い」と「かがり縫い」があります。スルーホールの径とテグスの太さの差が部品の足の太さより狭い場合は「波縫い」を使います。部品の太さよりひろくて、その外側に半円のくぼみがある場合は「かがり縫い」を使います。
## JUMBO PICO
　Pimoroniから販売された、デモや、おふざけに使える特大サイズのRaspberry pi pico2です。

https://shop.pimoroni.com/products/pico-jumbo?variant=42095185821779

このボードのスルーホールの直径は、3.8 mm程度です。もっとも太い手芸用テグスは、私が調べた範囲では、1 mmでした。この組み合わせでは、「かがり縫い」を使って、テグスプロタイピングを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/fa322516-05ff-50ac-e979-8ab9f56c5ba2.png)

 
## Lチカ
　テグスプロトタイピングが有効かを確認するために、Ｌチカを行います。
　ここでは、LED1個のLチカを行いました。LEDの直径には、3 mmのものがありますので、JUMBO PICOのスルーホールに差し込んで使ってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/182786dd-6906-3cfb-64a4-19a5943f1b6a.png)
　裏側から3 mmの赤色LEDをGPIOのスルーホールに差し込んでいます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693019/a30a4ee4-9a52-9004-0a6d-d25010dea248.png)
　裏側で配線しています。テグスと基板の隙間にピンを差し込んでいるだけです。LED用制限抵抗の辺りの改良が必要です。
## おわりに
　JUMBO PICOでLチカを行いました。各GPIOの穴から、LEDが出るように配線すると、28個のスルーホールが点灯するオブジェができそうです。
　オブジェづくりに成功したら、イベントの展示ブースで展示します。
VPSにDockerEngineを導入する

# はじめに
VPSの基本運用はdocker fileでデプロイするだけにして楽にしたい！!  
将来的にjenkinsも入れてCI/CDをやれるとうれしい。  

DockerにはDockerEngineとDockerDesktopの2種類存在するが、VPSのメモリがあまり大きくない場合などはCLIベースのDockerEngineを導入します

# 環境
Ubuntu24.04
Docker27.3.1  

# 古いDockerを削除する  
```diff_shell
$ sudo apt-get remove docker docker-engine docker.io containerd runc
```

# Dockerリポジトリの設定
### 依存パッケージのインストール
```diff_shell
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg lsb-release
```

### GPG鍵の取得  
```diff_shell
# GPG鍵の保管場所を作成
$ sudo mkdir -p /etc/apt/keyrings

# GPG鍵をバイナリ形式で保存
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```

### リポジトリのダウンロード
```diff_shell
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# apt-getキャッシュクリア
$ sudo apt-get update
```

### Dockerインストール
```diff_shell
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
```

### Dockerバージョン確認
```diff_shell
$ docker --version
Docker version 27.3.1, build ce12230
```

# 参考文献
>参考：[Ubuntu 22.04にdockerをインストールする](https://qiita.com/yoshiyasu1111/items/17d9d928ceebb1f1d26d)
>参考：[Ubuntu _ Docker ドキュメント](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository)
AMIからリストアしたEC2(Windows Server)にRDP接続できなくなったときの対処法

# はじめに
AMIからリストアしたEC2(Windows Server)にRDP接続できなくなったときの対処法を備忘として記載する。

# 陥った事象
AMIを取得後、AMIからインスタンス(Windows Server)を構築しSSMで接続しようとしたらできなくなってしまいました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/bc71d0ab-5e09-5d98-487b-1dbbc6c9c67f.png)

※パスワードの復号を試みるも実施できず、Administratorのパスワードも控えていなかったためパスワード認証も不可。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/4599f7a8-e84f-7413-2817-20e45d422ddb.png)


# 解決策
AWS Systems Manager Run Commandの「AWSSupport-RunEC2RescueForWindowsTool」を実行する。
これにより、Administratorのパスワードをリセットすることができます。
[手順](https://repost.aws/ja/knowledge-center/reset-admin-password)

# 遭遇したエラー
「AWSSupport-RunEC2RescueForWindowsTool」を実行することで何とかなりそうだと思ったが、実行に失敗してしまいました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/716ac07b-5285-363d-22be-f7c7b97a659f.png)

以下で原因を記載していきます。

## 原因 ~インターネットにアクセスできる環境がなかった~

[手順](https://repost.aws/ja/knowledge-center/reset-admin-password)のリンク先に記載されていた前提条件を完全に見落としていました。。。

>インスタンスは、パブリック IP アドレスまたは NAT を使用して、(Systems Manager 用に) インターネットにアクセスできる必要があります。
または
インスタンスは Systems Manager 用に設定された Amazon Virtual Private Cloud (Amazon VPC) エンドポイントを使用する必要があります。

インターネットにアクセスできるように構成を変更し、コマンドを再実行することで管理者パスワードをリセットすることができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/2d1d0105-940f-f102-7ff0-f771f44e8112.png)

リセットしたパスワードはパラメータストアで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/d8fb69af-0839-8c7f-cdec-d98ecc0b184a.png)

リセットしたパスワードでインスタンスに接続できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/b9d15ef2-ee13-65cd-9887-ebea3ed3c880.png)

# 終わりに
リストア後にEC2に接続できなくなったときは焦りましたが、パスワードをリセットすることで接続できるようになったのでよかったです。
パスワードリセットの際にはインターネットにアクセス出来る必要があるということは覚えておこうと思います。

# 参考
・[EC2 Windows インスタンスの管理者パスワードをリセットするにはどうすればよいですか?](https://repost.aws/ja/knowledge-center/reset-admin-password)
JSON::PPのencodeメソッドと日本語とutf8

# 概要
　JSON::PPで日本語を扱う場合のuse utf8;を利用した場合と、そうではない場合の違いについて、また利用メソッドの違いについてまとめます。
 ソースコードはutf8で記述するものとします。

# 比較するメソッド
| メソッド | 備考 | 
| - | - |
| encode_json() | use utf8時にutf8文字列作成 |
| JSON::PP->new->utf8(0)->encode() | 内部コードで文字列作成 |

# 方法とコード
まずは、以下コードを用います。次にuse utf8;を消して行います。

```perl
#!perl
use v5.40;
use utf8; # ← 使用する場合とそうでない場合を比較
use JSON::PP;
use Encode;

my $x = [{a=>1, b=>"テスト"}, {a=>1, b=>"試験"}];

my $a = encode_json($x);
my $b = JSON::PP->new->utf8(0)->encode($x);

printf("a1:%s\n",$a);
printf("a2:%s\n",encode_utf8($a));
printf("a3:%s\n",decode_utf8($a));
printf("a4:%s\n",encode_utf8(decode_utf8($a)));

printf("b1:%s\n",$b);
printf("b2:%s\n",encode_utf8($b));
printf("b3:%s\n",decode_utf8($b));
printf("b4:%s\n",encode_utf8(decode_utf8($b)));
```

# 結果１　encode_json()を用いた場合
| 方法 |use utf8あり | use uft8なし |
| - | - | - |
| そのまま出力 | 問題なし | 文字化け |
| encode_utf8() | 文字化け | 文字化け |
| decode_utf8() | Wide character警告 | 問題なし | 
| encode_utf8(decode_utf8()) | 問題なし | 文字化け |

# 結果２　JSON::PP->new->utf8(0)->encode()を用いた場合
| 方法 |use utf8あり | use uft8なし |
| - | - | - |
| そのまま出力 | Wide character警告 | 問題なし |
| encode_utf8() | 問題なし | 文字化け |
| decode_utf8() | Wide characterエラー | Wide character警告 |
| encode_utf8(decode_utf8()) | Wide characterエラー | 問題なし |

# まとめ
　今までuse utf8;を使用し、JSON::PP->new->utf8(0)->encode()で文字列を作り、encode_utf8()で出力文字列を作っており、他の方法だとどうなるのかわからなかったので作成してみました。
　内部コード、外部コードを意識しながら正しくコーディングしたいものだと改めて実感しました。
　ありがとうございました。
Emacs 31.1で廃止になるif-let/when-letと、修正PRのお願い

Emacsをお使いの皆さんは、​`if-let`/`when-let`​マクロをご存知でしょうか？

Rustには、以下のサンプルのようにパターンマッチを利用して便利に条件分岐できる[if let](https://doc.rust-lang.org/rust-by-example/flow_control/if_let.html)構文があります。

```rust
if let Some(i) = letter {
    println!("Matched {:?}!", i);
} else {
    // Destructure failed. Change to the failure case.
    println!("Didn't match a number. Let's go with a letter!");
}
```

Emacs Lispの​​`if-let`/`when-let`​​は、Rustの​`if let`​と同じものではありませんが、束縛される値が​`nil`​でないかどうかに応じて分岐する便利なマクロでした。

```emacs-lisp
(if-let (c (get-letter-from-another-dimension))
    (format "Matched %s" c)
  "Not matched")
```

残念ながら、​`if-let`/`when-let`​​は、Emacs 31.1（2024年12月現在の最新安定バージョンは29.4、もうすぐリリースされるのが30.1です）では廃止予定となり、`if-let`/`when-let`​​を使っているとコンパイル時に以下のような警告が表示されます。

> Warning: ‘if-let’ is an obsolete macro (as of 31.1); use ‘if-let\*’ instead.

`if-let`/`when-let`​の代わりに​`if-let*`/`when-let*`​を使ってほしいとのことです。`if-let*`/`when-let*`​では、以下のように1個以上の複数のバインディングを指定することができ、すべての値が​`nil`​でない場合にのみ真と判定されます。

```emacs-lisp
(if-let* ((c1 (get-letter-from-another-dimension))
          (c2 (get-letter-from-another-dimension)))
    (format "Matched both %s and %s" c1 c2)
  "At least one is not matched")
```

`if-let`/`when-let`​を使っている既存のコードはすべて書き換えなければいけません。 以下の式をバッファ（ファイル）の先頭で評価すると、バッファ内のすべての​`if-let`/`when-let`​が​`if-let*`/`when-let*`​に書き換えられます。 `if-let`/`when-let`​を見つけたら修正PRを送りましょう。

```emacs-lisp
(while (re-search-forward (rx symbol-start (or "when-let" "if-let") symbol-end) nil t)
  (replace-match (concat (match-string 0) "*"))
  (when (looking-at (rx (+ space)))
    (goto-char (match-end 0)))
  (insert-char ?\()
  (forward-sexp)
  (insert-char ?\)))
```
無効化されたEinstein Activity Captureアカウントの確認



+ [無効化されたEinstein Activity Captureアカウントの確認について知っている人はいますか](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Yve9t)

:::note alert
The percentage of connected accounts that are disabled has exceeded your selected threshold of 20%. To review the disabled accounts or change your threshold, go to your Einstein Activity Capture settings in Setup for org ID 00D4R000001XXdV.
:::

+ [Einstein Activity Capture - どのような体験をされましたか?](https://www.reddit.com/r/salesforce/comments/180ww9d/einstein_activity_capture_what_has_been_your/?rdt=56263)

>ユーザー数は 420 人です。約 300 人のアクティブな EAC ユーザー。EAC は 180 日間電子メールを同期し、イベントを双方向で同期しますが、連絡先は同期せず、内部イベントの同期はオフになっています。

:::note alert
営業担当者が特定の顧客に電子メールを送信するたびに、EAC が見つかったすべてのレコード (ユーザーと連絡先の電子メール アドレス) にその電子メール アドレスを関連付けるため、アクティビティ メトリックが乱雑になりました。なんて面倒なことでしょう。今週はクリーンアップに取り組んでいます。他にもこれに遭遇した人はいますか?
:::


>EACは、見つかったすべてのレコード（ユーザーと連絡先の電子メールアドレス）に電子メールアドレスを関連付けているようです。

はい、同じメール アドレスを持つ重複レコード (ユーザー、連絡先、リード) がある場合、EAC は必ずしもどれを選択すればよいか分からないため、すべてに表示します。設定によっては、これが理想的ではない場合があることは承知しています。どのように動作させたいですか?

>ハイブリッド Exchange 構成の電子メール エイリアスはサポートされていません (例: john.smith@ourdomain.onmicrosoft.com )。えーと、どういうことですか? ハイブリッド Exchange 構成を採用している中規模組織は当社だけではないはずです。このため、Outlook 会議が (EAC 経由で) Salesforce にイベントではなく電子メールとして流れ込んでいるようです。これまでにこれに遭遇した人はいますか?

ハイブリッド Exchange (つまり、Exchange オンプレミスと O365 の組み合わせ) は、特に OAuth 経由で単一のサービス アカウントまたは組織全体の認証を使用する場合は、正式にはサポートされていません。ユーザー認証を使用する場合は正常に動作するはずですが、広範囲にテストされていません。

エイリアスのサポートの有無は、ハイブリッド セットアップとは無関係です。認証にはさまざまな課題があり、カレンダーの招待やメールを受信するアドレスと、それらをユーザーにマッピングできるかどうかも課題となります。

会議がメールとして同期されることはありません。カレンダー上の会議自体だけでなく、受信トレイにも招待状のメールが表示される場合があります。


>私の組織は、**電子メールがレポート可能なオブジェクトとして保存されないというレポートの問題のため**、しばらく EAC を使用した後、EAC を離れました。現在は別のツールを使用していますが、うまく機能しています... いいですか? 正直なところ、これらのツールのほとんどには何らかのギャップがあるようです。

Salesforce では EAC メールの削除は許可されていると思います。ただ、特別な手順が必要で、Salesforce がリクエストを処理するのに 7 日ほどかかるため、面倒です。詳細はこちらをご覧ください。

https://help.salesforce.com/s/articleView?id=sf.aac_data_policy_delete_activity.htm&type=5

>アクティビティ統合レポートとは何ですか?

アクティビティ ダッシュボードは、すべてのデータではないにしても、ほとんどのデータをここから取得していると思います。[セットアップ] - > [Einstein アクティビティ キャプチャ] - > [設定] - > [設定タブ] に移動して、下にスクロールし、「Activity 360 レポート」がオンになっていることを確認します。すると、いくつかのストック レポートが作成されます (表示されるまでに時間がかかる場合があります)。これらは、「Activity 360 レポート」という新しいレポート フォルダーの下にあります。そこから、これらの統合レポートをいくつか見つけることができます。これは、EAC によってキャプチャされたすべてのアクティビティです。

これには別のライセンスが必要ですか？設定に表示されません

# 廃止？

+ [Einstein Activity Capture をサービス アカウント OAuth 2.0 から組織全体の OAuth アカウントに変更しようとしています。しかし、Microsoft 管理者は、Salesforce へのグローバル アクセスを許可する組織全体の OAuth アカウントの作成を懸念しています。すでに組織全体の OAuth アカウントに移行した方はいますか? Microsoft 全体のセキュリティ問題がどのように解決されたかを提案していただけますか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KCD4F)

:::note
[EAC のサービス アカウント認証は廃止されます](https://help.salesforce.com/s/articleView?id=002420794&type=1)

2025 年 2 月 1 日をもって、この接続方法を使用したアクティビティの同期は停止します。組織レベルの認証でセキュリティ上の問題が生じたという話は聞いたことがありませんが、代わりにユーザー レベルで設定することもできます。  
:::
SAP移送関連

# 移送関連テーブル

・E070
クライアントに移送された移送番号を確認できる

・E071K
移送番号毎のカスタマイズテーブルの値を取得

・SCMP
環境間の項目ごとの値を比較
（アドレス項目などの環境ごとに自動IDが生成される項目はチェック対象外とする）

# ABAP Compare Different Systems
一例としてステージング環境と本番環境のオブジェクトコンペアーを実施する場合

■事前準備
RFC接続でステージング環境から本番環境への接続をチェック

■比較対象のオブジェクト
・PGM
・ディクショナリ
・カスタママイズ

■チェック方法
ステージング環境で以下のTr-cdから対象のオブジェクトコンペアー対象のPGMを検索
・Tr-cd：SE38
・対象のPGID(モジュール毎に検索?)
　→検索結果をDL「プログラムに差異はありません」と出力されたら問題なし


## 移送番号取得の前提
1オブジェクト1移送が基本
(1移送に複数オブジェクトを混ぜないほうがよい。理由）移送失敗の際に原因究明が困難、前提移送がある場合にコントロールできない、何を移送したのがが分りづらい）

## 移送の取り方
- カスタマイズの場合、カスタマイズを変更→保存すると、移送番号が採番される。
- アドオンテーブルの場合、SM30で一度手動で変更を加えることで、Tr-cd：XXXXで移送が確認できる。

## 移送のリリース
割愛

## インポート時間の確認
移送時に定義変更などは依存オブジェクトの再生成などが走る可能性がある。（例：アドオンテーブルに数億件のレコードが存在して、そのテーブルの特定項目の型変更の移送を充てると、1レコード毎にチェックが走り移送に時間がかかる）

Tr-cd：stms_import
で1移送に対する確認可能。

## 同一インスタンス内の移送
Tr-cd：SCC1
(例：クライアント400で開発、クライアント410/420への移送するケース）

## オブジェクトチェック
開発機、検証機、ステージング機、本番機の各環境のオブジェクトに対する移送状況をチェックする。

チェック対象のオブジェクトは、PGM、クラス、インターフェース、構造 etc
【PowerAutomate】クラウドフローで定期的にフォルダ内のファイルを削除する方法

## 定期的にフォルダ内のファイルを削除する方法
<iframe width="560" height="400" src="https://www.youtube.com/embed/Gys33ti8Bbo?si=r3YX4Uot00jGmhKk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
動画でも解説しています。

## 作成開始
PowerAutomateのサイトで「作成」➤「スケジュール済みクラウドフロー」を選択します。
フロー名と開始日・繰り返し間隔を設定し、作成をクリックします。

## トリガーの設定
Recurrenceというトリガーが設定されたフロー編集画面になります。
初めに設定した内容で作成されていますが、時間は世界標準時に変わっています。
タイムゾーンの設定を＋9時間の「大阪・札幌・東京」に設定して、開始日時を設定します。
このままだと、開始された日時から○○毎に実行されますので、決まった時間に動作させたい場合は「At These Hours」（時）と「At These Minutes」(分)を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/60124e9d-d13d-e6c3-3df9-58568e27da5a.png)
下のプレビューで実行される頻度と時間が分かるので、こちらを確認しながら設定すると良いでしょう。

## フォルダーの一覧アクションの追加
Recurrenceの下にアクションを追加します。
今回はSharePointのフォルダ内を対象とします。
「アクションの追加」➤「SharePoint」➤「フォルダーの一覧」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/4d96983d-c869-0971-5e0f-52e39680dec9.png)


設定で「サイトのアドレス」に「SharePointサイトのアドレス」。「ファイル識別子」に「対象となるフォルダ」を設定します。

これで、対象フォルダ内に保存されたフォルダとファイルの一覧を取得することができます。

## ファイルの削除アクションの追加
「アクションの追加」➤「Sharepoint」➤「ファイルの削除」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/12e35ff0-512c-b58a-f4d2-888c87fb4165.png)
設定で「サイトのアドレス」にさきほどと同じく「SharePointサイトのアドレス」を設定。
「ファイル識別子」には、⚡から動的なコンテンツの「フォルダーの一覧」の中の「Id」を選択します。

フローを確認すると、自動的に「For each」（繰り返し）アクションが追加されています。
これでフォルダ内のファイルを全て繰り返し処理してくれます。

## 定期的に削除するだけならこれで完成
指定したフォルダ内のファイルを定期的に削除するフローはこれで完成です。
保存してテストしてみると、フォルダ内のファイルが削除されていいると思います。
今後はフローをオンにしておけば、このフォルダ内のファイルは指定した時間に削除されます。

## 更新日時が古いファイルだけ削除したい
例えば、自動保存されるファイルがあって、１か月は残しておきたいけど、それ以上古いファイルは削除したい。ということがあると思います。

## 条件アクションの追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/05edfc17-ddac-5aed-676b-eb9015a1a60c.png)

先ほどの「ファイルの削除」アクションの前(For eachの中)に、「アクションの追加」➤「組み込み」➤「Control」➤「条件」で、「条件」アクションを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/021b4ae9-34ee-6941-17ae-930fe799efd1.png)
設定で、左の値に⚡から「フォルダーの一覧」の中の「LastModified」(最終更新日時)を選択します。
真ん中は論理式となりますので、「is less than」(より小さい)を選択します。
右クリックして「日本語に翻訳」すると、どれを選んだらいいか分かりやすくなりますが、式も微妙に日本語化されてしまいますので、一時的な確認のみに留めてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/8779a769-4add-bf47-da96-67c754ea2c0a.png)
右側の値には「fx」から「式」を入力します。
```
addDays(utcNow(),-30)
```
utcNow関数で取得した現在日時に、addDays関数で‐30することで、30日前の日時を取得することができます。
これで、最終更新日時が30日前の日時より前なら、TrueそうでなければFalseという「条件」の設定ができました。

これで、Sharepointの指定したフォルダ内のファイルで更新日時が古いものを定期的に削除するフローが完成しました。


最後に、「ファイルの削除」アクションを「条件」の「True」に入れてください。

## 最終更新日時について

1点注意なのですが、SharePoint上で表示される「更新日時」とPowerAutomateで取得される「LastModified」は共にファイルの最終更新日時を表示するのですが、厳密には違いがあります。

たとえば、ファイルを別のフォルダに移動した場合、SharePointでは「更新日時」は変わりありませんが、PowerAutomateで取得したファイルの「LastModified」は、移動した日時になります。

古いファイルと新しいファイルが混在するフォルダの名前を変更すると、内部のファイルの「LastModified」も変更した日時になりますが、SharePoint上の「更新日時」はそのままとなります。

SharePointの更新日時はあくまでファイルの編集日時だと考えると良いかもしれません。

以上
Functions Worker 2.0.0 でユーザーシークレット

# やりたいこと

.NET 9 のタイミングでリリースされた Microsoft.Azure.Functions.Worker 2.0.0 で `FunctionsApplication` が追加され、`Program.cs` の書き方が少し変わりました。
ローカルで実行する際のシークレットはこれまでユーザーシークレットで管理していたので、同じようにできる方法を確認します。

# 環境

- Visual Studio Community 2022 Version 17.12.3
- Azure Functions .NET 9 Isolatad

# やり方

## Program.cs のテンプレート

Visual Studio で Azure Functions プロジェクトを作成したときのテンプレートがこちら。

```csharp
using Microsoft.Azure.Functions.Worker.Builder;
using Microsoft.Extensions.Hosting;

var builder = FunctionsApplication.CreateBuilder(args);

builder.ConfigureFunctionsWebApplication();

// Application Insights isn't enabled by default. See https://aka.ms/AAt8mw4.
// builder.Services
//     .AddApplicationInsightsTelemetryWorkerService()
//     .ConfigureFunctionsApplicationInsights();

builder.Build().Run();

```


以前の `HostBuilder` を使う方式よりも ASP.NET Core のように簡潔に記述できます。
コメントアウトされている部分は Application Insights の設定部分なので、今回は説明を割愛します。

## ユーザーシークレットファイルの追加

1. プロジェクトを右クリック
1. ユーザーシークレットの管理(G)
1. `secrets.json` にシークレットを追加

```json:secrets.json
{
  "Message": "Hello World"
}
```

## ユーザーシークレットをプログラムに追加

`Program.cs` に追加して先ほどのユーザーシークレットを読み込み、コンソールに出力してみます。

```diff_c_sharp: Program.cs
using Microsoft.Azure.Functions.Worker.Builder;
+ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;

var builder = FunctionsApplication.CreateBuilder(args);

builder.ConfigureFunctionsWebApplication();
+
+ builder.Configuration.AddUserSecrets(typeof(Program).Assembly, optional: true, reloadOnChange: false);
+ string message = builder.Configuration["Message"] ?? "failed";
+ Console.WriteLine(message);

// Application Insights isn't enabled by default. See https://aka.ms/AAt8mw4.
// builder.Services
//     .AddApplicationInsightsTelemetryWorkerService()
//     .ConfigureFunctionsApplicationInsights();

builder.Build().Run();
```

## 動作確認

プロジェクトを実行します。

```
[2024-12-07T02:17:10.101Z] Azure Functions .NET Worker (PID: 25428) initialized in debug mode. Waiting for debugger to attach...
[2024-12-07T02:17:10.103Z] Hello World
```

ユーザーシークレットから文字列を読み込んで表示できました。

# まとめ

非常に簡単に Azure Functions へユーザーシークレットを追加することができました。いい感じです。

# 参考

https://blog.shibayan.jp/entry/20241118/1731917462
tarfs(4) たぁなんですか？

# 新機能 tarfs

単にタイトルが言いたかっただけだろうという話もありますが......。

FreeBSD 14 からの新機能として tarfs(4) が追加されました。

https://man.freebsd.org/cgi/man.cgi?query=tarfs&apropos=0&sektion=0&manpath=FreeBSD+14.0-RELEASE&arch=default&format=html

名前から推察できるとおり、tar ファイルをファイルシステムとして mount する機能です。リードオンリーのみ対応で書き込みはできません。

UFSなどでフォーマットしたディスクイメージは FreeBSD 以外のシステムで中身を見たり、ファイルを追加/削除したりするのに、仮想イメージとして認識させてファイルシステムをマウントするといったことが必要になり、面倒になりがちです。
tar 形式ならば、アーカイブファイルの操作として様々な環境で操作できるので、実行環境と異なる環境でファイルシステムを操作したい組み込み系などで便利かもしれません。

tar はバックアップやファイル配布などで、UNIX系OSを使っている人は息を吸うように当たり前に使っているアーカイブファイル形式でお馴染みだと思います。
ただ、tar は無圧縮で複数ファイルをまとめるファイル形式です。そのままではファイルサイズがでかくなってしまうので、通常は圧縮形式と組み合わせて tar.gz や tar.xz  というフォーマットで流通していることが多いと思います。しかし tarfs は tar.gz や tar.xz なファイルは扱えません。基本は無圧縮 tar での利用となります。

では全く圧縮形式が使えないかというとそうではなくて、現在は zstd 形式のみですが圧縮形式も対応しています。
zstd は、Meta 社の Yann Collet さんが開発した、圧縮と展開が高速なことが特徴の圧縮/伸長アルゴリズムです。suffix(いわゆる拡張子)は.zst です。

# 実際の利用

実際の `mount` / `umount` は

```
# mount -t tarfs archive.tar /mnt (無圧縮マウント)
# umount /mnt (アンマウント)
# zstd -c archive.tar > archive.tar.zst (zstd 圧縮)
# mount -t tarfs archive.tar.zst /mnt (zstd 圧縮をマウント)
# umount /mnt (アンマウント)
```

という感じ。 `-t` オプションで tarfs を指定して、マウント元として tarボールファイルを指定する以外は特に通常と変わりません。マウントにはカーネルモジュール tarfs.ko のロードが必要ですが、 `mount -t tarfs 〜` を実行すると自動でロードされるので、意識する必要はありません。
ちなみにいったんmount したtar ファイルに `tar -r` でファイルを追加しても、tarfs 上では mount 時のファイルしか見えないようです。そもそも mount 中にファイルをいじってもいいかは不明ですし、mount 中はそっとしておいたほうがよさそうです。

download.freebsd.org にある 14.2-stable の base.txz を /mnt へマウントして ls すると

```
$ curl https://download.freebsd.org/snapshots/amd64/14.2-STABLE/base.txz | xzcat | zstd -9c > base.tar.zst
$ sudo mount -t tarfs base.tar.zst /mnt
$ ls /mnt
bin		etc		mnt		root		usr
boot		lib		net		sbin		var
COPYRIGHT	libexec		proc		sys
dev		media		rescue		tmp

```

大きめのファイルだと mount がちょっと時間がかかる感じです。

# 企業スポンサーで追加された機能

tarfs は個人が面白そうだから作ってみました系の機能ではなく、Juniper Networks, Inc.と Klara, Inc. がスポンサーとして追加された機能です。
開発者も Juniper Networks, Inc.の Stephen J. Kiernan さんと、     Klara, Inc. の Dag-Erling Smørgrav さんです。

機能追加時のソースレビュー
https://reviews.freebsd.org/D37753

これらの企業で具体的にどういう用途でこの機能を使っているのかは不明ですが、企業で必要な機能として、メンテされ続けていくことは期待できそうです。
AWSルートアカウントのMFA突破出来なくなった場合の解決方法

# ■概要

MFA大事なんですが、行き違いがあってMFA突破できなくなってしまいました…
ここではAWSの人にルートアカウントのMFA設定を削除してもらう方法を記載していきます。


# ■解決手順  

まず通常通りルートログイン実施して、問題のMFAの所で「MFAのトラブルシューティング」を押下


![20241207103431.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/8915d761-7f3a-2ad4-7fe2-4565b847c74a.png)



今回はどんなMFAを設定しているかすら不明だったので、「別の認証要素を使用したサインイン」に進みます。

![20241207103447.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/8645c7fe-58a4-4fd9-e28d-2b371a7f297a.png)


まず検証Eメールを受信します。
届いたメール本文中にリンクがあるので、踏みます。

![20241207103505.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/b730b3fb-2ff2-80d1-1c5c-bdeb1690416d.png)


リンクを踏むと次の電話認証のフェースに進みます。

![20241207103637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/daac18e6-a428-308f-ae64-0bca1170a73e.png)


恐らく電話システムの関係で、エラーによりここから進めませんでした。
「AWS サポートにお問い合わせください」がリンクになっているので、ここからサポートへ問い合わせができます。

![20241207103953.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/3a50faa7-36e7-0584-1a5c-15e0eb264ab5.png)


「まだ問題が残っているので、AWS サポートに連絡したい。」を押下する事で、サポートへ連絡ができます

![20241207104011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/70227f9e-7d9b-025f-a589-0916c5ef3cb1.png)


各項目埋めていきましょう。

![20241207104051.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954355/9d4f2743-85f7-30d5-679e-79976f32ead0.png)

ここまで実施すると、後はAWSからの電話連絡待ちになります。

# ■電話連絡の内容について

まず第一報ですが、1時間くらいで電話来ました。（基本的にかなり早めに連絡いただけるようです）
機械ではなく、人が対応してくれます。
そして話す内容は基本的に本人確認を目的としたものかと思われます。

具体的に聞かれる事としては、

:::note info
### ・ルートメールアドレス
→ 聞かれるので読み上げる必要があります
:::

:::note info
### ・ワンタイムパスワード
→ 電話中にルートアドレスへワンタイムパスワード入りのメールアドレスが送信されます。これも読み上げます
:::

以上だったかなと思います。

# ■その他注意点  

:::note warn
・AWSアカウントに設定されている電話番号で対応する必要がある。
→ 代替電話番号で受ける事も可能ですが、どちらにしても登録電話番号での確認が必要のようです…
:::

# ■以上です。

MFA紛失には仕方ないケースもありますよね…
Webエンジニアのための最低限知っておきたいXcode

## はじめに
私はWebエンジニアとして働いているのですが、ある日WebViewの修正を依頼され、その時にXcodeを利用すると、あら大変、全然使い方がわかりません。
どうやって指定のOSに変更するんだ？ビルド結果どこに配置されるんだ？などわからないことだらけでした。
なんとか問題は解決したのですが、このまま知らないままではいけないと思うのでWebエンジニアが最低限知っておきたいXcodeの知識をまとめようと思います。

## Xcodeとは
Appleプラットフォーム向けのアプリを開発、テスト、配信するツール

## Xcodeでできること
- エディタ
- インターフェースビルダー
- デバッガ
- コンパイラ
- iOSシミュレータの起動

## WebViewとは
モバイルアプリ上でWebサイトを表示する機能

### Swiftでの実現方法
Swiftでwebviewを実現する方法は3種類あります。
- WKWebView API
- SFSafariViewController API
- UIWebView API

一番最後のUIWebView APIは現在非推奨となっています。
WKWebView APIとSFSafariViewController APIを比較する記事があったため、興味のある方はぜひご覧ください。

https://developer.apple.com/jp/news/?id=trjs0tcd

## 確認方法
### Previewを利用する場合
#Previewを利用することでプレビュー表示をすることが可能となる。

https://developer.apple.com/documentation/xcode/previewing-your-apps-interface-in-xcode

### Simulatorを利用する場合
1. 利用するSimulatorを選択する
2. 右上の▶️ボタンを押してビルドする
3. Macbook内でiOSを仮想的に確認する

![スクリーンショット 2024-11-09 11.14.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087368/0bf8e7d5-b6ab-1576-b791-6dbe04e89766.png)

### 実機を利用する場合
1. 端末とMacbookを接続する
2. 接続した端末を選択する
3. 右上の▶️ボタンを押してビルドする
4. 接続した端末でアプリが起動するため、確認する

![スクリーンショット 2024-11-09 21.51.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087368/94826885-381c-9063-2919-5220f9382f21.png)

## ビルド方法
1. ビルド対象のデバイスを選択する
2. Product > Buildを押下する

https://developer.apple.com/documentation/xcode/building-and-running-an-app

## 問題解決時に詰まったところ

### OSの変え方がわからん
`Manage Run Destinations > Simulators > 左下の+ボタン > 利用したいOS`を選択

### 古いOSが表示されない

下限のOSが指定されているので、それを変更する必要がある
`Project > General > Minimum Deployments`

![スクリーンショット 2024-11-09 23.48.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087368/4106eb69-448f-68ec-f8d0-56c3cd783fc5.png)

### Networkどうやって見ればいいんや
simulatorが起動している状態でsafariの開発タブから確認できる

### 最新のOSバージョンが表示されない
基本的にXcodeで利用できるOSはXCodeのバージョンによって変わってくるため、最新のOSで試したい場合はXcodeをアップデートする必要がある

## 参考

https://udemy.benesse.co.jp/development/app/use-xcode-12.html

https://contents.digitallab.jp/webview_app.html

https://ramble.impl.co.jp/2655/