OmniAICreator/Qiita-1.07M huggingface dataset:
「脳よ、お前が正しかった。」〜AIも省エネで生きたい時代へ〜






## 1. 💡 はじめに：AIが地球を食い尽くす日？

生成AIのブームと共に、私たちのモデルはどんどん大きく、複雑に、そして…電力を爆食いする存在になってきました。  
ChatGPTの1回の推論で0.1Wh、画像生成モデルでは1回でMacBookを数時間使うくらいの電力を使ってるとも言われています。

「これって地球に優しいの？」「もっと効率的にできないの？」  
そんな問いの答えが、**ニューロモーフィック・コンピューティング**にあります。

本記事では、「脳の仕組みに学ぶ計算モデル」が**いかにエネルギー効率の高いAI**を実現するかを、Pythonコードやツール紹介を交えて実践的に掘り下げます。

---

## 2. 🧠 ニューロモーフィックコンピューティングとは？

### 🌐 定義と背景

**ニューロモーフィックコンピューティング**とは、脳の神経回路（ニューロンとシナプス）を模倣したハードウェア／ソフトウェアアーキテクチャのこと。

従来の**ノイマン型コンピュータ**（メモリとCPUが分かれている構造）とは異なり、データと処理が一体化しているため、**高速かつ超低消費電力**での処理が可能になります。

