OmniAICreator/Qiita-1.07M huggingface dataset:
git で特定のコミットにファイルを追加・修正する

## はじめに
git のコミット修正にいつも苦戦しているので、残しておきます。
可能な限りわかりやすく記載するつもりですが、不明瞭な点、追記した方がいい点などがございましたら、合わせてご教授ください。

## この記事の目的
gitのコミットを積んだ後、「うわ、この修正もあのコミットに乗せたかった」という事態が私は頻繁に発生するので、その時のための積み方をメモしておきます。

## 状態
下記のような状態で、`index.html.slim` を再び修正したとします。
願望 `0b89ee99b89da11ae0d2e03c0b1f18f51bafed7d` のコミットに乗せたい。
```console
$ git log
commit 47d2f082439c53f7c7e566a6d262cbed86d7fc39
Author: Me <mail_address>
Date:   Wed Apr 10 23:01:10 2024 +0900
 
    fix edit.html.slim
 
commit 0b89ee99b89da11ae0d2e03c0b1f18f51bafed7d
Author: Me <mail_address>
Date:   Wed Apr 10 23:00:20 2024 +0900
 
    fix index.html.slim
 
commit 046936fca80c70b2d43aae35c1bbda23f20ac5ed
Author: Me <mail_address>
Date:   Wed Apr 10 22:59:05 2024 +0900
 
    fix show.html.slim
```

## 対応
まず、修正した `index.html.slim` をステージして、混ぜたいコミットのIDを指定してコミットします。
```console
$ git commit --fixup 0b89ee99b89da11ae0d2e03c0b1f18f51bafed7d 
[hogehoge 2addf9f32] fixup! fix index.html.slim
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git log
commit 2addf9f32fed7f18bbacf9e4c3349b1c682c9dcc (HEAD -> hogehoge)
Author: Me <mail_address>
Date:   Wed Apr 10 23:16:40 2024 +0900
 
    fixup! fix index.html.slim

commit 47d2f082439c53f7c7e566a6d262cbed86d7fc39
Author: Me <mail_address>
Date:   Wed Apr 10 23:01:10 2024 +0900
 
    fix edit.html.slim
 
commit 0b89ee99b89da11ae0d2e03c0b1f18f51bafed7d
Author: Me <mail_address>
Date:   Wed Apr 10 23:00:20 2024 +0900
 
    fix index.html.slim
 
commit 046936fca80c70b2d43aae35c1bbda23f20ac5ed
Author: Me <mail_address>
Date:   Wed Apr 10 22:59:05 2024 +0900
 
    fix show.html.slim
```

次に、↑で指定したコミットIDの1つ前を指定して、下記のコマンドを叩きます。
`fix show.html.slim` のコミットIDです。

```console
$ git rebase -i --autosquash 046936fca80c70b2d43aae35c1bbda23f20ac5ed
```

何かが開くので、`:wq` で閉じます。

そうすると、コミットIDが振り直され、`fixup!` も消えました。
```console
$ git log
commit 3eb5332e505246a05784522b41b6d66681630c65
Author: Me <mail_address>
Date:   Wed Apr 10 23:01:10 2024 +0900
 
    fix edit.html.slim
 
commit 1473f188d3f9edd951c8310a083e0e86ca8bf1a3
Author: Me <mail_address>
Date:   Wed Apr 10 23:00:20 2024 +0900
 
    fix index.html.slim
 
commit 046936fca80c70b2d43aae35c1bbda23f20ac5ed
Author: Me <mail_address>
Date:   Wed Apr 10 22:59:05 2024 +0900
 
    fix show.html.slim
```
GitHub Actions の larger runner を利用して、マシンスペックが要求されるアプリのテストを始めた

:::note warn
GitHub Actions の larger runner を使い始めた人が書きました。
:::

# はじめに

GitHub Actions の larger runner を利用して、マシンスペックが要求されるアプリケーションの継続的なテストを始めた経験を共有します。GitHub Actions の larger runner（より大きなランナー）とは、標準 (Standard GitHub-hosted runners) よりも高いマシンスペック提供します。これを使用することで、マシンリソースを多く必要とする処理もスムーズに実行できるようになります。

# 目次

- はじめに
- GitHub Actions の larger runner が必要になった経緯
- 導入に要した時間
- 導入の手順
- 課金の確認
- 最後に

# GitHub Actions の larger runner が必要になった経緯

私のプロジェクトでは、Elasticsearch や Transformer、PyTorch、Docker など、マシンスペックを要する処理が組み込まれています。GitHub Actions でユニットテストを実行しつつ、開発する際に以下の問題を抱えていました。

- Elasticsearch と Transformer を同時利用すると、Elasticsearch がユニットテストの途中で応答しなくなる
- Transformer モデルを pip install すると、Elasticsearch がユニットテストの途中で応答しなくなる
- Elasticsearch に 1G のメモリを割り当てないと起動しない
- Docker コンテナをキャッシュを利用せずにビルドしたジョブで続けてユニットテストすると、Elasticsearch がユニットテストの途中で応答しなくなる

Standard GitHub-hosted runners 上でテストするために、さまざまな策で回避してきましたが、万策尽きました。これからもアプリは拡張を続けるため larger runner を導入したところ、上記条件でも Elasticsearch が落ちないようになりました。Standard GitHub-hosted runners でアプリが落ちるか落ちないかを瀬戸際だったので、セルフホステッドランナーを利用するよりは、少しマシンスペックを上げる larger runner が良いと判断しました。

# ランナーのスペックの before after
2 コア, メモリ 7 GB -> 4 コア, メモリ 16 GB

# 導入に要した時間

利用手順を調べ始めてから、利用の開始ができるまで 30 分程度でした。(もっと早く導入すれば良かった。)

## 導入の手順

1. Organization 設定の権限を手に入れる
2. Organization へのより大きなランナーの追加
3. より大きなランナーへのアクセスをリポジトリに許可する
4. より大きなランナーの名前を変更する
5. Billing and Plan のページに行って、Actions の Limit spending を 0 以上に設定する
6. workflow の yaml に `runs-on: ubuntu-latest-m` を追記して、actions を実行する

1, 2, 3 に関しては (GitHub の現在の機能とやや異なるものの) ドキュメントに手順が書いてありました。
https://docs.github.com/ja/actions/using-github-hosted-runners/about-larger-runners/managing-larger-runners

# 課金の確認

課金に関しては以下のページで確認できます。
https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions#%E3%82%88%E3%82%8A%E5%A4%A7%E3%81%8D%E3%81%AA%E3%83%A9%E3%83%B3%E3%83%8A%E3%83%BC-larger-runner

実際の実行時間と Billing のページから請求金額にずれがないかを確認しましょう。Actions の Limit spending を　10 ドルとした場合に、Linux 4 コアを選択した場合に 600 分以上実行できます。とても安いので、悩んでいる時間や Standard GitHub-hosted runners で試行錯誤している時間があったら導入した方が良さそうです。

# 最後に

最後までお読みいただきありがとうございます。励みになるので、良かったらいいね 👍 をお願い致します。
【Typst】特定の種類のrefだけsupplementを変える

# 問題例
画像のすぐ下には"Figure 1"などと表示するが、それを文中で引用する場合は"Fig. 1"などと、別の表記のsupplementにしたい。

つぎのように、何も考えずにTypstを作ると
```
#set page(columns: 2, fill: red.lighten(99%))
#set heading(numbering: "1.")
#set table(align: left, stroke: none)
#show figure.where(kind:table):set figure.caption(position: top)

= My Diary <MyDiary>
#figure(image("Shukugawara.jpeg"),
  caption: [Shukugawara #emoji.flower.pink]
)<Shukugawara>

#figure(image("Owakidani.jpeg"),
  caption: [Owakidani #emoji.chicken.egg]
)<Owakudani>

#figure(table(
  columns: 3,
  table.hline(),
  table.header([Name],[Age],[Birth]),
  table.hline(),
  [Sawara],[19],[4/1],
  [Kajika],[14],[2/14],
  [Shinju],[10],[8/28],
  table.hline()
),
caption: "Characters of Sanbon-Ribbon") <SR>

#colbreak()

= Refs
- @MyDiary
- @Shukugawara
- @Owakudani
- @SR
```
`@Shukugawara`や`@Owakudani`などの、画像のrefを見てみると、supplementが"Figure "となっている。ここを"Fig. "としたい。
![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116310/34c85da4-a440-0ffb-3574-1313b110a56f.png)

# 解決策
次のコードを追加する。
```
#set ref(supplement: it=>{
  let body-func = it.body.func()
  if body-func == image{
    [Fig. ]
  }else{
    it.supplement
  }
})
```
[`ref.supplement`](https://typst.app/docs/reference/model/ref/#parameters-supplement)には関数を指定することができる。その関数は、参照対象にあるオブジェクトを受け取り、それに対するsupplementを返すことが期待されている。
そこで、参照対象の内容の関数を取り出し、それが`image`であった場合に"Fig. "を、それ以外は参照対象デフォルトのsupplementをそのまま返す関数を当てはめる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116310/3b71086e-bad9-5361-810f-e04eb375c59c.png)
文中の画像の参照のみ"Fig. "というsupplementになった。

