OmniAICreator/Qiita-1.07M huggingface dataset:
Raspberry Pi で /lib/modules/(kernel version)/build が見つからないときの解決方法

# 前提条件
* Raspberry Pi 2 Model B
* Volumio 3 (Raspberry Pi OS でも同じだと思います)
* インストールしようとしたドライバ https://github.com/gnab/rtl8812au.git

`uname` コマンドの実行結果
```:uname -r 実行結果
6.1.77-v7+
```
```:uname -a 実行結果
Linux volumio 6.1.77-v7+ #1730 SMP Thu Feb  8 15:17:51 GMT 2024 armv7l GNU/Linux
```

# エラーが発生した状況
ラズパイをメディア再生サーバ化できる Volumio 3 を使い始めました。
使用している Raspberry Pi 2B には Wi-Fi モジュールが取り付けられていないため、Wi-Fi ドングルを接続し、ドライバをインストールしようとしました。

```bash:コマンド実行
sudo apt update
sudo apt install vim build-essential git raspberrypi-kernel-headers dkms -y
mkdir gnab
cd gnab
git clone https://github.com/gnab/rtl8812au.git
cd rtl8812au
sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/g' Makefile
sed -i 's/CONFIG_PLATFORM_ARM_RPI = n/CONFIG_PLATFORM_ARM_RPI = y/g' Makefile
make -j4  # ここでエラーが発生
```

`/lib/modules/6.1.77-v7+/build` が存在しないというエラーが発生しました。このディレクトリは kernel source と呼ばれるものらしいです。
```:make コマンド実行結果
make ARCH=arm CROSS_COMPILE= -C /lib/modules/6.1.77-v7+/build M=/home/volumio/gnab/rtl8812au  modules
make[1]: *** /lib/modules/6.1.77-v7+/build: No such file or directory.  Stop.
make: *** [Makefile:1096: modules] Error 2
```

インストールされた Kernel source は次のように確認できます。Raspberry Pi 2B の場合は、バージョンの後ろに -v7+ がついたものを確認するようです。
```bash:ls コマンド実行
ls /lib/modules/
```
```bash:ls コマンド実行結果
5.10.103+  5.10.103-v7+  5.10.103-v7l+  6.1.77+  6.1.77-v7+  6.1.77-v7l+  6.1.77-v8+
```


本当に build ディレクトリが存在しないのか、次のコマンドで確かめたところ、ありませんでした。
```bash:コマンド実行
ls /lib/modules/$(uname -r)/
```

現在の Kernel に合った kernel source がインストールされていないようです。

# 試したけどダメだったこと (raspberrypi-kernel-headers)
`raspberrypi-kernel-headers` をインストールします。

```bash:apt installコマンド実行
sudo apt install raspberrypi-kernel-headers
```

インストール後、`ls /lib/modules/$(uname -r)/` で確認したところ、なぜか build ディレクトリが追加されていません。
試しに `/lib/modules/` の他の Kernel を確認してみると、旧バージョンの 5.10.103-v7+ の build ディレクトリは存在しますが、現バージョンの 6.1.77-v7+ は存在しませんでした。

暗礁に乗り上げました。

# 解決した方法 (rpi-source)
インストールされた Kernel バージョンに合わせた Kernel source をインストールしなければなりません。rpi-source を使うと解決できました。

リポジトリ: https://github.com/RPi-Distro/rpi-source

ただ、rpi-source を実行するときに遭遇したエラーは、次にまとめています。

