OmniAICreator/Qiita-1.07M huggingface dataset:
【Laravel】外部キー制約

### バージョン
Laravel9
Inertia

### 今回やること

・顧客(customer)テーブルの顧客ID
・購入履歴(purchases)テーブルの顧客ID

上記を外部キー制約で紐づけます。

# migrationファイルの記述

```php:create_purchases_table.php
        Schema::create('purchases', function (Blueprint $table) {
            $table->id();
            $table->foreignId('customer_id');
            $table->boolean('status');
            $table->timestamps(); 
        });
```

これでpurchasesテーブルのcustomer_idカラムを生成し、customerテーブルのIDで紐づけられました。
customerテーブルに存在しているIDしか登録できない設定になっています。

# 付加設定

```php:create_purchases_table.php
$table->foreignId('customer_id')->constrained()->onUpdate('cascade');
```
上記のように付け加えると、顧客情報が変更された時に同時にpurchasesテーブルの情報も自動更新される設定を付与できます。
OCamlでつくりたかったcliツールをRustでつくった経緯と感想

## 成果物

https://github.com/araera111/manual-rollback-kun-rs


rustを3日くらい勉強してみて、cliツールを作成してみました。

## manual-rollback-kunとは
cliツールです。
コマンドは
add
deploy
delete
save
rollback
があります。

addは新しい設定ファイルを作成します。
deployは設定ファイルに応じてsourceからdeployへファイルがコピーされます。
deleteはaddで追加した設定を削除できます。
saveはsourceにあるファイルをすべてsave/project_name/YYYY-MM-DD-HH-mm-ss形式で保存ます。
rollbackはsave/project_nameにある日付を選択したら、保存していたデータがdeployにファイルがコピーされます。

というようなツールをつくりました。
コンテナ化しろという話ですが……まあ、仕事上、どうしようもない環境もこの世にはあることだなぁ(感嘆)。

## そもそもOcamlでつくりたかった

僕の母語は日本語と関西弁とJavaScriptとTypeScriptです。
TSなら簡単につくれるでしょうが、JavaScriptはネイティブバイナリにするのが面倒くさいという弱点があります。
(pkgとかnexeとかあるけど)
ロールバックとかSaveとかしたい環境なら必ずnodeは入っているでしょう。
それでも、環境に依存しない、WinでもMacでもLinuxでも動くネイティブバイナリにしたいなぁ、という欲望がずっとありました。

## Ocamlは良い言語だ……が
そんなわけでOcamlを勉強してツールをつくっていました。
もともとFsharpをちょっと勉強していたので簡単でした。
(FsharpとOcamlはスウェーデン語とデンマーク語くらいの違いしかありません)

関数型言語ということもあり書き味は良いし、しかも.netも要らないし、どんな環境でも動くようにコンパイルできるし。
良いことずくめじゃないですか。書いていて楽しい素晴らしい言語……。
なのですが……。

## Ocamlはライブラリが少ない気がする
とにかくライブラリを探すのが大変なんですね。
使用者が少ないからなんでしょう。opamとかいろいろ検索してもほしいライブラリが見つからんのです。
そうなると自分でつくるしかない。

僕はcli上で質問したいわけです。node.jsでいえばinquirer.jsのようなライブラリがほしい。
save先とかproject_nameとか聞いて、tomlに保存したいわけです。
ところがなんというかあるにはあるけど微妙で更新されていないライブラリしかないわけです。

自分でつくるしかないのが楽しい言語ですね。DIYみたいな。他言語であるこういうライブラリをOcamlで実装したらどうなるか、みたいな。

そんなわけでinquirer_ocというocaml版のinquirer.jsみたいなツールをつくったりopamに公開したりしました。

https://github.com/araera111/inquirer_oc

しかしね、やっぱりライブラリがほしいわけです。
あと使用者が少ないのでbing aiとかgithub copilotの精度が悪いのね。
提示されたコードがまあまあ動かない。

## Goも良い言語なんだが
・いろんな環境にコンパイルできる
・ライブラリも多い
・使用者も多い

昔ちょこっと書いてたこともあるんですが、関数型っぽい書き方は難しいんですよね。やっぱり。
fp-goとかあるけどなぁ……。

ScalaとかFsharpは、やっぱり環境が必須なのがね……。


## 紆余曲折の果てのrust
・いろんな環境にコンパイルできる
・ライブラリも多い
・使用者も多い
・ちょっと関数型っぽい風味がする
で良いんですけど、やっぱり書いてて若干めんどい部分があるなぁ……という。
型推論とか弱いしね。いちいち型書かずとも、もうちょい推論してくれても良くないか、と。

そんなに高速に動作しなくていいから、もうちょっと簡単に書けない？　
みたいなことを思うわけです。

所有権とかなくしてGCで処理してくれたらもっと簡単に書けませんか？　みたいな。
でもそうするとrustの良さってなくなるよね。きっと。

JavaScriptくらいの速度でいいんで、関数型っぽく書けていろんな環境向けにコンパイルできる良い言語ってないんですかねぇ……。
ないよなぁ……。ないんだよなぁ……。

Electronとかさ、とにかくファイルサイズが大きいよな。
tauriもWebViewとか入れたらそこそこ大きくなっちゃうけど。

まあ、もうしばらくrustで書いているうちに楽しくなってくるかな、という気もしております。
いろいろつくってみよう。

fsharpのNativeAOTとかいいんでないか？　どうなんや？
【Swift】ターミナルコマンドを実行する

# はじめに
macOSアプリでターミナルのコマンドを実行したのでやり方を記録しておきます。

:::note warn
**注意**
macOSでしか機能しません
:::

# Slackアプリを開くコマンド
### ターミナルコマンドだと
```
open /Applications/Slack.app
```

### Swiftだと
```swift
import Foundation

let process = Process()
process.launchPath = "/usr/bin/open"
process.arguments = ["/Applications/Slack.app"]
process.launch()
process.waitUntilExit()
```

# デスクトップのファイル一覧を表示するコマンド

### ターミナルコマンドだと
```
cd /Users/miyamototaishin/Desktop
ls -l
```

### Swiftだと
```swift
import Foundation

let process = Process()
process.launchPath = "/usr/bin/env"
process.currentDirectoryPath = "/Users/miyamototaishin/Desktop"
process.arguments = ["ls", "-l"]
process.launch()
process.waitUntilExit()
```

# おわり
なんでもできると思うので色々試してみてください！！
Perlでファイルからの読み込み時に起こったバグ for M1Mac


## 問題
M1 Mac上でperlを使用した特定ファイル(今回の場合は"test.list")の読み込みを行おうとしたところopen関数で正しくファイル名が認識されずにいた。
具体的には、`open (my $IN, $input_file) or die "cannot open $input_file \n";`でdieが毎回選択されてしまいその時点で処理が終わってしまう。

## 原因
相対パスでの指定が原因だった。

## 解決策
どうやらファイル名を絶対パスで指定する必要があったみたい。。。
ということで`my %DataHash = mkDataHash("test.list");`のファイル名を絶対パスで指定してあげる。
結果として、`my %DataHash = mkDataHash("/Users/ユーザー名/....../test.list");`と書き直してあげたら解決！


```perl:perl
#!/usr/bin/perl

use strict;
use Encode;
use utf8;

main();

sub main
{
    my $s_code = $ARGV[0];

    # test.list のデータをハッシュに格納する関数 
    my %DataHash = mkDataHash("test.list");
    my $f_name = $DataHash{$s_code};
    print "$s_code -> $f_name\n";
}

sub mkDataHash
{
    my $input_file = $_[0];
    my %data_hash;
    open (my $IN, $input_file) or die "cannot open $input_file \n";

    while(my $line = <$IN>)
    {
        chomp($line);
        my $str = decode_utf8($line);
        my @cord_file_name = split(/,/, $str);
        $data_hash{$cord_file_name[0]} = $cord_file_name[1];
    }
    close ($IN);

    return %data_hash;
}
```

### 補足
試しにUbuntu22.04 LTSで同じコードを試してみたところ相対パスでも問題なくファイルを読み込めました。Windowsの方はわからないがMacの方がperlでファイル操作行う際は注意が必要ですね！
LDAP認証のGroup制限の違い

# 概要
アプリケーションによってLDAP認証のGroup制限が微妙に異なるため、違いを整理する。

## SSSD(Linux)
/etc/sssd/sssd.conf のsimple_allow_groupsでグループ名を指定する。

```
$ sudo vi /etc/sssd/sssd.conf
...
access_provider = simple
simple_allow_groups = ldapusers
...
```

## Jenkins
Advanced Server Configuration の User search filterで指定する。

```
(&(uid={0})(objectClass=posixAccount)(memberOf=cn=jenkinsusers,ou=Groups,dc=example,dc=com))
```

## Gitbucket
Additional filter conditionで設定する。

一番外側の丸括弧は不要
https://github.com/gitbucket/gitbucket/issues/1810

```
&(objectClass=posixAccount)(memberOf=cn=gitbucketusers,ou=Groups,dc=example,dc=com)
```

## GitLab CE
/etc/gitlab/gitlab.rbのuser_filterで設定する。
YAMLのためインデントに注意する。

```
$ sudo vi /etc/gitlab/gitlab.rb
...
     user_filter: '(&(objectClass=posixAccount)(memberOf=cn=gitlabusers,ou=Groups,dc=example,dc=com))'
...
```