# NG例
次のようなものを書いてしまうと・・・
```
#set ref(supplement: "Fig. ")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116310/66d889f9-eed7-fd10-7dc0-af0d642d43c1.png)
図以外の表や見出しのsupplementも書き換えられてしまうため、正しくない。
Goでテンプレート文書を使用して文書を作成する

会社名やメールアドレス等を一覧化しているExcelを読み込み、読み込んだ内容をもとにテンプレート文書に従ったメール本文を作成する、ということを行ったのでその方法をまとめます。

GoでExcelのデータを読み込む方法は先日別でまとめたので、[こちら](https://qiita.com/em1892/items/ae93a5f56b837391e775)をご参照ください。

https://qiita.com/em1892/items/ae93a5f56b837391e775

# Goでテンプレート文書を使用するには
公式パッケージである、[text/template](https://pkg.go.dev/text/template) を使用します。

# テンプレート文書の作成
まず、テンプレート文書を作成します。

今回、Excelの一覧にある宛先に、年末年始の休業期間のメールを作成するとします。
テンプレート文書は`.tmpl`の拡張子で保存します。

テンプレート文書内で、`{{.メンバ名}}`の形式で構造体のメンバーを指定することで、動的に値を挿入することが可能となります。

```plaintext:mail.tmpl
件名: 年末年始の休業期間に関するお知らせ

{{.CompanyName}}
{{.Name}} 様

いつもご利用いただきありがとうございます。弊社では、下記の期間を年末年始の休業期間としておりますので、ご了承ください。

休業期間: 2023年12月29日 から 2024年1月5日 まで

上記の期間中は、弊社業務を休業させていただきます。休業期間中にいただいたお問い合わせやご依頼につきましては、休業明けに順次対応させていただきますので、ご了承ください。

何かご不明点や緊急のご連絡がございましたら、下記の連絡先までお気軽にお問い合わせください。

[連絡先]
[会社名]
[電話番号]
[メールアドレス]

お客様にはご迷惑をおかけいたしますが、何卒ご理解とご協力を賜りますようお願い申し上げます。

来る新年が、皆さまにとって幸多き年でありますよう、心よりお祈り申し上げます。

敬具
```

# テンプレート文書の指定箇所に値を挿入する
`{{.CompanyName}}`や`{{.Name}}`に、Excelの一覧にある値を挿入します。
挿入したメール文章を`会社名.txt`のファイルにそれぞれ保存します。

```go:main.go
package main

import (
	"fmt"
	"text/template"
	"os"

	"github.com/xuri/excelize/v2"
)

type atesakiType struct {
	CompanyName string
	Name        string
	Mail        string
}

func main() {
	f, err := excelize.OpenFile("./excel/宛先.xlsx")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer func() {
		if err := f.Close(); err != nil {
			fmt.Println(err)
		}
	}()

	// リストが載っているシートすべての行を取得
	rows, err := f.GetRows("Sheet1")
	if err != nil {
		fmt.Println(err)
		return
	}

	// 構造体リストに格納
	var atesakiList []*atesakiType
	for index, row := range rows {
		// 1行目はヘッダーなので除外
		if index < 1 {
			continue
		}

		atesaki := &atesakiType{
			CompanyName: row[0],
			Name:        row[1],
			Mail:        row[2],
		}
		atesakiList = append(atesakiList, atesaki)
	}

    // mail.tmplのテンプレート文書を読み込む
    tmpl, err := template.ParseFiles("./template/mail.tmpl")
    if err != nil {
        fmt.Println(err)
    }
    
	for _, atesaki := range atesakiList {
        // 保存先のファイルを作成する
		fn, err := os.Create(atesaki.CompanyName + ".txt")
		if err != nil {
			fmt.Println(err)
		}
        defer fn.Close()
        
        // 値を挿入し、テンプレート文書からメール文章を作成・ファイル保存する
		if err = tmpl.Execute(fn, atesaki); err != nil {
			fmt.Println(err)
		}
	}
}
```

作成したファイルの一例が下記となります。
```txt:B株式会社.txt
件名: 年末年始の休業期間に関するお知らせ

B株式会社
山田花子 様

いつもご利用いただきありがとうございます。弊社では、下記の期間を年末年始の休業期間としておりますので、ご了承ください。

休業期間: 2023年12月29日 から 2024年1月5日 まで

上記の期間中は、弊社業務を休業させていただきます。休業期間中にいただいたお問い合わせやご依頼につきましては、休業明けに順次対応させていただきますので、ご了承ください。

何かご不明点や緊急のご連絡がございましたら、下記の連絡先までお気軽にお問い合わせください。

[連絡先]
[会社名]
[電話番号]
[メールアドレス]

お客様にはご迷惑をおかけいたしますが、何卒ご理解とご協力を賜りますようお願い申し上げます。

来る新年が、皆さまにとって幸多き年でありますよう、心よりお祈り申し上げます。

敬具
```

# おわりに
メール本文を一括で作成することができました！
今回はこの作成したメール本文をコピペで送信したんですが、メール送信まで一括で行うプログラムも作成したいと思っています。
また実装できたらまとめていきますので、そのときはよろしくお願いします！

# 参考
* [text/template](https://pkg.go.dev/text/template) 
* [Go text/template で文字列作成](https://qiita.com/hiro_nico/items/61a5ae7138c6918bc6b5)
* [【Golang】ファイル作成→書き込み→読み込み、の一連の流れ](https://qiita.com/c6tower/items/e7a3c06f3a105cc233c9)
OpsRamp Synthetic - 外形監視の設定方法

本記事では、OpsRampで外形監視の設定方法について説明します。

# 概要
OpsRampでは、Syntheticと呼ばれる外側からシステムを監視する機能があります。
下記のプロトコルに対応しています。
![synthetic_monitors.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/b388296d-47ae-69f3-bc6a-7b45b3450949.png)

# 設定方法
Syntheticは、Infrastracture > Resources > Synthetics の右上 ADD から設定することが可能です。
監視したいプロトコルを指定します。
![synthetic_monitors.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/b388296d-47ae-69f3-bc6a-7b45b3450949.png)

設定項目に合わせて監視対象のシステムの情報を入力します。
「Locations」では、どこから監視するかを設定します。
OpsRamp社は監視拠点として、シンガポール、東京、アトランタ、ロンドンを提供しています。
デプロイしたOpsRamp Gatewayも監視拠点することができます。
![add_synthetic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/eeeb59e8-4eb7-5de3-4073-148373926921.png)

作成したSyntheticリソースの Monitors の Templates から監視テンプレートを割り当てることができます。
![add_template1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/5a082040-9e1e-dae7-3462-17949f64520b.png)
![add_template2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/28ef4804-28da-3a04-cf36-31cc3727a64f.png)

Monitors の Monitors から個々のモニタを参照できます。
モニタの鉛筆マークからアラート設定します。
![modify_monitor1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/8b53afb5-0a33-d76a-4c9f-ffa2f80f819b.png)
![modify_monitor2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/00ca9784-75d2-45a4-34f4-4fe0bc987d73.png)


---------------------------------------
[<img width = 250 height = 200 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/111de30a-4d33-aa33-5c7d-83d9015093e6.png">](https://www.vistanet.jp/knowledge-base/)
オフライン環境にJupyter環境を楽々構築

# はじめに
個人的にオフライン環境へJupyterを使える環境を作る機会があったので、備忘録的に手順を記しておきます。

## ステップ
以下の2ステップに分かれております。
1. オンラインにつながるPCでの作業
1. オフラインの本環境での作業

## 環境
今回はWindowsを想定しています。
手順はMacなどでもできると思いますので、細かいソフトウェアなどは読み替えてください。

# オンラインのPCでの作業

まず今回の想定として、何かしらの記憶メディアにインストーラーなどのファイルを用意し、オフライン環境で実行していく形にします。

## JupyterLab Desktopのダウンロード
いかのURLからJupyterLab Desktopをダウンロードします。

https://github.com/jupyterlab/jupyterlab-desktop?tab=readme-ov-file

## 入れたいライブラリを用意する

まず、venvかcondaなどで仮想環境を作ります。
（JupyterLab DesktopにバンドルされているPythonバージョンと同じにしましょう。これの執筆時点では3.12.2です。）

```:環境構築コマンド
conda create -n py312 python=3.12.2
python3.12.2 -m venv py312
```

これらの環境をActivateした状態でwhlファイルを用意します。
まず、`requirements.txt`を作成し、ここに使いたいライブラリを書いていきます。

```text:requirements.txt
lightgbm
xgboost
japanize_matplotlib

