OmniAICreator/Qiita-1.07M huggingface dataset:
エフェメラルポート

「**エフェメラルポート（Ephemeral Port）**」とは、  
一時的に割り当てられる**短命の通信ポート番号**のことです。  
主にクライアント側で、**サーバーと通信を開始する際に自動で割り当てられます**。

---

## ✅ ざっくり言うと…

クライアントがサーバーにアクセスするたびに、  
**「この通信で一時的に使うポート番号」**として使われるものです。

---

## 🔧 具体例

あなたがブラウザで `https://example.com` にアクセスすると…

| 項目 | 値 |
|------|----|
| クライアントIP | 192.168.1.10 |
| クライアントポート（※エフェメラルポート） | 53824（←自動割り当て） |
| サーバーIP | 93.184.216.34 |
| サーバーポート | 443（HTTPS） |

このとき、**53824**がエフェメラルポートです。

---

## 🔢 ポート番号の範囲

- **エフェメラルポートの範囲はOSによって異なります。**

| OS | デフォルトの範囲例 |
|----|--------------------|
| Linux（最近のバージョン） | 32768～60999 |
| Windows | 49152～65535 |
| macOS | 49152～65535 |

※カスタマイズも可能です（例：Linuxでは `/proc/sys/net/ipv4/ip_local_port_range`）。

---

## 🛠️ よく使われる場面

- HTTP/HTTPSアクセス（ブラウザ、curlなど）
- SSH接続時のクライアント側ポート
- TCP/UDP通信全般でのクライアント側

---

## 📌 特徴まとめ

| 項目 | 説明 |
|------|------|
| 割り当てタイミング | クライアントが通信開始時に自動割り当て |
| 使われる側 | 主に**クライアント側** |
| 期間 | セッション中のみ（一時的） |
| 目的 | 同一IPから複数接続を識別するため |
| 範囲 | OSによって異なるが通常 32768～65535 |

---
Playwrightでのクリック操作

# はじめに
Playwrightを使用する中で、画面上のボタン・ラジオボタン・チェックボックスなど操作対象の要素を特定した後、それぞれの要素を操作をする必要があります。
今回はHTML要素を特定し、クリック操作を行う方法を記載します。

# 開発環境
言語：C#
IDE：Visual Studio2022

## ボタンをクリックする
HTML要素に指定されているid属性を使用して要素を特定します。
特定したボタン要素をクリックします。
```
ILocator btnElement = page.Locator("#btn");
await btnElement.ClickAsync();
```
## ラジオボタンをクリックする
HTML要素に指定されているid属性を使用して要素を特定します。
特定したラジオボタン要素をクリックします。
```
ILocator rdoElement = page.Locator("#rdo");
await rdoElement.CheckAsync();
```
## チェックボックスをクリックする（ONにする）
HTML要素に指定されているid属性を使用して要素を特定します
特定したチェックボックス要素をチェックONにします。
```
ILocator chkElement = page.Locator("#chk");
//チェックON
await chkElement.CheckAsync();
```
## チェックボックスをクリックする（OFFにする）
HTML要素に指定されているid属性を使用して要素を特定します。
特定したチェックボックス要素をチェックOFFにします。
```
ILocator chkElement = page.Locator("#chk");
//チェックOFF
await chkElement.UncheckAsync();
```
# さいごに
要素を取得した後の操作方法が他にもありますので、
テキスト操作・ドロップダウン操作などを今後記事にしていきたいと思います。
デッドレターキュー

「**デッドレターキュー（Dead Letter Queue：DLQ）**」とは、  
**処理に失敗したメッセージを一時的に保存しておくキュー**のことです。

主に**メッセージングサービス**（例：Amazon SQS、SNS、Kafka、RabbitMQ など）で使われ、トラブルシューティングや再処理を容易にするために用いられます。

---

## ✅ 例えるなら...

「**宅配便の再配達コーナー**」みたいなものです。  
何度も届けようとして失敗した荷物（メッセージ）を、あとでまとめて確認・対応できる場所です。

---

## 🔧 具体的な仕組み（Amazon SQSの例）

1. 通常のキュー（メインキュー）にメッセージが入る  
2. コンシューマーがメッセージを処理しようとする  
3. **処理に失敗（例：アプリケーションエラー）**  
4. **最大再試行回数（例：3回）を超えるとDLQに送られる**

---

## 💡 なぜ必要？

- **何が失敗しているか**を追跡できる
- システム全体が止まるのを防ぐ（失敗メッセージだけ隔離）
- 後で人間やバッチ処理で**再処理や手動対応**ができる

---

## 🛠️ よくある使いどころ

| サービス | DLQの使い道 |
|----------|-------------|
| Amazon SQS | 処理に失敗したメッセージをDLQに移す設定が可能 |
| AWS Lambda | 関数の実行に失敗したイベントをDLQへ |
| Amazon SNS | 配信に失敗した通知をDLQへ |

---

## 📌 注意点

- DLQに入ったメッセージは**自動で再処理されません**。  
　必要なら定期的に監視・手動再送する仕組みが必要です。
- 処理失敗の原因がアプリ側なのか、データなのかを**分析しやすくなる**。

---

## 📝 まとめ

| 項目 | 内容 |
|------|------|
| DLQとは？ | 処理失敗メッセージを隔離しておく場所 |
| 目的 | エラーハンドリングと可観測性の向上 |
| 再処理 | 基本的に手動 or 別バッチで行う |
| 関連AWSサービス | SQS、SNS、Lambda、EventBridge など |

---
Pixel Recurrent Neural Networksのメモ

# 概要
PixelRNNのRow LSTMとDiagonal BiLSTMについての忘備録

## PixelRNNとは
**論文名**: Pixel Recurrent Neural Networks  
**URL**: https://arxiv.org/abs/1601.06759  
**発表日**: 2016-01-25

## Row LSTMの説明
### フローチャート
```mermaid
flowchart TD
    s[s<br>入力画像<br>（3×n×n）] -->|特徴抽出カーネル<br>with Mask A<br>（7×7）| x[x<br>特徴マップ<br>（h×n×n）]
    x -->|i行目を取得| xi[xi<br>i行目の特徴マップ<br>（h×n×1）]
    xi -->|Kis<br>特徴マップ行畳み込みカーネル<br>with Mask B<br>（3×1）| xki[Kis（xi）<br>i行目の畳み込み済み特徴マップ<br>（4h×n×1）]

    h[h<br>隠れ状態<br>（h×n×n）] -->|i-1行目を取得| hi1[hi-1<br>i-1行目の隠れ状態<br>（h×n×1）]
    hi1 -->|Kss<br>隠れ状態畳み込みカーネル<br>（3×1）| hki1[Kss（hi-1）<br>i-1行目の畳み込み済み隠れ状態<br>（4h×n×1）]
    hki1 -->|加算| xh[Kss（hi-1）+Kis（xi）<br>（4h×n×1）]
    xki -->|加算| xh
    xh -->|LSTMの内部処理|hi[hi<br>i行目の隠れ状態<br>（h×n×1）<br>（＊その後hiをhにセットして繰り返す）]
```

### 補足
- input2stateのinputは画像ではなく、画像から抽出した特徴マップなので注意
- 推論時は左上の画素から、チャネルの順に作る
    - MaskAでは、まだできてないものは見れないので、画素の右下以降とまだできてないチャネルはマスク
    - Kisでは、すでにチャネルは全部できているので、画素の右下以降のマスクだけして、チャネルのマスクはしない
    - 1行前の隠れ状態は全部できているのでマスクはいらない
- 普通のLSTMのつもりで読むと、隠れ状態を空間的に畳み込む(Kss)というのに気づけず、理解不能になりがち
- これがわかれば、Diagonal BiLSTMも理解できる
    - Kisでは畳み込みがなくなり、チャネルを4hにするだけ(下記隠れ状態の畳み込みで、左上すべてをカバーする)
    - Kssでは、左と上の特徴マップを畳み込む
    - 同様に右上からも順番にやる

（違っていたらどなたかご指摘お願いいたします。）
Amazon Kinesis Data Streams

Amazon Kinesis Data Streamsにおける「**シャード（shard）**」とは、  
**データのスループット（取り込み・読取り能力）を決定する基本的な単位**です。  
1つのデータストリームは複数のシャードで構成されており、スケーラブルなデータ取り込み・処理が可能になっています。

---

### 🔹 シャードの役割

それぞれのシャードは次のような能力を持っています：

| 操作 | スループット（1シャードあたり） |
|------|----------------------------------|
| 書き込み（Put） | **1秒あたり最大1,000レコード または 1MB** |
| 読み込み（Get） | **1秒あたり最大2MB** |

---

### 🔹 シャードの仕組み（イメージ）

```
+------------------------------+
|     Kinesis Data Stream     |
+------------------------------+
|    Shard 1    |   Shard 2   |
| (write/read)  | (write/read)|
+---------------+-------------+
```

