OmniAICreator/Qiita-1.07M huggingface dataset:
VMWare Workstation Pro を久しぶりに触る⑤

## 前回のおさらい
5年ぶりぐらいに触る人間が、何分で構築できるのか、
というテーマで環境構築を進めてまいります。
前回はゲストOS(AlmaLinux)のネットワーク設定を終えたところまで。

### 5.Dockerのインストール
コンテナの動作検証をしたいため、好き勝手さわれて壊れても困らない
ゲストOS上にDocker Engineをインストールしていきたいと思います。
公式ドキュメントを参照しながら進めます！

https://docs.docker.com/engine/install/rhel/

<br/>
まずはdnf-plugins-coreのインストールをしろとな

```
sudo dnf -y install dnf-plugins-core
```

<br/>
えぇぇ、すでにインストールされているじゃん

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826192/f234b2a8-a9e8-4ce1-1567-ee1462fe38b1.png)

<br/>
気を取り直して、リポジトリを登録します

```
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
```

<br/>
秒で終了。そりゃそうですよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826192/856ed074-1355-c71b-b4f3-fd4023757310.png)

<br/>
では、ようやくDockerのインストールです。

```
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
<br/>
2回ほど確認されますが、「y」を入力して、無事完了！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826192/d1ef509c-1c2d-1af2-fa4f-6737848bed69.png)
<br/>
起動時に自動で立ち上がる設定にします

```
sudo systemctl enable --now docker
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826192/d7aa54b7-4f56-fd00-11e4-8fe238f99c7b.png)

<br/>
以上でおわりなので、hello worldで締めようと思います。

```
sudo docker run hello-world
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3826192/f62f7577-5343-1572-b065-efbeac70b12f.png)

おおー、普通に動いたっぽいですね。
明日はDockerを動かしていきます。
”グループ管理者” という権限、ご存じですか？

この記事をご覧の方の中にはBoxの管理をされている方も多いと思いますが、
Boxの部署フォルダ/拠点フォルダはどのように管理されているでしょうか。
元情シスの私が「これめちゃくちゃ良い！！」と思った「グループ管理者」という権限をご紹介します。

<hr>

<h3>例えば、こんな場面で効きます：</h3>
:zap:拠点フォルダや部署フォルダ、プロジェクトフォルダごとに管理者を置いて"フォルダとファイル"レポート、"ユーザーアクティビティレポート"などを出力させたい！
<br>
:zap:だけど、共同管理者権限は情シスメンバー以外には付与したくない！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/12aefeab-d7a7-31f4-3bc3-e9cf8dfcba1c.png)


<h3><font color=#0061D5><strong>そんなときは、「グループ管理者」 で解決！！</strong></font></h3>

<br>


<strong>「管理者」 </strong>が管理コンソール上で管理対象ユーザー設定から割り当てられるロールは<strong>「メンバー」 </strong>もしくは<strong>「共同管理者」 </strong>なので、もしかすると<strong>「グループ管理者」 </strong>という権限を設定できることをご存じない方も多いのではないでしょうか。

（メンバー/共同管理者の設定画面）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/e26ee392-5ce9-e329-87b9-33c66185f0a6.png)

<br>

グループ管理者は [管理コンソール] > [ユーザーとグループ] > [グループ] から任意のグループを選択した画面で割り当てることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/89eca658-e796-017a-6d49-3f89cd4852e7.png)

<br>

そうすることで、「グループ管理者」の権限を割り当てられた野比のび太でブラウザからアクセスすると、[管理コンソール]が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/1c5fc241-d44f-8751-08f7-ffd1f2a25fba.png)

<br>

[管理コンソール]から、グループが招待されているフォルダに関する一部のレポートを出力することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/f7578e47-ebe7-ec40-6b1f-85f262bd679d.png)

<br><hr>

<h3><font color=#0061D5><strong>設定いただく際の注意点</strong></font></h3>

<strong><font color=#0061D5>注意点１：</font></strong>
グループ管理者を新規で指名する場合、指名されたユーザがレポートを出力するにはルートフォルダに[Box Reports]というフォルダが作成されている必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/90e45ce6-7870-4378-0b6e-3ad66a2aca16.png)

このフォルダをルートフォルダへ作成するには管理コンソールから ”管理者にのみ第1レベルのフォルダ、ファイル、ブックマークの作成および削除を許可する” のチェックをフォルダ作成の瞬間だけ外してあげる必要がありますのでご注意ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/72189ac5-fad8-ec27-2a04-af58c595d6da.png)

<br>

<strong><font color=#0061D5>注意点２：</font></strong>
「グループ管理者」権限を割り当てる際、[管理コンソール] > [ユーザーとグループ] > [管理対象ユーザー]からグループ権限の詳細を設定してあげる必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/db53db4b-94df-b906-2f0f-6b6cf76ec23d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/9afac7c6-ed3c-80d4-9f25-af55c53ab59e.png)

<br>

<strong>（上手くいかない場合は以下点も確認してみてください）</strong>

    ▲ レポートを出力したのに見たいフォルダが含まれていない！
:point_up:グループがフォルダにコラボレーション招待されていますか？
<br>

    ▲ グループ管理者のUI上に[管理コンソール]が表示されない！

:point_up:グループに対してグループ管理者は割り当たっていますか？

<br>

（参考までに、今回お見せしているグループの設定です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/7bdfffe8-cd89-03ae-7b81-9be996735eec.png)

<br>

<h2>（参考資料）</h2>

<a href="https://cloud.box.com/s/o9tib5qe4sx77c2i6ty9caqktk5vdsum">![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620648/d568114b-0cf1-d753-f697-2a01105115d6.png)</a>

<br>

<hr>

<h3>さいごに・・・</h3>
<br>
多数の業務をお持ちの中、Box ”も” 管理されている方が多いかと思います。<br>
今回ご紹介した権限をご利用いただくことで管理の負担を分散することができますし、より適切なメンバーが管理をすることができるようになります。<br>Boxにはたくさんの機能がございます。より最適に、スマートに、管理ができるよう機能を駆使していきましょう！
[Amazon Web Services]AWS re:Invent2024 レポート#2 「Aurora DSQL - 常時利用可能なアプリケーション向けデータベース」

AWS re:Inventでは直接的な学習型セッションの他に、スポーツやEXPOなどの少し娯楽寄りのコンテンツがあります。イベント期間中、少しでも多くを体験をしようとスケジュールを詰めていましたが、不思議と疲れがたまらないのは「よく遊び、よく学ぶ」ということができているからだと思いました。この精神は今後も大切にしたいなぁと。

さて今回は学習です。先日12/3 AWS CEOのMatt Garman氏の基調講演にて、個人的に特に気になったアップデートがありましたため調査してみました。

## Aurora DSQL - 常時利用可能なアプリケーション向けデータベース
### アップデート概要
AWS が新しいサーバーレス分散 SQL データベース、「Amazon Aurora DSQL」 のプレビューを発表
- 革新的なアクティブ/アクティブ分散アーキテクチャ備えた高可用性
- 実質的に無制限のスケーラビリティ
- 単一リージョンで99.99%、マルチリージョンで99.999%の高可用性を実現
https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-aurora-dsql-preview/

### 改善点詳細 - AuroraとAurora DSQLの比較
Amazon Aurora DSQLの特徴は上記となりますが、
既存サービスとの変更点が分かりにくくかっため、今回はAuroraとAurora DSQLについて、
非機能要件を比較させていただきました。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html（RDSユーザーズガイド）
https://docs.aws.amazon.com/aurora-dsql/latest/userguide/what-is-aurora-dsql.html（Auroraユーザーズガイド）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822026/3368b1a9-e87b-ce2a-c917-50ef4eef96d2.png)


これまでのAuroraと比較して、
インフラストラクチャ管理が不要な点はそのままに、
Aurora DSQLは可用性、拡張性、耐障害性がさらにパワーアップしており、
「常時利用可能なアプリケーション向け」のソリューションとなっているようです。

Aurora DSQLのアーキテクチャ概要やその他利点については、
下記に記載がございますため、ご参照をおすすめします！
https://aws.amazon.com/jp/blogs/database/introducing-amazon-aurora-dsql/ (AWS データベースブログ - Amazon Aurora DSQL のご紹介)
売り子として持って行って良かったもの、悪かったもの

本記事は、「技術同人誌/技術を取り巻く様々な執筆 Advent Calendar 2024」の12/6担当分の記事になります。

自分は、技術書典14から売り子として現地に参加しております。その中で、現地で役立ったもの、役立たなかったもののベスト３をそれぞれ上げたいと思います。

## 役にたったものベスト３

### 第3位　モバイルバッテリー

豊橋からの参加なので、移動時間が長いんです（しかもiPhoneSE2なので、もうバッテリーが……）。スマホの充電もそうなのですが、Atom3S系を使った**おもちゃ**を持っていくので、それ用のバッテリーとして活躍してます。
AtomS3を動かすだけであれば、2000円ぐらいで売ってる安価なモバイルバッテリーでも十分使えます。

👇自分は、コレ使ってます

https://jp.daisonet.com/products/4560348442444?srsltid=AfmBOorBz9gQYvIAS9RoGh4BcB1QyTYrs-Y92t64FXA_iaVpKHnxYIII

### 第2位　お品書きボード

こちらは、ダンプラにお品書きを印刷したA4のチラシを貼ったものです。
置いて飾っても良し、見本がすべて見られてる際は、こちらのボードを渡して、見本があくまで待ってもらうもよし。
使い勝手が非常に良かったです。
ダンプラなので、100均で買えますしね！


https://x.com/_0447222690292/status/1852883190941422057

### 第1位　沸騰したヤカンのデモ

今回、「大自然の中心でコーヒーをいただく」というチェアリング本を書いたのですが、そのネタように作ったものです。
Atom3Sにサーボモータをつなげ、棒が上下に動くように指示することで、夜間の蓋がカタカタと揺れ、沸騰しているように見えるものです。

動きのあるものは、一目を引くので足を止めてくれたり、チラ見してくれたり。
湯気が出せれば最高だったのですが、それはまた、次のお話（笑）



https://x.com/_0447222690292/status/1852886648083865719

## 役にたたなかったものベスト３

### 第3位　名刺

オフラインイベントなので、普段会えない知り合いに出会得れば、自然と名刺交換かな…と思って、持って行ったのですが、誰も名刺交換なんてしてないです（笑）

ただ、サークルとかコミュニティの名刺はあった方がいいかもしれません。


### 第2位　メモ帳　

あればあったで、なんか役に立つだろう。と思っていたのですが、メモを取る程のことがなく（笑
まぁ、大きいモノではないので邪魔ではないですが、あっても使わない感じでしたｗ

### 第1位　動画垂れ流し用のiPad

毎回持って行って失敗するので、今回は持っていくのをやめました（笑）
 * 単純に重たい
 * 折角持って行って動画を流しても、足を止めてくれる人は皆無
 * そのくせ、バッテリー＆モバイルバッテリーがすぐに減ってしまう
 * 準備がめんどい（端末に動画をダウンロードしないといけないので）


ちなみに、次点でQRコード。
印刷して準備しておいても、誰も自分からQRを読み取ってくれる人はいません💦


次回、技術書典に参加される方の参考になれば幸いです。

--
普段はnoteに記事を書いてます。
技術書典ネタも何本か書いていますので、よかったらみてやってください。

https://note.com/kerdy/m/m9905c84a81ca
6日目: ModIntを実装する

[競プロ用ライブラリを作る Advent Calendar 2024](https://qiita.com/advent-calendar/2024/yukkku-ribitol)の6日目です.

https://qiita.com/advent-calendar/2024/yukkku-ribitol

# ModIntって?

競プロでよく出題される「$998244353$で割ったあまり」みたいな問題形式で楽に計算するための型です.

ここでは32bitの静的に法が決まっているModIntを実装します.

# 仕組み

頑張って演算子オーバーロードをします.
以下, MODの数を$M$と置きます. $998244353$とかの数です.

## 除算

除算は$M$が合成数でも大丈夫なように, [オイラーの定理](https://w.wiki/3JbF)というのを使います.
オイラーの定理は何かしらの整数$a$が$M$と互いに素なとき
```math
a^{\varphi(M)} \equiv 1 \mod M
```
が成り立つ, というやつです. ここで$\varphi(M)$は「$1$以上$M$未満で$M$と互いに素な整数の個数」です. これをコンパイル時に計算できるように`const fn`で実装します.

### φ関数

$\varphi(M)$の値は$M$を素因数分解した結果から計算できます.

$M$を素因数分解した結果を
```math
M=\prod_{i=1}^N p_i^{r_i} = p_1^{r_1}p_2^{r_2}p_3^{r_3}...p_n^{r_n}