...など
```

これがあるディレクトリへActivateしたターミナルで移動します。
そこで以下のコマンドを使ってダウンロードします。
```python:whlをダウンロード
pip download -d ./packages -r requirements.txt
```

(参考サイト：https://densan-hoshigumi.com/develop/python-pip-offline-install)

これでオンラインでの作業は終了です。
USBなどの中身が
- packages
- requirements.txt
- JupyterLab Desktopのインストーラー

が入っていればOKです。

# オフラインのPCでの作業

## JupyterLab Desktopをインストール

インストーラーを実行してインストールしましょう。

## バンドルされたPythonをインストール

起動画面の下にPythonをインストールするボタンができていますので、これをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456646/1e5c1967-238f-e64f-0126-9b7a8bc7ef01.png)

インストール後、適当にノートブックを開き、以下のコードを入力し、実行する。
```python
import sys
print(sys.executable) 
```

この結果で`…/jlab_server/python.exe`のようなパスが出てくればOK。

## ライブラリをインストール

JupyterLab Desktopのターミナルを開きます。

`requirements.txt`があるディレクトリに移動して以下のコマンドを実行します。
```python
pip install --no-index --find-links=./packages -r requirements.txt
```

ここでエラーが起きた場合、オンライン環境でも同じコマンドを試し見る。
エラーが発生したらオンラインの方で対処してみて、その対処法をこちらでも試せば解決します。

# おわり
異常がオフラインへJupyter環境を整える部分になります。
ライブラリのインストールはpipを使えば一括で行えますが、pypiから一つずつ入れることも可能です。
【Kotlin】OpenAPI Generatorでjavax.annotation.Generatedを生成しない or jakarta.annotation.Generatedに置換【Java】

この記事は同僚の発見した知見を代理でまとめたものです。

https://qiita.com/organizations/justincase

# 文脈
`OpenAPI Generator`で生成されるファイルに含まれる`javax.annotation.Generated`アノテーションのせいで`Java 17`移行時にコンパイルエラーが発生しました。
この問題は最新バージョンでは恐らく解決されていますが、自分たちのチームでは独自パッチを当てたバージョンを運用している関係で、バージョンアップでの解決はできませんでした。

そこで、なんとかバージョンを変えないままで、`javax.annotation.Generated`を生成しない、または`jakarta.annotation.Generated`に置換することを試みました。

自分たちのチームでは`spring-kotlin`のジェネレータを使っていますが、やり方的に言語を問わず応用可能と思われます。  
また、後述するテンプレートのファイル名が同じだったので、`Java`に対してはそのまま適用可能だと思っています（確認はしていません）。

# やり方
`OpenAPI Generator`は、`mustache`のテンプレートを置換する形で生成を行います。  
このテンプレートは、`-t`オプションを使って上書きできます。

https://openapi-generator.tech/docs/usage/#generate

つまり、`javax.annotation.Generated`アノテーションを生成している`mustache`テンプレートを上書きすれば、`javax.annotation.Generated`を生成しない、または`jakarta.annotation.Generated`に置換することができます。

## 実際に上書きする
`javax.annotation.Generated`の生成に関わっているのは`generatedAnnotation.mustache`という名前のファイルです。

https://github.com/OpenAPITools/openapi-generator/commit/7dad57c8b62818a7f3fb9f53718b7e92c1d339c0#diff-e554f4e151dfce06c86dc85c48913c8b2d9c48bfd9dd9f9ac601074647804f4a

同名のファイルを任意のディレクトリに配置し、`-t ${配置先ディレクトリ}`と指定することで、上書きできます。
例えば`templates`という名前のディレクトリに配置した場合、以下のように指定することになります。

```bash:templatesという名前のディレクトリに配置した場合の生成コマンド例
java -jar ${openapi-generator-cliのjarへのパス} generate ${その他オプション} -t templates
```

以下、上書きに使うテンプレートの例を紹介します。

### `jakarta.annotation.Generated`に置換する例
以下は生成結果を`jakarta.annotation.Generated`に変更する例です。
前述したファイルからアノテーション名を変えただけです。

```mustache:templates/generatedAnnotation.mustache
@jakarta.annotation.Generated(value = ["{{generatorClass}}"]{{^hideGenerationTimestamp}}, date = "{{generatedDate}}"{{/hideGenerationTimestamp}})
```

### 生成させない例
以下は`Generated`アノテーションを生成させない例です。
実際には空文字列で生成できますが、挙動を誤解させないようコメントを入れておくと親切かなと思います。

```mustache:templates/generatedAnnotation.mustache
{{! javaxのGeneratedアノテーション生成を抑制するためのテンプレート、空文字列であることに意味があるため消さないこと }}
```
Flutter 3.19.5 にアップグレードした際に出力したエラーに対応したことまとめ


１．android/build.gradleなどの修正
下記サイトに記載されている内容を対応
https://flutter.salon/error_warning/flutter-3-19-with-android/

２．Android Studio の更新
Android Studio を最新版に更新

3.ライブラリのバージョンをすべて更新
pubspec.yaml に記載しているライブラリのバージョンをすべて更新

3.Kotlin を最新版に更新
このサイトで最新版を確認し、build.gradle に記載されているなどにて値を更新する
https://kotlinlang.org/docs/releases.html#release-details

4.Firebase.initializeAppの記載を修正
iOS だと問題なくアプリは開けたが、Android でアプリを開くと真っ黒の画面になった。
確認をすると、下記 main()に記載をしている「options: DefaultFirebaseOptions.currentPlatform」が記載していなかったため、Andorid ではアプリが開かなかったぽい。

```dart
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform, //追加
  );
```

下記公式サイトを参考に firebase CLI などのインストールを実施し firebase_options.dart を作成して対応し、再度ビルドをしたところ Android でも問題なく動作した
https://firebase.google.com/docs/flutter/setup?hl=ja&platform=ios
【Apache JMeter】ファイルをBase64エンコードしてリクエストに含める方法

Apach JMeterによる負荷テストでファイルアップロード機能のテストを実施することになった。

実装したファイルアップロード機能はアップロードするファイルをBase64エンコードをしてJSON形式のリクエストに含めて送信する仕組みだったため、JMeter内でもBase64エンコードしたアップロードファイルを指定する必要がある。

当初、先にエンコードした結果をHTTPリクエストのBody Dataに直接貼り付けておこうと思ったが、貼り付けたり、Body Dataを確認する際にJMeterのGUIクライアントがフリーズしてしまうことがあったため、他の方法を考えることにした。

今回はその一つ対処方法として、JMeter内で指定したファイルをBase64エンコードしてJMeterの変数として扱う方法について解説する。

# 先にまとめ
「JSR223 PreProcessor」でBase64エンコードする処理を実装することで実現できる。

# 実装内容
スレッドグループ内のファイルアップロードを実施するHTTPリクエストの前に前処理>JSR223 PreProcessorを追加する。
追加すると、設定が開かれるのでまずは適切な名前をつけておく。

![スクリーンショット 2024-04-10 22.31.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/39365b1c-ccbc-d602-d79a-14bf1d6edd2e.png)

Scriptの部分にBase64エンコードをするための処理を記述する
```java
import org.apache.commons.io.IOUtils
import java.nio.file.Files
import java.nio.file.Paths
import java.util.Base64

// JMeter変数からファイルパスを取得
String filePath = vars.get("filePath")

// ファイルを読み込み、Base64エンコード
byte[] fileContent = Files.readAllBytes(Paths.get(filePath))
String encodedString = Base64.getEncoder().encodeToString(fileContent)

