OmniAICreator/Qiita-1.07M huggingface dataset:
ドメインだけでしりとりしてみたい【ウェブアプリ】


# ドメインしりとり
*`www.google.com`, `yahoo.co.jp`, `wikipedia.org` ...*
インターネットドメインって日常的によく見るものはなんとなく覚えるし、基本アルファベットだけだし、しりとりできるんじゃないかと思うこと、ありますよね。

今回は実在のドメインを使ってしりとりができるサイトを作成しました。
インターネット力を測るベンチマークとしてぜひお試しください！結構難しいです！

https://m-shiritori.omine.me

![サイトのスクリーンショット](https://github.com/omine-me/tech-articles/blob/main/images/domain-shiritori/thumb.png?raw=true)


## ルール
- ドメインでしりとりする
- 英字(a-z)・数字(0-9)・ハイフン(-)・ドット(.)が使用可能
- ドメインが存在していなければアウト
（パブリックDNSに問い合わせて確認）
- 同じドメインは使えない
（※`www.google.com`と`google.com`は異なるのでOK）
- ドメインの難易度等（後述）からポイントを算出
- ３回アウトで終了
- 世界一有名なドメイン`www.google.com`からスタート
- 調べるの禁止！

日本語ドメインのような国際化ドメインは使えないのと思うかもしれませんが、Punycode化(ASCII文字化)されたものを覚えていればもちろん使えます！
例：`日本語.jp` → `xn--wgv71a119e.jp`

## 技術スタック
- JavaScript
- GitHub Pages
- Public DNS
    - ドメインの存在チェック用。今回はGoogle Public DNS

一切のライブラリを使用していない脳筋プレイになっています。
可読性は低いですが、そこまで複雑なスクリプトでもないですし、依存がほぼゼロなのでいいんじゃないでしょうか。何より書いてて楽しかったのでOKです。

### ステートの管理
ちょっとこだわった点としては、ステートの管理です。
ポイントや残機数、これまでのドメインなど、管理すべき状態がいくつかありますが、今回はJavaScript内に変数などで保持しているわけではなく、htmlを参照しています。例えば、残りの残機数はハートのアイコンを持つimgタグの数を数えて算出する、などです。これにより、コード内の変数の状態と表示内容が異なってしまうなどのバグが絶対に起こりません。簡単なページだからこそできることかもしれません。

## ポイントの算出方法
このゲームでは、各ドメインごとにポイントを算出しゲームオーバー時に全部のポイントを足して最終的な得点にしています。
難しいドメインを使えた方がポイントが高いようにしたいので、今回は以下の観点でポイントを算出しています。
- 文字数
    - 長ければ長いほど指数的にポイントが増えます
        - 指数的に増やしているのは、`mail.com`のような簡単な単語+.comなどというそれはあるだろというドメインでポイントを稼がれると面白くないからです
- サブドメインの数
    - `aaa.bbb.ccc.example.com`のようにサブドメインが多いほど指数的にポイントが増えます
- トップレベルドメイン(TLD)のランキング
    - `com`, `net`, `org`はよく使われるので、その他のTLDに比べ少しポイントが落ちます。（`jp`ドメインは日本ではよく見ますが、国別コードトップレベルドメイン(ccTLD)でポイントが変わると不公平感があるので除外。）

## 終わりに
作者のベストスコアは118,988点です！
挑戦の結果をXで共有して欲しいです！

![118,988点の表示と入力したドメインがリストで表示されたリザルト画面](https://github.com/omine-me/tech-articles/blob/main/images/domain-shiritori/best_result.png?raw=true)

※ 打ち込んだドメインに実際にアクセスするのは、セキュリティ的におすすめしません！
【Unity】ML-Agentsで機械学習をしよう！② 学習編

# 強化学習を自分でしよう！
[前回](https://qiita.com/Cheesecake2960/items/9b0580f401821e872236)は、UnityにML-Agentsを導入してサンプルを動かしましたが、自分でも学習させたくないですか？
今回は、自分で強化学習をするための方法を書こうと思います:cheese::cake:
あと、前回の記事に書いてある内容を先にやっておくとスムーズに進めると思います！

:::note info
分からないことがあればコメントに書いてください！
出来る限り答えます！
:::

## 事前準備
- Anacondaをインストール
- Visual C++ 再頒布可能パッケージ(必要になることがあるらしい)
- [ML-Agentsの開発環境を作成](https://qiita.com/Cheesecake2960/items/9b0580f401821e872236)

# Anacondaで環境構築
1.Anaconda Promptを開く
![0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930283/9c8c17e1-4b19-e59c-7a7f-1bc95b1d5473.png)
検索欄に、**Anaconda**と入力すると出てくると思います。

2.仮想環境を作成
```bash:Anaconda Prompt
# 仮想環境を作成
conda create -n mlagents20 python=3.10.12

# 作った仮想環境に切り替え
conda activate mlagents
```
**mlagents20**という名前は、自分で好きな名前を付けることができます！
本記事では、mlagents20という名前を使います。

:::note warn
ML-Agents20ではPythonバージョン**3.10.12**が推奨されています！
:::

3.Pythonライブラリをインストール
```bash
python -m pip install mlagents==1.1.0
```

# 学習を開始
```bash
cd [ml-agentsのディレクトリ]
mlagents-learn config/ppo/PushBlock.yaml --run-id=test01 --force

            ┐  ╖
        ╓╖╬│╡  ││╬╖╖
    ╓╖╬│││││┘  ╬│││││╬╖
 ╖╬│││││╬╜        ╙╬│││││╖╖                               ╗╗╗
 ╬╬╬╬╖││╦╖        ╖╬││╗╣╣╣╬      ╟╣╣╬    ╟╣╣╣             ╜╜╜  ╟╣╣
 ╬╬╬╬╬╬╬╬╖│╬╖╖╓╬╪│╓╣╣╣╣╣╣╣╬      ╟╣╣╬    ╟╣╣╣ ╒╣╣╖╗╣╣╣╗   ╣╣╣ ╣╣╣╣╣╣ ╟╣╣╖   ╣╣╣
 ╬╬╬╬┐  ╙╬╬╬╬│╓╣╣╣╝╜  ╫╣╣╣╬      ╟╣╣╬    ╟╣╣╣ ╟╣╣╣╙ ╙╣╣╣  ╣╣╣ ╙╟╣╣╜╙  ╫╣╣  ╟╣╣
 ╬╬╬╬┐     ╙╬╬╣╣      ╫╣╣╣╬      ╟╣╣╬    ╟╣╣╣ ╟╣╣╬   ╣╣╣  ╣╣╣  ╟╣╣     ╣╣╣┌╣╣╜
 ╬╬╬╜       ╬╬╣╣      ╙╝╣╣╬      ╙╣╣╣╗╖╓╗╣╣╣╜ ╟╣╣╬   ╣╣╣  ╣╣╣  ╟╣╣╦╓    ╣╣╣╣╣
 ╙   ╓╦╖    ╬╬╣╣   ╓╗╗╖            ╙╝╣╣╣╣╝╜   ╘╝╝╜   ╝╝╝  ╝╝╝   ╙╣╣╣    ╟╣╣╣
   ╩╬╬╬╬╬╬╦╦╬╬╣╣╗╣╣╣╣╣╣╣╝                                             ╫╣╣╣╣
      ╙╬╬╬╬╬╬╬╣╣╣╣╣╣╝╜
          ╙╬╬╬╣╣╣╜
             ╙
~~~ 以下略 ~~~
```
Unityロゴが出たら成功です！
Unity側でPushBlockのサンプルを動かしてみてください。
![ML-Agents-Learning](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930283/18964881-bd4a-1d6a-8a9c-88b165b5140f.gif)
学習が始まりました！何分か放置しておくと、学習が終わると思います。

# おわりに
今回はML-Agentsで機械学習をしてみました！
最後まで読んでいただきありがとうございます。
コメント、いいねしていただけると嬉しいです！
Googleスプレッドシートで確証編集

## WEBの領収書等をいい感じに組み合わせたい
何かしらの還付申請をするときに下記のようなモノたちをかき集めて切り貼りしてA4の大きさにしたいニーズが結構ある。私には。
- 利用明細書（クレジットカードの明細とか）
- 金額の根拠が記してあるWEBページ
- 上記を紐づけるなにか（赤枠で強調して矢印でポイントして、とか）

こんなやつ。Excelで作ったもの。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3916302/07f4fd2d-46c6-9f99-b084-b0c46bd56239.png)

そしてそれをMSExcelではなくGoogleスプレッドシートでやりたかったのだが、雰囲気がだいぶ違ったのでメモ

### Excelだと
シートにのっけたそれぞれの画像を左右前面後面に移動するイメージ

### Googleスプレッドシートだと
シートにまず`挿入`→`図形描画`で図形描画オブジェクトをのっけて、その上に画像を貼り付けて左右前面後面するイメージ
オブジェクト上での操作感はExcelに近い。

こんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3916302/d2cbb172-1b8a-488c-1697-4d62afb0d680.png)
CPUを創ってみた【前編】

伝説の名著『[CPUの創りかた](https://book.mynavi.jp/ec/products/detail/id=22065)』を数年前に購入し長らく積まれていたが、ようやく重い腰を上げて読破した。読んでいたら実際に創ってみたくなった。前編では、買い出しに行って部品を揃えたところまで言及する。

# 入手困難なIC
この書籍は20年以上前のものになるので、書かれた当時からとは時代が変わって入手困難になったICも存在する。参考サイトの通り代用品を用いて回路に変更を加えている。それ以外の部品は書籍の通りである。

# 回路の変更点
このCPUのキラーアプリはラーメンタイマーである。タイマーであるからには時間が来たらLEDが光るだけでなくブザーを鳴らしたい。書籍にも載っている回路を参考にしながらブザーを追加することにした。ブザーを安定して鳴らすためにはバッファが必要になるが、これはNOT回路を2段繋げることで実現できる。
秋月電子でUGCM1205XPという電子ブザーを入手した。こちらは最大定格電流が30mAである。このCPUで用いるNOT回路は74HC04であり、秋月電子で入手した74HC04APの最大定格出力電流は25mAである。電子ブザーに接続されるバッファの2段目は2並列以上で良い計算になる。幸い、CPU本体に使われず余るNOT回路で事足りた。

# 買い出し
通販で買い集めてもいいのだが、せっかくなので久し振りに秋葉原へ赴くことにした。
秋月電子に行けば大半のものは手に入るが、一部手に入らなかったものは千石電商で調達した。それでも手に入らないものはマルツオンラインで入手することができた。マルツオンラインはDigiKeyと提携しているためアイテム数が豊富で便利である。大学生協受け取りなんかもできる学生の味方だ。
千石電商およびマルツオンラインで調達したものを以下に示す。それ以外のものは秋月電子で調達した。
- CPU-132(千石)
    - 電源パターン入りユニバーサル基板
- 33kΩ 1/4W(千石)
    - カーボン抵抗
- DN9-1C(千石)
    - 9ピンダイオードアレイ(カソードコモン)
- 74HC153(千石) 
    - 4入力データセレクタ
- 74HC161(マルツ)
    - 4bit同期カウンタ
- 74HC283(マルツ)
    - 4bit全加算器

33kΩの抵抗が秋月電子でたまた在庫切れだったため千石電商で購入した。ダイオードアレイは参考サイトではCE880を用いているが秋月電子に16個在庫が無かったため同等の特性を持つDN9-1Cを千石電商で購入した。
74HC161は入手困難になりつつあるようだが、DigiKeyに在庫がありマルツオンライン経由で入手できた。帰宅して購入した物品を確認すると**74HC283**と間違えて**74HC238**を購入していたというミスが判明したが、マルツオンラインで取り寄せることができ事なきを得た。
</br>
</br>
気が向いたら後編として実際に制作した様子を記事にしようと思っている。

# 参考
1. [『CPUの創りかた』を読んでCPUを自作した](https://tanuki-bayashin.hatenablog.com/entry/2024/01/19/073754)
2. [いまさらCPUを創る(1)：パーツリスト](https://fumimaker.net/entry/2019/05/21/232344)
3. [オリジナルからの変更点](https://note.com/cuboktahedron/n/n673aa0075633)
【Unity】PolySpatial開発Tips: Scale 反転したButton は操作ができなくなる【AppleVisionPro】

GraffityでVisionPro 周りのコンテンツ開発を最近よく行なっているUnityエンジニアのcovaです。

今回は短いのですが通常のスマホ向けコンテンツ等の開発ではたまにやりがちだけど、AppleVisionPro 向けコンテンツではOUTな事例紹介ということでUIにまつわるTips の紹介です。

UIのボタンにおいて、 `画像反転` をしたいがために `ScaleのXの値` を `-1` などの負の値にする場合があります。

本来は
- 反転画像を用意する
- UI用ShaderでY軸Flip Optionを入れて対応をする
- C# Script で反転画像を差し込むような処理を書く

ということをすれば問題ないのですが、横着することは稀によくあります。
スマホゲームだと画像の反転でImage Component がついたものに対しては時間効率的にやる場合もなくはないのですが、AppleVisionPro においては大問題になるので紹介します。

# Unityでの具体例
![InverseUI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/db9f736f-4ca5-8be3-53d0-f336cc954c40.png)

上記ScreenShotのように `左側` には `本来の反転画像を入れたButton` を用意。
`右側` には `横着して右向き矢印の画像` を `Scale反転` して見た目を同じようにしています。

しかし見た目は同じですが以下のような挙動をします。

::: note alert
- UnityEditor ではボタンの当たり判定があります
- 右側はAppleVisionPro 実機で行うと操作ができません
    - PlayToDevice でも同様で実機は操作できませんが、Editor側では操作ができます
:::


# 対処法
よくよくInspector を見ると、親切にも `Project Validation` のボタンが表示されて修正しろと警告がでていますね。

![zoom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/0a5a3082-fc75-fba6-da01-047db8d67f7a.png)

ということで素直に公式が `辞めぃ！` ということはやめましょう


# まとめ
- 負のScale はAppleVisionPro では御法度
- 横着は良くない
【文字列探索に便利！】BMアルゴリズムをpythonで実装する。

# きっかけ
IDSの高速化処理に関する論文を読む中で、BMアルゴリズムという単語が出てきて調べようと思った。参考文献を基に咀嚼し、自分なりの言葉でまとめてみる。

# 概要
【BM（Boyer-Moore）アルゴリズムとは】
文字列検索アルゴリズムについてである。
    一般的に文字列の先頭文字から比較していきという全探索的な手法を取る。しかし、これだと最悪の場合、O(n!)となってしまいかなり計算量的にまずい状況になってしまう。
BMアルゴリズムはパターンを後ろから前に向かって比較する事で、「不一致が起きたときに、一気にずらせる」という特徴がある。
## そもそもなんで後ろから比較するんだよ。
仮に、パターン「ABC」をテキスト中で探しているとする。
比較で「無駄な位置」に戻らなくて済むようにパターン内の文字や文字分布に基づいて一気に移動出来る。

「この文字が合わないなら、この位置にこの文字は出現しないから、パターンをここまでずらせるはずだ」という「ずらし量」を計算する。
# 実装するよ。
## キーとなる2つのずらし規則
- 不一致文字規則（Bad Character Rule）
不一致が起きた文字をもとに、「次にどこへパターンをずらせば、同じ不一致な文字との衝突を避ける事ができるの？」を計算する。

- 良い接頭辞規則（Good Suffix Rule）
不一致が起きても、その時点までにマッチしていたパターンの後ろ側（接頭辞とする）を活用して、同じ接頭辞がパターンの中の他の部分で再出現するかを調べ、それに応じてずらし量を決める。（パターン末尾で一致していた部分を最大限に活かせる！）
## 簡易的なコード（理解のためにコメントアウト結構はいってます。ご了承ください。）
```
def build_bad_char_table(pattern):
    """
    不一致文字規則用のテーブルを作る関数
    petternに含まれる各文字が、最後に出現する位置を記録する。
    出現しない文字は-1とする。
    """
    table = [-1] * 256
    # とりあえずASCII文字を想定する。
    for i, ch in enumerate(pattern):
        table[ord(ch)] = i
        # ord(ch)で文字chに対応するASCIIコードを返す。
        # table[ord(ch)]=iにより、その文字のパターンが何番目に出現するのかをマッピング
    return table


# テキストを検索し一致したパターンの先頭の位置を返す関数
def bm_search(text, pattern):
    if pattern == "":
        # 空文字は一致とみなす。
        return 0

    bad_char_table = build_bad_char_table(pattern)
    m = len(pattern)  # パターンの長さ
    n = len(text)  # 検索テキストの長さ
    s = 0  # テキストを検索する中でパターンを重ねる位置を記憶する変数

    # 検索するテキストの方がでかいはず
    while s <= n - m:
        j = m - 1
        # 末尾から比較＆操作する。

        while j >= 0 and pattern[j] == text[s + j]:
            # こいつらが同じなら更に前の文字へ移動
            j -= 1

        # この条件のときはすべての文字が一致したとの事
        if j < 0:
            return s
        else:
            # jが0以上つまり不一致が少なくとも見つかったという意味
            # ここで肝となるずらしの処理が入る
            bad_char_pas = bad_char_table[ord(text[s + j])]
            # 不一致が起きたテキスト側の文字text[s+j]を基に、
            # パターン内でその文字が最後に出現した位置をbad_car_posに取得する。
            # 出現しない場合は、仕様上-1が返ってくる。
            shift = max(1, j - bad_char_pas)
            # 最低でも1はずらす事で無駄な比較を減らす事が出来る。

            s += shift
            # 比較位置の新たな更新
    return -1


# テキストを最後まで検索してもパターンが見つからない場合は-1を返す。
# テスト
text = "takada kenshi"
pattern = "kenshi"

pos = bm_search(text, pattern)
print(pos)
```

# 参考文献（参照日2024年12月11日）
https://products.sint.co.jp/topsic/blog/string-searching-algorithm
k8sクラスター内からしか接続できないDBに繋ぎたい

# 環境

- macOS

# 内容

開発環境のDBはk8sのクラスター内からしか接続できないが、デバッグのためローカル環境から参照したい

# 手順

```shell
# プロキシ用のpodを作成する
kubectl run mysql-proxy --image=alpine/socat --restart=Never --command -- socat TCP-LISTEN:3306,fork TCP:{DBのアドレス}:3306

# ポートフォワーディングで接続する
kubectl port-forward pod/mysql-proxy 33306:3306
mysql -h 127.0.0.1 -P 33306 -u {DBのユーザー} -p

# 使わなくなったpodを消す
kubectl delete pod mysql-proxy
```
「テストケースがカードゲームのテキストっぽい」と言われた話

## はじめに

オープンロジでQAをやっているRock-roです。
以前は別部署でヘルプセンターやリリースノートの記事を書いたりもしていました。
パソコンのことはあまりわからないので、文章を書くときに意識していることを記します。

## テストケースがカードゲームのテキストっぽい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/877106/576feed1-fa8c-7d0c-2342-c4200c7a13c7.png)

先日、自身が書いたテストケースをレビューしてもらった時に言われた言葉です。
これは自分がカードゲームのテキストを「わかりやすい文章」として意識的にも無意識的にも参考にしているからだと思われます。
ということで、自分が思うカードゲームのテキストのよいところを記していきます。

## カードゲームのテキストのいいところ

### 短い！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/877106/99e38a42-b1e7-f4aa-f4dc-07afaebb6f88.png)

カードは基本的にイラストが半分程度を占め、それに加えてカード名やコスト、パワーなどの様々な情報が記載されるため、能力や効果は限られたスペースに収める必要があります。
ゲーム自体のルールで定義されている表現は省略したりして、必要最低限で理解できる文章にします。
頻出する共通の能力は、ただの言葉の省略ではなく世界観にあった言葉でのキーワード化が行われる点もよいですね。
長い文章は書き手も読み手も辛いので、なるべく短い文章を心がけたいです。
リリースノートを書いていた頃は見出しを読めばどういう機能なのかわかり、本文は補足説明といった感じにしていました。
※カードゲームのテキストの場合はちゃんと最後まで読みましょう。

### 共通の表現が使われる！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/877106/b22e93e1-5c0b-4327-8e91-5c7e20578266.png)

言い回しや何かを示す言葉が共通であることで、読みやすく理解しやすい文章になります。
余計に覚えなくてはならないことを減らし、表記揺れや認識のズレによる混乱を避けられます。
キーワード化も、共通の表現で統一してこそできるものです。
表記や言い回しが統一されていることは、検索をする時にも役立ちます。
ヘルプセンターで画面の説明をする場合であれば、画面に記載されている言葉を正とし、それと同じ言葉で文章を記載していました。

また、表現を統一しておくことで、「引く」と「手札に加える」や「選ぶ」と「対象にする」といった一見同じに見えるものが違う効果であることを示せます。

### 書いてあることが明確で理解できる！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/877106/560d54a8-054d-c955-1da8-45478364fb43.png)

カードのテキストには「このカードが何をできるのか」が明確に記載されていて、誰が使っても同じ効果を発揮します。
テストケースは誰が読んでも同じ手順で実行され、同じ観点で確認されてほしいので、「カードゲームのテキストっぽいテストケース」を書いていました。

## 最後に

オープンロジでは最近ポケモンカードが流行っています。
【お手軽】Kotlin+Exposedで実行したクエリをログ出力する！

## はじめに
O/RマッパーのExposedを使用したKotlinでの開発を行なっています。
Exposedではクエリっぽく実装することはできても、
実際にどのようなクエリが実行されているかはそのままでは確認できません。

そこで今回は、実行されたクエリをログとして出力するよう実装してみました。
かなりお手軽に実装できたので紹介します！

## 実行したクエリをログ出力する
実装方法は`addLogger(StdOutSqlLogger)`をコーディングするだけ！
```kotlin
import org.jetbrains.exposed.sql.StdOutSqlLogger
import org.jetbrains.exposed.sql.addLogger

    fun dropTable() {
        transaction {
            addLogger(StdOutSqlLogger)
            SchemaUtils.drop(SalaryTreasurerTable)
        }
    }
```
ルールとしては、`transaction`内で`addLogger(StdOutSqlLogger)`を実行する必要があります。

出力結果としては以下のとおりです。
```console:出力結果
SQL: DROP TABLE IF EXISTS hoge_table
```
（ちゃんとIF EXISTSしてくれてたんだ。ﾄｩﾝｸ）

## 検証
お手軽すぎて記事が薄くなってしまったので、追加で検証します。

#### 検証１：`addLogger(StdOutSqlLogger)`の手前でクエリを実行するとどうなるのか
```kotlin
    fun dropTable() {
        transaction {
            SchemaUtils.drop(SalaryTreasurerTable)
            addLogger(StdOutSqlLogger)
        }
    }
```

結果：ログは出力されませんでした。
これは予想通りですね。
あくまで`addLogger(StdOutSqlLogger)`した直後からクエリがログ出力されるようです。

#### 検証２：ログ出力をトランザクション内で無効化できるか
トランザクション内でログ出力の有無を切り替えたい場合は`removeLogger`を使用すれば、うまく行くようです。
```kotlin
    fun dropTable() {
        transaction {
            val logger = addLogger(StdOutSqlLogger)
            println("処理1")
            dropTable()
            logger.removeLogger(StdOutSqlLogger)
            println("処理2")
            dropTable()
            logger.addLogger(StdOutSqlLogger)
            println("処理3")
            dropTable()
        }
    }
```

```console:出力結果
処理1
SQL: DROP TABLE IF EXISTS salary_treasurer_table
処理2
処理3
SQL: DROP TABLE IF EXISTS salary_treasurer_table

```

個人的にはBulkInsertなどはログ出力を回避したいので、こちらで対応することになりそうです。
【ML初心者アドベントカレンダー】生成 AI の基本概念について


# この記事の目的

生成 AI の基本概念についてばっちり説明できるようになる


# 生成 AI の基礎となる概念

## トークン
  * テキストやデータを小さな単位（単語、部分単語、文字などに分割したもので、モデルがテキストを生成する際の最小単位
  * 私は米が好き→["私","は","米","が","好き"]

## チャンク化
  * 大きなデータセットを「チャンク」と呼ばれる細かい単位に分解して処理すること
  * 細かくすることで処理がしやすくなる

## 埋め込み表現
  * テキストや画像など複雑なデータを数値化（ベクトル化）すること
  * 単語同士の類似関係も表現できる

## プロンプトエンジニアリング
  * AIに渡す入力（プロンプト）を調整して、望む出力を得られるようにすること 

## 基盤モデル（LLM）
  * 大量のデータで事前に学習された汎用的なモデルのこと
  * 汎用的なので調節していろいろなタスクに適用できる

---

  * トランスフォーマー
    * 自然言語処理や画像処理が得意。Geminiなどに使われている
  * CNN（畳み込みニュートラルネットワーク）
    * 主に画像認識に使う。物体検出が得意
  * RNN（リカレントニュートラルネットワーク）
    * 時系列データやシーケンシャルデータの処理に有用なモデル。データの順序情報を保持することができる

## マルチモーダルモデル
  * 複数のデータを同時に処理できるモデル
  * 画像からテキストを生成したり、テキストから画像を生成したり

## 拡散モデル
  * 画像などを一回拡散（ノイズを入れる）して解像度を低くして、それを基に戻す過程で新しい画像データを生成すること。らしい…
  * 画像生成に使用される
State of AI Report 2024: Politics

### State of AI Report 2024(Benaich, 2024)

https://www.stateof.ai/

## AI政治：権力、規制、影響力

「AI政治」は、人工知能（AI）が政治的権力構造、政策決定、社会全体に及ぼす影響を包括的に捉える概念です。ソースでは、AI政治の多岐にわたる側面が浮き彫りになっています。以下、主要な論点を詳しく解説します。

### 1. AIと権力の集中：NVIDIAの支配と新たな競争

ソースによると、AI業界においてNVIDIAは圧倒的な支配力を持ち、そのハードウェアはAI開発に不可欠なものとなっています。 2024年6月には時価総額が3兆ドルに達し、MicrosoftとAppleに次ぐ米国で3番目の企業となりました。 NVIDIAのBlackwell GPUは、前世代のHopperアーキテクチャと比較して大幅な性能向上を実現しており、主要なAIラボはこぞってこの最新GPUを採用しています。

しかし、AMDやIntelなどの競合企業も、ソフトウェアエコシステムの強化やオープンソースコミュニティへの積極的な働きかけを通じて、NVIDIAの牙城を崩そうと試みています。 また、CerebrasやGroqなどのAIチップスタートアップも、推論インターフェースの提供に注力することで、NVIDIAのソフトウェアエコシステムの優位性を回避しようと戦略を転換しています。

### 2. AI規制の進展：米国、EU、中国の動向

AI技術の急速な発展に伴い、各国政府はAI規制の整備を進めています。

**米国**: バイデン政権は、2023年10月に大統領令を発令し、フロンティアモデルの規制を導入しました。 この大統領令は、政府機関に対し、サイバーセキュリティ基準の策定、AI利用ポリシーの公開、AI関連の重要インフラストラクチャリスクへの対応などを義務付けています。また、GPT-4やGemini Ultra以上の計算能力を用いて学習されたモデルについては、公開前に政府への通知と安全性テスト結果の共有を義務付けています。 しかし、この大統領令は次期大統領選で共和党が撤回を公約に掲げており、AI規制の行方は不透明です。

**EU**: 欧州議会は2024年3月にAI法を可決し、世界で初めて包括的なAI規制の枠組みを導入しました。 この法律は、AIシステムのリスクレベルに応じて段階的に規制を適用するもので、「容認できないリスク」を持つAIシステム（例：社会スコアリング）は2025年2月から禁止されます。 しかし、実装の詳細についてはまだ未確定な部分が多く、産業界は今後の動向を注視しています。

**中国**: 中国は、2022年以降、生成AIに関する包括的なガイドラインを導入し、世界に先駆けてAI規制に乗り出しました。 中国政府は、AIモデルが政治的に「不正確」な回答を生成することを防ぐと同時に、検閲を受けているという印象を与えないよう、厳しい規制を課しています。 AIラボは、モデルを公開する前に、数万件の質問を用いたテストを実施し、拒否率を調整する必要があります。

### 3. AIの経済的影響：自動化、生産性、不平等

AIは、経済にも大きな影響を与える可能性があります。ソースでは、AIがもたらす自動化と生産性向上、そしてそれに伴う不平等の拡大について議論されています。

経済学者Daron Acemogluは、AIが今後10年間で全要素生産性を0.55%未満しか向上させない一方で、不平等を深めると主張し、議論を巻き起こしました。 Acemogluは、AIが既存の資本集約的なタスクの効率性にほとんど影響を与えずに、さらなるタスクの自動化を促進すると仮定しており、この仮定が批判の的となっています。

一方、経済評論家のNoah Smithは、AIが人間よりも効率的にタスクをこなせるようになるとしても、エネルギーと計算コストのために、最も重要なタスクにのみAIが適用される可能性が高く、比較優位の原則は当面の間維持されると反論しています。

### 4. AIガバナンス：国際協力と国家主導の取り組み

AIの安全性と倫理的な利用を確保するため、国際的な協力体制の構築と国家主導の取り組みが重要となっています。

ソースによると、英国は、2023年11月にブレッチリーパークでAI安全保障サミットを開催し、政府と産業界の代表を集めてAIの安全性に関する議論を深めました。 このサミットの結果、米国、英国、EU、中国などの国々がブレッチリー宣言に署名し、安全保障上の課題の特定とリスクベースの政策導入において協力することで合意しました。 

また、英国は世界初のAI安全研究所（AISI）を設立し、高度なAIモデルの評価、安全性に関する国家的能力の向上、国際的なパートナーとの連携などを推進しています。 米国、日本、カナダも同様の取り組みを開始しており、AIガバナンスに向けた国際的な機運が高まっています。

### 5. AIと軍事利用：国家安全保障と倫理的課題

AIは、軍事分野においても大きな変革をもたらす可能性があります。ソースでは、AIの軍事利用が国家安全保障と倫理的課題に与える影響について考察されています。

米国防総省は、自律型兵器システムの開発を推進しており、AIスタートアップへの投資を拡大しています。 しかし、AI兵器の開発と使用は、倫理的な観点から大きな議論を呼んでいます。AI兵器が人間の判断を介さずに攻撃を行う可能性や、誤作動による民間人への被害などが懸念されています。

### 結論：AI政治の複雑さと将来展望

AI政治は、AI技術の発展と普及に伴い、ますます複雑化していくでしょう。AIが政治、経済、社会に及ぼす影響は多岐にわたり、その影響力を理解し、適切な政策を立案することは容易ではありません。

AIの安全性、倫理的な利用、社会への影響など、様々な課題を解決していくためには、政府、産業界、学術界、そして市民社会が協力し、開かれた議論と多様な視点からの検討を進めていく必要があります。
Microsoft Graph エクスプローラー が便利だった

こんにちは:sunny:
any 株式会社でプロダクトチームに所属しているエンジニアの @se_yoshida です:santa_tone1:
この記事は、any Product Team Advent Calendar2024  17日目の記事になります。

https://qiita.com/advent-calendar/2024/anyinc

この記事ではMicrosoft Teamsとの連携サービスの調査の過程で使用した、Microsoft Graph エクスプローラーについて紹介したいと思います！

[Qast](https://qast.jp/)では、Microsoft Teamsとの連携を活用することで、投稿の通知を受け取ったり、Teamsから直接Qastに質問やメモを投稿することができます。

詳しい機能についてはこちらをご覧ください。
[TeamsからQastへの投稿機能](https://qast.jp/news/20200430/)
[Teamsと連携する](https://help.qast.jp/ja/articles/9847525-teams%E3%81%A8%E9%80%A3%E6%90%BA%E3%81%99%E3%82%8B)

[Qast] 
![スクリーンショット 0006-12-10 11.21.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944178/93f22ac8-3d46-9faf-5aa6-00657bda9eb9.png)

[Microsoft Teams]
![スクリーンショット 0006-12-10 11.22.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944178/a9e11957-a3ee-5a89-450d-a27e235bed7d.png)

---

#### Microsoft Graph APIとGraph エクスプローラー
Microsoft Teamsとプロダクトの連携を実現するために Microsoft Graph API を活用します。
この API を使うと、Microsoft 365のデータやサービス（ユーザー、Teamsのチャネル、メッセージなど）にアクセスできます。  

直接操作するためにクエリの構築や認証トークンの設定が必要など、APIの挙動を確認しながら開発するのはなかなか大変で、そのときに役立ったのが、**Microsoft Graph エクスプローラー**という公式ツールでした。  
公式サイトはこちら: [Microsoft Graph エクスプローラー](https://developer.microsoft.com/ja-jp/graph/graph-explorer)

---

#### Microsoft Graph エクスプローラーの特徴
![スクリーンショット 0006-12-10 13.12.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944178/67b29519-3e98-f158-7e87-60310f929686.png)

このツールの主な魅力は以下の点にあります。

- **ブラウザで試せる手軽さ**  
コードを書かずにGraph APIを実行し、リクエストとレスポンスをブラウザで簡単に確認できます。

&#13;&#10;

- **Microsoft アカウント事前ログインで認証が楽になる**  
自身のアカウントで事前にログインしておくことで、毎回アクセストークンを取得する必要がなくなります。トークンによるログインでも可能なことですがログインすることで以下のような操作も可能となります。
    - 自身が所属しているTeamsのチャネル一覧の取得
    - チャネル内のメッセージ取得
    - 自身のプロファイル情報の取得
    - リアルデータを使った実践的なテスト

&#13;&#10;

- **サンプルクエリが豊富**  
よく使うAPIクエリがあらかじめ用意されており、それを少し変更するだけで自分のニーズに合ったリクエストを試せます。そのため、初めてGraph APIを触る場合でも学習コストが軽減されます。

特にMicrosoft アカウントログインで都度トークン取得しなくて済んだのは本当に楽でした！

---

こちらはサンプルにある「自分」という項目でAPIを叩くと、ログイン中のアカウントの「自分」に関するデータを取得できます。

![スクリーンショット 0006-12-11 16.59.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944178/aa97e4b0-3bf8-12d3-2466-e26adf89f696.png)

---

#### 実際に使ってみた感想
サンプルクエリが豊富で API の挙動を理解しやすかったです！
また、ログインしてリアルデータを扱えたこと、ブラウザ上でエラーが視覚的に確認できることも便利でした。
これからGraph APIを利用する方には、ぜひGraph エクスプローラーを試していただきたいです:grinning:

---

any株式会社では[ナレッジ経営クラウドQast](https://qast.jp/)のエンジニアを絶賛募集中です。
是非[採用ページ](https://anyinc.jp/recruit)をご覧ください！
興味がある方は、[こちら](https://hrmos.co/pages/anyinc/jobs?category=1938133004283695106)よりご応募お待ちしております。
エンジニア組織/文化について詳しく知りたい方は[こちら](https://speakerdeck.com/any_tech/engineer-culture-deck-v3-dot-0)。
LCD st7735s はじめの一歩

c++のライブリを見つけて導入して、表示に成功。　次はPythonのライブラリを導入して確認する。Pythonの方が扱いやすいので。
手順を以下に記載します。
参考サイト
https://www.kunimiyasoft.com/raspberry-pi-st7735s/
※注意　RESとDCの配線が　Python版の
https://learn.adafruit.com/1-8-tft-display/python-wiring-and-setup　
とは逆なので配線を変えれば表示する。

１．依存関係のbcm2835 ライブラリをインストール。サイトを見るとVer1.75が表示されているのでVer1.75をインストール
```
sudo wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.75.tar.gz
tar zxvf bcm2835-1.75.tar.gz
cd bcm2835-1.75
sudo ./configure
sudo make
sudo make check
sudo make install
```
２．本体インストール
```
curl -sL https://github.com/gavinlyonsrepo/ST7735_TFT_RPI/archive/1.7.1.tar.gz | tar xz
cd ST7735_TFT_RPI-1.7.1
sudo make
sudo make install
```
サンプル　テキスト表示　成功。Makefileのコメント解除でテストできます。
```
cd ST7735_TFT_RPI-1.7.1
cd example
make
make run
```
何故か　Hello worldがエラーででないが、目標のテキストがでるのでよしとする。
配線とかスッキリさせました。
![IMG_0018.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433305/7da3c6bf-e49b-d722-3df6-0bfac9d092a2.jpeg)
温度がﾗｽﾞﾊﾟｲの熱にやはり影響あるみたいなので、外付けのBME280を接続させたら
温度も実際の温度計と一致しました。
![IMG_0031.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433305/455ff49a-5ddf-a0b3-a089-c31dd85f6be4.jpeg)
法務との連携が成功の鍵！データ取り扱い方針を決めるプロダクト開発の第一歩

### 概要
AI/LLM製品開発を進める中で、顧客データを活用するには法務部門との連携が必要不可欠と感じた。しかし、何をどう整理すれば良いかもわからない状況に直面。この記事では、私が直面した課題と、その解決プロセスを共有します。

:::note warn
注意
本記事では法律の解釈については取り扱いません。
また、各社の法務部門や弁護士といった専門家に相談をした上で方針を決定をしていきましょう。
:::

### ターゲット
業務に顧客データの活用を取り入れようと考えている人、取り組み始めた人

### きっかけ
今年度からAI関連する部分のプロダクトマネジメントをすることになった。
データの取り扱いは法律やサービスの規約、また開発する上でシステムのアーキテクチャに直接関連する要素であることは理解していたが、以下記載の事象に見舞われ、何がわかれば法令を遵守し、システムのアーキテクチャに関連する要求における制約を決めることができるのかがわからず、困っていた。

### 背景：顧客データ活用と法務の重要性
AIやLLMを活用した製品開発では、顧客データの活用がサービスの精度向上や価値創出に不可欠です。一方で、個人情報保護法やGDPRなどの規制により、データの収集・利用には法的な制約があります。これらを遵守しない場合、法的リスクや顧客の信頼低下に直結します。また、適切なデータ管理はシステム設計や運用にも影響を与えます。法務部門との連携を強化し、法令遵守とデータ活用のバランスを取ることが、重要になります。

### 課題：どこでつまづくのか？

#### 事象
* 顧客データを適切に取り扱った上でデータを活用していくにあたって、考慮すべきことを洗い出すことができず、自分たちが困っていることを整理した上で法務部門に相談することができていなかった
* 相談はしても、法務部門の方の回答が知識不足で理解することができなかった
* 調べても具体的にこの2点（法律やサービスの規約、システムのアーキテクチャへの関連）に関して、どの法律を理解すれば良いかわからなかった
#### 問題
何がわかれば、法令遵守した上で顧客データをとり扱っていることになるのかわからない

#### あるべき姿
法務部門に法令遵守した上で顧客データをどのように取り扱いたいと考えているか提案できる状態にする
#### 解決すべき課題（あるべき姿を基にしたとき）
* 個人情報に関連する具体的な知識不足で法務部門の方の助言が理解できない
* 何をどこから手をつけて整理をすれば良いかわからない

### 解決のプロセス
**1.まずは現状把握で法務部門の助言を理解できるようにした**
* 自社の現状
  * 公表しているプライバシーポリシーや利用規約の確認
* 法律の現状／個人情報の取り扱いで確認した資料
  * [個人情報保護法等ガイドライン一覧](https://www.ppc.go.jp/personalinfo/)
  * [個人情報の保護に関する法律についてのガイドライン（通則編）](https://www.ppc.go.jp/files/pdf/240401_guidelines01.pdf)
  * [個人情報の保護に関する法律についてのガイドライン（仮名加工情報・匿名加工情報編）](https://www.ppc.go.jp/files/pdf/231227_guidelines04.pdf)
  * [個人情報の保護に関する法律についてのガイドライン（第三者提供時の確認・記録義務編）](https://www.ppc.go.jp/files/pdf/240401_guidelines03.pdf)
  * [個人情報の保護に関する法律についてのガイドライン（外国にある第三者への提供編）](https://www.ppc.go.jp/files/pdf/231227_guidelines02.pdf)
  * [「個人情報の保護に関する法律についてのガイドライン」に関するＱ＆Ａ](https://www.ppc.go.jp/files/pdf/2403_APPI_QA.pdf)
  * [電気通信事業における個人情報等の保護に関するガイドライン（令和４年個人情報保護委員会・総務省告示第４号（最終改正令和６年個人情報保護委員会・総務省告示第４号））の解説](https://www.ppc.go.jp/files/pdf/240312_telecom_GLs_description.pdf)
  * [仮名加工情報・匿名加工情報信頼ある個人情報の利活用に向けて―事例編―](https://www.ppc.go.jp/files/pdf/report_office_zirei2205.pdf)

完全に現状の理解不足が一番の原因だった。
これにより、過去に法務部門からの回答の内容や該当する法律をある程度理解することができた。ものごとの解像度を上げることが一番の近道だった。

**2.法務部門への提案資料の作成**
下記を盛り込んだ
* 現状把握後の自社法令や法律の理解が法務部門と認識が合っているか
  * 資料の内容：用語の定義、自社の現状、個人情報関連の利用時の考えられるハードルなど
* 今後の顧客データの取り扱い方針として、提案内容が現実的か

### 法務部門とのコミュニケーションのコツ
顧客データを取り扱う上で法務部門と円滑にコミュニケーションを取りたいのであれば、最低限の法令内容は理解することをお勧めします。
法務部門との連携において、法律の知識がコミュニケーションを補完してくれます。数日中のインプットでコミュニケーション力を補完できるのは有効な手段だと思います。
### 学び

#### アクションの効果
* 法務部門の方が話している内容は全て理解することができた
* 法務部門の中でも解釈が揺れている部分に関して、鋭い質問をすることができた
* 決められたMTGの時間内で現状の理解があっているか、確認したいことも全て確認でき、顧客データの取り扱いの方針も決めることができた

顧客データを取り扱う上で法務部門と円滑にコミュニケーションを取りたいのであれば、最低限の内容は理解することをお勧めします。

#### 理解した内容
* 個人情報保護法等ガイドライン(上記に記載のもの)
  * NotebookLMなども利用しながら、全部ではなく、読めば読むほど重複している記載があるものは読み飛ばしたりしたので、結果的に６〜7割程度の量である感覚

#### 整理したポイント
* 個人情報の取り扱いに関連する点
  * 個人情報とは、また違反となる行為は何か
  * 個人情報の利用目的
    * 利用目的が変更できるケースとできないケース
    * 仮名加工情報や匿名加工情報とは

* 使うアーキテクトに関連する点
  * 第三者提供、委託とは
  * クラウドサービス等を利用する場合のデータの第三者提供や委託など、公表や個人への許可の必要性の有無

これで整理する内容としては完璧というわけではありませんが、この２点をとっかかりに、製品開発における顧客データ利用の理解を深めていき、法務部門とコミュニケーションをとっていくことで、今回一番得たい成果を得ることができました。
皆様の今後の業務において、一助になれば幸いです。
【React】学習記録アプリの未入力時メッセージが消えない

# 状況
Reactを使った学習記録アプリで、フォーム未入力においてsubmitするとエラーメッセージが表示されるよう実装したが、一度表示されると消えなくなってしまった。

![ErrorMessageBefore.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941608/ddb6df14-b5e2-d172-2443-b1129d701bb8.gif)

```JavaScript:App.jsx
function App() {
  const [error, setError] = useState("");

  const handleSubmit = (e) => {
    e.preventDefault()
    if (title && time) {
      setRecords([...records, { title, time: Number(time) }])
      setTitle("")
      setTime("")
    } else {
      setError("入力されていない項目があります")
    }
  }

  return (
    <div>
      （中略）
      <div>
        <p>{error}</p>
      </div>
      （以下略）
```

# 解決策
入力時に空のsetErrorを入れることで解決しました。

```diff_JavaScript:App.jsx
function App() {
  const [error, setError] = useState("");

  const handleSubmit = (e) => {
    e.preventDefault()
    if (title && time) {
      setRecords([...records, { title, time: Number(time) }])
      setTitle("")
      setTime("")
+     setError("")
    } else {
      setError("入力されていない項目があります")
    }
  }
```

無事エラーメッセージが消えるようになりました。
![ErrorMessageAfter.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941608/70040e5f-995f-ec33-97ca-2b10a850037c.gif)

かなり初歩的なミスですが、初学者ほど基本的な部分でハマりやすいということで……

# JISOUのメンバー募集中！
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか？
興味のある方は、ぜひホームページをのぞいてみてください！
▼▼▼

https://projisou.jp
contextでshared exampleを確立できたりする

### 子のコンテキストからもshared exampleを呼び出すことができる
>### Shared examples are accessible from offspring contexts
>Given a file named “contextspecificexamples_spec.rb” with:
```rb
RSpec.describe "shared examples" do
  shared_examples "shared examples are nestable" do
    specify { expect(true).to eq true }
  end

  context "per context" do
    it_behaves_like "shared examples are nestable"
  end
end
```
When I run rspec context_specific_examples_spec.rb

Then the output should contain:
```
1 example, 0 failures
```
>And the output should not contain:
```
Accessing shared_examples defined across contexts is deprecated
````
### 共有例は文脈ごとに分離することで読み込めないようにする
>### Shared examples are isolated per context
>Given a file named “isolatedsharedexamples_spec.rb” with:
```rb
RSpec.describe "shared examples" do
  context do
    shared_examples "shared examples are isolated" do
      specify { expect(true).to eq true }
    end
  end

  context do
    it_behaves_like "shared examples are isolated"
  end
end
```
>When I run rspec isolated_shared_examples_spec.rb
>
#### 共有例が見つからなかった
>Then the output should contain:
```
Could not find shared examples \"shared examples are isolated\"
````

https://rspec.info/features/3-13/rspec-core/example-groups/shared-examples/#:~:text=Shared%20examples%20are%20accessible,shared%20examples%20are%20isolated%5C%22
【イベントレポート】（満員御礼）Linux標準教科書の開発リーダーに聞く、アウトプットの重要性

## はじめに
こんにちは、エンジニアコミュニティ LinuC Open Network （LiON）の運営事務局に参加させていただいております伊藤です！

今回は、11月に開催したLiON主催のオンラインイベント「Linux標準教科書の開発リーダーに聞く、アウトプットの重要性」について、その内容をレポートします。

参加申込50名満席で、キャンセル待ちの方もいらっしゃいましたので、参加できなかった皆様すみませんでした。

connpassのイベントページはこちら。

https://lion.connpass.com/event/336339/

## イベント概要
今回のイベントは、ITエンジニアの成長と活躍を促すコミュニティ「LinuC Open Network（LiON）」が主催するオンラインイベントで、どなたでもご参加いただけるものです。講演を聴くだけではなく、参加者全員の自己紹介や、グループディスカッションも組み合わせた全員参加型イベントとなっております。LiONでは、こうした交流イベントをリアルとオンラインを交互に毎月開催しています。


今回のトークセッションは、「Linux標準教科書の開発リーダーに聞く、アウトプットの重要性」と題し、ゲストに株式会社びぎねっと　代表取締役社長　宮原徹 氏を迎えてお届けしました。

## イベントの様子
イベント当日の様子を簡単に紹介させていただきます。

### LinuC Open Network コミュニティのご紹介
まずはオープニングとして、私からコミュニティの紹介をさせていただきました。
LiONはLPI-Japan様のサポートのもと、有志によって運営される、ITエンジニアのためのコミュニティです。
エンジニアの成長と活躍を強力に後押ししていくことを目指しています。


### トークセッション「Linux標準教科書の開発リーダーに聞く、アウトプットの重要性」
ゲストスピーカーとして、株式会社びぎねっと　代表取締役社長　宮原徹 氏を迎え、Linux標準教科書とその開発プロジェクトについて、そしてそうしたアウトプットの重要性やポイント、最初のステップ等について、お話を伺いました。聞き手は私です。

以下、特に印象深かったところを絞ってご紹介します。

#### Linux標準教科書と、その開発プロジェクトについて
Linux標準教科書は、Linux/OSS技術者教育に利用していただくことを目的とした教材で、LPI-Japanから無償で配布されています。主に大学や専門学校での使用を想定し、「LinuC Open Network コミュニティで、宮原さんが中心となって執筆されています。

この教材開発プロジェクトは、コミュニティのメンバーが協力者として参加することができ、複数人でレビューやフィードバックによるブラッシュアップが行われています。また、定期的なミーティングや懇親会も行われ、主に教える立場の方々が多く参加し、相互に意見交換や交流を深めているとのことです。

#### アウトプットの重要性
エンジニアにとってアウトプットが重要なのは言うまでもないことですが、まだ経験の浅い方は、ステップを踏んで取り組むことを提案されていました。まずは、作業メモを残すことが基本であり、次にそれを外部に公開できるレベルのものへと体裁を整えることが次のステップだそうです。

アウトプットの形態としては、ブログ、技術記事、書籍執筆、セミナー講師などがあり、これらは技術力の証明にもなります。また、アウトプットを出すことで自身の技術力も維持・向上できることを指摘されていました。エンジニアとしてキャリアアップを目指すなら、積極的にアウトプットの機会を求めていく必要がある。そのためにも、まずは作業メモを残すこと、そしてそれを公開し他者にも役立ててもらえるようにしていくことから始めようとのことです。

それくらいなら、できるような気がしてきますね！


### 参加者自己紹介＆グループディスカッション
トークセッションの後は、参加者全員が1人ずつ自己紹介を行ないました。エンジニアだけでなく、講師、営業など様々な背景を持つ方々が参加されていました。その多くがLinuxやオープンソースに関心を持つ方々です。

自己紹介の後は、zoomのブレイクアウトルームでグループに分かれ、先ほどのセッションでの気づきや感じたことをシェアしていただきました。やはりメモや手順書を共有することの価値に共感した方々が多かったようです。


### 事後アンケート
イベント後には匿名でアンケートを取らせていただきましたが、非常に高評価で、自由記述欄でも、「とても勉強になりました！」「時間が少なく感じました」「アウトプットにも幅広い実施方法があって凄くタメになりました」「交流タイムでさまざまな業種の方々とお話できました」「また参加したいです！」と、ポジティブなメッセージをたくさんいただきました。
イベントを企画・運営する私としても非常に励みになります。ありがとうございます。

### おわりに
エンジニアコミュニティ LiONが開催した11月のイベントについてレポートさせていただきました。LiONでは毎月このようなイベントを開催していますし、slackでエンジニア同士の交流が可能です。そして、エンジニアならどなたでも無料でご参加いただけます。興味を持っていただいた方は、ぜひLiONに参加してみてください。あるいは、来月以降のイベントにぜひご参加ください。

次回は12月23日に、霞ヶ関で、生成AIの活用をテーマに、ミートアップイベントを開催します。詳しくは、下記のconnpassイベントページをご覧ください。

https://lion.connpass.com/event/339154/

<br>
LinuC Open Network で皆様とお会いできるのを楽しみにしております。
<br>
<br>

https://linuc.community/
SharePoint リスト に画像保存

この記事は、[Microsoft Power Apps Advent Calendar 2024](https://qiita.com/advent-calendar/2024/powerapps) シリーズ2 12/11担当分の記事です。

# はじめに

Power Apps のアプリを作成していると、文字情報だけでなく画像も保存したいケースが多くあります。
みなさんどう実現しますか？

画像保存の実現方法としては、SharePoint リスト の画像列を利用する方法、Power Automate を利用する方法、Base64に文字化する方法など、いくつかの選択肢があります。各方法にはメリット/デメリットがあるので、優劣をつけることはできないのですが、最も気軽に実装できる方法は、SharePointリスト の画像列を利用する方法ではないかと思います。この記事ではSharePoint リスト を使った画像保存の実装方法について記載します。

# 実現方法

全体的な流れは、下記のとおりです。

１．保存先の  SharePoint リスト を作成します

２．Power Apps上で、SharePoint リスト の紐づけ設定をします

３．写真を撮影して画像を保存する Power Appsアプリを作成します

## １．保存先の SharePoint リスト を作成します

下記のリストを作成します。

- リスト名: PictureList
- 列構成:
    - `Picture`（画像型）

## 2．Power Apps上で、SharePoint リスト の紐づけ設定をします

Power Appsアプリと、保存先のSharePoint リストの紐づけ設定をします。

データから、SharePointを選び、１．で作った「PictureList」を選択します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52550/7bee2fdf-ce97-bfeb-a517-f26bbb0adb8f.png)


## ３．写真を撮影して画像を保存する Power Appsアプリを作成します。

- 写真を撮って、登録ボタンを押すだけのシンプルなアプリ構成とします。
- 画面上に以下のコントロールを配置してください。
    - カメラコントロール
        - 現在、カメラから見えている映像がリアルタイムで表示されます。
        - 映像の任意の場所をタップすると、写真を撮ることができます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52550/1b7e6148-a1f9-b397-c408-114bf30e5787.png)


※カメラコントロールは、コントロール一覧の下記にあります。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52550/89fc4a46-4770-61c2-5c82-802c2bec7f11.png)


- 登録ボタンを押したら、SharePoint リスト に撮った写真を画像登録をする処理の追加を追加します
    - 登録ボタンのOnSelectに下記コードを記載します。

`Patch( PictureList , Defaults (), { Picture: Camera1.Photo } )`

---

### 補足

画像列に登録できるコントロールは、上記で説明した 「カメラ」コントロール以外に、「画像の追加」コントロールがあるのでケースに合わせて使ってください。

- 「画像の追加」コントロール について
    - 「タップまたはクリックして画像を追加」をタップすると、端末内の画像を選ぶか、写真を撮るかを聞かれますので、どちらか選択すると、画像の追加ができます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52550/10d5fc2a-b0ab-c040-bd14-45359e5fb551.png)

- 登録ボタンを押したら、SharePoint リスト に画像登録をする処理の追加
    - 登録ボタンを押したときに、SharePoint リスト に撮影した写真を登録する処理を書きます。
- 登録ボタンのOnSelectに下記コードを記載します。

`Patch( PictureList , Defaults (), { Picture: UploadedImage1.Image } )`

※「カメラ」コントロールは　「画像の追加」コントロールと比べると拡張性は低いものの、操作が1ステップで完了します

（※「画像の追加」では2ステップ以上が必要となります）

# 補記：登録した画像の一覧表示

ここまで登録方法のみ紹介しましたが、登録した画像をアプリ上で表示したいというケースもあるかと思います。

登録した画像を一覧表示する方法を紹介します。

# 実現方法

※保存先の  SharePoint リスト は作成済みとします。

## 画像列の一覧を表示する Power Appsアプリを作成する

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52550/039965b8-2e94-8d9e-f080-81cef65c4816.png)

- 画面上に以下のコントロールを配置してください。
    - Galleryコントロール
        - GalleryのItemsプロパティに、上記で作成した「PictureList」 を設定します。
        - Galleryのアイテムの下に、「画像」 コントロールをはります。
            - 「画像」コントロールの Imageプロパティには、「ThisItem.Picture.Large」 を指定します。
        - 画像列から画像を取得する場合、4段階の画質の画像が取得できるので、見た目で調整してください。（Full（無変換）、Large、Medium、Small）
        - ここでは画像を鮮明に表示させるために、画像列のLargeを選択します。



# まとめ

Power AppsとSharePoint の画像列 を使うと、簡単に画像の記録アプリを作成できます。

画像列に登録できるコントロールは２つあります。写真を即登録したい場合は 「カメラ」 コントロール、柔軟な登録がしたい場合は 「画像の追加」コントロールと、ケースに合わせて使ってください。

この記事を参考に、SharePoint リスト への画像登録を試してみてください。

# 次回

次回は、今回の記事を応用して、手書き画像（撮った画像を手書きでマル書いて）を SharePoint リスト に保存する方法について考察します。

2024/12/25公開予定です。
Git初学者による学習部屋（編集中）

# Gitコマンド
### Git初期設定 [git config]
```
// グローバル設定
$ git config --global user.name "<ユーザー名>"
$ git config --global user.email "<メールアドレス>"

// 個別リポジトリ設定
$ cd <対象リポジトリパス>
$ git config user.name "<ユーザー名>"
$ git config user.email "<メールアドレス>"
```
### Gitリポジトリを作成する [git init]
```
// 対象のディレクトリに移動
$ cd <対象ディレクトリパス>

// .gitリポジトリを作成する
$ git init
```
### GitHubプロジェクトをクローンする [git clone]
```
// クローン(コピー)を作成する
$ git clone <リポジトリ名>

// 例
$ git clone https://github.com/atom/atom.git
```
### 変更をステージに追加する [git add]
```
// ステージに追加する
$ git add <ファイル名>
$ git add <ディレクトリ名>

# 変更・新規ファイルをステージに追加（削除ファイルは反映されない）
$ git add .
# 変更・削除・新規すべてのファイルをステージに追加
$ git add -A
# 変更・削除されたファイルをステージに追加（新規ファイルは対象外）
$ git add -u

```
### 変更をコミットする [git commit]
```
// コミットする(メッセージを入力するエディタが開く）
$ git commit
// メッセージ付きでコミットする
$ git commit -m "<メッセージ>"
// 変更内容を確認してコミットする
$ git commit -v

// 例
$ git commit
// エディタが開いたら１行目に「initial commit」と入力後、
// 保存してエディタを閉じる
// ※コミットしない場合は、変更せずにエディタを閉じる。
```
### 現在の変更状況を確認する [git status]
```
// 変更されたファイルを確認する
// ワークツリー⇔ステージ間、ステージ⇔リポジトリ間
$ git status

// 例
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")
```
# Git利用具体例
### GitHubからクローンして開発する
```
// クローン(コピー)を作成する
$ git clone <リポジトリURL>
$ cd <リポジトリ名>

// 最新の状態を取得（他の人の変更を取り込む）
$ git pull

// ソースコードを編集する

# 変更・削除・新規すべてのファイルをステージに追加
$ git add -A

// コミットする（メッセージを入力するエディタが開く）
$ git commit
// ※コミットしない場合は、変更せずにエディタを閉じる。

// 変更をリモートリポジトリに反映（アップロード）する
$ git push
```
入社１年目の振り返り：Voicyでの挑戦とマインドセットの変化

こちらは[Voicy Advent Calendar 2024](qiita.com/advent-calendar/2024/voicy)の11日目の記事になります。


こんにちは！Voicyに入社して11ヶ月、iOSエンジニアのピカソです。月日が過ぎるのはあっという間ですね。今回は入社して１年経ったので（正確にはまだ１１ヶ月ですが）、入社エントリー的な意味で、この一年で自分が体験したマインドセットの変化やリーダーシップについて書きたいと思います。

## 自己紹介
まずは簡単に自己紹介するとVoicyではピカソと呼ばれています。（本名がパブロなのとスペイン名含めたフルネームが長いからです笑）
Voicyには2024年1月に入社しました。
もともと新卒で入った前職では最初バックエンドとデータ周りを担当していて、３年前にキャリアチェンジしてからはiOSエンジニアをしています。
Voicyでは、iOSエンジニアとしてアプリの開発を行い同時にチームリーダーとしてプロジェクトの管理やチームマネージメントなどをしています。

前職はスペインのフィットネス業界向けのSaaSスタートアップで働いていました。スタートアップといっても、会員向けアプリのユーザー数が8000万人を超える規模の大きな会社でした。そんな環境で働いていた自分が、日本のVoicyへ移り、どのように変わったのかをお伝えします。

## 前職での自分

前職では、主に割り当てられたプロジェクトやデザインをもとに開発を進めるというスタイルでした。自分で施策の背景や目的を深く考える必要がなかったため、実装そのものに集中できる環境でした。

このスタイルは「楽」と言えるものでしたが、一方で「与えられたものを作る」というルーチンワークにとどまり、次第に自分の成長やキャリアへの疑問を感じるようになりました。

## Voicyに移ってからのマインドセットの変化

Voicyに転職したことで、自分のキャリアとマインドセットは大きく変化しました。まず、日本に移るという大きな変化から始まりました。これはコンフォートゾーンからの大きな脱出であり、仕事面でも同じような挑戦が待っていました。

### プロジェクトの背景を考える習慣

Voicyでは、開発を行う前に「なぜそのプロジェクトを行うのか」「どのような結果を望むのか」「事業にどう貢献するのか」といった視点で考えることが求められます。

これにより、自分はただの「作る人」から「考えて作る人」へと成長できたと思っています。自分はもともとこうした考え方がの方が合ってると感じていて、現在ではより自分らしく意見を述べたり、遠慮せずに貢献したりできる環境になっています。その結果、プロジェクトへの深い理解と主体的な関与ができるようになり、次第に楽しさを感じると同時にの理解が深まることでより良いアウトプットを出せるようになりました。

### チームリーダーとしての挑戦

8月からはありがたいことにチームリーダーを任されるようになりました。この役割では、施策の計画段階から関わることができるようになり、チーム全体の動きや目標設定、事業指標の達成に向けた戦略を考える機会が増えました。

以下の図は、自分がリーダーとして意識するポイントを整理したものです。（詳しくはマインドセットと一緒に別の記事で書きます）

```
[図: チームリーダーとして意識するポイント]
1. チームの目標と事業目標の連動
2. 個々のメンバーのモチベーションと成長
3. 開発速度と品質のバランス管理
4. 継続的なフィードバックと改善
```

このように視座を上げ、より経営的な視点を持つことが求められるようになったのは、自分にとって大きな成長のきっかけとなりました。

### 経営への興味とリーダーシップ

もともと起業や経営に興味がありましたが、Voicyで働く中でその興味が具体的な行動につながるようになりました。リーダーとして施策を進める際には「事業指標にどう影響するか」という視点を常に持つよう心がけ、その結果、チームやプロジェクト全体の成果をより意識する習慣が身につきました。

## まとめ

この1年間を振り返ると、自分は「与えられたものを作るエンジニア」から「考えて作り、チームを引っ張るエンジニア」へと少しは成長できたかなと感じています。しかしまだまだ学ぶことが多く、いろいろな課題を意識しながら、充実した毎日を送っています。

これからも新しい挑戦を楽しみながら、Voicyの成長に貢献していきたいと思います。最後まで読んでいただき、ありがとうございました！
3年前の自分に伝えたい Neovim に移行して良かったこと

:::note warn
すでに Neovim を使用している方には目新しい情報はありません！
:::

今年の夏、私は Vim から Neovim に移行しました。以前 Vim を使い続けていた理由は以下の通りです：

- Vim で特に不便を感じていなかった。
- 設定ファイルを編集するのが面倒だった。
- Neovim のメリットをよく理解していなかった。
- あえて Vim を使うことがカッコいいと思っていた。

しかし、今 Neovim を使っている私から、Vim を使い始めた3年前の自分に一言「今すぐ Neovim に移行しなさい」と言いたいです。

## Neovim に移行して良かったこと

### とにかく速い
これが一番のメリットです。  
Vim を使ってた時、プラグインをいろいろ追加するにつれて動作がもっさりしてきました。たとえば、Laravel のプロジェクトを開いた際、コード補完が有効になるまでに体感で2秒ほどかかっていた気がします。

Neovim に移行したところ、ほとんどラグを感じることがなくなりました！

#### Neovim が速い理由
1. Neovim は Vim の派生エディタであり、古いコードや不要なコードが削除され、大幅なリファクタリングが行われているらしい。
2. 設定ファイルやプラグインを Lua で記述できるようになり、Lua の高速性が活かされています。
3. [lazy.nvim](https://github.com/folke/lazy.nvim) を使うことで、プラグインを遅延ロードできるため起動が速くなります。

### モダンなプラグインが使える
Neovim にしか対応していないモダンなプラグインが多数あります。  
私が Neovim に移行したきっかけも、[treesitter](https://github.com/nvim-treesitter/nvim-treesitter) や [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) を使いたかったからです。

### プラグインや設定を見直せた
設定ファイルを新たに書き直す必要があったため、プラグインや設定を整理する良い機会になりました。Vim を使い始めた頃に試行錯誤していた自分を思い出し、懐かしい気持ちにもなりました。

## 参考にしたサイト
設定ファイルを書く際、以下のサイトを参考にしました：

https://dotfyle.com/

プラグイントレンドだけでなく、それを使っている人の dotfile リンクも掲載されており、具体的な設定例が見つけやすいです。

以前 Vim を使っていたときは [Vim Awesome](https://vimawesome.com/) を参考にしていましたが、設定方法が分かりにくいと感じることが多かったです。この点で Dotfyle は非常に便利でした。

## 最後に
もしまだ Neovim への移行を迷っている方がいれば、ぜひ挑戦してみてください。Neovim はあなたの開発体験を確実に向上させてくれるはずです！
loggerによる例外のログ出力

こんにちは。

本記事は株式会社インティメート・マージャーの[Advent Calendar 2024](https://qiita.com/advent-calendar/2024/intimatemerger) 14日目の記事になります。

今回は例外(exception)をログ出力する際のポイントをまとめたいと思います。

# TL;DR
`logger.exception()`を使いましょう

# そもそもloggerって？
エラーなどのログを出力,記録することができる`Logging`というモジュールで使われるオブジェクトです。この`logger`オブジェクトを用いてログの出力などを行います。
`print()`を使ってデバッグを行った経験がある方も多いと思いますが、`print()`を使った方法よりも柔軟にログの出力を行うことができます。
[Logging HOWTO](https://docs.python.org/ja/3/howto/logging.html)

### ロギングレベル
`print()`との違いの一つに、レベルという概念があります。これは重要度の高さを表し、`NOTET`,`DEBUG`,`INFO`,`WARNING`,`ERROR`,`CRITICAL`の順に重要度が高くなっていきいます。
`logger`に`logger.setLevel(level)`の形で閾値となるレベルを設定することで、設定したレベル以上のログのみを出力することができます。
実際にログを出力する際は、`logger.INFO()`のような形で出力を行います。
各ログにレベルを適切に設定することで、用途に応じてどこまでログを出力するかの操作を簡単に行うことができます。

# 例外
さて、loggerで例外をログ出力する話をする前に、pythonの例外について少し話します。

実行中に検出されたエラーを、構文エラー（構文解析エラー）に対して例外(exception)と呼びます。
零除算を行ってしまった際の`ZeroDivisionError`や、存在しない属性にアクセスしようとした際の`AttributeError`、辞書型で存在しないキーにアクセスしようとした際の`KeyError`など、よく遭遇するものを挙げるだけでも多くの種類があります。
これらの例外は、例外なく`BaseException`クラスの派生であり、多くの種類の例外を同じ方法で処理することができます。

[参考元:組み込み例外に関するドキュメント](https://docs.python.org/ja/3/library/exceptions.html#ZeroDivisionError)

例外は致命的でないものもあり、例外が発生した際は適切に処理する必要があります。
多くの場合、`try~except`を用いて例外の対応を行います。
どの例外が発生したかによって処理を分けるといったことも行え、多くの場合以下のように例外の種類ごとに異なった処理を行います。必ずしも例外の種類を事前に特定できるとは限りませんが、その際は`Exception`を指定することで例外を拾うことができます。
```python
try:
    # 例外を送出する可能性のある処理
except ZeroDivisionError:
    # 零除算例外が送出された場合の処理
except AttributeError:
    # アトリビュートエラーが送出された場合の処理
except Exception:
    # その他の例外が送出された場合の処理
```
この`except`内にloggerの処理を記述することでエラーログの出力を行います。

# loggerによる例外のログ出力
さて、それでは本題に入ります。
大切なのはloggerによってどの情報をログ出力するのか、ということです。エラーログを出力するということは、基本的にはエラーの解析が目的であり、情報が不足していると十分な解析を行うことができません。

そこで、`logger.exception()`を使うことを推奨します。
`except`内で`logger.exception("メッセージ")`と書くことで、その場所でどのような例外が送出されているのかをログ出力してくれるのみならず、深い階層で発生した例外についても遡ってログとして出力してくれます。

### 遡ってログ出力とは？

深い階層で`ZeroDivisionError`を発生させて、その例外をログ出力する例を挙げます。

```python:main.py
import logging

# ログ出力用のロガー設定
logger = logging.getLogger("examples")

def zero_division():
    1/0

def f():
    zero_division()

try:
    f()
except Exception:
    logger.exception("error!")
```

```text:出力
error!
Traceback (most recent call last):
  File "main.py", line 15, in <module>
    f()
  File "main.py", line 11, in f
    zero_division()
  File "main.py", line 8, in zero_division
    1/0
ZeroDivisionError: division by zero
```

`logger.exception()`に記述したメッセージがまず出力され、その後に`stack trace`の内容が出力されています。
このように、`logger.exception()`を使用することでクラスの継承や複雑な関数で例外が発生した際もその原因をたどりやすくなります。

### おまけ
実は`logger.error("メッセージ",exc_info=True)`とすることで、`logger.exception("メッセージ")`と等価なログ出力を行うことができます。
とはいえ、`logger.exception()`を使う方がシンプルで意図が伝わりやすいとおもいます。

# まとめ
本記事では、loggerによる例外のログ出力の方法を説明しました。
非常にシンプルなコードでログの出力を行えることが理解できたかと思います。
社内でAWSでLMAの会議分析ツールを構築してみた

# 初めに
こんにちは！BeeXのゆうです。

私たちBeeXでは、常に最新技術の研究開発に取り組んでおり、今年は特に生成AIに注力しています。
今回、以下の記事を参考にしつつ、弊社独自のカスタマイズを加え、AWSを活用してLMA会議分析ツールを構築しました！

https://aws.amazon.com/jp/blogs/machine-learning/live-meeting-assistant-with-amazon-transcribe-amazon-bedrock-and-knowledge-bases-for-amazon-bedrock/

# どのようなツールか
早速、どのようなツールかをご紹介したいと思います。

まずは、ログイン画面です。
Cognitoサービスを利用して、ユーザーの認証と認可を管理しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/982b71c9-1a3f-b28b-a623-027139cbaf8b.png)

ログイン後、ホーム画面に遷移し、会議一覧が表示されます。
本来のオープンソース版は英語の画面ですが、弊社で日本語化を行いました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/14339478-5f57-de39-67f3-07f81d3e3a8f.png)

左側のナビゲーションで「Stream Audio」をクリックすると、会議を開催する画面が開き、「Start」ボタンを押すことで、音声データの録音を含む各種処理が開始されます。
（その際、TeamsやZoom、AWS Chimeを使用して、会議を開催する必要があります。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/e13472d3-82c0-7e83-18bf-9f5fbf6b0fa8.png)

こちらは「会議分析」の画面です！
「会議情報」や「会議概要」機能は、会議後の振り返り時に非常に便利で、議事録作成にも役立ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/81644e13-b630-e69c-c1f1-c225135ddfee.png)




会議中には、リアルタイムで文字起こしが行われ、参加者名と話した内容が記録されます。

右側のチャットボットは、ChatGPTのような対話形式で、リアルタイムに会議の要約が行え、質問にも即座に回答できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/630ea40c-b085-2f33-9960-56dedc5f0089.png)


最後に、弊社独自でカスタマイズした「ファイルアップロード」機能についてです。
事前に文書をアップロードし学習させることで、会議中にチャットボットを通じて、細かい質問に回答できるよう頑張っています！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/2cdd883e-0133-550a-97bb-36f1d8d72072.png)

# 利用したAWSサービス
### CloudFront
フロントエンド側の画面表示（静的ソース）
WebSocketで会議のリアルタイム情報をやりとり

### S3
CloudFrontのオリジン、Reactのフロント側ソースを格納
会議の各分析情報を格納


### Cognito
ユーザーのログイン認証

### AppSync
GraphQL APIで会議データを取得

### Lambda
会議関連データの処理（取得・保存など）

### DynamoDB
会議関連データの保存（生データや分析後データ）

### Bedrock
LLM（大規模言語モデル）や生成AIモデルをアプリケーションに統合（生成AIモデル本体である）

### Transcribe
音声認識サービス。リアル会議の音声データをテキストに変換し、画面上に文字起こしを行う。

### Lex
自然言語処理（NLP）サービス。画面上にチャットボット機能を配置し、「会議を要約してください。」のように対話形式で分析内容を得られる。

# 最後
いかがでしょうか？

実は、筆者は今回初めて生成AIの世界に入ったため、知識が不足している状態でAWSの生成AIサービスを模索していました。

しかし、周りには素晴らしい先輩方が多く、とても心強く、楽しい開発を経験することができました。

生成AIはテキスト、画像、音声、音楽など、さまざまな形式のコンテンツを自動的に生成することができる技術であり、ビジネスを爆速で変えています。

生成AIをビジネスで運用することは、働き方改革を促進する重要な手段となります。例えば、「毎日の議事録作成」など、反復的で時間のかかるタスクを自動化することができます。

うまく活用することで、従業員がより戦略的かつ創造的な業務に集中できる環境を作り出し、業務の生産性や質を高めることができます！

弊社は「生成AI構築支援」をサービスとして提供しています。

今年10月に、Japan DX Weekにも出展しました！

https://qiita.com/curlneko/items/4a4bc481ddd5939b8647


ぜひ、私たちと一緒に、生成AIを活用した新しい可能性を探ってみませんか？

皆さまからのお問い合わせを心よりお待ちしております！

https://www.beex-inc.com/contact
Laravelのシーディングとファクトリー：RailsのFixtureとの違い

### はじめに
RailsとLaravelは、どちらもWebアプリケーション開発で広く使われるフレームワークですが、その中でもテストデータの生成や管理において異なるアプローチを取っています。本記事では、Laravelのシーディング（Seeding）とファクトリー（Factory）について説明しつつ、RailsのFixtureとの違いを詳しく解説します。

### シーディングとファクトリーとは？

#### Laravelのシーディング（Seeding）

シーディングとは、データベースにサンプルデータを挿入する仕組みです。
Laravelでは、`DatabaseSeeder`クラスを利用して、複数のテーブルにデータを投入できます。
これにより、開発環境やテスト環境で簡単に必要なデータを準備できます。

Laravelのシーダーは以下のコマンドで作成します：

```
php artisan make:seeder SampleSeeder
```

その後、`database/seeders/SampleSeeder.php`にシードデータを記述します。

```php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;

class SampleSeeder extends Seeder
{
    public function run()
    {
        DB::table('users')->insert([
            'name' => 'John Doe',
            'email' => 'johndoe@example.com',
            'password' => bcrypt('password'),
        ]);
    }
}
```

### Laravelのファクトリー（Factory）

ファクトリーは、モデルに基づいて動的にデータを生成するための仕組みです。LaravelのファクトリーはFakerライブラリを利用してランダムなデータを生成することができます。

以下のコマンドでファクトリーファイルを作成します：

```
php artisan make:factory UserFactory --model=User
```

その後、`database/factories/UserFactory.php`にデータ生成ロジックを記述します。

```php
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    protected $model = User::class;

    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => bcrypt('password'),
            'remember_token' => Str::random(10),
        ];
    }
}
```

ファクトリーを使ったデータ生成は以下のように行います：

```php
User::factory()->count(10)->create();
```

### RailsのFixture

一方、RailsのFixtureは事前に用意したYAML形式のファイルを元にデータを挿入する仕組みです。通常、test/fixtures/ディレクトリにYAMLファイルを配置し、以下のようにデータを記述します。

```ruby
one:
  name: John Doe
  email: johndoe@example.com
  password_digest: <%= BCrypt::Password.create('password') %>

two:
  name: Jane Doe
  email: janedoe@example.com
  password_digest: <%= BCrypt::Password.create('password') %>
```

RailsのFixtureは、テストデータとして固定された値を使用するため、ランダム性がなく、シンプルに動作する点が特徴です。

### LaravelとRailsの違い

#### 1. データ生成の柔軟性

LaravelのファクトリーはFakerライブラリを活用して動的なデータを生成できるため、大量のテストデータやランダム性を求められるケースに適しています。一方、RailsのFixtureは静的なデータを使用するため、基本的なテストケースには適していますが、複雑なデータセットを生成する際には制約を感じることがあります。

#### 2. データの管理方法

Laravelのシーディングとファクトリーは、PHPコードとして記述されるため、プログラム的な処理を組み込みやすいです。一方で、RailsのFixtureはYAML形式で記述するため、設定ファイルのような役割を果たしますが、プログラム的な柔軟性は低めです。

#### 3. コマンドラインツール

Laravelでは、シーダーやファクトリーをartisanコマンドで簡単に作成し実行できます。この統一されたCLIツールは、学習曲線を緩やかにする助けとなります。Railsでもrails db:seedやrails generate fixtureなどのコマンドが用意されていますが、Laravelほど統一感があるとは言えません。


### まとめ

Laravelのシーディングとファクトリーは、RailsのFixtureに比べて柔軟性が高く、動的なデータ生成に適しています。一方、Fixtureは静的なデータを簡単に管理できるため、小規模なテストケースには適しています。

Rails学習者がLaravelを学ぶ際、シーディングとファクトリーの柔軟性や再現性の高いコマンドの便利さを理解することで、Laravelの良さをより実感できるでしょう。
Adventカレンダーに書いてしまったのでとりあえず自己紹介と地震観測について

# はじめに
皆さんこんにちは。趣味で地震観測とアプリ開発をしているただの平凡な中学生です。
まだQiitaも始めて間もない新人なので、優しい目で主を見てやってください（）
とりあえず、Adventカレンダーに予定を書いてしまったので、今更スルーするわけにもいかないので、軽めに自己紹介と私のやっている地震観測についてお話します。少しでもいいので見ていただけると嬉しい限りです。
# 自己紹介
### 最初に自己紹介を軽めに...
> **名前:Tokyo Taito Camera（ねい）**
> **現在の学歴:中学生**
> **年齢:14?**
> **趣味:防災アプリ開発や地震観測**
> **一言:始めて間もない新人ですがよrpk**

とりあえずこんなもんですかねぇ。これから地道に記事を書いていくんでどうぞよろしくお願い致します。
# 地震観測について
私が地震観測ライブで使用しているソフトなどを紹介します。
> リアルタイム地震ビューアScratch

![realtime-earthquake-youtube.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864918/26739532-6db3-fd13-b947-f65864697d0c.jpeg)
地震情報や緊急地震速報、津波情報などいろいろ作りこまれていて配信には持ってこいのWebアプリです。またScratchでできているのでRaspiでもしっかり動いてくれるのでおすすめです。
> Jamdp

![nowloc_bs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864918/c33e9739-b4c9-ad4a-d0b1-f724f9743364.png)
私は雨雲レーダーとして使っていますが、このWebアプリは気象警報・注意報マップや地震情報、津波情報や台風情報など気象・防災関連の機能が様々あります。これもおすすめです。
> TP-Link Tapoカメラ

![41fMRMNbVsS.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864918/afcb3aae-ec65-12c3-7d03-b89385d50996.jpeg)
このカメラは、rtsp経由でPCで閲覧できたりするので地震観測には多分使われやすいカメラです。
# 最後に
ここまで見てくださりありがとうございました。
たまに記事を投稿したりするので見てくださるとうれしいです。
ブリッジエンジニアとして4年働いた感想

個人的な意見であるため、ふーんって聞いてください。
私の属している組織に限った話もあるかと思うので、そのあたりは読み手の方のリテラシーに委ねます。

# はじめまして
ブリッジエンジニアとして働いている主ですが、はや入社4年目。
3年半くらい経ったので、そろそろ感想とか書いてもいいんじゃないかと思い筆を執る。

私は転職を経験しておらず、大学卒業後から会社が変わっていないません。
他社のことは全く無知です。

無知ながら、事実というか、体験した感想をメインに備忘録としたい。

# オフショア開発
弊社は実装部分の業務を海外企業に委託する形態で開発を行っている。これをオフショア開発って言うらしい。

人件費の安い国へ実装だけを依頼して、製品を作っている。
コミュニケーションをとる際、言語や文化の壁があるため、どうしても齟齬が生まれる。
差し戻し工数が圧倒的に多い。

実際日本企業に委託するのと比べどれほどのコスパなのだろうかと気になっている。

# キャリアプラン
ブリッジエンジニアとして働いている人のキャリアプランについて考えてみた。
ブリッジエンジニアと一口に言っても、担当フェーズやら事業規模やらあると思うが、、、。
一旦自分の環境であればという前提で考えてみる。

私の会社では要件定義やら仕様策定～詳細設計までを行い、実装のみを海外企業へ委託している。
委託先の企業の実装チームの管理等の業務も入り込んでくるような形だ。

マネージャとしてのスキルを身に着けるには適した場だと考えている。
折衝や炎上も多いので、臨機応変な対応が求められている。
一方でプレイヤーとしてのスキルはというと、全く身につかないと言っても過言。
過言ではある。
しかしテックリーダーになっていくようなキャリアプランは描けないと感じている。

上流工程をメインで行う企業であれば当然かもしれないが、知識は技術的な知識ではなく、製品の業務知識に偏っていくように思う。

# オフショア開発に向いてると思う人
PL/PMとしてのキャリアを築いていきたい人
⇒海外企業とのコミュニケーション等、工夫できる余地が大きい。
　マネージャーとしての手腕がある人を近くで見ることができる。
コミュニケーションを楽しめる人
⇒異文化の方とコミュニケーションを取って、
　互いに歩み寄るようなコミュニケーションを出来たときは楽しい。


# オフショア開発に向いていないと思う人
未経験者や自分のキャリアプランが明確でない人
⇒PL/PMとしての経験値以外の部分に関してはほとんど携われない場合がある。
　汎用的でない(どこでも通用するわけではない)設計書の作成だけになってしまい、
　未経験の人がイメージしているような技術知識を付けられない場合がある。

# 感想
ブリッジエンジニアについてメリットデメリットを書いたが、自分にはデメリットが大きく感じた。
なぜなら、プレイヤー⇒マネージャー　と段階を踏んでキャリアアップしていきたいと考えているからだ。
技術的な知識が少ない状態でマネジメント業務をしようとするとヒアリングや折衝が多くなってしまうと考えている。

やはり作業者を経験し、作業者の気持ちを汲む管理者というものになりたい。(願望)
すっ飛ばしてマネジメント業務特化したい！派の人でも上手にやっている人はいるが、自分には真似できないと思う(うまくやってる人すげえ)。

技術者は知識がない人に対して「これ以上説明しても伝わんないかな」という配慮で多少簡単に説明してくれるが、管理者側の考慮不足はそういう所から生まれるとおもう。
その穴をヒアリングで埋めるには経験からくる想像力が必要になる。
そういったスキルを作業者から順に学びたいなと感じるようになってきた。