```
と書けるとき (ただし, 異なる$i,j$について$p_i\ne p_j$と, 任意の$i$について$r_i\ne 0$が成り立つ)
```math
\varphi(M) = \prod_{i=1}^N (p_i-1)p_i^{r_i - 1} 
```
と計算できます. 実装するのは32bitのModIntなので試し割り法でも十分速いです.

# 実装

- [`modint.rs`](https://github.com/Yukkku/ribitol/blob/main/src/modint.rs)

Rustには定数ジェネリクスがあるのでそこに$M$の値を渡せる実装にしました.
$M$の値に応じて`u32`と`u64`を切り替える, みたいなこともしたかったんですが, Rustだと厳しそうです. こういうときにC++の優位性が出てきますね.

演算子のオーバーロードは全部ちゃんと書いてるとすごい量になるのでマクロを使って効率的に行いましょう.

# まとめ

いかがでしたか?

明日は同じくMoから始まる名前のものを実装します.
ABC242Eを解いた【回文】


筆者はレート800前後の茶～緑コーダ

ABC242のE問題を解いていく

https://atcoder.jp/contests/abc242/tasks/abc242_e

# 実装コード

公式解説の抜粋

A=0,B=1,...Z=25と見立てた26進法を考える。

上位N//2文字が何番目か、それより前の回文はカウントするので確定、また、そしてその文字の後ろを回文に揃えたとき、元の文字より前か後ろかでカウントするかどうかが変わる。

```python:main.py
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rI1(): return (int(sys.stdin.readline().rstrip())-1)
def rLI1(): return list(map(lambda a:int(a)-1,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

class ModInt:
    def __init__(self, x, mod = 998244353):
        self.mod = mod
        self.x = x.x if isinstance(x, ModInt) else x % self.mod
    __str__ = lambda self:str(self.x)
    __repr__ = __str__
    __int__ = lambda self: self.x
    __index__ = __int__
    __add__ = lambda self, other: ModInt(self.x + ModInt(other).x)
    __sub__ = lambda self, other: ModInt(self.x - ModInt(other).x)
    __mul__ = lambda self, other: ModInt(self.x * ModInt(other).x)
    __pow__ = lambda self, other: ModInt(pow(self.x, ModInt(other).x, self.mod))
    __truediv__ = lambda self, other: ModInt(self.x * pow(ModInt(other).x, self.mod - 2, self.mod))
    __floordiv__ = lambda self, other: ModInt(self.x // ModInt(other).x)
    __lt__ = lambda self, other: self.x < ModInt(other).x
    __gt__ = lambda self, other: self.x > ModInt(other).x
    __le__ = lambda self, other: self.x <= ModInt(other).x
    __ge__ = lambda self, other: self.x >= ModInt(other).x
    __eq__ = lambda self, other: self.x == ModInt(other).x
    __ne__ = lambda self, other: self.x!= ModInt(other).x

class mint(ModInt):
    pass

A2Z = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
d = {s:i for i,s in enumerate(A2Z)}

def main():
    T = rI()
    
    for _ in range(T):
        N = rI()
        S = rS()
        
        ans = mint(0)
        for i in range((N-1)//2+1):
            ans*=26
            ans+=d[S[i]]
            err(S[i],d[S[i]],ans)
        T = list(S)
        l,r=0,N-1
        while l<r:
            T[r]=T[l]
            l+=1
            r-=1
        # err("".join(T),S,"".join(T) <= S)
        if "".join(T) <= S:
            ans+=1
        print(ans)
    # print('Yes' if ans else 'No')
    
if __name__ == '__main__':
    main()

```

# まとめ

ABC242のE問題を解いた。

今回のポイントは、アルファベットを26進数に見立てる点だと実装しているうちに感じた。そのような発想が出るような地力を今後もつけていきたい。
HackSynthの可能性：LLMを活用した自律型ペネトレーションテストの未来像

# HackSynth: 自律型ペネトレーションテストの新たなフロンティア

今回は、画期的な研究成果である「HackSynth: LLM Agent and Evaluation Framework for Autonomous Penetration Testing」をご紹介します。この論文は、サイバーセキュリティ分野において自律型ペネトレーションテストエージェント（PTエージェント）を実現するための包括的なフレームワークを提案しています。

---

## 論文情報
- **タイトル**: HackSynth: LLM Agent and Evaluation Framework for Autonomous Penetration Testing  
- **リンク**: [arXiv:2412.01778](https://arxiv.org/abs/2412.01778)  
- **発表日**: 2024年12月2日  
- **著者**: Lajos Muzsai, David Imolai, András Lukács  

---

## 背景と目的

### ペネトレーションテストとは
ペネトレーションテストは、システムやネットワークの脆弱性を検出し、潜在的なセキュリティリスクを軽減するために行われる模擬攻撃です。近年のサイバー攻撃の急増に伴い、その重要性がますます高まっています。

#### 従来の手法の課題
1. **人的リソースの限界**  
   - 高度な専門知識が求められるため、適切な人材の確保が難しい。
2. **拡張性の欠如**  
   - 複雑化するシステム（クラウドやIoT）に対応するには手動操作が非効率。
3. **ツールの限界**  
   - NessusやSnykのようなスキャナーは既知の脆弱性には強いが、新規性の高い攻撃には対応しにくい。

### HackSynthの必要性
HackSynthは、従来手法の限界を克服し、以下を目的としたエージェントです：
- **完全自律型エージェント**によるスケーラブルなペネトレーションテストの実現。  
- LLMを活用した創造性と適応性のある脆弱性発見。  
- 標準化された評価基準の提供。

---

## HackSynthのアーキテクチャ

HackSynthは、PlannerモジュールとSummarizerモジュールを中心とした2つのモジュールで構成されています。

### Plannerモジュール
- **役割**:  
  システムの現在の状態を分析し、次のステップに進むためのコマンドを生成。  
- **技術詳細**:  
  - インプット：Summarizerが提供する過去の履歴情報。  
  - アウトプット：実行可能なコマンド（例: `nmap`, `curl`, `grep` など）。  
  - 生成アルゴリズム：コマンドの選択にはトークン確率を用い、タスクを最適化。

### Summarizerモジュール
- **役割**:  
  各コマンドの実行結果を要約し、次の計画に必要な文脈を提供。  
- **技術詳細**:  
  - インプット：実行コマンドの出力。  
  - アウトプット：要約された履歴情報（例: 成功した操作、次のステップで必要な情報）。  
  - トリミング戦略：観測ウィンドウサイズを制御して冗長性を削減。

### 動作フロー
HackSynthは以下のプロセスを反復的に行います：
1. Plannerが新しいコマンドを生成。  
2. コマンドをコンテナ化環境で実行。  
3. Summarizerが結果を要約し、次のコマンド生成に反映。  

---

## 提案ベンチマークの設計

HackSynthの性能評価のために、PicoCTFとOverTheWireという2つの主要ベンチマークが使用されました。

### ベンチマークの特長
- **多様性**: 6つのカテゴリ（Cryptography, Web Exploitation, Reverse Engineeringなど）をカバー。  
- **動的フラグ**: 時間やユーザーごとに変化するフラグで、事前学習による解決を防止。  

### PicoCTF
- **課題数**: 120  
- **難易度**: Easy, Medium, Hard  
- **例**: 暗号解読やシステムログ解析を含む。

### OverTheWire
- **課題数**: 80  
- **特徴**: Linux操作やWeb脆弱性の実践的スキルを要求。

---

## 実験結果の詳細

### パラメータ最適化
- **Observation Window Size**:  
  - 250文字が最適値として選定され、無駄なデータを排除しつつ必要な情報を保持。
- **Temperature**:  
  - コマンドの創造性を維持するために1.0に設定。  
- **Top-p Sampling**:  
  - 0.9が適切な多様性を提供。

### モデル間比較
| モデル          | PicoCTF課題解決数 | OverTheWire課題解決数 |
|----------------|------------------|--------------------|
| GPT-4o         | 41/120           | 32/80             |
| Llama-3.1-70B  | 27/120           | 23/80             |

---

## 安全性と倫理的課題

HackSynthが抱えるリスクには以下が含まれます：
1. **誤ったターゲットスキャン**  
   - 無関係なIPアドレスを攻撃対象とする可能性。  
2. **リソース消費**  
   - メモリを過剰使用する操作で環境を不安定化。  

これらの問題を防ぐため、ファイアウォールやコンテナ化環境で制限を設けています。

---

## 将来の展望

HackSynthは次のような改良が期待されています：
1. **グラフィカルデータ解析**  
   - GUIの解析能力を追加。  
2. **オンライン競技への参加**  
   - CTF競技に自律的に参加し、人間のプレイヤーと競争。  
3. **強化学習の応用**  
   - 人間のフィードバックを活用し、モデルの精度向上を図る。  

---

この記事が、皆さんの研究や実務に役立つことを願っています。ご質問があれば、ぜひコメントでお知らせください。
AWS App Studioを使ってみた

はじめまして。
システムアイのアドベントカレンダーの6日目を担当させていただきます。
今回はAWSの**App Studio**を利用して、ToDoリストアプリを作成したいと思います。

# AWS App Studioとは
2024年7月にプレビュー版が公開された、自然言語でアプリを構築できる生成AIサービス・本番公開は有料

# App Studio利用準備
※事前に以下準備が必要となります。
・IAM Identity Center Account
・Amazon CodeCatalystスペース

①App Studioの開始ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/6e502381-ca57-6cdc-c4b2-12786603a578.png)

②インスタンス作成画面が出てくるので、
管理者グループとビルダーグループを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/13ed6add-52b1-9d68-76f9-eaee51bb7b05.png)

③確認事項にチェックを入れ、設定をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/44ea1390-f13c-fd53-a161-a7c71f7c1f94.png)

セットアップに30分ぐらいかかるので待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/cb0262f0-2cb1-1662-ebc6-24032f91bb29.png)

# 利用開始
セットアップが完了したら、ログインし、アプリを作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/a6c2fe10-cf0a-8d14-ac21-5e07cb1f1210.png)

①マイアプリケーションより、名前を入力します。
今回は、AIを利用して作成していくので、
上を選択・次にを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/1d4c46ea-30e8-61b0-6b18-c3e090977f4d.png)

②次にデータソースを選択する画面が表示されますが、今回は設定せずに、スキップをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/2dcdaba8-0d08-e612-00f7-78713c3c86a7.png)

1～2分待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/eedcaa65-2be2-e87f-d74e-6a0697c795ab.png)

③プロンプトを入力する画面が表示されました。
右がサンプルプロンプト使用・左が自分で一から要件を入力するようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/4d9f2408-0611-28a8-ceb8-6858df0e5974.png)

今回は自分で要件を入力してToDoリストアプリを作成していこうかと思います。

# ToDoリストアプリ作成
①要件を入力してみました。日本語で入力しても、認識はされますが、英語で返ってきます。

使用例・ユーザフローも作成してくれました。(優秀！)
genarate appをクリックして、作成してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/bce6b1e8-46ec-a76c-58d5-ac36e5efe288.png)

②どのように作成されたか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/cf226864-f411-f334-238c-1ccc898af1f5.png)

③タスクを作成してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/036be17a-7407-8620-dde6-57960927e0cf.png)

④右側のボタンより、タスクを削除・③の画面に戻り編集もできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/f3b34cbc-1127-c41d-f9c4-9d81f0bdb97d.png)

toggleボタンより、③のタスクの編集画面で完了にしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/ac5838fc-f7df-a9c1-f881-8bbc54164517.png)

⑤完了にしたタスクが、tureと表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/27c427e0-8f51-7222-aac0-4af8bf83bac3.png)

※編集画面で画面・処理等編集も可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927637/8419ff9e-521a-8fb2-c9e1-1c0b51b55ded.png)

一部自分がイメージした通りには作成されなかったので、うまく一度で要件を伝えるのは難しく感じました。
データベース基礎理論の正規化について

## はじめに

本日は、データベース基礎理論の重要な概念である「正規化」についてまとめます。

## 本文

### 正規化とは

**正規化（Normalization）** とは、関係データベースの設計において、一定のルールに従ってリレーション（関係）を分解し、データの冗長性や更新異常を排除するプロセスです。

### 正規化の目的

正規化の主な目的は、データの一貫性と整合性を保ち、**更新時異状**を排除することです。更新時異状には以下の3種類があります。

- **タプル挿入時異状**: 新しいデータを挿入する際に、必要のないデータまで入力しなければならない問題
- **タプル更新（修正）時異状**: あるデータを更新する際に、複数の場所を変更しなければならず、一部の更新漏れによってデータの不整合が生じる問題
- **タプル削除時異状**: データを削除する際に、必要な他のデータまで一緒に削除されてしまう問題

正規化を行うことで、「**1箇所1事実（1 fact in 1 place）**」が実現できます。データの重複をなくすことで、データ更新時に複数箇所を修正する必要がなくなり、整合性のあるデータベースを構築できます。

更新時異状は、データの冗長性や不適切な設計から生じます。例えば、顧客情報と注文情報が同じテーブルにある場合、顧客情報を変更するときに複数の行を更新する必要があり、更新漏れが起きやすくなります。正規化によりデータを適切に分割し、更新時異状を防ぐことでデータの信頼性が向上します。

### 正規化を行わない場合

正規化を行うことで更新時異状は排除できますが、逆に以下のような場合には正規化を必ずしも行う必要はありません。

- **データの更新を行わないもの**: 参照専用のデータベースなど、データが変更されない場合
- **データの履歴を残すもの**: 過去のデータをそのまま保持する必要がある場合
- **高速化が特別に必要なもの**: パフォーマンス重視で冗長性を許容する場合

正規化はデータの整合性を高めますが、テーブル数が増えることで結合処理が増え、クエリの性能に影響を与えることがあります。そのため、データの更新が不要なデータウェアハウスや分析用途のデータベースでは、あえて正規化を行わない「**非正規化**」を採用し、データアクセスの高速化を図ることがあります。

### 正規化の種類

正規化を行うことで得られるリレーション（関係）を**正規形**と言います。正規形には以下の6種類があります。

1. **第1正規形（1NF）**
2. **第2正規形（2NF）**
3. **第3正規形（3NF）**
4. **ボイス・コッド正規形（BCNF）**
5. **第4正規形（4NF）**
6. **第5正規形（5NF）**

ほとんどの場合は第3正規形までの正規化を行います。ボイス・コッド正規形、第4正規形、第5正規形は特殊なケースで適用します。

### 関数従属性

正規化を理解するための重要な概念に**関数従属性**があります。これは、ある属性Xの値が決まれば、別の属性Yの値が一意に決まるという性質です。記法として`X → Y`と表し、このときXを**決定項**、Yを**従属項**と言います。

関数従属性は、データ間の依存関係を示します。例えば、社員IDが決まれば社員名が一意に決まる場合、社員ID → 社員名という関数従属性が成立します。この関係を明確にすることで、データを適切に分割し、正規化を進める基礎となります。

### 導出属性の排除

データベースの属性の中には、他の属性から計算で導き出せる**導出属性**があります。例えば、`金額 = 単価 × 数量`で求められる金額は導出属性です。正規化の過程で、導出属性は冗長性を減らすために取り除かれることが多いです。

しかし、更新が行われない場合や履歴を残す必要がある場合、性能を向上させるために、あえて導出属性を残すこともあります。

導出属性を排除すると、データの一貫性が保たれますが、都度計算が必要になるため、クエリ性能に影響を与えることがあります。そのため、アクセス頻度が高い場合や計算コストが高い場合は、導出属性を格納しておくことで性能改善を図ることができます。設計時には、データの整合性と性能のバランスを考慮することが重要です。

### 情報無損失分解

正規化を行う際、適切にリレーションを分解しないと、元の情報が失われることがあります。**情報無損失分解**とは、分解したリレーションを自然結合（JOIN）したときに、元のリレーションに復元できる分解方法を指します。これにより、データの完全性を保ちながら正規化が可能となります。

情報無損失分解を実現するためには、分解後のリレーション間に共通のキー（主キーや外部キー）が必要です。これにより、データの結合時に全ての組み合わせが正確に再現され、データの欠落や重複が防止されます。正規化では、この分解方法を慎重に行うことが重要です。

### メタデータ

データには、データそのもの以外に、データについてのデータである**メタデータ**があります。メタデータは、データの構造や定義、属性、制約条件などを表す情報で、データベースの設計や管理において重要な役割を果たします。

メタデータは、データディクショナリやデータカタログとして管理されます。これにより、データの意味や関係性、データ型、制約などを一元的に把握できます。メタデータは、データの再利用性や互換性を高め、データガバナンスやデータ品質の向上に寄与します。

## まとめ

今回は、データベース設計における正規化の基本概念とその目的についてまとめました。正規化は、効率的で信頼性の高いデータベースを構築するために欠かせないプロセスです。次回は、具体的な正規化の手法や各正規形について詳しくまとめていきます。
大きな勘違い

<br>
この記事は東京海洋大学NePPの Advent Calendar 2024の５日目です。

# はじめに
今年の10月からNePPに入った大学１年生です。そのためプログラミングに関して**超**初心者です。
圧倒的な知識不足のため、今までとは毛色の異なる記事ですがご容赦ください。

# 私がしてた勘違い
そんなこのサークルに入ったばかりの私は、プログラミングについて**大きな勘違い**をしていました。
<br>
![download.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946215/5c41d71a-5785-2f88-e4f2-c38114453fee.jpeg)

黒色の背景に緑色のコード。
そしてパソコンと睨めっこしながらカタカタカタカタ、、、

このいらすとやのイラストがまさに私が思い描いていたものです。

こんなの絶対なれないな、、なんて思ってました。
<br>
「いくらなんでもアニメの見すぎじゃないですか？」なんて思われるかもしれませんが、**２つの記事**を見るまではこう思ってたんです。

# 実際はこうだった
https://zenn.dev/nyanchu_program/articles/53fcd365d48153

https://note.com/specially198/n/n661b2785f924

・コードを全部覚えるわけではない
・どう探し出していくのが大事

ふと目にした記事ですが、いままでなんとなくモヤモヤしていたのが晴れた気がしました。

# まとめ
今までのイメージがぶっ壊されたことでプログラミングに対する壁が圧倒的に低くなった気がします。
イメージがぶっ壊されただけで自分の能力が上がってるわけでもないです。知識は周りに到底及ばない状況です。
ただ、やることがたくさんある中で、少しずつでもプログラミング続けていけたらなと思います。
拙い文章でしたが、読んでくださりありがとうございました。
モンスター AI

こんにちは、hattoriです。
普段はゲーム会社で主にAIの開発をしています。

今回の記事では、モンハンライクなゲームをclusterでつくりたいなと思っていたのですが、今日までには遊べるところまでいきませんでした...ごめんなさい🙇‍♂️

今はドラゴンがただ寝ているだけなんですが、週末にまさにモンハンライクなゲームをつくるのにぴったりなテーマでゆるゲームジャムが開催されるので、ゲームジャム期間には遊べるようにしようと思ってます...！
https://cluster.mu/w/d3c7dfa0-ea8c-4e50-bd62-c224e5beb76a
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2241831/d658ef97-3bb1-62ea-8421-21a7744e7861.png)

なぜモンハンライクなゲームを作りたいと思ったのか理由だけは最後に添えさせていただくと、
1. AI開発において、オンラインPvEの「敵AI」がゲームの楽しい体験に効果的だなとあらためて思っている
    (今年のオンラインPvEの話題作の「HELLDIVERS 2」もすごい盛り上がっていたり、賞もいくつか取られていたり)
2. モンハンワイルズの遊ぶハードルが結構ある
    1. 遊びやすいモンハンライクなゲームはニーズがあるんじゃないかな...と
3. そもそもモンハンがゲームがオンラインになる時に企画されたゲームでもある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2241831/0418286e-ccde-8db2-d821-b533ac913034.png)

https://www.capcom.co.jp/ir/hit.html

の3つが理由です！
もちろんclusterならではのより良いゲームシステムはあると思います！！
clusterで「一狩りいこうぜ」ってなんですかね
わからないことを理解するための知識ネットワーク

# はじめに
:::note info

この記事は[LITALICO Engineers Advent Calendar 2024](https://qiita.com/advent-calendar/2024/litalico) カレンダー1の6日目の記事です
:::
こんにちは。2024年4月に新卒で入社したばかりの新人エンジニア、@zacky_50です。

現在はレセプト基盤グループに所属し、**請求基盤の開発**に携わっています。この請求基盤とは、障害福祉におけるサービス利用料を正確に計算し、保険料として請求するためのシステムです。このシステムの開発には、障害福祉や保険制度に関する**ドメイン知識**が欠かせません。

しかし、新卒でこの分野に触れるのは初めてだった私は、こうした知識が圧倒的に不足していました。それに加え、開発経験もほとんどなく、エンジニアリングスキルも十分ではない状態からのスタートでした。

こうした状況に限らず、新しい分野や未知のトピックに直面したとき、多くの人は「わからないこと」の多さに圧倒されることがあると思います。特に、専門用語や新しい概念が次々と出てくる場面では、どこから手をつければよいのか分からず、前進が難しく感じることもあるでしょう。

実際、私も最初の頃は新しい技術や業務に取り組む際、その分野の専門用語や概念を十分に理解できず、何から手をつけるべきか迷うことがよくありました。

そんな中で試行錯誤するうちに、私は知識をネットワークのように捉える方法を見つけ、「わからない」を少しずつ「わかる」に変えていくことができました。今回は、私がどのようにして未知の分野に取り組み、理解を深めていったのか、その方法についてお話しします。



# 知識をネットワークとして捉える

新しい分野や未経験の業務に取り組むとき、多くの人は、目の前に広がる「わからないことの海」に圧倒されるのではないでしょうか。私もまさにその一人でした。次々と現れる専門用語や概念に圧倒され、どこから手をつければよいのかわからない――そんなことが何度もありました。

そこで試してみたのが、知識を**ネットワークとして捉える**という方法です。具体的には、ひとつひとつの用語や概念を「点（ノード）」として扱い、それらの間にある関係性を「線（エッジ）」で結びつけるイメージを持つというものです。こうすることで、個々の知識が孤立せず、全体の中での役割や位置づけが徐々に見えてくるようになります。

例えば、新しい技術やシステムの専門用語を学ぶとき、その単語の意味を調べるだけでなく、ほかのどんな用語と一緒に使われているのかを意識します。「この概念はこの仕組みの一部なのか」といった関連性を見つける作業を繰り返していくうちに、全体像が少しずつ形作られていきます。

こうしたアプローチを続けることで、「わからないこと」は単なるバラバラな点ではなく、ネットワークとして捉えられるようになりました。ネットワークが大きくなるにつれ、最初は漠然としていた「わからないこと」が、全体の中での位置づけとともに理解できるようになりました。



# 知識ネットワークを構築する

ここからは、私が実際に行っている「知識ネットワーク」の構築方法を具体的に紹介します。この方法は、新しい分野に取り組む際、未知の用語や概念を整理し、全体像を把握するのに役立ちます。

1. **ノード（点）として概念や用語を整理する**  
   まず、学ぶべき単語や概念を「点（ノード）」としてメモします。たとえば、「オブジェクト指向」や「クラス」といった技術用語がノードの例です。この段階では、すべてを完全に理解する必要はありません。ただ単語を「気になるリスト」に登録する感覚で拾い集めます。

2. **エッジ（線）として関係性を見つける**  
   次に、ノード間の関係性を「線（エッジ）」として結びつけます。たとえば、「クラスはオブジェクト指向の構成要素である」といった情報をエッジとして記録します。この作業を繰り返すことで、知識が単なる羅列から関連性のあるネットワークへと変わります。

3. **ネットワーク全体を可視化する**  
   ノードとエッジが増えるにつれ、全体像が見えてきます。中心的なキーワードを起点に関連情報が広がる様子を視覚的に捉えることで、学ぶべき優先順位や関連性を把握できます。



# 知識ネットワークの利点

知識をネットワークとして整理することで、私は以下のようなメリットを感じています。

1. **全体像の把握**  
   個々の情報がどう関連しているかが一目でわかります。これにより、重要な概念を優先的に学ぶことが可能になります。

2. **柔軟な学習が可能**  
   中心的なノードから学びを進めたり、枝葉の情報を掘り下げたりと、自分の興味や必要性に応じて学習の流れを調整できます。

3. **新たな視点の発見**
    知識ネットワークが広がることで、これまで気づけなかった新たな視点を得ることができます。最初は単語の意味すら不明だったとしても、ネットワーク全体の中でその役割や重要性を理解できるようになれば、より深い知識の定着へとつながります。

4. **未知へのストレス軽減**  
   「わからないこと」を具体的に記録し、整理することで、未知への不安が軽減されます。個人的には、これが最も大きなメリットだと感じています。最初は「何も知らない」と圧倒されがちですが、知らないことをメモしてネットワーク化することで、それを具体的な問題として捉えられるようになります。このプロセスにより、漠然とした不安が減り、「どこから学び始めればよいのか」が明確になります。
   例えば、技術用語や概念に出会ったとき、それらを関連付けて整理すると、周囲の情報が少しずつ理解できるようになり、次に進むための道筋が見えてきます。このように、「わからないこと」を具体的に扱うことで未知に対するストレスが軽減され、学習がスムーズに進むようになります。


# まとめ: 知識はネットワークでつながる

「知識ネットワーク」を構築するという方法は、私が試行錯誤の中で見つけた一つのアイデアです。一見すると地道で手間のかかる作業に思えるかもしれませんが、わからないことが多い状況でも少しずつ理解を深め、学習を進める助けとなるアプローチです。

未知の分野に飛び込むとき、最初は不安や戸惑いを感じることもあるでしょう。しかし、ひとつひとつ点をつなげていくことで、全体像が見え始め、自信を持って次のステップに進めるようになります。

あくまで一例ですが、ぜひこの方法を参考にしてみてください。気づけば、あなたの中に広がる知識のネットワークが、新たな発見や学びを後押ししてくれるかもしれません。

それではよいインプットライフを！
明日は@ryunosuke_sakoの記事です。お楽しみに！
M5 Base AAA 単4電池ホルダーでM5Stack LLM Moduleを使ってみる

:::message
🎄この記事は、M5Stack Module LLM Advent Calendar 2024 に参加してます。
:::
# 【LLMって莫大な電力が必要なの？】
生成AIのLLM(Large Language Mode)と言えば、ChatGPTやChatGPT、Gemini、Claudeと色々ありますよね。しかし最近は各社、LLMを動かすには電力不足で、原発を立てるニュースをよく耳にします。
**AIデータセンター急増､電力爆食の懸念　Google原発投資**

https://www.nikkei.com/article/DGXZQOUC171IE0X11C24A0000000/

## 手元で動くLLMの進化
一方、LLMはどんどん効率化※されて、ローカルPC、スマホ、シングルボードで動かせるLLMが出てきました。そんな中、登場して来たのがM5Stack社の製品です。
※推論は効率化されて必要なメモリ量も減ってきましたが、学習には引き続き高価な高速/大容量システムが必要です

# 【M5Stack LLM Module】
## 低消費電力でLLMを実行
原発が必要とニュースになっているLLMが、M5Stack社のドキュメントによると、1.5wで動くそうです。もちろん同じ処理でも同じ速度でもありませんが「マイコンでLLMの時代の始まり」を感じて、購入してみました。
「AX630C SoC プロセッサを搭載し、Transformer モデルをネイティブにサポートする 3.2 TOPs の高効率 NPU を統合～中略～メインチップはTSMCの12nmプロセスを使用して製造されており、実行時の消費電力は約1.5Wで、高効率で長時間の動作に適しています。(Google翻訳より)」
**M5Stack LLM(large language model) Module (AX630C)**
https://docs.m5stack.com/en/module/Module-llm

## M5 Base AAA 単4電池ホルダー
M5Stack LLM Moduleは単体でも動きますが、作られた意図は M5Stack (ESP32)のオプションとしてのようです。そこで、M5Stackを動かすための乾電池モジュールで、このLLM Moduleも動かすことができるか、テストしてみました。
**M5 Base AAA 単4電池ホルダー**

https://www.switch-science.com/products/8525

# 【電池でLLMが動いた！】
M5Stack Core2にUSBを接続すると電源が入ったため、AAA 単4電池ホルダーでは電源が入らないと思いましたが…

https://x.com/UtaAoya/status/1857201359919161433

スイッチを2段階で押せば、普通に使えることが分かりました！

https://x.com/UtaAoya/status/1857562750459039941


# 【最後に】
電池で動くLLMハードを初めて見ました！しかし、これはシングルボード LLMの始まりであり、既にM5Stack社から次のプロトタイプの写真が公開されていました。2025年が楽しみです！

https://x.com/M5Stack/status/1863800168929546487
【Mac】ローカル AI アシスタント「Jan」の導入方法

## Jan とは
Janは、ローカルで実行できるChatGPTの代替ツールです。

https://jan.ai

## 導入方法

### インストール

Homebrewを使用してインストールするには以下のコマンドを実行します。

```terminal
brew install --cask jan
```

https://jan.ai/docs/desktop/mac#install-jan-with-homebrew

### モデルをダウンロードする

インストールが完了したら使用するモデルをダウンロードします。

以下画像の赤枠のアイコンをクリックするとモデル一覧が表示されます。

![https-qiita-image-store.s3.ap-northeast-1.amazonaws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/c233bb32-1740-efd2-62e3-7962b0ca68ee.png)

ダウンロードするモデルを選び、`Download`ボタンをクリックします。
するとダウンロードが開始されます。

![スクリーンショット 2024-12-05 23.36.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/0a4a5c69-b0d2-5193-b15b-8c7c0480045c.png)

### モデルを使用する

ダウンロードが完了すると`Use`ボタンが表示されます。

![スクリーンショット 2024-12-05 23.55.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/67c64208-9ebc-55b9-3fdf-cf757ee3c0df.png)

`Use`ボタンをクリックするとチャット画面が表示されます。

![スクリーンショット 2024-12-05 23.55.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/64a106fd-c90a-6f2d-d76e-a054002e5509.png)
Docker、はじめてみました (Part 1)

GitHub、はじめてみました (Part 1)の知識を習得済みと想定しています
※ 本記事ではMacbook上の説明をしていますが、基本的にWindows WSL2でも使えます

## 本記事で目指すところ
Dockerfileを保存するGitHubレポジトリを作成する
このレポジトリからpullすれば必要な環境構築を行える
プロジェクト横断的な汎用性の高いレポジトリ

## GitHubで新規レポジトリ作成
今回は<レポジトリ名>を**dockerfiles**にします
.gitignore, README.mdはローカルで作成して追加します
LICENSEだけ追加しておきましょう

## ローカルにclone
```zsh:zsh
# リモートリポジトリをローカルにクローン
git clone git@github.com:<GitHubユーザー名>/<レポジトリ名>.git <レポジトリ保存先へのパス>
```

## README.md を作成
```zsh:zsh
echo "# タイトル" > README.md
nano README.md
```
README.mdの例
```plaintext:plaintext
# Dockerfiles Repository

このリポジトリには、R、Python、Groovyのアプリケーション用Dockerfileをまとめています。

## ディレクトリ構成

以下の言語ごとにディレクトリを作成し、対応する`Dockerfile`を配置しています。

- `r/`: Rアプリケーション用Dockerfile
- `python/`: Pythonアプリケーション用Dockerfile
- `groovy/`: Groovyアプリケーション用Dockerfile

## 使用方法

各ディレクトリ内に移動し、Dockerイメージをビルドしてください。

### 1. リポジトリをクローン
```bash
git clone <リポジトリのURL>
cd <リポジトリ名>
```
## .gitignore 作成例
```plaintext:plaintext
# Logs and temporary files
*.log
*.tmp

# Docker-related files
*.tar
*.img

# Python-specific
__pycache__/
*.pyc
*.pyo
.env

# R-specific
.Rhistory
.RData
.Rproj.user/
.Rproj

# Groovy-specific
*.class
*.war
*.jar
.idea/
.gradle/
build/

# IDE/Editor specific
.vscode/
*.swp
.DS_Store
Thumbs.db
```

## 作業内容のコミットとリモートレポジトリへの反映
```zsh:zsh
git add README.md
git commit -m "Add README.md"

git add .gitignore
git commit -m "Add .gitignore"

# リモートにプッシュ
git push origin main
```
GitHubのレポジトリページで変更内容が反映されたか確認してみてください。

# 最後に
今回の内容は簡単だった〜

:::note info
**この時点で知っておくべきTipsや基本的内容があればぜひコメントください！**
:::
【Rustのまほう2】#7 コンポーネントいろいろ

Bevyのエンティティは様々なコンポーネントの集合体で、たとえば位置を指定する`Transform`コンポーネントというものがあることは紹介しました。ほかにも、サードパーティーで提供されるコンポーネントもあれば、Bevy組み込みのコンポーネントもあります。ここでは、主にBevy組み込みのコンポーネントからよく使うもの、重要なものを簡単に紹介します。

# `Name`コンポーネント

`Name`コンポーネントはBevy組み込みのコンポーネントで、エンティティの名前を指定します。たとえば、[3日目の記事](https://qiita.com/hiruberuto/items/b5d0f970ab1ed9fe2183#bevy-inspector-egui)で紹介したデバッグ用のプラグイン`bevy-inspector-egui`では、デフォルトではコンポーネントの名前が表示されますが、`Name`コンポーネントをエンティティに追加することで、表示されるときの名前を変更できます。これによって、一覧から絞り込むときにも便利になります。

# `Parent`コンポーネント/`Chilidren`コンポーネント

エンティティは親子関係を持つことがあります。`Parent`や`Children`は親子関係を辿るための特殊なコンポーネントです。これはエンティティの生成時には直接指定するものではなく、Bevyが自動的に管理します。今後の記事で**クエリ**を扱うときに、もう少し詳しく紹介したいと思います。


# `Visibility`コンポーネント

エンティティの表示非表示を切り替えるコンポーネントです。非表示にするにはエンティティを削除してしまう手もありますが、多少は重い処理になりますし、普通は`Visibility`で切り替えます。以下の三種類があります。

- 親の表示状態を継承する `Inherited`
- 親の表示状態に関わらず隠す `Hidden`
- 親の表示状態に関わらず表示する `Visible`

また、通常はあまり直接使うことはないと思いますが、親の表示状態を累積で計算した `InheritedVisibility` や、条件に応じて表示を切り替える `ViewVisibility` というものもあります。たとえば、画像を表示する`Sprite`コンポーネントは画面から外れると、`ViewVisibility` が `false` となり、画像描画のための不要な処理が省かれます。このあたりは内部的に勝手に処理されることなので気にしなくて大丈夫なのですが、知識として知っておくとトラブルシューティングで役に立つこともあるでしょう。



# `StateScoped`コンポーネント

`StateScoped`は、ゲームの状態が切り替わったときに自動で削除するエンティティを指定するためのコンポーネントです。

たとえば、タイトル画面にタイトル画像のエンティティを生成したとして、ゲーム本編に進んだらさきほどのタイトル画像のエンティティは削除します。このとき、削除のコードを手動で書くこともできますが、それはかなり煩雑になりやすいです。そこで、タイトル画面`Title`とゲーム本編`InGame`という**ステート**を定義し、`Title`から`InGame`へとステートが切り替わったときに、`StateScoped(Title)`コンポーネントを含むエンティティを自動的に削除できます。

この`StateScoped`コンポーネントは個人的にはかなり重要だと思います。使い方は**ステート**で紹介するかもしれません。


# さいごに

具体的なコードも無ければ、スクリーンショットもないので、読んでてなんともピンとこない記事になってしまいました……。いやでもコンポーネントはBevyの中核でして……。あまり地味な話ばかりでは面白くないので、次回は少しゲーム内容の話ができたらと思います。
useEffectなぜ２回走るのか？

この記事は海洋大技術系サークルAdvent Calendar 2024 の1日目のものです！


https://qiita.com/asahina820/items/665c55594cfd55e6f14a

https://zenn.dev/moozaru/articles/ea35f6d234e356

## 背景

今まで特に意識していなかったが、今回機能としてアラートを表示させようとしたところ、２回表示されてしまった。
ユーザビリティ的にアラート表示は一回のみにしたいと考えた。

最初は、useEffectなどのフックが悪さをしていると思い、それについて詳細に調べ、(内容は後日記事にします)
理解したところで、２回表示されている原因について考えてみたが、やはりうまく言語化できない。

## 結論

StrictModeによるもので、開発環境のみ２回実行されるらしい。
どうしても鬱陶しい場合には、https://zenn.dev/moozaru/articles/ea35f6d234e356　この記事に書かれているようにしてみるといいかもしれません。

自分は、機能が実装できていればよいと考えたので、上記の内容は試していません
Advent of code 2015 Day 25 を Livebook で楽しむ

## はじめに

Advent of code 2024 の準備として、過去回の Advent of code 2015 を Livebook で楽しみます

本記事では Day 25 を解きます

問題文はこちら

https://adventofcode.com/2015/day/25

実装したノートブックはこちら

https://github.com/RyoWakabayashi/elixir-learning/blob/main/livebooks/aoc/2015/2015_day25.livemd

:::note info
Day 25 の Part 2 はエンディングになっていて、パズルはありませんでした
:::

## セットアップ

Kino AOC をインストールします

```elixir
Mix.install([
  {:kino_aoc, "~> 0.1"}
])
```

Kino AOC の使い方はこちらを参照

https://qiita.com/RyoWakabayashi/items/3d3abcf9134cee4dff05

## 入力の取得

"Advent of Code Helper" スマートセルを追加し、 Day 25 の入力を取得します

![スクリーンショット 2024-12-05 23.37.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/ffe1e02b-2c0d-2422-3fa8-003c515a4927.png)

## 私の答え

私の答えです。
折りたたんでおきます。
▶を押して開いてください。

<details><summary>回答</summary>

まず、行と列から「何番目のコードなのか」を取得します

斜めに増えていく数字は三角数です

https://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E6%95%B0

$$
T_n = \frac{n(n+1)}{2}
$$

何番目の対角線なのか、は `行番号 + 列番号 - 1` で求めることができます

```elixir
get_index = fn r, c ->
  k = r + c - 1
  div(k * (k - 1), 2) + c
end
```

例えば 3 行目、 2 列目を求めてみます

```elixir
get_index.(3, 2)
```

実行結果

```elixir
8
```

n 番目のコードは以下の式で求めることができます

$$
(20151125^{n-1}) mod 33554393
$$

しかし、 n が膨大な数字の場合、計算に時間がかかりすぎます

そこで、繰り返し二乗法を使用して計算量を抑えます

https://qiita.com/ophhdn/items/e6451ec5983939ecbc5b

```elixir
defmodule WeatherMachine do
  @initial 20_151_125
  @modulo 33_554_393
  @multiplier 252_533

  def get(r, c) do
    generate(get_index(r, c) - 1)
  end

  defp get_index(r, c) do
    k = r + c - 1
    div(k * (k - 1), 2) + c
  end

  defp generate(n) do
    power = mod_exp(@multiplier, n, @modulo)
    rem(@initial * power, @modulo)
  end

  defp mod_exp(_, 0, _), do: 1

  defp mod_exp(base, exp, mod) do
    if rem(exp, 2) == 0 do
      half = mod_exp(base, div(exp, 2), mod)
      rem(half * half, mod)
    else
      rem(base * mod_exp(base, exp - 1, mod), mod)
    end
  end
end
```

3 行目 1 列目で実行してみます

```elixir
WeatherMachine.get(3, 1)
```

実行結果

```elixir
16080970
```

実際の入力で実行します

```elixir
WeatherMachine.get(2947, 3029)
```

</details>

## まとめ

問題文から ChatGPT に画像を生成してもらいました

![aoc2015_day25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/8c967560-7a61-035d-af85-26531192aac2.png)

数学の勉強になりました

これで、 AOC 2015 はコンプリートです！

コンプリート達成後のカレンダーはなかなか見応えがありますね
ControlDeskのInstrumentのデザインいろいろ

## 1. はじめに
ControlDeskのInstrumentは初期設定だとお世辞にも見やすいとは言えません．
見やすくするためのTIPSを集めました．
※追記していきます．

## 2. 基本的な考え方
こういうレイアウトのソフトウェア共通の考え方ではありますが，
`properties`パネルを眺めてそれっぽい英単語を見つけるだけです．

## 3. おすすめの設定
### Numeric Input
**桁数を固定**
Target: Nemeric Input, Display

特にDisplayの標準の桁数が小数点18桁くらいあって見にくい限りです．
`Properties > Variables > Display formats > Converted`
1. Use Variable's settingsのチェックを外す ☐
2. Use precisionにチェック ☑
3. Precisionの数値を変更

**右揃え**
`Properties > Numeric Input > Text properties > Text alignment`
を→| Rightにする

**フォントサイズ**
1. `Properties > Numeric Input > Text properties > Text font`
の右側の▼をクリック． 
2. `Use custom font settings`にチェック☑を入れます．
3. デフォルトは8と小さいので16~20あたりまで大きくすると見やすいです．

**インクリメント**
スピンボタン(数値の右側の▲と▼)のステップ数を変更できます．
デフォルトでは1になっています．アクチュエータの指令値が少数点オーダーのときにクリックすると一気に上限に達するなど危険なので変更しておくといいと思います．
それに，キーボードで毎度消して入力してを繰り返すのは面倒ですからね．
`Properties > Variables > Increments > Mode`
1. デフォルトのUse variable settingsをAdditive-Fixedに変更
2. Small increments: 1回クリックしたときの幅 Big increments: 長押ししたときの幅を変更．

**レンジ**
数値入力できる範囲を制限することができます．
Simulinkのsaturationブロックを使用するとは思いますが，入力値に制限がある場合は設定しておくと便利です．
1. `Properties > Numeric Input > Range check > Range check mode`
をDisabled→Enabled
2. `Use variable range`のチェックを外す
3. Range min.とRange maxに最小値と最大値を入力する．

before → after
![design_numeric.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/ca9fa262-c808-01e7-4738-7f06a6e874be.png)

### Display
Displayのフォントサイズはデフォルトで自動調整されます．
**桁数を固定**
Displayの場合これは<Font color="#FF0000">マスト</font>だと思います．
設定方法はNumeric Inputと同様です．

**右揃え**!

`Properties > Display > Numeric display > Alignment`
を→| Rightにする．

**フォントサイズ**
`Properties > Display > Numeric display > Font`
の設定をNumeric Input同様変更．


before → after
![design_display.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/bce392b5-53df-c01c-06f4-000c61be78a0.png)

### Time Plotter
Time PlotterのProperteisはPlotterのどこをクリックしているかで内容が変わります．


![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/7c3af974-7444-9ec3-de11-256afc39bfd1.png)

**同一プロット内で縦軸を分ける**
デフォルトだとPlotterに2個以上のVariableが連動されると左下に小さなスクロールバーで出現し，縦軸が共通化されて見にくくなってしまいます．
センサごとなどまとまりごとに縦軸を分割して別のグラフにしたい場合はStacked viewにするといいでしょう．
`Properties > Plotter > View`をScroll view → Stacked viewに変更．

**Y軸ラベル**
デフォルトではIn 1やIn 2などScopeブロックに入力されている端子の番号が表示されています．
色のついたSignalブロックにカーソルを当てれば何のVariableかわかりますが直感的ではありません．
任意のラベルを付ける方法です．
- y軸ラベル付近をクリック
- `Properties > Y-Axis > Label`の{%VARIABLE%}を消してvelocitiesとかわかりやすい言葉に変えます．
デメリットはデータの描画幅が狭くなることでしょうか．

**線色を変える**
`Properties > Signal > Color`で変えます．
黒背景に青が見にくいんですよね．

**背景を変える**
そもそも真っ黒背景に青色が見にくいだけで，背景色を変えるという選択もあります．
Plotterの`Properties > Common > Background`をグレー(0xff808080)にするとデフォルトの色構成（赤→緑→青→黄→水→桃）でも見やすくなります。

before → after
 ![design_timeplotter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/c361706c-7e14-6446-a944-3a0c3e9fbbca.png)

### button
※後日記載

### frame
※後日記載

### GaugeやBar Instrumentsを使ってみる
※後日記載

### 写真をInstrumentに埋め込む
※後日記載
<!-- 色変更 numeric input button frame -->
「安全なWebアプリケーションの作り方」で example.jp にアクセスすると 502 Bad Gateway が発生した際の対応方法

# はじめに
M1 Mac を macOS バージョン 15.1.1 にアップデートした後、「安全なWebアプリケーションの作り方」の実習環境で FireFox を使用して http://example.jp/ にアクセスした際、502 Bad Gateway エラーが発生しました。この問題の解決に少し苦労したため、対処方法をまとめておきます。

ちなみに、M1 Mac では VirtualBox が利用できないため、Docker 版の実習環境を使用しています。なお、OS アップデート前は問題なく 200 OK が返ってきていました。

# エラー内容
FireFox の画面には次のようなエラーが表示されていました。
```perl
An exception occurred while attempting to connect to: http://example.jp/
The exception was: 
example.jp: nodename nor servname provided, or not known
The following document may be of assistance in resolving this failure:
https://www.zaproxy.org/faq/why-cant-zap-connect-to-my-website/
```

# 対応方法
エラーの原因は、OWASP ZAP の設定が意図せず変更されていたことでした。以下の手順で解決しました。

1. ZAP の設定確認
メニューから [設定] > [Network] > [ネットワーク] を開きます。

2. 変更前の設定
ホスト: localhost
ポート: 8080

3. 変更後の設定
ホスト: 127.0.0.1
ポート: 13128

4. 上記の設定を保存して再度アクセスすると、正常にページが表示されるようになりました。

# 結論
macOS のアップデート後、ZAP の設定が変更される場合があるため、エラーが発生した際はネットワーク設定を再確認することが重要です。
GAS ウェブアプリとしてデプロイしている処理のログをスプレッドシートに出力してみる

## 概要

ウェブアプリとしてデプロイしているGASのスクリプトのログをスプレットシートに出力する方法を簡単にまとめる。

## 前提

ウェブアプリとしてデプロイし、POSTリクエストで動作するGASのコードは下記

```js
function doPost(e) {
  Logger.log('関数は実行されました');

  // オブジェクトの定義
  const data = {
    message: "Hello, World!",
  };
  
  const jsonData = JSON.stringify(data); // jsのオブジェクトからJSONを生成
  const jsonOutput = ContentService.createTextOutput(jsonData); // GASから返すコンテンツを作成
  jsonOutput.setMimeType(ContentService.MimeType.JSON); // 返すコンテンツのMimeタイプを明示的にJSONに設定
  
  return jsonOutput;
}
```

## 方法

1. post_logという名前でスプレットシートを作成（筆者はわかりやすいようにGASのファイルと同階層にpost_logのスプレットシートを追加した。）

    ![CleanShot 2024-12-05 at 23.19.11@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/fc40ae39-5c28-6aac-5f2b-65c71f347771.png)

1. post_logのスプレットシートを開き、スプレットシートのURLからスプレットシートのIDを確認・メモ（スプレットシートのIDはスプレットシートのURLの`/spreadsheets/d/ここがスプレットシートのID/edit`の「ここがスプレットシートのID」の部分を確認）
1. 下記のようにGASのコードを修正

    ```js
    function doPost(e) {
      // スプレッドシートIDを指定
      var spreadsheetId = 'スプレットシートのID';
      
      // スプレッドシートを開く
      var sheet = SpreadsheetApp.openById(spreadsheetId).getActiveSheet();
      
      // ログをスプレッドシートに追加
      sheet.appendRow(['関数は実行されました', new Date(), JSON.stringify(e.parameters)]);
    
      // オブジェクトの定義
      const data = {
        message: "Hello, World!",
      };
      
      const jsonData = JSON.stringify(data); // jsのオブジェクトからJSONを生成
      const jsonOutput = ContentService.createTextOutput(jsonData); // GASから返すコンテンツを作成
      jsonOutput.setMimeType(ContentService.MimeType.JSON); // 返すコンテンツのMimeタイプを明示的にJSONに設定
      
      return jsonOutput;
    }
    ```

1. GASのコードをデプロイ
1. デプロイ時に下記が出たら「アクセスを承認」をクリック

    ![CleanShot 2024-12-05 at 23.35.40@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/180493f6-d5dc-e979-776e-b6e8721ade79.png)

1. 警告が出る可能性があるが、自身が作ったスプレットシートに自身のGASでアクセスするだけなので権限を付与

    ![CleanShot 2024-12-05 at 23.36.32@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/3529f07f-7a99-96a2-e804-8f9e087c2588.png)

1. デプロイ後のウェブアプリのURLをコピーしPOSTのリクエストを送信（筆者は自前のSlackコマンドと当該のGASを紐づけているので、そちら経由で実行してみる）
1. スプレットシートを確認し、下記のようにログが出ていたら完了

    ![CleanShot 2024-12-05 at 23.43.21@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/9faa6d65-4cdb-517f-0d67-1c585fc9f295.png)

## 参考文献

https://qiita.com/miriwo/items/b43654cba1235f331a75

https://qiita.com/miriwo/items/3632dc9cea32cf072039
現場を伸ばすQAマネジメント事例

# はじめに
QAマネージャーの皆さんは、一緒に働くメンバーの育成に当たり、日々様々な苦労をされているかと思います。
そんな中、最近私のチームでは、メンバーの成長を感じる機会が何度もありました。
今回は、具体的にどういう取り組みが成長に繋がったか、実例をご紹介したいと思います。
育成に悩む皆さんの、参考になれば幸いです。

# 1.前提
正社員/契約社員メンバーを対象とする
基本的にゲームタイトルのQA管理者として単独で動けるレベルのメンバーを対象とする

# 2.実際の取り組み例

|| 取り組み   　| 詳細 |具体例                      |
|:--|:-----------------------|:--------------------------|:----------------|
|**1**|**やりたいことを聞く** |将来のビジョンやQAとしてやりたいことを聞き、可能な範囲で目標に取り入れる|・自動化に挑戦したい<br>・新規案件を担当したい<br>・マネジメントをしたい |
|**2**|**責任ある立場にアサイン**   |何らかの責任者、リード、管理者へアサインする|担当タイトルのQA責任者としてアサインする
|**3**| **上位レイヤとの連携強化**|部長やシニアマネージャー等に報告、共有する機会を作る| 月次の障害状況を部長へ直接報告しFBをもらう|
|**4**| **期待していることを伝える**|組織として担ってほしいか役割を背景含めて伝える| 将来の役割を目標年、年単位の計画を立てる|
|**5**| **育成に携わってもらう**|自身の経験や技術を指導する機会を設ける| アルバイトメンバーの育成担当としてアサインする|
|**6**| **QA技術の積極的な活用**|各種ソフトウェアテスト技法等、技術知見を実務に応用する| ケースレビューの際、意識的に技術的なFBを行う|
|**7**| **事業/業界の興味を促す**|自社の事業や、業界の情報を積極的に取り入れる機会を設ける|業界に関するセミナー、TGC等への参加を推進する|


# 3.取り組みの結果
**1.なりたい姿とやりたいことを聞いたら**
　将来に向け必要なこと、やりたいことを**自発的に相談/提案/推進**してくれるようになった

　例) 品質課題のあるプロダクトに対して、自動化の提案とその推進を自発的に進めた
  
**2.責任ある立場を担当してもらったら**
　テストにおける課題や障害発生の際、防止策の**検討や提案が積極的に行える**ようになった

　例) 担当プロダクトの実装遅延に対するアラートやその対策を自発的に行えるようになった

**3.マネージャー以上の職位との連携機会を持ってもらったら**
　部長の意図や必要な情報を認識でき、**アウトプットの質が上がった**

　例) 組織的な視点で障害の情報整理や分析ができ、障害レポートの品質が向上した

**4.期待していることを伝えたら**
　組織の中の役割やその意図を明確にすることで、目標や日々の**業務の解像度が上がった**

　例) チーム全体の障害管理を担い、他プロダクトの状況も把握し視野が広がった

**5.育成に携わってもらったら**
　人員管理や育成の視点で、**一段高い視座からチームを見る**ことができるようになった

　例) アルバイトの育成でモチベーション管理の実績を自身にも応用できるようになった

