OmniAICreator/Qiita-1.07M huggingface dataset:
個人的備忘録：AWS S3にNext.jsをアップロードして公開するコマンドを整理してみた

## はじめに

Next.jsで生成された静的サイトをAWS S3にアップロードし、CloudFrontなどを通じて公開するケースはよくあります。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

今回紹介するのは、`aws s3 sync` コマンドを使ってファイルをアップロードする際の注意点と、パブリックアクセスの許可設定についてです。

---

## 書こうと思ったきっかけ

この内容は、あくまで**個人的な備忘録**としてまとめたものです。
ハッカソンでS3にNext.jsをデプロイする機会があり、手順や注意点を整理しておきたいと思い、記事にすることにしました。

---

## バケットポリシーによる公開設定

まず、アップロードは以下のようにシンプルに行います。

```bash
aws s3 sync ./out s3://honda-ehime-dev
```

✅ `--acl public-read` は**付けない**でOKです！

### 注意点
このままだと、S3バケット側で以下のような制限が有効になっている場合、アップロードしてもファイルは外部からアクセスできません：
- ACL無効化（バケットレベルでの設定）
- パブリックアクセス制限が有効

そのため、バケットポリシーで明示的に読み取り権限を与える必要があります。

### バケットポリシーの例
AWSコンソールで「バケット」→「アクセス許可」→「バケットポリシー」と進み、以下のようなJSONを貼り付けて保存します：

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::honda-ehime-dev/*"
    }
  ]
}
```

✅ これにより、**誰でもこのバケット内のファイルにHTTP経由でアクセスできるようになります。**

---

## まとめ

| 手順 | 内容 |
|------|------|
| ①    | `aws s3 sync` コマンドを `--acl` なしで実行する |
| ②    | バケットポリシーでパブリックアクセスを許可する |

---

## やるコマンドまとめ

```bash
aws s3 sync ./out s3://honda-ehime-dev
```
WSL上のKali Linuxのユーザパスワード復旧

# サマリ
WSL上のKali Linuxのユーザパスワード復旧手順を記録しました。
（今回はKali Linuxですが、WSL上のディストリビューションのユーザパスワードであれば共通かと思います）

# 背景
久々にKali Linuxでも触ってみようと思ってGUI起動しようとしたらパスワード入力で詰まってしまいました。（おい
PC自体がKali Linuxでの動作であればGRUBというブートローダーから変更できるようなのですが、今回はWindowsのWSL上で動作するKali Linuxのため、困った…ということでコマンドでの変更手順を記録しました。
（他にうまい手順があればご教示ください。。

# ゴール
WSL上で動作するKali Linuxのユーザパスワードを変更し、変更後の確認としてGUIを無事起動する

# 対象読者
- Kali Linuxのルートパスワードを忘れてしまった方
- 自分（備忘のため）

# 環境
- ホストOS：Window10 Home
- WSLバージョン：2.4.13.0
- Kali Linux OS：5.15.167.4

# 手順
以下の手順で進めていきます。
ローカルPCでのコマンドプロンプトでの作業が基本になります。

### [任意]WSL上のディストリビューション一覧確認

必須作業ではないのですが、まずはWSL上にほかにディストリビューションが入っていないか、また今回のユーザパスワード変更対象のKali Linuxが入っているか念のため確認します。

ローカルPCでコマンドプロンプトを起動します。

そして、以下のコマンドを実施。

`wsl -l -v`

![capcha.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335813/e03f65fb-fa60-4c35-909d-c6e8efcee52c.png)

Kali Linux以外にもいくつかありますね（いつの間に…
すべてWSL2で動作するようになっています。

### [必須]ルートユーザで対象OS（Kali Linux）を起動

今回はKali Linuxのユーザパスワードを変更したいので、
Kali Linuxをルートユーザで起動します。
以下のコマンドをコマンドプロンプト上で実行します。

`wsl -d kali-linux -u root`

これで無事入れました。

![cap2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335813/dedd9ad5-f279-443c-8369-5f5f274c5022.png)


### [任意]ユーザ一覧の確認

変更したいユーザはわかっていますが、一応ユーザ一覧を確認します。

`ls /home`

![cap3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335813/14728b08-d33a-4c33-8a75-5125f7b4333c.png)

今回はユーザ名kaliだけですね。

### [必須]ユーザパスワードの変更

以下のコマンドを実行します。

`passwd ユーザ名`

![cap4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335813/24fad05e-d78d-4314-afe1-832cc362b57a.png)

新しいパスワードを二回入力し、変更完了です。

### [参考]パスワード変更後の入力確認

Kali Linuxを起動し、
当初やろうとしていた、GUIの起動も…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335813/2f17314d-f628-4484-b6aa-5838e0545c38.png)


無事いけました。

# 結果
無事復旧できました（ほっ

# まとめ
忘れるほど放置するなよという点と、そもそもパスワードを忘れないようにしておけよというのはさておき、何とか復旧できてよかったです。
ようやくGUIでも使える準備ができたので今後またいろいろ触って学習していきたいと思います。

# 余談
過去、自分がWindowsKali Linuxを導入した時に記事は以下です。

https://qiita.com/san_bay3/items/9c0c0f4a250e4fa73ede#wsl2%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
個人的備忘録：ECS Fargateで発生した「ResourceInitializationError: unable to pull secrets or registry auth」の原因

## はじめに
AWS ECS Fargateを使ってタスク起動をしようとした際に、ECRからイメージをプルしようとして失敗する「ResourceInitializationError」が発生しました。

このエラーは、ECSタスクからECRへの通信に関する設定不備が原因となることが多く、解決のために細かいチェックが必要となります。

## 書こうと思ったきっかけ
実際にFargateの環境で、タスク起動時にECRからイメージをpullしようとして失敗した経験から、このエラーの原因分析と対処法をしっかり整理しておきたいと思い、記事を作成しました。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

同じことを繰り返さないため、また同じ問題に遭遇した方の参考になればと考えています。

## 発生したエラー

```
ResourceInitializationError: unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. Check your task network configuration. RequestError: send request failed caused by: Post "https://api.ecr.ap-northeast-1.amazonaws.com/": dial tcp xxx.xxx.xxx.xxx:443: i/o timeout
```

## エラー内容を分析

- `unable to pull secrets or registry auth`
  - ECRからのイメージ取得に失敗
- `connection issue between the task and Amazon ECR`
  - ECSタスクからECRへの通信失敗
- `i/o timeout`
  - TCP接続が途中でタイムアウト

## 原因候補

| パターン | 内容 | 対応例 |
|:---|:---|:---|
| タスク実行ロールIAM許可なし | ECR pull権限がない | `AmazonECSTaskExecutionRolePolicy` or `AmazonEC2ContainerRegistryReadOnly`を付与 |
| ネットワーク設定ミス | NAT Gatewayなし、Public IPなし | NAT Gatewayを設置 or Public Subnetから起動 |
| セキュリティグループルールの不備 | Outboundで443番を許可していない | Outboundを0.0.0.0/0に443を許可 |
| VPCエンドポイントなし | Private SubnetからECRに直接できない | `ecr.api` と `ecr.dkr`をVPC Endpointで設定 |

## 確認したタスク定義

- `executionRoleArn`も`taskRoleArn`も正しく設定されている
- `networkMode: awsvpc`も正しい
- `requiresCompatibilities: ["FARGATE"]`も問題なし
- ログの設定(`awslogs`) も正しい

## まとめ

ECS Fargateを使う際に発生するECRからのイメージpull失敗は、IAM許可やネットワーク設定の不備が原因となることが多いです。

:::note warn
**「タスク起動でどこまで通信できているか」を通信経路に次々と調査することで、原因特定はどうにも解決できるかと思います...！**
:::

同じ現象で困っている方の参考になれば幸いです！
個人的備忘録：Next.jsで <Image> タグを使って見出しを画像表示する方法を整理してみた

## はじめに

Next.jsでWebアプリケーションを開発する際、テキストでタイトルを表示する代わりに、画像を使用してブランディングを強化したいケースがあります。

:::note info
**特に、アプリのロゴを表示することで、見た目の統一感や親しみやすさが向上します。**
:::

本記事では、Next.jsの`<Image>`コンポーネントを使って、テキストタイトルを画像に置き換える方法と注意点についてまとめます。

***個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。***

---

## 書こうと思ったきっかけ

もともとは以下のように、タイトル部分をテキストで表示していました：

```tsx
<h1 className="text-3xl font-bold bg-gray-200 text-black px-10 py-4 rounded">
  さぶちゃん日記
</h1>
```

これをロゴ画像に差し替えたいと思い、`<Image>`タグに直接ローカルファイルの絶対パスを指定しました。

```tsx
<Image
  src="/Users/hondaakiratarou/Desktop/.../sabuchan_logo.png"
  alt="さぶちゃん日記"
  width={300}
  height={100}
  className="rounded"
/>
```

しかしこれはNext.jsでは機能しません。
Next.jsの`<Image>`コンポーネントでは、絶対パスの画像（ローカルPC上のパス）は表示されませんでした...。

そのため、正しく画像を表示させるには、以下のように対応する必要があります。

### 正しい対応手順

1. ロゴ画像（例：`sabuchan_logo.png`）を、プロジェクトの`/public`ディレクトリに配置します。

```
frontend/
├── public/
│   └── sabuchan_logo.png
├── src/
│   └── ...
```

2. JSX内のコードを次のように変更します：

```tsx
<Image
  src="/sabuchan_logo.png"
  alt="さぶちゃん日記"
  width={300}
  height={100}
  className="rounded"
/>
```

これで、ローカル画像が正しく読み込まれ、ブラウザに表示されます。

**実際の画面**

![Screenshot 2025-04-29 at 19.33.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/97900e66-bc05-4e18-af54-3dbf3baa9810.png)

---

## まとめ

- Next.jsの`<Image>`では、ローカルPCの絶対パスは使えない。
- 表示したい画像は、プロジェクトの`/public`ディレクトリに置く。
- `src`には"/public"以下のパスを記載する。
- ブランディングを強化するために、ロゴ画像をタイトルに使うのは効果的。

Next.jsの画像取り扱いのルールを理解しておけば、より洗練されたUI作成に役立つと思います...！
高速シリアル通信

# 高速シリアル通信
高速シリアル通信の解説
https://www.ni.com/ja/shop/electronic-test-instrumentation/digital-instruments/high-speed-serial-explained.html

## 物理層
### CML (Current-Mode Logic)
### ECL (Emitter-Coupled Logic)
### LVDS (Low-Voltage Differential Signaling)
### SERDES

### MGT(multi Gigabit Tranceiver)
### ISI(Intersymbol interference)

## Datalink 層
### Aurora

## Upper層

### CRC
### FEC

# 計測器
PXI高速シリアル計測器の概要
https://www.ni.com/ja/shop/electronic-test-instrumentation/digital-instruments/what-is-pxi-high-speed-serial/an-introduction-to-ni-high-speed-serial-instruments.html

PXI高速シリアル計測器とは
https://www.ni.com/ja/shop/electronic-test-instrumentation/digital-instruments/what-is-pxi-high-speed-serial.html

# Ref
高速uartシリアル通信で、Stepper-motor (28BYJ-48) を動かす
https://qiita.com/retro_C18_4B/items/6c5b687647e255124cd7

Seeeduino XIAOでPCと爆速シリアル通信
https://qiita.com/ktetsuo/items/21b7ecfa118097ba4af1

C++を使ったシリアル通信で、他のデバイスとバイナリデータを高速・安全・簡単にやり取りしたい【COBS/CRC8】

## self
車載ネットワークの高速化
https://qiita.com/kaizen_nagoya/items/a8cee76395d7d6801f2e
【Flask】可変QRコード管理「QRab」を個人開発した話


**はじめまして、Lucaです。今回が初めての投稿になります。
記念すべき最初の記事として、先日個人開発でリリースしたWebアプリケーション「QRab (クラブ)」についてご紹介させてください。**

今回は、私が個人開発でリリースしたWebアプリケーション「QRab (クラブ)」についてご紹介させてください。企画から設計、開発、そしてデプロイまで全て一人で行った、初めての本格的な開発プロジェクトです。
`Flask`という`Python`のフレームワークを学び始めたアウトプットとして、実用的なものを作ることを目指しました。

## QRabってどんなアプリ？

一言でいうと、「後からリンク先を変えられるQRコード」を作成・管理できるツールです。
お店のPOP、イベントのチラシ、名刺、商品のパッケージなど、一度印刷してしまうと内容変更が難しい場所に貼るQRコード。`QRab`を使えば、QRコード自体はそのままに、管理画面からリンク先のURLをいつでも変更できます。
「キャンペーンの告知ページURLが変わったけど、もう印刷しちゃった…」
「ブログの最新記事にリンクさせたいけど、記事が増えるたびQRコードを作り直すのは面倒…」
そんな経験はありませんか？ `QRab`は、こういった課題を解決するために生まれました。

`QRab`はこちらからアクセスできます！
→ [https://q-rab.com/](https://q-rab.com/)

### QRabでできること（主な機能）:

-   **可変QRコード生成**: リンク先URLを指定して、変更可能なQRコードを簡単に作れます。
-   **リンク先変更**: 生成済みのQRコードに紐づくURLを、管理画面からいつでも最新の情報に更新できます。
-   **スキャン回数集計**: 作成したQRコードが何回スキャンされたかを確認できます。（現在は合計スキャン数のみですが、今後のアップデートで詳細化予定です！）
-   **デザインカスタマイズ**: QRコードの「色」や「背景色」を、ある程度調整できます。

QRabの基本的な使い方をこちらの短い動画でもご確認いただけます。ぜひご覧ください！→ https://youtu.be/91aDhtfp_rw

## なぜ作ったのか？開発の動機

普段の仕事で「一度作ったQRコードのリンク先を変えたい」というニーズを感じることが多々ありました。特にグラフィック関連や店舗運営に携わる方なら共感いただけるかもしれません。
この具体的な課題を解決できるアプリケーションを、`Flask`学習のテーマに選んだのが開発のスタート地点です。

## 使用した技術スタック

今回の開発では、主に以下の技術を使用しました。

-   **バックエンド**: `Flask` (`Python`) - 軽量で柔軟なフレームワークとして、個人開発に適していると感じました。
-   **データベース**: `SQLite` - セットアップが容易で、小規模アプリケーションには十分でした。
-   **QRコード生成**: `qrcode[pil]` (`Python` Library) - `Python`でQRコードを生成する標準的なライブラリです。
-   **フロントエンド**: Vanilla `JavaScript` + `TailwindCSS` - 複雑なフレームワークを使わず、シンプルに実装しました。
-   **インフラ**: `AWS` (`EC2`, `IAM`, `Route 53`) - 初めての`AWS`でのデプロイに挑戦しました。

## 開発で一番苦労した話 〜SVG形式での色指定との格闘〜

開発中にいくつか課題に直面しましたが、特に印象に残っているのが`SVG`形式でのQRコードの色指定です。
`qrcode[pil]`ライブラリは、`PNG`や`JPEG`なら簡単に色指定ができるのですが、`SVG`で出力するとどうしてもデフォルトの白黒になってしまう問題にハマりました。ライブラリのドキュメントを読み込み、様々な方法を試しても、標準機能だけでは`SVG`の色を直接指定するのが難しいことが判明。
外部ライブラリ (`cairosvg`) の利用も検討しましたが、今度は環境依存の問題に遭遇してしまいました。
最終的に、`qrcode`ライブラリが生成した`SVG`データ（`XML`テキスト）を`Python`で直接文字列操作し、`CSS`スタイルを`<path>`要素に埋め込むという、少し泥臭いですが確実に色を指定できるワークアラウンドで解決しました。
この経験を通じて、ライブラリの仕様や限界を理解すること、そして標準的な方法が使えない場合に別の角度から問題解決を試みる「ワークアラウンド」の重要性を学びました。また、新しい技術（`AWS`）をゼロから調べて習得していくプロセスも大変でしたが、良い経験になりました。

## 開発で工夫した点・学び

開発全般で、AI（`Gemini`）を積極的に活用したことが大きな工夫点です。アイデア出しから技術選定、デバッグ、デプロイ手順の調査まで、一人開発の強力な相棒となってくれました。
技術的な学びとしては、前述の`SVG`色指定の件や`AWS`デプロイを通じて、ライブラリの深い理解、ワークアラウンド、環境依存性、そして新しい技術を学ぶ過程を体感できたことです。

## 今後の展望

`QRab`はまだ生まれたばかりですが、今後も継続的に開発を進めていきたいです。特に、スキャン回数集計機能をもっと詳細に分析できるよう強化することを考えています。

## 最後に：ぜひ「QRab」を試してみてください！

ここまで読んでいただき、ありがとうございます！
「QRab」は、シンプルながら可変QRコードが必要な方の役に立てるアプリだと思っています。ぜひ一度アクセスして、実際にQRコードを作成・管理してみてください。
`QRab`はこちらからアクセスできます！
→ [https://q-rab.com/](https://q-rab.com/)
使ってみた感想や、「こんな機能があったら便利なのに」といったフィードバックをいただけると、今後の開発の大きな励みになります！コメントやアプリ内のお問い合わせからお気軽にお寄せください。

**【開発の応援をお願いします】**
`QRab`は個人開発・個人運営です。もし「便利だな」「応援したいな」と感じていただけましたら、クリエイター支援プラットフォーム「`ofuse`」を通じてご支援いただけますと大変励みになります。
→ [https://ofuse.me/ac82b3b0](https://ofuse.me/ac82b3b0)
この記事が、個人開発や`Flask`学習の参考になれば幸いです。これからも`QRab`をどうぞよろしくお願いいたします！
お試しで始めた社内勉強会が意外に盛り上がってて楽しい話

# 背景
- 課題感「日々のMTGとタスクに追われ、個人の学びがチームに伝わりにくい」
- 15分 x 2 の軽めな社内ナレッジ共有・勉強会を試験的に始めてみました

# やってみていること
- 頻度 : 週1回・金曜夕方
  - （業務が落ち着く時間帯、出社日なのでもう後、これだけやれば帰れるみたいなゆるい状態で開催）
- 形式 : 15分/1人 x 2の30分
- テーマ: 自由
- 資料: 日々撮り溜めたNotionのドキュメントとか、なんでもOK
- その他: 業務に支障が出ないように、このために資料は用意しなくて OK

# 効果
- 当初は、業務上のナレッジシェアを想定していたのですが、蓋を開けてみると結構幅広い内容になりました
  - GASを使った自由研究
  - Kaggleの話
  - ドキュメントライティングの話
  - etc
- メンバーからは、**未知の領域だったが各人が魅力的に語る点がとても良い**、みたいな感じで好評でした

# 所感
- 今更ながら、アウトプットという文化って良いなと思いました
- まだ数回しか開催してないですが、メンバー全員から好評だったので、忙しい時こそこういった取り組みができると良いのかなと思いました
数学　プログラマの出発点の一つとして

プログラマには、いくつもの入り口がある。

# 音楽
音楽からプログラムに進むことを一番勧めてきた。

音楽をプログラムするには、時間と周波数、波形について慣れ親しんでいればよい。
音を耳で聞いてもいいし、波形として画面に表示してもいい。

プログラムは音楽(1)だ (A program is a music.) 仮説(54)　https://qiita.com/kaizen_nagoya/items/33c9f33581e6886f8ad8

# 遊興競技
ゲームは、プログラマへの一番の近道らしい。

使うよりも、作るほうがずっと楽しいから。

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識,
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

# 言語処理
日本語でも、英語でも、自然言語処理が、プログラマの出発点の一つ。

編集器(editor)の移植、機械翻訳ソフト、日本語フォントなど、プログラマの入り口としてはいい感じ。

日本語（２）文字鏡フォント
https://qiita.com/kaizen_nagoya/items/64c2ff25271ea8ebf2b0

## 英語
国際規格になっているプログラミング言語のほとんどが英単語から鳴っている。
COBOLのように、英語がわかれば、勉強しなくてもプログラムが書けるという考え方の言語もある。

プログラマの英語（C言語編）最初の80単語
https://qiita.com/kaizen_nagoya/items/701af188ef62a5b254cd
# 数学
電気工学科の卒業研究が、
連立微分方程式のPade近似だった。
FORTRANで、当時の最速、最小ライブラリを書いた気がする。

誤差の評価はむつかしい。
全数検査プログラムを書いて、全数検査をしたこともある。

連立微分方程式のPade近似と、Cコンパイラとモデルに基づく設計
https://qiita.com/kaizen_nagoya/items/5e50b3c9c0004fe92bd9

## 統計・確率
R, Pythonなど、統計・確率のライブラリが揃っているプログラミング言語は便利だ。
機械学習の基本も統計と確率。

生命現象、社会現象も、統計と確率模型を駆使する。

「伏見康治 確率論及統計論」輪講
https://qiita.com/kaizen_nagoya/items/89d0a91a56d33529e85c

# まとめに代えて
プログラマの出発点は、プログラミング言語でなくてもよいことがわかるかもしれない。
ある問題の統計処理、確率模型の記述をすれば、プログラミング言語は自動生成してくれるはず。
プログラミング言語から教える教育はどうよってなる。

最初に覚えるプログラミング言語は何がいいですか？ 
https://qiita.com/kaizen_nagoya/items/590704e76e287707637b

プログラミング言語はおぼえなくても、自動生成すればよい。
コンパイルすれば、コンパイラがコンパイルエラーの治し方を教えてくれるかもしれない。

C言語を習得する３つの方法
https://qiita.com/kaizen_nagoya/items/84cab0888c193bba429b

C言語(C++)が必要な人と必要ない人
https://qiita.com/kaizen_nagoya/items/2afe9e846b55b24cb6f1、

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

# 関連記事
職業訓練
https://qiita.com/kaizen_nagoya/items/95368b63fa21d64271ec

はじめてのC/C++
https://qiita.com/kaizen_nagoya/items/918148868c2afc1810d4

Day3. Programmer
https://qiita.com/kaizen_nagoya/items/5dec6b691a0de0cc3cfe
Shared Element Transitionの描画は誰がしているのか

AndroidではAcitivtyやFragmentの遷移時に両方の画面に共通する要素を指定することで、それらがアニメーションで連続的に繋がっているように見えるShared Element Transitionという機能があります。

最初の画面左上にあるアイコンと、その後起動される画面中央にあるアイコンをつなげて以下のようなアニメーションになります。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/796258c4-095e-4bd9-a1c2-ede473acd7c2.gif)

共通要素のtransitionNameに同じ名前を設定して、起動時にオプションを設定するというシンプルな実装でこの高度なアニメーションを実行してくれます。

さて、これをカスタムViewで実装するとなぜかうまくアニメーションしてくれませんでした。
実装は簡単だけど、アニメーションがどのように実現されているのかについて深く考えたことはありませんで。なんとなく、起動前と起動後のViewのスナップショットをとってそのスナップショット画像を描画してくれてるんだろう、みたいに認識してましたが、全然違いましたというお話。

# 調査：カスタムViewにログを仕込む

泥臭くログ出力を仕込んで調べて見ましょう

```kotlin
class MyImageView @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
): AppCompatImageView(context, attrs, defStyleAttr) {
    private val index = count++

    override fun layout(l: Int, t: Int, r: Int, b: Int) {
        super.layout(l, t, r, b)
        Log.e("XXXX", "$index layout: $width $height")
    }

    override fun draw(canvas: Canvas) {
        super.draw(canvas)
        Log.e("XXXX", "$index draw $width $height")
    }

    companion object {
        private var count: Int = 0
    }
}
```

ImageViewを拡張したカスタムViewで上記のようにログを仕込んで実行してみます

startActivityでは以下のようなログになります
```
0 draw 189 189
1 layout: 525 525
1 layout: 189 189
1 layout: 525 525
1 layout: 525 525
1 draw 189 189
1 draw 189 189
1 draw 192 192
1 draw 199 200
1 draw 211 212
1 draw 229 228
1 draw 250 250
1 draw 273 273
1 draw 300 301
1 draw 329 329
1 draw 357 357
1 draw 386 387
1 draw 416 416
1 draw 441 441
1 draw 465 465
1 draw 487 487
1 draw 503 502
1 draw 515 515
1 draw 522 522
1 draw 525 525
```

finishAfterTransitionでは以下のようなログになります
```
1 draw 525 525
0 draw 189 189
1 layout: 189 189
1 draw 525 525
1 draw 525 525
1 draw 522 522
1 draw 515 515
1 draw 503 502
1 draw 485 486
1 draw 465 465
1 draw 442 441
1 draw 416 416
1 draw 386 387
1 draw 357 357
1 draw 329 329
1 draw 300 301
1 draw 273 273
1 draw 250 250
1 draw 229 228
1 draw 211 212
1 draw 199 200
1 draw 192 192
1 draw 189 189
0 layout: 189 189
0 layout: 189 189
0 layout: 189 189
0 draw 189 189
```

要するに起動されるActivity側のViewのdrawによって描画されているってことですね。しかもlayoutが呼ばれず、drawの度にサイズが変化しています。カスタムViewでうまくアニメーションされなかったのは、このような描画のされ方を想定して実装していなかったからでした。

# 結論：起動されるActivityのViewが描画していた

ということで、起動されるActivity上のSharedElementとなるViewは、measureやlayoutの呼び出しなしにdrawが呼び出されるため、このときに適切な描画処理を行わないとSharedElementTransitionがうまく動作しないということになります。
第23回 ネットワークの戻りの通信をestablishで制御しよう

通信制御を行う時に使用するアクセスリスト
HTTPやHTTPSなどTCPのプロトコルを使用した通信において、**セキュリティの理由から内部からの通信は許可しても、外部からの通信は拒否するように設定したい**。このような通信要件はアクセスリストの**establish機能**を使用すれば実現可能になります。

## アクセスリストのestablish設定とは
このestablish機能を説明する前に、そもそもHTTP,HTTPSなどのTCPを使用した通信を行う際、**3ウェイハンドシェイク**というやり取りがまず最初に行われます。このやり取りが成立しないとHTTP接続もできません。

#### 3ウェイハンドシェイクのフロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/2e42beb3-23cb-4251-8f42-6f4b94960ddc.png)

図の②に記載されている**サーバーからクライアントに向けた戻りの通信**、ここで**ACK**が付け加えられます。つまりサーバーが認めた相手に対してはACKが加えられた通信を返すので、この通信を許可すれば信頼性を担保した通信が実現できる。**このACKが付いた戻りの通信を許可するためのアクセスリストの設定がestablishになります。**

#### 検証環境にて各通信ごとのパケットのシーケンス番号の変化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/f6bb268f-d05a-4647-8c22-2568519e62f9.png)

以下は、クライアントからサーバーへのHTTP接続を行った際の3ウェイハンドシェイクの動きをキャプチャした画像を記載。
①
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/3a5e4dbe-4c6a-4ffe-8a05-c8e2828ded36.png)

最初の通信なのでシーケンス番号、**確認応答番号は0**のまま
**SYN/ACKのビットフラグは(1/0)となる。**
②
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/d67fa84e-e207-49a7-a58a-4ecbf4a3c37f.png)

サーバー側が認め通信が成立すると、この段階で**確認応答番号が「1」になる。**
**SYN/ACKのビットフラグも(1/1)となる。**
③
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/77b43e45-8c38-4b9d-9a0a-902c9ec73e57.png)
シーケンス番号は相手から受信した**確認応答番号なので「1」**
**確認応答番号も相手から受信したシーケンス番号に「1」を足すので、０＋１で「1」になる。**

また既に接続は認められている(ACKのビットフラグが立っている)ので、SYN/ACKのビットフラグにおいて
**SYNの部分は「0」ACKの部分は「1」になる。**

### 検証ネットワーク図
![①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/f1e037fc-9790-4e01-8580-facec47d57be.png)

### 検証事項
①支店(内部)からデータセンター(外部)への**公開サーバー２台に対しては戻りの通信を許可**
②支店(内部)からデータセンター(外部)への**非公開サーバーに対しては戻りの通信も拒否**
③データセンター(外部)から支店(内部)の**機密情報サーバーへの通信は戻りの通信を拒否**

```ruby:Router設定
interface GigabitEthernet0/0
 ip address 192.168.1.1 255.255.255.0
 no shut
!
interface GigabitEthernet0/1
 ip address 10.16.2.1 255.255.255.0
 ip access-group test2 in
 no shut
!
＊データセンター環境から入ってくる通信に対してACL制御を行う。

ip access-list extended test2
 permit icmp any any
 permit tcp host 10.16.2.11 any established
 permit tcp host 10.16.2.12 any established
!

★補足。
interface GigabitEthernet0/0
ip access-group test2 out
*社内環境に向けて「出ていく方向」にACLの設定をかけても同じような結果になる。
```


### 検証結果

①支店PCから**公開サーバー**へのHTTP接続を行った結果。
**戻りの通信が許可されている**ので、HTTPでの接続が成功。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/e0aba78d-898b-448f-b2c6-74dc81f04f53.png)

②支店PCから**非公開サーバー**へのHTTP接続を行った結果。
**戻りの通信はアクセスリストで許可されていない**ので、HTTPでの接続は失敗。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/cd285810-b2f8-4a87-b3bf-e60d1905ea89.png)

③データセンターPCから**支店機密情報サーバー**へHTTP接続を行った結果。
**こちらも戻りの通信はアクセスリストで許可されていない**ので、HTTPでの接続は失敗。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/67819a21-64e2-4882-9058-8e0afe74036c.png)


## 次回予告
これまでは、IOS関連の記事ばかりでしたので、Nexus機器の記事を記載します
ツールへの対応記録

Tool Vendor 記録
https://qiita.com/kaizen_nagoya/items/c6ca4483cb728440d206
をより一歩深めるための記録類

# 記録
ガイオテクノロジーの田中伸明さんとのUML関連共同研究の動画
https://www.youtube.com/watch?v=mm8lxZuAadA
https://www.youtube.com/watch?v=_OJ-l1WYGr4&t=28s

WEBINAR - Human-centric development of software-defined-vehicles
https://www.youtube.com/watch?v=G444ZL7SM1w&t=200s

AUTOSAR Classic | DaVinci Configurator Classicでのワークフロースクリプト作成 | #VectorTechTutorial（日本語字幕あり）
https://www.youtube.com/watch?v=mUQ_o4y20s4

参照動画：John Deere における垂直統合型 AUTOSAR システム開発
https://jp.mathworks.com/videos/vertical-autosar-system-development-at-john-deere-1527488063826.html

OSEK
https://www4.cs.fau.de/Lehre/SS06/HS_AKES/handout/OSEK.pdf

松尾研 LLM コミュニティ "Paper & Hacks Vol.21" 
https://matsuolab-community.connpass.com/event/333658/
2024/10/15(火)		合成データの作成について	

Self-Instruct: Aligning Language Models with Self-Generated Instructions
https://arxiv.org/pdf/2212.10560.pdf

WizardLM: Empowering Large Language Models to Follow Complex Instructions
https://arxiv.org/pdf/2304.12244.pdf

Textbooks Are All You Need
https://arxiv.org/pdf/2306.11644.pdf

LLM
https://liat-aip.sakura.ne.jp/wp/llmのための日本語インストラクションデータ作成/llmのための日本語インストラクションデータ-公開/
冷蔵庫の材料のみでレシピを自動生成するWebアプリを作ってみた


## はじめに

「今日の晩ごはん、何にしよう…」
冷蔵庫の前で5分悩む、そんな日々にサヨナラしたい！

**AI（OpenAI API）に材料を渡して、冷蔵庫の中にあるものだけでレシピを自動で考えてもらうWebアプリ**を作りました。
これで「冷蔵庫の余り物」も「謎の調味料」も、AIが美味しく料理してくれる~~かも~~!

---

## どんなアプリ？

- 材料と人数を入力するだけで、AIがレシピを自動生成！
- 「OpenAI APIキー」を入力すれば、誰でも自分のAIで遊べます。
- バックエンドは**FastAPI（Python）**、フロントエンドは**React**でサクッと構築。

---

## 画面イメージ
![F23E0D54-772B-4EF1-BDA1-F7B63BDD9B8F_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4074365/79c4aa93-ac75-4736-b600-07a5f1c0fd0b.jpeg)
![7C28DB30-2EE5-495A-A172-351130C2A2B1_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4074365/7e85ed29-c818-4cce-8242-409e137a06ea.jpeg)
![682604ED-49F8-4689-9920-70040AFA24FA_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4074365/29b8d753-0b24-4944-8fc4-de553e616057.jpeg)
![AA82E383-5613-4B99-A03D-AEE341FEF23E_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4074365/df8ea413-41cb-4181-94e9-923cb26d2c28.jpeg)

 


---

## 使い方

1. **材料と人数を入力！**  
   例：「じゃがいも」「玉ねぎ」「ベーコン」…
2. **「レシピ生成」ボタンをポチッ！**
3. **AIがレシピを考えてくれる！**  
   どんな料理が出てくるかはお楽しみ！

---

## 技術スタック!


- バックエンド: FastAPI
- フロントエンド: React + Material-UI
- AI: OpenAI API（GPT-3/4）
- その他:GitHub

---

## こだわりポイント(?)

- **APIキーはサーバーに保存しません！**  
  → セキュリティも安心
- **材料入力は自由度高め**  
  → 変な材料でもAIが頑張って考えてくれる
- **セットアップ簡単**  
  → READMEと.env.exampleで迷わない

---

## なぜAPIキーを各自入力する方式にしたのか？

こだわりとかいってますが 実は… 普通に**OpenAI APIの従量課金が怖かったからです（笑）**。

もしサーバー側でAPIキーを一元管理して、みんなが自由にレシピ生成できるようにしてしまうと、  
「知らないうちにAPI料金が青天井で請求される」  
という恐ろしい未来が待っています…。

そこで、**APIキーは各自で入力してもらう**という仕様にしました。
これなら、
- みんな自分のOpenAIアカウントで安心して使える
- 開発者（私）のクレジットカードが爆発しない（笑）

という、平和な世界が実現できます！

---

## セットアップ方法

1. リポジトリをクローン
2. `backend/.env`を作成し、OpenAI APIキーを記入
3. 依存パッケージをインストール（Python/Node.js）
4. バックエンド・フロントエンドを起動

（詳しくはREADME参照）
## 技術的に困ったこと・ハマりどころ

###  材料（ingredients）の設計・バリデーション
- 最初は「材料名だけのリスト」で十分かと思ったが、実際は「分量」や「単位」も必要になるケースが多い。
- 例：
  ```json
  [
    {"name": "じゃがいも", "amount": "2", "unit": "個"},
    {"name": "玉ねぎ", "amount": "1", "unit": "個"}
  ]
  ```
- ただし、ユーザーが入力しやすいUIを考えると「材料名だけでもOK」「分量や単位は空でもいい」など柔軟な設計が必要。
- バックエンド（FastAPI）側のPydanticモデルも、必須・任意項目のバランスや空文字の扱いで何度も調整。

### JSONデータのやりとりと整形
- フロントエンド（React）からバックエンドへ送るデータはJSON形式。
- ただし、OpenAI APIに渡すときは「テキスト形式のプロンプト」に変換する必要がある。
- 例：ユーザー入力（JSON）→ バックエンドで「材料リストを日本語の文章」に整形→ OpenAI APIに投げる
- この「データ変換」の部分で、材料が空の場合の処理や、材料名の重複・表記揺れ、サンプルプロンプトの工夫など、地味に悩むポイントが多かった。

### エラー処理とユーザー体験
- 材料が空だったり、JSONの形式が崩れていると、バックエンドでバリデーションエラーや500エラーが発生。
- そのたびに「どこでエラーが起きているか」をログで追い、フロント側でも「材料を1つ以上入力してください」などのバリデーションを追加。

---


## 作ってみて感じたこと

- AIの発想が自由すぎて笑える（時々とんでもレシピが出る）
- APIキーの扱いは慎重に！
- 「材料名の揺れ」や「分量の曖昧さ」もAIがうまく吸収してくれる

---

## 今後やりたいこと

- 画像生成（料理写真もAIで！）
- レシピの保存・共有機能
- 「冷蔵庫の中身」自動読み取り（夢）

---

## まとめ

「AIにごはんを決めてもらう」って、ちょっと未来っぽくてワクワクしませんか？
みなさんもぜひ、余り物でAIに無茶ぶりしてみてください！

---

### GitHubリポジトリ

https://github.com/yusuke-kobayashi-ag/Create-Recipe

---

**ご感想・AIレシピの珍回答報告、お待ちしてます！**

---
IT教科書類

職業訓練(IT)
https://qiita.com/kaizen_nagoya/items/95368b63fa21d64271ec

# 教科書類
2023年版　基本情報技術者標準教科書
https://www.ohmsha.co.jp/book/9784274229817/
2022年版 基本情報技術者標準教科書
https://www.amazon.co.jp/dp/4274227758
基礎シリーズ　電気・電子概論　監修	伊理正夫
https://www.jikkyo.co.jp/book/detail/13151
組込みシステム開発入門　技術評論社
https://gihyo.jp/dp/ebook/2021/978-4-297-11967-6
入門　情報処理数学　実教出版
https://www.jikkyo.co.jp/book/detail/12347
C言語によるプログラミング　－基礎編－（第3版）
https://www.ohmsha.co.jp/book/9784274226069/
C言語によるプログラミング　－応用編－　第2版
https://www.ohmsha.co.jp/book/9784274064876/
この一冊で合格！QC検定3級集中テキスト＆問題集
https://www.natsume.co.jp/np/isbn/9784816358920/
独習Java 第6版
https://www.shoeisha.co.jp/book/detail/9784798180946
プログラミング言語C++ 第4版 
https://www.amazon.co.jp/dp/4797375957/
かんたんUML入門　改訂２版
https://qiita.com/kaizen_nagoya/items/1746cadd6cab7da49680
組込みソフトウェア開発のための構造化モデリング 
https://www.amazon.co.jp/dp/4798110477/
Tool Vendor 記録

株式会社構造計画研究所　
 https://www.sbd.jp/

東陽テクニカ
https://www.toyo.co.jp/

ガイオテクノロジー株式会社
https://www.gaio.co.jp/

アドバンスド・データ・コントロールズ
https://www.adac.co.jp/

テクマトリックス
https://www.techmatrix.co.jp/index.html
セミナ主催。

Mathworks
Verifier

dSPACE

Elektrobit

Sparx Systems
Enterpise Architect
UML


デンソークリエイト
Time Tracker

マイクロソフト
Visual Studio
セミナ主催。

RedHat
Linux

Raspberry PI

Sun microsystems
JAVA

Borland
Turbo C/C++

Village Center
vz editor

python

docker
次回以降の手順

# 1. 概要
起動手順、エラーログの確認方法、データベースの使用方法、Gitのcommit、push、pull、cloneのやり方をマスターする。
なお、当記事は以下のリンクの続きになります。

https://qiita.com/hosoya17/items/f1063124bfb35d5f4937

# 2. 前提
- 以下のリンクの手順を実施していること

https://qiita.com/hosoya17/items/f1063124bfb35d5f4937

https://qiita.com/hosoya17/items/7333e760f490bbc7336f

# 3. 始め方
1. LAMP_SVの起動
2. TeraTermでLAMP_SVにSSH接続する
3. VisualStdioCodeでLAMP_SVにSSH接続する
4. ローカルリポジトリをリモートリポジトリにマージする
5. エラーログの削除
6. apacheの起動
7. firewallの停止
8. ブラウザでLAMP_SVのIPアドレスにアクセスする

## 3-1. LAMP_SVの起動
VMwareにLAMP_SVが表示されている場合はそれをダブルクリックして起動。

表示されていない場合は、仮想マシンを開く → LAMP_SV.vmxを選択 → VMwareにLAMP_SVが表示されるのでダブルクリックして起動。

## 3-2. TeraTermでLAMP_SVにSSH接続する
以下のリンク参照

https://qiita.com/hosoya17/items/cc5065d1bf3c96e15eef

## 3-3. VisualStdioCodeでLAMP_SVにSSH接続する
以下のリンク参照

https://qiita.com/hosoya17/private/bcf49ea1d238871cd943

## 3-4. ローカルリポジトリをリモートリポジトリにマージする
別の環境でプログラムを更新してリモート(GitHub)にpushした人は以下を実行してください(やってない人は飛ばしてok)。

`/var/www/アプリ名`がリポジトリ化されている場合
```bash
git pull リモート名 ブランチ名
```

※ リモート名とブランチ名が分からない場合は以下を実行
- リモート名の調べ方
```bash
git remote -v
```
- ブランチ名の調べ方
```bash
git branch
```

`/var/www/アプリ名`がリポジトリ化されていない場合
```bash
git clone git@github.com:your_name/アプリ名.git
```

## 3-5. エラーログの削除
エラーログは`/var/log/httpd/アプリ名_error.log`に保存されています。
テキストファイルなのでエラーが起きる度にログが追記されます。
つまり、度々削除しないと既に解決したエラーも残ったままになってしまいます。

viエディタでエラーログを編集する。
```bash
vi /var/log/httpd/アプリ名_error.log
```

以下のコマンドでファイルの中身を削除する。
```bash
:%d
```

以下のコマンドで上書き保存する。
```bash
:wq
```

## 3-6. apacheの起動
```bash
systemctl start httpd
```

## 3-7. firewallの停止
```bash
systemctl stop firewalld
```

## 3-8. ブラウザでLAMP_SVのIPアドレスにアクセスする
index.htmlの内容が表示されたらok

# 4. プログラムの更新をしたら
必ず以下のコマンドでapacheを再起動してからブラウザで表示、処理内容の確認してください。
```bash
systemctl restart httpd
```

# 5. エラーログの確認方法
tailコマンドのfオプションで`/var/log/httpd/アプリ名_error.log`を表示することにより、リアルタイムでエラーログを確認することができます。
更に、Pythonのファイルのprint関数の表示結果もこのログに表示されます。

```bash
tail -f `/var/log/httpd/アプリ名_error.log`
```

# 6. データベースを使う場合
データベースファイルの所有者、所有グループがapacheになっていないとエラーになります。
加えて、書き込み権限もデフォルトだと無い為エラーになります。

所有者、所有グループを変更
```bash
chown apache:apache /var/www/アプリ名/データベース名.db
```

書き込み権限の付与
```bash
chmod 664 /var/www/アプリ名/データベース名.db
```

また、db.pyやmain.pyなどにデータベース名が記述されている場合、相対パスだと正しく動作しない可能性があるので、絶対パスで記述するように修正してください。
```Python
# 記述例
DATEBASE = "/var/www/アプリ名/flaskr/データベース名.db"
```

データベースの中身を確認したい場合はsqliteをインストールしてください。
```bash
dnf install sqlite
```
以下のコマンドでsqlite3と対話モードになる
```bash
sqlite3 /var/www/アプリ名/flaskr/データベース名.db
```
初期状態だとSELECT文を打ってもカラムが表示されない為、以下を入力する。
```
.headers on
.mode column
```

テーブルの一覧を表示する際は以下を入力する。
```
.table
```

終了する時は以下のコマンドを入力
```bash
.exit
```

# 7. 終わり方
1. gitでcommitしてpushする
2. shotdownコマンドでシャットダウンする

## 7-1. gitでcommitしてリモートにpushする
`/var/www/アプリ名`まで移動する
```bash
cd /var/www/アプリ名
```

app.wsgi以外のファイルをステージングする
```bash
git add . ':!app.wsgi'
```

commitする
```bash
git commit -m "コメント" 
```
※ コメントは変更内容を記述してください。

リモートにpushする
```bash
git push
```

## 7-2. shotdownコマンドでシャットダウンする
rootユーザーに切り替えてから以下のコマンドを実行する
```
shotdown now
```
QNX 

# QNX 
[QNX] QNXに関する公開情報まとめ
https://qiita.com/koara-local/items/c27c7bdaa56a8f643c70

Ford Ditches Microsoft For QNX In Latest In-Vehicle Tech Platform
https://techcrunch.com/2014/12/11/ford-ditches-microsoft-for-qnx-in-latest-in-vehicle-tech-platform/

Toyota, QNX And Others Adopt Ford’s SmartDeviceLink Platform For Connecting Mobile Apps And Cars
https://techcrunch.com/2016/01/04/toyota-qnx-and-others-adopt-fords-smartdevicelink-platform-for-connecting-mobile-apps-and-cars/

Apple hires founder of QNX Software Systems for automotive project
https://techcrunch.com/2016/07/28/apple-hires-founder-of-qnx-software-systems-for-automotive-project/
AlmaLinuxにGitをインストールする

# 1. 概要
仮想マシンでGitをインストールして、リポジトリ化、コミット、プッシュの一連の流れをできるようにする。

# 2. 前提
- VMwareにAlmaLinuxがインストールされていること
- GitHubのアカウントを作成していること

※仮想環境がインストールされていない場合は以下のリンクの手順でインストールしてください。

https://qiita.com/hosoya17/items/0e0c0a7437a01c3bc22d

※GitHubのアカウントを作成していない場合は以下のリンクからアカウントを作成してください。

https://github.com/

# 3. 事前準備
- AlmaLinuxの起動
- TeraTermでLAMP_SVにSSH接続する(VMware上だとコピーができない為ほぼ確で困ります)
- rootユーザにログインする

https://qiita.com/hosoya17/items/cc5065d1bf3c96e15eef

# 4. 環境構築
## 4-1. Gitのインストール
インストールする。
```bash
dnf install git
```

バージョンを確認する。
```bash
git --version
```
`git version 2.43.5`などと表示されたらOK

## 4-2. ユーザー情報の登録
ユーザー名とメールアドレスを登録する。なお、メールアドレスはGitHubで登録したメールアドレスにする。ユーザー名は何でも良い。
```bash
git config --global user.name "your_name"
git config --global user.email "your_email@example.com"
```

設定できたか確認する。
```bash
git config --list
```

# 5. 公開鍵と秘密鍵
## 5-1. SSHキーの生成
SSHキーを生成する。メールアドレスはGitHubで登録したメールアドレスにする。
```bash
ssh-keygen -t ed25519 -C "your_email@example.com"
```

実行すると、キーの保存場所を尋ねられる。特にこだわりが無ければ何も入力せずにEnterキーを押下する。
※何も入力しなければ`~/.ssh/id_ed25519`に保存されます。

次にパスフレーズの設定が求められる。基本的に何かしら設定することをおすすめする。

## 5-2. SSHエージェントの起動とキーの追加
SSHエージェントを起動し、生成したSSHキーをエージェントに追加する。
```bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
```

## 5-3. GitHubに公開鍵を追加
### 5-3-1. 公開鍵の内容をコピー
公開鍵の内容を表示しクリップボードにコピーする。
```bash
cat ~/.ssh/id_ed25519.pub
```

表示された鍵の内容(例：`ssh-ed25519 AAAAC3Nza... your_email@example.com`)を全てコピーする。

### 5-3-2. GitHubの設定ページに移動
1. GitHubにログインする
2. 右上のプロフィールアイコンをクリックし、`Settings`を選択
3. 左側のメニューから`SSH and GPG keys`を選択
4. `New SSH key`をクリック
5. `Title`に鍵の名前を入力
6. `Key`にコピーした公開鍵を貼り付ける
7. `Add SSH key`をクリックする

# 6. リポジトリ化
ディレクトリをリポジトリ化する。
リポジトリ化したいディレクトリに移動して以下のコマンドを実行する。例としてこの記事では`/var/www/practice`をリポジトリ化する。
```bash
cd /var/www/practice
git init
```

リポジトリ化できたか確認する。
```bash
ls -la /var/www/practice
```

`.git`というディレクトリがあればOK


# 7. コミット
## 7-1. 安全なディレクトリとして登録する
Gitに設定したユーザー名とリポジトリ化したいディレクトリの所有者が異なる場合は、以下のコマンドを実行する。
```bash
git config --global --add safe.directory /var/www/practice
```

## 7-2. ファイルのステージング
全てのファイルをステージングする。
```bash
git add .
```

特定のファイルのみステージング<font color="red">したい</font>場合は以下のコマンドを入力する。
```bash
git add ファイルパス
```

特定のファイルのみステージング<font color="red">したくない</font>場合は以下のコマンドを入力する。
```bash
git add . ':!ファイルパス'
```

## 7-3. 初回コミット
```bash
git commit -m "first commit."
```

ログを確認する。
```bash
git log
```

以下の様に表示されればOK
```bash
commit 94e... (HEAD -> master)
Author: your_name <your_name@example.com>
Date:   Sat Oct 12 22:52:54 2024 +0900
```

# 8. プッシュ
## 8-1. ブランチ名の確認
```bash
git branch
```

`* master`などと表示されればOK
ブランチ名は後ほど使うので覚えておこう。

## 8-2. GitHubにリポジトリを作成する
1. サインインして画面左上の`New`をクリック
2. `Repository name`を入力する
3. `Private`を選択する
4. `Create Repository`をクリックする
5. 画面遷移したら`SSH`をクリックし、右側のURLをコピーする

## 8-3. リモートリポジトリの追加
先程コピーしたSSHのURLを使用してリモートリポジトリを追加する。
```bash
git remote add origin git@github.com:your_name/practice.git
```

## 8-4. リモートにプッシュ
```bash
git push -u origin master
```

※ブランチ名が異なる場合は適宜変更してください。

`-u`オプションは、`origin master`をデフォルトのプッシュ先として設定する為、今後プッシュする際は`git push`と入力するだけでプッシュできるようになる。

GitHubのリポジトリを確認しAlmaLinux上のファイルが表示されていれば成功。
【TeraTerm】VMware上のAlmaLinuxにSSH接続する

# 1. 前提

- VMwareにAlmaLinuxがインストールされていること

※インストールされていない場合は以下のリンクの手順でインストールしてください。

https://qiita.com/hosoya17/items/0e0c0a7437a01c3bc22d

# 2. 事前準備

- VMwareで作成したLAMP_SVの起動
- IPアドレスの確認(コマンド : `ip a`で確認できる)

# 3. 接続手順

TeraTermを起動する。以下の様に入力し`OK`をクリックする。  

- ホスト : 設定したIPアドレス
- TCPポート : 22
- サービス : SSH
- SSHバージョン : SSH2
- IPバージョン : AUTO

![teraterm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885685/bf82b6d5-0b19-9cef-3536-5e0962513110.png)

`続行`をクリックする。
![warning.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885685/c8b68652-1625-6cfa-6099-5bc2ccc569b9.png)

aduserにログインする。  
ユーザ名にaduser、パスフレーズに設定したパスワードを入力し、`OK`をクリック。
![login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885685/16ace6da-e33d-0bdf-3c51-d6c64375b8a6.png)

以下の様に表示されれば成功。
![success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885685/ee631c3c-41b5-3ea5-dea8-8f7eec4f384d.png)
【備忘録】PCを掃除した後Discordで音声の入出力ができない

## 直前にやったこと
PC内部の埃を掃除するため一晩放電しました。
## 発生した問題
Discordでボイスチャンネルに入ったがマイクもスピーカーも反応しない。
## 解決方法
サウンドコントロールパネルを開いて入力デバイスと出力デバイスの周波数を確認。
出力デバイス　48000Hz
入力デバイス　44100HZ
となっていたため出力を入力に合わせ44100Hzへ変更。解決しました。
## 原因
一晩放電したことによりBIOS設定が初期化されたため、出力デバイスの周波数がデフォルトになったこと。
入出力の周波数がズレているとDiscordで入出力がうまくいかないことがあるようです。
## 雑記
参考までですが私はオーディオインターフェースを介してスピーカー出力、マイク入力をしている環境でこの問題に遭遇しました。
オーディオの環境にもよると思いますがBIOS設定の初期化が原因である関係上、以下のような場合でも発生するかと思います。

・音声入出力デバイス変更。
・PCの掃除、構成変更。
・引っ越しなどで半日以上放電された状態からのPC起動。

毎回原因を忘れて時間を浪費するので備忘録として残しておくことにしました。誰かのお役に立てていれば幸いです。
【読書感想文】中嶋秀隆「PM　プロジェクトマネジメント」を読んで

# はじめに
最近、技術者的な役割だけでなく、マネジメント的な役割も業務で担当することが増えてきました。

恥ずかしい話ですが、自分自身マネジメント経験がなく、メンバーに助けてもらいながらなんとかやっている状況に強いふがいなさを感じています。
そのためプロジェクトマネジメントについて今一度学びなおしてみようと思い、この本を読みました。

# 今回読んだ本

## 改訂7版 PMプロジェクトマネジメント PMBOK®ガイド対応

https://www.amazon.co.jp/dp/4800590000?ref=ppx_yo2ov_dt_b_fed_asin_title

# どんな本なの？

>本書では、大規模建設などに広く活用されている予測型(ウォーターフォール型)のプロジェクトマネジメントに対象を絞って、そのエッセンスを「具体的な事例」で詳述しています。

## 目次
> はじめに 第7版における変更点
序 章 プロジェクトマネジメントー標準10のステップ
STEP1 プロジェクトの発足を通知する
STEP2 背景を確認し、プロジェクト目標を設定する
STEP3 ワーク・パッケージを洗い出す
STEP4 役割を分担し、所要期間を見積もる
STEP5 バランスのとれたスケジュールを作る
STEP6 予算、その他の計画を作る
STEP7 リスクに備える
STEP8 承認を取りつけ、ベースラインを設定する
STEP9 作業を実行し、変更をコントロールする
STEP10 プロジェクトを終え、教訓を得る

# 読んでみてどうだった？

なんとなく今までやってきた経験をもとにやってきたことが像を結ぶ感覚がありました。
に自分が今まで自己流でやってきたことをこういう風に標準化できそうだな、自己流でやってきたことではここが不足だったな、など学びを得ることができました。

# 自分が業務に役立てたいと思った言葉
基本的なことですが、以下3つを念頭に置いてこれからも学び続けたいと思いました。
特に最後のPM知識体系と「守破離」は自分に深く刺さりました。
> プロジェクトの定義
プロジェクトとは、通常の業務とは異なる独自の目標を達成するために、期間を限定して行う業務である。それは、
>* 品質(Quality)
>* 資源(Cost)
>* 時間(Delivery)
の3つの要素を管理し、バランスを取りながら行う。

> プロジェクトマネジメントの定義
プロジェクトマネジメントとは、一連の技法、プロセス、システムを駆使して、プロジェクトを効果的に計画、実行、コントロールすることである。

> PM知識体系と「守破離」
最初は、諸学者が師の指導を忠実に学ぶ「守」。次が、その型を乗り越え、自分に合った型を模索するために、既存の型を打ち壊す「破」。そして「離」では、型を離れて自分なりのやり方に行きつくとされる。
これをプロジェクトマネジメントのスキルの体得に当てはめると、
「守」で「PMBOKガイド」などの知識体系を理解することに努める。ここでは、関連書を読んだり、研修に参加したりするのが有効だ。
「破」では、知識体系を自分のプロジェクトや業界に当てはめてみる。そして、そこに合うやり方を見つけるために、いろいろな工夫する。プロジェクトマネジメントが行われる状況は千差万別であり、ここでの工夫が、やがて大きな違いになる。これができる人と組織は大きく成長する。
「離」まで進むと、最適解に至る。（中略）
この最適解は、変わり続けるということに注意したい。jプロジェクトは生き物に他ならないからだ。

# おわりに
「プロジェクトマネジメント」というのは、読んだことをそのまま実践するとダダ滑る気がします。
自分の中にしっかりと落とし込み、チームの風土にはまるような形に昇華させて初めて効果が発揮できると思うので、これからも積極的に学び、アウトプットしていこうと思います。
この本も一度読んだだけではまだまだ自分のものにできていないなと感じているので、繰り返し読んで身に着けていきたいです。
初めてのNext.jsと、AI使用のアプリ開発ハッカソン

# イベント概要
Progate ハッカソン~オンライン~ 2025.4

キックオフ：2025年4月15日(火) 19:00 - 19:30
ハッカソン本番：2025年4月26日(土) 11:00～2025年4月27日(日) 18:00
発表方法: 動作デモ、topas

作成したアプリ↓
deploy: https://cooking-assistant-deploy.vercel.app/
topas: https://topaz.dev/projects/0e4b5dea401914a3868f
github: https://github.com/yusa-bot/cooking-assistant

## 結果
9チーム中 2位

## 感想
webアプリを最後まで開発できる力が欲しく、個人開発未経験ながら野良で参加しました。
他チームは4人等が多い中、欠席などで2人チームになり、
初めましての方と2週間弱でアプリ開発を行いました。

キックオフ当日にアプリ内容を聞いたときは不安で未知でしたが、今はAPIでなんでもできるんだという認識です。
APIの扱い方が肝。

私自身初めての開発でアプリの機能レベルの相場がわからない中、自分でもすごいアプリだと感じていましたが、結果9チーム中2位をいただけて驚きました。

1位ではなかったことの反省点は、プレゼン時に技術紹介を省略してしまったことで、
今後は時間の許す限り、存分に**アピール**するべきだと気づきました。
私は自分自身の紹介やアピールが苦手なため、その点も改善します。

他チームは4人等が多い中、欠席などで2人チームになり、
初めましての方と2週間弱のアプリ開発を行いました。
オフラインでの開発だったため、discordでやりとりをし、資料共有、通話や画面共有でコミュニケーションを行いました。
今の時代は、メンバーが共有してくれた資料の不明点をLLMで解決できるので、円滑なコミュニケーションにとても助かり、初心者が参入するハードルを一気に下げてくれていると感じました。
音声でのやりとりでは、耳に入る知らない情報全てをメモし、後で自分で調べるというキャッチアップ方法を行なっていました。ハッカソンといえども2週間程期間があったため、自分で学習する時間も自由に取ることができました。
反省: レコードや画面録画を瞬時にできるようにしておく。

異なる視点での感想ですが、
学ぶ人への窓口が広く、挑戦する人へのコミュニティは優しいということも感じました。
在学している42 toykoでも強く感じます。
また、今までを振り返ったときもそうですが、今回のアプリ開発で改めて
目の前のことを必死に吸収していれば、気づけばできるようになっている
ことを感じました。

## 学んだこと
いろんなツールがあること、開発に必要な知識、ファイルを体系的に理解できた。
チームメンバーに開発用のER図、フローチャート、ディレクトリ構造、API仕様書(fetch例も)を用意していただき、
v0やfigma, github, vercelの使い方
他にもたくさんのことを教えていただきました。
本当に感謝しています。

とにかく使ってみないと知り得ない高速開発手法や、人間の手間をかけずに進められる手法があることを学んだ。
どのツールがどう役立つかわからないので、耳に入ってきたものはまず調べ必要時に頭に浮かんでくる状態にしたい。
ツールを使いこなす力、キャッチアップ能力が大事だと感じた。
ツールを使いこなせる人ほど前提の知識があると感じた。

## 次回改善点
- 最初ににtypes/を作成
importしてエラー判定で気づける。
最初にフロントバック間でinterfaceを共有していなかったため、エラー解消に時間をかけてしまった。


- ハッカソンだから
こだわりすぎず柔軟に進めていくことが大事。
v0が出した案に足していくだけではなく、-もする。
非機能にこだわるのではなく、重要な機能から作っていく

- Nextのstate
グローバル変数みたい。
もっと扱いに慣れたい。

## 工夫
- ファイル内の文字数が多すぎ
component内のtailwind cssを消して構造理解
v0を改修していく開発方式だったため、ブラウザの画面とcomponentを何度も往復し、動作しながら構造理解

- エラー解消方法
console.logで検証機能でのデバック
型・変数名変更後の変更し忘れによるエラーが多い
github copilotの活用
【3分クラスタ講座③】2ノードクラスタにおけるスプリットブレイン対策①（フェンシング）

## 目的
前回、偶数台ノードではクォーラムだけではスプリットブレインの対策としては不十分であるとお伝えしました。今回は２台構成のクラスタを例に挙げて、どのように対応するのかざっくりと説明することを目的としています。



## この記事でわかること

- 2ノード構成クラスタの注意点（おさらい）
- スプリットブレイン対策①（フェンシング）



## 2ノード構成の注意点（おさらい）

ハートビート通信が切れると、互いに生き残りだと誤解してリソースを重複起動してしまう。これがスプリットブレインだと説明しました。

クラスタではクォーラム（多数決）によってスプリットブレインを防ぎます。しかし、2ノード構成だとお互いが１票をもつため過半数を獲得できず、クォーラムは正しく機能しません。

## クォーラムが機能しない場合

２ノード構成の場合、どちらのノードも過半数を取れず、クラスタを維持することができなくなります。
これでは、止まらない構成を作るためのクラスタの意味がなくなってしまいます。
pacemakerではこれを回避するようクォーラムを満たさなくてもクラスタを継続できるよう設定（no-quorum-policy=ignore）できます。

しかし、ここで注意しないといけないのが、クォーラムを満たさなくてもクラスタを構成できるということは、両方のノードでクラスタが構成され、スプリットブレインを発生させる可能性があります。

## スプリットブレイン対策その①：フェンシング

スプリットブレインを防ぐための基本的な対策が、フェンシングです。
PacemakerではSTONITHと呼ばれたりもします。
STONITH（Shoot The Other Node In The Head：他ノードを撃ち殺す）とは、
通信できなくなった相手ノードを強制的に停止させることで、リソースの多重起動を防ぐ仕組みです。

まずは下図のような2ノードクラスタ構成でPacemakerを使い、
クォーラムが満たされなくてもリソースを起動できる設定
（no-quorum-policy=ignore）になっている場合を考えます。

![正常時](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56869/cd804ab0-344d-43c3-b4bf-aab41135e7a1.png)

この状態では、Node1 側でリソースが起動しており、  
Node2 ともハートビート通信ができているため、問題なくクラスタが維持されています。


<br>

次に、ハートビート通信にのみ障害が発生した場合

![ハートビート障害](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56869/68228697-d9ca-4b9c-8def-7e4b620c77f0.png)

Node2側でクラスタを構成してリソースを起動しようとします。
しかし、Node1側でも起動しているので、このままではリソースの多重起動になってしまいます。


<br>
そこで、フェンシング(STONITH)の機能を使います。
ここではNode1側にNode2がおかしい時にHW側からOS停止するフェンシング設定が入っているケースを考えます。

![フェンシング実行](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56869/ed4c8c11-ca8b-4da6-916b-fe6c4b818480.png)

Node1はNode2が死んだと判断し、事前に設定されていたフェンシング設定によりNode2のOSを強制停止させ、スプリットブレインを回避します。

実際には、Node2側にもフェンシング設定が入っていたり、このフェンシングがうまく実行されなかったりと100％スプリットブレインを防ぐことができるわけではありませんが、フェンシングはスプリットブレインを防ぐ最後の砦として機能します。


## まとめ
- 2ノード構成では過半数をとれないので、設定によってクォーラム判定を無視してリソースを起動し続ける場合がある
- その場合、フェンシング（STONITH）によって、リソースの多重起動を防ぐ
User Access Troubleshooting Superbadge Unit


https://trailhead.salesforce.com/content/learn/superbadges/superbadge_user_access_troubleshooting_sbu?trail_id=secure-your-environment



+ プロファイルと権限セットを使用してアクセス レベルを調整します。
+ 意図しない共有を識別して修正します。
+ 要件に基づいて可視性の更新を構成します。
+ 会社の基準とポリシーを遵守します。

# 優先度が高い

チャレンジを完了して、「My Open Cases」リスト ビューで優先度の高いケースを閉じます。

:::note alert
We can't find the expected setting that prevents users with the 'Custom: Sales Profile' from deleting opportunity records.


「カスタム: 営業プロファイル」を持つユーザーが商談レコードを削除できないようにする必要な設定が見つかりません。
:::

:::note alert
We can't find the expected status for Case 00001036. Make sure you've left ticket notes to describe the issue and action taken.



ケース 00001036 の想定されたステータスが見つかりません。問題と対処方法を記載したチケットメモを残したことを確認してください。
:::

:::note alert
We can't find the expected update that prevents those in the customer service role from viewing the 'Hardware Sales' opportunity.


顧客サービス ロールのユーザーが「ハードウェア販売」の機会を表示できないようにする、予想される更新が見つかりません。
:::

:::note alert
We can't find the expected status for Case 00001039. Make sure you've left ticket notes to describe the issue and action taken.
:::


# 中程度の優先度

チャレンジを完了して、「私のオープンケース」リストビューにある中優先度のケースを閉じます。


:::note alert
We can't find the expected permission in the existing 'Sales' permission set.

既存の「販売」権限セットに必要な権限が見つかりません。
:::

:::note alert
We can't find the expected status for Case 00001038. Make sure you've left ticket notes to describe the issue and action taken.
:::


:::note alert
We can't find that the 'Next Step' field is available for inline editing.
:::

:::note alert
We can't find the expected status for Case 00001034. Make sure you've left ticket notes to describe the issue and action taken.
:::


# 優先度が低い

チャレンジを完了して、「My Open Cases」リスト ビューで優先度の低いケースを閉じます。


:::note alert
We can't find a task associated with the expected case and assigned to the expected user.


想定されるケースに関連付けられ、想定されるユーザーに割り当てられているタスクが見つかりません。
:::


:::note alert
We can't find the expected status for Case 00001035. Make sure you've left ticket notes to describe the issue and action taken.
:::

:::note alert
We can't find that the expected list views were deleted.
:::

3つあったよ

:::note alert
We can't find the expected status for Case 00001037. Make sure you've left ticket notes to describe the issue and action taken.
:::
047 AI屋さんの　無料Geminiでゲームとホームページ開発　LLMにトークン全文入力



047 AI屋さんの　無料Geminiでゲームとホームページ開発　LLMにトークン全文入力



今回は、Geminiの公式アプリを　便利に利用します。
無料レベルで、ここまで出来るので、
Googleなどの大手サービスに、大半の需要をお任せできます。
残ったニッチの特殊用途で、開発の要求がありそうです。

車の道案内も
スマホの無料カーナビで十分な状態です。


![スクリーンショット 2025-04-29 17.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/b71436a4-a6a3-4cf8-81b9-b76e56a6c2c6.png)


---



普通のHTMLを作成してくれます。
企業むけポータルサイトも、
コンテンツ込みでデザインしてくれます。

ブロック崩しアプリも作ってくれます。
そのまま、公開してゲームできます。
お願いすれば、オリジナルゲームも開発可能です。

追加学習済みのAIエージェントも、
資料をアップロードしたら完成です。
複数の資料を丸ごと追加学習して、専門分野特化LLMを使えます。
社内の資料や、手順書や、取扱説明書を入力すれば
組織共有の　カスタムアシスタントの完成です。



---



https://g.co/gemini/share/1310a5939f68



https://g.co/gemini/share/14bbbe136d90



![スクリーンショット 2025-04-29 16.18.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/bf92c562-0e99-4d7d-a3dc-3c910a6c821a.png)




---


https://g.co/gemini/share/e851a76d1d9b











![スクリーンショット 2025-04-29 16.08.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/2659208c-83fc-446c-8de4-4ab1c44e0dc0.png)


---


---


https://notebooklm.google.com/notebook/a1f96d3f-29eb-4363-ac67-a067337d8834



![スクリーンショット 2025-04-29 16.38.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/60117ef0-b43b-4dcc-aa76-76576da13867.png)



---

目次

https://qiita.com/bono0/items/dc1d000c98af7e07c9a7


今回も無事に

　047 AI屋さんの　無料Geminiでゲームとホームページ開発　LLMにトークン全文入力

完成です。おめでとうございます。





ー以上ー
User Authentication Settings Superbadge Unit



https://trailhead.salesforce.com/content/learn/superbadges/superbadge-user-authentication-settings?trail_id=secure-your-environment

+ 適切なパスワード ポリシーを設定します。
+ ログイン要件と制限を構成します。
+ 接続されたアプリの API アクセスを制御します。
+ ユーザーの信頼できる IP アドレスを設定します。

# パスワードポリシー

Cirrus Cash Flow 組織全体とそのシステム管理者に適切なパスワード ポリシーを設定します。

:::note alert
We can't find the expected password policies for your organization.
:::

またエラーですねぇ、どこ間違えた？

あああ、何度見ても違いが分かりませんね。このエラーメッセージは最悪です。いつものように手抜きだな。


# ログイン要件と制限

コール センターおよびインサイド セールス プロファイルを持つユーザーが、承認された IP アドレスで、許可された期間にのみログインできるようにします。

:::note alert
We can't find the expected login IP range to allow Inside Sales users to log in via VPN. Make sure you've set a description for the setting, too.


Inside SalesユーザーがVPN経由でログインするために必要なログインIP範囲が見つかりません。設定の説明も入力してください。
:::

:::note alert
We can't find the expected login IP range to allow Inside Sales users to log in via VPN. Make sure you've set a description for the setting, too.

:::

:::note alert
We can't find the expected login IP range to allow Call Center users to log in at the corporate office. Make sure you've set a description for the setting, too.
:::

:::note alert
We can't locate the expected login hours for the 'Call Center Profile'.
:::


# 接続されたアプリのAPIアクセス

適切な設定を更新し、接続されたアプリとそれらにアクセスできるユーザーを管理者が承認するようにします。Inside Sales プロファイルに必要なモバイルアクセス権限が付与されていることを確認してください。

:::note alert
We can't find the correct API Access Control settings.
:::

:::note alert
We can't find the setting that allows those with the 'Inside Sales Profile' to use the Salesforce for iOS app.


「Inside Sales Profile」を持つユーザーが Salesforce for iOS アプリを使用できるようにする設定が見つかりません。
:::


プロファイルでデバイスの指定か

# 信頼できるIP

企業オフィスからログインする従業員が ID 確認のためのログイン チャレンジを受け取らないように組織を構成します。

:::note alert
We can't find the expected number of trusted IP ranges for your org.
:::


Network Accessか
遠隔博士論文実践中心

全世界の不登校の子供たち「博士論文」を書こう。世界子供博士論文遠隔実践中心　
https://qiita.com/kaizen_nagoya/items/912d69032c012bcc84f2

特定の地域に根差した、展開を具体化してみる。　

# 現地主義　
活動は遠隔である。主催者は現地の方がよいかどうかわかっていない。　

## 市場把握　
どんな事情があるか。
教育を受けるとよい世代の人口数と、実際に通学していな人口の比率など。
利用言語は何語だとよいか。

## 機材確保
論文を書くための機材確保がむつかしい。
電気・通信網をある程度普及させたとしても、
個人への機材提供はとても困難。
学校・図書館などでの作業が可能な地域かどうかの判断ができるかどうか。
登校ができない人は、学校・図書館での作業は困難。
PlatformIOでmain.cpp以外のコーディングスタイルをArduino風にする方法

# 結論

`.editorconfig`を設定しよう。

# 現象

VSCode上のPlatform.ioで、main.cppはインデントが2になるのに、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/49f4ff28-5769-4cb6-9dfd-ce9beb360371.png)


その他のファイルはインデントが4になってしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/edd10ed0-398f-4dd2-8a34-bb5a66753781.png)

よく見るとカッコ`{}`前の改行有無も違う。
Arudino風にフォーマット（コーディングスタイル）を統一したい。

# 解決方法

## 拡張機能 `EditorConfig for VS Code` のインストール

拡張機能の `EditorConfig for VS Code` をいんすとーるｓ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/8aef7da5-7ed4-4d22-86b6-294c06b095b1.png)


## `.editorconfig` の配置

プロジェクトルートに`.editorconfig`ファイルを配置する。
Arduino用の`.editorconfig`はこちらから入手できる。
[arduino/tooling-project-assets/workflow-templates/assets/general
/.editorconfig](https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/general/.editorconfig)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/6f310ee8-395b-4bb4-af50-bb137ecd251c.png)

`Shift-Alt-F`でオートフォーマットすると、ちゃんとインデントが2になる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70022/dd0689aa-45bc-4982-882f-ebcbf22ded06.png)
【365日後にPredictive Master】大企業の平社員がAlteryx Weekly Challengeに挑む #004

## はじめに
こんにちは、積立お兄さんです。
大企業新卒３年目のAlteryx初心者です。
ひょんなことから「**365日後にPredictive Masterになる！**」という目標を掲げて、公式のWeekly Challengeにコツコツ挑戦しています。

この記事では、Alteryx歴3か月の平社員が、実務で生かせそうなノーコード分析力をどうやって身につけていくかを記録＆共有していきます。

GW怒涛の追い込み第２弾。
時間の許す限り、進めていきます...
昼は暑いのに夜は寒く、体調管理をするのに苦労しますね。頑張ります。

- 目標：ETLツールを自在に使いこなせるようになる
- 対象読者：Alteryxを始めたばかりの方/Weekly Challengeの解説が欲しい方

---

## 今回のチャレンジ：Weekly Challenge #004

- タイトル：[Weekly Challenge #004：アナリティクス ランキング] [LINK](https://community.alteryx.com/t5/%E3%82%A6%E3%82%A3%E3%82%AF%E3%83%AA%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA/%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8-4-%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9-%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0/m-p/393923)
- レベル感：初心者向け
- ゴール：結合の処理を行い、指定フォーマットで出力する
- 入力１
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/9893f635-dfd6-40b5-9bd1-74686dc5834e.png
">
- 出力
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/6ebc7fab-b908-4990-91b5-f6c8eaa24bf7.png
">

---

## 解いた流れと使用ツール

### ワークフロー全体

<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/c57b16a2-82eb-41c0-8734-8a67aae56791.png
">

### 処理の手順と解説
1. **集計ツール**　　　：count列の値が同じ値の行が複数あり、それらは同じ順位にする必要がある。集計ツールを使用してcount列をグループ化する。
1. **ソートツール**　　：集計ツールでグループ化したcount列を降順にソートする。
1. **レコードIDツール**：count列をもとにrank列を作成する。
1. **結合ツール**　　　：もともとのデータと、countをキーに順位の列が付与されたデータを結合する。こうすることで、元データの各行に順位列が付与される。
1. **ソートツール**　　：count列をもとにソートする。
1. **フィルターツール**：順位が5位以内の者のみに絞る。

---

## 詰まったポイントとその解決

- **問題１：countの値が同じものを同じ順位にする必要がある**
→ 別ルートでcountとrankを紐づけるデータを作成し、count列をキーとして元データと結合することで実現した。
---

## 結果と出力確認
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/504c2581-c3fd-4387-b19d-42cf983feaa4.png">

→正しい出力フォーマットで、指定要件を満たしていました！

---

## 今日の学び・振り返り

- **新しく覚えたツール**：レコードIDツール
ある列の値をもとに順位列を作成することができる。
- **工夫ポイント**：特にないですね...
countとrankを紐づける列を作成し、元データと結合するみたいな仕事は今後も使えそうな気がします。

---

## 次回予告
次は【Weekly Challenge #005】に挑戦予定！
GW中に10くらいまでは進めたいと思っています（思っているだけ）
ではでは

---
## タグ
`Alteryx` `weekly Challenge` `データ分析` `Predictive Master` `365日チャレンジ` `ノーコード`
データサイエンティスト、応用情報受けよう(ポエム)

応用情報を受けてきました。
データサイエンティストとして働く私が応用情報を受けた理由、その勉強法を書いたポエムです。


# 自己紹介

- 数理情報系学部出身
- データ分析のベンチャー企業で働くデータサイエンティスト 2 年目

# 受けた理由

データサイエンティストとしてプロジェクトをいくつか経験し、Web全般の知識があった方が良いと感じたためです。データ分析とはいえ、AWS などのクラウドを使う機会、API の利用や作成など、Web に関する知識を必要とする場面が多くありました。今後、マネジメント方面を目指していく上でも、幅広い知識を身に着けておきたいというのがきっかけです。特にセキュリティやネットワーク、データベース、マネジメント などの知識を身に着けたいと思いました。これらの内容が応用情報の範囲と近かったため、勉強の指針として活用しました。合格は二の次ですが、せっかくなら受験しよう、というスタンスです。  
結果、思った以上に実務で役立つ知識や、今後活用できそうな知識を多く得られました。やはり全体像を把握していると色んな分野の知識を吸収しやすいと感じました。Web と直接かかわらないエンジニアでも、IT 全般の知識を持っておくと何かと役立ちそうです。

# 勉強法

## 午前

午前問題は、基本的な対策としては用語暗記だと思います。ただ、今回は勉強自体が目的だったので、概念を学ぶ気持ちを大事にしました。法律関係などの覚えるだけのものを割愛したせいで得点的には少し苦労しました。。
例えば、「SL 理論」という、「部下の成熟度や現状に合わせて指示の仕方を変化させるべき」という理論があります。応用情報対策としてはこのくらい覚えておけばよいですが、「どのように変化させるのか」、「この人が部下だったらこんなマネジメントが必要そうだな」、「自分ならこのような指導のされ方が嬉しい」などを考えておくことで、活用の幅が広がります。単語自体を覚える以上に、考え方として参考になることが多いです。

## 午後

午後問題は一つのプロジェクトの中で、その分野の部分が丸ごと扱われます。特に今回勉強したかった、セキュリティ、ネットワーク、データベースの 3 つは過去問を 10 題以上解いて知識をつけました。  
特にセキュリティは、注意すべきポイントがわかってきた気がします。
ネットワークは最後まで難しく、まだまだ勉強が必要そうです。当日は合格への欲が出て、別問題に逃げてしまいました。。。

# 結果

https://x.com/nakonisuprog/status/1913961617756487837

このポエムを書いている段階では正式な結果は出ていませんが、自己採点ではどちらも65%を超えていて、大きなミスがなければ受かっていそうです。結果は関係ないと言いつつ、受かってたら嬉しいです。

# 終わりに

最後まで読んでいただきありがとうございました。  
引き続きデータサイエンティストとして精進していきます。勉強仲間募集中です。

読書記録

https://ebony-purple-c22.notion.site/0ed2bd40c8854211a4fc445ec2fd1628?v=e513b6873bb14fcfade37c88627c2428

X

https://x.com/nakonisuprog