OmniAICreator/Qiita-1.07M huggingface dataset:
ネットワークコンポーネントの役割と機能の説明

# ネットワークコンポーネントの役割と機能の説明

## ネットワークコンポーネント
ネットワークコンポーネントはコンピュータを構築し効率的に動作させるための基本的な要素。
それぞれのコンポーネントは特定の役割と機能を持っており通信やデータ伝送を可能にする。

## 役割と機能
> ①ルーター（Router）

**役割**
異なるネットワーク間の通信を中断・制御する

**機能**
- IPアドレスを使用してパケット（データ）の最適な経路を選択し送信する
- LANやWANを接続してデータを異なるネットワーク間でやり取りできるようにする
- ファイアウォール機能を持つこともありセキュリティを向上させる

> ②スイッチ（Switch）

**役割**
同一ネットワーク内の全デバイスにデータを送信する

**機能**
- Ethernetフレームを使用してデータを適切な宛先に転送する
- MACアドレスを基に転送先を決定し効率的な通信を実現
- VLANを設定することでネットワークのセグメンテーションをサポート

※Ethernetフレーム：イーサネットネットワーク（ローカルエリアネットワーク=LAN）上でデータを送信するための基本的なデータ単位
※VLAN：物理的に1つのネットワーク（LAN）に存在するデバイスを仮想的に複数のネットワークに分割する技術
※セグメンテーション：大きなデータやネットワーク内のトラフィックを扱いやすい小さな単位に分割するプロセス

> ③ハブ（Hub）

**役割**
ネットワーク内の全デバイスにデータを送信する

**機能**
- 受信したデータをすべてのポートにブロードキャストする
- 安価でシンプルだが効率が悪く現在はスイッチに取って代わられている

※ブロードキャスト：ネットワーク上で1つのデバイスから同一ネットワーク内すべてのデバイスにデータを送信する通信方式

> ④アクセスポイント（Access Point）

**役割**
ワイヤレスデバイスを優先ネットワークに接続する

**機能**
- Wi-Fi信号を提供して無線デバイスをネットワークに接続
- 多数のデバイスを接続可能でオフィスや公共施設で使用される

> ⑤モデム（Modem）

**役割**
インターネットサービスプロバイダー（ISP）との接続を提供

**機能**
- デジタル信号とアナログ信号を変換して通信を可能にする
- 一般的に家庭や小規模オフィスでインターネット接続に使用される

> ⑥ファイアウォール（Firewall）

**役割**
ネットワークを外部の脅威から保護する

**機能**
- 許可されたトラフィックのみを通過させる
- 不正アクセスやマルウェアからネットワークを守る
- ソフトウェア型とハードウェア型の両方が存在

※トラフィック：ネットワーク上で送受信されるデータの流れ

> ⑦サーバ（Server）

**役割**
ネットワーク内のデータやリソースを管理・提供する

**機能**
- ファイル、アプリケーション、Webページ、データベースなどをクライアントに提供
- 高速処理能力と信頼性を持つ

 > ⑧クライアントデバイス（ClientDvices）

**役割**
サーバからリソースやデータを要求し使用する

**機能**
- パソコン、スマートフォン、タブレットなどが該当
- アプリケーションやブラウザを介してネットワークにアクセスする

> ⑨ネットワークケーブル

**役割**
デバイス間でデータを物理的に伝送する

**機能**
- Ethemetケーブル（UTPケーブル）が主流
- 高速データ伝送や信号の安全性を提供

> ⑩プロキシサーバ（Proxy Server）

**役割**
クライアントとサーバの間に立ち、間接的に通信を行う

**機能**
- 通信をフィルタリングし、セキュリティを強化
- キャッシュ機能でネットワーク速度を向上

---
**これらのコンポーネントが相互に連携し、効率的で安全なネットワークを構築する。それぞれの役割と機能はネットワーク設計やトラブル時にとても重要なので理解を深めると良い**
grepの使い方

# Linux grep コマンド学習ドキュメント

`grep`コマンドは、テキストデータを検索し、特定のパターンを抽出するための強力なツールです。このドキュメントでは、基本的な使い方から高度なオプションまでを解説します。

---

## 基本構文

```bash
grep [オプション] パターン ファイル名
```

- **パターン**: 検索する文字列または正規表現。
- **ファイル名**: 検索対象のファイル。

## よく使うオプション

| オプション | 説明 |
|------------|------|
| `-i`       | 大文字小文字を区別しないで検索します。 |
| `-v`       | パターンに一致しない行を表示します。 |
| `-r` / `-R` | ディレクトリを再帰的に検索します。 |
| `-n`       | 一致した行番号を表示します。 |
| `-c`       | 一致した行数を表示します。 |
| `-l`       | パターンが含まれるファイル名を表示します。 |
| `--color`  | 一致した部分を色付きで表示します。 |

## 使用例

### 1. 単純な文字列検索
```bash
grep "hello" example.txt
```
`example.txt`から"hello"を含む行を表示します。

### 2. 大文字小文字を無視した検索
```bash
grep -i "error" logs.txt
```
`logs.txt`から"error"または"ERROR"などを検索します。

### 3. 否定検索
```bash
grep -v "debug" output.log
```
`output.log`から"debug"を含まない行を表示します。

### 4. 複数ファイルの検索
```bash
grep "function" *.c
```
現在のディレクトリ内のすべての`.c`ファイルを検索します。

### 5. 再帰的検索
```bash
grep -r "TODO" src/
```
`src/`ディレクトリ内のすべてのファイルから"TODO"を検索します。

## 正規表現の利用

`grep`は正規表現を使用して柔軟な検索が可能です。