- 書き込み側（Producer）がデータを送信するとき、**パーティションキー**に基づいてどのシャードに格納されるかが決まります。
- 読み込み側（Consumer）は各シャードから独立してデータを取得できます。

---

### 🔹 スケーリングについて

- **スループットが足りない場合は、シャード数を増やす**ことで対応します（手動または自動スケーリング）。
- 逆に、不要なシャードを削除してコストを削減することも可能です。

---

### 🔹 まとめ

| 項目 | 内容 |
|------|------|
| シャードとは | スループットを決定する基本単位 |
| 書き込み能力 | 1MB/秒 or 1000レコード/秒 |
| 読み込み能力 | 2MB/秒 |
| 拡張性 | シャードを増やしてスケーリング可能 |

---
【ローコードのSKE】検索結果の加工

今回の記事は、SKEで検索結果を加工するサンプルです。

## 共通設定
テストテーブルに、url項目を追加します。
```sql
CREATE TABLE "テストテーブル"
(
  "主キー" integer NOT NULL,
  "名称" character varying(10),
  "区分１コード" character varying(10),
  "区分２コード" character varying(10),
  "担当者コード" character varying(10),
  url character varying(100),
  "作成者" character varying(20),
  "作成日時" timestamp without time zone,
  "最終更新者" character varying(20),
  "最終更新日時" timestamp without time zone,
  CONSTRAINT "テストテーブル_pkey" PRIMARY KEY ("主キー")
)
```
テーブル項目としてurlを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476221/6be9e1ac-692f-4a49-be64-6bd1c7044fbe.png)

## 入力ダイアログ
入力ダイアログにURL項目をtextタイプで追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476221/887138e0-a7d9-460d-b87b-5a845a639057.png)

## 一覧画面
一覧画面にサイト項目を追加し、フォーマットアドオンに登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476221/ba5dc856-f88c-4e03-b520-32eeb4833bc7.png)
googleのファビコン取得サービスを利用して、URLをアイコンに変換してリンクで表示します。
```js:サイト項目のフォーマットアドオン
function(data){
	return "<a target='_blank' href='"+data["url"]+"'>"+
	"<img src='http://www.google.com/s2/favicons?domain="+data["url"]+"'>"+
	"</a>";
}
```
## 効果
入力ダイアログにurlを登録すると、一覧画面にアイコンが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476221/0db4cee8-1d2f-4f47-af41-d7395aa36390.png)

## まとめ
今回の記事のサンプルには、以下のアドオンを利用しました。
- フォーマットのアドオン
JavaScriptのPromiseチェーンはインスタンス？ .then()が受け取る値との関係の解説


## はじめに
JavaScriptでの非同期処理を扱う際、Promiseチェーンは非常に強力なパターンです。しかし、その動作原理は一見すると複雑に感じられることがあります。特に「.then()メソッドの連鎖」と「Promiseの解決値」の関係は混乱しやすいポイントです。

この記事では、以下のような疑問に答えていきます：

- Promiseチェーンで値はどのように伝播するのか
- ハンドラがPromiseを返す場合と通常の値を返す場合の違い
- 「Promiseの解決」とは具体的に何を意味するのか

### Promiseの基本
まず、Promiseには3つの状態があります：

- pending（保留中）: 初期状態
- fulfilled（成功）: 操作が成功し、値が利用可能になった状態
- rejected（拒否）: 操作が失敗した状態
Promiseが「解決された」とは、そのPromiseがresolve関数を通じて値を提供した状態（fulfilled）になったことを意味します。

### Promiseチェーンの動作原理
以下のコードを例に考えてみましょう：

```javascript 
new Promise(function(resolve, reject) {
  setTimeout(() => resolve(1), 1000);
}).then(function(result) {
  alert(result); // 1
  
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve(result * 2), 1000);
  });
}).then(function(result) {
  alert(result); // 2
  
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve(result * 2), 1000);
  });
}).then(function(result) {
  alert(result); // 4
});
```
このコードを理解する上で重要なポイントは以下の通りです：

**1. `.then()`は新しいPromiseを返す**
各.then()呼び出しは新しいPromiseオブジェクトを返します。つまり、チェーンの各ステップは異なるPromiseオブジェクトです。

```javascript 
const promise1 = new Promise(...);
const promise2 = promise1.then(...); // 新しいPromise
const promise3 = promise2.then(...); // さらに新しいPromise
```

**2. ハンドラの戻り値が次の.then()に渡される**
.then()に渡されるハンドラ関数の戻り値によって、次の.then()の動作が決まります：

ハンドラが通常の値を返す場合：その値で即座に解決されたPromiseが生成され、値がすぐに次の.then()に渡されます。
ハンドラがPromiseを返す場合：そのPromiseが解決されるまで待ち、解決値が次の.then()に渡されます。

### 混乱しやすいポイントの解説
最初に混乱しやすいのは、「Promiseの解決値」と「Promiseオブジェクト自体」の区別です。

```javascript 
.then(function(result) {
  // ここでのresultは前のPromiseの「解決値」であり、Promiseオブジェクト自体ではない
  
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve(result * 2), 1000);
  });
})
```
このハンドラが返すPromiseは、次の.then()にそのまま渡されるわけではありません。代わりに、このPromiseが解決されるのを待ち、その解決値が次の.then()のハンドラに渡されます。

#### 具体例で理解する
先ほどの例の実行フローを詳しく見てみましょう：

1. 最初のPromiseが1秒後にresolve(1)で解決される
2. 最初の.then()ハンドラが実行され、resultに1が入る
    - alert(1)が実行される
    - 新しいPromiseを返す（このPromiseは1秒後に2で解決される）
3. 1秒待機
4. 返されたPromiseが2で解決されると、次の.then()ハンドラが実行される
    - resultに2が入る（前のPromiseの解決値）
    - alert(2)が実行される
    - 再び新しいPromiseを返す（このPromiseは1秒後に4で解決される）
5. 1秒待機
6. そのPromiseが4で解決されると、最後の.then()ハンドラが実行される
    - resultに4が入る
    - alert(4)が実行される

### 重要な結論
Promiseチェーンを理解する上で最も重要なのは、.then()に渡されるのは常に「解決値」であり、Promiseオブジェクト自体ではないということです。

ハンドラが通常の値を返す場合とPromiseを返す場合の違いは、単に「次の.then()が実行されるタイミング」だけです：

- 通常の値を返す場合：即座に次の.then()が実行される
- Promiseを返す場合：そのPromiseが解決されるまで待ってから次の.then()が実行される

結果として渡される値は同じであり、違いは「いつ次の処理が実行されるか」だけなのです。

### まとめ
Promiseチェーンは、非同期処理を順序立てて実行するための強力なメカニズムです。各.then()は前のステップの結果を受け取り、次のステップに値を渡していきます。

Promiseを返すことで「この処理が終わるまで待ってから次に進む」という制御ができ、これによりコールバック地獄を避けながら読みやすく保守しやすいコードを書くことができます。

Promiseチェーンの本質を理解すれば、複雑な非同期処理も明確に構造化できるようになります。
画像生成AIで作ったAI機械学習に関連する初音ミク(日記)


本記事では、画像生成AIを活用して、初音ミクがAI機械学習の手法を講義しているようなシーンをビジュアルでまとめました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/882659e7-b511-4370-a472-0dfbbe5d17f3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/38f51d81-361a-42d5-a616-7a74dd4e15fd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/430f888b-a29a-4571-b10b-5f26973e3a67.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/9cd94a9f-a480-4c3e-8eb0-4efd58c97aeb.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/3c94f440-6729-441f-b67a-b9765f5ac88b.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/a4c5d401-31dd-4eca-b484-b635084b312d.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/1e499597-99b8-4db8-ae07-2322a13547c0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/2b8c1417-599b-4372-b59f-615152ec6a56.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/41a0e1d0-5da1-405c-be8d-ea40abf200e2.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/89472891-c7e6-4146-8f31-5dbd245ea19e.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/373e8325-d379-4d0b-a2c5-93b5f0359043.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/fb35f7ca-4540-49b2-9602-d0cb68606788.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/04c4ba95-bfb8-4b4f-81ea-7c9ade67b7c7.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/0fcc8563-6593-4343-8ada-712d57b4b794.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/ecf4d01f-0816-45e2-adbb-58dc60aa0a63.png)

![E795943C-3050-405E-89A5-23B51FE01330.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/ad240622-d8b7-4561-95bc-a9521c1f5c6c.png)

![33619645-B3D5-47BF-9724-DFFAB3D052EF.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/45a87901-2227-406d-8e8a-28f28012611f.png)

![39FB39CE-F7D4-4455-99D6-1B3DAE6F58A9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/d473317c-7833-478a-9634-1689ee774d15.png)

![CB5132B4-1AFB-4AF3-BEF9-00E7834A4354.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/9add31a1-d495-4214-9395-9480a8c92c33.png)

