OmniAICreator/Qiita-1.07M huggingface dataset:
DDEV + Colima

実行環境

* macOS Monterey v12.5.1
* Apple M1 Pro

DDEVのインストール

1. HomebrewでDDEVをインストールする。
   ```tarminal
   $ brew install ddev/ddev/ddev
   ```
1. mkcertを使用してローカルCA(認証局)を作成する。
   ```tarminal
   $ mkcert -install
   ```

Colimaのインストール

1. HomebrewでColimaをインストールする。
   ```tarminal
   $ brew install colima
   ```
1. Colimaを起動する。
    ```
    $ colima start
    ```
1. しかしエラー発生。
    ```
    FATA[0000] limactl is running under rosetta, please reinstall lima with native arch
    FATA[0000] lima compatibility error: error checking Lima version: exit status 1
    ```

エラーの解消

エラーメッセージで検索すると同様の事象が他でも発生している模様。
エラーが解消したという[このコメント](https://github.com/abiosoft/colima/issues/702#issuecomment-1600029743)を参考にHomebrew自体を再インストールしてみる。

1. Homebrew自体を[アンインストール](https://github.com/homebrew/install#uninstall-homebrew)する。
    ```
    $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
    ```
1. Homebrewを[インストール](https://brew.sh/)する。
    ```
    $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    (省略)
    ==> Next steps:
    - Run these two commands in your terminal to add Homebrew to your PATH:
    (echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/hikarumaruyama/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)"
    ```
1. もう一度Colimaをインストールする。
    ```
    $ brew install colima
    ```
1. Colimaを起動する。
    ```
    $ colima start

    INFO[0000] starting colima
    INFO[0000] runtime: docker
    INFO[0000] creating and starting ...                     context=vm
    INFO[0144] provisioning ...                              context=docker
    INFO[0145] starting ...                                  context=docker
    INFO[0146] done
    ```

Docker DesktopからColimaに切り替える

※Colimaが起動中は、常にデフォルトのコンテキストがColimaに設定されるようになっているようなので以下の設定は不要だが、備忘録として残しておく。

1. 

```
$ docker context list

NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                                            KUBERNETES ENDPOINT   ORCHESTRATOR
colima *            moby                colima                                    unix:///Users/hikarumaruyama/.colima/default/docker.sock
default             moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                                                      swarm
desktop-linux       moby                                                          unix:///Users/hikarumaruyama/.docker/run/docker.sock
```

1. NAME列にあるcolimaに*がついていなければ、次のコマンドを実行してColimaをデフォルトに設定できる。
```
docker context use colima
```


## 参考

* [How I switched from Docker Desktop to Colima](https://opensource.com/article/22/9/docker-desktop-colima)
【ChatGPT＋DALL-E3】は単語からでも生成できるけど、それではガチャ引き。


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

　今回は、単語から画像生成はできるけど、それはガチャ頼りだ、という話です。

:::note info
本記事は、ChatGPT（有料版）
＋DALL-E3で行なっております。
画像はあります。　あしからず。
:::

　最近、ChatGPTが
　　英語で返答してくるのですけど、
　　　DALL-E3の利用だから
　　　　仕方ないか、と
　　　　　思っていました。

　でも、
　　日本語の質問に、
　　　英語で返答してくるのは
　　　　いただけない。

　設定で、
　　日本語にしようかと
　　　開いたところ、
　　　　Languageがなくなっていた。

　いろいろと考えた末に
　　Custom instructionsを
　　　使うことにしました。

　Custom instructionsは
　　セッションの事前設定で
　　　ここに指示を書けば、
　　　　セッション全体で
　　　　　この指示が活きます。

　やり方は
　　メインメニューの
　　　“Customize ChatGPT”から入り、
　　　　下の欄に下記を書き込みます。

　“返答の言語は、必ず日本語で。”

　これで
　　とりあえずは
　　　日本語で返答してくれます。

　まぁ、たまに英語になりますけど😅
***
　さて、
　　本題です。

　ChatGPT＋DALL-E3は
　　単語ひとつだけでも
　　　描画してくれます。

　例えば、
　　“忍者。描画”とかでも
　　　忍者を描いてくれます。
![1714445559812.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/fb984628-eb59-5a02-7663-c37826473e50.jpeg)

　プロンプトを見ればわかりますが、
　　たいした容姿の説明はありません。
>忍者は顔の大部分を覆う頭巾をかぶり、片手に刀、もう片方の手には手裏剣を持っています。

　こんな程度です。

　つまり、
　　“忍者”という単語にその容姿が
　　　含まれていることになります。

　これは
　　ありがたくもあり
　　　ありがたくもないものです。

　だって
　　DALL-E3が描く“忍者”は
　　　アメリカで流通している
　　　　イメージが、もとに
　　　　　なっていますからね。

　上の画像をごらんください。
　　フードをかぶっています。
　　　肩衣（かたぎぬ）を着用、
　　　　たくさんの刀を持っている、
　　　　　などなどのおかしな点が
　　　　　　見られるわけです。

　もちろん、
　　描き直させると
　　　忍者らしい忍者が
　　　　出てきたりもします。

　そこで私が気になったのは
　　“忍者”の装備品です。

　いろいろとありますが、
　　ChatGPTはどのような知識を
　　　持っているのでしょうか。
***
***user***
質問。この忍者の装備について教えてください

***ChatGPT***
忍者の装備は非常に多岐にわたり、彼らの秘密裏の任務を支援するために特別に設計された道具が多数含まれています。主な装備は以下の通りです：

1. **服装**: 忍者は動きやすさとカモフラージュを目的とした装備を着用します。一般的には「忍び装束」と呼ばれる黒または濃紺の服で、体をほとんど隠すことができます。

2. **武器**: 忍者は多様な武器を携帯していました。代表的なものに、刀（カタナ）、手裏剣（シュリケン）、吹き矢、そして鎖鎌（クサリガマ）などがあります。

3. **道具**: 忍者は多種多様な特殊道具を使用していました。これには、鉤（カギ）付きの縄や鎖、盗聴や火を起こすための道具、偽の身分証明書や地図などが含まれます。

4. **足袋**: 静かに歩くために特別に作られた分厚い底の靴を履きます。

これらの装備はすべて、忍者が敵に気付かれることなく任務を遂行するために極めて重要でした。
***

　実は、
　　こうしたことを尋ねると、
　　　多少は、それをもとに
　　　　描画してくれる
　　　　　ようになります。

　ChatGPTが
　　プロンプトに
　　　組み込んでくれるんですね。

　単に、“忍者”というよりも
　　説明がある方が
　　　DALL-E3には
　　　　ありがたいわけです。

　それでも
　　DALL-E3は
　　　知識に流されることが
　　　　多いので、注意は必要ですが。

　こんなことが
　　参考になるかは
　　　疑問ではありますが、
　　　　みなさんの
　　　　　作品制作の糧に
　　　　　　なれば、幸いです。

　今回は、ここまで。
rex0220 計算式プラグイン ユーザー選択からユーザー名セット

[rex0220 計算式プラグイン](https://qiita.com/rex0220/items/ae83c6d5ce50ff7a9a73)で、ユーザー選択項目から文字列項目にユーザー名をセットします。
一覧画面においてユーザー名でソートし、ユーザーごとにレコードを見やすくすることができます。

# 概要

編集画面でユーザー選択から自動的にユーザー名をセットします。
プラグイン設定画面の「既存レコードを変更」で、全レコードにユーザー名を反映できます。

- 編集画面
![2024-04-30_11h33_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/959468dc-9cb1-97c3-0237-1a9299bc739e.png)

- 一覧画面　ユーザー名でソート
![2024-04-30_11h36_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/6a459d1d-4a82-f298-9e5e-5819a699446b.png)

# 操作例

![2024-04-30_11h40_51.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/770a3bc1-a96e-a5ed-6a2c-c12302cd2658.gif)

# 計算式プラグイン設定

ユーザー名（文字列）の計算式に、「ユーザー選択」を指定するとユーザー名をカンマ区切りで設定します。

![2024-04-30_11h43_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/c7e99135-d4b0-768c-a1c7-3392dba3be58.png)

```.js
// ユーザー名 SINGLE_LINE_TEXT
ユーザー選択
```

# 既存レコードの変更

![2024-04-30_11h46_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/af02216a-bda5-64cf-d781-3e950a8b229c.png)
CohereのモデルをAWS上（Bedrock or SageMaker）で使う方法（2024/4/30時点）

Cohereで色々なモデルがリリースされてまして、AWSのBedrockとSageMakerでの提供状況を表にしました。

## テキスト生成モデル（Commandシリーズ）

| モデル名 | Bedrock提供状況 | SageMaker提供状況
| --- | --- | --- |
| Command R+ | 提供 | 提供 |
| Command R | 提供 | 提供 |
| Command | 提供 | 提供 |
| Command-Light | 提供 | 提供 |

* Cohereが提供している`command-nightly`と`command-light-nightly`はいずれも未提供

## 埋め込みモデル（Embedシリーズ）

| モデル名 | Bedrock提供状況 | SageMaker提供状況
| --- | --- | --- |
| Embed English v3.0 | 提供 | 提供 |
| Embed Light English v3.0 | - | 提供 |
| Embed Multilingual v3.0 | 提供 | 提供 |
| Embed Light Multilingual v3.0 | - | 提供 |

* BedrockはLightモデルが未提供

## リランクモデル（Rerankシリーズ）

| モデル名 | Bedrock提供状況 | SageMaker提供状況
| --- | --- | --- |
| Rerank English v3.0 | - | 提供 |
| Rerank Multilingual v3.0 | - | 提供 |

* BedrockはRerankシリーズが未提供

## まとめ

Bedrockにリランクモデルが無いことがわかりました。

リランクモデルをSageMakerでデプロイする際の料金はこちら。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/9b600ac4-f256-c1c3-b681-b135f57fe7af.png)
簡易DHCPサーバ確認

send DHCP Discover
```python:send.py
from scapy.all import Ether, IP, UDP, BOOTP, DHCP, sendp, RandMAC

for _ in range(5):
    mac = str(RandMAC())
    chaddr = "".join([chr(int(x, 16)) for x in mac.split(":")])

    discover = (
        Ether(dst="ff:ff:ff:ff:ff:ff", src=mac, type=0x0800)
        / IP(src="0.0.0.0", dst="255.255.255.255")
        / UDP(dport=67, sport=68)
        / BOOTP(op=1, chaddr=chaddr)
        / DHCP(options=[("message-type", "discover"), ("end")])
    )
    sendp(discover, verbose=0)

```

recieve DHCP Offer
```python:recv.py
from scapy.all import sniff


def on_dhcp_offer(packet):
    print(packet.summary())


sniff(prn=on_dhcp_offer, filter="udp src port 67", store=0)
```

filterはBPF syntax。詳細[こちら](https://biot.com/capstats/bpf.html)
プロダクトマネージャーの役割は「プロダクトマネジメントをすること」だけではないかも

:::note warn
引用していた内容と記事の内容に不一致があったため、記事の修正を行いました。
:::

## はじめに
今回プロダクトマネージャーの動きを行っていく中で、新しい気づきがあったので記事としてまとめました。

## プロダクトマネジメントをプロダクトマネージャーだけで行わない
プロダクトマネジメントとは、プロダクトを成功に導く考えであり、これはプロダクト作りに関わる人であれば必ず必要になってくるものです。
つまり、プロダクトマネジメントとは特定の誰かが行うアクションではなく、チームや組織全体で行っていくものだと考えています。

## プロダクトマネージャーの役割
プロダクトマネージャーの主の役割とは、もちろんプロダクトマネジメントを行うことです。
しかし、プロダクトマネジメントが行えている状態を組織として目指すためには
「プロダクトマネジメントをすること」だけではなく「プロダクトマネジメントができる組織づくり」も行う必要があると考えています。
そのためには、プロダクトマネージャーとして、「プロダクトマネージャーがいなくてもプロダクトマネジメントが行えている状態」も目指すことで、より価値のあるプロダクトマネジメントが行えるようになるのではないでしょうか？

## プロダクトマネージャーはスクラムマスターに似ているかも
プロダクトマネージャーの役割には「プロダクトマネジメントを行うこと」だけではなく「プロダクトマネジメントができる組織づくり」も含まれていると紹介しました。
これは、スクラムでいう「スクラムマスター」に近い役割だと感じます。
スクラムマスターの役割も「組織がスクラムを行える状態にすること」が役割であり、ゴールは「スクラムマスターが必要ない状態になること」であると言います。
組織としてプロダクトを作るという観点でいうと、プロダクトマネジメント、アジャイルには共通点が多く、密接な関わりがあると感じています。
RPIのIPアドレス固定

RaspberryPiOS12（Bookworm）でラズパイのIPアドレスを固定する方法は、[公式ドキュメント](https://www.raspberrypi.com/documentation/computers/configuration.html#assign-a-static-ip-address)では「ルーターで設定する」と書かれている。
MACアドレスを調べる必要がある。
![router_settings.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274766/6ea9c5c5-850a-a36e-362c-837776964a58.jpeg)
【クイズ】. の使い方を見分けろ！

# はじめに

プログラミング全般において、`.`がさまざまな形で使われています。

今回は、クイズ形式の記事です。`.`の知らない使い方があるかも？

全11問、お楽しみいただければ幸いです。

# クイズ

### 1
以下の使われ方をするとき、`.`は何を表す？
```bash
ls -a .
cd ./dir
cp -r . /path/to
```
<details><summary>答え</summary>

「カレントディレクトリ」

「現在のディレクトリ」を指します。
</details>

### 2
以下の使われ方をするとき、`..`は何を表す？
```bash
cd ..
ls ..
cat ../file
```
<details><summary>答え</summary>

「親ディレクトリ」

一つ上の階層（ディレクトリ）を指します。
</details>

### 3
以下の使われ方をするとき、`.`は何を表す？
```
example.txt
example.json
```
<details><summary>答え</summary>

「拡張子」

ファイルの種類を示します。
</details>

### 4
以下の使われ方をするとき、`.`は何を表す？
```
.zshrc
.env
```
<details><summary>答え</summary>

「隠しファイル」

通常、ユーザーに表示されないファイルです。
簡単に変更するべきでない、重要なファイルであることが多いです。
</details>

### 5
以下の使われ方をするとき、`.`は何を表す？
```
/(.*)example/
/https?:\/\/(.*)/
```
<details><summary>答え</summary>

「任意の１文字」

`.`は、正規表現において「任意の１文字」を表す特殊記号です。
</details>

### 6
以下の使われ方をするとき、`.`は何を表す？
```
www.example.com
```
<details><summary>答え</summary>

「異なるレベルのドメインの区切り」

追記：偶然発見した記事
内容の正確な理解ができているわけではないのですが、ご興味ある方はどうぞ。

https://gigazine.net/news/20240429-trailing-dot-in-domain-names/

</details>

### 7
以下の使われ方をするとき、`.`は何を表す？
```js
console.log()
array.reverse().map(e => e * 2).join('')
```
```rb
p person.name
5.times do |e|
  p e * 2
end
```
<details><summary>答え</summary>

「プロパティアクセサ・メソッドチェーン」

「プロパティアクセサ」はオブジェクトへのアクセスを提供するもの
「メソッドチェーン」はメソッドを連ねて、次々にデータを受け渡して処理することです。
</details>

### 8
以下の使われ方をするとき、`..`は何を表す？
```rb
case num
when 0..4
  0
else
  10
end
```
<details><summary>答え</summary>

「範囲オブジェクト」

Ruby等における用法です。`..`は「範囲オブジェクト」を表します。
なお、`...`もあります。違いは、「終端を含むかどうか」です。

https://docs.ruby-lang.org/ja/latest/class/Range.html

</details>

### 9
以下の使われ方をするとき、`...`は何を表す？
```js
const array2 = [...array, 1, 2, 3]
console.log(sum(...array2))
```
<details><summary>答え</summary>

「スプレッド構文」

JSにおいて`...`は「スプレッド構文」を表します。
配列などの要素の展開に便利です。
</details>

### 10
以下の使われ方をするとき、`.`は何を表す？
```scss
.container {
  color: red;
}
```
```slim
div.container
h1.title-text
```
<details><summary>答え</summary>

「クラス名」

CSSにおける用法です。HTMLタグを装飾する時に使います。
上の例はcssとslimです。slimを使用することで、htmlをよりシンプルに書くことができます。
</details>

### 11
以下の使われ方をするとき、`.`は何を表す？
```haskell
checkForFactor :: Int -> Int -> Bool
checkForFactor = (.) (== 0) . mod
```
<details><summary>答え</summary>

「関数合成」

Haskellにおける用法です。超マイナーなので覚えなくていいです。
Haskellを学ぶこと自体は、新しい感覚が身につくのでオススメです。
</details>

# おわりに

以上、`.`の様々な使用法でした。
これだけの違いがあることに驚きですし、文脈でどれがどれかわかるエンジニア自体も結構すごいのでは・・・？

この他`.`の用法、クイズの解説については
ぜひコメントいただけると嬉しいです。

さて、次は何を書こうかしら・・・

追記
versionの`.`もあるよねと教えていただきました。確かに。

https://dev.classmethod.jp/articles/versoning-with-pictures/
【PDO】PHPでDB接続 

# PHPでDB接続

PDO (PHP Data Object) を使用しPHPによるDB接続する方法を解説します。

DBはPostgreSQLを使用します。

大まかな流れとしては、<br>
 __1. DB接続__
 __2. SQLクエリの実行__
 __3. データ (クエリ) の取得__

です。

<br>

DB接続の前に、php.iniファイルを編集してPDOを使用できるようにしないといけません。

※__C:\xampp\php\php.ini__ の 910～950行目あたりにある

```
;extension=pdo_mysql
;extension=pdo_pgsql
;extension=pdo_sqlite
```

:::note info

使用したいDBに対応している、行頭の 「;」 を削除します。その後、Apacheを再起動します。

:::



## 1. DB接続
では、php.iniファイルの設定ができたらPHPからDB接続していきます。<br>
まず、PDOクラスに接続したいDBの情報(DB名、ホスト名、ポート番号、ユーザー名、パスワード)を引数で渡します。その返り値を取得するインスタンス$dbhを生成します。

__PostgreSQLの場合__
```php:DB接続
$dsn = 'pgsql:dbname=データベース名 host=ホスト名 port=ポート番号';
$user = 'ユーザー名';
$password = 'パスワード';

$dbh = new PDO($dsn, $user, $password);
```

※ $dsn は (Data Source Name) でDBに接続する情報が代入

※ $dbh は (Database Handle) の略でPDOオブジェクトを管理


## 2.SQLクエリの実行
変数sqlには実行したいクエリを作成。引数をクエリに代入できます。
変数stmtには実行するSQLを、prepareメソッドにて実行するためのPDOステートメントを定義します。


```php:クエリ実行
$sql = 取得したいSQL文
$stmt = $dbh->prepare($sql);
```


## 3.データ (クエリ) の取得
変数resultには、$stmtに対しての結果を取得します。
結果が1行ならfetchメソッド、結果が複数ならfetchAllメソッドを利用します。
(PDO::FETCH_ASSOC)は、結果セットから次の行を取得するPDOステートメントです。

```php:データ取得
$result = $stmt->fetch(PDO::FETCH_ASSOC);
```

SELECT文の場合は、複数行がほとんどで、fetchAllを利用して結果をforeachで配列を取得するのが一般的です。



## 参考 
+ [PHPのPDOからSQLを実行する - CODE4U](https://blog.code4u.org/archives/1597)

<br>
著者: E.R (株式会社ウィズツーワン)
toast messageのまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)



+ [保存時のトーストでNameでなくてIdが表示される](https://qiita.com/Keiji_otsubo/items/5a7e021ef49dec5fc89b)

+ [マップ内にトースト メッセージを表示する](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007St7Fh)
Unityでオブジェクトをの頂点をそろえたい

## ☆こんな人向け☆ ##
- マップ制作などでオブジェクトの頂点をそろえて配置したい

## 頂点をそろえたい
Unityでアセットなどを使ってマップを作成するとき、Inspector上で座標を確認しながらオブジェクトの角をそろえたりしていると頭がおかしくなります。

**"頂点スナップ"** を活用することで簡単に頂点をそろえることができます。

今回はこのPrefabを使用して説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781381/906239db-a0d9-a72c-1174-c743aaee2363.png)

一見、上のオブジェクトは手前の角がそろっているように見えますが、拡大すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781381/a1b5dc33-622f-c3dc-2c2d-e4cd88771170.png)

かすかに角の部分がずれていることがわかりますね。ここの頂点をそろえます。

エディタ上でVキーをホールドしている間、**頂点スナップモード**になります。

ちなみにShift+Vでトグル切り替えができます。
![レコーディング 2024-04-30 101223.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781381/486dbd92-bb58-a854-7d39-4e5cae1782ca.gif)

頂点スナップモードでは普段はオブジェクトの中心にあるTransformの三色の矢印が、カーソル付近の頂点に移動します。

この状態で合わせたいオブジェクトの頂点をほかのオブジェクトの頂点にドラッグアンドドロップすると、
![レコーディング 2024-04-30 105640.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781381/336ef78d-0a11-eed1-bb07-5df9794f6ca5.gif)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781381/9c82976a-fedd-3625-b455-9cf83a0e8f19.png)
頂点を合わせることができました！

アセットを配置してマップを作成する際には非常に便利なのでぜひ覚えてください。
# バージョン情報 #
2022.3.1f1
Sales Engagement Performance Dashboard




+ [Sales Engagement Performance dashboard not showing](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007bLZLs)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/885d105e-7801-b5a7-0b36-4a8781a8a8c6.png)

:::note
I ran into the same issue but it's been so long since I was able to get it going that I'm not finding the exact resource to share, so sorry! However, what worked for me was going to Setup > Feature Settings > Analytics > Apps > Auto-Installed Apps and ensuring the data is being picked up by the Sales Engagement Performance app.

I ran into the same issue but it's been so long since I was able to get it going that I'm not finding the exact resource to share, so sorry! However, what worked for me was going to Setup > Feature Settings > Analytics > Apps > Auto-Installed Apps and ensuring the data is being picked up by the Sales Engagement Performance app.
:::

+ [Sales Engagement Performance Dashboard](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007LpBdmSAF)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/25502815-bbfe-09b8-5352-d379afcc50e4.png)


+ [Sales Engagement Performance dashboard not showing](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007bLZLsSAO)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7a324bd1-a433-714a-eb19-dc806eabb993.png)

[Analytics for Sales Engagement](https://help.salesforce.com/s/articleView?id=sf.hvs_reports_performance_analytics.htm&type=5)
初心者の私がLinuxを勉強するために参考にしたサイト・参考書

## はじめに
私は、Linuxを勉強して約2ヶ月が経ちました。
4月にSESの会社に就職しましたが、サーバー構築がメインの仕事になるということでLinuxの勉強を始めました。

Linuxの勉強は就職する1ヶ月前から独学ではじめました。
ただ、初心者から独学で勉強するのはだいぶキツかったです。

こんないいサイトあったの！？もうちょっと早く知っておけばよかったなぁという後悔もあるので、
これからLinux勉強する方の参考になれば幸いです。

## Linuxを勉強するために参考にしたサイト

1.[InfraAcademy](https://engineer-ninaritai.com/infraacademy/)
  Linuxを勉強するなら、間違いなくこのサイトだと思います。
  コマンドを実行する環境がブラウザで使えるので、virtualboxを準備する必要なし。
  Linuxのコマンドからサーバーの構築まで幅広く学べたのがよかった。
  このサイトは知識が全くない人に向けて作っていると思う。前提知識が全くなくてもスルスルと理解できました。

2.[もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ！】](https://www.udemy.com/course/linux100test/)
  これは、Udemyの講座です。
  電車の中で流し見していました。
  初心者にとっても分かりやすい内容で解説していたのがよかったです。
  Linux 100本ノックという名前の通り、Linuxのコマンドの練習問題をできるのがよかったです。アウトプットも兼ねていました。

3.[ChatGPT](https://chat.openai.com/)
chatGPTはみなさんも知っての通りです。
勉強サイトではありませんが、勉強には必須のツールだと思っています。分からない内容やエラーが出た時に使っていました。
独学だと、誰にも聞けないので、ChatGPTがあると一安心です。

4.[Linuxをマスターしたい人のための実践Ubuntu](https://www.amazon.co.jp/s?k=Linux+%E5%85%A5%E9%96%80&i=digital-text&__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1050YH8R0ZWP8&sprefix=linux+%E5%85%A5%E9%96%80%2Cdigital-text%2C177&ref=nb_sb_noss_1)
こちらはLinuxの参考書です。
最初に購入しました。
ただ、全く知識がない状態でこの本を読むのは難しいと思いました。
学習の最初の1週間でやりましたが、あまり進まず。
先ほど記述したサイトを先に進めてから読み直すとある程度理解できました。
参考書は詳しい内容も解説されていますが、サイトで概要を理解してから読んだ方がいいですね。

## さいごに
Linuxの勉強はこれからも続けていきますが、他にもおすすめのサイトや参考書があったら教えてください。
Linux以外にもネットワークやプログラミングにも挑戦したいと思っています。

勉強頑張ります〜♪
BlueRetroとは何か

![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) 概要をわかりたい

## BlueRetroとは何か
BlueRetroはレトロゲーム機に最新の無線コントローラーをなんでも接続できるようにするオープンソースのプロジェクトのようです。

**現代のBTリモコン -> BlueRetro! -> 多様なレトロゲーム機**

と接続します。
過去と未来を一点でつなぐ最高のソリューションです。

最初は、通販で買ってドングルみたいに使う便利グッズ...という程度の認識しかなかったのですが、少し調べたら全然違いました。
このリソースを利用できれば自作のロボットや体感ゲームなどのハードウェア開発系のリモコン環境が一気に楽になるかもしれない！ということで、少しだけ導入を試してみます。


## 準備物・実施環境
- ESP32DevkitC
- Windows10

## ファームウェアの準備

まず公式サイトに行ってみます。

https://www.blue-retro.com/

BlueRetroのハードウェアはESP32のようで、ESP32DevkitCにファームウェアを書き込んでBlurRetro化することができるようです。
下記のリンク↓から作業を進めていきます。

https://github.com/darthcloud/BlueRetro/wiki/Flashing-firmware-Windows-10

[サポートページ](https://github.com/darthcloud/BlueRetro/wiki/Flashing-firmware-Windows-10)の指示に従い、↓でファームウェア本体をDLします。

https://darthcloud.itch.io/blueretro

vx.x.x_hw1.zipというファイルが今回のターゲットです。
hw2というのがありますが、これは強化されたバージョン２的なもののようでうs。

## ファームウェアの書き換え

Espressif公式↓からFlash Download ToolsなるものをDLして展開します。

https://www.espressif.com/en/support/download/other-tools


[先ほどのサイトのサポートページ](https://github.com/darthcloud/BlueRetro/wiki/Flashing-firmware-Windows-10)に戻ります。
下図のように画面の指示に従って４つのファイルを選択し、書き込み設定をします。0x1000などのアドレスを間違わないようにしましょう。
COMポートの選択で迷いがちですが、ESP32DevkitCの接続前に画面下のCOMポートをチラ見しておき、接続後にCOMポートを見た時に増えているポートを選べばOKです。
Startを押してプログレスバーを待てば書き込みが完了です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/b95c1fac-57c3-7691-b02c-9a37e3306008.jpeg" width=300>

## いざ接続

ESP32DevkitCに電源が入った状態で、Bootボタンを押します。3秒長押しでペアリングモードのようです。リモコン側のペアリングボタンを押せば接続確立！

...のはずでしたが、どちらのボタンをどういうタイミングで押すとペアリングしやすかのコツがいまいちわかりませんでした。wiiリモコンは接続できたものの、PS4リモコンはなかなか接続が確立せず。

ちなみにリモコンは16個ぐらいまで覚えてくれるそうなので、一回ペアリングできれば次からのペアリングは電源投入のみでいけそうです。

PS4リモコンの接続のために以下の方法に進みました。

## 設定はブラウザでblueretro.io

ここからがなかなかすごいのですが、ファームウェアアップロード後のもろもの設定はブラウザからBluetooth経由で行うシステムです。
Blueretro.ioというサイトにBluetooth搭載のスマホやPCでアクセスします。自分はMacBookAir+Chromeでアクセスして作業しました。
ファームウェアの書き換えまでBT経由でできるということで、ESP32本来のポテンシャルを十分に引き出したすごい使い方です。

https://blueretro.io/

ボタンの出力種類の設定などもいろいろできるようです。
まずはこのサイトを活用してPS4リモコンの接続先の固定に挑戦してみます。

## blueretroのBT_MACアドレスを調べる

PS4リモコンの相手となるESP32のBT_MACアドレスが必要になりますが、このサイトで調べられるようです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/d919e68a-2727-a19c-7b10-9389ea5ede46.png" width=400>

適当な項目、たとえばBlueRetro System Managerを選びます。
「Connect BlueRetro」ボタンを押すとESP32がリストにアップされるので選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/4a7bc270-ea78-6c74-8886-1a034fa80123.png" width=400>

接続が確立すると画面にBT_MACアドレスが表示されます。これをメモします。

## SixaxisPairToolでPS4にアドレスを書き込む

「SixaxisPairTool」というWindows用のツールを使います。ネット検索するとすぐに見つかるのでDLして実行します。PS4リモコンをPCにUSBで接続し、アドレスを書き込みます。

## 接続のリベンジ

再びEPS32を電源に繋ぎ、PS4リモコンのPSボタンでペアリングします。
今度は双方の電源を入れるだけで接続が確立しました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/ab40ef60-bcad-5d36-5d2a-0ae57f7d7c20.png" width=400>


## 普通の使い方

あとはこのリモコン受信機のピンをゲーム用にピンアサインして接続すればレトロゲーム機用の最新コントローラの出来上がりです。アタリや光速船、スーカセなど新しいリモコンで操作を楽しみたいゲーム機がいろいろあります＾＾

## どう使う？

汎用GamePad出力というようなものも用意されているようなので、それをTeensyなどで高速に受信できるようにすればBlueRetro側を無改造のまま使えて便利そうです。
ライブラリさえ見つかれば難しくはなさそうなので、時間を見つけてためそうと思います。
【Flutter】TextFormFieldのキーボードを電話番号用にする

こんにちは。
今回は、TextFormFieldのキーボードを電話番号用にする方法を紹介します。

# 方法
![スクリーンショット 2023-08-13 20.18.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524120/ce57fee2-1687-ea40-8538-b4c8b9db94e0.png)

TextFormFieldのキーボードを電話番号用にするには、引数の「keyboardType」を使います。
次に、TextFormFieldの引数「keyboardType」に「TextInputType.phone」を指定します。


# 使用例
```dart
class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: TextFormField(
        keyboardType: TextInputType.phone,  //ここ！
      ),
    );
  }
}


```

# 実行例
![keybord.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524120/b615935b-ffc7-f1c7-660a-f9a6841f1e93.gif)


# 最後に
ここまで読んでいただき、ありがとうございました！
いいねしてくれたら、スキップして喜びます:heartpulse:
WindowsServerでTLS1.0/1.1を無効化する

## **▽概要**
・WindowsServer2016でサーバ構築している
・そのサーバはインターネット公開している
・そのサーバの脆弱性診断をしてみたらTLS1.0/1.1が有効になっているので無効化させたい

ということで、TLS1.0/1.1を無効化させてみました。
TLS1.0/1.1は非推奨なので、無効化させないとですね…

## **▽内容**
レジストリエディターより下記の値を設定する
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.0
"Enabled"=dword:00000000

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.1
"Enabled"=dword:00000000
```

:::note info
レジストリ エディターの起動は、
ファイル名を指定して実行＞「regedit」を入力で起動できます
:::

:::note info
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.1\Server
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.1\Client
最後に「Server」や「Client」をつけると、
対象の端末が「サーバとして」や「クライアントとして」の個別にTLS通信を制限できるようです。
:::


## **▽確認方法**
インターネットからアクセスできるサーバの場合は、[SSL Server Test]( https://www.ssllabs.com/ssltest/)とかから確認できます。
上記のような確認サイトから、TLS1.0/1.1が無効になっていることを確認できればOK👍


## **▽やってみた感想**
昔別の組織に所属している際、サーバ構築を結構やっていたのですが、
構築作業の中で、今回やった設定を無意識(＝ほぼ意味を考えず)に実施してました。

今回脆弱性診断を通じて、TLS1.0/1.1の無効化方法をググっていたら、
この手順が出て「ああ、なるほど、これはそういう意味だったんか…」ってなりました。
きっと昔の先輩たちが同じように考え、手順を確立させていたのか。という思い出に浸りました。
ubuntu24.04 に docker-ce を インストールする

ubuntu24.04 を インストールしたので docker-ce を インストールする。

https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

リリース当日に 確認したら このページも ubuntu24.04 に対応してたよ。

なので 書かれてることを ほとんどそのまんま 実行 するだけで インストールできました。

行コピーでも いいんだけど apt install コマンド に -y オプション付けて

```bash:dockerinstall.sh
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

という感じで ファイルに 保存して

```bash
bash -x dockerinstall.sh
```
で 実行した。

aptのソースリストには 次のファイルが 作られていた
```text:/etc/apt/sources.list.d/docker.list
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu   noble stable
```

まぁ スクリプトを 見てわかってたんだけど ワンライなー で かかれていた。
DEB822 形式でなくてもいいんだね。

DEB822形式なら ↓ かな。
```text:/etc/apt/sources.list.d/docker.sources
Types: deb 
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
arch: amd64
signed-by: /etc/apt/keyrings/docker.asc
```

インストールできたか 試しておく

```text
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:a26bff933ddc26d5cdf7faa98b4ae1e3ec20c4985e6f87ac0973052224d24302
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
```

ちゃんと 実行できた。

おしまい
85. Maximal Rectangle の解き方メモ

https://leetcode.com/problems/maximal-rectangle/description

「0と1からなる2次元配列matrixが与えられる。1のみからなる長方形のうち最大のものを求めなさい」という問題です。

まず、各要素について、上に向かって1が何個連続しているかを示す2次元配列Aを作成します。

**例: Example 1**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/503a9adc-45fb-c8f5-9d0f-9b025d1698cf.png)

次に2次元配列Aの各行について着目すると、これはヒストグラムであり、ヒストグラム内の最大長方形を求める問題となります。これは比較的簡単に求めることができます。

**例: A[2] = [3, 1, 3, 2, 2] に着目した場合**

![PXL_20240413_062828155.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/c13baa84-a752-5664-d18a-bc686c365a7a.jpeg)

matrixの高さをC、幅をRとすると、Aの構築の計算量はO(RC)。ヒストグラム内の最大長方形を求める計算量はO(RC)で、それが各行ごとに発生するので、O(RRC)。つまり全体の計算量はO(RC+RRC)で、O(N^3)程度とわかります。R<=200、C<=200と制約が小さいので、この方法でも十分間に合います。

[ちなみに、ヒストグラム内の最大長方形を求める部分は工夫次第でO(N)となります。](https://algo-method.com/tasks/945/editorial)。制約次第では、O(N)のアルゴリズムを採用する必要があるかもしれません。

```rust
impl Solution {
    pub fn maximal_rectangle(matrix: Vec<Vec<char>>) -> i32 {
        let C = matrix.len();
        let R = matrix[0].len();

        let mut A = vec![vec![0; R]; C];
        for c in 0..C {
            for r in 0..R {
                if matrix[c][r] == '0' {
                    continue;
                }

                A[c][r] = 1;
                if c >= 1 {
                    A[c][r] += A[c - 1][r];
                }
            }
        }

        let mut max_rec = 0;
        for c in 0..C {
            for i in 0..R {
                let mut min_h = A[c][i];
                for j in i..R {
                    min_h = min_h.min(A[c][j]);
                    let rec = min_h * (j - i + 1);
                    max_rec = max_rec.max(rec);
                }
            }
        }
        max_rec as i32
    }
}
```
ChatGPTと学ぶPython　をやってみる。

# 概要
10年以上パワポエンジニアをしてきましたが、流行りの生成AIに手を出してみます。　
こんなことができました。
- 日本語を入力してChatGPTがPythonのソースコードを生成
- ソースコードをGoogle colabにコピペして、実行
- 目で、実行結果とソースコード（とコメント）を見てPythonをふんわり理解
要求条件仕様書をきっちり書くと、いい感じにソースコードを生成してくれる。指示出しの日本語能力と、出てきたものが期待通りに動いているのかのチェック能力が問われる。

# 参考文献
[ChatGPTと学ぶPython入門　熊澤 秀道 著](https://www.shoeisha.co.jp/book/detail/9784798182230)

# 読書と自習メモ
## ChatGPTに課金する
OpenAI https://openai.com/
### 1 アカウント作成
`Try chat gpt` > `saign in` 
これで`CHat GPT 3.5`が使えるようになる。
### 2 課金してChatGPT4.0へ
`Update plan` > `ChatGPT Plus` 
20ドル/月　クレカ払い

## プロンプトエンジニアリング
### 指示、条件、を入力する
```
#指示
eSIMをお勧めするキャッチコピーを考えて。
#条件
Twitter向けに140文字以内で
ターゲットは、新社会人
```
実行してみるとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/f4771d2e-c9e3-fe83-488c-7391a00fbd7f.png)

## P34 プロンプトプログラミング
プログラムを動かす、仕組みを知る、エラーを解決するで学習していく
- ChatGPTにプログラムのソースコードの生成指示
- Google colobeにコピペして実行
- 自分の目で実行結果とソースコードを見て理解を深める

# Google ColabでPython開発環境を準備
https://colab.research.google.com/?hl=ja
## Hello world
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/3cd3ebac-4350-199b-e571-6fb95f881d99.png)
## ブラックジャック
演習プログラムをコピペ　動いた！

## p58 BMI計算
### Chat GPTにコードを生成してもらう
- BMIを計算するアプリのソースコードを生成してください。条件：Google Colaboratolyで動くPhthon」
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/26688b3d-9244-2481-d962-c627f4d78abe.png)
### Google Colabにコピペして実行
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/609aa7b0-3797-2ceb-8888-d8dc975eddd1.png)

## 摂氏を歌詞に変換
### ChatGPT
    ちゃんと私の誤字の`歌詞`を空気を読んでスルーし、`華氏`に変換するプログラムを書いてくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/89e84008-e24a-5d88-dfbe-4949c21eeab9.png)
## 素数判定
```
数字が入力されたら、素数であるかを判別するプログラムのソースコードを生成してください。
条件：Google Colaboratolyで動くPhthon
```
ifとwhileを使っていい感じに素数判定してくれるプログラムが生成されて動いた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/a0fa6233-9f12-12fc-e03a-66b36b5f4245.png)

### pythonのモジュールを使う
```
パスワード生成プログラムのソースコードを生成してください。
条件1：16文字のランダムな文字列
条件2：Pythonのrandomモジュールを使う
条件3：Google Colaboratolyで動くPython
```
ChatGPTが`random`モジュールを使ってくれた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/d625fcc8-b8a9-d0e0-b22c-104fe76567d9.png)

- Google colabで実行　OK
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/ece93670-c0c3-9979-142a-cb1ae6080abc.png)

### listとtuppleの違いを聞く
ChatGPT先生に聞く
```
私はgo言語なら少し勉強したことがあります。
Pythonのlistとtuppleの違いを説明して。
```
ちゃんと例えて教えてくれる。
```
Go言語の経験がある場合、PythonのリストはGoのスライスに似ていて、タプルは変更不可能なスライスや配列のようなものと考えることができます。このように、リストとタプルはそれぞれ特定の用途に適していて、状況に応じて選択すると良いでしょう。
```
ubuntu24.04 に xrdp いれて 接続して ログインしたら 切断される。（未解決）

# xrdp が切断されるんだけど どうして？（未解決）


proxmox VE に ubuntu24.04 を インストールするまでは すんなりいきました。

コンソールで 

```shell
sudo apt install -y xrdp
```

で インストールして

windows11 から リモートデスクトップで 接続すると

ログイン画面が 表示されるんだけど

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125882/99aa3b36-386a-ceaa-9f53-2d69c4d919ae.png)

