OmniAICreator/Qiita-1.07M huggingface dataset:
lsblkのカラムの意味メモ

lsblkのカラムの意味

### NAME

デバイス名を示します。
例: sda, sda1（sdaはディスク全体、sda1はそのパーティション）。
### MAJ:MIN

メジャー番号とマイナー番号を表示します。
Linuxのデバイスファイル（/dev/sda など）を識別するための番号。
### RM

リムーバブル（取り外し可能）かどうかを示します。
値が1ならリムーバブルデバイス（例: USBメモリ）、0なら固定デバイス。
### SIZE

デバイスやパーティションのサイズを表示します。
単位: バイト、KB、MB、GBなど。
### RO

読み取り専用（Read-Only）デバイスかどうかを示します。
値が1なら読み取り専用、0なら書き込み可能。
### TYPE

デバイスの種類を示します。
disk: 物理ディスク全体
part: パーティション
lvm: LVMの論理ボリューム
rom: CD/DVD-ROMなどのリムーバブル光学デバイス。
### MOUNTPOINT

デバイスがマウントされている場合、そのマウントポイントを表示します。
例: /, /mnt/data など。未マウントの場合は空欄。


## lsblk -o NAME,PHY-SeC,LOG-SeC
### PHY-SeC

物理セクターサイズ（通常は512バイトまたは4096バイト）です。
### LOG-SeC

論理セクターサイズです。

セクタとは
（初学です）
HDDでは、1byte書き換えたいだけでも、セクタ(512Byteや4KB)を全てreadして、そのデータの中で1byteだけ変えたいデータを書き換えて、セクタごとWriteする必要がある。これをRead-Modify-Writeというらしい。
SSDでは、セクタは実在しないが、HDDのRead-Modify-Writeのアプリケーションがそのまま動くようにするために、仮想的に定められているらしい。実際は、ページ(4-8KB)単位で読み書き、ブロック（数百KB～数MB）単位で消去（全て1にする）する（らしい）。つまり、1byte更新したければ、1ブロックを読み込んで、そのブロックを削除し、1byte更新してまた書き込む。なお、このブロックと、ext4などのファイルシステムで指定する論理ブロックは別物。

ファイルシステムのブロックサイズの例

```shell
stat -f /
  File: "/"
    ID: 816f0a35800c03cf Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 103063044  Free: 84176913   Available: 79711204
Inodes: Total: 26214400   Free: 25546674
```

Blockサイズは4KBだった。


## 物理セクターと論理セクター
### 物理セクター
ストレージデバイスのハードウェアがOSに対して提示する最小のデータ単位

### 論理セクター
OSがアプリケーションに対して提示する最小のデータ単位

手元のUbuntuマシンでセクターサイズを確認したら、論理セクターも物理セクターも全て512であった。
これを見て思ったのは、HDDフレンドリーなのは、512バイトごとの書き込みや読み込みだが、例えば書き込みにおいてSSDでが1ブロックで削除して何度もページ単位で書き込みを行う必要があるということなので、HDDフレンドリーにすることの代償は大きいのかなということ。

### statコマンド
指定ファイルパスの属するファイルシステムの情報を教えてくれる。

ただ、lsblk -fでは、ext4やFAT32と出るところが、statコマンドだとext2/ext3と出たり、msdosと出たりする。
webminのファイルマネージャー内の件数をコマンドで変更

##### 環境
VirtualBox 7.0.20
Rocky Linux release 9.5 (Blue Onyx)
webmin 2.202


webminで1ページに表示する件数を変更する場合は、GUI（Default number of items per page）から変更するかと思います。デフォルトは30件。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946964/50223b63-17ec-3275-d68e-b11b6db6f13f.png)

でも、「GUIでページ遷移するのめんどくさいし、コマンドでやりたいなぁ。。」と思って、色々と関係してそうなファイルを見てたらありました。

```
/etc/webmin/authentic-theme/settings-root.js
/etc/webmin/filemin
```

それぞれのファイル内の該当箇所を30件から500件に置換してwebmin再起動。。。
```
# sed -i "s/config_portable_module_filemanager_records_per_page='30'/config_portable_module_filemanager_records_per_page='500'/g" /etc/webmin/authentic-theme/settings-root.js
# sed -i s/per_page=30/per_page=500/g /etc/webmin/filemin/prefs.root
# systemctl restart webmin
```

他の設定もここで制御してるっぽい。
モジュールの定義

# モジュールの定義法
```rb
module #モジュール名
    # モジュールの内のモジュール
end
```

# モジュールはインスタンスを生成できない
```rb
irb(main):001* module Greeter
irb(main):002*   def hello
irb(main):003*     "hello"
irb(main):004*   end
irb(main):005> end
=> :hello
irb(main):006> greeter = Greeter.new
(irb):6:in <main>': undefined method `new' for Greeter:Module (NoMethodError)

greeter = Greeter.new
                 ^^^^
...
```
# モジュール同士の継承をできない
```rb
irb(main):007* module AwesomeGreeter < Greeter
irb(main):008> end

(irb):7: syntax error, unexpected '<' (SyntaxError)
```
# モジュールはクラスからの継承もできない
```rb
irb(main):009* class Parent
irb(main):010> end
=> nil
irb(main):011* module AwesomeGreeter < Parent
irb(main):012> end

