OmniAICreator/Qiita-1.07M huggingface dataset:
【Fish】viモードで入力モードによってカーソルを変更する方法

`~/.config/fish/config.fish`に以下を追記することで入力モードによってカーソルが変更されるようになります。

```config.fish
set -g fish_cursor_default block

set -g fish_cursor_insert line

set -g fish_cursor_replace_one underscore
set -g fish_cursor_replace underscore

set -g fish_cursor_external line

set -g fish_cursor_visual block

set -g fish_vi_force_cursor true

```

![画面収録 2025-01-07 23.59.03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/422d54c6-7114-352e-9cec-268f7ace607f.gif)

## 参考

https://fishshell.com/docs/current/interactive.html#autosuggestions
docker版Stable Diffusionを入れてみた。

# 概要

docker版Stable DiffusionをDebian12に導入してみた。

# 手順

docker-composeはバージョンが古いのでdockerのcomposeプラグインを利用する

```bash
$ sudo apt update
$ sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-compose-plugin
```

GitHubからリポジトリをクローン

```bash
$ git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git
```

クローンしたフォルダに入る

```bash
$ cd stable-diffusion-webui-docker
```

以下コマンドを実行

```bash
$ docker compose --profile download up --build
```

このままでは実行前のビルド処理でコケたので、以下サイトを参考にDockerfileをいじる

https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/16383

```diff:stable-diffusion-webui-docker/services/AUTOMATIC1111/Dockerfile
WORKDIR /
  RUN --mount=type=cache,target=/root/.cache/pip \
    git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git && \
    cd stable-diffusion-webui && \
-   git reset --hard v1.9.4 && \
+   git reset --hard v1.10.1 && \
    pip install -r requirements_versions.txt

+ RUN pip install -U typing_extensions

  ENV ROOT=/stable-diffusion-webui
```

そして実行する

```bash
$ docker compose --profile auto up --build -d
```

`http://localhost:7860/`でWebUIにアクセスできる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298004/17cff634-f966-97bd-a9d3-d488766d956e.png)
簡易的なAPIリクエストのテスト

# はじめに
サーバ側やアプリ側の実装を行なっていると、連携するAPIのリクエスト確認を行いたくなる場合がある。
　→リクエストがうまくいかない　→ じゃあAPIリクエストの成功例ってなんだっけ？　→ 試しにCurlとかでAPIリクエストしてみるか、流れですね。

 事前にAPIリクエストできることを確認してから、実装に入ることもあるので簡易的にAPIリクエストできる環境を整えることは結構大事です。

 いくつか方法があるので、この辺りをつらつらと記載していきます。

# 方法
## 1. Postman
	•	PostmanはGUIベースのAPIテストツールで、リクエスト作成やレスポンス確認が簡単に行えます。
	•	GET、POSTなど各種リクエストを送信し、レスポンス内容やステータスコードを確認可能。

## 2. VSCodeのREST Client拡張
	•	VSCodeの「REST Client」拡張機能を使うと、`.http`ファイルにAPIリクエストを書き込み、その場で実行・確認できます。
	•	URLやメソッドを記述後、「Send Request」をクリックするだけで結果が表示されます。
	•	GET, POSTなども行けるし、複数APIの連続実行もできる。なんなら変数を使って１つ目のAPIのレスポンスのパラメータを使用して、２つ目のリクエストボディに含めることだってできる☆ これマジで便利

↓この記事がめっちゃ分かりやすい
https://qiita.com/toshi0607/items/c4440d3fbfa72eac840c


## 3. Curlで確認する
	•Macであれば標準でインストールされているはず
    　$ curl --version
    でcurlがインストールされていなければ、brewからcurlをインストールしましょう。
    　$ brew install curl

    curlが使えるようになれば、以下のようにテストできる
    　$ curl https://weather.tsukumijima.net/api/forecast/city/400040

```
レスポンス
{
    "publicTime": "2025-01-07T17:00:00+09:00",
    "publicTimeFormatted": "2025/01/07 17:00:00",
    "publishingOffice": "福岡管区気象台",
    "title": "福岡県 久留米 の天気",
    "link": "https://www.jma.go.jp/bosai/forecast/#area_type=offices&area_code=400000",
    "description": {
  〜〜〜長いので以下省略〜〜〜
```

## 4. Macのショートカット.appを使用
えっ！？ショートカットアプリでAPIリクエストできるの？と思ったけど、調べたら出来るようです。
素直にツールを導入した方が良い気もしますが、セキュリティ的に色々な面倒な状況もあるため、MAC標準で出来る方法として紹介します。

Macのショートカットアプリを起動し、"新規ショートカット"を選択
![スクリーンショット 2025-01-07 23.30.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782130/d2516ef6-3148-29e7-377d-c93c5f8ebfd9.png)

"URLの内容を取得"を選択
![スクリーンショット 2025-01-07 23.24.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782130/9276501c-922c-850f-69de-459fda03f03d.png)

以下はGETの例ですが、POSTも行けちゃう
![スクリーンショット 2025-01-07 23.28.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782130/64a914e1-9baa-f859-0402-a3b5a3d58be2.png)

※レスポンスのJSONが整形されていないのは残念ですが、
　目玉みたいなアイコンをクリックして、"Xcodeで開く"を選択すれば自動的に整形してくれるよ

 
以上
【個人用】AWS Solution Architect Associate対策ノート(ストレージ編)

## 扱う内容

・EBS
・EFS
・FSx
・Storage Gateway

# 【EBS】

## EBSのアタッチルール

・EBSボリュームは、**複数のEC2インスタンスからアタッチすることはできない**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1751890/4a4adee6-a4dd-bbf7-b102-a8e44939c53e.png)

・逆に、EC2インスタンスは、同一AZに存在するEBSボリュームを複数アタッチできる
ただし、他のAZのEBSボリュームにはアタッチできない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1751890/2203c229-b788-ee43-a0d7-66bc7238f7a2.png)


## EBSのボリュームタイプ

### 汎用SSD
シンプルなやつ。開発やテスト環境向け

### プロビジョンドIOPS SSD
高いI/O性能が必要ならこれ
io1で十分だが、もっと高性能なのが必要ならio2を使う

### スループット最適化 HDD
順次アクセスを行うデータベースとか、ビッグデータとかログ処理とかに使う
大容量ストレージ

### Cold HDD
利用頻度の低いデータの保存に適している

## EBSボリュームの暗号化

EBSボリュームは**KMS**で暗号化キーを作成して暗号化する
暗号化されていないEBSボリューム内のデータを暗号化するときは、スナップショットを作成して同じEBSボリュームを作成する際に、暗号化ステータスを有効にする

## EBSボリュームの削除

EBSボリュームは、アタッチされたEC2インスタンスを終了(削除)したときに、同時に削除するかどうかを設定できる
デフォルトでは、ルート扱いのEBSボリュームは削除され、それ以外のEBSボリュームは削除されない
EBSボリュームが残っていると、その分お金がかかる

インスタンス終了時に全部のEBSボリュームを削除したい場合は、**DeleteOnTermination**の値をTrueに設定する。デデンデンデデン

# 【EFS】

## EFSの基礎知識

・NFSをサポートするファイル共有ストレージサービス
・Linuxベースのワークロードに向いている
・排他制御(更新中に他ユーザーから更新されることを防ぐ)が使用されている
・保存したデータ量に伴って、自動的にスケーリングされる
・デフォルトで保管データの暗号化と、自動バックアップを行ってくれる
・マウント時にTLSを使用できるので、安全にデータの転送ができる

## EFSのマウントルール

・EFSは、複数のEC2インスタンスや、違うAZのEC2インスタンスからマウントできる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1751890/582dff5b-84ab-51aa-1842-ca141a43e235.png)

## ファイルシステムへの読み取り・書き込み性能の調整

EFSでは、ファイルシステムに対する読み取り・書き込み性能(パフォーマンス)の設定ができる
パフォーマンスの設定には、以下の2種類がある

### パフォーマンスモード
ファイルシステムの基本的な性能を設定する
ファイルシステム作成時にしか設定できない

**①汎用パフォーマンスモード**
一般的なパフォーマンスモード
レイテンシーが最も低いのはこれ

**②最大I/Oパフォーマンスモード**
大容量データや、数千台のクライアントの処理向けのパフォーマンスモード

### スループットモード
運用中に変更できる

**①バーストスループットモード**
特定のラインを超えて負荷が高くなったら、一時的に性能を上げるよう設定ができる

**②プロビジョニングスループットモード**
ユーザーがあらかじめ設定した性能を満たすように設定ができる

## EFSのストレージクラス
EFSには、**標準ストレージクラス**と**低頻度アクセスストレージクラス**の2種類がある

**EFSライフサイクル管理**を実施することで、アクセス頻度が低いファイルは自動的に低頻度アクセスストレージクラスに移されるので、ファイル保持コストが下がる

# 【FSx】

## FSxの基礎知識

・さまざまな業界標準のファイルシステムをAWSで使えるようにするサービス

## FSxの種類

### FSx for NetApp ONTAP
NetApp ONTAPファイルシステムを提供する
NFS(リモート上のファイルをローカルファイルのように扱える仕組み)や、SMB(ファイルやプリンタの共有をできるようにする仕組み)をサポートしている

### FSx for Lustre
Lustreファイルシステムを提供する
なんかめちゃくちゃパフォーマンスがすごいらしい
低頻度アクセスのデータをS3に配置するオプションがある

### FSx for Windowsファイルサーバー
Windows Server上に構築されたファイルシステムを提供する
ファイルサーバーにはオンプレミスとAWS両方からアクセスできる
SMBを使用する

# 【Storage Gateway】

## Storage Gatewayのゲートウェイタイプ

### キャッシュ型ボリュームゲートウェイ
データをS3に格納しつつ、アクセス頻度が高いデータはローカルにキャッシュすることで高速アクセスできるようにする
対応プロトコルはiSCSi

### 保管型ボリュームゲートウェイ
データをローカルに格納し、非同期でデータ全体をスナップショットとしてS3に格納する

### テープゲートウェイ
物理テープ装置の代わりにデータをS3に格納する

