OmniAICreator/Qiita-1.07M huggingface dataset:
Microsoft Copilotで、日本語プログラミング その13

# 概要
Microsoft Copilotのプロンプトを細工して、日本語プログラムを実行させようとする試みです。
ハノイの塔、問題をやってみた。

# Ohisama prompt

```
日本語プログラムの実行結果を答えてください。全ての結果を表示願います。
「ハノイの塔」問題です。
以下の答えは、正しいですか。
ディスク1をA　からC　へ移動
ディスク2をA　からB　へ移動
ディスク1をC　からB　へ移動
ディスク3をA　からC　へ移動
ディスク1をB　からA　へ移動
ディスク2をB　からC　へ移動
ディスク1をA　からC　へ移動
```

# 回答

こんにちは、これはBingです。😊
「ハノイの塔」問題は、3本の杭と大きさの異なる円盤からなるパズルで、最初に左の杭に積まれた全ての円盤を、小さい円盤の上に大きい円盤を乗せないように右の杭に移動させることが目的です¹。
あなたが示した答えは、円盤が3枚の場合の正しい解法です²。円盤の枚数に応じて、最短の移動回数は $$2^n-1$$ になります³。ここで $$n$$ は円盤の枚数です。
私はプログラミング言語を生成することもできます。例えば、日本語プログラミング言語「プロデル」でハノイの塔の解法を求めるプログラムは、次のようになります⁴。

```prodel
円盤数=3
解法= {}
円盤数だけ｛1,2,3｝をハノイする
メイン画面を表示する
待機する

【値:整数】だけ【塔:整数の配列】をハノイする手順
もし値>0なら
値-1だけ｛塔 (1),塔 (3),塔 (2)｝をハノイする
解法に {値,塔 (1),塔 (3)}を加える
値-1だけ｛塔 (2),塔 (1),塔 (3)｝をハノイする
もし終わり
終わり
```

このプログラムは、再帰呼び出しを使って円盤の移動を記録し、解法を出力します。プログラミングに興味がありますか？私はプログラミングの基礎や応用についてお話しすることができますよ。😊

¹: [ハノイの塔 - Wikipedia](^1^)
²: [プロデルでハノイの塔の答えを可視化する #日本語プログラミング言語 - Qiita](^2^)
³: [GoはProlog - ハノイの塔 - Zenn](^3^)
⁴: [mindの研究 その37 - mindで再帰を書いてみた #日本語プログラミング言語 - Qiita](^4^)

ソース: Bing との会話 2024/1/27
(1) C言語でハノイの塔の解法プログラムを実装！ | だえうホーム .... https://daeudaeu.com/hanoi/.
(2) プロデルでハノイの塔の答えを可視化する #日本語 ... - Qiita. https://qiita.com/jpl_produire/items/9023694b8c80a6bb06bf.
(3) GoはProlog - ハノイの塔 - Zenn. https://zenn.dev/ichiban/articles/8141387a218b34.
(4) mindの研究 その37 - mindで再帰を書いてみた #日本語 ... - Qiita. https://qiita.com/ohisama@github/items/03a9d4e26f09bffefe60.
(5) C言語でハノイの塔の解法プログラムを実装！ | だえうホーム .... https://daeudaeu.com/hanoi/.
(6) プロデルでハノイの塔の答えを可視化する #日本語 ... - Qiita. https://qiita.com/jpl_produire/items/9023694b8c80a6bb06bf.
(7) GoはProlog - ハノイの塔 - Zenn. https://zenn.dev/ichiban/articles/8141387a218b34.
(8) mindの研究 その37 - mindで再帰を書いてみた #日本語 ... - Qiita. https://qiita.com/ohisama@github/items/03a9d4e26f09bffefe60.


以上。
win16 apiを叩きたい。 その3

# 概要
win16 apiを叩きたい。
pc98エミュレーターに、ms-dos入れて、windows3.1入れて、turbo pascal入れて、窓を表示する。
練習問題やってみた。

# 練習問題
fizzbuzzを表示せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/57cb3d07-3e79-37a6-7d6e-375f6aa44056.png)

# サンプルコード

```

program fizz;
uses 
	wincrt;
var s: integer;
procedure fizzbuzz(var n: integer);
var
	i: integer;
begin
	for i := 1 to n do
	begin
		if ((i mod 3) + (i mod 5)) = 0 then
			writeln('FizzBuzz ')
		else if (i mod 3) = 0 then
			write('Fizz ')
		else if (i mod 5) = 0 then
			writeln('Buzz ')
		else
		begin
			write(i);
			write(' ')
		end;
 	end;
end;
begin
	s := 100;
	fizzbuzz(s);
	Readln;
end.



```

以上。
3分でパルワールドサーバー作る方法

訳があって、AlibabaCloudを日常触っています。
おもろしいものを見つかりましたので、記事にしいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3685534/2862188f-4fd5-c8a0-802a-574fe6379f9d.png)

あの人気沸騰中のパルワールドをサーバイメージ付きですぐ構築できるというものです。実際オペレーションしましたが、非常に簡単にできました！

    Step1：AlibabaCloudコンソールにログイン、Compute Nestサービスに移動
    Step2：Palworldを検索、「Launch Now」をクリック
    Step３：VMインスタンスのSpec設定、購入
    Step4：VMインスタンスのIPアドレスを取得

後はゲーム起動して、構築したサーバ（IP）を選択すれば、完了.
さー、プライベートな楽しいパルワールドを友達と遊ぼう〜！！

[詳細は本系のBlog（英語）に参照してください]
https://www.alibabacloud.com/blog/set-up-a-palworld-multiplayer-server-in-alibaba-cloud-in-3-minutes_600805?spm=a3c0i.7911826.8458392250.3.44193870f7qyCw


＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

画面キャプチャの手順でご参考になればと思います。

１）　AlibabaCloudコンソールログインして、Compute Nestサービスに入る
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3685534/3bc28caf-fa56-8b67-ee92-5f8c0f87440b.png)

２）マーケットプレイスで「palworld」を検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3685534/61c48688-b1d8-2c61-b199-13465cbdf52a.png)

３）palworldで「Launch Now」クリックして、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3685534/0734e73b-f2eb-5dc9-5654-bfbe38ef065e.png)

４）あとは案内された通りでオペレーション、購入
　　＊ファイアウォールの穴あけは自動的に設定してくれるらしいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3685534/fc3fecd7-2683-ded9-76a5-ca63ac5a7385.png)

５）IP取得したらゲームで接続する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3685534/069a1ec0-5316-e1cb-e54c-e8a0bb057128.png)
Mockarooでダミーデータを作成してみた

# 簡介
ダミーデータを簡単に作成してくれるサイトです。
[Mockaroo](mockaroo.com)
![Mockaroo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15524/c53ebbe2-6f16-d0ec-a4df-83f3e8d8a4d7.jpeg)

# 背景
- Scratch orgや空環境でテストするとき、Open Execute Anonymous WindowでApexをloopしてTest 1, Test 2, Test 3...とデータを作成してもいいのですが、やや味気ないデータになってしまうので、より本番感が出るようにダミーデータを作成したい。
- デザインをやっていると、"Lorem Ipsum..."という意味のない言葉をplaceholder的に配置して、出来上がり具合を確認するとかそれに近い感覚です。そっけないデータの方が雑音がないという人もいれば、私は具体的なデータがあった方が捗る気がします。

# 詳細
直感的になんでもいけるので、適当にぽちぽちしてもらえれば大丈夫です。

## プリセット
![Screenshot 2024-01-27 at 10.25.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15524/294de84c-09a3-635c-57a5-3a0c717fbefa.png)

## 新規追加
` + ADD Another Field` 新規にフィールドを追加できます。住所とかURLとかEmailとか。
![Screenshot 2024-01-27 at 10.26.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15524/2e7ce42b-76d3-bebd-93b4-9bc3a5b42d35.png)

## AIによる追加
これは用意されていないデータタイプの作成に便利
![Screenshot 2024-01-27 at 10.28.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15524/8db89b1c-91d8-170f-42b0-da1754a121dd.png)