**6.QA技術の業務での積極活用を促したら**
　実務で使うことにより、より**技術知見が高まり、他メンバーへの教育**にも繋がった

　例) テスト技法を前提としたレビューのFBを行うことで、設計者の知見向上に繋がった
 

**7.会社/事業/業界への興味を促したら**
　チーム内での**業界情報の共有が活発**になり、最新状況の業務活用を意識できた

　例) TGSへの参加で業界のコンソールシフトを認識。意識的に学んでいく動きが取れた


# 4.まとめ
**・メンバーとコミュニケーションを取り、聞くこと、話すこと、伝えること、が大切**
**・マネージャーの仕事は責任を取り、やりたいことや目標に応じた割り振りを行うこと**
**・マネージャー自身も会社や業界に興味を持ち、先頭に立って共有や発信をする姿勢が大切**

# 最後に
いかがでしたでしょうか。
もちろん、マネジメントの方針はチームやメンバーの状況に応じて様々に変わります。
ただ、最終的に大切なことは、メンバーが前向きに業務に取り組める状況を作ることだと思っています。
そのための手段として、今回は実際に私のチームでの例を紹介しました。
やり方は様々だと思うので、ぜひチームやメンバーにあったやり方を模索してみてください。
AppleWatchのPASMOが急に使えなくなった話（解決済）