## Redmine
LDAPフィルタの項目で設定する。

```
(&(objectClass=posixAccount)(memberOf=cn=redmineusers,ou=Groups,dc=example,dc=com))
```

同時に "ユーザーが存在しなければ作成" のチェックボックスをOnにする。
初回ログイン時にLDAP認証後に自分自身でRedmineユーザーを作成する画面が表示される。
Deno KVですべてのデータをエスクポート【Deno Deploy】

https://dash.deno.com/playground/k-v

```bash
wget https://k-v.deno.dev
```

prefixを空配列にすることですべてのデータを取得できます。

```typescript
const entries = []
for await (const entry of db.list({ prefix: [] })) entries.push(entry)
```


# 例

```bash
# すべてのデータを取得
curl https://k-v.deno.dev

# ユーザーの一覧のみ取得
curl https://k-v.deno.dev/users

# 特定のユーザーを取得
curl https://k-v.deno.dev/users/1

# ユーザーを追加
curl https://k-v.deno.dev/users/1 -d '{"name":"John Doe","age":13}'

# ユーザーの属性を修正
curl https://k-v.deno.dev/users/1/books/1 -d '{"name":"アンパンマン","price":980}'

# ユーザーを削除
curl -X DELETE https://k-v.deno.dev/users/1

# ユーザーの属性を削除
curl -X DELETE https://k-v.deno.dev/users/1/books/1
```

# ソースコード

```typescript
import { serve } from "https://deno.land/std@0.155.0/http/server.ts";

const db = await Deno.openKv();

serve(async (req: Request) => {
    const path = new URL(req.url).pathname.slice(1)
    const key = path ? path.split('/') : []
    if (req.method === 'GET') {
        const { value } = await db.get(key)
        if (value) return new Response(value, { headers: { 'Access-Control-Allow-Origin': '*' } })
        const entries = []
        for await (const e of db.list({ prefix: key })) entries.push(e)
        return new Response(JSON.stringify(entries, null, 2), { headers: { 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json; charset=UTF-8' } })
    } else if (['POST', 'PUT'].includes(req.method)) {
        db.set(key, await req.text())
    } else if (req.method === 'DELETE') {
        db.delete(key)
    }
    return new Response('', { headers: { 'Access-Control-Allow-Origin': '*' } })
})
```
JavaScriptをドットインストールで学ぶ①

そろそろ、Dockerで環境構築にも飽きてきたのでプログラミング学習。
実行環境はDocker composeで作成。
+ プロジェクトディレクトリの作成
~~~
mkdir js_test
cd js_test
~~~

+ compose.ymlの作成
~~~
vim compose.yml
~~~
1. nginxのイメージを使用
1. コンテナ名は「web」に設定
1. ドキュメントルートにカレントディレクトリにあるhtmlディレクトリを指定
1. ホストOSの8080ポートにコンテナの80ポートをマッピング
<details><summary>compose.ymlの内容</summary>

~~~yaml
services:
 web:
  image: nginx
  volumes:
   - ./html:/usr/share/nginx/html
  ports:
   - "8080:80"
~~~

</details>

+ htmlディレクトリと学習用ファイル作成
~~~
mkdir html
cd html
vim index.html
vim main.js
~~~
+ コンテナ起動（プロジェクトディレクトリで実行する）
~~~
docker compose up -d
~~~
これで学習環境の完成。
学習するときはmain.jsをかきかえながら、適宜「localhost:8080」へアクセスして結果を確認する。

+ console.log()で変数を評価する方法
出力内容を``で囲んで、変数を{}で囲って、$を直前に置く。
~~~js
console.log(`Hoge ${i}`);
~~~
+ スプレット構文
下記例では、配列の中で別の配列を展開して、新しい追加の値として代入している。
~~~~js
const hoge = [10, 20];
const foo = [30, 40, ...hoge];
//下記のような記載だと直接配列が代入されてしまう。
const foo2 = [30, 40, hoge];
console.log(foo);//[30,40,10,20]
console.log(foo2);//[30,40,Array(2)]
~~~~
【VB.NET】開発の助けになる記事まとめ


# Introduction

**「レガシー環境は資料が少ない！」**
**「この記事に、当時お世話になったサイトをまとめます！」**
**「正直現場のソースコードが一番参考になるよ！」**

今でこそモダンな環境で働けておりますが、1 年前までは`VB.NET`等の割とレガシーな環境で要件定義〜運用保守を行っていました。

`VB.NET`では公式ドキュメントが充実しているわけでもなく、`Qiita`のように参考となるような記事が揃っているわけでもありません。
当時書いたこともなかった`C#`のコードを翻訳した方が早いほどでした。

書籍も数えるほどしか出ておらず、体系的ですが現場のコードでは役に立ち辛いものや公式ドキュメントまとめのようなもので、実践的なものは見つけられませんでした。

本記事では、`VB.NET`開発をする上でお世話になったサイトをまとめます。
特にお世話になった順で記載するため、迷ったら上の方のサイトから探してみてください。

`VB.NET`以外のレガシーシステムにおいても同様の問題が発生しているかと思うため、是非参考にしていってください。

**本記事が少しでも読者様の学びに繋がれば幸いです！**
**「いいね」をしていただけると今後の励みになるので、是非お願いします！**

## バージョンの注意

2023 年現在で`VB.NET`が動いているのは、`ERP`や販売管理系の業務システムが主かと思います。
即ち`.NET Framework`環境になります。
バージョンは`2.0`、`3.5`、`4.6x`が多い印象です。
どれもサポート切れですが、`2.0`と`3.5`でかなり変更点が多くなっています。
最も大きな点は`LINQ`です。`DB`や`CSV`は勿論、`VB.NET`では`XML`を扱うことが多くあるのですが、`3.5`以前の場合は`LINQ`が使えず苦労することがありました。
紹介する記事の中で要件を満たせるものがあっても、バージョンが低く扱えないものも少なくありません。
古いバージョンであれば、ソースコードより先に`.NET Framework`のバージョンを確認しましょう。

https://codezine.jp/article/detail/2269?p=3&anchor=0

## dobon.net

記事の量と質、掲示板が生きている、内容が実践等々......
迷ったらこのサイトというか私にとっての生命線でした。
`VB6.0`や`C#`との比較もあり、昨年`VB6.0`を初めて触った際にも助けになりました。

https://dobon.net/vb/dotnet/#form

前職で新人研修する際にも薦めていたのですが、プログラミング未経験だと情報収集に苦労しているようでした。
多少弄れば使えるコードも多く、`VBer`はブックマーク必須です。

## ひろにもブログ

記事の量は`dobon.net`に劣りますが、初心者には特におすすめです。

https://hironimo.com/category/prog/vbnet/

`dobon.net`は`TIPS`の役割が強いですが、こちらはプログラミングに明るくない人でも気軽に始められる工夫が施されています。
今更`VB.NET`をゼロから書く人はまずいないと思うので、実際のコードでデバッグしながら基礎的な構文を学ぶのに適しています。
`TIPS`の役割も果たせるためバランスの良い記事だと思っています。

## きままブログ

メール送信や DataGrid 等、現場の要件で多いけどちょっと面倒な処理の実装に役立ちます。

https://masagoroku.com/category/pc/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/vb-net/page/2

`LINQ`の記事がピンポイントに役立つこともあり、自走できるようになってある程度経ってからお世話になることが多かったです。

## Microsoft 公式ドキュメント

安心と信頼の公式ドキュメントです。

https://learn.microsoft.com/ja-jp/dotnet/visual-basic/

が、既に`Microsoft`には見限られてしまい基本的に`C#`しかサンプルコードがありません。
`列挙型`や`LINQ`、`.NET Frameworkのリリースノート`にはお世話になりました。

基礎的かつ体系的にしか情報がなく、言語の将来性と情報がマッチしていない感は否めません。

## おまけ

`VB.NET`開発では`Windows Form`標準だけでなく、サードパーティ製ツールを使うことも多々ありました。
特に多かったのが`Grape City`の`SPREAD`と`InputMan`です。

https://www.grapecity.co.jp/developer/products

私は最初バニラの環境しか経験なかったのですが、その後の配属で`SPREAD`と`InputMan`が使われていて混乱した経験があります。
特に使用している旨の説明もなかったため、当たり前のように使われていることもあります。

見覚えのないコードがあった場合は、製品一覧にサンプルコードがあるため確認しましょう。
慣れないと癖があるように感じますが、使い勝手は良好で EXCEL 出力等の工数削減がはかれます。

## 最後に

Qiita の需要とはマッチしていないと思いますが、モダンから移ると、情報量や環境の変化に戸惑うはずです。
少ない情報から素早く順応(&素早くレガシー脱却)するためにも、参考にしていただければ嬉しいです。

なお、書籍で学ぶことをお考えであれば`C#`等の他言語をおすすめします。
`VB.NET`は生き残りはすると思いますが、言語発展は打ち切られてしまっています。
現行のシステムもサポートが切れたものばかりなので、書籍代は別に回すべきと考えます。

`VB.NET`開発にお困りの方は、上記記事を参考に乗り切っていきましょう！
仮にもオブジェクト指向言語ですし、自然言語で書きやすいためすぐにスラスラ書けるようになっちゃいます！

最後まで閲覧頂きありがとうございました。

本記事がお役に立てば幸いです！
素人なりにgo言語の開発環境を作る