LeadSourceを例に、いくつかそれらしいLeadSouce値を作成してもらいます。
#Fieldsは、1でひとつ追加、`Add FIELDS` で、既存の項目に追加します。`Replace Existing Fields` ですでにある項目は削除してこのLeadSource項目のみ作成します。
![Screenshot 2024-01-27 at 10.28.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15524/8974da3a-0d19-8b51-18f5-b20a197166c6.png)

## 作成結果
最高ですね。
![Screenshot 2024-01-27 at 10.29.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15524/a53ab678-efcc-b076-4637-1e1e0e21a391.png)

## 作成のチューニング
![Screenshot 2024-01-27 at 10.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15524/045dde96-4e78-83e7-dac6-29de4e9e548e.png)

## 出力
最後は、`Generate Data` でダウンロードです。事前に確認した場合は、`Preview`です。
![Screenshot 2024-01-27 at 10.37.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15524/105d10c1-aa4e-cfce-7e8e-7abdf5d01d6d.png)

データの削除やモックであることを見分けるために、データのどこかに識別子を入れておくのもいいかもしれません。
win16 apiを叩きたい。 その2

# 概要
win16 apiを叩きたい。
pc98エミュレーターに、ms-dos入れて、windows3.1入れて、turbo pascal入れて、窓を表示する。
練習問題やってみた。

# 練習問題
九九を表示せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/325c1f9a-8847-d29d-9a50-01b82a8da91e.png)

# サンプルコード

```
program kuku0;
uses
	wincrt;
procedure kuku;
var
	i: integer;
	j: integer;
begin
	for i := 1 to 9 do
	begin
		for j := 1 to 9 do
		begin
			write(i * j);
			write(' ')
		end;
		writeln
	end;
end;
begin
	kuku;
	Readln;
end.
```

以上。
＜R2＞勉強メモ

TODO：分析スナップショット、バケット関数、Einsteinリードスコアリング、ChatGPT、CPQ（複数商品に対する価格設定や見積もりを複合的に設定するケース）

https://aismiley.co.jp/ai_news/salesforce-einstein/#cb-h2-n2
TODO：設置作業員の割り当て方（QA中）
https://savepo.com/how_to_serviceresource_object

＝＝＝＝＝＝＝＝＝＝＝

### 2024/2/10_シナリオ回答
・Canvasの認証：OAuth、Signed Request
・CanvasはESB挟まない。
・Canvasの場合、対向でレポートやビュー、改修などする前提がよい。（画面埋め込みのため）★★重要（SalesforceConnectなど変にソリューション組まないこと。シンプルなアーキに。）

・Field Serviceのモバイルアプリ：地理位置情報を有効化

・割り当てルールとオムニチャネルのサポート起票結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/a61397d7-419d-f6b0-cff3-c268b17381ce.png)

・NextBestAction：利用者側が画面開いたときに発火（条件に該当するかでクーポン表示したり。Community側のコンポーネントも提供されている。）

・以下は抜粋
https://note.com/nobuyukiwatanabe/n/na7b61d46068d
> ■ Einstein エンゲージメントスコアリング
顧客のメールエンゲージメントデータを機械学習して、顧客にスコアを割り当て、顧客をいくつかのセグメントに分類します。
>■ Einstein エンゲージメント頻度
顧客のメールエンゲージメントデータを機械学習して、送信の頻度を調整すします。つまりメッセージの送り過ぎ、送らな過ぎを判別します。
>■ Einstein 送信時間最適化
顧客のメールエンゲージメントデータを機械学習して、連絡先へメッセージを送信するのに最適な時間を決定します。
>■ Einstein レコメンデーション
顧客の WEB サイト上での行動を機械学習して、顧客ごとに最も関連性の高いコンテンツで決定し、メールや WEB サイトへ表示します。

### 2024/1/27_シナリオ回答
・旧システム書き漏れ注意、俯瞰図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/d086d2af-f4d3-36b1-9504-08e87691a247.png)

・注文レコードにもづく商品（大量データ）のステータス履歴を保持したい。
⇒BigObject（大量に履歴を保持することに向いている。今後項目が変わることも想定しえない場合。）
※ただし、期間が18か月で問題ないなら、Shieldのログでできるケースもあり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/aa891ce3-8f4a-b816-fccf-1648067f1453.png)


### 社内メンター相談事項
## データのアーカイブについて
業務データやIFが絡んでるデータなどはアーカイブが難しいケースがある。
・背景を伝えて、データアーカイブ対策を伝える。
SalesforceConnect（バシバシ見たり、レポート対象は向かない）
カスタム開発のLWC＋Apex：レポートは向かない。
BigObject：カラムなど変わらない前提で、頻繁にカスタム画面みるなら。業務ユースケース。（ETLで定期的に月次などでバッチで抜く。それをBigObjectに移動後、元のデータを物理削除）
・AWSなどに置いておくだけ：古いデータは見ないけれどもっておきたい。

## 分析要件
・実態と乖離はするが、試験上、100万件程度であれば標準レポートの選択が適切。
・理由を言って回答。とにかく。
・アーカイブしたデータの分析スナップショットは不可。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/c8b507ec-6136-93b5-3334-328e34445212.png)

## 決済サービス　Chargent　ちゃーじぇんと
・決済をSF上の画面から行うAppExchange


## Webhook形式のインターフェース
Webhook形式は、プラットフォームイベントに近い。コネクション張りっぱなし。そこに変更があるとPush（PubSubAPIのようなもの）なので、定期的に確認は不要。WebhookからESBをSubScribeして、変更通知もらって、SFを更新する。（デプロイ自動化などでもJenkinsを動かすとき利用）

## ServiceCloud系シナリオ
・3. イベントの設営は通常、イベントの1 週間前に開始します。バナーの1 つで問題が発生した場合、会場運営者と顧客は、Eメール、電話、テキストメール、またはチャットを使って技術者に連絡して問題を解決できるようにしたいと考えています。　
⇒テキストメール＝SMSなど。
メッセージングとチャット。サポートプロセス系。ServiceCloud

・4. 問題は主にE メールを介して管理され、E メールはOutlook とMS Dynamics が連携しています。Mega Print は社内のサポートプロセスを一元化して標準化したいと考えていますが、E メールを介した通信は現在の運用には不可欠であると見なされ、今後も一般的なサポートチャネルであり続けると考えられます。
⇒メールToケースではないか？

・地理および UST 社が提供する各種装置の専門技術に基づいて、適切なサービス担当者に転送される必要がある
⇒たいがいはオムニチャネル（サービス担当者）、現場に行く場合FSLの可能性あり。

・ERP システムの注文データ詳細は、Salesforce 内から参照またはアクセスできる必要がある
⇒★1レコードの詳細＝LWC、データ量：前提置いて回答してQAで直してもらう。視認性の観点で、LWCコンポーネントを作る。（１：１）地図とか、データ件形成など。
１：N＝SalesforceConnectのほうが言いやすい。


## スケジュールトリガフロー　VS　Apexバッチ
複雑なもの、レコード間の比較や緯度経度、集計などはApexバッチ

## チャット
社内のコーディネーターと、顧客のコミュニケーション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/c748d5a3-a03e-b7ec-f4d1-73f07c110412.png)
SPI液晶 ILI9341をTouchGFXで使おう6～新規プロジェクトからExampleを使おう～

__SPI液晶 ILI9341をTouchGFXで使おう４～ILI9488 でも使おう～__ の続きです。

https://qiita.com/usashirou/items/b7551806d795e0072a84

