OmniAICreator/Qiita-1.07M huggingface dataset:
【ネットワーク】TCP/IP ネットワークインターフェース

# はじめに
こんにちは。アメリカで独学でエンジニアを目指している者です。
現在ネットワークについて学んでいるのですが、その中でも本日はTCP/IPのネットワークインターフェースについて見ていきたいと思います


## ネットワークインターフェースとは？

ネットワークインターフェースは、コンピュータやネットワークデバイスがネットワークに接続し、データを送受信するための物理的または仮想的な接点です。TCP/IPの仕組みにおいて重要な役割を果たします。

---

### ネットワークインターフェースの種類

#### 1. **物理インターフェース**

ネットワークインターフェースのうち、実際のハードウェアデバイスで構成されるものを指します。

- **イーサネットカード (NIC)**:
  - LANケーブルを使用した有線接続。
  - 安定性と高速性が特徴。
- **Wi-Fiアダプタ**:
  - 無線通信を可能にするインターフェース。
  - ケーブル不要で利便性が高い。
- **モデムや光回線終端装置**:
  - ISPとの接続に使用。

#### 2. **仮想インターフェース**

ソフトウェアによって作成される論理的なインターフェースです。

- **ループバックインターフェース (localhost)**:
  - 自分自身との通信を行うための仮想インターフェース。
  - 例: `127.0.0.1`。
- **VPNインターフェース**:
  - リモートネットワークへのセキュアな接続を提供。
- **仮想マシン用インターフェース**:
  - 仮想マシンがホストマシンや外部ネットワークと通信するため。

---

### ネットワークインターフェースの構成要素

1. **MACアドレス**

   - ハードウェア固有の物理アドレス。
   - 同じネットワーク内でデバイスを一意に識別するために使用。

2. **IPアドレス**

   - ネットワーク内でデバイスを識別する論理アドレス。
   - IPv4（例: `192.168.0.1`）とIPv6（例: `2001:0db8::1`）。

3. **サブネットマスク**

   - サブネットの範囲を指定。
   - 例: `255.255.255.0`。

4. **ゲートウェイ**

   - 他のネットワークにアクセスするための中継点（通常はルーター）。

5. **DNSサーバ**

   - ドメイン名をIPアドレスに変換するサービス。

---

### ネットワークインターフェースの役割

1. **データ送信**:

   - アプリケーションが生成したデータをネットワークプロトコルスタックを通じて送信。
   - 物理層でパケットに分割され、宛先に送られる。

2. **データ受信**:

   - ネットワークから受信したパケットを処理し、アプリケーションに渡す。

3. **アドレス解決**:

   - **ARP (Address Resolution Protocol)** を利用してIPアドレスからMACアドレスを解決。

---

### よく使われるプロトコル

#### **IEEE 802.3（イーサネット）**

- 有線LANで使用される基本的な通信規格。
- 高速で安定した通信を提供。

#### **IEEE 802.11（Wi-Fi）**

- 無線LANで使用される規格。
- ケーブル不要で移動の自由度が高い。

#### **PPPoE（PPP over Ethernet）**

- イーサネットを使用してPPPセッションを確立するためのプロトコル。
- 主にインターネット接続に使用される。

#### **ARP (Address Resolution Protocol)**

- IPアドレスから対応するMACアドレスを取得するプロトコル。
- 同じLAN内で通信を行う際に必要。
- IPアドレスから対応するMACアドレスを取得するプロトコル。
- 同じLAN内で通信を行う際に必要。

---

### ネットワークインターフェースの設定と確認

1. **有線接続の設定**:

   - LANケーブルを使用してPCをルーターに接続。
   - 高速で安定した通信を実現。

2. **Wi-Fi接続の確認**:

   - Wi-Fiネットワークに接続し、接続状態やIPアドレスを確認。

---

### ネットワークインターフェースの活用例

#### **家庭内ネットワーク**

- 家庭内の複数デバイス（PC、スマートテレビ、ゲーム機）をネットワークに接続。
- プリンタやNASを共有。

#### **オフィスネットワーク**

- 社内のファイルサーバやプリンタを利用。
- 社内LANを通じたデータ共有。

---

### まとめ

ネットワークインターフェースは、ネットワーク通信を支える重要な要素です。物理インターフェースと仮想インターフェースの役割を理解し、IPアドレスやMACアドレスの動作を知ることで、ネットワーク全体の仕組みが見えてきます。
次回のネットワークでは上の層であるインターネット層についてみていきます
(備忘録)vscodeとdockerでphpのxdebugをする(mac)

phpのデバッグをすることがあり、自分の環境とぴったりの記事が見つからなかったので何番煎じか分かりませんが残しておきます。
# 環境
vscode
macOS: 15.2
Docker: 27.4.0
php: 7.4

phpアプリはdocker コンテナ内で動いています
# 手順
## コンテナ作成時
コンテナ側へのコピー用にxdebug.iniを作成
```./xdebug.ini
xdebug.client_host = host.docker.internal # mac以外だと変わるかも
xdebug.start_with_request = yes
xdebug.mode = debug
xdebug.client_port = 9003 # ここはlaunch.json(後述)のポートと合わせる
xdebug.log = /var/log/xdebug.log
```

Dockerfileに以下を追記
```
COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini

# xdebugのバージョンはhttps://xdebug.org/docs/compatで確認
RUN pecl install xdebug-3.1.6 && docker-php-ext-enable xdebug
```

### (確認)
コンテナ立ち上げ後にコンテナ内で以下を確認します
```
# xdebug.iniが認識されていることを確認
$ php --ini

# (略)
/usr/local/etc/php/conf.d/xdebug.ini
```
```
# xdebugが実行されているかを確認(with Xdebugがあるかどうか)
$ php --version

PHP 7.4.3 (cli) (built: Feb 26 2020 12:03:25) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Xdebug v3.1.6, Copyright (c) 2002-2022, by Derick Rethans
```

# デバッグ方法

## launch.json
```launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "pathMappings": {
                # コンテナ側とホスト側のソースファイルのパスが一致するようにします。
                "/var/www/html/src": "./src"
            },
            "log": true
        }
    ]
}
```

vscodeのデバッグ機能で"Listen for Xdebug"を実行しておきます。
あとはホスト側のvscodeでブレークポイントを設定するだけです。
複数のコンテナを動かしている場合はそれぞれポート番号を変えて並列でデバッグを動かします。
mysqlでAccess denied for user 'root'@'localhost' (using password: XXX)が出た時の対処法

## コマンド

- mysqlのディレクトリがどこにあるか調べたい場合

```shell
which mysql
```

---

## 困った時😕

- **Access denied for user 'root'@'localhost' (using password: NO) エラーの対処法**

※ update user set password = ‘’ where user=’root’はエラーになる。 mysql verup後にpasswordカラムが消えたらしい

```shell
## ① mysqlをstopさせる
mysql.server stop
mysql -u root

## ② passwordをリセットする
use mysql;
update user set authentication_string='' where user='root';

exit
```

- **Access denied for user 'root'@'localhost' (using password: YES) エラーの対処法**
    - 原因
        - 単純にpasswordが間違っている        
        - Dockerで起動させたDBとローカルで起動したDBのポートが競合してしまい、あっているはずのパスワードが間違っていると認識されてしまう

    - 解消策
        - 正しいPWを入力する
        - ポート3333でローカルから接続し、その後、Dockerで起動した3306ポートに『ポートフォワーディング』する
    
    ```bash
    #データベースコンテナ
    db:
    image: mysql:5.7
    ports:
    - '3333:3306'
    ```
統計検定1級 合格体験記


