OmniAICreator/Qiita-1.07M huggingface dataset:
GPTモデルの仕組みをわかりやすく解説！

こんにちは！今日は、AIの中でも注目されているGPTモデルについて、「どうやってテキストを生成しているのか」を分かりやすく解説します。中学生でもイメージできる基本の話から、数式を使った具体的な仕組みまで説明しますよ！
※この記事は、ChatGPTの出力を基に作成しています。

---

### 1. **GPTとは？**

GPT（Generative Pre-trained Transformer）は、コンピューターが自然な文章を作るためのAIモデルです。本や記事、インターネット上の文章を大量に学習して、次に来る言葉を予測しながら文章を生成します。

例えば、以下のようなことが得意です：
- 質問に答える
- お話や文章を作る
- 勉強や調査のサポートをする

GPTは「次にどんな言葉が来るか」を考えるのが得意な、言葉の予測マシンみたいなものです！

---

### 2. **テキスト生成の仕組み（簡単な説明）**

GPTは、以下のような流れで文章を作ります：

1. **次の言葉を予測する**  
   「私は朝ごはんに〇〇を食べました」という文を考えると、「〇〇」の部分に来そうな言葉を予測します。例えば、「パン」「ご飯」「オムレツ」などです。

2. **過去の文脈を考慮する**  
   文の中での「文脈」を考えながら、次の言葉を選びます。「朝ごはん」という言葉があれば、「パン」や「ご飯」が選ばれやすくなります。

3. **選んだ言葉をつなげる**  
   これを何度も繰り返して、自然な文章が完成します。

簡単に言えば、「次に来る言葉」を予測するゲームを何度も繰り返して文章を作っています。

---

### 3. **テキスト生成の数式での説明**

GPTの仕組みは、条件付き確率という考え方を使っています。文章全体の確率は次のように表されます：

$$\
P(w_1, w_2, \dots, w_n) = P(w_1) \cdot P(w_2|w_1) \cdot P(w_3|w_1, w_2) \cdot \dots \cdot P(w_n|w_1, w_2, \dots, w_{n-1})
\$$

#### この式の意味：
- $\(w_i\)$：文章の中の単語やトークン
- $\(P(w_i|w_1, w_2, \dots, w_{i-1})\)$：前の言葉を元に次の言葉が来る確率

具体的には、「朝ごはん」の後に「パン」が来る確率や、「食べました」が続く確率を計算します。

---

### 4. **仕組みの詳細な流れ**

#### (1) **トークンに分ける**
文章を「トークン」と呼ばれる小さな単位に分解します。
例：「私は朝ごはんにパンを食べました」→ [私は, 朝ごはんに, パンを, 食べました]

#### (2) **トークンをベクトルに変換**
各トークンを「埋め込みベクトル」と呼ばれる数値に変換します。これでコンピューターが意味を計算しやすくなります。

#### (3) **自己注意機構を使う**
GPTは「トランスフォーマー」という仕組みを使い、自己注意機構（Self-Attention）で文脈を考慮します。この仕組みは次のような数式で表されます：

$$\
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V
\$$

- $\(Q, K, V\)\$：埋め込みベクトルから作られるクエリ、キー、バリュー
- $\(d_k\)\$：ベクトルの次元数
- $\(\text{softmax}\)$：確率に変換するための関数

これによって、文脈に応じて重要な単語に集中して次のトークンを決めます。

#### (4) **次のトークンを予測**
トランスフォーマーの出力を基に、全語彙の中から次のトークンの確率を計算します：

$$\
P(w_{i+1}|w_1, w_2, \dots, w_i) = \text{softmax}(\mathbf{W}_o \cdot \mathbf{h}_i + \mathbf{b}_o)
\$$

- $\(\mathbf{h}_i\)$：文脈を考慮したベクトル
- $\(\mathbf{W}_o, \mathbf{b}_o\)$：出力層の重みとバイアス

最も確率が高いトークンを選びます。

---

### 5. **GPTのすごいところと注意点**

#### **すごいところ**：
- 文脈を考慮して自然な文章を作れる
- 多くの情報を学んでおり、多様な質問に対応できる

#### **注意点**：
- すべての答えが正しいわけではない
- トレーニングデータに依存するため、偏りがあることも

---

### 6. **まとめ**

GPTは、「次に来る言葉を予測する」というシンプルな仕組みをもとに動いています。ただ、その裏側には大量のデータ学習や高度な数学が詰まっています。

この記事では、GPTの基本から、数式を使った仕組みの説明までを簡単にまとめました。GPTの文章生成の流れを理解することで、AIの面白さや仕組みの奥深さを感じてもらえたら嬉しいです！

ぜひ、GPTを使うときに「どうやって文章を作っているのかな？」と考えながら楽しんでみてください！
2024年を振り返ってみて

お疲れ様です！
モブエンジニアです！！

2024年も残り1日となりましたので、
月ベースで振り返りを行なってみたいと思います！！

:::note info
振り返りながら執筆したので取り留めない内容かと思います。
:::

## 2024年01月
- 社内業務に追われており特筆することがなかったですね
- 強いて言えば、Python基礎資格を取得できたのがイベントだったかなぁと思いました

## 2024年02月
- IPA未踏イベントで技術者としての刺激を少しだけ取り戻したと思います
- 社内教育推進としての立ち位置に一番悩みを抱えていたと思います

## 2024年03月
- 4月入社の新入社員への受け入れ、教育計画の立案・推進を行っていたと思います

## 2024年04月
- 新入社員へのフォローが中心だったと思います
- あわせて、教育担当からエンジニア職への社内チェンジがありましたので、引き継ぎのためのドキュメント整理を行なっておりました

## 2924年05月
- 新入社員と一緒にJAWSイベントへ参加して、AWS面白いなぁと気付き始めました
- エンジニア職としての役割(IaCプロダクト開発)に向けた技術キャッチアップも行なっておりました

## 2024年06月
- IaCプロダクト開発の知識キャッチアップ追われていたと思います
- 同タイミングでPMOコミュニティに参加しはじめました(当初は参加者の色が強かったです)

## 2024年07月
- 引き続きIaCプロダクト開発に追われて思います

## 2024年08月
- 仕事に慣れてきたので社外へのアウトプット活動に注力していきたいと思い始めました

## 2024年09月
- 一旦プロダクト開発が落ち着いたタイミングかと思います


## 2024年10月
- 主体的にイベントへ参加し始めました
- PMOコミュニティ内で勉強会を主催したのもこのタイミングでした

## 2024年11月
- JAWS-UG Educationで初登壇しました
- LT登壇を通じてAWSへの興味関心が深まったと思います

## 2024年12月
- JAWS-UG Tokyoでオフライン登壇を行ってみました
- PMOコミュニティでも2回目の勉強会を開催し始めました

ざっくり振り返ると、10月からアウトプットへの意欲が強くなったのかなぁと思いました。
そのうえで、2025年の目標として次のことを行ってみたいと思います

## 2025年の目標
- AWS資格全制覇
- 月1回以上LTなどのアウトプット活動実施
- ブログ執筆、300件以上

以下資料でもまとめてみました。

https://speakerdeck.com/masakiokuda/2024nian-zhen-rifan-ri-and-2025nian-mu-biao-she-ding

最後まで読んでいただきありがとうございます！
ソフトウェア供給網安全の政策と技術動向