// エンコードされたデータを変数に保存
vars.put("encodedFile", encodedString)
```
今回はfilePathという変数にbase64エンコードするファイルのパスが定義されているので、まずはそれを取り出し、読み込み、エンコードして、encodedFileという変数に結果を格納している

あとはHTTPリクエスト上で${encodedFile}とすればエンコード結果を取り出せる
![スクリーンショット 2024-04-10 22.35.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476743/20070f8e-e8de-39d0-dbfd-e79dbbdd2ed7.png)
新卒エンジニアが学んだこと

# まず
- 会社の基本目標は利益を上げること
    - **利益＝売上-コスト**

# 心構え
- ちゃんと準備して、ちゃんとやりきって、反省する
- 失敗した後は、リカバリーに徹する
    - 問題なのは失敗することではなく、隠したり引きずったり同じ失敗を繰り返したりすること
# ひよこの勝ち方
- 正直にかつ素直に受け止め、発言する
- クイックレスポンス
- 約束を守る
- とにかくタスクを終わらせる、ボールを持たない状況をつくる
- 積極的に手伝いにいく

# 目標の立て方
1. 目的（なりたい姿、求める姿）を設定する
1. その姿の特徴を上げる
1. その姿の特徴はどういうものかを細分化する
1. 十分に細分化した後、どのような（どのように）業務を行うことで細分化後の状態になっていられるかを考える
1. どのような（どのように）業務を行うかを目標とする

# コミュニケーション
- **武器にする**
    - 相手の期待値をコントロールする
    - 信頼を得る
- **正直になる**
    - わからないことはわからないと素直になる
    - どこまでわかったのか、どの点がわからないのか分ける
- **人に聞くタイミング**
    - 聞く相手による
    - 基本はわからないことがあればすぐにと言われているが、袋小路になりがち
    - 一案としては、調べてわかることは調べるが、調べても出てこないような情報(社内のルール、Aに決めた背景)などはすぐに聞く
- **話しかける時**
    - 構造化して話す
        - 報告、相談、確認、依頼のどれかを明示する
        - これから何を話すか、枕詞を添える
            - 例: 今の状況としては~
            - 例: 結論としては~
            - 例: 依頼したいことは~
- **オンラインmtg**
    - 誰かに話しかける時
        - xxさん向けです。yyについて{相談|依頼|確認|報告}です。~
- **ファシリテーション**
    - やること
        1. 前提を共有
        1. 目的/着地点を決める
        1. 話を引き出す
        1. 理解する
        1. 整理する
            - 論点
            - 意見
            - 背景、価値観
        1. 話を導く
- **発散と収束**
    - 意見を出させて漏れをなくす(発散)
    - 実行できるように形を整える(収束)

# 判断
- 基本的に初めてやる作業については、確認を取る
- もともとの指示書にない項目や、考慮されていなかった事項がある場合も確認を取る
- 顧客の環境おけるものは、細かく確認を取る。
- 焦らない。焦ったところで変わらない。
- 図式化/公式化できない場合、何かわからない箇所がある。

# 情報共有
- とにかく文書に残す
- 正しく過不足のない簡潔なドキュメント>正しく不足のないドキュメント>正しいが不足のあるドキュメント>ドキュメントがない>誤った、もしくは古いドキュメント

# 技術
- 調査、仮説、検証、結果確認を繰り返す
- **成長の種類**
    - 仮説の精度を高める
        - 元々の知識量
            - 認知したパターンを増やす
            - 体系的に理解する
            - ツールの制限を知る
        - 調査の量
    - 検証ができる
    - 正しく結果を認識できる
- とにかく公式ドキュメントをちゃんと読む
    - 特にクイックスタート系の記事には目を通す
- エラーで困った時は、エラー内容をちゃんと読み込む
    - そもそもシステムから吐かれた情報には目を通す
    - エラー原因は大抵タイポ
    - エラー対応手順
        1. エラー内容を読む
        1. タイポ確認
        1. 処理順確認
        1. Chat GPTで確認
        1. Chromeで検索してみる
        1. 公式ドキュメントを読む
        1. スペック確認
        1. 元のコードを確認する（ここで初めて、人のせいにする。そして改善点を示すことで貢献。）

# 作業
- 作業終了予定の見積もり
    - 終わると思った日+3日くらいの余裕を持つ
    - 予定通り終わらないと思ったら、すぐに報告して相談
    - 作業を細分化する
        - 細分化することで、どこに時間がかかりそうか、どの作業に誰の作業が必要になりそうかを先に把握できる
- 着手前に確認すること
    - 理想は何か
    - いつまでに終えるか
    - 何をやるのか
    - 作業自体いるのか、他の手段はないのか
- 作業を早く終わらせる必要がある？
    - ない
    - 以下のプロセスを繰り返していくことで結果早くなる
        1. ちゃんとタスクをこなす
        1. どのように行動したか記録する
        1. たまに振り返って反省する

# 社内ルール
- 何をやるにも基本的なルールがある
- 初めてやるとこは基本的に聞く
    - 理由1: 間違う可能性が高く、迷惑をかけることになるため
    - 理由2: 共犯者を作るため
- コード
    - コメント
        - 本来やりたいことを残す
        - 本来こうしたいができなかった場合、なぜできないのか、何を試したのかメモ的に簡潔に残す
- ツール
    - Chrome
        - Bookmark
            - 左側によく使うものをアイコンのみの表示にして寄せる
            - 残りにファイルとしてまとめる
    - ファイル管理
        - コード関係は以下のようにして管理
            - 新しいもの: 「Project/{Project Name}/repo/{Project Name}」
            - 古いもの: 「Project/{Project Name}/old/{Project Name}」
AWS Developer Associate(DVA)受験記

## はじめに
AWS Developer Associate合格したので、今後受ける人のために記録を残します。
https://aws.amazon.com/jp/certification/certified-developer-associate/

ちなみに自分の点数は 799/1000 でした。(720点から合格)

![スクリーンショット 2024-04-10 21.35.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1654164/14122382-b06f-176c-65cc-9eecc9cba2ae.png)




## 失敗談
Cloud Practitionerが勉強期間2週間くらいで受かったので、1つ上の資格なら楽勝と思っていました。その結果、1回目は勉強期間１ヶ月で受けて撃沈しました。Associateから難易度の格が違い、体感として、Cloud Practitionerの5倍くらい難しかったです。仕事も忙しく、半年くらい合間合間に勉強し、2回目でようやく合格しました。

## やったこと2つ
①[アソシエイト教科書＆問題集](https://www.amazon.co.jp/gp/product/B0CRYSJ58X/ref=ppx_yo_dt_b_d_asin_title_351_o08?ie=UTF8&psc=1) を読破、理解しました。
AWS各機能の内容が詳細かつ分かりやすく記述されていて、とても重宝しました。練習問題は本番以上の難易度で、実力がかなり向上しました。


②[CloudTech](https://kws-cloud-tech.com/) で各機能の説明動画を見てから、想定問題を解きました。
掲載されている動画では文章のみでは理解しにくい概念を丁寧に説明されてます。アソシエイト教科書＆問題集だけでも十分合格するレベルに達すると思いますが、こちらも受講すれば、安心できると思います。特に想定問題は非常に精度が高く、本番で似たような問題が多々出ました。


## 終わりに
難しい試験ではありましたが、インフラの基礎知識がないと取れない資格なので、いい勉強になりました。会社内でもAssociateまで取得していれば、大体の仕事は振れると評価していただけました。
【画像あり】「data」「date」「deta(il)」、スペルミス

# data,　date,　deta(il)の違い
data （データ）・・・データ
date （デート）・・・日付
detail （ディティール）・・・詳細

※それぞれaとeのスペルに気をつけてください。

# スペルミスを教えてくれる
気をつけていてもスペルミスをしてしまうとエラーが出てしまいます。
そんな時に便利なのが、スペルミスを教えてくれる機能
単語の下に赤い線で教えてくれます。

# 設定方法
Edit → Format → Spelling and Grammar → Check Spelling While Typingにチェックを入れる


![スクリーンショット 2024-04-10 22.21.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760972/a3159d1b-2511-edb7-4038-134eea180525.png)
Seleniumで待つ

以下で指定すると、期待した待ちをした
visibility_of_element_locatedを使うこと
```python
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.XPATH, xpath))
)
```
if null(??) と 三項演算子（ternary operator, ?:）を併用したときエラーが出た件

## 問題
?? と ?:を併用したときに、
conditions must have a static type of bool
というエラーが出てしまう
例えば、

```ruby:sample.dart

 int? nullOrInt() {
     return 0;
 }

void main() {
final a = nullOrInt();
 print(a ?? 0 > 10 ? 'isTrue' : 'isFalse');
}
 
```

エラー表示である赤線の範囲から、staticではない、ということなのか……？　と思いつつ

## 解決

a ?? 0の式に対して()でくくる

```ruby:sample.dart

 int? nullOrInt() {
     return 0;
 }

void main() {
final a = nullOrInt();
 print((a ?? 0) > 10 ? 'isTrue' : 'isFalse');
}
 
```

原因はどうやら式のなかの評価の順序が意図していないものになっていたらしく、
具体的には > が先に評価されることで
```
    a ?? false ? 'isTrue' : 'isFalse'