失敗した画像(図は難しい)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/12d140f5-f740-4a51-9844-a13c1d5f99b5.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/d45d47e8-9723-4b80-b9c9-95f72bd31d25.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/6465fd8f-e35f-45b7-92e0-26a505e3f6ca.png)
VS CodeでPython 選択した範囲のコードだけ実行する

# 選択した範囲のコードだけ実行したい！

:::note info
結論　Code Runnerという拡張機能を入れる（Python以外の言語にも対応）
:::

### 拡張機能Code Runnerのインストール
1. Vs Codeの左側のブロックみたいな表示の拡張機能アイコンをクリック(または `Ctrl + Shift + X` )
2. 検索文字列を入力するところに　Code Runnerと入力しEnter
3. 検索結果に表示されたCode Runnerをクリック
4. 画面右側の　インストールの文字をクリックする
![スクリーンショット 2025-04-13 154902.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611568/c0677c8e-1509-4224-ae9a-2c6561590798.png)


### 拡張機能Code Runnerをターミナルで実行するように設定を変更する
1. Vs Codeの画面左下のねじのような設定アイコンをクリック
2. 検索文字列を入力するところに　code runner run in terminalと入力
3. **Code-runner: Run In Terminal** チェックマークをつける
![スクリーンショット 2025-04-13 160454.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611568/d3b96fee-b693-478c-a3f5-e40a3df42ab1.png)

### 実行してみる
1. 実行したいコードを選択（反転）する
2. 右クリックで Run Code (または　`Ctrl + Alt + N` )
3. 選択したソースだけが実行される:clap: 

### 参考にしたサイト
インストールして上記の設定変更することなしに実行してみたら日本語が文字化けしましたｇ
下記の記事のおかげで解決しました。ありがとうございます！

[VSCodeから始まるWebデザイナー、Webエンジニア生活 第９話：VSCodeおすすめ拡張機能-その4- Code Runner etc...](https://baapuro.com/VScode/nine/ "VSCodeから始まるWebデザイナー、Webエンジニア生活")

https://baapuro.com/VScode/nine/
Unreal Engine RebocapMapData VRM・MMD

VMEとMMDのRebocap MapDataです。

※ RebocapはTPoseである必要があります。

これ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638047/d743d37c-ee83-4996-ac83-7047af526187.png)


# VRM
VRM4Uでインポートした前提です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638047/11670b5c-9595-4ac8-aa3f-cfd9db94cee6.png)

# MMD

※ ライセンスは各自確認してください。

MMDは基本APoseなのでBlenderでMMDを読み込んでTPoseに編集します。

TPoseのアニメーションをつけてFBXとしてExportします。
この辺参考にしてください。
https://qiita.com/kyooooooooma/items/1cfc0255704161e17f0e

UEでのインポート時にこれをTrueにすると指定したTポーズが初期ポーズになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638047/d2c03840-6420-4fe1-9da0-7f99686ad361.png)


Mapはこれです。Blederを経由した過程で名前が一部リネームされてます。
MMDを直接読み込む場合はボーンの名前が違いますが、見比べて変更してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638047/cd1a4817-7fc9-47a9-b9ae-bbdf620a8cbf.png)

MMDはモデルによって微妙に名前が違います。適宜調整してください。
名前が合っていないとWarningが出るのでログを確認してください。
ここが正確でないと、Rebocap側にSkeltonが送信されないｙ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638047/cc1929c6-f854-4544-a24a-79d0686f9813.png)
VirtualBox  + Vagrant で Windows 上に Ubuntu  22.04 サーバーを作成

忘れないようにメモ

## 0. 動機

Vagrant の存在を最近知って試したくなった。
WSL を使っていたが実はこっちのほがいいのではと感じた。


## 1. 構成

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3389433/15265c3e-b69a-4123-b092-05cddd2f92b3.png" width=50% />
<br>

|ホストOS |ゲストOS|
|----------|---|
|Windows 11 (64bit)|Ubuntu 22.04|

コマンド入力は Windows11 に標準でインストールされている `Windows Terminal`（ターミナル）で
PowerShellを使用。 

## 2. 流れ

1. Windows11 に Virtualbox インストール
2. Windows11 に Vagrant インストール
3. Vagrantfile で box設定
4. Ubuntu 22.04起動

## 3. Virtualbox インストール

以下からVirtualboxをダウンロード

[Oracle Virtualbox](https://www.virtualbox.org/)

もろもろ同意など全部YESでインストール

## 4. Vagrant インストール

以下のURLにアクセス

[Vagrant](https://www.vagrantup.com/)

`Download`をクリック

![Vagrantインストール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3389433/4959f927-0254-4f8e-8be8-41766c484c50.png)

Windows の`AMD64`をダウンロード

もろもろ同意など全部YESでインストール

ターミナルで以下を入力してバージョンが確認できればOK

```powershell
vagrant -v
```

## 5. Vagrantfile

Vagrant の作業ディレクトリを作成する。

適当にフォルダを作成。

```powershell
mkdir $HOME/vms/ubuntu-2204
cd $HOME/vms/ubuntu-2024
```

以下を入力し、Vagrantfileを生成。

```powershell
vagrant init ubuntu/jammy64
```

以下が作成した設定ファイル

```ruby
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/jammy64"  # Ubuntu 22.04 LTS

  # SSHポートフォワード
  config.vm.network "forwarded_port", guest: 22, host: 2222, host_ip: "127.0.0.1", id: "ssh"

  # プライベートネットワーク
  config.vm.network "private_network", ip: "192.168.33.10"

  # フォルダ共有
  config.vm.synced_folder "share", "/home/vagrant/share"

  # VirtualBoxの設定
  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "2048"
  end
end

```

### 設定ファイルの解説

#### SSHのポート番号の設定

`guest: 22`がゲストOSのポートで、`host: 2222`がホストOSのポート

ホストOSのポートが`2222`なのは普段使っている`22`と被らないようにするため。　


```ruby
config.vm.network "forwarded_port", guest: 22, host: 2222, host_ip: "127.0.0.1", id: "ssh"
```

#### プライベートネットワークの設定

プライベートアドレスを設定する。ゲストOSにSSH以外でアクセスする際にこのIPアドレスでアクセスできる。

今回は`192.168.33.10`にした


```ruby
config.vm.network "private_network", ip: "192.168.33.10"
```

#### フォルダの共有

```powershell
mkdir ./share
```

左がホストOSのディレクトリで、右が対応するゲストOSのディレクトリ

```ruby
config.vm.synced_folder "share", "/home/vagrant/share"
```

#### boxの設定

```ruby
config.vm.provider "virtualbox" do |vb|
  vb.gui = false  # GUIなし
  vb.memory = "2048"  # メモリ
end
```

#### プロビジョニング

セットアップ用のスクリプトを書いて、適用したいときにコマンドにて適用できるみたいなので追記する。

## 6. Ubuntu 22.04 起動

`5. Vagrantfile`で作成した作業ディレクトリ内で、単に以下を実行する。

 ```powershell
 vagrant up
 ```

起動後、停止したい場合は以下を実行する。

```powershell
vagrant halt 
```

ターミナル上での SSH 接続は以下を実行する。

```powershell
vagrant ssh
```

SSH の設定は以下を実行することで確認できる（vscode の[Remote - SSH](https://marketplace.visualstudio.com/items/?itemName=ms-vscode-remote.remote-ssh)で接続する際に使用した。）

```powershell
vagrant ssh-config
```
ポケモンと微積とPython

##  はじめに
本記事では、ポケモンの「色違い確率」の例を通して、
微分や指数関数の概念を直感的に理解できるような Python コードを紹介します。

確率関数の傾き（微分）を求め、**「色違いが出る確率がどのように変化するか」**を
コードで示します。



##  参考リンクまとめ

https://note.com/takubonn/n/nb0e35f0a0019#66bf0cc9-2abe-44fa-9d0a-31478e95ccb0


##  Pythonコード



```python

import numpy as np
import matplotlib.pyplot as plt
from sympy import symbols, diff, simplify, lambdify

# -------------------------------
# Symbolic calculation with calculus / 微積分を使って記号計算
# -------------------------------

# 定義 / Define symbolic variable
N = symbols('N', real=True, positive=True)

# P(N) = 1 - (1 - 1/N)^N
P = 1 - (1 - 1/N)**N

# 微分 / Derivative dP/dN
dP_dN = diff(P, N)
dP_dN_simplified = simplify(dP_dN)

# 数値関数に変換 / Convert to numerical functions
P_func = lambdify(N, P, 'numpy')
dP_func = lambdify(N, dP_dN_simplified, 'numpy')

# -------------------------------
# Evaluate and plot / 数値評価とプロット
# -------------------------------

# Nの範囲 / Range of N
N_vals = np.linspace(1, 1000, 500)
P_vals = P_func(N_vals)
dP_vals = dP_func(N_vals)

# プロット: 確率 / Plot probability
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.plot(N_vals, P_vals, label='P(N)')
plt.xlabel('N')
plt.ylabel('Probability')
plt.title('Shiny Probability vs N')
plt.grid(True)
plt.legend()

# プロット: 微分値 / Plot derivative
plt.subplot(1, 2, 2)
plt.plot(N_vals, dP_vals, color='orange', label="dP/dN")
plt.xlabel('N')
plt.ylabel('dP/dN')
plt.title('Rate of Change of Shiny Probability')
plt.grid(True)
plt.legend()

plt.tight_layout()
plt.show()

# 結果の表示 / Show simplified derivative
dP_dN_simplified


final_N, final_P

```
結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/56b0a170-1cf1-4d8c-b5fa-4a5c093edf36.png)
【備忘録】GitHub Actionsを使ってAWS S3へ自動アップロードしてみた

## はじめに
GitHub Actionsを活用して、mainブランチに変更があった際に、HTMLなどの静的ファイルを自動でS3バケットへアップロードしてみました。


## 実際にやってみた
以下の手順で進めます。

1.S3バケットを手動で用意
2.GitHubにリポジトリを作成し、適当なHTMLファイルを作成
3.GitHub Actionsを使うための認証設定
4.ワークフローにymlファイルを作成
5.S3のオブジェクトにアクセス許可する

### 1.S3バケットを手動で用意

AWS S3 → バケットを作成 　バケット名をメモしておいてください
![スクリーンショット 2025-04-13 15.20.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3999989/6881d5d4-5257-4e65-a97a-a25811bb4a49.png)

![スクリーンショット 2025-04-13 15.20.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3999989/96968269-e4b7-4748-a399-7c4649422942.png)

### 2.GitHubにリポジトリを作成し、適当なHTMLファイルを作成
```ruby:htmlサンプル
<h1>Hello,World!</h1>
```
### 3.GitHub Actionsを使うための認証設定
リポジトリのSettings → Secrets and variables → Actions
Repository secretsに以下の情報を追加します。
- AWS_ACCESS_KEY_ID: IAMユーザー作成時に取得したアクセスキーID
- AWS_SECRET_ACCESS_KEY: IAMユーザー作成時に取得したシークレットキー

IAMユーザーのアクセスキーとシークレットキーは、AWSコンソールの画面右上のアカウントをクリック → セキュリティ情報　→　アクセスキーの作成で作成できます。

![スクリーンショット 2025-04-13 15.28.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3999989/bc3f9c94-0826-4978-ae28-318fbec51616.png)

### 4.ワークフローにymlファイルを作成
GitHubActions用のymlファイルを作成します
**コード末尾にあるバケット名はご自身のものに変更してください** 

```ruby:deploy_to_s3.yml
name: Deploy to S3

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    # Checkout the repository
    - name: Checkout code
      uses: actions/checkout@v3

    # Configure AWS credentials
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v2
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ap-northeast-1 # Tokyo region

    # Sync files to S3
    - name: Sync files to S3
      run: |
        aws s3 sync . s3://testbucket \ # ご自身のバケット名に変更してください
          --exclude ".git/*" \
          --exclude ".github/*" \
          --delete
```

変更をコミットするとGitHub Actionsが動きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3999989/5e08f722-fe1e-4141-be1b-41c054b414da.png)

これでS3にhtmlがアップロードできました



### 5.S3のオブジェクトにアクセス許可する

S3 → バケット選択　→ htmlをクリック
オブジェクトのURLをクリックして"Hello, World!"を表示したいですが、
このままではアクセス拒否されてしまうので、バケットポリシーを編集します。
バケット → オブジェクト選択 → アクセス許可　→ バケットポリシー　→ 編集

下記を貼り付けます。**バケットARNはご自身のものに変更してください**
```ruby
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "[ご自身のバケットARNに変更してください]/*"
        }
    ]
}
```


<br></br>

S3 → バケット選択　→ htmlをクリック → オブジェクトのURLをクリック

S3にアップロードしてhtmlファイルをデプロイできました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3999989/8661ac05-ab9b-45f2-82c9-37fc375bfc8a.png)



