OmniAICreator/Qiita-1.07M huggingface dataset:
JavaScriptでSPAのようなものを構成する

# やりたいこと
モダンなJavaScriptフレームワークが行っているようなSPAをJavaScriptのみで似たようなものでもいいから実装したい。(Vue.jsとかReactでいいとかは置いといて)
### SPA(Single Page Application)とは
従来のウェブアプリケーションの構造であるMPA(Multi Page Applicaton)では、ページごとにサーバーから新しいHTMLを取得していました。
一方SPAではページ遷移を行わずに動的なコンテンツを表示する仕組みです。
初回のページ読み込み時に必要なデータを取得し、動的にHTMLを更新することで、高速なパフォーマンスと優れた保守性を実現します。
# ディレクトリ構成

```
プロジェクトディレクトリ
        ├── docker-compose.yml　　//httpサーバー
        ├── html
        │   ├── index.html　　// 表示されるhtmlファイル
        │   ├── pages　　// 差し込まれるHTMLファイル
        │   │   　├── index.html
        │   │   　├── About.html
        │   │   　├── Contact.html
        │   │   　├── 404.html
        ├── js
        │   ├── Router.js　　//ルーティングファイル
```
# 環境構築
C:file上では動かないので最低限でもhttpサーバーを作っておきます。
```yml:docker-compose.yml
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
```
# 表示されるhtmlファイル
htmlディレクトリ直下のindex.htmlを編集します
```html:index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title></title>
    <script src="js/Router.js"></script>
  </head>
  <body>
    <nav>
      <a href="/" onclick="route()">Home</a>
      <a href="/About/" onclick="route()">私たちについて</a>
      <a href="/Contact/" onclick="route()">お問い合わせ</a>
    </nav>
    <hr />
    <div id="main-contents"></div>
  </body>
</html>
```
# ルーティングファイル
ルーティングするためのRoute.jsを以下のように実装します。
routesにルートを追加していきます。
・キー = ルートパス
・template = pagesのhtmlファイル
・title = 各ページのタイトル
その他詳細は各所コメントアウトに書いてあります。
```js:Router.js
"use strict";

// ——————————————————————————————————————
// ルートごとのテンプレートファイルとページタイトルを管理
// ——————————————————————————————————————
const routes = {
  "/": { template: "/pages/index.html", title: "Home" },
  "/About/": { template: "/pages/About.html", title: "わたしたちについて"},
  "/Contact/": {template: "/pages/Contact.html", title: "お問い合わせ"},
  404: { template: "/pages/404.html", title: "404"},
};
// ——————————————————————————————————————
// リンククリック時に実行
// ——————————————————————————————————————
function route(event) {
  event = event || window.event;  // eventが未定義ならwindow.eventから取得
  event.preventDefault();   //デフォルトの操作をキャンセル
  // 履歴に追加（タイトルは各自 handleLocation でセットするので第2引数は空文字）
  window.history.pushState({}, "", event.target.href);
  handleLocation();
}
// ——————————————————————————————————————
// ページの描画
// ——————————————————————————————————————
async function handleLocation() {
  const path = window.location.pathname;  // 現在のパスを取得
  const route = routes[path] || routes[404];  // 定義ルートから該当パスを取得。なければ404
  // HTML読み込み
  try {
    const res = await fetch(route.template);  // route.templateからHTMLファイルを取得
    const html = await res.text();  // レスポンスの本文をテキストとして取り出す
    document.getElementById("main-contents").innerHTML = html;  // main-contentsへ本文を追加
  } catch (err) {
    console.error(err);
  }
  document.title = route.title;   // タイトルを書き換え
}
// 履歴操作(popstate/戻る・進)を監視し再描画を行う
window.addEventListener("popstate", handleLocation);
// 初回ロード時の描画
window.addEventListener("DOMContentLoaded", handleLocation);
```
# まとめ
JavaScriptでSPAモドキを構成しました。
作ってみるとフレームワークの素晴らしさがよくわかりました。
【AWS】AWS Billing Conductor

AWS Billing Conductorは、AWS Organizationsで複数のアカウントを管理している環境において、AWSアカウントの請求書の取りまとめ方をカスタマイズするサービスです。

billing・・・請求書作成
conductor・・・案内人、ガイド、(団体旅行の)添乗員、管理人、経営者、(バスなどの)車掌、(列車の)車掌、指揮者、伝導体、導体
TomcatのJFRダンプを取得するシェルスクリプト

Javaアプリケーションのパフォーマンス解析で使用するJDK Flight Recorder（JFR）をファイルにファイルに出力するシェルスクリプトのサンプルです。このシェルではTomcatのJVMからJFRダンプを取得し、ログディレクトリへファイルを保存します。

```bash
#!/bin/bash

# TomcatのJVM PIDを取得
PID=$(jps -l | grep 'org.apache.catalina.startup.Bootstrap' | awk '{print $1}')

# PIDが取得できなければ終了
if [ -z "$PID" ]; then
  echo "TomcatのPIDが見つかりません。"
  exit 1
fi

# 保存先ディレクトリ
OUT_DIR="/opt/tomcat10/logs"

# 出力先ディレクトリがない場合はディレクトリを作成
if [ ! -d "$OUT_DIR" ]; then
  mkdir -p "$OUT_DIR"
fi

# タイムスタンプ付きファイル名
FILENAME="$OUT_DIR/flight_$(date +%Y%m%d_%H%M%S).jfr"

# JFRダンプ実行
jcmd "$PID" JFR.dump name=1 filename="$FILENAME"
```

##  メリット
・TomcatのPIDを自動で取得でき、手動で確認する手間が省けます。
・出力先ディレクトリが存在しない場合でも、自動で作成されるため柔軟です。
・タイムスタンプ付きでファイルが保存され、ログの管理が容易になります。

## デメリット
・jps や jcmd が使えない環境（最小構成のJREなど）では動作しません。
・JFRが無効化されている場合、事前に有効化設定が必要です。
・Tomcatを複数インスタンス起動している環境では、対象PIDの判別に工夫が必要です。

## cronの設定
crontabを使用することでシェルの定期実行が可能です。
次のような設定をすることで5分に１回JFRをファイルに出力することが可能です。

```
*/5  * * * * /root/jfr/jfr_out.sh > /dev/null 2>&1
```

取得頻度は環境に合わせてカスタマイズしてください。
選択したセルに赤枠を付けるマクロ

選択したセルに2倍の大きさの赤枠を付けるマクロです。

```
Sub 赤枠()
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, Selection.Left, Selection.Top, 278, 192).Select
    Selection.ShapeRange.Fill.Visible = msoFalse
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
    End With
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .Weight = 3
    End With
End Sub

```
生成AIについての殴り書き

ただのメモ
気になれば、随時追記

- 数か月・数年先には使ってるので、使うのが早いか、遅いか
- 使用するのが遅くなれば、遅くなるほど、差が広がる
- 数日あれば、AIエージェントのコードさえ書けるから、それだけ差が広がる
- 情報Iよりプロンプトエンジニアリングの方が大事になる気がする
- コードリーディングは大事になりそう
- 確率の問題なので、同じプロンプトで、数回試してみる
- こんなことが多くなりそう
https://japan.cnet.com/article/35234326/
- セキュリティは意識したい
- だいたいハードコードする
- だいたい1ファイルにまとめよる
- 絶対にコードに、さらっとでも目を通す
- ハルシネーションがあっても、気づけばいい
- 思い通りにいかなくても、使い続ける
- なんか言ってることがおかしい気がするなと思ったら、生成AI以外で調べる
【Kaggle初級】House Pricesで0.1283達成までの試行錯誤まとめ（RandomForest → LightGBM）

# House Prices回帰タスク：ランダムフォレストからLightGBMへ——試行錯誤の記録とスコア改善

Kaggleの回帰コンペ「House Prices - Advanced Regression Techniques」に取り組み、スコアを **0.14465 → 0.1283（RMSLE）** にまで改善しました。この記事では、ランダムフォレストから始めて、特徴量エンジニアリングや前処理、LightGBMへの切り替えなど、試行錯誤のプロセスを中級者向けに紹介します。

> 💡 House Pricesコンペの評価指標は **Root Mean Squared Log Error（RMSLE）** です。対数変換された予測値と実測値の誤差を元にスコアが算出されるため、0.1283 という値は RMSLE を意味しており、RMSE とは異なります。

## はじめに

このコンペの目的は、住宅価格を予測すること。データは数値やカテゴリ型が混在しており、適切な前処理と特徴量設計が求められます。

## ステップ1：ベースライン（スコア 0.14465）

まずは`RandomForestRegressor`で学習。

```python
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor()
model.fit(X, y)
```

* 欠損補完は `.fillna(0)`
* カテゴリは `LabelEncoder` で数値化

**反省**：カテゴリに順序があると誤解されやすく、汎化性能が弱かったです。

---

## ステップ2：LightGBM導入（スコア 0.15059）

`LGBMRegressor` に変更し、モデルの汎化性能が向上。

```python
from lightgbm import LGBMRegressor
model = LGBMRegressor()
model.fit(X, y)
```

一部のカテゴリを `pd.get_dummies()` で変換。初期段階としては悪くない結果。

---

## ステップ3：欠損値補完の改善（スコア 0.15340）

* `object型` → "None"
* `数値型` → median

```python
for col in all_data.columns:
    if all_data[col].dtype == "object":
        all_data[col] = all_data[col].fillna("None")
    else:
        all_data[col] = all_data[col].fillna(all_data[col].median())
```