```
と認識されてしまい、三項演算子の評価にboolではないint aがそのまま乗ってしまっていたということでした

insideで変な使用があるとかではなかった様……お恥ずかしい

最初は即時関数 (){}() とか使用していましたが、普通に () 使えばいいや、と気づきました

参考になれば幸いです
AWSって何？～AWS100本ノック～ 2/100

## はじめに


まずは、AWSについて説明しないと話が始まらないと思うので、本記事ではAWSについて大まかに説明していきます。

# AWSとは？

現在、多くの企業で利用されているAWS(Amazon Web Services)は、Amazonが提供するクラウドサービス[^1]です。
2006年からサービス開始したAWSは、Azureなど他のクラウドサービスと比べると歴史も長く、200を超えるサービスと頻繁なアップデートにより、ITの素早い成長を支えています。

:::note info
図を見てわかる通りMicrosoft Azureがシェアを伸ばしている一方、やや減少傾向にありますが今もなお世界一位のシェアを誇ります。今後の新しいAWSサービスでシェア拡大に期待ですね:blush:
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87924/1761d546-79f2-12a8-7d66-a1c03697b491.png)


# AWSをなぜ利用するのか

さて、シェアが世界一位なのはわかりましたが、多くの企業がAWSを何故利用するのかを説明していきたいと思います。

### クラウドサービスとオンプレミスの違い

まず、なぜそもそもクラウドサービスを利用する必要があるのでしょうか？
それを知るためにはオンプレミス[^2]と比較する必要があり、それぞれ以下の特徴があります。

| 比較対象 | オンプレミス | クラウドサービス |
| ---- | ---- | ---- |
| 初期費用 | **高価**<br>必要な機材の調達や設定を自社で行うため、その分お金も時間もかかります。特に遠隔地だと大変... | **安価**<br>必要な機材の調達や設定はクラウドベンダーが行います。なので、設定を行うだけですぐに利用可能です。
| 運用コスト | **高価**<br>メンテナンスや機器の追加購入などを自社で行います。 | **安価**<br>機器に関わる作業はクラウドベンダーが行います。またサービスによってはパッチ適用などもクラウドベンダーがやってくれます。|
| キャパシティ予測 | **必要**<br>サーバの増強などを後から行うことは大変なのである程度余裕を持った構築を行います。そのため、コスト的に無駄が発生しやすいです。 | **不要**<br> 負荷などに応じて自動的に増強されるようにする作業を設定で簡単に行えるため、ミニマムでスタート出来ます。そのため、無駄が発生しにくいです。|
| セキュリティ | **高い**<br>インターネットを介さないような社内システムであったり、非常に高いセキュリティが求められる場合には適しています。 | **高い(オンプレミスよりは低い)**<br>インターネットを介してアクセスするのでセキュリティリスクはあります。しかし、クラウドサービスが提供しているベストプラクティスに沿った構築や運用をしっかり行えば充分なセキュリティは担保できます。|
| カスタマイズ性 | **高い**<br>自社で全て行う分、様々なソフトウェアなどを組み合わせて企業独自のシステムを構築することが出来ます。 |  **オンプレミスよりは低いが、高い**<br>クラウドベンダーが提供しているサービスしか使えないため、オンプレミスより自由度は落ちます。しかし、アップデートも頻繁に行われるのでほとんどのケースに対応出来ると思います。 |
| 障害対策 | **困難**<br>停電や広域災害時に備えた対応など多くの対応が必要になります。 | **容易**<br>機器の障害対策はクラウドベンダーが行います。災害時の他国へのバックアップも設定のみで可能です。 |


### AWSを利用しよう

上記の特徴を踏まえて、企業で厳重にデータなどを管理しなければいけないような社内システム以外であれば、クラウドサービスを利用したほうが良さそうですね！

これらのクラウドサービスのメリットに加えて、以下の点などが理由でAWSを利用する企業が多いと感じています。
- 新しいサービスの提供と、頻繁に行われるアップデートによる**時代に合ったサービスの構築**がしやすい
- シェア1位であることによる**信頼性**
- Qiitaなどで知見が多く公開されていることによる**開発のしやすさ**
- AWS公式サイトやサポートセンターやAWSパートナー企業など、**サポート体制が充実**


:::note info
他にも年に1回行われるAWSサミットなど、多くのイベントも開催されています。
今年は6/20, 6/21に行われるようなのでご興味がある方は是非どうぞ:open_hands:
※去年のAWSサミットの様子は[こちら](https://qiita.com/namasa/items/81f031aa90f39c48a66f)で記事にしています。
:::


# おわりに

AWS、および、クラウドサービスの簡単な概要について説明しました。
次は実際にAWSを勉強・導入するにあたって必要な知識となる**AWS Well-Architected FrameWork**、**AWS CAF**、**責任共有モデル**についてアウトプットしていきます。


[^1]:クラウドベンダーが用意したリソースをネットワーク越しに利用
[^2]:システムの稼働やインフラの構築に必要となるサーバーやネットワーク機器などを自社で保有し運用
【画像あり】Xcode シュミレータのキーボードを表示させる方法

# 手順
①シュミレータを開いた状態で、メニューバーの「|/０」を押す

![スクリーンショット 2024-04-10 21.49.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760972/e0f9fd71-27a7-86fb-9f46-e59cd1c4f8f4.png)　

②keyboard→Connect Hardware Kyeboardのチェックを外す

![スクリーンショット 2024-04-10 21.50.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760972/4b6556ba-b5ab-a509-7a11-504e45e45c85.png)

※反映されない場合は、チェックを何度も入れたり外したりしてみてください。
入力チェック【Vue】

Vueの入力チェックの仕方を考える
入力チェックだけするコンポーネントと
入力結果を取得するだけのコンポーネントがあることとする

# 前提条件

https://codesandbox.io/p/devbox/delicate-cloud-jtct29

上記のようなコンポーネントに入力チェックする方法を考える

## Vueの機能

https://ja.vuejs.org/guide/components/props#prop-validation

上記のような機能もあるが、あんまり使い勝手がよくなかった

## io-ts

https://gcanti.github.io/io-ts/
上記で入力チェックができる

### 単純な値のチェック

https://codesandbox.io/p/devbox/20240408-02-io-ts-q4gllz
   
### 複数の値のチェック

https://codesandbox.io/p/devbox/20240410-io-ts-3njpzr


## 参考
https://github.com/gcanti/io-ts/issues/578
JVM - 全体構造

Java Virtual Machine (JVM) は、Javaプログラムを実行するための基盤です。この記事では、JVMの全体構造とその主要なコンポーネントについて解説します。

## JVMの概要

JVMは、Javaアプリケーションが任意の物理デバイス上で同じように動作することを保証するVMです。具体的には、Javaのコードを実行するための環境を提供し、Javaバイトコードを機械語に変換して、ホストマシン上で実行します。JVMは以下の主要な機能を持っています：

* ロード: クラスローダーを使用してJavaクラスファイルをメモリにロードします。
* 検証: バイトコードが正しい形式を持ち、安全に実行できることを確認します。
* 実行: インタープリターまたはJITコンパイラを使用してバイトコードを実行します。
* GC(ガーベージコレクション): 不要になったオブジェクトを自動的に削除し、メモリを管理します。

## JVMの全体構造

![jvm_architecture_hotspot.drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260307/fae1049f-d6f6-5e8f-b926-58dbb1155ef0.png)

JVMは主に以下のコンポーネントから構成されています：

* クラスローダーサブシステム(Class Loader Subsystem): Javaクラスをロードし、リンクし、初期化する役割を果たします。起動クラスローダー、拡張クラスローダー、アプリケーションクラスローダーが含まれます。
* ランタイムデータエリア(Runtime Data Area): プログラムの実行に必要なデータを保持します。メソッド領域、ヒープ、Javaスタック、プログラムカウンター(PC)レジスタ、およびネイティブメソッドスタックが含まれます。
* 実行エンジン(Execution Engine): バイトコードを実行するためのコアコンポーネントであり、インタープリター、JITコンパイラ、ガーベージコレクターなどが含まれます。
* JNI(Native Method Interface): Javaアプリケーションがホストマシンのネイティブライブラリと通信するためのインターフェースです。
* ネイティブメソッドライブラリ(Native Method Library): JVMが使用するネイティブライブラリの集合です。

### クラスローダーサブシステム

クラスローダーサブシステムは、Javaアプリケーションが必要とするクラスやインターフェースを動的にロードし、リンクすることで、Javaの動的な特性をサポートします。クラスは、使用時に初めてメモリにロードされます。

### ランタイムデータエリア

* メソッド領域: クラスレベルの情報（クラス名、親クラス名、メソッド、クラス変数など）を格納します。
* ヒープ: Javaアプリケーションで生成されるすべてのクラスインスタンスと配列が格納されます。
* Javaスタック: Javaスレッドごとに作成され、Javaメソッドのローカル変数などを格納します。
* PCレジスタ: 現在実行中のJavaバイトコードのアドレスを保持します。詳しくは[JVM - PCレジスタ](https://qiita.com/fastso/items/8eeed6cfd1f04c49332c)ご参考ください。
* ネイティブメソッドスタック: ネイティブメソッド（C言語などの他の言語で書かれたメソッド）の呼び出しに使用されます。

### 実行エンジン

バイトコードは、インタープリターによって直接実行されるか、より高速な実行のためにJITコンパイラによってネイティブコードにコンパイルされます。ガーベージコレクターは、不要になったオブジェクトを自動的に削除し、メモリ管理を最適化します。

### JNI

詳しくは[JVM - Native Method Interface (JNI)](https://qiita.com/fastso/items/3a613f87341af3abd77e)をご参考ください。

## 最後に
JVMは、Javaアプリケーションが異なる環境で一貫して動作することを保証するための複雑なシステムです。JVMの構造を理解することは、Java開発者にとって、アプリケーションのパフォーマンスを最適化し、効率的なメモリ管理を行う上で不可欠です。

## 参考情報

* [Java Language and Virtual Machine Specifications](https://docs.oracle.com/javase/specs/index.html)
AWS無料枠を活用するなら必須のアラート設定のやりかた。

## AWSでのアラート（コスト）設定のやりかた。
AWSの無料枠を使って学習する人などに向けて、枠を超えて利用しないようにアラートの設定方法を記載します。
初投稿なのでお手柔らかにお願いします。
※画像の倍率低いので見づらいかもしれないです。


1. まずはサービス欄に「Budgets」と入力し、選択する
![qiita投稿用 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502858/d51c5201-3927-167d-2aae-f517006ec4f0.png)

2. 左側のタブの予算を選択し、オレンジ色の予算を作成をクリックする
![qiita投稿用 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502858/4519a50f-9cb5-f43a-33e5-6022b0ea2782.png)


3. 予算の設定をテンプレかカスタムで選べるのでどちらかを選択します
今回は「カスタム」を選択します、予算タイプは「コスト予算」を選択
![qiita投稿用 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502858/d2164dbb-7944-4f0d-a775-d2c0db626334.png)


4. 続いてこんな画面に遷移します
![qiita投稿用 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502858/3ad6059e-02f1-5bab-43aa-76e3ad8c9e78.png)


5. 予算の名前、期間、更新タイプ、開始月、予算額などを設定します
![qiita投稿用 (7)_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502858/a16b1bce-c617-b896-c1a0-97adf30add18.png)

6. 続いて適用する範囲を選択します。特定のサービスで限定しないならすべてのサービスを選択
![qiita投稿用 (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502858/81696cc4-c026-f431-9201-7ea524d88b75.png)
7. 次にしきい値とメールアドレスの設定、設定額の80％を超えたら登録したアドレス宛にメールが来る
![qiita投稿用 (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502858/7b09bdd6-06bd-ba04-06ea-301c9594102c.png)

最後に確認を押して設定は完了。


### おまけ予算レポート(使用した金額の詳細)の設定方法について
1. 左側のタブから「予算レポート」を選択し「レポートを作成する」を選択 
![qiita投稿用 (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502858/db530c88-1ba2-f39a-13ed-fe0e86a776ad.png)

2. レポートの名前を設定し、先ほど設定した予算を選択(スペルミスは気にしない)
![qiita投稿用 (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502858/a37f8ef2-094d-d8b0-4716-434f209d7c27.png)
3.作成後に、レポート欄に表示されたらOK
![qiita投稿用 (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502858/8caf8307-5f50-95fa-25b8-fb47aafab1e4.png)

##### ※ほかにもAmazon SNSというサービスがあります。インスタンスなどに異常が生じた際などに設定したアドレスにメッセージを送る機能です。それについてもまた記事にしたいと思います。
Salesforce Platform デベロッパー 備忘録 #@[LWC]デコレーター

下記のような設問があった.

### Salesforce Lightning Web Component(LWC)で親コンポーネントから子コンポーネントへのデータの伝達に最も最適な方法を選択せよ.

A. Applicationイベントを使用して、データを子コンポーネントに伝達します。
B. Componentイベントを使用して、データを子コンポーネントに伝達します。
C. @apiデコレータを使用して、子コンポーネントの公開プロパティを通じてデータを渡します。
D. Auraメソッドを使用して、子コンポーネントのメソッドを呼び出し、データを渡します。

#### 解答: C

LWCにおいて親コンポーネントから子コンポーネントへデータを伝達する一般的で効果的な方法は@apiデコレータを使用して子コンポーネントの公開プロパティを介して行うことであるから, Cが解答になる.

LWC(Lightning Web Component)とは, HTML/CSS, Jsを使用してSalesforce上で使用できるアプリケーションを開発するための手法のこと.

LWCにはデコレーターってものがあって, それらを活用すると親子関係にあるコンポーネント間でのイベント伝達や値の受け渡しなどが可能になるそうな.(https://sodech.hatenablog.com/entry/2023/05/30/093350)

デコレータは変数の前に記述し, 主要なものには[@api @track @wire]がある.

@apiデコレータは, コンポーネントの公開プロパティや公開メソッドを定義するために使用されるもので, 特に親コンポーネントからアクセスできるようになる. @apiでマークされた変数は公開APIの一部とみなされ, 他のコンポーネントから値を渡したり特定のメソッドを呼び出すことを可能にする.

@trackデコレータは, プロパティ内部の状態の変更を検出するために必要になる場合がある.

@wireデコレータは, レコードへのアクセスやApexクラスの処理を呼び出す時に使用する. ちなみに@wireを使わなくてもApexクラスのメソッドは呼び出すことができる.
生成AIで僕らのプログラミング勉強はどうなるのか？（２）

# 生成AIによって得るものと失うもの

## 生成AIによって得るもの
色々あると思いますが、僕が初学者の立場で考えると、この 2 つはかなりのメリットになるかと思います。

### 効率的な学び
英語が読めない僕でも、論文を読んだりできて、効率的にインプットが進んでいます。
また、サーベイなどもしてくれるので、ChatGPT 先生さすが...という部分は感じます。

Claud3 もだいぶいい感じにコードを返してくれるので、両方課金してますが
今月の請求額が気になるところです。

効率をお金で買ってますから....w

### 時間の短縮
ちょっと自動化させたい処理、急いでコードを実装しなければならないとき、ふとした瞬間にど忘れした際、グーグル先生よりも頼りになります。

〇〇の処理、書けなくはないんだけどググらないと忘れたな？を、生成AIに依頼するといい感じに書いてくれるので頼りになります。
ファイルの一括処理など、頼もしいです。
それ関連の仕事が来たときに、生成AIでコード実装させて、ローカルで py ファイルを実行するなどしています。

〇〇を頭の中でしっかりイメージできていると、数回プロンプトを修正したり、コードをちょっと手動で変更したりで、すぐに使えるものになるので、嬉しいですね。

### 人に聞きづらいことをわかるまで教えてくれる
3 回で覚えないとだめだからね、みたいな人間とは違う思想（？）を持つ生成AIなので、わかるまで教えてくれる部分が嬉しいです。
ブログの「ここの意味、わからないから解説してもらおう」や、返ってきた返答から、さらに追加質問できるので人に迷惑かけなくても学べる感じはいいですね。まさに個人塾の先生みたいです。

ハルシネーションがちょっと怖いですけどね。
たまに鵜呑みにしかけて、グーグル先生を呼びます。

## 使い方によっては失われるもの
これは本当に使い方を誤った場合、失われるものを挙げてみました。

### 考える能力
プロンプト練習をやっているとうまくなるものですが、これが悪さをして、何でも生成AIになげてしまったりするんですね。
脳みそは常にサボろうとする癖があるらしいと、「考える系の参考書」で読みました。
プロンプトに慣れてしまえば、たいてい思いつくことは生成AIがやってくれるので、脳がサボりがちになるのも納得です。
なんとなくプロンプトで生成AIに頼って、わからなくなったとき、あなたはグーグル先生に頼れますか？
web や書籍でわからないことを解決する能力はまだ生きていますか？

古い言葉かもしれませんが、「ググり力」がある人ほど、伸びると信じています。情報を自ら探しに行こうとする能力ですね。書籍でも問題なしです。どんなワードで欲しい情報を web で探せるか？は、今も大事な能力ではないでしょうか？

生成AIに聞いたんだけどわからない、だけ質問しに来る後輩がいたら「どんなプロンプトを書いたのですか？グーグル先生には聞きましたか？」なんて意地悪するかもです。
本当にしっかり強く育ってほしいですからね。
安心してください。僕には後輩、いませんでした。

くれぐれも生成AIしか使わない人間にならないでくださいね。

### 進捗がわかりづらい、個性がみえづらい

いろんなコードを見る機会があるのですが、コードにも個性があるのに最近気づきました。
特に「こんなコード、どこで学んできたんだ！こんな高度な処理を書かせて.....おや、これ生成AIぽいな？」を感じることが多くなりました。

別にコードに個性がないのはいいのです。正しく動くことが大切なので、いいのです。

しかし、プログラミング勉強中の方は気をつけましょうね。
生成AIのコード、よく見ると言語特有の書き方を無視して実装しているものもあります。
お作法がなっていないコードをたまに生成するみたいです。
変数名とかみるとかなりわかります。

また、自分が理解していないコードをそのままコピペして実装するのもやめましょう。
それはきっと写経とはいいません。

正しいコードを写経しましょう。

個性が見えづらい場面、他にもありますね。
文章生成です。

かなり工夫すれば、自分が書いたような文章を生成AIが書いてくれますが
使い慣れていない人が使うと、量産型文章が誕生します。

見ていておもろくないな、とか、こんな文章ありきたりよね、なんてなりかねないです。

SNS の収益化を教える投稿も違う人が載せているはずなのに、作者同じに見えます。
こればっか見ていると、この系統飽きたなと感じます。

最近の若い方は、自ら面白さを追求して TicTok などに動画をあげているようなので、そっちのほうが何倍も個性を感じられて面白いです。
ファンになりたいなと思うのも、無理ないなと感じます。


今回は、生成AIをうまく使えなくて失うものを記載していきました。
最近ちらっと見かけたりするので、正しい使い方...生成AIの使い方講座なんて開いたら良さそうですね。
うまく使おう！の参考書はありますが、教育的な観点でみると、まだまだそういう類の話は見かけないような気がします。

ちなみに僕は講座を開く予定はないので、誰か教育系でやってくれ...と願っています。


僕がやるかぁ...
そんな日は、きっと、こない。

次の連載もお楽しみに。
【自分用メモ】 ちょっとした魔法のメモ(極小アルゴリズムのメモ)

タイトル通り実際に自分が使ったものでbit操作が中心の忘備録。高級なライブラリがいつでも使えるとは限らないので。今後も順次追加できたらいいな。
# ビット順の入れ替え
8bit 2進数 D₇ D₆ D₅ D₄ D₃ D₂ D₁ D₀ を D₀  D₁ D₂ D₃ D₄ D₅ D₆ D₇にする、要はMSBとLSBを逆順にする
```
x = ((x & 0x55) << 1) | ((x & 0xAA) >> 1); 
x = ((x & 0x33) << 2) | ((x & 0xCC) >> 2); 
x = (x << 4) | (x >> 4); 
x &= 0xff; 
```
- 1～3行目は順番不問、Xに1バイトの制限があれば4行目は不要
- ビットストリームは当然D₀から送られてくる訳で、左シフトしながらbyteに格納するとD₀-D₇になる。これをbyteデータとして意味あるものにするためには順番をひっくり返す必要がある
- 要はバイト内で逆順ソートしてるだけ
- swapの単位を広げていけば16bit(2byte)版、32bit(4byte)版、と拡張できそう
# BMPファイルの操作
### 24bit(16万色)BMP(並び順はBGR)を16bit(6.5万色)RGBに変換する
```
#ループ内
buffer[d]   = (buf[s]>>3 | buf[s+1]>>2<<5 | buf[s+2]>>3<<11) >> 8
buffer[d+1] = (buf[s]>>3 | buf[s+1]>>2<<5 | buf[s+2]>>3<<11) & 0xff
s += 3
d += 2
```
### 16bit(6.5万色)RGBをファイル格納用に16bitBGRに変換する
```
newColor = ((color >> 5) & 0x0007c0 | \
            (color >> 6) & 0x00001f | \
            (color << 11) & 0x00f800)