## はじめに
この投稿は、私が所属するKDDIテクノロジーで行っているアドベントカレンダーの12日目の記事となります。
会社では映像配信やXRサービスの開発・支援を行っています。
が、今回はただの雑記なので会社や技術の話とはあんまり関係ありません。

## 普段のAppleWatchの使い方
iPhone14ProにリンクしてPASMOを設定し、コンビニでの料金支払いや通勤時にピッとすることでスマートに支払いを行うことに便利に使えています。
音楽の再生停止にも使い、家の鍵もQrio LockにしてAppleWatch盤面の鍵から開けるなど便利に使いすぎていて、もはやAppleWatchをせずに外に出られないくらい重宝しまくっている状態です。

## 悲劇の始まり
なんとなくiPhoneを見たらソフトウェアアップデートのお知らせが来ていたので、時間もあったので即時アップデートを実行。iOS18.1.1にアップデートされました。
夜にアップデートしたのでアイコンなど見た目もかなり変わり、「今回はえらい変わったなー」ぐらいの感想でした。

## 一夜明けて
テレワーク主体なので時間があり、コンビニに買い物に行きました。
いつものように支払いの際にピッとAppleWatchをかざすもうんともすんとも。
店員さんもいつもAppleWatchで支払いをしているので「変ですね？」と心配してくれました。
こちらのレジで試してくださいとレジを変えてくれる始末。今思うとほんますみません…。
結局支払いができず現金で支払って退散。現金も持って行ってて良かった。