2022 年 5 月 21 日、バイデン大統領は大統領令（ [EO14028](https://www.secrss.com/articles/31267) ）に署名し、ソフトウェア供給網の安全性を米国の国家安全保障レベルに引き上げました。それに対し、その約 1 か月前、中国ではすでに[《関鍵情報基礎施設安全保護条例》（国令第 745 号）](http://www.scio.gov.cn/32344/32345/44688/46640/46647/Document/1711145/1711145.htm)が発表されており、タイミング的には今回、米国が後れを取った印象を与えます。

それからちょうど 1 年後の 2023 年 5 月 23 日、中国では[サイバーフォートレス（賽博堡垒）](https://hardenedvault.net/)と中国科学院ソフトウェア研究所が共同で[《基礎インフラストラクチャ安全性レジリエンス技術ガイドライン草案（ファームウェア安全編）》](https://www.4hou.com/index.php/posts/gM1Z)を発表しました。このガイドラインではファームウェアの安全性が取り上げられ、関連議題が新たな段階に進展しました。しかし、単なるテキスト草案の策定に留まる現状では、グーグルが 2017 年 にオープンソース安全ファームウェアを実際に運用に投入していたことと比べ、技術的な進捗に大きなギャップがあると言えます。

さらに最近、米国では[《オープンソース安全ソフトウェア法案（ Securing Open Source Software Act ）》](https://www.congress.gov/bill/118th-congress/senate-bill/917/text)が両党の支持を得て成立しました。この法案では、重要インフラの保護を目的としてオープンソースソフトウェアの安全性を国家レベルで重点課題に位置づけています。民主党と共和党が共同で支持するという事実は、この問題がいかに重要であり、緊急性が高いかを示しています。

### **分析と展望**
#### **1. 米中の政策的アプローチの比較**
米国と中国の両国は、基礎インフラやソフトウェア供給網の安全性を国家安全保障の優先事項としていますが、政策の実施速度や技術的アプローチにおいて違いがあります。中国は迅速に法令を発表した一方で、米国は具体的なオープンソースプロジェクトや技術的実践を通じて対応を進めています。これにより、米国は技術面でリードしているものの、両国とも政策と技術の整合性をさらに強化する必要があります。

#### **2. ファームウェア安全の重要性**
ファームウェア安全性の議論が活発化する中、サプライチェーン攻撃の増加やゼロデイ脆弱性への対応が急務となっています。ファームウェアはシステムの根幹に関わる部分であり、国家間競争が激化する分野でもあります。

#### **3. オープンソースの役割**
オープンソース技術は、イノベーション促進とセキュリティ強化の両方で重要な役割を果たしています。グーグルをはじめとする企業が先行してオープンソースの安全基準を確立したことは、今後の標準化プロセスにおいて各国にとって参考になるでしょう。

#### **結論**
2022 年は、ソフトウェア供給網の安全性が米中を中心とした世界的な議題となった年として記憶されます。政策的な対策だけでなく、実際の技術実装や国際的な協力体制をいかに整備していくかが、今後のグローバルなサイバーセキュリティの行方を左右する重要なポイントとなるでしょう。
Javaの基本：`public`、`static`、`void` の意味を理解しよう！

Javaを学び始めたばかりの方にとって、`public static void main(String[] args)` の意味を理解することは、最初のハードルの一つですよね。本記事では、この中に含まれる **`public`**, **`static`**, **`void`** の意味を一つずつ分かりやすく解説します！

---

## 1. **`public` の意味**
`public` は **アクセス修飾子** と呼ばれるもので、メソッドや変数のアクセス範囲を指定します。

### **ポイント**
- **どこからでもアクセス可能**
- 他のクラスやパッケージから自由に呼び出せる。

### **例**
```java
public class Example {
    public void greet() {
        System.out.println("Hello, World!");
    }
}
```
この場合、`greet` メソッドはどこからでも呼び出すことができます。

#### **使いどころ**
- プログラムの他の部分で呼び出す必要があるメソッドや変数に付けます。
- 例えば、`main` メソッドはプログラムのエントリーポイントとしてどこからでもアクセス可能にする必要があるので、`public` を付けます。

---

## 2. **`static` の意味**
`static` は **クラスに属するメソッドや変数** を定義します。

### **ポイント**
- **インスタンスを生成しなくても使える**
- クラス名を使って直接呼び出せる。

### **例**
```java
public class Example {
    public static void greet() {
        System.out.println("Hello, World!");
    }
}
```
この場合、`Example.greet();` と書くだけで呼び出せます。

#### **使いどころ**
- クラス全体で共有されるメソッドや変数に使います。
- 例えば、ユーティリティ関数や定数の定義に便利です。

---

## 3. **`void` の意味**
`void` は、メソッドが **値を返さない** ことを意味します。

### **ポイント**
- メソッドが処理を終えた後、呼び出し元に結果を返さない。
- 結果を利用しないメソッド（表示やデータ操作など）に使う。

### **例**
```java
public class Example {
    public void printMessage() {
        System.out.println("This is a void method.");
    }
}
```
この場合、`printMessage` メソッドは呼び出し元に何も返さず、単にメッセージを表示するだけです。

#### **使いどころ**
- 結果を返す必要がない場合に使います。
- 例えば、ログを出力したり、画面に情報を表示するメソッドなど。

---

## 4. **組み合わせて使う：`public static void`**
これらを組み合わせると、どこからでもアクセス可能で、クラスに属し、値を返さないメソッドができます。

### **例：`main` メソッド**
```java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}
```

### **解説**
1. **`public`**:
   - 他のプログラムやJava Virtual Machine (JVM) からアクセス可能。
2. **`static`**:
   - インスタンスを作らずにJVMが直接呼び出せる。
3. **`void`**:
   - プログラムのエントリーポイントとして、戻り値を必要としない。

---

## 5. **戻り値が必要な場合との比較**
`void` の代わりに戻り値の型を指定すると、結果を呼び出し元に返すことができます。

### **例**
```java
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}
```
この場合、`add` メソッドは `int` 型の値（`a + b` の結果）を返します。

#### **呼び出し例**
```java
Calculator calc = new Calculator();
int result = calc.add(3, 5);
System.out.println(result);  // 出力: 8
```

---

## まとめ
| 修飾子    | 意味                                    | 主な使いどころ                                     |
|-----------|-----------------------------------------|--------------------------------------------------|
| `public`  | どこからでもアクセス可能                  | メソッドや変数を外部から利用可能にする場合          |
| `static`  | インスタンスを作らずに利用可能             | クラス全体で共有するユーティリティ関数や定数          |
| `void`    | 値を返さない                            | 結果を返さずに処理だけ行うメソッド                  |

これで、`public static void` の基本的な意味と使い方が理解できたと思います！Javaプログラムを実際に書いてみて、このキーワードの役割を体感してください！

---

**補足**  
質問や追加の疑問があれば、コメントで教えてください！ 😊
【学習メモ】JWTの基本とアルゴリズムの違いを理解する


## 1. JWTとは何か

### ▶ 概要

JWT (JSON Web Token) は、APIエンドポイントの認証やアクセス制御に利用されるトークンである。主に、クライアント・サーバー間の認証に使われ、非同期なAPI認証システムを実装するのに優れている。

JWTの重要な点として、**JWT自体はトークン内の情報を暗号化するわけではなく、情報が改ざんされていないことを検証するための手段である**。Base64URLでエンコードされているので、誰でもデコードすることが可能である。つまり、**JWTはデータの私秉性を保証するものではない**ため、注意が必要である。

#### ▶ JWTの使用ユースケース

- 認証 (Authentication)
- セッション管理 (Session Management)
- リソースアクセス制御 (Access Control)
- API間の相互認証

#### ▶ JWTのメリット

- ステートレスでセッションを管理する必要がない
- 小さくシンプルなトークンで、URL、HTTPヘッダー、クイリーパラメータ等で送信可能
- サーバー側でトークンを検証することで、一時的にユーザーを認証可能

---

## 2. JWTの構造と仕組み

### ▶ JWTの構造

JWTは、**3つの部分から構成**される。

```
ヘッダー. ペイロード. 署名
```

#### 1. ヘッダー (Header)

- アルゴリズム (alg): HS256, RS256など
- トークン種別 (typ): JWT

```json
{
  "alg": "HS256",
  "typ": "JWT"
}
```

#### 2. ペイロード (Payload)

- ユーザー情報、認証情報
- クレーム (claims): `sub`, `iat`, `exp`等

```json
{
  "sub": 1,
  "username": "john",
  "role": "admin",
  "iat": 1672376000,
  "exp": 1672379600
}
```

---

## 3. アクセストークンとリフレッシュトークン

### ▶ アクセストークンの役割
- APIにアクセスする際に毎回送信され、リソースへのアクセスを許可する。
- 短期間で失効する (例: 15分)。

### ▶ リフレッシュトークンの役割
- アクセストークンが期限切れになった際に、新しいアクセストークンを発行するために使われる。
- 長期間有効 (例: 7日)。

### ▶ 両者の違いと使い分けのポイント
- アクセストークンは短期間で失効し、リフレッシュトークンが新しいアクセストークンを再発行する。
- アクセストークンは攻撃者に盗まれても影響が限定的であるが、リフレッシュトークンは厳重に保管する必要がある。

### ▶ アクセストークンが短期である理由
- 万が一漏洩した場合の被害を最小限に抑えるため。
- 一定期間ごとにトークンを更新することでセキュリティを高める。

---

## 4. HS256とRS256の違い

### ▶ HS256とRS256の違いを表で整理

| 特徴             | HS256                         | RS256                         |
|------------------|-------------------------------|-------------------------------|
| 暗号方式          | 対称暗号方式                   | 非対称暗号方式                 |
| 鍵の種類          | 1つの秘密鍵                   | 秘密鍵と公開鍵                 |
| セキュリティ       | 比較的低い                    | 高い                          |
| 処理速度          | 速い                          | 遅い                          |
| 使用場面          | 内部API                      | 公開API                       |

### ▶ HS256の仕組みと特徴
- 1つの秘密鍵を使って署名と検証を行う。
- シンプルで高速であるが、秘密鍵が漏れるとトークンが偽造されるリスクがある。

### ▶ RS256の仕組みと特徴
- 秘密鍵で署名し、公開鍵で検証する。
- 非対称暗号方式であり、公開鍵を安全に共有できるため、セキュリティが高い。

### ▶ メリット・デメリット
- HS256は処理が速くシンプルであるが、セキュリティ面で劣る。
- RS256はセキュリティが高いものの、処理が遅く管理が複雑になる。

### ▶ どちらを使うべきか？ユースケースごとの選び方
- **HS256**: 内部APIや、サーバーサイドだけで完結するシステム。
- **RS256**: 公開APIや、多数のクライアントが関わるシステム。

---

## 5. セキュリティの注意点とベストプラクティス

- JWTの中身は暗号化されていない (誰でもデコード可能)。
- HTTPSを使うことで、トークンの盗聴を防ぐ。
- トークンの有効期限は短く設定し、長期間のアクセスはリフレッシュトークンで管理する。
- リフレッシュトークンはHttpOnly Cookieで安全に保管する。
- ブラックリストを導入し、特定のトークンを失効させる仕組みを作る。

---

## 6. まとめと今後の学習メモ

### ▶ 学んだポイントの振り返り
- JWTの基本構造と認証の流れを理解。
- HS256は対称暗号でシンプル、RS256は非対称暗号でセキュア。
- アクセストークンとリフレッシュトークンの使い分けが重要。

### ▶ 今後調べたいことや深掘りしたいトピック
- JWE (JSON Web Encryption): トークン自体を暗号化する仕組み。
- JWS (JSON Web Signature): 署名だけを行う仕組み。
- トークンのスコープ管理や細かいアクセス制御方法。
Oracle NetSuite インスタンスのデータセンターを特定するには？

# はじめに
Oracle NetSuite を購入すると、専用のインスタンスが割り当てられます。その際、データセンターも割り当てられます。自分の組織で使っているデータセンターがどこにあるのかをチェックしてみましょう。

:::note warn
Oracle NetSuite のデータセンターの場所やURLは、その時の事情により変更されますので、この記事に書かれている方法には賞味期限があります。この情報は2024年12月現在の事情に基づいています。
:::

# データセンターの場所一覧

最新のデータセンターの場所一覧を見るには、[サービスステータスページ](https://status.netsuite.com/) を参照します。横軸がデータセンターのある国と地域、都市、および番号 (複数ある場合)になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197689/80898e64-030b-c265-e9c7-b3fe20dc3be5.png)

```:Oracle NetSuite データセンターの場所一覧
US【na】/ アメリカ合衆国
  Ashburn【iad】 / バージニア州アッシュバーン (9か所)
  Chicago / イリノイ州シカゴ (1か所)
  Phoenix【phx】 / アリゾナ州フェニックス (9か所)
  San Jose【sjc】 / カリフォルニア州サンノゼ (2か所)
CA【na】 / カナダ
  Montreal / ケベック州モントリオール (1か所)
  Toronto / オンタリオ州トロント (1か所)
EU【eu】/ ヨーロッパ連合
  Amsterdam【ams】/ オランダ アムステルダム(2か所)
  Frankfurt / ドイツ フランクフルト (2か所)
UK【eu】 / イギリス
  London / ロンドン (1か所)
  Newport【cwl】 / ニューポート (1か所)
AP【ap】/ アジア太平洋地域
  Melbourne / オーストラリア メルボルン (1か所)
  Sydney / オーストラリア シドニー (1か所)
  Tokyo【nrt】 / 日本 東京 (1か所)
  Osaka / 日本 大阪 (1か所)
```

データセンターのある都市を世界地図にプロットすると以下の通りです[^1]。アジア太平洋地域は日本国内に東京と大阪の2か所のデータセンターがあるので、これらの場所にインスタンスがホストされていれば、日本国内から低レイテンシで快適に利用することが可能です。

ちなみに、NetSuiteのService Level Commitment (SLC)は99.7%、2023年12月から2024年12月の一年間の実績では99.99%を達成しています。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197689/095c2be8-9bbc-d980-99dc-61958d8dde45.png)

[^1]: [NetSuite Data Center](https://www.netsuite.com/portal/assets/pdf/ds-netsuite-data-center.pdf)

# 自分の組織のインスタンスでデータセンターを特定するには

いよいよ本題です。
自分のインスタンスでデータセンターを特定するには、以下の手順に従います。

## 管理者の場合

メニューから[設定]-[会社]-[会社情報]を選択します。
以下の赤枠で囲った部分にデータセンターが表示されます。下記の場合は東京のデータセンターであることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197689/17f06c8a-86f7-10ed-1069-46444dd641cc.png)

## 一般ユーザーの場合

管理者メニューにアクセスできない場合は、NetSuiteにサインインした状態で、ブラウザーで右クリックを行い「ページのソースを表示」メニューでページのHTMLを表示します。ソースの最後 (`</html>`タグの後)に、以下のようなテキストが見つかります。

```
<!-- 3,890 s: 83% #412 cache: 0% #3 -->
<!-- Host [ a218.prod.nrt.ap2.core.ns.internal ] App Version [ 2024.2.15.30072 ] -->
<!-- COMPID [ XXXXXXXX ]  EMAIL [ XXXXX@XXXXXX.com ] URL [ XXXXXXXX ] Time [ Mon Dec 30 18:59:51 PST 2024 ] -->
<!-- All SQL was faster than 100 ms -->
```

ここで `App Version` がNetSuiteのビルド番号で、2024.2 であることがわかります。`Host`の`a218.prod.nrt.ap2.core.ns.internal`の部分を見ると、データセンターの場所に関するヒントが得られます。<font color="red">`core.ns.internal`</font>の前の `ap2` の先頭2文字と `nrt` の3文字で、`ap`は「アジア太平洋」、 `nrt`は「東京」を表しています。これらのコードで判明しているものは、前述の「データセンターの場所一覧」の中で角カッコ【】の中に表記しています。東京がNRTになっているところから見ると、都市の近くの空港コードになっているようです。

:::note warn
SuiteScriptを書いたりWebサービスで他のシステムとデータ連携を行う際に、データセンター固有のURLでやり取りすることは推奨されていません。UIでのNetSuiteへのアクセスであれば、普段ブラウザーに表示されているURL (例: `XXXXXX.app.netsuite.com`)ではなく、`system.netsuite.com` ドメインを使ってリダイレクトさせる、といった書き方が推奨されています。
:::
【ChatGPT】による創造性の実現とアイディアの生成の論文からPromptを作成しました。


　どうも、カーブミラーです。

　今回は、LLMによる創造性の実現とアイディアの生成の論文から、Promptを作成しました。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はありません。あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　SoraのPlus/Teamユーザーへの
　　クリスマスプレゼント🎁は
　　　現在も有効ですよ😸

　どんどん動画生成しましょうね。
***
　まずは、ニュースです。

　12/25に
　　サムがネタ募集中と
　　　書きましたが
　　　　集計が終わったようです。

[サム・アルトマンポスト](https://x.com/sama/status/1873816979590787110?t=C-yeBtCb4Wb3VEQGmetcZg&s=19)
>（DeepL翻訳）
>共通のテーマ
>
>AGI
>エージェント
>より優れた4oアップグレード
>より優れたメモリー
>より長い文脈
>成長モード
>ディープリサーチ機能
>より良いSora
>よりパーソナライズ
>
>(興味深いことに、私たちが予定している多くの素晴らしいアップデートは、まったく言及されていないか、ほとんど言及されていない！)

　最後のコメントからすると、
　　隠し球はたくさんあるようですね😅
***
　では、【本題】です。

　今回は、
　　ChatGPTによる
　　　創造性の実現と
　　　　アイディアの生成Promptです。

　AIDBさんのポストから
　　論文を見つけて、
　　　Prompt化しました。

　[AIDBさんポスト](https://x.com/ai_database/status/1873563896906490078?t=j0c3_hLDzv0n4RwHA8Xvtw&s=19)

　これのもとの論文と
　　思われるものがこちら。

　「Can LLMs Generate Novel Research Ideas?」
　　（LLMにおける創造性の実現と研究アイデアの生成）
　　　[Tianyang Guの論文](https://arxiv.org/pdf/2412.14141.pdf)

　この論文では、
　　科学研究における
　　　創造的なアイディアを
　　　　生成するために、
　　　　　大規模言語モデル（LLM）を
　　　　　　活用するフレームワークに
　　　　　　　関する研究論文です。

　　この研究では、
　　　LLMを理論的枠組みに基づいて
　　　　誘導し、
　　　　　特に「組み合わせ創造性」に
　　　　　　焦点を当てています。

　今回、
　　科学研究ではなく、
　　　与えられた問題に対して
　　　　処理できるPromptを
　　　　　作成してもらいました。

　こちらが、そのPromptになります。
　　＊＊＊に問題を入力して、
　　　送信してください。
```Text:創造性の実現とアイディアの生成Prompt
問題「＊＊＊」について

以下のプロセスを実行して、問題に対する創造的で実行可能な解決策を生成してください。各ステップを順番に進め、結果を具体的に記述してください。

1. **問題構造の分析**:
   - 以下の問題を詳細に分解してください。
   - 問題の各側面を次の4つの一般化レベルで再定義してください。
     1. ドメイン固有の実装レベル
     2. 応用可能な概念的なレベル
     3. 分野横断的な理論的基盤
     4. 普遍的な抽象的原則

2. **知識の収集と準備**:
   - 指定された問題に関連する知識を、過去の研究や異なる分野から収集してください。
   - 知識を上記4つのレベルで整理し、コンポーネント（基本要素）として分類してください。

3. **アイデア生成**:
   - 以下の手法を用いて、革新的な解決策を生成してください：
     - **コンポーネント分析**: 基本要素を分解して再構成可能な形にする。
     - **クロスドメイン応用**: 他分野の知識を適用可能な形で再構成する。
     - **ビルディングブロック評価**: 再構成した要素を基に新しいソリューションを設計する。

4. **生成アイデアの評価**:
   - 以下の評価基準を用いて生成したアイデアを評価してください：
     - 問題構造の一致度（PS-Sim）
     - 設計論理の一致度（DR-Sim）
     - 普遍的原則の一致度（UP-Sim）
     - 主要メカニズムの一致度（KM-Sim）

5. **結果の最適化**:
   - 評価結果に基づき、どの部分を改善すべきかを具体的に提案してください。
   - 必要に応じて、知識収集や再構成のプロセスを繰り返し、アイデアを改良してください。

以上の手順を完了した後、生成されたアイデアとその詳細を報告してください。
```

　テストするために
　　「ファンタジー異世界の冒険者」を
　　　問題として与えてみました。

　出力を見ても
　　具体性はありませんでした😅

　問題は、
　　このあとのやり取りです。

　出力に対して、
　　下記の問いを投げてみました。
　　　この異世界の環境は？
　　　この異世界で活躍する冒険者の能力は？
　　　この異世界の国家は？
　　　各国間の移動方法は？

　これに対して
　　それぞれの具体的な
　　　イメージで出力してくれました。

　なかなか
　　面白い結果を
　　　得られたと思います。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
S3静的Webサイトでテキストファイルの文字化けを防止する方法


# やりたいこと

日本語が入ったテキストファイル(`.txt`)をS3の静的Webサイトで配布しようとしたところ、そのままでは文字化けしました。
ググって対処したので、今後のメモとして残しておきます

（前提は以下です。）
- AWSにて、S3で静的Webサイトを構成済み（私の環境はさらにCloudFrontをつなげています）
- 文字コードがUTF-8のテキストファイルを表示したい

# そのままだと文字化け

日本語が含まれたテキストファイル（文字コード：UTF-8）をアップすると、そのままでは文字化けします。

https://diuxamlfu3f0g.cloudfront.net/files/20241230_mojibake/sample_utf-8_before.txt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789636/d7567579-9eaa-ced4-1cda-86bfd6dc6c42.png)

ちゃんと設定すると、文字化けしなくなります

https://diuxamlfu3f0g.cloudfront.net/files/20241230_mojibake/sample_utf-8.txt

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789636/440c1076-5502-ae0d-e040-b1c5e05ba808.png)


# 解消方法

## 上手くいかない例

:::note warn
当初、「なんとなく」で設定して上手くいかなかった例です
:::

1. S3にて、文字化けするファイルを選択し、「アクション」→「コピー」を選択。（ファイルの属性などを変える場合も、コピーして上書き保存、という感じの操作になる模様です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789636/030d639f-aa8b-b154-72d2-27c887c473be.png)
2. 「送信先」にて、もともとファイルがあったバケット・パスを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789636/fcdd1462-dca8-2625-2e2f-4c0e3acc3e23.png)
2. 「その他のコピー設定」にて「設定を指定」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789636/d36923e3-4cc2-03ce-5192-9a9dde95ab24.png)
2. 「メタデータ」の部分で「すべてのメタデータを置き換える」を選択し、`Content-Type: text/plain`と`Content-Encoding: utf-8`を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789636/3127268c-614d-aa34-676f-6453803e51b7.png)
2. 一番下の「コピーする」でコピーを実行。必要に応じてCloudFront側でキャッシュ削除を実施。
2. これでは上手くいかず・・・


## 上手くいく例

:::note info
正しいやり方です
:::

1. 【上と同様】S3にて、文字化けするファイルを選択し、「アクション」→「コピー」を選択。（ファイルの属性などを変える場合も、コピーして上書き保存、という感じの操作になる模様です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789636/030d639f-aa8b-b154-72d2-27c887c473be.png)
2. 【上と同様】「送信先」にて、もともとファイルがあったバケット・パスを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789636/fcdd1462-dca8-2625-2e2f-4c0e3acc3e23.png)
2. 【上と同様】「その他のコピー設定」にて「設定を指定」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789636/d36923e3-4cc2-03ce-5192-9a9dde95ab24.png)
2. ★ここだけ違います★「メタデータ」の部分で「すべてのメタデータを置き換える」を選択し、`Content-Type`は`text/plain;charset=utf-8`を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789636/45bd30b3-2cd5-03cc-0dbe-6bf52413bb1a.png)
2. 【上と同様】一番下の「コピーする」でコピーを実行。必要に応じてCloudFront側でキャッシュ削除を実施。