って 表示されるから RDPでの接続は できていると思うんだ。

パスワードを入力して OK を クリックすると 画面が 消えて ログイン画面になる。

なぜだろう。 設定が たりないんだるなぁ
AWSを基本からまとめてみた【EC2】

## EC2(Elastic Compute Cloud)とは？

- AWSの仮想サーバーサービスのこと

## サーバーとは？

- 業務用PCのこと
- クライアントからのリクエストに対し、情報(レスポンス)を返す

## 仮想サーバーとは？

- 仮想サーバーとは、物理サーバー上に仮想的なサーバーを構築する技術のこと

## 仮想サーバーと物理サーバーの違い

- 物理サーバー：CPUやメモリなど物理的なハードウェアリソースを所有する専用コンピューター
- 仮想サーバー：物理サーバーのハードウェアを利用した仮想的なサーバーソフトウェア

※ 仮想サーバーは、物理サーバーに構築されたソフトウェアなので、CPUやメモリなどのハードウェアをもっていません。実際にサーバーを運用する時は、物理サーバーのハードウェアを利用してソフトウェアを稼働させる。


| 仮想サーバー | Amazon EC2 |
| ---- | ---- |
| OS | AMI(Amazon Machine Image) |
| CPU　Memory | インスタンスタイプ |
| SSD | EBS(Amazon Elastic Block Store) |
| NIC(Network Interface Card) | ENI(Elastic Network Interface)  |