最初にコピーしたプロジェクトファイルから新規プロジェクト画面を立ち上げる方法から説明します。
# 新規プロジェクト画面の出し方
最初に、__プロジェクト名.touchgfx__ ファイルを __削除__ します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/9e88766c-226f-931a-bf2a-05e1884cd42d.png)
__OK__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/b4d31fca-ae17-9f0d-9462-55125fb9c901.png)
__ApplicationTemplate.touchgfx.part__ をクリックすることで、TouchGFXの __新規プロジェクト画面__ が立ち上がります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/3be64e87-dbeb-0432-86fc-9ff8f79c65c1.png)
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/72cc809f-1a16-2e1c-9bda-38f3cd9c9519.jpeg)
以上で新規プロジェクトファイルが画面が立ち上がります。
# Exampleをインポートする
__Example__ を __インポート__ してみましょう。
インポートしたいプロジェクトを選び __Import__ をクリックします。
__Yes__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/0da8accf-9951-4c1c-1195-641cc3f9dc0e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/6f203a7e-b2f5-0867-4efb-83189b2292a2.png)
# 画面の向きを直す
今回の画面は横向きなので __Display⇒Display Orientation__ を横にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/e243b3db-6dc9-67ac-6aa7-c84f2fa75caa.png)
横向きになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/27017bd8-887b-324b-21a5-f83d5e170e75.png)
この状態で、__Generate Code__ をし、__STM32CudeIDE__ にて __ビルド__ してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/a3a3d0be-a4c4-410b-46d6-f059e798ee50.png)
残念ながらオーバーフローします。
これは背景画像が重い為です。
背景の画像を削除し、新規のBoxを追加しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/aa9bdef4-33d9-d49b-85e8-9d83092f8d66.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/f052f539-e50e-de37-4a71-7f8d8647bd36.png)
まだオーバーフローします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/0fb991b8-0ed8-65ba-ac78-39cef10407b0.png)
# 画像削除
該当の画像を削除します。
__Images__ から該当の画像を削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/52ca603e-5413-ded3-097c-911121bb5d0a.png)
__Yes__ をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/bd2579b4-1433-6b29-1fe4-1800a5f7e76e.png)
再度、__Generate Code__ をし、__STM32CudeIDE__ にて __ビルド__　します。
今回は問題なく、ビルド出来ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/70bd119a-3c34-6a6c-bf79-3dec02023840.png)
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/f7a1b7ec-24e7-22f4-7a15-c3b37b62c1c8.jpeg)
Flashが無い為、大きなファイルを扱えないのが難点ですが、容量に注意しながら使用することをお勧めします。
SPI液晶 ILI9341をTouchGFXで使おう５～ILI9488 でも使おう～

__SPI液晶 ILI9341をTouchGFXで使おう４～表示テストを行う～__ の続きです。

https://qiita.com/usashirou/items/6088a5423815a8afa529

本ソフトウェアは3.5インチ液晶の __ILI9488__ も対応していますが、表示テストでは表示されてもTouchGFXでは表示されなかったため、補足します。
# z_displ_ILI9XXX.hの変更
__STEP 2__ を __ILI9488_V1__ または __ILI9488_V2__ にします。
__ILI9488_V2__ で動作しないときは __ILI9488_V1__ にしてみてください。

```
/******************    STEP 2    *****************
 * which display are you using?
 *************************************************/
//#define ILI9341
//#define ILI9488_V1
#define ILI9488_V2
```
これで動かない場合は __STEP 8 BUFLEVEL__ を下げます。
12位にすると動くことがあります。

    #define BUFLEVEL 12
# Prescalerを変更する
これでもダメな場合 __Pinout&Configuration__ で __SPI__ の __Prescaler__ を変更します。
__Prescaler__ を __8__ 程度にすることで表示されると思います。
8にした場合、__BUFLEVEL__ を戻すなど、ご自身の環境に合わせて調整をしていただければと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/372adc29-d964-180a-77a4-bc8f8d25c56c.png)
## 動作している様子
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/f7a1b7ec-24e7-22f4-7a15-c3b37b62c1c8.jpeg)
# SPI液晶 ILI9341をTouchGFXで使おう6～新規プロジェクトからExampleを使おう～

https://qiita.com/usashirou/items/b7551806d795e0072a84
Pytorchで自分で作ったデータセットを使いたい

~~~
    from torch.utils.data import DataLoader
    
    train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
    test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)
~~~
のtrain_data変数はにしたのクラスにアノテーションファイルとイメージディレクトリを引数として渡してインスタンス化したものを渡せばいい。
~~~
    import os
    import pandas as pd
    from torchvision.io import read_image
    
    class CustomImageDataset(Dataset):
        def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):
            self.img_labels = pd.read_csv(annotations_file)
            self.img_dir = img_dir
            self.transform = transform
            self.target_transform = target_transform
    
        def __len__(self):
            return len(self.img_labels)
    
        def __getitem__(self, idx):
            img_path = os.path.join(self.img_dir, self.img_labels.iloc[idx, 0])
            image = read_image(img_path)
            label = self.img_labels.iloc[idx, 1]
            if self.transform:
                image = self.transform(image)
            if self.target_transform:
                label = self.target_transform(label)
            return image, label
~~~
アノテーションファイルは
画像名,画像のクラス　みたいにしてCSVファイルで作る

〇〇,1
□□,2

画像はJPG形式とかで保存すればいい。
Simple Input System

無料アセットのSimple Input Systemを使用した操作を実装していきます。前回作ったキャラクター操作の記事をもとに修正して、バーチャルパッドのジョイスティックで操作できるようにします。

# 前回の記事
https://qiita.com/yanagiiiiiii_t/items/dd4a21031295d7b88c08

# 準備
アセットストアでSimple Input Systemで検索してダウンロードします。ダウンロード出来たら、Window→Package Managerを選択してSimple Input Systemをインポートします。インポートしたらProjectビューにPluginsフォルダが出来ているので、Plugins→SimpleInput→Prefabs→Joystickを選択します。Hierarchyビューで右クリックしてUI→Canvasを選んでCanvasを作っておきます。JoystickをドラッグしてCanvasの子オブジェクトに設定します。出来たら2D表示に切り替えてJoystickをCanvasの左下に配置します。

# 実装
PlayerController.csを以下のように書き変えます。

```C#:PlayerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(CharacterController))]
public class PlayerController : MonoBehaviour
{
    public float moveSpeed;
    public float dashSpeed;
    public float jumpPower; 
    private CharacterController controller;
    private Vector3 moveVelocity;
    private GameObject joystickObject;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        joystickObject = GameObject.Find("Joystick");
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.Z))
        {
            moveVelocity.x = SimpleInput.GetAxis("Horizontal") * dashSpeed; 
            moveVelocity.z = SimpleInput.GetAxis("Vertical") * dashSpeed;
        }
        else
        {
            moveVelocity.x = SimpleInput.GetAxis("Horizontal") * moveSpeed; 
            moveVelocity.z = SimpleInput.GetAxis("Vertical") * moveSpeed;
        }

        transform.LookAt(this.transform.position + new Vector3(moveVelocity.x, 0, moveVelocity.z));

        if (controller.isGrounded)
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                moveVelocity.y = jumpPower;
            }
        }
        else
        {
            moveVelocity.y += Physics.gravity.y * Time.deltaTime; 
        }

        controller.Move(moveVelocity * Time.deltaTime);
        
        //Enterキーでジョイスティック・キーボードによる操作を切り替える
        if (Input.GetKeyDown(KeyCode.Return))
        {
            if (joystickObject.activeSelf)
            {
                joystickObject.SetActive(false);
            }
            else
            {
                joystickObject.SetActive(true);
            }
        }
    }
}
```

InputをSimpleInputに書き変えるとバーチャルパッドのジョイスティックからの入力を受け取れます。
後ろに追加したIf文ではReturnキーの入力によってジョイスティックのオブジェクトをアクティブまたは非アクティブに切り替えます。これによってキーボードの操作とジョイスティックの操作を、ゲーム中にいつでもすぐに切り替えることが出来ます。

![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3644510/0264a2e9-9184-3b08-2196-afc20ba041e5.png)

図のようにジョイスティックが表示されるのでジョイスティックをスライドさせてキャラクターを操作できます。

# 参考
https://gihyo.jp/book/2023/978-4-297-13741-0
カスタムタグヘルパーでタグの表示／非表示切り替え（権限対応）ASP.NET CORE Custom TagHelper

## やりたいこと
・ASP.NET CORE 環境下
・Webアプリ
・ログインユーザーの権限でタグ（\<button>や\<div>)の表示／非表示切り替え
・できるだけ簡潔に実現