## 参考文献

https://qiita.com/free-honda/items/92fff30228656ca6bcc5
Astroに最初のページを追加＆リンク設定！

Astroプロジェクトの準備ができたら、次は新しいページを追加してみます。ここでは、`<h1>` 見出しと `<p>` 段落だけのシンプルな「About」ページを作成し、さらにトップページからそのページへリンクを設定する手順を紹介します。

## Astroのページ作成の仕組み
Astroでは、`src/pages/` ディレクトリの中に `.astro` という拡張子のファイルを作成するだけで、自動的にそのファイル名に基づいたURLのページが生成されます。

## ページの作成とリンク設定の手順

### 1.`about.astro` ファイルを作成する
プロジェクト内の `src/pages/` ディレクトリに、`about.astro` という名前で新しいファイルを作成します。

```
your-project/
└── src/
    └── pages/
        └── about.astro  <-- これを作成！
        └── index.astro (既存のトップページ)
```

### 2.`about.astro` にコードを記述する
作成した `about.astro` ファイルを開き、以下のコードを貼り付けます。これは基本的なHTML構造に、見出しと段落を追加したものです。

```astro
---
// このフロントマター部分にはJavaScriptのコードを書けますが、
// 今回はシンプルなので空にしておきます。
---
<html lang="ja">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>Aboutページ</title>
</head>
<body>
    <h1>このサイトについて</h1>
    <p>これはAstroで作られたシンプルなAboutページです。</p>
</body>
</html>
```

* `<html lang="ja">`: ページの言語を日本語に設定します。
* `<head>`: ページのタイトル (`<title>`) や文字コード (`<meta charset="utf-8">`) などを指定します。
* `<body>`: ブラウザに実際に表示される内容を記述します。今回は `<h1>` と `<p>` タグを使いました。

### 3.トップページ (`index.astro`) からリンクを追加する

次に、既存のトップページ (`src/pages/index.astro`) を編集して、作成した `about.astro` へのリンクを追加しましょう。

`src/pages/index.astro` ファイルを開き、`<body>` タグ内の適切な場所に以下の `<a>` タグを追加します。

```astro
---
// index.astro の既存のコード...
---
<Layout>
    {/* ↓ このリンクを追加 */}
    <nav>
		<ul>
			<li><a href="/">Home</a></li>
			<li><a href="/about">Aboutページへ</a></li>
		</ul>
	</nav>
    
    <Welcome />
</Layout>
```

* `<a href="/about">Aboutページへ</a>`: これがリンクを作成するHTMLタグです。
* `href="/about"`: リンク先のURLを指定します。Astroでは、`src/pages/about.astro` ファイルは自動的に `/about` というURLに対応付けられます。

### 4.作成したページとリンクを確認しよう
Astroの開発サーバーが起動している状態 (`npm run dev` などを実行中) で、ブラウザで確認しましょう。

* まず、トップページ (`http://localhost:4321/`) を開きます。追加した「Aboutページへ」というリンクが表示されているはずです。
* そのリンクをクリックすると、`/about` ページ（先ほど作成した「このサイトについて」と表示されるページ）に移動することを確認してください。
* 直接 `http://localhost:4321/about` にアクセスしても、同じページが表示されます。

これで、新しいページの追加と、既存ページからのリンク設定が完了しました！ Astroではこのように直感的にページを作成し、連携させることができます。
MySQL Workbenchで実行中のSQLを強制終了する方法

MySQL Workbenchで現在実行されているのSQLを確認、強制終了することができます。

赤枠の「Client Connections」をクリックすると現在実行中のSQLの一覧が表示され、SQLの実行時間もわかります。

強制終了したいSQLをクリックし「Kill Query」をクリックするとSQLを強制終了できます。

また、オレンジの枠のRefresh Rateのプルダウンでは、SQLの一覧を更新する間隔を変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2382613/c127dfb8-abae-4467-a6d9-ac7f665679d1.png)
Ubuntu 24.10 への Wine のインストール方法