![ニューロモーフィック vs ノイマン型](https://upload.wikimedia.org/wikipedia/commons/3/38/Von_Neumann_Architecture.svg)  
*図：ノイマン型とニューロ型のアーキテクチャ比較*

### 🔧 代表的なチップ

| チップ名 | 開発元 | 特徴 |
|----------|--------|------|
| **Loihi 2** | Intel | スパイキング・ニューラルネットに特化、低消費電力 |
| **TrueNorth** | IBM | 1百万ニューロン、256百万シナプス、70mW以下 |
| **SpiNNaker** | Manchester大 | 脳全体のモデルシミュレーションが可能 |

---

## 3. 👨‍💻 実装してみよう：Brain-inspired ML with NEST Simulator

### 3.1 使用ツール：NEST Simulator

[NEST Simulator](https://www.nest-simulator.org/)は、**スパイキングニューラルネットワーク（SNN）**をシミュレーションするオープンソースツール。Dockerでも動きます。

```bash
docker run -it nest/nest
```

### 3.2 最小構成のSNNネットワーク（Python）

```python
import nest
import numpy as np

# 1ニューロンを生成
neuron = nest.Create("iaf_psc_alpha")
# スパイク発生装置
spike_gen = nest.Create("spike_generator", params={"spike_times": [5.0, 10.0, 15.0]})
# モニタ
voltmeter = nest.Create("voltmeter")

# 接続
nest.Connect(spike_gen, neuron)
nest.Connect(voltmeter, neuron)

# シミュレーション
nest.Simulate(20.0)
```

### ✅ 結果（Matplotlibで描画）

```python
import matplotlib.pyplot as plt

events = nest.GetStatus(voltmeter)[0]["events"]
plt.plot(events["times"], events["V_m"])
plt.title("Neuron Voltage Over Time")
plt.xlabel("Time [ms]")
plt.ylabel("Membrane potential [mV]")
plt.grid()
plt.show()
```

📸 *図：SNNニューロンの膜電位変化（電力消費は従来CNNの1/100以下）*

---

## 4. 🛠 実践Tipsとよくある落とし穴

### ✅ 実践Tips

- **ハイブリッド設計**：既存のCNNやRNNと組み合わせることで性能最大化
- **学習は従来、推論はSNN**：トレーニングは通常のNNで行い、重みをSNNに変換する手法も多い（e.g. SLAYER）

### ⚠ よくある落とし穴

| 問題 | 解決策 |
|------|--------|
| 学習が難しい | Spike Timing Dependent Plasticity (STDP) で学習する or 変換方式を使う |
| チップが入手困難 | LoihiやSpiNNakerのクラウドAPIを使う、または模倣シミュレーション |
| デバッグがしにくい | ビジュアライズツール（e.g. NEST Desktop）を使うと可視化しやすい |

---

## 5. 🚀 応用：リアルタイム処理 & エッジAIへの応用

- **ドローン・自動運転**：Loihiを搭載することで、視覚処理や経路判断を瞬時に実行
- **ウェアラブルデバイス**：電池1本で数ヶ月動く、SNNベースの信号解析チップ
- **IoTセンサー**：低電力で連続データ処理（時系列、音、振動…）

![応用例](https://miro.medium.com/v2/resize:fit:1000/format:webp/1*TwB4-HwxB5AVDWD5uvWADg.png)  
*図：Loihiを搭載した小型エッジデバイス*

---

## 6. 🧾 まとめ：脳に学べ、未来を創れ

| 項目 | 内容 |
|------|------|
| ✅ メリット | 圧倒的な低消費電力、並列処理能力、エッジに最適 |
| ⚠ デメリット | 学習の難しさ、ハードウェア依存、ツールの成熟度 |
| 🔭 将来性 | 自動運転、医療、IoTへの浸透は時間の問題 |

---

### 最後に一言：

> 「人類が作ったAIは、ついに脳を見習い始めた」

次の世代のAI開発を担うあなたに、ぜひSNNの世界を味わって欲しい。  
使ってみると…脳の偉大さを実感できます。いやマジで。

---

### 📚 参考文献・ツール

- [Intel Loihi 2 - Neuromorphic Research](https://www.intel.com/loihi)
- [NEST Simulator Documentation](https://nest-simulator.readthedocs.io/)
- [SpikingJelly: SNN Framework](https://spikingjelly.readthedocs.io/)
- [IBM TrueNorth Research](https://research.ibm.com/articles/truenorth.html)
🌿 ラズパイを活用した『社内環境（温湿度）見える化システム』をつくる①【アイデア決定編】

## 🐣　自己紹介

はじめまして、こんにちは！

私は、未経験から転職してエンジニアになった20代エンジニアです。  
入社してからは約半年くらいになります🐣

今回のプロジェクトを任せてもらったので、ラズパイを使った社内環境の見える化システムづくりを頑張っていこうと思います！  
まだまだぴよぴよなので、温かく優しく見守っていただけると嬉しいです！

---

## 📋　概要

このシリーズでは、**ラズベリーパイを使って社内の環境を見える化するシステム**を作っていく過程を、  
企画立案から実際のシステム稼働まで順を追って紹介していきます。

これからラズパイを触ってみたい初心者の方や、実際にどんな使い道があるのか気になる方、実際の業務の流れなどが気になる方に向けて、  
わかりやすく発信していく予定です。

シリーズで定期的に更新していきますので、ぜひフォローしてご覧ください！

---

## 🚩 どんなシステムをつくる？

ラズベリーパイ（Raspberry Pi）を使って、  
社内の環境（特に温度・湿度など）をリアルタイムに測定・記録し、  
Webページなどで可視化するシステムをつくります。

---

## 📌 アイデア検討の段階で考えたこと

今回のシステムをつくるにあたって、  
社内メンバーでアイデア出しの打ち合わせを行いました。

### 出てきたアイデア例

- 🍪 **お菓子ボックスの消費量を記録・ランキング化するシステム**
- ☕ **コーヒーメーカーの1日の使用回数を記録・表示するシステム**
- 🌿 **社内の温湿度をリアルタイムに可視化するシステム**
- 📚 **社内技術書籍の貸出記録・人気ランキングを管理するシステム**
- 🚪 **社員の入退室を記録・管理するスマート入退室管理システム**

どれもラズパイで簡単に実現でき、実際に動かすと面白そうな案です。

---

## 🎯 最終的に選ばれたアイデアは？

いろいろ話し合った結果、今回私たちが作ることになったのは…

🌿 **『社内の環境（温湿度）見える化システム』** に決定！

決定理由は以下のような感じです。

- 社員みんなが関心を持ちやすく、日々役立つ。
- 温度・湿度の計測なら初心者でも簡単にラズパイを使って試せる。
- センサーを使った計測とデータ可視化は、ラズパイの基礎的な活用例としてぴったり。

まずは、ラズパイで簡単に温度と湿度を測定して、  
そのデータを画面上にリアルタイム表示できるような仕組みを作ります。

今回のプロジェクトが完了した際は他のプロジェクト案も作成してみたいですね！

---

## 🔜 次回の予定（来週更新予定！）

次回の記事では、実際にどんなセンサーや機材を使うのかを検討し、  
購入するものを決めていきます。

センサーの選定だけでなく、使用するラズパイの機種も決めていく予定です。  
初心者でも簡単に扱えるよう、慎重に選んでいこうと思っています。

次回もぜひお楽しみに！

---

シリーズを通じて、ラズパイを使った開発の面白さを伝えていければと思います！

それでは、また次回の記事でお会いしましょう✨

## 🔗 シリーズリンク

* 次回：[🌿 ラズパイを活用した『社内環境（温湿度）見える化システム』をつくる②【部品購入編】](https://qiita.com/Piyovate/items/b47aaa3ef0affc18c853)

📚 シリーズ全記事はこちら：[Qiitaストックページ](https://qiita.com/Piyovate/stocks/657201b660bed4ebf50c)
「脳、ちょっと貸してくれ」ってAIが言い出した日：AIとニューロモーフィックの融合実験室







---

## 1. 💡 問題提起：AIが天才だけど電力バカ食いすぎ問題

私たちが普段使っている生成AI（ジェネレーティブAI）–– ChatGPT, DALL·E, Midjourney。これらは便利で驚異的な存在ですが、1つの悩みを抱えています。

👉 **「消費電力がヤバい。」**

モデル学習も推論も、莫大なGPUと冷却システムが必要で、持続可能性に疑問符がつくレベル。一方で、我々人類の脳はたったの**20Wの消費電力**で超高性能処理を実現しています。

**じゃあ、AIも脳みたいに作っちゃえばいいんじゃない？**  
── これが「ニューロモーフィック・コンピューティング（Neuromorphic Computing）」の出発点です。

---

## 2. 🧬 ニューロモーフィックとは何か？ざっくり理解しよう

ニューロモーフィックとは、**人間の脳神経構造（ニューロン・シナプス）を模倣して設計されたハードウェア/ソフトウェアアーキテクチャ**です。

### 🎯 特徴：

| 項目 | 従来のAI | ニューロモーフィックAI |
|------|-----------|--------------------------|
| 処理方式 | バッチ処理・逐次計算 | 並列・スパイク処理（SNN） |
| エネルギー効率 | 低い（GPU依存） | 非常に高い（1/1000以下） |
| 学習 | バックプロパゲーション | Hebbian学習などローカル更新 |
| ハードウェア | GPU / TPU | Intel Loihi, IBM TrueNorth |

🧠 脳のように**イベントベースで情報を処理**することで、無駄のない計算を実現し、リアルタイム性にも優れています。

---

## 3. 🔧 ハンズオン：Loihiを使った簡単なスパイキング・ネットワーク

以下は、IntelのLoihiチップのシミュレーター「NxSDK」を使ったシンプルな例。  
（※ 実機がなくてもDockerで動くバージョンあり）

```python
from nxsdk.graph.monitor.probes import ProbeParameter
from nxsdk.net.net import Net

# ネットワーク構築
net = Net()
neuron_group = net.createCompartmentGroup(size=10)

# 入力スパイクを設定
spike_generator = net.createSpikeGenProcess(numPorts=1)
spike_generator.addSpikes(spikeInputPortNodeIds=0, spikeTimes=[1, 3, 7])

# 入力→ニューロン接続
spike_generator.connect(neuron_group)

# 実行
net.run(duration=10)
net.disconnect()
```

📝 このスクリプトは、1つの入力スパイクをニューロン群に渡し、Loihi上でイベント駆動型ネットワークを模擬する超ミニマルなデモです。

### ![図1: スパイク伝達の様子（概念図）](https://example.com/neuromorphic_spike_diagram.png)

---

## 4. ⚠️ 実践Tips＆よくあるハマりポイント

### ✅ Tip 1: ハードウェア前提を知っておく  
ニューロモーフィックはGPUではなく**専用ASIC**を前提に設計されている。なので、Docker版やエミュレーターをまず触るのがおすすめ。

### ✅ Tip 2: デバッグが脳科学レベルで難しい  
SNNは「なぜその出力になったか？」の可視化が難しい。ログの取り方やスパイクパターンの可視化ツール（Spike Rasterなど）を覚えよう。

### ✅ Tip 3: ニューラルネットとは思考を切り替える  
Backpropが使えないモデルが多く、Hebbian Learning（共に発火する細胞は結びつく）など**生物的な学習法**が基本になる。

---

## 5. 🚀 応用展開：生成AI×ニューロモーフィックの融合

### ▶ 可能性1: LoRA＋SNNによる軽量生成AI  
SNNベースのアーキテクチャにLow-Rank Adaptation（LoRA）を組み合わせることで、**超軽量・エッジ向けの生成AI**が開発可能。

### ▶ 可能性2: スマートセンサー × On-device 生成  
IoTデバイス上での「リアルタイム説明生成」など、ニューロモーフィックAIは**低消費電力で常時稼働する生成系AI**としての活用が見込まれます。

---

## 6. 📌 まとめ

| 項目 | ポイント |
|------|----------|
| ✅ 強み | エネルギー効率、リアルタイム処理、低レイテンシ |
| ⚠️ 弱み | 学習の難しさ、可視化の困難、ハード依存性 |
| 🔮 展望 | モバイル・IoT×AI時代の中核技術へ |

---

### ✍ 最後に

「生成AIはクラウドでしか動かせない時代」は、もう終わるかもしれません。  
**次世代のエッジAI**として、ニューロモーフィックは実験する価値大アリです。

興味があれば、Loihiエミュレータを触って「スパイク脳開発」してみてください🧠💥

---

### 📚 参考リンク

- [Intel Loihi公式](https://www.intel.com/content/www/us/en/research/neuromorphic-computing.html)
- [NEST Simulator（SNN）](https://www.nest-simulator.org/)
- [Brian2 – Python SNNフレームワーク](https://brian2.readthedocs.io/en/stable/)
- [SpikeInterface（スパイク解析）](https://spikeinterface.readthedocs.io/en/latest/)
令和７年度春季情報処理安全確保支援士受験報告

# 結果
午前I・午前IIとも想像以上に難しかったと感じました。ただ、自己採点の結果、午前Iは60点、午前IIは80点で合格していると考えられます。
午後については問２と問３を選択したのですが、いずれも苦手範囲が出題されており、合格は難しいと考えられます。

# はじめに
情報処理安全確保支援士はIPAの資格試験の中でも最高峰であり国家資格ともなるため、挑戦するには有意義な課題であると考えられます。
年齢的(51歳)にも労働に対するクローズフェーズとなるため、最後の挑戦としてチャレンジしてみて、合格した暁には監査人として余生を過ごそうと思いまして、受験をしようと考えました。

# なぜ受けようと思ったのか
以前情報処理安全確保支援士が国家資格化されたとき、当時いちばん簡単なセキュリティマネジメントを受験して合格したときでした。
いずれは、いろいろと資格を取得して最終的には情報処理安全確保支援士を取得したいと考えておりました。
大学生の頃に情報処理二種を取得して以来、就職してからは不況や業務多忙から勉強すらできない状況で、受験を見送っていました。
５年ぐらい前に一度ネットワークスペシャリストに挑戦したのですが、受験勉強の完成度の低さから１回きりの受験で諦めていました。
そんな中、SESの常駐先のプロパーの方が安全確保支援士に合格された話しを聴き、なおかつ安全確保支援士が必要な現場のため、チャレンジしても損はないと考えました。
最近は殆どテレワークで、通勤の時間も無くなってきたのと、子育てもある程度小学生の上級生になってきて、自分の余暇ができたというのが大きいと思います。

# 何から始めたのか
2024年の8月頃にアマゾンで安全確保支援士の用語集を発見したことがきっかけでした。何も取り組むことがなかったため、その用語集を買って見ることにしました。
買ってみたのはいいのですが、用語を読み進めてみると半分も知らない用語が書かれていました。また、知っていたとしてもその用語の詳細を知らないものも散見されました。
その用語集の著者はYouTubeでも解説をしているようで、動画を全部見ても覚えられなかった用語がたくさんありました。
YouTubeの中には安全確保支援士関連の解説動画が沢山アップされており、特別なセミナーや研修費を払わなくても勉強できるよい時代になりました。ただ、自己管理をして継続して学習していくという持続性が要求されます。

最初は用語を網羅する必要があると考え、単語カードを作って用語を覚えるところから始めました。単語カードやノートへの書き写しを継続して用語を覚えていきました。これらはすべて手書きで行いました。
受験を行った方の動画や経験談を見ていると、タブレットで過去問を解いている人がいたり、PCで資料をまとめたりしている方もいたのですが、やはり勉強は手書きが一番だろうということで、過去問をコンビニで印刷して手書きで勉強しました。

手書きで勉強する点でもう一つ良い点がありまして、それは漢字が書けるようになったということです。
最近はPCやスマホの常用で漢字を書くこと自体を忘れていたのですが、安全確保支援士の午後試験は筆記式の為、漢字が書けないと回答もできないという点で良かったと思います。

# 何をやったのか
とにかくIPAの試験は過去問をやったら合格するという論者もいるため、１０年分の過去問を印刷して実際に時間を計って取り組みました。
また分からなかったことや間違ったことを、ネットで調査しなぜ間違ったのか原因を突き詰めて学習深度を高めていきました。
だた、午後問題は何を書けばよいのか全く分からず、最初の頃は一字一句あっていなければ得点できないと思っていたため、かなり翻弄されました。
その後、いろいろと解説動画を見たところ、午後問題はとにかく文書を大量に書いたほうがいいという結論に達し、思いついたことを書けばいいんだと理解しました。
多分、文章内に回答となるキーワードが含まれているか、考えている方向性があっているかで配点されるんじゃないかと思います。

# 直前の対策
午後問題の方ばかり、気を捕らわれていたのですが、試験の２週間ぐらい前に今までやっていなかった午前Iと午前IIの過去問をやってみました。
午後IIは当初の専門用語のキーワードで対策ができていたのですが、午前Iについては高度共通となっているため、専門分野外の問題が全くカバーできていないことがわかりました。
午前IはITストラテジストやシステムアーキテクトなどのプロジェクト管理や経営管理の問題が全く学習から抜け落ちており、合格点の60点に届かない状況でした。
急遽午前Iの過去問を重点的に勉強し、網羅率を86%ぐらいまで上げて60点～73点ぐらいの得点でなんとか対策が出来たと考えました。

# 受験してどう思ったか
今回試験会場が北千住の東京電機大学ということで自宅からも比較的近くて助かりました。
東京電機大学といえば我々の世代では高嶺の花で理系の偏差値表の上位にランクされていた大学だと記憶しています。
それから35年ぐらい経って来訪するとは、思いも寄りませんでした。

学習期間中は特別な研修にもいかず、一人で問題を解いたりして学習していたため、一人の中の閉じた学習環境でした。
しかし、試験会場では年代も様々でいろいろな風貌の方々が受験されているのを見て、「この人たちとみんなで戦っていたんだ」と思うと感慨深いものがありました。
隣の人は、独り言が多い人のようで、午前Iが終わったときに「むずかしいなー」と漏らしていたことが、印象に残りました。

試験会場はほぼ半分の方が出席されていました。午前Iが終わり、午前IIが終わり、と途中で帰っていく人もいました。
午前IIと午後の休憩時間が60分しかなく、外に食べに行く余裕が精神的にも時間的にもなかったのですが、アンパンを買って言ってたので、それを食べて時間を過ごしました。

せっかく北千住に行くのだから、試験が終わったら呑んで帰ってもいいかな、と思っていたのですが、試験終了後は試験の難易度の高さと出来の悪さから、とてもじゃないけど呑めるような精神力ではなく、とにかく解答速報を見たいというのが先決していました。

これは試験を受けてから気づいたのですが、過去問サイトには受験者の掲示板があって、今回受験した人の感想や回答結果等が書き込まれており、「◯問しか合ってなかった終わったー」という書き込みも見られ、同情というか自分も同じだと強く感じました。
先程も書いたのですが、受験はこれらの人みんなが受けていたのだと思い、自分ひとりが大変な思いをしているんじゃないことを気付かされました。

# 最後に
今回の試験は、結果の自信がなく、合格していないだろうと思います。
ただ、知識レベルは受験に耐えうる状態まで来ているため、継続して秋季の試験に向けて取り組みたいと思います。
今回の試験ではSBOMやCVSS値など、どちらかというと現場レベルではなく、上位層の範囲が出題されたと思います。
またTLSハンドシェークの一連の流れなどを回答する場面もあり、広く深い知見が要求されておりました。
秋期に向けて上位レイヤーの知識をより深くまとめ直していきたいと思います。
【無料】ローカルで会議動画を文字起こし

# 目的
- 会議動画ファイルの中の情報を参照するのが地味に大変なので検索可能にしたい
# 前提
- Windows 11
    - Intelオンボードグラフィック（割り当て16GB）
    - 13th Gen Intel(R) Core(TM) i7-13700T   1.40 GHz
    - RAM 32GB
- すべて無料のソフトを使用する
    - 有料APIなども使わない
    - というかすべてローカルで処理する
- chocolateyが入っている環境（べつになくてもいい）
# 必要なソフトウェアの用意
- 基本となるPython
- 音声変換のためのffmpeg
- AIによる文字起こしソフトウェアとしてWhisperのオープンソース版

この三つをインストールする。
## Pythonとffmpegをインストール
- chocolateyを使用してインストールした
- Whisperを動かすためには[Pythonのバージョンは3.8～3.11でなければならないらしい](https://github.com/openai/whisper/blob/main/README.md#setup)
```PowerShell
PS> choco install -y python311 ffmpeg
```

## pipアップデート
```PowerShell
PS> python.exe -m pip install --upgrade pip
```

## PyTorchインストール
```PowerShell
PS> pip install torch torchvision torchaudio
```
ちなみにproxy環境下で証明書エラーが出るならこんなオプションをつける
```PowerShell
--trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org
```

## Whisperインストール
```PowerShell
PS> pip install -U openai-whisper
```

# 使ってみる
## コマンドラインオプション
- 参考：https://note.com/mega_gorilla/n/n343a279477a2#4739ce45-37d0-4c9e-82cf-04df858d8d98
### 設定したオプション
- --language ja: これがないと日本語音声ファイルが英語と誤認識されることがあった
- -o \<output dir\>, --output_dir \<output dir\>: ファイル出力ディレクトリ

## 実行
コマンドラインで動画または音声ファイルを指定して実行する。

ずらずらと文字起こし結果を画面に出しながら処理が進む。
```PowerShell
PS> whisper --language ja -o "c:\Users\shimano\Videos" "2025-02-14 13-45-01.mkv"
[00:09.380 --> 00:10.600] セキュリティめちゃくちゃ
[00:10.600 --> 00:11.360] 厳しいんで
[00:11.360 --> 00:14.500] そこら辺の設定とか
[00:14.500 --> 00:15.500] もしないといけないんで
[00:15.500 --> 00:16.440] それでですね
[00:16.440 --> 00:17.320] うまくいかないと
[00:17.320 --> 00:18.660] 結構ハマったんです
[00:18.660 --> 00:20.220] ちょっと今
[00:20.220 --> 00:21.100] お見せしてる
[00:21.100 --> 00:22.520] このmarkdownとかも
[00:22.520 --> 00:24.100] ここら辺に
[00:24.100 --> 00:26.000] これちょっとステージング環境で
[00:26.000 --> 00:28.380] 認証情報とか
[00:28.380 --> 00:29.640] このファイル
[00:29.640 --> 00:30.800] このリンクを
[00:30.800 --> 00:32.660] たどっていただければ
[00:32.660 --> 00:36.000] わかる
[00:36.000 --> 00:37.160] で
[00:37.160 --> 00:38.700] 本番環境っていうのは
```

### 精度はどうなの？
全般的にはかなり使える部類かと。
- Googleドキュメントの音声入力よりもだいぶ精度が高いように思われる
- GitHubとかGitLabとかJavaとかわりと一般的な技術用語はちゃんと聞き取ってくれる
- よくある苗字も聞き取ってくれる
- あまり見かけない苗字、プロジェクト名などのマイナーな固有名詞は無理

## 出力ファイル
変換が終わるといろんなファイル形式で生成される。意外にもtxtファイルは普通に読める形式ではなかった。人間が読むならtsvが一番見やすいかな。
![{C62C1043-4780-49A6-899F-8B3F865D57F5}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137451/6f4e083b-9743-4cac-a8da-d40eb2820e0d.png)
### 各出力ファイルはなんなの？
- srt/vttファイルはキャプションファイル。vttはsrtよりも多くの情報 (フォーマットオプション、メタデータ) を保存できる[*](https://wandb.ai/wandb_fc/japanese/reports/OpenAI-Whisper-SRT-VTT---Vmlldzo2ODMzMzI4#srt/vttファイルとは何ですか?)
💡 脳をエミュレートしてみたら、想像以上にバグらなかった話





## 1. 🧠 はじめに：AIが「人間の脳」に本気で近づこうとしている件

生成AI、ディープラーニング、エッジAI…。  
私たちはこれまでGPUやTPUのような計算資源の上で、いかに速く、いかに効率よくニューラルネットを動かすかに集中してきました。

でも、そろそろ気づきませんか？

> 「あれ、人間の脳って、こんなに電気食わないし、もっと柔軟じゃね？」

そんな気づきから生まれたのが**ニューロモーフィックコンピューティング**です。今回はこの技術の概要から、実際の開発、ハマりポイント、そして未来までを、現役エンジニアの目線で解説していきます。

---

## 2. 🧬 ニューロモーフィックコンピューティングとは？

### 💡 定義

ニューロモーフィックコンピューティングとは：

> **人間の脳神経系の構造や働きを模倣したハードウェア設計やアルゴリズムの総称**です。

### 🧱 主な特徴

| 特徴 | 内容 |
|------|------|
| 非同期動作 | クロックレスなスパイク駆動（Spiking Neural Network） |
| イベントベース | 無駄な演算を省くことで消費電力を大幅削減 |
| 並列性 | 脳のように多数のニューロンが同時に動く |
| 自己学習 | Hebbian学習など、オンライン学習向き |

### 🧠 有名なチップ例

- **Intel Loihi**
- **IBM TrueNorth**
- **BrainScaleS（Heidelberg大）**

> ![Loihi チップ](https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Loihi_die_photo.jpg/320px-Loihi_die_photo.jpg)  
> *図1: IntelのLoihiチップ*

---

## 3. 🧪 実装してみよう！Spiking Neural Network の超入門

今回は、Python で動かせる軽量ニューロモーフィック・フレームワーク「[Brian2](https://brian2.readthedocs.io/en/stable/)」を使って、シンプルなSNNを動かしてみましょう。

### ✨ 環境

```bash
pip install brian2 matplotlib
```

### 📜 コード例：LIFニューロンモデル

```python
from brian2 import *

# 時間単位の定義
duration = 100*ms

# LIFモデルのパラメータ設定
tau = 10*ms
eqs = '''
dv/dt = (1.0 - v) / tau : 1
'''

G = NeuronGroup(1, eqs, threshold='v>0.9', reset='v = 0', method='exact')
G.v = 0

# モニター設定
M = StateMonitor(G, 'v', record=True)
spike_mon = SpikeMonitor(G)

# 実行
run(duration)

# 結果の描画
import matplotlib.pyplot as plt
plt.plot(M.t/ms, M.v[0])
plt.xlabel('Time (ms)')
plt.ylabel('Membrane potential (v)')
plt.title('LIFニューロンの活動電位')
plt.show()
```

> ![図2: LIFニューロンのスパイク出力](https://i.imgur.com/y3yEQQO.png)  
> *図2: Brian2によるニューロンのスパイク出力*

---

## 4. 💡 実務のヒントとハマりどころ

### ✅ よくある課題

| 課題 | 解決策 |
|------|--------|
| 開発ツールが少ない | Brian2 や NEST などのシミュレータを活用 |
| 学習方法が特殊 | Hebbian学習・STDPなど、従来のBPとは異なる |
| 実用例が少ない | エッジAI、IoT、ロボティクスに注目すると◎ |

### ✅ 実務的ヒント

- ニューロモーフィックは**省電力性・リアルタイム性**が肝
- 従来のAIと組み合わせて「ハイブリッドアーキテクチャ」にする事例も多い（例：Loihi + CNN）

---

## 5. 🚀 応用展開：AIチップ開発やエッジデバイスへの展開

### 🌱 開発動向

- **Intel Loihi 2** は従来の10倍スケーラブルに
- **エッジデバイスへの実装**が加速（ドローン、センサー、ウェアラブル機器）

### 📡 面白い事例

| 分野 | 具体例 |
|------|--------|
| 医療 | 脳波解析・インプラント型チップ |
| ロボティクス | 自律型ドローン、触覚センサー |
| IoT | 超低電力センサーノード |

---

## 6. 📘 まとめ：脳のチップ化はロマンか、現実か？

| 項目 | 内容 |
|------|------|
| ✅ メリット | 超低消費電力・リアルタイム性・生物的処理モデル |
| ❌ デメリット | 学習アルゴリズムの難しさ・開発ツールの未成熟 |
| 🔮 展望 | AIの次のフロンティアとして「脳型AI」の研究が加速中 |

---

## 🎁 おまけ：読みたい人のためのおすすめリソース

- [Loihi Documentation](https://www.intel.com/content/www/us/en/research/neuromorphic-computing.html)
- [Brian2 Tutorials](https://brian2.readthedocs.io/en/stable/)
- [IBM TrueNorth Whitepaper](https://research.ibm.com/blog/truenorth-neuromorphic-chip)

---
【Power Automate】Dataverse のデータを読み込んで Excel Online に書き込んでみる！

# はじめに
本記事では、Power Automateを使い、Excel Online に対して自動的に
データを「書き込む」「読み取る」フローの構築方法を解説します。

**今回は `「書き込む」` のフロー構築方法になります。**
**「読み取る」フロー構築方法は別途記事を作成予定です。**

+ 毎回の作業に時間がかかる
+ 入力ミスや転記ミスが発生しやすい
+ 担当者が不在だと作業が止まってしまう
+ 情報の更新・通知にタイムラグが出る

このような課題に対して、**Power Automateを利用した「自動化」** を導入することで、
業務の効率化が可能になります。

## 完成イメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/990a4fbc-dbe4-40ab-ae42-0c66dc2f13d2.png)

## 事前準備
+ Share Point 内に書き込み先の Excel ファイルを作成しておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/6e4b9960-448f-4edd-91cd-9bc35208cd79.png)

+ 書き込み先のテーブルを作成する
:::note warn
表形式ではなく必ず **テーブル** 形式で作成してください
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/599a7fa7-670b-4f64-9253-9de28f731c9b.png)


## フローの作成方法
+ Power Automate にログインして新しいフローを作成します。
+ 「新しいステップ」で **「行を一覧にする」** を選択し、読み込むテーブルを選択します。
必要であれば 行のフィルター で抽出条件を設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/b2083398-0c1c-4266-84e1-d476caf755ad.png)

+ 次に「新しいステップ」で **「表に行を追加」** を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/8d9a0dda-1704-430d-b917-f9812ef52403.png)

**必須項目**
+ 場所・・・SharePoin のサイト名
+ ドキュメントライブラリ・・・保存先ドキュメント
+ ファイル・・・ファイル名
+ テーブル・・・テーブル名

**任意項目**
SharePoint内の列が表示されているので値を書き込みたい列に **行を一覧にする** で取得したDataVerseテーブルのデータを当て込んでいってください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/8dec8b7b-8c18-4766-b03f-21937c198fa8.png)

### 保存とテスト
フローが完成したら `保存` を押しテストを行います。

:::note warn
書き込みを行う Excel は必ず閉じておいてください。
開いたままにしておくと書き込みエラーが発生してしまいます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/0b2d8cc2-8fca-446d-9e4a-7fffb08e79db.png)

正常に実行されました。
SharePointのエクセルを見に行ってみましょう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/94774fd3-22b1-4a0a-a177-13d2226ba6a9.png)

先ほどまでデータの入っていなかったテーブルにDataVerseの情報が反映されています！

`行を一覧にする` でデータを取得する時にフィルターをかけておくと絞り込みを行った状態でエクセルへデータ出力を行うこともできるので分析などを行いたい時に非常に便利です！

## まとめ
今回は Dataverse のデータを PowerAutomate を使って ExcelOnline に書き込んでみました。
一見シンプルなフローですが、これを応用することで例えば
+ 営業日報や週次レポートを自動で作成
+ 顧客リストや案件一覧を毎朝 Excel に出力
+ Power BIに渡す前処理としての整理作業
…など、いろんな場面で業務の自動化が実現できます！

定期実行を行いたいときはトリガーにスケジュールを設定しておくと便利です！

以下の記事ではスケジュール管理のトリガー設定についてかいせつしておりますので
ぜひこちらもご参考ください！

https://qiita.com/Sanwa_Paint/items/076018ada5ee0bf20314


「Power Platform は気になるけど、何から始めたらいいか分からない」という方こそ、
こういう “ちょっと便利” なところから試してみるのがおすすめです！
PHPにおけるラムダ関数（無名関数 / 匿名関数）の正体とは？

## はじめに

PHPで関数を変数に代入したり、関数の引数として渡すコードを見かけることがあります。  
これは「ラムダ関数」「無名関数」「匿名関数」などと呼ばれますが、その正体は何なのか。  
この記事では、PHPにおけるラムダ関数の本質について、自分の理解をまとめます。

## 無名関数の定義と使い方

まず、PHPでの無名関数（匿名関数）の定義は以下のように書けます。

```php
$lambda = function (string $name): string {
    return "hello, " . $name;
};

echo $lambda("taro"); // hello, taro
```

この `$lambda` は、実行可能な「関数のようなもの」ですが、実はその正体は `Closure` というクラスのインスタンスです。

```php
var_dump($lambda);
// object(Closure)#1 (0) { }
```

## 実は「関数のように振る舞うオブジェクト」

PHPのラムダ関数は、実体としては `Closure` クラスのオブジェクトです。  
`Closure` は特殊な `__invoke()` メソッドを持っており、オブジェクトでありながら `()` を使って呼び出すことができます。

これは PHP の「呼び出し可能オブジェクト（invokable object）」という仕組みによって実現されています。

```php
class Doubler {
    public function __invoke($x) {
        return $x * 2;
    }
}

$d = new Doubler();
echo $d(10); // 20
```

この仕組みと同じように、ラムダ関数も `$lambda()` のように書くことで `__invoke()` が呼び出されています。

## 関数のようでいて、状態も持てる

オブジェクトであるということは、状態（値）を保持することも可能です。

PHPでは `use` を使うことで、外部の変数をクロージャに取り込むことができます。

```php
$count = 0;

$increment = function () use (&$count) {
    $count++;
};

$increment();
echo $count; // 1
```

このように、ラムダ関数は「関数のように使える」だけでなく、「状態を持つ」こともできるという点で、関数とオブジェクトの中間のような存在です。

## まとめ

PHPにおけるラムダ関数（無名関数 / 匿名関数）とは：

- `Closure` クラスのオブジェクトである
- `__invoke()` により関数のように呼び出せる
- 他の関数の引数として渡すことができる（高階関数）
- `use` を使えば状態を持たせることができる

つまり、PHPのラムダ関数は「呼び出し可能なオブジェクト」であり、関数とオブジェクトの性質をあわせ持つ存在です。

## おわりに

最初は「function(){} が変数に入るなんて不思議だ」と感じていましたが、内部的にはオブジェクトとして扱われていると知ることで、理解が深まります。
データベースとは

# はじめに
この記事は、未経験な自分が自分なりにまとめた記事になっています。
修正や間違いがある場合は、コメントしていただくと幸いです。

# 🚀データベース(以下DB)とは
**データの集まり**のこと。
DBは、データを効率的に**保存・管理・検索**するための仕組みやシステムのことを指します。単なるデータの集合ではなく、構造化されていて、必要に応じて迅速にデータを取得・操作できるよう設計されています。

# 👍DBで管理するメリット
### 👉大量のデータを蓄積できる
データは企業にとって**資産**のようなもの。
大量のデータがあると、その分活用できる幅が広くなるため価値が上がる。
DBは企業にとって**必須**のものになっている。
### 👉データの効率的な管理ができる
複数の場所に分散していたデータを一元的に管理することで、アクセス性が向上する。
[クエリ機能](https://wa3.i-3-i.info/word11290.html)を使って大量のデータの中から必要な情報を迅速に抽出できる。

# DBの種類
### 👉リレーショナルデータベース（RDB）
行と列からなる**表形式**で管理。
「列」にはそれぞれ重複しない項目名を設定し、そこに「行」としてデータを追加して管理する。

例：MySQL、PostgreSQL、Oracle Database、Microsoft SQL Server

### 👉NoSQL
リレーショナルデータベースの制約を超える柔軟性を持つ。
スキーマレス（固定のデータ構造が不要）で、大量データや非構造化データを効率的に管理。
種類によりデータの保存方法が異なる。

| 名前 | 特徴 | 例 |
|:-----------|------------:|:------------:|
| キーバリュー型 | キー（Key）と値（Value）のペアでデータを保持する基本的なNoSQLデータベース        | Redis、Amazon DynamoDB         |
| ドキュメント型 | キーに関連する値の部分をドキュメント形式で格納するようにしたのが特徴      | MongoDB、Couchbase       |
| グラフ型       | ノード・エッジ・プロパティの3要素によって、ノード間の有効性グラフの関係性によってデータ構造を表現するDB        | Neo4j、Amazon Neptune         |
| カラム指向型         | キーバリュー型に列（カラム）の概念を追加したDB          | Apache Cassandra、HBase |

# 参考
ChatGPT
https://tech-camp.in/note/technology/94198/#i
https://www.bizcrew.jp/article/11260007#index_q5Yz7rXe
「脳に学べ！」って言われたので、PCにニューロンを詰めてみた話 





## 1. 🚪 はじめに：なぜ“脳を真似る”必要があるのか？

近年、生成AIや大規模な機械学習モデルが急速に発展していますが、その計算コストは驚くべきものです。  
例えば、GPTのようなモデルをトレーニングするには膨大なGPU時間と電力が必要になります。

> 一方で、人間の脳はわずか約20Wで世界を理解し、創造的に思考できます。

このギャップに着目し、「人間の脳のように効率的に計算できるコンピュータ」を目指す研究が進められています。  
それが **ニューロモーフィック・コンピューティング（Neuromorphic Computing）** です。

---

## 2. 🧬 ニューロモーフィック・コンピューティングとは？

### 💡 概要

ニューロモーフィック・コンピューティングは、ニューロンやシナプスなど、**脳の構造や動作を模倣**した計算モデルおよびハードウェアアーキテクチャのことを指します。

### 🧠 従来のAIとの違い

| 特徴                     | 従来のAI（Deep Learning） | ニューロモーフィック |
|-------------------------|----------------------------|------------------------|
| 計算モデル              | 行列演算ベース              | スパイク型（時間依存） |
| アーキテクチャ          | ノイマン型                 | 脳型・非同期分散        |
| エネルギー効率          | 高消費電力（GPU依存）       | 超低消費電力（~mW）    |
| リアルタイム処理        | 得意でない                 | 得意（時間依存学習）    |

### 🌟 主な実装例

- **Loihi 2**（Intel）: 高速学習機能を持つスパイキング・ニューロンチップ  
- **TrueNorth**（IBM）: 1億個のニューロンを模倣可能  
- **SpiNNaker**（英・マンチェスター大学）: 数百万ニューロンの並列処理に対応

---

## 3. 🧪 実装例：Loihi + Pythonでモーション検出

ここでは、IntelのLoihiチップを使った簡単なスパイキングニューラルネットワーク（SNN）を紹介します。

> ※ 実行には [Intel NxSDK](https://www.intel.com/content/www/us/en/research/neuromorphic-computing.html) が必要です。

```python
from nxsdk.graph.monitor.probes import SpikeProbeCondition
from nxsdk.graph.nxboard import NxBoard

board = NxBoard()
input_neuron = board.createCompartmentGroup(size=64)
output_neuron = board.createCompartmentGroup(size=1)

# シナプスで接続
input_neuron.connect(output_neuron, weight=5)

# 動きのシミュレーション（スパイク入力）
input_neuron[5:10].spike()
board.run(100)  # 100ms のシミュレーション

spikes = output_neuron.spikeTimes
print("動きが検出された時刻:", spikes)
```

### 🖼️ イメージ図の提案：
- ニューロン間のスパイク信号
- 従来AIと脳型AIのアーキテクチャ比較

---

## 4. 🛠️ 現場で使えるヒント＆ハマりがちな落とし穴

### ✅ 現場Tips
- **ニューロン数は最小限に** → シンプルな構成が学習しやすく、エッジデバイスにも適応可能
- **イベントカメラとの併用** → Loihiと非常に相性が良い（高速処理）

### ⚠️ よくあるミス
- Spikeのタイミングを考慮せずネットワークを設計 → 学習がうまく進まない
- ハードウェアI/Oの同期問題 → Loihiと外部アプリの連携でバグ多発

---

## 5. 🚀 応用と展望

### 🎮 ロボティクス：リアルタイムの環境反応を実現する次世代のAI制御  
### 🧠 脳神経インタフェース：義手やリハビリ機器への応用が期待  
### 🛰️ 宇宙・IoT分野：電力制約のある環境に最適（低電力+高速処理）

---

## 6. 🔚 まとめ：脳型AIの現在地と未来

### 🌱 メリット
- 消費電力が非常に少ない  
- 時系列データに強い  
- 自律的な学習に近い処理が可能

### 🌪️ デメリット
- 学習モデルが複雑（SNNの設計には経験が必要）  
- ツールやエコシステムが発展途上  

---

## 👀 こんな方におすすめ！
- GPTでは物足りないと感じた方  
- ハードウェア×AIの新しい領域に挑戦したい方  
- ロボティクスやエッジAIに関心がある方  

---

## 📎 参考資料
- [Intel Neuromorphic Research Community](https://www.intel.com/content/www/us/en/research/neuromorphic-computing.html)  
- [Loihi SDK Docs](https://www.intel.com/content/www/us/en/research/neuromorphic-computing.html)  
- [snnTorch — PyTorchによるスパイキングNNライブラリ](https://snntorch.readthedocs.io)

---

この技術を使ったプロトタイプを試したい方、またはQiita記事化のための画像／図解支援が必要な方はお気軽にコメントください🧠🔥
ubuntu:20.04に最新のGolangをaptでインストールする


## 対象環境
- Ubuntu: 18.04, 20.04 or 22.04 (amd64, arm64 or armhf)

rootでの実行を前提としていますが、通常ユーザーでのインストールの場合はすべての`apt-get`コマンドを`sudo apt-get`に置き換えて実行することでパーミッションのエラーを回避できると思われます。（未確認）

## Dockerfileを作成

```dockerfile:Dockerfile
# ベースイメージとしてUbuntu 20.04を使用
FROM ubuntu:20.04

# パッケージインストール時のプロンプトを避けるための環境変数を設定
ENV DEBIAN_FRONTEND=noninteractive
# コンテナのタイムゾーンを設定
ENV TZ=Asia/Tokyo

# パッケージリストを更新しsoftware-properties-commonパッケージをインストール
# add-apt-repositoryコマンドに必要
RUN apt-get update \
  && apt-get install -y software-properties-common

# Golangバックポートリポジトリを追加してGoをインストール
# 最新バージョンのGoのためにlongsleep/golang-backports PPAを使用
RUN add-apt-repository ppa:longsleep/golang-backports \
  && apt-get update \
  && apt-get install -y golang-go

```


## Dockerイメージをビルド

```bash
docker build -t ubuntu_golang ./Dockerfile
```

## バージョンを確認

```shell-session
% docker run -it ubuntu_golang go version
go version go1.24.2 linux/amd64
```

## 参考サイト
https://go.dev/wiki/Ubuntu
https://askubuntu.com/questions/593433/error-sudo-add-apt-repository-command-not-found

---
UNOを使った最先端の画像生成：単一から複数の被写体へのカスタマイズ

今回は、ByteDanceの研究チームが開発した「UNO」と呼ばれる画期的な画像生成フレームワークについて紹介します。このColabノートを使って、UNOの機能を実際に試してみましょう。

## セットアップ手順

まずはGitHubからリポジトリをクローンします。

```python
# UNO-FLUXリポジトリをHugging Faceからクローン
!git clone https://huggingface.co/spaces/MakiAi/UNO-FLUX-local
```

次に、クローンしたリポジトリに移動します。

```python
# UNO-FLUXディレクトリに移動
%cd /content/UNO-FLUX-local
```

必要なライブラリをインストールします。

```python
# requirements.txtに記載された依存ライブラリをインストール
!pip install -r requirements.txt
```

Hugging Face APIトークンを設定します。

```python
# Hugging Face APIトークンを環境変数に設定
# 注意: このトークンはColab上で安全に保存されるようにuserdataから取得しています
from google.colab import userdata
import os
os.environ['HF_TOKEN'] = userdata.get('HF_TOKEN')
```

アプリケーションを起動します。

```python
# アプリケーションの起動
# これによりUNOのウェブインターフェースが使用可能になります
!python app.py
```

最後に、ディレクトリの内容を確認します。

```python
# ディレクトリ内のファイルとフォルダを一覧表示
!ls
```

## UNOとは？

UNOは「Less-to-More Generalization: Unlocking More Controllability by In-Context Generation」というタイトルの研究から生まれた、単一の被写体から複数の被写体へと拡張可能な普遍的なフレームワークです。ByteDanceの研究チームによって開発されたこのモデルは、強力な汎化能力を持ち、多様なタスクを1つのモデルで統一することができます。

## UNOの仕組み

UNOは主に2つの重要な機能強化を導入しています：

1. **Progressive Cross-Modal Alignment（段階的なクロスモーダルアライメント）**
   - ステージI：単一被写体のインコンテキスト生成データを使用して、事前学習済みのテキスト→画像（T2I）モデルを被写体→画像（S2I）モデルに微調整
   - ステージII：生成された複数被写体のデータペアで継続的にトレーニング

2. **Universal Rotary Position Embedding（UnoPE）**
   - 視覚的な被写体制御をスケールアップする際に生じる属性混同問題を効果的に緩和する能力をUNOに提供

## UNOの特徴と利点

- **データスケーラビリティの課題解決**: 単一被写体から複数被写体データセットへの移行と拡張の難しさを克服
- **被写体拡張性の向上**: 従来の単一被写体生成に限定された手法から、複数被写体のシナリオにも対応
- **高い一貫性のあるデータ合成パイプライン**: 拡散トランスフォーマーの本質的なインコンテキスト生成能力を活用
- **強力な汎化能力**: 様々な画像生成タスクに対応可能

## 実用例と応用

UNOは以下のような様々なシナリオで活用できます：

- 複数の被写体を含む画像の生成
- 異なるスタイルや環境での被写体の表現
- 特定の被写体の特性を保持しながらの創造的な画像生成

## 技術的詳細

論文では、UNOはディフュージョントランスフォーマーの内在的なインコンテキスト生成能力を活用し、高い一貫性を持つ複数被写体のペアデータを生成します。さらに、段階的なクロスモーダルアライメントと普遍的なロータリーポジションエンベディングを導入することで、テキスト→画像モデルから反復的に訓練された複数画像条件付き被写体→画像モデルを実現しています。

## 結論

UNOは、単一被写体から複数被写体へと拡張可能な画像生成の新たなフレームワークとして、高い一貫性を保ちながら制御性を確保することができます。ByteDanceの研究チームによるこの革新的なアプローチは、画像生成の分野に新たな可能性をもたらしています。

この研究に関する詳細は、論文「Less-to-More Generalization: Unlocking More Controllability by In-Context Generation」（arXiv:2504.02160）を参照してください。
🧬【脳みそマネしてAI爆速!?】ニューロモーフィックコンピューティング入門〜シナプスで未来を変える〜

# 🧬【脳に学ぶ!?】ニューロモーフィックコンピューティング入門〜AIの未来はシナプスの中に〜

> "人間の脳みそは、やっぱり最強だった件。"





## 1. はじめに：AIの進化、でもまだ足りない？

生成AIや深層学習の進化は目覚ましいですが、それでも人間の脳の柔軟性・効率性にはまだ遠く及びません。そこで登場するのが「ニューロモーフィックコンピューティング（Neuromorphic Computing）」です。この記事では、その基本概念から実装例、現場でのTipsまで、一気に解説します。

---

## 2. ニューロモーフィックコンピューティングとは？

### 💡 定義
ニューロモーフィックとは、“neuro（神経）”＋“morphic（形態）”。つまり「脳の構造や働きを模倣した計算アーキテクチャ」です。

従来のVon Neumann型アーキテクチャと違い、以下のような特長を持ちます：

- 並列処理とイベント駆動
- エネルギー効率の高さ
- シナプス・ニューロンを模したハードウェア（例：Intel Loihi、IBM TrueNorth）

---

## 3. 実装例：Spiking Neural Network（SNN）でHello World! 🔌🧠

ここでは、Python + Brian2ライブラリを用いて、シンプルなスパイキングニューラルネットワーク（SNN）を実装してみます。

### 📦 Brian2インストール
```bash
pip install brian2
```

### 🧪 最小構成のSNNコード
```python
from brian2 import *

start_scope()

# ニューロンモデル定義
eqs = '''
dv/dt = (1-v)/ (10*ms) : 1
'''

# ニューロン群定義
G = NeuronGroup(1, eqs, threshold='v>0.9', reset='v=0', method='exact')
M = StateMonitor(G, 'v', record=True)

G.v = 0.5
run(100*ms)

import matplotlib.pyplot as plt
plt.plot(M.t/ms, M.v[0])
plt.xlabel('Time (ms)')
plt.ylabel('v')
plt.title('シンプルSNNニューロンの膜電位')
plt.show()
```

このコードでは、膜電位が一定値（0.9）を超えたらスパイクが発生し、リセットされるという動作をシミュレートしています。

---

## 4. 現場Tips：SNNで詰まるポイント⚠️

### ✅ よくある課題と対処法
- **時間スケールのチューニングが難しい** → まずはms単位で調整し、徐々に複雑化
- **学習アルゴリズムが限定的** → Spike-Timing Dependent Plasticity（STDP）を使った学習に注目
- **GPU未対応なことも多い** → SNNは現時点でまだCPUベースでのシミュレーションが主流

### ✅ 実務での活用例
- IoTセンサーデータのリアルタイム処理
- 脳波（EEG）解析への応用

---

## 5. 応用展開：エッジAIとの融合

ニューロモーフィックチップ（例：Loihi）は、エネルギー効率に優れるため、エッジデバイスとの相性が抜群です。

例えば：
- ドローンやロボティクスでの障害物回避
- スマートカメラでの即時顔認識

特に低消費電力かつリアルタイム応答が求められるシーンでの活用が期待されています。

---

## 6. まとめ：脳のチカラを借りる未来

### 👍 メリット
- 高エネルギー効率
- 並列処理性能
- 人間の脳に近い知能の可能性

### 👎 デメリット
- 学習アルゴリズムの未成熟
- 開発・デバッグ環境が整っていない

ニューロモーフィックは、まだ発展途上ではありますが、既存のAIと補完関係にある強力な選択肢です。エッジAI、IoT、ロボティクスといった領域に関心がある方は、今のうちに触れておくことをおすすめします！

> "今日の1スパイクが、未来のAIを変えるかもしれない。"

---

📌 本記事に関するコードはGitHubにて公開中（※ZennではCodeSandbox連携可）

---
キャリアに悩むエンジニアへ ── クリフトンストレングスで見つけた“本当の自分”

hi guys。たつみょんです。Qiitaでは主にITに関する技術系の記事が多いですが、今回はちょっと趣向を変えて、“キャリア”と“自己理解”について書いてみたいと思います。

## なぜこの記事を書こうと思ったのか

私、もともとは小中学校で成績が良く、高校は高専、そして大学は東京のそこそこ名の知れた理系大学に編入した経歴を持っています。

しかし就職活動の結果、なぜか建築関係の全く畑違いの職場に入り、気づけば現場で汗を流す職人になっていました。そこで3年間働いた結果、身体を壊してしまい、やむなく離脱。

その後、同社の営業事務に転属し、顧客折衝などを6年間続けましたが、2度にわたってうつを発症。

「なんでこんなことになったんだろう」

と悩み続けた末、色々あってITエンジニアへ転職。現在2年ほど頑張ってはいますが、正直なところ「向いていないのでは？」という感覚がずっと付きまとっています。

毎日「自分の将来はこれでいいのか」と不安に感じながら過ごす日々──。

そんなとき、知人に勧められて受けたのが **CliftonStrengths（クリフトンストレングス）** という自己診断テストでした。

## クリフトンストレングスとは？

クリフトンストレングス（旧ストレングスファインダー）は、Gallup社が提供する強み診断ツールで、34の資質の中から自分の上位資質を導き出してくれるというもの。

単なる性格診断とは異なり、「自分が何に喜びを感じるのか」「どんな行動が自然と取れるのか」といった深い洞察を与えてくれるツールです。

## 私の診断結果と気づき
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527006/154373f2-6e0a-4a1f-8ba5-9b7959a29dac.png)

診断結果として出た私の上位資質は、「人間関係構築力」に属するものが多く、その中でも特に『共感性』『成長促進』『調和性』などが目立っていました。

> 自分は「他者の成長を支援することに喜びを感じるタイプ」らしい。

正直、驚きました。なぜなら、私は「人間関係が苦手」とずっと思い込んでいたからです。

でも、よく思い返すと──

- 自分の知識を誰かに教えることは楽しかった
- 誰かが自分にアドバイスを求めてくれると嬉しかった
- 相手がその助言を活かして成長する姿を見ると、なぜか感動していた

そうした感情は、すべてこの「人間関係構築力」から来ていたのかもしれません。

さらに、こういったこともプラスに考えるようになりました：

- 人付き合いは苦手でも、親しい友人と話すのは楽しい
- 小規模な人間関係の構築ならできるかもしれない
- 小規模プロダクトや個人規模の開発で、誰かの役に立つものを作るのが好き
- 教育系のコンテンツを作り、顧客の成長を見ると嬉しい

## 職場での小さなフィードバック

実は以前、職場の後輩からこんなことを言われたことがあります。

> 「〇〇さんがいると、自己肯定感ばく上がりっす！」

当時は冗談っぽく聞き流していましたが、今思えば、これも私の資質が自然と周囲に影響を与えていた証拠だったのかもしれません。

## もし、もっと早く知っていたら……

これまで、自分の「強み」を活かしたキャリア選択をしたことがなかった私は、今更ながらこう思います。

> もし、もっと早く“自分の強み”を知っていたら、
> もっと自分に合った道を選べたのかもしれない。

## 同じように悩むエンジニアへ

今、自分のキャリアに不安を感じている方へ。

もしあなたが、

- 「今の仕事が向いていない気がする」
- 「将来が不安で仕方ない」
- 「もっと自分に合った働き方があるのでは」

と悩んでいるなら、ぜひ一度、クリフトンストレングスを受けてみてください。

自分でも気づいていなかった“本当の強み”が見えてくるかもしれません。

そして、その強みを活かすことで、今とは全く違うキャリアの選択肢が開けるかもしれません。

## 最後に

私自身、まだ道半ばです。

でも、こうして「自分を知る」ことで、少しだけ人生の舵を自分の手に取り戻せた気がしています。

あなたも、ぜひ一度、自分の中の“原石”を見つけてみてください。

---

診断はこちらから（※英語で購入画面が出ますが、日本語対応しています）
- [CliftonStrengths公式サイト](https://www.gallup.com/cliftonstrengths/ja/home.aspx)

キャリアに悩み苦しんでいるエンジニアの方へ少しでも届きますように。切に願います。
Flow Interactions Superbadge Unit


https://trailhead.salesforce.com/content/learn/superbadges/superbadge_flow_interactions_sbu


+ 承認プロセスとのフローインタラクション
+ 割り当てルールによるフローの相互作用
+ カスタムメタデータとのフローインタラクション

# ケース5612: 承認プロセスとのフローの相互作用

特定の条件下で承認プロセスを呼び出すフローを構成します。


:::note alert
We can't find an active flow named 'Discount Approval Request'.


「割引承認リクエスト」という名前のアクティブなフローが見つかりません。
:::

:::note alert
The 'Discount Approval Request' flow doesn't trigger when the discount is increased above the threshold, in the correct stage.


割引がしきい値を超えて増加した場合、正しい段階で「割引承認リクエスト」フローがトリガーされません。
:::

さっぱりわかりませんねぇ。

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Pk2ShSAJ

:::note alert
The 'Discount Approval Request' flow triggers on criteria in addition to the conditions specified.

「割引承認リクエスト」フローは、指定された条件に加えて基準に基づいてトリガーされます。
:::


# ケース 5623: 割り当てルールとカスタムメタデータとのフローの相互作用

カスタム メタデータと対話してリード レコードを更新し、既存の割り当てルールをトリガーするフローを構成します。 

:::note alert
We can't find the flow 'Set Lead Region.'
:::

:::note alert
The assignment rule will be executed before the 'Set Lead Region' flow sets the value of the Region field.


割り当てルールは、「リード地域の設定」フローが地域フィールドの値を設定する前に実行されます。
:::

意味がわからんな。

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgKxcSAF


:::note alert
The 'Set Lead Region' flow doesn't update the lead's Region value per to the requirements.


「リード地域の設定」フローでは、要件に従ってリード地域の値が更新されません。
:::


# ケース5641: フロー間の相互作用

既存のフローを、互いの関係およびビジネス要件に応じて適切に動作するように調整します。


:::note alert
The 'Sales EMEA Lead Rating' flow doesn't properly decide if the triggering lead is in the EMEA queue or not.


「Sales EMEA Lead Rating」フローでは、トリガーとなるリードが EMEA キュー内にあるかどうかが適切に判断されません。
:::


:::note alert
The 'Sales APAC Lead Rating' flow doesn't properly decide if the the triggering lead is in the APAC queue or not.
:::
"putFile"で firebaseに画像をアップロードしようとするとエラーが出る時の対処法 [Firebase Storage][Flutter]

# firebaseに画像をアップロードしようとするとエラーが出る
#### 開発環境
- Flutter
- firebase storage

エラー内容
```
 [firebase_storage/unknown] The operation couldn’t be completed. Message too long.
```
メッセージが長すぎると言われる
調べてみたところ、稀にiosでも同様のエラーが発生する場合があるらしい

## 試したこと
1. 画像圧縮
1. ファイル名短縮
1. putFile → putDataに変更【💡解決！】

#### 1. 画像圧縮✖
画像を幅600pxまで落とし、解像度を80%にしたが効果は無かった。

#### 2. ファイル名短縮✖
もともと時間取得する関数で13桁の整数をファイル名にしていたが、それを６文字にしてみたが効果なし。

#### 3. putFile → putDataに変更〇
putFileで送信していところをputDataで送るようにしたら画像をアップロードできるようになった！
putDataに置き換えるに伴って送信する画像の型など変換の必要があった。

## 解決方法
以下のコードでputDataとして送信

```
FirebaseStorage.instance.ref("image/sample").putData(uint8list, metadata)
```


## なぜputDataだといけたのか
firebaeドキュメント

https://firebase.google.com/docs/storage/ios/upload-files?hl=ja

**putDataとputFileの違い**
putData ... メモリ内のデータからアップロードする
putFile ... デバイス上のファイルを表す URL (ローカルファイル)からアップロードする

> 文字列や File のアップロードが現実的でない場合は、下位の型付きデータを Uint8List 形式でアップロードできます。この場合は、データを指定して putData() メソッドを呼び出します。

ほえー
Fileがでかすぎたり何かしらの要因でアップロードできない場合は、`Uint8List`形式に変換して``putData()``で送信することでアップロードできるらしい。


###### Uint8Listについて
```Uint8List```...Dart型の１つで、固定長の8ビット符号なし整数のリスト

この辺が分かりやすかったです

https://zenn.dev/joo_hashi/articles/c1836351824a42

https://flutter.salon/dart/convert-binary-data/#:~:text=Uint8List%20%E3%81%AF%E3%80%81%E5%9B%BA%E5%AE%9A%E9%95%B7%E3%81%AE,%E3%81%AE%E9%9D%A2%E3%81%A7%E6%9C%89%E5%88%A9%E3%81%A7%E3%81%99%E3%80%82

#### 画像ファイルをputDataでアップロードすることの弊害
- putDataメソッドで保存しているので、putFileとは保存されるデータの形式が異なる。
    - firebase storageで画像が表示されない。画像を確認したい場合、URLからダウンロードして見る必要がある

# 最後に
このエラー自体あまり頻繁に起こることではなさそうですが、もし同じ状況になった際参考になれば良いと思います
フロー障害パス




+ [【ヘルプ】メールを送信するすべての障害パスの設定](https://help.salesforce.com/s/articleView?id=platform.flow_build_logic_fault_email.htm&type=5)



# フロー障害パス

+ [フロー障害パス設定時のメール通知についてご教示いただきたいです。障害パスでメール送信アクションを追加していますが、その障害パスを通るのと同じタイミングでフローのシステムエラーメール(FlowApplication)も送信されてしまいます。このメール通知をアクションで設定した1通のみにしたい](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmAOHSA2)

:::note
障害パスのシステムエラーメールを停止することは難しいかと思います。
どうしてもシステムエラーメールを送信したくない場合は、Apexアクションを使用してみてください。
:::


# 自由形式での障害パスの追加

どうやっても分かりませんね。どこにも書かれてない。

自働形式なら簡単なんですが...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/db921098-2c52-4b20-92a0-e209f42aecc4.png)

仕方ないので色んなキーを押しながら繋いでみます。

ああああ、Altキーみたい。
sortで複数条件を動的に処理するHow to

perlのsort関数はかなり優秀で、下記の様に簡単に複数条件での並び替えが可能です。
```perl
@data = sort{ $a->{'key1'} <=> $b->{'key1'} || $a->{'str1'} cmp $b->{'str1'} } @data
```

が、しかし、置換（eオプション）の様に変数展開ができません。

```perl
my $e = "$a->{'key1'} <=> $b->{'key1'} || $a->{'str1'} cmp $b->{'str1'}";
@data = sort{ $e } @data
※みたいなことはできなかったです
```

evalを使用することで、課題クリアです！

```perl
my @data = (
    {   'name' => 'okuno',
        'key'  => '1',
        'key2' => '1',
    },
    {   'name' => 'yamada',
        'key'  => '2',
        'key2' => '2',
    },
    {   'name' => 'hanaoka',
        'key'  => '1',
        'key2' => '3',
    },
    {   'name' => 'suzuki',
        'key'  => '1',
        'key2' => '2',
    },
);

my @keys = ('key_number','key2_number'); # _numberで数値検索の判定
eval "\@data = sort { @{[&get_sort_formula(@keys)]} } \@data";

# @dataがsortされるので、後は必要な処理をどうぞ
exit;


# sort式リターン exp) $a->{'key'} <=> $b->{'key'} || $a->{'key2'} <=> $b->{'key2'}
sub get_sort_formula {
    my @keys = @_;
    
    my @sort;
    for my $order (@keys) {
        my ( $f, $a_d ) = split( / /, $order );
        my (@f) = split( /_/, $f ); # 数値 or 文字列判定 key_number

        if ($a_d) {
            if ( $f[1] ) {
                push( @sort, "\$b->{'$f[0]'} <=> \$a->{'$f[0]'}");
            }
            else {
                push( @sort, "\$b->{'$f[0]'} cmp \$a->{'$f[0]'}");
            }
        }
        else {
            if ( $f[1] ) {
                push( @sort, "\$a->{'$f[0]'} <=> \$b->{'$f[0]'}");
            }
            else {
                push( @sort, "\$a->{'$f[0]'} cmp \$b->{'$f[0]'}");
            }
        }
    }

    return join( ' || ', @sort);
}
```

eval実行式に文字列や変数だと実行されなかったり展開されたりするので、ダブルクォーテーションと￥を駆使することが重要です👍（evalを使用する時は変数エスケープなど慎重に）
Goで作る超簡単API（最低水準）

## 環境構築
①[ここから](https://go.dev/)自分の環境にあったGoをインストールする．

②APIを作るGoのフレームワークGinを導入する
```
go mod init myapp         # プロジェクト初期化（1回だけ）
go get github.com/gin-gonic/gin
```

## ソースコード
main.goファイルを作成し，下記を張り付ける．
```Go:main.go
package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default() // Ginのルーター初期化

	// ルーティング定義：GET /ping → JSONを返す
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})

	// サーバー起動（localhost:8080）
	r.Run(":8080")
}
```
GETメソッドを使用し，ローカルホスト番号/pingが指定された時に，JSON形式のメッセージを返します．
その時に，ステータスコードを200（リクエストが正常に処理できた）で返します．

ステータスコードの詳細は[こちら](https://qiita.com/takuo_maeda/items/9cff0b03e74f8f600eee)


## 実行
```bash:bash
go run main.go
```
すると，下記のようなログが表示される．
```
[GIN-debug] Listening and serving HTTP on :8080
```

## GETメソッドの実行
PowerShellを開き，下記コマンドを実行
```bash:bash
curl http://localhost:8080/ping
```
:::note info
補足
GETメソッドは多用するため，-X GETを記述しなくても使用できる．
下記は同じ処理結果を得ることができる．
```bash:bash
curl http://localhost:8080/ping
curl -X GET http://localhost:8080/ping
```
:::


## 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457930/aad289a6-ad4a-43a3-887a-c154103b8cca.png)

ステータスコード200で{"message":"pong"}を取得できた．

## 他のメソッド
	Ginでの書き方	curlの例
GET	取得	r.GET()	curl http://localhost:8080/XXX
POST	作成	r.POST()	curl -X POST -d ...
PUT	全更新	r.PUT()	curl -X PUT -d ...
PATCH	一部更新	r.PATCH()	curl -X PATCH -d ...
DELETE	削除	r.DELETE()	curl -X DELETE ...


| メソッド | 操作　| Ginでの書き方 |	curlの例|
|:-----------|:------------|:------------|:------------|
|GET	| 取得 | 	r.GET()	| curl http://localhost:8080/XXX |
| POST	| 作成 | 	r.POST()	| curl -X POST -d ... | 
| PUT | 	全更新 | 	r.PUT()	| curl -X PUT -d ... | 
| PATCH	| 一部更新	| r.PATCH()| 	curl -X PATCH -d ... | 
| DELETE | 	削除	| r.DELETE()	| curl -X DELETE ... | 


## GoとGinで作れるもの
Go（Golang）でAPIやWebサービス開発を学び続けると、どんどん作れるものの幅が広がります。以下はレベル別に作れるものの例をまとめたものです。

---

## 🌱 初級：今の延長でできるもの

| 作れるもの | 説明 |
|------------|------|
| REST APIサーバー | JSONを返すシンプルなWebサービス |
| TODOアプリのバックエンド | データ追加・更新・削除ができるAPI |
| ログイン画面の認証API | ID/パスワードによる簡易ログイン機能 |
| JSONで動くチャットAPI | メッセージの送受信をAPI経由で実装 |

---

## 🌿 中級：DBや外部連携を使うと

| 作れるもの | 技術が必要なこと |
|------------|----------------|
| ユーザー管理システム | MySQL/PostgreSQLとの連携、バリデーション |
| 予約システムAPI | 時間管理、トークン認証（JWTなど） |
| 天気やニュースの取得API | 外部API（OpenWeatherなど）と連携 |
| スマホアプリ用のバックエンドAPI | CORS設定やJSON構造の工夫 |

---

## 🌳 上級：本格的なサービスやマイクロサービス構成

| 作れるもの | 特徴 |
|------------|------|
| オンラインショップのAPI（カート・決済） | セッション管理・商品検索・在庫処理 |
| IoTデバイスと通信するAPI | MQTTやWebSocketとの組み合わせ |
| マイクロサービス構成のWebシステム | 複数API間通信、APIゲートウェイ（例：Kong） |
| 本番デプロイ可能なクラウド連携API | Docker、Kubernetes、CI/CD、自動スケール |

---
ITP（Intelligent Tracking Prevention）の仕組みと対策方法

# 1. はじめに
## ITPとは何か
- Safari（ブラウザ）に搭載されているプライバシー保護機能のひとつ。
- ユーザーのウェブ上でのトラッキングを制限するために設計された。
- **Third-Party Cookie、First-Party Cookieに対する制限や、JavaScriptを通じた追跡手法の排除**の対応をしている。

## なぜITPが導入されたのか
- **過剰なターゲティング広告や行動追跡に対するユーザーの懸念があったため**
→ Appleは**プライバシーは基本的人権である**という理念をもとに、開発・強化を行っている。


# 2. Cookieの種類と特徴
## Cookieとは
- Webサイトがユーザーのブラウザに保存する小さなデータのこと。
- ログイン情報の保持、ユーザー設定の記録、行動履歴の保存に使う。

## Cookieの基本分類
- Cookieは以下の2軸で分類される
  - ドメイン関係: **First-Party** or **Third-party**
  - 発行元: **JavaScritp(Client)** or **Server**

### 1. First-Party Cookie
- ユーザー直接アクセスしているドメイン（例: `example.com`）が発行するCookie。
- セッション管理や言語設定で使用される。

### 2. Third-Party Cookie
- ユーザーがアクセスしているサイトとは**異なるドメイン**（例: `hogo.com`）が発行するCookie。
- 広告配信みゃアクセス解析などの**クロスサイトトラッキング**に活用される。

### 3. Client Cookie
- ブラウザ側（JavaScript）で生成・操作されるCookie。
- `document.cookie`を用いて読み書きする。
- セキュリティ制御が弱く、**HttpOnly属性**を付けられない点が注意。

### 4. Server Cookie
- サーバーから`Set-Cookie`ヘッダを通して発行されるCookie。
- `Set-Cookie`ヘッダがレスポンスに含まれることでブラウザに保存される。
- セキュリティ属性（HttpOnly, Secureなど）を細かく設定できる。

# 3. ITPの仕組み
## クロスドメイン制限
- ITPの本質は**「Third-Partyによるクロスサイト追跡の排除」**
- **ユーザーが明示的に同意していなくても追跡が可能**な構造なので、ブロック対象となる。

https://webkit.org/blog/10218/full-third-party-cookie-blocking-and-more/

:::note warn
**サブドメインは`Farst-Party`扱いになる**
ITPは、`eTLD+1`ルールが適用しており、eTLD+1（例: `example.com`）が一致しているeTLD+2（例: `sub.example.com`）は同ドメインを扱われる。
:::

https://webkit.org/blog/8311/intelligent-tracking-prevention-2-0/

## 有効期限の制限（ITP 2.1以降）
- JavaScriptで発行された**First-Party Cookieの有効期限を最大7日間**に制限。

https://webkit.org/blog/8613/intelligent-tracking-prevention-2-1/

## Cookie区分表
| ドメイン関係 | 発行元 | 主な用途 | ITP影響 |
|------|----------|--------------|----------|
| Farst-Party | Client(JS) | 状態保持系 | **7日間制限あり** |
| Farst-Party | Server | 認証系 | **制限なし** |
| Third-Party | Client(JS) | ほぼ使えない | **完全にブロックされる** |
| Third-Party | Server | 昔のトラッキング系 | **ブロックされる or 即時削除** |

### →  基本的には`Farst-Party × Server`を使用すれば影響を受けない
StructuredOutputParserの使い方

# StructuredOutputParserについてまとめておく
2025.4時点でStructuredOutputParserについての記述があまりないので、その一助のために記載しておく
pydamic function callの内藤とかとまじってしまっていて、AIさまも正しい内容をだしてくれてない感じしたので

# コード
```python
from duckduckgo_search import DDGS
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain_community.document_loaders import UnstructuredURLLoader
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain.output_parsers import StructuredOutputParser, ResponseSchema

# OutputParserの準備
response_schemas = [
    ResponseSchema(name="address", description="会場の住所"),
    ResponseSchema(name="access", description="アクセス方法"),
    ResponseSchema(name="features", description="会場の特徴"),
    ResponseSchema(name="manager", description="会場の担当者"),
    ResponseSchema(name="tel", description="会場の電話番号"),
    ResponseSchema(name="email", description="メールアドレス"),
    ResponseSchema(name="url", description="URL"),
    ResponseSchema(name="open", type="boolean", description="営業しているかどうか"),
    ResponseSchema(name="venues", type="list", description="会場内の施設のリスト"),
]
# parserを生成
parser = StructuredOutputParser.from_response_schemas(response_schemas)

def register_chroma(word:str):
    # Chromaの初期化
    results = DDGS().text(word, max_results=20, region="jp-jp")
    urls = list(map(lambda x: x['href'], results))
    splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
    loader = UnstructuredURLLoader(urls=urls)
    documents = loader.load()
    docs = splitter.split_documents(documents)
    embeddings = OpenAIEmbeddings()
    chroma = Chroma.from_documents(docs, embeddings, persist_directory="./chromadb")
#    chroma.persist()
    return chroma

word = 'Bunkamura'
chroma = register_chroma(word)
retriever = chroma.as_retriever()
llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0)
parser = StructuredOutputParser.from_response_schemas(response_schemas)

template = """\
指定された会場の情報を教えてください。
文脈:{context}
{format_instructions}

会場:{input}
"""
# Promptを生成し、内容を部分適用する
prompt = ChatPromptTemplate.from_template(template=template)
prompt_with_parser = prompt.partial(format_instructions=parser.get_format_instructions())

# クエリを投げる
chain = {"context": retriever, "input": RunnablePassthrough()} | prompt_with_parser | llm | parser
result = chain.invoke(word)
print(result)
```
流れとしては
- chromadbからのretrieverの読みだし
- lChatPromptTemlateからpartialを設定して部分適用されたpromptを生成
- それをLCELで流す
- ResponseSchemaの型はデフォルトだが、型情報をわたすと、それにしたがって生成する
- 最終的にはjsonがかえってくる

langchain関連のインポートなりduckduckgoなりのインタフェイスについてはいくらでも情報があるので調べてください

# 注意
ResponseSchemaのnameのところは問いあわせに使われたりもするので、ミススペルなどするとinvalid jsonで落ちる罠とかある
LLMならではという感じがしますね
(capasityとかいれてたら落ちたよ)

# まとめ
ResponseSchemaの使いかたとPromptの流れがわかれば大丈夫だと思います
ではenjoy
Alibaba IMSで音声対話できるAIエージェントを試してみた

Alibaba Intelligent Media ServicesのAIエージェントで音声対話できるのが出たらしい　ので試してみる〜

[https://www.alibabacloud.com/help/ja/ims/user-guide/creating-and-managing-intelligences?spm=a2c63.p38356.help-menu-193643.d_2_8_4.414d3691wqH6qN](https://www.alibabacloud.com/help/ja/ims/user-guide/creating-and-managing-intelligences?spm=a2c63.p38356.help-menu-193643.d_2_8_4.414d3691wqH6qN)

まずはIMSにアクセス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/803fded9-0c2a-4804-a3e9-8834f5ed4366.png)


シンガポールリージョン固定なんだね〜

アクティベートと権限付与して使う！

![image 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/4fa1e671-6f2c-4738-a186-c3b703adb235.png)


Real-time ConversationsのIntelligent Agent Managementでやるらしい

Agentつくってみる
![image 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/0a2a0ef2-ed7e-4aef-bacd-060fb1d01be1.png)


AgentはWorkflowに沿って動くのか〜

デフォルトでVoiceChatSystemWorkflowが用意されてたのでこれを設定する

ちなみにVoiceChatSystemWorkflowの中身をみてみると

![image 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/4d52f688-0d99-4219-844a-0858b6551fc4.png)


基本的な流れのやつだ〜

ARTC Applicationってなんだろ？とおもったけどApsaraVideo Liveというのがあるのね

これもデフォルトのを設定しとく

![image 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/f42f3b38-4b14-4edf-8bb9-aa3f9fd3750a.png)

Greetingをオンにして文言設定しておいてみる

作成！

![image 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/16c27843-bd8c-4f56-bcbb-92f207f57bce.png)


できた〜

コールバックも設定できるみたい　今回はしない！

![image 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/cea9f8e0-e071-46ba-8abb-18570d2d9027.png)


一覧に戻って、QR Code for Demoで試してみる

[ここ](https://www.alibabacloud.com/help/ja/ims/user-guide/the-demo-experience-of-ai-interact?spm=a2c63.p38356.0.i2)に載ってるQRコードからアプリいれて試す〜

![image 7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/2deef6f6-131a-4133-bfc2-07d592bf1d4c.png)
![image 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/85e0abe4-523f-4ec6-a9e6-c073f0cd9138.png)


日本語で挨拶したら中国語で返ってきたので、workflowを変えてみる〜

新規でworkflowを作って、Speech-to-textとLLMとText-to-speechをそれぞれ日本語にしてみた

![image 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/f7be759e-f4f7-4650-8875-231ca322f9d9.png)


![image 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/3bca2824-0c65-4715-bcbc-fcb5ca785078.png)


![image 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/45d1dbd2-8071-4611-a0de-4412152339c8.png)


Agentのほうで作ったworkflowを参照するようにしてsubmitする

![image 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/50b47f53-aed9-4c71-b01a-f8ee48c8dc1d.png)


アプリからもっかいつかってみる〜

![image 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267793/3f24031d-6c75-486d-8528-a66227f945ec.png)


おお〜できた！

全部日本語でやりとりできる〜！

まとめ

- 音声対話出来るの楽でよい
- Agentつくるのも、workflowつくるのもめっちゃ簡単でよい！
- 音声認識についてはもうちょっと正確だと使いやすいかも
- あとやっぱり日本語のやりとりに途中で中国語入ってきたりもするからモデルのアップデートに期待

おわり
Windowsでconsole sessionを残してRDP切断する方法

## はじめに

知っている人は知っている話だが、Windowsにはログオンセッションの違いによって動作が違うプログラムというのが存在する。Power Automate Desktopで書いたUI操作がいるフローとか。

## セッションの種類

実機アクセスしている場合console sessionになる

```
C:\Users\yumetodo>query session
 セッション名      ユーザー名               ID  状態    種類        デバイス
 services                                    0  Disc
>console           yumetodo                  2  Active
 rdp-tcp                                 65537  Listen
```

RDPアクセスしている場合、remote sessionになる

```
PS C:\WINDOWS\system32> query session
 セッション名      ユーザー名               ID  状態    種類        デバイス
 services                                    0  Disc
 console                                     1  Conn
>rdp-tcp#1         yumetodo                  2  Active
 31c5ce94259d4...                        65536  Listen
 7a78855482a04...                        65537  Listen
 rdp-tcp                                 65538  Listen
```

リモートデスクトップで、ウィンドウを閉じて切断するとセッションがリモートセッションのままになってしまう。

## tscon

そこで、管理者権限コマンドプロンプトから

>tscon 1 /dest:console

のように、現在RDPしているセッションID(一つ上のquery sessionの結果の場合2になる)をコンソールセッションに切り替えることでRDPを切断するとうまくいくことがある。