### メタ文字一覧
| メタ文字 | 説明 |
|----------|------|
| `^`      | 行の先頭に一致します。 |
| `$`      | 行の末尾に一致します。 |
| `.`      | 任意の1文字に一致します。 |
| `*`      | 直前の文字が0回以上繰り返される部分に一致します。 |
| `[]`     | 文字クラスを指定します。例えば`[a-z]`は小文字のaからzに一致します。 |
| `\`     | メタ文字をエスケープします。 |

### 正規表現の例

#### 行の先頭に一致
```bash
grep "^start" file.txt
```
行の先頭が"start"で始まる行を検索します。

#### 行の末尾に一致
```bash
grep "end$" file.txt
```
行の末尾が"end"で終わる行を検索します。

#### 任意の文字を検索
```bash
grep "h.t" file.txt
```
"h"と"t"の間に任意の1文字がある行を検索します（例: "hat", "hot"）。

---

## 応用例

### 出力結果を別のコマンドに渡す

```bash
grep "error" logs.txt | sort | uniq
```
`logs.txt`から"error"を検索し、結果をソートして重複を除去します。

### ファイルに結果を保存
```bash
grep "pattern" file.txt > result.txt
```
検索結果を`result.txt`に保存します。

---

## まとめ

`grep`は日常的な作業から高度なテキスト処理まで幅広く使用できます。正規表現や他のツールと組み合わせることでさらに強力なツールとなります。まずは基本的な使い方をマスターし、必要に応じてオプションや正規表現を活用してください。
Solargraph の The workspace is too large to index という警告を取り除く

# 問題

VS Code で [Ruby Solargraph](https://marketplace.visualstudio.com/items?itemName=castwide.solargraph) という拡張機能を使用している。とあるプロジェクトで以下の警告が発生し、Ruby Solargraph によるコードジャンプの機能が使用できない :cry:

> The workspace is too large to index

![The workspace is too large to index](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/6320c3de-5a3a-21cb-29a4-38deb8870252.png)

# 解決方法

プロジェクトのディレクトリ直下に `.solargraph.yml` という YAML ファイルを作成する。そして `max_files` の設定を追記する。なお、このデフォルト値は `5,000`。

```.solargraph.yml
max_files: 7000
```

ちなみに `.solargraph.yml` は Git で無視したい。`.gitignore` に `.solargraph.yml` を追記してもいいが、もし `.gitignore` を編集したくない場合は `.git/info/exclude` に `.solargraph.yml` を追記する。

```.git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
.solargraph.yml
```


# 参考

- [Solargraph: Configuration](https://solargraph.org/guides/configuration)
- [ファイルを無視する - GitHub Docs](https://docs.github.com/ja/get-started/getting-started-with-git/ignoring-files)
ちょっとおしゃれなQRコードを作成してみた

# ちょっとおしゃれなQRコードを作成してみた

本記事は「 [TTDC Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ttdc) 」 20 日目の記事です

## はじめに

ネットで話題になっていたQRコード生成ツール（QuickQRArt）の紹介です。

## QuickQRArtの特徴

- **簡単操作**: 誰でも簡単にQRコードを作成できます。
- **カスタマイズ可能**: プロンプトを利用して色やデザインを自由にカスタマイズして、オリジナルのQRコードを作成できます。
- **高解像度**: 高解像度のQRコードを生成できるため、印刷物にも対応可能です。

## QuickQRArtの使い方

1. **サイトにアクセス**:  
[QuickQRArt](https://quickqr.art)の公式サイトにアクセスします
2. **ログイン**:  
サイト右上の「login」ボタンからログインをします。  
GoogleやDiscordのアカウントがあればそのままログインできます。
なければ、メールアドレスとパスワードを入力して新規登録を行います。

![login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959372/98634572-4cda-21ab-3175-77c5a6493449.png)


3. **QRコードの生成**:
    - テキストやURLを入力します。
    - デザインオプションを選択します（色、パターンなど）。
    - 「Generate」ボタンをクリックしてQRコードを作成します。
3. **保存**:  
生成されたQRコードを保存します。

## 具体例
以下に、QuickQRArtを使って作成したQRコードの例を示します。

今回は自社のホームページのLinkです。  
またプロンプトには[blue car]と入力してみました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959372/872696bb-59f1-4b0e-9d75-c24bfa9f62c5.png" width="400" height="700">

Generateを押して、作成されたQRコードがこちらです!

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959372/f6de8ffa-f7a0-de7f-ab12-9a6fea4f2c8a.png" width="400" height="400">

一見、QRコードとして認識されないように思えますが、自分の携帯ではしっかりと読み取ることができました!  
このような感じで数分でちょっとおしゃれなQRコードを作成できます

## まとめ
QuickQRArtは、簡単におしゃれなQRコードを作成できる便利なツールです。ぜひ試してみてください。

## 参考リンク
- [QuickQRArt公式サイト](https://quickqr.art)
【Web】HTTPの流れ

# はじめに
こんにちは！アメリカで独学でソフトウェアエンジニアを目指しているものです。
現在、RubyとRuby on Railsの勉強をする合間に、Webの基礎的な仕組みを学んでいます。

本記事では、Web通信の根幹となるHTTPについて、その基本的な流れを初心者向けに説明していきます。
ここでは主に「HTTP/1.1」を前提とした典型的な手順をまとめています。近年はHTTP/2やHTTP/3といった新しいバージョンが利用されるケースも多いですが、本記事では基本のイメージをつかむことを目的としています。

## HTTP通信の全体の流れ
HTTP通信は大きく5つのステップで構成されます

1. TCP接続の確立（3ウェイハンドシェイク）
2. （HTTPSの場合）SSL/TLSハンドシェイク
3. HTTPリクエストとHTTPヘッダーの送信
4. HTTPレスポンスとHTTPヘッダーの受信
5. 必要に応じてTCPコネクションの終了（4ウェイハンドシェイク）

なお、実際のWebブラウザは1つのTCPコネクションを複数のリクエスト・レスポンスのやり取りに使い続ける（Keep-Alive）ため、毎回この5ステップが1セットで完結するとは限りません。
以下では、基本的な一連の流れを示します。

### 1.TCP接続の確立（3ウェイハンドシェイク）
HTTP通信を始めるには、まずクライアント（ブラウザなど）とサーバー間でTCP接続を確立する必要があります。TCPは信頼性の高い通信を行うためのプロトコルで、以下の「3ウェイハンドシェイク」と呼ばれる手順で接続が成立します。
#### 3ウェイハンドシェイクの手順
1. クライアント → サーバー：SYN（接続要求）
2. サーバー → クライアント：SYN + ACK（要求受諾と応答確認）
3. クライアント → サーバー：ACK（応答確認完了）

これでTCPによる通信路が確保され、HTTPメッセージをやり取りする準備が整います。

### 2.（HTTPSの場合）SSL/TLSハンドシェイク
現在、多くのWebサイトはHTTPS（HTTP + TLS）を採用しています。これは通信内容を暗号化してセキュリティを高めるためです。
例えば、オンラインショッピングでクレジットカード番号や個人情報を送信する際、HTTPSであれば第三者による盗聴や改ざんが困難になります。

HTTPSを利用する場合、TCP接続確立後にSSL/TLSハンドシェイクを行います。このハンドシェイクによって、クライアントとサーバーは共通の暗号鍵を生成し、以降のHTTP通信は暗号化されて行われます。

#### SSL/TLSハンドシェイクの手順（TLS 1.2を例にしたイメージ）
1. クライアントハロー：クライアントが使用可能な暗号スイート（通信暗号方式）をサーバーに提示
2. サーバーハロー：サーバーが暗号方式を選択し、サーバー証明書をクライアントに送信
3. 証明書検証・鍵交換：クライアントはサーバー証明書を検証し、鍵交換方式（一般的にはDiffie-Hellmanなど）を用いて共通鍵を確立
4. 暗号化開始：以後の通信は共通鍵による暗号化通信が行われる
（注：TLS 1.3ではハンドシェイクがよりシンプルになっています。）

### 3.HTTPリクエストとHTTPヘッダーの送信
TCP接続（およびHTTPSならTLSハンドシェイク）完了後、クライアントはサーバーにHTTPリクエストを送信します。

#### HTTPリクエストの構造
* リクエストライン:
例 `GET /index.html HTTP/1.1`
ここにはHTTPメソッド（GET、POSTなど）、リクエスト先のパス、HTTPバージョンが含まれます。

* リクエストヘッダー:
例
`Host: www.example.com`
`User-Agent: Mozilla/5.0 ...`
`Accept: text/html`
`Cookie: ...`
ブラウザの種類、要求するデータ形式、セッション情報などが記載されます。

* リクエストボディ:
GETリクエストでは通常空ですが、POSTリクエストなどではフォームデータやファイルがここに含まれます。

### 4. HTTPレスポンスとHTTPヘッダーの受信
サーバーはリクエストを処理し、結果をHTTPレスポンスとして返します。

#### HTTPレスポンスの構造
* ステータスライン：
例 `HTTP/1.1 200 OK`
HTTPバージョンとステータスコード（200は成功、404はファイルが見つからないなど）が記載されます。

* レスポンスヘッダー：
例
`Content-Type: text/html; charset=UTF-8`
`Content-Length: 12345`
`Cache-Control: no-cache`
コンテンツの種類、エンコーディング、キャッシュポリシーなどが含まれます。

* レスポンスボディ：
HTML、CSS、JavaScript、画像、JSONなど、実際にクライアントが表示・処理するデータがここに含まれます。


ブラウザは受け取ったレスポンスを解析・表示し、ユーザーが目にするWebページが画面に描画されます。
### 5.必要に応じたTCPコネクションの終了（4ウェイハンドシェイク）
通信が完了し、もはやそのTCP接続を使わない場合は、4ウェイハンドシェイクと呼ばれる手続きでコネクションを終了します。

#### 4ウェイハンドシェイクの手順
1. クライアント → サーバー：FIN（終了要求）
2. サーバー → クライアント：ACK（要求受理）
3. サーバー → クライアント：FIN（サーバーも終了要求）
4. クライアント → サーバー：ACK（サーバー側の終了要求確認）

これでTCP接続が完全に切断されます。

ただし、HTTP/1.1では「Keep-Alive」により、1つのTCPコネクションで複数のHTTPリクエスト・レスポンスを処理することが多いため、ページ内の複数リソース（画像、スクリプト、CSSなど）を取得する間はコネクションを維持し、その後まとめて切断することが一般的です。

### HTTP/2やHTTP/3では？
本記事ではHTTP/1.1を前提とした基本的な流れを説明しました。しかし、近年はHTTP/2やHTTP/3が普及しています。

* HTTP/2: 一度確立したコネクション上でストリーム（仮想的な複数の通信路）を並行的に扱うことで効率化
* HTTP/3: TCPではなくUDPをベース（QUICプロトコル）として、さらに接続確立を高速化



# まとめ
本日はHTTP通信の全体の流れについてまとめてみました

1. TCP接続確立（3ウェイハンドシェイク）
2. HTTPSならSSL/TLSハンドシェイクで暗号化開始
3. クライアントからHTTPリクエスト・ヘッダー送信
4. サーバーからHTTPレスポンス・ヘッダー受信
5. 必要に応じてTCPコネクションを終了（4ウェイハンドシェイク）

今後もWeb技術について学び、整理できたらまた別の記事で共有していこうと思います。
ぜひ、気になる方はChromeデベロッパーツールやブラウザ拡張機能を使い、実際のHTTPリクエスト・レスポンスを観察してみてください！
Sequel Aceで本番環境用のMariaDBに接続する手順

# 概要

Railsでアプリケーションを作成していますが、本番環境のDBもSequel Aceで確認出来ればと思い、本番環境で使用しているMariaDBへの接続を行いました。

スクールのカリキュラムでは本番環境のデプロイにはRenderを使用し、DBはPostgreSQL、GUIでのDBの確認・操作はTablePlusを用いていました。

EC2でアプリケーションをデプロイして本番環境用のDBにMariaDBを使用、というところでSequel Aceに接続するにはどうすればいいのだろうかと思ったところからのスタートに。

# 利用環境

- Rails 7.0.0
- MariaDB 5.5.68
- Sequel Ace

# 手順

### 前提

必要な情報

- EC2インスタンスのパブリックIPアドレス
- SSH秘密鍵ファイル
- MariaDBのユーザー名とパスワード
- MariaDBのデータベース名
- MariaDBのデフォルトポート: `3306`

### Sequel Ace側の設定

- SSHを利用した接続方法を選択
![スクリーンショット 2024-12-19 18.56.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3915393/edf87a91-ce6f-a2f8-f8d9-557ea7dfd87e.png)
- 各情報を入力
    - MySQL Host: `127.0.0.1`（ローカルホストとして接続）
    - Username: `root`（MariaDBのユーザー名）
    - Password: MariaDBの利用に際して設定したパスワード
    - Database: `◯◯_production`（確認したいDB名）
    - Port: `3306`（MariaDBのデフォルトポート）
    - SSH Host: `ec2-user@◯◯◯◯◯◯` （EC2インスタンスのパブリックIPアドレス）
    - SSH Password: SSH秘密鍵ファイル（鍵マークからファイルを選択できるので該当秘密鍵ファイルを選択）
    - SSH Port: `22` （デフォルトのSSHポート）
- **Test connection**で接続が成功することを確認して**Connect**で接続

### 備考

- EC2インスタンスのセキュリティグループでSSH接続用の22番ポートが開いている必要あり（そもそもインスタンスの設定でSSH接続しているはずなので念の為）

# 最後に

カリキュラムのみではAWS側（＝Render,PostgreSQL,TablePlusという組み合わせではない）本番環境でDBをGUIで確認する方法が無かったので手順を調べつつ実行しました。とはいえSSH接続を利用して、ここまでで設定してきたDB名/PWやEC2インスタンスのアドレス、SSH秘密鍵など準備してきたものを正しく設定すれば問題なく設定が出来ました。
1か月でSOAとSCS受かる方法

## はじめに
未経験2年目エンジニアの私が、勉強期間1か月でAWS SOAとSCSに合格することができたので、
勉強方法を紹介します。（一番大事なのは結局気合いですが）


## 目次
- プロフィール
- SOAとSCS勉強方法
- さいごに

## プロフィール
- 新卒2年目（未経験）
- 会社ではSREにまつわる仕事をして、普段の業務からAWSに触れています。
### 1か月前までの保有資格
- AWS SAA
- AWS DVA


## SOAとSCS勉強方法
冒頭でも紹介しましたが、勉強期間1か月で合格することができました。
それぞれ2週間ほどです。SOAとSCSは扱っているサービスが結構被っているので、SOA→SCSの勉強方法はとても効率がいいです。

### 合格点と自分のスコア（参考までに）

- SOA　合格点720/1000 スコア864/1000
- SCS　合格点750/1000 スコア839/1000

### 自分の勉強道具たち
- 本（SOA）
- Udemy（会社の福利厚生で好きなのが見れます。）
- Skill Builderの公式模試（有料と無料）
- Cloud License

## SOA
**day1~4** SOAの本を読む(なんでもいいです)

**day4〜6** udemyの問題を解く
7割〜8割の正答率まで繰り返す

**day7〜12** Cloud Licenseを解き切る

**day12〜14** Cloud Licenseの本番モードで解く
(解いたことある問題がランダムで65問出るので8〜9割の点数でした。)

**day14〜15** Skill Builderの模試を解く
(見たことない問題半分、ある問題半分くらい→8割5分ぐらいでした。)

### テスト本番→864点
解きながら受かったなと思うぐらい自信ありました。

### 気づき
本よりも、問題ベースで勉強した方が頭に入ってた気がしました。SAAとDVAの時はCloud License使っていなかったが、使った方がだいぶ合格は固くなると思いました。

## SCS
上記の気づきをもとにCloud License×Skill Builderで受かるのかを検証してみました。

**day1〜10** Cloud Licenseで問題を解く。

:::note info
わからないところがあったらマークをつける。
:::
:::note info
選んだ答えがなぜ正解かを軽く説明できるぐらいの粒度で勉強する。
:::
:::note info
解き直しは間違えた問題と、マークをつけた問題だけにする。
:::
**day 11.12** Skill Builderの模試を解く

:::note info
3回受けて750〜800点ぐらいでした。
:::
:::note warn
SOAの方が点数高かったのと、合格点が30点SCSの方が高いので正直焦ってました。
:::

**day 13** Skill Builldeの公式模試を解く

:::note alert
正直見たことない問題が多かった。
:::
:::note alert
絶対これあってる！っていう問題が2割ぐらいしかなかった。
:::
:::note warn
結果は755点でした。(焦りました。)

これは前日にやらない方がいいです。メンタルやられるので。
:::
**day 14.15** 今まで間違えた問題、印をつけた問題を解き直す。
↑とても大事だと思います。

### 本番→839点
:::note info
解いたことある問題が3〜4割、解いたことある問題の中で類似問題9割って感じでした。
○ (自信あり)45問ほど
△(2択まで絞れてる)17問ほど
×(4分の1のお祈りゲー)3問ほど
まぁ受かったかな？ぐらいの感触でした。
180分の試験ですが、110分で解いて、見直ししたので早めに帰りました。(時間は余裕あると思います。)
:::
## 最後に
今回初めてCloud LicenseとAWS公式の模試を活用してみましたが、同様の問題や類似問題がかなり出る印象なので個人的にはこれらで受かると思います。また、模試は自信につながるのでやっといた方がいいと思います。ただ逆に、模試で合格点を切ってたらメンタルやられるので、合格点を出す準備をしっかりしてから受けましょう。
偽情報対策ハッカソン体験レポ

## はじめに
 社内有志([@sayakaitooo](https://qiita.com/sayakaitooo), [@nandemo_3_](https://qiita.com/nandemo_3_), [@axis99](https://qiita.com/axis99))でハッカソンに参加してきました。
 本記事では、作成したツールについての簡易的な説明と、ハッカソンへの参加で得られたものについて書きます。

## 自己紹介
- 新卒1年目
- データエンジニア
    - データチーム所属
    - 普段の業務はデータ連携やダッシュボード作成など
- ハッカソンは初参加

## 参加したハッカソン
- [Hack the Disinfo](https://www.disinfo2024.code4japan.org/)
    - 開催期間: 2024年11月3日（日）~ 2024年11月4日（月・祝）
    - 日本初の偽情報ハッカソン

## 作成ツール
### 概要
- X専用のChrome拡張
    - 怪しいポストのファクトチェックをする時に利用
### 機能
- ポスト主の過去のポストを要約し、キーワードを抽出して、ポスト主のペルソナと重要度を表示
- ポスト本文からキーワードを抽出し、BirdXplorerから類似したコミュニティノートを表示

![0342.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3084450/4aaa50ce-bae7-81b5-c39e-a2d2106cd6df.png)


### 実装
詳しくは本記事末尾の発表資料やGithubをご参照ください。
実装はフロントエンドとバックエンドを分担し、私はAPIの一つを実装しました。

#### コード抜粋
キーワード抽出やペルソナ推定に生成AI（Chat GPT）を使用しました。
返ってくるフォーマットを指定したり、既存のデータを優先的に使わるなど、細かなカスタマイズにも対応でき、非常にスムーズに開発できました。
例として１つ実際のプロンプトを下記に示します。

__投稿ポストからトピックを取得する部分:__
```
    prompt = f"""Given the following text:\n{text}\n
    Please find the most relevant topic from this list.
    Output must be words, separated by commas.
    You have to use words in the list as priority: {', '.join(topic_labels.keys())}.
    If the relevant topic is not in the list, please return any other relevant words, also separated by commas."""

    # OpenAI APIを使用して関連性を評価
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": prompt}
        ]
    )
