OmniAICreator/Qiita-1.07M huggingface dataset:
【Java Gold】ラムダ式とメソッド参照

## はじめに

ラムダ式とメソッド参照について、試験対策として整理しました。

## ラムダ式とメソッド参照について

Javaの**ラムダ式**と**メソッド参照**は、関数型インタフェース（SAM：Single Abstract Method）を利用して、処理を簡潔に記述するための機能です。


## ラムダ式の基本構文

```java
(引数) -> { 処理 }
```

### ラムダ式のバリエーション

| 形式 | 書き方 | 説明 |
| --- | --- | --- |
| 引数なし | `() -> System.out.println("Hello")` | `Runnable` によく使われる形式 |
| 引数1つ | `s -> s.length()` | 型推論が適用される |
| 引数2つ | `(a, b) -> a + b` | 複数引数の例 |
| ブロックあり | `(x) -> { System.out.println(x); return x * 2; }` | 複数文なら `{}` が必要 |

### 主な関数型インタフェースと使用例

| インタフェース | 引数 | 戻り値 | 使用例 |
| --- | --- | --- | --- |
| `Runnable` | なし | なし | `() -> System.out.println("Run")` |
| `Supplier<T>` | なし | T | `() -> "Hello"` |
| `Consumer<T>` | T | なし | `s -> System.out.println(s)` |
| `Function<T, R>` | T | R | `s -> s.length()` |
| `Predicate<T>` | T | boolean | `s -> s.isEmpty()` |
| `BiFunction<T, U, R>` | T, U | R | `(a, b) -> a + b` |


## メソッド参照の基本

> ラムダ式が「既存のメソッド呼び出しのみ」の場合、より簡潔に書けるのがメソッド参照です。

### メソッド参照の書式と例

| 書式 | 例 | 説明 |
| --- | --- | --- |
| `クラス名::staticメソッド` | `Math::max` | 静的メソッドの参照 |
| `オブジェクト::インスタンスメソッド` | `"abc"::toUpperCase` | 特定オブジェクトのメソッド |
| `クラス名::インスタンスメソッド` | `String::length` | 引数のオブジェクトに対して呼ばれる |
| `クラス名::new` | `ArrayList::new` | コンストラクタの参照 |

### ラムダ式からメソッド参照への変換例

| ラムダ式 | メソッド参照 |
| --- | --- |
| `s -> s.length()` | `String::length` |
| `() -> new ArrayList<>()` | `ArrayList::new` |
| `(x, y) -> Math.max(x, y)` | `Math::max` |
| `s -> System.out.println(s)` | `System.out::println` |


## メソッド参照の注意点

- メソッドの**引数の数・型・戻り値の型**が、対象の関数型インタフェースと一致している必要がある
- 複雑な処理や条件分岐がある場合は、ラムダ式の方が明示的で読みやすい


## ラムダ式とメソッド参照の比較

| 観点 | ラムダ式 | メソッド参照 |
| --- | --- | --- |
| 可読性 | 柔軟で直感的 | より簡潔でスッキリ |
| 表現できる処理 | 任意の処理（複雑なロジックもOK） | 既存メソッドの呼び出しのみ |
| 適した場面 | 処理が複雑、複数行になる場合 | 単純な処理、1メソッド呼び出しのみ |


## おわりに

誤記や改善点があればコメントなどでご指摘ください。
Pythonの処理系って何？

# 対象読者

以下のような項目にあてはまる初級者を想定しております。

- Pythonのプログラムを書いて、動かしたことがある
- CPythonや処理系という言葉は聞いたことがあるけれど、何なのかわかっていない



# Pythonの処理系を確認する

Pythonは複数の処理系が知られています。もし、あなたがPythonの処理系について意識したことがないのであれば、公式の実装であるCPythonを使用していると考えてよいです。手元で確認してみましょう。

以下のコードを実行してみてください。
```python
import platform
print(platform.python_implementation())
```
私の環境では以下のように表示されます。
```shell
CPython
```
処理系がCPythonであることがわかりました。

## （補足）処理系とは

ここでの処理系とはProgramming Language Processorを指します。つまりPythonの処理系とはPythonのインタープリタを指しています。

> プログラミング言語プロセッサ (英: programming language processor)は、プログラミング言語で書かれたコードに処理を行い、別の形に変換するもののこと[1][2]。 単に言語プロセッサ、言語処理系、またはトランスレータ (translator)と呼ばれることもある。コンパイラ、インタープリタ、アセンブラ、プリプロセッサなどのことをまとめて指すときに使われることが多い。

https://ja.wikipedia.org/wiki/%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5

# CPythonは公式の実装なのか？

YESだと思いますが、厳密な記述を探しました。

Pythonの公式ドキュメントには以下のような記述があります。残念ながら曖昧な表現でした。

> CPython
これは最も保守されている初代のPython実装で、C言語で書かれています。ほとんどの場合、言語の新機能がいち早く実装されます。

https://docs.python.org/ja/3.13/reference/introduction.html#alternate-implementations

Wikipediaには以下のような記述があります。

> CPython は、Pythonのリファレンス実装である。

https://ja.wikipedia.org/wiki/CPython

# 次に
以下のようなテーマで続きを書こうと思います。
- 仕様と実装
- Pythonプログラムを実行すると何が起きるか
- Pythonの実行速度
QGISで作成したshpファイルをGoogle Earth Proで表示すると位置がずれる

### トラブル内容
QGISでグリッドを作成し、Google Earth Proで表示させて過去画像と見比べる作業を行おうとしている際に表題のトラブルに見舞われました。
![スクリーンショット 2025-06-16 21.41.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/806431/fd1e4316-f3c0-4cec-b16e-39a59b114975.png)
<p><em>左: QGIS画面 右: GoogleEarthPro画面</em></p>

### 解決方法
結論から言うと、グリッドをshpではなくgeojsonで作成すれば解決しました。

### 原因の仮説
おそらく原因はshpデータと一緒に作成されるprj, shxなどのファイルのうちいくつかをGoogle Earth Pro側でインポートする際に無視されているのではと予想しています。
gnuplot備忘録#1 「for文で複数の関数を呼び出す方法」

# 状況
* 複数の関数を定義して、プロットしたい。

# 方法
* 関数のパラメータを増やし、もう一つのパラメータで関数を選択する。

例：
```
f(x,a) = \
       (a == 1) ? sin(x) : \
       (a == 2) ? cos(x) : \
       (a == 3) ? sinh(x) : \
       (a == 4) ? cosh(x) : \
       0/0

set yrange [-5:5]
plot for [a=1:4] f(x,a)
```

# 失敗例
今回この記事を書いたのは、グラフの名前をグラフごとに変えてfor文で呼び出そうとすると、エラーが出てしまったためである。

```
set multiplot layout 2,2 
set xrange [-pi:pi] 
set yrange [-1:1] 
f1(x)=sin(x)
f2(x)=cos(x)
f3(x)=sinh(x)
f4(x)=cosh(x)

plot for [i=1:4] sprintf("f%d(x)",i)
unset multiplot
```

このコードを実行すると、以下のようなエラーが出る：

```
"data.plt" line 11: warning: Cannot find or open file "f1(x)"
 "data.plt" line 11: warning: Cannot find or open file "f2(x)"
 "data.plt" line 11: warning: Cannot find or open file "f3(x)"
 "data.plt" line 11: warning: Cannot find or open file "f4(x)"
 "data.plt" line 11: warning: Cannot find or open file "f5(x)"
 "data.plt" line 11: warning: Cannot find or open file "f6(x)"
 "data.plt" line 11: No data in plot
```

これは関数を呼び出す際、String型で呼び出すことができないためである。（sprintfはStringを返す）したがって、関数の名前をナンバリングして呼び出すことはかなり難しい。（コマンド全体をforで囲むとか方法はあると思うが、ちょっと思いつかない）

したがって、パラメータを増やして呼び出すことが一番簡単であると思う。

# 参考

https://stackoverflow.com/questions/79666023/i-cannot-plot-multiple-functions-when-using-for-loop
LLMによる和歌生成プロセス(メモ)



# 🏯 LLMによる和歌生成プロセス

---

## 【全体構成】

```
古典コーパス → 前処理 → トークナイズ → 学習 or 微調整 → 制約付き生成 → 評価
```

---

## ✅ ステップ1：**データ収集と整形**

| 処理内容    | 具体例                                                  |
| ------- | ---------------------------------------------------- |
| 和歌データ収集 | 万葉集、新古今和歌集、百人一首などの古典和歌データを構造化（作者・季語・主題付き）            |
| タグ付与    | 各和歌に対し以下を付ける：<br>・五七五七七の区切り<br>・季語<br>・テーマ（恋・自然・旅など） |
| 前処理     | 旧仮名遣いの正規化、漢字→仮名化、不要記号削除、表記揺れ統一など                     |

---

## ✅ ステップ2：**LLMへの入力形式の整備（プロンプト設計）**

```text
[テーマ]: 恋  
[季語]: 春風  
[形式]: 五七五七七  
→ 和歌を1首生成してください。
```

または：

```text
以下の和歌のスタイルを学習してください：
春の夜の　夢ばかりなる　手枕に　かひなく立たむ　名こそ惜しけれ（藤原定家）

[出力例（同スタイル）]:
夏の夜の　風に吹かれて　衣手は　思ひ出づれば　涙こぼるる
```

---

## ✅ ステップ3：**LLMの選択と生成方法**

### ◉ モデル選択

* **GPT系（ChatGPT, GPT-4など）**
* **日本語特化モデル（rinna / T5系）**
* **和歌専用BERT（微調整済み）**

### ◉ 生成手法