## 実行結果イメージ
利用者=ALL（全権限）の場合
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546646/b1b65358-5ce9-96e4-9dba-aa9e4c3d90a3.jpeg)

利用者=test1の場合
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546646/5f7799b5-7584-a485-2c43-ec6ee6c06504.jpeg)

:::note info
test2権限が割り振られていた test2ボタンと test2 divが非表示になった。
:::



## 実装方法（HTML側のイメージ）
```html
<button authcode="test1">test1 ボタン</button>  
<button authcode="test2">test2 ボタン</button>  
<button>authcodeなし ボタン</button>  

<div authcode="test1">
    test1 div
</div>
<div authcode="test2">
    test2 div
</div>
<div>
    authcodeなし div
</div>
```
:::note info
**authcode="test1"**
これが権限に対応します。**test1**利用者に対応します。

**authcode="test2"**
こちらは。**test2**利用者に対応します。
:::

## 実装方法（C#側のイメージ）
```CS
using Microsoft.AspNetCore.Razor.TagHelpers;

namespace CustomTagHelper.Pages
{
    // authcodeに対応させるタグをアノテーションで指定
    [HtmlTargetElement("div", Attributes = "authcode")]
    [HtmlTargetElement("button", Attributes = "authcode")]
    public class AuthTagHelper : TagHelper
    {
        public string authcode { get; set; } = string.Empty;

        public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            // 条件に合致しない場合はタグを非表示
            if (!IsAuthorizedToShow(authcode))
            {
                output.SuppressOutput();
            }
            return Task.CompletedTask;
        }
        private bool IsAuthorizedToShow(string authCode)
        {
            // AuthCodeとユーザー名に基づいて表示可否を判定
            // サンプルの判定ロジック
            if (User.Name == "ALL") return true;
            return (authCode == User.Name);
        }
    }
}
```
:::note info
自由なロジックで権限判定可能です。
:::

:::note info
今回は条件に該当した場合、
output.SuppressOutput();
しているのでタグの出力そのものが無くなります。
:::

## Disabled（非表示以外）
![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546646/a5976262-f04e-9911-0efa-feb14c9ebcd5.jpeg)

## 実装方法（C#側のイメージ）
```CS
public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
    // --- 非表示の場合 ---------------
    // 条件に合致しない場合はタグを非表示
    // output.SuppressOutput();

    // --- disabledの場合 ---------------
    // 'disabled' 属性を追加
    output.Attributes.SetAttribute("disabled", "disabled");
    // 必要に応じてスタイルやクラスも追加できる
    output.Attributes.SetAttribute("class", "btn-disabled");
}
```



## 完全なソース
https://github.com/masayahak/CustomTagHelper
複数ファイルの検索方法

## 複数ファイルの検索方法① for文とfindコマンドを使用
```
for variable in word-list
do 
 	find 検索場所 [オプション] variable
done
```
for文とは
variableという変数にword-listに並んだ値が順番に1個ずつ代入されていく。その1つ1つに関して、do からdone までのコマンドを実行する。word-listの中身が一通り終わったらそれでfor 文も終了する。

find コマンドとは
場所やオプションを指定してファイルを検索する

## 複数ファイルの検索方法②
```
find . -type f -name "*ファイル名1*" -or -name "*ファイル名2*"
```
findコマンドのオプション-orを記述することで、複数条件で検索が可能になる。

## ①と②の違いについて
検索するファイルが必ず存在する場合は、for文を使用することができます。1つファイルがない場合、findコマンドが1が返ってくるため、処理が中断してしまいます。そのため、for文を使うのは検索対象のファイルが必ず存在する時がいいでしょう。
一部のファイルが存在しないことが多々あるという場合、find のオプション-orは存在しなくても処理を進めます。そのためファイルが必ず存在しない場合は、-orを使用した方がいいでしょう。

## 参考
https://tex2e.github.io/blog/shell/find-name-or
rp2040用のFreeRTOSをカスタマイズする

## 1. はじめに
FreeRTOSのコンフィグレーションを変更するためには、ファイルFreeRTOSConfig.hの内容を変更する必要があります。PlatformIOにおけるRaspberry Pi Pico用のArduino環境(earlephilhower版)では、このファイルは`C:\Users\%USERNAME%\.platformio\packages\framework-arduinopico\libraries\FreeRTOS\src`以下にあり、これを変更してしまうと他のプロジェクトにも影響してしまいます。
このため、各プロジェクトごとにFreeRTOSConfig.hを変更可能にする方法を検討しました。

## 2. 方針
変更したいファイルはFreeRTOSConfig.hのみですが、includeの順番などを考慮し、以下の方針で環境を作りました。
1. プロジェクト内のlib/以下にFreeRTOSのファイル一式を格納する。
1. 変更が必要なFreeRTOSConfig.h以外はファイルをコピーしないで、元の場所にあるファイルをincludeするだけのファイルを用意する。
1. ディレクトリ構造は、元の形を踏襲する。

ソース一式は以下のリポジトリに格納しました。

https://github.com/yasuhirok-git/FreeRTOS_custom

## 3. 動作確認
@@@### 3.1 動作確認用プログラム
関数vTaskListを使用してタスク一覧を表示させるプログラムです。
```c++:main.cpp
#include <Arduino.h>
#include <FreeRTOS.h>
#include <task.h>
#ifdef USE_TINYUSB
#include <Adafruit_TinyUSB.h>
#endif
void
setup()
{
  Serial.begin(115200);
  while (!Serial)
  {
    ;
  }
  Serial.printf("build [%s %s]\n", __DATE__, __TIME__);
}

void
loop()
{
  static char buf[1024];
  vTaskList(buf);
  Serial.print(buf);
  delay(5000);
}
```
```:platformio.ini
[platformio]
default_envs = rpipico

[env:rpipico]
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
board = rpipico
framework = arduino
board_build.core = earlephilhower
board_build.filesystem_size = 0m
build_flags = 
  -D USE_TINYUSB
```

### 3.2 タイマタスクの優先度が既定値の場合
標準の設定では、タイマタスクの優先度は2となっています。
#### 設定
```c:FreeRTOSConfig.h(抜粋)
/* Software timer definitions. */
#define configUSE_TIMERS				1
#define configTIMER_TASK_PRIORITY		( 2 )
#define configTIMER_QUEUE_LENGTH		5
#define configTIMER_TASK_STACK_DEPTH	( 1024 )
```
#### 実行結果
```
-----------------------------------------
CORE0           X       4       958     1
IDLE1           X       0       231     6
IDLE0           R       0       229     5
IdleCore0       S       7       98      2
Tmr Svc         B       2*      988     4
IdleCore1       S       7       98      3
```

### 3.3 タイマタスクの優先度を変更
configTIMER_TASK_PRIORITYの値を2から4に変更します。実行させてみると、タイマタスク(Tmr Svc)の優先度が変わっていることがわかります。
#### 設定
```c:FreeRTOSConfig.h(抜粋)
/* Software timer definitions. */
#define configUSE_TIMERS				1
#define configTIMER_TASK_PRIORITY		( 4 )  ←ここを変更
#define configTIMER_QUEUE_LENGTH		5
#define configTIMER_TASK_STACK_DEPTH	( 1024 )
```
#### 実行結果
```
-----------------------------------------
CORE0           X       4       894     1
IDLE0           X       0       229     5
IDLE1           R       0       231     6
Tmr Svc         B       4*      988     4
IdleCore1       S       7       98      3
IdleCore0       S       7       98      2
```
\*のところが変更した優先度です
## 4. さいごに
すべてのソースコードをコピーしないで、FreeRTOSをカスタマイズする方法を紹介しました。pico-sdkのいくつかのサンプルで、FreeRTOSConfig.hを変更しているものがあり、それらをArduino環境(earlephilhower版)で動作させる場合に応用できます。
全角文字と半角アルファベットのあいだに半角スペースを入れる VBScript（Shift-JIS限定）

※ 数字の前後にはスペースは入れない