```
---
## ハッカソンで得られたもの

普段の業務とは異なる分野での実装ができ、技術的な知見が深まりました。
日々の勉強や、自己開発でもこうした知見は身に付きますが、
ハッカソンという限られた期限の中で、作りたいツールを実現させるには？と実践的に開発できたことで、他の方法よりも、知識が身になった感覚があります。

また、所属を超えて他のチームのメンバーと開発できたことは、
社内での新たなつながりができた点やまだ勉強できていない領域の知識が得られた点で、私にとって意味深い経験でした。

## まとめ
参加する前はおっかなびっくり、自分の技術力で役に立てるか大変不安でしたが、
参加してみると想像以上に良い体験ができました。

ハッカソンを開催してくださった主催者の方々に重ねてお礼を申し上げます。
自分の技術力でも開発できるよう、開発タスクを振り分け、助けてくださった先輩方にもこちらで改めて感謝の意を表したいと思います。
おかげさまで、とても楽しかったです。ありがとうございました！


## 資料
- [発表スライド](https://docs.google.com/presentation/d/1YYsPw8fAJc3te_nMX_eEZ3-ofPifD0jeSN4qHkx11zo/edit#slide=id.g325d5de0d11_1_0)
- [Github](https://github.com/axis-99/x-community-note-chrome-extension)
devcontainer.jsonなしでイメージ毎のVscode設定保存場所など

# 概要
Windowsマシンにおいて、devcontainer.jsonがない状態でDocker環境を構築しているとき、コンテナごとの拡張機能や設定をどこに保存しているのか謎だったので探しました。

# 結論
下記に保存されています。
Vsocodeの設定はコンテナごとというよりイメージ名単位でローカル環境に保存されています。
```
C:\Users\{ユーザ名}\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\imageConfigs\{イメージ名}.json
```

また、にワークスペース単位（＝コンテナとマウントしているディレクトリ直下）で.vscode/settings.jsonを作成している場合、
{イメージ名}.jsonより.vscode/settings.jsonの内容が優先されました。

# 補足
settingの内容をUIで設定する場合、
３種類の設定保存先が存在することに注意する。
- 「ユーザー」はローカルのVscode設定保存先
- 「リモート」はイメージ単位のVscode設定保存先
- 「ワークスペース」はマウントしているディレクトリ直下のVscode設定保存先
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/1607ab04-79e6-e46d-a3fc-533142f28a5b.png)
Typstでマンデルブロ集合

# 概要 
https://x.com/zr_tex8r/status/1869363273377980547 

ということなのでTypstでマンデルブロ集合を描画します．CeTZをつかいますが，といってもCeTZを使うのは座標の点で描画するためだけです．それ以外は基本機能ですべて計算できます．

マンデルブロ集合には複素数平面上の集合なので，複素数を使う必要があります．複素数を扱うパッケージもありますが．ここでは2要素の array で十分なのでそれで表現します．

マンデルブロ集合そのものの解説はウェブ上にたくさんありますのでそちらをご覧ください．
# コード
```
#import "@preview/cetz:0.3.1"

#set page(width:auto,height:auto, margin:0pt)

//遷移関数の定義
#let Md(z, c) = {
  let real = z.at(0)
  let img = z.at(1)
  
  return (calc.pow(real,2) - calc.pow(img, 2) + c.at(0), 2*real*img+c.at(1))
}

//複素数の絶対値（の二乗）の計算
#let c_abs(z) = {
  let real = z.at(0)
  let img = z.at(1)
  return calc.pow(real,2) + calc.pow(img, 2)
}

//マンデルブロ集合を計算する．発散速度に応じて色分けをするために何回で絶対値の二乗が４を越えたかを出力する．上限に達したら255を返す．
#let Mandelbrot(c) = {
  let z = (0,0)
  let bound = 50
  let i = 1
  for i in range(bound) {
    z = Md(z,c)
    if c_abs(z)>4 {return calc.min(i * 5, 255); break}

  }
  
 return 255
}