* **制約付き生成（五七五七七制約）**
  → Token数を制限 or 文字数調整プロンプト
* **トピック条件付き生成（Conditional Generation）**
* **例示ベース生成（Few-shot Prompting）**

---

## ✅ ステップ4：**生成された和歌の評価**

| 評価軸        | 内容                    |
| ---------- | --------------------- |
| 構造的評価      | 五七五七七の構造を満たしているか？     |
| 内容的評価      | 季語やテーマとの整合性はあるか？      |
| 美的評価（スタイル） | 古典的語彙・音感・余情が保持されているか？ |
| 意味生成品質     | 意味が通っているか、破綻していないか？   |

👉 自動評価指標として：

* BLEUスコア（構文類似）
* 文体識別モデルによるスコアリング（例：和歌らしさ度）

---

## ✅ ステップ5：**応用展開**

| 応用    | 内容                          |
| ----- | --------------------------- |
| 教育    | 和歌生成＋意味解釈支援による古典文法教育支援      |
| 文芸創作  | 現代和歌×AIの共作（現代語訳付き生成）        |
| 翻訳・生成 | 和歌 → 英訳・仏訳（Haiku化）などへの変換    |
| 生成補助  | 生徒の和歌下の句をAIが生成して補完するなどの対話支援 |

---

## 🔁 拡張例：LLMと制御工学の接続（詩的生成の制御）

* **状態空間モデルで文体・感情を変化させる**
  → 詩のスタイル変化を「状態遷移系」とみなして制御する。
* **感情入力（喜怒哀楽）→ 和歌生成モデルの制御入力**
* **MPC的アプローチ**：未来の文体（表現）を予測して生成語句を最適化

---

## 📌 補足：LLM用プロンプトテンプレート例（和歌生成）

```text
あなたは和歌の名人です。以下の条件に従って、古典的な美しさを持つ和歌を一首詠んでください。

【テーマ】別れ  
【季語】春の夜  
【形式】五・七・五・七・七  
【制約】意味が通り、感情がこもっていること

→ 出力例：
春の夜に　風はささやく　名残り香　袖に残して　君は行くなり
```

---
理論物理方程式から制御系設計まで



## ① **マクスウェル方程式 → 分布定数回路と遅れ系制御**

```
∇ × E = −∂B/∂t,  ∇ × H = J + ∂D/∂t
       ↓（準静的近似・導体中の波動伝播）
Telegrapher's Equation（分布定数回路）：
∂²V/∂x² = LC ∂²V/∂t² + RC ∂V/∂t + GL V
       ↓（Laplace変換）
V(x,s) = A·e^(−γx) + B·e^(γx)（γ = √(s²LC + sRC)）
       ↓（境界条件で伝達関数化）
H(s) = V_out(s) / V_in(s) = e^(−s√(LC)·ℓ)
       ↓（制御理論）
分布遅れ系（infinite-dimensional）→  
**遅れ補償制御（Smith Predictor）**  
**モデル予測制御（MPC）**
```

---

## ② **量子力学 → 半導体素子 → 電子回路制御モデル**

```
シュレーディンガー方程式：
−ħ²/2m ∂²ψ/∂x² + V(x)ψ = Eψ
       ↓（周期ポテンシャル V(x+a)=V(x)）
ブロッホ定理・バンド構造形成：
E(k) の連続帯 ⇒ バンドギャップ Eg = Ec − Ev
       ↓（n型・p型半導体）
MOSFET（電界効果トランジスタ）：
I_D = (1/2)μCox(W/L)(V_GS − V_th)²
       ↓（微小変化 → 小信号等価回路）
小信号モデル化：
v_out(s)/v_in(s) = H(s) = g_m·R_D / (1 + s·C_out·R_D)
       ↓
アナログ回路制御・通信系・フィルタ設計へ展開
```

---

## ③ **ナビエ＝ストークス方程式 → 状態空間モデル → フィルタ・制御**

```
Navier–Stokes（非線形PDE）：
ρ(∂u/∂t + u·∇u) = −∇p + μ∇²u + f
       ↓（内部流・一次元管・近似）
拡散型PDE ∂u/∂t = D ∂²u/∂x²
       ↓（空間離散化：FDM/FEM）
dx/dt = A x + B u + w（w: process noise）
y = C x + v（v: measurement noise）
       ↓
**カルマンフィルタ**による状態推定（最適ベイズ推定）
       ↓
流れ場推定と制御入力 u(t) 決定  
⇒ **リアルタイム流体制御・ドローン翼制御等**
```

---

## ④ **波動方程式（Hyperbolic PDE） → 遅れ系制御理論**

```
Wave Equation（波動方程式）：
∂²u/∂t² = c² ∂²u/∂x²
       ↓（ラプラス変換）
→ 時間→s領域、空間→2階常微分方程式
u(x,s) = A·e^(−s x/c) + B·e^(s x/c)
       ↓（境界条件 x=ℓ → x=0）
伝達関数：H(s) = e^(−sτ)（τ = ℓ/c）
       ↓
**純遅れ系（dead-time system）**
→ 制御設計手法：
- Smith Predictor（モデルベース補償）
- Dead-time MPC（予測制御）
- Kalman with delay（遅延付き推定）
```

---
A Tour of GO の Exercise: Loops and Functionsを解いた

## はじめに
Go言語を学んでみたいという知的好奇心から，とりあえず「A Tour of GO」をやってました．
その中で急に「Exercise: Loops and Functions」という問題が出てきてよく分からなかったので調べながら解きました．

## Exercise: Loops and Functionsの問題の意味

下記の式を`z := 1.0`で初期化してループさせながら計算すると`z^2 ≒ x`となるような`z`を求めることができるというもの（`x`は自分で与えた任意の数）

```
z -= (z*z - x) / (2*z)
```

少しわかりにくいので，例えば`x = 2`とした時に上記の式を計算すると`z = 1.1414...`となるような式のようです．（これをニュートン法と呼ぶらしい）

## 実装内容
```.go
package main

import (
	"fmt"
	"math"
)

func Sqrt(x float64) float64 {
	z := 1.0

	for i := 1; i <= 10; i++ {
		z -= (z*z - x) / (2 * z)

		fmt.Println(i, "回目の結果", z)

		if math.Sqrt(x) == z {
			fmt.Println(i, "回目でclear")
			break
		}
	}

	return z
}

func main() {
	fmt.Println(Sqrt(2))
}

```
出力内容

```
1 回目の結果 1.5
2 回目の結果 1.4166666666666667
3 回目の結果 1.4142156862745099
4 回目の結果 1.4142135623746899
5 回目の結果 1.4142135623730951
5 回目でclear
1.4142135623730951
```

こんな感じで`x = 2`とすると5回目のループで`math.Sqrt(x) == z`を満たすような値になりました．

厳密には`math.Sqrt(x) == z`とはならない（あくまで近似なので）のですが，float64の精度的に同じになる感じのようですね．

## 解いてみて
久しぶりに数値計算のようなプログラムを組んだので結構楽しかったです．
引き続きGoの学習を頑張りたいと思います．
python環境構築【2025年春】

この記事は、私自身の忘備録です。
定期的に環境を変える羽目になるのですが、今回は異なるpythonのバージョンを使い分ける必要があったため、pyenv + poetry の環境を構築しました。若干の躓きポイントがあったので忘れないようにメモしておきます。

## 対象環境
Windows 11

## pyenv install