こちらを参考にしました。
[How to Install Wine 9 on Ubuntu 23.10](https://www.tolgabagci.com/en/install-wine-ubuntu/)

## インストール

```bash
sudo dpkg –add-architecture i386
```

```bash
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/
dists/mantic/winehq-mantic.sources
```

```bash
sudo apt update
```

```bash
sudo apt install --install-recommends winehq-stable
```

## インストールの確認

```bash
wine --version
```

```text
$ wine --version
wine-9.0
```
TypeScript のジェネリクス型を理解したい①

# TypeScriptのジェネリクス型がやっと理解できたのでまとめてみる

最初は意味がわからなすぎた**ジェネリクス型**ですが、
徐々に理解できてきた？ので自分なりにまとめておきます。



## ジェネリクス型って何？

TypeScript では、関数やクラスをより「**柔軟かつ型安全**」に使うために、ジェネリクス型（Generics）を活用します。


## なぜ柔軟なの？

```ts
const testString = (value: string): void => {
  console.log(value);
};
```
上記のような型が固定化された関数の場合、string 型しか受け取れません。
これでは、汎用性に欠けます。

```ts
testString("Hello"); // OK
testString(123);     // エラー: number型は受け取れない
```

では、ジェネリクス型を使うとどうなるのか:slight_smile:
```ts
const testAnything = <T>(value: T): void => {
  console.log(value);
};
```
ここで出てきた T は「呼び出し時に決まる型の箱」のようなもの。
引数に応じて、型が自動で推論されるようになります。↓

```ts
testAnything("こんにちは");             // T は string 型
testAnything(123);                    // T は number 型
testAnything({ name: "さとう" });      // T はオブジェクト型
```

## 型安全とは？
どんな型でも扱えるようにしようとすると、つい any を使いたくなります。

```ts
const getFirst = (arr: any[]): any => {
  return arr[0];
};
```
でもこれでは型安全じゃないし、TypeScriptの意味がなくなります:angry:

anyを使いたくなる時も、ジェネリクスを使うことで、型安全性も担保できるようになります。
```ts
const getFirst = <T>(arr: T[]): T => {
  return arr[0];
};
```
このようにすれば、配列の型に合わせて返り値の型も自動で決まります。

```ts
const names = ["Yamada", "Tanaka"];
const firstName = getFirst(names); // string 型になる！

const ages = [21, 34];
const firstAge = getFirst(ages);   // number 型になる！
```

## 応用編：extends 制約で型をしぼる
今までの説明より、ジェネリクスのいいところは「何でも受け入れられる」ことになります。
だた、開発をしていく中では「特定の条件を満たした型だけ受け入れたい」こともあります。

そんなときに使うのが extendsです。

例えば、以下の場合だとnameの存在を保証できないのでエラーになります。
```ts
const sayHello = <T>(obj: T): void => {
  // obj.name が存在する保証がないのでエラー
  console.log("こんにちは、" + obj.name);
};
```

こんな時は以下のようにextends制約をすることで、nameの存在を保証することができます:information_desk_person:
```ts
const sayHello = <T extends { name: string }>(obj: T): void => {
  console.log("こんにちは、" + obj.name);
};
```
nameは必ず含まれるよと明示することができ、エラーを防ぐことができます。
```ts
sayHello({ name: "佐藤", age: 30 }); // OK
sayHello({ age: 30 });               // エラー：name がない
```


## 最後に
T が出てきたときは「え？どっからでてきたんだ？」と思っていたのが、
今では「なんでも任せられる信頼できるやつ」に変わりました:ok_woman:

今後は Partial<T> や Pick<T, K>、keyof などのユーティリティ型との組み合わせもまとめてきたいなと思ってます。（そのためのパート①）

最後まで、読んでいただきありがとうございました🙏
N-Prolog　TCLTKライブラリ始動

# TCLTKライブラリ　始動
ようやくN-PrologのTCLTKライブラリが動作しはじめました。ずっと忙しかったのです。日本では３月は年度末です。仕事をかかえていてライブラリの開発は停滞していました。ようやく時間がとれたので開発にとりかかりました。キャンバスにシェルピンスキー図形を描画するところまでできました。ご紹介します。

# 使い方
TCLTKライブラリはcinline/1などのC言語埋め込み機能を応用しています。このため使う前にライブラリをコンパイルする必要があります。

```
N-Prolog Ver 4.07
?- use_module(compiler).
yes
?- compile_file('./library/tcltk.pl').
```

コンパイルしたらいったんN-Prologをhaltで終了します。再起動して次のようにTCLTKライブラリを読み込みます。

```
N-Prolog Ver 4.07
?- use_module(tcltk).
yes
```

# シェルピンスキー図形
testsフォルダのtcltk.plに例コードを格納してあります。次のようにコンサルトしてください。

```
?- [-'./tests/tcltk.pl'].
yes
```

起動するにはrecur/0述語です。
次のように図形が現れます。

![2025-04-13 12-01-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/d627d448-06a2-4865-bbf2-ef99d8c68233.png)



#　開発途中
いろいろとTCLTKの機能を取り込んでいます。ドキュメントの TCLTK.mdに記述しつつ
アップデートを繰り返しています。

次の例はovalクラスを利用した日本の国旗です。

![2025-04-13 15-12-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/70f744db-d3a4-41c2-b5ed-d30eb2ddd7cf.png)


どんどんと機能拡張して便利にしてく予定です。

https://github.com/sasagawa888/nprolog
【AWS構築】VPCフローログ設定＆ログ確認のハンズオン

# 背景
VPCフローログ(CloudWatchLogsa
出力)をハンズオンする

## VPCフローログについておさらい
●VPCフローログの公式ドキュメント
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs-basics.html

>VPC、サブネット、またはネットワークインターフェイスのフローログを作成できます。サブネットまたは VPC のフローログを作成する場合、そのサブネットまたは VPC 内の各ネットワークインターフェイスが監視されます。

VPC内の各ネットワークインターフェースなので、EC2やALBなどを通過するトラフィックログを残せる


## VPCフローログ設定

### 前提
VPC・サブネット作成済み
サブネットに作成

### ロググループ作成
ログ出力用の「CloudWatchLogs」を作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/d114f9d9-bb16-42fb-86c4-587d69ce4b3c.png)

「名前」「保持期間」を入力
KMSキー（暗号化は行わない）は空白で作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/4036403c-4d03-4f5c-9baf-edc845befbf6.png)

作成された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/7ae16012-14dd-4c03-80a3-a2d6c68be720.png)


### VPCフローログ作成

VPCの画面に移動し、対象のVPC選択⇒タブ内の『フローログ』内『フローログの作成』クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/a9ab440c-b04c-447a-b23c-c435a8cb7f54.png)

「名前」：任意の名前
「フィルタ」：すべて
「最大集約間隔」：1分
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/16f05ceb-7800-451f-a5ce-8e43ed0eaf91.png)

「サービスアクセス」：新規作成
「ログレコード」：デフォルト形式
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/579df2e5-35fd-45e2-abd7-f9b520a6f656.png)

:::note
サービスロールとは？

AWSサービスが他のAWSサービスを利用するためのIAMロール
:::

作成された
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/6587a63e-7ec6-4ad6-a0c8-6cfc8f5d9062.png)


### ログを確認

:::note warn
VPCフローログを作成したVPC（サブネット）内にEC2を建てて下さい。
インターネットインターフェース関連のリソースがないとログがそもそも出ないため
:::

「ログストリーム」内にしっかりと出力されているので選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/6dcfa2a7-578f-4c68-bc80-c1b00ca2bc81.png)

「タイムスタンプ」：ログが取得された日時
「メッセージ」：ログに内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/e54f646c-73a2-4918-91f3-4e08d3aeb759.png)


### ログの見方
AWSのデフォルトログ出力は以下の構成になっている

[フローログバージョン]　2が最新
[AWSアカウントID]
[インターフェースID(eniで始まる）]
[送信元IPアドレス]
[送信先IPアドレス]
[送信元ポート番号]
[送信先ポート番号]
[プロトコル] TCPが6　UDPが17
[パケット数]
[バイト数]
[通信の開始時間(UNIXエポック)]
[通信の終了時間(UNIXエポック)]
[通信に対するアクション] 許可:ACCEPT,却下:REJECT
[ログのステータス]　ログ記録に成功:OK


2 654654279488 eni-01f35fc1a2377de36 10.0.4.135 15.152.63.145 35098 123 17 1 76 1744521785 1744521793 ACCEPT OK

上の場合のログだと

送信先ポート番号:123の通信→NTP関連
送信元IPアドレス:AWS内部におけるEC2のプライベートIP(10.0.4.135)
送信先IPアドレス:AWS所有のIPアドレス(15.152.63.145)
AWSが所有するNTPサーバとの通信だと分かります。


## おまけ
15.152.63.145　が本当にAWS所有のIPアドレスなのかを確認します。

https://ipinfo.io/
にアクセスしてIPアドレスを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801383/3bc94c29-b4a5-4133-84bb-54275b707a06.png)

AWSの大阪データセンターのIPアドレス帯でした。
グローバルIPアドレスはRIRという管理組織が管理するWHOISデータベースにどの団体が所有しているか、どのドメイン名で紐づいているかなどが記載されています。



また、AWSが所有するIPアドレス帯については下記のcurlコマンドでjsonファイルでも取得できます。
```bash
curl -O https://ip-ranges.amazonaws.com/ip-ranges.json
```

## おまけ2
REJECTされた通信のIPアドレスも同様に検索してみてください
危険なIPアドレスからの通信と表示されるはずです
Astro.js インストールガイド

Astro.jsは自分のPCにインストールして使うことができるサイト作成ツールです。ここではコマンドラインでの操作を中心に、Astroプロジェクトを素早く立ち上げる手順を解説します。

## 始める前に：Node.jsの確認

Astroを動かすには、Node.jsが必要。以下のいずれかのバージョンがインストールされているか確認しましょう。

* **必須バージョン:** v18.17.1, v20.3.0, v22.0.0 以降
    * **(注意)** v19, v21 はサポートされていません。

## インストール手順