## AMI(Amazon Machine Image)

- AMIはインスタンスの作成に必要な情報
- EC2作成時には使用すr」AMIを指定する

※ 仮想サーバーのことをインスタンスという

## インスタンスタイプの種類

- 例) t2.micro(tはファミリー名、数字は世代番号、microはインスタンスのサイズ)
- t3系: テスト向、CPUバーストが特徴
- M系: 汎用タイプ
- C系: コンピューティング最適化、処理の多いwebサーバー、化学的なモデリング、機械学習/深層学習の推論
- R系: メモリ最適化、ハイパフォーマンスのデータべース、ビッグデータ、Hadoopクラスター
- P系: 高速コンピューティング最適化、GPUが付いている、機械学習/深層学習の推論
- P系: ストレージ最適化、分散ファイルシステム、Apche Kafkaなどのログ分析、ビッグデータのワークロード用クラスター

## EBS(Amazon Elastic Block Store)
 
 - EC2にアタッチして使用する外付けディスク
 - 種類に応じてIOPS（性能）が異なる
 - スナップショットが取得できる

(1)SSDタイプ

 - 汎用SSD
 - プロビジョンどIOPS SSD 

(2)HDDタイプがある

 - スループット最適化HDD（st1）
 - Cold HDD(sc1) 

(3)バックアップに付いて