# やりたいこと
公式サイトからダウンロードした圧縮ファイルから、go環境を構築する
ただし、インストール先（？）がレンタルサーバーなため、管理者権限は使えない

## 環境
レンタルサーバー「Core Server」
OS：CentOS (amd64)

## ざっくり作業手順
1. ソースのダウンロード
2. 圧縮ファイルの解凍
3. bin/にある実行ファイルをシンボリックリンクで接続
4. goコマンドが使える！

## 1.ソースのダウンロード
```bash 

cd ~/usr
# 公式よりgo環境の圧縮ファイルをゲット。置き場所はどこでも良いけど~/usr/にした
wget https://go.dev/dl/go1.20.3.linux-amd64.tar.gz 

# サムチェック。これが公式サイトのSUMと一致すれば良い
# やらなくても良いがデータが正規のサイトから欠損なくダウンロードできたかを確認する
sha256sum go1.20.3.linux-amd64.tar.gz

```

## 2. 圧縮ファイルの解凍
```bash
# 解凍
tar -zxvf go1.20.3.linux-amd64.tar.gz 

# 用済み
rm go1.20.3.linux-amd64.tar.gz

# お目当ての中身を確認
cd ./go
ls -la

```

↓ goの中身　コマンドのお目当ては/binにあるが、他にも必要そうな資材が含まれている
![Screenshot 2023-05-06 7.13.29 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1161923/88f683c0-be91-5884-b895-b013a66acc7f.png)


↓ go/binの中身。コマンドとして使う、goとgofmtが入っている
![Screenshot 2023-05-06 6.47.18 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1161923/1b533cd2-19ec-b482-66f1-1e9db031853a.png)


./go/binにお目当ての実行ファイルが入っている。ここから実行させればgoのコンパイル等はできてしまうのだが、せっかくなのでコマンドとしてどこでも使えるようにしたい。

## 3. 実行ファイルをシンボリックリンクでurs/binに接続
ここからgoコマンドを使えるようにしていくのだが、実行ファイルとlsやgccのようにどこでも使える状態にするには何をする必要があるのだろうか。

ここでLinuxの小話。
/bin, /usr/bin, /home/bin など、linuxが指定するbinディレクトリに入っている実行ファイルは、自分がどのディレクトリにいてもカレントディレクトリからその実行ファイルが使えるようになる。

　...実際、lsやmoreの実行ファイルというものは/binに設置されている。そのため、どこのディレクトリにいてもこれらをコマンドとして使用することができる。

この性質を理解すれば、インストーラーなどなくても、goとgofmtをどこからでも使えるコマンドに変えることができる。

幸いなことにコアサーバーでは ~/usr/bin　のディレクトリが使用可能なので、ここにgo,gofmtファイルを移すことにした。

```bash
# ”貴方のユーザー名”欄は人によって違う
cd ~/usr/bin
ln -s /virtual/貴方のユーザー名/usr/go/bin/go go
ln -s /virtual/貴方のユーザー名/usr/go/bin/gofmt gofmt

```

⚠mvコマンドで直接移動させるのが本来の手法な気もするが、素人的にはおすすめはしない。インストラーがない以上、下手にファイルの構成をいじるとパスが狂って面倒くさいことになる可能性が高いからだ。
そのため、lnコマンドを使って、シンボリックリンクとしてgo,gofmtをbin傘下に入れるのが安全だった。

## 4. goコマンドが使える！
go version と入力して返ってくれば完了！レンタルサーバーでもgoが使える！！

![Screenshot 2023-05-06 7.16.19 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1161923/d6215a3a-27f8-024b-074b-6bdc8dbd591f.png)

余談ながら、このあと外部モジュールを取り入れるときに使う　
 go get 〇〇
のコマンドでも管理者権限が不要なのでこれもありがたい。

以上
Power Platform 参考記事まとめ

**■　Microsoft365 (全体的なノウハウ)**

**SharePointリストとDataverseを連動させる方法**
Dataverseでの追加ライセンス費用発生が許容できないときに連動させるケースが出てくる。
多数のユーザはShapointをデータベースとしたキャンバスアプリを使用し、少数の運営メンバーがDataverseをデータベースとしたモデル駆動アプリを使用する。
異なるデータベース間の情報連携をデータフローの機能を使って自動化する。

https://qiita.com/Satoshi_Yoshino/items/7f83a7577c5011beda20

上記記事のデータフローを使うやり方を参考にする。

記事にもある通り既存のテーブルに読み込む方法でやるとよい。あらかじめDataverse側にテーブルを作成しておく。(新規だとうまくいかなかった)
テーブル作成の際、テーブル編集ビューのスキーマ枠の「キー」からデータベース連動の軸となるキー列を作成しておく。プライマリ列とは別に作成する。(プライマリ列をキー化するとうまくいかなかった)



**■　PowerApps**





**■　PowerAutomate**
chrome拡張機能をとりあえず作る

# はじめに
ここ最近、chatGPTのchrome拡張機能が死ぬほど見かけるので
「chrome拡張機能って簡単に作れるのかな？」って思って調べました。

# ChatGPTに聞いてみた
### 回答をそのまま書く
Chrome拡張機能を作るには、以下の手順が必要です。

拡張機能の開発者モードを有効にする
まず、Google Chromeの設定から「拡張機能」を選択し、右上の「開発者モード」を有効にします。

1. 新しい拡張機能を作成する
1. 次に、新しいディレクトリを作成し、manifest.jsonという名前のファイルを作成します。このファイルには、拡張機能の名前、バージョン、説明、アイコンなどの情報が含まれます。
1. ファイルを追加する
    1. 必要に応じて、JavaScriptやCSSなどのファイルを作成して、manifest.jsonファイルに追加します。
1. デバッグする
    1. 拡張機能をデバッグするには、Google Chromeの拡張機能ページで「パッケージ化されていない拡張機能を読み込む」をクリックし、作成したディレクトリを選択します。
1. 拡張機能を公開する
    1. 拡張機能を公開するには、Google Chromeのウェブストアに登録する必要があります。このプロセスには、拡張機能の内容を説明するストアリスティング、アイコン、スクリーンショットなどが必要になります。

以上がChrome拡張機能を作るための基本的な手順です。詳細については、Googleの公式ドキュメントを参照することをお勧めします。

### 参考：拡張機能の公式サイト

https://developer.chrome.com/docs/extensions/

# 実際にやってみる
何となくわかったのでやってみる。

## 拡張機能保管用のディレクトリを作る
どこでもよさげなので適当にディレクトリを作りました。

```
mkdir C:\Users\watya\work\chrome_extension 
```

## ファイルを作成する
manifest.jsonとpopup.htmlを保管用ディレクトリ配下に作成。
※サンプルに使用したファイルもChatGPTにお願いして考えてもらいました

```json:manifest.json
{
  "manifest_version": 2,
  "name": "Sample Extension",
  "version": "1.0",
  "description": "This is a sample extension",
  "icons": {
    "16": "icon16.png",
    "48": "icon48.png",
    "128": "icon128.png"
  },
  "browser_action": {
    "default_icon": "icon48.png",
    "default_popup": "popup.html"
  }
}
```

```html:popup.html
<!DOCTYPE html>
<html>
  <head>
    <title>Sample Popup</title>
    <style>
      body {
        min-width: 300px;
        min-height: 150px;
        padding: 10px;
        font-family: sans-serif;
      }
    </style>
  </head>
  <body>
    <h1>Sample Extension Popup</h1>
    <p>This is a sample popup.</p>
  </body>
</html>
```

## アイコン画像を用意
manifest.jsonで書かれてたんだけどicon16.png等を用意。詳細は割愛
※適当にBING Image Creator使って作成しました

実際に準備したあとのファイル構成はこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/c08bd6b7-5b24-061f-e16a-aa0ec4d4a86f.png)

## デベロッパーモードで動作確認
chrome://extensions/　で拡張機能の画面を開いた後、
「パッケージ化されていない拡張機能を読み込む」クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/a61176e7-0651-2cf6-2928-3322489d55e3.png)

フォルダーの選択画面が現れるので、保管用のディレクトリを指定して「フォルダーの選択」クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/eb657cdf-1fd8-b943-bb2e-b1ab9002cdca.png)

作成した拡張機能がインストールされた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/72477cf1-537c-a24d-4645-346a68431ffc.png)

使ってみよう
chrome右上側にある拡張機能アイコンをクリックすると…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/4decb6f2-9240-6f7a-d75d-10b053dd7a37.png)

さっきインストールに成功したSample Extensionが選べるようになってるのでクリックしてみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/eec0bb97-6d34-d13b-d817-42f2f918d12d.png)

すると…ちゃんとポップアップ出ました！成功ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/39f5ba56-edb5-ca4c-e3b4-6d34258c7804.png)

# おわりに
今回はお試しなので「拡張機能を公開する」ってことはやめときました。

なお、manifest.jsonがどういう仕組みなのかさっぱりわからないので
それぞれがどういう意味なのかは↓↓のサイトを参考にさせていただきました。
とても分かりやすくて参考になりました。
https://qiita.com/shiro1212/items/12f0a767494a7b2ab0b3
Application Insights や Log Analytics で Kusto クエリ (KQL) 経由で全テーブル一覧と各データ数を表示する

