OmniAICreator/Qiita-1.07M huggingface dataset:
確率分布～連続一様分布

# <font color="Red">連続一様分布</font>

全ての同じ確率で起こる（一様）

確率密度関数　：　
```math
{f(x)=
\left\{
\begin{array}{ll}
0 & (x<a) \\
\frac{1}{b-a} & (a≦x≦b) \\
0 & (x>b)
\end{array}
\right.
}

```
- a:取り得る値の最小値
- b:取り得る値の最大値
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800268/08e28b5b-5376-41c3-b89a-2df7b2d5649f.png)

分布が四角形なので、式は取り得る範囲に高さ相当の f(x) を掛け算すると1になるように、と考えれば秒で導出できる。


## <font color="HotPink">期待値</font>
```math
E[X] = \frac{a+b}{2} 
```
四角の真ん中なので、「線分の長さの半分の位置」　$\frac{a+b}{2}$　と考えてよい。

（ちゃんと考える　：　
　確率分布関数の期待値は、確率分布f(x) と 確率変数の値g(x) との重み付き平均と考えられる。
　今回は確率分布f(x)が一様なので計算上無視する。
 　確率変数g(x)の平均値が期待値になるが、連続値なので最小と最大を足して2で割ればOK）

  ここでは、一様分布は最初に登場する連続型の確率分布なので、練習かねて定義式通りに計算する。

```math
\begin{align}

E[X] &= \int_a^bxf(x)dx = \int_a^b\frac{x}{b-a}dx \\
&= \left[\frac{x^2}{2}\right]_a^b \times 
\frac{1}{b-a} = (\frac{b^2}{2} - \frac{a^2}{2})\times\frac{1}{b-a} \\ 
&= \frac{(b-a)(b+a)}{2} \times\frac{1}{b-a} \\
&= \frac{(b+a)}{2}

\end{align}
```


## <font color="HotPink">分散</font>
```math
V[X] = \frac{(b-a)^2}{12}
```
ここでは、確率分布に関する分散の式、 $V[X] = E[X^2] - E[X]^2$ 　から計算する。
$E[X^2]$　は、$E[X] = \int xf(x)dx$　のうち確率変数部xが2乗になり、その生起確率はf(x)のままとして計算する。

```math
\begin{align}
V[X] &= E[X^2] - E[X]^2  \\
&= \int_a^b x^2f(x)dx - \left(\frac{a+b}{2}\right)^2 \\
&= \left[\frac{1}{3}x^3  \right]_a^b \times \frac{1}{b-a} - (\frac{a^2+2ab+b^2}{4}) \\
&= \frac{b^3 - a^3}{3} \times \frac{1}{b-a} - (\frac{a^2+2ab+b^2}{4}) \\
&= \frac{(b-a)(b^2+ab+a^2)}{3} \times \frac{1}{b-a} - (\frac{a^2+2ab+b^2}{4}) \\
&= \frac{(4a^2 + 4ab + 4b^2) - (3a^2 + 6ab + 3b^2)}{12} \\
&= \frac{a^2 - 2ab + b^2}{12} \\
&= \frac{(a-b)^2}{12}\\
&= \frac{(b-a)^2}{12}

\end{align}
```
Unity 6.1でColorにプリセット色がたくさん追加された