//CeTZで描画．円だと隙間があるので正方形で描画
#cetz.canvas(length:2cm, {
  import cetz.draw: *
    let  grid = 355
    for i in range(grid) {
    for j in range(grid) {
      let x = 1 - 3*i/(grid)
      let y = 1 - 2*j/(grid)
      let M = Mandelbrot((x,y))
      rect((x,y),(x+ 0.02,y + 0.02), fill:color.map.rainbow.at(M), stroke:none)	
    }
  }

})
```

# 実行結果
こうするとこんな感じになりました．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787163/266c2f96-a512-b3e9-f989-d4297e2abf71.png)

# 感想
コンパイル時間は2min 28.84 s でした．TypstはTeXに比べて速いとは言いますが，こういうことをさせるには（当然と言うか）向いていませんね．
Muエディタ終了のお知らせ

# Mu エディタ終了のお知らせ

私が日本語化で協力しているOSSにMuエディタがあります。

https://qiita.com/inachi/items/8f61586cd2482987b8d0

元々は micro:bit 用 MicroPython のオフラインエディタでしたが、その後に CircuitPython や CPython などのモードを追加したエディタに進化していきました。

2024年12月10日に、この Mu エディタの開発終了宣言がでました。

https://madewith.mu/mu/users/2024/12/10/retirement-plans.html

確かに、ThonnyがMicroPytjonに対応し、VSCode 用の拡張機能で MicroPython や CircuitPython が扱えるようになったり、micro:bit の MicroPython オンラインエディタも進化してシミュレータ付きの高機能なものになり、CircuitPython も[純正のオンラインエディタ](https://code.circuitpython.org/)を提供している状況では、Muにこだわる意義が薄れてきてました。私自身もMuを使う機会がほとんど無くなっていました。

今後Muがどうなるのかの概要は以下のとおりです。

* 新年早々にレガシーリリースと最終リリースを出す
* その後、githubリポジトリをアーカイブ、読み取り専用にする
* Webサイトを廃止ステータスに更新
* 最後に振り返りのブログを書く

2025年第1四半期末までに完了する予定とのことです。
【VScode】右上ミニマップの削除方法

VScodeの右上のミニマップ、使わないなと思ったので、削除方法を調べてみました。

初めての記事になりますので、ですます調一致してないかもだし、書き方も統一性がなくて読みづらいかもだけど、とにかく書いてみました。

備忘録として書いてますので、ほぼ自分のために書いてますので、自分にしかわからない表記しているかもしれませんが、ご了承ください汗


**1.設定ファイル(settings.json)を開く**
・いくつか開き方はあるが、自分が知っている中で最もシンプルな方法を紹介↓
　① Ctrl + Shift + P を同時押し
　　・すると、画面の上側に、コマンドパレッドが表示される（>から始まるやつ）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3937953/7aab735f-c117-65eb-8ea4-9e93f818e645.png)


　②「JOSN」と入力
 　　・検索結果に、「基本設定：ユーザ設定を開く（JSON)」と表示されるのでそれをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3937953/e9cde870-9196-2673-7472-0aae5a39b2d8.png)


**2.以下のプログラムを追加**
```c:setting.json
"editor.minimap.enabled": false,  //ミニマップの表示
```
**※再表示したいときは、falseをtrueに変更**
```
"editor.minimap.enabled": true,
```

以上です！
まだまだQiita特有の書き方に慣れないなぁ。これからたくさん書きまくりますので、よろしくお願いします！
NPM - How to Set Proxy?

# Modified .npmrc
```.npmrc
https-proxy=http://account:password@proxy.johnny.com.tw:8080/
http-proxy=http://account:password@proxy.johnny.com.tw:8080/
proxy=http://account:password@proxy.johnny.com.tw:8080/
noproxy=nexus.johnny.com.tw
```
* http://account:password@proxy.johnny.com.tw:8080/ <- You need change this.
* nexus.johnny.com.tw <- You need change this.
NPM - How to Set Public and Private Registries at The Same Time?

# Modified .npmrc
```.npmrc
strict-ssl=false
@your_private_lib:registry=https://nexus.johnny.com.tw:8443/repository/npm/
registry=https://registry.npmjs.org
```
* @your_private_lib <- You need change this.
* https://nexus.johnny.com.tw:8443/repository/npm/ <- You need change this.

# REF:
https://stackoverflow.com/questions/32633678/
ALLAY(ALTO-DAPN)の自己紹介とBlenderのススメ

<p>初めまして。メンターさんから聞くにアプリ甲子園とか歴戦の猛者な方々が名を連ねるこのアドカレで突如4日分の記事を突っ込んだのは私です。<br>今回は題名通り、私の自己紹介とBlenderのススメについて書かせて頂きます。よろしくお願いします。</p>
<h1>自己紹介</h1>
<p>まずは(割と本気で)こいつ誰だ...って思われてると思うので自己紹介させて頂きます。<br>コミュ力と身長と引き換えに技術なら結構なんでも出来る、あらい、もしくはあるとです。テック内ではあらいだけど外で基本的にあるとを名乗っています。中学三年生、中高一貫なので権限はほぼないけど中学コンピューター部長と中学放送委員長をしてます。技術面ではWebD、動画制作、写真編集、3Dモデリング、UnityとC#によるゲーム制作をメインに電子音楽、WebS、Pythonを用いたAI開発や半導体などのアルゴリズムやそれより深層のハードウェア、電子工作などもぼちぼちやってます。アプリ甲子園ゲー予選落ちです。決勝大会日帰り旅行で行かないって言ったのに寝坊して結局どっちも行けなかったです。スクールは白金土曜、コースはUnityでメンターはようるです。実は8月までは動画編集とWebD主軸の活動をしていて、キャンプまではcolliderすら理解してませんでした。キャンプ後独学でAsset等駆使して簡単な3Dゲームを制作、スクール初参加にして早速オリジナル制作しております。鬱ゲーを愛し、アクションを愛し、タワーディフェンスを愛しムービーを愛します。</p>
<h1>3Dモデリング?</h1>
<p>いよいよ今日の本題、Blenderについてです。(おことわり)この記事、スケジューリング能力皆無な私がカレンダーも見ずに適当にアドカレに突っ込んだせいでテスト2日目に公開とかいう地獄の日程取りになり、勉強してたせいで締切当日(12/10)に学校でスマホ使って書いてます。成績なんて知るか。私は学業の学を捨て業を取らざるを得ない道に片足突っ込んでるんだ。てなわけで締切寸前カスクオリティ、カスフォーマット、画像無し、テス勉でUnityできなくてフラストレーション溜まってやさぐれてる中三の記事で良ければお進み下さい。無理だよーって方は後に続く三記事だけでもどうぞ。</p>
<h2>Blenderについて</h2>
<p>そもそも私、最初はBlenderやる予定じゃなかったんです。テックで今制作を進めてるオリジナルもそもそもは学内で数人のチームで進める予定でしたが、私は立てた計画が必ず空中分解する呪いを生まれつき受けているので当然モデラー予定の後輩が離脱、私1人のチームとなり、やむなくBlenderやるかあ...ってやってみたらこれが楽しい楽しい、気づけば記事を書いてました。Qiitaを見てる人にBlender知らない人は居ないと思うんですけどBlenderは世界シェアトップクラスの3Dモデリングソフトウェアで、造形の他にも動画制作、2Dアニメーションなど様々分野に応用の利きます。3Dモデリングソフトシェアトップはたしか「Maya」ですが、たっかい。Blenderは無料で高機能なのでインディーズ界隈においてMMDと並んで長年愛され続けています。(MMDは使ったことがないけど『原神』などのいわゆるミホヨゲーのキャラはMMDっていう噂です)Unityやってる方は分かると思うんですが、Unityではとても造形がしづらいですよね。3Dゲーム制作用エンジンではあるものの、既に色々載せすぎてモデリング機能なんてつけようもんならUnityの中の人が血反吐吐いて逝ってしまいます。Cube2つ使って何となく前後分かるようにしたモデルくらいならprefabで何とかできるでしょうが、ゼル伝のリンクをUnityだけで作ろうと思えばそれはドMしか通ることを許されない過酷な道になるわけです。そこで出てくるのがBlender。一つの箱を引き延ばし、あーだこーだして自分の欲しい形に再造形する万能ソフトなわけです。基本的には一つの箱にいろいろエフェクトのようなもの(モディファイアと言います)を付けたり、点描のように頂点を引き延ばしたり、頂点を追加したりして造形するわけです。ゲーム制作の上で、デザイン、特にキャラクターデザインとUI/UXデザインはとても重要な役割を果たします。2Dゲーならキャラデザは「絵を描くだけ」で事足りることもありますが、3Dゲーとなるとそう簡単には行きません。ユニティちゃんを使ってゲーム制作するのも無理があります。また、マップメイキングも、簡単に色を付けられるという点においてBlenderが勝っています。というわけで結局何が言いたいねんっていう文章になりましたが、っていうか自分も途中から先の構成わけわかんなくなっちゃいましたが、言いたいのはただ一つ、全人類Blenderしましょう。楽しいから。
【Postgresql】Insert時にAutoVacuumが起動していなかった話

## はじめに
DB初心者が、業務中やプライベートでDBをいじっている時に困ったことをメモとして残します

## 環境情報
PostgreSQL 16.4 (Homebrew) on x86_64-apple-darwin23.4.0

## 何があったのか

- やりたかったこと
以下テーブルのレコードを100件ほど追加して、auto vacuumでテーブルの統計情報が更新されることを確認したかった。

    | 売上id | 売上合計 | 映画タイトル | 売上日 | 
    |:-:|:-:|:-:|:-:| 
    | 1 | 12000 | 映画タイトル1 | 2024-01-01 | 
    | 2 | 15000 | 映画タイトル2 | 2024-01-01 | 
    | 3 | 11000 | 映画タイトル3 | 2024-01-02 |
    | 4 | 13000 | 映画タイトル1 | 2024-01-02 | 
    | 5 | 16000 | 映画タイトル5 | 2024-01-03 |

<br>

- 起こったこと

レコードを100件インサートした後に以下クエリを実行
````
select relname,last_autoanalyze from pg_stat_user_tables where relname = 'eiga'

````

結果、last_autoanalyzeはnullになっており、auto vacuumは実行されていなかった


## auto vacuumの仕組み
auto vacuumは以下３つのプロセスが関係しており、図で書くとこんな感じ？
![段落テキスト.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760174/4733d38d-e00d-9b0e-7176-57065162d718.jpeg)


### 1. postmaster 
2,3のプロセスを開始する 

### 2. auto vacuum ランチャー
vacuumを実行するための情報を収集し、ポストマスターに伝える。
※ pg_stat_user_tables等のシステムビューを参照している。
> 自動バキュームランチャープロセスは、テーブルでバキューム操作を実行するための自動バキュームワーカープロセスを開始する適切なタイミングを決定します。

auto vacuumが必要かどうかの判断については、以下の設定値が用いられる

- autovacuum_vacuum_threshold:50(デフォルト)
    - 50行更新されたら、auto vacuumが走る
- analyze_scale_factor:0.1
    - テーブルのレコード数の10%を超えた更新が入ったら、auto vacuumが走る
- autovacuum_analyze_threshold:
    - 50行更新されたら、auto vacuumが走る(analyze)
- autovacuum_vacuum_insert_threshold:
    - 1000行挿入されたら、auto vacuumが走る(analyze)
- autovacuum_vacuum_insert_scale_factor:
    - テーブルの20%行挿入されたら、auto vacuumが走る(analyze)

### 3. auto vacuum ワーカー
実際にvacuumを実行するプロセス
> テーブルに対してバキューム操作を実行する実際のワーカープロセスです。ランチャーによってスケジュールされたとおりにデータベースに接続し、カタログテーブルを読み取り、バキューム操作を実行するためのテーブルを選択します。


## どう解決したのか
私が勘違いしていたこととして、
autovacuum_analyze_thresholdが50ということを確認したので、
「50レコードinsertすれば、auto vacuumが走ってanalzeしてくれる！」と思ってました。

実態は、先ほどのauto vacuumの設定値で記載したとおり、大きく２つの判断基準があります
> - autovacuum_analyze_threshold:50（デフォルト）
    - 50行更新されたら、auto vacuumが走る(analyze)
> - autovacuum_vacuum_insert_threshold:1000（デフォルト）
    - 1000行挿入されたら、auto vacuumが走る(analyze)


この「autovacuum_analyze_threshold」はupdate,deleteのことを指しており
この「autovacuum_vacuum_insert_threshold」はinsertのことを指しているとのこと

**つまり、insertをする場合は50件ではなく、1,000件必要だったということです。**

実際に以下の２パターンでauto_vacuum(analyze)が発生するかを検証してみましたが、
いずれもauto_vacuum(analyze)はちゃんと動いてくれました。
1. 1000件のinsert
2. 50件のdelete

## おわりに
すごく初歩的で誰も躓かないようなところだったかもしれませんが、誰かの役たてば嬉しいです
input type="number" の矢印消す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3300497/ed23e7e2-8638-b5fc-6077-2b988b7a94b4.png)
input type="number"を使用すると、デフォルトで矢印がついていますね。
「スピンボタン」と呼ぶそうですが今回は不要のため消してしまいます！
<br>
CSSに以下を書いてブラウザのデフォルトスタイルを上書きしていきます。
<br>
Chrome、Safariの場合 
```css
input[type="number"]::-webkit-outer-spin-button, 
input[type="number"]::-webkit-inner-spin-button { 
  -webkit-appearance: none; 
  margin: 0; 
} 
```

FireFox， IE
```css
input[type="number"] { 
  -moz-appearance:textfield; 
} 
```

Chrome, Safari, FireFox， IE まとめて書く
```css
.no-spin::-webkit-inner-spin-button,
.no-spin::-webkit-outer-spin-button {
    -webkit-appearance: none !important;
    margin: 0 !important;
    -moz-appearance:textfield !important;
}
```

<br>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3300497/225cbbba-24a7-8a54-7c99-e9b290f3b33f.png)
無事消えました！
【OpenAI ChatGPTクリスマスイベント第１１日目】アプリとの連携です。


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

　今回は、OpenAIのクリスマスイベント。今日は第１１日目。アプリとの連携です。

:::note info
本記事は、ChatGPTについての
記事です。　　　　あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　さっそく、【本題】です。

　OpenAIの
　　クリスマスイベントの第１１日。
　　　まずはごあいさつ。
　　　　[OpenAI公式ページ](https://openai.com/12-days/?day=11)
　　　　　中身は、OpenAIの
　　　　　　イベントページ。

　イベントのようす。
　　[OpenAI公式YouTube動画](https://www.youtube.com/live/g_qxoznfa7E?si=Yp0to5Ag7JmDmoXr)

　　[OpenAI公式ポスト](https://x.com/OpenAI/status/1869837577337049434?t=tc8wr5jjXLHTyECvU58c8A&s=19)
……

　今回は？　
　
　Work with apps
　　A new way to work with ChatGPT

　アプリとの連携。
　　ChatGPTの新しい働き方。

　❗今回は、
　　macOS版だけのものになります。
　　　Windows版は、来年対応予定❗

　ChatGPTデスクトップアプリの
　　Work With機能において、
　　　他アプリへの対応が
　　　　今回、発表されました。

　　同時に高度なボイスモードが
　　　使用可能になります。

　　コードや
　　　ドキュメントを見せながら
　　　　働くことが可能に。

　これにより、ChatGPTは、
　　他のアプリの作業を見たり、
　　　理解したり、自動化したり
　　　　することができます。

　なお、
　　O1とO1プロモードのパワーで
　　　コーディングができるように
　　　　なりました。

　利用できるユーザーは
　　Freeユーザー以外の全員です。

　Freeユーザーにも
　　来年提供予定です。
***
　Work With機能は
　　すでにありました。

　今回は、
　　その拡張ですね。

　今まで公式には、
　　VS Code
　　Xcode
　　テキストエディット
　　Terminal
　　iTerm2
　　　が扱えました。

　今回の発表では、
　　Warp
　　IntelliJ IDEA
　　PyCharm
　　Apple Notes
　　Notion
　　Notes（Macのメモ）
　　Quipのようなメモアプリ
　　　などの操作ができます。

　これにより以下の効率が高まる。
　・ソフトウェア開発
　・文章作成

　参照
　[Kevin Weil ](https://x.com/kevinweil/status/1869811511616778280?t=orS5UXExuzclNb6kU8v4NQ&s=19)

　[ChatGPT研究所さんポスト](https://x.com/ctgptlb/status/1869811107755634795?t=pqXeJfj_VFIbD07VKP3biw&s=19)

　[テツメモさんポスト](https://x.com/tetumemo/status/1869836710449951070?t=Li2zkXAu9otuE9NDgD47gw&s=19)

　[池田 朋弘さんポスト](https://x.com/pop_ikeda/status/1869880485733904435?t=8Zb3PYRs6fGT2AqZhzub1Q&s=19)

　[ITmediaNEWSページ](https://www.itmedia.co.jp/news/spv/2412/20/news110.html)
……
　以下は、日本語字幕&日本語音声付き。
　　[エクセル兄さんポスト](https://x.com/excel_niisan/status/1870019185063100659?t=mcYhsqZBvaZSt2fo129s5g&s=19)

　　再生スピードが速いので
　　　0.75くらいに
　　　　調整した方が良いかと。

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

　今回は、ここまで。
サーバレスのについて考えてみる（定義編）

## はじめに

サーバレスに本格的に取り組む前にサーバレスの定義について、一度自分の中で整理してみたかったので、まとめてみました。

## サーバレスって？

顧客がコードやデータのみを提供し、インフラ管理を必要としないクラウドサービスのことで、仮想化技術の一つ。

「レス」だからサーバがないのか？と初めてサーバレスの言葉を聞いた時は思いましたが、もちろん意識しないだけで、クラウドサービスプロバイダのサーバ上で動いています。

なお、Wikipedia(English)では、サーバレスのことを、`誤称(misnomer)`と書いてました。

https://en.wikipedia.org/wiki/Serverless_computing

課金形態は従量課金(Pay-as-you-go/Usage-based-pricing)の使った分だけ課金といった形態になっています。

ただし、どこまでサーバを意識しなくて良いのかや、サーバを意識はしなくて良いけど、時間制課金だったり最低料金があったりなど、サービス内容は様々です。

サーバーレスは厳密な定義があるというよりもスペクトラム（グラデーション）として捉えるべきだと思います。

### サーバレスのリトマス紙

一方、memontoは以下の基準を満たさないサーバレスのサービスを`faux-serverless(偽りのサーバレス)`と呼んでたりします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894042/3b4df6b6-f8c6-7bed-6e41-f65142f5e891.png)

1. プロビジョニング不要、管理も不要
2. 最低料金なしの使用量ベースの料金体系
3. 単一のAPIコールですぐに利用可能
4. 計画的なダウンタイムなし
5. インスタンスなし

https://www.gomomento.com/jp/blog/fighting-off-fake-serverless-bandits-with-the-true-definition-of-serverless/

## サーバレスの形態

主要形態として、Function as a Service (FaaS)および、Backend as a Service (BaaS)の２つがあると思います。

#### Function as a Service (FaaS)

イベント駆動で必要な時だけ実行される関数単位のサービス。

コードさえあれば、インフラの管理を行うことなく、実行可能となっています。

AWSだと、Lambdaが該当します。

#### Backend as a Service (BaaS)

バックエンドに必要な機能を包括的あるいは個別に提供するサービス。

認証・認可、データベース、キャッシュ、データストア、通知、ワークフロー等があります。

AWSだと、Amplify・Cognito・SNS等が該当します。

## なぜサーバレスなのか？

では、何故サーバレスを選択するのか、理由をいくつか考えてみました。

### コスト効率の向上

処理数・時間に応じた従量課金制のため、リソースを無駄なく利用できます。

またサーバの維持管理コストが不要で、インフラ関連の人件費も削減できます。

私は経営者ではありませんが、固定費として重くのしかかるインフラコストが変動費化できることはかなり重要なことらしいです。

特に新型コロナウイルスの時のような、急に需要が落ちてしまうような時にこの従量課金の仕組みは相性が良いとのこと。

### 開発効率・俊敏性向上

インフラ管理（構築、デプロイやスケーリング）の負担が軽減され、開発者は差別化できる作業に集中できます。

インフラ管理はサービスを継続していく上で重要なことですが、直接は利益を産むわけではありません。

ビジネスとして価値を生む（差別化できるところ）に、エンジニアのリソースを集中することができます。

### 信頼性とスケーラビリティ

これまでは１年に一度だけ負荷のピークが訪れる場合でも、そこを想定したインフラ構築が必要でした。

サーバレスの場合、クラウドサービスプロバイダーが提供する高可用性インフラを活用できます。

## さいごに

サーバレスの定義をまとまるだけだったのですが、結構色々と調べたり、考えたりすることがあって時間がかかりました。

上手くまとめられてないですが、今回はここまでとします。
SQL発行回数を増やすかLINQで絞るか


という話を仕事でしたので、メモ。

## SQL発行回数を増やす
**メリット**
- 特定条件で絞り込んでより少ない件数のデータが取得できる
    - SQLで少ない件数に絞り込めた場合、送られてくるデータ量は少なくて済む

**デメリット**
- DBアクセス回数が増える
    - クエリ発行回数が増えると、DBサーバへの負担が増加する可能性がある

## LINQで絞る
**メリット**
- DB接続回数が少なくて済む
    - 一度に大量のデータを取得することで、データベースへのアクセス回数を減らせる
- 変更点が生じてもSQLの修正はなく、修正範囲がビジネスロジック中心で済む

**デメリット**
- 絞り込み精度が荒いため、一回に取得するデータ量が多い
    - 大量のデータをメモリ上で処理することになり、アプリのパフォーマンスに影響を与える可能性がある
- 複数条件でLINQで絞りこむ処理をビジネスロジックに複数組み込んだ場合、LINQの条件によってはビジネスロジックの可読性が落ちる

## 結論
- システムの性能上SQL発行回数がそもそもそれほどない場合は、SQLでデータ取得時点で絞り込んだほうがビジネスロジックがすっきりする
    - ただしSQL発行回数を増やせばクエリ側が増えてビジネスロジックが簡潔になる一方、SQL発行回数を減らせばクエリは減るがビジネスロジックが増える、というトレードオフの関係性のため、臨機応変に…


## 以下、想像など
- どちらにせよ必要なデータは取ってこなければならないので、何らかの形でどうにかするしかない
    - 考えられるのは以下か
        - ネットワーク帯域の増強
            - コストがかかる
        - アプリケーションサーバの性能増強
            - CPUの増強
            - メモリの増強
            - これもコストがかかる
        - DBサーバの分散
            - DBサーバに一度に接続されるアクセス数を制限・分散する
            - 設計と管理が大変そうだけど
    - パフォーマンスを担保するために、何を取るかという話
- X (Twitter)で、クラウドの特性の違いは各社がサーバ側に重きを置いているかネットワークに重きを置いているか、色の付け方の違いだ、というような話を見た
    - クラウドを比較検討する時の基準として、価格はもとより、このあたりの細かい仕様の違いも検討理由になりそう
        - 特性の違いは微々たるものかもしれないが、特性を理解した上でアプリをどう設計するかというのが腕の見せ所になる？
            - どこまで頑張るかの話だが…

<br>
松尾・岩澤研究室のLLM講座,GCL講座

### こんにちは！
大阪ハイテクノロジー専門学校　人工知能学科3年　川上です。
今日は松尾・岩澤研究室のLLM講座,GCL講座について話したいと思います。

僕が東京大学、松尾・岩澤研究室が開催している口座があると知ったのは3ヶ月前でした。
急いで申し込める口座には全て申し込みましたが、それがLLM講座とGCL講座でした。

学生のうちしか受けられないものがほとんどですので同じ専門学校の2年生，1年生には学生のうちに受けることを特におススメします。

https://weblab.t.u-tokyo.ac.jp/lecture/course-list/

# LLM講座について

https://weblab.t.u-tokyo.ac.jp/lecture/course-list/large-language-model/


人工知能学科の学生なら必須だと思いますが最新のLLMについて知識を基礎から応用までしっかりと学べます。
#### 受けて良かったこと
- LLMの動かし方を実際に手を動かしながら学習をすることで知識から使える技術に変わった。


# GCL講座について

https://gci2.t.u-tokyo.ac.jp/

データサイエンスのスキルを学び、ビジネスへの活かし方を学ぶ講座です。
これも同じく人工知能学科の学生なら必須の講座だと思いますが、データのいじり方、見方からみていき、それを活かして事業を考えるには？どうやってデータを活かす？ということをしっかりと考えられる講座になっています。就職をした後も使えるような実用的な技術を学べるのでぜひ受けてください。
#### 受けて良かったこと
- 実際に自分の学習が足りていなかったデータサイエンスの知識を手を動かしながら学べた。
- 課題でデータからビジネスを考えることでより実践的なスキルを学べる。

# まずは申し込める奴に全部申し込む
受けられる期間が決まっているので、とりあえず申し込めるものは申し込むのがおススメです。
もしもレベルに合っていなかったら辞めればいい。まずは申し込むこと、講座を受けることで、自分がどれくらいのレベルなのかが分かるようになります。
参考までに、AIについて、エンジニア、ビジネスの観点から学習ロードマップを松尾・岩澤研究室が公開してくれていますので共有します。

https://weblab.t.u-tokyo.ac.jp/lecture/learning-roadmap-job/


客観的に自分の次に学習することや、どのように学習を進めていけばいいのか、わかりやすくまとまっています。
僕は専門学校で自分の好きに勉強していると基本をうっかり飛ばしていて、３のことをずっとやっていましたが１，２のデータの分析をするスキルがおろそかで、とても非効率だったことがあります。

まずは基本から学び、着実に力をつけていってください。
＋でアウトプットは大切なので、イベントやＬＴでたくさんアウトプットをして楽しみながら学習に取り組みましょう。
エンジニア視点でのリモートワークについて

# はじめに

はじめまして。Communeでアプリ開発のテックリードをやっている者です。

[Commune Advent Calendar 2024](https://qiita.com/advent-calendar/2024/commune)シリーズ2の自分のパートを書きます。

昨今ではAmazonがリモートワークを廃止すると宣言したり、Lineヤフーさんがフルリモートを止める的な記事が出ていたりしたので、今日はリモートワークのメリデメについて少し自分の考えを書きたいと思います。

# メリデメ

リモートワーク、メリデメあると思います。
一番大きいメリットは通勤しなくていい事ではないでしょうか。
個人的には満員電車がめちゃくちゃ苦手です。
毎日満員電車に乗って通勤する。職場に行くだけで疲れる。地獄です。
これが嫌で、以前は転職するたびに引っ越しをしたり、会社の近くにセカンドハウスを借りたりしていました。

会社のメリットとして、グローバル採用が出来ることなどがあります。
Communeでも海外在住の方が活躍されています。

デメリットとして「アイデア出しは絶対に対面のほうがいい！」みたいな発想は分からなくもないですが、リモートワーク制度を撤廃するほどでもないかなと。

# エンジニア視点で

### メリット
リモートワークでは非同期型コミュニケーションがマストです。
ものづくりに携わっている方でしたら共感して頂けると思いますが、非同期コミュニケーションはすごくありがたいです。
集中して開発ができます。
オフィスにいるとどうしても邪魔が入ります。
「話しかけるなオーラ」を全開にして（←よくない）も邪魔されます。

邪魔をされるとコンテキストスイッチをしなくてはならない。
もとの作業に戻る際、またコンテキストスイッチをする必要がある。
疲れる。頻度が多いとイライラすることもあったり。
そんな状態だとミスを犯す確率も上がります。

### デメリット
デメリットを話しますと、新卒の方とか自分の力だけで業務を遂行するのが難しいジュニアメンバーは同期でコミュニケーションを取れたほうがやりやすいのではないでしょうか。
あと、懇親会など親睦を深める場はやはりオフラインの方が効果的だと思います。あ、これはエンジニアに限ったことではなかったですね。

# おわりに

Communeでは月1で全社出社日というのがあり、エンジニアは基本この日だけ出社すれば良いことになっています。
めっちゃありがたいです。
当面増える気配はなさそうですが、ずっと増えないことを願っています🙏
QA業務の引継ぎで感じた3つの要点

# ◆はじめに
記事を開いていただきありがとうございます！
普段はQA業務を行っており、QA歴は4年目となります。
本記事では、タスク引継ぎの「前任者」と「後任者」どちらも経験した私の視点で
「タスク引継ぎを行う際に意識すること」をまとめようと思い、作成しました。
記事作成がまだ2回目なので、拙い箇所があると思いますがよろしくお願いします。

# ◆経緯
今年度、私は業務幅拡大に伴い、QA業務における引継ぎ作業を多数経験しました。
その際に自身が必要と感じた要素が3つありましたため、実例を添えて記事とさせていただきます。

# ◆必要と感じた3つの要素
## ①期限、範囲の明確化
「いつ」までに「どのレベルまで完了しているか」引継ぎする際に期限やタスクを細分化して段階を設けることが多いと思われます。
この状態で「引継ぎが完了している日時」のみ決めていると、そこで終わってしまい、中途半端な状態で引継ぎが行われる危険性があります。

特に、長期間を要する場合には、完了日だけでなく、「この日」までに「どのレベルまでこなせる様になっているか」をあらかじめ決めておくことで、形式だけの引継ぎだけでなく、後任者が自立してタスクを行える状態になりやすいと考えております。

#### ▼実例
私がタスクを引き継がれる際、前任者と協議しつつ、徐々に移管していく形で行っていました。
恒常的に行っている検証タスクを引き継ぐ際、前任者と範囲のすり合わせが漏れていたものがあり、「引継ぎ済みのタスク範囲」の認識相違が起こっていました。
幸いなことに、検証箇所の重複確認や未検証の項目が出るなどの被害はありませんでした。


## ②タスクを行う理由の共有
引継ぎの際、疎かになる箇所だと考えております。

「なぜこのタスクが存在しているのか」を後任者に引き継ぎ、成り行きでタスクを消化していると、流れ作業になってしまい、ミスを誘発します。

事前に理由を共有することでミスを防ぐ側面もありますが、引継ぎ後に問題が発生した際に大きく状況が変わると考えています。
理由がわかっている場合、対処する箇所に見当がつきやすくなり、事前/事後対処を迅速に行えると考えます。
また、前任者がタスクを見つめ直す機会でもあると考えています。

#### ▼実例
私が後任者に引継ぎを行った際、定常的に実施しているタスクの役割を共有しました。
仕様書をもとにマスターデータと比較する検証ですが、「何を」比較しているのか、「どこ」を見て確認しているのか具体的に共有を行いました。
実施中にNGが出た際にも「なぜ」NGが出ていて、どこが間違っているのかを紐解いて説明も行いました。


## ③イレギュラーの共有
事前にいくつかのイレギュラーや過去事例を共有しておくことによって、引継ぎ後のトラブルを未然に防ぐことができると考えております。

#### ▼実例
例としては、過去の傾向をもとに仕様書とマスターデータで相違している場合に参照や修正対応を行う手順および相違している理由を引継ぎ時に共有しました。

# ◆実施結果
実際に3要素を取り入れて引継ぎを行い、以下のような結果を得ることができました。
### ①期限、範囲の明確化
・認識相違が発生した後日に再度すり合わせを行い、タスクの範囲を明確化することで引継ぎを無事に行えました。
・別タスクの引継ぎ時には「範囲」と「期限」を明確化していたこともあり、実施漏れが起こらずに済みました。

### ②タスクを行う理由の共有
・具体的に説明を行ったことが実を結んだのか、後任者のタスクへの理解が深まって来たため、効率化を提案できるところまで成長が見られ、引き継ぐ際に必要な要素だと痛感しております。



### ③イレギュラーの共有
・結果として、事前に共有を行ったイレギュラーは後任者のみで対応が可能となり、前任者の確認を必須とする期間を短縮することができました。


# ◆さいごに
引継ぎの手法として、私は「デリゲーションポーカー」や「マニュアルの作成」を行って来ましたが、これらに3つの要素を追加して行くことによって未然に防げるトラブルもありました。
手順が複雑なものや、「実際にやってみないとわからない」部分はタスクによって差があると考えていますが、同じような境遇の方に少しでも役に立つ記事となっていれば嬉しい限りです。
楽しくスキルアップ！社内エンジニアが挑戦した競技プログラミング勉強会の裏側

## はじめに  
皆さんは「競技プログラミング」という言葉を聞いたことがありますか？

競技プログラミングとは、限られた時間内にプログラムを使って問題を解く、いわば頭脳を使ったスポーツのようなものです。与えられた課題に対して、効率的なアルゴリズムを考え、プログラムで解答を導き出す力が求められます。  

「なんだか難しそう」と感じるかもしれませんが、実は基礎的な問題から始めれば初心者でも楽しみながらスキルを身につけることができます。プログラミング初心者からベテランまで、自分のペースで挑戦できるのが魅力です。

私たちsustenエンジニアチームでは、数カ月ごとにテーマを変えて新しい知識やスキルを学べるよう継続的に勉強会を開催しています。テーマは各メンバーから興味のあるアイデアを募り、最終的にみんなの投票によって決まります。

これまでには技術書を輪読してみんなで知識を深めたり、ボードゲームでチームの絆を深めたりと、さまざまなテーマに挑戦してきました。

そして今回、多数のメンバーの関心を集めて選ばれたのが「競技プログラミング」。
業務とは少し異なる新しいチャレンジとして、みんなで楽しみながら学べるテーマを取り上げることになりました。

この記事では、私たちが取り組んだ競技プログラミング勉強会の内容や成果についてご紹介します。


## 勉強会開催の背景と目的  
エンジニアとして日々の業務に取り組む中で、私たちが常に直面する課題の一つは「問題解決力の向上」です。
特に複雑な課題を効率的に解決するためには、アルゴリズムやデータ構造の知識が欠かせません。そこで、「競技プログラミング」を通じてスキルアップを目指そうという勉強会を企画しました。  

この勉強会のきっかけとなったのは、CTOのこんな一言でした。  

**「普段面接でアルゴリズムの問題を出しているのに、自分たちがマスターしてなかったらカッコ悪いじゃないですか」**  


この言葉にメンバー一同はハッとさせられ、もっとスキルを磨こうと勉強会開催を決意しました。  

実は、これまでも私たちのチームでは技術書の輪読会をしたり、ボードゲームでチームビルディングをしたり、いろいろなテーマで社内勉強会を開催してきました。
でも、競技プログラミングのようにちょっと「頭をガンガン使う系」のテーマは初めてだったので、正直ドキドキしつつもワクワクしながら準備を進めていきました。



## 勉強会の概要  
勉強会を開催するにあたり、まずはCTOと私の二人で模擬練習を行い、どのように進めるのが効果的か試行錯誤しました。
模擬練習では、問題の選び方や解説のタイミング、どのくらいの時間を設けるべきかなどを検討し、メンバー全員が楽しく参加できる方法を模索しました。

実際の勉強会では、オンライン会議ツールのGoogle Meetを使用し、ブレイクアウトルーム機能を活用しました。
参加者を3人程度の少人数グループに分け、各グループでAtCoder(*)の問題に取り組んでもらいました。問題は比較的簡単なものから難しいものまで3問を用意し、解けたら次の難易度の高い問題に挑戦するスタイルを採用しました。

ブレイクアウトルームでのセッション時間は40～50分程度でしたが、「もう少し時間が欲しい！」と悔しがる声が多数上がるほど、みんな夢中になって取り組んでいました。その後は全員で集合し、各グループがどのように問題を解いたかを共有する「感想戦」を行いました。感想戦では、他のグループの解法を学んだり、新たな発見がある場面も多く見られました。
(* **AtCoder** は有名な競技プログラミングプラットフォームです。AtCoderでは、実力に応じた様々なレベルの問題が揃っているプラットフォームで、初心者からプロまで幅広い層が利用しています)


## 勉強会の進行と内容  
勉強会を何回か開催する中で、「もうちょっと効率よく学べないかな？」という課題が見えてきたので、進行をちょっと変えてみました。これまでは完全にランダムな問題を解いていましたが、毎回テーマを設定して、みんなでそのテーマに沿った問題を解く形式にしてみました。

具体的には、毎回1人が「講師役」を担当し、競技プログラミングでよく出てくるアルゴリズムを簡単に解説。
その後、そのアルゴリズムを活用する問題に挑戦する流れです。

たとえば、こんなアルゴリズムをテーマにしました：  
- **二分探索**（データを効率よく探す方法）  
- **動的計画法（DP）**（複雑な問題を小さく分けて解く手法）  
- **幅優先探索（BFS）**（グラフ構造を探索するアルゴリズム）  

テーマを設定したことで、「ただ問題を解く」から「解法を深く理解する」にシフトでき、参加者みんながよりスムーズに学べるようになりました。



## 勉強会を通じて得られた成果  
今回の勉強会で得られた成果をざっとまとめるとこんな感じです：  

- **アルゴリズムの基礎がしっかり身についた**  
  テーマを絞って解説することで、初めて触れる人でも理解しやすくなりました。

- **メンバー同士のスキル共有が進んだ**  
  講師役やグループでの議論を通じて、初心者から上級者までお互いに刺激を受ける場面がたくさんありました。

- **挑戦する楽しさを実感できた**  
  問題が解けなかった悔しさが次へのモチベーションになり、参加者全員が「もっとやりたい！」という雰囲気に。



## まとめ
競技プログラミング勉強会をやってみて、みんなの成長やチームの一体感を感じる素晴らしい時間になりました。もしこの記事を読んで「やってみたい！」と思ったら、ぜひあなたのチームでも挑戦してみてください。楽しく学べること間違いなしです！
pioが認識されない

## 発端

ESP32モジュールを使って監視システムを構築しようとPlatformIOを使っていたとき
pioコマンドを打った際に以下の現象に直面。
the term `pio` is nore recognized as aname of a cmd let....

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926569/a7603dd8-39b4-4849-8aa8-34d31cf36627.png)

pioが使えないと話にならない為、アンインストールとインストールを繰り返してみるも結果は不調。

そこで、直接パスを叩いてコマンドを確認。
どうやら本体はあるらしい。
"C:\\Users\\<ユーザー名>\\.platformio\\penv\\Scripts"の中にpio.exeがあった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926569/e080022a-0386-5a94-09fc-d732eab43d46.png)


# つまり
環境変数の追加が不完全だった。
ということで、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926569/da22a975-5359-df07-1195-4e9834f7d5a8.png)

無事に動いた(　´∀｀)bｸﾞｯ!
ピボット分析で簡単にプロジェクトの予実を把握！

## はじめに
 [TimeTracker NXでプロジェクト管理を効率化しよう！ by グローバル・アスピレーションズ Advent Calendar 2024](https://qiita.com/advent-calendar/2024/timetrackercloud) に参加させていただきました！

本記事は「グローバル・アスピレーションズ Advent Calendar 2024」の9日目の記事として、TimeTracker NX の分析機能の一つである **「ピボット分析」** を触ってみた感想を書いていこうと思います。

## TimeTracker NX とは
TimeTracker NX は、デンソークリエイトの現場改善活動から生まれた工数管理・プロジェクト管理ツールです。  
このツール一つで、**毎日の工数入力、プロジェクト管理、データの分析**が行えるそうです。

https://www.timetracker.jp/

## ピボット分析機能
工数管理・プロジェクト管理機能に関しては他の方も詳しく紹介してくださっていたので、今回は分析機能の一つであるピボット分析についての話をしようと思います。

TimeTracker NX のピボット分析では、**プロジェクトや組織を横断して工数やコストなどの TimeTracker NX に蓄積したデータを集計**することができます。
また**集計する軸を自由に設定**し、様々な視点からの分析も可能です！
例えば、
- 月別に組織内のメンバーごとの工数やコストの予実を分析する
- メンバーのプロジェクトごとの内訳を掘り下げて分析する
- プロジェクトのアイテム単位で工数やコストを集計する

といった分析ができるそうです。

https://docs.timetracker.jp/help/docs/analysis/pivot-table/intro

ビューは下のような感じで、Excelのような表形式で表示されます。
![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964534/f0f267ce-8a05-d1fe-7810-f8ea820c4651.png)


## 工程・アイテム別の工数予実を集計してみた
様々な視点から分析可能ということなので、今回はおためし用プロジェクトを作成し**工程・アイテム別の工数予実を集計**してみました。

### 準備
事前に作成したおためし用プロジェクトのデータはこんな感じで、工程ごとにフォルダ分けをしてからアイテムを詳細化してみました。
今回は工数予実を集計したいので、各アイテムに対して工数も入力してあります。
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964534/ed9747dc-fc62-5f89-190b-eb3b10214e56.png)

### ピボットビュー作成
ここからビューを作成していきます。
出力テーブルが3種類から選べるようですが、今回は「工数とコスト(アイテム単位)」というテーブルを使ってみます。
各テーブルの説明も書かれているのでわかりやすいです。
![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964534/9ef51fac-bcef-5026-0f59-51ad59be861c.png)

その後、対象データや対象プロジェクトを選択していきます。
流れに沿って進めていけばよいため、簡単にビューが作成できました！

あとは集計したい軸を少し変えて、自分が見たい視点で分析できるようにしていきます。
集計軸も、フィールドというものをドラッグ＆ドロップして付け替えることで簡単に設定できます！
![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964534/12e01f59-7c55-ce28-7cde-31c6afc462fe.png)

実際に作ってみたビューがこちらです。
工程・アイテム別の工数予実もばっちり確認できます！
今回は列の集計軸に「月」を設定しているため、月ごとの工数予実も確認できました。
たった数分で簡単にビューが作れてすごく便利です。
![image10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964534/7b55b465-6bc3-bed7-722d-17a8271bef67.png)


### ビューのデータをExcel形式で出力可能
作成したビューは、ボタン一つでExcel形式での出力も可能です！
![image9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964534/e6cd0e71-6011-a503-5847-ce5a7ec61037.png)
「集計したデータをさらにExcelで触りたい！」「報告資料として使いたいけどフォーマット的にExcelでないと困る！」といったこともありそうなので、痒いところに手が届くよい機能だなと思いました！

## 感想
データ分析用のピボットビューが簡単に作成できて使いやすいなと思いました。
データも手作業で入力するのではなく蓄積されたものが自動で集計されるので、手間なく分析できます。
今回は1つだけビューを作成しましたが、集計軸を変えればかなりいろいろな視点で分析できるので、プロジェクト管理や状況の把握に役立てそうです。

TimeTracker NX は工数管理・プロジェクト管理・データ分析が行えるということですが、3つすべてがこのツール一つで完結するのはなかなかすごいなと思いました。
desmosで遊ぼう③　～色んな物理のモデルを作ろう～

# 3度目の自己紹介

みなさんこんにちは！
Physics Lab. 副統括 兼 ニュートン祭委員長のはいぱぼと申します！[^12/2kiji]

本日はPhysics Lab. のアドベントカレンダーにて毎週土曜日に投稿しているdesmos記事の3日目です！
1,2つ目の記事をまだご覧になっていない方は、ぜひそちらもご覧ください！

https://qiita.com/Haipabo/items/faec4bdcc80d0a72771c

https://qiita.com/Haipabo/items/74534de828ef0bc1ca8e

1日目はdesmosとは何かに始まり、基本的な使い方やそれらを用いたdesmosの利用法の例として「関数を拡大する虫眼鏡」を作りました！
2日目は、もう少し高度な「リスト」や「if文」を用いて、desmosをより詳しく見ていき、フラクタルの一種である「シェルピンスキーのギャスケット」を作成しました。

本日は、さらに高度なコマンドを用いて、物理学の様々なモデルを作成していきます！

と、思ったのですが……

:::note alert
警告
諸事情により、期日までに記事を作成し切ることができ作成し切ることができませんでした。申し訳ありません。[^Nfes]
:::

つきましては、せめてものお詫びに、これまで私が作成したdesmosのグラフを複数掲示させていただきます。記事が仕上がるまで、そちらをご覧いただき少しでもお楽しみいただければと思います。

# 全望グラフ

https://www.desmos.com/calculator/ayr11ujwch

全望グラフという固有名詞は多分なく、私が勝手に名付けました。
こちらのグラフは、逆数やtan、arctanhなどを用いて、$(-\infty ,\infty) \times (-\infty ,\infty)$のグラフを$(-1,1) \times (-1,1)$に落とし込むことで、関数の極限を見やすくすることに成功しました！

上のリンクでは、有名なバーゼル問題$\left(\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}6\right)$が正しいことを確認できます！

収束が遅くて、「本当にこの値に収束するの…？」となるような関数もこれを使えば簡単に確認ができます！

やっていることに反して、式を見てみると案外簡単なことをやっています

# 投擲

https://www.desmos.com/calculator/tlaapqqxmd

ボールを投げる時は斜め45°に投げると1番飛ぶ、というような言説をたまに聞きますが、それは本当なのでしょうか？ということをわかりやすく図示しています。

綺麗に見せるために色々こだわりました。

[^12/2kiji]:[副統括挨拶](https://www.desmos.com/calculator/7rvkcgqt68)もご覧ください！
[^Nfes]:主な理由としては、12/20に開催されたニュートン祭の委員長をしていたことが挙げられます。（ニュートン祭に関しても、12/25に記事が上がるはずです……）
SQL Serverで大量のデータを更新/削除するクエリの例

# 背景

大量のデータの更新や削除をする場合、1つのクエリで処理するとパフォーマンスやロックの問題が発生する可能性があります。
明示的にトランザクションを貼っていなくても、１つ１つのクエリがトランザクションとして実行されるため、トランザクションログが肥大化してしまいます。
```sql
-- 件数が多過ぎる場合、実行完了までトランザクションログが肥大化し続ける
DELETE FROM Logs WHERE LogDate < DATEADD(month, -6, GETDATE());
```

これによってデータベース全体のパフォーマンスが低下したり、ディスク容量が不足したりする可能性があります。
また、実行中は該当の行やページにロックがかかるため、他のクエリがブロックされることがありますし、SQL Serverの場合はロックエスカレーションという機能によりテーブル全体にロックがかかることがあります。
回避するためには、1つ1つのトランザクションで処理する件数が少なくなるようにバッチ処理を行うことが有効です。

# クエリ例

次のように、WHILE文で回し、分割して実行することで1つのトランザクションを短く、ロックの競合を最小限に抑えることができます。
```sql:更新クエリの例
-- トランザクションが開かれていないことのチェック
IF @@TRANCOUNT > 0
BEGIN
	RAISERROR ('Transaction is opend.', 16, 1);