[rpi-source が失敗するときの解決方法 (ImportError, tar Error)](https://qiita.com/BerandaMegane/items/7d64e985b6637e7a6b3a)
[Web3.0 #2] ブロックチェーンⅠ

## はじめに
こんにちは
今回はWeb3.0の2つ目の記事 **「ブロックチェーン」** についてご紹介いたします。

## ブロックチェーン
ブロックチェーンとは
**「ブロック」** と呼ばれる単位でデータを管理し、**「鎖（チェーン）」** のように連結して保管する金融取引履歴などで利用される技術のことを表します。

:rolling_eyes:ブロックというものを**鎖で繋ぎ合う**イメージですかね
:upside_down:ざっくりいうとそうですね。**仮想通貨**などで使われるブロックチェーンは、ネットワーク上にある端末同士をダイレクトに接続し、**「暗号技術」** を用いて取引の記録を分散的に処理・記録するデータベースの一種になります。従来型のと見比べてみましょう
![Web3.002_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806875/3fc754a8-d4f4-b278-e12e-3c9fd35f1ab5.png)
### 中央集権型
従来のシステムでは、**中央にデータベースの情報を持っている**という状態です。
とあるユーザーが何か情報を入れたとしましょう。この情報は図の中央のサーバーに格納されていますので、ユーザーはこの情報を取りに行って見ることができます。

別のユーザーに **「情報を共有したい、送りたい」** などの場合があると思います。
こちらも中央のサーバーにリクエストを送ることで誘導させることができます。これにより他のユーザーのものにデータベースを書き換えることができます。

:::note info
この中央のサーバーを**信頼しなければ成り立たないシステム**です
:::

### 分散型
分散型ではどのようになるでしょうか。こちらの図ではAさんがBさんに1Bitの仮想通貨を送ろうとしています。中央集権型とは違い**中央にサーバーがないため<font color=red>決定権はユーザー自体が持っています。**</font>
![Web3.002_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806875/b8eb3e0d-ccd1-fc16-e722-b91134e88174.png)
図の「ブロック」の中に「取引」というものがあります。
この中にAさんからBさんに送った情報を「取引」にまず保存されます。

:rolling_eyes:この情報は**どこに行く**のでしょうか？

これは他の全て（図の例だと他にCさん、Dさん）に分散されます。さらに、この情報が**正しいかどうかを全てのノードで確認されないといけない**というようなシステムになっているんですね。

さらに例を追加します。
図の中にいるCさんがDさんに何か取引をしたとしましょう。
この取引情報は図の下にある「ブロック」に書き込まれて、それを**みんなで合意をすると、「チェーン」が結びつく**ということになります。

:rolling_eyes:なるほど、これが「ブロックチェーン」「分散型」の仕組みなんですね
:upside_down:ざっくり簡単に言うとそういうことです。

:::note info
情報をブロックに入れて、**みんなで承認して許可を出したらチェーンが結びつくという**イメージになります
:::
<br>

:upside_down:もし仮に**ノードのハッキング**が起きたとしましょう。でも**他の人が承認しないとチェーンが結びつくことはありません**ので非常に<font color=red>**改ざんが難しくなります。**</font>

:rolling_eyes:本当にハッキングしたいなら1台じゃなく、**「全てのノード」** をハッキングする必要がありますね。

:upside_down:これは現実的にはかなり厳しいのでブロックチェーンは **「非常にセキュリティが高い」** という風に言われているんですね。

:::note info
分散されている分、悪意のある改ざんができにくい → 非常にセキュリティが高い
:::
<br>

取引内容のブロックチェーンは、各ノードに分散されています。その情報は全ての人が見ることができるので非常に **「オープンなネットワーク」** という風にも言われています。

:::note info
全てのこのブロックチェーンのネットワークは、中身を見て確認することができるのも特徴です
:::

## おわりに
簡単にブロックチェーンのキーとなる**構成要素**を紹介します。
1.暗号化技術である（詰めて並べる）

2.コンセンサスアルゴリズムである（みんなで合意の判子を押す）

3.P2Pである（リーダー的となるものはいない）

4.DLT分散型台帳技術である（記録をみんなで持つ）

この構成記録については#3で紹介いたします。
<br>
中央集権型のシステムを設けない **「みんなで記録を持ちましょう」** という仕組みから、**耐性が高くダウンしにくいという大きなメリットがある**ということを理解できました。

最後まで読んで頂きありがとうございました！
> **「参考元」**
[Web3.0（Web3）とは？～分散型の次世代インターネット～](https://www.ecbeing.net/contents/detail/318)
>
>[【中央集権型のデメリット／分散型のメリット】ブロックチェーンの活用事例をわかりやすく解説](https://blockchain-biz-consulting.com/media/cryptographic-currency/)
>
>[【図解】ブロックチェーンとは？仕組みと基本を理解する](https://x.gd/AWvsP)

> **「Udemy」**
[現役シリコンバレーエンジニアが教える次世代インターネットWEB3.0 NFT DeFi 入門講座](https://www.udemy.com/course/web30-nft-defi/?couponCode=ACCAGE0923)
WEB3.0の基盤となるブロックチェーンやWEB3.0のアプリが動くイーサリアムや他のネットワークに関しても説明していきます。
>
> **学習内容**
・WEB3.0, NFT, DeFiとは何かを理解できる
・仮想通貨のネットワークの仕組みやバックグランドが理解できる。
・ERC20やERC721をイーサリアムプラットフォームにデプロイするステップが理解できる。
・WEB3.0 のアプリケーションを理解して使えるようになる。
【R】複数行のコメントを実現する

# はじめに

一般的なプログラミング言語では、以下のように「複数行をコメントアウトする」を実現する方法（ブロックコメント）が標準機能として用意されています。
ところが`R`にはそのような方法は用意されていないので、良い方法を探ってみました。

```java:Javaの場合
/*
コメント行
コメント行
コメント行
*/
```

```ruby:Rubyの場合
=begin
コメント行
コメント行
コメント行
=end
```

# 複数行をコメントアウトする

* [こちらのブログ](https://gradsmemo.blogspot.com/2013/01/r_5211.html)を見ると、if文を使って複数行をコメントアウトする方法が書かれていました。
  * 見ての通り厳密にはコメントアウトではなく、「条件分岐で強制的に実行させない」ということになります。
* それなりにシンプルな方法ですが、コメントアウトが何ヶ所もある場合、コメントアウトを解除する時にif文を書き換える or 外さないといけないのが面倒に感じられます...

```r:複数行をコメントアウト
message("この行は実行されます")
if (0) {
    message("コメント行")
    message("コメント行")
    message("コメント行")
}
message("この行は実行されます")
```

```text:実行結果
この行は実行されます
この行は実行されます
```

* コメントアウト箇所が複数ある場合は、`if (0) {...}`のように条件式としてリテラル値を指定するのではなく、以下のようにフラグで制御することでまとめて制御した方が便利かもしれません。
  * とはいえ、他の言語のようにまとめてブロックコメントを一気に付ける/外すという方法と比べると、かなり面倒な方法に思えます。

```r:複数行をコメントアウト(改)
# コメントアウトの制御用フラグ
comment_out <- TRUE

message("この行は実行されます")
if (!comment_out) {
    message("コメント行")
    message("コメント行")
    message("コメント行")
}
message("この行は実行されます")
if (!comment_out) {
    message("コメント行")
    message("コメント行")
    message("コメント行")
}
message("この行は実行されます")
```

```text:実行結果
この行は実行されます
この行は実行されます
この行は実行されます
```

# まとめ

* if文を使えば「コメントアウトらしきもの」は出来ますが、他の言語からすると奇妙なコードになってしまうのが難点だと思います。
  * 出来ればRの標準機能として、ブロックコメントを実装してほしいものです...

# 参考URL

* [Rでコメントアウト複数行](https://gradsmemo.blogspot.com/2013/01/r_5211.html)
Mac  から Windows へ RDP 接続するとき

# Microsoft Remote Desktop on Mac

<img width="400" alt="scr6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/05e44faf-d9b1-f8ae-7355-cf287c517b79.png" />

Mac  から Windows へ RDP 接続するとき、↑このダイアログが出てきて、毎回、「Continue」 をクリックしないと接続できないときは、証明書を「信頼」してあげましょう。


## 証明書を「信頼」する手順

### Step 1

「Show Certificate」をクリックする

<img width="300" alt="scr1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/a6780afb-a18c-e939-d1c7-4eeb1cbfc145.png" />


### Step 2

左側の「Trust」をクリックする

<img width="400" alt="scr2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/ee1ac9bf-5a63-d543-8c1a-246ae2c71904.png" />


### Step 3

中央の3つのプルダウンを すべて「Always Trust」にする


<img width="400" alt="scr3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/73e21633-04a8-1f2b-2369-956042e6695e.png" />

![scr4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/8e7138b6-69a4-db40-5eae-a8695abee737.png)


### Step 4

右下の「Continue」をクリックする

<img width="400" alt="scr5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/2b32bd1c-4da6-0fbf-a9d0-193265b4717d.png" />


### Step 5

パスワードを入力して、「設定をアップデート」をクリック

<img width="200" alt="scr7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/82b3306b-2e9f-4627-d8d4-5ad9a8d289cd.png" />


## 証明書を「信頼」後は、

「Connect」をクリック（もしくは画面アイコンをダブルクリック）すると、冒頭のダイアログは出力されず、直接、Windowsの画面が出てくるようになります。

<img width="400" alt="scr8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283293/cbe9b6fc-2d3b-4583-cd98-7dd6455a8e2d.png" />


### 戻したいときは、

1. キーチェーンアクセス アプリを起動し、PC名で検索して証明書を見つけます
1. 見つかった証明書をクリックして、「信頼（Trust）」をクリック
1. たくさんあるプルダウンの「常に信頼」を「値が指定されていません」に変更
1. 保存して終了。このとき、キーチェーンアクセスのパスワードを求められます

ただし、一度戻すと、上の手順では、再び「信頼する」ことができませんでした。もしかしたら、自分だけかも??

> キーチェーンアクセス アプリを起動し、当該証明書を削除して、改めてRDP接続すると、再び証明書がストアされ、その証明書は、上の手順で「信頼」することができました。
Mac で Node.js ＋ play-sound を使って MP3ファイルを再生してみる

以前、以下のような内容は試したことがある「Node.js で音声ファイルを再生する」というものです。

●【Node.js 2021】 WAVファイルを Node.js で再生する（Mac で node-wav-player を利用する） - Qiita
　https://qiita.com/youtoy/items/ea270d180d17094807f5

上の記事を書いた時は「node-wav-player」を使っていましたが、今回は以下の「play-sound」を使ってみることにします。

●play-sound - npm
　https://www.npmjs.com/package/play-sound

それと今回は Mac で試しているので、タイトルに「Mac で」と入れています。
おそらく、Mac 以外でも大丈夫かと思いますが、そこは未確認です。
⇒ コマンドで音をならす部分のプレーヤーまわりで、差異が出たりなどするかもと思いつつ、適切に環境ができてれば OS には依存しなそうとも思いつつ

## 鳴らす音の素材
今回、再生する MP3ファイルを探します。

play-sound で検索していた際に見かけた以下の記事で使われていた、「Springin’ Sound Stock」の素材を使うことにしました。

●開発コマンド実行時に音楽を流してDXを高める
　https://zenn.dev/tam_tam/articles/cd1abb33ccb0e1

●焚き火 | 無料 BGM・効果音のフリー音源素材 | Springin’ Sound Stock
　https://www.springin.org/sound-stock/subcategory/bonfire/

### 余談： Springin’ Sound Stock について
余談ですが、 Springin’ Sound Stock の素材は、過去の試作で使わせていただいたことが何度かあります。

https://x.com/youtoy/status/1711805503704019191

https://x.com/youtoy/status/1540396116860358656

また、過去の Qiita の記事で以下のような内容を書いたこともあります。

●【Scratch 2022】Scratch でも利用可能な無料の BGM・効果音のフリー音源素材を配布している「Springin’ Sound Stock」 - Qiita
　https://qiita.com/youtoy/items/5c8276619233d1359400

## 音を鳴らしてみる
では、play-sound を使って MP3ファイルを再生してみます。

プログラムは以下のとおりです。

```javascript
const player = require("play-sound")((opts = {}));

const filePath = "焚き火短.mp3";

player.play(filePath, (err) => {
  if (err) {
    console.log(`エラーが発生しました: ${err}`);
  } else {
    console.log("再生が完了しました");
  }
});

console.log("再生を開始しました");
```

上記を実行してみます。
実行から音声の再生終了までを行った後の、ターミナルの出力は以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/52bcd61a-7dfe-3c14-aff0-13d29aa99d45.png)

「再生を開始しました」というログ出力の後、MP3 の音が再生されているのを確認できました。

手軽に使えて、使い勝手は良さそうです！

## プレイヤーについて
以下、play-sound の公式ページに書かれた、プレイヤーのリストです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/99f5538b-6025-8042-1644-b678f828f4a3.png)

このあたりを利用して、音声を再生しているようです。
Windows の標準機能でファイルのハッシュ値を取得する方法

# 概要

Windows の標準機能でファイルのハッシュ値を取得する方法について簡単に説明します。


# 方法

方法としては

1. コマンド プロンプトにて certutil -hashfile コマンドを使用する
1. Windows  PowerShell にて Get-FileHash コマンドレットを使用する

の二通りがあります。

違いは下記になります。

|方法|取得結果の種類|対応するアルゴリズム|
|:----|:----|:----|
|certutil コマンド|文字列|MD2<BR>MD4<BR>MD5<BR>SHA1<BR>SHA256<BR>SHA384<BR>SHA512|
|Get-FileHash コマンドレット|オブジェクト|MD5<br>SHA1<BR>SHA256<BR>SHA384<BR>SHA512<BR>MACTripleDES<BR>Ripemd160|


用途に応じてどちらを選択するか選択してください。


# certutil -hashfile コマンド について

 certutil コマンドは証明書に関連する操作をおこなうコマンドですが -hashfile パラーメーターを付与することでファイルのハッシュ値を取得することが可能です。

下記にてファイルのハッシュ値の取得が可能です。

```
CertUtil [オプション] -hashfile 取得したいファイルパス [取得するハッシュアルゴリズム]
```
実行例

```
C:\Users\User>certutil -hashfile c:\temp\test.txt sha256
SHA256 ハッシュ (対象 c:\temp\test.txt):
61be55a8e2f6b4e172338bddf184d6dbee29c98853e0a0485ecee7f27b9af0b4
CertUtil: -hashfile コマンドは正常に完了しました。
```

なおアルゴリズムを未指定とした場合、 SHA1 のハッシュ値が取得されます。

なお Microsoft の公開情報としては

[certutil | Microsoft Learn](https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/certutil)　


ぐらいであまり詳細な情報はありません。
不足があれば certutil -hashfile /? にてヘルプを参照してください。

# Get-FileHash コマンドレットについて

Get-FileHash コマンドレットは公開情報がありますのでまずはそちらを確認してみて下さい。

[Get-FileHash (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Learn](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/get-filehash?view=powershell-5.1)　

下記にてファイルのハッシュ値の取得が可能です。


```
Get-FileHash 取得したいファイルパス[-Algorithm 取得するハッシュアルゴリズム]

```

実行例

```
PS C:\Users\User> Get-FileHash c:\temp\test.txt -Algorithm sha256

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          61BE55A8E2F6B4E172338BDDF184D6DBEE29C98853E0A0485ECEE7F27B9AF0B4       C:\temp\test.txt
```
なおアルゴリズムを未指定とした場合、 SHA256 のハッシュ値が取得されます。

また、 Windows  PowerShell の初期値の状態では SHA384 ならびに SHA512 でハッシュ値を取得しますと下記のように出力結果が見切れます。
パイプラインで Format-List につないでいただければ見切れずに目視での確認が可能です。

```
PS C:\Users\User> Get-FileHash c:\temp\test.txt -Algorithm sha512

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA512          1B86355F13A7F0B90C8B6053C0254399994DFBB3843E08D603E292CA13B8F672ED5... C:\temp\test.txt


PS C:\Users\User> Get-FileHash c:\temp\test.txt -Algorithm sha512 | Format-List


Algorithm : SHA512
Hash      : 1B86355F13A7F0B90C8B6053C0254399994DFBB3843E08D603E292CA13B8F672ED5E58791C10F3E36DAEC9699CC2FBDC88B4FE116EF
            A7FCE016938B787043818
Path      : C:\temp\test.txt


```

# 最後に

今回は Windows に標準機能でファイルのハッシュ値を取得する方法についてまとめました。
OS 標準とは言えませんが、 Excel のマクロでファイルのハッシュ値を取得する方法もあるようです。
また、ファイルのハッシュ値を取得するツールは様々なものが提供されておりますので、OS 標準機能との制限がなければより利便性の高いツールを利用していただければと思います。
Python for 鬼の100本ノック in range(41, 77)

https://www.youtube.com/watch?v=Gh0qRBHbnVs&t=5365s


後半はライブラリの使用方法の解説になっています。動画では、Jupiternoteを使用されているので、VSCodeだと限界を感じてきました。

とりあえずの目標は、前半を2周～3週くらいにしようと思います。
Js スコープチェーン 深く解析

本書はスコープチェーン詳細について、深く解析していきます。

下記のコードを見ましょう
```scope_test.js
var num = 999;

function hoge() {
    function test() {
        var num = 234;
        console.log(num);
    }
    
    var num = 123;
    console.log(num);
    test();
}

hoge();
console.log(num);
```


### `hoge function`の`Execution Context`を分析する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218041/52d1f98c-d63c-ad38-7d45-28d07877028c.png)


#### 考えるネタ

`hoge`内の`console.log(num);`は実行されたときに何か出力されるでしょう？？？？
プログラムの知識を持っている方は当たり前`123`でしょうと答えるかもしれません。

どうして`999`が出力されないの？って考えたことはありますでしょうか？

分析：
`hoge`内の`console.log(num);`実行するときに、上記の図を参考に、`hoge`のスコープチェーンは0番目から実行され、`Activation Object`に`num`の変数が定義されて、その値が出力されます。　例えば、`Activation Object`に`num`の変数はないときに、順次に`1`番目の`Global Object`を見て、`999`は出力されるでしょう。

また、`Global Object、Activation Object`には`num`という変数はなかったら、どうなるの？
:grin:
```
ｗｗｗ.... error：num is not defined 
```


続き....

### test functionのExecution Contextを分析する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218041/eb91870b-59b5-aafc-f055-b58e2743787c.png)


#### 考えるネタ

`hoge Activation Object`は`hoge function`の`Execution Context`を分析するときの`Activation Object`と何か違いますでしょうか？？

答え：同じです。

`test function`の`Execution Context`は生成するときに自動的に`hoge function`の成果を引き継いでくるのです

なので、test functionは`hoge Activation Object`と`Globa Activation Object`を持っていることで、変数を参照することができるのです。


```
※こちらの知識はjsのクロージャを理解するための重要ポイントなので、覚えていきましょう。
```

以上、不明点があれば、コメントを頂ければと思います
ChatGPT部【フォロワー1,000人記念】オフサイト勉強会＠有明セントラルタワーホール + ZOOM レビュー

# イベントページ
https://chatgptclub.connpass.com/event/320777/

## タイムスケジュール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122800/ea141cf8-bf72-7fdf-5c06-c4e5e0bab3ba.png)

いつもの感覚を知っているのでめちゃくちゃ豪華！

## おわび
子供の対応しながらイベントレポートをまとめていたこともあり、みなさんにご迷惑をおかけしてしまった部分と、その関係で内容をガッツリ踏み込めていない部分があります

## カスタム指示について
ChatGPTの指示の仕方。具体的なやり方

## iPhone開発に特化してChatGPTに1千回質問した感想
高齢者がAIを使ったら、というユーザーサイドの話。私個人としては非常に興味深い話でした。

## 2024年新卒指導現場のAI活用 → AI研修の最前線で感じた、AI指導の課題と解決例（LTやりました）
https://qiita.com/nomurasan/items/7d9e9e746d464336b4b3

RAG開発などで「回答の正しさ」は議論されるけど「回答の分かりやすさ」は議論されないので、AI初心者にとってハードルが高くなっているのでは？と問題提起しました。

## アマゾンのレビューを分析させてみた
ChatGPTのプラグインツールを活用して、データを抽出させる。
資料読んでまとめるだけのタスクでも普通にハルシネーションを起こすので、データを覚えるというのは案外苦手なのかも？

## ChatGPTの得意不得意を今一度整理して考えてみる
去年から今年までのChatGPTの変遷など。大枠にChatGPT部でお話があった知見の復習です。

## 情報整理パーソナルアシスタントツールNotebookLMの紹介
https://notebooklm.google.com

GoogleサービスだとBardのイメージが強いけど、他にも色々AIの話してるので今後にも期待していこう、という話

## 認知バイアスを考慮した売上のシミュレーション-コンタクトセンターでの事例を通じて-
ものすごい実践的！
明日からすぐ使える知識がガッツリ詰まってる

## 「生成AI」と「AIナレッジグラフ」の融合について（私見）
実践に基づく考察。考察とは言ったが、活用サイドとして深い
私にナレッジグラフの知見がなかったので、面白い気付き・アプローチになった

---

## 所感
きっと全員が話し足りないと思ったに違いない、と思ったぐらい内容が濃いものばかりでした。
頑張って時間内に収めるのに苦労した感があります。

## 後半の部
https://chatgptclub.connpass.com/event/320859/
Amazon RDS for PostgreSQL のクロスリージョンレプリケーションの通信にネットワークの設定が必要か確認してみた。

# はじめに
記事をご覧いただきありがとうございます。
本記事ではAmazon RDS for PostgreSQL の(クロスリージョン)レプリケーションの通信について調べています。
レプリケーションの通信のルーティングは自身で行わないといけないのか、AWSの裏側で処理されているのか確認しました。
設計で同じ疑問に悩んでいる人の一助になれば幸いです。

AWSを触り始めたばかりなので誤り等あるかもしれません。
見つけた際は暖かくご指摘いただけますと幸いです。

# 結論
Amazon RDS for PostgreSQL のクロスリージョンレプリケーションはAWSの裏側で通信されており、自身でVPC ピアリングやルーティングの設定は不要という結論になりました。

設定しなくていい!やったね!

# 目次
[はじめに](#はじめに)
[目次](#目次)
[検証方法](#検証方法)
[手順](#手順)
[まとめ](#まとめ)

# 検証方法
以下のような構成を作成し、データベースがレプリケーションされていることを
Cloud9経由で確認しました。
![AWS_rds_replication.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/ac2c9432-d257-6785-97f9-08e5aa15e3ff.png)
インターネットゲートウェイはCloud9に接続しターミナルを操作するために配置しています。

# 検証内容
検証内容について書いていきます。
___
### 注意事項
検証の手順を以下に掲載していますが、AWSで同じ構成を作成した場合、
料金の発生する可能性があります。
請求について責任はとれませんのでご了承ください。
___

### VPC・サブネット・ルートテーブルの作成

私の場合、１からひとつづつ作成しましたが、ルートテーブルの設定等で苦戦したので
VPCなどを作成から作ることをおすすめします。

東京リージョンの構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/f6caf660-90d3-20f2-8239-5e6d94c0230e.png)
大阪リージョンの構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/1c38bda2-7792-0a80-cd91-78fe9076ff61.png)

ap-northeast-1a のsubnet_rds_replicationにプライマリDBを構築し
ap-northeast-3aのtest_subnet_rds_replication_2にレプリカを作成した

RDSを作成したルートテーブルは以下
外には出られないようになっている

東京リージョン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/7a4e6f46-e9b0-d181-918d-44e8afc0a1aa.png)
大阪リージョン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/1bc4f862-9ae4-e05f-12b2-6495bfc63573.png)

### RDSの作成
今回はRDS for PostgreSQL を無料利用枠で作成する。
Cloud9からログインできるようパスワードを設定しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/9643cd01-23f5-6981-0f75-152ea4beff7e.png)

バックアップは有効にしないとレプリカの作成ができないらしい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/9c92f1e7-54a8-b51c-7918-fc89db78984b.png)
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ReadRepl.html#USER_ReadRepl.Create
リードレプリカの作成を参照

### レプリカの作成

**DBサブネットグループに関して**
ここですこしハマった

レプリカを作成時DBサブネットグループを選択する箇所があるが、
事前に大阪リージョンでサブネットグループを作成する必要がある。
また、DB サブネットグループを作成する際2つ以上のAZとAZ内のサブネットを選択する必要がある。
無しを選択できるがその場合はデフォルトのVPCに作成される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/e01f13f7-9868-ae7a-5cf1-82420b76cb9f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/92946669-5fe5-5dce-c1a5-6d7cd0dc1c08.png)
↑なしを選択して作成できなかった例

### レプリケーションの確認
プライマリDBにCloud9からアクセスしてテーブルを以下のように設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/171a9c4e-34d6-1d34-843a-6243edb2daa9.png)

レプリカDBにアクセスしテーブルを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722772/748c25ac-f852-079a-6364-3ebcbef288f1.png)

同期できていることが確認できる

## まとめ
* RDS for PostgreSQLのレプリケーションはAWSの裏側で通信されていてネットワークの設定は不要
* RDSのレプリカ作成時にDBサブネットグループを作成が必要

### 最後に
今回記事を初めて書いたので見づらい点があったと思いますが
最後まで見ていただきありがとうございます。

誤りなどがありましたらご指摘いただけますと幸いです。
【Tips】PlaywrightでDevToolを開き、コンソール内で関数を実行する

## Tips
![qiita_gif_playwright.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/9741454b-9cc1-7431-f74d-190d6d942399.gif)

```ts:index.ts
import { chromium } from "playwright"


const test = async ()=>{
    const browser = await chromium.launch({
        headless: false,
        devtools: true
      });
        const context = await browser.newContext();
        const page = await context.newPage();
        await page.goto('https://qiita.com/koji0705');
          // DevTools Protocolセッションを開始
  const client = await context.newCDPSession(page);
  console.log('=======HIT8 client 1111111111', )
    const result = await client.send('Runtime.evaluate', {
        expression: `
          (function() {
            console.log('======= Hello World ===============')
          })()
        `,
        awaitPromise: true
      });

}

test()
```
:::note info
DevToolのコンソールタブ内で関数を実行できました。
:::
GPG利用

gpg利用のメモ


####  環境
```
% sw_vers                                                               
ProductName:		macOS
ProductVersion:		14.5
BuildVersion:		23F79
```

### インストール
```
% brew install gpg
```

### 鍵作成
```
% gpg --gen-key
% gpg --list-keys
% echo "Hello world" | gpg -r [uid] --encrypt | base64 -b 0 > message.txt
```


### 復号　※パスフレーズ入力した場合
```
% cat message.txt | base64 -d | gpg --pinentry-mode=loopback --passphrase 'password' --decrypt\n
```
【Tips】PlaywrightでDevToolsを開く

## PlaywrightでDevToolを実行する
Playwrightで開発者ツールを開く場合、事前にブラウザ起動時の設定する。

```ts:index.ts
import { chromium } from "playwright"
    const browser = await chromium.launch({
      headless: false,
      devtools: true // DevToolを開く
    });
```
[超初心者向け]プログラミング？？Java??って人に

# 概要
### この記事で何がわかるようになる？
+ そもそもプログラミングってどういうものなの？
+ Javaの歴史や考え方
+ どんな開発を行うことができるか、日本で使える？？

### 今回の記事で覚えておきたいこと
+ プログラミングって？
+ Javaはオブジェクト指向という考え方がある



# そもそもプログラミングってなんなの？（小声）
+ コンピュータに対して指示書を作成することをプログラミングという
    - この指示書自体のことをプログラムという
- プログラムが与えられているから、私たちの動作によって処理を行ってくれる
  - キーボードを打ったら文字が反映される
  - 指で画面をなぞったらスライドされる　などなど
- プログラミング言語とは機械への指示書を書くために用いられる言葉のこと
- 機械は基本的に二進数しか読めないからプログラミング言語を書いて、それを機械語に変換して指示を与える
    > これが機械語のイメージ
    > 
    > 10110000 01100001
    >

# Javaとは
- Javaとは先ほど説明したプログラミング言語の一つ
- 1990年にサン・マイクロシステムズ社が開発を始め、1996年にJDK1.0として公開された
- Javaを動かすには「JVM（Java Virtual Machine：Java仮想マシン）」というソフトウェアを利用する必要がある
    - このソフトウェアがJavaで記述されたプログラムを読んで、コンピュータのOSで実行できる状態に変換して実行するという役割を持っている
- Javaの特徴として「オブジェクト指向」という考え方がある
    - 「効率的に開発するための考え方」
    - 機能ごとにグループ化→グループ化されたものを組み合わせてプログラムを構築していく![スクリーンショット 2024-06-22 18.45.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821717/2dfd390f-ff07-6ea8-76f1-2f300ab38390.png)

# なぜJavaを学習するのか
1. ちょっと難易度が高いけどプログラミング全般で共通する考え方を理解できる
2. 日本では改修案件が多いため

- 今人気のPythonとかの方が簡単にコードを書くことはできる
- Javaの方が難易度的には難しい
    - でも考え方とかが他の言語に通じるものが多い
    - Javaを習得した後だと他の言語も効率的に学習を進めていくことができる
- Javaが一番流行った時のシステムが今でも多く、それを改修する案件も当然多いため仕事は多い

:::note info
いろんな言語に手を出すのも楽しいけど、一つの言語の基礎を集中的に学習することでその後の言語の学習ハードルが下がる！
最終的にはどの言語で開発するか、というよりも **「どんなエンジニアになって働きたいか」** という部分の方が大切！
:::


# Javaでできること
1. CUIアプリケーション
    - コマンドプロンプトのような文字ベースの実行環境で動作するプログラム
    - 別名コンソールアプリケーション
2. GUIアプリケーション
    - キーボードやマウスで操作できるウィンドウ、ボタンなどの視覚的な要素を使って操作するアプリケーション
    - Google ChromeやMicrosoft Wordなど
3. Webアプリケーション
    - インターネットなどのネットワークを介して使用するアプリケーション
    - YoutubeやSNSなど

# まとめ
+ Javaを勉強することでプログラミングの基礎を掴むことができる
    + 他の言語の学習効率も高くなる
+ オブジェクト指向は最初難しく感じるけど、慣れると効率的に開発を進めることができるようになる！
スワップ領域作成手順



以下の手順でスワップ領域を作成できます。

### 手順 1: スワップ領域の作成

#### スワップパーティションの作成

1. **パーティションを作成**（必要に応じて）：

    ```sh
    sudo fdisk /dev/sdc
    ```

    `fdisk` を使用して新しいパーティションを作成し、そのタイプを `82`（Linux スワップ）に設定します。

2. **スワップ領域の初期化**：

    ```sh
    sudo mkswap /dev/sdc3
    ```

#### スワップファイルの作成

1. **スワップファイルを作成**：

    ```sh
    sudo fallocate -l 1G /swapfile
    ```

    または `dd` コマンドを使用してファイルを作成することもできます：

    ```sh
    sudo dd if=/dev/sdc3 of=/swapfile bs=1M count=1024
    ```

2. **スワップファイルの権限を設定**：

    ```sh
    sudo chmod 600 /swapfile
    ```

3. **スワップ領域の初期化**：

    ```sh
    sudo mkswap /swapfile
    ```

### 手順 2: スワップ領域の有効化

1. **スワップ領域を有効化**：

    ```sh
    sudo swapon /dev/sdc1
    ```

    またはスワップファイルの場合：

    ```sh
    sudo swapon /swapfile
    ```

### 手順 3: 自動マウントの設定

システム起動時にスワップ領域を自動的に有効にするために、`/etc/fstab` ファイルにエントリを追加します。

1. **エディタで `/etc/fstab` を開く**：

    ```sh
    sudo vi /etc/fstab
    ```

2. **次のエントリを追加**：

    - スワップパーティションの場合：

        ```sh
        /dev/sdc1    none    swap    sw    0    0
        ```

    - スワップファイルの場合：

        ```sh
        /swapfile    none    swap    sw    0    0
        ```

これにより、システムが起動するたびにスワップ領域が自動的に有効化されます。

### 例外と確認

1. **現在のスワップ領域の確認**：

    ```sh
    swapon -s
    ```

2. **システムのメモリ状態を確認**：

    ```sh
    free -h
    ```
### 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531066/1e7ac6d3-b938-3337-050a-1098c6f351b4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531066/94f25ea3-000c-9ea7-c4c3-64230686e63a.png)


以上の手順に従ってもエラーが解決しない場合は、`/dev/sdb1` に問題がある可能性があるため、デバイスの状態を確認し、必要に応じて修復を試みてください。
AWSをほとんど知らない学生がAWS Summitに参加してみた

## AWS summitとは

毎年約30,000 人が参加する、日本最大の AWSのテックカンファレンスです。

今年2024年は6月20日（木）、21 日（金）の2日間開催でした。


![69391.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1922066/6f19552e-2865-b403-b2d8-c5f080ec0a1f.jpeg)


https://aws.amazon.com/jp/summits/japan/


## 率直な感想

#### 刺激を受けてモチベーションが上がりました！

初めてのオフラインのテックカンファレンス参加であったのに加えて、私はAWSはS3しか使用したことがなく、用語もほとんど知らなかったので楽しめるか不安でしたが、参加してとても良い刺激をもらいました！

まず会場の熱気がすごいです。僕の住んでいる地方では勉強会などのイベントがあっても参加者は数十名ほどですが、AWS Summitでは様々な企業のエンジニアや関係者の方が数千人も参加します。「エンジニアってこの世に沢山存在してたのか、、」となりました。

また、今回はAWSという自分があまり知らない技術でしたが、次回は自分が普段学習している言語や技術のカンファレンスに参加して、有意義な時間にするためにもっと技術力高めたい！と思いました。

私が聴いた限り、講演自体は技術的に踏み込んだ内容は少なく、AWSの各機能がどのようなものかなんとなく知っているだけでも概要は理解できました。

## 講演について

最初の基調講演では**東京リージョンにおいて「Amazon Q Business」、**　「**Amazon Bedrock」上でClaude 3が使えるようになる**との発表があり会場が盛り上がりました。

![69398.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1922066/3990a7a4-454f-5848-54bf-abb3e266f8b2.jpeg)


また、Amazon の CTO であるワーナー ヴォゲルス氏は講演で、世界の生成AIを活用したスタートアップ紹介番組「Now Go Build」のお話に加え、最後には「AIが普及すれば、それはもはやAIとは呼ばれなくなる」との言葉を強調していました。AIによる創意工夫の余地や可能性はすごいのでもっとAIを活用してきましょうという意味でしょうか。

https://www.aboutamazon.jp/news/innovation/join-aws-cto-werner-vogals-with-new-series-now-go-build/

ホール内のブースでも生成AIに関連したものが多く、「**Amazon Bedrock**」という単語が目立ちました。社内のデータを活用したチャットボットやドキュメント検索ツールもよく見かけました。

## 印象に残った講演とメモ
Day1 16:50 - 17:20
**ハルシネーションを抑制した生成 AI が生み出す顧客事例とそのアーキテクチャ解説**
ストックマーク株式会社 取締役 CTO 有馬 幸介 氏
### メモ
* 生成AIは社内の情報漏洩や、ハルシネーション(嘘や誤った情報)の懸念で業務活用が進んでいない。
* 1000億パラメータの独自LLMをフルスクラッチで開発した。
* Amazon BedrockなどのAWSのクラウドサービスを利用することにより、2023年8月は14億だったパラメータ数を2024年5月に1000億規模にすることができた。
* GENIACという経産省が生成AI開発支援をするプロジェクトが今年から始まっていて、ストックマーク株式会社も採択されている。

## 反省と来年参加する方へのアドバイス

- 講演は先着で埋まっていくので、早めに参加登録をすれば良かったです。
- 参加登録と先着5000名で基調講演（最初の一番大きい講演？）の椅子が確保され、AWSクッション、お弁当が手に入ります。
- 会場が広くて足が疲れるので、休憩を適度に入れて講演は詰めすぎないほうが良いかもしれないです。

![69399.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1922066/c80d2add-e7e8-cfaf-3cea-aad62c5071ca.jpeg)


## まとめ

学生エンジニアで初めてのカンファレンスでしたが大変有意義な時間を過ごすことができました。来年東京で就職した際には様々なカンファレンスや勉強会に参加して、刺激を受けたり他社の方と交流を持ちたいと感じました。
FastAPIでHTMLテンプレートを使用して画面を出力する方法

FastAPIは高速なWeb APIを構築するためのモダンなPythonフレームワークですが、HTMLテンプレートを使用して画面を出力することも可能です。この記事では、FastAPIとJinja2テンプレートエンジンを組み合わせて、動的なHTML画面を生成する方法を説明します。

## 環境設定

まず、必要なパッケージをインストールします：

```bash
pip install fastapi uvicorn jinja2
```

## プロジェクト構造

プロジェクトは以下のような構造にします：

```
my_fastapi_project/
│
├── main.py
└── templates/
    └── index.html
```

## コード実装

### main.py

```python
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse

app = FastAPI()
templates = Jinja2Templates(directory="templates")

@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
    return templates.TemplateResponse("index.html", {"request": request, "message": "Hello, FastAPI!"})

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
```

### templates/index.html

```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FastAPI Template Example</title>
</head>
<body>
    <h1>{{ message }}</h1>
</body>
</html>
```

## 説明

1. `FastAPI`インスタンスを作成し、`Jinja2Templates`オブジェクトを初期化して、テンプレートディレクトリを指定します。

2. ルートパス("/")へのGETリクエストを処理する関数を定義します。この関数は`HTMLResponse`を返すように設定されています。

3. `templates.TemplateResponse`を使用して、テンプレートをレンダリングします。テンプレート名と、テンプレートに渡すデータ（この場合は`request`オブジェクトと`message`）を指定します。

4. テンプレートファイル（index.html）では、Jinja2の構文を使用して動的にデータを挿入します。`{{ message }}`は、Pythonコードから渡された`message`変数の値に置き換えられます。

## 実行方法

プロジェクトディレクトリで以下のコマンドを実行します：

```bash
python main.py
```

その後、ブラウザで`http://localhost:8000`にアクセスすると、"Hello, FastAPI!"というメッセージが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/f31f4c95-44da-9dfc-4b5b-59a885f5a32f.png)

## まとめ

FastAPIは主にAPIの構築に使用されますが、このように簡単にHTMLテンプレートを使用して画面を出力することもできます。これにより、APIと画面の両方を1つのフレームワークで効率的に開発することが可能になります。

より複雑なアプリケーションを構築する場合は、静的ファイルの提供、フォーム処理、データベース連携などの機能を追加することで、フル機能のWebアプリケーションを開発することができます。
SAP S/4 HANA 生産管理（PP）基本知識１：全体概要

### はじめに
- SAP ERPでは、生産管理業務領域の機能群を総称してPPモジュールと呼びます。
- PPとは、Production Planning and Controlの略です。
- ここでは、生産管理（PP）モジュールの全体像を把握することを目的とします。

### 全体機能関連図
![全体機能関連図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3432463/e0af684b-92fb-ff55-5275-d08cb11f4414.png)
- 生産管理（PP）モジュールは、自社内製品の生産計画～製造指示～実績収集を中心にサポートします。
- 他のロジスティクス系モジュール（SD：販売管理、MM：在庫／購買管理）やCO：管理会計モジュールとリアルタイムにデータ統合されています。

### 生産管理業務プロセス概略
![生産管理業務プロセス概略.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3432463/55962863-22d5-e998-d37f-b1c0b2946650.png)
- 生産管理業務プロセスの概略図、および、SD/MMとの関連性を表しています。
- 生産管理（PP）モジュールは、自社内製品の生産計画～製造指示～実績収集を中心にサポートします。
- また、生産管理（PP）モジュールの主要マスタとして、品目マスタ、部品表（BOM）マスタ、作業手順マスタ、作業区マスタがあります。

### 生産計画 ～ 製造指図管理の流れ
![生産計画 ～ 製造指図管理の流れ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3432463/8cdb1e89-195e-6fb2-86c8-27f2c9b6ba35.png)
- 上図は、生産計画～MRP～製造指図処理の大まかな流れを図示しています。
- 生産計画をもとにMRPが実行されると、内製品か外部調達品かで処理が大きく枝分かれします。
- 外部調達品の場合、MRPの結果、購買依頼が生成されます(※)。このデータは以降、仕入先への購買発注へと変換されて、納入、請求書照合処理へとつながっていきます。ここは在庫/購買管理（MM）モジュール領域の処理となります。
※ MRPによって、購買依頼を生成しないで、購買依頼のさらに前段階のデータとして計画手配
を生成することもできます。
- 内製品の場合、MRPの結果、計画手配が生成されます。現場への製造指示日が近づくと、計画手配は製造指図へと変換されます。
- 製造指図登録と同時に、生産関連のマスタデータが読み込まれて、製造指図内での日程計算、計画原価計算、能力負荷計算が行われます。
- 登録された製造指図はそのままでは後続処理ができません。発行処理を行う必要があります。
発行処理とは、製造現場に対して製造指示を行う意味合いがあります。発行処理によって、製造指図に対する製造実績計上が可能になります。
※ 製造指図登録と同時に発行処理を行うことができます。
- 製造指図への実績計上処理として、構成品目出庫処理、作業完了確認（作業実績報告）、完成品入庫処理があります。
ITパスポート ユーザインタフェース

・ユーザインタフェース
利用者とコンピュータとの接点
・CUI
キーボードでコマンド入力して操作する
・GUI
画面に表示されたアイコンやボタンをクリックして操作する
・ラジオボタン
複数の項目から一つを選択させる
・チェックボタン
各項目を選択させる（複数の選択も可能）
・スピンボタン
特定の連続する値を増減させる
・プルダウンメニュー
上から垂れ下がるように表示されるメニュー
・ポップアップメニュー
画面から浮き出るように表示されるメニュー

・UX
製品やサービスから得られる体験までを含む考え方

・キーボードショートカット
特定のキーを押すだけで操作できるようにした機能
・オートコンプリート
入力中の文字から過去の入力履歴を参照して、候補となる文字列の一覧を表示する機能

・シグニファイア
人の特定の行動を誘発させる手がかりとなるデザイン（お菓子などの包装のギザギザなど）

・ユニバーサルデザイン
国籍や年齢、性別、身体的条件などにかかわらず、誰もが利用しやすいように配慮された設計
・アクセシビリティ
利用者の誰もがサービスを支障なく操作または利用できるかの度合い
・ユーザビリティ
利用者がどれだけストレスを感じずに、目標とする要求が達成できるかの度合い

・ピクトグラム
国籍や文化を問わず理解できる、シンプルな絵のアイコン

・インフォグラフィックス
グラフやイラスト、地図、チャートなどを使って関連する情報を一つの図にまとめたもの（天気予報図、電車の路線図など）
・情報デザインの原則
近接（関連するものは近づけて配置する）
整列（要素を揃えて配置する）
反復（形式を繰り返す）
対比（重要性に応じてメリハリをつける）
Hexabaseのダッシュボードをカスタマイズする

[Hexabase（ヘキサベース）](https://www.hexabase.com/)は企業向けのBaaS（Backend as a Service）を提供しています。認証やデータストア、ファイルストレージ、リアルタイム通知などの機能があり、企業向けのシステム開発に必要な機能をまるっと提供しています。

Hexabaseの管理画面では、グラフ・チャートを使ったデータのビジュアル化ができます。データを利用したダッシュボードとして、エンジニア以外の方にも使いやすい画面を提供できます。

この記事では、Hexabaseのダッシュボードをカスタマイズする方法を紹介します。

## カスタマイズに必要なもの

ダッシュボードをカスタマイズする際には、データレポートが必要です。データレポートは、いわゆるビューで、データを集計したり、複数のテーブルを連結してデータを表示する仕組みです。

データレポートを作成する際には、以下の情報を利用します。

- データソース（データストア）
- 出力フィールド

**出力フィールドは2つ以上（場合によって3つ）必要なので注意してください。**

レポートを作成すると、以下のようなテーブルが表示されます。このレポートは、事前に絞り込んでおくことも、表示する際に抽出条件を指定することもできます。

![FireShot Capture 271 - Hexabase - app.hexabase.com 271.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/135d472a-de18-76ec-d908-0efc6fec6fd0.jpeg)


## ダッシュボードのカスタマイズ

ダッシュボードでは、データレポートを使ってグラフやチャートを作成します。まず、新しいダッシュボードを作成します。

![スクリーンショット 2024-06-23 10.16.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/0049740f-149a-21d9-7b7a-49124717b2f9.png)



そして、右上にある新しいチャートを作成するボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/800cee4f-14ec-56fc-85a7-38d3e99400ba.png)


ここで設定するのは、以下の項目です。

- チャート名（日英）
- データレポート
- タイプ（棒グラフ、円グラフ、折れ線グラフなど）
- X軸
- Y軸
- 系列
- 配色

実際の設定はグラフの種類によって異なります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/6017666d-3ad8-5b9a-dcae-3a8288990b2d.png)


実際にグラフを追加すると、以下のような表示になります。表示場所や大きさは自由に変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/53eef5e2-6a99-12bc-ceee-b4e7ac9749a8.png)