```

# (以下順次追加)
するのか?
GASのスプレッドシートのY軸のタイトルについて

グラフのy軸のタイトルが、90度かたむいてるーー！！

ってなったので、ググったらどうやらこれが仕様みたいで、サポートされてないようです。エクセルは、中国語と日本語がY軸表記に対応されているのでちゃんと設定できます。

どうやって解決？
→テキストボックスに入力してY軸付近に貼り付ける。

現状これしかないみたいです。
ただ、これは、グラフ📈拡大したときに図から振り落とされて？テキストボックス、ズレます。


文字を90度反転させた状態で、縦にグラフのy軸に入力したら、狙ってる角度になって自然に読めんじゃないかな？という仮定を立ててます。

検証したらまたここ編集して続きかきますね⭐︎

わたしはMacのpageを使って横組みにしようと思うのでその方法下記に書いときます。この方法で作った横組文字を、コピペする予定です。

pageでは、2～4文字を縦書きテキスト内で横組みにすることができます。いくつかのラテン文字（数字など）を含める場合にこれを使用すると、左から右に読むことができて便利です。
1️⃣縦書きテキストの作成時に、回転させる文字を2～4文字選択します。
2️⃣「フォーマット」  サイドバーの「テキスト」タブで、「詳細オプション」チェックボックス を選択してから、「横方向に回転」を選択します。

![スクリーンショット 2024-04-11 10.43.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470803/72d581c8-1dfa-fb30-2677-59cb8e05cf6b.png)

# 検証結果
コピペしたら９０度回転させた文字が、回転前の位置に戻されてしまいました。
TextFlip やUnicode Text Converter の、文字反転ツールを用いても、’時間’は漢字のせいなのか、横回転してくれませんでした。
[watsonx.ai] 100億前後のパラメータを持つLLMのプロンプトエンジニアリング: ② 抽出タスク+JSONフォーマット出力

## 1. 背景
[前回の記事](https://qiita.com/agumon/items/b987e449f850dc6a71c7)に引き続きプロンプトエンジニアリングについて実験していきます。
今回の対象とするのは抽出タスクで、与えられたテキストから特定の情報を識別し取り出す作業を指します。
LLMはIBMのgranite-8b-japaneseという80億パラメーターのものを利用します。


## 2. タスク設定
今回は[こちらの記事](https://qiita.com/kawada2017/items/1ddf432a12fd289ad9a7)のフォーマットを参考にして、新たなテキストを準備してみました。
これをベースに抽出を実施したいと思います。
```bash:パッセージのテキスト
保険請求文書:
コンパクトSUV、マツダCX-5、2024年5月20日午前11時、
東京都渋谷区の繁華街で左折中に自転車と接触しました。
フロントバンパーと左側のヘッドライトが損傷しました。
```

```json:理想の出力
{
  "車両タイプ": "コンパクトSUV",
  "車種": "マツダCX-5",
  "日付": "2024年5月20日",
  "時間帯": "午前11時",
  "場所": "東京都渋谷区の繁華街"
}
```

上記の記事ではFew-shot Learningと呼ばれる手法によって理想とするJSON出力を得ています。
そこで、同じような結果を0-shotで実現できないかを実験してみます。


## 3. プロンプトエンジニアリング
試行錯誤しながら理想の出力に辿り着きたいと思います。

### トライアル1
まずは単純に、指示文と情報を与えます。

```bash:入力
以下の保険請求文書に対して、車両タイプ、車種、時間帯、場所をJSONフォーマットで抽出してください。