irb:9:in `<top (required)>': (irb):11: syntax error, unexpected '<' (SyntaxError)
module AwesomeGreeter < Parent
                      ^
```
# クラスへの継承もできない
```rb
irb(main):013* class Parent < Greeter
irb(main):014> end
(irb):13:in `<main>': superclass must be an instance of Class (given an instance of Module) (TypeError)
```

https://gihyo.jp/book/2017/978-4-7741-9397-7
情シスが情報収集するサイト集

# はじめに
IT業界、IT関連のお仕事についていると能動的に情報収集しないと、障害情報などをうまく取れず、わたわた混乱することが多かったです。（今もですが･･･）
情報収集するにあたって、何を見ていいかわからないことが多かったので、今見ているサイトや参考にしているブログ等紹介できればと思います。

※最低限に絞って記載しています。
ほかにも知りたい方は別の方の記事を読むとより良いかもです！

## ITニュースサイト

#### ITmedia

https://www.itmedia.co.jp/

個人的に一番見るサイトです。
IT関連のニュースが偏りなくまんべんなく記載されており、見やすいのでおすすめです。


#### Gigazine

https://gigazine.net/

後述する情シスSlackでもよく見られている印象です。
ITmediaよりもちょっと俗っぽい印象。


#### Gizmodo

https://www.gizmodo.jp/

スマートフォン、コンピューター、家電などガジェットやテクノロジーに関する記事が多いサイトです。
ガジェットオタクにはたまらないと思います。


## テックブログ

あまり多すぎても見るのが大変だと思ったので、個人的に参考にしているサイトを紹介します。

#### クラスメソッド
AWSの知識を身に着けたいならまずここ！！

https://dev.classmethod.jp/



https://engineering.mercari.com/blog/

https://developers.cyberagent.co.jp/blog/

http://developer.hatenastaff.com/

https://techblog.zozo.com/

https://knowledge.sakura.ad.jp/

https://developer.smartnews.com/blog/

## トレンドになっている記事
トレンドになっている記事を見ておけばITの流行にはついていけると思うので（？）軽くタイトルを見る程度、確認はしています。

https://qiita.com/Qiita/items/616e8f6d4f69bd582ab5

https://zenn.dev/

https://b.hatena.ne.jp/hotentry/it

https://github.com/trending

## 学習系Webサイト

#### Progate

https://prog-8.com/

無料で初心者向けな激やさしさな学習サイト。
ブラウザ上でも、アプリ版でも実際に手を動かして、プログラミングを理解することができます。
有料コンテンツもありますが、個人的には無料の範囲でいいかなと。

## Slack

#### 情シスSlack(corp-engr)
情シスのためのSlackコミュニティで、毎日様々な会社の環境情報や、障害情報など多岐にわたるカテゴリから情報を見つけることができます。
私は、このSlackで障害情報を知り、社内に展開することが多いです。

https://corp-engr.jp/


## 障害情報

#### Microsoftの障害情報を見る方法

下記Learnにもあるように、Microsoft 365 管理センターの [サービス正常性] ページで確認することができます。

https://learn.microsoft.com/ja-jp/microsoft-365/enterprise/view-service-health?view=o365-worldwide

#### その他（非公式）

非公式のサイトにはなりますが、下記のサイトで現在起こっている障害をリアルタイムで確認することができます。

https://downdetector.jp/?_gl=1*7sf0q*_up*MQ..*_ga*MTI4NzY3MzExMi4xNzMyNzgxODI4*_ga_0PZM58H213*MTczMjc4MTgyOC4xLjEuMTczMjc4MTg4Mi4wLjAuMA..
【Flutter】CocoaPods エラー対処法  〜 Podfile.lockのバージョン更新 〜

# 概要

flutterアプリをiOS環境でデバックしながら開発していたところ、このようなエラーが発生しました。

>Error: CocoaPods's specs repository is too out-of-date to satisfy dependencies.
To update the CocoaPods specs, run:
pod repo update
Error running pod install
Error launching application on iPhone 16 Pro.

エラーが起きた背景としては、直前に pubspec.yaml に firebase_auth というfirebaseでアカウント認証を行うパッケージを追加していました。

このエラー原因と対処法を記します。

# 原因

flutter_cleanなどを試してみるとエラーメッセージが次のようになりました。
>[!] CocoaPods could not find compatible versions for pod "Firebase/Auth":
In snapshot (Podfile.lock):
Firebase/Auth (= 11.2.0)
>
>In Podfile:
firebase_auth (from \`.symlinks/plugins/firebase_auth/ios\`) was resolved to 5.3.3, which depends on
Firebase/Auth (= 11.4.0)


firebase_auth のバージョンが /ios/Podfile.lock に記入されているものと実際にインストールされているものとで異なることが原因と判明しました。



# 対処法

まず、/ios/Podfile と /ios/Podfile.lock を削除します。

その後、次のコマンドを実行します。
```bash:bash
flutter clean
```

コマンド実行後、pubspec.yaml の upgrade Packeges を実施します。
これにより /ios/Poddile が生成されます。

```bash:bash
cd ios
pod install
```
ここまでで /ios/Poddile.lock も生成されます。

実行後このように出力され、firebase_authのバージョンが揃いました

>Analyzing dependencies
firebase_auth: Using Firebase SDK version '11.4.0' defined in 'firebase_core'
firebase_core: Using Firebase SDK version '11.4.0' defined in 'firebase_core'
Downloading dependencies
Installing Firebase (11.4.0)
Installing FirebaseAppCheckInterop (11.5.0)
**Installing FirebaseAuth (11.4.0)**
Installing FirebaseAuthInterop (11.5.0)
Installing FirebaseCore (11.4.0)
以下略

最後に再度flutter_cleanを実行して正常にビルドが完了するようになりました。
ARP

# IPアドレスだけでは通信はできない
>インターネット上では、すべてのマシンが一つ以上のIPアドレスを持っているが、それだけではパケットを送信する上で十分ではない。

### NICはIPアドレスを知らない
>イーサネット・カードのようなデータ・リンク層のNIC(Network Interface Card:ネットワーク・インタフェース・カード)には、インターネット・アドレスはわからない。

>NICは48ビットのイーサネット・アドレスをもとにフレームを送受信し、32ビットのIPアドレスについては一切感知しない。

# IPアドレスからイーサネット・アドレスを探す

### 宛先のIPアドレスを取得する
>ホスト2のIPアドレスを調べることである。
...
DNSはホスト2のIPアドレス(192.32.65.5)を返答すると仮定する

### IPアドレスの大体の範囲を知る
>格納したパケットを作り、送信するためにIPソフトウェアに渡す。IPソフトウェアはアドレスを見て、CSネットワーク上に宛先が存在することを確認する。

### IPアドレスの具体的な位置を知る
>ただし、フレームを送信するためには、さらに宛先のイーサネット・アドレスを何らかの方法で知る必要がある。

#### ブロードキャストで返答が返ってきたものが宛先のイーサネットアドレス
>ホスト１がイーサネット上でブロードキャスト・パケットを送信し、192.31.65.5のIPアドレスを持っているのが誰かを訪ねることである。これにより、`イーサネットCS上のすべてのマシンがこのブロードキャスト・パケットを受け取り、IPアドレスを調べる`ことになる。その結果、`ホスト２だけが自身のイーサネットアドレスE2を持つホストであることを知る`。このプロトコルを`ARP(Address Resolution Protocol: アドレス解決プロトコル)`

# ARPの利点
>システムの管理者が行われなくてはならないことは、`各マシンのiPアドレスの割り付けと,サブネット・マスクの決定だけ`である。`残りはすべてARPが自動的`にやってくれる。

# ARPがキャッシュしてブロードキャストを省略する
### ARP実行したら記憶しておく
>マシンがARPを行った時に、すぐに同じマシンともう一度通信する可能性を考えて、その情報をキャッシュしておく方法がある。次に送信を行う時には、自身のキャッシュの中にアドレスの対応づけの情報があるため、２度目のブロードキャストを省略することができる。

### 送信元がARPの対象に自分のIPアドレスとイーサネット・アドレスを送る
>ホスト２が返答メッセージを送信する際にも、送信元のイーサネット・アドレスを知るために、ARPを実行することになる。このブロードキャストを避けるためには、ホスト１がARPを実行する際に、`ARPのパケットの中に自身のIPアドレスとイーサネット・アドレスの対応付けを記録`しておけば良い。ARPのブロードキャストがホスト２に到着すると、`ホスト2は(192.31.65.7,E1)の組をARPにキャッシュに記録`する。

https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/

# 感想
ARPを送る側も自分のイーサネットアドレスを送って作業の効率化を行なっている。
【個人開発】ひよっこエンジニアが暇だから色々開発したあれこれ

NextとNuxtの勉強のためにいろいろ作ったのでここに記録。

# 名寄せツール
画像右側の重複した物件情報を、整理して左のようにAIがまとめてくれるツール。
同じ生成結果にならないのがかなり問題。そのため品質は低め。
* フロントエンド：現在なし
* バックエンド：Next.js typescript
* 生成AI：gemini-pro
* 名寄せに使うファイル:csv形式
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527006/859054c0-e8d8-b939-5482-bc7b805f1bb8.png)

# ポケモン図鑑
pokeAPIからポケモンの情報を引っ張ってきて並べただけ。
初期ロードがとんでもなく重いのがネック。
二回目以降はキャッシュを利用してるのでかなり早い。
* フロントエンド:Nuxtjs typescript
* バックエンド:Next.js typescript
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527006/e9ebecff-a565-d10f-9395-1d13b2ef12e3.png)

# 顧客管理アプリ
顧客管理、店舗管理、販売管理、売上管理が一つのアプリで出来るアプリ。たたき台として作ったためまだ出来が悪い。
* フロントエンド:Nuxtjs typescript
* バックエンド:Next.js typescript
* DB:MySQL Prisma
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527006/dae01b07-6384-b6ca-128b-ea856cd32bd6.png)

# AIが作ってくれるクイズアプリ
自分が好きなジャンルの四択クイズをAIが生成してくれる。
* フロントエンド:Nuxtjs typescript
* バックエンド:Next.js typescript
* 生成AI：gemini-pro
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527006/16416ea9-8fff-4fdf-a6d5-94fcda84ee69.png)
Docker上の他のコンテナからMySQLコンテナに接続できなくて詰まった

# はじめに
Docker環境でMySQLコンテナを使用した際に、他のコンテナから接続できない旨のエラーが出力されて詰まったので備忘も兼ねて残しておこうと思います。

## 環境
OS:MacBookPro M3

#### 使用コンテナのイメージ等
* maven:3.6.3-adoptopenjdk-14
* python:3.8
* mysql:8.0

## 経緯
他のコンテナ(maven, python等)から、MySQLサーバーのコンテナに接続して機能テストを実行しようとしたところ、以下のようなエラーが発生しました。
いずれもDB関連のエラーなのでMySQLサーバーのコンテナ周りに問題がありそうでした。

```
sqlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 1044 (42000): Access denied for user 'user'@'%' to database 'sample_db1'
(Background on this error at: https://sqlalche.me/e/14/f405)
```

そこで、MySQLサーバーのコンテナを確認してみると、コンテナには接続できることと、`sample_db1`というデータベースが存在していることが確認できました。
続いて、権限を確認してみたところ、以下のように権限が足りていないことがわかりました。

```terminal
mysql> SHOW GRANTS FOR 'user'@'%';
+----------------------------------+
| Grants for user@%                |
+----------------------------------+
| GRANT USAGE ON *.* TO user@% |
+----------------------------------+
1 row in set (0.01 sec)
```

## 問題の原因

コンテナをビルドする際に以下のSQLスクリプトを使用していたことが原因でした。

```sql
CREATE DATABASE IF NOT EXISTS sample_db1;
CREATE DATABASE IF NOT EXISTS sample_db2;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON sample_db1.* TO 'user'@'localhost' WITH GRANT OPTION;
GRANT ALL ON sample_db2.* TO 'user'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
```

この設定だと、ユーザー`'user'@'localhost'`はMySQLコンテナ内（localhost）からしか接続できません。他のコンテナからは`'user'@'%'`として接続しようとするため、権限が不足してエラーになります。

## 解決方法

ユーザーのホスト部分を修正して、任意のホストから接続できるようにします。
また、既存のユーザーがいる場合にエラーになってしまう可能性があるため、`IF NOT EXISTS`を使いました。

### 修正後のSQLスクリプト

```sql
CREATE DATABASE IF NOT EXISTS sample_db1;
CREATE DATABASE IF NOT EXISTS sample_db2;

CREATE USER IF NOT EXISTS 'user'@'%' IDENTIFIED BY 'password';
ALTER USER 'user'@'%' IDENTIFIED BY 'password';

GRANT ALL ON sample_db1.* TO 'user'@'%' WITH GRANT OPTION;
GRANT ALL ON sample_db2.* TO 'user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
```

**ポイント**

- `CREATE USER IF NOT EXISTS`でユーザーが存在しない場合のみ作成
- `ALTER USER`でパスワードを再設定し、既存ユーザーでも確実にパスワードを適用
- `'user'@'%'`で任意のホストからの接続を許可

### コンテナの再ビルドと確認

修正したスクリプトを使ってMySQLコンテナを再ビルドします。

```bash
docker compose up -d --build
```

MySQLコンテナに入り、ユーザーの権限を確認します。

```bash
docker exec -it mysql-container mysql -u root -p
```

```sql
SHOW GRANTS FOR 'user'@'%';
```

期待通りの権限が表示されればOKです。

### 注意点

- `'user'@'%'`は任意のホストからの接続を許可するため、セキュリティ上のリスクがあります。本番環境では接続元を限定することをおすすめします。

```sql
CREATE USER IF NOT EXISTS 'user'@'192.168.0.%' IDENTIFIED BY 'password';
ALTER USER 'user'@'192.168.0.%' IDENTIFIED BY 'password';
```

- 既存のユーザーがいる場合、`CREATE USER`だけではエラーになるので、`IF NOT EXISTS`と`ALTER USER`を組み合わせています。

## おわりに

この修正により、他のコンテナからMySQLコンテナへの接続が可能になりました。
同じ問題で困っている方の参考になれば幸いです。


## 参考リンク

https://dev.mysql.com/doc/refman/8.0/ja/creating-accounts.html
Goのポインタとは？newとmakeの違い

**Go言語では、ポインタは非常に便利な機能であり、データの参照と効率的な操作を可能にします。この記事では、Goのポインタについてわかりやすく説明し、ポインタがどのように役立つのかを具体例を通して紹介します。**

# ポインタの基本

ポインタとは、**変数のメモリ上のアドレスを保持する変数**です。これにより、特定のデータの場所を直接参照したり、操作することができます。ポインタを使うと、値そのものではなくその「住所」を扱うことになるので、データを効率的に操作したり、参照渡しを行うことができます。

ポインタの宣言と使用

**Goでは、ポインタは * を使って宣言します。ポインタを使って特定の変数のアドレスを取得するには、&（アドレス演算子）を使います。**

```Go
package main
import "fmt"

func main() {
    var x int = 10
    var p *int = &x  // `x` のアドレスをポインタ `p` に代入

    fmt.Println("xの値:", x)      // 10
    fmt.Println("pが指しているアドレス:", p)  // xのアドレス
    fmt.Println("pを介して参照するxの値:", *p)  // 10
}
```

上記のコードでは、p は x のメモリアドレスを保持しており、*p とすることでそのアドレスが指している値（つまり x の値）を取得できます。

# ポインタを使うメリット

ポインタを使う主な理由として、次のようなケースが挙げられます。

**参照渡し**

関数に引数として変数を渡すとき、通常はその値がコピーされます。しかし、大きなデータ構造を渡す場合、コピーのコストが高くなります。ポインタを使うと、変数のアドレスを渡すことで、データを効率的に操作できます。

```Go
func changeValue(val *int) {
    *val = 20
}

func main() {
    x := 10
    changeValue(&x)
    fmt.Println(x)  // 20
}
```

この例では、changeValue 関数にポインタを渡すことで、元の変数 x の値を直接変更しています。

# メモリの節約

大きなデータ構造（例えばスライスや構造体）を関数間でやり取りする際、ポインタを使うことでメモリの無駄なコピーを防ぎ、効率的にデータを操作できます。

**new と & の違い**

ポインタを取得する方法として、new キーワードと & 演算子があります。

& は、既存の変数のアドレスを取得します。

new は、新しいメモリ領域を確保し、そのポインタを返します。

例えば：

```Go
p := new(int)  // int 型のメモリ領域を確保し、そのポインタを返す
*p = 5
fmt.Println(*p)  // 5
```

new を使うと、メモリが初期化され（ゼロ値を持ち）、そのポインタが返されます。

# ポインタとスライス

Goでは、スライス自体が参照型のデータ構造であるため、スライスを関数に渡すときには暗黙的に参照渡しとなります。**つまり、ポインタのような振る舞いをするため、元のスライスを変更することが可能です。**

```Go
func modifySlice(s []int) {
    s[0] = 100
}

func main() {
    nums := []int{1, 2, 3}
    modifySlice(nums)
    fmt.Println(nums)  // [100, 2, 3]
}
```

このように、スライスは参照型なので、関数内で変更が加えられると元のデータに反映されます。

**nilポインタ**

ポインタは初期化されないと nil を指します。nil ポインタを参照しようとすると、実行時にエラーが発生するため、ポインタを使用する前には必ず初期化されているか確認することが重要です。

```Go
var p *int
if p == nil {
    fmt.Println("ポインタはnilです")
}
```

# make関数について

Goには、make というもう一つのメモリ割り当て関数があります。make は、スライス、マップ、チャネルといった組み込みのデータ構造を初期化するために使用します。**new とは異なり、make はポインタを返さず、初期化済みのデータ構造そのものを返します。**

**make の使い方**

make は主に次のようなデータ構造の初期化に使われます：

**スライス (slice)**

**マップ (map)**

**チャネル (channel)**

これらのデータ構造は、内部でポインタを利用しているため、初期化されていない状態では利用できません。make を使うことで、これらのデータ構造に必要なメモリが割り当てられ、利用可能な状態になります。

```Go
package main
import "fmt"

func main() {
    s := make([]int, 5) // 長さ5のスライスを作成
    m := make(map[string]int) // 空のマップを作成
    c := make(chan int) // チャネルを作成

    fmt.Println(s) // [0 0 0 0 0]
    fmt.Println(m) // map[]
    fmt.Println(c) // チャネルの情報が表示される
}
```

make で作成したスライス、マップ、チャネルは、すぐに利用可能です。例えば、スライスであれば要素にアクセスしたり、マップにキーと値を追加することが可能です。

# new と make の違い

**new**

任意の型のメモリを割り当て、そのポインタを返します。

スライス、マップ、チャネルには使用しません。

例えば new(int) は *int 型のポインタを返します。

**make**

スライス、マップ、チャネル専用に使用します。

初期化されたデータ構造を返し、ポインタではありません。

例えば make([]int, 5) は長さ5のスライスを返します。

# まとめ

Goのポインタは、データの効率的な操作や関数間のデータの共有に非常に役立ちます。値そのものではなく、メモリ上のアドレスを扱うことで、大きなデータのコピーを避け、コードのパフォーマンスを向上させることが可能です。また、make と new の使い方を理解することで、Goのメモリ管理をより効率的に行うことができます。

**最後までよんでいただきありがとうございます。
@y-t0910をフォロー,いいねしていただけると嬉しいです！**
欧州CRA解説 第5回：製造業者以外の対象（輸入者など）の義務

　第四回までは、主に製造業者に関係する義務について説明しました。今回は欧州CRA法において製造業者以外に適用される制限や義務について解説します。
 
　「輸入業者」と「販売業者」と「オープンソースソフトウェア（OSS）の管理者」それぞれに課せられる義務について詳しく見ていきます。

## 1．輸入業者に対する要求事項（ 第19条）
- EUのサイバーセキュリティ基準に適合した製品のみを輸入すること 
- 製品に関する技術文書を準備し、市場監視当局の要求に応じて提出すること 
- 製品に問題が見つかった場合、製造業者に通知し、必要であれば市場監視当局にも報告すること
- 製品に関する書類を一定期間保存すること
- 市場監視当局への協力: 輸入者と販売業者は、市場監視当局（EU加盟国指定の行政当局）の調査に協力
- 使用者への通知: 製品に重大な問題がある場合、輸入者と販売業者は、使用者にその旨を通知

## ２．販売業者に対する要求事項（第20条）
1.	販売する製品がEUの基準に適合しているかを確認すること 
2.	製造業者や輸入者が義務を履行しているかを確認すること。
3.	製品に問題が見つかった場合、製造業者に通知し、必要であれば市場監視当局にも報告すること
4.	製品に関する書類を保存すること
5.	市場監視当局への協力: 輸入者と販売業者は、市場監視当局の調査に協力
6.	使用者への通知: 製品に重大な問題がある場合、輸入者と販売業者は、使用者にその旨を通知

## ３．オープンソースソフトウェア管理者に対する義務（第２４条）
- OSSの開発において、脆弱性に対する適切な対応や、コミュニティへの情報共有を促進するためのサイバーセキュリティポリシーを作成し、文書化する義務 
- 市場監視当局からの要請があれば、OSSがもたらすサイバーセキュリティ上のリスクを軽減するために協力し、必要な情報提供の義務
- OSSの開発に関わる範囲において、製品の安全性確保やインシデント対応に関して製造業者の報告義務に協力する義務


## 4．製造業者とみなされる条件（第21条、第22条）
　輸入業者、販売業者、OSS管理者であっても、下記条件を満たせば製造業者とみなされ、第四回までで説明した義務が課せられます。
①	自らの名前やブランドで製品を販売する場合
②	既存の製品を大幅に改変する場合
③	製品を大幅に改変して市場に出す場合

以上、製造業者以外に課せられる義務について説明させていただきました。

第一回から今回まで、シリーズ掲載として欧州CRAについて一通り解説を行いました。本投稿をもって本シリーズは最終回となります。長らくのご愛読、誠にありがとうございました。

:::note warn
※本内容は記事作成時点での最新の欧州CRA法を参照していますが、今後法案が修正され内容が変更、もしくは新たな記載が追加される可能性があります。また、法律の専門家ではないため、本法の解釈が正確でない場合もございます。詳細については、必ず最新の情報をご確認いただき、専門家にご相談ください。
:::
ROS 2 でxacroを使う

# なぜわざわざurdfではなく、xacroを使うのか

urdfでも十分にロボットモデルを記述することができるが、xacroだとモデュール化をすることができる。
例えば、蛇ロボットのような同じ部品が連続するロボットを作る場合、一つの関節ユニットに関してモデルを記述し、これを繰り返す処理を行うことでモデルの記述量の肥大化を防ぐことができる。

# 環境

| 項目 | 環境 |
| --- | --- |
| CPU | Intel Core Ultra5 125H |
| RAM | 16GB |
| OS | Ubuntu22.04 |
| ROS 2 | Humble |

# 事前準備

Humble以外なら、"humble"を書き換える。foxyとか。

```python
sudo apt install ros-humble-xacro
```

URDFを扱えるパッケージを作る
```
cd ros2_ws/src
ros2 pkg create urdf_test --build-type ament_python --dependencies rclpy
cd urdf_test
mkdir urdf
cd urdf
```

# xacroファイルを作る
urdfディレクトリの下に、次のxacroファイルを作る。

```xml:test_xacro.xacro
<robot name="test_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
  <xacro:property name="side" value="0.5" />

  <link name="base_link">
    <visual>
      <origin rpy="0 0 0" xyz="0 0 0"/>
      <geometry>
        <box size="${side} ${side} ${side}" />
      </geometry>
      <material name="red">
        <color rgba="1.0 0.0 0.0 1.0"/>
      </material>
    </visual>
  </link>
</robot>

```

# xacroをurdfに変換する

```
xacro test_xacro.xacro -o test_xacro.urdf
```
変換でエラーが生じた場合、xacroが間違っている。
変換後は次のurdfファイルができる。

```xml:test_xacro.urdf
<?xml version="1.0" ?>
<!-- =================================================================================== -->
<!-- |    This document was autogenerated by xacro from test_xacro.xacro               | -->
<!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->
<!-- =================================================================================== -->
<robot name="test_robot">
  <material name="red">
    <color rgba="1.0 0.0 0.0 1.0"/>
  </material>
  <link name="base_link">
    <visual>
      <origin rpy="0 0 0" xyz="0 0 0"/>
      <geometry>
        <box size="0.5 0.5 0.5"/>
      </geometry>
      <material name="red"/>
    </visual>
  </link>
</robot>

```

# 作成したモデルを確認する

### rviz2からファイル指定する

```
rviz2
```

rviz2の左下のaddボタンから、RobotModelを選択する。

RobotModelのDescription SourceをFileに変更し、Description Fileから先ほど変換したtest_xacro.urdfを選択する。ここまででモデルが出てくる。

その後、Fixed Frameをmapからbase_linkを選択する。ここまですると色がつく。

### urdf_launch display.launch.pyで表示する
パスを正しく指定する必要がある。

```
cd urdf_test/urdf
ros2 launch urdf_launch display.launch.py urdf_package:=urdf urdf_package_path:=/home/yama/ros2_ws/src/urdf_test/urdf/test_xacro.urdf
```

次のように表示される。
![Screenshot from 2024-11-28 16-38-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3926225/ce480d1d-0ae3-f6e0-c190-fef343907a72.png)


# 参考
https://qiita.com/Ninagawa123/items/411746933d221cb43e9d

https://qiita.com/esol-h-matsumoto/items/13e5f278244fd6b576c6
CML2で外部ネットワークに接続したい！

# はじめに
CML2で他のネットワークにつなげたいことありますよね。
例えば…
クライアント端末をインターネットに接続したい。
他のSwitchなどと接続したい。
今回はそんな時に使うノードです。

# 設定方法
外部ネットワークに接続したいラボでExternal Connectorを使用します。

![スクリーンショット 2024-11-28 112345.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/1c3000ac-2126-8648-519c-ebfe8dc38433.png)

External Connectorを起動する前に[GUIDE]->[CONFIG]->[SystemBridge：(bridge0)]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/8862cc2e-aae8-4d5a-dcc2-0752607b3b24.png)

接続して起動すると、DNCPでIPが割り振られてPingが通りました。

![スクリーンショット 2024-11-27 223649.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/0996929c-56f0-842c-cb02-1f5172ed3e72.png)
DNCPでIPが降られないネットワークにつなげる場合はStaticでアドレスを割振ります。
このようにラボで設定する内容は簡単です。
が！仮想マシンのネットワークの設定や、CMLcontrollerの設定を考慮する必要があります。

# VMware ESXi の場合
無差別モード等ポリシーを許可します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/200c2f65-841f-3b96-5e70-8775f8de5eb1.png)
cml-controllerの設定は外部に接続するInterfaceの[bridge0]は、CMLのInterfaceを先ほどと同様に割り当てています。
ネットワークが複数ある場合はその分複雑となります。

接続先のSwitchでTrunk接続したい場合、別のネットワークとして"VLANID:4095"を作成して、追加登録します。[参照サイト](https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.security.doc/GUID-3BB93F2C-3872-4F15-AEA9-90DEDB6EA145.html)


# Proxmox の場合
ESXiでいう無差別モードの状態となっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/d01b8e70-cc16-4260-b0dc-96b889f7d601.png)

Trunk接続はVLAN Awareを使用することでできるようです。このあたりは別途やってみようかなー。
[参照サイト](https://cer12u.hatenablog.jp/entry/2023/02/19/113831)


# VMware Workstationの場合
本設定ではネットワークアダプター１つ、カスタムのVMnet8（NAT)としています。他は特段設定していません。
※PCの環境が変わるためCMLのアドレスを変えないようにしています。もしも、物理ネットワークに直接接続する場合、ファイヤーウォールなどすべて止める必要があります。

![スクリーンショット 2024-11-28 114837.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/dddc2654-292b-5386-4d62-a681d3a4bb6e.png)

cml-controllerをみると外部に接続するInterfaceの[bridge0]は、CMLのInterfaceを割り当てています。

![スクリーンショット 2024-11-28 132519.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/2c0fcc3f-fa9e-0b02-044a-8a6d44cf9220.png)


# おわりに
今回はCMLで外部接続する方法を記載しました。
ラボの操作よりも事前準備が難しいですね。ProxmoxについてはTrunkが試せたら別途追記しようと思います。
JPHACKS体験記事まとめ！

JPHACKS2024で11年目になるJPHACKSですが、過去いろんな方が体験記を書かれていたので、まとめてみました！！

## 2024
- [日本最大級の学生向けハックイベント: JPHACKS2024 Award Dayツイートまとめ](https://togetter.com/li/2467323)

- [電子ペーパーが反応しない君へ…ESP32と4.3inch e-Paper UART Module 【10628】4.3インチ 800×600 E-Paper 電子ペーパーモジュール UART接続](https://qiita.com/kaaaaakun/items/a3f2ac7cb60541f80c69)


## 2024
### Award Day進出！
- [JPHACKS 2024 Award Day完走した感想](https://note.com/yamamotokoki/n/nac02afa5c7e9)
- [JPHACKS体験記~「安心打診おばあ」の裏側~](https://qiita.com/melo_atc/items/7b5a0c4414cfb0c83a0e)
- [プログラミングぺいぺいのJPHacks体験記](https://www.jackapp.jp/blog/c48c3150-b29b-4fb3-8325-ab83324ad55e)

### Hack Day
- [JPHACKS2024-金沢会場を完走した感想](https://note.com/yamamotokoki/n/n5ffb1823955a)

## 2023
### Award Day進出！
- [こわくない Meta Quest 開発](https://qiita.com/shogo0x2e/items/9ed38c3004cf374d0070)

### 参加記事
- [ハッカソンに初参加しました！](https://qiita.com/azubiwa/items/c525584413af89f21de9)
- [JPHACKS2023-Review](https://qiita.com/NakagawaRen/items/0b241ecd1eea54367ce3)


## 2022
### Award day進出！
- [ディズニーで「デバッグ」したことありますか？: エンジニア人生が変わったJPHACKS体験記](https://note.com/k_takemi/n/n8e00e76d230d)
- [JPHACKS 2022 のみぱら 感想戦🔥](https://note.com/sino_72/n/nfe4df992fa90)
- [快適なオンライン飲み会体験を提供する「のみぱら」がＪストリーム賞を受賞 ー JPHACKS2022](https://voice.stream.co.jp/event/20221129/)

## 2021
### Award day進出！
- [JPHACK2021受賞者紹介：教育×TechのプレゼンアプリでＪストリーム賞を受賞](https://voice.stream.co.jp/event/20220328/)

### Hack day
- [JPHacks2021にデザイナー枠で出た](https://note.com/mono4log/n/nca8c32b90238?magazine_key=m27cad5495964)
- [ハッカソン初心者に贈る体験レポート](https://qiita.com/Riku-smile/items/04d03ebeaec508b42ec3)

## 2020
### Award day進出！
- [JPHACKS2020に参加した話と、試したデザインマネジメント手法と反省](https://note.com/yukiota05/n/nf2c6d3558b40)
- [JPHACKS参加記2020~優勝しなかったらハッカソン引退~](https://note.com/rinaohmura/n/n01583acba5f5)
- [進化し続けるJPHACKS【参加レポート】](https://qiita.com/Yukiho-Yoshieda/items/c513d852494e4c6d2056)

### ハッカソンデビュー
- [学生エンジニアが初めてハッカソンに参加してみたら学びが多かった話](https://note.com/1keiu/n/n95a20ee12d54)

## 2019
- [ハッカソンで優勝する技術](https://qiita.com/ta1m1kam/items/7c6af445f1e62b0dad23)
ステレオカメラZED2i とGroundedSAMとを連動させる。

# ステレオカメラZED2i とGrounedSAMとを連動させる。
実空間の物体の理解には、3D計測、セグメンテーションだけではなく、それが何であるのかの理解が必要だ。

セグメンテーションとそれが何であるのかという理解についてはGroundedSAMがある。
そこで、ぬけているのは３Ｄ計測である。
ZED2iカメラとZED-SDKとを結びつけるサンプル実装を作ったので紹介する。

## Grounded-SAM とは
以下のGithubを見てくれ

https://github.com/IDEA-Research/Grounded-Segment-Anything

![](https://github.com/katsunori-waragai/zed-gsam/blob/main/figures/gsam_figures/captured_0001_raw.jpg?raw=true)
入力画像

![](https://github.com/katsunori-waragai/zed-gsam/blob/main/figures/gsam_figures/captured_0001_mask.jpg?raw=true)
インスタンスセグメンテーション後のマスク画像
![](https://github.com/katsunori-waragai/zed-gsam/blob/main/figures/gsam_figures/captured_0001_sam.jpg?raw=true)
検出結果のラベルとスコアとboxとインスタンスセグメンテーション

ここまでは、2次元の画像の話だ。


## 自作したもの
https://github.com/katsunori-waragai/zed-gsam

![](https://github.com/katsunori-waragai/zed-gsam/blob/main/figures/depth_and_gsam.png?raw=true)

これをZED-SDKでの深度画像、点群と紐付けて可視化したのが、上の一連の図だ。

ライセンスはGrounded-Segment-Anything のライセンスと同じにした。

# TODO
- まだ全然作り込まれていない。
- モジュールとして使い回せる状況にもなっていない。
- このしかばねを踏み越えて、先に進んでくれ。

##  まだ、これでは不足していると考えること
- どこをどうつかむのかが計画できない。
　どこを、どのようにつかむのかを、提示できなきゃならない。
　紙コップと持ち手のあるコーヒーカップでは、持ち方が違ってくる。
　ハサミを持つ場合も、もって移動する場合の持ち方と、ハサミを使用するための持ち方は違う。
　[アフォーダンスを調査中](https://qiita.com/nonbiri15/items/266565068618aa4071c5)
　
- 外界の障害物を考慮して、手の動きを生成する行動計画には、情報が不足している。

- テキストプロンプトの入力よりは、説明文の自動生成の方がうれしい。
    - gsam の場合には、事前に複数のwordを"bottle.cup.book" などのように"."の区切り記号で複数指定している。
    - そのため、指定のない物体がそこにあっても、検出・セグメンテーションをしてくれない。
メドレーでDevRelに挑戦する理由

![サムネイル画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929997/ee6473a3-ffae-acd8-aae4-72bfa6a601a3.png)


はじめまして！株式会社メドレーのアドカレ4日目を担当します🎄
株式会社メドレー 人材プラットフォーム本部 CTO室の重田です。
2024年11月に入社し、DevRel・エンジニア採用に携わっています。


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


これまでECのサブスクサービスを提供する会社⇨デスクレスワーカー向けの現場システムを提供する会社で、法人営業・プロジェクトリーダー・新卒／中途採用とキャリアを歩み、先月メドレーへ入社しました。


#### メドレーとの出会い
前職で中途エンジニア採用は初めての経験かつ、ひとり担当であったことからPitta（カジュアル面談プラットフォーム）を通じて社外のエンジニア採用担当に壁打ちや相談をする機会をつくっていました。本当にたくさんの方にアドバイスをいただき、良い経験ができたと思っています。お世話になった皆様、その節はありがとうございました！

そして、そこで出会ったのがメドレーの倉林さんでした。
👇オンライン会議の様子。

![Monosnap TS会議&イベント協賛のフローを決める会 2024-12-03 15-28-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929997/c915b0a0-76cf-19b8-5d8d-874540716bcc.png)
　　　今は私の上長でもある倉林さん。出会いに感謝です！


#### 入社の決め手
よくある話ですが、私のWillである「エンジニアの組織づくりに貢献したい」がメドレーで実現できること、それにワクワクしたからです。

採用担当として、自社に魅力を感じ入社をしてもらうことは大変嬉しいことです。だからこそ、入社後もエンジニア一人一人が会社に所属する意義や誇りを持って過ごす組織をつくりたいと強く思うようになりました。そこで、次のキャリアとして選択しました。ただ、そのためにはある程度大きな組織で採用組織の土台があることが必要です。その点、メドレーの規模や環境はまさに私が望んでいたものでした。

#### メドレーにおけるDevRelの役割
ちょっと話題にもなった「DevRel」。
はじめにメドレーにおける「DevRel」の役割を定義しておきたいと思います。

一般的にDevRel(Developer Relations)とは「外部の開発者とのつながりを形成し自社製品／サービスを知ってもらうためのマーケティング活動」と定義されています。また、DevRelを成功させるためのフレームワークとして、Code／Contents／Communityの3Cが挙げられています。
参照：DevRel エンジニアフレンドリーになるための3C 

https://www.shoeisha.co.jp/book/detail/9784798161068

メドレーのDevRelは、特にContents（コンテンツによるアプローチ）とCommunity（開発者向けコミュニティ）に注力しています。
まさにこのアドベントカレンダーもContentsの取り組みの一つです。その他にも定期的なTech Blogの公開や技術カンファレンスへの登壇、ゲストをお招きした社内勉強会を通じた開発者コミュニティの創出など活動範囲はとても幅広いです。これらについてオーナーシップを持ち牽引していく役割としてDevRelがあります。

また以下「日本におけるDevRelとは何なのか、現状と課題と今後」にある「日本のDevRelは4パターンほど存在する」に纏められている中では③Tech BrandingがメドレーにおけるDevRelの役割です。

https://blog.kushii.net/archives/2024/10/13/205852

会社によっては採用広報・技術広報と呼ばれることもありますがメドレーではDevRelとして活動をしていきます。理由としてはここでいう広報は「会社やプロダクトの認知を獲得しファンを増やす活動」なので外向き（=社外）がメインになります。ただし、前に述べたようにメドレーはDevRelとして内向き（=社内）に対してもコンテンツやコミュニティの機会を設ける役割を担っているからです。


#### DevRelとしての挑戦
私はDevRel担当としてメドレーエンジニア組織の内に秘める魅力を発信すること、そして社内外を繋ぐ架け橋になることをミッションとして楽しく奮闘中です💪
例えば、技術カンファレンスの登壇・出展経験があることや技術ブログ運営の体制があることは大変ありがたい一方、まだまだスケールできる余地があると思っています。また、今年初めてこのアドベントカレンダーを始めたように新たに挑戦できることも山ほどあります。

いわば、メドレーのDevRelという役割に対して1⇨10と0⇨1をどちらも挑戦できることにワクワクしています。
そして、これらの取り組みが将来的に採用や社内エンジニアの高いエンゲージメント維持に少しでも繋がってくれたら何より嬉しいです。

#### 最後に
入社して約1ヶ月、初めての大企業に戸惑うこともありましたが社員の温かさにいつも助けられています。1,000人超えの大きな会社ですが社員が温かいこと、そして一人一人が尊重されチャレンジできる環境だと日々実感しています！

![IMG_4580.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929997/5dafd6bb-9118-13bf-77d6-24bd73178d41.jpeg)
　オフィス前のイルミネーション🎄✨仕事終わりのちょっとした癒しです。

#### We're hiring!
メドレーではエンジニアを大募集中です！
カジュアル面談も大歓迎ですので、お気軽にご連絡ください。
そして、当社の[公式X](https://x.com/medley_dev)ではイベントへの出展やテックブログの公開などを発信していますので、お見逃しなく！👀

https://www.medley.jp/jobs/

  
  それでは、最後までご覧いただきありがとうございました！！
  次は@mami-tusさんです！引き続きメドレーのアドカレをお楽しみ下さい🙌
AITRIOS | AIH-IVRW2を別のアクセスポイントに接続する方法 

# Title AIH-IVRW2を別の無線LANにつなげる方法

ソニーセミコンダクタソリューションズの森川です。

無線LANでの接続が可能な AIH-IVRW2 ですが、小型でスクエアな形状とUSB給電の手軽さもあり、持ち出した先々の無線LANに接続することも多いと思います。
ということで本記事では、AIH-IVRW2の無線LAN設定の変更方法について説明します。
本記事ではConsole Developer Editionを利用しています。
数分で読み終わります。

## 前提
　本記事の内容は、以下の状態にあることを前提にしています。
- Console Developer Editionを利用中で、お持ちのAIH-IVRW2が既にConsoleへの接続できていること。
- Consoleを操作できる環境にあること。
- 新たに接続する無線LANが2.4GHzに対応していて、Internet接続が可能であること。

## 無線LAN設定を切り替える
  それでは説明します。
1. Console の 左側にある**Manage Device**をクリックし、表示されたウインドの上部にある**Setup Device**をクリックします。  
   <!-- 
   ![QP31_fig5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724648/d4b933f0-f043-8303-adc4-d9822683febf.png)
   -->
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724648/d4b933f0-f043-8303-adc4-d9822683febf.png" width="300">  
   
1. **Setup Device**ウインドに、NTPと接続したい無線LANのSSIDおよびPasswordを設定します (必要な場合は、その他の設定もおこなってください) 。  
   <!--
   ![QP31_fig2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724648/51d330bc-ce82-2692-6122-65a939727093.png)  
   -->  
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724648/51d330bc-ce82-2692-6122-65a939727093.png" 
width="300">
  
1. **Setup Device**ウインドの下部にある Generate ボタンを押し、QRcodeを表示します。
1. AIH-IVRW2の側面にあるリセットボタンを5秒程度押し続け、QRcode読み込みモード (三つあるLEDのうち一番上と下が橙色の点滅、真ん中が橙色で点灯) に切り替えます。
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724648/92341cc7-c556-c04e-9cde-2492df06d7e4.png" width="300">
   
1. 表示されているQRcodeをAIH-IVRW2にかざして読み込ませてください。  
もしうまくいかない場合は[AITRIOSデバイス登録時のQRcode読取りのコツ](https://qiita.com/SSS-keijimorikawa/items/240e6243eb9178c59457)を参照してみてください。

1. 無線LANへの接続に成功すると、一番下のLEDが緑点灯になります。これで新しい無線LANへの接続に成功しました。
   <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3724648/c0a24ff0-1bbc-0a61-da62-4ccbe045a049.png" width="300">  
  
   その後、一番上のLEDが赤点滅から緑点灯に切り替わり、最後に真ん中のLEDが緑点灯に切り替わると、Consoleへの接続も無事に終了したことになります。
  ConsoleでConnectedになっているかを確認しましょう。  
  ちなみにAIH-IVRW2のLEDですが、上の画像で上から順番に"Power Indicator", "Service Indecator", "Wireless Indicator"となります。参考までに。

これで説明は終わりです。ポイントは**再Enrollmentは不要** で **Manage Device** の **Setup Device** を使うことです。

# 困った時は

もし、記事の途中でうまくいかなかった場合は、気軽にこの記事にコメントください。  
コメントのお返事にはお時間を頂く場合がありますことをご了承ください。
また以下のサポートのページもご覧ください。

- [Support (FAQ)](https://developer.aitrios.sony-semicon.com/edge-ai-sensing/support)

また、記事の内容以外で AITRIOS についてお困りごとなどあれば以下よりお問い合わせください。
- [Contact Us](https://developer.aitrios.sony-semicon.com/edge-ai-sensing/contact-us)
ECSで建てたRedashでコマンドを叩きたい

### 前提
- AWS CLI を使う
### 準備
- AWS Session Manager Plugin をインストールする

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html

### 実行手順
1. AWS コンソールとかから、ECSの該当クラスターのタスクIDを取ってくる
1. aws ecs execute-commandを投げる
```
aws ecs execute-command --cluster hoge-cluster --task 999999999999999999999999999999db --interactive --command /bin/sh --container piyo-container

```
1. Session Managerからコマンドが打てるようになる
> The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
> Starting session with SessionId: ecs-execute-command-xxxxxxxxxxxxxxxxxxxxxxxxxx
> \# 

サンプルコマンド
- ユーザ追加
```
./manage.py users create hoge-user1@example.com "ユーザ１"  --password p@ssword
```

- ユーザのパスワード変更
```
./manage.py users password hoge-user1@example.com p@ssword1
```
【超簡単】AIノーコードツールReplit Agentで5分でテトリス作成に挑戦！


# Replit Agentを使ってみた！〜テトリスを作ってみる挑戦〜

こんにちは！開発部のCLです。  
今回は「**Replit Agent**」を使って、AIにテトリスを作らせるという実験をしてみました。  

「Replit Agentって何？」という方もいると思うので、簡単に説明すると、  
プログラミングの知識や仕様がなくても、「こんなのが作りたい！」と伝えるだけで、AIがプログラミングしてくれる夢のようなツールです✨  

私のスペックは以下の通り：
- **Pythonは少し触ったことがある程度**
- **テトリス作成経験はゼロ**

さて、こんな私でも本当にテトリスが作れるのでしょうか？  
さっそく試してみます！

---

## 1. 指示を出してみる

「**テトリス作って！カラフルで可愛い感じでね！**」  

オカンに晩ご飯を頼むくらいざっくりと指示しましたが、AIはどこまで対応できるでしょうか？  
以下の画面のように、Replit Agentに依頼を入力します。

![初期指示](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/70c1978a-cfe7-0704-1886-d161ecf69596.png)

---

## 2. 仕様追加の提案

驚いたことに、AIから以下のような仕様追加の提案がありました：
- 効果音の追加  
- 難易度選択機能  

「ここまでやってくれるなら頼むか！」と、提案された全てをお願いしました。  
その結果がこちら👇

![仕様提案](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/f53961a9-a451-637e-3ede-d47502cb4fb9.png)

---

## 3. 腕を組んで待つだけ

私がやることはただ一つ…  
**腕を組んで待つだけ！**  
AIがプログラムを書いてくれるのをじっと見守ります。すごい勢いでコードが生成されていきます！

![コード生成中](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/d988eccd-c6b9-953f-94f6-ddf72e775f78.png)

---

## 4. 完成＆テスト

「5分で完成」と言われましたが、実際には**2分**で出来上がりました！  
さらに、Replitのプレビュー画面で動作確認まで可能。出来上がったテトリスはめちゃくちゃ可愛い✨

![テスト画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/5b0f455d-6e05-e3b6-e931-68b5a85b3938.png)

---

## 5. 不具合発見！

しかし、完璧ではありません。  
**ピースを回転させると形が変わってしまう**というバグが発生しました。  

![バグ発見](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/54c4214e-310d-7b2b-fe57-5c0477732c13.png)

---

## 6. 不具合修正依頼

右側のチャット欄で以下のように伝えます：  
「回転するとピースの形が変わっちゃうよ！」  

AIは指摘された部分を修正して再度プログラムを生成してくれました。  
この間もやることは、ただ待つだけ。

![修正依頼](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/a435f59d-d38b-5271-706e-c490692d8eb3.png)

---

## 7. 再度不具合修正

残念ながら、一度でバグが完全には直りませんでした。  
ここはまだReplit Agentの課題かもしれません。  
何度か指示を出し、修正と確認を繰り返す必要がありました。

![修正を繰り返す](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/dfe1feb2-99bd-0a06-3251-b982080b0cbb.png)

---

## 8. さらに機能追加

調子に乗って、以下の仕様変更を投げてみました：
- ブロックが消える時に可愛いエフェクトを追加  
- ブロックのデザインを顔付きに変更  
- 背景におっさんの顔を追加して、積み重なると汗をかいて困る演出  

おっさんの顔は画像生成ツールで作成したものを添付しました。  
結果、AIはすべてを快く引き受けてくれました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/d2cc7912-7ccb-f9f5-f5eb-f85870fb93f7.png)



---

## 9. 完成！(再)

最終的に、完全オリジナルでユニークなテトリスが完成しました！  
**コーディングは一切していない**ですが、この仕上がりには大満足です✨  
もちろん、細かい手直しが必要な点はいくつかありますが、それでもここまで自動で作れるのは驚きです！

![完成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/235e63aa-4937-ac1b-cc3b-aeadc3d1127d.png)
![カスタマイズ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3517332/0eb7b662-6fbb-384f-5d3e-df394bb57033.png)

---

## 感想とまとめ

### メリット 🌟
- **直感的にアプリが作れる**  
- **新たな機能をAIが提案してくれる**  
- **感覚的な言葉でも対応可能**  
- **プログラミングの知識が不要**  
- **画像を添付して修正を依頼できる**

### デメリット 💔
- **正確性やセキュリティ面で課題が残る**  
- **複雑な処理や分岐は言葉で伝えるのが難しい**  
- **うまく修正できない場合は自力で対応が必要**  

---

**Replit Agent**は、特に初心者や、気軽にアイデアを形にしたい人には非常に有用なツールです！  
皆さんもぜひ試してみてください！✨


## 最後に
**はつかぜ株式会社**では、IT学習や業務に役立つ情報を定期的にお届けしていきたいと思っています。  
システム開発のお問い合わせ・ご相談はこちら👇  

https://www.hatsukaze.co.jp/
Power Apps の Text 関数について

## はじめに
BizOptimars の いのうえ です。
今回は Text 関数についての記事になります。

## Text 関数とは
Text 関数は、数値や日付/時刻を指定した書式で、文字列に変換するための関数です。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-text

### Text 関数の基本構文
```
Text(Value, Format, [Language])
```
**Value**：変換する数値または日付/時刻の値
**Format**：数値や日付/時刻の書式を指定する文字列
**Language (オプション)**：結果のテキストに使用する言語タグ

## 数値の書式変換
まず、数値の書式を変換してみます。

Power Apps のアプリで、テキスト入力 (TextInput1) とテキストラベル (Label1) を用意します。
テキストラベルに表示している数値を日本円表記 (例：¥1,000,000) に変換したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/03131149-ac95-d375-ba71-7dcb0eabbf10.png)

Label1 の Text プロパティを以下に変更します。
```
Text(Value(TextInput1.Text),"¥#,###")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/ae4dfe44-7668-5cb3-d469-1e36eef2deba.png)
この式のポイントとしては、TextInput1.Text のままだとテキスト型のままなので、Value 関数を使って数値型に変換するという点です。