Unity 6.1において、[UnityEngine.Color構造体](https://docs.unity3d.com/6000.1/Documentation/ScriptReference/Color.html)にaliceBlue、antiqueWhite、aquamarine・・・などなど他多数のプリセット色が、staticなプロパティーとして追加されました。

* Unity 6.0のScriptReferenceは[こちら](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Color.html)
* Unity 6.1のScriptReferenceは[こちら](https://docs.unity3d.com/6000.1/Documentation/ScriptReference/Color.html)

Unity 6.0までは、プリセット色として11プロパティー（greyとgrayは同一なので、実質10色）あったのが、Unity 6.1でかなり増えています。

Unity 6.1ではリファレンスには、157プロパティーくらいありそうです。

---

ちなみに[Unity 6.1のリリースノート](https://unity.com/ja/releases/editor/whats-new/6000.1.0#notes)には、

> Editor: All colors from Color.cs are now presented as defaults in the Color Picker window.

の一文がありました。Color Pickerのバージョン間の比較を次に示します。

|Unity 6.0| Unity 6.1|
|:---:|:---:|
| ![スクリーンショット 2025-05-09 23.17.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4125/4a812824-0b30-4c08-8b12-aa9f249e9a06.png) | ![スクリーンショット 2025-05-09 23.10.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4125/c499638c-ef7c-4770-8ebe-4281c9be059f.png) |

たしかにUnity 6.1では、Color PickerにDefaultsセクションが増えていますね。

---

Rider 2025.1では、Unity 6.1追加された色にも対応済みです。

![スクリーンショット 2025-05-09 23.29.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4125/ff9900a7-481c-4a51-aedb-582c2d7e4f1f.png)

https://www.jetbrains.com/rider/whatsnew/#version-2025-1-game-development
8x8右回り90度、回転(電光表示板用)(ビット操作


いろいろ、注意
----

- UNOでの予定は、未定


プログラム
----

オンラインコンパイラ　paiza

```c++


#include <iostream>
using namespace std;

#define b_put(aa) for(int ii=8;ii!=0;ii--){if(aa & 0x80){printf("#");}else{printf(" ");}aa=aa<<1;}
#define bit8_put(bb) for(int jj=0;jj<8;jj++){b_put(bb[jj]);printf("\n");}

//void font_data_out(unsigned char *font){
//    for(int i=0;i<8;i++){
//        printf("[%02x]\n",font[i]);
//    }//for 
//    printf("\n");
//}//font_data_out


void font270(unsigned char *fontO, unsigned char *fontI){

    for(int i=0;i<8;i++){
    	fontO[i] = 0;
    }//for i
    
    for(int i=0;i<8;i++){

        //処理
        //        12345678
        int m = 0b10000000;
        int a = fontI[i];

        fontO[7] = fontO[7] >> 1;
        fontO[6] = fontO[6] >> 1;
        fontO[5] = fontO[5] >> 1;
        fontO[4] = fontO[4] >> 1;

        fontO[3] = fontO[3] >> 1;
        fontO[2] = fontO[2] >> 1;
        fontO[1] = fontO[1] >> 1;
        fontO[0] = fontO[0] >> 1;

        fontO[0] = fontO[0]|(a & m); a = a << 1;  
        fontO[1] = fontO[1]|(a & m); a = a << 1;
        fontO[2] = fontO[2]|(a & m); a = a << 1;
        fontO[3] = fontO[3]|(a & m); a = a << 1;

        fontO[4] = fontO[4]|(a & m); a = a << 1;
        fontO[5] = fontO[5]|(a & m); a = a << 1;
        fontO[6] = fontO[6]|(a & m); a = a << 1;
        fontO[7] = fontO[7]|(a & m);

    }//for i

}//font270


int main(void){
    // Your code here!

    unsigned char fontI[] = {
        0b00100000,
        0b01111100,
        0b00100000,
        0b01111100,
        0b10101010,
        0b10110010,
        0b01100100,
        0b00000000
    };     
    
    
    //bit8_put(fontI);printf("\n");
    
    unsigned char font[8];
    
    font270(font,fontI);
    
    bit8_put(font);
    
}



```

```

  ##    
 #  # # 
 #######
  # # # 
   ## # 
 #  # # 
  ##    
        

```
EMRのマスターノードとコアノードって何？調べてみた【AWS初心者向け】

こんにちは。普段はJavaで開発しているAWS学習中エンジニアです。

Amazon EMRの勉強中、「HDFS（Hadoop Distributed File System）はマスターノードとコアノードで使われる」みたいな説明を読んで、
「そもそもマスターノードとコアノードって何ですか？」となったので、調べてみました。

0. そもそもAmazon EMRとは？
＞＞Amazon EMR は、Apache Hadoop や Apache Spark などのビッグデータフレームワークを簡単に実行し、大量のデータを処理および分析するマネージドクラスタープラットフォームです。

1. 前提
    1-1. そもそもAmazon EMRとは
    →ビッグデータを分析するAWSのサービス。
    1-2. ノードって
    →点と線で構成図を書いたときの点の部分
    （参照：[「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word1300.html "ノード")）
    1-3. EMRを構成するノードは3種類ある


2. 本題
スターノード：クラスター全体の管理（ジョブのスケジューリングなど）を担当(司令塔)
コアノード：実際に処理を行いつつ、HDFS（分散ファイルシステム）にも参加(働きつつ倉庫管理もする人)


イメージ図はこんな感じ
![ノードの説明画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4080179/07680979-ed9a-47d4-95ce-ea0d3d22dcf4.png)


AWS初級エンジニアにとっては、ここがつまづきポイントでした。

同じように「マスターノードって何？コアノード？なんですの」と思ってる人の参考になれば嬉しいです！
OpenAI GPT 4 TurboとGPT 4 32kの再ルート日が近づいています



+ [OpenAI GPT 4 TurboとGPT 4 32kの再ルート日が近づいています](https://help.salesforce.com/s/articleView?id=release-notes.rn_einstein_models_openai_reroutes.htm&release=254&type=5)

OpenAI GPT 4 Turbo および OpenAI GPT 4 32k モデルのリクエストは、2025 年 6 月 6 日に OpenAI GPT 4 Omni に再ルーティングされます。予想される応答が変更される可能性があるため、できるだけ早く Prompt Builder および Einstein Studio で新しいモデルを使用してプロンプトとアプリケーションをテストすることをお勧めします。

OpenAI GPT 4 Turbo と OpenAI GPT 4 32k は、2025 年 6 月 6 日に再ルーティングされます。

# この影響でできないチャレンジがありますね。

+ [How can I get OpenAI GPT 4 Turbo when completing Prompt Builder Superbadge Unit](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PZjHr0AL)

+ [Not able to change the Model Type from Standard to Custom to complete Get Agent Ready](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000SW2KM)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/261235ca-c7cb-49a1-b691-472a390cd5a9.png)

+ [消されている？](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000Ti0K8)

解消されたらしい

+ [Unable to Select Custom Model – Model Type Reverts to Standard](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000Ti0W9)

+ [Custom Model Issue](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000Ti9gV0AR)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/bcbaf68f-b511-4c70-9080-d622e6025572.png)


+ [Unable to switch to Custom Model for existing prompts preloaded by the badge exercise](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000Ti50d)

修正されたみたいですが、新しい環境でないとダメみたい

:::note
Apologies for the inconvenience. The bug has been fixed and verified. Could you please re-do the module in the new  Playground.
:::
サッカー×統計 #1：Jリーグの得点数はポアソン分布に従うのか？

はじめまして。りょくちゃといいます。

物心がついた頃から、ずっとサッカーを観てきました。
人生が狂ってしまうくらい没頭してしまったので、さすがに最近は少し自重しています。

それと同時に、世の中にあふれる統計的な性質を見るのが好きでした。
そんな自分が、常々気になって試してきたことを、これから少しずつ紹介していこうと思います。

# サッカーを"確率"で観る
サッカーを観ていると、直近のCL準決勝バルセロナvsインテルのように点の多いエキサイティングな試合もあれば、互いに一歩も譲らないような、引き締まった展開になる試合もあります。こうした得点のばらつきに、何か規則性はあるのでしょうか？この問いに答えるため、サッカーの得点がどのような確率モデルに従うかを考えてみましょう。

得点はしばしば予期せぬタイミングで突然生まれます。逆サイドでパスが回っていたはずなのに、10秒後にはカウンターからゴールが決まっている。そんな体験は多くの人にとって馴染みがあるはずです。

つまり、短いタイムスケールで得点が決まるわずかな確率が常に存在していると考えられます。この考えをもう少し具体化するために、次は得点の発生を時間軸でモデル化してみます。試合全体の時間を$T$として、これを$n$分割します。一区間あたりの時間$\Delta T$は、
```math
\Delta T = \frac{T}{n}
```
です。ここで少し大胆ではありますが、各区間で得点が決まる確率は常に一定で、
```math
p=\lambda \Delta T
```
であると仮定します。$\lambda$は単位時間当たりの得点確率です。そうすると、試合全体での総得点数が$k$となる確率$P_n(k)$は、
```math
P_n(k)={}_n C_k\ p^k\ (1-p)^{n-k}
```
となりますね。詳細な計算は省きますが、$n\rightarrow \infty$の極限をとると、この確率は次のように収束します：
```math
P(k) := \lim_{n\rightarrow \infty}P_n(k) = \frac{(\lambda T)^ke^{-\lambda T}}{k!}\ 。
```
これはポアソン分布と呼ばれるものです。$\lambda T$は１試合あたりの平均得点数ですので、これがわかればある試合における得点数の確率分布を計算することができます。

# 実際に調べてみる
サッカーの得点数が実際にポアソン分布に従うのか調べてみましょう。

今回用いるデータは、2003年から2022年におけるJ1リーグの試合結果です。以下のサイトからデータをいただきました。

https://mikami3345.cloudfree.jp/SoccerData/MatchData.html

まずは、ホームチームとアウェイチームの得点を区別せず、1つの得点データとして集計しました。その結果が下図です。水色は実際に観測された得点数の分布、オレンジ色はその平均得点数から導かれるポアソン分布です。
ポアソン分布が実データをよく再現しています。一方で、０点や２点付近にはわずかなずれがみられます。これは単なる統計的な誤差の可能性もありますが、ポアソン分布では捉えきれない細かな要因が影響している可能性の方が高いと考えられます。

![total.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051652/2809c1c6-6ae1-461d-bf18-50030360c1f5.png)

次に、ホームチームとアウェイチームの得点をそれぞれ分けて集計しました。
その結果を下図に示します。青色がホームチーム、赤色がアウェイチームの得点数の確率分布を表しています。平均得点数$\lambda T$はそれぞれ、ホーム$1.461$、アウェイが$1.265$です。ホームアドバンテージと呼ばれるような外的な要因の存在を示唆しています。

![home_away.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051652/0546cf54-3aa7-48c0-bd70-ddc609fed0fc.png)

下図はホームの得点のみを集計したものです。0点と2点のところにずれが確認できます。

![home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051652/7aa5a941-aae9-4e5c-a0db-5739ded5c0c0.png)


アウェイの得点のみを集計したものです。かなりポアソン分布に一致しています。

![away.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051652/76a74528-56ef-476c-9da2-68429c76c8bd.png)

このことから、ホームアドバンテージは「失点を防ぐ」といった守備面での効果というよりも、攻撃面における得点力の向上として表れている可能性があると考えられます。戦術的な積極性やスタジアムの雰囲気といった要素が、ホームチームの攻撃機会や決定力に好影響を与えているのかもしれません。一方で、アウェイではそうした要素が乏しく、より確率的に得点が生じていると解釈することもできます。
もちろんこれはあくまで一つの可能性に過ぎず、他の要因やチームごとの特性を考慮すれば異なる見方も成り立ちます。こうした仮説を本格的に検証するには、時間帯ごとの得点傾向のような、より詳細な試合データを用いて分析する必要がありそうです。（個人でやるのはあまりにも大変そうなのでさすがに断念しました。。。）
# まとめ
今回は、サッカーの得点数がポアソン分布に従うことを紹介しました。次回以降はこのポアソン分布を用いて、サッカーの試合結果を予想していきます。
【初心者向け】MacでMySQLに新しいユーザーとパスワードを作成する方法

この記事では、MacのターミナルからMySQLに新しいユーザーとそのパスワードを作成する方法を丁寧に解説します。

### ✅ 前提条件

- MySQLがすでにMacにインストールされていること  
（Homebrewなどでインストール済み）
- `root`ユーザーのパスワードが分かること
---
### 1. MySQLにログインする

まずはMySQLにrootユーザーでログインします。

```bash
mysql -u root -p
```

### 2. 新しいユーザーを作成する
以下のコマンドで新しいユーザーを作成します。
```sql
CREATE USER '新しいユーザー名'@'localhost' IDENTIFIED BY 'パスワード';
```
例：
```sql
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'testpass123';
```
### 3. 権限を付与する
特定のデータベースに対して権限を与える：
```sql
GRANT ALL PRIVILEGES ON schema.* TO 'testuser'@'localhost';
```
すべてのDBに対して権限を与える場合：
```sql
GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'localhost' WITH GRANT OPTION;
```
### 4. 権限の変更を反映させる
特定のデータベースに対して権限を与える：
```sql
FLUSH PRIVILEGES;
```

### 5. 新しいユーザーでログインしてみる
一度ログアウトして、新しいユーザーでログインしてみましょう。
```sql
mysql -u testuser -p
```

### ✅ おまけ：ユーザーの削除方法
不要になったユーザーを削除したい場合は以下のようにします。
```sql
DROP USER 'testuser'@'localhost';
```

## まとめ
- CREATE USERで新しいユーザー作成
- GRANTで必要な権限を付与
- FLUSH PRIVILEGESで反映
- 必要に応じて削除や制限も可能
床関数の入った定積分

床関数$\lfloor f(x)\rfloor$の入った定積分がしたい。

基本的な方針としては$\lfloor f(x)\rfloor$の不連続点、すなわち$f(x)$が整数になるような点で積分区間を分けるというものだ。

## 例題
例えば
```math
I=\int_{0}^{1}\left\lfloor\frac{1}{\sqrt{x}}\right\rfloor dx
```
という積分を考えてみる。

これは$\displaystyle\left\lfloor\frac{1}{\sqrt{x}}\right\rfloor$が整数になるような点、すなわち不連続点が$\displaystyle x=\frac{1}{n^{2}}\quad(n\in\mathbb{N})$であるから、このような点で積分区間を分ければよい。

よって与式は
```math
\begin{align}
    I&=\int_{\frac{1}{4}}^{1}\left\lfloor\frac{1}{\sqrt{x}}\right\rfloor dx+\int_{\frac{1}{9}}^{\frac{1}{4}}\left\lfloor\frac{1}{\sqrt{x}}\right\rfloor dx+\int_{\frac{1}{16}}^{\frac{1}{9}}\left\lfloor\frac{1}{\sqrt{x}}\right\rfloor dx+\cdots\\
    &=\sum_{k=1}^{n}\int_{\frac{1}{(k+1)^{2}}}^{\frac{1}{k^{2}}}\left\lfloor\frac{1}{\sqrt{x}}\right\rfloor dx\\
    &=\sum_{k=1}^{n}I_{k}
\end{align}
```
と積分区間を分けてあげるとうまくいく。

$\displaystyle I_{k}=\int_{\frac{1}{(k+1)^{2}}}^{\frac{1}{k^{2}}}\left\lfloor\frac{1}{\sqrt{x}}\right\rfloor dx$とおくと、$\left(\frac{1}{(k+1)^{2}},\ \frac{1}{k^{2}}\right]$において$\left\lfloor\frac{1}{\sqrt{x}}\right\rfloor=\left\lfloor\frac{1}{\sqrt{k^{2}}}\right\rfloor$より
```math
\begin{align}
    I_{k}&=\int_{\frac{1}{(k+1)^{2}}}^{\frac{1}{k^{2}}}\left\lfloor\frac{1}{\sqrt{x}}\right\rfloor dx\\
    &=\int_{\frac{1}{(k+1)^{2}}}^{\frac{1}{k^{2}}}\left\lfloor\frac{1}{\sqrt{k^{2}}}\right\rfloor dx\\
    &=\left\lfloor\frac{1}{\sqrt{k^{2}}}\right\rfloor\int_{\frac{1}{(k+1)^{2}}}^{\frac{1}{k^{2}}}dx\\
    &=|k|\left(\frac{1}{k^{2}}-\frac{1}{(k+1)^{2}}\right)\\
    \therefore I_{k}&=\frac{1}{k}-\frac{k}{(k+1)^{2}}\quad(\because k>0)
\end{align}
```
であるから、
```math
\begin{align}
    I&=\sum_{k=1}^{n}I_{k}\\
    &=\sum_{k=1}^{\infty}\left(\frac{1}{k}-\frac{k}{(k+1)^{2}}\right)\\
    &=\sum_{k=1}^{\infty}\frac{1}{k}-\sum_{k=1}^{\infty}\frac{k}{(k+1)^{2}}\\
    &=\sum_{k=1}^{\infty}\frac{1}{k}-\sum_{k=2}^{\infty}\frac{k-1}{k^{2}}\\
    &=\left(\sum_{k=1}^{\infty}\frac{1}{k}-\sum_{k=2}^{\infty}\frac{1}{k}\right)+\sum_{k=2}^{\infty}\frac{1}{k^{2}}\\
    &=1+\left(\sum_{k=1}^{\infty}\frac{1}{k^{2}}-1\right)\\
    &=\sum_{k=1}^{\infty}\frac{1}{k^{2}}\\
\end{align}
```
となる。

ここで$\displaystyle\sum_{k=1}^{\infty}\frac{1}{k^{2}}=\zeta(2)$はバーゼル級数と呼ばれ、その値が$\dfrac{\pi^{2}}{6}$となることが知られている。

よって$I=\dfrac{\pi^{2}}{6}$と、非常にきれいな結果となる。

## 練習問題

以下は練習問題。問1はギリギリ高校数学の範囲だけで解ける~~はず~~。問5はゲキムズ問題。参考動画は[こちら](https://www.youtube.com/watch?v=TfefbEpVYv0)。

1. $\displaystyle\lim_{h\to+0}\int_{h}^{1}\cos\left(\left\lfloor\frac{1}{x}\right\rfloor\pi\right)dx$

2. $\displaystyle\int_{1}^{\infty}\frac{dx}{\lfloor x\rfloor^{2}}$

3. $\displaystyle\int_{-1}^{1}\frac{dx}{\left|\left\lfloor\frac{1}{x}\right\rfloor\right|}$
 
4. $\displaystyle\int_{-1}^{1}x\left\lfloor\frac{1}{x}\right\rfloor dx$

5. $\displaystyle\int_{0}^{1}\sin\left\lfloor\frac{1}{x}\right\rfloor dx$

## こんくる

積分が級数の問題になるのでおもしろいですね。はい。では。
中国で販売されているシャープのチョコミント関数電卓を買ってみた

輸入代行業者に依頼していた中国の各種電卓が先日届いたので順次レビューしていく。

今回買いつけたもののほとんどが学生計算機（分数計算のできる算数学習用電卓相当品を多数含む）だが、今回はシャープの関数電卓の中国モデルを紹介する。

## カラフルな中国モデル
学生計算機やdeliのClassWiz CWクローンを買おうとしてタオバオを色々検索していたのだが、そこで見つけたのがシャープの2機種。
- EL-W991TL [天猫1](https://detail.tmall.com/item.htm?id=551975886941) [天猫2](https://detail.tmall.com/item.htm?id=553512986452) [タオバオ](https://item.taobao.com/item.htm?id=810089507683)
- EL-W82TL [天猫1](https://detail.tmall.com/item.htm?id=553552715726) [天猫2](https://detail.tmall.com/item.htm?id=765409287491) [タオバオ](https://www.taobao.com/list/item/589090349338.htm) [ebuy7](https://www.ebuy7.com/ja/the-new-sharp-sharp-el-w82tl-middle-and-high-school-student-calculator-in-the-college-entrance-examination-scientific-function-multi-functional-note-will-test-electronic-computer-cute-fashion-auxiliary-learning-tools.html) [京東](https://item.jd.com/10141498221566.html)

TL型番が英語モデル、CN型番が中国語モデル。中国語モデルの方が若干高い。

EL-W991TLは日本モデルとほぼ同じ（機能紹介を見る限り、EL-520Tに計算ドリルモードが追加されたもの）。

一方、EL-W82TLは機能がfx-82ES/EX/CW程度に減らされている一方、黒だけでなく白・ピンク・水色筐体もあって全4色。特に水色筐体はチョコミントを想起させる。
カラバリが豊富なのは商品ページの謳い文句が「初高中学生」（日本でいう中高生向け）ということもあるだろう。
![elw82tl1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/c72110f3-2f9d-46d6-9cd0-3987a12e62a1.jpeg)
カシオに寄せた型番、しかも中国シャープのページに一切記載がない（現Webには計算器そのものがなく、Internet Archiveで過去の計算器ページを見てもそれらしき機種がない）。矢印キーの形状もTシリーズと若干異なる。
怪しさを感じつつも、シャープでこの配色は価値があると思い、試しに買ってみることにした。
天猫1のリンク先の店舗（信诺天晟数码专营店）から48元で購入。代行手数料と国際送料が別途。

## TシリーズよりMシリーズに近い筐体
パッケージの中身。色々入っていた。
説明書は中文と英語の両方。製造日の紙まで入っている（2017年11月20日とは古い）。
カバー裏の簡易説明シールが別添なのがよい。
カバーやディスプレイは現行のTシリーズではなく前バージョンのMシリーズに近いもののようだ。
電池はLR44×1。
![elw82tl2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/15e26311-3af5-46f6-a13f-c8307fb97121.jpeg)
裏面にシールもあってあるし、これは本物ってことでいいよね？
![elw82tl3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/871cc8cf-2cf7-40c2-97b0-af484b27e348.jpeg)

メニューを表示させ、EL-520Tと並べてみた。メニュー表示はMシリーズ（数字：）ではなくTシリーズ（白抜き数字）のもの。
![elw82tl5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/e2c81218-9e35-472a-ba6a-233578b3e2cb.jpeg)

機能の詳細は割愛。計算ドリルもEL-5160T搭載のものと同等である。普通に使える。

日本モデルとの違いを1点だけ。循環小数の表示は上ドットではなく上線である。
![elw82tl6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/a7f76a95-d20e-4c7c-8e16-a62566fc28a2.jpeg)

ということで、このデザイン・機能が気に入った方、何かのついでに買ってみるのはいかがでしょう…？
【Go】現在時刻に関する処理をインターフェース化してテストしやすくするサンプルコード(DI, 依存性注入)


## 概要

- 実務でよくありそうな現在時刻の取得処理をインターフェース化し、テストのしやすい構造にする
	- DIを使用してテストしやすいコードのサンプル
	- コンストラクタインジェクションを利用

## サンプルコード

- 現在時刻を生成する箇所をインターフェース化することで、テスト時にモックに差し替える事ができる
	- テスト実行時の現在時刻に依存することなくテストが可能になる

```go
package main

import (
	"fmt"
	"time"
)

// 現在時刻を提供するインターフェース
type TimeProvider interface {
	Now() time.Time
}

type RealTimeProvider struct{}

func (tp *RealTimeProvider) Now() time.Time {
	return time.Now()
}

// ExpiryCheckerは期限切れをチェックする構造体
type ExpiryChecker struct {
	TimeProvider TimeProvider
}

func NewExpiryChecker(tp TimeProvider) *ExpiryChecker {
	return &ExpiryChecker{TimeProvider: tp}
}

func (ec *ExpiryChecker) IsExpired(deadline time.Time) bool {
	// time.Now()を直接呼び出すとテストの実行時刻に依存してしまう
	// そのため、TimeProviderインターフェースを通じて現在時刻を取得する
	// これにより、テスト時にモックを使って現在時刻を制御できる
	return ec.TimeProvider.Now().After(deadline)
}

func main() {
	checker := NewExpiryChecker(&RealTimeProvider{})

	// DBなどに保存されてる「期限」など
	deadline := time.Date(2025, 5, 9, 12, 0, 0, 0, time.Local)

	if checker.IsExpired(deadline) {
		fmt.Println("期限切れです")
	} else {
		fmt.Println("まだ有効です")
	}
}
```


## テストコード


```go
package main

import (
	"testing"
	"time"
)

// 現在時刻を提供するインターフェースのモック
type MockTimeProvider struct {
	FixedTime time.Time
}

func (m *MockTimeProvider) Now() time.Time {
	return m.FixedTime
}

func TestIsExpired(t *testing.T) {
	deadline := time.Date(2025, 5, 9, 12, 0, 0, 0, time.Local)

	tests := []struct {
		name     string
		now      time.Time
		expected bool
	}{
		{"期限前", time.Date(2025, 5, 9, 11, 0, 0, 0, time.Local), false},
		{"期限後", time.Date(2025, 5, 9, 13, 0, 0, 0, time.Local), true},
	}

	for _, tt := range tests {
		// モックを使って現在時刻を制御
		// これにより、テストの実行時刻に依存しない
		mock := &MockTimeProvider{FixedTime: tt.now}
		checker := NewExpiryChecker(mock)

		got := checker.IsExpired(deadline)
		if got != tt.expected {
			t.Errorf("[%s] expected %v, got %v", tt.name, tt.expected, got)
		}
	}
}
```
AWS Amplifyで令和に個人サイト（平成の思い出を込めて）

## はじめに
### 平成の思いで
現在30代の自分は学生時代、ガラケーで「ほむぺ」を作って日記やプリクラを投稿していました。\
黒歴史なので執筆中に体がむず痒くなっています（笑
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391109/95ffa1fc-f8ff-4c4c-a268-13bcce224c3b.png" width="300">


### 交流のきっかけとして個人サイト
平成の思い出は置いといて\
AWS Amplifyで個人サイトを作ってみたのでそのまとめです。

JAWS-UGなどに参加する機会が増え、交流のネタとして個人サイトを作りました。\
NFCカードをスマホで読み取ってもらうよくある形式です。

大まかな構成は`Vue.js`と`AWS Amplify`です。

https://kitayama-ichiro.xyz/

## 流れ
1. 環境構築～Local環境で表示
2. ドメイン取得
3. AWS Amplify設定
4. お名前.com設定
5. 修正、動作確認（今回のメインディッシュ）
6. 完了

## 1. 環境構築～Local環境で表示
- ほとんどの作業はcursorでAIにお任せ
    - 「Vueコンテナ作って」
    - 「○○のリンク追加」
    - 「モバイル版のデザインはこうで～」

## 2. ドメイン取得
- ワイ「ドメインなんにしよ、やっぱRoute53で取るんか？」
- お名前.comにて`kitayama-ichiro.xyz`を取得
    - Route53 ：`14.00 USD`
    - お名前.com：`0円`

## 3. AWS Amplify設定
- 設定したのは3つだけ
    - githubリポジトリ
    - デプロイ対象ブランチ
    - ビルドコマンド`npm run build`
- 
- ドメイン名を設定`kitayama-ichiro.xyz`
- 今回は利用しなかった様々なオプションがある
- フレームワークを自動で検出して構築してくれる？（今回だとAmplifyがDockerを利用しているか不明）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391109/6506350f-6b20-4288-a057-e049ace896e6.png">

## 4. お名前.com設定
- Amplifyから発行されたネームサーバ4つをお名前.comのドメインレジストリに設定
- 自動でSSL証明書を発行して関連付けまでしてくれる
- これで`kitayama-ichiro.xyz`がAmplifyのアプリケーションに紐づく

## 5. 修正、動作確認
- AWS Amplifyに設定したブランチにpushしたらデプロイされる
- テストも実行してくれる？（CI/CD？）

## 6. 完了
- NFCカードにURLを書き込み
- スマホで読み込んでみる
- やったー
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391109/f2d741b9-c55a-4837-b3fd-96f0aa222296.png">


## 感想
### ワイ「AWS Amplifyの中身ってどうなっとるんや」
次はその辺を調査してもいいかなと思っています。\
深淵でなきゃ良いな。。。
github actionsみたいな奴やな

### 今後の改修予定
- コンテンツを増やす
- 背景を設定
- アクセスカウンターでもつけるかwww（踏み逃げ禁止）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391109/ec6e51ab-f325-4c53-945f-d67666c9b9d0.png" width="400px">
【過去記事移植】iOSアプリ｜そろそろ大丈夫？プライバシーマニフェスト対応

> ※この記事はもともと 2024年4月 に執筆した内容を移行したものです。

### はじめに

私自身がこの対応がホットな話題なので、少し書いてみようと思いました。
直近のiOS対応でどこの企業でも、個人アプリでも４月中が勝負と思います。

### 対応しないとどうなるの？

Appを審査に出すと、マニフェストファイルのチェックが自動で行われるようです。

- **2024年4月中に審査提出した場合**  
  AppleDeveloperに登録してあるメールアドレス宛に自動で警告メールが届きます。（すぐに届きます）
  とは言え、その他不具合や指摘が来なければ、通常どおりApp審査を通過できます。

- **2024年5月以降に審査提出した場合**  
  プライバシーマニフェストの対策が行われていないアプリは審査NGになります。
  アップデートが行われるまではAppStoreに掲載済みのアプリは残り続けます。

### どんなアプリが対象なの？

- Appleが公開しているCoreAPIを利用しているアプリ。（下のリンクは英語）
  [Describing use of required reason API | Apple Developer Documentation](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api)

- Appleが名指ししたサードパーティーライブラリを利用しているアプリ。（下のリンクは日本語）
  [Upcoming third-party SDK requirements - サポート - Apple Developer](https://developer.apple.com/jp/support/third-party-SDK-requirements/)

とりあえず、  
サードーパーティーライブラリを使ってるアプリを作っている or 保守している方々、
ブラウザの自動翻訳でも良いので、Appleの記事を一読してみましょう。
目先でアップデートを行わないにしても、いま一度調査を行うべきと思います。

※次回の記事ではプライバシーマニフェスト対応要否の確認方法について記事にしてみたいと思います。

## 最後に - メーロンで働いてみませんか？

もしメーロン株式会社にご興味をお持ちいただけましたら、随時採用も行っております！  
下記リンクのWantedlyページをご覧いただき、気になる点があればお気軽にご相談ください。

- **在宅ワーク希望**  
- **出社と在宅のハイブリッド勤務**  
- **インフラエンジニアからのキャリアチェンジ**  

など、ご要望があれば柔軟に対応いたします！

https://www.wantedly.com/companies/company_2563374
わずか3日で開発したChrome拡張機能が、公開2日目にして有料ユーザーを獲得した話


## 1. 思いがけない嬉しい出来事：公開2日目で初の有料ユーザーが

1ヶ月前、私はある決断をしました——ブラウザ拡張機能を作ることにしたのです。

そして、その判断は今振り返っても本当に正しかったと思います。
さらに驚いたのは、「NoTab」という名前のその拡張機能がChromeウェブストアに公開された翌日に、なんと初めての有料ユーザーが現れたことでした。

その瞬間は、興奮と戸惑いが入り混じった不思議な気持ちでした。
「自分の作ったものにお金を払ってくれる人がいる」という喜びと、「これからユーザーが増えたらどう対応しよう？」という不安が同時に押し寄せてきました。

この拡張機能は、アイデアを思いついてから最初のバージョンを公開するまで、わずか3日しかかかっていません。
短い時間でしたが、この経験から学んだことは本当に多かったです。

## 2. NoTabの誕生：自分自身の悩みを解決するために

NoTabの基本機能はとてもシンプルです。
リンクにマウスカーソルを合わせると、そのページの内容を新しいタブを開かずに、今見ている画面上でプレビューできる、というものです。

このアイデアは、まさに私自身が開発者として日々感じていた不便から生まれました。

仕事中は大量の技術ドキュメントを読む必要があり、APIのページから別のリンクをクリックすると新しいタブがどんどん開いていきます。読み終わったあと、また元のタブに戻って続きを読んで……と繰り返していると、午前中だけでタブが10個以上開いてしまうんです。

気づけばメモリも消費してるし、「さっきどのページを見てたんだっけ？」と混乱することもよくあります。

技術系のフォーラムでも同じです。気になる投稿をクリックすると、新しいタブが次々に増えて、気づけば「どれが最初だったか」すらわからなくなる…。

この不便さをなんとかしたい、と思ったとき、ふと「今見ているページ内でそのままリンク先をプレビューできたらいいんじゃないか？」とひらめいたんです。

情報をすぐに確認できて、しかも閲覧の流れを邪魔しない。それって理想的じゃないか、と。

既存の拡張機能もいくつか調べてみましたが、機能が重すぎたり、動作が遅かったりでしっくりくるものがなかった。
だったら、自分で作ってみよう——そう思って開発を始めました。

## 3. 超スピード開発：MVPから改善までの3日間

**1日目：MVP（必要最小限のプロトタイプ）を作成**
最初に決めたのは、「3日以内に公開する」という厳しいルール。
そのためには、機能をできる限り絞って、最も重要な部分だけを実装する必要がありました。

初日の時点では、リンクにホバーすると小さなプレビューウィンドウが表示されるだけ。見た目のデザインも何もありませんでしたが、まずはこれでOK。

**2日目：基本的な体験を改善**
コア機能ができたので、次は使い勝手の改善へ。

* プレビューウィンドウの表示位置を自動調整（画面外にはみ出さないように）
* 読み込み中の表示
* 最低限のスタイル調整

**3日目：パッケージ化＆リリース**
最終日は以下を行いました：

1. 簡単な使い方説明を書いて
2. スクリーンショットを数枚撮って
3. Chrome開発者アカウントで（以前登録済）ログインし
4. 拡張機能をパッケージ化して審査に提出

その日の夜、「NoTab」は正式に公開されました。

**公開後の改善**
ユーザーの声をもとに、以下のような実用的な機能も追加しました：

* 複数リンクの同時プレビュー（比較がしやすい）
* ドラッグで即翻訳
* ドラッグで即検索
* カスタマイズ機能（プレビューウィンドウの大きさや表示位置など）

これらの多くは、最初の計画にはなかった機能ですが、実際のユーザーの声から生まれたものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4083374/9d971700-31fc-4190-8ed9-169446b1c054.png)


## 4. 個人開発者へのアドバイス

私自身の経験から、以下のことはとても大切だと感じています。

**1. 本当にニーズのある「痛み」に着目すること**
NoTabがスムーズにユーザーを獲得できたのは、「頻繁に起こる本物の困りごと」を解決していたからだと思います。
本当に役立つアイデアは、意外と自分の日常の中にあります。
「毎回これ面倒だな」と感じることがあれば、それがチャンスかもしれません。

**2. 完璧を目指すより、まずは最小の形にして出すこと**
完璧にしようとすると、いつまでも公開できません。
私の最初のバージョンなんて、設定画面すらありませんでした。でも、最小限の価値が伝われば、それで十分です。
そのあと、ユーザーの声が「次に何を作るべきか」を教えてくれます。

**3. ユーザーの声を取り入れて進化させること**
NoTabの多くの人気機能は、ユーザーからのフィードバックで生まれました。
メールでも何でもいいので、簡単なフィードバック窓口を用意しておくといいと思います。
ただし、すべての要望に応える必要はありません。複数のユーザーから同じリクエストがあった場合、それが真に必要とされているサインです。

**4. 課金モデルの考え方**
NoTabは基本機能を無料、高度な機能は有料（買い切り）というFreemiumモデルを採用しています。
「試して納得した人だけが払えばいい」というスタイルは、開発者にとってもユーザーにとっても納得感があります。
価格は一度きりの5.9ドル、正直かなりリーズナブルだと思います。

## 最後に

今、NoTabには毎日数百人のアクティブユーザーがいます。
もちろん、これだけで生活できるわけではありませんが、「個人開発でも、価値を生み出し収益を得ることは可能だ」という確信を与えてくれました。

何より、この経験を通して一番感じたのは——
「すごいアイデア」を待つ必要はない、ということです。
自分の小さな不便を丁寧に解決するところから始めて、素早く動いて、ユーザーの声を取り入れながら育てていけば、十分「価値ある製品」になる可能性があります。

もし、あなたにも「いつか作りたいもの」があるなら——
今日、まずは一番シンプルな形でいいので、作ってみることをおすすめします。
完璧より、まず完成。
そして、現実世界のフィードバックこそが、何よりの学びになります。

最後に、もしNoTabを使ってみたくなったら、[こちら](https://notab.wand.tools/)からどうぞ！
ローカルPCで動くTTSで自作ゲームをフルボイス化する

# Why

以下で作ったアプリをフルボイス化したい。

https://qiita.com/megumu-u/items/2df41c7b10986e4324e0


# How

ここ最近、TTSについていくつか確認していたがTsukasa_Speechが良さげだったので挑戦してみる。

https://zenn.dev/megyo9/articles/192bf143acb106

https://zenn.dev/megyo9/articles/b273c4c85ad451


# Try

基本的にはスクリプトを書いて作業を自動化していきます。

* ゲームのストーリーが書かれたファイルからセリフだけを抽出　→ GPT先生お願いします
* Tsukasa_SpeechのGradioのAPIで音声合成をさせたい　→ GPT先生お願いします
* waveファイルが生成されるのでmp3にしたい　→ GPT先生お願いします

ついでなのでゲームシステム側もちょっと修正。

* 喋るからにはリップシンクしないと変。　→ GPT先生お願いします
* 特に目的はないけどReactやThreeJSなどを最新化
* プレイ画面の色合いを見直す（下図参照）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201603/57dc02e2-c87c-4ac9-b462-5cfacefbb2d1.png)

# Result

こんな感じ。

https://x.com/megyo9/status/1920865628103082318

ゲーム自体はこちらでプレイできます。

https://uemegu.github.io/sayin5min/


# Evaluate

特に推論するときのパラメータはいじってはないので努力が足りないかもですが、もちろん音声について満点の出来というわけではないです。

## 漢字の読み方を間違える

固有名詞は難しいかなとは思いますが。

* 一目惚れ　→ ひとめほれ
* 碧川（人名）→ へきかわ
* 漁る　→ 何と呼んでたか忘れましたが違う読み方してた

などなど。困ったところは平仮名などに変えて対処。

## たまに発音、イントネーションが変

たまにロボっぽさがでます。

## 感情表現が難しいことがある

良い感じの「えぇぇ〜！？（驚き）」ができない。
最近？だとニュアンスをプロンプトで伝えるTTSもあるので、今後そういったもので日本語に強いものがでるとやりやすくなるかも。
（Tsukasa_SpeechにもExperimentalとしてはある）

# Summary

個人で遊ぶ分には十分楽しい。
車載U.2 SSDの利用と安定性と

　一般に、SSDと言ったら、2.5inch SATAか、NVMeのM.2か……容量も、1TBぐらいが標準なのだろうか？
　自動運転の開発の現場では、一日20TB以上、1台の車でロギングすることがある。HDDだったら安いだろう！　と思っても、秒速5GB(40Gbps)の世界なので、SATAの速度(6Gbps、実際はもっと遅い)では間に合わない。

 ## 自動運転でなぜ高速SSDを使うのか？
 　答えは簡単、**「とりあえず生(RAW)データ」を記録したい**からだ。人によっては、「いやいや、圧縮して保存すれば4Kといえどそんなデータにならんだろう」という人もいるが、
+ 4Kカメラ 30fps*複数台のデータを、リアルタイムで圧縮できるか？
遅延してはならない、フレーム欠落もダメ。しかもGPU台数には制限ある(車載なので)。
+ どの程度圧縮すればいいかわからない
自動運転時には、RAWデータを使う。圧縮したら、AI認識結果が変わる可能性あり。

　AI利用などを考えると、とりあえずRAWで取っておけば、圧縮で問題ないことが評価できれば、後々で圧縮すればよい。が、先に圧縮しておくと、設計判断をしたタイミングで、それ以前に記録したデータが使えなくなってしまう可能性がある。

　そもそも、なんで記録しておく必要あるのか？　というと、**開発中に、何度もテストをして、設計したロジックの確からしさを評価したい**からである。HIL/SILで、車載ECUに対してのテストデータをインジェクションするテスト方法が一般的であるから、同様にやりたければそのデータが必要となるのだ。

## 車載専用のSSDというのはある？
　あるのかもしれないが、聞いたことはない。HDDについては、円盤を回転させ、シークヘッドを移動させる構造上、振動には弱い。なのでそれ専用のものがあるのかもしれないが、SSDについては、可動部がないので振動の心配は大きくない。

## 大容量SSDとは？
　数年前、まだ低容量のSSDしかないときは、大量のデータを記録できるように、**複数のM.2 SSDをRAID0で組んで、大きいSSDを構築していた**(例:4TB*4=16TB)。
 　RAIDとは、サーバーなどで用いられる複数ドライブを束ねる技術である(雑説明)。なので、その機能を使っている。……車載で大丈夫なの？　というと、なかなかいいものではなかった(強引にやっているため、信頼性が落ちていた)。

　現在では、入手性がよく、高速で、大容量のSSDと言えば、**U.2 SSD**である。
![SSD](https://asset.watch.impress.co.jp/img/pcw/docs/1469/221/1_l.jpg)
　今のところ、15TB、30TBあたりが入手できる。[Mouserでいくつか扱いがある](https://www.mouser.jp/c/embedded-solutions/memory-data-storage/storage/solid-state-drives-ssd/?form%20factor=U.2&memory%20size=12.8%20TB~~30.7%20TB&rp=embedded-solutions%2Fmemory-data-storage%2Fstorage%2Fsolid-state-drives-ssd%7C~Memory%20Size)。大体、Kingston、Solidigm、Micron。Amazonでは、M.2→U.2変換するものが売っている。

 　ただ、そもそもこのU.2 SSDという製品は、恐らく(というかほぼ)サーバーなどのデータセンターでの利用を目的として作られている。なのでそれなりに熱が発生することが考えられるのと、コネクタ部分の挿抜回数に限りがある可能性がある。

　他にも、E1.LやE3.Sと言ったかなり限定的な(マニアックな)用途のSSDも存在するが、あまりに一般的ではない製品なので、ここでは割愛

 ## U.2 SSDはどう使うの？
 　基本はデータセンターなので、ラックマウントNASの表にさす。
  ![Supermicro](https://www.supermicro.org.cn/files_SYS/images/System/AS%20-1114S-WN10RT_main.jpg)
  しかし、車載機ではないので、使うとしたら、**特殊な機材が必要**となる。

　ニッチな業界であるが、ICY DOCKというメーカーが、U.2 SSD用のものを作っている。
　PCIeに取り付け、抜き差し可能なものがある。[MB111VP-B](https://amzn.asia/d/28AxJuf)
　![MB111VP-B](https://m.media-amazon.com/images/I/41G+gGdwroL._AC_SX679_.jpg)
　これはとても使いやすいが、SSDの筐体の都合上、**7mmのU.2 SSDしか使用できない**。高性能で大容量のU.2 SSDは、**大体15mm**なので、ちゃんと使えるかどうかは確認が必要。

　一方で、デスクトップPCのフロント2.5inchドライブベイにさすようなものもある。[MB021VP-B](https://amzn.asia/d/gzxX2SZ)
 　![2.5inchbay](https://m.media-amazon.com/images/I/511Dh7P2gdL._AC_SX679_.jpg)
　ただ、後ろの面からSlimline SAS（SFF-8654）コネクタで通信させる必要がある。これはPCIeなどから変換できるが、ケーブルを介すとNVMeの信号減衰が起こってしまうようで、**動作が非常に不安定となる可能性がある**。私の場合は、10回に1回ぐらいSSDを認識する、と言った具合で不安定だった。

  Amazonでは、抜き差しを必要としなければ比較的(?)手軽に手に入る。
  ![PCIe](https://m.media-amazon.com/images/I/611u7vdjRJL.__AC_SX300_SY300_QL70_ML2_.jpg)
  これに関しては……何の問題もなくU.2 SSDを認識する。なので諸問題に対応できる手段だが、SSDの挿抜には対応していない部分がネック。ちなみにこれに**PCIeケーブルを延長したら、認識しなくなってしまった**。なので、PCIeの延長は即動作不安定につながるようだ。

　速度については、SSDでそれぞれ異なるが、大体R/Wそれぞれ40Gbpsぐらいの性能が出たらいいな、ぐらいに思っておくとよい。

## 最後に
　U.2 SSDは、高速で大容量なSSDとして注目？　されている。スピードもあるので、M.2より大容量を選ぶならあり……かもしれないが、そもそもこんな機材を個人で使おうというのはちょっと時期早々。値段も高いので。
　車載ロギング用としては、とても良い。しかし、運用的には、
+ 取り出しやすいこと
+ ちゃんと冷却できること
+ 入手しやすいこと
+ 安価であること

　などを考量すると、導入するかは一度正確に見てみたほうがいいのではないだろうか。

 今日はここまで。
requirements.txtのモジュールたちが古くなってしまったので

個人利用のpythonバージョンを切り替えて、普段つかっているモジュールのアップデートをしたいときにアップデートしたいけどいい方法が見つからなかったのでバージョンを消すツールを書きました。

pip install -r ./requirements.txt で 読み込んだモジュールにバージョン表記がなかったら最新のものをとってくる!?というのを参考にやってみた。

オリジナルのrequirements.txt
```text
docutils==0.16
jmespath==1.0.1
pyasn1==0.6.1
python-dateutil==2.9.0.post0
PyYAML==6.0.2
```

処理をしたらこうなるみたいな 理想像的 requirements.txt
```text
docutils
jmespath
pyasn1
python-dateutil
PyYAML
```

設定ファイル
```ini
[path]
req_txt=./requirements.txt
new_one=./new_requirements.txt
```

requirements.txtからバージョンを消したやつを作成するコード
```python
import os
import configparser


def read_config():
    config = configparser.ConfigParser()
    config.read("./settings.ini", encoding="utf-8")
    org_txt, new_txt = config["path"]["req_txt"], config["path"]["new_one"]
    return org_txt, new_txt


def create_requirements_txt_new_one(org_txt: str, new_txt: str):

    if os.path.exists(org_txt):
        modules = []
        with open(org_txt, mode="r", encoding="utf-8") as req:
            for line in req.readlines():
                module_name = line.split("==")[0]
                modules += [module_name]

        with open(new_txt, mode="w", encoding="utf-8") as wf:
            for module in modules:
                wf.writelines(module + "\n")
    else:
        raise Exception


if __name__ == "__main__":
    try:
        src, dest = read_config()
        create_requirements_txt_new_one(src, dest)
    except Exception as e:
        print(f"\n{e:*^30}")

```
え？オタクくん、要件定義してないの？ギャルが教えるプロジェクトの超基本

# 注意
深夜テンションで作成したものです。
暖かく見守っていただけると幸いです。


# はじめに🌈

ちょっと待って〜！オタクくん、まさか「要件定義」してないとか言わないよね？  
それ、マジでヤバいから！！  
ギャルの私が、要件定義の超大事さ、ギャル語で教えちゃうから、ちゃんと読んでこ？✨

---

# 要件定義って何？ざっくり言うと💡

要件定義ってのは、「このシステムで何したいの？」「どんな機能ほしいの？」ってのを、ちゃんとまとめることだよ〜！  
これやらないと、あとで「え、そんなの聞いてないんだけど！？」って炎上しがち。  
まじでプロジェクトの土台って感じ。  
ギャルで言うと、ベースメイクしないでアイメイク始めるくらい危険⚡️

---

# なんで要件定義しないとダメなの？理由まとめるね👇

- **方向性ブレブレ問題**  
  ちゃんと決めないと、みんな好き勝手やっちゃって「え、これ何作ってんの？」ってなるから
- **後戻り地獄**  
  あとから「やっぱこれ追加して！」とか「それいらなかった！」とか言われて、マジで二度手間
  ギャルのネイルやり直し並みに時間かかるよ！
- **コミュ力爆上げ**  
  要件定義でお客さんといっぱい話すから、コミュ力も上がるし、信頼度もUPしちゃう💕

---

# 要件定義ってどうやるの？ギャル流ざっくりステップ🪄

1. **ヒアリングタイム📝**  
   お客さんとか、関係者といっぱい話して「何がしたいの？」「どんな機能ほしいの？」って聞きまくる！
2. **まとめる！**  
   聞いたことをワードとかNotionとかにギャル文字でまとめる（ギャル文字は冗談w 普通でOK）
3. **確認する！**  
   「これでOK？」ってちゃんと確認。ここでズレてたらマジで終わるから、しつこいくらい聞くの大事！
4. **ドキュメント化📄**  
   ちゃんと資料にして、みんなで共有。  
   これがないと「言った言わない」バトル勃発しがち！

---

# ギャル的NG例「要件定義しないとどうなる？」💛

- 途中で「やっぱこれ違う！」って言われて、全部やり直し
- みんなの認識バラバラでカオス
- リリース直前に仕様追加で徹夜コース
- なんかもう、現場が地獄

---

# まとめ💖

要件定義しないプロジェクトは、まじで闇鍋。  
ギャルもオタクくんも、まずは「何作るか」ちゃんと決めてからスタートしよ？  
要件定義は、ギャルで言う「プリ撮る前のメイク直し」みたいなもん。  
これやらないと、絶対盛れないからね！

---

# 最後に🌟

「え？オタクくん、要件定義してないの？」って言われないように、  
明日からちゃんとやってこ！  
ギャルも応援してるから、がんばろ〜〜〜💅✨

---
RDBMSの思想を最短でインプット - 『現場のプロがわかりやすく教える データベースエンジニア養成講座』

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/6aa39df6-083e-438c-b99f-07b5bd376c32.png)

https://www.amazon.co.jp/dp/4798072052

## はじめに

著者の[坂井恵](https://x.com/sakaik)さんから本書を御献本いただきましてひととおり通読し、僭越ながら感想を述べさせていただく記事です。

> 坂井さんとは、本書の執筆にあたって、このたび姉妹本となった[位置エン本](https://www.amazon.co.jp/dp/4798068926)を題材にいろいろ楽しく議論させていただきました。ご出版おめでとうございます。

## 感想

- MySQLで解説が進むが、「方言」としてPostgreSQLの例もたびたび出てくるので、特定のDBMSに偏らず学習できる
- RDBMSをある程度触っているのでスラスラ読み進めることが出来た。スラスラ読めつつも知らなかった（あるいは理解が曖昧だった）トピックが多数あった。入門者でなくてもお勧めできる
- 入門者・初学者には特におすすめできる。この一冊だけでは、少なくとも「読むだけでは」即戦力になることは難しいかもしれないが、RDBMSの思想をインプットするのに十分な一冊だと思う
- SQLやDB運用は経験によるノウハウが非常に多い分野だと勝手に思っているが、各所に挿入されているコラムにまさにそういったトピックがさまざまあって面白かった

### 手を動かして失敗・エラーから学ぼう

> **自分で試せ！** 
**試せ！試せ！試せ！！**
p.077-078より引用

「実際に手を動かして、失敗すること」が重要であると述べられています。技術書には「正しい道」が記されているので、通読して・写経すれば、失敗せずに学べるでしょう。一方で、失敗・エラーからの学びというのは違うベクトルで重要なものであると、自分の経験からも思います（エラー時に直感ーエスパー力がはたらくというか）。

感想で「読むだけでは」（即戦力は難しい）と述べましたが、それはまさにこのことを意識しています。手を動かして学びましょう！

## 終わりに

RDBMSを体系的に学んだことがなく「ぜんぜんわからない　俺たちは雰囲気でRDBをやっている」私ですが、経験的な理解しかなかったのが、体系的にまとめられた本書で復習できました。

2025年現在、GenAIが一見「なんでも答えてくれる」時代ですが、その正誤・良否を見極めることができなければ責任を持った意思決定は困難で、その良し悪しを見極めるためには「メンタルモデル」を構築することが重要であると考えています。その意味で、ほどよい抽象度でまとめられ、RDBMSの思想を高速にインプットできるこの本は、入門者をはじめとした多くの方にお勧めできる一冊であると思います。
初めて MCP を使うなら Docker MCP Toolkit がおすすめ

Docker Desktop の新機能である **Docker MCP Toolkit** があれば、非常に簡単な手順で MCP ツールを利用できます。
今回は MCP クライアントに Cline を用いて Docker MCP Toolkit を利用する方法を解説していきたいと思います。

## Docker MCP Toolkit で利用できる MCP サーバ一覧

2025/5/10 時点で 109 の MCP サーバが利用可能となっています。

https://hub.docker.com/catalogs/mcp

以下、利用可能な MCP サーバの抜粋です。

* [Filesystem MCP Server](https://github.com/docker/labs-ai-tools-for-devs/blob/main/prompts/mcp/readmes/filesystem.md)（ローカルファイル操作）
* [Fetch MCP Server](http://github.com/docker/labs-ai-tools-for-devs/blob/main/prompts/mcp/readmes/fetch.md)（Webコンテンツ取得）
* [Playwright MCP Server](https://github.com/docker/labs-ai-tools-for-devs/blob/main/prompts/mcp/readmes/playwright.md)（ブラウザ操作）
* [LINE MCP Server](https://github.com/docker/labs-ai-tools-for-devs/blob/main/prompts/mcp/readmes/line.md)（メッセージ送信）
* [PostgreSQL readonly MCP Server](https://github.com/docker/labs-ai-tools-for-devs/blob/main/prompts/mcp/readmes/postgres.md)（データベース取得）
* [GitHub MCP Server](https://github.com/docker/labs-ai-tools-for-devs/blob/main/prompts/mcp/readmes/github.md)（バージョン管理）
* [Brave Search MCP Server](https://github.com/docker/labs-ai-tools-for-devs/blob/main/prompts/mcp/readmes/brave.md)（情報検索）

## 手順

#### 1. Extensions から「Docker MCP Toolkit」をインストールする

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339770/ea9d0195-4196-4e8b-9df9-1f334ccb8f34.png" width="600" />

#### 2. MCP Toolkit を開いて、利用したい MCP サーバを有効にする

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339770/efbd117e-842c-4626-8eb3-1e2b86980a6f.png" width="600" />

#### 3. MCP クライアントの設定を行う

今回は Cline の MCP Settings に設定を追記します。
設定内容は各 MCP サーバの README に記載されています。

https://github.com/docker/labs-ai-tools-for-devs/tree/main/prompts/mcp/readmes

例）Fetch MCP Server の場合

```json
{
  "mcpServers": {
    "fetch": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "mcp/fetch"
      ]
    }
  }
}
```

http://github.com/docker/labs-ai-tools-for-devs/blob/main/prompts/mcp/readmes/fetch.md#use-this-mcp-server

#### 4. 動作確認する

有効にした MCP サーバが利用可能となっていることを確認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339770/3c35b70f-346d-43ef-88d4-114d986fb014.png" width="600" />

今回の場合、Fetch MCP サーバを用いて Web コンテンツを取得することができました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339770/76174dcd-4942-4714-94e2-1f0151e8dba7.png" width="600" />

## まとめ

Docker Desktop がインストールされていれば、その他のインストールやコマンド実行が不要なので、途中で詰まることなくスムーズに MCP サーバを利用することできました。まだ試したことがない方はぜひ試してみてはいかがでしょうか。
pythonの汚いインポート文の書き方

何が汚いって、そもそもインポートしすぎな感じ。

```python
from __future__ import annotations
import re
from zoneinfo import ZoneInfo
import tkinter as tk
import subprocess, asyncio, threading
from queue import Queue
import time
import os, sys, logging, argparse, pathlib, shutil
import glob, zipfile, tarfile, tempfile, csv, json, socket, smtplib, string, pickle
import random
import bisect
import sqlite3
from functools import wraps
from copy import copy, deepcopy
from pprint import pprint, pformat
from abc import ABCMeta, abstractmethod
import statistics
import cv2, sklearn
from enum import Enum
from datetime import date, datetime, timedelta, time
from functools import reduce
from typing import (
    Union,
    Literal,
    Any,
    Mapping,
    Tuple,
    List,
    Iterable,
    TypeVar,
    TypedDict,
    Optional,
)
from dataclasses import dataclass, asdict, astuple
from operator import itemgetter, attrgetter
from collections import defaultdict, Counter, OrderedDict, namedtuple
from itertools import (
    chain,
    groupby,
    islice,
    product,
    permutations,
    combinations,
    combinations_with_replacement,
    zip_longest,
)
import textwrap

# third-party modules
from pytz import timezone

from dateutil import relativedelta, rrule, parser, tz, rrule
from retrying import retry
from termcolor import colored
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from flask import Flask, request

# internal module
from config import read_config_all
```

blackやflake8で()つけたりしてインポートしているのもなんだか嫌だなぁ (※個人の感想です)

```python
from typing import (
    Union,
    Literal,
    Any,
    Mapping,
    Tuple,
    List,
    Iterable,
    TypeVar,
    TypedDict,
    Optional,
)
```

個人的にはインポート文くらいはフォーマットしなくてもいいというきもｔ(※個人の感想です。)
```python
from typing import Union, Literal, Any, Mapping, Tuple, List, Iterable, TypeVar, TypedDict, Optional  # fmt: skip # noqa
```
忘れちゃうのでgitコマンドメモ

・バージョンコントロールシステム(VCS)はファイルのコレクションに対する変更を追跡する1つのプログラムのことである。VCS = SCM
・変更履歴をわかりやすく管理するためのツール
・変更を反映することをコミット
・コミットをするとリビジョン(コミット履歴: 前回との差分のこと)
・コミットメッセージは3行で行う。
    1: コミットでの変更内容
    2: 空行
    3: 変更した理由

初期設定
・名前の設定
```
$ git config --global user.name "<username>"
```

・メールアドレスの設定
```
$ git config --global user.email "<xxxx@yyy.com>"
```

・設定の確認
```
$ git config --list
```

・登録されている情報の特定のキーを入力し、設定値を確認する
```
$ git config user.name
>>> <username>
```

・ヘルプを見る
```
$ git help <verb>
$ git <verb> --help
$ man git-<verb>

# 具体的にconfigコマンドのヘルプを見る場合は以下
$ git help config
```

・ローカルディレクトリでgitプロジェクトをgitで管理し始める
```
$ git init
```

・リモートリポジトリを作成してみよう
```
$ mkdir <リモートリポジトリ名.git>
$ cd <リモートリポジトリ名.git>
$ git init --bare --shared
# または
$ git init --bare --shared /path/to/hogehoge.git
```


・管理対象ファイルの追加
```
$ git add **.md # 管理対象ファイル
$ git commit -m 'First Commit' # これで監視対象のファイルをもつgitリポジトリが作成された
```

・ファイルの状態の確認
```
$ git status
>>> nothing to commit, working tree clean
```

・リモートリポジトリにファイルを追加する
```
$ git push origin main # cloneしているため、リモートはcloneしてきたgdriveが対象
```

#### ファイルの無視
```
$ cat .gitignore
```

・.gitignoreの書き方
```
$ tree -F/ # 階層構造の表示
C:.
│  .gitignore
│  container_collections.py
│  git.md
│  Books.md
│  LearningCheckedList.md
│
└─.obsidian
        app.json
        appearance.json
        core-plugins-migration.json
        core-plugins.json
        workspace.json
```

・VCSで管理したくないファイルを追加する
.gitignore
```
# フォルダをここに書く
.obsidian/ # obsidianの設定ファイル格納先
.tmp.driveupload
.tmp.drivedownload
.Trash-1000

# 単一ファイルはここに書く
*.log # .log拡張子のファイルを除外
!important.log # 重要なlogのみは無視しない

# pythonの場合
*.pyc
__pycache__/
```


・ブランチの切り替えを行う。※ チェックアウトのこと
```
$ git checkout <branch>
```


・git でブランチの作成を行う
```bash
git branch <branch_name>
```

・切替を行ったブランチから更に変更を加えるブランチを作成する
```bash
git branch <new_branch_name>
```

・develop ブランチの作成
```bash
git branch develop
```

・ブランチの切り替え
```bash
git checkout <ブランチ名>
```

・developブランチをmainブランチにマージする
```bash
*develop
main
```

上記の状態のとき、mainブランチに切り替えを行い、mainにdevelopをマージする処理を行う
```bash
git checkout main
git merge develop
```


・マージができたらリモートリポジトリにpushする
```bash
git push origin main
```

#### ファイルの取得
```bash
git pull origin develop
```


### ローカルリポジトリの削除
```bash
git branch -d <削除したいブランチ名>
```

### リモートリポジトリの削除

```bash
git push origin :<削除したいリポジトリ名>
```


リモートリポジトリをクローンしてもらっている人たちには以下のコマンドを実行してもらう。
```bash
git fetch --prune
```
【CLI】Macでディレクトリやファイルの情報を色付きで表示する方法

`eza`を使用すると`ls`の結果をシンタックスハイライトできます。

以下のコマンドでインストールできます。

```terminal
brew install eza
```

https://github.com/eza-community/eza/blob/main/INSTALL.md

`eza`を使用すると出力に

 ![screen-shot-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/f3cc9d75-02aa-4c55-8c4e-6a2199c1b3ef.png)
Macでスクショをすぐにペーストする方法

## 概要

Macでスクリーンショットを撮ったあと、「ファイルとして保存されるのが面倒」「SlackやNotionにすぐ貼り付けたい」と感じたことはありませんか？

本記事では、**スクショを直接クリップボードにコピーして、そのまま貼り付けられるショートカットキー**について、使い方と注意点を紹介します。

## 動作確認環境

- macOS Sequoia 15.5
- Mac mini（Apple M2）
- キーボード：US配列

## 方法：Controlキーを追加するだけで即ペースト可能

| ショートカットキー | 動作内容 |
|--------------------|-----------|
| `Command + Control + Shift + 4` | 範囲指定してコピー（保存されずペースト可能） |
| `Command + Control + Shift + 3` | 画面全体をコピー（保存されずペースト可能） |

ポイントは「**Controlキーを加えること**」。これによりスクショが**ファイル保存されず、直接クリップボードに入る**ようになります。

そのまま `Command + V` で、以下のようなアプリにペースト可能です。

## 使い方の例（Slackに貼り付ける場合）

1. `Command + Control + Shift + 4` を押す  
2. ドラッグしてキャプチャ範囲を選択  
3. Slackの入力欄で `Command + V` → 即ペーストされる  

## ペーストできる主なアプリ（例）

- Slack
- Notion
- Gmail / Apple Mail
- Discord
- Preview（プレビュー.app）

## 補足：保存や編集をしたい場合

- **ファイルとして保存したい場合**：`Command + Shift + 4`（Controlキーなし）を使用  
- **編集が必要な場合**：`Preview.app`にペーストすれば注釈やトリミングが可能  
- **保存とコピーを同時に行いたい場合**：macOSショートカットやAutomatorを使えば自動化も可能  

## まとめ

- Controlキーを追加するだけで、スクショは即ペーストできるようになる  
- 作業効率が向上し、無駄なファイル保存が不要になる  
- 編集や自動化にも応用可能  

知っておいて損のない、シンプルかつ実用的なショートカットです。
Rubyの関数引数の参照をC言語の視点で考えてみた。

- [1. Rubyの関数引数の影響範囲について](#1-rubyの関数引数の影響範囲について)
  - [1.1. 値渡し的特性](#11-値渡し的特性)
  - [1.2. 参照渡し的特性](#12-参照渡し的特性)
- [2. C言語のポインタの考えでのRubyの関数引数の解釈](#2-c言語のポインタの考えでのrubyの関数引数の解釈)
  - [2.1. 値渡し的特性について](#21-値渡し的特性について)
  - [2.2. 参照渡し的特性について](#22-参照渡し的特性について)


## 1. Rubyの関数引数の影響範囲について
Rubyの関数はC言語における参照渡しと値渡しの特性を併せ持つ。
### 1.1. 値渡し的特性
```ruby
def function(a)
    a = 10
    puts a
end

a = 3
puts a
function(a)
puts a
```
上記のコードを実行した場合、以下のような結果となる。
```console
3
10
3
```
関数内での代入はなかったことになる。
### 1.2. 参照渡し的特性
```ruby
def function(a)
    a << 4
    p a
end

a = [1,2,3]
p a
function(a)
p a
```
上記のコードを実行した場合、以下のような結果となる。
```console
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4]
```
配列への挿入は関数外にも反映される。
## 2. C言語のポインタの考えでのRubyの関数引数の解釈
Rubyの関数内では以下のことが言える。
**ポインタは変更できない**
関数内では変数のポインタを変更することができるが、
関数外にその変更を持ち出すことはできないということである。
### 2.1. 値渡し的特性について
関数内での値代入、つまり代入される値へのポインタの入れ替えが関数外ではなかったことになる。
### 2.2. 参照渡し的特性について
関数内で行われているのは配列への値の挿入である。
つまり、変数のポインタを変更するわけではなく、
そのポインタからint型４つ分ズレた位置のポインタに値を代入する。
よって関数外にも関数内での処理が反映される。
ロガーっていいなぁ

こんな書き方もできるし、
```python
import logging


class LoggerBase(logging.Logger):
    _instance = None

    def __new__(cls) -> logging.Logger:
        if cls._instance is None:
            logging.basicConfig(
                format="%(asctime)s\t%(levelname)s\t%(message)s",
                level=logging.INFO,
            )
            cls._instance = logging.getLogger(__name__)
            return cls._instance


class Logger(LoggerBase):
    _logger = LoggerBase()

    @classmethod
    def info(cls, message: str):
        return cls._logger.info(msg=message)

    @classmethod
    def warning(cls, message: str):
        return cls._logger.warning(msg=message)

    @classmethod
    def error(cls, message: str):
        return cls._logger.error(msg=message, exc_info=True)


if __name__ == "__main__":
    Logger.info("テスト")
```

こっちのほうがスッキリしている気がする。
```python
import logging


class Logger:
    _logger = None

    @classmethod
    def set_logger(cls, name: str):
        logging.basicConfig(
            format="%(name)s\t%(asctime)s\t%(levelname)s\t%(message)s",
            level=logging.INFO,
        )
        cls._logger = logging.getLogger(name)
        return cls._logger

    @classmethod
    def info(cls, msg: str):
        return cls._logger.info(msg=msg)

    @classmethod
    def warning(cls, msg: str):
        return cls._logger.warning(msg=msg)

    @classmethod
    def error(cls, msg: str):
        return cls._logger.error(msg=msg, exc_info=True)


if __name__ == "__main__":
    Logger.set_logger("pythonic")
    Logger.info("テステス")

```
Azure の 特定のテナントにログインできない場合の備忘メモ

VSCode拡張機能の Azure リソースにログインができない場合のときの手順の覚書。

```powershell
PS C:\repos\test_auzre_webapp> az login

Select the account you want to log in with. For more information on login with Azure CLI, see https://go.microsoft.com/fwlink/?linkid=2271136

Retrieving tenants and subscriptions for the selection...
User 'your_email_addres@mail.com' does not exist in MSAL token cache. Run `az login`.
```

テナントIDでログインすればよい。とのことですが拡張機能からこれをインストールして、Azure Tenant にテナントIDを入力しておくと、リソースに接続できますよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261995/410fe6d2-486a-c2ce-a5f6-0c77f6d2be51.png)

テナントIDを入力する場所
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261995/f3a75ba9-5f41-a656-3ee2-71013cc72b8c.png)
【量子思考アルゴリズム】簡易メモ

１．【量子思考アルゴリズム】
条件に合致する【デジタル量子思考ビット】を選択（収束）する
量子物理学の思考を取り入れたアルゴリズム。

２．【デジタル量子思考ビット】
量子もつれ（生成）によって観測点（配列）に割り振られたビット値。
なお、量子コンピュータが使用する【量子ビット】とは異なり古典（ノイマン型）コンピュータで扱う0と1のビット値と同値です。


２．【量子思考アルゴリズム】の処理フロー
【量子思考アルゴリズム】の処理フローは下記の手順で行う。
２．１．量子もつれ(生成)
２．２．観測（並列スナップショット）
２．３．収束(選択)

２．１．量子もつれ(生成)
量子もつれのように０と1のペアになる【デジタル量子思考ビット】を生成する。

２．２．観測（並列スナップショット）
【デジタル量子思考ビット】を観測配列に格納する。

２．３．収束(選択)
観測配列より収束条件に従って【デジタル量子思考ビット】を選択する。
データベースの設計

# はじめに
本記事は現在Progate Pathでデータベースのコースを学んでいる初学者が内容の整理をかねてまとめたものです。そのため記事の内容に誤りが含まれている可能性があります。ご容赦ください。
# RDBの設計まとめ

## 論理設計の流れ

1. エンティティの抽出  
2. エンティティの定義  
3. エンティティの関連性定義  
4. 正規化  
5. ER図を書く  

> 💡 **エンティティ ≒ テーブル、エンティティの属性 ≒ カラム** と考えてOK。  
> 最初から完璧なエンティティ抽出を目指す必要はなく、正規化の過程でテーブルを追加していくことで、徐々に完成に近づけるのが現実的。

---

## 物理設計

### テーブル関連

- データ型
  - デフォルト値
- 制約（NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEYなど）
- インデックス

### ハードウェア関連

- サイジング（容量見積もり）
- 冗長構成（RAID、クラスタ構成など）
- バックアップ（定期的なスナップショット、リカバリ対策）

---

## 論理設計の詳細

### エンティティの抽出と定義

**DBで管理したい「実体（対象）」を抽出する。**

#### 例：TODOアプリ

**エンティティ**

- `user`
- `todo`

**属性（カラム）**

**user**
- mail_address
- password
- username

**todo**
- title
- deadline
- content

### 主キーの定義

- 実務では `id` を使うことが多い（サロゲートキー）

### エンティティの関連性定義（リレーション）

- 外部キーを持たせて関連性を表現する
例: todo に user の id を外部キーとして持たせる


---

## 正規化

### 第1正規化（1NF）

- **1カラム1データ**を守る
- 多対多の関係は**中間テーブル**を作成することで対応

### 第2正規化（2NF）

- 複合主キーの**部分従属**を排除
例：クラス, クラス内番号, 生徒, 担任 の場合、
担任はクラスに従属する → 生徒テーブルから切り出して 担任テーブルを作る


### 第3正規化（3NF）

- **非キー属性同士の従属**を排除

例：クラス, クラス内番号, 生徒, 委員会ID, 委員会名 の場合、
委員会ID と 委員会名 が非キー属性で従属している → 委員会テーブルを作成


---

## ER図の作成

- エンティティごとに箱を描き、属性（カラム）をリスト化
- 関係性を線で結び、**エンティティAから見たエンティティBの関係**を**B側に記述**

### 関係性の表現

- **カーディナリティ（多重度）**
  - 1対多、1対1、など
- **オプショナリティ（任意性）**
  - 0を含むか（必須 or 任意）

---
失敗しない PowerPoint 多言語化

> 「スライドの文字を全部コピーして DeepL に放り込んだら、
> アニメーションが吹き飛んでレイアウトも崩壊した……」

海外向けのウェビナー資料を作るたびに、こんな悲鳴をどこかで耳にします。私自身も同じ悩みを抱えていたのですが、先月ようやく“ほぼ無調整”で[スライドを翻訳できるクラウドツール](https://doc2lang.com/ppt-translate)に出会いました。本稿では、 **Doc2Lang** というサービスを使ってみた感想とワークフローをまとめます。あくまで個人の使用メモですが、同じ課題を抱える方のヒントになれば幸いです。

---

## なぜ PowerPoint は翻訳が面倒なのか

| 典型的なつまずき      | 詳細                                    |
| ------------- | ------------------------------------- |
| **レイアウト崩れ**   | 翻訳後に文字量が増えてテキストがはみ出す、オブジェクト位置がズレる     |
| **手作業が多い**    | 図表・SmartArt・ノート欄など、スライドごとにコピー＆ペーストが必要 |
| **アニメーション消失** | ファイルごと翻訳しても効果やタイミングが初期化されることが多い       |

「一括置換マクロを書けば？」という声もありますが、表示順やエフェクトまで面倒を見るのは至難の業です。

---

## 試してみた：Doc2Lang の PowerPoint 翻訳

### 特徴（使って気づいた範囲）

* **ブラウザ完結**：ファイルをドラッグ＆ドロップ → ターゲット言語を選ぶ → ダウンロード、の 3 ステップ
* **100 以上の言語**に対応
* **レイアウト保持**：テキストボックスの自動リサイズ／位置固定で、文字はみ出しが最小限
* **アニメーション温存**：フェード・ズームなど基本アニメはそのまま残る
* **alt テキストも翻訳**：スクリーンリーダー対応が地味にうれしい
* 従量課金制（試用レベルなら数百円）

> ※API 連携は公開されておらず、あくまで Web UI で完結するタイプです。

### 実際のフロー

1. **PPTX をアップロード**
2. **翻訳先言語をプルダウンで選択**
3. **「翻訳実行」を押す** ── 30 枚スライドで約 1〜2 分
4. 完了通知が来たら **ダウンロード**

処理は非同期で走るので、タブを閉じてもメールまたはブラウザ通知経由で取得できます。

---

## 検証メモ：どこまで崩れないか？

| スライド要素        | 翻訳前        | 翻訳後（英語）       | コメント                |
| ------------- | ---------- | ------------- | ------------------- |
| タイトル & サブタイトル | 日本語 2 行    | 英語 1 行        | フォント自動縮小ではみ出しなし     |
| SmartArt（階層図） | 5 段ピラミッド   | テキスト英語化、色・形維持 | テキスト量が多いと改行が入る      |
| グラフ（円・棒）      | データラベル：日本語 | 英語化済み         | ラベル位置は同じ            |
| アニメーション       | フェード・ワイプ   | 同じ効果、タイミング維持  | 複雑なトリガーは未検証         |
| ノート欄          | 日本語メモ      | 英語化           | 発表用メモがそのまま英語になるのは便利 |

### 手動で調整したところ

1. **文字数が極端に増えた箇条書き**（フォント 120% → 90% へ縮小）
2. **右寄せタイトル**で改行位置が不自然になった 2 スライド
3. **埋め込み動画のキャプション**（字幕ファイルは対象外のため）

---

## 良かった点と注意点

**◎ 良かった**

* 翻訳前後でデザインの手戻りが激減 → 修正工数 80% 近く削減
* alt テキストも翻訳される → アクセシビリティ対応が一段ラクに
* サインアップ不要なので、案件ごとのスポット利用がしやすい

**△ 注意したい**

* 画像内テキストや動画字幕は非対応
* 複雑なアニメ（モーショントリガーなど）は要チェック
* ファイルサイズが大きいと待ち時間が長め（100 MB 超で 5〜6 分）

---

## ベストプラクティス（事前準備）

1. **テキストは 1 オブジェクト 1 段落**に分ける
2. **マスタースライドで余白を広めに確保**（特に多言語対応なら）
3. **画像に埋め込まれた文字は極力外出し**（ラベルやキャプションへ）
4. **動画や音声の字幕ファイル**は別途翻訳して差し替える
5. **翻訳後は必ずスライドショー再生で動作確認**

---

## まとめ

[PowerPoint の多言語化](https://doc2lang.com/ja/ppt-translate)は “レイアウト崩壊との戦い” というイメージでしたが、ブラウザ上で完結する翻訳サービスを使うと **文字修正レベルの微調整だけで済む** ケースが増えました。国際会議・ウェビナー・海外営業資料など、「スライド量は多いけどデザインは崩したくない」場面では試してみる価値が高いです。

同じ悩みを抱える方は、**5 枚くらいのテストファイル**から触ってみると違いが体感できると思います。気になった方はぜひお試しを。

---

### 参考リンク

* [Doc2Lang 公式サイト](https://doc2lang.com)
---

#### Tags

`#PowerPoint` `#翻訳` `#i18n` `#GPT4` `#Doc2Lang`