Application Insights や Log Analytics ワークスペースで Kusto クエリ (KQL) 経由で、全テーブル一覧と各データ数を出力する方法を紹介します。

# Application Insights の Logs
Application Insights の [Logs] ブレードの KQL 実行にて、以下の Kusto クエリを用いて、指定期間内のデータ数が 1 つ以上存在する各テーブル名一覧と、その各データ数を出力できます。棒グラフを直表示するための render 部分は任意です。render なしでも Chart タブでも見れます。

```
union withsource=TName *
| summarize RecordCount = count() by TName
| order by TName asc
| render barchart
```

なお、例えば Log Analytics ワークスペース依存でない一部の Application Insights は、Application Insights の [使用量と推定コスト] のブレードでも各データ量は確認できます。

# Log Analytics ワークスペースの Logs
Log Analytics の [Logs] ブレードの KQL 実行にて、上記の Application と同様の方法で指定期間内のデータ数が 1 つ以上存在する各テーブル名一覧とそのデータ数を出力できます。

```
union withsource=TName *
| summarize RecordCount = count() by TName
| order by TName asc
| render barchart
```

Log Analytics ワークスペースの [Insights] ブレードでも同じような情報が確認ができます。また、テーブル名の一覧は [Tables] ブレードでも見れます。

#### 補足 : Log Analytics ワークスペースの Usage テーブル
加えて、Log Analytics ワークスペースの Usage テーブルでは指定期間内に送信されたデータインジェスト量などをクエリで確認できます。以下の公式ドキュメントが参考になります。IsBillable カラムでインジェスト料金が発生する課金対象のデータインジェストかを判別することもできます。

https://learn.microsoft.com/en-us/azure/azure-monitor/logs/analyze-usage

KQL 例)
```
Usage
| where IsBillable == true
| summarize sum(Quantity) by DataType
```
【Pandas基礎】dataframeの列名を変更する

## はじめに

#### 自己紹介
Python勉強中の大学院生です。自分が詰まったところを記録していきます。
#### 記事を書くに至った経緯
pandasのdataframeの列名の変更方法が整理できていなかったので、今回の記事で整理します。


## 本記事の概要
##### どんな人に読んでほしいか
- Pythonのpandasを学び始めた人
- pandasのdataframeの列名の変更方法がわからない人

##### この記事に書くこと、わかること
基本的な列名の変更のやり方がわかります。具体的なメソッドは以下の２つです。

- `df.columns = ['変更したい列名']`　（dataframeの列名全てを変更したい時）

- `df.rename(columns={'変更前の列名': '変更後の列名'})`


## 具体的な方法
まずは適当にdataframeを作成します。

```py:data.py

import pandas as pd

data = [[4, 5,11],[2, 8, 10], [3, 6, 12], [1, 7, 9]]

df = pd.DataFrame(data=data,
                  columns=['col1', 'col2', 'col3'])

```

|   | col1|  col2|  col3|
|---|---:|---:|---:|
|0 |   4|    5|  11|
|1 |   2|    8|  10|
|2 |   3|    6|  12|
|3 |   1|    7|  9|


### 列名をすべて変更したい時
全ての列名を変更したい場合（今回であれば'col1', 'col2', 'col3'を'a', 'b', 'c'に変更する）は以下のようにして実行できます。

```py
df.columns = ['a', 'b', 'c']
df
```

実行結果
|   | a|  b|  c|
|---|---:|---:|---:|
|0 |   4|    5|  11|
|1 |   2|    8|  10|
|2 |   3|    6|  12|
|3 |   1|    7|  9|

このようにして一括で列名を変更することができました。


### 一部の列名を変更したい時
.renameメソッドを用いてcolumns（列名）を指定します。

`df.rename(columns={'変更前の列名': '変更後の列名'})`

例えば、'col1'を'a'に変更したいときは、

```py
df.rename(columns={'col1': 'a'})
df
```

実行結果
|   | a|  col2|  col3|
|---|---:|---:|---:|
|0 |   4|    5|  11|
|1 |   2|    8|  10|
|2 |   3|    6|  12|
|3 |   1|    7|  9|

'col1'のみを'a'に変更することができました。

また、複数の列名を変更したい場合は、columnsに同じように要素を追加するだけでOKです。

```py
df.rename(columns={'col1': 'a', 'col3': 'c'})
df
```
実行結果
|   | a|  col2|  c|
|---|---:|---:|---:|
|0 |   4|    5|  11|
|1 |   2|    8|  10|
|2 |   3|    6|  12|
|3 |   1|    7|  9|


##### 列名だけでなく行名も同時に変更したい時
行名も一緒に変更したいという時もあると思います。先ほどcolumnsを指定して列名を変更できたので、行名もindexを指定することで変更が可能です。

列名の変更に加えて、2行目と4行目をappleとbananaに変更したいと思います。

```py
df.rename(columns={'col1': 'a', 'col3': 'c'},
          index = {1: 'apple', 3: 'banana'})
df
```
実行結果
|   | a|  col2|  c|
|---|---:|---:|---:|
|0 |   4|    5|  11|
|apple |   2|    8|  10|
|2 |   3|    6|  12|
|banana |   1|    7|  9|

このように行と列の名前を同時に変更することができました。

## まとめ

- データフレームの列名全てを一括で変更したい→`df.columns = ['変更したい列名']`

- 一部の列名を変更したい→`df.rename(columns={'変更前の列名': '変更後の列名'})`
※行名も同時に変更したい場合はindexも指定する。


列名の変更方法について基礎的な部分に特化してまとめました。浅い内容ですが、とりあえず簡単な名前の変更は今回の内容でできると思います。引き続き学習頑張っていきましょう！
GoogleAppsScript でのTwitterとの連携認証でのエラー

実行ログを開いてリンクをコピーしてアクセスして認証しないといけないことを忘れていた・・・
![googlegas.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343275/3d237a2e-4807-8a92-d262-5ac291bc467c.png)
Prompt Engineering_3　Prompting technique

https://www.promptingguide.ai/jp

今回も上記のリンクからまとめています。正しい情報詳細な情報は上記を訪れてください。