## AppleWatchを疑う
この時点ではまったく情報を調べず、ひとまず家に帰ってから（OSアップデートのせいか？）と思う。
iPhoneのAppleWatchのアプリを見るとWatchOSのソフトウェアバージョンアップが来ている。
これだな！と勝手に結論し、WatchOSを10.6.1にアップデート。
（勝ったな！）と思い、その日は終了。

## コンビニ再挑戦
次の日、またコンビニに買い物に行き、AppleWatchで支払いに挑戦。
反応しないｗ
また現金支払いに変えてすごすごと家に戻る…

## やっと調べる
AppleWatchでの支払いに慣れすぎていたのでこれが使えなくなるのは痛い。
というより明日出社予定なので駅の改札を通れないのは困る。
調べると、iPhoneからAppleWatchにPASMOやSUICAなどを設定すると、初回登録ではエクスプレスカードという機能が登録され、認証なしで支払いが出来るようになるとのこと。
そんなモードがあったことさえ意識していなかった。だって自動登録だからな。

そして[設定]→[ウォレットとApple Pay]→[エクスプレスカード]を見たら、「なし」になっていた。
これをエクスプレスモード→記名PASMOを設定、これで使えるようになるっぽい。
（勝ったな！（2回目））と思い、その日は終了。

## 嘘でしょ、設定できない…
次の日、出社前に自販機でドリンクを購入時に買えるようになっているか確認するためAppleWatchでの支払いを試みる。が、動かない。えー。
設定をもう一度見ると、なんとエクスプレスカードからPASMOが外れている。
なんでやねん！とAppleWatchの[設定]から[ウォレットとApple Pay]、[エクスプレスモード]→[記名PASMO]をオンにすると、くるくるとWaitが回った後、「設定できませんでした」となってまたオフに戻ってしまう。