# おわりに

Content-Typeに文字コードも指定するのが、個人的に違和感ありありでした。。
ただ調べたところ、「Content-Encoding」は圧縮方式（gzip, deflate等）を指定するらしく、文字コードとは似て非なるもののようです。
VSCodeでは文字コードを「Encoding」と呼びますが、文脈によって「エンコード」の意味は変わるので、、Web的な文脈では「charset」と呼んだほうがいいですね・・・
Rustのbevy_rapier2dクレートを使ってみた

先日、[crates.io](https://crates.io/)で[bevy_rapier2d](https://crates.io/crates/bevy_rapier2d)なるクレートを見つけました。
面白そうだったので少し触ってみました。
Rustで簡単な物理エンジン用いたゲームを作りたい人には参考になるかもしれません。

## 出来たもの
![test_241231.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139073/ec81dbfd-e110-7773-a206-b3362e87493a.gif)

## コード


```rust:Cargo.toml
[dependencies]
bevy = "0.15.0"
bevy_rapier2d = "0.28.0"
```


```rust:main.rs
#![windows_subsystem = "windows"]
use bevy::prelude::*;
use bevy_rapier2d::prelude::*;

#[derive(Component)]
pub struct PhisicNode;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(RapierPhysicsPlugin::<NoUserData>::pixels_per_meter(100.0))
        .add_plugins(RapierDebugRenderPlugin::default())
        .add_systems(Startup, setup)
        .add_systems(Update, (
            spawn_physics,
            delete_physics
        ))
        .run();
}

fn setup(mut commands: Commands) {
    commands.spawn(Camera2d::default());
    commands
        .spawn(Collider::cuboid(500.0, 10.0))
        .insert(Transform::from(Transform::from_xyz(0.0, -340.0, 0.0)));
    commands
        .spawn(Collider::cuboid(10.0, 100.0))
        .insert(Transform::from(Transform::from_xyz(-510.0, -250.0, 0.0)));
    commands
        .spawn(Collider::cuboid(10.0, 100.0))
        .insert(Transform::from(Transform::from_xyz(510.0, -250.0, 0.0)));
}

fn spawn_physics(
    mut commands: Commands,
    q_windows: Query<&Window, With<bevy::window::PrimaryWindow>>,
    mouse_input: Res<ButtonInput<MouseButton>>,
) {
    if q_windows.single().cursor_position().is_none(){return;}
    if !mouse_input.just_released(MouseButton::Left) && !mouse_input.pressed(MouseButton::Right){return;}
    let pos = q_windows.single().cursor_position().unwrap();
    let width = q_windows.single().width();
    let height = q_windows.single().height();
    let px =  pos.x - (width  * 0.5);
    let py = -pos.y + (height * 0.5);
    if mouse_input.just_released(MouseButton::Left){
        commands
        .spawn(RigidBody::Dynamic)
        .insert(Collider::cuboid(50.0, 50.0))
        .insert(Restitution::coefficient(0.8))
        .insert(Transform::from(Transform::from_xyz(px, py, 0.0)))
        .insert(PhisicNode);
    }
    if mouse_input.pressed(MouseButton::Right){
        commands
        .spawn(RigidBody::Dynamic)
        .insert(Collider::ball(20.0))
        .insert(Restitution::coefficient(0.25))
        .insert(Transform::from(Transform::from_xyz(px, py, 0.0)))
        .insert(PhisicNode);
    }
}

fn delete_physics(
    mut commands: Commands,
    physics: Query<(Entity, &PhisicNode)>,
    keyboard_input: Res<ButtonInput<KeyCode>>,
){
    if !keyboard_input.just_pressed(KeyCode::Delete){return;}
    for (e, _p) in physics.iter(){
        commands.entity(e).despawn();
    }
}
```
## 感想
軽く触った感じですと、bevyのecsのやり方に従って物理エンジンの処理が簡単に書けるのが印象的でした。
Githubの実施例もわかりやすいものが多く、処理がスムーズに書けました。
## 参考にさせていただいたサイト
https://www.rapier.rs/
https://docs.rs/bevy_rapier2d/latest/bevy_rapier2d/
https://github.com/dimforge/bevy_rapier/tree/master/bevy_rapier2d/examples
Unity Particle System でメッシュの頂点番号順にパーティクルを発生させる方法

UnityのParticle Systemは、自由度の高いエフェクトを作成できるツールです。この記事では、ShapeをMeshに設定した時、メッシュの頂点番号順にパーティクルを発生させる方法と、その際に遭遇する問題の解決策をまとめています。動作環境はUnity 2022.3.6f1です。

# 前提
本記事はUnity側での設定のみをまとめています。
Blenderで頂点番号を調整するには以下の記事を参考にしてください。
[【Blender】メッシュのINDEX番号を変えるにはSort Elements(要素をソート)を使う。しかし並べ方の癖が強い](https://webtech.fukushimaku.jp/kiji/blender-index-sort-elements.html)
[blenderで頂点番号を確認する方法](https://note.com/blendermagic/n/na49c3e0b491b)

# 背景
Particle SystemのShapeを“Mesh”に設定すると、メッシュの頂点番号に基づいてパーティクルが発生します。さらに、Typeを"Vertex"、Modeを“Loop”設定を有効化すると、頂点番号に従った発生が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966539/a4c77430-258f-c59d-098e-b7600c85f10e.png)


しかし、Blender等のモデリングツールでメッシュの頂点番号を意図した順序に並び替えても、Unity側で自動的に頂点の最適化（Optimize）が行われるため、想定した順番でパーティクルを発生させることができません。

# 解決策
Unity側での最適化を回避します。


Blender等からエクスポートしたFBXファイルをUnityプロジェクトにインポートします。
ProjectからFBXファイルを選択し、Inspectorでインポート設定を変更します。
**Optimize MeshのVertex Orderのチェックを外します。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966539/ee15afee-f3c6-c7b4-6c57-f91d5efcd155.png)

Particle Systemの設定
Shapeを“Mesh”
Typeを"Vertex"
Modeを"Loop"
インポートしたメッシュを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966539/bf62befc-0e3d-bc4a-6a94-2c12ad8290f8.png)