```vb
MsgBox AddSpace("日本のGDPは、558兆5,000億円")   '// → 日本の GDP は、558兆5,000億円
MsgBox AddSpace("ExcelとAccessでVBAを学ぼう！")  '// → Excel と Access で VBA を学ぼう！
```

```vb
'// 渡された文字列（str）の全角文字と半角アルファベットのあいだに半角スペースを入れた文字列を返す

Function AddSpace(str)

    Dim strAry(), i, ch1, ch2, ch1Byte, ch2Byte
    ReDim strAry(Len(str) - 1)

    '// 文字列を1文字ずつの配列にする
    For i = LBound(strAry) To UBound(strAry) - 1
        strAry(i) = Mid(str, i + 1, 1)
    Next
    strAry(i) = Mid(str, i + 1, 1)  '// 最後の文字

    For i = LBound(strAry) To UBound(strAry) - 1
        ch1 = strAry(i): ch2 = strAry(i + 1)
        '// 全角記号および半角の " " と "_" の前後にはスペースは入れない
        If Not EscChar(ch1) And Not EscChar(ch2) Then
            If Not (Asc(ch1) > 47 And Asc(ch1) < 58) And Not (Asc(ch2) > 47 And Asc(ch2) < 58) then
                If Asc(ch1) > 0 And Asc(ch1) < 160 Then ch1Byte = 1 Else ch1Byte = 2
                If Asc(ch2) > 0 And Asc(ch2) < 160 Then ch2Byte = 1 Else ch2Byte = 2
                If ch1Byte <> ch2Byte Then strAry(i) = ch1 & chr(32)
            End If
        End If
    Next

    AddSpace = Join(strAry, "")

End Function
```

```vb
'// 引数で与えられた文字（ch）が除外文字（全角記号および半角の " " と "_"）ならTrueを返す

Function EscChar(ch)

    EscChar = Asc(ch) > &H8140 And Asc(ch) < &H8240 Or Asc(ch) = 32 Or Asc(ch) = 95 _
              Or Asc(ch) > &H8540 And Asc(ch) < &H8840

End Function

```
Azure Automation でパブリックプレビューの Azure CLI 実行を試してみた

現時点ではパブリックプレビューなのですが、Azure Automation で Azure CLI が実行できるようになったのでやってみました。

## 検証用 Azure Automation を作成

Azure Automation を作って、マネージド ID を有効にして、リソースグループに共同作成者ロールを割り当てて、検証用のランブックを作成します。


```bash:bash
prefix=mnrauto
region=japaneast

az group create \
  --name ${prefix}-rg \
  --location $region

az automation account create \
  --automation-account-name ${prefix} \
  --resource-group ${prefix}-rg \
  --sku Free

az resource update \
  --ids $(az automation account show \
  --automation-account-name ${prefix} \
  --resource-group ${prefix}-rg \
  --query id \
  --output tsv) \
  --set "identity.type=systemassigned"

az role assignment create \
  --assignee $(az automation account show \
  --automation-account-name ${prefix} \
  --resource-group ${prefix}-rg \
  --query identity.principalId \
  --output tsv) \
  --scope $(az group show \
  --name ${prefix}-rg \
  --query id \
  --output tsv) \
  --role "Contributor"

resourceid=$(az automation account show \
  --automation-account-name ${prefix} \
  --resource-group ${prefix}-rg \
  --query id \
  --output tsv)

az rest \
  --method put \
  --url "https://management.azure.com${resourceid}/runbooks/${prefix}-test?api-version=2023-05-15-preview" \
  --body '{ 
  "properties": { 
        "runbookType": "PowerShell72"
    }, 
   "location": "japaneast"
}'
```

## Runbook に Azure CLI コードを追加

![azure-automation-cli-in-runbook-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/c5690961-4917-10bd-b0fa-577c5962cad1.png)

## Runbook の実行結果
![azure-automation-cli-in-runbook-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/29bc0eec-ccee-c28e-75d7-c19cde728541.png)

## 参考

https://azure.microsoft.com/ja-jp/updates/azure-automation-runtime-environment-azurecli-support/

https://learn.microsoft.com/en-us/azure/automation/quickstart-cli-support-powershell-runbook-runtime-environment?tabs=create-runtime-env-portal%2Ccreate-runbook-rest
Execute Anonymous Apex


# トレイルヘッド

+ [Click Code Lens Execute Anonymous Apex highlighted in pink in the below screenshot?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000PfEgQ)

:::note
Please check this video.

https://www.youtube.com/watch?v=5xs6c3mUWGw

https://www.youtube.com/watch?v=Qf2anW3hzpA

https://www.youtube.com/watch?v=GkGXmc0KCPs
:::

:::note
The step to "Click Code Lens Execute Anonymous Apex highlighted in pink in the below screenshot." is where we're getting lost. The Code Lens action is not appearing for some people, including me. I'm on an Apple iMac running VS Code. 


* In the dreamhouseappTest.apex file, select the code (Select All in this case)
* Then on Mac, hit CMD + SHIFT + P to open the Command menu
* Or on a PC, CTRL + SHIFT +P to open the Command menu
* Type "SFDX: Execute" and choose "Execute Anonymous APex with Currently Selected Text"
* The command runs in your output terminal console. 
* Scroll back up and you should see House data.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a4d9b0b4-b8d1-75e3-1f2a-87fa03648b00.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ce31b91a-4483-a039-a801-afe9561a3888.png)
:::
GoでSSG(静的サイトジェネレーター)を手作りしてみた

## 目的