END

DECLARE @BatchSize INT = 1000;


-- @@ROWCOUNTを0より大きい値にしてWHILE文の条件を満たすようにするためのSELECT文
SELECT 1;
-- 何も返したくないならば declare @dummy int = 0; などでも@@ROWCOUNTは1になる

WHILE @@ROWCOUNT > 0
BEGIN
    UPDATE TOP (@BatchSize) Orders
    SET Status = 'Processed'
    WHERE Status = 'Pending';
END
```


```sql:削除クエリの例
IF @@TRANCOUNT > 0
BEGIN
	RAISERROR ('Transaction is opend.', 16, 1);
END

DECLARE @BatchSize INT = 1000;
SELECT 1;

WHILE @@ROWCOUNT > 0
BEGIN
    DELETE TOP (@BatchSize) FROM Logs
    WHERE LogDate < DATEADD(month, -6, GETDATE());
END
```

WHERE句の条件によっては、インデックスの効率的な利用ができない場合があるので、実行計画を確認し、状況によっては適切なインデックスを作成することも重要です。


# WHILE文を回す前に軽く動作確認したい場合

上記クエリを実行すればデータの更新/削除が実行され続けますが、更新/削除されたものはバックアップファイルから復元しない限り戻せません。
WHILE文を回し始める前に本当にクエリがあっているか事前に確認したい場合や、1回分だけ実行して結果を確認したい場合などには、次のように`ROLLBACK` や`COMMIT`で`@@ROWCOUNT` が0になることを利用した方法が可能です。

```sql:一旦 rollback したい場合
IF @@TRANCOUNT > 0
BEGIN
	RAISERROR ('Transaction is opend.', 16, 1);
