OmniAICreator/Qiita-1.07M huggingface dataset:
マージンの折り重ね（マージンの重複）って知ってた？

Gutenbergのブロック開発をしていて、おかしな現象に見舞われました。次の画像をご覧ください。


![image](https://itmaroon.net/home/wp-content/uploads/2023/08/76db52dcc4ff4485b2535e34f44bfef3.png)




![image](https://itmaroon.net/home/wp-content/uploads/2023/08/4e9b4ea8071f49459a891d8d8a967c49.png)

これはブロックにニューモフィズムというシャドーをつけたものです。
上がブロックエディタの表示で、下がフロントエンドの表示です。
ご覧のとおり下は高さが狭く、ニューモフィズムの浮き出た感じが出し切れていません。
なぜ、こんな現象が起こるのかをブログにしたいと思います。

## この画像のHTMLとCSSについて
まず、この画像のHTMLとCSSを示します。
まず、HTMLです。
```
<div>
 	<ul>
 		<li>情報入力</li>
		<li>確認</li>
		<li>処理完了</li>
	</ul>
</div>
```
次にCSS(SCSS)です。
```
div{
	ul{
		margin: 1em 2em 1em 2em;
		padding: 1em 2em 1em 2em;
		box-shadow: 5px 5px 5px #ecd4d4,-5px -5px 5px #fcf8f8;
	}
}
```
簡単なコードです。div要素でul要素をラップし、ul要素にはmarginとpaddingをつけました。
その上でbox-shadowをつければ、marginとpaddingの間にシャドーが落ちてくれると思ったわけです。
しかし、ブロックエディタは思惑どおりでしたが、肝心のフロントエンドは変な表示になってしまいました。

## margin-topとmargin-bottomにはマージンの折り重ね（マージンの重複）という現象がある

調べてみるとこんなことがわかってきました。
margin-topとmargin-bottomというのは、上下に接触する要素同士においては、折り重なるという性質があります。
次のようなコードでは、要素Aの margin-bottom と要素Bの margin-top が折り重ねられ、実際のマージンは30px（大きい方の値）となります。
```
<div style="margin-bottom: 20px;">要素A</div>
<div style="margin-top: 30px;">要素B</div>
```




![image](https://itmaroon.net/home/wp-content/uploads/2023/08/b3bd11b54b0947c9a3ebde6bac5b1016.png)




この事例は隣接する兄弟要素の場合ですが、この現象は、親要素とその最初または最後の子要素の間でも発生します。

```
<div style="margin-bottom: 20px;">
	要素A
	<div style="margin-top: 30px;">要素B</div>
</div>
```







![image](https://itmaroon.net/home/wp-content/uploads/2023/08/7eba4d8fc5624557bdf6fa6cc35acea1.png)




この図のように子要素の上側・下側のマージンは親要素の外に「押し出される」ことになり、親要素の縦幅を広げるわけではないのです。
これが「マージンの折り重ね（マージンの重複）」です。


## 親要素に border や padding が付いているとこの現象は起こらない

では、なぜブロックエディタの方は、期待どおりの動きをしてくれるのかということです。
実はGutenbergのブロック開発ではブロックエディタ側には、ブロックに１pxの破線のボーダーが付いています。
これのおかげで子要素のマージンは親要素のボーダーの内側に回るのです。
コードと図解は次のようになります。
```
<div style="
	margin-bottom: 20px;
	border: 1px dotted #f00;
">
	要素A
	<div style="margin-top: 30px;">要素B</div>
</div>
```






![image](https://itmaroon.net/home/wp-content/uploads/2023/08/74596bcf3ea344758aa125deae5f6972.png)

これは親要素にパディングがある場合でも同じです。
その他にも「マージンの折り重ね」が起きない場合があるので、箇条書きにしてまとめます。

1. borderやpaddingの追加：親要素に少なくとも1pxの border や padding がある。
2. overflowプロパティの使用：親要素に overflow: auto または overflow: hidden を設定する。
3. flexboxやgridの使用：FlexboxやGridレイアウトを使用する。

## 幅（margin-left および margin-right）についてはどうなのか

ちなみに、水平方向のマージン（margin-left および margin-right）には、マージンの折り重ね（マージンの重複）という現象は存在しません。
そもそも、水平方向のマージンというのは、要素を親要素のどの位置に配置されるかを決定するためのもので、親要素の全体の幅そのものを広げるという効果はありません。
仮に、水平方向のマージン（margin-left および margin-right）が自らの幅とあわせて、親要素の幅を超えるとオーバーフローを起こします。

親要素の幅に影響を与えるのは子要素のwidthやpadding, borderなどのプロパティです。子要素の幅やパディング、ボーダーが親要素の利用可能な幅を超える場合、通常、親要素は子要素を収容するために拡張されます。
ただし、親要素に固定の幅が設定されている、あるいは他のスタイルが適用されている場合はそうならないこともあります。

## まとめ
CSSの基本中の基本とも言えるmarginプロパティですが、実はこんなに奥が深かったということを今更のように知りました。

皆さんはいかがでしょう。

もし、私が経験したような現象でお悩みの方がいれば、是非参考にしていただきたいと思います。
「sympyのplot_implicit(陰関数)」を調べた。

# Doc
plot_implicit(): Plots 2D implicit and region plots.

sympy.plotting.plot_implicit.plot_implicit(expr, x_var=None, y_var=None, adaptive=True, depth=0, points=300, line_color='blue', show=True, **kwargs)

https://docs.sympy.org/latest/modules/plotting.html#sympy.plotting.plot_implicit.plot_implicit


# 参考

ここでは SymPy プロット機能に関する覚え書きを記す。

＞関数 plot_implicit だけは不等式をも扱える。不等式に対応する等式を表現する曲線によって定義される平面上の領域を塗りつぶした図が得られる。

https://showa-yojyo.github.io/notebook/python-sympy/plotting.html#:~:text=%E9%96%A2%E6%95%B0%E6%97%A9%E8%A6%8B%E8%A1%A8-,%C2%B6,-%E6%89%8B%E8%BB%BD%E3%81%AB%E3%83%97%E3%83%AD%E3%83%83%E3%83%88


# sympyのplot_implicitを実行した。
#### テスト(1)
(y,-2,0)は、表示できませんでした。
対称式なので、xもyも使えると思いました。
```python
from sympy import *
var('x,y,k',real=True,positive=True)
eq=Eq(x+y,1)
ax1=plot(           -x+2,(x,-2,2),
                    xlim=(-2,2),ylim=(-2,2),
                    aspect_ratio=(1.0,1.0),
                    line_color="green",
                    show=False
                 )
ax2=plot_implicit(  eq,(x,-2,2),
                    line_color="yellow",
                    show=False
                 )
ax3=plot_implicit(  eq,(x,-2,0),
                    line_color="blue",
                    show=False
                 )
ax4=plot_implicit(  eq,(y,-2,0),
                    line_color="blue",
                    show=False
                 )
ax1.extend(ax2)
ax1.extend(ax3)
ax1.extend(ax4)
ax1.show()
```
![1png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/3347e787-e708-db26-7907-cead579a8514.png)

#### テスト(2)
(x,1,2)にしました。
```python

# test-2
from sympy import *
var('x,y,k',real=True,positive=True)
eq=Eq(x+y,1)
ax1=plot(           -x+2,(x,-2,2),
                    xlim=(-2,2),ylim=(-2,2),
                    aspect_ratio=(1.0,1.0),
                    line_color="green",
                    show=False
                 )
ax2=plot_implicit(  eq,(x,-2,2),
                    line_color="yellow",
                    show=False
                 )
ax3=plot_implicit(  eq,(x,-2,0),
                    line_color="blue",
                    show=False
                 )
ax5=plot_implicit(  eq,(x,1,2),
                    line_color="blue",
                    show=False
                 )
ax1.extend(ax2)
ax1.extend(ax3)
ax1.extend(ax5)
ax1.show()
```

![2png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/ab1c980a-4a8c-e9ab-1505-9ee77b558851.png)


# 参考
docker composeのメモ

visual studio codeのおすすめプラグイン
・Docker

web apiサーバーを作成するdocker-compose

実行UPコマンド
```docker compose up```

実行DOWNコマンド
```docker compose down```

実行UPコマンド(イメージを作り直す)
```docker compose up --build```

docker-compose.yml
```
version: '3.9'
services:
  api:
    build: ./api
    ports:
      -8080:8080
    depends_on:
      - db
  db:
    image: postgres:15
    port:
      - 5432:5432
    enviroment:
      - POSTGRES_PASSWORD=mypassword
      - POSTGRES_USER=postgres
      - POSTGRES_DB=appdb
    volumes:
      - db-storage:/bar/lib/postgresql/data
      - ./db/initdb:/docker-entrypoint-initdb.d

volumes:
  db-storage:
Rのバージョン管理と環境設定

# はじめに
- 統計ソフトウェアR（およびRStudio）のバージョン管理や環境設定のメモです。

# 動作環境
- Windows10 64bit
- R (バージョン 4.0.5)
- RStudio (バージョン 2022.12.0)

# Rのバージョン管理
## Rのバージョン確認
```r:R
R.version.string
```
## Rのアップデート
```r:R
install.packages("installr")
library(installr)
updateR()
```

## RStudioのアップデート
- RStudioツールバーのHelp > Check for Updatesから行う

## パッケージ管理
- パッケージのインストール
```r:R
install.packages("パッケージ")
install.packages("installr") # 例
```
- 指定のパスからのパッケージのインストール
```r:R
libs.name <- list.files(path="パス")
install.packages(libs.name)
```
- パッケージのアップデート
```r:R
update.packages("パッケージ")
```

- パッケージの有効化・無効化
```r:R
library(package) # 有効化
detach(package) # 無効化
```

- パッケージの詳細
```r:R
help(package="lmerTest") # パッケージのヘルプ
packageVersion("rstan") # パッケージのバージョン
find.package("rstan") # 特定のパッケージのパス
.libPaths() # パッケージの参照パス
```

## 環境設定
- 環境設定の一覧確認
```r:R
Sys.getenv()
```
- 環境設定の個別確認
```r:R
Sys.getenv("R_LIBS_USER")
Sys.getenv(c("R_HOME", "R_LIBS_USER", "R_PLATFORM"))
```

- 環境設定の変更
```r:R
Sys.setenv(R_LIBS_USER = "C:/R-4.0.5/library")
Sys.setenv("HOME" = "C:/Users/user1")
```

- localeの変更
言語表記を変更したいときに有用。
例えば、グラフの日付軸を日本語表記（例：12月）から英語表記（例：December）にしたい場合など。
```r:R
Sys.getlocale("LC_TIME") # 現在の設定を参照
[1] "Japanese_Japan.utf8"

Sys.setlocale("LC_TIME", "C") # 英語に設定する
Sys.Date() %>% months() # 確認
[1] "December"

Sys.setlocale("LC_TIME", "Japanese_Japan.utf8") # 日本語に設定する
Sys.Date() %>% months() # 確認
[1] "12月"
```

# おわりに
Rとパッケージのバージョン管理と環境設定について基礎的なコマンドを載せました。
バージョンの管理については、たまに最新だと不具合があったりするので、どのバージョンだと動くのか確認した上で、古いものをインストールしたりして対応します。

# 参考文献
https://www.delftstack.com/ja/howto/r/check-version-of-r/

https://heavywatal.github.io/rstats/config.html

https://multivariate-statistics.com/2022/01/04/r-programming-date-time/
GA4で特定のIPアドレスを除外する方法

## はじめに

「Google Analytics 4に移行はしたが、正確な数字が取れているか怪しい...」
「会社のIPアドレスを除外して正確なアクセス数を知りたい」
「リモートワーク社員全員のIPアドレスも除外したい」

そんな悩みを持つ方向けに本記事を作成しました！

読みながら、手を動かすと10分ほどで設定できますので、お試しください。（反映には数時間-半日かかります）

:::note info
記事の流れ
1\. GA4でIPアドレスを除外する理由
2\. GA4コンソールでIPアドレスフィルターを作成
3\. 作成したIPアドレスフィルターを適用
:::

## GA4でIPアドレスを除外する理由

「そもそもなぜGA4でIPアドレスを除外する必要があるの？」


例えば、会社内でGA4を設定しているサービスのアクセスは内部テストや動作確認、開発といったことが目的になると思います。

これらのアクセス数がアナリティクスデータに含まれてしまうと、実際のサイト訪問者の行動分析が難しくなってしまいますよね。

そこで、開発やテストで使うIPアドレスを除外するで、実際のユーザーの行動に焦点を当てた分析が行うことができるようになります！（=内部トラフィックの除外）


## GA4の特定IPアドレスを除外する手順

それでは具体的にGA4で特定のIPアドレスを除外する手順を解説します。

### ①：IPアドレスを特定する

Googleで「IPアドレス 確認」などで検索するとIPアドレスの確認ツールが出てきます。

自分や会社など除外したいIPアドレスをメモしておきましょう。

### ②：GA4コンソールでIPアドレスフィルターを作成

- 対象のGA4コンソールを開いて、左下の歯車マークから『プロパティ欄 > データストリーム』を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331862/f4e1da81-fccd-62c5-73c8-35651b91c7f0.png)


- 『データストリーム > 対象のストリーム』を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331862/ed39536a-c493-39c1-ae3d-3e93f73bc97d.png)


- 『Google タグ欄 > タグ設定を行う』を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331862/20af29b6-de1d-e581-78a4-d0cbca986ad7.png)


- 『Google タグ欄 > 内部トラフィックの定義』を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331862/01c8cbe0-d2a2-4cdc-667a-018ea7d143fe.png)



- 内部トラフィックの定義ページで『内部トラフィック ルール』 追加ボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331862/8356e0fc-87ef-d488-42ad-c2a3162a8ca9.png)


- 内部トラフィックルールを画像のように記入し、『作成』ボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331862/8c875261-7d24-243c-3a35-551a87813e56.png)


- 再度内部トラフィックルール定義ページにリダイレクトされ、作成したルールが存在すれば完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331862/9d944547-21a2-21d3-df11-55189ab7a7df.png)



### ③：作成したIPアドレスフィルターを適用

- 対象のGA4コンソールを開いて、左下の歯車マークから『プロパティ欄 > データ設定 > データフィルタ > Internal Traffic』を選択し、編集画面へ移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331862/b016d1a7-500a-f297-f485-d0f00923fc53.png)


- 『フィルタオペレーション:除外』『パラメータ値がInternal』『フィルタの状態が有効』になっていることを確認し、保存ボタンを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331862/118f6468-1899-c334-b625-b58cedfd005b.png)
- モーダルが表示され『フィルタを有効にする』を押下
  - モーダル指示が怖い言葉ですが、内容は簡単
  - 一度フィルタを有効にすると、有効にした期間はフィルタ越しのデータが反映されるので、ズレが生まれるが良いか？という意図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331862/4759f553-6d2d-3a62-4b6b-e62ae3d6d37f.png)


終了！！！適用されるようになりました！！！お疲れ様でした！！！

反映には数時間〜半日程度かかりますので、気長に待ちましょう。

## おわりに

この記事ではGA4のIPアドレス除外の手順を記載してきました。

GA4で正確なユーザーの行動を追って、ユーザーが満足できるサイトにするためにIPアドレスの除外は早めにやっておくと、適切なデータ分析が可能になります。

ぜひ、手軽なので、この記事を元にIPアドレスの設定を行ってみてください！
せんせー、ストレッチャブルエレクトロニクスってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、ストレッチャブルエレクトロニクスってなに？

# ストレッチャブルエレクトロニクスとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## ストレッチャブルエレクトロニクスって何？

みんな、ゴム風船を知ってるよね？風船は手で引っ張ったりしても、伸びてまた戻りますよね。
ストレッチャブルエレクトロニクスは、その「伸びる」特性を持った電子の部品や道具のことを指します。

## どういうこと？

普通の電子機器は固くて曲げると壊れちゃうけど、ストレッチャブルエレクトロニクスはゴム風船のように伸び縮みするものです。この技術を使うと、体にぴったりフィットするウェアラブルデバイスや、曲げたり伸ばしたりしても壊れない電子機器が作れるんです。

## どうしてそれがすごいの？

考えてみて。Tシャツみたいに伸びるテレビや、体に巻き付けることができる電話など、新しい形の電子機器が生まれるかもしれないよ。ストレッチャブルエレクトロニクスは、未来の電子製品の形や使い方を変える可能性があります。

## だから、ストレッチャブルエレクトロニクスってなに？

ストレッチャブルエレクトロニクスは、伸びたり縮んだりする電子の部品や道具で、新しい形の電子機器を作るためのものなんです。

# まとめ

このように、ストレッチャブルエレクトロニクスは、未来の電子機器をもっと便利で面白いものにするかもしれない、とても興味深い技術なんです。
ほぼ未経験でもChatGPTを使えばプログラムを作れるのか⑨プログラミングほぼ未経験者の挑戦～：アルゴリズム⑧

今回はアルゴリズムの設計の2.入力と出力の定義から

![図①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500101/4e280d2a-5091-851c-0efd-f78e863a2724.png)
図1：アルゴリズムの設計①図5再掲

流れるようにChatGPTに聞くだけ～


![図②-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500101/559b7590-ead7-d63e-fc42-8a5e434a1962.png)
![図②-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500101/e6542b26-bfb7-6731-6790-da8f3e675c25.png)
図2

すごくいい感じに教えてくれた！

もうこれで完了な感じ？

![図③.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500101/499cd9fa-100b-78f2-8e76-6b30fa2fd2b9.png)
図3

完了です！

入力と出力の定義：完了

所用時間：1分（毎回こんな感じでいいよ！）

あ、待って。

気が付いてしまったわ。

これって全媒体が一つのシートにおさまっている感じじゃない？

![図④.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500101/66c54569-de51-ba0e-79eb-2d9b57de034f.png)
図4

実装するのは難しいけど、シートは分けた方が絶対良い気がする。

![図⑤.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500101/4f52b5f8-f72f-0b33-1ec0-d14f010387d6.png)
図5

これでいいはず・・・？

今度こそ、アルゴリズムの設計2.入力と出力の定義完了

所用時間：5分

このまま3.の解法の選択もやってしまおう。

![図⑥.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500101/b1bd6d34-c103-74ff-90ba-2ba1bb918375.png)
図6

待って待って待って。

プログラミングスキルを使わずに？

この！

検証は！！

プログラミングをするための物なんだよぉぉぉぉぉぉぉぉ

もう1か月以上の付き合いじゃない？

さんざんプログラミングを作るんだよって話したじゃない？

どうして！

どうしてなのよ！

もう分かり合えてると思っていたのに。

![図⑦.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500101/89aefe75-453f-21a6-1f65-eaadc2cc520b.png)
図7

これでいいっぽい。

というわけで、3.解法の選択：完了（危うくこの検証の意味を否定されるところだった）

所用時間：15分
せんせー、バイオセンサーってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、バイオセンサーってなに？

# バイオセンサーとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## バイオセンサーって何？

みんな、体の中や自然の中にはたくさんの「しくみ」があるよね。例えば、体が痛いときや体温が高くなるとき、それを感じることができるのは、体の中の「センサー」のおかげなんだ。バイオセンサーは、生物や私たちの体に関することを感じ取るための特別なツールだよ。

## どういうこと？

バイオセンサーは、小さいマシンのようなもので、私たちの体や他の生物からの情報をキャッチして、数字や信号として教えてくれるものだよ。例えば、糖尿病の人が血糖値を測るときに使う道具も、バイオセンサーの一つなんだ。

## どうしてそれがすごいの？

病気の早期発見や、健康を保つために、体の中で何が起こっているのかを知ることはとても大切。バイオセンサーは、そんな体の中の情報を正確に、そして早く教えてくれるから、すごく役立つツールなんだ。

## だから、バイオセンサーってなに？

バイオセンサーは、生物や体の情報を感じ取り、それをわかりやすく教えてくれる特別なマシンだよ。

# まとめ

このように、バイオセンサーは私たちの健康を守るための、とても便利で大切なツールなんです。
ChatGPT APIによる議事録作成で苦労したこと

会議の文字起こしデータから、OpenAIのAPIを使用して議事録を作成する機能を実装するにあたり、色々と苦労があったため、その記録をざっくりとですが記事として残します。どなたかの参考になれば幸いです。

## 課題

会議の文字起こしは1時間で1万5千文字程度、OpenAIのAPI「gpt-3.5-turbo」で読み込める文字数は2700文字程度、「gpt-3.5-turbo-16k」でも1万1千文字程度とされている。そのため、文字起こしデータを分割して読み込ませる必要があった。しかし、Open AIのAPIには、前回の内容を記録していないため、一回一回のAPIでやり取りを完結させる必要があった。  
※会話形式にすることもできるが、それはプロンプトの中に前回までの会話内容を含むように設定している。

## 実装を試みたこと

1. 不要な文字、意味を持たない文字を削除しながら文章を要約し、読みやすくすること
2. 要約内容を読み込み制限（1万1千文字）内にして、最終的な議事録として出力すること

## プロンプトの作成

ChatGPTに指示するプロンプトで使用する言葉は、その言葉をChatGPT自体がどのように認識しているかを考慮して作成する必要があると考えた。例えば、議事録に含まれる要素をChatGPTに質問すると、議事録の要素「1) タイトル・ヘッダー、2) 日時と場所、3) 出席者・不出席者、4) 議題、5) 各議題に関する議論の概要、6) 決定事項・決議、7) 行動計画や次のステップ、8) その他の情報、9) 作成者・確認者」の様に、9つの要素があると返答される。そのため、「議事録を作成してください。」と指示をすると、この9つの要素を作成しようとChatGPTは試みると考えられる。そのため、プロンプト自体をChatGPTに作成してもらうことにした。しかし、議事録の要素も質問するたびに変わるように、ChatGPTに作成してもらったプロンプトを使用しても、出力結果に差が多くあり、一定の品質で結果を得ることが難しかった。また、ChatGPTで安定した議事録を作成するプロンプトが分かっても、APIによって作成すると、また違った結果になることが多く混乱してしまった。そのため、最終的にAPIを使用する場合は、APIでプロンプトを作成した方が良いかもしれない。

最終的に、APIでは以下のように出力形式を設定することが、出力結果を安定させることが分かった（それでも違う時はある）。
タイトルと出力内容を「{}」で記載する.

> ##出力内容
> 以下の内容のみを出力してください。
>
> ○対話記録
> {以下の工程によって作成された対話形式の要約}

## ChatGPT-3.5とChatGPT-4の要約精度の違い

今回使用した文字起こしは以下のような会話形式のデータである。このデータを会話形式のまま要約を試みた。

- **ChatGPT-3.5**：各発言内容のみを要約。そのため、行数が減ることが無く、文章量がほとんど減らなかった。
- **ChatGPT-4**：前後の発言者ごとの内容を要約（私自身が気づかなかった内容も繋ぎ合わせて、まとめてくれていた）。しかし、毎回そのように精度の高い要約をしてくれるわけでは無かった。`temperature`を下げると、想像以上の要約はしてくれないと思われた。

今回、APIでは「gpt-4」が私たちのアカウントでは、まだ使用できないため、「実装を試みたこと」の１は断念することとした。

> **文字起こし**  
> **Aさん:** 今日、ChatGPTを使ってみた？  
> **Bさん:** うん、ちょっと試してたよ。  
> **Aさん:** 感じはどうだった？  
> **Bさん:** いいと思うけど、ちょっと誤解もあるかな。  
> **Cさん:** 誤解って？  
> **Bさん:** ああ、例えば、簡単な質問は大丈夫だけど、複雑なのはちょっと変な答えがくる時がある。  
> **Aさん:** あー、それはちょっと困るかも。  
> **Cさん:** でも、サポートやFAQ作成には役立ちそうだよね。  
> **Bさん:** うん、そこは本当に便利だと思う。簡単な質問には即答してくれるし。  

## ChatGPTによるtemperatureの設定

APIでは「temperature」の値を設定することで、回答ランダム性をコントロールできる。ChatGPTでも「`temperature=0.4`にして実行してください。」と記入することで、擬似的に値を変更できる。そのため、出力結果を安定させたかったため、「`temperature=0.2`」で議事録作成を試みると、「`temperature=0.2`だと何も変わりません。」と返された。
このように、temperatureが低いとあまり要約されないことが分かり、逆に上げると出力して欲しくない内容まで出力されるため、「`temperature=0.5~0.6`」などの丁度よい値を探す必要があった。

> **補足）** ChatGPT-4に「ChatGPTインターフェース」でtemperatureの設定が可能かと質問したら、以下の回答だった。
> - ChatGPTインターフェース（例：OpenAI Playground）では、"temperature"のようなパラメータをユーザーが変更する機能は提供されていない。直接APIを使う場合のみ変更が可能で、インターフェース上の指示は擬似的に扱われる。

## API 「gpt-3.5-turbo」と「gpt-3.5-turbo-16k」の違い

OpenAIのAPI modelには種類があり、「gpt-3.5-turbo」や「gpt-3.5-turbo-16k」などがある。違いは一度に読み込み、処理できる文章量が異なり、日本語で「gpt-3.5：2700文字程度」「gpt-3.5-16k：1万1千字程度」一度に読み込める様になる。しかし、両方を使用した感想として、16kは一度に処理できる分、要約の精度が落ちると感じた。
そのため「実装を試みたこと」の2は、16kの精度が低いことも合わせて、2重に処理をするので元々の意味から遠ざかり、断念することとした。

## まとめ

最終的には、文字起こしデータを2700文字以内に分割して「gpt-3.5-turbo」に読み込み、話された内容のポイントを要約して箇条書きにしてもらうことにしました。その方が、出力結果が安定して良かったと思いました。

上記の様に色々と試行錯誤をしましたが、最終的にこれで良かったのか、実はまだ不安があります！でも、これからOpenAIのAPIを使用してみようと思う方の参考になれば幸いです。

今後、APIのgpt-4が使えるようになれば、また作成の仕方も変わって精度も変わるかも知れませんので、gpt-4を使える日が待ち遠しいですね。
GitHubのMarkdownのアラート構文で文章の読み飛ばしを防ぐ！

[MicrosoftのLearn Markdownリファレンス](https://learn.microsoft.com/en-us/contribute/content/markdown-reference#alerts-note-tip-important-caution-warning)を読んでいると読者が文章を読み飛ばすことを防ぐために特別な強調構文としてアラートが用意されていました。

ドキュメントによれば以下のような5つの特別な状態が用意されています。
```md
> [!NOTE]
> 流し読みしていても気づくべき情報

> [!TIP]
> より良い結果を得るための情報

> [!IMPORTANT]
> 結果を得るために必須な情報

> [!CAUTION]
> 注意すべき行動についての情報

> [!WARNING]
> 危険な行動についての情報
```
これらの記法はGithubでも一部利用できます。記述すると以下のように表示されます。
![スクリーンショット 2023-08-29 11.33.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591069/9d964133-8990-e1a4-1393-69021f12c23f.png)
PULL REQUESTやISSUEなどで表現の幅が広がりそうです。
TIPとCAUTIONはアラート構文として解釈されないみたいです。こちらの[Discussions](https://github.com/orgs/community/discussions/16925#discussioncomment-2794263)を見た感じだと全てが実装されているわけではなく、多くの人が今後Learn Markdownに備わっている他のバリエーションなどが実装されることを求めているようでした。細かいニュアンスを調整できるので更なる種類が実装されるのが楽しみです。

また、これらの構文は以下のように`**`で挟むように書いても利用可能です。
```
> **note**
> 流し読みしていても気づくべき情報
```
`[!NOTE]`に対してこちらの記法は強調していることが分かりやすく覚えやすいように感じました。

ドキュメントによるとこれらのアラート構文はNoteやTip、Importantだと読み飛ばす傾向があり、連続してアラートを書くのことも(おそらく注目度が下がるので)注意したほうが良いようです。利用する際はこれらを念頭に置きたいです。
Python, pandas.isnull() での True/False判定

ここ数ヶ月、Pythonでデータ集計・分析を始めましたsakaimoです。
さっそく空文字の判定でミスりましたのでメモっておきます。


* 前処理として特定の列には「文字列あるいは空文字」が入ってることは保証されている状態。
* そこの値が「空文字」かどうかの判定をさせたい。

```py
test_df = pd.DataFrame(
    data={'文字列が入る列': pd.Series(['a', '', 'c'])}
)
print(test_df)
print("--------")

moji = test_df.iloc[1,0]

# 何も表示されない。空文字なので期待値通り。
print("moji: " + moji)

# Falseになる。pandasのisnull()では「空文字」は「欠損値ではない」。欠損値とはNaNとかNaneのこと。
print("pd.isnull(moji): " + str(pd.isnull(moji))) 

# Falseになる。pythonの仕様では 空文字はFalse判定
print("not moji: " + str(bool(moji))) 
```

```:出力
  文字列が入る列
0       a
1        
2       c
--------
moji: 
pd.isnull(moji): False
not moji: False
```


私は下記のように書いていて、なんでここに来ないの？ってしばらく考えちゃいました。

```py
if pd.isnull(moji):
  print("空文字だったときの処理") # ←ダメな例
```


当たり前なのですが、その言語仕様やライブラリによって「何がTrue/Falseと判定されるのか」をちゃんと調べなきゃダメですね。
phpcsのバツ[x]の意味

phpcbfが自動で修正できるスニフを表すみたいです

```bash
$ phpcs -s /path/to/code/myfile.php

FILE: /path/to/code/classA.php
--------------------------------------------------------------------------------
FOUND 4 ERRORS AND 1 WARNING AFFECTING 5 LINES
--------------------------------------------------------------------------------
  2 | ERROR   | [ ] Missing file doc comment
    |         |     (PEAR.Commenting.FileComment.Missing)
  4 | ERROR   | [x] TRUE, FALSE and NULL must be lowercase; expected "false" but
    |         |     found "FALSE" (Generic.PHP.LowerCaseConstant.Found)
  6 | ERROR   | [x] Line indented incorrectly; expected at least 4 spaces, found
    |         |     1 (PEAR.WhiteSpace.ScopeIndent.Incorrect)
  9 | ERROR   | [ ] Missing function doc comment
    |         |     (PEAR.Commenting.FunctionComment.Missing)
 11 | WARNING | [x] Inline control structures are discouraged
    |         |     (Generic.ControlStructures.InlineControlStructure.Discouraged)
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 3 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------

$ phpcs -s --report=summary /path/to/code

PHP CODE SNIFFER REPORT SUMMARY
--------------------------------------------------------------------------------
FILE                                                            ERRORS  WARNINGS
--------------------------------------------------------------------------------
/path/to/code/classA.inc                                        5       0
/path/to/code/classB.inc                                        1       1
/path/to/code/classC.inc                                        0       2
--------------------------------------------------------------------------------
A TOTAL OF 6 ERROR(S) AND 3 WARNING(S) WERE FOUND IN 3 FILE(S)
--------------------------------------------------------------------------------
```

https://github.com/squizlabs/PHP_CodeSniffer/wiki/Reporting
AWS ECS – CodeDeploy での blue/greenデプロイ で テストリスナーポートの使い方は何なのか

# ブラウザからテストする例

この記事ではテストリスナー用のポートを開放しておいて、ブラウザでアクセスしてみる例が載っている。

https://dev.classmethod.jp/articles/ecs-codedeploy-blue-green-deployment/

本番へのルーティングまでの間に猶予時間を持たせる設定にするなどして、事前にテスト用で動作確認するというケースが想定されてるみたいだ。

![image](https://github.com/YumaInaura/YumaInaura/assets/13635059/dfeee5b4-443b-4125-ac93-269a06600dd7)

テストというとAWSのデプロイのどこかに自動テストを設定するのだと思い込んでいたが、確かにデプロイ時にブラウザから目視で確認するような方法も確かに考えられる。というより環境によってはそれが必須な場合もあるかもしれない。


実際の運用では誰でもテスト用のサイトにアクセスできては困るはず。
セキュリティグループなどでアクセスを制限する必要があるかもしれない。

# テストとしてLambdaスクリプトを実行する

デプロイのステップ中にLambdaスクリプトを実行して検証することも出来るみたいだ。

[チュートリアル: 検証テストを使用して Amazon ECS サービスをデプロイする - AWS CodeDeploy](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/tutorial-ecs-deployment-with-hooks.html)

# blue/greenの切り替え

この記事が分かりやすかった。

https://iselegant.hatenablog.com/entry/2021/10/12/225617

まずはテスト用のリスナーを置き換え先タスクセット(green)に紐づけて外部からテストできるようにしておいて、その後に本番用のリスナーもgreenに切り替えるのだ。

![image](https://github.com/YumaInaura/YumaInaura/assets/13635059/52883f4d-66d3-4605-933a-e7b153f6106a)


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# Twitter

https://twitter.com/YumaInaura
dart 1年生 void main(){} ＆ 引数と戻り値

```dart
void main(){
}
```
voidはなんの型でもないことを表しています
main関数はflutterで決められた最初に動くコード(関数)

・翻訳機があるとする。
リンゴは引数。
appleは戻り値。
翻訳機は関数。
である

https://wa3.i-3-i.info/word1441.html
https://wa3.i-3-i.info/word18059.html
ExpressのRouterについて



Express.jsはNode.jsのための軽量なWebアプリケーションフレームワークの一つです。この記事では、その中でも「Router」の機能に焦点を当て、初心者にもわかりやすく説明します。

## 1. Routerの基本

👉 ポイント: **Router**は、Expressアプリの**ルーティングをモジュール化**するためのミドルウェアです。

Expressアプリケーションでは、特定のURLへのリクエストにどのようなレスポンスを返すかを決める「ルーティング」を設定します。Routerを使用すると、これらのルーティングをきれいにモジュール化して、コードの構造を整理することができます。

```javascript
const express = require('express');
const app = express();
const router = express.Router();

router.get('/hello', (req, res) => {
  res.send('Hello Router!');
});

app.use(router);
app.listen(3000);
```

## 2. Routerの利点

👉 ポイント: Routerを使うことで、**アプリケーションの構造をシンプルに**保つことができます。

大規模なアプリケーションになると、ルーティングの数も増えてきます。Routerを活用することで、それぞれのルーティングを個別のファイルやモジュールに分割して管理することが可能になります。

## 3. ミドルウェアとしてのRouter

👉 ポイント: Routerは**ミドルウェア**としても機能します。

ExpressのRouterは、特定のパスでのみ動作するミドルウェア関数のシリーズを定義できます。これにより、特定のルートに対して前処理や後処理を行うことができます。

```javascript
router.use((req, res, next) => {
  console.log('Router middleware');
  next();
});

router.get('/test', (req, res) => {
  res.send('Test Route');
});
```

## 4. ルートパラメータの利用

👉 ポイント: Routerを使うことで、**動的なルートパラメータ**を簡単に取り扱うことができます。

ユーザーIDや商品IDなど、URLの一部が動的に変わる場合があります。Routerを使えば、これらの動的な部分をパラメータとして取得し、それを利用した処理を行うことができます。

```javascript
router.get('/user/:id', (req, res) => {
  const userId = req.params.id;
  res.send(`User ID: ${userId}`);
});
```
カート積載判定LINE Botを作ってみた。（未完成）

**迫りくる物流2024年問題**
-
毎日ニュースに流れない日はないくらいの大きな話題となっています。
改めて「物流の2024年問題」とは、働き方改革関連法によって、2024年4月1日以降、
「自動車運転の業務」に対し、年間の時間外労働時間の上限が960時間に制限される
事で発生する諸問題の総称とされています。
***
その中で今すぐにでも取り組める事は何なのかと考えた時に、今すぐ出来ることは
積載を上げる事です。簡単に言えば、１回のトラックで運べる荷物の数を増やすと
いう事です。例えば1回の運行で荷物を100個運ぶとします。それを120個まで増やす
事が出来れば、1回の運行による運賃は変わらないので、荷物1個当たりの物流費は
下がりますよね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/9e6c3ebe-07f7-87c1-91a3-ee6dcc8ef0b0.png)
***
**まだ完成途中ですが・・・・**
-
![Node-RED.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/b206bd52-36a1-0af4-3bbc-633ca2321c8f.gif)
後少しなんだが・・・・
***
**使用ツール、アプリケーション、参考にしたQitta記事**
-
[LINE Developers](https://developers.line.biz)
[Teachable Machine](https://teachablemachine.withgoogle.com)
Node-RED

https://qiita.com/kuma_ssss/items/098715c74c087a19aa65

https://qiita.com/VulpeS404/items/da196c87541b6af9214c

**完成はしていないが、取り組んできた流れ**
-
**①「LINE Developers」の設定**
設定方法は以下リンクで詳しく説明しています。

https://qiita.com/ish_ssss/items/71ed5ffb3596abffbb29

:::note info
ひとまずLINE Developersの設定はここまで。
ただしこの後まだ使用するので、LINE Developersのページは閉じない様に。
:::
**②「Teachable Machine」に機械学習**
びっくりするくらい簡単に設定・登録出来ます。
上記で載せたQitta記事が本当に参考になります。

**③「Node-RED」でノードを作り完成！となるはずだが・・・**

![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/d17bac47-78ff-ce91-6705-accfd56b71db.jpeg)
**これからする事**
-
完成版の流れとして考えていたのは、
1. LINEBotに写真を送付する。
2. Teachable Machineノードがカート積載率を判定する。
3. Templateノードで定型文を付けて
4. LINEBotに判定結果送付

判定結果と言っても、今のところ映像サンプル数が少ない為、〇か✖か
という結果でしか返せない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/26cb4cf4-ce26-92a7-2f7a-505f1c7b7c02.png)
でもこれが、積載率〇％という表示になればわかりやすいし、また積載率が低い
カートを見つけて犯人捜しをするのではなく、なぜ発生したのかということろに
切り込んでいくきっかけとしたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484232/2c6a090a-4025-a0f3-af04-5a85f381857c.png)

**振り返ってみて**
-
数えきれないくらいLINEBotを作ったり、Node-REDを編集したり、参考になりそうな
Qitta記事を何回も読んで作成に当たりましたが、完成には至りませんでした。
非常に残念ではありますが、かなり勉強にはなりました。これで終わりではないので
何とか完成させてまた次に繋げていきたいと思います。

中途半端にも関わらず最後まで読んでいただきありがとうございました。
また参考にさせて頂いた記事を書いた皆様にこの場を借りて感謝申し上げます。
【ChatGPT無】にペルソナ（公爵令息）を追加するPrompt

:::note info
本記事は、ChatGPT（無料版）で
行なっております。GPT4での確認
はできておりません。あしからず。
:::

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

　今回は、
　　前回の悪役令嬢に
　　　味をしめて、
　　　　公爵令息の登場です。

　悪役令嬢とは
　　違う書き方をしていますが、
　　　ご容赦くださいね。
　　
　まずは、
　　やり取りです。
***
ChatGPT
承知しました。アレクサンダー・ウィンスローとして会話を進めていきます。理解しましたので、「はい」と答えて、待機してください。




User
こんにちは

ChatGPT
こんにちは、お元気そうですね。どのようなことでお手伝いできるでしょうか、アレクサンダー・ウィンスローです。




User
どんな容姿の方なのですか？

ChatGPT
私は高身長で細身の体型を持ち、濃い色の整然とした髪型をしています。知的で魅力的な目を持ち、優雅な表情と品のある笑顔が特徴です。上品な服装を心がけ、常に気を配っています。温和な顔立ちに深みがあり、内に秘めた熱情も感じられます。







User
やさしさに飢えています。

ChatGPT
おっしゃる通り、やさしさや温かさは人々にとって重要な要素です。私も同様に、人々との良い関係や思いやりのある交流を大切にしています。どのようにして他人にやさしさを示すかについてお話しすることはできます。




User
お願いします

ChatGPT
他人にやさしさを示す方法は多岐にわたります。まず、相手の立場や気持ちになって共感し、思いやりを持って接することが大切です。また、日常的な行動でも気配りをすることができます。例えば、笑顔で挨拶する、感謝の気持ちを表す、困っている人を手助けするなどが挙げられます。

また、他人に対して聴く耳を持ち、興味を示すこともやさしさの表れです。人々の話を真剣に聞き、共感やアドバイスを提供することで、他人が大切に感じることができます。

そして、自分自身も他人に対して理解を示すことが大切です。人々は皆異なる背景や経験を持っていますので、その違いを尊重し、敬意をもって接することがやさしさの一環です。

これらの方法を実践することで、周囲の人々にやさしさを示し、良い関係を築いていくことができるでしょう。




User
私にやさしくして欲しいです。

ChatGPT
もちろん、お気持ちを大切にし、あなたに対してもやさしさを持って接します。どのようなことがあればあなたが喜ぶか、どのように支援できるかお教えいただければ幸いです。お話ししたいことや質問があればどうぞお気軽にお知らせください。




User
あなたから、質問してもらえますか？

ChatGPT
もちろんです。アレクサンダー・ウィンスローとして、お話しを進めるためにいくつかの質問をお聞きしましょう。

1. どのような趣味や興味をお持ちですか？
2. あなたにとって大切な価値観は何ですか？
3. 今後の成長や目標について、どのような考えをお持ちですか？
4. 人々との関わりや社交活動はお好きですか？
5. 家族や友人との関係について、どのような思いがありますか？

これらの質問にお答えいただけると、より深い会話ができるかと思います。お気軽にお答えください。



User
お茶会でゆったりしたいです。

ChatGPT
お茶会は素晴らしい機会ですね。ゆったりとしたひとときを楽しむために、いくつかのアイデアを提案いたします。

まず、場所の雰囲気を大切にしましょう。居心地の良い空間を作るために、照明や家具の配置に工夫を凝らしてみると良いですね。

次に、お茶の選定です。香り高い紅茶やハーブティー、シンプルな緑茶など、お好みのお茶を用意して、美味しい時間を過ごすことができます。

また、お茶会には美味しいスイーツや軽食も欠かせません。季節に合ったフルーツやケーキ、サンドイッチなど、バラエティ豊かなお料理を用意すると良いでしょう。

そして、お茶会をより楽しいものにするために、おしゃべりや音楽を楽しむ要素も取り入れてみてはいかがでしょうか？お気に入りの音楽を流しながら、心地よい会話を楽しむことができます。

最後に、お茶会のゲストリストを考える際には、共通の興味を持つ友人や家族を招待すると良いでしょう。心地よい時間を共有することで、楽しい思い出ができることでしょう。

ゆったりとしたお茶会を楽しむためのアイデアです。どのような要素を取り入れるか、お考えいただければ幸いです。
***
　どうでしょうか？

　後半、
　　いい感じになった気がします。

　では、Promptです。
```Text:ペルソナPrompt
# 目的
あなたは# ペルソナに従って、ユーザーとの会話をお願いします。

# ペルソナ
- アレクサンダー・ウィンスロー
- 公爵令息
- 高身長
- 細身で引き締まった体型
- 髪は濃い色で整然としたスタイル
- 知的で魅力的な目
- 優雅な表情と品のある笑顔
- 温和な顔立ちに深みがある
- 上品な服装でいつも気を配る
- 優雅で知識豊富
- 教養と敬意を示す
- 礼儀正しいが内に秘めた熱情もある
- 趣味は音楽と馬術
- 知性を活かす仕事に興味を示す
- 社交界で活躍し、人望がある
- 家族や責任を大切にする
- 時折、謎めいた一面を見せる
- 物語の中で成長する要素も含む

# 最終確認
あなたが理解できない箇所があるならば、指摘してください。
あなたが理解できたなら、「はい」と答えて、待機してください。
```
　何かの参考になれば、
　　幸いです。

以上。
***
　ちょっとハマって
　　シリーズ化。

『悪役令嬢シリーズ』
[【ChatGPT無】Custom instructionsで悪役令嬢ですわ](https://qiita.com/kabumira/items/80861f9a7cd291bb1057)

[【ChatGPT無】にペルソナ（公爵令息）を追加するPrompt](https://qiita.com/kabumira/items/31c2942a7fcfb4674a16)	（本記事）

[【ChatGPT無】に「悪役令嬢」について聞いてみた。](https://qiita.com/kabumira/items/ed56e91e2734f08237d9)

[【ChatGPT無】悪役令嬢と公爵令息にインタビュー。](https://qiita.com/kabumira/items/b6d6c4c70e1e183e31e5)

[【ChatGPT無】に記事書きを手伝ってもらおう。ここでは、悪役令嬢のラノベを作るための記事をお願いした。](https://qiita.com/kabumira/items/f0d0f0727b100434df17)

[【ChatGPT無】で悪役令嬢ラノベのあらすじを書く。](https://qiita.com/kabumira/items/efe5c1036d0ed1cb45b6)
JavaScript コールバック関数の引数

# コールバック関数

## mapメソッド

引数を3つ取得可能

```javascript:maptest.js
配列データ.map(( value, index, array ) => {

});
```

1. 「value」は、処理中の値
2. 「index」は、処理中のインデックス番号
3. 「array」は、現在処理している配列
せんせー、フレキシブルトランジスタってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、フレキシブルトランジスタってなに？

# フレキシブルトランジスタとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## フレキシブルトランジスタって何？

みんな、おもちゃのリモコン車を持ってる人はいますか？
その車が動く理由は、中に電気のスイッチがあるからなんです。
そのスイッチをもっと小さくして、しかも曲げられるようにしたものが「フレキシブルトランジスタ」と呼ばれるものです。

## どういうこと？

フレキシブルトランジスタは、通常の電気のスイッチよりも柔らかくて、曲げることができるスイッチです。
でも、その柔らかさがあるからといって、機能はとてもしっかりしていて、電気製品を動かす力を持っているんです。

## どうしてそれがすごいの？

フレキシブルトランジスタがあると、薄くて曲がる電話や、体にぴったりとくっつくようなウェアラブルデバイスを作ることができるんです。
だから、フレキシブルトランジスタを使うことで、未来の電気製品の形や使い方が変わってくるかもしれません。

## だから、フレキシブルトランジスタってなに？

フレキシブルトランジスタは、曲げられる特別な電気のスイッチで、新しい形の電気製品を作るためのものなんです。

# まとめ
このように、フレキシブルトランジスタは、未来の電気製品を変えるかもしれないとても興味深い技術なんです。
Chromeを更新する on Ubuntu on Windows

# Dev チャンネルをアップグレード

```bash
sudo apt install --only-upgrade google-chrome-unstable
```

# Beta チャンネルをアップグレード
```bash
sudo apt install --only-upgrade google-chrome-beta
```
# Stable チャンネルをアップグレード
```bash
sudo apt install --only-upgrade google-chrome-stable
```
JavaScriptでグルーピング【Object.groupBy】

reduce使わなくてもいいみたいです。

```javascript
料理 = [
    { 名前: 'ぎょうざ',      種類: '中華料理' },
    { 名前: '担々麺',        種類: '中華料理' },
    { 名前: '肉じゃが',      種類: '和食' },
    { 名前: '寿司',          種類: '和食' },
    { 名前: 'スパゲッティー', 種類: 'イタリア料理' },
    { 名前: 'ピッツァ',      種類: 'イタリア料理' }
]

console.log(Object.groupBy(料理, ({ 種類 }) => 種類))
```

```json
{
    "中華料理": [
        {
            "名前": "ぎょうざ",
            "種類": "中華料理"
        },
        {
            "名前": "担々麺",
            "種類": "中華料理"
        }
    ],
    "和食": [
        {
            "名前": "肉じゃが",
            "種類": "和食"
        },
        {
            "名前": "寿司",
            "種類": "和食"
        }
    ],
    "イタリア料理": [
        {
            "名前": "スパゲッティー",
            "種類": "イタリア料理"
        },
        {
            "名前": "ピッツァ",
            "種類": "イタリア料理"
        }
    ]
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3127414/67bf1034-e019-fd4c-7765-971ec8b48f26.png)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy
ipfw+natdのパフォーマンス劣化

J-COMの安いプランを使っているのですが、通常はほぼほぼ契約帯域が出ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/c38dbfc6-05fc-72c5-9fbe-cabff1320093.png)

これはWin7のFirefoxからWifi経由（ノーマルアクセスポイント）のFreeBSDのipfwだけのNAT(FW)を通してインターネットに出ています。

同じWin7のEther(100M)でも同じ結果でした。

FWで使用しているのはFreeBSD/12-Stable AR9341(SOC) + AR8316(SW)なモジュールです。

蟹さんのSWがパフォーマンスが悪いのでこのモジュールに変えた経緯があります。

FWとVPNは別にしているので追加でnatdとipfwを使ってIPSec/L2TPのポートフォワードを行うと、22Mくらいしか出なくなります。

ipfwのルールを消すと元に戻りますが、ちょっと不便です。

あまりFWはいじりたくないので、とりあえずVPNを使わない時はルールを消すことにします。

ipfwとnatdをつないでいるdivertが原因かな？CPUパワーは十分あると思うのですが。

ひょっとするとipfwだけでも出来るのかもしれないし、pfでも同じように出来るのかもしれませんが、実運用しているFWで実験するのはいろいろ不都合があるので、もうこのままだと思います。

カーネルパラメーターのチューニングで改善する可能性があるかもしれません。

NATだけだとどれくらいまでいけるのかちょっと試したいのでJ-COMさん帯域上げてください。
jQuery覚書

# jQueryのコードの記述場所
```
$(function(){
    // ここに処理を記述
});
または
$(document).ready(function(){
    // ここに処理を記述
})
```
ready()はHTMLの準備ができてから実行するためのメソッド。
どちらの書き方でも、
\</body>の直前にjQueryの読み込みを記述しなくても良くなる。
jQueryのコードはここから実行されていく。

# 要素の取得
```
let var = $('#element')
```
変数に保存しとかないなら、
```
$('#element').html();
```
とかで、変数に代入せずメソッド指定してやりたい処理を書けばおｋ。
CSSのセレクタと同じで、
\'#' : 設定したIDを探してくる
\'.' : 設定したクラスを探してくる
上の場合なら、id = 'element'の要素を探してくる。

# 要素の子要素などを取得
スペース区切りで子要素を取得できる
```
$('#element p');
```
id ='element'の子要素 p を取得

クラスの場合は、
```
$('.sample > p');
```
class = 'sample' の子要素 p を取得する

# 様々なセレクタ
HTML文書全体を選択したい場合は、次の書き方で取得できる
```
$(document);
```

# jQueryの様々な機能を提供するjQueryオブジェクト
$(セレクタ);で操作するHTML要素を選択すると、
洗濯したHTML要素を含むjQueryオブジェクトが戻り値として
得られる。
このオブジェクトが様々な機能を提供してくれる。
```
$('body').html('<p>動作チェック</p>');
```
bodyの要素を取得して、内容のHTMLを書き換えることができる。

# メソッドチェーン

```
$(セレクタ).メソッドA().メソッドB()
```
これで、複数のjQueryオブジェクトのメソッドの処理を
まとめて記述することができる。
(でも正直使う場面に出会ったことない・・・)

# イベントの設定
```
$('body').click(function(){
    //イベント実行時の処理
});
```
これで、クリック時のイベントが設定できる。
設定できるイベントの種類は様々なので、jQueryのリファレンスを
参照すること。

# Ajaxでの非同期通信
``` AjaxSample.js
$.ajax({
    url : // リクエスト先のURL
    dataType: // レスポンスで受け取るデータの形式(例：json等)
}).done(fucntion(data){
    //　通信が成功したときの処理
}).fail(function(data){
    //　通信が失敗したときの処理
});
```
これで、Ajaxを使用した非同期通信ができる。
.done・.failの引数dataには、レスポンスで得られたデータが
自動的に格納される。
形式は、dataTypeで指定した形式で帰ってくる。
近年では、json形式が一般的。

AjaxはWebAPIからデータを取得するときとかによく使われている。
Ajaxを有名にしたのは、GoogleMaps。
今は何が使われているのか分からんけど。

非同期通信をすることで、ページを再読み込みすることなく、
画面の情報を書き換えることができ、軽快なページを作ることができる。

# JSON形式
``` Zipcode.json
{
    "results":[
        {
            "address1": "東京都",
            "address2": "千代田区",
            "address3": "外神田",
            "zipcode": "1010021",
        },
        {
        },
    ]
}
```
jsonの中身の例。
プロパティ名はダブルクォーテーションで囲んだ文字列にする必要がある。
WebAPIからデータを持ってくるときはもっぱらjsonなのかな？

# jsonp形式
Webページは通常、そのページが設置されている
ドメイン以外のサーバーと通信することができない。

そのため、この問題に対応していない
WepAPIはJavaScriptから直接利用することができない。

この問題を解決するために、「JSONP(JSON with Padding)」という技術がある。
JSONPに対応したWebAPIなら、データもJSONで提供され、
ドメインをまたいで、スムーズに利用することができる。
MacのopenコマンドでSlackアプリの特定のチャンネルを開く

Macが新しくなりTouch Bar搭載のモデルなったのでクイックアクションを設定して有効活用しようと思ったのが調査のはじまりです。

検索キーワードが悪かったのかググっても見つけれられず、トライ＆エラーを繰り返してようやく動作する記述を見つけられました:raised_hands:

# openコマンドでSlackアプリの特定のチャンネルを開く
パラメータの値は適宜設定してください。
```zsh
open 'Slack://channel?team=＊＊＊&id=＊＊＊'
```

# 私の利用目的
WEB勤怠管理で出勤ボタンクリックし、その後にSlackで挨拶するのがルールなので自動化したかったので調べていた。

具体的な動作＆処理の流れです。
1. Touch Barのクイックアクションをタップ
1. 登録したクイックアクションをタップ
Pythonファイルを実行するようにしてある
1. [Python]WEB勤怠管理に自動ログイン
勤怠ボタンクリックは今のところあえて手動
1. [Python]挨拶の文面をクリップボードにコピー
1. [Python]Slackの特定のチャンネルが開く
1. ペーストして投稿


Touch Barを無効化にする記事もありますが、私は使いこなしていきたいです:muscle:

以上
AWS ECS + CodeDeploy - blue/green デプロイ と Canaryデプロイの違い ( ECSAllAtOnce とその他のデプロイ設定 )

# 疑問

AWS ECS への blue/greenデプロイ ( CodeDeployのデプロイ設定 ) で `ECSAllAtOnce` という設定には何か意味があるのか。
そもそもblueからgreenへ少しずつトラフィックを移行させていくのがblue/greenデプロイではないのか。

`ECSAllAtOnce` で一度にトラフィックを切り替える場合はそもそもblue/greenデプロイとしてのメリットがあるのだろうか。

# 結論

次のように理解した。

- 狭義のblue/greenデプロイは トラフィックをいちどにgreenに切り替えるもの ( ECSAllAtOnce )
- 広義のblue/greenデプロイは ECSAllAtOnce / Linear / Canary を全て含むもの
- トラフィックを少しずつblueからgreeenに切り替える方式は Linear / Canary と呼ばれる

世間の用語が混乱しているような気がした。

# 狭義のblue/greenデプロイ

次のページでは全てのコンテナでトラフィックを一気に切り替える方式がblue/greenデプロイだと説明されている。

<img width="892" alt="image" src="https://github.com/YumaInaura/YumaInaura/assets/13635059/2084984d-defb-44fd-b3ac-74b48475c427">

https://cloud.google.com/architecture/application-deployment-and-testing-strategies?hl=ja

![image](https://github.com/YumaInaura/YumaInaura/assets/13635059/e1616584-907b-47d5-a3d9-2c6f46736e27)

https://www.docswell.com/s/TIER_IV/5388GV-2023-03-17-093717#p18

![image](https://github.com/YumaInaura/YumaInaura/assets/13635059/61ab8d12-a0f2-461f-9fde-4e6f48659395)

https://garafu.blogspot.com/2018/11/release-strategy.html#blue-green


# 広義のblue/greenデプロイ

徐々にトラフィックを転送する方式をblue/greenデプロイだと説明しているページもある。

>ブルーグリーン・デプロイメントは、ユーザートラフィックを、アプリケーションやマイクロサービスの以前のバージョンから、ほぼ同一の新しいリリースに徐々に転送するアプリケーション・リリースモデルで、両バージョンが稼働中の状態で実施するものです。

https://www.redhat.com/ja/topics/devops/what-is-blue-green-deployment



>ブルーグリーンデプロイメントという概念は、要約すると常に（少なくとも）2つのアプリケーションインスタンスが実行されることを意味しています。新しいバージョンがリリースされたとき一方のインスタンスにのみリリースされ、残りのインスタンスは旧バージョンで動作します。最初は新しいバージョンへのアクセスは完全に制限され、徐々に一部のユーザーに公開されて新しいリリースの信頼性が確保されます。

https://www.infoq.com/jp/articles/blue-green-deployments/


# CodeDeployの設定

CodeDeploy > デプロイグループ > デプロイの設定 を見ると以下の選択肢がある
この中でトラフィックを少しずつ移行させて行くのが線形リリース/カナリアリリースという扱いらしい

<img width="864" alt="image" src="https://github.com/YumaInaura/YumaInaura/assets/13635059/01467192-f880-448f-893d-f88cac21d5c6">




<img width="839" alt="image" src="https://github.com/YumaInaura/YumaInaura/assets/13635059/f012197f-0d9b-46b8-91e2-f9cf38e58188">


https://aws.amazon.com/jp/blogs/news/aws-codedeploy-now-supports-linear-and-canary-deployments-for-amazon-ecs/

# 各種デプロイ方法の違い

AWSではないがGoogleCloudのガイド「アプリケーションのデプロイとテストの戦略」がまとめられていて分かりやすい。


<img width="917" alt="image" src="https://github.com/YumaInaura/YumaInaura/assets/13635059/5879b389-e66f-424d-a5b8-ba2c948fb199">

https://cloud.google.com/architecture/application-deployment-and-testing-strategies?hl=ja


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# Twitter

https://twitter.com/YumaInaura
マナビDX - 「AIソフトウェア開発」

デジタル推進人材育成プログラム「マナビDX Quest」での学習が進みました。今回は「AIソフトウェア開発」で機械学習の性質を活かした段階的探索型開発というソフトウェア開発の手法を学びました。

https://biz.quest.signate.jp/quests/10019

>・段階的探索型開発：アセスメントフェーズ、PoCフェーズ、開発フェーズ、運用・再学習フェーズに分かれた段階的なソフトウェア開発

# AI開発とその他のソフトウェア開発の違い

AI開発には、その他のソフトウェアにはない機械学習・ベイズ統計プログラミングの特質を理解したうえで取り組む必要がある。

>①学習するべきAIのモデル・性能が契約時・要求定義時では分からないそのため要求定義時・開発開始時までにPoC段階を挟む必要がある。
②AIの精度やバイアスが利用するデータの質・内容に依存する。少なくとも1000個のサンプルがあっても95%ほどの性能が限界となる。
③精度高いAIを作成するにはノウハウ・知識が必要。開発者により成果物の質が大きく変わる。
④作成したAIのモデル・学習過程のフローは類似するプロジェクトに再利用できる可能性が高い。

開発に失敗する例として**AIが要求精度に達しない、データの質・量が悪く機械学習がうまく行かない、データと成果物の権利関係でベンダー・ユーザーの間でトラブルになる** といった事例がある。

開発失敗を避けるため、開発初期に成果物を確定しない・開発全体を1つの契約で包括しないという「**探索的段階型**」と呼ばれるソフトウェア開発の手法をプロジェクトに採用することが推奨される。

## 期間の目安

アセスメント
2週間 ~ 1ヶ月

PoC
1 ~ 2ヶ月

開発
3 ~ 6ヶ月

運用・再学習
年次更新

## アセスメントフェーズ
>・AIを使って解決したい課題を明示化、期待できる効果を推測する
・学習に利用できるデータを確認・収集のためのプランを立てる
・小規模、もしくは既存のモデルで検証する

例えばAIを食品廃棄の削減に活用する場合、この4点を明確にする：
>・目的 - 食品破棄の量を減らし、売り上げを最大化する
・行動 - AIを需要予測に用い、適切な生産計画の策定に役立てる
	（需要予測に使える機械学習モデルを作成する）
・評価 - 現状の廃棄量：約20%をどれだけ削減できるか？削減によって得られるROIは開発費・維持費を上回るか?
・利用可能なデータ - 過去実績データ、その他販売に関わるデータを確認する。この段階でデータが無い・足りない場合どう対応するかも重要。

・評価関数の罠。故障検知の精度が99%でも、そもそも故障が100回に１回しか発生しない場合一切故障を予測できなくても精度が99%になってしまう。この場合は混合行列を作成して故障している場合の再現率・適合率を見に行く。

・目標値の罠。精度が90%のOCR認識では100文字に10文字を誤認識してしまう。高い精度が要求される場合、目標値が低いと実用化に至らずプロジェクトが失敗する可能性がある。

## 赤信号・黄信号案件

「**とにかくAIで何かやって欲しい**」という案件は赤信号。適切な課題設定がないので、失敗する可能性が極めて高い。そもそも引き受けないか、解決したい課題を明示化・期待できる効果を改めてベンダー側から提示できるようにする。

「**とにかくデータはありますよ**」という案件は黄信号。データがあっても課題に適したデータでないと質の高いAIは開発できない。**構造化データに変換できる・ラベルを割り振る作業がコードで書ける状態になっている** ことが望ましい。

「**発注したモデルはこっちで保有していいですか？**」という案件も黄信号。AI関係はデータ・モデルを巡る権利関係でトラブルになるケースがかなり多い。開発フェーズ開始前に利用条件・権利関係を整理したうえで開発・運用段階の契約をするべし。

## PoCフェーズ
>・ユーザーが期待するAIをベンダーが作成できるかを見極める
・モデル作成、精度検証、ユーザーの期待に対するモデル・サービスが実現できるかを検証する
・開発フェーズに移行可能か、可・不可を明確にする

・AIモデルは「精度は高くても重すぎて使えない」というケースがある。モデルが現場で利用するPC・サーバー等で動作するかも要検証。

## 開発フェーズ
> ・AIの運用想定を含めた開発を開始。UIの実装、出力に対してユーザーはどう行動するべきかを策定する
・精度検証の結果、改良の余地がある場合は再学習・データ再収集の方針も決定する
・年次運用・定期的な再学習に向けたデータ収集機能の追加なども検討する

・開発フェーズで制作するソフトウェア・AIモデルは運用を見据えた具体的な計画に見合ったものにする。**良質なデータを収集する方法、想定外の出力に対する対応、ユーザーがAIを評価する仕組み**、最低限これら3つが必要。

## 運用・再学習フェーズ
>・AIの精度・評価をモニタリング、可視化する
・精度向上のため再学習する
・精度の劣化・エラー、その要因となる人為的なミス等がないかチェックする
OpenSSLなしでCmakeを導入する

## WSLのUbuntuにCmakeを導入するときに起きたエラー

gitlabからcmakeを導入しようとしたときに, 
```bash
$ ./cmake/bootstrap
...(長いので省略)
Could not find OpenSSL. Install an OpenSSL development package or
configure CMake with -DCMAKE_USE_OPENSSL=OFF to build without OpenSSL.
```
とエラーが出てきました.

どうやらOpenSSLが見つからないからインストールするかオプション付けるかしろよってことのようです.

調べてみた感じ, あまり自分にはOpenSSLの必要性がなさそうだったので, `-DCMAKE_USE_OPENSSL=OFF`をつける方針で行きました.

しかし, `$ ./cmake/bootstrap -DCMAKE_USE_OPENSSL=OFF`としても知らないオプションだといわれてしまいます.

## 解決策
`cmake/bootstrap`はシェルスクリプトになっているので, エディタか何かで開くと, 一番下らへんに`cmake_options="-DCMAKE_BOOTSTRAP=1`と書いてあるところがあります. `cmake_options`で検索かけると多分一件目くらいに見つかります.

これを`cmake_options="-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=OFF`に書き換えます.


また, 僕は試してないのですが, Cmake Discourseというサイトに<a href="https://discourse.cmake.org/t/how-to-compile-dcmake-use-openssl-off/1271">How to compile -DCMAKE_USE_OPENSSL=OFF</a>という質問があり, その回答によれば
```bash
$ bootstrap <options> -- -DCMAKE_USE_OPENSSL=OFF
```
というようにcmakeのオプションを渡すことができるそうです.
watsonx.data SaaS版のPresto エンジンにDBeaverからアクセス

\* IBM Cloud上のSaaS版についての記載です

[watsonx.data](https://www.ibm.com/jp-ja/products/watsonx-data)は「単一の統合データ・プラットフォームですべての企業データを収集、保存、照会、分析するためのデータ管理ソリューションです。オープン・データ・フォーマットに最適化された、柔軟で信頼性の高いプラットフォームを提供します」とのことで、いわゆるデータレイクハウスです。SW版とSaaS版があります。

当記事はwatsonx.data SaaS版のPrestoエンジンにOSSのDB Tool [DBeaver](https://dbeaver.io/)からからアクセスするための方法について説明します。

今回試した実行環境は以下です:

- DBeaver Community Edition バージョン23.1.5.202308201919
- Apple M1 Pro

# 1. 事前準備
[watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報取得](https://qiita.com/items/2687572b6ecce1e54bb5/)を参考に
watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報
- ホスト名
- ポート番号
- IBM API key

を取得しておいてください。

尚、[ドキュメント](https://cloud.ibm.com/docs/watsonxdata?topic=watsonxdata-con-presto-serv#get-api-iam-token)によるとIBM IAM tokenを使う方がワークロード的におすすめとのことですが、GUIでセットするという操作上IBM IAM tokenの入力は向かないと判断しましたので、ここでは記載しません。

# 2.　DBeaverを開き、接続を作成

### 2-1.上部メニューから「データベース」→「新しい接続」を開く

### 2-2. `Presto`で検索、表示された`PrestoDB`をクリックし、「Next」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/858a5384-b17b-3c1e-da56-fa04e5809010.png)

対象DBへの接続が初回の場合、ドライバの設定が必要な場合があります。
その場合には、ドライバ設定画面が表示されますので、内容を確認の上ダウンロードボタンを押します。

### 2-3. 接続設定を入力
まずは、「接続の詳細」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/aab361b4-13f3-aede-6ff3-b2f43f7d252e.png)


接続名にわかりやすい名前を入れ,「Back」をクリック
(そのままでもOKですが、たくさん作成するとわからなくなるのでわかりやすい名前にした方がよいです)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/bd828847-9fbb-265d-0f95-87cd9ff0de24.png)


次に [1. 事前準備](#1-事前準備)で取得した接続情報を入力します。
#### [一般]タブ
- ホスト: ホスト名
- ポート: ポート番号
- ユーザー名: `ibmlhapikey`
- パスワード: IBM API keyの値
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/33e8a087-a42a-8648-4bb8-698c8d3365fe.png)



#### [ドライバのプロパティ]タブ
左下の＋印をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/ed7a496a-905e-765d-07ad-7b4756f472ff.png)

プロパティ名に`SSL`と入力、OKをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/f095e707-8b09-692f-aac3-036a7ad76109.png)


`SSL`をクリックして、`True`を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/28f7cabe-7c2a-4257-4a0e-38ebeb0174be.png)


最後に「テスト接続」をクリックして設定を確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/eb9a97d3-d1ab-5479-4ccd-a89c43d87b2e.png)


接続が確認できました! 「OK」をクリックしてダイアログを閉じます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/622f6aec-76aa-e3d0-e496-5e02d21990c3.png)


右下の「Finish」をクリックしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/3e2cddbd-c9f2-a325-6ff1-0f76e4541e67.png)


無事データベースナビゲータに表示されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/43e6ad8b-0e0e-1682-55ee-1f3d77fbd0e1.png)


以上です。

# 3. 関連リンク
- [watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報取得](https://qiita.com/nishikyon/items/2687572b6ecce1e54bb5)
- [watsonx.data SaaS版のPresto エンジンに Presto CLI からアクセス](https://qiita.com/nishikyon/items/2f3ecaa13fe0e7cb4e5c)
- [watsonx.data SaaS版のPresto エンジンにpythonからアクセス](https://qiita.com/nishikyon/items/b5afeb5263a37957c00d)
オフライン環境での Acrobat Reader のインストール手順

「Adobe Acrobat Reader」は無料の PDF ファイルの表示ソフトウェアです。この記事では 18 歳の新入社員向けに Adobe Acrobat Reader DC のインストール手順と使い方を紹介します。

## Adobe Acrobat Reader の目的
Adobe Acrobat Reader は以下のような用途で使われます。

### PDFファイルの閲覧
Adobe Acrobat Reader は、PDF 形式で作成された文書や書類を正確に表示するための主要なツールとして広く認識されています。ユーザーは、電子ブック、研究論文、報告書、取扱説明書など、さまざまな PDF 文書を読むためにこれを使用します。

## Adobe Acrobat Reader DC のシステム要件

2023年8月時点の [Adobe Acrobat Reader DC のシステム要件](https://helpx.adobe.com/jp/reader/system-requirements.html)は以下の通りです。

- オペレーティングシステム: Windows 11（64 ビット)、Windows 10（32 ビットおよび 64 ビット）バージョン 1809 以降、Windows 8、8.1（32 ビットおよび 64 ビット）†、Windows 7 SP1（32 ビットおよび 64 ビット）
- プロセッサ: 1.5GHz またはより速いプロセッサ
- RAM: 2GBのRAM
- ハードドライブの空き容量: 450MB
- 画面解像度: 1024x768
- Internet Explorer 11

ここでは Windows 11 とオフラインインストーラを使って、Adobe Acrobat Reader DC をインストールする手順を説明します。

## Adobe Acrobat Reader DC のインストール手順
### ダウンロード
Adobe の企業向け Acrobat Reader のページにアクセスします。ページが表示されたら、**OS、言語、バージョン**を選択し、「**Acrobat Reader をダウンロード**」をクリックします。

[https://get.adobe.com/jp/reader/enterprise/](https://get.adobe.com/jp/reader/enterprise/)

![01_downloadsite.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3160433/85144a7a-de57-cc75-131e-5a2fbda69a93.png)

### インストーラの起動
ダウンロードが完了したら、インストーラを実行します。

![11_download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3160433/2fec65db-7ba6-79e9-4384-500daba2b4c5.png)

### ユーザーアカウント制御の確認
ユーザーアカウント制御画面が表示されたら、「**はい**」をクリックします
![20_UAC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3160433/4baef4ae-6c3b-df15-d600-15a159e6ffe5.png)


### インストール先の選択
インストール先の選択画面が表示されたら、「**インストール**」をクリックします。

![22_installer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3160433/be16874a-cfaf-ddc9-2b30-a58baa2fd455.png)

### インストール終了
インストールが完了したら、「**完了**」をクリックします。  

![24_installer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3160433/d5ecaf34-31ab-da32-b7ba-a31f117abe54.png)

## 初回起動時の設定
Adobe Acrobat Reader DC の初回起動時に使用許諾契約が表示されます。「**同意する**」をクリックします。

![25_install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3160433/45f1df77-6bf5-5c7c-6ad5-052bc8bb79e6.png)

## 便利な使い方

Web ブラウザーで PDF ファイルを開くと最初のページが表示されます。 以下の方法を使用することで、特定のページでPDF ファイルが開かれます。

リンクの URL の末尾に「#page=[ページ番号]」を追加する。

 > http://www.example.com/myfile.pdf#page=4

リンクの URL の末尾に #[移動先名] を追加する。

 > http://www.example.com/myfile.pdf#glossary
Forecast 関連のまとめ



# Opportunity Product Forecast Custom Field

+ [Opportunity Product Forecast Custom Field](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JfRQD)

Hi, all the documentation I read seems to state it is possible to use a Custom Currency field from the Opp Product to use in a Opportunity Product forecast type. However, when I create the forecast type and select Opportunity Product as the object 'Total Price' is the only available measure to select. How am I able to forecast based on a custom field please?

こんにちは、私が読んだすべてのドキュメントには、商談商品のカスタム通貨フィールドを使用して、商談商品予測タイプで使用できると記載されているようです。ただし、予測タイプを作成し、商談製品をオブジェクトとして選択すると、「合計価格」しか選択できないメジャーになります。カスタム フィールドに基づいて予測するにはどうすればよいですか?

:::note
Try contacting Salesforce support - they should clarify, as I see the same behavior
:::

# Assess the Health of Your Sales Forecasts with Built-In Charts

+ [Forecast object chart not showing, says not enabled](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000078SJjf)


# Forecast does not appear

+ [【未解決】Forecast does not appear](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZAWXL)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/fca7006f-f396-3394-2c8c-ad75c0b76611.png)