### S3ファイルゲートウェイ
データをS3に格納しつつ、アクセス頻度が高いデータはローカルにキャッシュすることで高速アクセスできるようにする
対応プロトコルはNFSまたはSMB

### FSxファイルゲートウェイ
データをFSxに格納する
どんなWebサービスの開発でも必ず必要になるAWSリソースたち

自分へのメモ用のためにも、**どんなWebサービスの開発でも必ず必要になるAWSリソースたち**を記載しておく。

- **VPC**

バーチャルプライベートクラウド。この空間にEC2やRDSなど各種サービスを構築する。

- **EC2**

仮想サーバー。APPサーバーやAPIサーバーやDBサーバーなど利用方法は多岐。

- **S3**

仮想ストレージ。ログや画像ファイルの保存に限らず、静的サイトの運用も可能。

- **S3 Glacier**

S3で一定期間が過ぎたログなどを保存する、アーカイブストレージのようなもの。

- **Key Management Service(KMS)**

AWSの各種サービス間の通信の暗号化を担う。

- **IAM**

AWSリソースを利用する(オーナー側として)ユーザーやユーザーグループなどの管理。

- **CloudTrail**

どのユーザーが何をしたかに限らず、どのAWSリソースが何をしたかなどをログとして監視・管理。

- **GuardDuty**

利用しているAWSサービスの脅威検出。基本的にオンにするだけで自動で検出してくれるようになるため簡単に構築可能。

- **AWS Config**

AWSリソースの設定をログとして保存。設定が変更されたりして、元に戻したい際このログを見返して戻すことも可能。

- **Billing and Cost Management**

請求額など確認できる。コスト分析サービス Cost Explorer もこれに含まれる。

- **RDS**

仮想データベースサーバー。EC2からデータベースに必要のない機能を極限に取り除いたようなもの。

- **CloudFront**

コンテンツデリバリーネットワーク(CDN)。簡単に言えば、キャッシュサーバーのような役割。

- **Route 53**

ドメインの取得など。DNSサーバーとしての役割も担う。

- **Certificate Manager**

SSL/TLS証明書の発行。Route 53 と併せて利用することが多々。

- **WAF & Shield**

ウェブアプリケーションファイアウォールの役割を担う。不正なアクセスなども検知してくれる。

- **CloudWatch**

ログの監視。ログの保存なども可能だが、割高なので基本的に監視的な役割。

- **Lamda**

AWSの何でも屋さん。特定のAWSサービス同士を連携させる際の仲介役など、利用方法は多岐にわたる。

- **Systems Manager**

中でも主に利用したいのはパッチマネージャー。その他にも、AWSリソースの運用に役立つ機能を提供する。

- ※AWS Auto Scaling

プロジェクトによって利用の可否を決定した方がいいが、利用できるならした方がメリットは大きい。EC2など、仮想サーバーをアクセスの負荷によって自動でスケールアウトしてくれる。

- ※EFS

ファイルシステム。仮想サーバーを2つ以上利用する際に、EFSをマウントすることでサーバー同士をリアルタイムで同期することができる。AWS Auto Scaling と相性がいいイメージ。
大量データのselect-insertでトランザクション分離レベルを設定してみた

## これはなに
- 業務上で得た知識をメモるだけ
- 他人が読む前提で書いていません

## 背景
- 大量レコードを新規テーブルにselect-insertする際、既存処理へ影響を出したくない
    - 新規テーブルへのinsertだが、参照するのは既存テーブルなので、テーブルロックを回避したい
- 影響を本当に出さないなら夜中作業になるが、遅くまで営業さんが操作している
    - ユーザが多くシステム停止判断は厳しい
    - というか早く帰りたいから日中に実施したいよね

## トランザクション分離レベル
- **READ UNCOMMITTED** を選択
    - ただしダーティリード、ファジーリード、ファントムリード、いずれも発生する
    - 事前に確認用のSQLを作成し、insert実施後に漏れが無いか確認を行う必要がある

## 理解できずに調べたこと
- READ UNCOMMITTEDは読み取り専用の操作に対してはロックを取得しない
    - 他トランザクションによる未コミットの操作があっても読み取りがブロックされない
    - つまり、他トランザクションが更新をしていても構わず読み取ることができる
- ロックの種類をちゃんと認識していなかった
    - 共有ロック
        - データを読み取る際に取得されるロックで、他のトランザクションがそのデータに対して書き込みを行うことを防ぐ
    - 排他ロック
        - データを更新または削除する際に取得されるロックで、他のトランザクションがそのデータに対して読み取りや書き込みを行うことを防ぐ
- トランザクション分離レベルの設定はスコープに注意
    - SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
        - 接続しているセッション全体にトランザクション分離レベルが適用される
    - SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
        - 次に実行するトランザクションのみトランザクション分離レベルが適用される
    - ローカル環境で再現する際に再現できずに苦戦したためメモ

## トランザクション分離レベル：設定なし
トランザクションを貼って純粋にselect-insertを流す
実行環境はMySQLなのでデフォルトの分離レベルは REPEATABLE READ
```
begin;

insert into fruits (food_id, apply_at)
select
    id,
    now()
from
    foods
where
    kind = 3
;
```
ロックの状態を確認
```
SHOW ENGINE INNODB STATUS;
-- 339553 row lock(s)
```

別トランザクションで対象のレコードをupdate
```
update foods
   set price = 500
 where id = 123;
```

テーブルロックされているためupdateが終わらないことを確認

## トランザクション分離レベル：設定あり（READ UNCOMMITTED）
トランザクション分離レベルを設定した上でselect-insertを流す
```
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
begin;

insert into fruits (food_id, apply_at)
select
    id,
    now()
from
    foods
where
    kind = 3
;
```
ロックの状態を確認
```
SHOW ENGINE INNODB STATUS;
-- 10199 row lock(s)
```

別トランザクションで対象のレコードをupdate
```
update foods
   set price = 500
 where id = 123;
```
更新できた！

## まとめ
- READ UNCOMMITTED
    - 他のトランザクションがコミットしていない変更を読み取ることができる
    - つまり読み取り専用のクエリに対してロックの競合を減らすことができる
    - SELECTクエリは共有ロックを取得しない
- デフォルトの分離レベル（MySQLの場合は REPEATABLE READ）
    - SELECTクエリは共有ロックを取得する
    - 他のトランザクションが同じ行に対して排他ロックを取得しようとすると競合が発生する
- トランザクション分離レベルがデフォルトのまま
    - SELECTクエリが foods テーブルの行に対して共有ロックを取得
    - UPDATEクエリが foods テーブルの行に対して排他ロック取得を試みるが、1つ目のトランザクションが共有ロックを保持しているため、競合が発生し、ロック待ち状態になる
- トランザクション分離レベルをREAD UNCOMMITTEDにする
    - SELECTクエリが共有ロックを取得せず、他のトランザクションが行っている変更をそのまま読み取る
    - UPDATEクエリが foods テーブルの行に対して排他ロック取得を試みた際、1つ目のトランザクションが共有ロックを取得していないため、競合が発生せず、ロック待ち状態にならない
- 通常はSELECT対象が多い状態で共有ロックを取りに行きテーブルロックが発生するが、READ UNCOMMITTEDは共有ロックを取得しないため、INSERT対象だけロックを取りに行くことでロック件数が大幅に減った、ということ
DuckDB

```
SELECT * FROM 'flights.csv';
```

```
SELECT * FROM 'todos.json';
```

```
COPY (SELECT *
	    FROM read_csv('./output.csv',AUTO_DETECT=TRUE))
  TO './output.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');
```

```python
import duckdb
import mysql.connector

# Step 1: Connect to DuckDB
duckdb_con = duckdb.connect(database=':memory:')  # Use an in-memory database or specify a file

# Step 2: Connect to MySQL
mysql_con = mysql.connector.connect(
    host='',
    user='',
    password='',
    database=''
)
mysql_cursor = mysql_con.cursor()

# Step 3: Read CSV and insert data into MySQL
csv_file_path = './output.csv'

# Using DuckDB to read and insert directly
insert_query = "INSERT INTO _account (address) VALUES (%s)"  # Use %s for MySQL parameterization

# Execute the DuckDB query and fetch all results
rows = duckdb_con.execute(f"SELECT addr FROM read_csv_auto('{csv_file_path}');").fetchall()

# Insert each row into MySQL
for row in rows:
    print(row[0])
    mysql_cursor.execute(insert_query, (row[0],))  # row is a tuple, so we need to specify the first element

# Commit changes and close connections
mysql_con.commit()
mysql_cursor.close()
mysql_con.close()
duckdb_con.close()
```

---

Ref:

https://duckdb.org/docs/data/json/overview

https://duckdb.org/docs/data/csv/overview

https://rmoff.net/2023/03/14/quickly-convert-csv-to-parquet-with-duckdb/
世界一流エンジニアの思考を読んで印象に残った考え方