END
DECLARE @BatchSize INT = 1000;
SELECT 1;

SELECT COUNT(*) FROM Logs WHERE LogDate < DATEADD(month, -6, GETDATE()) -- 削除したいログの数

WHILE @@ROWCOUNT > 0
BEGIN
    BEGIN TRAN
    
    DELETE TOP (@BatchSize) FROM Logs
    WHERE LogDate < DATEADD(month, -6, GETDATE());

    SELECT COUNT(*) FROM Logs WHERE LogDate < DATEADD(month, -6, GETDATE()) -- @BatchSizeの数だけ減っていることが確認できる
    ROLLBACK -- このコマンドが実行されることで@@ROWCOUNT が 0になるためWHILE文から抜ける
END

SELECT COUNT(*) FROM Logs WHERE LogDate < DATEADD(month, -6, GETDATE()) -- ロールバックされることで件数が元に戻る

```


```sql:一回 commit したい場合
IF @@TRANCOUNT > 0
BEGIN
	RAISERROR ('Transaction is opend.', 16, 1);
END
DECLARE @BatchSize INT = 1000;
SELECT 1;

SELECT COUNT(*) FROM Logs WHERE LogDate < DATEADD(month, -6, GETDATE()) -- 削除したいログの数

WHILE @@ROWCOUNT > 0
BEGIN
    BEGIN TRAN
    
    DELETE TOP (@BatchSize) FROM Logs
    WHERE LogDate < DATEADD(month, -6, GETDATE());

    SELECT COUNT(*) FROM Logs WHERE LogDate < DATEADD(month, -6, GETDATE())
    COMMIT -- このコマンドが実行されることで@@ROWCOUNT が 0になるためWHILE文から抜ける