そうしますと、Label1 の書式が変換されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/74baf75f-e6b7-9165-902d-58766e3e38d2.png)

## 日付の書式変換
次に、日付の書式を変換してみます。

Power Apps でテキストラベル (Label2) を用意します。
Text プロパティには、Today 関数を使って、本日の日付を取得しておきます。
この日付の書式を曜日を加えた形 (例：2000年10月4日水曜日) に変換したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/60cb42e9-aca5-a1e4-0279-67581e100d60.png)

Label2 の Text プロパティを以下に変更します。
```
Text(Today(),DateTimeFormat.LongDate)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/5d0cc493-704c-652e-dcdf-4370f6b06b19.png)

そうしますと、Label2 の書式が変換されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/2227a14c-5b88-337b-d6da-67b9564e6bb7.png)

その他、フォーマットについては、公式ページをご参考にしていただければと思います。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-text#syntax

## おわりに
Text 関数は、数値や日付/時刻を柔軟にフォーマットして表示するための非常に便利な関数です。Text 関数を使いこなすことで、アプリのユーザー体験が大きく向上すると思いますので、ぜひチャレンジしてみてくださいね！
Raspberry Pi 3 B +　最新ＯＳを導入

2台に導入しました。
電源が足りないとでるし、遅い。
英語での導入もやってみた結果。日本語が重いってことがわかった。
ＫＳＹさんで　購入。　税込み　￥4,290　少し痛い。
日本語で再度導入。
パフォーマンスはましになった。
電源はパフォーマンスに関係あるのですね。
ラズパイの設定でOn-Screen keyboad disable として、
Screen Configuretionでアクティブにしないとする。
さらにパフォーマンスましになった気がする。
これで1台のDisplayでWINDOWS11からVNCで　Mintとラズパイ2台つなげて色々遊ぶぞ。
![IMG_0002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433305/32cbd129-221f-6ef1-c8fc-871999c1a498.jpeg)
AIを使って表を作成してみた

# はじめに
この記事では、Autonomous DatabaseのDatabase Actions内のデータ活用ツール群である**Data Studio**で提供されている、AIソースを使った表の作成を行います。

マニュアルは[こちら](https://docs.oracle.com/ja-jp/iaas/autonomous-database-serverless/doc/load-data.html#ADBSB-GUID-7442610A-EC3E-4958-8F4D-A5F882914C0F)です。


# 下準備
*  準備として、AI Profileの作成、Data Studioの設定からAIアクセスのチェックを行うことが必要です。[こちら](https://qiita.com/bambooseven/items/956a80f767ec11a52a0f)の記事の下準備1,2を実行します。
今回は、AIプロバイダとして**Open AI**を使用しました。

## AIを使って表の作成をしてみる
* Data Studioを開き、左側のタブからデータ・ロードを開きます。

* データのロードをクリックします。
    ![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/5bb4d50d-b4d7-b3ea-7c0c-5f5ed5e759e7.png)

* データをロードするためのオプションが画面上部に表示されますが、**AIソース**を選択します。
    ![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/29e6442a-da1d-82b7-7f1c-a470d5d3392c.png)

* 様々なクエリをするためのキーワードの例がカード形式で表示されています。Economy内のtop countriesをクリックします。
そうすると、英語で「What are the top 10 countries by gdp」と自然言語で表示されます。こちらは枠内で編集することもできます。
    ![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/f3f01722-e13f-cbc0-795d-0823fc019a2b.png)

* 「送信」を押すと、AIソースからJSON形式で結果が返って来ます。
    ![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/21df8b17-06db-f781-895c-0f2e4ee9b19b.png)

* COUNTRY_GDP_1表が作成され、ADBにロードすることができます。「データ・ロードの開始」をクリックします。
* ADB内に表をロードすることができました。表の中身を見てみたいので、「問合せ」をクリックします。
    ![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/e391cd37-872a-d661-6a88-d4e8113188e8.png)

* SELECT文で表の中身をクエリしてみます。GDPがTOP10のヨーロッパの国と、GDPの値が結果として出力されています。
    ![画像6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/460231d7-6cda-8e85-725c-4c28bdadfcd3.png)

* 次は日本語でも機能するか試してみます。
    「ヨーロッパのGDP上位10カ国は？」と入力して、送信します。
    ![画像7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/de2855d7-bfc6-1b0c-96a1-b500d74401ee.png)
* すると、先ほどと同様に結果が出力されました。
    ![画像8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/c76a9e2b-b778-611c-4ef2-489fb1c5e76c.png)

* ですが、GDPの値をよく見ると英語でクエリをした際のドイツのGDPは、397xxxxxxxであるのに対し、日本語でクエリをしたときは421xxxxxxxxという値になっています。このように条件を変えると、LLMが情報を取得してくる場所が違うのか結果が変わってしまうこともあります。

* データ・ロードの画面で提示されているEconomyなどのキーワードを使用しないで、一般的な質問をしてみました。
「Who are the members of The Beatles?」と質問して、送信を押します。
    ![画像9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/ff60b17f-18a6-3755-cb70-9d1945841b48.png)

* こちらは間違いないデータが返されました。
    ![画像10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/b5bf1f8e-1edd-4c87-2079-b3b472cdab39.png)
【Ruby】同じ名前でも用途が違うもの ～ gets と puts ～

# はじめに
こんにちは！アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
今回は私が勉強していて気付いた同じ名前のメソッドでも、動作が違うものがあったので紹介していきたいと思います。
あくまでも今回取り上げるのが`gets`と`puts`ですがほかにもあればコメントで教えていただけると嬉しいです。

# `gets` の場合
`gets` は、使用する環境や対象によって異なる用途を持つメソッドです。大きく分けて以下の2つに分かれます。

### `Kernel#gets`（標準入力を取得する）
標準入力（ターミナルからの入力）を取得するために使います。以下は基本的な例です。
```ruby
# 標準入力を取得
input = gets.chomp
puts "入力したのは: #{input}"
```
標準入力を待機し、chompメソッドで改行文字(`\n`)を切り捨てています。