# より高度なPrompting technique
人気のあるPrompting technique
### 1.Chain-of-thought Prompting(CoT)
中間的な推論ステップを介して、複雑な推論能力を可能にする。few-shot pronptingと組み合わせてより良い結果を得ることができる。
### 2.Zero-shot CoT prompting
元のプロンプトに「ステップバイステップで考えてみましょう」という文言を追加する。
### 3.Self-Consistency
連想思考プロンプティングで使用される単純な貪欲複合化を置き換えることを目的にしている」。few-shot CoTを通じて、複数の多様な推論パスをサンプリングし、生成物を使用して最も整合的な回答を選択する。これにより、常識的推論を必要とするタスクにおけるCoTプロンプティングのパフォーマンスが向上する。
### 4.知識生成Prompting
最初に幾つかの「知識」を生成する。（得たい回答とは全然別の知識）次に知識を統合して予測を得る。
### 5.自動プロンプトエンジニア（APE）
自動指示生成と選択のためのフレームワークである自動プロンプトエンジニア。
最初は、タスクのための指示候補を生成する推論モデルとして、大規模言語モデルを使用する。指示はターゲットモデルを使用して実行され計算された評価スコアに基づいて最適な指示が選択される。プロンプトを自動的に最適化するアイデアが、[論文](https://www.promptingguide.ai/jp/techniques/ape)に含まれている。
**AutoPrompt** - 勾配誘導型の検索に基づいて、多様なタスクのためのプロンプトを自動的に作成するアプローチを提案します。
**Prefix Tuning** - NLGタスクのためのトレーニング可能な連続プレフィックスを前置する、ファインチューニングの軽量な代替案です。
**Prompt Tuning** - 逆伝播を通じてソフトプロンプトを学習するメカニズムを提案します。
### 6.Active-Prompt
異なるタスク固有の例のプロンプト(人間によるCoT推論で注釈付けされたもの)に適応するための新しいプロンプトアプローチ。
### 7.方向性刺激プロンプティング
望ましい要約を生成するためにLLMをより適切に誘導するための新しいプロンプティング技術。調整可能なポリシーLMは、刺激/ヒントを生成するためにトレーニングされる。RLの使用がLLMの最適化により多く見られる。
### 8.ReAct
推論トレースの生成により、モデルはアクション計画を誘導、追跡、更新し、例外を処理することができる。アクションステップにより、知識ベースや環境などの外部ソースとのインターフェースや情報収集が可能になる。ReActフレームワークは、LLMが外部ツールと対話して追加情報を取得し、より信頼性の高い事実に基づく回答を生成することができる。
### 9.マルチモーダルCoTプロンプティング
従来のCoTは言語モダリティに焦点を当てているが、マルチモーダルCoTは、テキストとビジョンを2段階のフレームワークに組み込んでいる。最初のステップは、マルチモーダル情報に基づく理由生成です。これに続いて、情報量の多い生成された理由を活用した回答推論が行われる。マルチモーダルCoTモデル（1B）は、ScienceQAベンチマークでGPT-3.5を上回る性能を発揮している。
半無限な単一サイト強束縛模型のグリーン関数

https://qiita.com/hiro949/items/804fba02078f33cfdb8d#comment-2e8161f0e783e6f58ec0

の補足資料です。

$N \times N$行列

```math
T(E_0,t) = \begin{pmatrix}
E_0 & t & 0 & \cdots & 0 \\
t & E_0 & t & \ddots & \vdots \\
0 & t & \ddots & \ddots & 0\\
\vdots & \ddots & \ddots & E_0 & t\\
0 & \cdots & 0 & t & E_0
\end{pmatrix}
= tT(0,1) - E_0
```

の固有値は$T(0,1)$を考えれば十分です。

行列式の余因子分解より

```math
D_N = \det( T(0,1) - E ) \\
= ED_{N-1} - D_{N-2} \\
```
であり、

```math
D_1 = E \\
D_0 = 1
```

だから($D_0$は便宜的な定義)、この漸化式の特性方程式の解

```math
k^2 - Ek + 1 = 0 \\
\Rightarrow k_\pm = \frac{ E  \pm \sqrt{E^2 - 4} }{2} \\
```

より、

```math
D_N - k_\pm D_{N-1} = k_\mp (D_{N-1} - k_\pm D_{N-2}) \\
\Rightarrow D_N = - \frac{ k^{N+1}_+ - k^{N+1}_- }{k_+ - k_- }
```

## |E| > 2 のとき

```math
D_N \xrightarrow{N \rightarrow \infty} 0
```

## E = ± 2 のとき、

```math
D_{N+1} \mp D_N = (\pm 1)^N(D_1 - E D_0) = 0 \\
D_N= D_1 = \pm 1
```

## |E| < 2 のとき

```math
\frac{k_-}{k_+} = e^{i \frac{2 \pi m}{N+1}}
```

とすれば、

```math
E_m = 2 \cos \frac{\pi m}{N+1}
```

で固有ベクトル$\Phi^m$の第$n$成分$\phi^m_n$は

```math
\phi_n^m = C_m \sin \frac{\pi m}{N+1} n
```

の形になります。$N\rightarrow \infty$とすれば、

```math
 \frac{\pi m}{N+1} \rightarrow k \in [-\pi,\pi]
```

として、

```math
E_m \rightarrow E(k) = 2 \cos k \\
\phi^m_n \rightarrow \Phi_n(k) = C(k) \sin kn
```

と書けます。さらに$C(k)=\sqrt{2}$ととります。

よって$T(E_0,t)$のグリーン関数は

```math
G_{mn}^{(R)}(E) = \lim_{\delta \rightarrow +0} \int_{-pi}^\pi \frac{dk}{2\pi} \frac{ \Phi_m \Phi_n }{ E + i \delta - E_0 - 2t \cos k }
```

で、留数積分より

```math
G_{11}^{(R)} = -  \lim_{\delta \rightarrow +0} \oint \frac{dz}{4 i\pi z} \frac{ (z - z^{-1})^2 }{  E + i \delta - E_0 - t( z + z^{-1} ) } \\
= \begin{cases}
\frac{\Delta - \sqrt{\Delta^2 -1}}{t} \ (\Delta \leq -1) \\
\frac{\Delta - i\sqrt{1 -\Delta^2}}{t} \ (|\Delta| < 1) \\
\frac{\Delta + \sqrt{\Delta^2 -1}}{t} \ (\Delta \geq 1)
\end{cases}
```

です。ただし、

```math
\Delta = \frac{E - E_0}{2t}
```

です。
(2023.5) WineでKindleを動かす【Arch Linux】

## はじめに
初見でWineを使ってKindleを動かそうとしたところ、かなり苦戦したのでその記録

## 環境
Arch Linux 
デスクトップ環境：Xfce
パッケージ管理：yay

## 結論（こうすれば動いた）
[事前準備]
+ pacmanでmultilibを有効化
``` /etc/pacman.conf
- #[multilib]
- #Include = /etc/pacman.d/mirrorlist
+ [multilib]
+ Include = /etc/pacman.d/mirrorlist
```

+ downgrade（Wineのバージョンを下げる際に使用）
```yay -S downgrade```

+ lib32-gnutls（これがないとWine上のブラウザでHTTPS接続できない。Kindleのログイン画面を表示するのに必要）
```yay -S lib32-gnutls```

+ （オプション）zenityをインストール
``` yay -S zenity ```
winetricksがGUIで使えるようになる。ただ、以下のwinetricksを用いる作業では大量にWarningが発生するのだが、これをインストールするとWarningがGUIポップアップとして出てきてその都度処理が止まるようになってしまう。GUIが必要なければインストールしない方がいいかも

+ Amazonから最新のKindleインストーラを落とす（執筆時点verは1.40.1）


[手順]

1. WineとWinetricksをインストール
``` yay -S wine winetricks ```

1. Wineのバージョンを6.23-1に落とす（多分6.xならどれでもよい）
``` sudo downgrade wine ```

1. ~/.wineを生成するためにwinecfgを実行
``` winecfg ```
画面はすぐ閉じて構わない。ただ、Windowsバージョンが10以上になっているとKindleは動かないようなので8.1以前になっていることを確認（筆者環境ではデフォルトがVistaになっており、そのまま使用している）

1. デフォアプリを起動してみて日本語が文字化けしていないか確認
``` wine notepad```
``` wine regedit ```  とか

1. 文字化けしている場合、winetricksでフォントをインストール
``` winetricks fakejapanese ```
※ 一度インストールしても、あとの作業の中で何故かまた文字化けすることがある。
&nbsp;&nbsp;&nbsp;その際は再度このコマンドを実行すると直る模様

1. Kindleインストーラを実行

1. ログイン画面が無事表示されれば成功（プルダウンでamazon.co.jpを指定のこと）

## 試してうまくいかなかったこと
+ 最新バージョンのwineを使う
→ Kindleを起動して10秒ほど経つと、必ずページフォルトで強制終了してしまう
wine-stagingを使っても同じだった

+ wine-stableをインストールしてみる
→ 依存関係のインストール中にエラーが出て、正常にインストールできなかった
```
エラー: 対象が見つかりませんでした: lib32-libgphoto2
-> Failed to install the following packages. Manual intervention is required:
lib32-libgphoto2 - exit status 8
lib32-libheif - exit status 4
wine-stable - exit status 8
lib32-gd - exit status 8
exit status 1
```

+ winetricksからkindleをインストール
→ かつてWineとの相性が一番良かったとされるバージョン(1.17)がインストールされる。古すぎるためか、起動しても「インターネットに接続できません」となって使えなかった

+ playonlinux 上でKindleをインストールしてみる
→ フォントのインストールを求められ、"tahoma32.exe"のダウンロード中にフリーズして進まなくなった [(参考)playonlinux forum](https://www.playonlinux.com/en/topic-12972-Microsoft_fonts_stuck_on_downloading_tahoma32exe.html)

## 参考サイト
[ wineを使ってArch Linuxで最新のKindle for PC Windowsを動かす2021年版 - プログラマのはしくれダイアリー ](https://yyyank.blogspot.com/2021/03/winearch-linuxkindle-for-pc-windows2021.html)
ほぼ同じことをやっている方がいた。最初にこの記事を見つけていれば、すぐ解決しただろうに・・・

## 感想
やはり、メジャーバージョンが変わると動いてたものが動かないとか出てくるみたい。

それはさておき、Wineを作った人（たち）は天才だと思う。感謝
SphinxのrstソースからLatex経由でpdfを生成する方法

・conf.pyに以下を追加する
```
latex_elements = {
    'preamble': r'''
    \usepackage{amsmath}
    \usepackage{amssymb}
    '''
}
```
```
extensions = [
    'sphinx.ext.mathjax',
    # 他の拡張機能
]
```
数式で\cancelコマンドを使用している場合は，conf.pyのlatex_elements部分に以下のような追加を行う．

```
latex_elements = {
    'preamble': r'''
    \usepackage{cancel}
    '''
}
```
make latexを実行し, 生成されたtexのソースで，
数式部分で \begin{split} \end{split} を \begin{aligned} \end{aligned} に手動で置換する.

TeXworksで dviファイルおよびpdfファイルを作成する．

以上
Windows10が起動しなくなってカスタムインストールした話

# Windowsが起動しなくなった

WindowsPCを使用していたらある日、起動時にブルースクリーンで再起動を繰り返す状態になってしまいました。
表示されたエラーコードは<b>CRITICAL_PROCESS_DIED</b>となっていました。
環境としては組み立て(自作)PCとなるので以下の構成です。

| | | 
| -- | --|
|マザボ |TUF GAMING Z490 PLUS |
|CPU | intel core i7 10700F |
|メモリ | 16GB |
|SSD | 1TB |

## 試したこと

起動時のトラブルシューティングから以下を試した。
- スタートアップ修復
- セーフモードでの起動
- その他スタートアップ設定での起動
- システムの復元
- 初期状態に戻す

ここまで試した時に、全て<b>そもそも起動しない</b>, <b>期待通りの動作が行われない</b>といった状態でした。
データを削除して完全な初期状態に戻すを選択するも「<b>PCを初期状態に戻すときに問題が発生しました</b>」と表示され失敗していました。


## 修理に出す前に試すべきこと

### 問題の切り分け

ハードウェアの問題か、ソフトウェアの問題かを切り分ける。
BIOS画面を開いてみて、CPU,memory,storage等が正しく認識されているかを確認する。
この記事に書いてある内容を全てやってみてどうにもならなければ、ハードウェア問題の可能性が高いと思われる。
実際にMicrosoftサポートの方にもそう指摘された。


### データのバックアップ

セーフモードでも起動しないのでバックアップは諦めていたが、トラブルシューティングの<b>コマンドプロンプト</b>から`notepad` と入力し、メモ帳を開いてから適当に入力して`Ctrl+Shift+S`で名前をつけて保存することで、エクスプローラ画面へ遷移できる。この時に外付けドライブを接続して保存したいファイルをコピペしてバックアップを残すことができる。


## 最終的に

[Microsoftのサポート](https://support.microsoft.com/ja-jp/topic/%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB-%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%83%BC-%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E9%9B%BB%E8%A9%B1%E7%95%AA%E5%8F%B7-c0389ade-5640-e588-8b0e-28de8afeb3f2)へ電話をして現状を伝えた。

購入時にOSインストールをしたディスクを発見したので、そのディスクからカスタムインストールをして事なきを得た。

手順としては以下のサイトの方法で行なった。
https://sway.office.com/nci7OQoBfgr2EuBW

1. DVDを接続した状態でBIOS画面を開く
1. BIOSの起動優先順位を変更
1. リンクの手順に沿ってインストール
1. インストールの種類はカスタムを選択
    1. ソフトウェアに問題がある可能性が高かったため
    1. アップグレードを試してみて、ダメなら1からやり直しても良いかもしれない
1. パーティションを全て削除し、新規から作成する


最終的に上記のカスタムインストールを行うことで、PCが起動しない問題は解消できた。
オリジナルのJSONサーバーをデプロイしよう


### プログラミング学習には、下記のサービスをよく使うことがあります。

https://jsonplaceholder.typicode.com/

### これと同じものをオリジナルで作りたいと思い、下記のホスティングサービスを使ってJSONサーバーをデプロイしたいと思います。(無料)

https://render.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/019a4f07-1c19-558e-4ee8-654a1aca0ea5.png)


# 参考動画
https://youtu.be/wN0n2gj0z9o

# 下記のソースコードをGitHubリポジトリにpushします。
https://github.com/iwasaki-hub/my-json-server

# RenderとGitHubの接続
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/aaaa768c-6fdf-901d-1e82-0723c54175ea.png)

**connectボタン**を押して完成です:tada:

# ローカル環境から、新しいデーターをポストしてみます。

```javascript:index.js
    const postData = async () => {
      try {
        const response = await fetch(
          "https://mock-server-dly4.onrender.com/posts",
          {
            method: "POST",
            headers: {
              "Content-type": "application/json",
            },
    
            body: JSON.stringify({
              title: "hello",
              author: "mario",
              createdAt: new Date(),
            }),
          }
        );
    
        const data = await response.json();
    
        console.log("successfully post");
      } catch (error) {
        console.log(error);
      }
    };
    
    postData();
```

このソースを実行すると、デプロイしたJSONサーバーにデータが追加されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/ebef9c23-931e-390a-8ff6-8e5421b31023.png)
macOSマルウェアの解析で役に立つツール

macOSマルウェア向けの解析ツールをいくつか紹介。
最後におすすめのmacOSマルウェアの解析ブログを紹介しています。

# 解析対象のファイル
macOSマルウェアの解析では、主に以下のファイルを解析していくことになる。

dmg (Apple Disk Images)
pkg (Packages)
app (Applications)
Mach-O (実行ファイル)
その他スクリプトファイル

# Code Signing
https://apps.apple.com/jp/app/code-signing/id1599304823?mt=12

ファイルの署名情報を検証してくれるツール。
GUIで確認できるのがいいところ。
署名情報に問題がない場合は以下のように表示される。
![スクリーンショット 2023-05-04 11.01.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274361/1263567e-fae4-6ff3-e39b-5cb0987cbd19.png)
署名情報に問題があると、以下のように表示される。
![スクリーンショット 2023-05-04 10.51.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274361/d7ab9ad9-6a09-b0be-1697-33b8000f9e05.png)

# Suspicious Package
https://mothersruin.com/software/SuspiciousPackage/

macOSのインストーラパッケージ(.pkg)を分析してくれるツール。
pkgファイルにしか対応していないが、色んな情報を表示してくれるため、とても便利。
「Package Info」では、署名情報やスクリプトの有無などの概要を表示してくれる。
![スクリーンショット 2023-05-04 11.38.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274361/b372dabd-bf14-fdb4-f984-f198c4e98430.png)
「All Files」では、インストールされるファイルの一覧が表示される。
右クリックで「Export "〇〇"」を選ぶと、ファイルを抽出できる。
![スクリーンショット 2023-05-04 11.47.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274361/16c92bcd-4ee1-8ce7-ebfd-93797c2237e2.png)

「All Scripts」では、pkgファイルのインストールスクリプトを表示してくれる。
![スクリーンショット 2023-05-04 11.51.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274361/079e9d4d-fb61-4472-c39f-e1cdbd47308b.png)
「Review」では、pkgファイルに潜在的な問題がないか表示してくれる。
![スクリーンショット 2023-05-04 12.04.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274361/c88f31b0-d7aa-af4e-ac01-be2e9a0f9497.png)
「Receipts」では、インストールされたコンポーネントのバージョン(レシート)とpkgに含まれるコンポーネントのバージョンに差異がないか表示してくれる。
レシートがない場合は、以下のように灰色の記号で表示される。
![スクリーンショット 2023-05-04 12.16.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274361/b1008022-119a-1a48-4ce8-2661aa2f4eea.png)

# Objective-See Commandline Utilities
https://objective-see.org/products/utilities.html

Objective-Seeが公開している、動的解析で使えるコマンドラインツール。
・ProcessMonitor → プロセスイベントの監視
・File Monitor → ファイルイベントの監視
・DNSMonitor → DNSリクエストとレスポンスの監視
※DNSMonitorは現時点ではベータ版であるため、解析環境で実行することを推奨されている


```:実行方法
$ sudo ProcessMonitor.app/Contents/MacOS/ProcessMonitor

$ sudo FileMonitor.app/Contents/MacOS/FileMonitor

$ DNSMonitor.app/Contents/MacOS/DNSMonitor

※ProcessMonitorとFile Monitorは管理者権限で実行する必要がある
```
また、オプションをつけることで、出力形式をJSON形式にすることもできる。

# macOSマルウェアをもっと知りたい方へ
以下の解析ブログでは、どのような流れで解析をしているかがわかるので、macOSマルウェアの解析を知りたい方におすすめです。

https://objective-see.org/blog.html
Manjaro Linuxでキーバインドをマウスボタンに割り当てる

# やりたいこと
5ボタンマウスの[戻る]ボタンに`Super+Tab`のキーバインドを割り当てたい

# 環境
Manjaro Linux 22.1.0 Talos

# 必要なパッケージのインストール
```shell
$ sudo pacman -S xorg-xev
$ sudo pacman -S xbindkeys
$ yay -S xvkbd
```

# 設定に必要な情報の確認
設定をしていく上で必要になる情報をあらかじめ確認しておく

## マウスボタンの確認
まずは、キーバインドを割り当てたいマウスボタンのボタン番号を確認する。
```shell
$ xev -event button | grep button
```
新しくウィンドウが開くので、そのウィンドウ上にマウスカーソルを乗せた状態で、マウスのボタンをクリック。
すると対応するボタン番号がターミナル上に表示される。
```shell:例
state 0x0, button 8, same_screen YES
state 0x0, button 8, same_screen YES
```
今回キーバインドを割り当てたいボタンは`button 8`。

## キーの確認
次に、割り当てたいキーボードのキーコードを確認する
以下のコマンドを実行すると、また新しいウィンドウが開くので、その状態でキーコードを確認したいキーを押下する。
```shell
$ xbindkeys --key
```
結果は以下の通り
```shell: Super
Press combination of keys or/and click under the window.
You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"(Scheme function)"
    m:0x40 + c:133
    Mod4 + Super_L
```
```shell: Tab
Press combination of keys or/and click under the window.
You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"(Scheme function)"
    m:0x0 + c:23
    Tab
```
Superのキーコードは`Super_L`
Tabのキーコードは`Tab`
だとわかった

# 設定ファイルの編集
まずは設定ファイルを作成する
```
$ touch ~/.xbindkeysrc
```
先程の確認から、割り当てたいキーコードは`Super_L`と`Tab`、ターゲットのマウスボタンは`button 8`なので、以下の内容を書き込む
```~/.xbindkeysrc
"xvkbd -text "\[Super_L]\[Tab]""
  m:0x0 + b:8
```

# 設定の反映
下記コマンドで`xbindkeys`を実行
```shell
$ xbindkeys
```

`~/.xbindkeysrc`を修正して変更を反映したいときは以下のコマンドを実行
```shell
$ pkill -f xbindkeys
$ xbindkeys
```

## 変更の永続化
このままでは起動するたびにリセットされてしまうので、`~/.xprofile`や`~/.xinitrc`ファイルに以下を記載する。
今回は`~/.xprofile`に記載した。
```
xbindkeys
```
以上で設定が完了。

# 参考
- [全てのマウスボタンを動作させる - ArchWiki](https://wiki.archlinux.jp/index.php/%E5%85%A8%E3%81%A6%E3%81%AE%E3%83%9E%E3%82%A6%E3%82%B9%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E5%8B%95%E4%BD%9C%E3%81%95%E3%81%9B%E3%82%8B)
- [Xbindkeys - ArchWiki](https://wiki.archlinux.jp/index.php/Xbindkeys)
sshとは

sshとはコンピュータやネットワーク機器を操作するときに必要な通信規格（簡単にいうとルールだね）のこと。

sshはインターネットへの接続時が安全だっていわれてるよ。

`Secure Shell` の略称

他のコンピュータに遠隔でログインしたり、特定のサーバーへアクセスするためのプロトコル、通信規格のこと

ここからイメージしやすいように例えて説明します。

サーバーを建物だとします。

あなたは建物に入りたいが、手続きが必要です。（この手続きをSSH公開鍵認証という）

手続きは簡単です、認証に必要なものを３つ揃えるだけです。（公開鍵、秘密鍵、電子署名）

まずは誰にも知られてはいけない秘密の書類（秘密鍵）を作ります。
これは家から持ち出すことは必要ないです（ネットワーク上に送信しない）
大切に保管していてください。

この秘密の書類（秘密鍵）をもとに、とある書類（公開鍵）を作ります。
ちなみに、これらの書類（秘密鍵・公開鍵）をキーペアなんて言います。

この、とある書類（公開鍵）は入館したい建物に登録しておきます。

さて、いよいよ入館しましょうか。

入館する時は自分の持っている書類をもとに、署名（電子署名）を作ります。
この署名の内容は毎回ランダムに作成されます。
なので、この署名は万が一、外で落としたり、盗まれても、秘密の書類の中身を推測するこはできないです。

作った署名を入館先（サーバー）へ送ります（ネットワークを使って）。

入館先の担当者は受け取った電子署名の内容と、登録されている書類（公開鍵）で不正なものでないか検証します。
正しいと認証された時、無事に入館することができます！


いかかでしょうか。
手続きのイメージが湧くと、環境構築がスムーズになると思います。
[AWS Q&A 365][Cognito]AWSのよくある問題の毎日5選 #49

# 1. Amazon Cognito Syncとは何ですか？
回答：Amazon Cognito Syncは、AWSのサービスおよびクライアントライブラリであり、アプリケーションに関連するユーザーデータのクロスデバイス同期を可能にします。自分自身のバックエンドを使用せずに、ユーザープロファイルデータをモバイルデバイスやWebアプリケーション間で同期できます。

# 2. Amazon Cognito Syncの機能は何ですか？
回答：Amazon Cognito Syncは、アプリの設定やゲームの状態などのユーザーデータを同期できます。また、複数のユーザーが共有データをリアルタイムで同期して共同作業することもできます。

# 3. Amazon Cognito Syncはどのように動作しますか？
回答：Amazon Cognito Syncは、クライアントライブラリを使用してデータをローカルにキャッシュし、デバイスの接続状態に関係なくアプリがデータの読み書きを行えるようにします。デバイスがオンラインの場合、データを同期できます。プッシュ同期を設定すると、他のデバイスにすぐに更新があることを通知できます。

# 4. Amazon Cognito Syncを使用するには何が必要ですか？
回答：Amazon Cognito Syncを使用するには、ユーザーIDを提供するためのAmazon Cognitoアイデンティティプールが必要です。Amazon Cognito Syncを使用する前に、まずアイデンティティプールを設定する必要があります。アイデンティティプールを作成してSDKをインストールする方法については、Amazon Cognitoアイデンティティプール（フェデレーテッドID）のはじめ方（p.295）を参照してください。

# 5. Amazon Cognito Syncについてもっと学ぶにはどうすればよいですか？
回答：Amazon Cognito Syncについてもっと学ぶには、Amazon Cognito開発者ガイドの以下のトピックを参照してください。Amazon Cognito Syncのはじめ方（p.367）、データの同期（p.368）、コールバックの処理（p.375）、プッシュ同期（p.386）、Amazon Cognito Streams（p.393）、およびAmazon Cognitoイベント（p.394）。
[AWS Q&A 365][Cognito]Daily Five Common Questions #49

# 1. What is Amazon Cognito Sync? 
Answer: Amazon Cognito Sync is an AWS service and client library that enables cross-device syncing of application-related user data. It allows user profile data to be synchronized across mobile devices and web applications without using your own backend. 

# 2. What are the capabilities of Amazon Cognito Sync? 
Answer: Amazon Cognito Sync enables user data like app preferences or game state to be synchronized. It also extends these capabilities by allowing multiple users to synchronize and collaborate in real-time on shared data. 

# 3. How does Amazon Cognito Sync work? 
Answer: Amazon Cognito Sync uses client libraries to cache data locally so that your app can read and write data regardless of device connectivity status. When the device is online, you can synchronize data. If you set up push sync, you can notify other devices immediately that an update is available. 

# 4. What is required to use Amazon Cognito Sync? 
Answer: Amazon Cognito Sync requires an Amazon Cognito identity pool to provide user identities. Before you use Amazon Cognito Sync, you must first set up an identity pool. To create an identity pool and install the SDK, see Getting started with Amazon Cognito identity pools (federated identities) (p. 295). 

# 5. How can I learn more about Amazon Cognito Sync? 
Answer: To learn more about Amazon Cognito Sync, you can refer to the following topics in the Amazon Cognito Developer Guide: Getting started with Amazon Cognito Sync (p. 367), Synchronizing data (p. 368), Handling callbacks (p. 375), Push sync (p. 386), Amazon Cognito Streams (p. 393), and Amazon Cognito Events (p. 394).
Javaの環境を整える　-HomebrewでJDKを入れる-

2年前に下書き保存していたものが出てきたのでせっかくなので投稿します。

## 環境
mac OS Catalina
バージョン 10.15.7
Javaを使おうと思ったら、
「No Java runtime present, requesting install.」
と言われた。（あと、JDKが入ってないからインストールしてねってアラートが出た）

## Homebrewを使って最新じゃないけど安定しているバージョンを入れる
最新は15だけど、非LTSだったので、LTSで最新の11を入れることにしました。

## ターミナルを開きます
```$ brew search java11```
念のためHomebrewで、Java11を探します
```==> Formulae
java11```
と出てきましたら、

```$ brew install java11```
して、環境変数を変更します。

インストールした時に出てくるメッセージに従って
>If you need to have openjdk@11 first in your PATH run:
  echo 'export PATH="/usr/local/opt/openjdk@11/bin:$PATH"' >> /Users/user/.bash_profile

>For compilers to find openjdk@11 you may need to set:
  export CPPFLAGS="-I/usr/local/opt/openjdk@11/include"


```$ echo 'export PATH="/usr/local/opt/openjdk@11/bin:$PATH"' >> /Users/user/.bash_profile```
```$ export CPPFLAGS="-I/usr/local/opt/openjdk@11/include"```
```$ source /Users/user/.bash_profile```

しました。

最後に確認
```$ java -version```
として、
>openjdk version "11.0.9" 2020-10-20
OpenJDK Runtime Environment (build 11.0.9+11)
OpenJDK 64-Bit Server VM (build 11.0.9+11, mixed mode)

が出てきて、Javaの11が入っていることを確認して完了です。

ついでにコンパイラのバージョンも確認
```$ javac -version```
で、
>javac 11.0.9

と出てきました！

## コンパイルと実行
例として、Exercise.javaというソースファイルをコンパイルして実行します。

```$ javac Exercise.java```
を実行すると、Exercise.classというクラスファイル（拡張子が.class）が作成されますので、
```$ java Exercise```
で実行します。
クラスファイルを実行する時に、.classという拡張子は必要ありません。
railsでloggerをActiveSupport::Loggerではなく独自のLoggerを使っている場合にsprockets-railsでNoMethodErrorが発生する問題の解消


`sprockets-rails`で`NoMethodError`が発生したので原因の解説と対策を書いておきます。

# 発生するケース

以下の3つの条件が重なる場合に例外が発生します。

- `app.config.assets.quiet`が`true`(デフォルト値)
- `assets`を参照する
- 例えば以下の様に開発環境は独自のloggerを使っており`ActiveSupport::Logger`ではなく`Logger`クラスのインスタンスを設定している

```ruby:config/development.rb
Rails.application.configure do
  config.logger = Logger.new(STDOUT)
end
```

この状態でassetsを参照しているページにリクエストを行うと以下の様に`NoMethodError`が発生します。

```bash
#<NoMethodError: undefined method `silence' for #<Logger:0x0000ffff792b3418 @level=0, @progname=nil, @default_formatter=#<Logger::Formatter:0x0000ffff792b2fb8 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x0000ffff792b29f0 @shift_period_suffix=nil, @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, @binmode=false, @mon_data=#<Monitor:0x0000ffff792b2950>, @mon_data_owner_object_id=8980>>

::Rails.logger.silence { @app.call(env) }

```

## 原因

`config.logger`では`Logger`クラスのインスタンスを指定できますが、`Logger`クラスのインスタンスには`silence`メソッドが定義されていないためです。

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

そのため`sprockets-rails`で例外が発生していました。

```ruby:sprockets-rails/lib/sprockets/rails/quiet_assets.rb 
 def call(env)
    if env['PATH_INFO'] =~ @assets_regex
      ::Rails.logger.silence { @app.call(env) }
    else
      @app.call(env)
    end
end
```

https://github.com/rails/sprockets-rails/blob/v3.4.2/lib/sprockets/rails/quiet_assets.rb#L11

# 対応

以下のいずれかの対応することで回避可能です。

　1. `config.logger`に指定する値は`ActiveSupport::Logger`のインスタンスに変更する

```diff:config/development.rb
Rails.application.configure do
-  config.logger = Logger.new(STDOUT)
+  config.logger = ActiveSupport::Logger.new(STDOUT)
end
```

　2. `app.config.assets.quiet`を`false`に設定する

```diff:config/development.rb
Rails.application.configure do
+ config.assets.quiet = false
  config.logger = Logger.new(STDOUT)
end
```

# FYI

このケースに遭遇してエラーが発生する場合に`NoMethodError`ではなく独自の例外発生とエラーメッセージを出力する対応がされていました。

https://github.com/rails/sprockets-rails/pull/381

```ruby
def raise_logger_silence_error
  error = "You have enabled `config.assets.quiet`, but your `Rails.logger`\n"
  error << "does not use the `LoggerSilence` module.\n\n"
  error << "Please use a compatible logger such as `ActiveSupport::Logger`\n"
  error << "to take advantage of quiet asset logging.\n\n"

  raise LoggerSilenceError, error
end
```

https://github.com/rails/sprockets-rails/blob/master/lib/sprockets/rails/quiet_assets.rb#L22-L28

当記事の投稿時点では`master`ブランチにはマージされていましたがこちらのコミットが含まれているリリースバージョンはまだリリースされていません。

# 環境

```bash
$ rails -v
Rails 7.0.4.3

$ bundle info sprockets-rails
* sprockets-rails (3.4.2)
```
Deno KVでMyJSON【JSON保管庫】

<p class="codepen" data-height="720" data-default-tab="result" data-slug-hash="GRYyeaW" data-user="04" style="height: 720px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/04/pen/GRYyeaW">
  MyJSON Deno KV</a> by John Doe (<a href="https://codepen.io/04">@04</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>


http://myjson.com の代替え品を作りました！

```typescript
import { serve } from "https://deno.land/std@0.177.0/http/server.ts"

const kv = await Deno.openKv()

serve(async (req: Request) => {
    const key = new URL(req.url).pathname.slice(1)
    if (req.method === "GET") {
        const { value } = await kv.get([ key ])
        const init = {
            headers: {
                "content-type": "application/json; charset=UTF-8",
                "Access-Control-Allow-Origin": "*"
            }
        }
        return new Response(value, init)
    } else if (req.method === "POST") {
        kv.set([ key ], await req.text())
    }
    return new Response('', { headers: { "Access-Control-Allow-Origin": "*" } })
})

```
【2023年5月最新版】EC2のインスタンス購入オプションはよく改定される【幕末】

スケジュールドリザーブドインスタンスは既になくなった･･･。
ということでSAA用におさらい。
SAA欄の高中低はとある模試での出題傾向です。

:::note info
2023年5月現在の情報です。
:::

|SAA|インスタンスタイプ|特徴|
|:---:|:---|:---|
|高|オンデマンドインスタンス|最もスタンダードなプランで一番高額。使いたいときに使いたいだけ利用可能。|
|高|リザーブドインスタンス|1~3年間分まとめて __特定のインスタンス__ の使用料金を払うことで割引を受けられる。|
|高|スポットインスタンス|休止中のキャパシティーを使用するインスタンス。 __利用時間に柔軟性がある__ 時や、 __アプリケーションが中断しても問題ない__ 時に有用。|
|中|Savings Plans|1~3年間分まとめて __指定した処理能力__ の使用料金を払うことで割引を受けられる。|
|中|キャパシティー予約|__特定のAZに対してのキャパシティー__ の使用料金を払うことで割引を受けられる。フェイルオーバーが発生してもキャパシティを確保したい場合は __ディザスタリカバリ__ を予約する。 __1～3年どうこうの縛りはない__ 。|
|低|Dedicated Hosts|Deficated：専有、専念。クライアント専用の物理サーバー。|
|低|ハードウェア専有インスタンス（Dedicated Instances）|クライアント専用の物理サーバー。|

Dedicated HostsとDedicated Instancesの違いは今ひとつ理解できていませんが、どちらも物理サーバーなのでそういうことにしておこうと思います。ちなみに公式によるとこうらしいです。

||Dedicated Host|Dedicated Instance|
|---|---|---|
|請求|ホストごとの請求|インスタンスごとの請求|
|ソケット、コア、ホスト ID の可視性|ソケットと物理コアの数が見える|可視性なし|
|ホストおよびインスタンスアフィニティ|インスタンスを同じ物理サーバーに徐々にデプロイし続けることができる|サポート外|
|ターゲットを絞ったインスタンスの配置|インスタンスを物理サーバーに配置する方法についての可視性と制御が高い|サポート外|
|インスタンスの自動復旧|サポート対象。詳細については、ホスト復旧を参照してください。|サポート対象|
|Bring-Your-Own-License (BYOL)|サポート対象|サポート外|
|キャパシティ予約|サポート外|サポート対象|

# 参考サイト

公式サイトしか見ていません。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instance-purchasing-options.html

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html
cscの作法 その317

# 概要
cscの作法、調べてみた。
マンデルブロ集合、やってみた。

# 参考にしたページ。

https://qiita.com/ur_kinsk/items/82aa609d799256258010

# 実行結果



![mandelbrot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/2f965dd5-f80e-eacb-1721-d710426b7460.png)

以上。
【Ruby】Array#cycle_each_cons が欲しい

たとえば

```rb
ary = [:a, :b, :c]
```

が与えられたときに

```rb
[
  [:a, :b],
  [:b, :c],
  [:c, :a]
]
```

とか

```rb
[
  [:a, :b, :c],
  [:b, :c, :a],
  [:c, :a, :b]
]
```

とかについてループを回したい，ということがよくある。


要するに，与えられた配列のお尻と頭が繋がった円環状の構造についての `each_cons` だ。
`each_cons` の cyclic 版とでも言おうか。

これは，以下のように書ける。組み込みクラスの Array を拡張しちゃうので，refinement を使ってお行儀よくいこう。

```rb
module CycleEachConsToArray
  refine Array do
    def cycle_each_cons(n)
      return Enumerator.new{ cycle_each_cons(n, &_1) } unless block_given?

      cycle.each_cons(n).take(length).each{ yield _1 }
    end
  end
end
```

これを使うときは，使いたい場所で

```rb
using CycleEachConsToArray
```

してから

```rb
p %w[A B C].cycle_each_cons(2).to_a
# => [["A", "B"], ["B", "C"], ["C", "A"]]

%w[A B C D].cycle_each_cons(3) do |ary|
  puts ary.join("-")
end
# => A-B-C
#    B-C-D
#    C-D-A
#    D-A-B
```

のようにする。

`Array` に限定せず `Enumerable` でやれば応用が広がるように思うかもしれないが，長さがあらかじめ分かる必要があるので，一般の `Enumerable` についてはできない。
有限の長さを持つ「`Array` でない `Enumerable` オブジェクト」に使いたいときは `to_a` してから使えばいい。
Prompt Engineering_2　プロンプトの例

https://www.promptingguide.ai/jp


この記事は上記のサイトを読んで自分のためにまとめた記事です。正しい情報は上のサイトにアクセスして確かめてくださいませ。

# プロンプトの例
前回はPromptingの基本についてまとめましたが、今回は得たい答えのための具体的な例をまとめます。
### 1.テキスト要約
記事やコンセプトをクイックで読みやすい要約にまとめるためのプロンプト。
![スクリーンショット 2023-05-06 16.11.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/777eccb1-53fe-b4b2-8cb1-a5df34dce389.png)
上記は長いので、以下の様に指示して、短くしてもらいます。
![スクリーンショット 2023-05-06 16.13.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/bd3501a7-ebcd-40ea-05dd-889505fd61ef.png)
### 2.情報抽出
与えられた段落から情報を抽出するプロンプト
![スクリーンショット 2023-05-06 16.27.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/32e48ba9-065f-228f-52f5-c1858b6223e1.png)
### 3.質問応答
特定の回答を返す様にする方法。指示、文脈、入力、出力インジゲータを組み合わせて、結果を得る。
指示が具体的であればあるほどより良い結果が得られる。
![スクリーンショット 2023-05-06 16.46.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/6f23065b-63fd-ec94-50c1-469be832ea85.png)
### 3.テキスト分類
テキストの分類例を提供してデータ入力、例示ができる。
![スクリーンショット 2023-05-06 16.50.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/7dc627da-d1d1-4be8-4e58-c88abecd8893.png)
### 4.会話
チャットボットなどの会話システム構築に役立つ、意図、アイデンテティの指示。
これを**role prompting**と呼ぶことがある。
![スクリーンショット 2023-05-06 17.05.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/c783dd5e-7d9b-530e-5733-5d3d7e87fca6.png)
小学生（レベルの私の頭）でもわかる様に指示を入れてみました。
![スクリーンショット 2023-05-06 17.05.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/df2cff25-6bfc-e145-7fbe-d1a8e69a0931.png)
### 5.コード生成
![スクリーンショット 2023-05-06 17.10.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/5955a5ca-5e80-ed8d-59c6-03aee7fe0ef5.png)
### 6.推論
数学的な能力を必要とするタスクは、現在では困難だが、次の様にするとカバーできる。(元サイトでは誤った回答だったけど、一発で正しい回答になってた！)
![スクリーンショット 2023-05-06 17.15.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/ac9100a4-72de-26d2-b652-df4c291591d2.png)