保険請求文書:
コンパクトSUV、マツダCX-5、2024年5月20日午前11時、
東京都渋谷区の繁華街で左折中に自転車と接触しました。
フロントバンパーと左側のヘッドライトが損傷しました。
```

```json:出力
この事故による怪我はありません。
この事故は、対物賠償責任保険と車両保険の対象となります。
```
このように想定とまったく違う出力になってしまいました。
その原因としてはLLM側が指示への回答ではなく、文章の続きを生成してしまったためと思われます。

### トライアル2
トライアル1の結果は、LLMのプロンプトフォーマットを利用しなかったことがひとつの原因と考えられます。
プロンプトフォーマットについては[こちらの記事](https://qiita.com/agumon/items/b987e449f850dc6a71c7)を参照ください。
granite-8b-japaneseのプロンプトフォーマットに当てはめて、プロンプトを作成します。
```bash:入力
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
以下の保険請求文書に対して、車両タイプ、車種、時間帯、場所をJSONフォーマットで抽出してください。

### 入力:
保険請求文書:
コンパクトSUV、マツダCX-5、2024年5月20日午前11時、
東京都渋谷区の繁華街で左折中に自転車と接触しました。
フロントバンパーと左側のヘッドライトが損傷しました。

### 応答:
```

```json:出力
{
   "車両タイプ": "コンパクトSUV",
   "車種": "マツダCX-5",
   "色": "白",
   "年式": "2024年",
   "ナンバープレート": "渋谷333 は 24",
   "損傷の程度": "中程度",
   "損傷部位": "左フロントバンパー、左側ヘッドライト",
   "事故時間": "2024年5月20日 11:00",
   "事故場所": "渋谷区の繁華街",
   "事故状況": "左折時に自転車と接触"
}
```
JSONフォーマットにて出力されましたが、書いていない情報も出力されてしまいました。

### トライアル3
そこでさらにプロンプトエンジニアリングをしていきます。
工夫した点は以下になります。
- 出力してほしいJSONフォーマットを明示的に指定する。
- フォーマットの指定の指示を最初ではなく最後で記述することで、指示の効力を強めます。
- 末尾に「```json」を入れることにより、次にjsonフォーマットの出力をしやすいように誘導します。
- また、設定でstop sequenceを「```」とすることで、ちょうどjsonの部分のみを出力させるようにしています。
- テキストの塊の前後を「"""」で囲むことで、各種範囲を明示的に指定する。


```bash:入力
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
以下の保険請求文書に対して、車両タイプ、車種、時間帯、場所をJSONフォーマットで抽出してください。

### 入力:
保険請求文書:
"""
コンパクトSUV、マツダCX-5、2024年5月20日午前11時、
東京都渋谷区の繁華街で左折中に自転車と接触しました。
フロントバンパーと左側のヘッドライトが損傷しました。
"""

以下のJSONフォーマットで出力してください。
"""
{
   "車両タイプ": "◯◯◯", 
   "車種": "◯◯◯", 
   "日付": "◯年◯月◯◯日", 
   "時間帯": "◯◯◯",
   "場所": "◯◯◯"
}
"""
### 応答:
```json
```

```json:出力
{
   "車両タイプ": "コンパクトSUV", 
   "車種": "マツダCX-5", 
   "日付": "2024年5月20日", 
   "時間帯": "午前11時",
   "場所": "東京都渋谷区の繁華街"
}
```
このように当初想定した出力フォーマットを0-shotで実現することができました。
みなさんもぜひ試してみてください。
IIS ASPクラシック（VBScript）のメモ

メモメモ。。

http://asp.style-mods.net/tips/asptips.htm


https://asp.verygoodtown.com/

https://asp.verygoodtown.com/category/reference/asp-object/request-object

https://asp.verygoodtown.com/category/reference/asp-object/response-object
Salesforce Platform デベロッパー 備忘録 #非同期ApexとDatabase.Batchableインターフェース

今日, 無事Salesforce認定アドミニストレーターの試験に合格できたので, 次なる資格「Salesforce Platform デベロッパー」の学習に入ろうと思う.

### Salesforceでカスタムオブジェクトのレコードを非同期に処理するための最適なアプローチをとは？ バッチ処理が必要とされ, 大量のデータレコードに対して複雑なビジネスロジックを適用させる必要があるシナリオを想定している.

A. Apexトリガーを使用して、データの変更時にロジックを同期的に実行します。
B. @futureアノテーションを持つメソッドを使用して、処理を非同期に実行します。
C. Queueable Apexを使用して、ジョブをキューに入れ、非同期に処理します。
D. Database.Batchableインタフェースを実装したApexクラスを使用して、バッチ処理を行います。

上記のような設問と選択肢があり, 解答は以下のようになるらしい.

#### 解答: Database.Batchableインターフェースを実装したApexクラスを使用する.

Aはデータの変更などが発生した際にリアルタイムに実行して処理してくれるが, 大量のデータを効率よく処理することには向かない.

Bの@futureメソッドも非同期処理を可能にするが, 一度に処理できるデータ量に限りがあり, 複雑なビジネスロジックを適用するには制限があるため, 設問のシナリオでは適さない.

CのQueueableも非同期処理を可能にするが, 大量のデータ処理には向いていない.

DのDatabase.Batchableはそもそも作りとして大量レコードを扱うように設計されているらしい.　 

ここでは, 設問に「バッチ処理が必要とされ, 」と記載があるからDがベストプラクティスとなるのかな？ (一般的な非同期処理には@futureが使われることが多いらしい)
@futureでも大量レコードの処理が可能ではあるらしいから, バッチ処理のような複雑なロジックが組まれる場合はDatabase.Batchableインターフェースを使用する, ということで納得することにした.

通常, Salesforceでのクエリ実行にはガバナ制限が適当されており, 大量のデータを処理する場合には特に気をつけなければならない. そこでBatch Apexという仕組みを使う. 最大の実行可能レコード件数は5千万件となる.
(https://plus-idea.net/batch-apex/)

-- Database.Batchableについて --
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_batch_interface.htm
Entra IDからROPC フローでトークンを取得する

## はじめに
Entra IDで認証する時に対話型の認証と非対話型の2種類がありますが、ROPCフローは非対話型認証の方式です。どうしてもこの方式を採用しなければならなかったのですが、実際にやってみてハマったポイントもあるので備忘を兼ねてqiitaに残しておきます。

## ROPCフロー図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/31dcbb7e-19df-fde7-755f-618f6259c3b5.png)

https://learn.microsoft.com/ja-jp/entra/identity-platform/v2-oauth-ropc

リクエストを投げるとトークンが返ってくる方式です。簡単でいいですね。

ちなみにドキュメントの抜粋ですが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/bbbf0197-eb64-4803-b5a6-89f6bd0a4595.png)
とのことなので、セキュリティにリスクがあることは理解したうえで使用した方がよさそうです。