# `IO#gets`（ファイルやIOオブジェクトから読み取る）
`File` オブジェクトや他の `IO` オブジェクトに対して使うと、現在のファイルポインタ位置から1行ずつ取得します。
```ruby
File.open("example.txt", "r") do |file|
  line = file.gets
  puts "ファイルの内容: #{line}"
end
```

ブロックを使用して、ファイルの内容を1行ずつ取得しています。
なお、ここでの`gets`はキーボード入力とは関係ありません。

# `puts` の場合
次に、`puts` について解説します。
`puts` は標準出力に文字列を表示するメソッドですが、実際には2種類の用途があります。

### `Kernel#puts`（標準出力に表示する）
`puts` を通常使うと、標準出力（ターミナル）に文字列を表示します。
```ruby
puts "Hello, Ruby!"
```
Progateで勉強する際に最初に扱うのはこの`puts`です。
ポイントは以下の通りです。

* 自動的に改行が付加されます。
* 標準出力の目的は、ターミナルへの出力であるということです。

### `IO#puts`（ファイルやIOオブジェクトに書き込む）
`File` オブジェクトや他の IO オブジェクトに対して使うと、出力先がターミナルではなく、ファイルや`仮想IO`になります。
```ruby
File.open("example.txt", "w") do |file|
  file.puts "Hello, File!"
end
```
コードのポイントは以下の通りです。
* 出力先が指定されたIOオブジェクトです。今回の例でいうと`example.txt`に`Hello,File!`を書き込みます。
* 標準出力（ターミナル）には表示されません。