END

SELECT COUNT(*) FROM Logs WHERE LogDate < DATEADD(month, -6, GETDATE()) -- @BatchSizeの数だけ減っていることが確認できる

```
PowerShellでtreeコマンド風に出力する

## 概要
- パワーシェルのコマンドが使いづらいので、コピペできるように置いておく
- ディレクトリを除外できないのはきつい、、

## コマンド

以下のコマンドをコピペしてやれば関数を呼び出して利用可能である
多分ファイル用意してエイリアスで実行も可能なはず
```powershell
function Show-TreeView {
    param (
        [string[]]$Exclude = @('node_modules', '.history', '.old'),
        [string]$Path = ".",
        [int]$CurrentDepth = 0
    )
    
    $esc = [char]27
    $blue = "$esc[34m"
    $reset = "$esc[0m"
    
    $items = Get-ChildItem -Path $Path | Where-Object { 
        $_.Name -notmatch ($Exclude -join '|')
    }
    
    $lastItem = $items | Select-Object -Last 1
    
    foreach ($item in $items) {
        $isLast = $item.FullName -eq $lastItem.FullName
        $prefix = if ($CurrentDepth -gt 0) {
            "    " * ($CurrentDepth - 1) + $(if ($isLast) { "`--" } else { "|--" })
        } else { "" }
        
        $name = if ($item.PSIsContainer) {
            "$blue[+] $($item.Name)$reset"
        } else {
            "[-] $($item.Name)"
        }
        
        Write-Output "$prefix$name"
        
        if ($item.PSIsContainer) {
            Show-TreeView -Path $item.FullName -Exclude $Exclude -CurrentDepth ($CurrentDepth + 1)
        }
    }
}
```

実行
```powershell
Show-TreeView -Path "." -Exclude @("node_modules", ".git", "bin",".history",".old")
```

出力
```
[+] .private
|--[+] aa
    --[-] bb