## 諦めて初心に立ち返る
こうなったら、一度AppleWatchからPASMOを削除して再設定しかないなと思い、AppleWatchのウォレットアイコンを押下、PASMOを選択して下までスクロール、削除を実行。
iPhoneからWatchアプリ起動、[ウォレットとApple Pay]→[カードを追加]→[以前ご利用のカード]→[記名PASMO]を選択。これでどうだ！

## こいつ動くぞ！
ということで、この再登録時に勝手にまたエクスプレスカードとして設定されたのでやっとエクスプレスモードがオンになりました。やったぜ！これで改札を通れる。
AppleWatchの設定からもエクスプレスモードをオン/オフに切替と戻ってもオフになっていないことを確認して改札にかざすと…ピッ！やっと許された…。
会社について自販機でもPASMOが使えたのでひとまず安心。

みんなもエクスプレスモードが急に使えなくなったらさっさと諦めてカードを再登録しよう！

## 余談
・エクスプレスモードを無理に設定しなくても、都度ダブルクリックする手間が許せる人は設定しなくてもよい。
でもタッチする際にAppleWatchの盤面をくっつけるからボタン押しにくくない？って思うけど、意外と盤面をこっち側に向けていても反応するのでそれでもいいのかもしれない。
どっちにしろ、改札については普通、時計を左手に付けていて右側にかざすという変な体勢になるのでおすすめはできない。