# はじめに
2024年11月17日に実施された統計検定1級に合格したので，その体験記を書きます．
統計検定に関する基礎的な情報は公式の[統計検定１級｜統計検定：Japan Statistical Society Certificate](https://www.toukei-kentei.jp/exam/grade1/)を参照してください．
また，これらの情報は他のブログや記事でもよくまとめられているので，この記事では省略します．

# 筆者について
- 現在，国立大学経済学部の4年生で，来年から情報系の大学院に進学予定．
- 2023年11月に統計検定1級 統計応用(社会科学)に合格，統計数理には不合格．
- 2024年11月に統計検定1級 統計数理に合格し，統計検定1級を取得

# 結果
去年度の出来は覚えていません．
今年度の統計数理では2，3，5番を選択しました．公式の略解で答え合わせしたところ，次のような出来でした．

2 (1)○ (2)○ (3)○ (4)○ (5)○

3 (1)○ (2)○ (3)× (4)△

5 (1)○ (2)○ (3)○ (4)○ (5)×

結果は，優秀成績賞（評価A）で合格できました．
3番が見た目より難しくて解けなかったことと，4番が簡単そうだったと試験直後に気づいたこともあって，優秀成績賞を取れるとは思ってもみませんでした．
4番では「経験分布関数」という聞いたことのないワードを見て，飛ばしてしまったのが悔やまれます．

# 勉強方法
過去問の解答・解説は，公式の問題集（[日本統計学会公式認定 統計検定 1級 公式問題集［2019〜2022年］ - 実務教育出版](https://books.jitsumu.co.jp/book/b622917.html)など）に加えて，以下のサイトを参考にしました．

- [統計検定 過去問 \| DataArts - 統計検定 1級・準1級対策講座，過去問の解答(解答例)・解説を掲載．](https://www.data-arts.jp/jssc/index.html)
- [【徹底解説】統計検定1級過去問解答（統計数理） \| Academaid](https://academ-aid.com/statistics/jssc-toc)
- [統計検定1級の過去問と解答例 \| 有意に無意味な話](https://starpentagon.net/analytics/stat_certificate_past_problems/)
- [統計検定 1 級 「数理統計」 過去問とその解答例](http://nlp.dse.ibaraki.ac.jp/~shinnou/siryou/toukei-kentei/kakomon.pdf)

## 統計数理

【去年度】

[現代数理統計学 \| 学術図書出版社 - 大学・短大・高専・専門学校向けの教科書出版](https://www.gakujutsu.co.jp/product/978-4-7806-0860-1/)を用いて勉強していました．しかし，今から思うと量が多すぎて消化しきれていなかったように思います． [現代数理統計学の基礎 - 共立出版](https://www.kyoritsu-pub.co.jp/book/b10003681.html)を用いて，問題演習を中心に対策するのが良いと思います．


【今年度】

去年度に受験で，勝手がある程度わかっていたので，今年は過去問を解くだけとしました．
分野としては，暗記が必要な仮設検定周りはほどほどに，計算問題が多い分野を中心に勉強しました．
およそ2，3週間前から過去問を解き始め，最終的には2012-2023年の過去問を解きました．
各年各大問ごとに難易度の評価と，所感をスプレッドシートにまとめ，最後にまとめて復習しました．
この方法はどの勉強にも有効だと思うので，ぜひ参考にしてください．
![toukei-kentei-goukaku-img1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819031/e8867049-d213-4f5d-bafd-e35f235f0328.png)

## 統計応用
去年度の記憶になるので，やや曖昧なことも多くなるかと思います．ご了承ください．

経済学部で学んだことを復習する動機づけにしたかったので，統計応用は「社会科学」を選びました．
統計応用は，どの科目も問題のクセが強く，王道の勉強パターンは確立されていないような印象があります．ですが，「理工学」は，統計数理に似た問題が多く，試験問題の難易度・質のブレがまだ少ないように個人的には感じました．，合格を一番の目標にするのであれば，「理工学」を選ぶのがセオリーかなと思います．
私は，公式の[統計検定準1級対応 統計学実践ワークブック | 学術図書出版社 ](https://www.gakujutsu.co.jp/product/978-4-7806-0852-6/)と過去問を中心に勉強し，ときどき[計量経済学 \| 有斐閣](https://www.yuhikaku.co.jp/books/detail/9784641053854)も読んでいました．正直，過去問が一番大事だと思います．

# 最後に
統計検定1級では，統計学以上に，大学1，2年次の数学をしっかり理解していることが求められます．逆にいえば，理工系や経済系の学生であれば，それほど苦労せずに合格はできると思います．いい数学の演習にもなりますし，ついでに履歴書に書くことも増やせるので，コスパのいい資格試験だと思います．
ユーザーにとっての「面白さ」を明確にする



# ユーザーにとっての「面白さ」を明確にする


### 目次

- ステージのギミックをひたすら考える
- 面白さの「核」は何かを意識する


## ステージのギミックを考える
### 自分は現在以下のようなゲームを製作中です

1. プレイヤー自身の動きを記録する
1. カゲが記録したプレイヤーの動きを再現する
1. 連携プレイで障害を突破する
1. ステージをクリアする

1番の「プレイヤー自身の動きを記録する」の画像↓
![スクリーンショット 2025-01-11 200559.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/d0dce194-f908-e6cf-7be1-5deda559e521.png)

2番の「カゲが記録したプレイヤーの動きを再現する」の画像
![スクリーンショット 2025-01-11 200721.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/ca55c3d1-ea86-5195-531a-f20067a9915b.png)

3番の「連携プレイで障害を突破する」の画像
![スクリーンショット 2025-01-11 201304.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/19eff051-ccd8-e84b-5532-9cbf3643bd83.png)

4番の「ステージをクリアする」の画像
![スクリーンショット 2025-01-11 210909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/a36e8a29-2b36-b521-0f80-c670d19bf8ca.png)




### このゲームを作ったきっかけ
- もともとこのゲームは自分の思い付きで作ったゲームでした。
「なんとなくこんなの作ったら面白いんじゃね？」で作ったゲーム。でも作ってみたらシステムとしては面白かった。だから特に面白さの核を考えずに作り始めたゲームでした。

### ステージのアイデア出してるけどなーんか微妙・・・
- このゲームでは何個かステージが用意されていてそのステージにあるギミックを解くというものです。なので何も考えずにゲームを作り始めた自分は面白そうだと思うステージを何も考えずに出し始めます。しかしいざそのステージのギミックを実装してみると

　　　　　　　　**「あれ？意外と微妙だな・・・」→「作り直すか・・・」→
　　　　　　　　　「あれ？意外と微妙だな・・・」→「作り直すか・・・」→・・・**

これの無限ループになってしまいました。


## 面白さの「核」は何か意識する
### 自分の頭の中でなぜこの体験が面白いかを考える
- つまり、自分でこのゲームの何が面白いかを言語化できていなかったんですよね。この時に当時よく見ていた「桜井政博のゲーム作るには」で桜井さんは自分のゲームについて非常に言語化できている場面が動画の要所要所で伝わってきました。そこで自分は「このゲーム体験の何が面白いか」を一度整理することにしました。

### このゲームの面白さの核は「自分のアイデアが予想通りに動作したときの気持ちよさ」と判明
- 整理を行った結果、**「自分のアイデアが予想通りに動作したときの気持ちよさ」** と認識することができました。この核を基に再度ステージのギミック製作に取り掛かると今までよりも面白いステージギミックのアイデアを多く出すことができました。
<img width="350" alt="スクリーンショット 2025-01-11 203235.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/d859c03f-82cf-aed3-5f06-90f5b3de44bc.png">
<img width="350" alt="スクリーンショット 2025-01-11 203330.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/d3c9318d-b2c3-443e-2e9b-47a7113db0f9.png">
<img width="600" alt="スクリーンショット 2025-01-11 205132.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/fb4bf47b-0d23-6e0d-99ad-d7acea28bd83.png">


## まとめ
- 今回記述したことはゲーム開発者にとって当然のことなのだと思います。なので一般のゲームには面白さの「核」が当然存在していることでしょう。この核をより多く調査してまずは見識を深めたいと感じました。

■「桜井政博のゲーム作るには」
https://www.youtube.com/@sora_sakurai_jp/videos
rsyslogの設定方法

# 1.そもそもrsyslogとは
Unix系OSのシステムのログを記録するシステムのこと

# 2.rsyslogの具体的な設定方法
さっそくrsyslogのログの具体的な設定方法をご紹介します。
PostgreSQLのログを/var/log/pg_log/postgresql.logに出力させるために、rsyslogを使う方法を紹介します。
OS：Redhat8.10
PostgreSQL：Postgresql-16

----***PostgreSQLの設定変更***----
postgresql.confファイルでPostgreSQLのログをsyslogに出力するように設定します。
・postgresql.confを開きます
```
sudo vi /var/lib/pgsql/16/data/postgresql.conf
```
・以下の設定を確認または追加します
```
logging_collector = off           # ログコレクタを無効にする
log_destination = 'syslog'        # syslogへの出力を有効にする
syslog_facility = 'LOCAL0'        # syslogのファシリティを指定
syslog_ident = 'postgresql'       # syslogの識別子を設定
```
これにより、PostgreSQLはsyslogを通してログを出力します。

----***rsyslogの設定***----
次に、rsyslogでLOCAL0のログを特定のファイルに出力する設定を行います。
・rsyslogの設定ファイルを編集します
```
sudo vi /etc/rsyslog.d/postgresql.conf
```
・以下の内容を追加します
```
if $programname == 'postgresql' then /var/log/pg_log/postgresql.log
& stop
```
これにより、PostgreSQLのログは/var/log/pg_log/postgresql.logに出力されます。

----***ログディレクトリの作成と権限設定***---
・ログの出力先ディレクトリが存在しない場合は作成します
```
sudo mkdir -p /var/log/pg_log
```
・適切な権限を設定します
```
sudo chown postgres:postgres /var/log/pg_log
sudo chmod 755 /var/log/pg_log
```

----***rsyslogの再起動***----
設定を有効にするためにrsyslogを再起動します
```
sudo systemctl restart rsyslog
```

----***PostgreSQLのリロードまたは再起動***----
postgresql.confの変更を反映させるために、PostgreSQLをリロードまたは再起動します
・リロード
```
sudo systemctl reload postgresql-16.service
```
・再起動（必要に応じて）
```
sudo systemctl restart postgresql-16.service
```
これで、PostgreSQLのログが/var/log/pg_log/postgresql.logに出力されるようになります。

# 3.PostgreSQLのログが正しく出力されているかの確認
上記設定を行ったログ配下に、PostgreSQLのログが正しく出力されているかを確認します。

----***PostgreSQLのログを生成するアクションを実行***----
ログファイルが生成されるか確認するためには、PostgreSQLで何らかのアクションを実行してログエントリを生成する必要があります。例えば、無効なクエリを実行してエラーを発生させることでログを確認できます。
PostgreSQLに接続して、無効なクエリを実行します。この操作により、エラーログが生成されるはずです。
```
psql -U postgres
```
接続後、次のような無効なクエリを実行します
```
SELECT * FROM non_existing_table;
```
このクエリが失敗すると、エラーログが生成されます。

----***ログファイルの存在確認***----
指定したディレクトリにログファイルが作成されているかを確認します。例えば、/var/log/pg_log/postgresql.logにログが出力される場合、次のコマンドを使用して確認できます。
```
ls -l /var/log/pg_log/
```
このコマンドで、postgresql.logファイルが存在するかをチェックします。

----***ログファイルの内容確認***----
ログファイルが存在する場合、その内容を確認します。新しいエントリが追加されているかをリアルタイムで確認するためには、tailコマンドを使用します。
```
tail -f /var/log/pg_log/postgresql.log
```
このコマンドは、ログファイルに新しいエントリが追加されるたびに表示します。これにより、PostgreSQLのログが正しく出力されているかを確認できます。

----***ログファイルの内容を静的に確認***----
tail -fコマンドを使用せずに、ログファイルの内容を静的に確認することもできます。例えば、ログファイルの最初の部分を確認するには、次のコマンドを使用します。
```
head -n 20 /var/log/pg_log/postgresql.log
```
ファイル全体を確認するには次のコマンドを使用します
```
cat /var/log/pg_log/postgresql.log
```

----***rsyslogのログ確認***----
rsyslogがログを正しく処理しているかを確認するために、rsyslogのログも確認できます。rsyslogのログファイルは通常/var/log/syslogや/var/log/messagesにあります。
```
tail -f /var/log/syslog
```
GROWIで目次を表示するプラグインを作りました

[オープンソースのWikiであるGROWI](https://growi.org/ja/)にはプラグイン機能が用意されています。自社のデータを表示したり、表示をカスタマイズするのに利用できます。

今回は、GROWIプラグインとして目次を表示するプラグインを作りました。GROWIではもともと、ページの右側に目次を表示しています。このプラグインでは、ページの中に目次を表示するのが特徴です。

## プラグインの動作

Markdownは以下のように、 `## 目次` のように記述します。そうすると、このセクションの中に目次が表示されます。この他、以下の書き方にも対応しています。

```markdown
## TOC

## Table of contents

## 目次

## 目录
```

![image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/fd96b090-d790-3a97-7f0b-acccfb2cd9dc.jpeg)


## 特徴

本プラグインの特徴としては、[remarkjs/remark\-toc](https://github.com/remarkjs/remark-toc?tab=readme-ov-file#options)というRemarkプラグインを利用している点が挙げられます。GROWIはMarkdownのレンダリングにRemarkを採用しているので、既存のRemarkプラグインを取り込んで利用できる可能性があります（可能性、というのは試した限り利用できないプラグインが多かったからです…）。

## コードについて

コードは[goofmint/growi\-plugin\-toc: This GROWI plugin generates table of contents in page\.](https://github.com/goofmint/growi-plugin-toc?tab=readme-ov-file)にて公開しています。ライセンスはMIT Licenseになります。

## プラグインを追加する

利用する際には、GROWIの管理画面の `プラグイン` にて追加してください。URLは `https://github.com/goofmint/growi-plugin-toc` です。

![Admin](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/f5b3e2d3-ccf3-d536-d59e-7301ea1b2f7e.jpeg)

## コードについて

前述の通り、本プラグインではRemarkプラグインを利用しています。そのため、コードはほとんどありません。以下のように、 `remarkPlugins` と `rehypePlugins` にRemarkプラグインを追加するだけです。

```tsx:client-entry.tsx
import rehypeSlug from 'rehype-slug';
import remarkToc from 'remark-toc';

const activate = (): void => {
  if (growiFacade == null || growiFacade.markdownRenderer == null) {
    return;
  }
  const heading = '(table[ -]of[ -])?contents?|toc|目次|目录';
  const { optionsGenerators } = growiFacade.markdownRenderer;
  const originalCustomViewOptions = optionsGenerators.customGenerateViewOptions;
  optionsGenerators.customGenerateViewOptions = (...args) => {
    const options = originalCustomViewOptions ? originalCustomViewOptions(...args) : optionsGenerators.generateViewOptions(...args);
    // TOCプラグイン追加（表示用）
    options.remarkPlugins.push([remarkToc, { heading }] as any);
    options.rehypePlugins.push(rehypeSlug as any);
    return options;
  };

  // For preview
  const originalGeneratePreviewOptions = optionsGenerators.customGeneratePreviewOptions;
  optionsGenerators.customGeneratePreviewOptions = (...args) => {
    const preview = originalGeneratePreviewOptions ? originalGeneratePreviewOptions(...args) : optionsGenerators.generatePreviewOptions(...args);
    // TOCプラグイン追加（プレビュー用）
    preview.remarkPlugins.push([remarkToc, { heading }] as any);
    preview.rehypePlugins.push(rehypeSlug as any);
    return preview;
  };
};
```

## GROWIコミュニティについて

プラグインの使い方や要望などがあれば、ぜひGROWIコミュニティにお寄せください。実現できそうなものがあれば、なるべく対応します。他にもヘルプチャンネルなどもありますので、ぜひ参加してください！

[GROWI Slackへの参加はこちらから](https://communityinviter.com/apps/wsgrowi/invite)

## まとめ

GROWIプラグインを使うと、表示を自由に拡張できます。足りない機能があれば、どんどん追加できます。ぜひ、自分のWikiをカスタマイズしましょう。

[OSS開発wikiツールのGROWI | 快適な情報共有を、全ての人へ](https://growi.org/ja/)
画像処理うんちくインデックス

今まで自分の書いた 画像処理うんちくをまとめました。

# 色効果

- [セピア調フィルタのうんちく](https://qiita.com/yoya/items/9c237caf86ea5ade2617)
- [グレースケール画像のうんちく](https://qiita.com/yoya/items/96c36b069e74398796f3)
- [色変換行列のうんちく](https://qiita.com/yoya/items/95bfb8659f37ea8a2800)

# 輝度レベル

- [ガンマ補正のうんちく](https://qiita.com/yoya/items/122b93970c190068c752)


# 座標変換

- [画像リサイズ処理のうんちく](https://qiita.com/yoya/items/95c37e02762431b1abf0)
- [画像リサイズのうんちく (補間フィルタ)](https://qiita.com/yoya/items/f167b2598fec98679422)

# ビット深度

- [RGB ビット深度のうんちく (前編) 〜 前提知識](https://qiita.com/yoya/items/41b00127b0b1fea8c4f1)
- [RGB ビット深度のうんちく (中編) 〜 実数型と整数型の変換](
https://qiita.com/yoya/items/6ee02736f1db8bdd520e)
- [RGB ビット深度のうんちく (後編) 〜 整数型同士の変換](
https://qiita.com/yoya/items/3509bbb54c0732865882)

# 画像フォーマット (番外編)


- [JPEG の解像度 DPI 値うんちく](https://qiita.com/yoya/items/1133ea1fd6ff8effa46a)
- [Exif Orientation のうんちく](https://qiita.com/yoya/items/4e14f696e1afd5a54403)
- [PNG 画像のガンマ補正](https://qiita.com/yoya/items/ce8dffc8a8a19746d87c)
- [ちょっぴり壊れたICCプロファイルをもつ JPEG 画像のブラウザ表示](https://qiita.com/yoya/items/e8676c45592915996c61)
- [WebP Lossless はちゃんと Lossless してます](https://qiita.com/yoya/items/a000c2e123d448a37f47)
- [WebP の色劣化問題の改善](https://qiita.com/yoya/items/f5ef9b66b556eda9e6bf)


# その他

- [MSE/PSNR vs SSIM の比較画像紹介](https://qiita.com/yoya/items/510043d836c9f2f0fe2f)
【個人用】AWS Solution Architect Associate対策ノート(アプリ統合編)

## 扱う内容

・SQS
・SNS

# 【SQS】

## キューの種類

SQSには２種類のキューがある。作成時に選択し、作成後の変更は不可能

### 標準キュー
メッセージの処理順序はガン無視して処理するパターン
処理順序の関係がないおかげで、スループットは高い

### FIFOキュー
必ず古いメッセージから処理するパターン
標準キューより優れているが、金がかかる

## ポーリング
キューからメッセージを取得するには、データの送信要求として**ポーリング**を実施する

### ショートポーリング
問い合わせ後、メッセージがあればメッセージを返し、なければ即座に「おめーのメッセージねーから」というレスポンスを返す

### ロングポーリング
問い合わせ後、メッセージがあればメッセージを返し、ない場合は、指定した時間を待って、それでもなおメッセージがない場合に「おめーのメッセージねーから」というレスポンスを返す


## 可視性タイムアウト
SQSでは、以下の流れでメッセージの取得から削除までが行われる

①キューにメッセージが追加される
↓
②アプリがメッセージを取得し、メッセージの通りに処理を行う
(この時点で、メッセージはまだキューに残っている)
↓
③アプリが処理を終えたら、キューに対して、取得したメッセージの削除依頼を出す
↓
④キューがメッセージを削除する

アプリなどのクライアントがメッセージを取得してから削除依頼を出すまでの間に、そのメッセージがほかのクライアントから見えないようにする設定がある。これを**可視性タイムアウト**という(デフォルトでは**30秒**)

これは、メッセージが見えてしまっていることによって、処理中に別のクライアントがそのメッセージを取得しないようにするためのもの
ただし、可視性タイムアウトが短いと、処理中にタイムアウトが終了し、本来消さなきゃいけないはずのメッセージを別のクライアントが取得してしまう恐れがあるので、処理時間に合わせて可視性タイムアウトの時間も設定する必要がある

## デッドレーターキュー
エラーが一定の回数に達したメッセージを隔離するキュー

## 遅延キューとメッセージタイマー
**遅延キュー**または**メッセージタイマー**は、メッセージの送信者が、送ったメッセージを一定時間経過後に受信させたい場合に使用する
○時間後に受信するようにする、など

遅延キューはキュー全体に作用し、メッセージタイマーは特定のメッセージに対して作用する

## キューへのアクセス
キューにアクセスするには、**SQSアクセスポリシー**、**IAMポリシー**、またはその両方にアクセス許可を設定する必要がある


# 【SNS】
React19からの新フックをまとめてみた

React19へのアップデートがあったので、ドキュメントを読んで簡単に新機能まとめて整理してみました。

## React18までの課題

### 送信中（pending）の状態管理
ボタンの無効化やローディングスピナー表示のためにuseStateを用いて「送信中」の状態を管理。

### エラー発生時の処理
非同期リクエストが失敗した場合、適切なエラーメッセージをユーザーに表示する処理を追加。

### 楽観的更新
サーバーにリクエストを送信する前にUIを更新し。エラー発生時には元に戻す処理を手動で実装。

### 複数リクエストの順序管理
非同期リクエストが複数発生した際に順序を正しく保つためのロジックを実装しなければいけない。

## React19
React19では、上記の「送信中の状態」「エラー処理」「成功時の画面更新」などの状態管理を簡略化するための仕組みが強化された。

また、エラーが発生した場合は自動的に状態をロールバックする仕組みが組み込まれるようになった。

### 状態管理が自動化
React19では、「送信中の状態」「エラー処理」「成功時の画面更新」といった状態管理を簡略化するための仕組みが強化されました。これにより、状態管理のためのコードが大幅に削減できます。

### 新しいhooksの追加と機能まとめ
・useActionState：アクションの一般的なユースケースを簡単に実現するためのhooks。第一引数には非同期関数（アクション）を記述してその結果やエラーを管理する。第二引数にはアクションの初期状態を指定する。
状態（成功・失敗・エラーなど）とアクションを一つのhooksで扱うことができうため、コードが見通しやすくなる（大規模なコンポーネントでも状態管理が煩雑になりにくい）

・useFormStatus：HTMLフォームと連携し、フォーム送信の状態を管理するために使用される。これによってフォームの送信中の状態（pending）、エラー、成功状態などを簡単に追跡することができる。

・useOptimistic：サーバーリクエストの結果を待つことなく、UIを先に更新する手法（以下に使い方を記載）

## Reac18のコード例
```javascript
function UpdateName(){
	//入力された名前を保持する
	const[name,setName]=useState('');
	//エラーが発生した場合にその内容を保持する
	const[error,setError]=useState(null);
　　　　　　//非同期処理中かどうかを示す
	const[isPending,setIsPending]=useState(false);

	const handleSubmit=async()=>{
		setIsPending(true);
		setError(null);
		try{
			await updateName(name);
			console.log('update successful');
		}catch(e){
			setError(e.message);
		}finally{
			setIsPending(false);
		}
	}

	return(
		<div>
		<input value={name} onChange={(e)=>setName(e.target.value)}/>

		<button onClick={handleSubmit} disabled={isPending}>
		{isPending?'Updating...':'Update'}
		</button>
		{error&& <p style={{color:'red'}}>{error}</p>}
		</div>
	);
}
```

## Reac19のコード例
```javascript
function UpdateName(){
	//第一引数は初期値、第二引数はアップデートの際に実行する関数
	const[optimisticName,setOptimisticName]
	=useOptimistic('',
	(currentValue,newValue)=>newValue);

//非同期処理関数
	const handleSubmit=async()=>{
		//現在の名前の状態を即座に更新、UIに反映
	try{	setOptimisticName(optimisticName);
		//非同期でサーバーに名前を更新するリクエストを送信する
		//この間にサーバーからの応答を待機する
		await updateName(optimisticName);
		console.log('名前の更新に成功しました');
	}catch(error){
		console.error('名前の更新に失敗しました',error);
		setError('名前の更新に失敗しました。もう一度お試しください')
	}
	};
	return(
		<div>
		<input
		value={optimisticName}
		onChange={(e)=>setOptimisticName(e.target.value)}
		/>
		<button onClick={handleSubmit}>
		Update
		</button>
		 {error && <p style={{ color: "red" }}>{error}</p>}
		</div>
	);
}

//JSX構造
return(
	<div>
	<input
	value={optimisticName}
	onChange={(e)=>setOptimisticName(e.target.value)}
	/>
	<button onClick={handleSubmit}>Update</button>
	</div>
)
```
e-Statの活用例②

# e-Statのデータから都道府県の空き家率をヒストグラムで見る
今回は各都道府県について空き家の総数に占める比率を求め、その比率をヒストグラムにしていきます。
## 使うデータ
『住宅・土地統計調査 令和５年住宅・土地統計調査 住宅及び世帯に関する基本集計 全国・都道府県・市区町村 』

## 実行環境
Google Colaboratory
## 分析準備
![スクリーンショット 2025-01-11 151925.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/dceee466-d243-490b-dfa1-6ff0df79b4b0.png)

![スクリーンショット 2025-01-11 152104.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/581d4832-187f-9e98-391d-a806f74481e1.png)

![スクリーンショット 2025-01-11 152205.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/78b40674-2bb9-8c4a-3a3e-30fb8d2b43a8.png)

![スクリーンショット 2025-01-11 152255.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/64db9b6b-b22b-1b0c-e26d-9f1e725fb040.png)

![スクリーンショット 2025-01-11 152405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/758f399d-6481-229c-5ce1-d359e017603c.png)

![スクリーンショット 2025-01-11 152514.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/b14673dc-9845-4a8a-77d7-7b75f19e2291.png)

![スクリーンショット 2025-01-11 152544.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/a28f578e-b4b9-6a57-99dc-f4c9a7618778.png)
ダウンロード設定の際に、ページ下部で桁区切りのカンマをなくしておくと少しデータ加工が楽になります。

ここからGoogle Colaboratoryでデータ加工していきます。

Google Colaboratory上でコードを実行するにはGoogle Driveと接続する必要があります。その手順は[e-Statの活用例①](https://qiita.com/Sapolas/items/70c4a0e05438d9c57b10)の前半で紹介しているので、こちらをご覧ください。

```python:sample.py
# ダウンロードファイルの名前はご自身のフォルダにあるものに修正してください。
import pandas as pd
house_data = pd.read_csv('FEH_00200522_250111141525.csv')
house_data.head()
```
結果
![スクリーンショット 2025-01-12 113204.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/e0d7c8fb-d7c4-761c-1a74-d4dcaa5a93f3.png)

このデータから都道府県だけで区分したデータを抽出するために次のコードを実行します。
```python:sample.py
akiya_data = house_data['全国、都道府県、21大都市'].str.endswith(('都','道','府','県'))
akiya = house_data[akiya_data]
akiya.head()
```
結果
![スクリーンショット 2025-01-12 113536.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/9bd96112-664a-3555-3cfa-51759a44f5a9.png)

今回の分析では空き家数を総数で割った「空き家率」が必要なため、次のコードを実行します。
```python:sample.py
akiya['akiya_rate'] = akiya['空き家']/akiya['総数']
akiya
```
結果
![スクリーンショット 2025-01-12 113940.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/f858901f-eed2-485e-eb23-d4918673ac1f.png)

これで準備完了です。

## 分析
ヒストグラムを描画するコードは次のようになります。
```python:sample.py
import matplotlib.pyplot as plt
plt.hist(akiya['akiya_rate'])
```
結果
![ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/1aea6879-2067-d13a-be57-bc99085d6d86.png)

これで目的のヒストグラムを描画することができました！
## おまけ
ヒストグラムだけを出力した段階では、各地の空き家率をどのように比べると効果的なのかはわかりません。しかし、直感的に見て0.16あたりにボリュームゾーンを持った山と0.2あたりにボリュームゾーンを持った山が重なっているように見えます。

空き家率が0.2を超えるのはどのような地域なのでしょうか？
それを教えてくれるコードは次のようになります。
```python:sample.py
akiya_20 = akiya[akiya['akiya_rate']>0.20]
akiya_20
```
結果
![スクリーンショット 2025-01-12 115340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957867/44276098-0ab1-5672-61d0-d3c984885cb2.png)
これらの地域を見ると、大都市圏への移動距離や移動時間などが空き家率と関係がありそうです。であれば、次はそれに関するデータを入手し分析することで新しい発見があるかもしれません！
circuitjsの作法 その38

# 概要
circuitjsを調査してみた。
練習問題やってみた。

# 練習問題
リレーで、Dフリップフロップ回路を作れ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/8eff4934-248f-51c4-cea8-3106aad635d1.png)


# ネットリスト

```
$ 1 0.000005 10.20027730826997 50 5 50 5e-11
178 448 336 448 432 6 2 0.2 0 0.05 1000000 0.02 20 0.015 0.005 0
178 672 336 672 432 6 2 0.2 0.000004999899877005178 0.05 1000000 0.02 20 0.015 0.005 0
178 848 336 848 432 6 2 0.2 0.24906600249838656 0.05 1000000 0.02 20 0.015 0.005 1
R 304 96 240 96 0 0 40 5 0 0 0.5
g 416 432 416 448 0 0
g 640 432 640 448 0 0
g 816 432 816 448 0 0
w 304 96 320 96 0
w 320 96 320 160 0
w 320 160 320 192 0
w 320 192 352 192 0
w 432 192 432 240 0
w 432 240 416 240 0
w 416 240 416 336 0
w 448 336 448 96 0
w 320 96 448 96 0
w 672 336 672 304 0
w 640 272 640 336 0
w 816 304 816 336 0
w 848 272 848 336 0
s 352 192 432 192 0 1 false
178 176 336 176 432 6 4 0.2 0 0.05 1000000 0.02 20 0.015 0.005 0
g 144 432 144 448 0 0
w 288 192 320 192 0
w 224 192 208 192 0
x 253 155 284 158 4 24 clk
x 356 157 373 160 4 24 D
w 1280 96 1280 128 0
w 1072 96 1072 128 0
162 1280 128 1280 176 2 default-led 1 0 0 0.01
162 1072 128 1072 176 2 default-led 1 0 0 0.01
g 1264 432 1264 448 0 0
g 1056 432 1056 448 0 0
w 1232 272 1232 336 0
w 1200 304 1200 336 0
w 992 272 992 336 0
w 1024 336 1024 304 0
g 1200 432 1200 448 0 0
g 992 432 992 448 0 0
178 1232 336 1232 432 6 3 0.2 0.000003333288889481658 0.05 1000000 0.02 20 0.015 0.005 0
178 1024 336 1024 432 6 3 0.2 0.24875621893638472 0.05 1000000 0.02 20 0.015 0.005 1
w 144 336 144 192 0
w 144 192 208 192 0
w 320 336 320 304 0
w 176 304 176 336 0
w 320 304 320 192 0
w 224 336 224 304 0
w 272 336 272 304 0
w 176 304 224 304 0
w 224 304 272 304 0
w 272 304 320 304 0
w 672 304 672 96 0
w 848 272 848 96 0
w 1024 304 1024 96 0
w 1232 272 1232 96 0
w 560 96 672 96 0
w 672 96 848 96 0
w 848 96 1024 96 0
w 1024 96 1072 96 0
w 1072 96 1232 96 0
w 1232 96 1280 96 0
w 720 336 720 304 0
w 896 272 896 336 0
w 1120 304 1120 336 0
w 1328 272 1328 336 0
w 640 272 896 272 0
w 720 304 816 304 0
w 992 272 1328 272 0
w 1120 304 1200 304 0
w 912 432 912 480 0
w 192 432 192 480 0
w 464 480 912 480 0
w 1248 432 1248 480 0
w 912 480 1248 480 0
w 240 432 240 512 0
w 1040 432 1040 512 0
w 736 432 736 512 0
w 576 512 736 512 0
w 736 512 1040 512 0
w 256 432 256 544 0
w 688 432 688 544 0
w 256 544 688 544 0
w 304 432 304 576 0
w 864 432 864 576 0
w 304 576 864 576 0
w 1344 432 1344 544 0
w 688 544 1344 544 0
w 1136 432 1136 560 0
w 1136 560 1136 576 0
w 864 576 1136 576 0
w 496 336 496 96 0
w 448 96 496 96 0
w 496 96 560 96 0
w 240 512 480 512 0
w 432 432 432 480 0
w 512 432 512 512 0
w 480 512 512 512 0
w 512 512 576 512 0
w 432 480 464 480 0
w 192 480 432 480 0
s 224 192 288 192 0 1 true
w 1072 176 1072 224 0
w 1072 224 1072 336 0
w 1280 176 1280 336 0

```

以上。
Go言語のgo-sixelパッケージを使ってターミナル内に画像を表示する

# はじめに

Go言語でCLIのログ分析ツールを開発しています。

https://qiita.com/twsnmp/items/82bc6e0e987ee269d26f

このツールの機能としてグラフを画像で出力する機能があります。

![](https://assets.st-note.com/img/1716674447895-OPrP8zMSUQ.png?width=1200)

のようなグラフです。このグラフ画像をターミナル内に表示できそうなgo-sixelというGo言語のパッケージを見つけたので紹介します。


# go-sixelパッケージ


https://github.com/mattn/go-sixel/tree/master


# サンプルプログラム

```go:main.go
package main

import (
	"image"
	_ "image/gif"
	_ "image/jpeg"
	_ "image/png"
	"log"
	"os"

	"github.com/mattn/go-sixel"
)

func main() {
	if len(os.Args) != 2 {
		log.Fatalln("Usage: sixel [image file]")
	}
	fp, err := os.Open(os.Args[1])
	if err != nil {
		log.Fatalln(err)
	}
	img, _, err := image.Decode(fp)
	if err != nil {
		log.Fatalln(err)
	}
	sixel.NewEncoder(os.Stdout).Encode(img)
}

```

指定したファイルをsixelに変換してターミナルに表示できます。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874862/bc149734-d01c-c8eb-13b9-a7578e90c963.png)

# 余談

テストは成功したので、TWSLAに組み込んでみようと思います。

次の日に追記：

組み込みできました。

![2025-01-13_06-16-28 (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874862/f7a5f27d-f0f4-094e-bc0b-a879ad51c69d.gif)
ハンバーガーメニュー

アコーディオン形式で開閉
メニューが開いている間、背景のスクロールを無効化
メニュー自体はスクロール可能

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="zxOWaxd" data-pen-title="ハンバーガーメニュー" data-user="oheyril" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/oheyril/pen/zxOWaxd">
  ハンバーガーメニュー</a> by oheyril (<a href="https://codepen.io/oheyril">@oheyril</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://public.codepenassets.com/embed/index.js"></script>
THINO Tips: 日付ピッカーから日付を入力する

THINO（ObsidianのCommunity Plugin）のTipsです。

https://thino.pkmer.net/en

@（アットマーク）を入力することで日付ピッカーを表示できます。

![スクリーンショット 2025-01-12 11.46.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762653/696b211a-f03d-bd04-51ca-9323e9a684be.png)

日付を選択するとこんな感じ。自動的にTODOモードに切り替わります。
![スクリーンショット 2025-01-12 11.47.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762653/2eabd418-acd7-8516-c7ca-9d88c9969b34.png)
LEDを1Hzで点滅させる回路を作成する

# verilogの基本的な回路を作成してみる

50MHzのクロックを入力として、LEDを1Hzで点滅させる回路を作成してみます。

入力
- 50MHzのクロック
- リセット信号

出力
- 1Hzのクロック
- LED1: 1Hzのクロックを使って点滅
- LED2: リセット信号をそのまま出力
- LED3: 1を出力

LED3は、回路が正常に動作しているか確認するたに追加しておきます。
LED3は、常に点灯となります。

# 作成した回路

```verilog:blink.v
module blink(
    input wire clk_in,   // 50MHz
    input wire n_rst,      // reset
    output reg led1,   // 1Hzの出力
    output wire led2,
    output wire led3
);

    localparam DIVISOR = 25_000_000; 
    reg [24:0] counter;  // 2^25>25M

    always @(posedge clk_in) begin
        if (!n_rst) begin
            counter <= 0;
            led1 <= 0;
        end else begin
            if (counter == DIVISOR - 1) begin
                counter <= 0;
                led1 <= ~led1;  // 出力を反転してON/OFFを切り替え
            end else begin
                counter <= counter + 1;
            end
        end
    end
    assign led2 = !n_rst;
    assign led3 = 1;
    
endmodule
```

Sourcesに追加してSynthesisを実行します。

Synthesisが正常に終了したら、Open Synthesized Designをクリックして開きます。

I/O Portsの設定を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56724/0e075cc1-0d02-e9bb-2a7f-7cd4be0d594a.png)


Constraintsの制約としてIO Portの設定をしてもいいです。

```tcl:constraints.tcl
set_property PACKAGE_PIN N18 [get_ports clk_in]
set_property IOSTANDARD LVCMOS33 [get_ports clk_in]

set_property PACKAGE_PIN K17 [get_ports led2]
set_property IOSTANDARD LVCMOS33 [get_ports led2]
set_property PACKAGE_PIN H18 [get_ports led3]
set_property IOSTANDARD LVCMOS33 [get_ports led3]

set_property PACKAGE_PIN E19 [get_ports led1]
set_property IOSTANDARD LVCMOS33 [get_ports led1]
set_property PACKAGE_PIN T19 [get_ports n_rst]
set_property IOSTANDARD LVCMOS33 [get_ports n_rst]
```

# 実行

Generate BitstreamをクリックしてBitstreamを生成します。

Open Hardware Managerをクリックして、Hardware Managerを開きます。

Program Deviceをクリックして、FPGAに書き込みます。

# 結果

https://x.com/GeekMasahiro/status/1878272512049475996

# まとめ

FPGAの回路を作成して、FPGAに書き込むまでの手順を確認しました。

EBAZ4205のIO基板のスイッチは負論理なので、LED2の出力が反転しているので、注意が必要でした。
最初、LEDが点滅しなくて、？？？となりましたが、LED2の出力が反転していることに気づきました。
【ChatGPT】自己分析のためのセッションを行なうPromptです。


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

　今回は、自己分析のためのセッションを行なうPromptです。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はありません。あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　ではさっそく、【本題】です。

　今回は、
　　自己分析のための
　　　セッションを行なうPromptです。

　まずは、自己分析とは何かを
　　Perplexityで調べました。
>（Perplexity調べ）
>自己分析とは、自分自身を理解するための分析作業であり、過去の経験や感情、行動を振り返ることで、自分の特徴、価値観、強み・弱み、将来像を明確にすることを指します。
>
>特に就職活動では、自分の「軸」を見つけるために重要であり、自己PRや志望動機の具体化、適職選び、面接対策などに役立ちます。

　おのれのことを振り返り、
　　そこから長所・短所を知り、
　　　自己改善に役立てることです。

　こちらが
　　そのPromptです。

　書き換える部分は
　　ありません。

　ただし、
　　やり取りすることになりますので
　　　思索する時間があるときに
　　　　お使いくださいますように。

```Text:自己分析セッションPrompt
# 自己分析セッション

### **1. あなたの価値観を明確にする**
1. あなたが何よりも大切にしている価値観を3つ挙げてください。それぞれ、理由も簡単に教えてください。
2. あなたの価値観が他者や状況と衝突したエピソードを教えてください。その時どう対応しましたか？
3. 現在の環境や人間関係で妥協していると感じる価値観や信念はありますか？もしあれば、それを挙げてください。

### **2. 自分の強みと弱みを掘り下げる**
4. 過去に最も成果を出せたと感じる場面を思い出してください。その理由を3つのキーワードで表してください。
5. 日常生活や仕事で「うまくいかない」と感じる瞬間を3つ挙げてください。その原因を分析してみましょう。
6. 他者から見たあなたの長所と短所は何だと思いますか？他人から言われたことを含めて教えてください。

### **3. モチベーションと感情に向き合う**
7. あなたが日々ワクワクする出来事や要因を3つ挙げてください。それらはなぜワクワクしますか？
8. 最近、最も嬉しかった出来事を3つ挙げてください。それぞれの理由を教えてください。
9. ネガティブな感情（怒り、悲しみ、不安など）を感じた瞬間を3つ挙げ、その原因を考えてみましょう。

### **4. キャリアや未来を描く**
10. あなたが仕事で絶対に譲れない要件を3つ挙げてください。
11. 1年後、3年後、5年後に達成したい目標を、それぞれ1行で書いてください。
12. 将来、環境や状況が大きく変化した場合、それにどう対応したいですか？3つの大きな変化を想定してください。

### **5. ライフバランスを整える**
13. あなたが10年後に実現したい理想の生活像を、思いつくままに描いてみてください。
14. 現在の「仕事」「プライベート」「健康」の満足度を、それぞれ10点満点で評価してください。
15. ライフバランスを改善するために、取り組みたいことを挙げてみましょう。

### **6. 振り返りと学びを深める**
16. 過去に成功したエピソードを1つ挙げてください。その時に発揮した強みは何ですか？
17. 挑戦しようか迷っていることを1つ挙げてください。そのリスクを3つ考えてみてください。
18. 過去の失敗体験から得た教訓を3つ挙げ、それをどのように活用していますか？

### **7. 行動と習慣を改善する**
19. あなたが毎日続けている習慣を3つ挙げてください。その効果について教えてください。
20. 今後5年間で習得したいスキルや知識を3つ挙げ、それを実現するための計画を考えてみましょう。
21. 現在、自分に足りないと感じるスキルや能力を挙げてください。それを補う方法を教えてください。

### **8. 他者との関わりを見直す**
22. 憧れの上司や先輩の特徴を3つ挙げてください。その理由も教えてください。
23. 他人からのフィードバックで、最も印象に残ったことは何ですか？
24. 周りの人に聞いてみたいことや、自分の改善点について質問したい内容を3つ挙げてください。

### **9. 心理的な自己理解を深める**
25. 日々感じるストレスや不安、その原因を3つ挙げてください。
26. あなたが無意識に信じ込んでいる思い込みを1つ挙げてください。それを疑ったらどんな新しい視点が見えますか？
27. 自分が最も自信を持てた瞬間を3つ挙げてください。それぞれの背景と理由を教えてください。

### **10. PDCAと振り返りを活用する**
28. 最近取り組んだことを、Plan（計画）・Do（実行）・Check（評価）・Action（改善）の視点で振り返ってみてください。
29. 1週間の振り返りを行うために、自分に問いかけたい質問を3つ考えてみましょう。
30. ストレングスファインダーやMBTIなどの結果を基に、自分の特徴や強みをまとめてみましょう。


どこからはじめるか選択肢を出してください。
```

　ある程度のやり取りを終えたら
　　下記Promptで、レポートを
　　　提出してもらいましょう。

```Text:自己分析レポート出力Prompt
ここまででわかった自己分析のレポートをお願いします。
```

　さらに深掘りすることで
　　思わぬ示唆を得られるかも
　　　しれません。

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

　今回は、ここまで。
ABC388回答メモ

# 0.はじめに
　先週の不調を挽回すべく参戦。
　今週は調子が良いと言うより問題が易し目でA~Dを
　回答できました。
　これは、レートの大幅アップが見込めるか？と、思いましたが
　甘くはなく+3の719と、ほぼ変わらずでした・・・。


# 1.A - ?UPC
　1行でコーディングしたくなる問題。
　インプットの文字列の1文字目とUPCを結合してそのまま出力でAC

　https://atcoder.jp/contests/abc388/submissions/61541404

# 2.B - Heavy Snake
　制約が大きくないので、素直に計算しました。
　TとLをリストに格納し、１～D日までのびた場合それぞれの
　最高値を求め出力してACとなりました。

　https://atcoder.jp/contests/abc388/submissions/61551108

# 3.C - Various Kagamimochi
　制約からみて、素直に全組み合わせを試すことはできないと判断。
　まぁ、条件自体はそれほど難しくないので
　大きさ順に並べて、先頭のお餅から各お餅毎に、載せられる持ちの数を調査
　　お餅ごとの載せられた餅数の算出法
　　　リストを2分探索しどのお餅以降なら上にのせられるかをチェック
　　　求めた載せられる持ちの位置をN（+1）から引いた値が
　　　調べた餅が載せられる数となる
　各お餅ごとの載せられる持ち数を合計し出力して終了

　https://atcoder.jp/contests/abc388/submissions/61561980

# 4.D - Coming of Age Celebration
　問題をよんでIMOS法で行けるかなーと思いましたが
　ちょっと自信が無かった＆問題の特性的にヒープキューで行けるなと思い
　ヒープキューを使いました。
　【考え方】
　　・宇宙人リストを先頭から見ていき、人毎に最終な石の個数を決めていく。
　　・貰う石リストヒープキューqを用意する
　　・人毎に、現在の所持石数から、自分以降の何人目まで石を渡せるかを計算し、その日付をqに追加
　　・人毎に、q内の数数だけ石がもらえる
　　・人毎＝日ごとにq内の日付と同じ値を省いていくことで次の日以降にもらえる石数を減らす
　【実装】
　　1.NとリストAを入力
　　2.ヒープキューqをと回答用リストansを空で初期化
　　3.リストAをインデックスiで先頭から参照
　　　-1.貰える石数Cにｑの長さをセット
　　　-2.Ｃが1以上の時
　　　　-1.ｑが空になる（かブレイクまで）以下繰り返し
　　　　　-1.qからpopした数をpにセット
　　　　　-2.pがi+1(現在の日数)より大きい時はpをqに戻しブレイク
　　　　　（pがi+1(現在の日数)と同じときは次の数を取り出す）
　　　-3.最終的な石の数BにA[i]（人iが最初に持っていた石）+Cをセット
　　　-4.人iが成人以降成人したすべての人に石を上げるのに必要な石の数gにN-1-iをセット
　　　-5.Bが0ではない時
　　　　-1.Bがg以上の時（iが自分以降の成人する人にすべての石をあげられる場合）
　　　　　-1.qにNを追加
　　　　　-2.Bからgを減算
　　　　　-3.ansにBを追加
　　　　-2.Bがgより小さい時（iが自分以降の成人する人にすべての石をあげられない場合）
　　　　　-1.qにB+i+1を追加(i日の翌日から自分が持っている石数分の日数だけ石をあげられる)
　　　　　-2.ansに0を追加
　　　-6.Bが0の時、ansに0を追加
　　4.ansを出力して終了

　最初3-6を考慮していなくて一回WAになってしまったのが悔やまれます。

　https://atcoder.jp/contests/abc388/submissions/61592223


以上
ゴミの問題

# はじめに
Apache NetBeans IDE 20の統合開発環境でプログラムを作成していますが、プロジェクトフォルダーがいくつも作成されています。過去何年も使っていると、ゴミだらけになります。様々なwebページやプラグインのフォルダーのほかに、サンプルをテストするためのテストフォルダーがゴミのように溜まっています。テストが終了しても削除できません。せっかく、動作して確認できたので消すことがもったいないのです。
しかし、あとから見ても、何のテストだったか、ファイル名を見ても思い出せません。
その時は適当に命名していたためです。つい、急いで適当に付けていたためです。

このゴミ問題はどうしたらいいのかということです。どこかに焼却炉を作って燃やしてしまったらいいのか。この問題を考えてみます。

# ゴミはどうして貯まるのか。
まるで、ゴミ屋敷です。どんどん溜まって行きます。折角作ったプログラムなので、捨てるに捨てられない状態が延々と続いています。いつか、整理(断捨離)したいのですが、そのタイミングがつかめません。着物であれば。買取り屋に買い取ってもらえます。しかし、ゴミのプログラムは誰も買い取ってくれません。

# 問題は単なるゴミの問題だけではありません。
実は、そこに、大問題が隠されているのです。「不具合の温床」という大問題です。
ゴミが沸々と燃え出しているのです。あるいはゴミの中からゴキブリのようなばい菌も培養されているのです。
まるで、どぶ川のメタンガスのように、ブクブクと泡を吹きだしています。
古くなった統合開発環境のフォルダーは、まさにこのどぶ川と同じです。

いつか、ヘドロの大掃除をしなくてはなりません。
# 統合開発環境のヘドロとは
これは、テストも含め、本番環境のフォルダーも同居していますので、増々、怪しくなっています。本来であれば、テスト環境と本番環境は、サーバー毎分離しておくのが鉄則ですが、個人の趣味のためのレンタルサーバなので、明確には分けていません。
これが、すべての元凶かも知れません。
■一番の問題は安易な更新
テストで動作確認後、本番のwebページに、組み込むときに、既存のプログラムにも手を加えることはよくあります。これが問題を引き起こしています。
その時はあまり吟味せずに、これで大丈夫と思って、既存のプログラムを更新してしまいます。しばらくはこれで、うまく動作しています。
しかし、大分、後になって、不具合が発生します。しかし、この不具合の原因はすぐにはわかりません。
かなり、調べた後になって、ようやく、あの時の更新が影響していたとなります。
こういう不具合は、よくあります。十分テストしたから更新すればいいのですが、それでは時間がかかります。おそらく、世の中のシステムにもこのようなことは発生しているのではないでしょうか。
■共有か、個別か(フォルダーも、ファイルも)
この問題が一番の問題
よく、ひとつのファイルを共有して、他のwebページでも使用できるようにするのがよいと言われることもあります。しかし、このやり方はよくない面もあります。
各webページで固有の処理があると、それぞれのページ処理を追加することになり、これはよくない方法です。逆に、webページ毎に、個別にそれぞれの処理ファイルをつくる方法もあります。これもメンテナンス管理が大変になります。
いずれがいいか、判断に迷います。オブジェクト指向のクラスを使えば、継承(extend)で解決するのかも知れません。また、最近出てきた、ESモジュール化もいいかも知れません。
■ESモジュール化(import/export)
モジュール化すると、必要なクラス、関数、変数などだけをロードすることができます。未使用の処理はロードしなくて済みます。
この仕様は、従来の共通/個別対応への代替手法と言えるかも知れません。
共通問題の不具合解消も個別対応のメンテナンス問題解消にも使える仕様と言えるかも知れません。ゴミ問題の解消手段になるかも知れません。
■プロジェクトフォルダーのメンテナンス
統合開発環境のプロジェクトフォルダーは、新規にwebページを作る場合に便利です。
このフォルダーに、様々のリソースフォルダーをつくり、開発を進めて行きます。
それらのフォルダーの中が、開発を進めて行くとファイルが多く作成されてゆき、そのうち何が何だか分からなくなります。特に、ファイルの名称に問題が出てきます。
行きあたりばったりに命名して行くと訳が分からなくなります。
■使い慣れたIDEの場合、中々新しいIDEに移れなくなる問題
Netbeansもそうですが、これに慣れてしまうと他のIDEへ移れなくなります。ラッピングツールなども同様です。使い慣れたプラットフォームがあると中々、他のプラットフォームには移れません。途中で、プラットフォームを変えると、そのソースコードだけが従来のソースコードとスタイルが変ってしまい、メンテナンスが大変になります。すべてを一括変更することは、容易ではありません。それらが混在したIDEは、ゴミ化が進みます。

# あとがき
まだ、ゴミ化を防ぐいいアイディアが見つかりません。
いまから、大量のファイルを整理する気は起りません。手っ取り早いのは、不要と思ったファイルはどんどん捨てて行くことかも知れません。しかし、むやみに行うと、すでに動作しているシステムにも悪影響が及ぶかも知れません。
このゴミ処理問題は中々解決しないかも知れません。
DDoS攻撃に対する対応について（AWS環境）


最近DDoSのニュースが多い気がしますね？

年末年始にかけて、DDoS攻撃が原因となるサービス停止や遅延のニュースを頻繁に耳にしたような気がします。


---

# ■そもそもDDoS攻撃とは？

> DDoS（Distributed Denial of Service）攻撃とは、攻撃対象となるWebサーバーなどに対し、複数のコンピューターから大量のパケットを送りつけることで、正常なサービス提供を妨げる行為を指します。

目的として、ターゲットのサービスを停止または遅延させ、正規ユーザーがサービスを利用できなくすることでしょう。



---

# ■DDoS攻撃の厄介な点

これ以外でも様々ありますが、個人的にDDoS攻撃が厄介だと思う点です。

:::note info
1.正規トラフィックとの区別が難しい
攻撃に利用されるリクエストが、通常のユーザーリクエストに見える場合があります。
実際に正規ユーザーが利用される事がある点。
:::

:::note info
2.多様な攻撃手法
SYN Flood、HTTP Flood、DNS増幅攻撃など、多様な手法が存在し、対策が複雑です。
いくつかのサービスを組み合わせる必要もあるでしょう。
:::

---

# ■対象となるネットワークのレイヤーについて

以前、以下の記事でも書いた事があるんですが、OSI参照モデルで考えると良いかもしれません。
DDoS攻撃は、ネットワーク層（L3）、トランスポート層（L4）、アプリケーション層（L7）といった様々な層を狙って実行されます。

AWS WAFとDeepSecurityで考えるセキュリティ
https://qiita.com/zenden/items/22a67719526291d043d9


```
【7層 アプリケーション層】
具体的なアプリケーションの通信規則を定めます。HTTP、SMTP、FTPなどがここに属します。

【6層 プレゼンテーション層】
データ表現と暗号化を行います。圧縮、暗号化、文字コード変換が含まれます。

【5層 セッション層】
通信手段を提供し、セッションの確立・維持・終了を管理します。セッションキー、ダイアログ制御が関連します。

【4層 トランスポート層】
エンド間の通信制御を担当します。データのセグメンテーション、再送制御、フロー制御が行われます。

【3層 ネットワーク層】
データを送る相手を決め、最適な経路で送信します。IPアドレス、ルーター、ルーティングが含まれます。

【2層 データリンク層】
隣接する機器同士の通信を実現し、フレームとしてデータを送受信します。MACアドレスやイーサネットスイッチが関連します。

【1層 物理層】
データをビット列として送信するための物理的な接続を担当します。ケーブル、電気信号、ハブなどが含まれます。
```

DDoSで攻撃の対象となるレイヤーは「7層」と「3.4層」と思います。

---

# ■どのAWSサービスで守られる？

階層により、サービスが異なります。

:::note info
「7層」
AWS WAF が主に対応し、Webリクエストのフィルタリングやアプリケーション層の攻撃（例: HTTP Flood、SQLインジェクション）を防ぎます。
:::

:::note info
「3.4層」
AWS Shield（StandardまたはAdvanced）が対応し、ネットワーク層やトランスポート層の攻撃（例: SYN Flood、UDP Flood）を自動的に緩和します。
:::

---

# ■対策できていない時に攻撃された時の対応

事前に行う事ができる対策としては、WAF、AWS Shieldが適用されている環境を用意する事ですが、
まだ対策がなされていない状況での攻撃を確認した場合として考えてみます。


## 1. *「攻撃の特定」*
前述の通り、攻撃のパターンとしていくつかあります。
サーバーのアクセスログ、ネットワークログから攻撃のパターンを確認しましょう。

#### サーバーのアクセスログから確認できること
1. :point_right: 異常なリクエスト数
• 特定のIPアドレスや範囲から短期間に大量のリクエストが発生している場合。
• 例: 同じURL（例: /loginや/api/endpoint）に大量アクセス。
2. :point_right: リクエストのパターン
• HTTPメソッド（例: GET, POST）やUser-Agentが不自然な形で統一されている。
• 不正なリクエストヘッダーが含まれる場合。
3. :point_right: タイムスタンプの集中
• 特定の秒数や分数にリクエストが集中している場合。

#### ネットワークログから確認できること
1. :point_right: 大量のパケット数
• 短期間で異常に多いTCP/UDPパケットが記録されている場合。
2. :point_right: 特定のプロトコルの集中攻撃
• UDPやICMP（Ping）パケットが大量に送信されている（例: UDP Flood、ICMP Flood）。
3. :point_right: ポートスキャンの痕跡
• 特定のポート（例: 80, 443）やランダムなポート番号への大量の接続試行。
4. :point_right: ルータやファイアウォールのログ
• 未知の送信元IPアドレスや偽装されたIPアドレス（IP Spoofing）が多く記録される。

## 2. *「トラフィックの制限」*
WAFを用いた制限として以下がとても参考になりました。
正規ユーザーが攻撃元となる可能性もある為、永久にブラックリストでなくとも、一時ブロックまでに留めるのが良いかなと思います。


https://dev.classmethod.jp/articles/tsnote-aws-waf-autoblock/

---

## 最後に

対応の所は、緊急対応として書きましたがもちろん事前の備えが大事な事は変わりません。

DDoS攻撃は、あらゆる規模のビジネスにとって現実的な脅威です。
攻撃を未然に防ぐためには、**多層防御の設計**、**監視の強化**、そして**継続的な対策の見直し**が欠かせません。

この記事を参考に、DDoS攻撃への準備を進めていただければ幸いです。
文字ばかりになってすいません！以上です！
SSL/TLS通信における脆弱性が確認されているアルゴリズムを無効化する

SSL/TLS通信において脆弱性が確認されているアルゴリズム（DES / 3DES / RC4 / MD5）を利用しないようレジストリを調整して無効化しておきましょう。

## <font color=green">構築した環境の情報</font>
- Windows Server 2016

## <font color=green">DESを無効化するレジストリの調整</font>
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\DES 56
```
種類: REG_DWORD
名前: Enabled
値　: 0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896206/89486393-da78-fe7b-70cc-2ceb88c918dc.png)

## <font color=green">3DESを無効化するレジストリの調整</font>
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168
```
種類: REG_DWORD
名前: Enabled
値　: 0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896206/543c8ce1-6745-74d4-0fcc-8f28264ee5c3.png)

## <font color=green">RC4を無効化するレジストリの調整</font>
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 40/128
```
種類： REG_DWORD
名前： Enabled
値　： 0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896206/854aaaaf-8d10-a586-f424-ce14a3cdc4e4.png)
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 56/128
```
種類： REG_DWORD
名前： Enabled
値　： 0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896206/885614e5-715c-3138-12fd-1ac4c901df64.png)
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128
```
種類： REG_DWORD
名前： Enabled
値　： 0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896206/17b1af6f-3c13-577b-0398-4bf7263c3bf0.png)

## <font color=green">MD5を無効化するレジストリの調整</font>
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\MD5
```
種類: REG_DWORD
名前: Enabled
値　: 0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896206/e3e03a19-84b5-2bb3-82c9-d06589d0efe4.png)
【ChatGPT】議事録作成プロンプトを考えてみる

# はじめに
　会議中に取ったメモを整理して議事録するのって面倒ですよね。
 録音して文字起こし→ChatGPTって流れで良いじゃんって思われるかもしれませんが、世の中なかなか録音できない業務形態だったりするんです。

 ということで、メモから議事録を作る方法を考えてみます。

## まずは雑に指示してみる
とりあえず、何も考えずにChatGPTにメモを渡して議事録を作らせてみましょう。
(いわゆるZero-Shot Prompt)


### プロンプト
~~~
以下のメモから議事録を作ってください。

#メモ
2025/1/13 14時～15時、C会議室
相手は山本さん、渡辺さんが、当方は自分(池田)のみ参加した。
会議内容は「業務で活用できそうなLLMの調査結果」だった。

当社はオンプレミス環境を希望したが、調査してもらったところ希望に叶うLLMはなかった様子。
ChatGPTは漏洩しても問題ない情報については入力OK、性能も高い。
Claude3.5 Sonnetは他アプリケーションの操作もできるため、ワーキンググループを立ち上げて試行した方が良い
Gemini2.0は導入実績情報が少ないので未知数

今後の方針としてはまずはChatGPTを一部社員が試行してみる
当社のアクションはChatGPT、Claude3.5 Sonnetを導入し、ワーキンググループのメンバーをアサインする必要がある。(田中あたり？)


正直ワーキンググループには入りたくない←これは議事録には載せない
~~~

### 結果

結果はこちらです。
~~~
議事録
日時: 2025年1月13日 14:00～15:00
場所: C会議室
参加者: 山本さん、渡辺さん、池田

議題
「業務で活用できそうなLLMの調査結果について」

議事内容
調査結果の共有

オンプレミス環境への対応:
当社が希望するオンプレミス環境に対応したLLMは見つからなかった。
各LLMの特徴:
- ChatGPT:
  漏洩しても問題のない情報であれば入力可能。
  性能が高く、業務活用に適している。
- Claude3.5 Sonnet:
  他のアプリケーション操作が可能。
  ワーキンググループを立ち上げて試行する価値があると判断。
- Gemini2.0:
  導入実績に関する情報が少なく、現時点では未知数。

今後の方針
- 短期目標:
 ChatGPTを一部の社員で試行運用する。
- 中期目標:
 ChatGPTおよびClaude3.5 Sonnetの導入を検討。
 ワーキンググループを立ち上げる必要がある。
 ワーキンググループメンバーには田中さんが候補として挙げられた。

アクションアイテム
- ChatGPTの試行運用
  部社員を対象に試行を開始する。
- Claude3.5 Sonnetの試行
- ワーキンググループを設立し、導入の可能性を検証する。
- ワーキンググループのメンバーアサイン
  候補: 田中さん

以上
~~~

悪くないですね。たたき台としては十分です。


## 議事録のフォーマットを定義する
各職場には議事録のフォーマットというものが何となくあると思います。
次はフォーマットを指定するとどうなるかを見て見ましょう。
(いわゆるFew-Shot Prompt)

### プロンプト
~~~
議事録を作るのを手伝ってください。
まずはフォーマットを指示します。その後にメモを渡すのでフォーマット通りの体裁に整えてください。


#議事録のフォーマット(記載内容はサンプル)
<日時>
2025年1月11日(土)　13:00～13:30

＜場所＞
A会議室

＜出席者＞
相手方：鈴木、山田
当方：佐藤

＜調整内容＞
生成AIの活用方法について協議した。
主な内容は以下のとおり。

・ドメイン知識のない領域では生成AIの出力の良し悪しが判断できないため、
　使わない方が良い。

・会社の機密情報は入力しない

・新規のアイディアを生成する場合は著作権等に気を付ける

・生成AIの活用に対するインフラの課題については
　IT部門に確認要

・どの生成AIを使うかは継続して調査要。
　まずは既存の生成AIについて調査を進める。
~~~

これでフォーマットの設定が完了しました。
この状態でChatGPTにメモを渡してみます。

### メモ
~~~
#メモ
2025/1/13 14時～15時、C会議室
相手は山本さん、渡辺さんが、当方は自分(池田)のみ参加した。
会議内容は「業務で活用できそうなLLMの調査結果」だった。

当社はオンプレミス環境を希望したが、調査してもらったところ希望に叶うLLMはなかった様子。
ChatGPTは漏洩しても問題ない情報については入力OK、性能も高い。
Claude3.5 Sonnetは他アプリケーションの操作もできるため、
ワーキンググループを立ち上げて試行した方が良い
Gemini2.0は導入実績情報が少ないので未知数

今後の方針としてはまずはChatGPTを一部社員が試行してみる
当社のアクションはChatGPT、Claude3.5 Sonnetを導入し、
ワーキンググループのメンバーをアサインする必要がある。(田中あたり？)


正直ワーキンググループには入りたくない←これは議事録には載せない
~~~

### 結果

結果はこちらです。

~~~
<日時>
2025年1月13日(月) 　14:00〜15:00

<場所>
C会議室

<出席者>
相手方：山本さん、渡辺さん
当方：自分(池田)

<調整内容>
「業務で活用できそうなLLMの調査結果」について協議した。
主な内容は以下のとおり。

・当社はオンプレミス環境を希望したが、調査してもらったところ希望に匹適するLLMはなかった様子。

・ChatGPTは漏洩しても問題ない情報については入力OK、性能も高い。

・Claude3.5 Sonnetは他アプリケーションの操作もできるため、ワーキンググループを立ち上げて試行した方が良い。

・Gemini2.0は導入実績情報が少ないので未知数。

<今後の方針>
・まずはChatGPTを一部社員が試行してみる

・当社のアクション：ChatGPT、Claude3.5 Sonnetを導入し、
ワーキンググループのメンバーをアサインする必要がある。
(田中あたり？)
~~~

概ね、指定したフォーマットに直してくれました。
これをシステムプロンプトとして埋め込んだChatGPT(他LLMでも可)を職場ごとに用意すれば、所望のフォーマットで議事録のたたき台を作ってもらえそうですね。
Pythonで可視化しながら数学を学び直す～その２：関数の次元

# はじめに

グラフに直線を書く練習をしたのは小学校だったような記憶があります。確か２次関数を習ったのは中学でしょうか。３次関数が出てきたのはいつか覚えていませんし、グラフを書いた記憶はありません（ただ単に授業を聞いていなかっただけかも？）。

いずれにしても、大人になった今となっては、順番に一次関数、二次関数、三次関数と学び直しをするよりは、多項式関数として大きな視点で捉えて、それらの特徴を比べながら学ぶ方が効果は高いと思います。例えば英単語でも、preという接頭語を学年が上がるにつれ順次いくつも習っていくとしても、今となっては preという接頭語とそれに続く語幹などを全体的に学ぶ方が効率は高いでしょう。

# 記事の構成

[前回の記事](https://qiita.com/yoshiwatanabe/items/69cfa637c856f8accb8e)と同様に、PythonのコードとメインのコンテンツはGithubに挙げています。この記事は「補足とまとめ」ですから、GithubのJupyterノートの方も読んでください。もっと詳しい解説しています。

https://github.com/yoshiwatanabe/python-test/blob/main/math/function-degrees.ipynb

https://github.com/yoshiwatanabe/python-test/blob/main/math/function-significant-terms.ipynb

# 一次、二次、三次、四次の次数をもつ関数の特徴

以下は4つの関数を一つのグラフに、重なった状態で表しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/9d79f172-9fcf-dc59-1047-2d3fd7ac6fa4.png)

それぞれの特徴についてはGithubのJupyterノートに詳しく書いてありますが、簡単に解説すると：

- 青い線は一次関数 $y=x$を表しています。他の関数をひとつのグラフに収める都合上、アスペクト比（$x$と$y$の比率）は$1:1$ではないので傾きは「やや寝ている」状態ですが、これは$x$が$１$なら$ｙ$も$１$，$ｘ$が$２$なら$ｙ$も$２$，というグラフになっています
- 黄色い線は２次関数$y=x^2$を表しています。xが正の値でも負の値でもyは正の値になるのは２乗しているからですね。
- 緑色の線は３次関数$y=x^3$を表しています。S字曲線になっているのはxの値が負の値の時は「負の値を3乗すると、結果はやはり負の値になる」からです。
- 最後に赤い線は$y=x^4$を表しています。左右対称になるのは次数が偶数だからです。つまり二次関数、四次関数、六次関数、八次関数などはすべて左右対称のグラフであるということなのです

四次関数については、次数である$x^4$の項に加えて$x^2$の項も含めると、この「Wの形」になりますが、二次の項なしで$y=x^4$だけの場合は真ん中の山（もしくは谷）が無い形になります。以下はほかは全て同じで、四次関数だけ単純になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/5d8564a9-dc5d-2873-0245-36e556e4e091.png)

# 支配的な項

多項式関数には、名前の通り複数の項がある場合があります。その中でも関数の結果の最も大きく作用する、つまり「支配的」だと言える項があり、それは常に最も大きい次数の項と言えます。つまり$y=ax^4+bx^3+cx^2+d$の場合では、$ax^4$が最も支配的だと言えます。

これは、それぞれの次数の関数で「何がその関数のほとんどを決めるか」をイメージすると分かりやすいです。

- 一次関数では「長さ」
- 二次関数では「正方形」
- 三次関数では「立方体」
- 四次関数では「超立方体（テッセラクト）」

仮に同じ「長さ」だとしても、二次関数は一次関数と比べてその長さを辺に取る正方形が支配的になりますし、ひとつ次元が上がって三次元になると、その同じ正方形に、同じ長さ分の厚みがでて立方体になります。ですから次元の高い項が当然「支配的」になります。

# 支配的な項が正か負かによるグラフの違い

これは見てもわかるように「反対向き」になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/cb7d4125-a6e5-6bf9-6751-f1f0f021f900.png)

ただし、四次関数について$y=x^4-4x^2$というイレギュラーな関数を使っているので、他の多項式関数のようなきれいな対称にはなっていません。四次関数については別の機会に深掘りをする予定なので、今回はイレギュラーな状態を許容して学習を進めることにしました。

# 支配的な項の係数の違いによるグラフの違い

関数の特徴として「係数」に着目して、その値がどのように関数の形に影響を与えるかを見ると、直観的な関数の特徴を理解できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/5a964c27-8baf-61a6-da8f-95927a28278e.png)

（このグラフでは四次関数は単純な形を取っています）

全体的にいうと、係数の値が大きいほど「極端になる」という表現をしても差し支えないように思えます。別の言葉を使うと「より急激な変化」です。

# ２番目に支配的な項の係数の違いによるグラフの違い

「支配的」かどうかでグラフの特徴が変わるということで、それでは「２番目に支配的な項」によって、どのように関数が変わるかを見てみることにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103139/b1ae86a4-9b34-c62a-90ee-eb8a7cd86236.png)

結果としては全体的な形は「支配的な項」によって、文字通りほぼ決定付けられるわけですが、それでも２番目に支配的な項からも多少の影響があることが、当然ですが、わかります。

一次関数と三次関数での効果は割と分かりやすいですが、二次関数と四次関数ではすこし歪になります。というのもそれらの２番目に支配的な項は左右対称ではないので、その効果も左右対称でないというのは納得がいきます。

多項式の全ての項の特徴（正か負か、値が大きいか小さいか）を、全ての組み合わせでグラフにしてみるとパターンが浮かび上がってくるかもしれません。今回は深掘りせずに、広く浅くの戦略なのでそれはしませんが、それを把握することが出来たら多項式を見ただけでその関数のおおよその振る舞いを直観的に理解できるようになるかもしれません。
docker image buildをしたらexit code: 100というエラーが発生した。

DockerfileをこしらえてDockerイメージを作成しようと、`docker image build`をしたところ以下のエラーが発生しました。

## エラー内容
```
ERROR: failed to solve: process "/bin/sh -c apt-get update && apt-get install -y     bash     curl     git     vim     zip     unzip     build-essential     && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100
```

エラーコード 100 は、一般的に apt-get が失敗したことを意味するらしいです。

## 対処法
chatGPTに聞いてみました。

「Dockerfile内で使用しているベースイメージが古い可能性があります。サポートが終了しているバージョンでは、リポジトリが無効化されていることがあります。最新のベースイメージを使用してください。」

ということで***Dockerfile内の記述を変更***
```
(変更前)FROM ubuntu:23.04
(変更後)FROM ubuntu:24.04
```

その結果、問題なくイメージの作成は成功しました。

Dockerfileを作るのが初めてだったので最初に適当なところから持ってきたのですが、なんでもコピペはよくありませんね。。。

<details>
<summary>解決しなかった場合のその他解決策</summary>

・ネットワーク接続確認
・apt-getを個別で実行するようにdockerfileの記述を変更する
・ベースイメージのリポジトリ設定を手動で更新する
</details>

以上です。ありがとうございました。