## まとめ

Hexabaseのダッシュボードは、エンジニア以外の方にとってもデータを見やすく、状況を把握するのに役立ちます。データレポートはAPIでデータの取得もできるので、外部システムとの連携にも利用できます。

Hexabaseには他にもFaaSやファイルアップロード、ステータス管理などの機能があります。それらの機能も利用してください。

[Hexabase \| 新規事業向け開発・競争領域でのDX実現をサポート](https://www.hexabase.com/)
第14回　関西DB勉強会　参加してみた

2024/06/22(土) 13:00 ～ 18:00
ハイブリッド開催（現地&オンライン）されていた「第14回　関西DB勉強会」に参加したので、レポートです。

https://kansaidbstudy.connpass.com/event/316348/

# スケジュール

## 13:15 30分	「市民開発者向け 正しいテーブル設計」
内製化需要が高まっている昨今、データ設計にお悩みの方も多い
のでどのようなデータ設計が望ましいのかを、アプリを参考に
説明します

株式会社BizOptimars　りなたむ（中村 亮太）さん

## 13:45 30分	「全部見せます KINTO テクノロジーズの DBRE とは」

KINTO テクノロジーズ　粟田 啓介 (@_awache)さん

## 14:25 30分	「MySQLのリリースモデルの変更点と最新アップデート」

日本オラクル株式会社
MySQL Master Principal Solution Engineer & MySQL Cloud Evangelist
山﨑 由章(@yyamasaki1)さん

## 14:55 30分	「こんなに違うよMySQLとPostgreSQL」

有限会社アートライ/日本MySQLユーザ会　坂井 恵 (SAKAI Kei)さん

## 15:35 30分	「PostgreSQL 主要機能の進化と最新バージョン情報」

日本ヒューレット・パッカード合同会社　篠田 典良さん

## 16:05 30分	「TiDB全部入り！ NewSQL & HTAP から最近のベクトル検索対応まで」

PingCAP株式会社　関口 匡稔 (@bohnen)さん

## 16:45 30分	「Data Cloud Summit参加報告- Snowflakeで作る最新マーケティング分析・活用基盤 -」

エクスチュア株式会社
Snowflake Data Superheroes 2024
喜田 紘介さん

# 内容

今回はラッキーな事に、粟田さんがいらっしゃったので詳細はこちらをご覧になってください。

https://zenn.dev/awache/articles/643adddbe4f817

# 感想

色々な案件で設計するDBのお話や、便利環境構築についてお話が聞けてよかったです。
登壇資料や議事録公開されているので、詳しく正しく情報知りたい方は、公式をご覧になってください。
新しいリポジトリを作成するときの手順

なぜか毎回忘れてちょっとだけつまる

※試したコマンドを一旦ここに時系列でまとめておいて、次すんなりすすんだらその分を編集で入れる

#### 環境
```
% sw_vers         
ProductName:		macOS
ProductVersion:		14.5
BuildVersion:		23F79
```

### 初期手順実施
```
% git init
% git add.
% git commit -m "initial"

GitHubで新しいリポジトリを作成し、リポジトリのURLをコピー

% git remote add origin https://github.com/XXXXX
% git push -u origin main
→
error: src refspec main does not match any
error: failed to push some refs to 'https://github.com/XXXXX'
```
…GitHubで作成したリポジトリを最初にpullする必要があった？（Read.me作ったせい？）

---
### pullしてからpushしてみる
```
% git pull origin main --rebase
% git push -u origin main
→
remote: error: File .terraform/providers/registry.terraform.io/hashicorp/aws/3.76.1/darwin_arm64/terraform-provider-aws_v3.76.1_x5 is 284.09 MB; this exceeds GitHub's file size limit of 100.00 MB
```
…ignoreファイル作り忘れて、大きいファイル取り込めないエラーになる。
以下のサイトからterraform用のをコピーしてくる。
https://qiita.com/tomoyoyo/items/5ac7b76e38ef8b86936b

---
### 大きいファイルを対象外にして、キャッシュをクリアののち再実行
```
% git rm -r --cached .
% git add .
% git commit -m "Remove large files from repository and update .gitignore"
% git push -u origin main
```
…うまくいかない。相変わらず同じ.tfstateファイルが邪魔してくる。

---
### 消えてくれなかったのでignoreファイルに個別でエラーになるファイルを入れて再実行
```
gitignoreに下記を記載する
**/.terraform/providers/registry.terraform.io/hashicorp/aws/3.76.1/darwin_arm64/terraform-provider-aws_v3.76.1_x5

% git rm -r --cached .
% git add .
% git commit -m "Remove large files from repository and update .gitignore"

% git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch .terraform/providers/registry.terraform.io/hashicorp/aws/3.76.1/darwin_arm64/terraform-provider-aws_v3.76.1_x5' \
  --prune-empty --tag-name-filter cat -- --all

% git push -u origin --force --all
```

うまくいったけど、かなりごちゃごちゃした。
最初にgitignore作るの忘れないようにしたい
⑫１日１０分で理解するコンテナ技術入門 - Kubernetesのアーキテクチャと基本用語 -

[前回](https://qiita.com/goroneko/items/be265eff84de029815ba)は、Kubernetesの概要と、minikubeのインストール方法について説明しました。今回は、Kubernetesのアーキテクチャと、基本的な用語について説明していきます。

# Kubernetesの基本用語
Kubernetesを学んでいくと、様々なKubernetes用語が出てくるので、基本的なものをここに整理しておきたいと思います。それぞれの詳細については、次回以降の記事にて説明したいと思いますので、ざっくりとどんなものかだけ見ていただければと思います。
| 用語 | 概要 | 特徴・機能 |
| --- | --- | --- |
| クラスター（Cluster） | Kubernetesの基本単位で、複数のノードから構成される | ノード間でコンテナ化されたアプリケーションが協調して動作 |
| ノード（Node） | クラスター内の単一のマシン（物理または仮想） | マスターノードとワーカーノードがある |
| ポッド（Pod） | Kubernetesでデプロイされる最小のコンピューティングユニット | 一つまたは複数のコンテナを含み、同じネットワーク名前空間とストレージを共有 |
| レプリカセット（ReplicaSet） | 特定の数のポッドを常に実行することを保証 | 高可用性と負荷分散を実現 |
| デプロイメント（Deployment） | アプリケーションのデプロイと更新を管理するための宣言的なオブジェクト | レプリカセットを管理し、ロールアウトやロールバックを制御 |
| サービス（Service） | ポッドの集合に対する永続的なIPアドレスとDNS名を提供し、ロードバランシングを行う | ClusterIP、NodePort、LoadBalancerなどの種類がある |
| ネームスペース（Namespace） | クラスター内のリソースを論理的に分離する | 大規模なクラスター管理やマルチテナント環境で有用 |
| コンフィグマップ（ConfigMap） | 環境設定データをキー-バリュー形式で保存し、ポッド内のコンテナに設定情報を提供 | 設定ファイルやコマンドライン引数の外部化に使用 |
| シークレット（Secret） | パスワードやAPIキーなどの機密情報を安全に保存し、ポッド内のコンテナに提供 | ベース64エンコードで保存され、適切な権限設定が必要 |
| イングレス（Ingress） | クラスター外部からクラスター内のサービスへのHTTPおよびHTTPSルートを管理 | ロードバランシング、SSL/TLS終了、名前ベースのバーチャルホスティングを提供 |
| ボリューム（Volume） | ポッド内のコンテナがデータを共有および永続化するためのストレージを提供 | emptyDir、hostPath、persistentVolumeClaimなどの種類がある |
| クーバレット（Kubelet） | 各ノード上で動作するエージェントで、ポッドのライフサイクルを管理 | クラスターの状態をマスターノードに報告 |
| マスターノード（Master Node） | クラスター全体を管理するコンポーネントが動作するノード | APIサーバー、コントローラーマネージャー、スケジューラーなどが含まれる |
| ワーカーノード（Worker Node） | 実際にコンテナを実行するノード | クーバレットやコンテナランタイムが動作 |
| kube-proxy | 各ノード上で動作するネットワークプロキシで、サービス間の通信を管理 | iptablesやipvsを使用してトラフィックをルーティング |


# Kubernetesのアーキテクチャ
Kubernetesのアーキテクチャは、公式ページには以下のように書かれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532202/49c86558-fb22-d29e-145b-4b6fc40e7aa6.png)

Kubernetesクラスターは、まず**コントロールプレーン**と**ワーカーノード**の二つの役割のノードから構成されます。コントロールプレーン、ワーカーノードともに複数台のマシンから構成することができます。この絵では、コントロールプレーンが一台、ワーカーノードが２台の構成になっています。
## コントロールプレーン
コントロールプレーンは、クラスターの管理に必要な以下のコンポーネントが配置されています。
- kube-api-server
- etcd
- scheduler
- Controller Manager
- cloud-control-manager
### kube-api-server
Kubernetesクラスターのフロントエンドになるコンポーネントです。全ての操作がこのAPIサーバーを通じて行われます。例えば、Kubernetesリソースの作成、更新、削除などのリクエストを受け取り、処理を行います。
### etcd
Kubernetesの主要なデータストアで、クラスタのすべてのデータを永続化します。クラスタの設定情報、状態、メタデータなどを保存するために使われます。
### scheduler
Kubernetesのスケジューリングコンポーネントで、新しいPodがどのノードで実行されるかを決定します。
### controller manager
Kubernetesのコントローラを管理するコンポーネントで、クラスタの状態を所望の状態に保ちます。レプリカセット、デプロイメントなどのリソースを監視して、必要に応じてPodを作成、更新、削除します。
### cloud-control-manager
クラウドプロバイダ固有のコントローラを実行するコンポーネントで、クラウドリソースの管理を行います。例えば、ノードの管理であったり、ロードバランサの作成などを行います。

## ワーカーノード
ワーカーノードは、実際のワークロードを実行するために必要な以下のコンポーネントが配置されています。
- kubelet
- kube-proxy
### kubelet
各ノード上で、Podとコンテナのライフサイクルを管理します。Podの健康状態を監視して、APIサーバーにノードの状態を報告します。ユーザーは、このkubeletの報告をコマンドラインから確認することができます。
### kube-proxy
各ノード上でサービス間のネットワーク通信を管理し、適切なPodにトラフィックをルーティングします。

# まとめ
今回は簡単にKubernetesの各コンポーネントの役割と、アーキテクチャを説明しました。次回は、実際にKubernetesクラスタ上にPodをデプロイしてみたいと思います。
ecmwf-opendataをgoogle colaboratoryで使う

`ecmwf-opendata`をgoogle colaboratory(以下google colab)で使いたくて色々試していたが、gribデータをうまく読み込めず利用できなかった。また、なぜかこの手の記事を見つけられなかった（ので環境のせいかも）。

## google colabでの環境
```
!python --version
```
Python 3.10.12
```
cfgrib.__version__
```
'0.9.12.0'
```
xarray.__version__
```
'2023.7.0'

## エラーの状況
`cfgrib`はgribフォーマットのデータを`xarray`というPythonパッケージで読み込むための補助的な外部パッケージ。

よって、google colabで使う場合は以下のようにpipインストールをして利用する。

```
!pip install cfgrib
!pip install xarray
```
その後、`xarray`の`open_dataarray`メソッドにて、`engine='cfgrib'`とキーワード引数を設定し`DataArray`として読み込むのだが、以下のエラーを吐き出し利用できない。
```
import xarray as xr
da = xr.open_dataarray('data.grib2', engine='cfgrib')
```
ValueError: did not find a match in any of xarray's currently installed IO backends ['h5netcdf', 'scipy', store']