**反省**：この段階で特徴量数を絞りすぎて情報損失が発生。

---

## ステップ4：特徴量エンジニアリング（スコア 0.15006）

以下のような派生特徴量を追加：

* `TotalSF`: 地下+1F+2Fの面積合計
* `HouseAge`: 築年数
* `RemodAge`: 改築後年数
* `TotalBathrooms`: 全バスルーム合算
* `TotalPorchSF`: 全ポーチ面積
* `HasPool`: プール有無（0/1）

```python
all_data["TotalSF"] = all_data["TotalBsmtSF"] + all_data["1stFlrSF"] + all_data["2ndFlrSF"]
all_data["HouseAge"] = all_data["YrSold"] - all_data["YearBuilt"]
# 他略
```

---

## ステップ5：One-Hot全適用 + 外れ値除去（スコア 0.1283）

* 全カテゴリ変数に `get_dummies()`
* 外れ値を `GrLivArea > 4000 & SalePrice < 300000` で除外
* 目的変数に `log1p()` を使って正規化

```python
final_model = LGBMRegressor(
    n_estimators=3000,
    learning_rate=0.01,
    num_leaves=32,
    colsample_bytree=0.7,
    subsample=0.7,
    max_depth=6,
    reg_alpha=0.1,
    reg_lambda=0.1,
    random_state=42
)
final_model.fit(X, y)
```

---

## 結果

最終的に **スコア 0.1283（RMSLE）** を達成。Feature Engineering + LightGBM + log変換の組み合わせが効果的でした。

---

## まとめと学び

### ランダムフォレスト vs LightGBMの特徴比較

| モデル       | ランダムフォレスト                          | LightGBM                  |
| --------- | ---------------------------------- | ------------------------- |
| 学習アルゴリズム  | バギング（複数の決定木の平均）                    | 勾配ブースティング（決定木の連続構築）       |
| 精度        | 初期モデルとして安定（過学習に強い）                 | 高精度だがチューニング次第で過学習の可能性あり   |
| 訓練速度      | 遅め（並列化されるが全木構築が必要）                 | 非常に高速（Leaf-wiseのアルゴリズム）   |
| ハイパーパラメータ | 少なめで扱いやすい                          | 多めでチューニングが必要              |
| 特徴量重要度    | 解釈性が高い（feature\_importances\_で確認可） | 同様に確認可能だが、モデルが複雑な場合は注意が必要 |

このように、ランダムフォレストは初期段階で使いやすく、LightGBMは最適化すれば高性能を発揮するため、**回帰タスクではLightGBMが最終的に優位**となることが多いです。

* `LabelEncoder` は分類用。回帰にはOne-Hot推奨
* 欠損値処理は「意味を考える」ことが大事
* 特徴量削減は慎重に。削りすぎ注意
* log変換は右に偏るデータに効果的

今後は、Optunaなどを使ってハイパーパラメータの自動最適化や、Stackingによるアンサンブルなどにも挑戦したいと思います。

---

ご覧いただきありがとうございました！Kaggleに取り組む方の参考になれば幸いです。
ロジスティック成長モデルとフィードバック


### ◉ ロジスティック成長モデル（連続時間）：

$$
\frac{dN}{dt} = r N(t) \left(1 - \frac{N(t)}{K} \right)
$$

* $N(t)$：時刻 $t$ における人口・資源量
* $r$：成長率（gain）
* $K$：環境収容力（feedback定数）

---

### ◉ 本コードで使用された式（外乱あり）：

$$
\frac{dN}{dt} = r N(t) \left(1 - \frac{N(t)}{K} \right) + u(t)
$$

* $u(t) \sim \mathcal{N}(0, \sigma^2)$：外乱（ガウスノイズ）
* 実装上は Euler 法で数値積分：

$$
N_{i+1} = N_i + \Delta t \cdot \left[ r N_i \left(1 - \frac{N_i}{K} \right) + u_i \right]
$$

---

## ✅ システム的観点からのフィードバック表現：

$$
\text{Gain} \cdot (1 - \text{Feedback}) + \text{Disturbance}
\quad \text{すなわち} \quad
r N(t) \left(1 - \frac{N(t)}{K} \right) + u(t)
$$

* ネガティブフィードバックとして $\displaystyle \frac{N(t)}{K}$ を適用
* 定常状態では $N(t) \to K$ に収束

---

```Python
# Program Name: logistic_growth_with_noise.py  
# Creation Date: 20250617  
# Overview: Simulates continuous-time logistic growth with Gaussian disturbance  
# Usage: Run to simulate and visualize disturbed logistic growth trajectory  


# --- ライブラリのインポート / Import libraries ---
import numpy as np
import matplotlib.pyplot as plt

# --- パラメータ定義 / Define parameters ---
r = 0.5               # 成長率 / Growth rate (Gain)
K = 100               # 環境収容力 / Carrying capacity (Feedback denominator)
N0 = 10               # 初期値 / Initial population
T = 30                # 総時間 / Total time
dt = 0.1              # 時間刻み幅 / Time step
steps = int(T / dt)   # ステップ数 / Number of steps
sigma = 2.0           # 外乱の標準偏差 / Standard deviation of disturbance

# --- 配列初期化 / Initialize arrays ---
N = np.zeros(steps + 1)     # 個体数の履歴 / Population history
N[0] = N0                   # 初期値設定 / Set initial population
time = np.linspace(0, T, steps + 1)  # 時間軸 / Time axis

# --- 外乱生成 / Generate disturbance ---
np.random.seed(42)                  # 乱数シード / Random seed for reproducibility
u = np.random.normal(0, sigma, steps + 1)  # ガウスノイズ / Gaussian noise

# --- オイラー法による逐次更新 / Euler integration ---
for i in range(steps):
    dN_dt = r * N[i] * (1 - N[i] / K) + u[i]  # ロジスティック成長＋外乱 / Logistic growth + disturbance
    N[i+1] = N[i] + dt * dN_dt                # 差分更新 / Euler update

# --- プロット / Plot the result ---
plt.figure(figsize=(10, 6))
plt.plot(time, N, label='Disturbed Logistic Growth')
plt.axhline(K, color='gray', linestyle='--', label='Carrying Capacity K')
plt.title('Logistic Growth with Gaussian Disturbance')
plt.xlabel('Time')
plt.ylabel('Population N(t)')
plt.legend()
plt.grid(True)
plt.show()

```
結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046871/1948e1e2-b6a3-478d-84fb-944ee2125722.png)
Gitって何？バージョン管理って必要なの？小学生でもわかるように説明してみた

こんにちは。  
今日はプログラミングとかやってるとよく出てくる「Git（ギット）」ってやつについて、お話ししてみたいと思います。  
難しそうに聞こえるかもしれないけど、心配しないで。小学生でもわかるように説明するから！

## まず、絵を描いてるところを想像してみよう

たとえば、君がノートにマンガを描いていたとしよう。  
最初に「１ページ目」を描いた。  
次に「２ページ目」を描いた。  
でも、「あっ、やっぱり１ページ目のセリフ変えたいな」と思ったとする。

じゃあどうする？

昔のページを消して、描き直す？  
でも、それってちょっと怖いよね。もし失敗したら、元のページはもう見れない…。


## そんなときに便利なのが、「バージョン管理」

これはね、「ページを描いたときのスナップショット（写真）」を残しておける仕組みなんだ。

たとえば、こんな感じ：

- 「１ページ目完成！」→ パシャッ📸
- 「２ページ目完成！」→ パシャッ📸
- 「セリフ変えた！」→ パシャッ📸

って感じで、そのときそのときの状態を保存しておけるの。

あとで「やっぱ前のやつに戻したいな…」って思ったときは、そのスナップショットを見て、ポチッと戻せばOK。便利でしょ？


## じゃあGitって？

Gitは、そのバージョン管理をしてくれる便利な道具の名前なんだ。

プログラムを作るとき、いろんなファイルがあって、しょっちゅう直したり消したりするよね？

それをぜーんぶ記録して、

- どこをどう変えたか
- 誰が変えたか
- いつ変えたか

まで覚えておいてくれる。

しかも、友達と一緒に作るときも、だれがなにをしたかがすぐわかる。チームで使うと超便利！


## まとめると…

- Gitは「ノートの絵を描くとき、いつでも戻れるように写真をパシャパシャ撮ってくれるカメラマン」📷  
- バージョン管理は「未来の自分を助けるタイムマシン」⏳

## おまけ：Gitを使ってみたい人へ

はじめてなら「[GitHub](https://github.com)」っていうサービスがおすすめだよ。  
無料で使えるし、ボタンをポチポチ押すだけで、簡単にバージョン管理ができるよ。



いかがだったかな？  
「Gitってなんか難しそう…」って思ってた人も、ちょっとイメージわいたらうれしいな。

それじゃあ、またね！🧑‍💻✨
GitHub CopilotのAgentモードでASP.NET Coreアプリケーションを作る

# 事前準備
Visual StudioのAgentモードを有効にしよう。
6/17現在、Visual Studioをインストールした時点でのデフォルトではAgentモードが無効になっています。
Agentモードを有効にしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951664/4ba18a27-c5f6-4873-a97c-8621b2fc1a65.png)

# コンソールアプリケーションを作る
.NET 8あたりでコンソールアプリケーションを作成していきます。
今回の、Webアプリケーションの元ネタになるものです。

たとえば、GitHub Copilot Chatをエージェントモードにして以下のようにします。

```
1から100までの偶数を表示する
```
すると、以下のようにコードが生成されました。