# はじめに
この記事は、僕が世界一流エンジニアの思考法（著：牛尾 剛さん）を読んで、個人的に印象に残った考え方をまとめたものです。
[世界一流エンジニアの思考法（Amazon）](https://amzn.asia/d/3slp0c5)

本書は、牛尾さんが米Microsoftの一流エンジニアと一緒に働いて彼らの思考法が凝縮された一冊です。
技術的な難しい話も無く、新人から熟練エンジニアまで幅広くおすすめできると思います。



# 対象読者
- この本に興味があるが読んだことない人
- これから読む予定の人・すでに読んだことのある人


# 印象に残った考え方


## 怠惰であれ（be lazy）というマインド
これは**少ない時間で最大限の価値を生み出す**考え方が根本にあります。
ここでは、be lazyを達成するための習慣を一部抜粋します。
> - 望んでいる結果を達成するために、最小限の努力をする
> - 不必要なものや付加価値のない仕事（過剰準備含む）をなくす
> - 優先順をつける

ここだけ見ると、当たり前のように感じます。
しかし、僕が感銘を受けたのは次のマインドです。

### いちばん重要なだけをやる
これは優先順位に関する内容ですが、本書では**数あるタスクから重要なことを1つだけに集中する。それ以外はやらない**という考え方です。

ありがちな**優先順位をつけて、できるだけ全部やろうとはしない**。ことです。

[パレートの法則](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E6%B3%95%E5%89%87) にもあるように、20%の仕事が80%の成果を支えているなら、20%の仕事をしっかりやればOK。
100%やろうとすると、工数・時間ともに足りなくなってしまいます。

僕は **「優先順位は着手する順番であって、基本全部やる」ものだと思い込んでいた**ので、この考え方は特に感銘を受けました。

「どれだけたくさんやるか」の足し算ではなく、**「やることを削って重要なことだけフォーカスする」引き算の考え方**ですね。

少し話がそれますが、**マルチタスクは生産性が最低だからやらない** と本書には書かれています。
これも、引き算の考え方が根幹にあると感じました。

## 失敗を歓迎する文化
日本では失敗にネガティブなイメージがありますが、アメリカではむしろポジティブに捉えているそうです。
これは、**早めに失敗するフィードバックを得る**ことが重要視されているためです。

この考え方のメリットは、**問題に対して柔軟な対応が取れることです**
開発の終盤になってインパクトのある課題が見つかってしまうと、対策にかかる時間や労力も増加してしまいます。
開発初期段階で見つかれば、対処できる選択肢や時間もあるため余裕を持って対応ができます。

特に印象的だったエピソードは、牛尾さんがシステムの不具合を見つけて担当者へ報告すると、「フィードバックをありがとう」と感謝された 話です。

バグに対して、そこまで寛容になれるのはすごいですね...。

### 失敗から学ぶ思考を身につける方法
```mermaid
flowchart TD
    A[フィードバックを歓迎するムードを作る] --> B[検討をやめて早めに検証する]
    B --> C[早めに失敗することを考える]
    C --> A
```

特に難しいと感じたのが、**フィードバックを歓迎するムードを作る**ところです。
他人や自分がミスをしたり失敗すると、つい責めがちになってしまいます。
**批判ではなく感謝の心**を持って、Fail Fast思考を育てていきたいと感じました。


## 「納期は絶対」の神話を捨てる
アメリカでは、オリンピック等の特別なイベントを除いて**納期という概念が存在しません**。
（これもかなり衝撃でした）

これは、**システム開発において不確実性はつきもの**という考え方に由来しているそうです。
システム開発には予測不能がつきものです。
開発初期段階で計画を立てても、途中でスケジュールを変更するなんて珍しいことではありません。

そのため、あえて納期を決めていないそうです。

それでも、ある程度のリリース時期は決まっています。
リリース時期に間に合わなかった場合は、**その機能を削ってリリースする**そうです。

このやり方にも、**焦って検証もできずにリリースするより、自信を持った品質でリリースする**考え方が根幹にあるようです。

個人的にはかなり羨ましいです...。
ちなみに、**納期廃止をチーム単体で実施しても意味はない**。と書かれていました。
会社単位で実施しないと、結局ほかのチームが提示した納期に縛られるためです。

複数会社の絡む下請け構造が主流の日本では、この考え方をはやらせるのはかなり骨が折れそうです...。

# さいごに
**個人的には、読んで良かったと思える一冊です**。
今までの固定観念を覆される感覚がありました。

記事では詳しく紹介できませんでしたが、アメリカでは、**プログラマーがシステムの仕様・設計への意思決定を行う**そうです。
これは、**ものを作っている現場に裁量権を与えることで、変化に柔軟に対応できる**と感じました。

日本では、よくマネージャが一番偉い。と思われがちですが、アメリカでは**プログラマーは医者と同じくらいの地位**があるとも言われているそうです。

詳細は、以下のおすすめ動画をご覧ください。
この動画を見て面白いと思った方は、是非本書を読んでみることをおすすめします。

ここまで読んでいただきありがとうございました！


# おすすめ動画

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3635936/d86e5cb2-300d-904a-9f73-80462a0685cb.png)

[【世界一流エンジニアの自己変革法】日本のIT業界を変革するには／米マイクロソフトの考え方／日本人は型にこだわりすぎる【PIVOT TECH】](https://www.youtube.com/watch?v=D8QHYgBdoZE&t=1383s)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3635936/b704f1b3-41fe-450a-1abe-7d0577df856b.png)

[「一流は納期を守らない」大ヒット本著者が語る、マイクロソフト流「生産性爆上げ、6つの鉄則」（牛尾剛／世界一流エンジニアの思考法／勉強法／Microsoft Azure／サティア・ナデラ）](https://www.youtube.com/watch?v=vNj6wgUjOLA)
ノイマンの順序数

[Haskellでラムダ計算：算術編１](https://qiita.com/Trubetzkoy/items/10a960c806b11702337f)でラムダ計算を使った自然数を表す方法を説明した。
図書館で似たような本を見つけた。それは「数学ガールの秘密ノート／数を作ろう」。これを参考にノイマンの順序数について説明していく。

https://amzn.to/40niiRj

### 第１章
ゼロは集合で以下のように定義する。
0={}
1={0}={{}}
2={0,1}={{},{{}}}
3={0,1,2}={{},{{}},{{},{{}}}}

ある自然数$n$の後続数（後者数）を$n'$と表すと、
0'={0}=1
1'={0,1}=2
2'={0,1,2}=3
3'={0,1,2,3}=4
3'は4になる。

### 後続数と和集合
ノイマンの順序数nに対し、$n$の後続数（後者数）を$n'$で表すと、
$$n'=n\cup\\{n\\}$$

n=3の場合を確認してみる。
3$\cup${3} = {0,1,2}$\cup${3} = {0,1,2,3} = 3’ = 4
gitのローカルリポジトリの内容をリモートリポジトリの内容で強制上書きする

備忘録

gitのローカルリポジトリの内容をリモートリポジトリの内容で強制上書きする方法


1. **リモートリポジトリの最新の内容を取得** リモートリポジトリの最新の内容をフェッチします
    ```
    git fetch origin
    ```

2. **ローカルブランチのリセット** ローカルの作業ブランチをリモートリポジトリの最新の内容で強制的にリセットします。
    ```
    git reset --hard origin/main
    ```

以上で作業は終了。

**経緯メモ**
久々に使用するPCから作業ディレクトリをpullしようとしたらコンフリクトしてますよーと以下のメッセージが。
```
error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
```
ローカルリポジトリの内容は特に必要なかったので、手っ取り早くリモートの内容を反映させる方法をとりました。
"エンジニアとして成長し、夢を叶える"――素直さがもたらすやりがい

![sss.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633992/9eaece40-893a-9ac0-66f0-600d0b743c8e.jpeg)

人生や仕事において、大切な力のひとつが「素直さ」です。けれども、この素直さという言葉、少し抽象的で、実際にはどうすれば身につけられるのか、どんな行動が必要なのか、具体的に分かりづらいこともありますよね。

実は「素直さ」には2つの段階があります。この2つを意識し、行動に移すことで、成長が加速し、やりがいを感じられる毎日を手に入れることができるのです。

エスプリフォートでは、この素直さを大切にしながら、社員一人ひとりの成長を後押しする仕組みを提供しています。その結果、エンジニアとしてのやりがいや達成感を強く感じられる職場を実現していっています。

---

### 第1段階：「心」の素直さ

まず最初の段階は、「心」の素直さです。これは、他者の意見やアドバイスに対して、いったん「受け入れる」ということ。

たとえば、こんな経験はありませんか？

- 上司や先輩からアドバイスをもらったけれど、つい反発したくなる。
- 自分のやり方に固執して、なかなか新しいやり方を試せない。

これらの場面で大事なのは、一度「きちんと聴く」こと。どんなに意見が違っていても、どんなに耳が痛い話でも、まずは心を開いて相手の言葉を受け止める姿勢を持つことが必要です。

心の素直さを育む第一歩は、「自分が素直になれていない瞬間」に気づくこと。そして、それを認め、受け入れることです。

---

### 第2段階：「行動」の素直さ

素直さの第二段階は、「行動」の素直さです。

これは、聞き入れたアドバイスや知識を、実際に行動に移してみること。どんなに良い話を聞いても、どんなに有益な情報を得ても、それを行動に移さなければ、結果にはつながりません。

たとえば、「仕事ができる人になりたい」という目標を掲げる人がいたとします。その人がただ「できるようになりたい」と願うだけでは、何も変わりません。

では、どうすればよいのでしょうか？

- 仕事に必要なスキルを身につけるために自主的に学ぶ。
- 上司や先輩のアドバイスを基に、実際にロールプレイングや挑戦をしてみる。
- 得意な部分を伸ばし、不得意な部分を克服するために計画的に練習する。

これらの行動があってこそ、目標に近づき、実力をつけることができます。

エスプリフォートでは、この「行動の素直さ」を徹底して支援しています。社員一人ひとりが学び、挑戦し、成長できる環境を整えることで、エンジニアとしての自己実現を可能にしています。

---

### 素直さが成長を加速させる

「素直さ」の2つの段階を実践すると、次第に成果が見え始めます。そして、そのプロセス自体が大きなやりがいにつながります。

さらに、周りに自分より優秀な人を置くことも効果的です。優秀な人が近くにいると、つい出てしまう「見栄やプライド」を手放しやすくなり、自分の弱さや課題を素直に受け入れることができます。

エスプリフォートでは、社員が互いに学び合い、高め合える環境を提供しています。チームでの協働や先輩社員からの丁寧なフィードバックを通じて、エンジニアとしての成長をサポートしています。

---

### 意識と行動が未来を創る

目的や目標を達成するために必要なのは、「意識」と「行動」の掛け算です。

- 「一番技術力がある人になりたい」
- 「顧客から何だって仕事を貰える人になりたい」
- 「自分の不得意を克服したい」

など、これらはすべて「思い（自分が思っているだけのこと）」でしかありません。本当に大切なのは、思いを行動に移すこと。

素直さを土台にして、行動を続けることで、成果が生まれ、やりがいを感じられる毎日を手に入れることができるのです。

素直な心と行動を育み、成長とやりがいに満ちた未来を一緒に目指していきましょう。

エスプリフォートでは、そんなあなたの挑戦を全力で応援しています。


https://www.esprit-fort.co.jp/

https://www.esprit-fort.co.jp/recruit/index.html
XAMPP環境でOCI8拡張を使用したOracle接続に失敗する時の対処法

新規参画案件で、XAMPPを用いて開発環境を構築していました。
phpで作られたアプリケーションからOracle DBへの接続でOCI8を利用しているのですが、`Fatal error: Uncaught Error: Call to undefined function oci_connect() `と表示されうまくいきませんでした。
その際に行った操作を残しておきます。

## エラーの理解
まずは、表示されたエラーの理解からです。
`Fatal error: Uncaught Error: Call to undefined function oci_connect() `
これは`oci_connect()`関数が定義されていない。つまり見つからないよ～と教えてくれていますね。

OCI8が見つからなければ当然その中で定義されている関数も使えません。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/36cae023-9f58-2c27-fa76-6361da8ffbc6.png)
XAMPPダッシュボードの右側にある「Shell」をクリックし以下を実行し、有効なモジュールを確認。
```terminal
php -m
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/e4e371d9-ad65-af54-461b-baa539f1345a.png)

`openssl`と`pcre`の間に当然見当たりません。

Apacheをダッシュボードから起動し、`http://localhost/dashboard/phpinfo.php`にアクセスしてみます。
こちらでも当然見つかりません。
では、有効化していきましょう。

## OCI8拡張機能を有効化
XAMPPインストール先配下にある`/php/php.ini`ファイルを覗いてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/e4fa87fd-e3ac-6d15-6a82-b84c74e48401.png)

940行目の`extension=oci8_19`のコメントアウトを解除して、OCI8機能を有効化します。
有効化とあわせて、`ddl`があるか確認しておきましょう。
`./php/ext/php_oci8_19.dll`これがあれば問題なし。


## Oracle Instant Clientをインストール

システムの環境変数の設定を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/4d2427fd-a100-d578-d5e1-99a04e94dedb.png)
`環境変数>システム環境変数>Path`にて`Oracle Instant Client`へのPathが通っていなければ設定する必要があります。