[pyenv本家](https://github.com/pyenv/pyenv)
[pyenv-win](https://github.com/pyenv-win/pyenv-win)

PowerShellでのインストールがうまくいかなかったので、「Pyenv-win.zip」で手動インストール

[Pyenv-win zip](https://github.com/pyenv-win/pyenv-win/blob/master/docs/installation.md#pyenv-win-zip)に書かれている通りに実施。
1. 「pyenv-win.zip」をダウンロード
1. ユーザフォルダの直下に「.pyenv」というフォルダを作成
1. ダウンロードしたzipの中身を「.pyenv」フォルダに移動させる
1. 「\.pyenv\pyenv-win」の中に「bin」フォルダがあることを確認
1. 環境変数の設定
    1. 「PYENV、PYENV_ROOT、PYENV_HOME」を追加（[ここを確認してください](https://github.com/pyenv-win/pyenv-win/blob/master/docs/installation.md#add-system-settings)）
    1. PATHに「bin」フォルダを追加（[ここを確認してください](https://github.com/pyenv-win/pyenv-win/blob/master/docs/installation.md#add-system-settings)）

1. ここまではマニュアル通りなのだが、自分の環境ではさらに以下のコマンドを打つ必要があった。（[ここ](https://github.com/pyenv-win/pyenv-win/issues/332#issuecomment-1051177852)を参考。powershellは知らないスクリプトを動かしたくないらしい）
    ```
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    ```
    ```
    Unblock-File (Join-Path $env:PYENV 'bin/pyenv.ps1')
    ```
1. `pyenv --version`でバージョンが確認出来たら完了

1. pyenvで使うバージョンのpythonをインストールし、globalに設定する（バージョンは各自変更してください）
    ```
    pyenv install 3.12.10
    ```
    ```
    pyenv global 3.12.10
    ```


## poetry install

[poetry](https://python-poetry.org/docs/)

1. マニュアルに従い、下記コマンドを実行。`py`を`python`に変えるのを忘れないこと
    ```
    (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python - 
    ```
1. 環境変数の設定
    1. `PATH`に「\AppData\Roaming\Python\Scripts」を追加
1. `poetry --version`でバージョンが確認出来たら完了
わからないときにチャットで質問するための質問文テンプレート

お疲れ様です。○○について質問させてください。

【状況】
現在、○○モジュールの修正作業中で、XX関数の挙動を調査しています。

【やりたいこと】
○○を行うための処理フローを把握したいと考えています。

【試したこと】
・ソースコードを追った結果、XX.c の 42行目で処理が分岐しており、ここが関係していると予想
・Gitログを確認し、2022年のコミットで追加されたことは確認

【質問内容】
この部分の処理フローについて、以下の理解で合っていますでしょうか？

→ 処理は A → B → C の順で進み、XX関数はその中でBに該当する

もし認識が誤っていたら、ご指摘いただけますと幸いです。

お忙しいところ恐れ入りますが、ご確認いただければ幸いです。

補足：一言つけると印象が良くなるフレーズ
「もしお時間あるときに見ていただければ大丈夫です」

「もし別の資料など参照すべきものがあれば教えていただけると助かります」

```
○○の件で詰まっています。

【やりたいこと】
→ ○○を実現したいと考えています。

【現在の状況】
→ △△という方法を試しましたが、□□というエラーが出ました。

【環境】
→ OS: ○○ / 言語: ○○ / フレームワーク: ○○

【調べたこと・試したこと】
→ Googleで「○○ エラー名」で検索し、公式ドキュメントを確認しましたが解決に至りませんでした。

【お願いしたいこと】
→ このエラーの解決方法、または別の実現手段があれば教えていただきたいです。
```
```

【やりたいこと】

【現在の状況】

【環境】

【調べたこと・試したこと】

【お願いしたいこと】

```

よくあるパターン別テンプレート
1. エラーが出たとき

```
○○の実装中に以下のエラーが発生しています。

【エラーメッセージ全文】
→ （ここに貼り付ける）

【再現手順】
→ △△という操作を行うと、エラーが出ます。

【試したこと】
→ ○○を変更してみましたが、改善しませんでした。
```

```
【エラーメッセージ全文】

【再現手順】

【試したこと】
```


2.設計や方針がわからないとき

```
○○をどう設計すべきか悩んでいます。

【前提】
→ ○○のような要件があります。

【自分の案】
→ △△の構成を考えましたが、拡張性やパフォーマンスに不安があります。

【相談内容】
→ 他に考えられる構成やベストプラクティスがあれば、ご意見いただきたいです。
```
```

【前提】

【自分の案】

【相談内容】

```

✅ コードレビューをお願いしたいとき
書いたコードのレビューをお願いできますか？
```
【目的】
→ ○○の機能を実装しました。

【ポイント】
→ △△の処理の書き方に自信がなく、より良い書き方があれば知りたいです。

【対象ファイル】
→ filename.js（該当箇所にコメントを付けています）

【知りたいこと】
→ 処理の効率性やコードの可読性についてアドバイスいただけると助かります。
```

✅ 仕様の意図や背景を知りたいとき
○○の仕様について確認させてください。

```
【対象の仕様】
→ ○○画面の「△△ボタン」を押すと□□が実行される仕様です。

【背景】
→ 他の画面では似たようなボタンが別の処理をしています。

【確認したいこと】
→ この違いには何か意図や背景がありますか？
```


✅ 誰に質問していいかわからないとき
○○について詳しい方、いらっしゃいますか？
```
【困っていること】
→ △△の設定ファイルに関する仕様が不明で手が止まっています。

【やりたいこと】
→ 設定ファイルを変更して□□を実現したいです。

【知りたいこと】
→ この辺りに詳しい方、または過去に対応したことがある方がいれば、少しお話を伺いたいです。
```

✅ ドキュメントを読んでもわからないとき
ドキュメントを読んだのですが理解できず、補足いただけないでしょうか？

```
【参照したドキュメント】
→ https://example.com/docs/○○

【わからなかったポイント】
→ 「XX」という記述が抽象的で、具体的に何を指しているのかが不明です。

【やりたいこと】
→ 実装にあたって正確に仕様を理解しておきたいです。
```

✅ 雑談チャットでのカジュアル質問（フランクVer）
ふと疑問に思ったんですが、○○ってみなさんどうしてます？

```
【背景】
→ △△のタスクでちょっと悩み中です。

【聞きたいこと】
→ この辺、みなさんの工夫とかあれば聞いてみたいです！
```

まとめ
質問にも「設計」があります。相手がすぐに「なるほど、それなら○○ですね」と答えられるように、背景・状況・試行錯誤・目的を明示することが大切です。
Windowsで検証目的で無理やりドライバを認識させる


# Windowsでデバイスマネージャーの×を取り敢えず消したい

という場合、**自己責任** ですができるはずです。

- 公式サイトなどのドライバ提供がないか再確認する
- Windowsアップデートを一応やってみる
- ドライバCDとかないか探してみる
- でもだめ＼(^o^)／

↓

infファイルという、普通の平文のテキストファイルを編集し、
物理的なデバイスと、ソフトウェアであるデバイスドライバとを対応させることが、理論上可能です。

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/overview-of-inf-files

デバイスドライバとinfファイルを自作できるならここで記事を読んではいなそうなので、
想定されるのは、取り敢えずパソコンの中のドライバで動かないかな、、、
という状況だと思います。
infファイルは、デバイスマネージャーで×がついているデバイスのIDに、
近いもの、それっぽいものを紐づけてみる、というアプローチが可能です。

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/looking-at-an-inf-file

編集の基本方針は、
自分のパソコンのデバイスマネージャに表示されているハードウェアIDを確認し、
既存の近そうなドライバをコピーして、改変して適用してみる、と言った感じです。
同じメーカーで、同じような機器を探してみる、という感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562068/0107a2f0-158d-47ee-9e6a-1264676b89d4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562068/a17a74a4-7b50-46bd-9ca6-2bc6190391f2.png)

また、ドライバに関してGUIではない操作も可能です。

```
pnputil /enum-drivers
```

```
driverquery
```

コピー元とするデバイスドライバは、パソコンの中なら以下から探せるはずです。

```
explorer c:\Windows\System32\DriverStore\FileRepository\
```

パソコンの中のドライバを手動で探す場合は、ドライバの更新から可能なはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562068/dc6ce3cd-63ef-4574-b1e3-8c8192a0b82e.png)

---

ただし、不正なソフトウェアが動作することを防止するために、
デバイスドライバは署名という手続きが必須となっています。

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/driver-signing

しかし、デバイスドライバ開発中や、検証中という場合、この署名を無視することが可能です。

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/installing-an-unsigned-driver-during-development-and-test

https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/test-signing

取り敢えず手元のパソコンで何らかのデバイスをWindowsに認識させたい、
という場合、お手元のパソコンのOS状態、ファーム状態によって必要な対応が変わってきますが、

```
bcdedit  /set  testsigning  on
```

これを基本として、インストールへ進めるはずです。

繰り返しですが、敢えてセキュリティレベルを下げる作業であり、
適切でないドライバを対応させることで機器に悪影響は有り得る、
と言った点で、完全に **自己責任** の作業となります。
【アップデート】Amazon Connect がプロファイルエクスプローラーをリリースしたので触ってみた

## はじめに
2025年6月9日付けの AWS アップデートにて、Amazon Connect が統合顧客ビューのプロファイルエクスプローラーをリリースしました。このアップデートは既存の Amazon Connect Customer Profiles（顧客情報の集約サービス） の追加機能であり、顧客情報を自由にカスタマイズしたビューを作成することができます。AI による顧客概要もビューに含めることができるため、特定の顧客の傾向やアプローチについても一目で把握することもできます。今回は実際にプロファイルエクスプローラーを触ってみたので所感についてご紹介します。

[Amazon Connect launches profile explorer for unified customer views](https://aws.amazon.com/about-aws/whats-new/2025/06/amazon-connect-profile-explorer-unified-customer-views/)

## セキュリティプロファイルの有効化
まずはセキュリティプロファイルの[お客様のプロファイル]で Profile explorer にチェックを入れます。その後、ログインし直すとお客様のプロファイルタブにプロファイルエクスプローラーが追加されます。

![{AA0C5173-F861-405D-B03D-C5B742B02D2A}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777988/92876e7e-721c-4c2a-8af1-5eab4b484dac.png)

## プロファイルエクスプローラーを開く
新しく追加されたプロファイルエクスプローラーを開くとホーム画面に顧客の概要と Customers が表示されます。これでエージェント Workspace を介さなくても顧客プロファイルを閲覧することができますね。ただし、Customers はデフォルトで「最新のプロファイル」が選択されており、これを「すべてのプロファイル」に変更すると顧客プロファイルが表示されなくなりました。Customer ID を検索することで顧客プロファイルが表示されるため、現時点では一覧を見る際は「最新のプロファイル」を選択する必要がありそうです。

![{1B219030-E8B5-492F-A762-12CEFE13BC54}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777988/6d8b7400-8c04-4095-8640-0024d4fd60cb.png)

## ビューの編集
Customers から対象の顧客のフルネームをクリックするとビューが表示されます。次に右上のウィジェットを追加から「デフォルトのウィジェット」と「カスタムウィジェット」を追加できます。デフォルトのウィジェットでは生成AIの概要や顧客情報などを追加することができ、カスタムウィジェットではテーブルやグラフを追加することができます。
今回はビューにCustomer information、Gen AI summary、Contacts を追加してみました。ウィジェットはドラッグアンドドロップで簡単に移動できます。残念ながら Gen AI summary はまだ日本語対応されていませんでした。また、タブも複数追加できるため、自由にカスタマイズができそうです。

![{0420236B-F0A3-4D5C-AD74-AE8954A2E192}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777988/98244277-cabf-472e-8ed7-3045132310f5.png)

### Gen AI summary の内容
* 英語
>Customer profile shows limited recent activity and engagement. The customer has 0 assets, 0 orders, and 0 email deliveries or SMS messages. They have contacted the call center 0 times, with an average call duration of 1.369 minutes and 42.86% of calls abandoned. This indicates potential service dissatisfaction and risk of churn.
AI suggestion: Reach out to this customer to understand their needs and concerns. Identify opportunities to re-engage them through personalized offers, service upgrades, or loyalty program incentives. Monitor their activity closely and address any signs of dissatisfaction to mitigate churn risk.

* 日本語
>顧客プロフィールでは、最近のアクティビティとエンゲージメントが制限されています。この顧客は、0件の資産、0件の注文、0件のEメール配信またはSMSメッセージを保有しています。コールセンターへの問い合わせは0回で、平均通話時間は1.369分、通話放棄率は42.86%です。これはサービスに対する潜在的な不満と解約リスクを示している。
AIの提案 この顧客に接触し、ニーズと懸念を理解する。パーソナライズされたオファー、サービスのアップグレード、またはロイヤルティプログラムのインセンティブを通じて、再契約の機会を特定する。顧客の行動を注意深く監視し、不満の兆候があれば対処して解約リスクを軽減する。

AI の提案として、この顧客に対してどうアプローチしていけばよいかアドバイスが記載されている点はとても実用的だと思いました。内容についてもおおむね合っています。

## おわりに
今回は Amazon Connect のプロファイルエクスプローラーについて簡単に触ってみました。計算属性やケースなどを使えば、より直観的に顧客情報を整理することができ、顧客への理解がより深まると思いました。
HTML <p>tag

私は最近、HTMLの勉強を始めました。その中で最初に学んだタグの一つが、段落を作るための<p>タグです。とても基本的なタグですが、文章を読みやすく整理するのにとても重要です。

<h1>William Blake</h1>
<p>17 south molten street<br>
    London<br>
    W1K 5QT<br>
    UK
</p>
<hr>


<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Vel, itaque odio? Ipsum quia qui odio, atque expedita dolore perferendis provident minima culpa dolor consequatur aspernatur temporibus suscipit dolores nihil distinctio.orem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?orem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?orem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?orem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?orem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?</p>

<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?orem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?orem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?orem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?orem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?orem ipsum dolor sit amet consectetur adipisicing elit. Corporis nobis provident deleniti quisquam ipsa minus iure obcaecati, veniam similique culpa tempora molestiae quod, quaerat unde? A, magni veritatis. Molestias, facere?</p>
【Python】正規表現reモジュールのsearch関数とmatch関数

正規表現[reモジュール](https://docs.python.org/ja/3/library/re.html#module-re)の[`search(pattern, string)`](https://docs.python.org/ja/3/library/re.html#re.search)と[`match(pattern, string)`](https://docs.python.org/ja/3/library/re.html#re.match)は、指定した文字列（`string`）が正規表現（`pattern`）にマッチするか調べる関数です。

`search()`は文字列の中の場所を問いませんが、`match()`は文字列の先頭がマッチするか判定します。

https://docs.python.org/ja/3/library/re.html#module-re
【Python】正規表現の特殊文字

正規表現の特殊文字
-------------------------------
\d 数字
\D 数字以外
\s 空白文字
\S 空白文字以外
\w 任意の英数字
\W 英数字以外
. 任意の1文字
^ 先頭
$ 末尾
　* 0文字以上の繰り返し
　+ 1文字以上の繰り返し
? 0回か1回の繰り返し
{m} m回の繰り返し
{m, n} m回以上、n回以下の繰り返し
[...] 指定したいずれかの文字
[^...] 指定したいずれかの文字以外
(x|y) xかyの選択
-------------------------------
Visual AssistのAlt + Shift + Sがある日Windows11の"Visual Search"に乗っ取られた件と、"Visual Search"を無効化する方法

# 問題の概要
Alt + Shift + SでVisual Assistのシンボル検索をしようとしたところ、シンボル検索ではなく以下のような"Visual Search"のポップアップが出るようになってしまいました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/0ae51527-6c09-47d8-8369-6da74f1e912a.png)

Visual Assistはもはや体の一部であるので、シンボル検索ができないのはとても困ります。

# 解決策
"Visual Search"を無効化します。

Edgeから、
edge://settings/appearance/browserBehavior
を開き、Enable Edge Lens to search anything on screen を切ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/b2b2bb2f-86da-48a4-85a5-dfa67dc1c6b0.png)

このあとEdgeを一度閉じることで、設定が反映されるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/8cacbc26-dbe1-4494-8997-41e8abfaca41.png)

Alt + Shift + Sで再びシンボル検索ができるようになりました。

# リファレンス

https://www.wholetomato.com/en/learn/keyboardshortcuts

https://answers.microsoft.com/en-us/microsoftedge/forum/all/need-a-way-to-turn-off-the-altshifts-shortcut-for/9a332854-07b5-4fa9-97b5-63854bece25a

https://www.elevenforum.com/t/enable-or-disable-visual-search-keyboard-shortcut-in-microsoft-edge.36650/
C言語 GDBの基本的な使い方

ブレークポイント関連
b（break）
用途: ブレークポイントを設定し、プログラムの一時停止地点を指定する。

使い方:

b function_name：関数の先頭にブレークポイントを設定

b filename.c:line_number：ファイルの特定行に設定

disable / enable
用途: ブレークポイントの一時的な無効化 / 再有効化

使い方:

disable 1：1番のブレークポイントを無効化

enable 1：1番のブレークポイントを有効化

delete
用途: ブレークポイントの削除

使い方:

delete：すべて削除

delete 1：1番のブレークポイントのみ削除

watch
用途: 特定の変数の変更を監視。値が変わると自動停止。

使い方: watch x

▶️ 実行制御
c（continue）
用途: 実行を再開し、次のブレークポイントまたは終了まで続行

使い方: c

n（next）
用途: 次のソース行へ進む（関数呼び出しには入らない）

使い方: n

s（step）
用途: 次のソース行へ進む（関数呼び出しがあれば中に入る）

使い方: s

run
用途: プログラムの開始

使い方:

run：引数なしで開始

run arg1 arg2：引数を指定して開始

quit / q
用途: gdbを終了

使い方: q または quit

🔍 コードと変数の確認
l（list）
用途: ソースコードの表示

使い方:

l：現在の位置の前後10行

l main：main関数の付近

l 42：42行目付近

p（print）
用途: 変数や式の値を表示

使い方:

p x：変数 x の値を表示

p x + 1：式の評価結果を表示

p *ptr：ポインタの指す値を表示

set
用途: 実行中の変数の値を変更

使い方: set var x = 10

🧠 スタックと関数の確認
bt（backtrace）
用途: 関数呼び出しの履歴（スタックトレース）を表示

使い方: bt

f（frame）
用途: スタックフレームの切り替え（過去の関数呼び出しの状態を見る）

使い方:

f 0：現在のフレーム

f 1：1つ前の関数呼び出し

info 系コマンド
用途: 内部状態の確認に使うサブコマンド群

例:

info breakpoints：ブレークポイント一覧

info locals：ローカル変数

info args：関数引数

info registers：レジスタの状態（C言語の低レベルデバッグで使用）

📁 ソース管理
directory
用途: ソースファイルの検索パスを追加

使い方: directory /path/to/source/files

📝 補足操作
補完機能：Tabキーでコマンドの補完が可能

コマンド履歴：上下矢印キーで過去の入力履歴をたどれる

典型的なgdbの操作例
```
gdb ./a.out                   # 実行ファイルを指定して起動
(gdb) directory ./src         # ソースのディレクトリを追加
(gdb) b main                  # main関数にブレークポイント
(gdb) run                     # プログラムを開始
(gdb) n                       # ステップ実行（next）
(gdb) p var                   # 変数の値を確認
(gdb) bt                      # スタックトレース表示
(gdb) quit                    # 終了
```
AWS DVA 合格体験記

# はじめに
業務でAWSを使用するため、その流れでDVAを取得しました！
取得するまでに行ったこと、かかった時間など、端的に記載します。

# やったこと
Cloud Licenseのみ！
70問解く → 間違った問題をもう一度解く
これを最後まで繰り返しました。
1か月かけて、業務後時間があるとき、心の余裕があるときに取り組みました。

▼学習履歴
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809594/0a209fe4-f728-47f2-b257-334a08144647.png)

# まとめ
10:00~12:20ぐらいまで試験を受けて、当日20:00ぐらいに結果を確認できました。
つべこべ言わずに問題をたくさん解くに越したことはないと思いました。
ではご褒美にラーメン食べてきます:ramen:
【certbot】"certbot --preferred-challenges=https"ってしたいんじゃが

# なにをしたい？

既にSSLで構築されているWebサイトについて、証明書だけLet's Encryptに入れ替えたい。


# 何が問題？

Let's EncryptでSSL証明書を発行する際は、そのドメインを自分が所有していることを証明する必要があります。
そうでないと勝手に他所のサイトの証明書を発行できてしまいますからね。

で、所有権確認の方法は概ね2種類です。

・DNSのTXTレコードに指定のランダム文字列を書き込んで、Let'sEncryptサーバからアクセスして確認 (DNSチャレンジ)
・Webサーバの`/.well-known/acme-challenge/xxx`ファイルに指定のランダム文字列を書き込んで、Let'sEncryptサーバからアクセスして確認 (HTTPチャレンジ)

いずれもドメイン所有者以外にはできない操作のはずなので、これでドメイン所有の証明にするというわけですね。

このうち手っ取り早いのは後者です。
Webサーバにファイル一個置くだけですからね。
しかも`certbot --apache`コマンドは、そのあたりをApacheの設定ファイルを見て自動的にやってくれます。
ということでさっそく実行しようとしたらエラーになりました。

```bash
# certbot --apache

Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain.
```

80番ポートが動いてないから認証できないぞ。

つまり該当ファイルは`https://example.com/.well-known/acme-challenge/xxx`ではなく`http://example.com/.well-known/acme-challenge/xxx`に置く必要があるわけです。


# HTTPSチャレンジがない理由

`certbot`には[--preferred-challenges](https://eff-certbot.readthedocs.io/en/stable/using.html#manual)というオプションがあって、所有者確認方法を指定することができます。
しかしその有効な選択肢は『dns』『http』しかないようです。

どうして？
『https』があってもいいじゃんよ。

ドメイン所有者確認の方法はべつにLet'sEncryptのオリジナル実装というわけではなく、[RFC 8555](https://datatracker.ietf.org/doc/html/rfc8555)で定義されています。
HTTPSチャレンジがない理由もそこに書かれていました。

:::note
Because many web servers allocate a default HTTPS virtual host to a particular low-privilege tenant user in a subtle and non-intuitive manner, the challenge must be completed over HTTP, not HTTPS.
:::

んー…………何言ってるのかわからん。

実はLet'sEncryptは昔はHTTPSチャレンジにも対応していたのですが、多くのプロバイダで[脆弱性が見つかった](https://community.letsencrypt.org/t/2018-01-09-issue-with-tls-sni-01-and-shared-hosting-infrastructure/49996)[から対応を外した](https://community.letsencrypt.org/t/what-you-need-to-know-about-tls-sni-validation-issues/50811)ということらしいです。
仕様そのものではなく、実装に問題があるからって仕様を封印してしまうのか？？？

あとこれ一時的に自己署名証明書を生成してどうこうみたいなことが書いてあるな。
そうではなく、既に別口で持ってる既存の正しい証明書を使用してどうこうしたいんだけど、そのあたりは記述を見つけられませんでした。
誰か詳しい人たすけて。


# まとめ

所有者確認だけのためにわざわざHTTPつくった。


# DNSチャレンジについて

DNSで認証すればいいんでないの？
`_acme-challenge IN TXT "HOGEHOGE"`って置けばいいだけだから楽では？

まあ確かに証明書を発行するだけならそっちでいいんですけどね。
問題は更新時です。
DNSチャレンジの場合、証明書の自動更新時にも[TXTレコードの更新を要求](https://qiita.com/fruitriin/items/3e3e330df04a1891dc46)されます。

有名どころのDNSにはそのあたりを自動でやってくれる[プラグインがあります](https://eff-certbot.readthedocs.io/en/latest/using.html#dns-plugins)が、マイナーなところを使っていた場合は手動でDNS更新のリクエストを書かなければならず、むしろそもそもAPIが無いなんてことも考えられます。
考えられますっていうか某DNSはなかった。
やってられるか。
【簡単Kubernetes】Kubernetesにおける名前空間レベルとクラスタレベルの資源の違い

Kubernetes では、リソースは「名前空間レベル（Namespaced）」または「クラスタレベル（Cluster-scoped）」のいずれかに分類されます。これらの区別は、リソースのスコープや管理方法に大きく影響します。

---

## 📂 名前空間レベル（Namespaced）リソース

### 概要

名前空間レベルのリソースは、特定の `Namespace` に属し、その中でのみ有効です。他の名前空間からはアクセスできません。

### 代表的なリソース例

- Pod
- Service
- Deployment
- ReplicaSet
- ConfigMap
- Secret
- Role
- RoleBinding

### 特徴

- 同じ名前のリソースを複数の名前空間で共存させることができる
- チームごとの分離やマルチテナンシーに向いている
- 名前空間を削除すると、属するリソースも全て削除される

---

## 🌐 クラスタレベル（Cluster-scoped）リソース

### 概要

クラスタレベルのリソースは、名前空間に属さず、Kubernetes クラスタ全体に対して有効です。

### 代表的なリソース例

- Node
- Namespace
- PersistentVolume（PV）
- ClusterRole
- ClusterRoleBinding
- CustomResourceDefinition（CRD）

### 特徴

- クラスタ全体で一意のリソース名が必要
- リソースはクラスタ管理者によって管理されることが多い
- 名前空間を超えたアクセス制御や設定が可能

---

## 🚫 所有者（Owner）と従属（Dependent）リソースの制約

Kubernetes では、所有者（Owner）と従属（Dependent）の関係は、以下の制限を持ちます：

- 名前空間内のリソースは、**同一名前空間**内のリソースのみを所有者に指定できる
- クラスタレベルのリソースは、**他のクラスタレベルのリソース**のみを所有者に指定できる
- 名前空間レベルのリソースがクラスタレベルのリソースを所有することは **不可**
- クラスタレベルのリソースが名前空間レベルのリソースを所有することも **不可**

この制約により、ガーベジコレクション（Garbage Collection）が正しく機能するよう設計されています。

---

## ✅ まとめ

| 特徴 | 名前空間レベル | クラスタレベル |
|------|----------------|----------------|
| スコープ | 単一の Namespace 内 | クラスタ全体 |
| 代表例 | Pod, Service, Deployment | Node, PV, Namespace |
| 所有者制約 | 同じ Namespace のみ | 他の Cluster-scoped のみ |
| ユースケース | チーム・プロジェクト単位の分離 | クラスタ管理のための設定 |

---

## 🔗 参考リンク

- [Kubernetes Namespaces](https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/namespaces/)
- [Kubernetes Garbage Collection](https://kubernetes.io/ja/docs/concepts/workloads/controllers/garbage-collection/)

---
VSCode拡張「vscode_qiitaapi」Qiitaテンプレートの使い方

# はじめに

**この記事では、VSCode拡張「vscode_qiitaapi」でのテンプレートの使い方を説明します。**

## 使い方

:::note info
**流れは？**
拡張機能のインストールから記事投稿の更新まで
:::

| ステップ | 手順                  | 内容                                                        |
| ---- | ------------------- | --------------------------------------------------------- |
| 1    | VSCode拡張のインストール     | 拡張機能 `vscode_qiitaapi` を検索し、インストールする。                     |
| 2    | Qiita APIトークンの発行    | Qiita公式のトークン発行ページから `read_qiita` と `write_qiita` を許可して発行。 |
| 3    | VSCodeにトークンを設定      | VSCodeの設定で `qiita.apiToken` にトークンを入力。                     |
| 4    | テンプレート付きMarkdownを作成 | Qiitaテンプレートを先頭に記載したMarkdownファイルを作成。                       |
| 5    | 記事投稿（初回）            | コマンドパレットで `qiitaに投稿する` を実行し、Qiitaに投稿。                    |
| 6    | 記事更新（2回目以降）         | テンプレートに `ID` が追加され、以降は `qiitaに投稿する` で更新可能。             |

:::note info
**テンプレートの構文は？**
以下の2種類あり、メタデータブロックとして記述
:::

| タイプ   | 開始/終了記号            | 使用例                                                                                                                                                                    |
| ----- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| パターン① | `/* ********** */` | #markdown<br>/********\*\*/<br>/* ID:              \*/<br>/* title: タイトル \*/<br>/* private: false  \*/<br>/* istweet: false  \*/<br>/* tags: aws, qiita \*/<br>/\*\*\*\*\*\*\*\*\*\*/  |
| パターン② | `---`              | #markdown<br>---<br>ID: <br>title: タイトル<br>private: false<br>istweet: false<br>tags: aws, qiita<br>---<br>                                                            |

:::note info
**テンプレートの各フィールド意味は？**
必須項目が3つ、任意項目が2つ
:::

| フィールド名 | 必須 | 説明 |
|--------------|------|------|
| `ID`         | ×（新規投稿時）<br>○（更新時） | Qiita 記事の ID。新規投稿では空欄。更新時は記事IDが必要。初回投稿後、自動で挿入される。 |
| `title`      | ○    | 記事タイトル。Qiita上で表示されるタイトル。 |
| `private`    | ○    | `true` で限定公開、`false` で全体公開。必ずどちらかを明記。 |
| `istweet`    | ×    | QiitaとTwitter連携している場合、投稿と同時にツイートするか。`true` または `false`。 |
| `tags`       | ○    | 記事に付与するタグ（カンマ区切りで最大5つまで）。例: `aws, cloudformation, vscode` |

:::note info
**投稿から更新フローは？**
コマンドパレット（Ctrl + Shift + P （F1））で実行
:::

| シーン   | 使用コマンド           | 補足                                 |
| ----- | ---------------- | ---------------------------------- |
| 初回投稿  | `qiitaに投稿する`    | テンプレートに `ID:` を空欄で記載。              |
| 投稿成功後 | 自動で `ID:` が挿入される | Qiitaから返されたIDがテンプレートに追加される。        |
| 更新投稿  | `qiitaに投稿する`  | 初回投稿のマークダウンファイルに記事の `ID:` が自動挿入。同じMarkdownファイルから上書き可能。タイトルや本文を変更可。 |
pythonのユーザー定義関数「sympyで1/√2を表示したい場合にsqrt(2)/2と簡単化されてしまうのを回避したい」をAI先生ヘ。



# オリジナル
kenta_matsuda 様へ。ありがとうございます。

https://teratail.com/questions/uleqtvposkcce2

# (本日の)ChatGPT先生へ
```
# 質問リスト
1. Sympyで、分数が有理化されるのを回避したい  
   1/√2を表示したい場合にsqrt(2)/2と簡単化されてしまうのを回避したい  
2. 本当ですか。  
3. unexpected keyword argument 'evaluate'がでます。  
4. 1*(sqrt(2)/2)がでます。
```
#### (以下回答抜粋)
>✅ 真に 1/sqrt(2) を維持したい方法
SymPy は基本的に「式を正規化」する設計思想のため、有理化を絶対に防ぐのは困難です。ただし、表現（表示）目的で 1/√2 を維持することはできます。
>✅ 方法1：文字列として構築し、sympify + evaluate=False
```python
from sympy import sympify

expr = sympify("1/sqrt(2)", evaluate=False)
print(expr)
```
>✅ 方法2：記号的な式を分子・分母で明示的に構築する
```python
from sympy import Symbol, sqrt

denom = sqrt(2)
expr = 1 / denom  # ← これは rationalize されるので注意
```
>ご希望が「計算」か「見た目の保持」かに応じて、最適な対応をさらにご案内できます。どちらをご希望ですか？
・以下省略

# Gemini先生へ

# copilot先生へ

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

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

# いつもと違うおすすめです。
#### Qiita内
正規分布が直感的な条件だけから導けることは示した... では対数正規分布は？

# 乗法の中心極限定理と、対数正規分布の自然な出現

「人間の身長」「サイコロの合計値」「誤差の分布」など、**加法的なランダム性の結果**はよく正規分布に従うことで知られています。  
これが
**1. 誤差は全て独立に同じ分布に従う
2. 誤差が0のときの一番ノーマルな状態の確率が最大となる
3. 小さすぎるのと大きすぎる誤差は等しい確率でおこる
4. 極端なイレギュラーが起こる確率は0に収束していく**
という直感的な条件だけから導けることは、[前回の記事](https://qiita.com/YTZ1729/items/35310c7dfeb4f9858cea)で示しました。



では、**乗法的なランダム性の結果**はどうなるでしょうか？

---

## それが「対数正規分布」です

正規分布と対数正規分布の違いは一言で言うと：

- **加法の結果 → 正規分布**
- **乗法の結果 → 対数正規分布**

対数正規分布とは、**その対数をとると正規分布になるような分布**です。

たとえば変数 $( X $) が対数正規分布に従うとは：
$
\log X \sim \mathcal{N}(\mu, \sigma^2)
\
$
ということです。

---

## 加法で正規分布が生じるロジックをおさらい

以前の記事では、以下のような**直感的な条件**だけから正規分布が導かれることを紹介しました：

1. 誤差はすべて独立で同じ分布に従う  
2. 誤差が0のときが一番起こりやすい  
3. 小さすぎる誤差と大きすぎる誤差は対称  
4. 極端に大きな誤差はほとんど起きない  

この条件下で最尤推定を行うと、指数関数や \( \sqrt{2\pi} \) のあの形が自然に出てきて、正規分布が導かれました。

---

## 対数正規分布の背景にある「乗法的な世界」

一方、対数正規分布の本質は、**積に関するランダムネス**にあります。

---

###  乗法の中心極限定理（Multiplicative CLT）

1. 独立な正の確率変数 $\( X_1, X_2, \dots, X_n \)$ を考えます  
2. それらの積をとる：
   $\
   Y = X_1 \cdot X_2 \cdot \cdots \cdot X_n
   \$
3. 両辺の対数をとると：
   $\
   \log Y = \log X_1 + \log X_2 + \cdots + \log X_n
   \$
4. ここで各 $ \log X_i \ $が独立で分散が有限であれば、**中心極限定理が使える！**

5. よって：
   $\
   \log Y \xrightarrow{d} \mathcal{N}(\mu, \sigma^2)
   \quad \Rightarrow \quad
   Y \sim \text{対数正規分布}
   \$

---

## なぜ工業製品の公差が対数正規なのか？

ある製品の誤差が、**加工工程ごとに連鎖的な“倍率”で変動**しているとしましょう。  
たとえば、穴の直径に毎工程「±3%の誤差」がかかるとすると、全体の誤差は：

$\
X = E_1 \cdot E_2 \cdot \cdots \cdot E_n
\quad \text{（各}~E_i~\text{が倍率誤差）}
\$

というように、**乗法的に蓄積**されます。  
このとき $\ \log X \$ は加法的な形になるので、中心極限定理により正規分布に近づき、  
$\
X \sim \text{対数正規分布}
\$
が成立するわけです。



---

##  正規分布と対数正規分布のまとめ

| 観点 | 正規分布 | 対数正規分布 |
|------|-----------|----------------|
| 発生メカニズム | 加法 | 乗法 |
| 中心極限定理 | $\( X_1 + \cdots + X_n \)$ | $\( X_1 \cdot \cdots \cdot X_n \)$ |
| log変換 | 不変 | **正規分布になる** |
| データの特徴 | 負値をとることも | **正の値のみ** |
| 自然に出現する例 | 身長・誤差・試験点数 | 所得・資産・粒径・公差 |

---
## 要するに...
1.加法に関して$iid$ならば正規分布が待っており、
2. 乗法に関して$iid$ならば対数正規分布が待っている。
Outlookで「Gmailのお気に入り機能」もどきを追加する方法

# 初めに
職場環境の変化により使用するメールがGmail→Outlookに変わりました。どちらも良し悪しがありますが、自分が一番不便に感じたのは、Gmailのお気に入り的な機能がない点でした。
調べてみるとそれらしき機能はあるのですが、うまく使いこなせず…
・フラグ機能：処理が重い、締切予告機能の処理が手間
・画面左の「お気に入り」フォルダ：全メールが入っていて分類の仕方がよくわからない（どう使うんだ…）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1177046/3796086c-0890-4f2d-afbb-f00aa489958e.png)

# Outlookで設定する方法
1.どれでも良いのでメールを選択して右クリック。分類→分類を管理

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1177046/5cc219a4-cb44-4b8c-b645-c05ca579882c.png)

2.編集で適当な名前と色を設定。Gmailにならって「お気に入り」、アイコンは黄色に設定。名前の右横の星マークのクリックを忘れずに！ここをクリックするとお気に入りしたメールが一覧で表示できるフォルダが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1177046/c3e74b5e-c6fb-407d-9896-92c5147cc674.png)

3.設定が完了すると左側に「お気に入り」フォルダが作成され、お気に入りに分類したメールが一覧で表示されます。お気に入りに分類するには手順の1.のようにメールを選択して右クリックし「お気に入り」タグをクリックするか、2.で設定したショートカット入力すればオッケーです。

![qiitaお絵描き.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1177046/a4a055b1-b56f-4414-80f2-49c136b7cb4d.png)

# 終わりに
ちょっと手間ですが、これで設定完了です。
余談ですが、Outlookは画面構成が結構変わるので、いろいろ難しいところもありますね。
転置行列



転置行列って聞くと一瞬ひるむけど、実はただの「行と列の反転」！

<br>

## 問題概要

N 行 K 列 の2次元配列を、K 行 N 列 の 転置行列 に変換して出力せよ。

<br>

入力例：

    2 3
    1 2 3
    4 5 6

出力例：

    1 4
    2 5
    3 6

<br>

https://paiza.jp/works/mondai/double_roop_problems/double_roop_problems__transposition

<br><br><br>

## 🟥 NG例
```js
const rl = require('readline').createInterface({input:process.stdin});
const lines = [];

rl.on('line', (input) => {
    lines.push(input);
});


rl.on('close', () => {
    const [N, K] = lines[0].split(' ').map(Number);

    const arrA = lines.slice(1).map(line => line.split(' '));
    
    for(let i = 0; i < N; i++){
        const row = [];
        
        for(let j = 0; j < K; j++){
            row.push(arrA[i][j]);
        }
        
        console.log(row.join(' '));
    }
    
});
```
👉 これだとただの出力。行と列の立場逆転をしないと転置にはならない！

<br><br>

## 🟩 OK例①：for文で正攻法
```js
for(let i = 0; i < K; i++){
    const row = [];
    for(let j = 0; j < N; j++){
        row.push(arrA[j][i]);
    }
    console.log(row.join(' '));
}
```
✅ 解説：外ループが元の列番号＝転置後の行、内ループが元の行＝転置後の列。

<br><br>

## 🟨 OK例②：Array.from
```js
const transposed = Array.from({ length: K }, (_, i) =>
  Array.from({ length: N }, (_, j) => arrA[j][i])
);

transposed.forEach(row => console.log(row.join(' ')));
```

✅ 解説
`Array.from({ length: K }, (_, i) => …)`

- 長さ K の配列（転置後の行数）を作る。
- i は転置行のインデックス。

`Array.from({ length: N }, (_, j) => arrA[j][i])`
- その行を構成するために、元の配列の各行から i 番目の値を集める。

<br><br>

## 🟦 OK例③：map()
```js
const transposed = arrA[0].map((_, i) => arrA.map(row => row[i]));

transposed.forEach(row => console.log(row.join(' ')));
```
✅ 解説
`arrA[0].map((_, i) => …)`    
- 最初の行から 列数分だけループさせる。
- `i` が列インデックス（転置後の行インデックス）。

`arrA.map(row => row[i])`
- 各行から `i` 番目の要素を抜き出して、列 → 行にする。

<br><br><br>

## 📝メモ＆学んだことまとめ

- `Array.from({ length }, (_, i) => ...)` の使い方（配列初期化に便利）
- 2次元配列の扱い方、行→列の切り替えのロジック
- 高階関数（ `.map()` ）が2重でも思ったより読める


<br><br><br>[僕の失敗談(´;ω;｀)と解決法🐈](https://paizabeginner.wordpress.com/2025/06/16/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%9a%e8%a1%8c%e5%88%97%e3%81%ae%e8%bb%a2%e7%bd%ae/)
# React 商品詳細ページ：レビュー表示と状態管理の実装メモ

````markdown
# React 商品詳細ページ：レビュー表示と状態管理の実装メモ

## 🛒 本日の学習内容

### 🎯 目的
ECサイトの商品詳細ページにて、**レビューの表示・作成・更新・削除の制御**を実装しました。レビューの表示条件をユーザーの購入・投稿状況によって分岐させ、UIが正しく切り替わるように工夫しました。

---

## ✅ 条件分岐ロジック

`product.hasPurchased` と `product.hasReviewed` によりレビュー表示状態を制御。

| hasPurchased | hasReviewed | 表示内容                     |
|--------------|-------------|------------------------------|
| false        | -           | 他人のレビューのみ          |
| true         | false       | レビュー入力フォーム＋他人のレビュー |
| true         | true        | 自分のレビュー＋編集・削除ボタン＋他人のレビュー |

### 実装例：
```tsx
const showReviewForm = product?.hasPurchased && !product.hasReviewed
const showMyReview = product?.hasPurchased && product.hasReviewed
const showOnlyOthers = !product?.hasPurchased && otherReviews.length > 0
````

---

## 📝 BLOBのレビュー内容に `\n` が含まれるケースの処理

レビュー内容がDB内に `"テキスト\n改行"` のように文字列として保存されており、表示上で改行されていなかった問題に対応。

### 改善ポイント：

* `replaceAll('\\n', '\n')` を使ってダブルエスケープされた改行コードを復元。
* `.split('\n')` して1行ずつ `<Label>` に渡すことで自然な改行表示を実現。

### 実装抜粋：

```tsx
const normalizedContent = content.replace(/\\n/g, '\n')
normalizedContent.split('\n').map((line, idx) => (
  <div key={idx}>
    <Label label={line} variant="size-16 black" />
  </div>
))
```

---

## ⚠️ TypeScript & ESLint エラー対処

* `replaceAll` 使用時の対策 → `tsconfig.json` に `"lib": ["es2021"]` を追加。
* `product` の nullチェック → `product?` を適宜利用 or `if (!product) return` による早期リターン。

---

## 💡 感想

レビューの状態に応じて表示内容を明確に分岐することで、ユーザーにとって直感的なUXが実現できました。また、BLOBの改行処理は地味ながら重要な改善点でした。

---

## 🔧 今後の改善案

* レビュー送信後は即表示ではなく、`window.location.reload()` による再取得で状態同期。
* レビューのページネーション機能の追加検討。

```
```
ITミステリー：ネットワーク障害の真犯人を追え！

![ミステリー](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwRzqzYvrq21I8Mkbh-YFWXnAmNhkxc2IKK6yqqtwC8ZpwObIhpSve0USiBvixWBdHSITZLSu0x2nis8eF1hTTga3mpvaZexUPWDt_Hn61g8ZphANphBqGeGMfKFTAPOvXrm2UDtlhjNgu/s800/mystery_dying_message.png)

ある日の午後、突然私のPCのネットワークが沈黙しました。隣の席の同僚は問題なく接続できている。どうやら、これは私のPC固有の問題のようです。有線接続の表示を確認すると、確かに接続が途切れていました。

## 第一容疑者、ケーブル現る！

![犯人](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg44EYAGTnkSN-MRACJ3MW3_rmq4Uz5Sl1tCd8ZhvMllkIQG4p700vCSnU7shr-8Dwt9xi-Y1qhas5IXSWc6aZmc0iPxxsZlF2goWce4IY9or-0I7JOv63QVnAKROYdizS3O9CtRy4SYxs/s800/warumono.png)

真っ先に疑ったのは、接続に使っているLANケーブルです。「犯人はケーブルか？」そう直感し、私は手持ちの別のケーブルに差し替えてみました。すると、あっけなくネットワークに接続成功！「やはりケーブルが犯人だったか！」と安堵したのも束の間、新たなケーブルが別のネットワークハブに繋がっていることに気づきます。

「もしや、真犯人はケーブルではないのでは？」名探偵の私の直感が囁きました。私は改めて、元のケーブルが繋がっていたハブへと目を向けました。

## 真犯人、ついに姿を現す！

![突き止める](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtM9vPCG_5lZR9Gyh2EQRlCA6Z7XwUhsPHu2QTmYIVrlbqiSMWkrRLqyotJUjaIp8eEaUs6Be7AkhJM_acKxwm1yP2ISWwevrrrPj7PUdg-mTRsMTpbupHMU7p1WqGoQe1uq_HZgkLBHfc/s800/tantei_hannin.png)

元のハブに接続されていたケーブルを抜き、問題のハブに差し込み、もう一方をPCに接続します。結果は変わらず、ネットワークは沈黙したまま。ケーブルは問題ない。では、ハブが怪しい？

「もしかしたら、ハブの先のポートが壊れているだけかもしれない」そう考え、ハブの上流にある別のハブのポートと差し替えてみましたが、やはり状況は改善しません。これで、このハブが真犯人であると確定しました。

## 真犯人の動機とは？

ハブが原因だと分かったものの、なぜ「善良な」ハブがこのような事態を引き起こしたのか？私はさらに観察を続けました。すると、ハブのポートランプが点滅を繰り返していることに気づきます。PC側も一瞬だけ有線接続の状態になるものの、すぐに切断される。これはまさか、ハブが再起動を繰り返しているのでは？

私は恐る恐るハブに触れてみました。すると、驚くほどの熱さ！他の稼働中のハブを触って比較してみると、やはり問題のハブだけが異常に高温です。特にプロセッサーがあると思われる部分の熱がひどい。このことから、**熱暴走**がネットワーク不調の原因ではないかという推測に至りました。

![熱暴走](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7hW7_ZIAynpmR8kxVQD9LJ6lvOjyisBaa-hlNz3editPAlWROTlOFBvg7JgZy5OjR85-1pchKdsL3JUuRessfcgla_9aMcNi_c4NXyTuYHbiC6oF886yu_FyxRVWmnzho4oRv91IEKgI/s800/smartphone_atsui.png)

冷凍庫から保冷剤を取り出し、ハブを冷やしてみると……しばらくして、ネットワークが回復しました！やはり、熱暴走が真犯人だったのです。

## 事件の真相と教訓

今回の事件の真犯人はハブでした。しかし、そのハブが凶行に及んだのは、**設置場所の悪さ**と**近年の暑さ**が原因だったのです。風通しの悪い場所に置かれていたため熱がこもりやすく、そこに暑さが加わったことで、ハブは耐えきれずに熱暴走を起こしてしまったのです。

「ハブは悪くない。悪いのは人間だ！」

私はすぐにハブを涼しい場所に移しました。これにより、事件は無事解決。最初からハブに無理をさせないような運用をしていれば、この事件は起こらなかったのかもしれません。

---

## 後日談

後日、このハブはより高性能なハブに交換されたそうです。
どんな良い構築も、どんな良い運用も、純粋なリソース力(お金)には敵いませんね。
最初からいいやつ使っておけという話。
Emmet 形式の html テンプレートでクラス名にホバーした時にスタイル表示をする Tailwind CSS IntelliSense の設定方法

slim をはじめ、 Emmet 形式の html テンプレートを使っている方は多いと思います。
この形式のファイルに VSCode で Tailwind CSS IntelliSense を使っているときに、既に入力済みのクラス名にカーソルを合わせたとき、スタイル表示をホバーする方法を見つけたのでメモしておきます。

1. [Slim 拡張機能](https://marketplace.visualstudio.com/items?itemName=sianglim.slim)をインストールする
1. 設定から Tailwind CSS: Emmet Completions をオンにする
1. さらに設定から Tailwind CSS > Experimental: Class Regex を見つけて、 Edit in setting.json を開く
1. 以下のようになるよう設定を編集する

```json
"tailwindCSS.experimental.classRegex": [
    [ "(\\.[\\w:!\\/-]+)", "([\\w:!\\/-]+)" ],
]
```

そうすると、次のスクショのようにクラス名にカーソルを合わせるとスタイル表示がホバーで表示されるようになる。

![スクリーンショット 2025-06-16 17.57.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116105/9c7dcbad-77d7-4d7c-810a-cb8098083b51.png)

参考：https://github.com/paolotiu/tailwind-intellisense-regex-list#haml

### 解説

Class Regex はクラス名を認識するための正規表現を書く設定欄。
参考のページでは HAML での例が書かれていたけれど、これに接頭辞(`desktop:` とか `mobile:` とか)と、スラッシュとエクステラメーションマークを認識するようにして、Slim での使用例に合わせたのが上の正規表現です。
エンジニアリング組織論について

### はじめに

一昔、筆者はOneDriveでオブジェクト指向プログラミングのノウハウを提供していた。初心者向けに割と定評があったものの、政治的問題や文書改ざんの被害などがあり、やむなく破棄した。破棄ではなく何らか再生する措置をとっておくべきだったかと思うと、ちょっと惜しいことをしたと後悔している。
政治的問題のほうは、ここで書けるレベルではないため、公文書にまとめている。

### 定期的なコンプライアンス

筆者は技術者であり、エンジニアとして生きることはできるものの、その名声はあまり高くない。それもメーリングリストでやり取りし、今では高名な彼らとも30年近く会っていない。これは大きいと思う。つまり、彼らと同じくらいの業績を持つにしろ、見た目判断ではそう捉えることはできない。
定期的にコンプライアンスをして綿密な話し合いを直にする、そういう枠組みを設けるべきではある。

### 一つの力として大きなものを

より力強さを生むものは不屈のど根性とかが如何に大きいか、それが分かるのは現場での対応であることは否めない。しかし、人一人の力ではどうにもできない。ここでは組織力が大きい鍵となる。
では、組織力とは何かというと、役割が大きい。筆者の場合だと人間の柱に近かったと思う。物足りないといえばそれまでだが、役割を達成するまではこれを維持するしかない。でも、所属する組織がどれだけ枢要なのかで、その達成は違いとしても大きい。

### 本当に頼りにされる人材に育つ

人材として頼りにされることは、コミュニケーションとしても大きい。そのような環境で育つのであればなおさらだろう。
今となっては人材育成の環境を用意しながらということを提供できる。そのような資料を手に入れるのには苦労したことがある。Internet Archivesなどにしかなく、深く探る必要があった。傍から見れば変なやつだと思われたかもしれない。それでGITHUBにアップロードした成果物で、ずいぶんと一般化され用いられているものもある。
【Wordpress】プラグインインストール時にFTP の認証情報を求められる場合とディレクトリの作成が失敗した場合の対処法

```bash
/var/www/html/wordpress にwp-config.phpを作成

sudo vi wp-config.php

以下を記載
define('FS_METHOD','direct');
```

/wordpress/wp-contentにupgradeディレクトリを作成
書き込み可能にする
 sudo chmod -R 775 /var/www/html/wordpress/wp-content/upgrade

所有者をwww-dataに変更
sudo chown -R www-data:www-data /var/www/html/wordpress
【WSL × 複数プロジェクト運用】Ubuntu環境のバージョン・仮想環境・構成管理のベストプラクティス

## はじめに

WSLを使って開発する中で、以下のような疑問が浮かんだ。

- 複数プロジェクトをどう整理するべきか？
- Ubuntuのバージョンはプロジェクトごとに変えられるのか？
- ソフトウェアや依存関係の管理がごちゃごちゃしてくるのではないか？

本記事では、WSL上で複数の開発プロジェクトを扱う際に、Ubuntuのバージョン管理や仮想環境の構成をどう考えるべきかを整理する。

---

## 結論

- 同じUbuntuバージョンであれば、1つのWSLディストリに複数プロジェクトをまとめてOK
- ただし、プロジェクトごとに仮想環境（venv, nvmなど）で依存を分離したほうがいい
- 異なるUbuntuバージョンが必要な場合は、WSLディストリごとに切り替えて使う

---

## WSLの基本を抑える

WSLは、Windows上に軽量なLinux環境を構築できる機能。  
WSL内には独立したLinuxファイルシステムがあり、Windowsとは明確に分かれている。

つまり、Cからプロジェクトにアクセスすることと、Linuxファイルからプロジェクトにアクセスすることは、異なるOSでアクセスしているということを意味する。

### 複数のWSLディストリが作れる

- `Ubuntu`（初期バージョン）
- `Ubuntu-20.04`
- `Ubuntu-22.04`

は、それぞれ完全に独立したLinux環境であり、インストールしたソフトやファイルも共有されない。

ここらへんは以下の記事の知識が土台となり、理解できると思う。

https://qiita.com/TechCraft/items/7b70a9d80d76c35db6f2

https://qiita.com/TechCraft/items/9b819f213cb8708cfeac

---


## 仮想環境を使って、競合を避ける

同じWSL環境で複数のプロジェクトを扱っていると、グローバルにインストールしたライブラリやツールが競合してしまうかもしれない。

### プロジェクトごとに仮想環境を作る

| 言語      | 推奨ツール               |
|-----------|--------------------------|
| Python    | `venv`, `poetry`         |
| Node.js   | `nvm`, `Volta`           |
| Docker    | `Dockerfile`, `docker-compose` |
| PHP       | `composer`               |
| Java      | `Maven`, `Gradle`        |

#### Pythonの場合

```bash
python3 -m venv .venv
source .venv/bin/activate
pip install flask
```

このように仮想環境を使うことで、競合を避けることが大切。

---

## おわりに

Ubuntuのバージョンによって、WSLを使い分け、かつその中で仮想化環境を作り競合を避ける。
これがポイントだと感じた。
cscの作法 その587

# 概要
cscの作法、調べてみた。
dxlibdotnet、見つけたので、windows10で、buildしてみた。


# 参考にしたページ

https://dxlib.xsrv.jp/dxdload.html

# 手順

- DxLibDotNet3_24f.zipをダウンロードする。

- build
```
>set PATH=C:\Windows\Microsoft.NET\Framework\v4.0.30319;%PATH%


>csc.exe /target:library /platform:anyCPU DxDLL.cs
```

以上。
YKK APの電動シャッターをAlexaで操作できるようにする

この記事は[株式会社シンプルウェイ Advent Calendar 2024](https://qiita.com/advent-calendar/2024/simpleway)の25日目の記事です。

時はすでに2025年の6月ですが!!

アドベントカレンダーやるよ! って言ったのは自分なのに、記事全然書いてなくて、ずっと引け目を感じていました(笑。ようやく重い腰を上げたわけです。

-----

我が家はリビングの掃き出し窓だけ電動シャッターをつけていて、開閉はリモコンでできるのですが、これをAlexaで操作したい!と思っていました。

公式的(?)には[Connexoon](https://www.somfy.co.jp/products/connected-home-2)という製品を使えばスマホやAlexaと連携できるみたいですが、お値段2万円ほどと、単に1箇所の窓をAlexa連携するためだけにしては、ちょっとお高い感じがするのですよね。

ネットを散策すると、SwitchBotを使って物理的にボタンを押すことでスマートホーム化している例もありました。が、もうちょっとエレガントにつなげたいのですよねー。

特定小電力無線の電波を使っているようなので、電波を直接出せればいいなと思ったのですが、ハード的にもスキル的にも足りず、結局電気的に接続することで妥協しました。

ということで作ったのがこれ

![shutter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/219010/afdfff81-ca59-4a4d-a7d6-f35b38b11b0c.png)

Alexaの連携にtuyaを使うことにして、[PCの電源をtuyaで操作できるモジュール](https://www.aliexpress.com/item/1005006090821609.html)を三枚おろしにした純正リモコンへ接続しました。

PC電源操作モジュールは、電源ボタンの操作の他にリセットボタンの操作もできると説明があるのですが、なぜかリセット側は動かないので、モジュール2つ使いました。

これでAlexaでシャッターが操作できるようになりました。Alexaの定型タスクも使って時間になったら自動開閉もできるようになって、とても便利になりました。
Azure DevOps で Wiki ページの追加ができない

# 初めに
DevOps 利用中に遭遇したトラブルの備忘録となります。

# 事象
Azure DevOps で Wiki ページの追加や編集ができなくなりました。
昨日まではできていたのですが…。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818349/26dd8135-64be-450d-bbdc-8a25eb7e0a29.png)


# 確認したこと
### 権限の確認
[Oganizaiton Settings] -> [Permissions] で権限を見てみましたがそれらしき権限は見当たりません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818349/627281ed-69fa-4d68-96c2-b7b2c6624cac.png)

### 同じ権限を持っている他の人に確認
同じ組織内の他のメンバーに確認しましたが、事象が発生しているのは自分だけでした。
(なんでワイだけ…。)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818349/20d43bd6-02d5-473b-927a-e91669ee616b.png" width=30%>

### アクセスレベルの確認
[Oganizaiton Settings] -> [Users] でアクセスレベルに問題がないかを見てみたところ、自分のアカウントの Access Level のところにだけ警告マークがついていました。
更にアクセスレベルが Basic のユーザーが6人いました。

※画面を残していなかったのでイメージです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818349/ed0125fd-a85c-46b2-8793-f5c5b583194b.png)

# 対処
6人目のユーザーのアクセスレベルを変更して解消しました。

# 原因
わかりません。
再度 Basic のユーザーが6人になるように設定変更してみましたが、変更できませんでした。
ひょっとしたら以前はどこかのサブスクリプションに紐づけられていて、気づかないうちに課金していたのかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818349/f9042291-b30b-4de3-b1a0-2fed2c67c18f.png)
React × Gemini API で `JSON.parse` エラーが出たときの原因と対処法まとめ

Gemini API に JSON形式で返すよう指示しても以下のように **マークダウン付きのコードブロック** で返ってくることがあります。

```json
```json
{
  "word": "take",
  "meaning": "取る、受け取る",
  ...
}

```

このような「```json」や「```」が混ざっていると、`JSON.parse()` ではエラーになります。


### 発生したエラー例
```
SyntaxError: Unexpected token '`', "```json\n{...}" is not valid JSON
```


## 解決策

### 1. プロンプトを調整する

```ts
const prompt = `
次の英単語「\${input}」について、日本語で以下の形式の**JSON文字列のみ**を返してください。
装飾や説明文、バッククォートなどは含めないでください。

{
  "word": "単語",
  "meaning": "意味",
  "partOfSpeech": "品詞",
  "pronunciation": "発音記号",
  "example": "英語の例文（日本語訳付き）"
}`;
```


### 2. 返答をtrimでクリーンアップしてから JSON.parse()する
```ts
try {
  const cleaned = rawText?.replace(/```json|```/g, '').trim();
  const parsed = JSON.parse(cleaned || '');
  setParsedResult(parsed);
} catch (e) {
  console.error("JSONパースエラー", e);
  setParsedResult(null);
}
```


## まとめ
Geminiの返答にはMarkdownが混じることがあるため、そのままJSONとして処理するのは難しいことがあります。そこで、プロンプト設計に加えて前処理の工夫が必要になります。

不要な装飾を取り除いたうえで文字列を整えてからJSON.parse()を行うことで、より安全に期待するデータを取り出すことができます。