ターミナル（コマンドプロンプトやPowerShellなど）を開いて、以下のコマンドを順番に実行していきます。

### 1.プロジェクト用ディレクトリを作成し、移動する

    ```bash
    # "my-astro-project" の部分は好きなプロジェクト名に変更してください
    mkdir my-astro-project
    cd my-astro-project
    ```

### 2.Astroプロジェクトを初期化する

    お使いのパッケージマネージャーに合わせて、以下のいずれかのコマンドを実行します。`create astro`コマンドが、対話形式でプロジェクトのセットアップを進めてくれます。

    ```bash
    # npm を使う場合
    npm create astro@latest

    # pnpm を使う場合
    pnpm create astro@latest

    # Yarn を使う場合
    yarn create astro@latest
    ```

### 3.セットアップの質問に答える

    コマンドを実行すると、いくつか質問されます。基本的な選択肢は以下の通りです。

    * `Where should we create your new project?` (プロジェクト作成場所): `.` (現在のディレクトリ) を入力します。
    * `How would you like to start your new project?` (テンプレート選択): `A basic, minimal starter` または好みのテンプレートを選択します。
    * `Would you like to install dependencies?` (依存関係のインストール): `Yes` を選択するのがおすすめです。ここで `Yes` を選ぶと、次のステップは不要になります。
    * `Would you like to initialize git?` (Git初期化): 必要に応じて `Yes` または `No` を選択します。

### 4.(オプション) 依存関係を手動でインストールする

    ステップ3で依存関係のインストールをスキップした場合や、エラーが出た場合は、以下のコマンドで手動インストールします。

    ```bash
    # npm の場合
    npm install

    # pnpm の場合
    pnpm install

    # Yarn の場合
    yarn install
    ```
    * **(pnpm の注意点)** `pnpm` を使用している場合、画像最適化のために`sharp`が別途必要になることがあります。その場合は `pnpm add sharp` を実行してください。

**開発サーバーを起動して確認**

インストールが無事完了したら、開発サーバーを起動してみましょう。

```bash
# npm の場合
npm run dev

# pnpm の場合
pnpm run dev

# Yarn の場合
yarn run dev
```

ターミナルに表示される `http://localhost:4321` のようなアドレスにブラウザでアクセスすると、作成されたAstroサイトが表示されます。

これでAstroプロジェクトの準備は完了です！ `src` ディレクトリの中を編集して、開発を始めましょう。

---
ハンズオン Terraform(ECS, Fargate, RDS) × Next.js × Gin(Go)

![Video to GIF Converter.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980785/aeedfac3-b802-4d67-9731-f47ba40cb612.gif)


## 初めに
今回はTerraform(ECS, Fargate, RDS) と Next.js と Gin(Go)でハンズオンを作成したのでそれを説明していきます!

## 注意事項
AWSからの請求でおおよそ５$程度かかることに注意が必要です!

- Route53　で 3$
- ECS & RDSで 2$程度


## その１ ローカル用意
今回のリポジトリをローカルに用意
`git clone https://github.com/masaaki-imai/terraform_and_next_and_go`

#### Github

https://github.com/masaaki-imai/terraform_and_next_and_go

## その２ コマンドの用意
必要に応じてAWSアカウントの用意、awsコマンド、terraformコマンドの用意
awsコマンドの設定

`brew install awscli`
`aws configure`
`brew install terraform`
等

## その３　ドメイン取得
AWSのコンソールのRoute53にて適当なドメインを取得してもらえればと思います。
例えば、「tekitou.click」とかがサンプルですが安いものだと３ドル程度で取得できると思います。

![Screenshot 2025-04-12 at 14.45.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980785/d9ad3ff1-a659-42ab-ae4a-bdb349d5533d.png)



## その4 ECR用意
次の２つを用意
- myapp-go
- myapp-next


![Screenshot 2025-04-13 at 15.37.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980785/2fe40562-547f-4e6d-bf47-3b98b7ca538c.png)


## その５
goのアプリケーションをECRにpush

```
cd go
make login
make deploy
make echo_ecr_url
```

※(注１)「make echo_ecr_url」のURLは後で使うのでコピーしてください

## その6
同じくnext.jsのアプリケーションをECRにpush
```
cd ..
cd next
make deploy
make echo_ecr_url
```

※(注2)「make echo_ecr_url」のURLは後で使うのでコピーしてください

## その７
parameter storeにて、
`/myapp/prod/db_password`に`password`
`/myapp/prod/jwt_secret_key`に`jwt-secret-key`

![Screenshot 2025-04-13 at 15.43.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980785/2c50739d-1c20-4502-8642-539f257940db.png)

![Screenshot 2025-04-13 at 15.44.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980785/04438adc-0942-40a0-84fc-06f5308edf61.png)



## その8 terraform実行前にproduction.tfvarsの編集
- s3で適当な名前のバケットを作成
  - 「test_bucket」など

infrastructure-prod.configを編集
※YOU HAVE TO CHANGE THIS!の部分を必要に応じて編集
```
key="PROD/infrastructure.tfstate"
bucket="test_bucket" # ※YOU HAVE TO CHANGE THIS!
region="ap-northeast-1" # ※YOU HAVE TO CHANGE THIS!
```


## その９ production.tfvarsを編集
`ecs_domain_name`に先程 Route53にて取得したドメイン名を入れる
`docker_backend_image_url`に（注１）を入れる
`docker_frontend_image_url`に（注２）を入れる

## その１０　terraform実行
cd ..
cd infra
terraform init -backend-config="infrastructure-prod.config"
terraform plan -var-file=production.tfvars
terraform apply -var-file=production.tfvars


## その１１
https://www.<先程取得したdomain>
でアクセス可能

※例えばドメイン名が「tekitou.click」の場合、次のようになります
https://www.tekitou.click

![Screenshot 2025-04-13 at 14.08.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2980785/e5f45589-844c-400b-a675-cd077a1562e5.png)


## その１２
1日あたり600円ほど金額の請求がくるので、検証が終わったら最後に次のコマンドで削除しておく
`terraform destroy -var-file=production.tfvars`

以上です！
Jamshidian's trickについてまとめ

## 背景
Hull Whiteモデルを勉強する中でヨーロピアンスワップションをJamshidian's trickの存在を
知り、概要をまとめてみました。

※筆者はクオンツでもなんでもない素人です。
　この記事で間違っている事項があればぜひ指摘のコメントを頂ければと思います。

## この記事の概要
Hull-Whiteモデルで数値計算を実施するときにキャリブレーションを実施する。
具体的には市場で公表されているスワップションプライス、Blackボラティリティを参照して
- スワップションプライスが同じになるような
- Hull-Whiteボラティリティを探す

ということをする。

Hull-Whiteボラを探す際にHull-Whiteモデルを使ったスワップション時価計算が必要。
Jamshidian's trickを使うとゼロクーポン債のオプション価格式に置き換えられる。
Hull-Whiteモデルの下でのゼロクーポン債オプションは解析解を使って計算可能となる。

## 前提
- シングルカーブ前提（すなわち、割引金利と参照金利が同じ）とする
- 参照金利は前決め金利（LIBORなど）とする

## Jamshidian's trickを用いた時価計算

まず、計算対象となるヨーロピアンスワップションを考える。パラメータは以下の通り。
- オプションの満期：$T_0$
- ストライク(スワップレート)：$K$
- 行使後の決済日：$T_1,T_2, \dots T_n$
- 行使後のリセット日：$T_0,T_1, \dots T_{n-1}$
- 時点tでの期間$t \sim T$のゼロクーポン債の価格：$B(t,T)$
- ゼロクーポン債の割引期間：$\tau_i (=T_i - T_0)$

想定元本は1単位とすると、スワップションのPayoffは以下の通り。
$$
\begin{equation}
  \left( 1 - K \sum_{i=1}^{n} \tau_i B(T_0,T_i) - B(T_0,T_n) \right)^+
\end{equation}
$$

式を分解してみると以下がわかる。
- 第2項と第3項の組み合わせは利付債(coupon-bearing bond)の価格である。
- さらに、利付債はゼロクーポン債の和によって書かれている。
- ゼロクーポン債価格はHull-Whiteモデル（瞬間ショートレート）で解析的に記述可能(※)
(※)詳しくは参考文献を参照。

これより瞬間ショートレートを明示的に示すために$B(t,T) = F(t,r(t);T)$とする。

次に、この利付債がパーとなるレートを求める。すなわち以下の式を満たす$\tilde{r}$を求める。
($K\tau_i$がクーポンに相当するので一時的に総和の中に含めた)
$$
\begin{equation}
  \sum_{i=1}^{n} K\tau_i F(T_0,\tilde{r};T_i) + F(T_0,\tilde{r};T_n) = 1
\end{equation}
$$
これによって求めた$\tilde{r}$を使って求められる割引債の値を$K_i=F(T_0,\tilde{r};T_i)$とすると、
$$
\begin{equation}
  K \sum_{i=1}^{n} \tau_i K_i + K_n = 1