必要に応じてMainモジュールのStart SpeedやStart Size、Emissiotnの量を調節してください。設定例↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966539/6c16545e-1493-5cec-ac67-9acfbd55844c.png)


これで完成です。
この技術を活用するとこのようなものができます。(これはPlaneの中央から外側に向けて頂点番号が増えるようにしたもの)
![2024-12-31-11-33-18 (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966539/7327011d-442f-ef9a-bb1f-13754e59113d.gif)


## できない場合

できていない場合は、以下のことが考えられます。
・Particleが動いて頂点番号順に発生しているかわからない。
    　　→Start Speedを0にしてください。
      
・Particleが一箇所に集まっている。
    　　→Particleのサイズが大きい可能性があります。Start Sizeを小さくしてみてください。
Qiitaの記事で、OGP画像の変更が適用されない場合の回避策

# 発生した問題

自サイトのOGP画像を新しくしたので、Qiita上で表示されるOGP画像も差し替えたかったが、古いOGP画像が表示され続ける問題に遭遇した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363036/3d397877-f111-c873-3548-aef17d0d39a5.png)

上がもともと設定していたOGP画像で、下が新しく設定したもの。

Qiitaの記事エディタに貼り付けたURLはどちらも `https://c6tower.github.io/smartphone-crash-simulator/` だが、上の古いほうのOGP画像がずっと表示されてしまった。

# 原因

Qiita側に古いOGP画像のキャッシュが残ってしまったことが原因の模様。

実施した操作 + 発生した事象は下記の通り。

1. 自サイトのURLをQiita記事に貼る
1. Qiita記事に自サイトのOGP画像が表示される
    a. このタイミングで、Qiita側にOGP画像のキャッシュが保存された模様
1. 自サイトのOGP画像を更新する
1. Qiita記事のOGP画像が古い状態のまま

# 対策その1: URLを変更する

キャッシュが効かないようにすれば良いので、URLを変更する作戦がとれる。
`https://c6tower.github.io/smartphone-crash-simulator/?hoge` のように無意味なクエリパラメータを付与してあげることで、更新後のOGP画像をQiita上に表示させることができた。

# 対策その2: 時間が解決してくれるのを待つ