https://www.oracle.com/database/technologies/instant-client/downloads.html

上記サイトより、Basic Packageをダウンロード。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/e400e5db-a087-1009-e113-5bb879e94611.png)

適宜、適当なPathに解凍する。
解凍されたフォルダの中に`"instantclient_23_6"`(適宜バージョンは読み替えてください)があるので、ここにPathを通します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/6f691351-24f5-4c09-2aa2-befd13e9ca84.png)

上記のように追加してあげます。

多くの記事でここまでの手順でApacheを再起動すれば、解決されると書かれていますが、私の環境では解決しませんでした。

## 追加でやったこと
何も難しいことはやっていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/05087dc1-3453-2fff-df98-6b9ce779b802.png)

XAMPPダッシュボードの右下`Quit`からちゃんと閉じて、接続中のブラウザも全て落とします。
再度、XAMPPを起動したところ、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/dc5f11cf-8f72-5d13-ace0-f613a4b50a44.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/32588767-9406-5e69-8c96-a3bbb6568b01.png)

と、望んだとおりに有効化されました。

## おわりに
現場で試さないことには完全解決とは言えませんが、私用PCではこれで解決。
よくわかんねぇ。なにがダメだったんだ。0.5MD返して。
BigQueryのパーティションとクラスタリングの違い

BigQueryのパーティションとクラスタリングはどちらもクエリのパフォーマンスを向上させるための機能ですが、その仕組みは異なります。

本記事にて、パーティションとクラスタリングの違いについてまとめます。

# ソース

* [パーティション分割テーブルの概要](https://cloud.google.com/bigquery/docs/partitioned-tables)
* [クラスタ化テーブルの概要](https://cloud.google.com/bigquery/docs/clustered-tables)


# まとめ

| 機能 | パーティション | クラスタリング |
|---|---|---|
| 仕組み | テーブルを分割 | データを並べ替える |
| 効果 | クエリ対象を絞り込む | 関連データを近くに配置 |
| 適用列 | 1列 | 最大4列 |
| よく使われる列 | 日付、タイムスタンプ |  ユーザーID、商品IDなど |


# パーティション

  * テーブルを特定の列（パーティションキー）の値に基づいて複数のセグメントに分割する。
  * クエリにパーティションキーが含まれる場合、BigQueryは該当するパーティションのデータのみを読み取る。
  * 分割基準は、時間（日、月、年など）、取り込み時間、整数範囲など。
  * メリット
      * クエリのパフォーマンス向上
      * コスト削減（スキャンするデータ量を減らすため）
      * テーブル管理の効率化

# クラスタリング

  * 特定の列（クラスタリングキー）の値に基づいて、テーブル内のデータをソートする。
  * クラスタリングキーの値が近いデータは、物理的に近い場所に格納される。
  * メリット
      * クエリのパフォーマンス向上 (特に、WHERE句やGROUP BY句でクラスタリングキーを使用する場合)
      * コスト削減（スキャンするデータ量を減らすため）


# 例

Webサイトのアクセスログを格納するテーブルを例にします。

  * パーティション: `date` 列をパーティションキーにすることで、特定の日付のデータに効率的にアクセスできる。
      * `WHERE date = '2024-01-01'` のようなクエリは、2024年1月1日のパーティションのみを読み取る。
  * クラスタリング:  `user_id` 列をクラスタリングキーにすることで、特定のユーザーのアクセスログに効率的にアクセスできる。
      * `WHERE user_id = 123` のようなクエリは、ユーザーID 123 のデータが格納されているブロックのみを読み取る。

# どちらを使うべきか

  * クエリで頻繁にフィルタリングする列がある場合は、パーティションを使用することを検討する。
  * クエリで頻繁にグループ化したり、ソートしたりする列がある場合は、クラスタリングを使用することを検討する。
  * 両方のメリットを活かしたい場合は、パーティションとクラスタリングを併用することも可能だ。
イベントハンドラの引数object senderってなんだ？

```ruby:title.rb

private void buttons_Click(object sender, EventArgs e)
{
	if(((Button)sender).Text == correctText)
	{
		timer1.Stop();
	}

```
`(Button)sender`の役割というか意味が分からなかったので、記事にします。
この`sender`はおそらく`object sender`の`sender`を使っている？？

調べたら....
「イベントの発生元のコントロールオブジェクト」が格納されているらしい

`sender`は同じようなボタンが複数あり、一つずつイベントハンドラーを書くのが
面倒な時に役立つ

`sender`を見ればクリックされたオブジェクトが取得できる
例)Button1の実体(情報??)がsenderに入ってくる
初めてのシェル環境整理：MacBookのZsh（.zshrc）設定ファイルの中身から自分の設定を確認してみた

## はじめに

これまで何気なくMacBookのターミナルを使っていましたが、ふと「**シェル環境がどのように設定されているのか**」に興味を持ちました。

:::note warn
**今後、コマンド操作やターミナル操作をもっと効率化したいと考え、まずは自分のシェル環境の設定ファイルを見直し、その内容を紐解いてみようと思います。**
:::

***この記事では、私自身の環境を例にご紹介していますので、興味のある方はぜひ参考にしてみてください。***

## 書こうと思ったきっかけ
普段からMacBookのターミナルを使っていますが、もっと操作を効率化できないかと感じたのがきっかけです。

:::note info
**よく使うコマンドはエイリアスとして登録していましたが、他にも設定できる箇所があるのではないかと思い、自分の環境を詳しく確認してみようと考えました。**
:::

これまで、シェルの設定を大まかには理解していたものの、細かい部分までは把握していなかったため、今回改めて整理してみることにしました。

ちなみに、前回の記事ではターミナルやシェルについての基本知識を体系的にまとめ、簡単な技術検証も行っています。

***興味のある方は、ぜひこちらも参考にしてみてください。***

https://qiita.com/free-honda/items/cfc208c8ca93d36b29a4

## まず、エンジニアにとって『時間』は命
エンジニアにとって、時間は最も重要なリソースです。多忙なスケジュールの中で、いかに効率よく作業を進めるかが求められます。

***パソコンの操作感やコマンド入力を素早く行えることは、すべての作業の基盤となるスキルだと考えています。***

:::note warn
以下の記事では、時間効率を向上させるためのさまざまな方法を紹介しています。***興味のある方は、ぜひ参考にしてみてください！***
:::

https://qiita.com/free-honda/items/e58b6750dba27107889f

https://qiita.com/free-honda/items/7419e88404abafdcd624

https://qiita.com/free-honda/items/269fa5e3c5f9db6898e2

https://qiita.com/free-honda/items/ae82ecf888352b839c5b

## 実際にZsh（.zshrc）設定ファイルを確認してみた

### 1. 基本設定
**Oh My Zshのインストールパス:**

```bash
export ZSH="$HOME/.oh-my-zsh"
```

Oh My Zshのインストールディレクトリを設定しています。

```bash
ZSH_THEME="robbyrussell"
```

デフォルトの `robbyrussell` テーマが設定しており、テーマを変更することで、プロンプトのデザインをカスタマイズ可能です。

***私の環境では、上記のフレームワーク（Oh My Zsh）を利用しています。***

:::note info
**興味のある方は、過去の記事も参考にしてみてください。**
:::

https://qiita.com/free-honda/items/5fb52879c019750a4e75

### 2. プラグイン
**有効化されているプラグイン:**

```bash
plugins=(git)
```

Gitプラグインが有効化しており、このプラグインにより、以下のようなGit操作がより便利になります。

:::note warn
- **現在作業中のブランチ情報の確認。**
- **コミットの変更状況の把握。**
- **Gitコマンドの補完機能やエイリアスの利用。**
:::

***Gitの作業を効率化するため、私の環境ではこのプラグインを有効化しています。***

### 3. ソーススクリプト
**Oh My Zshのスクリプト読み込み**

```bash
source $ZSH/oh-my-zsh.sh
```

Oh My Zshのメインスクリプトを読み込む設定です。***このスクリプトにより、基本機能やプラグインが有効になります。***

### 4. ユーザー固有の設定
**Node Version Manager (NVM):**

```bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
```

Node.jsのバージョンを管理するNVMを設定し、必要なスクリプトを読み込んでいます。

**Visual Studio Codeのパス:**

```bash
export PATH="/Applications/Visual Studio Code.app/Contents/Resources/app/bin:$PATH"
```

コマンドラインから `code` コマンドを使用してVisual Studio Codeを起動できるようにする設定です。

**BIND（DNSサーバーソフト）のパス:**

```bash
export PATH="/usr/local/opt/bind/sbin:$PATH"
```

bind関連のツールを使用できるように、パスを追加しています。

:::note warn
***私の環境では、BINDを活用して、MacBook自体をDNSサーバーとして機能させるように設定しています。***
:::


https://qiita.com/free-honda/items/3059aa2627f4aa92bfda

### 5. エイリアス
**ll コマンド**

```bash
alias ll='ls -l'
```

ll コマンドを ls -l として動作させるエイリアスです。

***こちらの設定は、前回の記事で詳しく解説していますので、興味のある方は参考にしてみてください。***

https://qiita.com/free-honda/items/cfc208c8ca93d36b29a4

## まとめ

最後までお読みいただきありがとうございました。

:::note info
**普段からMacBookを使っていますが、これまであまり触れてこなかった設定部分を整理する中で、新たな発見があり、非常に面白く感じました。**
:::

***今後も、パソコンの操作スピードをさらに向上させ、質の高いアウトプットを継続していくために、引き続き調べていきたいと思います。***

## 関連記事

https://note.com/standenglish/n/ne9825624fe93

https://qiita.com/siakio/items/f9ab8a02d7b7fa6963ba

https://zenn.dev/shimo_s3/articles/4903522b01f40c
パッケージ名の変更方法　AndroidStudio

## 初めに　
個人開発をしているときに適当にパッケージ名を設定すると PlayConsoleにアップする際に困ることがあったためapplicationIdを変更する時に、同時にnameSpaceも変更したかったので。
※ドキュメントではnameSpaceとapplicationIdは同じ値が推奨されている

:::note info
Google PlayはすべてのアプリケーションをapplicationIdに基づいて識別します。
一部の名前は予めAndroidのデフォルトアプリケーション用に予約されており使用できません。
:::

## 手順

__例__：com.__example__.Test
今回は __example__ 部分を変更します。
※画像では日本語プラグインを利用しています。


1.build.gradle（app）の以下を変更してください
    ```
    namespace = "com.example.test"
    ```

    ```
    applicationId = "com.example.test"
    ```
    
2.プロジェクトビューに変更します
![スクリーンショット 2025-01-06 22.36.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951769/5c9cd45e-84d7-3dbc-8db9-833e1fe590d2.png)

3.Viewモード選択横の縦に3つ・が並んだボタンをクリック
![スクリーンショット 2025-01-07 18.31.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951769/c19aaf80-c092-925e-a572-086b93deb544.png)
<br>
4.「ツリーの外観」を選択し表示付されるメニュー内の、「除外ファイルの表示」を選択しチェックを外します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951769/d576bb2b-c992-eaa1-edbf-0618eb85bb07.png)