```csharp
// 1から100までの偶数を表示
for (int i = 2; i <= 100; i += 2)
{
    Console.WriteLine(i);
}

```

ではこれをWebアプリケーションにしていきます。

# ASP.NET Coreアプリケーションにする

GitHub Copilot Chatに以下のように入力していきます。

```
Webアプリケーションにしてください
```

すると、プロジェクトファイルを以下のように書き換えASP.NET Coreアプリケーションにするなどの変更をしていきます。

```
<Project Sdk="Microsoft.NET.Sdk.Web">
```

Program.csは以下のようになりました。

```csharp
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () =>
{
    var evenNumbers = Enumerable.Range(1, 100).Where(x => x % 2 == 0);
    return string.Join("<br>", evenNumbers);
});

app.Run();
```
実行結果が以下のようになりました。
改行のHTMLマークアップが邪魔です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951664/8987bd81-985c-4179-8d06-c35d05c7b8f7.png)

ですので、再びGitHub Copilot Chatに以下のようにお願いします。

```
改行のマークアップは不要です
```

良い感じになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951664/2c6f4f4a-8001-46fa-99ce-881b30c54c30.png)

さらに、データとして読みやすいようにJSON形式で返してもらうようにお願いしてみます。

```
JSON形式で返却するようにしてください
```

コードが以下のように最終的になりました。

```csharp
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () =>
{
    var evenNumbers = Enumerable.Range(1, 100).Where(x => x % 2 == 0).ToArray();
    return Results.Json(evenNumbers);
});

app.Run();
```
JSON形式で返却されていることを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951664/3441f2b7-f822-455a-86f7-5af3e4a67680.png)

さらに、Blazor WebAssemblyでこれを表示するフロントエンドを作ってもらいましょう

# フロントエンドの作成
同じようにGitHub Copilot Chatにお願いしていきます。
```
今あるAPIのデータを表示するフロントエンドをBlazor WebAssemblyで作ってください。
```

同様に何回かエラーの末、GitHub Copilot Chatとのやり取りの末以下のようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951664/6a790059-9fa6-4f91-92e7-72b1eb8833ff.png)

# 結論

コードを1行も書かなくても簡単なものならCopilotで作れる！
Install-Moduleエラー ：...Offset to Central Directory cannot be held in an Int64.