・同僚にこのことを話したら同じようにAppleWatchで支払いしている人だったが、OSバージョンアップでそんなことにはなっていないとのこと。えー。
5分でつくる議事録GPTs


https://chatgpt.com/g/g-6751abf3aa848191b1571db5af260c91-myyi-shi-lu

## 議事録GPTsのつくり方
大きく2つです。

:::note
1. プロンプト
1. ナレッジファイル
:::

## 1. プロンプト

まずはGPTsをつくっていきます。GPTsは[有料版](https://openai.com/ja-JP/chatgpt/pricing/)(Plusプラン以上)を利用しているユーザーであれば作ることができます。

ChatGPTのユーザーアイコンから「**マイGPT**」を選択します。

![スクリーンショット 2024-12-05 223410.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986141/d332ead5-a3bf-4fa2-0e7c-8f81e6dabfda.png)

「**マイGPTを作成する**」を選択します。

![スクリーンショット 2024-12-05 223434.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986141/42688975-bebf-7267-16e6-ef56adce01b4.png)

画面の左側で設計ができ、右側ではデモをすることができます。
「**作成する**」ではなく「**構成**」を選択します。

![スクリーンショット 2024-12-05 224730.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986141/d19ff0f5-f8a7-9ca2-1bc0-b951960b6a94.png)


「**名前**」と「**説明**」の欄に好きな言葉を入れます。適当にそれぞれ
- 名前： My議事録
- 説明： 会議データから要約された議事録をつくります

としました。

### プロンプトは次のようにしました

```
# 命令文
ユーザーが入力またはアップロードした会議データをもとに、指定されたフォーマットに沿った議事録を作成してください。
以下のガイドラインに従って、会議の内容を整理し、明確でわかりやすい議事録を作成してください。

# ガイドライン
1. 見出しの構成
  - 大見出しや小見出しを適切に使用して、議事録の構成を論理的で分かりやすくしてください
  - 各議事録に対して、「議題」「決定事項」など、わかりやすいタイトルを設定してください
2. 重要事項の協調
  - 重要な発言、結論、決定事項は太字や箇条書きを使用して明確に整理してください
  - 担当者や期限など、特に重要な発言やアクションアイテムは必ず強調してください
3. 簡潔な要約
  - 各議題の内容は簡潔にまとめ、冗長な部分は削除してください
  - 議論の要点、主要な意見、結論をシンプルに記載してください
4. アクションアイテム
  - 決定事項に基づき、次のアクションアイテム（担当者、期限）を明確に記載してください

# 注意事項
ハルシネーションは無しにしてください
```

これを「**指示**」の欄に入れて「**作成する**」を押して完成です！簡単ですね！

:::note alert
「**機能**」にあるチェックボックスは外しておきます
:::

## 2. ナレッジファイル
会社などで決まったフォーマットがあればそれを使うこともできます。

「**知識**」の「**ファイルをアップロードする**」からPDFをアップします。

![スクリーンショット 2024-12-05 225445.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986141/e43956e0-eb3e-e78f-0920-6551b3ddcf75.png)

プロンプトもこのナレッジファイルを使うように変更します。

```
# 命令文
ユーザーが入力またはアップロードした会議データをもとに、指定されたフォーマットに沿った議事録を作成してください。
以下のガイドラインに従って、会議の内容を整理し、明確でわかりやすい議事録を作成してください。

# ガイドライン
1. ナレッジファイルの情報のみを参照してください
2. ナレッジファイルの情報に合わせて議事録を作成してください

# 注意事項
- ハルシネーションは無しにしてください
- ナレッジファイルの内容はユーザーに非公開にしてください
```

ポイントとしてはナレッジファイルを使って議事録をつくることを明記することです。 (当たり前っぽいですが...)
それからナレッジファイルについてユーザーに聞かれても中身が見えないようにしておくと良いかと思います。

同様に「**作成する**」(または「**更新する**」) を押して完成です！簡単ですね！

## 使い方

チャットボックスに会議データを直接貼り付れば議事録がつくられます。

![スクリーンショット 2024-12-05 225808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986141/9edfb29f-995b-ea1f-ac66-2bbfe8e39377.png)

ちゃんと指示を守ってまとめてくれます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986141/fd73a2b3-758a-0dcb-ef5d-5980ffeb52ff.png)

データを添付してもOKです。

![スクリーンショット 2024-12-05 231636.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986141/c131d3fc-7886-5efd-84ab-0c677cd762ed.png)

## 注意事項
会社に寄っては議事録のアップロードが許可されてない場合もあるので気を付けてください！使うにしても、自分で作ったものを使った方が安心だと思います。