\end{equation}
$$
となる。これが、スワップションのPayoffがゼロになる状態である。

最後に、上式を使ってスワップションの価格を求める。これを$\mathbf{PSwpt_{0,n}(0)}$として、
```math
\begin{align}
\mathbf{PSwpt_{0,n}(0)} \
&= \left( 1 - K \sum_{i=1}^{n} \tau_i B(T_0,T_i) - B(T_0,T_n) \right)^+ \\
&= \left( K \sum_{i=1}^{n} \tau_i K_i + K_n - K \sum_{i=1}^{n} \tau_i B(T_0,T_i) - B(T_0,T_n) \right)^+ \\
&= \left( K \sum_{i=1}^{n} \tau_i (K_i-B(T_0,T_i)) + K_n - B(T_0,T_n) \right)^+ \\
&= K \sum_{i=1}^{n} \tau_i (K_i-B(T_0,T_i))^+ + (K_n - B(T_0,T_n))^+ \\
&= \sum_{i=1}^{n} K(T_i-T_{i-1}) \mathbf{BP}(0;T_0,T_i,K_i) + \mathbf{BP}(0;T_0,T_n,K_n)
\end{align}
```

ここで、$\mathbf{BP}$はHull-Whiteモデルのもとでのゼロクーポン債のPutオプション価格である。
これより、スワップションの時価はゼロクーポン債のPutオプション価格を求めることで対応できることがわかった。

## 参考文献
- Stochastic Interest Rates (Mastering Mathematical Finance)
- F.Jamshidian "An Exact Bond Option Formula" Journal of Finance, Volume 44, Issue 1 (Mar., 1989), 205-209.
- "体験デリバティブ マルチカーブのもとで分かるハル・ホワイト・モデル" 中村尚介【著】 
- "スワップ取引のすべて【第6版】"杉本 浩一/福島 良治/松村 陽一郎/若林 公子【著】
Cursor おすすめ設定

話題の AI Code エディター Cursor の（個人的）おすすめ設定です。
どちらかというと個人用の備忘録として残しておきます。

## 全般

https://zenn.dev/ashe/articles/5c17bdea96043d

基本はここを見てやりました。以下の設定をとりいれて。

- アクティビティバーをVSCodeライクにする
- 日本語化する
- プライバシー設定
- AI Models
- ステータスバーの配色
- アクティブタブの配色


### 日本語について補足

日本語設定がうまくいかなかったので、以下も参照してやりました。

https://qiita.com/k1mu0419/items/2d903660d1f571abb8f2

> ※上記の手順で日本語できない場合は、まずVSCode拡張機能の「**Japanese Language Pack for Visual Studio Code**」を入れておく必要があるっぽいです。

## **VSCodeのデフォルトターミナルを変更**

windows 使っているんですけど、シェルコマンドを使えるように gitbash にしています。

https://zenn.dev/unsoluble_sugar/articles/362a17a7f57020

## 自動保存

3秒後に自動保存されるように設定しています。

https://qiita.com/shun-shobon/items/3f7b96752022df3a9f57

## フォーマット

Prettier を入れておいて、イイ感じに自動フォーマットしています。

https://qiita.com/the_red/items/e121cbb659c52a60bca6

## **[git] 日本語ファイルの文字化けを回避する**

`git status` をすると日本語ファイル名が崩壊するので以下の設定をしています。

https://dev.classmethod.jp/articles/git-avoid-illegal-charactor-tips/
【保存版】Mac版Excelで使える便利なショートカットキー

# はじめに
この記事を開いていただきありがとうございます！
Excelを使う上で、ショートカットキーを活用すると作業効率が大きく向上します。 
しかし、Mac版ではWindows版とキー配置が異なるため、戸惑う方も多いのではないでしょうか？  
私自身もWindowsではExcelを使ったことがありましたが、Macで使うことは初めてだったので、最初は戸惑いました。
この記事では、Mac版Excelでよく使う＆便利なショートカットキーをまとめて紹介していきたいと思います。

# 基本操作ショートカット

 | 内容 | コマンド | 
 | ----- | ----- | 
 | コピー | Command + C | 
 | 貼り付け | Command + V | 
 | 切り取り | Command + X | 
 | 保存 | Command + S | 
 | 元に戻す | Command + Z | 
 | 全選択 | Command＋A | 
 | 新しいブックを作成	 Command ＋ N | 
 | ファイルを開く | Command + O | 
 | 印刷 | Command ＋ P | 
 | 文書を閉じる | Command ＋ W | 


# セル操作ショートカット

 | 内容 | コマンド | 
 | ----- | ----- | 
 | セルの編集 | Control + U | 
 | 改行（セル内） | Option + Command + Enter | 
 | セルの書式設定 | Command + 1 | 
 | セルの結合 | Command + Option + M（バージョンによって異なる） | 
 | 行全体を選択 | Shift ＋ Space | 
 | 列全体を選択 | Control ＋ Space | 
 | 選択した行や列を挿入 | Command ＋ Shift＋＋ | 
 | 選択した行や列を削除 | Command ＋ ー | 
 | 中央揃え | Command ＋ E | 
 | 左揃え | Command ＋ L | 
 | 右揃え | Command ＋ R |  
 | 次のセルへ移動 | Tab | 
 | 上下左右に移動 | 矢印キー | 
 | 行全体を選択 | Shift + Space | 
 | 列全体を選択 | Command + Space | 
 
# よく使う関数・計算

操作内容	ショートカットキー
 | 内容 | コマンド | 
 | ----- | ----- | 
 | オートサム | Command + Shift + T | 
 | 数式バーへ移動 | Control + U | 
 | 再計算 | Command + = | 
 | 選択している範囲のデータでグラフを作成 | Option + F1 | 


# まとめ
今回はMac版のExcelのショートカットキーを紹介してきました。
今後、Mac版のExcelを使う方の参考になっていたら嬉しいです。
ここまで読んでいただきありがとうございました！
【Devin】AIエージェントエンジニアを使ってみました

# Devinとは？

Cognition社が開発したAIエージェントです。  

コードを補完してくれる支援型のツールとは異なり、**要件の理解、設計、実装、テスト、デバッグ、Pull Requestの作成、さらにはIssueへの対応までを一貫して自律的に行う**ことができます。

## 登録方法

### 1. サインアップ画面で`Sign up`をクリック

https://app.devin.ai/invite/KR4q2ANARpQ7Xg02

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230436/ce7d45bf-9de7-44f0-8fc8-104276f04b95.png)


### 2. お好きな方法でアカウントを作成

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230436/a56f9dbd-1083-4dff-b691-d43ce69beaad.png" alt="画像の説明" width="320">

### 3. 組織名を入力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230436/c7f168a6-66da-4608-913a-14f0ffaccb5b.png)

### 4. プランを選択（$20から使えます✨）して支払い

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230436/e8adcdf8-87b8-4463-adf3-56c0252f9bb1.png)

### 5. GitHub、Slackと連携させれば準備完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230436/9ead4139-436f-41a0-b388-961783429714.png)

SlackでDevinにメンションをつけてタスクを依頼できるようになります。
あとは、人間と同じようにコミュニケーションを取りながら開発することができます。

## やってみたこと

新たな機能開発でなければAIでも高精度で遂行できるのではないかという考えのもと、まずはFlutterのプロジェクトでSDKのバージョンアップを依頼してみました（自分でやると結構面倒なので、外注できると助かりますよね。機能開発ではないので面白みもないですし。。

↓このようなIssueを作り、Slackで当該Issueのリンクを貼ると...

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230436/7fcfcd43-7bd7-4ae5-befc-2b98ceda1f41.png" alt="画像の説明" width="320">

作業をスタートしてくれました。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230436/5bc6ef60-5799-4b64-a40b-95bc4b81f379.png" alt="画像の説明" width="320">

数分後、Slackに完了の通知が来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230436/8ca9123d-56f9-46dc-ac11-1e74d35b68b8.png)

Issueにバージョンを明記しなかったため、2025/4/13時点での最新には更新してくれませんでした。
あと、ビルドツールは別途インストールしてもらうように指示を出す（あるいは自身で設定する？）必要がありそうです。

改めて指示を出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230436/34e2d515-71f8-4b70-a6bb-a5bdd379742a.png)

数分でPRが修正されました。
バージョン管理ツール用の設定ファイルの変更が漏れていたり、CIの設定ファイルの変更が漏れていたりと、この後も数回のラリーが必要でしたが、自分でやるよりも大幅に時間短縮（とストレス軽減）になりました！

## 使ってみた感想