## 環境
- OS : windows11
- powershell : 7.5.1
- module : [QuickAccess for PowerShell](https://www.powershellgallery.com/packages/QuickAccess)

## 自作モジュールのインストール
公開した自作モジュールを自分で落として使ってみることにしたが、以下のエラーが出た。
```
Install-Package: Package 'QuickAccess' failed to be installed because: Offset to Central Directory cannot be held in an Int64.
```
Publish-Moduleコマンドを使わずに、PowerShellGalleryにアップロードしたせいか？
参照記事：https://qiita.com/June-10-cloudy/items/9283436ebe283310c993

AIの分析は以下。

>このエラーは、パッケージの中央ディレクトリのオフセットがInt64に収まらないという問題が発生していることを示しています。これは、パッケージの圧縮形式やサイズの問題が原因である可能性があります。

## 1.0.0 だけは、なぜかインストールできた
一番最初にテストでアップロードしたバージョンだけがなぜか正常にインストールできるということを発見。それで、ディレクトリーの構造を1.0.0に合わせて再アップ。その後、PowerShellGalleryからInstall-Moduleしてみたら、通った。

それから、取り除いたファイルを一つ一つ戻していき、再アップテストを繰り返した。それから、nuspecファイルの設定に問題があることを発見。

linsenseタグとlinsenseUrlタグどちらか一方を使うべきが、併用していたことが問題。
スキームを読まなかった凡ミス。
```
<license type="expression">MIT</license>　# これを削除。
<licenseUrl>https://github.com/June-10-cloudy/QuickAccess/blob/master/LICENSE.txt</licenseUrl>
```
今週の4ユニ第1号

# はじめに
本記事はこちらの記事の内容をもとにAIを使用して作成したものです。
記事の作り方など詳細はこちらの記事をご覧ください。

https://qiita.com/taka_2525/items/254e1625f663de26289b

なお、社内情報の流出防止のために記事の一部を省略・改変しています。
それではどうぞ！


# 🧠近くて強い！チーム力を上げる“ちょい技”改革はじめました🎉

## 👥タスクが近いなら、座るのも近くに！“席替え作戦”始動🎯

「相談したいけど、わざわざ声かけるのもなあ…」

そんなモヤモヤを解決すべく、「席替え作戦」が発動中！

タスクが似ているメンバーが近くに座ることで、ちょっとした相談もサクッとできちゃう。

「この仕様、どう思う？」なんて会話が自然に生まれるんです。

作戦名の通り、**地の利**を活かした配置で、チームの会話もぐっと増えてきています🎯

## 💡振り返りで出なかったアイデア、「おたすけ広場」に持ち込もう！

「振り返りの時間内では具体的なアクションまで決めきれなかったなぁ…」

そんな時はデイリーの議題、「おたすけ広場」が救世主！

![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576260/544f7b4a-7f2e-47fc-93ca-bec84773e6ab.png)

時間をかけてじっくり考えたいテーマは、ここで再チャレンジ。

気軽だけど本質的な議論ができる場として、めちゃくちゃ役立つ予感です🛠

## 🌟さいごに

小さな工夫やチャレンジが、じわじわとチームの力になっていることを実感しています。

「もっと話そう」「もっと伝えよう」「もっと動かしてみよう」

そんな気持ちを後押しする環境づくりが、いま進行中です！

これからも、楽しく強いチームを目指して、一歩ずつ取り組んでいきます💪
🚨SwiftUIのAlertに.accentColorが効かない→効かせる方法、あります。

# ❓問題：Alertのボタンに.accentColorが反映されない！
たとえば以下のように .tint() や .accentColor() を指定していても…

```
.alert(isPresented: $showingAlert) {
    Alert(
        title: Text("注意"),
        message: Text("これはデフォルトのAlertです。"),
        dismissButton: .default(Text("OK"))
    )
}
```

❌ OK ボタンの色は変わらない。
❌ .accentColor が効いてくれない。

「SwiftUIってカスタマイズできないのか…」と諦めてませんか？

# ✅ 解決方法：新構文で自前でButtonを書く
答えはシンプル。

```
.alert("ご確認ください", isPresented: $showDuplicateAlert) {
    Button("OK", role: .cancel) { }
} message: {
    Text(".accentColor、効いてますよね？")
}
```
これだけで、View階層に設定した .tint() や .accentColor() がAlertのボタンに反映されるようになります。

# 🎨 なぜ効くの？
Alert(title:message:dismissButton:) など旧来のスタイルは、内部的にUIKitの UIAlertController に近く、色のオーバーライドが効きにくい。

一方で、alert(_:isPresented:actions:message:) の新しい構文は、SwiftUIネイティブのButton構造が使われるため、.tint() が適用可能。

つまり…

# ✅ 自前で Button を書くことで、アクセントカラーが継承される！

💡応用例：AccentColorをカスタマイズ可能にしている場合
```
.tint(Color(hex: AppSettings.customBackgroundAccentColorHex))
```

このようなアプリ設定に連動するカスタムカラーでも、Alertのボタンに反映されます。
UIの一貫性を大事にしたい人には最高。
高校化学生物の微分方程式と制御工学応用



### ◉ 1. 放射性崩壊（Radioactive Decay）

$$
\frac{dN}{dt} = -\lambda N
\quad \Rightarrow \quad
N(t) = N_0 e^{-\lambda t}
$$

* $N(t)$：未崩壊原子数（または濃度）
* $\lambda$：崩壊定数（\[1/s]）

---

### ◉ 2. ロジスティクス成長モデル（Logistic Growth Model）

$$
\frac{dN}{dt} = r N \left(1 - \frac{N}{K} \right)
$$

* $N(t)$：個体数・濃度
* $r$：内的成長率（intrinsic growth rate）
* $K$：環境収容力（carrying capacity）

---

### ◉ 3. Lotka–Volterra方程式（捕食–被食モデル）

$$
\begin{cases}
\displaystyle \frac{dx}{dt} = \alpha x - \beta x y \\
\displaystyle \frac{dy}{dt} = \delta x y - \gamma y
\end{cases}
$$

* $x(t)$：被食者（例：ウサギ）
* $y(t)$：捕食者（例：オオカミ）
* $\alpha, \beta, \gamma, \delta$：各種相互作用パラメータ

---

### ◉ 4. ミカエリス・メンテン式（Michaelis–Menten Equation）

#### （速度形式）

$$
v = \frac{V_{\max} [S]}{K_m + [S]}
$$

* $v$：反応速度
* $[S]$：基質濃度
* $V_{\max}$：最大反応速度
* $K_m$：ミカエリス定数（反応速度が $V_{\max}/2$ になるときの基質濃度）

#### （微分形式）

$$
\frac{d[S]}{dt} = -\frac{V_{\max} [S]}{K_m + [S]}
$$

---

### ◉ 5. 光合成の光強度依存性モデル（Photosynthesis vs. Light Intensity）

#### （1）**直線モデル（低光条件）**

$$
P = \alpha I
$$

* $P$：光合成速度
* $I$：光強度
* $\alpha$：初期勾配（光合成能）

#### （2）**光飽和型：Michaelis型**

$$
P = \frac{P_{\max} I}{K_I + I}
$$

* $P_{\max}$：最大光合成速度
* $K_I$：半飽和光強度

#### （3）**指数型（Blackman型）**

$$
P = P_{\max} \left(1 - e^{-\alpha I/P_{\max}} \right)
$$

---
| モデル              | 制御対応    | 特徴       | 応用             |
| ---------------- | ------- | -------- | -------------- |
| $\dot{x} = -k x$ | 1次遅れ系   | 線形       | 電気・化学・生体センサ応答  |
| Logistic Eq.     | 飽和系     | 非線形      | 環境制御・人口予測      |
| Lotka–Volterra   | 連成系・協調系 | 双方向非線形   | 生態系モデル・制御協調戦略  |
| Michaelis–Menten | 飽和入力モデル | 非線形ゲイン   | 酵素制御・アクチュエータ飽和 |
| 光合成モデル           | 感度非線形   | 非線形センサ応答 | 植物制御・農業最適化     |


## ✅ 1. **ミカエリス・メンテン型光合成モデル（Michaelis–Menten type photosynthesis model）**

### ● 基本形（光合成速度 vs 光強度）：

$$
P(I) = \frac{P_{\text{max}} \cdot I}{K + I}
$$

### ● 各記号の意味：

| 記号               | 意味                                                                      |
| ---------------- | ----------------------------------------------------------------------- |
| $P(I)$           | 光合成速度（net photosynthetic rate）                                          |
| $I$              | 入射光強度（irradiance, μmol photons m⁻² s⁻¹）                                 |
| $P_{\text{max}}$ | 飽和時の最大光合成速度（maximum photosynthesis rate）                                |
| $K$              | 半飽和定数（half-saturation constant）：$P = \frac{1}{2} P_{\text{max}}$ となる光強度 |

---

## ✅ 2. **他の表現形式（補足）**

### （1）リネアリゼーション（低光量域で線形に近似）：

$$
P(I) \approx \alpha I \quad (\text{for } I \ll K)
$$

ここで $\alpha = \frac{P_{\text{max}}}{K}$ は\*\*初期傾き（quantum efficiency）\*\*に相当。

---

### （2）指数光応答モデル（非ミカエリス型）：

$$
P(I) = P_{\text{max}} \cdot (1 - e^{- \alpha I / P_{\text{max}}})
$$

これは**Blackmanの法則**や**光阻害なしの指数関数的光応答モデル**。

---
【ABC410】E問題 - Battles in a Row　考察から実装(c++)まで

AtCoderBeginnerContest410の解説＆感想です。
[コンテストリンク](https://atcoder.jp/contests/abc410)

# 問題一覧
- [【ABC410】A問題 - G1　考察から実装(c++)まで](https://qiita.com/hoppii007/items/f213d96b4fbd89bba239)
- [【ABC410】B問題 - Reverse Proxy　考察から実装(c++)まで](https://qiita.com/hoppii007/items/503b61d45deb685daaf7)
- [【ABC410】C問題 - Rotatable Array　考察から実装(c++)まで](https://qiita.com/hoppii007/items/ed921376d3224576ccc0)
- [【ABC410】D問題 - XOR Shortest Walk　考察から実装(c++)まで](https://qiita.com/hoppii007/items/54b0647a53b821289c77)
- 【ABC410】E問題 - Battles in a Row　考察から実装(c++)まで <- イマココ
- [【ABC410】F問題 - Balanced Rectangles　考察から実装(c++)まで](https://qiita.com/hoppii007/items/8722dd1343ce9264247f)


# E問題 - Battles in a Row
[問題リンク](https://atcoder.jp/contests/abc410/tasks/abc410_e)

## 問題概要
二つの整数$H,M$と、長さ$N$の二つの数列$A_1,A_2,...,A_N$、$B_1,B_2,...,B_N$が与えられる。$i$を$1$から$N$まで増やしながら、以下の操作を繰り返す。
- $A_i$か$B_i$のどちらか一方を選ぶ
    - $A_i$を選んだ場合：$H$を$A_i$減らす
    - $B_i$を選んだ場合：$M$を$B_i$減らす

$H \ge 0$かつ$M \ge 0$を満たしたまま到達できる最大の$i$を求めよ。

### 制約
- $1 \le N \le 3000$
- $1 \le H,M \le 3000$
- $1 \le A_i,B_i \le 3000$

## 考察
いかにもDPみたいな問題なので、うまくDPできないか考える。（DPに見せかけて貪欲で上手く解けるみたいな場合もあるから難しいところ...）
とりあえず
- $dp[i][j][k] := i番目まで到達して、H残量をj以上、M残量をk以上にできるか？$

とすれば答えは出そう。答えは出そうだけど、これだと三次元DPになって$O(N^3)$なので、次元を落としたい。どうしよう。
よく考えてみると、「$i$番目に到達できるか？」という問題は、**$i$番目まで到達して$H$残量がjだった時の最大の$M$残量**がわかっていれば判定できそうなことに気づいた。
ということで、DPテーブルを

- $ dp[i][j] := i番目まで到達して、H残量がjの時の最大のM残量 $

とすれば良さそう。
計算量はDPテーブルを順次$O(1)$で更新していけばいいので、$O(N^2)$。

## 実装
```cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvll = vector<vll>;
bool chmax(ll &a, ll b){
    if(a < b){
        a = b;
        return true;
    }
    return false;
}
int main(void){
    //入力
    ll N,H,M;
    cin>>N>>H>>M;
    vll A(N), B(N);
    for(int i=0;i<N;i++) cin>>A[i]>>B[i];
    
    //dp[i][j] := iまで到達して、H残量がjの時のM残量の最大
    vvll dp(N, vll(H+1, -10000000LL));
    dp[0][H] = M-B[0];
    if(H-A[0] >= 0) dp[0][H-A[0]] = M;
    for(int i=1;i<N;i++){
        for(int j=0;j<=H;j++){
            //Aを選ぶ
            if(j+A[i] <= H) chmax(dp[i][j], dp[i-1][j+A[i]]);
            //Bを選ぶ
            chmax(dp[i][j], dp[i-1][j]-B[i]);
        }
    }
    
    //iを逆から見て、最初に到達できるiを表示
    for(int i=N-1;i>=0;i--){
        for(int j=0;j<=H;j++){
            if(dp[i][j] >= 0){
                cout<<i+1<<endl;
                return 0;
            }
        }
    }
    //到達できるiがひとつもなければ0
    cout<<0<<endl;
}

```
【ABC410】D問題 - XOR Shortest Walk　考察から実装(c++)まで

AtCoderBeginnerContest410の解説＆感想です。
[コンテストリンク](https://atcoder.jp/contests/abc410)

# 問題一覧
- [【ABC410】A問題 - G1　考察から実装(c++)まで](https://qiita.com/hoppii007/items/f213d96b4fbd89bba239)
- [【ABC410】B問題 - Reverse Proxy　考察から実装(c++)まで](https://qiita.com/hoppii007/items/503b61d45deb685daaf7)
- [【ABC410】C問題 - Rotatable Array　考察から実装(c++)まで](https://qiita.com/hoppii007/items/ed921376d3224576ccc0)
- 【ABC410】D問題 - XOR Shortest Walk　考察から実装(c++)まで <- イマココ
- [【ABC410】E問題 - Battles in a Row　考察から実装(c++)まで](https://qiita.com/hoppii007/items/edb4ec8b74dc4e76f47f)
- [【ABC410】F問題 - Balanced Rectangles　考察から実装(c++)まで](https://qiita.com/hoppii007/items/8722dd1343ce9264247f)


# D問題 - XOR Shortest Walk
[問題リンク](https://atcoder.jp/contests/abc410/tasks/abc410_d)

## 問題概要
$N$頂点$M$辺の重み($W_i$)つき有向グラフがある。頂点$1$から$N$へ向かう**walk**のうち、**walk**に含まれる辺の重みのビット単位$XOR$の最小値を求めよ。
(**walk**とは、頂点$1$から$N$までの経路で、同じ頂点や辺を複数回通ってもいいもの)

### 制約
- $2 \le N \le 1000$
- $0 \le M \le 1000$
- $0 \le W \le 2^10$

## 考察
「ビット単位$XOR$なのでビットごとに考えましょう」をして時間をかなり溶かしてしまった...。厳しい。改めて制約を眺めると$W \le 2^{10}$が怪しい気がする。単純な探索で行けるなら$10^9$なり$2^{60}$なりでいいはず。おそらく$O(N \times max(W))$とかになるだろうな〜（メタ読み）。

ここで「拡張ダイクストラ」を履修していれば、同じようなことをすればいいと気づく。「各頂点」と「そこに来たときのXOR(W)の状態（001とか110とか）」を全探索すればいい。
拡張ダイクストラを知らなくてもbitDPを履修していたら思いつけそう。
計算量は、各頂点の全探索が$O(N+M)$で、それぞれの頂点にXOR(W)の状態のパターンが$2^{10}$なので、全体で$O((N+M)*max(W))$。

## 実装
```cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using pll = pair<ll,ll>;
using vvpll = vector<vector<pair<ll,ll>>>;
using vb = vector<bool>;
using vvb = vector<vector<bool>>;

int main(){
    //入力
    ll N,M;
    cin>>N>>M;
    
    vvpll nexts(N);
    for(int i=0;i<M;i++){
        ll a,b,w;
        cin>>a>>b>>w;
        nexts[a-1].push_back({w, b-1});
    }
    
    //頂点1でXOR:0の状態からたどり着けるかどうか
    vvb canReach(N, vb(1024,false));
    canReach[0][0] = true;
    
    function<void(ll,ll)> dfs = [&](ll i, ll w){
        //頂点iから行ける頂点たちを全探索
        for(pll next: nexts[i]){
            ll nw = next.first ^ w;
            ll ni = next.second;
            
            //すでにたどり着けることがわかってれば無視
            if(canReach[ni][nw]) continue;
            
            canReach[ni][nw] = true;
            dfs(ni, nw);
        }
    };
    dfs(0,0);
    
    //頂点N-1のたどり着けるwの中で、いちばん小さいものを表示
    for(int w=0;w < 1024;w++){
        if(canReach[N-1][w]){
            cout<<w<<endl;
            return 0;
        }
    }
    cout<<-1<<endl;
}
```
【ABC410】C問題 - Rotatable Array　考察から実装(c++)まで

AtCoderBeginnerContest410の解説＆感想です。
[コンテストリンク](https://atcoder.jp/contests/abc410)

# 問題一覧
- [【ABC410】A問題 - G1　考察から実装(c++)まで](https://qiita.com/hoppii007/items/f213d96b4fbd89bba239)
- [【ABC410】B問題 - Reverse Proxy　考察から実装(c++)まで](https://qiita.com/hoppii007/items/503b61d45deb685daaf7)
- 【ABC410】C問題 - Rotatable Array　考察から実装(c++)まで <- イマココ
- [【ABC410】D問題 - XOR Shortest Walk　考察から実装(c++)まで](https://qiita.com/hoppii007/items/54b0647a53b821289c77)
- [【ABC410】E問題 - Battles in a Row　考察から実装(c++)まで](https://qiita.com/hoppii007/items/edb4ec8b74dc4e76f47f)
- [【ABC410】F問題 - Balanced Rectangles　考察から実装(c++)まで](https://qiita.com/hoppii007/items/8722dd1343ce9264247f)


# C問題 - Rotatable Array
[問題リンク](https://atcoder.jp/contests/abc410/tasks/abc410_c)

## 問題概要
長さ$N$の数列$A$があり、はじめは$A_i=i$となっている。$Q$個のクエリを順番に処理せよ。クエリの種類は以下の三つ。
- タイプ1：$A_p$をxに変更
- タイプ2：$A_p$を表示
- タイプ3：「$A$の先頭の要素を取り除き末尾に追加」という処理を$K$回やる

### 制約
- $1 \le N \le 10^6$
- $1 \le Q \le 3 \times 10^5$
- 全てのクエリは以下の制約を満たす
    - $1 \le q \le N$
    - $1 \le x \le 10^6$
    - $1 \le k \le 10^9$

## 考察
簡単そうなクエリから処理したくなるのが人情。
クエリ1と2は変数を一個書き換えたり表示したりするだけなので、$O(1)$でちゃちゃっとできそう。
問題はクエリ3だけど、$k$の制約がデカくてシミュレーションできない。困った...。
困ったのでよく考えてみると、**「配列が左にkずれる」のと、「視点が右にkずれる」のは本質的には同じそう**。
つまり配列自体は操作せずに、添字をずらしてやればいい。具体的には$A_{(1+k)\\%N}, A_{(2+k)\\%N}...A_{(N+k)\\%N}$みたいな感じで、全部の添字に$k$足してmodとればいけそう。小さいケースで試してみて、いけてそうなので実装開始！
計算量は、クエリ1,2,3どれも$O(1)$なので、全体で$O(Q)$。

## 実装
```cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;

int main(){
    //入力
    ll N,Q;
    cin>>N>>Q;
    
    //配列Aを1,2,3...の連番で用意
    vll A(N);
    iota(A.begin(), A.end(), 1);
    
    //視点が先頭からいくつずれたか
    ll offset = 0;
    
    while(Q--){
        ll type;
        cin>>type;
        
        if(type == 1){
            ll p,x;
            cin>>p>>x;
            A[(offset+p-1)%N] = x;
        }
        else if(type == 2){
            ll p;
            cin>>p;
            cout<<A[(offset+p-1)%N]<<endl;
        }
        else{
            ll k;
            cin>>k;
            offset = (offset+k)%N;
        }
    }
}
```
【ABC410】A問題 - G1　考察から実装(c++)まで

AtCoderBeginnerContest410の解説＆感想です。
[コンテストリンク](https://atcoder.jp/contests/abc409)

# 問題一覧
- 【ABC410】A問題 - G1　考察から実装(c++)まで <- イマココ
- [【ABC410】B問題 - Reverse Proxy　考察から実装(c++)まで](https://qiita.com/hoppii007/items/503b61d45deb685daaf7)
- [【ABC410】C問題 - Rotatable Array　考察から実装(c++)まで](https://qiita.com/hoppii007/items/ed921376d3224576ccc0)
- [【ABC410】D問題 - XOR Shortest Walk　考察から実装(c++)まで](https://qiita.com/hoppii007/items/54b0647a53b821289c77)
- [【ABC410】E問題 - Battles in a Row　考察から実装(c++)まで](https://qiita.com/hoppii007/items/edb4ec8b74dc4e76f47f)
- [【ABC410】F問題 - Balanced Rectangles　考察から実装(c++)まで](https://qiita.com/hoppii007/items/8722dd1343ce9264247f)


# A問題 - G1
[問題リンク](https://atcoder.jp/contests/abc410/tasks/abc410_a)

## 問題概要
整数$N,K$と、数列$(A_1,A_2,...,A_N)$が入力される。
$A_i \le K$となる$i$の個数を求めよ。
### 制約
- $1 \le N \le 100$
- $1 \le K \le 100$
- $1 \le A_i \le 100$

## 考察
~~A問題なので~~$N$の制約が小さいので、言われた通りに$A_i$を全部チェックすれば良さそう。
計算量は$O(N)$。

## 実装
```cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;

int main(){
    //入力
    ll N;
    cin>>N;
    
    vll A(N);
    for(int i=0;i<N;i++) cin>>A[i];
    
    ll K;
    cin>>K;
    
    
    //Aを全部見て、K <= A_i の数を数える
    ll cnt = 0;
    for(int i=0;i<N;i++) cnt += (K <= A_i);
    
    cout<<cnt<<endl;
}
```
【ABC410】B問題 - Reverse Proxy　考察から実装(c++)まで

AtCoderBeginnerContest410の解説＆感想です。
[コンテストリンク](https://atcoder.jp/contests/abc410)

# 問題一覧
- [【ABC410】A問題 - G1　考察から実装(c++)まで](https://qiita.com/hoppii007/items/f213d96b4fbd89bba239)
- 【ABC410】B問題 - Reverse Proxy　考察から実装(c++)まで <- イマココ
- [【ABC410】C問題 - Rotatable Array　考察から実装(c++)まで](https://qiita.com/hoppii007/items/ed921376d3224576ccc0)
- [【ABC410】D問題 - XOR Shortest Walk　考察から実装(c++)まで](https://qiita.com/hoppii007/items/54b0647a53b821289c77)
- [【ABC410】E問題 - Battles in a Row　考察から実装(c++)まで](https://qiita.com/hoppii007/items/edb4ec8b74dc4e76f47f)
- [【ABC410】F問題 - Balanced Rectangles　考察から実装(c++)まで](https://qiita.com/hoppii007/items/8722dd1343ce9264247f)

# B問題 - Reverse Proxy
[問題リンク](https://atcoder.jp/contests/abc410/tasks/abc410_b)

## 問題概要
$1,2,...,N$と番号が付いた$N$個の箱がある。初め、全ての箱には$0$が書かれている。
$Q$個のクエリ$X_1,X_2,...,X_Q$を順番に処理する。
- $X_i \gt 0$の時：箱$X_i$を1増やす
- $X_i = 0$の時：一番小さい数字が書かれている箱の中で、一番番号が小さい箱の数字を$1$増やす

各クエリについて、増えた箱の番号を表示せよ。

### 制約
- $1 \le N \le 100$
- $1 \le Q \le 100$
- $0 \le X_i \le N$

## 考察
簡単そうなクエリから処理したくなるのが人情。
とりあえず一つ目は数字を増やすだけなので```box[x]++```とかすれば良さそう。
二つ目も「一番小さい数字の中でいちばん左の場所を見つける」ができればいい。これはforとか書いてもいいけど、```min_element```が使えそう。
計算量は一つ目のクエリが$O(1)$、二つ目のクエリは$O(N)$。クエリの個数が$Q$個なので、全体で$O(QN)$。

## 実装
```cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;

int main(){
    //入力
    ll N,Q;
    cin>>N>>Q;
    
    //N個の箱を用意
    vll box(N, 0);
    
    //Q回クエリが入力される
    for(int i=0;i<Q;i++){
        ll X;
        cin>>X;
        
        if(X == 0){
            //クエリ1の処理
            ll minIdx = min_element(box.begin(), box.end()) - box.begin();
            box[minIdx]++;
            cout<<minIdx+1<<endl;
        }
        else{
            //クエリ2の処理
            box[X-1]++;
            cout<<X<<endl;
        }
    }
}
```
VSCodeでRustプロジェクトをrust-analyzerに認識させる方法

## はじめに
VSCodeでRustアプリを作成していると公式のrust-analyzerという拡張機能を使って開発することが多いのではないでしょうか？

この拡張機能では、コード補完や参照の検索などとても便利な機能を提供してくれます。

しかし、Tauriのようなフロントエンドが別言語でバックエンドがRustで作られるアプリでは、階層的に下記のようにRustプロジェクトが分かれるような形になると思います。
```
—— プロジェクトディレクトリ
|
|__ フロントディレクトリ
|
|__ バックエンドディレクトリ（Rust）
```

この時、VSCodeでプロジェクトのディレクトリを開くとRustのプロジェクトがrust-analyzerではRustのプロジェクトとは判定されずにコード補完など機能しません。
これはプロジェクトルート直下のCargo.tomlを見てRustのプロジェクトと判別してるように見えるのでおそらく機能しないのでしょう。

これだといちいちRustのディレクトリをVSCodeで別ウィンドウから開かなければならず、とても面倒になります。

## 対応方法
これに対応するため、まずはプロジェクトルートに.vscodeディレクトリを作成して、さらにsettings.jsonを作成しましょう。
下記のような階層になります。
```
—— プロジェクトディレクトリ
|
|__ .vscode
|  |__ settings.json
|
|__ フロントディレクトリ
|
|__ バックエンドディレクトリ（Rust）
```

その中に、rust-analyzerの設定を追加しましょう
```json
{
  "rust-analyzer.linkedProjects": [
    "src-tauri/Cargo.toml"
  ]
}
```

上記ではrust-analyzer.linkedProjectsにプロジェクトルートからのCargo.tomlがある相対パスを指定します。
こうすることによってVSCodeがRustプロジェクトを認識できるようになり、コード補完など様々な便利な機能がプロジェクトルートからVSCodeで開いても機能することができます。
Armin Ronacher氏の「エージェントコーディングのおすすめ」日本語要約

以下は、2025年6月12日にArmin Ronacher氏が自身のブログ「[Agentic Coding Recommendations](https://lucumr.pocoo.org/2025/6/12/agentic-coding/)」で紹介した内容の日本語要約である。

---

## 📌 概要と前提

* 主に Claude Code（Sonnetモデル）を月額100ドルのMaxサブスクリプションで使用し、エージェントにタスクを任せて成果を待つスタイル。インターフェースやIDEでの直接操作は最小限にすることで効率化を図っている。
* このアプローチは時代の流れに弱く、継続的な進化があることを念頭に置いている。

## 基本設定

* **権限許可チェックを無効化** (`--dangerously-skip-permissions`) して、エージェントに自由に操作させる。
* **MCP（Multi‑Channel Protocol）** は必要時のみ使用。たとえばブラウザ自動化では `playwright-mcp` を利用し、データベースには直接 `psql` を使う場面も。

## 言語選択の理由

* **バックエンドには Go を推奨**：

  * コンテキスト管理が明確
  * テストの高速実行・キャッシュ対応
  * 簡潔さ・構造的インターフェース・エコシステムの安定性と互換性
* Pythonはその「魔法」によりエージェントには複雑すぎると評価されている。

## フロントエンドスタック

* **Tailwind CSS + React（tanstack query/router）+ Vite** を使用。
* ファイル名に「\$」が含まれるとエージェントが誤操作することがあると指摘。

## ツールの心得

* **何でもツールになり得る**：シェルスクリプト、ログ、MCPサーバーなど。
* **高速で明瞭な応答が重要**。プロセスが遅いとエージェントの効率が落ちる。
* **エラーメッセージは明確に**、混乱を避ける。
* 補助ツール（Makefile やログキャプチャ）を整備し、エージェントが自律的に動ける環境を整える。

## 速度と可観測性

* エージェントに **即時にコードを試せる仕組み** を提供することが重要。
* ログ出力は「十分な情報 + 簡潔さ」を両立すべき。
* エージェントが生成ツールを自ら立ち上げられるように、迅速、軽量な構成が求められる。

## 安定性と依存性管理

* エコシステムは **後方互換性があり、変動が少ないものが望ましい**。
* ライブラリのバージョンアップは控えめにし、急激な変更は避ける。
* 依存を極力減らし、自前コードで補う姿勢を推奨。

## コードの簡潔さ

* 「動けば良い」というダンプな実装が最も使える。

  * 説明的な関数名、不要な継承やトリッキーな仕組みを避ける。
  * SQLはプレーンSQLで。ORMの複雑すぎる抽象化よりも明快さ優先。
  * 権限チェックなどは明確でエージェントが把握しやすい場所に配置。

## 並列実行の促進

* 複数エージェントを **並列に動かせる構成** が効率化につながる。
* ファイルシステムやデータベースの状態共有を工夫し、並行処理を可能にする。

## リファクタリングを仕事に合わせて

* コード量がある程度増えたら、**コンポーネント抽出やリファクタリング** を検討。
* エージェントにコードの質を維持させるには、適切なタイミングで構造的改善が必要。

---

## ✅ コア原則まとめ

1. **シンプルさ**：余計な複雑さを省く
2. **安定性**：エコシステムや依存関係は揺るがず
3. **可観測性**：出力 (ログ等) を明瞭かつ簡潔に
4. **並列処理**：複数エージェントで効率向上

これらの原則により、エージェントを活用した開発（“agentic coding”）は単に速度を上げるだけでなく、**より保守性に優れた質の高いコード**を実現できる。今後も進化が続く領域だが、まずはこれらを土台として試してみる価値がある。

---


Armin Ronacherのライブコーディング映像
[![Armin Ronacherのライブコーディング映像](http://img.youtube.com/vi/sQYXZCUvpIc/0.jpg)](http://www.youtube.com/watch?v=sQYXZCUvpIc)
Amazon Qを利用してゲームを作ってみた

# はじめに
AmazonQを活用するイベントを耳にして、「ちょっと試してみたい」と思ったのが、このプロジェクトにチャレンジするきっかけです。
AmazonQを活用して作ったのはスネークゲームです。
スネークゲームはシンプルゲームなのでエラーが発生してもすぐにコードを読んで直せると思いました。


## 試してみた
指示は以下のように作成しました。
``jsとHTMLを使ってSNAKE-GAMEを作ってください``

この指示だけでちゃんとしたゲームが作られました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4115168/aec08539-bb49-4fe1-9a55-5230a4c42f1d.png)
ゲームをやってみましたが、ゲームをリスタートするたびにスピードが上がってしまうというエラーがありしました。
このようなエラーもAmazonQに相談して解決策を求めた結果、リセット時にスピードも初期値に戻してくれて、問題も解消しました。

## アップグレード
シンプルなスネークゲームだけじゃ退屈に感じたので、10秒後にゲームオーバーになるというタイムアウト機能も追加しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4115168/f4ae8541-6869-46eb-8fb5-3c9c579cfb34.png)
追加した機能も特に問題なく作動しています。

# まとめ
AIの積極的な活用によって、開発時間も大幅に短縮するという結果に繋がりました。
実装の中で印象に残っているのは、Amazon Qがエラーを直接解決してくれたという点です。
AIに具体的に問題ポイントや希望する機能を伝えてあげることで、より満足のいく結果に近付きます。
AIというパートナーの積極的な活用により、このシンプルながら魅力的なスネークゲームを安心して開発してこられたという実感です。
MPLAB X IDEを別の場所に移動する

PICマイコンやAVRマイコンを使った開発では、Microchip社のと統合開発環境であるMPLAB X IDEが使える。このMPLAB X IDEを再インストールせずに、インストール先を変更してみた。（こんなことをせずに、再インストールするのが普通だと思うが…）

#### MPLAB X IDEのインストール
インストーラは、<br>
[https://www.microchip.com/en-us/tools-resources/develop/mplab-x-ide](https://www.microchip.com/en-us/tools-resources/develop/mplab-x-ide)<br>
にある。<br>

Windows版をインストールすると、<br>
　C:\Program Files\Microchip\\<br>
にインストールされる。実行ファイルは、<br>
　C:\Program Files\Microchip\MPLABX\v6.25\mplab_platform\bin\mplab_ide64.exe<br>
である。（v6.25はバージョン番号、2025/5/4時点）<br>
この実行ファイルをそのまま実行すればMPLAB X IDEが起動できる。

#### MPLAB X IDEのフォルダを移動、jdkhomeの設定変更
このMPLAB X IDEは、インストールフォルダごと他に移動させても、mplab_ide64.exeを実行することができる。ただし、そのままでは、<br>
```
Cannot locate java installation in specified jdkhome:
C:\Program Files\Microchip\MPLABX\v6.25\sys\java\zulu8.80.0.17-ca-fx-jre8.0.422-win_x64\
Do you want to try to use default version?
```
というエラーが出てきて起動できないので、設定を一部変更する。<br>

環境変数jdkhomeが正しく設定されていない、ということだが、この設定は、<br>
　C:\Program Files\Microchip\MPLABX\v6.25\mplab_platform\etc\mplab_ide.conf<br>
の中で、<br>
```
# Default location of JDK:
# (set by installer or commented out if launcher should decide)
#
# It can be overridden on command line by using --jdkhome <dir>
# Be careful when changing jdkhome.
# There are two NetBeans launchers for Windows (32-bit and 64-bit) and
# installer points to one of those in the NetBeans application shortcut 
# based on the Java version selected at installation time.
#
jdkhome="C:\Program Files\Microchip\MPLABX\v6.25\sys\java\zulu8.80.0.17-ca#-fx-jre8.0.422-win_x64\"
```
のようになっている。<br>
Microchipディレクトリごと他の場所に移動したなら、このjdkhomeを<br>
```
jdkhome="移動先\Microchip\MPLABX\v6.25\sys\java\zulu8.80.0.17-ca#-fx-jre8.0.422-win_x64\"
```
のように変更すれば、mplab_ide64.exeを実行することで、MPLAB X IDEが起動できるようになる。<br>
プロンプトまとめ



## 🧠 推奨プロンプト一覧


### プロンプト1
```markdown
 『LLMは「言葉」を扱う一方で、その中身はベクトルの世界・確率の世界・微分の世界です。たとえば、**「私はAIを学ぶ」**という一文でさえ、モデル内部では数百次元のベクトルと行列演算で構成されています。』 
 次の英語文を提示し、スラッシュリーディング、品詞解説、文型分析を日本語で解釈してください。
```



###  プロンプト2

```markdown
以下の日本語歌詞を、感情・テーマ・象徴・構造の観点から詳細に分析してください。

---

###  分析項目：

1. **主題（テーマ）とモチーフは何か？**  
　作品全体を通して語られる中心的な考えや印象は何か？繰り返し登場する物・行動・言葉は何を示しているか？

2. **繰り返される語句や表現は何か？**  
　繰り返しによる強調・感情の定着がどこにあるかを具体的に記述。

3. **登場する比喩・象徴は何を意味しているか？**  
　たとえば「夜＝孤独」「花＝過去」など、象徴性を含んだ表現の意味を読み取ってください。

4. **感情の変化（感情曲線）はどのように描かれているか？**  
　喜び、悲しみ、怒り、不安、希望など、どの部分でどのように変化していくかを段階的に記述。

5. **この歌詞に特有な点・一般的な歌詞との違いは何か？**  
　構造や語り口、文体、視点など、独自性のある点を分析してください。

6. **ポジティブ／ネガティブの判定（どちら寄りか）とその理由を記述してください。**  
　明確な評価ではなく、「傾向」「グラデーション」「対比的構造」に注目してください。
 **ソフトマックス関数で確率化**  
　以下の式に基づき、感情傾向の確率を求めてください：

　$$
　P_{\text{pos}} = \frac{e^{x_{\text{pos}}}}{e^{x_{\text{pos}}} + e^{x_{\text{neg}}}}, \quad
　P_{\text{neg}} = \frac{e^{x_{\text{neg}}}}{e^{x_{\text{pos}}} + e^{x_{\text{neg}}}}
　$$

**最終判定**  
　どちらの傾向が強いかを定量的に述べ、歌詞全体の感情的傾向をコメント付きで評価してください。
---

【歌詞】
『沈むように溶けてゆくように  
二人だけの空が広がる夜に

「さよなら」だけだった  
その一言で全てが分かった  
日が沈み出した空と君の姿  
フェンス越しに重なっていた』 
```

###  プロンプト3

```markdown
円の面積を積分で計算した後、Pythonでプロットしてその値を確認する。中で実行。
```

###  プロンプト4

```markdown
円の面積を積分で計算した後、Pythonでプロットしてその値を確認する。中で実行。
```
TeraTerm(テラターム) をインストール

## 参考記事
https://blog.future.ad.jp/howto-teraterm

https://snome.jp/engineer/tera-term%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95%E3%80%90windows11%E5%AF%BE%E5%BF%9C%E3%80%91/

## TeraTermをインストール
#### TeraTermをダウンロード
以下のURLにアクセスして、最新版のTeraTermをダウンロードする(今回はv5系統をダウンロード)
https://forest.watch.impress.co.jp/library/software/utf8teraterm/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/a8f7992a-a413-4cc6-b1e1-08a1b0a3cba8.png)

#### TeraTermをインストール
exeファイルを実行(クリック)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/51bb80f6-c77c-4acd-8dd8-7e3d5b2c32a6.png)

「OK」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/43cdeb8a-fafa-4a50-9003-a95646532271.png)

同意するにチェックを入れて「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/e38f7d4b-4366-4ada-87ee-f92cea175b17.png)

特にカスタマイズが不要な場合は、デフォルト設定のまま「次へ」をクリック(基本的にデフォルトで良いかと)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/d3801451-1ec8-4bf7-8aa3-6963f8a15feb.png)

特にカスタマイズが不要な場合は、デフォルト設定のまま「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/4944233c-b38e-4f7e-a6ac-df6d8af8a02f.png)

選択するコンポーネントにつ以下チャットGPTを引用↓

| コンポーネント名 |	概要|
| ---------------- | ---- |
|Tera Term & Macro|	本体とマクロ機能。これがメインです。|
|TTSSH|	SSHプロトコルでの通信を可能にします。SSH接続が必要なら必須。|
|CygTerm+|	Cygwinのターミナル（bashなど）とTera Termを連携させるためのツール。|
|TTMenu|	マクロや設定ファイルに素早くアクセスするためのランチャーメニュー機能。|
|TTProxy|	プロキシ（SOCKSなど）経由で接続するための中継モジュール。|

|プラグイン名|	概要|
| ---------------- | ---- |
|TTXResizeMenu|	TTY（ターミナル）サイズの変更をメニューで選べるようにする。|
|TTXttyrec|	ターミナルの操作をttyrec形式で録画・再生できる。ログ再生などに便利。|
|TTXKanjiMenu|	文字コードのメニューに「日本語（JIS, EUC, Shift-JIS）」などを追加。|
|TTXcodeChange|	接続中に文字コードを変更できる機能（日本語環境で便利）。|
|TTXViewMode|	表示専用モード。キーボード入力を受け付けなくする（読み取り専用表示）。|
|TTXAlwaysOnTop|	Tera Termウィンドウを常に最前面に表示する。|
|TTXRecurringCommand|	一定間隔で自動的にコマンドを送信できる（監視系用途などに便利）。|

基本的なSSHターミナル用途なら、以下でOK：
✅ Tera Term & Macro（必須）
✅ TTSSH（SSH接続するなら必須）
✅ 必要に応じて以下：
  TTXcodeChange（文字化け対策に便利）
  TTXAlwaysOnTop（最前面表示が便利なら）
  TTXRecurringCommand（定期実行が必要な人向け）

対象の言語を選択して「次へ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/ed05e441-1086-455c-b4fa-a8f69fa7bc8b.png)

特にカスタマイズが不要な場合は、デフォルト設定のまま「次へ」をクリック(基本的にデフォルトで良いかと)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/bee944e8-ef7f-4eeb-9432-c6c0701277bd.png)

特にカスタマイズが不要な場合は、デフォルト設定のまま「次へ」をクリック(必要に応じてチェックすれば良いです。今回はデフォルトの状態になります。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/a4ce2fa3-e69e-4ffc-8a7f-1333e3ae6280.png)

「インストール」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/734fe964-94ce-4661-9f5f-e2db873c0675.png)

すぐに実行したい方は「今すぐTera Termを実行する」を選択して、「完了」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/2cebf3fd-f0e9-43ac-869b-1ce85f3969eb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711955/70687648-2c3d-4c6f-8b33-618419bcaa19.png)
ASP.NETアプリケーションのモダナイズ　インフラ編

# スコープ
ASP.NETアプリケーションからASP.NET CoreにそしてオンプレからAzureにモダナイゼーションすることを想定しています。

# そもそもモダナイゼーションとは？
CAFによれば、クラウド移行の方法は3通りある。
1つがマイグレーション
2つ目がモダナイゼーション
3つ目がイノベーション
というような手法である。

## マイグレーションとは？
マイグレーションとはざっくり言えばこれまでのオンプレシステムからクラウドに最小限の変更で移行することを目的としたものです。
変更を少なくするためにIaaSを選択することが多くなります。
クラウド移行することで費用の明確化だとか、ハードウェアを手放すというような効果があります。

## モダナイゼーションとは？
モダナイゼーションとはアプリケーションの近代化を目指し、運用の手間をより下げるとか自動化を目指すといったことを目的にしたものです。また、アプリケーションフレームワークも最新化することを検討します。

このようにすることで最新の機能を取り入れやすい構造にするとともに、技術的負債を返済するということも考えていきます。

## イノベーションとは
これまでのアプリケーション構造を再設計してクラウドネイティブアプリケーションとして再設計します。たとえば、マイクロサービスとして設計します。

## 今回はモダナイゼーションのお話

というわけでだいたいモダナイの目的は以下のようになります。

- コストの明瞭化（主にクラウドに移行する場合）
- 最新の機能を使用したい（AIなど）
- セキュリティの問題
- パフォーマンスの問題

# リソース選択をしていこう

## まずはAzureにどんなリソースあるの？
Azureのそれぞれのリソースの特徴を知って目的に合ったものを選択できなければなりません。
そのためには、たとえWeb開発者といえどもAzureの知識が全くないということはあり得ません。

そのために勉強をしましょうというわけでAzureの知識地図を読みましょう。良い本です。

https://gihyo.jp/book/2025/978-4-297-14903-1

## AzureCAFを読もう
Azureの導入戦略について書かれたドキュメントです。
この中に何をどのように考えてAzureを導入していったらよいのかということが書かれています。もちろん、モダナイにおけるさまざまなリソース選択についてのヒントがあります。
AzureCAFではモダナイズするときはPaaSを採用すべきということが明確にうたわれています。

https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/

## アーキテクチャーセンターを読もう
モダナイに限らずさまざまなAzure設計パターンがノウハウがちりばめられています。
Azureを使うのなら一度は目を通すことをお勧めします。

https://learn.microsoft.com/ja-jp/azure/architecture/

## ソリューションのコントロールと生産性のバランス
| コントロールと生産性のバランス | ソリューション | 説明 |
|:-:|:-:|:-:|
| 最大のコントロール  | AKS, Azure Red Had OpenShift|  インフラのコントロール運用はやや大変 |
| バランス  | Azure App Service, Azure Spring Apps, AzureFunctions  | コードの開発に重点インフラの自動化  |
| 最大の生産性  | Power Apps, Power Automate  | リードタイムを最短化  |

# コンピューティングリソースの選択
## Azure App Service
第一選択肢
コードベース・コンテナーともにまずはApp Serviceを考える。
コンテナーの場合はAzure Container Appsとの比較になる。
かならず、実運用ではPremiumプランを選択する。

## Azure Static Web Apps
バックエンドはAzure Functionsを組み合わせて使うことを検討する。
もし、バックエンドがWebAPIになる場合は、初めからApp Serviceにデプロイしたほうがいいかも。

とはいえ、広く公開する静的サイトを構築するにはCDN付きのサービスとしておすすめ。

## バッチどうするの？
小規模なバッチではWebJobsかAzure Functionsかの2択と考えられる。
Functionの考慮事項としてはその実行時間が30分で収まるかどうかというところ。

これ以上の実行時間になる場合はDurable Fuctionsを検討

# データベースの選択
PaaS選択で迷うのがSQL Serverからの移行になる。
SQL DatabaseとManaged Instanceと2つあるのでどちらを選択したらよいのかというところだ。

まずは、SQL Databaseを検討する。
こちらのほうが、より自動化が進んでいるからである。
これで満たせない要件がある場合にManaged Instanceを選択する。

たとえば、どうしてもJSTで運用したいとか、なにか管理系の何かが欲しいとかそういう場合です。

# DevOpsするためのツールを導入する
ソース管理やCI/CDに関するもの、問題管理やらテストに関するツールを導入することを指します。

おおよそ、モダナイをするにあたって必須レベルでやりたいことは自動テストや継続的デプロイと呼ばれるようなCIやCDに関する領域だろう。
思いつく代表的なものだけで、GitHub、GitLab、Azure DevOpsといったようなものが思いつく。
しかしながら、CI/CD領域においては歴史が長いのでそれぞれの製品で致命的な差がないというのが事実。

そうなってくるとほかのところで差別化が図られているGitHubが第一選択肢として思い浮かべる。なにしろ、GitHub Copilotの存在が強い。開発系のエンジニアとしてはGitHub Copilotを使用しない日がないレベルだからだ。
そうすると、あえてほかのソース管理システムを選択する理由がなくなってきてしまう。
もちろん、ほかの要件によってプロジェクト管理を重点に置くのならAzure DevOpsというのもありかもしれない。

# まとめ
現時点で、ベースラインとして考えらえるようなチョイスとは以下の通り。

- Azure App Service
- SQL Database
- GitHub

もちろん、実際のアプリケーションはほかにもストレージであったりイベント送信であったり様々なサービスを組み合わせて構築すると思うが上に示したようなロジックや資料をあたって必要なものをチョイスしていくことができるかとおもいます
闘魂Elixir: Elixirの電池入りHTTPクライアントReqでクライアント証明書付きAPIコールを試す（Tapyrus API編）

いよいよはじまりました！
[Qiita Tech Festa](https://qiita.com/tech-festa/2025) :tada::tada::tada: 

https://qiita.com/tech-festa/2025

---

# はじめに

[Elixir](https://elixir-lang.org/)の電池入りHTTP Clientに、[Req](https://github.com/wojtekmach/req)というライブラリがあります。
クライアント証明書を指定したAPIコールをしたくなりました。

# 人力調査

ここで解答を得ました。

https://github.com/wojtekmach/req/issues/412#issuecomment-2345455169

Thanksです。

# ソースコード例

ソースコードの例を示します。

```elixir:tapyrus_api_call.exs
Mix.install([{:req, "~> 0.5.0"}])

tapyrus_api_endpoint = System.get_env("TAPYRUS_API_ENDPOINT")
user_access_token = System.get_env("USER_ACCESS_TOKEN")

headers = [
  "Content-Type": "application/json",
  Authorization: "Bearer #{user_access_token}"
]

url = "#{tapyrus_api_endpoint}/api/v2/timestamps"

options = [
  connect_options: [transport_opts: [certfile: "cert.pem"], timeout: 60_000],
  headers: headers,
  receive_timeout: 60_000
]

Req.get!(url, options) |> IO.inspect()
```



## 実行方法 Run!!!

`tapyrus_api_call.exs`ファイルと同じフォルダに`cert.pem`が置いてあることを確認して、迷わず、動かします。  
環境変数のセットも忘れずに！ `TAPYRUS_API_ENDPOINT`、`USER_ACCESS_TOKEN`。  

```bash
elixir tapyrus_api_call.exs
```

# 背景

順番が前後しますが、この記事を書いた背景です。
クライアント証明書を使うAPIの呼び出しを、[Req](https://github.com/wojtekmach/req)でしてみたかったのです。
[Tapyrus API](https://doc.api.tapyrus.chaintope.com/)を[Elixir](https://elixir-lang.org/)で使いたかったのです。

## Tapyrus とは

[Tapyrus](https://github.com/chaintope/tapyrus-core) は、[Bitcoin](https://bitcoin.org/) をベースにしたオープンソースのブロックチェーンプラットフォームです。日本の企業 [Chaintope](https://www.chaintope.com/) によって開発されており、企業や自治体での実用を想定した設計が特徴です。

### 主な特徴

- オープンソース: Bitcoin をフォークし、独自機能を追加
- ハイブリッド設計: 制御されたネットワークで運用しつつ、透明性も確保
- カスタムトークン: `OP_COLOR` による独自トークンの発行が可能

### 資料

- [Chaintope 公式サイト](https://www.chaintope.com/)
- [Tapyrus Core GitHub](https://github.com/chaintope/tapyrus-core)
- [Tapyrus Docker ドキュメント](https://github.com/chaintope/tapyrus-core/blob/master/doc/docker_image.md)

# さいごに

[Elixir](https://elixir-lang.org/)の電池入りHTTP ClientであるReqにクライアント証明書を設定してAPIコールすることができました。
あなたの[Elixir](https://elixir-lang.org/)ライフに潤いと輝きを提供できることを願ってこの記事を終えます。
pythonのユーザー定義関数「(applyfunc)sympy の Matrix([[P**2-Q**2, 2*P-2*Q],[2*Q-2*R,R**2-P**2] ]) の全要素をfactorする方法を教えて下さい。」をAI先生ヘ。

・applyfunc(f)
Apply a function to each element of the matrix.

https://docs.sympy.org/latest/modules/matrices/matrices.html#sympy.matrices.matrixbase.MatrixBase.applyfunc

# (本日の)ChatGPT先生へ
```
# 質問リスト
1. sympy の　Matrix([[P**2-Q**2, 2*P-2*Q],[2*Q-2*R,R**2-P**2] ])　の全要素をfactorする方法を教えて下さい。
2. applyfunc を 使って　２倍にしてほしい。
3. applyfunc の引数にユーザー定義関数も扱えますか
4. 複数処理を教えて下さい。
5. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。最後の質問も追加して下さい。追番を追加して下さい。
```

#### (以下回答抜粋)
>sympy において、行列の全要素を factor したい場合は、行列全体に対して applyfunc(factor) を使います。applyfunc は各要素に任意の関数を適用するメソッドです。
```python
from sympy import symbols, Matrix, factor

# 記号の定義
P, Q, R = symbols('P Q R')

# 行列の定義
M = Matrix([[P**2 - Q**2, 2*P - 2*Q],
            [2*Q - 2*R, R**2 - P**2]])

# 各要素に factor を適用
factored_M = M.applyfunc(factor)

# 結果表示
print(factored_M)
```

>もちろんです！Matrix.applyfunc を使えば、各要素を2倍にすることも簡単にできます。たとえば、元の行列の各要素を2倍するには、次のようにします：
```python
from sympy import symbols, Matrix

# 記号の定義
P, Q, R = symbols('P Q R')

# 元の行列
M = Matrix([[P**2 - Q**2, 2*P - 2*Q],
            [2*Q - 2*R, R**2 - P**2]])

# 各要素を2倍
doubled_M = M.applyfunc(lambda x: 2 * x)

# 結果表示
print(doubled_M)
```
>はい、applyfunc の引数には ユーザー定義関数 も問題なく使えます。
lambda ではなく通常の def で定義した関数でもOKです。
```python
from sympy import symbols, Matrix, factor

# 記号の定義
P, Q, R = symbols('P Q R')

# 行列の定義
M = Matrix([[P**2 - Q**2, 2*P - 2*Q],
            [2*Q - 2*R, R**2 - P**2]])

# ユーザー定義関数
def my_transform(expr):
    return 2 * factor(expr)

# applyfunc に渡す
M_transformed = M.applyfunc(my_transform)

# 結果表示
print(M_transformed)
```

>🔧 例：以下の3つの処理を行う関数
```python
from sympy import symbols, Matrix, expand, factor

# 記号の定義
P, Q, R = symbols('P Q R')

# 行列の定義
M = Matrix([[P**2 - Q**2, 2*P - 2*Q],
            [2*Q - 2*R, R**2 - P**2]])

# 複数処理を行う関数
def multi_transform(expr):
    expanded = expand(expr)       # 必要なら展開
    factored = factor(expanded)   # 因数分解
    doubled = 2 * factored        # 2倍
    return doubled

# applyfunc に適用
M_processed = M.applyfunc(multi_transform)

# 結果表示
print(M_processed)
```

# Gemini先生へ

# copilot先生へ

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

https://qiita.com/mrrclb48z/items/b6351b48e47bcf6265c0

# いつもと違うおすすめです。
#### Qiita内