何もせずとも、キャッシュが有効期限を迎えれば、OGP画像もは新しいものに新される。
ちなみに、QiitaのキャッシュTTLがどれくらいなのかは不明だが、2, 3日後にはキャッシュ更新されていた。

# おまけ

ちなみに、本記事で取り上げた自サイトは、クソアプリアドベントカレンダー2024記事向けに作ったもの。

https://qiita.com/c6tower/items/44a5a003cfac78d43f1a
[Apache]拡張子なしでアクセスする[mod_rewrite]

``http://localhost/health`` のようにURLに ``.html`` のような拡張子を付けないでアクセスできるようにしたいと思ったので、そのときに作業したことをメモとしてのこしておきます。

## 準備

今回はapacheの環境をdockerを使って用意しました。なのでまずはapacheのdockerコンテナを立ち上げます。

```html
docker run -d httpd:2.4.62
```

コンテナが立ち上がったら、httpd.confをdockerコンテナからコピーします。

```bash
docker cp $(docker ps | awk '$2=="httpd:2.4.62" {print $1}'):/usr/local/apache2/conf/httpd.conf $PWD
```

設定ファイルをコピーしてきたらコンテナを停止しておきます。

```bash
  docker stop $(docker ps | awk '$2=="httpd:2.4.62" {print $1}')
```

## httpd.confを編集

拡張子なしでアクセスできるようにするためリライト条件を設定します。

```httpd.conf
<Directory "/usr/local/apache2/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride None
    
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} /[^./]+$
    RewriteRule (.*) $1.html
```

RewriteRuleを使用するため、mod_rewriteモジュールを有効化します。

```httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
```

ポートを8080に変更します。ここは変更しなくても問題ないです。

```httpd.conf
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 8080
```

## コンテナイメージを作成

設定ファイルの編集が終わったら、次に動作確認用として適当なファイルを作成します。

```html:health.html
<html><body><h1>ok</h1></body></html>
```

新しい設定ファイルと動作確認用のファイルを含んだDockerfileを作成します。

```docker:Dockerfile
FROM httpd:2.4.62

COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./health.html /usr/local/apache2/htdocs/health.html
```

作成したDockerfileを使用してビルドします。

```
docker build -t custom-httpd .
```

ビルドしたイメージからコンテナを起動。

```
docker run -d -p 8080:8080 custom-httpd
```

## 動作確認

最後に動作確認をします。確認したいURLに拡張子を省略してアクセスして404がかえってこなければ成功です。

```bash
$ curl -v http://localhost:8080/health
*   Trying 127.0.0.1:8080...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /health HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Tue, 31 Dec 2024 02:19:52 GMT
< Server: Apache/2.4.62 (Unix)
< Last-Modified: Tue, 31 Dec 2024 00:57:54 GMT
< ETag: "26-62a866b501702"
< Accept-Ranges: bytes
< Content-Length: 38
< Content-Type: text/html
<
<html><body><h1>ok</h1></body></html>
* Connection #0 to host localhost left intact
```
Seleniumにて要素の隣の要素を取得したい(Python)

例
```HTML
<div>
    <span id="target">Target Element</span>
    <span id="sibling1">Sibling 1</span>
    <span id="sibling2">Sibling 2</span>
</div>
```


``` Python
# targetの後に続く兄弟要素のリストを取得できる。
siblings = driver.find_elements(By.XPATH, "//span[@id='target']/following-sibling::span")
```

``` Python
# targetの前の続く兄弟要素のリストを取得できる。
siblings = driver.find_elements(By.XPATH, "//span[@id='target']/preceding-sibling::span")
```

``` Python
# CSS_SELECTORでも指定できる(知らなかった...)
siblings = driver.find_elements(By.CSS_SELECTOR, "#target ~ span")
```


HTMLやjsができる人からすると常識かもしれませんが、pythonだけやっているとこんな入り組んだことができるとは想像もつきませんね...
認証と認可の違いについてざっくりまとめ

## 前置き

IT業界にいると様々な似通った言葉が出てきます。
今回は **認証** と **認可** についてざっくり解説した記事です！

## 認証ってなに？
IT世界では2つの意味が存在する！
```
・一定の行為または文書の成立、記載が手続でなされたことを公の期間が証明すること
・コンピュータやNWシステムを利用する際に必要な本人確認のこと
```



## 認証の目的
```
・データの秘密を守ること
・内部からの攻撃からデータを保護すること
```

##  認可とは
```
・認証後にITリソースへのアクセス権限に応じて許可すること
```

## 認可の目的

```
利用者が持つアクセス権限のハニで利用者を許可するという制御が行うため
```

## それぞれのイメージ具体例

具体的に例を挙げてみます！
認証と認可について運転免許証で説明します！！

運転免許証は、車やバイクの運転をするために必要となる公的な **「認可証」**　ですが
身分証明書という本人確認のための **「認証」** にも使われます。

しかし、それらが、意味することは明確に違います！
両者を区別して考えないとダメです。

つまり、「本人である」という証明をする観点でみれば **認証**であり、所持することで自動車等の運転を認められていること、この観点で **認可** といえます！

## まとめ

```
認証は、利用者本人であることを検証すること。
認可は、利用者が持つアクセス権限を確認し、ITリソース（機能など）へのアクセスを許可すること
```
AzureのPublic Access無効化したリソースへAzure Portalからアクセスする

Azureで各種リソースのPublic Access無効化する要件があったので。

Azureでは一部リソースでは、Public Accessを無効化するとAzure Portalからも開けない事象が発生してしまう。今までPublic Access無効化にしても、IPホワイトリストで開発PCのIPやレンジを除外して対応していたが、今回はそれも認められなかったので、調査しました。

# 結論：Public Access 無効化のリソースには、踏み台VM内のAzure Portalからアクセスする
結論からいうとこうなる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/da34b1a5-ac01-b446-149c-1edd9615f420.png)

# ハンズオン
## 事象
Azure Storage AccountでFirewallでPublic Accessを無効にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/4ac42652-0979-93a3-e43b-d1f0fc1f755a.png)
前提としてStorage Accountの中身を見るのに必要な権限はつけておきます。Storage Blob Data Contributor。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/eb2c53ab-744a-558b-94e8-3bc54597c2f2.png)
この状態でAzure Portalからアクセスするとはじかれる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/142b52e4-d234-a11f-4228-5cfb716e21a4.png)

## 対応
Storage AccountにPrivate Endpointを付与する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/bad623e7-0cf0-9e96-3080-a433abd2dbe4.png)

VMをPrivate Endpointと同じSubnetに立てる。（別Subnetでもいいが、その場合はSubnet間でNSGの通信を許可してやる必要がある。）VMに接続し、Azure Portalを開きStorage Accountにアクセスし、Containerの中身を見れることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/651a33f6-fa32-67ff-de9a-5039c82240b2.png)

# どういうリソースに影響があるか
全部調べたわけではないですが、以下のリソースでは開けない、参照できない等問題が起きていた。要はDataプレーンとControlプレーンに分かれているもので、Dataプレーンへの接続がPublic Accessがオフの場合ははじかれてしまうということらしい。

- Azure Storage AccountのBlob等
- Web AppsのKudu
- Azure Cosmos DBのContainer
- Azure Key VaultのSecret、Key、Certificate
- Azure AI SearchのIndex
- Azure Batch AccountのPool等
- Azure OpenAIのStudioでAIとのやりとり
アジャイル開発：デイリースクラムの基本のキ

# はじめに
開発の現場では、
毎朝朝会を10-15分程決まった時間帯に実施することはよくある。
特にアジャイルを取り入れているプロジェクトであれば、デイリースクラムとして朝会 or 昼会 or 夕会を毎日実施しているだろう。

ただし、よく見られる光景なのだが、、
リーダーに対して進捗報告をするだけの場となっていないだろうか？
自分以外の進捗状況やタスクに全く興味なく単方向でのコミュニケーションとなっていないだろうか？

デイリースクラムの目的、アンチパターン、即実践すべきこと、について語っていく。

# デイリースクラムの目的
ざっくりいうと、以下かと。
**全員が業務内容や課題を共有し、コミュニケーションを促進する場とすること**

# アンチパターン
##  長時間化
　デイリースクラムは毎日実行するイベントとなるため、15分程度が良いとされています。
 　そのため、タイマーなどを使用し時間内に終わるように努めるべきです。

## 詳細な技術討議や問題解決に時間がかかってしまう
　特定の問題について深く議論することになりそうであれば、別の場を設けること。
 　別の場を設ける場合は、必要なメンバのみにを集めること

## スクラムマスター、もしくはリーダーに報告する場になっていないか？
　**デイリースクラムはリーダーに報告する場ではありません！**
 チームメンバー間のコミュニケーションを促進すべき

## ただの進捗報告会
　スプリントゴールの達成に向けた検討や適応がなく、単なる報告で終わってしまうこと。

## 他のメンバーの共有内容を聞かない
　チームメンバーが互いの報告に関心を持たず、自分の報告だけに集中してしまうこと
 　→自分のタスク状況を共有したら、他メンバの進捗を聞かず自分の作業に入ってしまう、とかね。。

## 準備不足
　メンバーが自分の状況を詳細に把握していないこと。
 　事前に進捗状況をまとめ、簡潔に報告できるよう準備すべき

# 即実践すべきこと
アンチパターンから即実践すべきことを記載していく

<dl>
  <dt>時間を決める</dt>
  <dd>15分以内で終わらせるようにしよう</dd>
  <dt>技術討議・問題解決に時間がかかりそうなら別の場を設ける</dt>
  <dd>デイリースクラムの場では問題提起や概要のみの共有にとどめる</dd>
  <dt>事前準備</dt>
  <dd>メンバーが自分の状況を詳細に把握し、今日やるべきこと、今週までにやるべきことを簡潔に報告できるよう準備しておく</dd>
  <dt>ただの進捗報告会にしない</dt>
  <dd>ゴールの達成に向けた課題が無いか？他に懸念点が無いか？タスクの優先順位に誤りは無いか？などについてメンバ間で共通認識を持つ</dd>
  <dt>他メンバの共有内容を真面目に聞く</dt>
  <dd>PCを持たずにスタンドアップミーティングをするのも良いだろう。とにかく他メンバの共有内容を真摯に聞くこと！</dd>