- スナップショットでバックアップ
- AMIでバックアップ

## User data

- EC2が初回起動する際に実行するスクリプト
- 実行権限はrootユーザー権限

実行例)
- パッケージのアップデート　yum update -y
- ソフトウエアのインストール　yum install httpd -y
- 設定ファイルの取得

## Instance Meta Data

- インスタンスの中に埋め込まれたデータ

例)

- EC2のIPアドレス
- EC2のホストネーム
- EC2が使用しているAMIのID番号


- プログラムが使用: curlコマンド
- EC2情報を目視確認: ec2-metadataコマンド

## キーペア

- EC2へログインするために使用する秘密鍵、公開鍵のペア



## 参考サイト
[くろかわこうへいのAWS講座EC2編#1【概要、AMI、インスタンスタイプ】](https://www.youtube.com/watch?v=7MOrwgedM-I)
[仮想サーバーとは？](https://altus.gmocloud.com/suggest/vm/)
[くろかわこうへいのAWS講座EC2編#2【EBS、バックアップ、AMIの補足情報】](https://www.youtube.com/watch?v=fsGBnzvKDQM)
[くろかわこうへいのAWS講座EC2編#3【ユーザーデータ、インスタンスメタデータ、キーペア】](https://www.youtube.com/watch?v=IhIGppxveTc)
macOS + Podman V5では--volumeでのMac上パス指定における/mntが不要に


備考

# 追記
/userなどはPodman 4.1からそのまま使えたと教えてもらいました。
https://x.com/tnk4on/status/1785156002603762158
https://github.com/containers/common/pull/1265


# 環境
Apple M1 Pro 16 GB
macOS sonoma バージョン14.4.1（23E224）
podman version 5.0.2


# macOS + Podman V4.0では
macOS + Podman V4.0では--volumeでのホストシステムのパスの先頭に/mntを付与する必要がありました。

更新:
なお、上の**追記**のとおり、Podman 4.1から/userは/mntなしで使えた様です。


# macOS + Podman V5では
podman machineがqemuベースからapplehvベースに変更になり、あわせてホストファイルシステムへのアクセスも更新され、--volumeでのホストシステムのパスがそのまま指定でき/mntが不要になっていました。

更新：
なお、上の**追記**の通り、V5からという訳ではなくV4.1からディレクトリーによっては対応された様です。

# 例
```
% podman --version   
podman version 5.0.2

% podman machine list  
NAME                     VM TYPE     CREATED     LAST UP            CPUS        MEMORY      DISK SIZE
podman-machine-default*  applehv     6 days ago  Currently running  4           2GiB        100GiB

% cat HELLO
cat: HELLO: No such file or directory

% podman run -it --rm -v $(pwd):/workspace -w /workspace registry.access.redhat.com/ubi8/ubi sh -c "echo hello > HELLO"

% cat HELLO
hello
```

-v $(pwd):xxxxでカレントディレクトリーをそのまま指定できている。

# 参照

Podman V4での指定

https://qiita.com/hankehly/items/2ec340f927c244559677#バインドマウントを用いたコンテナーの起動


Podman V5での変更

https://www.redhat.com/ja/blog/podman-50-unveiled

This was an important step forward for the project, and helps better enable our second objective for this release: the introduction of support for the Apple-native Hypervisor. We were able to do this for both Intel and Apple Silicon processors, enabling compatibility for developers using a broad variety of hardware. **In addition to Apple-native Hupervisor, we have also moved to virtiofs for access to local files systems on the MacOS, which is a huge improvement over Plan 9 for file system access within the VM.**
無料のAzure SQL DatabaseをAzure Static Web Appsとデータベース接続してみたメモ

## 概要
[前回](https://qiita.com/hibohiboo/items/8598d44e64562ce37ebd)作ったテーブルのデータをデータベース接続 (プレビュー) を使って読み込んでみる。

[公式](https://learn.microsoft.com/ja-jp/azure/static-web-apps/database-azure-sql?tabs=bash&pivots=static-web-apps-rest)や[Qiita](https://qiita.com/fsdg-nagumo/items/4dfcb9377cd37156b670#%E4%B8%80%E8%A6%A7%E5%8F%96%E5%BE%97)を見ながら実践することができた。ここでは差分をメモしておく。

## 設定ファイル

```diff: staticwebapp.database.config.json
{
  "$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
  "data-source": {
    "database-type": "mssql",
    "options": {
      "set-session-context": false 
    },
    "connection-string": "@env('DATABASE_CONNECTION_STRING')"
  },
  "runtime": {
    "rest": {
      "enabled": true,
      "path": "/rest"
    },
    "graphql": {
      "allow-introspection": true,
      "enabled": true,
      "path": "/graphql"
    },
    "host": {
      "mode": "production",
      "cors": {
        "origins": ["http://localhost:4280"],
        "allow-credentials": false
      },
      "authentication": {
        "provider": "StaticWebApps"
      }
    }
  },
  "entities": {
-    "Person": {
-      "source": "dbo.MyTestPersonTable",
+   "Test": {
+      "source": "dbo.Test",
      "permissions": [
        {
-          "actions": ["*"],
+          "actions": ["read"],
          "role": "anonymous"
        }
      ]
    }
  }
}
```

## 取得コード

```ts:test-crud.ts
export const readCharacter = async (id: string) => {
  const requestUrl = `/data-api/rest/Test/id/${id}?$select=data`;
  const response = await fetch(requestUrl, { method: 'GET'  });
  const body = (await response.json()) as { value: unknown[] };
  const [item] = body.value as { data: string }[];
  if (!item || !item.data) {
    throw new Error('Test not found');
  }
  return item;
};

```



## 参考

[Qiita - Azure Static Web Apps のデータベース接続 (プレビュー) を試してみた - SQL Database](https://qiita.com/fsdg-nagumo/items/4dfcb9377cd37156b670#%E4%B8%80%E8%A6%A7%E5%8F%96%E5%BE%97)
[公式 - チュートリアル Azure SQL](https://learn.microsoft.com/ja-jp/azure/static-web-apps/database-azure-sql?tabs=bash&pivots=static-web-apps-rest)
IBM i Services Directory : SYSTOOLS.FIRMWARE_CURRENCY ビュー　とファーム更新情報サイト

## 概要
■ビュー名：SYSTOOLS.FIRMWARE_CURRENCY
■カテゴリ：PTFサービス
■サポート：IBM i 7.3以降
■参照URL（IBM i 7.5）：https://www.ibm.com/docs/ja/i/7.5?topic=services-firmware-currency-view

コマンドを実行するLPAR(VM)が稼働しているIBM Powerサーバーのファームウェア情報を取得し、表示します。
DSPHDWRSCコマンド、SPFMWSTSコマンドに類似。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/175f9108-f3dc-6fee-850f-a48a9f5c9c2a.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/5e5670a3-adaa-30c3-c5f7-f5047820b480.png)



***このコマンド実行を定期的スケジュールに組み込むことで、ファーム更新情報を見逃すリスクを減少させられると思われます。***

※このサービスは下記のIBMサイト（FLRT Webサイト）に接続して最新のファームウェアバージョンを取得しようと試みます。下記サイトにアクセスできない場合、最新のファームウェアレベル情報が取得できません。
```
https://www14.software.ibm.com/support/customercare/flrt/liteTable?prodKey=fw&format=json
```

## SYSTOOLS.FIRMWARE_CURRENCY実行例
```
SELECT * FROM SYSTOOLS.FIRMWARE_CURRENCY;
```
実行するSQL文としては上記1パターンだけですね。
結果は下記のように1行返されます。

以下はPOWER8 S824の例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/9b93e6bb-4c67-78c2-011a-d07e4c48658c.png)
1番先頭のカラム FW_CURENCY がUPDATE_AVILABLE と表示されています。この場合現行ファームバージョン（SV860_180)の新リリースSV860_XXXが存在する事が分かります。推奨される更新ファームバージョンはSV860_245だと分かります。
結果を右にスクロールすると、
このハードウェアはHMCで管理されており、ファームウェアはHMCから適用が必要、ファームウェアを活動化するためにIPLが必要か？→NO（すでに適用済み、IPL済み）であることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0285875e-c85d-1cb4-b1e7-012ba2905ad9.png)

次の例はPOWER9 S924の例です。
先頭カラムの結果が、UPDATE-AND_UPGRADE_AVAILABLEと表記されています。この場合、現行のファームVL930の更新版とより新しいファームウェアバージョン（ここではV950）が存在する事が分かります。また、それぞれの推奨レベルはV930_145、V950_149だと分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/d0708149-532e-eaae-b093-fd846d5dd963.png)

## IBM Powerのファームウェア情報サイト
[Power8, Power9 and Power10 System Firmware Release Planned Schedule (2023-2024) - updated March 2024](https://www.ibm.com/support/pages/power8-power9-and-power10-system-firmware-release-planned-schedule-2023-2024-updated-march-2024)
ファームウェアの更新計画等の情報があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0792cf11-168d-6a4e-0c81-437f945a3db1.png)

[Power10 System Firmware Fix History - Release levels MH10xx](https://www.ibm.com/support/pages/power10-system-firmware-fix-history-release-levels-mh10xx)
Power10サーバーのファーム更新履歴と詳細情報が記載されています。（+を展開すると詳細が表示されます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/92921d11-282e-8559-e001-fbc3944827b5.png)

[Power9 System Firmware Fix History - Release levels VL9xx](https://www.ibm.com/support/pages/power9-system-firmware-fix-history-release-levels-vl9xx)
同じくPower9サーバーのファーム更新履歴と詳細情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/06595ab9-193a-4153-10a2-e48e910a7762.png)
Go言語で関数にデータを渡す方法について: 値渡しとポインタ渡しの違い

Go言語において、「値渡し」と「ポインタ渡し」は関数にデータを渡す二つの基本的な方法です。

- 値渡し (Value Passing)
値渡しでは、関数に値のコピーを渡します。この方法で関数に値を渡すと、関数内で値を変更しても、元の値には影響を与えません。つまり、元のデータは安全で、変更されることはありません。これにより、予期しない副作用を避けることができますが、大きなデータ構造をコピーするとパフォーマンスが低下する可能性があります。

```go
func addOne(val int) int {
    val += 1
    return val
}

func main() {
    original := 2
    new := addOne(original)
    fmt.Println(original) // 出力: 2
    fmt.Println(new)      // 出力: 3
}
```

https://go.dev/play/p/pS8rcsaUXT1

- ポインタ渡し (Pointer Passing)
ポインタ渡しでは、値のアドレス（メモリ上の位置）を関数に渡します。関数内でポインタを使ってデータを変更すると、その変更は元のデータにも反映されます。これは、大きなデータ構造や、関数間で状態を共有する必要がある場合に有効ですが、不適切に使用するとバグやデータの不整合を引き起こす可能性があります。

```go
func addOneByPointer(val *int) {
    *val += 1
}

func main() {
    original := 2
    addOneByPointer(&original)
    fmt.Println(original) // 出力: 3
}
```

https://go.dev/play/p/figeEfwVbAr


### どちらを使うべきか
- 小さなデータ型や、関数が元のデータを変更する必要がない場合には値渡しを使うと良いでしょう。
- 大きな構造体や、元のデータを更新する必要がある場合にはポインタ渡しを使うと効率的です。

最終的には、プログラムの要件とパフォーマンスのバランスを考慮して選択することが大切です。
chromeに寄生する広告マルウェア

# 概要
chromeで、web見ていただけなのに、広告マルウェアが出たので、頑張って消した。
共有します。

# 症状
chromeを開くと出る。
再起動しても、出る。

![a1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/07d840b3-3e76-74bc-4856-6c1b417d594a.png)

# 環境
WINDOWS10
Chrome バージョン: 124.0.6367.63（Official Build） （64 ビット）

# 対策1

- ウィルススキャンしてみた。
検出しない。

# 対策２

- chromeの設定でキャッシュを消した。
消えた。よかった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/cc1676ee-99eb-033e-db0b-d508db72db6c.png)

# 侵入経路の調査

見覚えのない、ダウンロード履歴を発見。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/e0437068-c1ef-66ac-8962-02f01b381deb.png)



以上。
JavaScript 変数宣言について

JavaScriptの変数宣言について、調べたことを備忘録として書きたいと思います。

# 目次
[参考](#参考)
[事象説明](#事象説明)
[変数宣言について](#変数宣言について)
[勘違い](#勘違い)
[まとめ](#まとめ)

## 参考
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Grammar_and_types

## 事象説明
```JavaScript:sample1.js
// 以下のvarでの変数宣言をしても、しなくても関数でエラーが起きない理由は何であるか調べました。
var hoge = "";
// var hoge = "";

function testFunc() {
    hoge = "";
    console.log("hoge" + hoge);
}
```

#### 変数宣言について
JavaScriptでの変数宣言方法
|キーワード|概要|例|
|:---|:---|:---|
|var|ローカル変数とグローバル変数の両方の宣言可能|var x = 1|
|const, let|ブロックスコープ(if文などの波括弧の範囲)の変数として宣言可|const y = 2|
|未宣言|宣言をせずに変数として利用 →グローバル変数として生成される|z = 3 (非推奨)|


#### 勘違い
キーワードによる変数宣言をしなければ、エラーが発生すると思っていました。
（未宣言でも変数として利用することができる。）

#### まとめ
JavaScriptではキーワードでの宣言しなくても、変数として利用することができる。
ただし、厳格モード('use strict';)などではエラーが発生するため非推奨。
上記コードでは、エラーが発生する。
>Uncaught ReferenceError: hoge is not defined
.NET C#でOCR

# 環境
Windows 11 Pro (64bit)
Visual Studio Community 2022

# 手順
適当なプロジェクト名のディレクトリを用意する。
例：`C:\Projects\.NET\OcrSample`

```
dotnet new console
```

```OcrSample.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>
```

WinRTを使うためTargetFrameworkを`net8.0-windows10.0.22000.0`とする。

```Program.cs
using Windows.Graphics.Imaging;
using Windows.Media.Ocr;
using Windows.Storage;

try {
	var dir = Directory.GetCurrentDirectory();
	var folder = await StorageFolder.GetFolderFromPathAsync(dir);
	var file = await folder.GetFileAsync("hoge.png");

	using var stream = await file.OpenAsync(FileAccessMode.Read);
	var decoder = await BitmapDecoder.CreateAsync(stream);
	var bmp = await decoder.GetSoftwareBitmapAsync();

	var engine = OcrEngine.TryCreateFromUserProfileLanguages();
	var result = await engine.RecognizeAsync(bmp);	// OcrResult
	Console.WriteLine("<{0}>", result.Text);
}
catch (Exception e) {
	Console.WriteLine(e);
	return;
}
```


```
dotnet build
```

適当な画像ファイルを用意する。
例：`hoge.png`

```
bin\Debug\net8.0-windows10.0.22000.0\OcrSample.exe
```
WassersteinGAN(WGAN)の起源と発展



# WassersteinGAN

WassersteinGAN（WGAN）は、敵対的生成ネットワーク（GAN）の一種で、安定した学習を可能にするために提案された手法です。

WGANは、現在でも活発に研究が行われています。WGANの登場により、GANの実用化が大きく前進したと言えます。

WGANは、画像生成、画像変換、異常検知、ドメイン適応など、さまざまな分野で応用されています。また、自然言語処理や音声処理などの分野でも、WGANを用いた研究が行われています。


### 関連記事

https://qiita.com/ymgc3/items/cf3299befa9f42cfc3e6



## WassersteinGAN（WGAN）の起源と背景は？

WassersteinGANの起源と背景は以下の通りです。

**GANの登場と課題**
- 2014年に敵対的生成ネットワーク（GAN）は提案され、生成モデルの研究に大きな影響を与えた
    - しかし、GANには学習の不安定性、モード崩壊、評価指標の欠如などの課題がありました。

**Wasserstein距離**

- GANの課題を解決するために、最適輸送理論に基づくアプローチが注目される
    - 特に、Wasserstein距離は、分布間の距離を測る指標として有望視

**WGANの提案**

- 2017年、Martin Arjovsky, Soumith Chintala, Léon Bottouら、WassersteinGANが提案
    - GANの損失関数をWasserstein距離に置き換えることで、学習の安定性と生成画像の品質を向上に成功
    - WGANの登場以降、さまざまな派生モデルが提案される
        - 勾配ペナルティを用いたWGAN-GP、条件付き生成モデルのCTGAN、スペクトラルノルムを用いたSN-GANなど


## GANとの比較

WGANとGANの比較を以下の表にまとめました。

| 観点 | GAN | WGAN |
|:--|:--|:--|
| 損失関数 | 識別器とジェネレーターはバイナリークロスエントロピー損失関数を使用 | Wasserstein距離（Earth-Mover距離）を損失関数として使用 |
| 学習の安定性 | 学習が不安定になりやすく、モード崩壊が起こる可能性がある | 学習が安定しており、モード崩壊が起こりにくい |
| 識別器の制約 | 制約なし | 識別器（critic）の出力を制限するために、重みのクリッピングや勾配ペナルティを適用 |
| 損失関数の解釈 | 損失関数の値と生成画像の品質の関係が不明確 | 損失関数の値が生成画像の品質を直接反映する |
| ハイパーパラメータの調整 | ハイパーパラメータの調整が難しい | ハイパーパラメータの調整が比較的容易 |
| 評価指標 | 評価指標の定義が困難 | Wasserstein距離そのものが評価指標として使用可能 |
| 理論的背景 | 理論的背景が比較的弱い | 最適輸送理論、関数解析、力学系理論などの強力な理論的背景を持つ |
| 派生モデル | CGAN, InfoGAN, ACGANなど | WGAN-GP, CTGAN, SN-GANなど |


この表から、WGANはGANの抱える課題を解決し、学習の安定性、生成画像の品質、評価指標などの点で優れていることがわかります。また、WGANは強力な理論的背景を持ち、さまざまな派生モデルが提案されていることも特徴の一つです。


## WGANの主要な派生モデル

WGANの主要な派生モデルとその特徴を以下の表にまとめました。

WGANの基本的なアイデアを継承しつつ、識別器の制約の緩和、条件付き生成への拡張、距離尺度の変更、最適輸送問題の近似的な解法など、さまざまな改善を加えています。その結果、学習の安定性、生成画像の品質、多様性、学習速度などが向上し、WGANの応用範囲が拡大しています。


| モデル名 | 主な特徴 | 改善点 |
|:--|:--|:--|
| [WGAN-GP](https://arxiv.org/abs/1704.00028) (2017) | 勾配ペナルティを導入し、識別器の制約を緩和 | 重みのクリッピングが不要になり、学習が安定化 |
| [CTGAN](https://arxiv.org/abs/1907.00503) (2018) | 条件付き生成モデルにWGANを適用 | クラス条件付きの生成が可能になり、応用範囲が拡大 |
| [SN-GAN](https://arxiv.org/abs/1802.05957) (2018) | スペクトラルノルムを導入し、識別器の制約を緩和 | 勾配ペナルティが不要になり、学習が簡素化 |
| [WGAN-DIV](https://arxiv.org/abs/1712.01026) (2019) | Wasserstein距離の代わりにKullback-Leibler divergenceを使用 | 生成画像の多様性が向上 |
| [MMDGAN](https://arxiv.org/abs/1904.06287) (2019) | Wasserstein距離の代わりにMaximum Mean Discrepancyを使用 | 学習の安定性と生成画像の品質が向上 |
| [WGAN-QC](https://arxiv.org/abs/1903.01046) (2019) | 識別器の出力を二次関数で近似 | 学習の安定性と生成画像の品質が向上 |
| [RWGAN](https://arxiv.org/abs/1705.07164) (2020) | Wasserstein距離の制約を緩和し、最適輸送問題を近似的に解く | 学習が高速化し、大規模なデータセットに適用可能 |

# まとめ

WGANの派生モデルは、生成モデルの研究において重要な貢献をしており、今後もWGANを基礎とした新しいモデルが提案されることが期待されます。WGANは、生成モデルの発展に大きな影響を与え続けるでしょう。
[GAS]Googleカレンダーに新しいイベントを登録

アウトプット
↓本日のGASコード

# Googleカレンダーに新しいイベントを登録

```function createEvent() {
  let calendar = CalendarApp.getDefaultCalendar();

  let eventTitle = "新しいイベント"
  let startDate = new Date("2023-05-01T09:00:00");
  let endDate = new Date("2024-05-01T11:00:00");
  let location ="オフィス";

  calendar.createEvent(eventTitle,startDate,endDate,
  {location: location});
}
```
コード解剖
`getDefaultCalendar();`
種類：メゾット
意味：ユーザーのデフォルトカレンダーを取得

`new Date();`
種類：Dateオブジェクトを作成するために使用されるコンストラクタ
意味：時刻の取得

構文①
let 変数名 = new Date("年-月-日T時:分:秒")
空白や引数がない→入力がない場合は現在時刻を取得

`createEvent(title, startTime, endTime, options)`
種類：メゾット
意味：新しいイベントを作成

パラメーター
title	　　　String型	予定のタイトル
startTime	　Date型	イベントの開始日時
endTime　   Date型	予定の終了日時
options	　  Object型
    ↓
description	String型	イベントの説明
location	String型	イベントの場所
guests	String型	ゲストとして追加するメールアドレスのカンマ区切りのリスト
sendInvites	Boolean型	招待メールを送信するかどうか（デフォルト: false）
Javaで「System.out.printlnとは」の動作を確認してみた

# 概要

Javaで「System.out.printlnとは」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/const/index8.html

# 実装

以下のファイルを作成しました。
```Test.java
class Test {
    public static void main(String[] arg){
	int sum;
	sum = 10 + 5 + 8;
	System.out.println("合計=" + sum);
    }
}
```

以下のコマンドを実行しました。
```
$ javac Test.java 
$ java Test 
合計=23
```

# まとめ

何かの役に立てばと。