|--[-] sample.json
[-] package-lock.json
[-] package.json
[-] sample.js
```

## 感想
シンプルだけど実用に耐えるので、いい感じにできた
Confluent環境でのKafka Produce遅延対策：見落としがちな認証設定

## 概要

本記事では、生成系AIが作成した Kafka へのデータ送信（Produce）プログラムを実行した際、必要な設定項目が不足していたために処理時間が極端に長くなってしまう事象と、その対応方法を共有します。  
不足していた設定として `security.protocol` および `sasl.mechanisms` を追記することで、想定通りの高速な処理が可能となりました。

```python
    "security.protocol": "SASL_SSL",
    "sasl.mechanisms": "PLAIN",
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/cb59d7b9-f084-6f59-f5fe-806b8df653d2.png)

本記事は、以下のシリーズの一部です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1ff6386e-0d84-e62b-dd54-8e6164c4ba5b.png)

引用元：[Data in Motion 実現へ：Data Streaming Platform である Confluent の全貌 #Kafka - Qiita](https://qiita.com/manabian/items/f8281514e9afb9a8701c)


## 発生事象

### 事象の背景

生成AIを用いてKafkaにデータを書き込むコードを生成する場合、しばしば OSS の Kafka 向けコードが生成されることがあります。この場合、Confluent 環境に必要な認証情報が設定されていないサンプルコードが出力されてしまいます。以下は不足設定例で、`sasl.username` や `sasl.password` を含む認証情報、そして `security.protocol` / `sasl.mechanisms` が抜け落ちています。

```python
# Kafkaプロデューサーの設定例（不足）
conf = {
    'bootstrap.servers': 'your_broker_address:9092',
    'client.id': 'python-producer'
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0c5dcd8c-f67f-892d-1db8-e2fb2cc79b49.png)


### 発生した問題

認証情報が設定されていない状態で、`sasl.username` と `sasl.password` のみを追加してプログラムを実行したところ、通常であれば 1秒未満で完了する処理が、1分以上、場合によっては5分程度もかかる現象が発生しました。以下の例では 1 分程度となっていますが、さらに時間がかかるケースも確認されています。

```python
    'sasl.username':     sasl_username,
    'sasl.password':     sasl_password,
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1e7cf3a2-50d5-1690-1590-d70f63a848c4.png)


## 対応方法

今回の事象は、Kafka クラスターへの認証設定が不完全であったことが原因と考えられます。認証を正しく行うためには以下の設定が必要でした。`security.protocol` と `sasl.mechanisms` を追加したところ、1 秒未満で処理が完了するようになりました。

```python
    'sasl.username':     sasl_username,
    'sasl.password':     sasl_password,
    'security.protocol': 'SASL_SSL',
    'sasl.mechanisms':   'PLAIN',
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7d821661-c005-6700-7d49-164cde81dbc6.png)

これらの設定値を追加することで、Confluent環境での Kafka へのデータ書き込みが意図したパフォーマンスで実行可能になります。