</dl>

# リーダー側のやるべきこと（リーダーじゃなくても良いけど）
・**チームメンバのタスクが分かる進捗状況が一発で分かるようにタスク管理し、そのタスク管理状況を朝会で見せながら、チームメンバに共通認識を持たせる。**
（あって当たり前だろ、と思うかもしれませんが、意外とこういうの整理されていないこと多いんですよ。。普通に考えてありえないが、結局リーダー以外全体進捗がイマイチ分からないとかあるあるだよね。）

 個人で全て実行する案件であれば良いかもしれないが、チームで行うので自分の担当分野以外の進捗状況も認識を持つ必要がある。
  手が空いているようであれば、未経験の分野でも積極的に対応すべきで知見を広げることにもなるし、勿論チームのためにもなる。もしかしたら、自分の担当するタスクに影響する可能性もだってある。
  
:::note info
①**チームで抱える共通タスクである、という認識を持つ** 
　自分か自分以外のタスク、という考え方ではない。他メンバの報告内容は自分ごととして聞く

②**チームメンバ一人一人がスプリントゴールに向けた進捗状況を把握し、自らのやるべきタスクを判断できるようになる**
　自走できるチームを作るべきだと思うし、アジャイルの性質上この部分は非常に重要。
 　そのため、毎日実施するデイリースクラムでもこの観点を持って実施すべき、ということになる。
:::

# やった方が良いと思うこと
・ファシリティをチームメンバに交代で行わせる
　ファシリティのように仕切る役は実践しないと身につかないし、自分ごととして認識してもらう一環としても良い意味になると思う。

  ※いきなりファシリティをさせると全くまとまりがない状態でやろうとするメンバもいるため、最低限のルールをあらかじめ周知しておいた方が良い。

# 終わりに
もっと色々ありそうだけど、あとは実際にデイリースクラムを実践してみて、改善ポイントがあればレトロスペクティブ（振り返り会）でチームメンバ全員で議論し、メンバ全員で合意してから都度改善していけば良いと思う。

決して、リーダーが決めるのではなく、チームメンバ全員で決める、という感覚が大事。

以上
mtoolsを使えるようにした

FreeBSDでFATなUSBメモリなどにアクセスする方法はシステムが提供するmount_msdosfsでマウントしてアクセスするか、外部コマンドのmtoolsを使うのが一般的です。mtoolsの方がお手軽です。

mtoolsをZRouterのportsもどきに追加してprofileを用意してみました。

mtoolsを使うためには/usr/local/etc/mtools.confか~/.mtoolsrcが必要で、USBメモリをA:ドライブとして設定します。

```:mtools.conf
drive a: file="/dev/da0s1"
```

USBメモリをアクセスするためのumassは下記のカーネル機能拡張が必要なので、イメージを作る時に設定しておきます。

```
KERNCONF_MODULES_OVERRIDE+=usb/umass cam
```

kldloadでumassをロードするとda0が現れてアクセスできます。

```
# cd /usr/local/bin
# ./mdir
 Volume in drive A has no label
 Volume Serial Number is 9C04-F50E
Directory for A:/

opaljr21     <DIR>     2024-11-25  16:37 
NEWFILE0 BMP    149814 2006-01-01   0:00  NewFile0.bmp
NEWFILE1 BMP    149814 2006-01-01   0:00  NewFile1.bmp
NEWFIL~1 JPG     81851 2024-11-30  11:41  NewFile0 (2).jpg
NEWFILE2 BMP    149814 2006-01-01   0:00  NewFile2.bmp
NEWFIL~2 JPG     73853 2024-11-30  11:44  NewFile1 (2).jpg
NEWFIL~3 JPG     72196 2024-11-30  11:46  NewFile2 (2).jpg
        7 files             677 342 bytes
                        126 590 976 bytes free

```

mtypeとmpg123でFATのMP3ファイルを再生してみたのですが、AR9341のUSBドライバの問題か、再生できる時もありますが、エラーが出て再生できない事もあり、不安定です。

```
(da0:umass-sim0:0:0:0): . CDB: 28 00 00 00 00 01 00 00 7d 00 
(da0:umass-sim0:0:0:0): CAM status: CCB request completed with an error
(da0:umass-sim0:0:0:0): Retrying command, 3 more tries remain
```

不思議な事に、パイプをcatで受けるとエラーが出ず、mpg123の場合エラーが出ます。
24/12/31 読書記録 ~土台からしっかり学ぶソフトウェアテストのセオリー~