## 解決
このエラーは例えば`cfgrib`をインストールせずに利用すると出るエラーで、一般的なもの。故にエラー文を検索すると「先に`cfgrib`をインストールせよ」という解決しか出てこない。してるんだってば！

色々試した[^1]結果、pipインストールの場合は事前に`ecCodes`のライブラリをインストールしている必要があるらしい（[旧バージョンのcfgribドキュメント](https://pypi.org/project/cfgrib/0.8.4.5/)）。

これを踏まえ、`apt-get`(degian系Linuxのパッケージマネージャ)で`ecCodes`のライブラリをインストールする一文を加えると、データの読み込みに成功した。

```
!apt-get install libeccodes-dev  # これが大事
!pip install cfgrib
!pip install xarray
```

# 実行サンプル
以下にgoogle colabにて実際にgribデータを[ecmwf-opendata](https://github.com/ecmwf/ecmwf-opendata)でダウンロードし読み込むサンプルを示す。

```
!apt-get install libeccodes-dev
!pip install cfgrib
!pip install xarray
!pip install ecmwf-opendata

from ecmwf.opendata import Client

client = Client(source="ecmwf")

# 最新のアンサンブル予報の解析値（予報の元となるデータ）より300 hPa気圧面のジオポテンシャル高度分布データをdata.grib2として取得
client.retrieve(
    time=0,
    type="cf",
    step=0,
    param=["gh"],
    levelist=[300],
    target="data.grib2",
)

import xarray as xr
da = xr.open_dataarray('data.grib2', engine='cfgrib')
da.plot()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544845/97a3b0b0-cb51-b073-a757-79a3128dc498.png)


なお、`ecmwf-opendata`からデータをダウンロードすることで、ライセンス利用規約：Attribution 4.0 International (CC BY 4.0) に同意したことになります（[公式](https://apps.ecmwf.int/datasets/licences/general/)）。

## おわりに
解決してよかった。`apt-get`使えるのはたまげた。`pip`は`conda`と異なりライブラリまで管理してくれないことを学んだ。試してないが[condacolab](https://stackoverflow.com/questions/75229250/is-there-a-method-to-run-a-conda-environment-in-google-colab)というパッケージがあるらしい。とはいえ、いちいちcondaをインストールするのは面倒ね。

[^1]: インポートの順番の組み合わせ、xarray[complete]の利用、pip自体のアップデート、`!pip install eccodes`、いずれも失敗に終わった。
【Figma Plugins】Figma Pluginsからページを操作する

## はじめに
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390720/c8831ffa-90bf-1cab-ca20-6c91a8555471.png)

FigmaのPluginを開発する際、Figma Pluginsからページを操作したいと思ったことはありますか？
この記事では、Figma Pluginsからページを操作する方法を解説します。

## Figma Pluginsからページを操作する
### 新規ページを作る
新規ページを作るには、`figma.createPage()` を使うことで、新規ページを作ることができます。

```ts
const newPage = figma.createPage()
```

### ページを複製する
ページを複製するには、`clone()` を使うことで、ページを複製することができます。

**⚪︎ 現在のページを複製したい場合**
現在、表示しているページを複製したい場合は、`currentPage` に `clone()` をすることで複製することができます。

```ts
figma.currentPage.clone()
```

**⚪︎ 特定のページを複製したい場合**
`root`のchildrenは、`PageNode[]`のため、特定のページを複製したい場合は、`root`のchildrenの要素を `clone()` することで、複製することができます。

```ts
figma.root.children[0].clone()
```

**⚪︎ 生成したページを複製したい場合**
以下のようにすれば、生成したページを複製することが可能です。
```ts
const newPage = figma.createPage()
newPage.clone()
```

### ページを削除する
ページを削除するには、`remove()` を使うことで、ページを削除することができます。
`remove()` を使うと、指定したノードとそのノードの全ての子要素が削除されます。

**⚪︎ 現在のページ名を削除したい場合**
現在、表示しているページを削除したい場合は、`currentPage.remove()` で削除することができます。

```ts
figma.currentPage.remove()
```

**⚪︎ 特定のページを削除したい場合**
`root`のchildrenは、`PageNode[]`のため、特定のページを削除したい場合は、`root`のchildrenの要素に`remove()`を指定することで削除することができます。

```ts
figma.root.children[0].remove()
```

## まとめ
この記事ではFigma Pluginsからページを操作する方法を解説しました。

ぜひこの記事を参考にFigma Pluginsからファイルを操作してみてください。

---

最後まで読んでくださってありがとうございます！

普段はデザインやフロントエンドを中心にQiitaで記事を投稿しているので、ぜひQiitaのフォローとX(Twitter)のフォローをお願いします。

https://twitter.com/degudegu2510
FlutterでGeminiを使ってみた

# 導入
Flutterを使ってGoogle Generative AI (Gemini) を導入し、AI生成コンテンツを簡単に活用する手順を紹介します。FlutterアプリケーションにAI機能を追加してみましょう。
今回、GoogleのGenerative AIサービス「Gemini」をFlutterアプリに統合し、テキスト生成機能を実装する方法を説明します。

# 手順

## 利用するパッケージ

こちらがGiminiを利用する上でメインのパッケージになります。

https://pub.dev/packages/google_generative_ai

Geminiを利用するために、以下のパッケージを追加します。
- [google_generative_ai](https://pub.dev/packages/google_generative_ai): Google Generative AIのAPIを利用するためのパッケージ(上記と同じ)
- [flutter_dotenv](https://pub.dev/packages/flutter_dotenv): .envファイルから環境変数を読み込むためのパッケージ

ターミナルで次のコマンドを実行して、これらのパッケージをインストールします。

```bash
flutter pub add google_generative_ai
flutter pub add flutter_dotenv
```

## APIキーの取得

Google Generative AIサービスを利用するにはAPIキーが必要です。以下の手順でAPIキーを取得します：

1. [Google AI Studio](https://aistudio.google.com/app/apikey)にアクセスします。
2. Googleアカウントでログインします。
3. 「APIキーの取得」セクションで、新しいAPIキーを生成します。
4. 生成されたAPIキーをメモ(コピー)しておきます。

## 実装

次に、FlutterアプリにGeminiを利用するためのコードを記述します。

### 1. `.env`ファイルの作成

プロジェクトのルートディレクトリに`.env`ファイルを作成し、以下のようにAPIキーを設定します。

```.env
GEMINI_API_KEY=上記で取得したAPIKey
```

### 2. `main.dart`の編集

`main.dart`に以下のコードを追加して、環境変数を読み込むようにします：

```dart:main.dart
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';

Future main() async {
    // .envファイルを読み込み(この1行を追加)
    await dotenv.load(fileName: ".env");
    
    runApp(MyApp());
}
```

### 3. テキスト生成関数の追加

Gemini APIを利用してテキストを生成する関数を作成します。

```dart
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:google_generative_ai/google_generative_ai.dart';
import 'dart:developer';
import 'dart:io';

Future<String> chatting(String inputText) async {
    var apiKey = dotenv.get('GEMINI_API_KEY');
    if (apiKey == null) {
        log('API Key取得失敗');
        exit(1);
    }
    
    final genModel = GenerativeModel(model: 'gemini-pro', apiKey: apiKey);
    final content = [Content.text(inputText)];

    final response = await genModel.generateContent(content);
    String resText = response.text ?? 'Gemini返答失敗';
    return resText;
}
```

### 4. テスト

テキスト生成関数が正しく動作するかをテストします。例えば、以下のように簡単なUIを作成し、`chatting`関数を使って生成されたテキストを表示するようにします：

```dart:MyApp.dart
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Gemini Text Generator')),
        body: Center(
          child: FutureBuilder<String>(
            future: chatting('こんにちは、Gemini!'),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.waiting) {
                return CircularProgressIndicator();
              } else if (snapshot.hasError) {
                return Text('Error: ${snapshot.error}');
              } else {
                return Text(snapshot.data ?? 'レスポンスなし');
              }
            },
          ),
        ),
      ),
    );
  }
}
```

これで、アプリケーションを実行すると、指定したテキストに対してGeminiから生成された応答が表示されます。

# 終わりに

Flutterを使用してGoogleのGenerative AI「Gemini」を統合する手順を解説しました。

ぜひ試してみてください！
2024年～2025年までの私の学習計画　

## はじめに
システム運用保守10年目ですが、
2024年～2026年までの学習計画を記事にしました

## 受験計画
## 2023年
GCP ACE　2023年2月合格
GCP CDL  
SOA　2023/9/4受験　期限 2026年9月4日

## 2024年 AWS認定状況
CLF 2027/5/10 有効期限
DVA 2027/5/10  有効期限
SOA　2026/09/04 有効期限
DBS 有効期限切れ
SAA 2024/9受験　2024/11/19 有効期限
SCS 2024/11受験　2024/10/16 有効期限
SAP 2025年3月受験　

lpicレベル1 101 780点合格 2024年1月6日
DVA合格　2024/5/10合格 期限2027年5月10日

延期 lpicレベル 102 2024年8月31日→ 2024年12月以降に受験する　SAP合格後勉強開始する

**英会話は毎日10分　平日に継続する**
**Zabbixを習得する**

## 2025年
GCP CDL 2025年11月まで有効期限
GCP ACE 2026年2月まで有効期限

lpicレベル2 202 2025年7月取得
lpicレベル2 201 2025年10月取得

DEA 2025年12月受験予定 

### 学習計画

cloudtechで基本を理解する 7月
動画レッスンを見る

WEB問題集　SCS問題 7問解く
C_TS4FI_2021 SAP Certified Associate - SAP S/4HANA 2021 for Financial Accounting対策（2/100）

【2日目】
トピック 1：組織割当およびプロセス統合（2/15）

≪問題2≫
売上原価会計で推奨される組織ユニットは何ですか。
□管理領域
□機能領域
□セグメント
□利益センタ

≪解答≫
□管理領域
■機能領域
□セグメント
□利益センタ

≪解説≫
◆売上原価会計において、機能領域は、会社の費用を個々の機能単位（生産、管理、販売、マーケティング、研究開発など）に従って定義するために使用されます。これにより、機能領域ごとの損益計算書を作成することが可能となります。
iPhoneからNotionへ簡単に投稿する

# はじめに

NotionにiPhoneから投稿しようと思って、少し悩んだのでまとめます。

# 問題

NotionにiPhoneから投稿するにあたり、どのアプリを使うのが良いか迷いました。

# 解決方法

Fast Notionと、Instant Notionを以下の観点で比較しました。

- 無料でどこまで試せるか？
- 自分の使い方に合っているか？

## Fast Notion

https://apps.apple.com/jp/app/fast-notion/id1505194382

DBへの投稿が無料で試せなかったので、自分の使い方では試せず、諦めました。

## Instant Notion

https://apps.apple.com/jp/app/notion-instant-note-%E9%80%9F%E3%81%84%E3%83%A1%E3%83%A2-fast/id1639385303

無料でDB接続を1つまで使えるので、こちらが自分の使い方に合ってました。もう少し使い込んでから、課金も考えようと思います。

# 終わりに

ほんとは、TsuburayaさんのYoutubeには大変お世話になっているのでFast Notion使いたかったです。
Fast Notionも、Instant Notionと同じようなお試し＆課金体系にならないかな？と思いました。

# 参考

Instant Notionは、管理の山田さんもお勧めしてました。

https://note.com/kanri_no_yamada/n/nbb7608a5e58f
⑪１日１０分で理解するコンテナ技術入門 - Kubernetesの概要とインストール -

[前回](https://qiita.com/goroneko/items/e2a60def9d0acd449a34)は、Docker Composeについて紹介しました。より柔軟にコンテナを管理するためのツールとして、今回からKubernetesについて説明していきたいと思います。

# Kubernetesとは
Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケール、管理などを自動化するソフトウェアです。こういったソフトウェアはコンテナオーケストレーションツールと呼ばれ、Kubernetes以外にもDocker Swarm, Apache Mesosなどがあります。他にもマネージドサービスとして、Amazon ECSやGoogle Cloud Runなどがあります。
Kubernetesはこういったコンテナオーケストレーションツールの中でも、最も普及しているツールです。
## 主な機能
- **コンテナのオーケストレーション**
    - 複数のコンテナをクラスタ環境で効率的にデプロイ、管理
- **スケーリング**
    - アプリケーションの負荷に応じてスケールアップ、スケールダウンが可能
- **自己修復**
    - クラスタ内で障害が発生した場合、自動的にコンテナを再起動、再配置
- **サービスディスカバリとロードバランシング**
    - クラスタ内の各コンテナのネットワーク通信を管理
- **ストレージの管理**
    - 様々なストレージシステムを統合し、コンテナに対する永続的なストレージを提供
- **デプロイメントの自動化**
    - 宣言的な設定ファイルを用いてアプリケーションのデプロイを自動化

## Kubernetesのメリット
- ポータビリティ
    - どんな環境でもアプリケーションを実行できるので、ローカル開発環境からクラウド環境まで一貫性がある
- スケーラビリティ
    - オートスケーリング機能によって、アプリケーションの需要に応じてリソースを動的に調整できる
- 柔軟性
    - 多様なワークロードに対応可能
- 効率性
    - クラスタ内のコンテナの配置を最適化できる

# Kubernetesのインストール方法
ローカルの学習環境としては、`minikube`が便利です。ここでは`minikube`のインストール方法を紹介します。
基本的には[公式サイト](https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fdebian+package)に全て載っています。

インストールは非常に簡単で、LinuxでDebian系を使っている場合、以下のコマンドだけでインストールできます。
```bash
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
sudo dpkg -i minikube_latest_amd64.deb
```
インストールが完了したら、minikubeを起動します。
```bash
minikube start
```
以上でインストールは完了です。

Docker Desktopをお使いの方は、チェックマークを入れるだけでKubernetesの機能を有効化できるため、そちらを利用しても良いかと思います。

# まとめ
今回はKubernetesの概要と、ローカルでKubernetesを試すためのminikubeのインストール方法を紹介しました。[次回](https://qiita.com/goroneko/items/1c1caf6744f359914c30)は、Kubernetesの簡単なアーキテクチャの紹介と、基本用語について整理したいと思います。