- **作業効率改善**: Devinが作業している間、自分は他のタスクができるので作業効率が格段に上がります。複数のタスクを同時に依頼することもできるので、軽微な改修のタスクが山積みになっているプロジェクトにはかなりフィットすると思います。
- **タスクの管理能力と言語化力**: Devinには得手不得手がありそうなので、特性を掴んで任せるタスクを選別したり、タスクの内容を細かく丁寧に書いたりすることで更なる有効活用が期待できる
- **Devinの能力**: 駆け出しエンジニア〜中堅エンジニアと同じくらいの成果は出せそう（エンジニア派遣業界にはかなり大きな影響があるのでは？）
- **コードレビュー時の気配りが不要**: 人間が書いたコードをレビューする際は、実装者への配慮が不可欠ですが、Devinに対しては端的に修正してほしい点のみを伝えればよいので、レビュー時の脳コストが若干下がります（クッション言葉が不要になる）
- **最低限の英語力が必要**: Slackは日本語でメッセージを送ってくれるが、WebのSession画面（＝コード書いたりしてくれる画面）ではところどころ英語なので、自身の英語力もちょっと必要そう
【備忘録】モックサーバー（Mock Server）を３分で構築する

## はじめに
モックサーバーとは、フロントエンド開発やテスト時に、バックエンドのAPIができていない状態でもダミーのレスポンスを返すことができる模擬サーバーです。


## 実際にやってみた
どのディレクトリでも良いので下記コマンドを実行します
```ruby
npm install -g json-server
```
パスを通します
```ruby:zsh
echo 'export PATH=$HOME/.npm-global/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
```

ディレクトリを作成し,その中にJSONファイルを作成します。
ファイル名はdb.jsonです
```ruby
mkdir test && cd test && vim db.json
```

```ruby:db.jsonサンプル
{
  "users": [
    { "id": 1, "name": "Alice" },
    { "id": 2, "name": "Bob" }
  ]
}

```

## 動作確認

ポート3000でアクセスします。
必要に応じて空いているポート番号に変更してください
```ruby
json-server --watch db.json --port 3000
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3999989/109680c1-0b7b-47b5-9692-2b5491d2de6d.png)


db.jsonのidやnameを変更してブラウザをリロードすると画面表示も変わります
```db.json
 "users": [
    { "id": 1, "name": "Alice" },
    { "id": 2, "name": "Bob" },
    { "id": 3, "name": "pon" }
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3999989/ab9a2d42-5c02-4061-a520-0d1e81f7daee.png)

ctr + C　で終了できます。


## まとめ
簡単にモックサーバーを作成してみました。開発で使っていこうと思います。

## 参考文献

https://qiita.com/free-honda/items/b36b94f1b7e76194d667

https://qiita.com/arenahito/items/75e59b921497f5427b69
統計検定1級　2022　統計応用(理工学)　問4　解説

![img20250411_11114515.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/b73ab1ff-281d-4747-a785-bf1b1560ae8c.jpeg)
![img20250411_11120992.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/66e9381a-f7be-4f31-af71-7d2b3c9e072a.jpeg)
最近話題のDevinとは⁈ 開発効率を何倍にも爆上げさせる生成AI「Devin」

本記事では最近とても話題になっている生成AIサービス「Devin」について紹介します。

Devinは、自然言語での指示を受け取り、計画の立案からコーディング、テスト、デプロイメントまでを一貫して行うAIエージェントです。<br>


このサービスを使えば、開発の効率が何倍にも上がることでしょう！(休憩でカフェに行っている間にバックグラウンドでタスクが終了するかも？！）<br>


この記事の終わりに、Devinで使用できる約3000円分のクレジットがもらえる招待リンクを載せています！<br>



<h1>目次</h1>
・世界初の完全自律型AIエンジニア「Devin」とは？<br>
・Devinの特徴<br>
・Devinの活用事例<br>
・最後に<br>




<h1>世界初の完全自律型AIエンジニア「Devin」とは？</h1>

![ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3902427/47198ca1-277d-4ffd-ae2d-a39e74c462ca.png)


2024年、AIスタートアップ企業Cognition Labsが開発した「Devin」は、世界初の完全自律型AIソフトウェアエンジニアとして登場しました。従来のAIツールとは一線を画し、Devinはソフトウェア開発の全工程を自律的に遂する能力を持っています。​

<h1>Devinの特徴</h1>

**自律的な開発プロセス**：ユーザーの指示なしに、ソフトウェア開発の全工程を遂行。​

**リアルタイムのエラー修正**：エラーを検出し、即座に修正。​

**エンドツーエンドのプロジェクト管理**：​情報の検索からプロジェクトの展開、ユーザーとのコミュニケーションまでを一元管理。​

**Slackとの連携**：​Slack上で@Devinとメンションすることで、直接指示を出すことが可能。Devinはスレッド内で応答し、進捗状況や質問を共有する。 ​

**GitHubとの連携**：​DevinはGitHubと統合されており、リポジトリへのアクセス、ブランチの作成、プルリクエストの提出、CI/CDの設定などを自動で行うことが可能。

<h1>Devinの活用事例</h1>

<h3>・段階的な開発アプローチ</h3>
プロジェクト概要からアーキテクチャ設計、コンポーネント単位の実装、結合、テストを一連の流れで行う。

<h3>・並列開発ワークフロー</h3>
プロジェクトを複数の独立したタスクに分割し、各タスクをDevinインスタンスに割り当て同時進行させる。
定期的に進捗を確認し、すべてのタスクが完了したら成果物を統合する。

<h3>・反復的改善ワークフロー</h3>
基本的な機能を実装した最低限のバージョンの製品を作成し、ユーザーなどからフィードバックを収集する。
そのフィードバックから改善点を見つけ、Devinに伝えて実装させる。その作業を繰り返し製品を改善させていく。

<h1>最後に</h1>
簡単ですが、Devinについて紹介させて頂きました。Devinの登場は、ソフトウェア開発の在り方を大きく変える可能性を秘めています。​AIが自律的に開発タスクを遂行する能力は、開発者の働き方や企業の開発プロセスに革新をもたらしていくと思います。ぜひあなたもDevinを使って新たな開発スタイルを体験してみてください！！<br><br>

<h3>Devinをお得に始めるために</h3>
下記のリンクから登録することで、Devinで使える約3000円のクレジットが付与されます！
お得に始められるのでぜひ活用してみてください！<br>

https://app.devin.ai/invite/RZzCcetKWcpC30gm
統計検定1級　2022　統計応用(理工学)　問5　解説

![img20250411_10032135.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/93b6670c-9f6a-4a37-9827-d9304672c9ea.jpeg)
![img20250411_10034751.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/17bcbbdb-4298-4772-97a6-72477d2fd833.jpeg)
![img20250411_10041108.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/316580ba-da54-43a3-8abf-49c04efa94ed.jpeg)
ABC 401 C - K-bonacci

# [ABC 401 C - K-bonacci](https://atcoder.jp/contests/abc401/tasks/abc401_c)

↑問題の詳細は上記のリンクを参照ください！
**※興味持った方は毎週土曜日21:00からのABCコンテストにratedで参加してみてください**⭐️

## 問題文

正整数 N, K が与えられます。長さ N+1 の数列 A = (A₀, A₁, ..., Aₙ) の各要素の値を、以下の方法で定義します。

- 0 ≦ i < K のとき、Aᵢ = 1  
- K ≦ i のとき、Aᵢ = A_{i-K} + A_{i-K+1} + ... + A_{i-1}

A_N を 10の9乗（10⁹）で割ったあまりを求めてください。

## 制約

- 1 ≦ N, K ≦ 10⁶  
- 入力される数値はすべて整数

## 解法ポイント
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646082/ecf07354-60a8-4c1d-84a2-b90c09437c40.png)

こんな感じに整理するとK個分の数列Aを配列で管理してあげると解けそうです。

## NG例1

```python
from collections import deque

MOD = 10**9
N,K = map(int, input().split())

nums = [1 for _ in range(K)]
dq = deque()
dq.extend(nums)

for _ in range(N-K+1):
  dq.append(sum(dq) % MOD) # O(N*N)になっちゃう。❌制約がN<=10**6なのでMAX 10**12
  dq.popleft()

print(dq[-1])
```

体感python(pypy)だと10**10超えるとタイムアウトでTLE(誤答)になる感覚です

## NG例2

NG例1からO(N*N)からO(N)にどうやってできるか試行錯誤すると
実は、以下のことに気づくとO(N)で計算可能なことに気づきます。
>i(>=K+1)の場合は、A[i] = A[i-1]*2 - A[i-K-1]

```python
from collections import deque

MOD = 10**9
N,K = map(int, input().split())

nums = [1 for _ in range(K)]
dq = deque()
dq.extend(nums)

total = sum(dq)

for _ in range(N-K+1):
  dq.append(total % MOD)
  total = (total *2 - dq.popleft()) #ここにMODを置かないと桁がデカくなりすぎてTimeOutする

print(dq[-1])
```

## ACサンプル(正解)

ということで、totalの再計算にもMODを入れるとAC(合格)します。

```python
from collections import deque

MOD = 10**9
N,K = map(int, input().split())

nums = [1 for _ in range(K)]
dq = deque()
dq.extend(nums)

total = sum(dq)

for _ in range(N-K+1):
  dq.append(total % MOD)
  total = (total *2 - dq.popleft()) % MOD

print(dq[-1])
```