# 書籍
[土台からしっかり学ぶソフトウェアテストのセオリー](https://amzn.asia/d/hvYdYEd)

# 第2章 ソフトウェアテストのプロセス

## 2-1. プロセスという考え方

### 用語集 :pencil: 
- プロセス
    - 過程、工程
- ソフトウェアプロセス
    - プロセスフレームワーク + プロセスフロー
- プロセスフレームワーク
    - 目的を叶えるためのフローを簡略化したもの？
    - いくつかのアクティビティからなるもの
- プロセスフロー
    - アクティビティが「どのような順序、時系列で発生するかの体系を示す」もの
- アクティビティ
    - いくつかの実行可能なアクションからなるもの
- アクション
    - 完遂されるべきタスク、成果物、求められる品質評価ポイント、進捗を示すマイルストーンで定義されるもの

### 気付き / 学び:writing_hand_tone5: 

#### なぜプロセスを知る必要があるか？

ソフトウェアテストのプロセスを知る前提として、ソフトウェア開発のプロセスを知る必要があるため。

#### 最適なプロセスフローは？
対象物の技術的特性等によって変わる。

初めから作るべきソフトウェアが明確な場合は、ウォーターフォールモデル。
しかし、作るべきものが明確ではなかったり、変化のスピードが早い場合は、アジャイルやプロトタイピング、スパイラル等の反復を含んだフローが適している。

## 2-2. ソフトウェア開発プロセスとソフトウェアテスト

### 用語集 :pencil: 

- 段階的詳細化
    - ステークホルダーの期待から要件 →（分割・詳細化） 仕様 → 開発仕様 → 実装 →（構築・テスト） コンポーネント → 部品 → 機能 → リリース と、段階的に仕様を詳細化し実装するやり方のこと
- V字プロセス
    - 段階的詳細化の考え方に元付いたプロセスフロー
- W字プロセス
    - 「テストプロセスの一部の多数は仕様策定時点で実施できる」という考え方に基づいて、それぞれのV字の左側で実施するようにしたやり方
    - V字の左側の実施直後に、テストのタスクの一部であるテスト計画やテスト設計を行う工程を設けている


### V字プロセスのメリット・デメリットは？

- メリット
    - 記載なし
    - 段階的なテストが可能であり、品質が担保されやすい？
- デメリット
    - V字の右側に時間がかかる（これを克服したものがW字モデル）


### W字プロセスのメリット・デメリットは？

- メリット
    - V字の右側では、テストによって見つかった欠陥の特定や修正を行う
    - ソフトウェアの設計をより良くすることができる
        - 機能を設計するとき「何ができるようになるか」を中心に考える
        - テストを設計するとき「それができなくなってしまうケースはないか」を考える
        - → 見過ごされがちなケースを見つけて、設計に反映することができる
- デメリット
    - 記載なし
    - 機能がリリースされるまで、時間がかかりそう。
コンデンサ容量の読み方


### コンデンサーの読み方
|表示 / 容量|pF|nF|uF|
|--------|-----|-----|-----|
|100|10|-|-|
|101|100|-|-|
|102|1000|1|0.001|
|103|10000|10|0.01|
|104|100000|100|0.1|
|105|-|-|1|
|106|-|-|10|
|107|-|-|100|
|108|-|-|1000|
|109|-|-|10000|

備考：
・表で-の箇所は一般的に使わない
・nFの単位は欧州でよく見かける単位。

例：104
1:第一数字
0:第二数字
4:乗数
10x10<sup>4</sup> = 10x10000pF
=100000pF
=100nF      ※pF→nFの変換は 1/1000倍 する
=0.1uF      ※nF→uFの変換は 1/1000倍 する

### Digikeyの静電容量変換　Webページ
https://www.digikey.jp/ja/resources/conversion-calculators/conversion-calculator-capacitance


### qittaで、指数、上付き文字の表示
10<sup>4</sup> と表示したい場合 sup を使用します。
```c
10<sup>4</sup>
```

### qittaで、下付き文字の表示
CO<sub>2</sub> と表示したい場合 sub を使用します。
```c
CO<sub>2</sub>
```
Atomic Agents: モジュール型AIエージェントフレームワークの紹介

# Atomic Agents: モジュラーなAIエージェントフレームワークの紹介

AIの進化が著しい現代において、開発者は効率的で柔軟なAIシステムを構築するための新しいツールを求めています。その中で、**Atomic Agents** フレームワークは、モジュラー設計の原則を基にした革新的なアプローチを提供します。このブログ記事では、Atomic Agentsの特徴、利点、基本的な使い方について詳しく解説します。

## 1. Atomic Agentsとは？

**Atomic Agents**は、オープンソースのライブラリであり、マルチエージェントシステムの構築を支援します。これにより、開発者は複雑なプロンプトエンジニアリングに依存することなく、知的で協力的なエージェントを簡単に作成できます。

### 主な特徴
- **ユーザーフレンドリー**: 簡単なセットアップで強力なエージェントを迅速に作成可能。
- **柔軟性**: 様々なツールをサポートし、カスタム機能を追加することができます。
- **統合性**: OpenAIやInstructorなどの人気ライブラリと互換性があり、豊富なエコシステムを提供。
- **オープンソース**: コミュニティの貢献を促し、GitHubでソースコードを利用可能。

## 2. Atomic Agentsの利点

### 2.1 モジュール性
Atomic Agentsは、AIシステムを小さく再利用可能なコンポーネントに分解することを可能にします。これにより、開発者は特定のタスクに特化したエージェントを簡単に構築し、必要に応じて組み合わせることができます。

### 2.2 予測可能性
各エージェントは、明確な入力スキーマと出力スキーマを持ち、安定した動作を保証します。これにより、システム全体の安定性と信頼性が向上します。

### 2.3 拡張性
エージェントやツールを簡単に追加・置き換えできるため、新しい機能を持つエージェントを迅速に構築できます。

## 3. Atomic Agentsの基本的な使用方法

### 3.1 環境設定
まず、必要なパッケージをインストールします。
```bash
pip install atomic-agents openai instructor
```

### 3.2 ライブラリのインポート
次に、必要なライブラリをインポートします。
```python
import os
from atomic_agents.lib.components.system_prompt_generator import SystemPromptGenerator, SystemPromptInfo
```

### 3.3 エージェントの作成
エージェントを作成し、設定します。
```python
from atomic_agents.agents.base_chat_agent import BaseChatAgent, BaseChatAgentConfig
agent = BaseChatAgent(
    config=BaseChatAgentConfig(
        client=instructor.from_openai(openai.OpenAI()),
        model='gpt-3.5-turbo',
        system_prompt_generator=system_prompt_generator,
    )
)
```

### 3.4 チャットループの実装
ユーザーとのインタラクションを行うためのメインチャットループを作成します。
```python
while True:
    user_input = input('You: ')
    if user_input.lower() in ['exit', 'quit']:
        print('Exiting chat...')
        break  
    response = agent.run(agent.input_schema(chat_message=user_input))  
    print(f'Agent: {response.chat_message}')
```

## 4. コミュニティとの連携

Atomic Agentsの開発はオープンソースで行われており、コミュニティの貢献を歓迎しています。GitHubのリポジトリを訪れて、プロジェクトに参加しましょう。

## 5. まとめ

Atomic Agentsは、モジュラーで予測可能なAIシステムの構築を可能にします。使いやすさと柔軟性を兼ね備えたこのフレームワークは、開発者が迅速に効果的なAIアプリケーションを作成する手助けをします。興味がある方は、ぜひGitHubで詳細を確認してみてください。

### リンク
- [Atomic Agents GitHubリポジトリ](https://github.com/BrainBlend-AI/atomic-agents)
- [Atomic Agentsのドキュメント](https://gjmcn.github.io/atomic-agents/)

これからのAI開発において、Atomic Agentsがどのように役立つのか、是非体験してみてください！
JavaScriptを無効にすべきweb site

news系やblog系のweb siteではJavaScript無効にしまくっちゃいましょう。以下はその例。
* Yahoo!ニュース(https://news.yahoo.co.jp)
* gooニュース(https://news.goo.ne.jp)
* デイリースポーツ(https://www.daily.co.jp)
* スポニチ(https://www.sponichi.co.jp)
## 理由
こういったpageでは広告が大量挿入されている事が多い。得体の知れないiframe要素が大量にばら撒かれる事もざらである。その中でJavaScript大暴走祭りが展開される可能性がある。
そうなるとCPU使用率が爆上げである。冷却ファンも大忙しで電気を爆食いしちゃってくれやがるのだ。
それだけにとどまらず、大量のweb素材を読み込む事で通信量増大、描画遅延等といった愉快な事態に陥りかねない。
## 無効設定法
chromeの場合、「設定」→「プライバシーとセキュリティ」→「サイトの設定」→「JavaScript」から「JavaScript の使用を許可しないサイト」の項目にURLを追加していけばいい。
## 弊害
JavaScriptを無効にすると操作性や見栄えが犠牲になったり、機能制限がかかる事がある。しかし閲覧する上で必須と言えるものは少ないので、どうでもよい(過言)
AWSにKali Linuxをインストールする時にSSMで接続出来るようにする

# 事前準備
EC2にアタッチするロールを作成する
ロール名：ssm-role
ポリシー：AmazonSSMManagedInstanceCore

# 立ち上げ
AMIでkai linuxを選択
IAMロールに作成したssm-roleを選択

ユーザーデータに以下を入力
```
#!/bin/bash
wget https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/debian_amd64/amazon-ssm-agent.deb
dpkg -i amazon-ssm-agent.deb
```
起動させる


# 接続
```
sudo su - kali
```

以上
コネクション数やタイムアウト時間について

#### Webアプリケーションはサーバの負荷によりサービスを十分に提供できないことがあり少しでもサービスの品質を向上させる為にもアクセス数やサーバのCPUやメモリを最適に利用する必要があります。<br>その為にコネクション数やタイムアウト時間をどう設定すれば良いかまとめてみました。
![イメージ１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631882/a7a35491-8710-e2c1-3deb-39f295c1920c.png)

|No|サーバ種類|項目名|設定内容| 
|:--:|:--:|:--:|:--:|
|①-1|Web|同時接続数<br>ApacheのMaxClients|アクセスしている利用者数 × アクセスされる画面のファイル数(JavaScript、CSS、画像等)でネットワーク回線の帯域にもよるが通信速度を気にする必要がある|
|①-2|Web|タイムアウト<br>ApacheのTimeout|リクエストを受け付けてサーバー側の処理がどれくらいでレスポンスを返せるか。サーバ負荷を考慮して3秒ではなくもう少し長めに設定しておく方が良い|
|②-1|AP|最大コネクション数<br>tomcatのmaxConnections|Web同時接続数より少ない（CSSや画像等の静コンテンツは含まない為）値を設定|
|②-2|AP|スレッド数<br>tomcatのmaxThreads|並列でどれだけ処理するか。APサーバのCPUやメモリを元に調整|
|②-3|AP|タイムアウト<br>tomcatのTimeout|Webのタイムアウトより短い時間を設定|
|③-1|DB|コネクションプールサイズ<br>JDBCのmax_connections|APのコネクション数より少なく設定（DBサーバのCPUが高負荷にならない程度）|
|③-2|DB|タイムアウト<br>JDBCのqueryTimeout|DBのコネクションをすぐに開放できるように短い時間を設定（SQLはチューニングして1秒以内で終わる設定にする）|
年末最後のPON。WOLが起動しなくなった時のトラブルシューティング

こんにちは。
年末残り14時間という今日最後の仕事納めの日にWOLコントローラが
動かなくなりました。
動かし方が分かったのでもし同じ症状の人がいたらこれを参考にしてください

# 内容
先週の土曜日まで動いていたWoLコントローラーが動かなくなりました
先週までちゃんと動いていたのに今日起きたらexeファイルそのものが動かなくなりました
エラーも出ないし動かない理由が分からないです。

## 調査
### 互換性のあるバージョンで起動
試しにプロパティ＞＞互換性＞＞バージョンをwin8にして起動してみましたが動きませんでした

### パソコンの再起動
再起動してみても動きませんでした

### 環境を新しくして起動出来るか試す
これも動きませんでした
WOlsetting.xmlにMACアドレス等のデータが格納されているので
メモ帳等で開いて移せる様にした方がいいです

# 原因
Visual C++のバージョンを更新した方が良いとノートンから警告が出ていました
更新して再起動した所、動きました

年末なのに起動出来なくて仕事遅刻する所でした
良かったです。
GoのインターフェースをSwiftベースで理解する

Go言語を初めて学習した時、構造体はどのような時にインタフェースを満たすのか、理解するのに少し苦労しました。しかし、よく読み解いていくと、「あれ、これってSwiftでいうProtocolではないだろうか？」と思いました。というわけで、GoのインターフェースをSwiftベースで置き換えてみようと思います。

完全自分用の学習備忘録として残します。

### インターフェース（Go）

```go
type Vehicle interface {
	Accelerate()
	Brake()
}

type Car struct {
	color string
}

func (c Car) Accelerate() {
	fmt.Println("車が加速する")
}

func (c Car) Brake() {
	fmt.Println("車がブレーキをかける")
}

type Bike struct {
	color string
}

func (c Bike) Accelerate() {
	fmt.Println("バイクが加速する")
}

func (c Bike) Brake() {
	fmt.Println("バイクがブレーキをかける")
}

func drive(vehicle Vehicle) {
	vehicle.Accelerate()
	vehicle.Brake()
}

func main() {
	var car Car = Car{}
	drive(car)

	var bike Bike = Bike{}
	drive(bike)
}
```

以上のコードをSwiftベースで置き換えてみます。

### Swift（Protocol）

```go
import Foundation

// Vehicleプロトコルを定義
protocol Vehicle {
    func accelerate()
    func brake()
}

// Car構造体を定義し、Vehicleプロトコルに準拠
struct Car: Vehicle {
    var color: String

    func accelerate() {
        print("車が加速する")
    }

    func brake() {
        print("車がブレーキをかける")
    }
}

// Bike構造体を定義し、Vehicleプロトコルに準拠
struct Bike: Vehicle {
    var color: String

    func accelerate() {
        print("バイクが加速する")
    }

    func brake() {
        print("バイクがブレーキをかける")
    }
}

func drive(vehicle: Vehicle) {
    vehicle.accelerate()
    vehicle.brake()
}

let car = Car(color: "Red")
drive(vehicle: car)

let bike = Bike(color: "Blue")
drive(vehicle: bike)

```

### 参考記事

[とってもやさしいGo言語入門](https://zenn.dev/ak/articles/1fb628d82ed79b#%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%81%A8%E3%81%AF)
Nervesの宇宙利用について(仮題)

本記事で発表するはずだった事柄について，予定ではもうすでに採択通知を得ていたはずだったのですが，審査スケジュールが延期してしまったので，まだヒアリング審査を経ていません．採否が判明してから改めて発表したいと思います．
2024年の感謝まとめ


# 概要
・2024年も終わろうとしています。今年はいろんなことがありました。
・よかったこと、学びがあったことをまとめて感謝したいと思います。

[![25703293-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/82686bf7-7db0-3b5a-6fb9-d576ca4aab91.jpeg)](https://www.ac-illust.com/main/detail.php?id=25703293&word=%E5%B9%B4%E8%B3%80%E7%8A%B62025%E3%81%AE%E7%B8%81%E8%B5%B7%E7%89%A9%E3%81%A8%E5%B7%B3%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3203&searchId=)


::: note 
# 結論
1. まわりがすぐれた人ばかりになった
1. AIでおっさんでもプログラミングできるようになった
1. WinおじからAppleおじさんへ
1. Qiitaで発信してたことで知らんうちにアウトプットの習慣がついてた
:::

# 1. まわりがすぐれた人ばかりになった
- すでに2023年後半から始まっていたと思うのですが、まわりが技術がわかってる人ばかりになりました。
- あるいは企業内でのすぐれたファシリテーター。チームリーダー。モチベーター。

## それまでの苦労
- 2023年半ばまでは、相手に合わせ自分の歩みを遅くする必要があり、心理的な「鎖」があったと思います。
- 技術者としての生産力は40%くらいに抑え、60%を礼儀作法の塾生徒としてすごす必要がありました。
- 組織に対しての番頭・徒弟みたいな役目の人が必ずおり、コミュニケーションをしないといけないわけです。
- 社内申請だとか組織内のしきたり・作法といったマナー講師がメイン業務なので、エンジニアとは言語がちがうわけですね。
- どちらが良いというわけではなく、おたがいに見ている世界がちがう外国人同士というわけです。
- なので必然的にコミュニケーションは翻訳が必要になります。
- 結果として「自転車をこぐときはハンドルをこう持って、右手をあげて・・・」のような相互のParentingがほとんどになります。
- 「自転車の定義をしなさい。あと言葉づかいを『ははーっ上様ーっ』っぽくしなさい」
- 「『が』を『は』にしなさい」「Excel方眼紙の横幅を2ミリずらしなさい」みたいなことを延々とするわけですｗ
- IT・・・？　エンジニアリング・・・？

## 波目が変わった
- しかし幸運なことにここ1年以上、役割が明確な優秀な人だけに囲まれてすごせてきました。
- 相手もこっちもベース技術があるのでコミュニケーションのオーバーヘッドがなく、すっと会話が終わります。
- ベース技術イコール共通言語といっていいと思いますが。とにかく本題から話せばいいので楽になりました。
- 世代論にしたくないのですが、20代や30代の若い人はデジタルネイティブなので会話に心理的密度を求めず、シンプルな情報伝達に特化しているのもやりやすい理由です。
- 飲酒したければ業務じゃなくてプライベートですればいい。年功序列での雰囲気レビューや業務の私物化はダサい。そんなスマートさがあります。
- 自分のようなおっさんがやっと彼らの価値観に追いついたのか・・・？
- このような状況を適切にウォッチし、環境をファシリテートしてくれたパートナー企業さんにも感謝しています。

# 2. AIでおっさんでもプログラミングできるようになった
- まだまだつかいこなせてないんですが。
- プロンプトエンジニアリング？ってゆうやつが[ちぃ少しわかった](https://word-dictionary.jp/posts/4373)。
- AIに対して「あなたはプロフェッショナルななんとかです」って先に書くのは恥ずかしいからやってないですｗ
- 基本は「[ピアノ売ってちょーだい](https://qiita.com/minoden_works/items/b3a9c22683bae5fa3809)」スタイル。
- 中年でも開発できるようになった世の中に感謝ですね。

# 3. WinおじからAppleおじさんへ
- 過去半年のQiitaポストをごらんいただくとわかるように、Appleおじさんにポケモン進化しました。
- おもにハードウェアリサーチの集約化と断捨離、仮想化によるポータビリティが目的となります。
- 9割がParallelsでのWin11での作業になっているので、Winおじを捨てたわけではありません。WinAppleおじ。
- ウィンパイナッポォアポーペン（古い）。
- MacMiniが小さくなったり、iPadも進化している。仮想化もしやすい。こうした全体的な流れに感謝です。

# 4. Qiitaで発信してたことで知らんうちにアウトプットの習慣がついてた
- エンジニアの貢献度は、もちろんシステム構築もですが、ドキュメントを（わかりやすく）残すことが最重要です。
- Qiitaでポエムを発信してて「慣れ」もあり、アウトプットに抵抗がなくなりました。
- MarkDown方式でのノートテイク。これはものすごいポテンシャルがありますね。
- マニュアル・進捗管理・技術調査といったことをすべて集約できるふところの広さがあります。
- あとから一括変更もスクリプトでできる。変更履歴もみやすい。
- Officeアプリで書くよりも、なぜか文体もソフトになるんですよね。なんなんだろ。やっぱUIってだいじ。
- Qiitaでは大した記述方法はつかいこなせていないのですが。「慣れ」の機会をいただけたという感謝があります。


::: note 
# まとめ
総じて、人とテクノロジーの進化にめぐまれた一年だったと思います。
Qiitaで情報共有している人たち、運営の人もふくめてですが、全員同じ釜の飯を食う仲間だと思っています。
みなさんも良いお年を。
:::

[![31009797_m.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/8c9be140-b9de-86da-32b6-845649323b1d.jpeg)
](https://www.photo-ac.com/main/detail/31009797?title=%E5%B9%B4%E8%B3%80%E7%8A%B6%E7%B4%A0%E6%9D%90+%E5%B7%B3)

# 追記
BGMはこれを聴きながら書きました
https://www.youtube.com/results?search_query=coming+back+to+life+pink+floyd+guitar
#10.2024年の振り返り

# はじめに

こんにちは！nayaaaaです。

もうそろそろ、2024年も終わり、新年の幕開けも近づいて参りました。
今回は、2024年の振り返りを記事にしました！

# 2024年の活動と成果

## 1月
CCNP ENCOR の勉強に集中。
## 2月

CCNP ENCOR 合格
去年から勉強していたので、実際には 3〜4ヶ月かかってます。

## 3月〜4月
CCNP ENARSI の勉強に集中。

## 5月
CCNP ENARSI 合格

## 6月
LPIC-3 Security 合格

## 7月
AWS SAAの勉強を開始。

## 8月

MENTAサービス を契約。
この時期に AWS SAAの勉強を一度中断。

## 9月〜10月

メンターの方におすすめされた本を読んだり、課題をこなしたり、コミュニティ活動に参加。
ブログ執筆やQiita投稿 を始める。
この頃から AWS SAAの勉強を再開。
## 11月

AWS SAA 合格
今年の資格勉強の中で最も苦痛だった。。
英語の勉強を開始（現在も継続中）。
週1でQiita記事を投稿することを目標に設定（継続中）。
# 12月
社宅を追い出されそうになり、入居期間を延長してもらう。

---
普段マックで朝活（勉強）をしており、朝活を始めたのが今年の1月とか2月ぐらいで、毎日ソーセージエッグマフィンのコンビでホットコーヒーのMサイズとミルクのみを頼んでいるのですが、何も言わなくても店員さんが出してくれるようになり、常連として認知されてきており、少し嬉しいです。

資格については、途中から「理解」するというより「取得」するという感じで目的が変わっていってしまった感があり、だいぶ忘れてる部分が多いです。

業務で使わないCiscoのコマンドなどはほとんど忘れてるし、OSPFとかVRFの構築とかは少し覚えているのですが、それ以外のEIGRPとかBGPとかについては、あぁこんなのあったなぁぐらいの感じです。Cisco機器を扱うネットワークエンジニアじゃなければCCNAまでの取得でもよかったかなぁと今更ながら思います。gns3とPing-tにはお世話になりました。

# まとめ

今年の前期は資格の勉強ばかりで、実際に手を動かして勉強するというよりは、参考書や学習サイトと睨めっこ状態だったので、来年は実際に手を動かして学んだことをブログなどで発信することを増やしていきたいと思います。実際にコマンドなどを打って勉強する方が楽しいですしね。

とりあえず、今年は目標であったCCNPとLPIC3は取得できたので来年は以下の3つを目標に頑張りたいですね～

- 英語力の向上→来年の４月にTOEICを受けてみようと思う。
- MENTAの課題を進めつつ、AWSで何かを作成してみようかなと思う。余裕があればAWSの上位資格受けてみようかなぁ〜といった感じ。
- 勉強会やイベントなどに積極的に参加する。

あと、資料作成などの定型業務だけではなく、IT技術に直接触れられる案件でお仕事がしたいですね。

といった感じです。去年よりも成長できているという実感があり、目標も無事達成できたので良い気分で2025年を迎えることができそうです。

ありがとうございました～
nandgameでOS作ってみよう　#2

# サイト
https://nandgame.com/

# 前回とか
https://qiita.com/yamina-Tjatmg-Gui-Creater/items/d21d7ab2065663d9dde2

# 説明
説明するべきものを説明していませんでした。

このシリーズで使うものは、アセンブリ言語です。

ROMは0~7FFFのアドレスがあります
```
0    0
1    0
2    0
3    0
4    0
5    0
6    0
:    :
7FFF 0
```
AとDというレジスタがあります。
Aは数字を直接入れられます。　A = 31
AはROMの場所を指します
Dは一時的に数を保存するところです。

*Aというのがあります。
これはAの中身です


Aには直接値を0~7FFFまで指定できます。しかし、Dと*Aは直接数を指定できません。
全てのレジスタ(A, D)と、\*Aにはこれが指定できます。
※ただしAは負の数を入れられません。
Aは\*Aに置き換えることができます。
```
A + D
    D
    A
A + 1
D + 1
    1
A - D
D - A
  - D
  - A
A - 1
D - 1
  - 1
A & D
  0
A & 1
D & 1
A | D
A | 1
D | 1
  ~ D
  ~ A
```
### プログラム例
```
0    0055
1    106F
2    0
```
2の中に0と1の中身を足した数を入れるプログラムはこのようになります。
```
A = 0
D = *A
A = 1
D = *A + D
A = 2
*A = D
```


# 次回とかまとめ
https://qiita.com/yamina-Tjatmg-Gui-Creater/items/d21d7ab2065663d9dde2