5.exampleディレクトリを探し、右クリック「リファクタリング」→「名前の変更」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951769/07b3438a-c52e-3798-15a5-c9671a307213.png)


6.必要に応じて選択してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951769/9f7ce403-fa18-813d-c0af-9bc63ba2d480.png)


7.変更後を確認して終了
同期処理と非同期処理について

# はじめに
非同期処理について理解しているつもりでしたが、最近の学習や実装を通じて理解がさらに深まりました。その過程を整理するために記事にしました。

:::note warn
***この記事は<font color="Red">個人的なアウトプット</font>を目的として作成したものです。そのため、誤った情報や不足している内容が含まれている可能性があります。もし間違いや気になる点がございましたら、ぜひご指摘いただけますと幸いです***。
:::

# 同期処理と非同期処理
## 同期処理
同期処理とは、複数の処理を順番に実行し、ひとつの処理が完了してから次の処理を始める方式です。このため、前の処理が終わらなければ後の処理は待機します。

***例: 電話のやり取り***
電話は同期処理の良い例です。自分が電話をかけ、相手が受けることで通信が成立します。しかし、相手が電話を取らなければ通話は成立しません。このように、ひとつの処理（電話を受ける）が完了しない限り、次のステップに進むことができません。

***<font color="red">メリット</font>***
実行順序が明確で直感的に理解しやすい。
シンプルな処理では実装が簡単。

***<font color="#1e90ff">デメリット</font>***
処理待ちが発生するとパフォーマンスが低下する。
ユーザー体験（UX）が悪化する場合がある。

## 非同期処理
非同期処理では、ある処理が完了するのを待たずに次の処理を実行できます。処理が完了した際にはコールバックやプロミスを使用して結果を受け取ります。

***例: メールの送信***
メールの送信は非同期処理の良い例です。送信者がメールを送ると、その内容はサーバーに送信され、相手がそのメールを読むかどうかに関わらず、送信者は他の作業を進めることができます。

***<font color="red">メリット</font>***
同時に複数の処理を進行させることで効率的に動作。
処理待ちが発生しても他のタスクを続行できる。

***<font color="#1e90ff">デメリット</font>***
実装が複雑になりがち。
処理順序の把握が難しい場合がある（特にネストが深い場合）。

# 終わりに
非同期処理について、Reactの学習を進める中でようやく理解が深まってきたと感じています。まだまだ課題も多いですが、引き続き実践を重ねて、さらに応用力を高めていきたいと思います。

# 参考

https://www.rworks.jp/system/system-column/sys-entry/21730/
基本情報技術者試験に合格した話

# 初めに
　情報系専門学校に通っているイレイと申します。今回は基本情報技術者試験に合格した時にしたことを簡単にまとめました。

# 試験対策
 以下の勉強をして合格点数はA、B両方とも640点でした。
 
 ・計算系は捨てた
 　（計算系というより、数字が出てくる問題をほとんど捨てました）
  
 ・過去問道場をひたすらやる
 　（おすすめでひたすらやっていました）
  
https://www.fe-siken.com/fekakomon.php
  
 ・UdemyでA問題の語句を勉強
 
https://www.udemy.com/course/kihon_joho/?srsltid=AfmBOoq5IQAFPg_IM4kDW7Hv5LOC9c44Y1CIMeRdVNNi1XwseG92FAfN
 
 ・youtubeでB問題の解説をみた

 https://youtu.be/oDtA78nwQMM?si=NwTl1yPetnxVgVal

 以上のことをやって１ヶ月程勉強して合格しました。今２年生なのですが、１年生の頃にサーティファイの情報処理検定２級を取得していたのと、セキュマネも取得していたのでそのおかげもあって勉強時間は約20時間もないくらいの短い期間で合格することができました。

# A問題について

私は数字がでてくる問題をほとんど諦めたのですべて暗記でした。それも深く覚えるのではなくなんとなくで覚えていました。ITパスポート同様に広く浅い知識を求められる試験なので深く知る必要はありません。
勉強をしていない内容がでてきても、4択を当てればいいだけです。

# B問題について

B問題は数をこなすよりも**どれだけ理解できているか**がポイントになります。youtubeなどで解説動画を理解できるまで見れば大丈夫です。セキュリティの問題はとても簡単なのでできるようにしましょう。Ａ問題の知識だけで十分な内容ですが不安な方は疑似言語同様に解説を理解できるまで見ましょう。
試験本番では「無理と思ったらあきらめる。できると思った問題はすべてトレースして確実にする。」これだけで合格できます。
# 終わり
初受験で合格しましたが、勉強をしている時も感じたのですがITパスポートと比べてもそこまで難しくないのでITパスポートを取得した方や、時間が余っている学生の方は取得を目指した方がいいと思います。ただ、応用情報などさらに高レベルの資格を受けるには計算系は避けては通れないかもしれないので、問題すら見ないというのはやめた方がいいと思います。
私の次の試験は、OSS-DB silver、CCNA、java silverの試験を受けるつもりなのでさらに勉強を頑張っていこうと思います。
ITエンジニア書籍紹介『React実践の教科書』

# 概要
この記事ではエンジニアの私が読んだ本の感想を書きます。この本を買うか迷っている方の参考になれば幸いです。
今回読んだ本はこちらです。