この記事([Writing a Static Blog Generator in Go](https://www.zupzup.org/static-blog-generator-go/index.html))を読んでから自分でもやってみたいなと思っていたのでゴリっと作ってみました。

既存のSSGの置き換え等々は全く考えておらず、あくまでも興味駆動の開発になります。


## 作ったもの

https://github.com/K-Sato1995/go-simple-ssg

↑を使用して作った静的サイト

https://go-simple-ssg.vercel.app/

## 構成

やった事としては大枠

- マークダウン(記事のコンテンツ)＋テンプレート(HTML)を元に静的なファイルを生成する部分
- CLIで↑を利用して誰でもプロジェクトの骨組みができるようにする部分

だけなので大したことはしていないのですが全体感としては下記のようになりました。

```
./
├── parser/ (MarkdownをパースしてHTMLに変換する部分)
│   ├── mdToHTML.go
│   └── parseMetaData.go
├── builder/ (受け取ったコンテンツをテンプレートに合わせてビルドする部分)
│   ├── bundleCss.go
│   ├── copyStaticFiles.go
│   ├── generateDetail.go
│   └── generateList.go
├── simple-ssg-cli/ (projectの骨組みを作ってくれるCLI)
├─  example/ (CLIでコピーされるベースプロジェクト)
├── config/  (ユーザー側でカスタマイズできる設定ファイルとなる部分)
└── engine.go (↑の生成部分をまとめてパッケージとして使えるようにした部分)
```

使用するには↑の`simple-ssg-cli`をインストールして、`init`コマンドを実行するようにしました。

```
$ go install github.com/K-Sato1995/go-simple-ssg/simple-ssg-cli@latest
$ simple-ssg-cli init
```

をすると手元に下記のような構成の新しいプロジェクトが作成されます。

```
./
├── contents/ (コンテンツとなるマークダウンファイルの置き場)
├── templates/ (テンプレートとなるHTML/CSSファイルの置き場)
├── generated/ (生成された静的コンテンツ)
├── go.mod
├── go.sum
└── main.go
```

ので下記のように手元に作成されたプロジェクトに移動し実行すると静的コンテンツのビルド等々を行うようになっています。

```
$ cd your_project && go run main.go
```

## その他

- 自分で作ってみて、[Hugo](https://gohugo.io/)やら[Next.js](https://nextjs.org/)等々の既存のSSGは色々すごいな〜よくできてるな〜と改めて思いました😁
- テンプレートの部分を[React](https://react.dev/)やら[Svelte](https://svelte.dev/)やらにしたかったのですが、Goでやる意味感じなかったでやめました
  - [plentico/plenti](https://github.com/plentico/plenti)というSSGがテンプレート部分をSvelteを使っていましたが、内部的には[rogchap/v8go](https://github.com/rogchap/v8go)を使用してSvelteでコンパイルしていました。






## 参考にしたライブラリたち

既にSSGはGo製で素晴らしいライブラリが多く存在しているので、作成にあたってコードや構成等々を参考にしました。

- [Hugo](https://gohugo.io/)
- [zupzup/blog-generator](https://github.com/zupzup/blog-generator)
- [plentico/plenti](https://github.com/plentico/plenti)
- [darccio/zas](https://github.com/darccio/zas)
- [zserge/zs](https://github.com/zserge/zs)
開発者コンソールを使ったSalesforceのレコード削除

開発者コンソールを使ったSalesforceの削除についてまとめました。

初期のデータ移行の検証などで、まとまった量のレコードを削除したい場合、Salesforceの画面上から手動で1つ1つ削除をしていくのは大変です。
そんな時に便利なのが開発者コンソールです。
とはいえ、戻すことも大変なので、必ずSandboxなどで少量のレコードで確認をしてから削除しましょう！

# 開発者コンソールから削除できる

### 右上の歯車マークから「開発者コンソール」を選択
![01開発者コンソール開く.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/e1e2a866-8737-e8ee-1442-27bc196a7ab5.png)

### [Debug] → [Open Execute Anonymous Window ] をクリック
![02開発者コンソール開いた.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/140929f4-d790-63d8-7902-d3aeb6f782b9.png)

### [Enter Apex Code ] ウィンドウが開く
![03開発者コンソールからApex.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/4afc4e89-3d71-e7c0-ec6e-dec5ca7af552.png)

https://help.salesforce.com/s/articleView?id=sf.code_dev_console_execute_anonymous.htm&type=5

### 削除方法

```
// フォーマット例
List<削除したいオブジェクトのAPI名> var = [SELECT Id FROM 削除したいオブジェクトのAPI名];
delete var;
```

例えば取引先オブジェクトのレコードを全件削除したい場合はこういう感じです。
```
// 取引先
List<Account> acc = [SELECT Id FROM Account];
delete acc;
```

### [Evecute]ボタンを押下して、取引先を削除
このままコピペして貼り付けるとこんな感じです。

![04取引先削除.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/571cd8da-405c-8ed9-83b0-2540e63b46c9.png)

削除したいレコードを絞り込みたいときは、WHERE句を追加します。

例えば、本日作成した取引先のみを削除したい場合です。

```
// 今日作成した取引先を削除
List<Account> acc = [SELECT Id, Name FROM Account WHERE CreatedDate = TODAY];
delete acc;
```

取引先に「テスト」が含まれるレコードを削除したい場合はこうです。

```
// 取引先に「テスト」が含まれるレコードを削除
List<Account> acc = [SELECT Id FROM Account WHERE Name like '%テスト%']; 
delete acc;
```

もちろん、他のオブジェクトにも応用できます。
せひSandboxなどで、色々と試してみてください。

## 削除期間

レコードを削除しても Salesforce から完全に削除されるわけではなく、復元できるように 15 日間はごみ箱に置かれます。15 日を経過すると削除された項目がごみ箱から消去され、消去されたら元に戻すことはできません。

https://help.salesforce.com/s/articleView?id=sf.home_delete.htm&type=5

# 開発者コンソール以外の削除方法

開発者コンソール以外にも、手動削除、一括削除、データローダーでの削除があるかと思います。

#### ①一括削除

[設定] から、[クイック検索] ボックスに「一括削除」と入力し、[一括削除] を選択し、削除するレコードのタイプへのリンクをクリックします。
一括削除できるレコードタイプとして、ケース、ソリューション、取引先、取引先責任者、リード、商品、活動があります。

![05一括削除.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/35933e5a-9b89-f584-465f-b1427fc029c5.png)


https://help.salesforce.com/s/articleView?id=sf.admin_massdelete.htm&type=5

#### ②データローダーでの削除

参考までに、データローダーを使用して、Salesforce 上のファイルを一括削除する方法について説明されてます！

https://help.salesforce.com/s/articleView?id=000387028&language=ja&type=1

削除したいレポートを作成して、データローダーと組み合わせて作業すると捗ります。

# 最後に
今回は開発者コンソールを使ったSalesforceの削除についてまとめました！
ぜひ、削除の目的や用途によって使い分けしてみてください。
cursorをmacのターミナルから起動する

最近cursorが流行っていますね。

vscodeの時は、ターミナルで作業したいディレクトリに移動し、"code ."とコマンドを打つとvscodeが起動できる設定があったのですが、cursorでも同じことができるか調べてみました。

結論から言うと、可能です。

今回は設定方法を紹介します。

## cursorでコマンドパレット開く
cursorを起動し、"command"+"shift(⬆︎)"+"p"を押してください。
するとcursor画面の上にコマンドパレットが起動します。
![名称未設xさcsc定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332453/57b5d03f-5d44-7ab9-9308-e23e0c80494a.png)

## cursorコマンドの検索
開いたコマンドパレットに、"shell"と入力して検索します。
![名称未設shell定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332453/e5fc5f15-87cd-c6cf-6d73-1527666aa11f.png)

いくつか候補が出てきて、その中に"shell Command :Instal 'cursol' command"があるので
これを選択するとインストールが開始されます。成功すると下記のポップアップが表示されます。
![名称未っっっっq設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332453/43215646-13cc-c584-a0fe-88248cbbac3b.png)
以上で設定完了です。

## 動作確認
試しに、編集したいディレクトリにターミナルで移動した上で、"cursor ."のコマンドを実行します。
cursorが立ち上がることが確認できました。
![名称未っs設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332453/dbccc825-8185-9a48-2a2f-0f0fd4eb7b9e.png)

以上です。
gem `better_errors` の使い方【Ruby on Rails】

# はじめに
`bettr_errors`はRubyのgemで、特にRails開発において有用なツールだそうです。
コマンドを覚える必要もなく、開発環境においては入れるだけ得！なgemです。
# 使い方
特徴
- 詳細なエラーページを表示してくれる
- エラーが発生した場所でコードを試行できる
- エラーが発生した時点の変数を確認できる
- エラーが発生したソースコード周辺を表示してくれる

以上の特徴により、問題の原因を突き止めやすくなります。
## インストール
### 1. `Gemfile`に追記
```rb
group :development, :test do
  # ...省略

  gem 'better_errors'
  gem 'binding_of_caller'

  # ...省略
end
```
`binding_of_caller`は、エラーが発生したコードの呼び出し元も教えてくれるgemです。
`better_errors`と一緒に使用されることが多い。
### 2. 追記したgemのインストール
```bash
$ docker compose run web bundle install
```
### 3. （リモートアクセスの場合）どのIPからのアクセスを許可するか書く
Dockerを使用している場合も同様
`config/environments/development.rb`ファイルに追記
```rb
Rails.application.configure do
  BetterErrors::Middleware.allow_ip! "0.0.0.0/0"

  # ...省略
end
```
### 4. サーバーの再起動
Dockerの場合は`docker compose up`を一度終了し、再度`docker compose up`を行う。
## コマンド・メソッド
`better_errors`はエラーページを拡張するgemであり、新しいコマンドやメソッドを追加することはありません。
### 雑記 `raise` メソッドで`better_errors`の挙動を確認する
`raise`メソッドによりエラーを発生させることで、`better_errors`がどのようなエラーページを表示するのかを簡単に確認することができます。

# 終わりに
以下の疑問と回答で締めさせていただきます。
## Q. better_errorsは標準搭載されていても良いように思いますが、なぜ標準搭載されないのでしょうか？ 
開発環境でのみ有用で、サービス提供においては不要だからでしょうか？
## A. `better_errors` がRubyやRailsの標準搭載されていない理由にはいくつかの考慮点があります。
> その中でも特に重要なのは、開発環境と本番環境でのニーズの違い、セキュリティの懸念、および柔軟性の維持です。
> 1. **開発環境と本番環境のニーズの違い**:
>     
>     - `better_errors` は開発環境でのデバッグを効率化するために設計されています。開発者はエラーの原因を迅速に特定し、修正するために詳細な情報を必要とします。
>     - 一方、本番環境では、セキュリティやパフォーマンスの観点から、エラー情報の詳細な表示は避けるべきです。本番環境のエラーハンドリングは、ユーザーに対する適切なフィードバックとログ記録に焦点を当てるべきです。
> 2. **セキュリティの懸念**:
>     
>     - `better_errors` はエラーに関する詳細な情報を提供するため、不正なアクセスによる情報漏洩のリスクがあります。本番環境ではこのような詳細情報を外部に露出させることは好ましくありません。
> 3. **柔軟性の維持**:
>     
>     - RubyやRailsは柔軟性とカスタマイズ可能性を重視しています。全ての開発者やプロジェクトが同じツールやライブラリを必要とするわけではないため、標準搭載することは必ずしも最適ではありません。
>     - プロジェクトの要件やチームの好みに応じて、異なるデバッグツールやエラーハンドリングのアプローチを選択できるべきです。
> 4. **パフォーマンスと依存関係の管理**:
>     
>     - 標準搭載すると、そのツールの依存関係やパフォーマンスへの影響をすべてのユーザーが負うことになります。特に大規模なフレームワークでは、余分な依存関係を最小限に抑えることが重要です。
> 
> 結論として、`better_errors` は開発者が必要に応じて簡単に追加できるオプションとして提供されており、これによりRubyやRailsは幅広いニーズに柔軟に対応することができます。このようなアプローチは、開発環境のカスタマイズ性とセキュリティ、パフォーマンスのバランスを取る上で理想的です。

# 参考
mysqlを使い始めるまでのチートシート（Windows）

mysqlを使い始めるまでのやりかたもよく忘れるのでチートシートにしました


前提：XAMPP for Windowsを使用
# 準備
： XAMPPコントロールパネル上で、MySQLモジュールの横にある「Start」ボタンが表示されているかどうかを確認
	以下はXAMPPのコマンドライン入力、XAMPPコントロールパネルにあるshellをクリックを使う（PowerShellとかではないので注意！）XAMPPのコマンドライン入力はmysqlへのパスが通っている

### まずはmysqlがインストールされているか確認
	mysql --version

### 接続
	mysql -u root -p
	デフォルトでパスワードは入れてないはずなのでそのままリターンでok

### データベースの一覧表示:
	SHOW DATABASES;

### データベースを選択:
	USE [データベース名];
	例: USE test;

### テーブルの一覧表示:
	SHOW TABLES;

### テーブルの構造を表示:
	DESCRIBE [テーブル名];


### データベースの新規作成
    CREATE DATABASE データベース名;

### データベースの削除
    DROP DATABASE データベース名;

### テーブルの作成

たとえば以下のような構造のテーブルを作るには

    +---------------+--------------+------+-----+---------+----------------+
    | Field         | Type         | Null | Key | Default | Extra          |
    +---------------+--------------+------+-----+---------+----------------+
    | id            | int(11)      | NO   | PRI | NULL    | auto_increment |
    | username      | varchar(50)  | NO   | UNI | NULL    |                |
    | password_hash | varchar(255) | NO   |     | NULL    |                |
    +---------------+--------------+------+-----+---------+----------------+

--------------------
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL UNIQUE,
        password_hash VARCHAR(255) NOT NULL
    );



### データを挿入する
    INSERT INTO users (username, password_hash) VALUES ('yamada', '12345');
Python：浮動小数点数と呼ぶ理由について


　本日は ｢浮動小数点数と呼ぶ理由｣ について書いてみます (o'(ェ)')🍙


## 【浮動小数点数と固定小数点数について】

　Python 初学者な方において ｢<font color="#FF0000">**小数**</font>｣ のことを, わざわざ ｢浮動小数点数｣ と呼んでいるのは ｢なぜ｣ だろう・・・と思われている方が, 多いと感じております。

　コンピュータにおける ｢小数の表現方法｣ には ｢<font color="#FF0000">**浮動小数点数**</font>と<font color="#FF0000">**固定小数点数**</font>｣ の ｢２つの表現方法｣ があります。このうち Python においては ｢浮動小数点数｣ を使用する仕組みに成っていますので, 単に ｢小数｣ とは言わずに, 厳密に ｢浮動小数点数｣ と, 呼んでおります。
<br>

## 【浮動小数点数について】

　浮動小数点数は, 英語で <font color="#FF0000">**Floating Point Numbers**</font> と言います。その直訳的な日本語が ｢浮動小数点数｣ な訳ですが ｢感覚｣ としましては ｢<font color="#FF0000">**変動**</font>小数点数｣ のようなイメージです。つまり, 小数点以下の桁数が, 数値に応じて ｢<font color="#FF0000">**変動(浮動)**</font>｣ できることが ｢浮動小数点数の特徴｣ です(同じ意味ですが, 小数点の位置が数値に応じて変動するという言い方もされます)。言い換えてみますと ｢小数点以下の桁数において<font color="#FF0000">**変動可能**</font>｣ ということです。
 <br>

 **＊ 補足：｢<font color="#FF0000">**変動可能**</font>｣ という表現において**
　｢変動可能｣ という表現は ｢変動不能：固定｣ という表現と ｢比較しやすくするために｣ 使用しております。もし ｢変動可能｣ という表現に ｢違和感｣ を感じる場合は ｢<font color="#FF0000">**精度において向上することも低下することも可能**</font>｣ と, 解釈していただけると嬉しく思います(また, この ｢向上と低下｣ においても ｢相対的な精度｣ と解釈していただけると嬉しく思います)。
<br>

### ① 浮動小数点数型データについて

　基本的に ｢小数点｣ を使用しますと ｢浮動小数点数｣ として, つまり float 型として, 使用できます。その他 / (スラッシュ：除算演算子) を使用した場合等においても float 型として処理されます。その理由については, 以下を参考にしていただけると, 嬉しく思います。
<br>

https://qiita.com/toKoinX/items/032316ca77e28b80c142

<br>

### ② 実際に確認してみましょう

　<font color="#800080">type</font>() 関数を使用してみますと, データ型が float 型であることを確認できます。

```python
#代入と型の確認
x = 1.
print(type(x))

#実行結果
<class'float'>
```
<br>
<br>

## 【固定小数点数について】

　固定小数点数は, 英語で <font color="#FF0000">**Fixed Point Numbers**</font> と言います。小数点以下の桁数が ｢<font color="#FF0000">**固定**</font>｣ していることが ｢固定小数点数の特徴｣ です。言い換えてみますと ｢小数点以下の桁数において<font color="#FF0000">**変動不能(固定)**</font>｣ ということです。この ｢変動可能や変動不能(固定)｣ の詳細においては, 精度の話や, メモリ効率の話や, 表現範囲の話についての利点等によるもので, 少しマニアックで難しい内容になるため, 今回においては, 割愛させていただきます。

### ① 固定小数点数型データについて

　Python においては ｢固定小数点数型データ｣ という ｢データ型｣ は, 用意されておりません。~~以上になります。~~
 
　但し, ライブラリの中に在る decimal モジュールの Decimal クラスを使用しますと ｢固定小数点数の計算に近い方法｣ で, 処理(10進小数処理)をすることが可能なようです。ぼくの記事は ｢初学者な方を応援することを目的｣ としておりますが, 初学者以上な方(中級者な方/上級者な方)にも読んでいただけているようですので,  decimal モジュールにおいては, 以下に詳細がございます。
<br>

https://docs.python.org/3/library/decimal.html

<br>
<br>
　本日も, 最後まで読んでいただき, ありがとうございました (o'(ェ)')_🍜✨
<br>
<br>
STM32C011J4M7で遊ぶ、まとめ


STM32C011J4M7で遊ぶ、まとめ


Arduino Lチカ STM32 STM32C011 SOP8


![o_cop897.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/68d016e3-76e2-f58a-a239-719574abe29c.jpeg)



https://qiita.com/caa45040/items/0a49af2c385bb3f3dd1f


https://qiita.com/caa45040/items/8e584b7ebb1d2d4e0dcf


https://qiita.com/caa45040/items/3ab1e5376ec25a763fde


●勝手に応援1

https://twitter.com/search?q=stm32c011f4&src=typed_query

●勝手に応援2

https://shippoiincho.github.io/posts/13/

●勝手に応援3


https://twitter.com/search?q=140%E5%86%86%E3%81%8F%E3%82%93%E5%8B%95%E3%81%84%E3%81%9F%E3%81%82%E3%81%82%E3%81%82%E3%81%82&src=typed_query


●勝手に応援4


https://ameblo.jp/pta55/entry-12838948374.html


なんかしらない広告が出ていた　オープンハードでOLEDやっている見たい
旧東北パイオニア事業所らしい

https://www.soar-tech.co.jp/
You don't have access to this record. Ask your administrator to help or request access.



+ [Why am I getting this message? I am the administrator - Flow Lookup Component - You don't have access to this record. Ask your administrator to help or request access.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8uuGSAR)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/1f225a82-1974-acc5-584c-ad815b82d4bc.png)


:::note
it took some time and research, but finally I could fix the problem for my case.

The thing is, you need to have write access to the field you use for the drop down. 

In my case I tried with a master-detail relationship field where re-parenting was not allowed, so it did not work. When I used a field where I have (and anyone who will use the flow has) writing permissions, it worked. 

As you wrote "The field level Security for CreatedbyID Visible and Read Only" this might be the issue in your case as well. Try to find any user field where you have writing permissions (it can be any User field, you can write the result in a variable to use it) and try if it works. I'd love to know if it solved your issue!


時間と調査がかかりましたが、最終的に私の場合の問題を解決することができました。

問題は、ドロップダウンに使用するフィールドへの書き込みアクセス権が必要であるということです。

私の場合は、再ペアレント化が許可されていない主従関係フィールドで試したため、機能しませんでした。私が書き込み権限を持っている (そしてフローを使用する人は誰でも持っている) フィールドを使用すると、機能しました。

「CreatedbyID の表示および読み取り専用のフィールド レベルのセキュリティ」を書いたように、これはあなたの場合にも問題になる可能性があります。書き込み権限のある任意のユーザー フィールドを見つけて (任意のユーザー フィールドにすることができ、結果を変数に書き込んで使用できます)、それが機能するか試してください。あなたの問題が解決したかどうか知りたいです!
:::

+ [Why am I getting this message? I am the administrator - Flow Lookup Component - You don't have access to this record. Ask your administrator to help or request access.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8uuGSAR)

:::note
I had the same error but to resolve it try to copy API name and Object API name from the field and relationship page and pest it into screen flow page. It will work.


同じエラーが発生しましたが、それを解決するには、フィールドとリレーションシップのページから API 名とオブジェクト API 名をコピーし、画面フロー ページにペストしてみました。それが動作します。
:::





# 古い投稿

+ [You don't have access to this record. Ask your administrator for help or to request access](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T4YSESA3)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/424146f9-671a-6119-918a-9db40b512386.png)

# 未解決

+ [Salesforce Agile Accelerator : Users can't see sprint wall](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000MXybZ0AT)

+ [「Get Experience Details」アクションを編集できません。アクション タブで「Get Experience Details」を開こうとするとエラーが発生します。どうか私を助け、この課題について指導してください。](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000SVkMw0AL)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d09c5c20-ff30-4cbc-9ab3-58c636cb3249.png)
【CommonLisp】クラス名について思うこと2つ


## ひとつめ（インスタンス名とクラス名は同じでもよいのか？）

```common-lisp
(defclass person ()
  ((name :initarg :name
         :accessor person-name)))

(defun main ()
  (let ((person (make-instance 'person :name "Tako")))
    (format t "~a~%" (person-name person)) ; Tako
    (let ((person (make-instance 'person :name "Ika")))
      (format t "~a~%" (person-name person))))) ; Ika
```

きちんと区別されている。ふむ、相当賢いな。

## ふたつめ（命名規約は？）

とは言え、インスタンス名とクラス名が同じだと区別がつきにくい。
Javaなどでは小文字大文字で区別ができるが…
**CommonLispはすべて小文字使えよなあ！みたいな同調圧力がある。**
どうしたものか…

どうしようもない。

素直に大文字使えばいい！！

CommonLisp小文字愛好家から後ろ指をさされようが、私はクラス名に大文字を使うのがよいと思う。

```common-lisp
(defclass Person ()
  ((name :initarg :name
         :accessor person-name)))

(defun main ()
  (let ((person (make-instance 'Person :name "Tako")))
    (format t "~a~%" (person-name person)) ; Tako
    (let ((person (make-instance 'Person :name "Ika")))
      (format t "~a~%" (person-name person))))) ; Ika
```

なお、Lispリーダーでシンボル名はデフォルトですべて大文字に変換されているのは知っています。

```common-lisp
(readtable-case (copy-readtable)) ; :UPCASE
```

## 余談

ちなみに私はCLOSのクラスが嫌いです。（構造体でいい。）
でもメソッドは便利だと思います。
【Cookie】SameSite属性に設定できる値について

CookieのSameSite属性には以下の値を設定できます。

| 値 | 説明 |
| ------------ | ---- |
| Strict       | 同じドメインへのリクエストにのみCookieをセット。他のドメインへのリクエストを送る際にはCookieはセットされない。 |
| Lax          | 同じドメインへのリクエストに加え、top-level navigation(アドレスバーに表示されているURLの変更が伴う遷移) でGETメソッドであれば、他のドメインへリクエストを送る際にもCookieをセットする。 |
| None         | 全てのリクエストに対してCookieをセットする。併せてSecure属性を有効にする必要がある。 |
パルワールドサーバーのアップデートとゲームバランスの調整方法について

## 概要

- 新しいバージョンが出た場合のアップデート方法
- ゲームバランスを調整をする方法

について、まとめます

なお、インストールの方法は、以下にまとめており、
/home/steam/dedicated-server/palworld にインストールしています

- パルワールドサーバーの構築とデーモン化
  - https://qiita.com/teityura/items/48a39c4f584fbe3dc419

## アップデート方法

インストールコマンドと同じです

``` log
su - steam

mkdir -p ~/dedicated-server/palworld
steamcmd +login anonymous \
  +force_install_dir ~/dedicated-server/palworld/ \
  +app_update 2394010 validate +quit
```

:::note info
- インストール済なら、アップデート
- インストール前なら、新規インストール

セーブデータが消えたりすることもないです
:::

## ゲームバランスを調整をする方法

- 設定ファイル <= これを修正します
  - /home/steam/dedicated-server/palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
- デフォルトの設定ファイル <= これを参考にします
  - /home/steam/dedicated-server/palworld/DefaultPalWorldSettings.ini

:::note warn
プロセスを停止してから、設定ファイルを編集するようにしてください

プロセス稼働中 PalWorldSettings.ini を常に上書きしてるようで、
停止せずに編集したら、変更内容が破棄されてしまいます
:::

### 自鯖の変更内容

``` log
Setting                          | Value                     
-------------------------------- | --------------------------
DayTimeSpeedRate                 | 0.700000                  
ExpRate                          | 1.500000                  
CollectionDropRate               | 2.000000                  
CollectionObjectRespawnSpeedRate | 2.000000                  
EnemyDropItemRate                | 2.000000                  
PalEggDefaultHatchingTime        | 1.000000                  
ServerName                       | Teityura's Palworld Server
AdminPassword                    | ****                      
RCONEnabled                      | True                      
```

## 参考

- アップデート情報確認用
  - パルワールド/Palworld 公式（Palworld_JP）さん / X
    - https://twitter.com/Palworld_JP
  - Palworld（Palworld_EN）さん / X
    - https://twitter.com/Palworld_EN
- パラメータ確認用
  - パルワールド テックガイド - ゲームバランスを調整する
    - https://tech.palworldgame.com/optimize-game-balance