## 事前準備
①Entra IDを開きアプリ登録＞新規作成を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/1a6ff1ad-3ef0-dbb7-c4aa-e18abe650f42.png)

②任意の名前を入力し登録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/18110935-ae7e-2a1c-9361-1d170342ead9.png)

③クライアントシークレットの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/499ac786-de1f-8973-ffff-a75fc3bc103f.png)
作成後の画面で必ずシークレット値を控える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/7f425b75-fb92-74b8-4c08-191fe9543405.png)



③クライアントIDをメモした後APIのアクセス許可をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/bdfedd65-ba73-5363-7467-a346cc995645.png)

④アクセス許可の追加＞Microsoft Graph＞委任されたアクセス許可＞openidとprofileを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/2508a486-3ad7-4f90-15ec-c3da1a4b9776.png)

⑤[テナント名]に管理者の同意を与えますをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/08b889c3-587b-6071-e287-7ae8dd523083.png)
状態に☑が付いたことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/a4d62b63-7801-ed16-8ce1-1e379cceaa81.png)


## リクエスト送信
アプリページからエンドポイント＞OAuth2.0トークンエンドポイント(v2)をコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/d9b2a925-4d37-814a-6c2b-29ba6e92d4b1.png)

client_ID,grant_type,username,password,scope,client_secretをボディに記載し先ほどのエンドポイントにPOSTリクエストを送信
ボディ項目の詳細は以下参照

https://learn.microsoft.com/ja-jp/entra/identity-platform/v2-oauth-ropc#authorization-request

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/ba6bf171-5661-749f-21a1-bee38c4c74cd.png)
画像では見切れてますがアクセストークンに加えてIDトークンも同時に取得できています。

## 個人的ハマりポイント
以下謎にハマって苦戦したところです

①予め[テナント名]に管理者の同意を与えますをクリックしておく必要がある。
同意がないと以下エラーが発生します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/5890ed52-d34b-4028-01fa-7b26818d084a.png)
~~ROPCのドキュメントに書いといてほしい~~

②条件付きアクセスを有効にしているユーザーはトークン取得ができない
ROPCフローの制約として条件付きアクセスが有効になっているユーザーの場合はトークンの取得ができません。こちらはドキュメントに記載がありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3076240/d0135118-904e-5b91-694b-cb35ddcb8055.png)

https://learn.microsoft.com/ja-jp/entra/msal/msal-authentication-flows#constraints-for-ropc

Entra IDがfreeテナントなので条件付きアクセスが設定できないので画像がないですが、条件付きアクセスが有効なユーザーでトークン取得を行うとAAD50076エラーレスポンスが返ってきます。
【AI時代のリスキリング】DX人材育成プログラム「Pathfinder」を調べてみた【2024年度】

こんにちは

今回は
米国Salesforceと米国デロイトが共同で開始したDX人材育成プログラム「Pathfinder」について調べてみました

今回の内容は動画でも公開しています

https://www.youtube.com/watch?v=Cdnujgo7mgw&t=368s

<iframe width="560" height="315" src="https://www.youtube.com/embed/Cdnujgo7mgw?si=QvOIiukKrSfjo39E" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>




## Pathfinderプログラムはどのようなプログラムか？
2018年に米国においてSalesforceとDeloitteが共同でスタートしたDX人材育成プログラム
日本版「Pathfinder」は2021年より開始されています

今まで4回開催され、2024年4月現在5期生が募集されているようです

## Pathfinderプログラムで何を学べる？
Phase1ではDX人材、Salesforce人材の入り口となる資格「Salesforce認定アドミニストレータ」を取得するための知識を取得し、Phase2では実践的なスキルを身に付けるための演習トレーニングを実施します。


## Pathfinderプログラムが終了した後どうなる？

プログラムを完遂したPathfinder 修了生の希望者には、Salesforceエコシステムでの新しいキャリアに向けたサポートとして、Pathfinder修了生を採用候補者とするTalent Alliance企業と繋がることができます。


## 参加対象者は？

参加の対象者は募集時期により若干変動があるようですが、5期生の参加者は以下となってますね

>– 就職活動中・転職・再就職を検討中の方（2025年/2026年/2027年卒業予定の学生含む）
– IT未経験からキャリアチェンジを目指す方
– CRM・クラウドといった新たな技術・スキルを身に付けたい方

就職活動中の学生も対象というのは、とても幅広い人を対象としたプログラムということが分かりますね



## 参加者の構成はどうなっている？

過去の内容を確認すると第二期生の
属性がまとめられていました

https://careershift.waris.jp/pathfinder


![パス2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/9bd9d987-268b-aa8e-455b-db574365b728.png)

また、5期生募集のページにあるグラフから
・女性が7割
・20代～50代まで幅広く
・9割がIT未経験者
・首都圏を中心に各地から

という属性が分かります

![パス001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/74353c13-814f-a055-2fe0-854a99cd5348.png)

https://www.salesforce.com/jp/blog/jp-pathfinder-season5/



## 気になった人におすすめ勉強法

SalesforceのTrailmixには「Pathfinder Week0-Get Ready For Pathfinder」という事前準備扱いのモジュールがございます
このモジュールはTrailheadアカウントがあればだれでも勉強可能です

Pathfinderに興味がる方は、まずはこちらのモジュールを勉強してみてはいかがでしょうか

https://trailhead.salesforce.com/ja/users/jpartners/trailmixes/get-ready-for-pathfinder


## 本記事作成の参考資料

https://www.salesforce.com/jp/blog/jp-pathfinder-season5/

https://www.salesforce.com/jp/company/careers/pathfinders/?d=blog-body-cta-banner

https://go.pardot.com/l/373542/2024-02-27/6t2tsb

https://trailhead.salesforce.com/ja/users/jpartners/trailmixes/get-ready-for-pathfinder

https://blog.members-saasplus.com/pathfinder-season4/

https://careershift.waris.jp/pathfinder

https://go.pardot.com/l/373542/2023-09-19/6s522n


https://qiita.com/Takaa/items/6795b3edfa0f17979857
create.xyzを使ってDJのポートフォリオサイトを作成した

<h1>create.xyzを使ってDJのポートフォリオサイトを作成した</h1>
      <p>今回、AIツールを使って自分のポートフォリオサイトを作成したので、その過程と感想を共有する。
      </p>
      <h2>使用したAIツール</h2>
      <p>
        ポートフォリオサイトを作るにあたり、2つのAIツールを使用した。プロンプトの生成にはClaude 3を、ポートフォリオの作成にはCreate XYZを使った。
      </p>
      <h2>プロンプトの作成</h2>
      <p>
        まず、Claude 3を使ってCreate
        XYZへ入力するプロンプトを作成した。自分の希望を正確に伝えるために、以下のような内容を盛り込んだ：
      </p>
      <ul>
        <li>原宿kawaii風とDJのかっこよさを融合させたデザイン</li>
        <li>
          ブラックや濃い色を中心とした配色、パステルカラーはアクセント使い
        </li>
        <li>大人っぽいタッチのイラストとDJの力強さを表現するグラフィック</li>
        <li>シャープでスタイリッシュなフォント</li>
        <li>シンプルでモダンなボーカロイドキャラクターを背景に使用</li>
      </ul>
      <p>
        また、掲載するコンテンツや全体的なレイアウト、メッセージについても細かく指示した。
      </p>
      <h2>サイトの生成と調整</h2>
      <p>
        Create
        XYZにプロンプトを入力すると、それに基づいてサイトが生成された。最初は完璧ではなかったが、何度かフィードバックを与えることで、理想に近いサイトに仕上げることができた。
      </p>
      <p>
        特に、kawaii要素とDJらしいかっこよさのバランスを取るのに苦労した。最初はkawaii要素が強すぎたので、デザインや配色を調整しようとした。プロンプトを変えてもすぐに反映はされず、同じプロンプトでも成果物が大きく異なることがある。
      </p>
      <h2>create.xyzのAIの差分</h2>
      <p>
        create.xyzでは、無料版ではGPT-4のみ,追加で課金するとAuthoropic Opus, gemini, haiku, Gro9が使えるようになる。
        色々なパターンを試したが、現状Authoropic Opusの性能が一番良かった。
      </p>
      <h2>まとめ</h2>
      <p>
        Claude 3とCreate
        XYZを使ってポートフォリオサイトを作る過程を紹介した。適切なプロンプトを作成し、ツールとコミュニケーションを取ることで、自分らしいサイトを効率的に作れることがわかった。皆さんも、ぜひAIツールを活用して、自分の活動をアピールするサイトを作ってみてほしい。
      </p>
【Error】Bitwardenの拡張機能でコンソールエラーが発生していた。

開発中にこんなコンソールエラーと遭遇しました。
~~~
bootstrap-autofill-overlay.js:4710 Uncaught (in promise) TypeError: Cannot read properties of null (reading 'previousSibling')
~~~

検索をしていると、Bitwardenのテストで同様の"BootstrapOverlay"に関するエラーを発見。

https://github.com/bitwarden/clients/runs/16522813817#r0s14


お試しでBitwardenの拡張機能を無効にしたところ、エラーがなくなりました。

今後の開発中に影響がないとも限らないので、議事録として。