[じゃけぇ『モダンJavaScriptの基本から始めるReact実践の教科書』](https://amzn.asia/d/jg3YpFs)

# 筆者の知識についての補足
ほかの方の参考に、自分の知識レベルについて補足します。私は新卒4年目のシステムエンジニアです。主にバックエンドやインフラを担当することが多く、フロントエンドは入社時の研修でHTML、CSS、JavaScriptの基礎をやった程度でした。業務でフロントエンドを担当することになり、Reactの勉強のためにこの本を読みました。

この本を読む前にReactのチュートリアルを動画コンテンツで勉強し、ある程度Reactに触れたことのある状態で読み始めました。

# 内容
Reactの基礎的な紹介と、その前提となるJavaScriptが主な内容になります。JavaScript、Reactともに基礎的な内容が中心のため、事前にReactのチュートリアルを学んだ状態では初めて知る内容は少なかったです。

ただ、Reactをやったことのない人にとってはJavaScriptの最低限必要な知識が簡潔に書かれているので理解しやすいと思います。Reactを勉強するにあたってはJavaScriptの知識が必要になりますが、JavaScriptを一から勉強するとそれだけでコストがかかります。この本ではReactを使うにあたって必要な知識に絞られているためボリュームが抑えられており、理解しやすいと感じました。

Reactの説明についても、仕組みが簡潔に書かれているのでわかりやすいと感じました。全体を通して技術書としては文体が柔らかくて読みやすい部類に入ると思います。また、登場人物の会話が章の冒頭に入るため、単に堅い文章だけだと理解が大変で読みづらいと感じる人には読みやすいのではないかと思います。初めて知る内容は少ないですが、レンダリングのタイミングについてなど、理解しづらい重要なトピックが多く入っているため、初心者の復習にも良いと感じました。

サンプルコードも多く掲載されているため、自分で実装しながら勉強したいという方にもおすすめです。ただ、自分は読み物として読みましたがそれでも解説が分かりやすく、満足度はそれなりに高かったです。

# まとめ
冒頭にも書いたように、細かい知識があるわけではないため中級者～上級者向けの本ではありません。ただ、初心者、特にReactにほとんど触れたことがない、JavaScriptもわからないという人が一から勉強するには理解しやすく良い本だと思います。また、堅い文章だと読みたくなくなるという方にとっても読みやすい本だと思います。Reactをやったことはあっても、まだ定着していないという方が基礎的な知識を復習するにも有益だと思います。
本当にエージェントAIなのか、それとも高度に自動化されたワークフローシステムなのか？

以下では、いわゆる「エージェントAI」の成功事例とされるものが本当にエージェントAIなのか、それとも高度に自動化されたワークフローシステムなのかについて整理しながら解説いたします。

---

## ワークフロー自動化システム vs エージェントAI

まず、しばしば混同されがちな「ワークフロー自動化システム」と「エージェントAI」には、次のような明確な違いがあります。

### 1. ワークフロー自動化システム

- **主な特徴**  
  - 多くの場合、ルールベースで動作します。具体的には、明確な条件分岐や操作手順があらかじめ定義されており、それに沿って動作する仕組みです。  
  - 特定のタスクを効率的に実行するためのツールとして機能し、人間の介入を減らすことで反復的な作業負担を削減します。  
  - 動作可能な範囲はあらかじめ決められており、柔軟に判断して行動を変えることはほとんどありません。

- **具体例**  
  - IT運用の自動化：チケット発行や進捗管理など、明確な手順をシステム化して自動で処理するケース。  
  - 生産管理システム：データ収集やレポート生成を決められたロジックに従って自動化するケース。  
  - チャットボット：ユーザーの定型的な問い合わせに対応し、ある一定の条件下でのみ動作するもの。

- **判断基準**  
  - ワークフローに必要なタスクが事前に明確に定義されており、条件とアクションが固定されている場合、それは**エージェントAIではなく自動化システム**とみなすのが適切です。

### 2. エージェントAI

- **主な特徴**  
  - **自律的な意思決定**を行う点が最大の特徴です。  
  - 未知の状況に対しても、機械学習や推論（たとえば大規模言語モデルや強化学習）をもとに柔軟に対応できます。  
  - 外部ツールやAPIに接続して情報を取得・操作しながら、タスクを動的に処理することが可能です。  
  - 単純な指示から複雑なタスクまで実行でき、過去の学習データや経験をもとに行動を変化させる高度な仕組みを持ちます。

- **具体例**  
  - **会議スケジュールの調整**：メールやカレンダーの状況を把握し、最適な日時を自律的に提案・決定するエージェント。  
  - **Eコマースサイトでの購買提案**：顧客の過去の行動や嗜好を学習し、リアルタイムにカスタマイズした商品をおすすめする。  
  - **財務データの分析と投資戦略の立案**：取得したデータや経済指標をもとに新しい戦略を提案し、リスク評価まで行う。

- **判断基準**  
  - 動的な状況や新たな情報に対応し、あらかじめ決められていないアクションを**自律的に**選択・実行できる場合、それは**エージェントAI**の範疇といえます。

---

## 現在の「成功事例」の実態

次に、よく「エージェントAIの成功事例」として紹介されるものが、実際にはどのような仕組みなのかを見てみましょう。多くの場合、以下のようなケースに当てはまっていると考えられます。

1. **ルールベースのワークフローの自動化**  
   - 実際のところは定義された条件分岐や固定的なデータ操作の範囲で自動化されているものであり、未知の状況に対する柔軟な対応は想定されていない場合が多いです。

2. **部分的なAIの導入**  
   - たとえばチャットボットが顧客の質問に回答する際、あらかじめ用意されたFAQやシナリオに沿った対応をしており、複雑な問い合わせになると人間のオペレーターへエスカレーションされます。  
   - こうした場合はAIが情報提供や簡単な対話の役割を担うだけで、実際には高い自律性は備わっていないことがあります。

3. **LLMの能力を補助的に利用**  
   - 特定の業務において、LLMが文章生成やデータの解釈をサポートするケースもあります。  
   - ただし、最終的な作業の実行部分はルールベースのシステムや人間が行っていることがほとんどで、「エージェントAI」というにはまだ不十分です。

---

## どちらが「本当にエージェントAI」なのか？

こうした背景を踏まえると、「ワークフローシステム」「部分的自動化」にとどまる例と、「未知の状況にも対応できるエージェントAI」の間には大きな隔たりがあります。エージェントAIの核心にあるのは、**未知の状況にも対応可能な自律性と柔軟性**です。

ところが、現時点で広く「成功事例」として語られるものの多くは、あらかじめ作り込まれたルールやシナリオに基づいて動作するタスク自動化システムである可能性が高いのです。

---

## 結論

現状、多くの「エージェントAI」の事例は、**高度なワークフロー自動化**のケースが少なくありません。真のエージェントAIを実現するためには、以下の要素が必須となります。

1. **未知のタスクに対応可能な自律性の実現**  
   - 新しい状況や突然の変更に対して、事前に想定されていない動作を柔軟に組み合わせて行える能力。  

2. **柔軟な推論能力と外部システム連携の融合**  
   - 大規模言語モデルや強化学習などを駆使しながら、必要に応じてさまざまなAPIやツールと連携し、タスクを遂行する仕組み。  

3. **安全で制御可能な仕組みの確立**  
   - ハルシネーション（誤情報）への対策や、誤作動を検知しリスクを最小化するシステム設計。  
   - AIに一定の自律性を持たせる一方で、人間が常に監督・制御できる「ガードレール」を導入する。

こうした条件をすべて満たす、完全な意味でのエージェントAIはまだ試験段階にあると言えます。成功事例として紹介されているシステムは、限定的なAI活用やワークフロー自動化の色合いが強いと感じます。今後、研究開発が進むにつれて、本来の意味でのエージェントAIがどこまで実用の域に達し、真に未知の状況にも柔軟に対応できるシステムとして社会実装されるかに注目が集まっています。
Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_SHARING_VIOLATION発生時の対処法

ファイルを整理しているときにext4.vhdxを見つけて、マウントしてみようと思っていろいろいじってたらWSL2が起動できなってしまいました。
その後、日本語での解説が見つからなかったので、備忘録も兼ねてここに書いておきます。

# 直し方
環境：Windows 11 Home (23H2, Insider Preview Beta 22635.4660)

まずエラーが発生した時、ChatGPTに修正方法を聞いたのですが、どれもうまく行かなかったのです。その原因は、Windows 11 ProでなくHomeだったためにHyper-Vがなく、Hyper-V前提のコマンドを提示してきたからでした。
結果的には、
```powershell
Dismount-DiskImage ./ext4.vhdx
```
で解決できました。
専門ではない領域を楽しく勉強する方法

## はじめに
資格試験の勉強をしていると、自分の専門外の領域を勉強せざるを得ないことがあります。
この記事によって、**専門外の領域をより楽しく勉強できるようにする**のがねらいです。

AWS認定資格を例に説明しますが、資格勉強に限らず、勉強のモチベーションで悩んでいる人の参考になれば幸いです。

## 先に結論
- **短期的なモチベーションと長期的なモチベーションに分ける**
- **試して、自分は何を楽しめるのか、メタ認知を続ける**

## 背景
普段、私はデータサイエンティストとして働いています。そのためインフラは専門外になります。例えば、ネットワーク領域は普段の業務からさらに遠くなります。

資格試験では、専門外の領域を学ぶ必要が生じる場合があります。例えば、データサイエンティストの私からすると、AWS認定資格のネットワーク領域は専門外です。しかしAWS認定資格を取ろうと思うと、勉強せざるを得ません。

そして専門分野外の領域はモチベーションが低くなりがちです。しかし、どうせ勉強するならモチベーション高く勉強したい上に、学んだことを活かしたいです。

ここでの「楽しく」とは、「モチベーションに依存することなく続けられる状態」を意味します。

本記事では、専門外の領域を楽しく勉強する方法を紹介します。

## やりたいことを100個出してみる
結論から言えば、短期的なモチベーションと長期的なモチベーションを分けるのが有効と考えます。

具体的には、**やりたいことを100個**出してみます。私の場合だと、やりたいこと100個の中に「個人開発」「フルスタックエンジニアになる」「IPA高度資格全冠」などがあります。

普段の業務はネットワークと関連が薄いですが、将来的にやりたいことにはつながります。
やりたいことを100個出してみると、流石に専門外とはいえ繋がるものが見つかります。資格試験の勉強でモチベーションが上がらないのであれば、資格試験と関係ない領域で自分のやりたいことを活用します。

自分のやりたいことなので内発的な動機になりやすく、専門外で楽しくなかった試験勉強が、モチベーションに依存しない楽しい勉強へと変化します。

## 先に言語化してわかる・やってみてわかるモチベーション
モチベーションには、先に言語化してわかるものとやってみてわかるものがあります。

先に述べた「やりたいことを100個出してみる」は前者です。
やってみて分かるモチベーションも有効に活用していきます。

## 試して、自分は何を楽しめるのか、メタ認知を続ける

勉強内容は楽しめないのに、勉強プロセスを楽しめることがあります。

私の場合、LT会での登壇やQiitaでのアウトプットはどんな内容でも楽しむことができます。
他には、コミュニティで勉強するのが楽しい人やひたすら演習を繰り返すのが楽しい人もいるかと思います。

よって、いろんなプロセスを試しながら、自分は何が楽しいのかを探してみること、メタ認知することが有効です。

## 試せる環境を用意しておく
やってみてわかるモチベーションに気づくために、また楽しめるプロセスに気づくために、いろんな勉強方法を試せるような環境にしておくことが重要です。

**①解説は分かる用語**
例えば、AWSの勉強をするとき、初学者のうちは

**「わからない用語」を「わからない用語」で説明される**

のような状態になりがちです。

「わからない用語」を「分かる用語」で解説される、自分のレベルに合った場所を模索します。
その適切な場所で、勉強方法を試しやすくなり、楽しさに気づきやすくなります。

**②基礎を早めにやっておく**
特定の領域でも良いので、早めに基礎を完成させると、勉強方法の試行回数を増やすことができます。

AWS認定資格の場合、AWSからではなくコンピュータサイエンスの基礎から勉強した方がいい場合もあります。学びの対象によって、何が基礎なのか？をきちんと考えることが重要です。

**③コミュニティで他の人が試している方法を使う**
勉強コミュニティに入ってみると、他の方の勉強方法が分かります。
自分が試すだけでなく、周りの人の勉強方法を観察することで、試行回数を増やすことができます。

様々な勉強方法を試すと、モチベーションや楽しめるプロセスに気づき、最終的にはモチベーションに依存せず楽しく勉強できるようになっていきます。

## おわりに
この記事では、専門外の領域を楽しく勉強する方法を紹介しました。

短期的なモチベーションだけでなく、長期的なモチベーションを活用することで楽しみやすくなります。

勉強方法を試すことで自分にとって楽しい勉強方法が見つかるかもしれません。
本記事が参考になれば幸いです。

## 参考
[その悩み、佐久間さんに聞いてみよう](https://amzn.asia/d/37GNEHG)
PlantUMLで向きを調整できるなんて知らなかった

論文を書いているとき、PlantUMLでシステムの構成図を書いているときに、描画する向きに苦戦したのでメモしておく。
関係の順番や、クラスの順番でも変えられるが、確実に指定できる方法が以下。
~~~
-up-
-down-
-left-
-right-
~~~
など、関連線の間で簡単に指定できることを知った。
やはり、ドキュメントを読むのが一番。
Math.max()を活用してみる


## 今回の問題
https://paiza.jp/works/mondai/b_rank_new_level_up_problems/b_rank_new_level_up_problems__posting_fee

条件判定に関する問題。
入力された値(縦・横・高さ、l1~l5の定数)に対し、以下の条件判定を行う。

**問題文から一部引用**
高さが l_1 cm 以下の場合
縦と横の長い方の長さが l_2 以下の場合・・・m_1(円)　**//ココ**
縦と横の長さの和が l_3 以下の場合・・・m_2(円)
それ以外の場合・・・m_3(円)

## 当初のコード
**縦と横の長い方の長さ**を求める際、if文を使って以下のように書いていました。
```java
if (height <= l1){
            if(length <= l2
                || width <= l2){//ココ
                    System.out.println(m1);
                }else if(length + width <= l3){
                    System.out.println(m2);
                }else{
                    System.out.println(m3);
                }
        }
```
**縦横両方を比較する**という少し冗長な方法を使っていたため、もっとシンプルにできるかもしれないと感じました。

## Math.max()とは
Math.max() は、**与えられた数値の中から最大のものを返す**メソッドです。この関数を使うことで、**条件分岐を簡潔に記述する**ことができます。
```java
Math.max(a,b)//a,bのうち大きいほうを返却
```

## 修正後のコード
```java
if (height <= l1){
            if(Math.max(length,width) <= l2){//ココ
                    System.out.println(m1);
                }else if(length + width <= l3){
                    System.out.println(m2);
                }else{
                    System.out.println(m3);
                }
        }
```
メソッドに縦横の数値を渡し、返却値(引数のうち大きいほう)とl2を比較するコードです。
**比較回数を減らす**ことができ、よりシンプルになりました。

## 3つの引数を比較したい場合
Math.max()は、引数2つに対応したメソッドです。
3つの引数を比較したい場合は、単純にメソッドを二回使えばよいです。
```java
if (height <= l1){
            //縦、横、高さの最大値を比較したい場合
            if(Math.max(Math.max(length,width),height) <= l2){//ココ
                    System.out.println(m1);
                }else if(length + width <= l3){
                    System.out.println(m2);
                }else{
                    System.out.println(m3);
                }
        }
```

## まとめ
Math.max()を使うことで、複雑な比較を一行で書くことができ、**コードの可読性**や**保守性**が向上します。
シンプルで効率的なコードを書けるよう、今後活用していきたいと思います!
スペースキーは特殊キーなのか文字なのか

React testing libraryでテストを書いていた時に、userEvent.keyboardでスペースキーを押したい場面がありました。

エンターキーは
- `await userEvent.keyboard('{enter}')`

と押せますので、スペースキーも
- await userEvent.keyboard('{space}')

だなと思ったんですけど、実際は

- await userEvent.keyboard('{ }')

でした。
英語圏だと単語の区切りに入力する「文字」ですので、これは特殊キーではないということ？！

スペースキーに「特殊キーみ」を感じているのは自分だけではないのでは？と思ってちょっと調べてみました。

## 調査
### whitespace character
https://en.wikipedia.org/wiki/Whitespace_character

空白"文字"、つまり空白は文字。

### event.key
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key

例のところを見ると特殊キーたちに混ざってスペースキーがいる。スペースキーは特殊キーなのかと思わせる例文！でもevent.keyもスペースだけは文字としての" "が入ってくるんだなあ

```javascript
switch (event.key) {
  case "ArrowDown":
    // Do something for "down arrow" key press.
    break;
  case "ArrowUp":
    // Do something for "up arrow" key press.
    break;
  case "ArrowLeft":
    // Do something for "left arrow" key press.
    break;
  case "ArrowRight":
    // Do something for "right arrow" key press.
    break;
  case "Enter":
    // Do something for "enter" or "return" key press.
    break;
  case " ":
    // Do something for "space" key press.
    break;
  case "Escape":
    // Do something for "esc" key press.
    break;
  default:
    return; // Quit when this doesn't handle the key event.
}
```

### userEvent.keyboard
https://github.com/testing-library/user-event/blob/main/src/keyboard/keyMap.ts

keyMapというファイルにも、スペースキーは記号たち（`)!@#$%^&*(`）の中にはいなくて、特殊キーの中にある。

## 大体結論
英語圏の感覚としては多分文字。だけどCUIの時代から要素をToggleしたり機能を持っていることもある。さらに日本語ではそもそもスペースを文字として打つことはあまりなくて、変換キーのように使っているからか、特殊キーみが強いのかもしれない。さらに"space key"ではなく" key"と言われても何のことかわからない、という問題もある。

他にも文字なのか特殊キーなのかわかりにくいやつがいるのかと思って考えてみましたがたぶんスペースだけっぽいですね。
AMBERNIC で homebrew (自作アプリを動かすまで)

# AMBERNIC とは?
どの誤家庭にも転がっている中華エミュ機。

我が家にも [RG35XXSP](https://jp.anbernic.com/products/rg35xxsp) が転がっているので、なんかを動かしてみる。

# カスタム ファームウェアのインストール
標準のファームウェア(Stock OS というらしい)は不安定らしいし、また資料(ソース)があるなど とっかかりやすいという点で カスタム ファームウェアを入れたほうが良いと思う。
選択肢は色々あるが、ここでは [muOS](https://muos.dev/) を選択した。

インストール自体は簡単で ラズパイ如く .img をダウンロードして、Micro SD カードに flash して、実機でブートすれば良い。

1. [muOS](https://muos.dev/) の [Downloa Latest Here] から Download Full Image [Download from GoFile] を選択して、所持している機種の .img.gz をダウンロードする
1. [balenaEtcher](https://etcher.balena.io/) などで 上記 .img.gz を SD カードにフラッシュ
1. フラッシュが完了したら SD カードを AMBERNIC に挿入して、セットアップする

# 開発環境
クロス コンパイル環境が用意されている。
GLIB の依存関係があり、Debian での構築は諦めた。
[Ubuntu](https://jp.ubuntu.com/) [24.04.1](https://discourse.ubuntu.com/t/ubuntu-24-04-lts-noble-numbat-release-notes/39890) をインストールしたほうが早い。

## Ubuntu インストール
ISO をダウンロードしてインストールする。

## sshd
ssh を入れとく。
~~~
$ sudo apt-get install ssh
~~~

## クロス コンパイル環境のインストール
[Batocdra Lite SDK Toolchain for RG35XX plus & H - 20240207](https://github.com/rg35xx-cfw/rg35xx-cfw.github.io/releases/tag/rg35xx_plus_h_sdk_20240207) からダウンロードし、解凍して relocate-sdk.sh を実行する。
~~~
$ wget https://github.com/rg35xx-cfw/rg35xx-cfw.github.io/releases/download/rg35xx_plus_h_sdk_20240207/arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz
$ tar zxvf arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz
$ mv arm-buildroot-linux-gnueabihf_sdk-buildroot toolchain
$ cd toolchain
$ ./relocate-sdk.sh
~~~

## make
make がないので インストール
~~~
$ sudo apt install make
~~~

## ビルド
- SDL2 が使える
- 実機 OS は aarch64 (64bit) だが、この Toolchain は arm 用 (32bit) なので、実行時に注意する(後述)。

### サンプル コード
[サンプル コード](https://yui.ne.jp/qiita/sdl2event-source.zip)
SDL2 のイベントを表示するやつ

# 実行まで

## muOS の起動、設定
- muOS を起動する
- Configuration を選択
  - Wi-Fi Network で LAN に接続する
    - 接続すると IP アドレスが表示される
  - Web Service で Secure Shell を Enabled にする
    - root/root でログイン可能

## アプリケーションに登録
/mnt/mmc/MUOS/application/ に .sh を作成することで、ランチャの Applications から実行可能である。
アイコンは /mnt/mmc/MUOS/theme/active/glyphy/muxapp/ に .png を入れておく。

### lib32
aarch64 で arm を動かすので、LD_LIBRARY_PATH を設定する。
~~~
LD_LIBRARY_PATH=/usr/lib32
~~~

### Audio
PipeWire を利用しているので、設定しておく。
~~~
PIPEWIRE_MODULE_DIR="/usr/lib32/pipewire-0.3"
SPA_PLUGIN_DIR="/usr/lib32/spa-0.2"
~~~

### サンプル モジュール
[実行モジュール](https://yui.ne.jp/qiita/sdl2event-rg35xx.zip)
SDL2 のイベントを表示するやつ
RTX 5090のTensorコア数

# RTX5090のTensorコア数
2025年01月07日の発表だと以下の通りでTensorコア数が**現時点で不明だった。**
AI TOPS(TFLOPSの浮動小数ではなくInt版？)の値からRTX50番台のTensorコア数を考えてみたい。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/2a62f08a-0173-3e07-4712-aa6c4103eb47.png)

https://gigazine.net/news/20250107-nvidia-ces-2025-rtx/

# RTX4090のAI TOPS
Tensorコアは16×16の演算を1クロックで出来、Int8の演算に換算すると**1クロックで512回演算できる**らしい。さらに疎行列の演算では速度が**2倍**になるため、**Tensorコア数×ブーストクロック×1024**を計算すると知られている1321 T(テラ)OPSの値が計算できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/be754078-ce5b-8b94-0f55-21b811b80dc9.png)

## 参考：

https://blog.asial.co.jp/4845/

# RTX5090のAI TOPS
次に5090のAI TOPSをからTensorコア数を推定してみよう。
RTX 40番台ではTensorコア数とRT(レイトレーシング)コア数は4対1の関係性があり、おそらくこの比率は変わらないだろう。また、**Tensorコア数×ブーストクロック×2048**と計算式は40番台の2倍大きい計算式を用いた。この2倍がどこから出てきたのかはよく分からないがFP4の計算でFP8の計算より2倍効率が良いのかもしれない。

赤字は推定値及び計算値である。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/4aebc44f-638e-c566-0fb8-a43229d5d7a2.png)

# 5090のリーク
さて、上述で5090～70のTensorコア数は680、336、280、192と見積もったが、この値は以下の5090リークのGPU SMs(170、84、70、50)の4倍にほぼ等しい。あえて言うなら5070だけ違っており、リークだと50の4倍の200になる筈だが、計算上は48の4倍の192に近い。
まあ、それはさておいて自分の推定はおそらく正しいのだろうというのが確認できた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299928/1f7920f2-2c56-bfb5-daa1-7636b967b172.png)


https://wccftech.com/nvidia-geforce-rtx-5090-pcb-leak-gargantuan-gb202-gpu-16-gddr7-memory-single-16-pin-connector/

# まとめ
AI TOPSだと5090は4090の2倍以上の性能になっているがTensorコア数的には精々1.3倍くらいにしか増えてないのではと思った。
Wurkkos for workers（Model: HD10）でMomentaryから脱出できないときの対処

# 対象
 - [Wurkkos]( https://www.wurkkos.com/ ) for workers（Model: HD10）のライト
 - [anduril 2]( https://github.com/ToyKeeper/anduril )

# 問題
[Momentary Mode]( https://github.com/ToyKeeper/anduril/blob/trunk/docs/anduril-manual.md#momentary-mode ) （ボタンを押すとライトが点くけど、ボタンを離した瞬間にライトが消えるモード）に入って、このモードを解除できない。

# 解決法
**電池を抜く**（抜いて数秒くらい放置が必要かもしれない）。

# 仕様の話
取説の図でもMomentary Modeからの遷移が描いていなくて、実際[Momentary Modeの仕様]( https://github.com/ToyKeeper/anduril/blob/trunk/docs/anduril-manual.md#momentary-mode )にも「To exit Momentary Mode, physically disconnect power by unscrewing the tailcap or battery tube.」とある通り、**物理的に電源を落として脱出するのが仕様** っぽい。
3Blue1Brownのビットコイン解説動画が一時削除──自動化されたブランド保護の落とし穴

有名な数学系YouTuberである3Blue1Brown（本名：Grant Sanderson）氏が、2017年に公開した「ビットコインの仕組みを解説する動画」をYouTubeから削除されるという事件が起きました。これは、Web3企業向けに“ブランド保護”を提供するChainPatrolという企業によって著作権侵害として報告され、YouTube上で「著作権侵害によるストライク」が発行されたことによるものです。しかし、後に誤検出であると判明し、現在は取り下げられています。

![](https://oo2seej0uu4jdyyw.public.blob.vercel-storage.com/photes-blog/1736247632645_image-JwVtxrgvnMEPZ2OLe9fWZThCrxIUZC.png)

### 動画削除の経緯

3Blue1Brownは、高品質の数学解説動画で知られています。中でもビットコインの仕組みをわかりやすく解説した動画は、これまでに数百万回再生されるなど大きな注目を集めてきました。ところが最近、その動画が「Arbitrum」というWeb3プロジェクトの代理として行動したChainPatrolの通報により削除され、チャンネルには著作権侵害ストライクが付与されました。

ストライクを3回受けるとチャンネルそのものが削除されてしまうため、3Blue1Brown本人は強い不安を表明。動画は間違いなく本人が作成・所有する完全オリジナルコンテンツであるにもかかわらず、なぜ削除されたのか？ 3Blue1Brownは「ボットによる誤検出の可能性がある」と指摘し、YouTubeのシステムもまたそれを盲信してしまったのではないかと推測しました。

![](https://oo2seej0uu4jdyyw.public.blob.vercel-storage.com/photes-blog/1736247633301_image-enLCZRiNhh1u5zLS1ICKwM4Cfa6Aw1.png)


### ChainPatrolの謝罪

3Blue1Brownのツイートを受け、ChainPatrolはすぐに「これは誤検出であり、削除要請を取り下げる」と謝罪する声明を公開しました。同社は「大量にアップロードされる詐欺動画を排除するための取り組みの中で、極めて稀に誤検出が発生してしまう」としつつ、再発防止のための対策と調査を行うと約束しています。

![](https://oo2seej0uu4jdyyw.public.blob.vercel-storage.com/photes-blog/1736247633673_image-1AlJkNtGAvvLz54OhCZR4d7HwCdWYW.png)

しかし、今回の一件で浮き彫りになったのは、**自動化された“ブランド保護”ツールの脆さ**です。YouTube側はこうした第三者からの通報を重視しており、誤検出や悪用の防波堤となるべきシステムが十分に機能していないのではないかという疑念が広がっています。

### 類似の問題：小規模クリエイターや他コミュニティ

この種の誤報告や誤認識による動画削除は、今回が初めてではありません。大手YouTuberの場合はコミュニティやSNS上で大きく話題になり、すぐに対処されることが多いですが、**小規模クリエイター**の中には誤削除されたまま放置され、チャンネルごと消されるケースもあるといわれています。

また、Minecraftコミュニティなど他のゲーム・クリエイターコミュニティでも、同様の誤検出による削除が起きているという報告があります。特にIPアドレス検知サービスや著作権保護のAIが、どこまで正確にコンテンツの中身を把握できているのか、疑問を呈する声が強まっています。

### DMCAとYouTube独自システムのあいまいな線引き

YouTubeはDMCA（米国デジタルミレニアム著作権法）ベースの制度と、独自のContent IDシステムを組み合わせて運用しています。DMCAに基づく著作権侵害申請は、虚偽申請の場合に法的な罰則がありうる一方で、YouTube独自のシステム経由だと運用にあいまいな点が多く、クリエイター側が反論しづらい場合もあります。

今回の事例では、**実際にDMCAが使われたかどうか**が議論されていますが、YouTubeの仕組み上「著作権侵害ストライク」と「Content IDのクレーム」は異なるフローで扱われることがあると指摘するユーザーもいます。

### 今回の件が示す問題点

1. **AIの過剰検出リスク**  
   詐欺やブランド偽物対策としてAIを活用する企業が増えていますが、大量の検出対象を一度に処理するため、誤報告が一定数発生するリスクは避けられません。

2. **クリエイターへの深刻なダメージ**  
   YouTubeでは著作権ストライクを3回受けるとチャンネルが削除されます。規模の大きいチャンネルだけでなく、小さなクリエイターにとっては死活問題です。

3. **プラットフォームの責任と透明性**  
   通報を受けた際の調査プロセスや、誤報告を行った企業へのペナルティなど、プラットフォームの透明性やポリシーの改善が求められます。

4. **小規模クリエイター保護策の必要性**  
   3Blue1Brownのような人気チャンネルはSNSなどで大きな声を上げられるため、比較的素早く対処されます。一方、そうでないチャンネルは泣き寝入りせざるを得ないケースが多く、対策が強く望まれます。

### まとめ

3Blue1Brownの誤削除事件は、YouTubeにおける著作権やブランド保護の自動化の問題点を改めて浮き彫りにしました。ChainPatrolは迅速に謝罪を行い削除依頼を取り下げたものの、**「誤検出はごく稀」**だという説明に納得しない声も少なくありません。

今後、YouTubeや関連企業には、  
- 不当な削除依頼に対する明確なペナルティの導入  
- 通報に対する人間による審査の強化  
- 小規模クリエイターの意見を反映する仕組みの整備  

など、より公正で透明性のある仕組みが求められています。著作権やブランド保護システムのもつ両刃の剣が、正当なクリエイターを傷つけないために何ができるか、今回の事例は私たちに改めて考える機会を与えてくれました。

---

#### 参考リンク・引用

- [3Blue1Brown公式Twitter](https://twitter.com/3blue1brown)  
- [Hacker Newsでの議論](https://news.ycombinator.com/) 
- [Pixno News](https://photes.io/blog/posts/3blue1brown-bitcoin-video-briefly-taken-down-when-automated-brand-protection-goes-wrong)
Excel VBAで、配列に格納した文字列の1文字目が「=」だと、シートに貼り付ける際にエラーになる

Excel VBAで、配列に格納した文字列の1文字目が「=」だと、シートに貼り付ける際にエラーになる件。

データベースから引っ張ってくるデータなので、データそのものを自分でコントロールすることができない。

しかもエラー内容としてメモリが不足している旨が表示されるものだから、デバッグにやたら時間がかかりました。

配列に格納する際に１文字目が＝だったらそれをトリミングすることで対応することにしました。
firebase emulatorの使い方

#firebaseでfunctionsをemulatorに挑戦した忘備録です。

## firebase emulatorとは
デプロイすることなく、ローカル環境で挙動を確認するための仕組みです。
参考　https://qiita.com/ak2ie/items/a50ea4e3da37f904bd1a

##環境
reactでバックエンドのためのfunctionsが実装されていること

## firebase init の時にemulatorを選択すると、firebase.jsonに必要な設定がなされます。

## 上記を実施しない場合、直接firebase.jsonにアクセスできるポートを設定します。
```:firebase.json
{
  "emulators": {
    "hosting": {
      "port": 5000
    }
  }
},
\\ホスティング設定
{
  "hosting": {
    "public": "public", // ホスティングするファイルのディレクトリ
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"]
  }
}
```
## フロントエンドからのアクセス
firebase.jsonで設定されたポート(5001等)へのアクセスURLを設定
```:

```
## firebase.jsの設定
```:firebase.js
```

## functionsの起動
```:ターミナル
functions> funcitions emulators:start
```
## ターミナルに表示されている内容を確認し、適宜訂正

## 状況を確認