# まとめ
Rubyでは同じ名前のメソッドでも、クラスや対象によって用途が変わることがあります。
`gets` と `puts` はその典型例で、ターミナルでの操作とファイル操作で異なる使い方ができます。
開発ブランチに派生元ブランチの更新を取り込む

# 個人的な結論
```
git stash -u
git checkout 派生元ブランチ
git pull
git checkout 開発ブランチ
git rebase 派生元ブランチ
git stash apply stash@{0}
git stash drop stash@{0}
```

# 各コマンドのメモ

## 1. `git stash -u`
開発ブランチの作業状況を退避する。
`-u`を付けることで、追跡対象外のファイルも退避する。
この時、stash名は`stash@{0}`となったこととする。

## 2. `git checkout 派生元ブランチ`
開発ブランチから、派生元ブランチに切り替える。

## 3. `git pull`
派生元ブランチを最新化する。

## 4. `git checkout 開発ブランチ`
派生元ブランチから、開発ブランチに切り替える。

## 5. `git rebase main`
派生元ブランチの位置(?)を更新する。

## 6. `git stash apply stash@{0}`
退避した作業状況を開発ブランチに反映する。
注）`git stash pop stash@{0}`で反映した場合、以降の作業は不要。

## 7. `git stash drop stash@{0}`
退避した作業状況の情報を削除する。

## ex `git stash list`
stashで退避した作業状況の一覧を表示する。
画像処理を勉強する前に

# 前置き

画像処理を勉強しようとすると、OpenCVなど特定のライブラリの使い方の説明が密接に絡んでおり、知りたい情報のノイズになることがある
逆に、説明が深すぎて目が滑る場合も多い
キーワードとその関連がわかれば、あとは自力で掘り下げていけるのだが、初学者にとってはそこのハードルが高いように思えたので、サポートできる（かもしれない）情報をまとめてみた

# 画像処理
画像を表示する処理全般を指す
それだけならば単純なようだが、オリジナルデータを単純に表示する他、画像に色なりフィルターなりの効果を与えたり、表示位置や表示サイズを任意で変更しようとすると、数学的知識が必要になってくる

# フォーマット
最近ではpngやjpegが一般的だが、実際は多くの形式が存在する
一例を記載する

## PNG

特徴: 可逆圧縮（画質を劣化させずに圧縮）を使用
用途: 背景が透明な画像やアイコン、イラストなど
メリット: 透明性をサポートし、画質が劣化しない
デメリット: ファイルサイズが大きくなる場合がある

[ISO/IEC 15948:2004](https://www.iso.org/standard/29581.html)
[ウイキペディア Portable Network Graphics](https://ja.wikipedia.org/wiki/Portable_Network_Graphic)
[PNG
The Definitive Guid](http://www.libpng.org/pub/png/book/cover.html)

## JPEG

特徴: 非可逆圧縮（画質を劣化させて圧縮）
用途: 写真やリアルな画像を保存するのに適している
メリット: 圧縮率が高く、ファイルサイズを小さくできる
デメリット: 圧縮によって画質が劣化する

[JPEG公式サイト](https://jpeg.org/jpeg/)
[ウイキペディア JPEG](https://ja.wikipedia.org/wiki/JPEG)
[W3C Overview of JPEG](https://www.w3.org/Graphics/JPEG/)

## BMP

特徴: 圧縮を行わない画像フォーマット。
用途: シンプルな画像の保存、レトロな用途（基本的な画像形式）。
メリット: 画質が劣化しない（無圧縮）。
デメリット: ファイルサイズが非常に大きい。

[ウイキペディア Windows bitmap](https://ja.wikipedia.org/wiki/Windows_bitmap)
[ウイキペディア ビットマップ画像](https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E3%83%9E%E3%83%83%E3%83%97%E7%94%BB%E5%83%8F)

## TIFF

特徴: 可逆圧縮または無圧縮を選択できる。
用途: 印刷や高品質の画像保存。
メリット: 高品質な画像保存が可能で、可逆圧縮に対応。
デメリット: ファイルサイズが大きく、一般的な用途には重い。

[ウイキペディア Tagged Image File Format](https://ja.wikipedia.org/wiki/Tagged_Image_File_Format)

## ピクセル (Pixel)
説明: 画像を構成する最小単位の「点」。
イメージ: 画像は無数の小さな四角い色の点（ピクセル）の集まりでできている。

## 解像度 (Resolution)
説明: 画像の細かさや鮮明さを表す指標。通常、ピクセル数で表される（例：300dpiや1920x1080）。
イメージ: 解像度が高いほど、より多くのピクセルが詰め込まれており、滑らかな画像になる。

## ラスター画像
説明: ラスター画像は、小さな色の点（ピクセル）の集まりで表現された画像のこと。
仕組み: 画像全体がグリッド（格子状）のピクセルで構成され、それぞれのピクセルに色が割り当てられている。
イメージ: モザイク画のように、細かい点が集まって1つの画像を作るイメージ。

## パス図形
説明: 点とそれを結ぶ線（直線や曲線）で構成された図形。ピクセルではなく、数学的な座標で形状を定義する。
イメージ：ロゴ、アイコン、フォント、イラストなどのデザイン。

# 画像操作
## 画像のサイズ変更（リサイズ）
説明: 画像の「縦」と「横」のピクセル数を変更する操作。バイリニア補間やランチョス補間などの手法を用いる
用途: 画像を大きくしたり、小さくしたりして画面や用途に合わせる。

## トリミング（切り抜き）
説明: 画像の一部だけを残して、不要な部分を取り除く操作。
用途: 必要な部分だけを強調したり、画面に収める。

## 回転と反転（フリップ）
説明:画像を90度、180度、左右または上下に鏡写しのように反転する操作。座標変換（回転行列）やアフィン変換などの手法を用いる
用途:画像の向きを変更する

## カラースケールの変換
説明: 画像の色の表現方法を変える操作。主にカラー画像を白黒（グレースケール）に変換することが多い。平均値法、RGB → HSV変換、二値化など。
用途：特定の色の強調や分析。画像処理アルゴリズムの前処理。

## クリッピング
説明: 画像や図形の一部を切り取って表示する操作。指定した領域の外側を無視して内側だけを残すこと。Sutherland-Cohenアルゴリズム、Weiler-Athertonアルゴリズムなど。
用途:写真の特定の部分だけを表示する。

## 透明度
説明: 画像や図形がどれだけ「透けて見えるか」を表す性質。アルファブレンディング、プレマルチプライドアルファ。
用途:写真やデザインでの重ね合わせ。

# フィルタリングと特徴抽出
## 平均値フィルタ
説明: 画像の各ピクセルを、周囲のピクセル値の平均値で置き換えるフィルタ。
用途:ノイズを平滑化して画像をぼかす効果がある
## ガウシアンフィルタ
説明: ガウス分布（山型の曲線）に基づいて重みをつけて周囲のピクセルを平均化するフィルタ。
用途:平均値フィルタよりも自然なぼかし効果
## メディアンフィルタ
説明: 周囲のピクセル値の中央値を計算し、それをピクセル値に置き換えるフィルタ。
用途:ノイズ（特に塩胡椒ノイズ）を効果的に除去
Pillowで4隅の座標指定で変形して貼り付ける

<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25276/740ccbc6-bba5-35a5-7dac-71c62388ad0f.jpeg"> <img width="270" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25276/3904ece3-6a0c-4334-c9ed-8eaf3b48e2da.jpeg">

これらの画像を、

<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25276/8fcda423-ebda-f883-213f-3cc332b2e6f3.jpeg">

こうしたい。

そういう関数があるだろうと思っていたけれど、無く、意外と面倒だったのでメモ。

変形。

[Image.transform](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.transform) がある。しかも `Transform.QUAD` という「欲しいものはこれでは？」という指定もある。が、これはやりたいことの逆。4隅を指定した四角形を、長方形になるように変形する。たぶん、写真に写った紙などの長方形のものを切り出すのに使うのだと思う。

https://stackoverflow.com/a/14178717

行列を計算して、 `Transform.PERSPECTIVE` で渡さないといけないらしい。

貼り付け。

上記の変形をした画像はこのように周囲が黒くなっている。

<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25276/c0f86f89-018f-6f8d-582f-330f71a30633.jpeg">

元の画像の部分だけを貼り付けたい。 `Image.putalpha(255)` で元の画像をアルファ付きに変換する。そうすると `transform` で外側の部分は透明になるので、この画像を `paste` の貼り付け元とマスクの両方に指定すれば良い。

```python
from PIL import Image
import numpy

imA = Image.open("a.jpg")
imB = Image.open("b.jpg")

# https://stackoverflow.com/a/14178717

def find_coeffs(pa, pb):
    matrix = []
    for p1, p2 in zip(pa, pb):
        matrix.append([p1[0], p1[1], 1, 0, 0, 0, -p2[0]*p1[0], -p2[0]*p1[1]])
        matrix.append([0, 0, 0, p1[0], p1[1], 1, -p2[1]*p1[0], -p2[1]*p1[1]])

    A = numpy.matrix(matrix, dtype=numpy.float64)
    B = numpy.array(pb).reshape(8)

    res = numpy.dot(numpy.linalg.inv(A.T * A) * A.T, B)
    return numpy.array(res).reshape(8)

imB.putalpha(255)
w, h = imB.size
coeffs = find_coeffs(
    [(500, 200), (1400, 400), (1700, 1100), (300, 600)],
    [(0, 0), (w, 0), (w, h), (0, h)],
)
imC = imB.transform(
    imA.size,
    Image.Transform.PERSPECTIVE,
    coeffs,
    Image.Resampling.BICUBIC,
)
imA.paste(imC, (0, 0), imC)

imA.save("result.png")
```
はじめに~このアドベントカレンダーについて

この記事は[42Tokyo Advent Calendar 2024](https://qiita.com/advent-calendar/2024/42tokyo) 、1日目の記事です。ちなみに情報量は居酒屋の突き出し出てくる枝豆くらいしかないので、胃腸を整える程度にササッとお読みください。

はじめに
--
どうもこんにちはHINOKAGUZUTI（kokurita）です。このアドベントカレンダーの作成者であり、42Tokyoというエンジニアの養成学校に通っている、大学一年生です。
42では、起業部の部長をしたり、一生ボドゲやスマブラをして、遊んでいたりします。

なんでこのアドカレつくったん？ってはなし
--
そもそも大前提として、私はアドベントカレンダーが大好き！！
去年初めて参加したのだけれど秒で虜になってしまいました。

ちなみに書いた記事はこれ
[【Python】マクドナルドのコンパイラを再実装する。](https://qiita.com/HINOKAGUZUTI/items/67487d486e60f879bf47)
<br>

そして、時は過ぎ、高校を卒業し、自転車で大阪から東京まで来て、42Tokyoに入学した後、ダラダラ課題をしたり、ライフセーバーをやってるうちに、気がついたら11月になっていました。<br><br<br>

## この42...何かが...変.......
もう11月に入ったというのになにかが足りない、、。10月中旬から私は起業部という部活を発足させて、部員は一気に50人に達しました。（アドカレのどっかでこれについて書くか、。）
急に始めたプロジェクトにもかかわらず滑り出しは上々。毎日が充実していると感じる一方で、私の中ではなにかがたりていないというモヤモヤをずっと抱えていました。
<br><br>
そして11月も一週間が過ぎた頃、そのモヤモヤの正体に気がつくことになります。
<br><br><br><br>
ハッ…!!<br><br><br><br<br>
### アドカレ無ァァァァァァァァァァァイッッッ！！！！！！！ 栗田ーーーーッッッッッッッッ！！！！ アドカレ無ぇぞ！
<br>
<br>
本来であれば、今頃の時期になると、毎年42でもアドベントカレンダーが開かれるはずなのだが、今年は一ヶ月前になっても誰も開く気配がなかった。どうやら調べてみたら、去年までアドカレをやっていた人が、もう42をやめてしまっていたらしい。
<br>
運営に聞いても、今年はアドカレをやりたいという問い合わせはやはり来ていなかったよう。また、公式ロゴを使用しないこと、公式でないことを明記すること、42の規約で禁止されている内容は公開しないことの３点
を守れば、個人で勝手に運営しても良いとのことだった。

### アドカレのない冬なんて考えられない。私kokurita動きます。
<br>

そもそも42Tokyoってなに？
--
ここまでなんども42Tokyo という単語が出てきていますが、そもそも42ってなんやねん、 "よんじゅうに"？なんかの暗号？となっている方向けに説明。
このアドカレを見ている人の殆どは42について知ってる人だと思いますが、一応です。

42（フォーティーツー）は、フランス発のエンジニア養成機関です。
現在は、世界32カ国にて展開されており、2020年6月に東京校として 42 Tokyo を設立しました。

多くの企業の支援、寄付で支えられており、授業料は完全無料。
学生は、18歳以上であれば経歴を問わず入学することができ、
その後のキャリアは起業をしたり、就職するなど、自由です。
また、基礎カリキュラムを終えたら、他の42キャンパスに留学することも可能です。
[(42Tokyo公式サイトより)](https://42tokyo.jp)

### なんかめっちゃ怪しいね!!
簡単に言えば、生涯使えるエンジニアとしての基礎を身につけるための学校です。日本のさまざまなITに関連する企業がお金を出してくれている、いま大注目の学校、らしい？故に __学費が無料!!__　

~~まあ国から学校として認められてないので大学でも専門学校でもないので、通っている生徒は、学生と言えるのかすら微妙なんですケドネ...~~ 本当にそこだけが難点。

まあただ、お互いに課題を教え合ったり、部活やイベントなども活発なため、コミュニティとしての価値はすごく高いかと思います。

　__個人的には、1ヶ月かけて受験する入学試験Piscineは全人類に受けてほしいと思っている。学費完全無料でこのクオリティーは、マジでやばいと思う。__

まとめ！
 -- 
今回のアドカレは、そんな謎多き学校42Tokyoの日常を垣間見られるチャンス！特にこれから42に入ってみようか迷っている人は必見！
42で普段やっている課題の内容から、日常の話、部活の話まで盛りだくさん！

内部生は課題の復習や予習をしたり、42には色んな人がいるんだなーって眺めていってくだせぇ
すでに終わっている課題についての内容でも有益な情報はたくさん眠ってたりするからね。

__ぜひ最後までたのしんでいってください！__