OmniAICreator/Qiita-1.07M huggingface dataset:
【Python】LINE Notifyの手引き

 # LINE Notifyとは
 LINE Notifyとは、GitHub,IFTTT,MackerelなどのWebサービスと連携することで、それらサービスからの通知をLINEで受信することが出来る便利なサービスです。
詳細は以下のサイトをご覧ください。

https://notify-bot.line.me/ja/

本サービスとPythonを組み合わせることで、さまざまな情報をLINEに通知することが可能になります。

# PythonとLINE Notifyで通知を送るまでの手順
### 1. LINE Notifyへログイン
[LINE Notify](https://notify-bot.line.me/ja/)にアクセスし、右上のログインボタンからログインしてください。
![login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1149857/d3237fca-193f-b9eb-e81a-0578cb1133fa.png)



### 2. トークンの発行
自分の名前をクリックしマイページへ移動します。
![mypage.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1149857/e72ab09a-6aba-dc42-aba4-52eb1ca84733.jpeg)

連携中のサービスを見ることができます。
![services.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1149857/024b5374-f759-94fd-2a19-51daa6b364fc.jpeg)

ページ下部の「アクセストークンの発行(開発者向け)」の「トークンの発行」をクリックします。
![publishtoken.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1149857/2328a59e-02e5-7385-ec74-6dc00290f987.jpeg)

適当なトークン名を入力し、「1:1でLINE Notifyから通知を受け取る」を選択、発行します。
![token.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1149857/00fd5f91-62bf-56d5-0ab5-9ad73022e378.jpeg)

発行されたトークンを保存しておきます。
![token3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1149857/deff9e63-1a04-a4c8-632f-fca8a9a67f15.jpeg)

# テストコードの実行
それでは、LINEにテキストを送信するPythonコードを実行してみましょう。
```Python:test.py
#coding:UTF-8
import urllib.request
import json

# line notify
TOKEN = '取得したアクセストークン'
api_url = 'https://notify-api.line.me/api/notify'

request_headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Bearer ' + TOKEN
}

def main():
    contents = 'テスト'
    payload = {'message': contents}
    data = urllib.parse.urlencode(payload).encode('ascii')
    print(data)
    req = urllib.request.Request(api_url, headers=request_headers, data=data, method='POST')
    conn = urllib.request.urlopen(req)

if __name__ == '__main__':
    main()
```

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1149857/e5dc3e4d-0e33-d7da-7c94-7891c4a2aaa3.png)
RLogin ビープ音 消す ベル タブ 警告音

RLoginで音をとめたいんじゃ。

![ベルコード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70103/b857f659-0058-d59c-3363-7825d49b4301.png)

- RLoginの接続の設定画面
  - `スクリーン`の`ベルコード(07)による動作を選択`  
    値を`Sound`から`None`または`Visual`にします。

`Visual`にすると、音の代わりに画面がフラッシュするようになります。  
最初はこちらにしようと思ってたんですが、予想よりウザかったのでやめました。

## その他

### 接続先サーバー上のユーザーの設定を変えたい場合

https://www.google.com/search?q=inputrc+set+bell-style+none

### クライアント側 Windowsの一般の警告音を切る場合

そもそもPCで細かい警告音とかいらんやろ、というひと向け。そう言われるとそうかも。

https://www.google.com/search?q=%E3%82%BF%E3%83%96%E5%85%A5%E5%8A%9B%E8%A3%9C%E5%AE%8C%E6%99%82%E3%81%AE%E8%AD%A6%E5%91%8A%E9%9F%B3%E3%82%92%E6%B6%88%E3%81%99+%E4%B8%80%E8%88%AC%E3%81%AE%E8%AD%A6%E5%91%8A%E9%9F%B3
俺のVue レスポンスヘッダー

# 俺のVue レスポンスヘッダー
## Azure Static Web App の場合
```staticwebapp.config.json
"globalHeaders": {
        "Cache-Control": "no-cache, no-store, must-revalidate",
        "Content-Security-Policy": "default-src 'self'; script-src 'self'; style-src 'self'; font-src 'self'; img-src 'self' data:; frame-src 'self'",
        "Access-Control-Allow-Origin": "https://${FRONTDOOR_DOMAIN}",
        "Cross-Origin-Embedder-Policy": "require-corp",
        "Cross-Origin-Opener-Policy": "same-origin",
        "Cross-Origin-Resource-Policy": "same-site",
        "Permissions-Policy": "geolocation=(self), camera=(self), microphone=(self), fullscreen=(self), payment=(self)",
        "Origin-Agent-Cluster": "?1",
        "Referrer-Policy": "strict-origin-when-cross-origin",
        "Strict-Transport-Security": "max-age=63072000; includeSubDomains; preload",
        "X-Content-Type-Options": "nosniff",
        "X-DNS-Prefetch-Control": "off",
        "X-Download-Options": "noopen",
        "X-Frame-Options": "DENY",
        "X-Permitted-Cross-Domain-Policies": "none",
        "X-XSS-Protection": "1; mode=block"
    }
```

## こちらのサイトからチェック
https://securityheaders.com/

### A+ 獲得

![スクリーンショット 2024-07-19 12.59.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44351/b81c499d-b2bc-a846-45d5-62be4e5fb9c8.png)

## 参考

https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html


# Microsoft Entra 認証で、エラーになる
```
Refused to apply style from 'https://HOGEHOGE.net/.auth/login/aad' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.
```
[備忘録]CSVファイルをデータベースに取り込む方法

プログラミングを初めて１か月ちょっと。
今日は郵便局が出しているcsvファイルをDBeverを用いてデータベースに取り込みました。

しかし、ダウンロードしたファイルをそのままインポートしようとすると、エラーが続出するのでした。

# 日本郵政のcsvファイルをそのまま使うと起こるエラーとかいろいろ

カラム増殖！！
データが長すぎる！！
プライマリーキー郵便番号にしたら重複！

# 解決策

1.csvファイルをLibreOfficeで開く
2.１行目に行を追加する
3.１列目に列を追加する
4.１列目へ、テーブルに設定したカラムと同じ項目名を設定する
5.１行目へ、１から順に番号を振る(1って書いて右下の緑四角ダブルクリックする)
6.テーブルに追加した行のカラムを増やして、プライマリーキーにする
7.~丁目のカラム(カナ表記、漢字表記)のデータタイプをvarchar(300)←おっきめの数字。もっと小さくても大きくてもいいかも
8.インポート！！！


おためしあれ。
【ChatGPT＋Code Interpreter】真っ黒い画像を描くにはどうしたら？


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

　今回は、真っ黒い画像を描くにはどうしたらいいのか、やってみました。


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

　まずは、ニュース。

　昨日（2024/07/17）、
　　関東甲信越・東海地方で
　　　梅雨明けした、とのこと。

　ここからは
　　カラリと晴れる夏なんでしょうか。
***
　次のニュース。

　今朝（2024/07/19）確認。

　ChatGPTに
　　新たなモデルが
　　　登場しました。

　その名も
　　GPT-4o mini。
![Screenshot_20240719-084935.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/fc0504ee-c434-d959-e3f6-2a6e7d95798f.png)

　特徴は
　　早い、その一点のみ。

　ラストナレッジカットオフは
　　2023年10月。

　画像生成、
　　CodeInterpreter、
　　　ファイルアップロードは
　　　　できません。

　音声会話は
　　できているように
　　　思えますが、
　　　　会話を終えると、
　　　　　GPT-4oに戻っていて
　　　　　　どうなのかわかりません。

　また、
　　インターネットにも
　　　接続していませんので、
　　　　ネット検索はできません。

　ChatGPTでは、
　　Free、Plus、Teamユーザーは
　　　本日よりアクセスでき、
　　　　Enterpriseユーザーも
　　　　　来週から利用可能になる。

　今朝の段階では
　　Freeは確認できませんでした。

　詳細はこちらをどうぞ。
　　[カレーちゃんさんポスト](https://x.com/currypurin/status/1814067284320927995?t=UI5p-OefMpfFZVAvFE9GUw&s=19)

　こちらは、
　　OpenAI開発者アカウントからの
　　　ポストをベースにして
　　　　書かれた詳しい内容に
　　　　　なっています。
***
　さて、本題です。

　背景の黒い画像を
　　生成しようとすると、
　　　どうしても真っ黒になりません。

　そこで
　　色コードを使うことを
　　　思い付きました。

　色コードについて
　　ChatGPTに尋ねました。
***
***user***
色コードとはなんですか？

***ChatGPT***
色コードとは、色を特定の形式で表現するための規則やシステムのことです。デジタルデザインやウェブデザインなどで使用されることが多く、色を正確に指定するために用いられます。以下は、一般的に使用される色コードの種類です。

1. **RGB (Red, Green, Blue)**:
   - 色を赤、緑、青の3つの要素に分け、それぞれの強さを0から255までの値で表します。
   - 例：RGB(255, 0, 0)は赤を意味します。

2. **HEX (Hexadecimal)**:
   - 16進数を使って色を表現します。6桁の16進数で、先頭2桁が赤、中間2桁が緑、末尾2桁が青を表します。
   - 例：#FF0000は赤を意味します。

3. **HSL (Hue, Saturation, Lightness)**:
   - 色相（Hue）、彩度（Saturation）、輝度（Lightness）の3つの要素で色を表現します。
   - 例：HSL(0, 100%, 50%)は赤を意味します。

4. **CMYK (Cyan, Magenta, Yellow, Key/Black)**:
   - 主に印刷業界で使用され、シアン、マゼンタ、イエロー、ブラックの4色で色を表現します。
   - 例：CMYK(0%, 100%, 100%, 0%)は赤を意味します。

これらの色コードを使用することで、デジタルおよび印刷物において一貫した色再現が可能になります。
***

　そこでDALL-E3に
　　依頼してみました。
***
***user***
HEXコード: #000000のみの画像を描いて

***ChatGPT***
（黒い背景に黒い惑星。なんで？）

***user***
HEXコード: #000000のみの画像をお願いします

***ChatGPT***
（黒い画像になった）

***user***
この画像をCodeInterpreterで解析して、HEXコード: #000000以外の色があった場合、そこを白い点として描いてください

***ChatGPT***
こちらが解析結果です。もしHEXコード: #000000以外の色があった場合、それを白い点として表示しました。この画像には白い点がないため、すべてが黒であることが確認できます。
***

　できた、と思ったんですが
　　あとから確認したら
　　　Code Interpreterで
　　　　描かれたものとわかりました。

　これならば、
　　直接Code Interpreterに
　　　依頼すべきですね。

```Text:
CodeInterpreterで、1024×1024で、HEXコード: #000000のみの画像をお願いします
```

　これで
　　作成されます。
　　　あとは、ダウンロード
　　　　するだけです。

　目的とは
　　異なりますけどね😅

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
文系出身 IT未経験が基本情報技術者試験に3か月で合格した話

# ・はじめに
　私は入社2年目の2023年7月に基本情報技術者試験を受験し、科目A：700点　科目B：655点で合格しました。
　その時の、勉強方法について合格体験記として残しておこうと思います。
　基本情報技術者試験を受験したきっかけは、周りの同期は資格を取得しているのに、2年目になっても何も資格を取っておらず
　焦りを感じ、何か一つでも資格を取得したいと思ったことです。

# ・基本情報技術者試験
　　基本情報技術者試験は2023年から受験方式が変更になり、「CBT方式」になりました。
　試験科目は科目Aと科目Bの二部構成の試験となっていて、科目AではITの基本的な知識を、科目Bではより専門的な知識が問われます。
　詳しい試験概要はIPAの<A HREF=https://www.ipa.go.jp/shiken/kubun/fe.html TARGET=_blank>公式情報</A>をご覧ください。
　基本情報技術者試験の合格ラインは、科目A・科目Bともに600/1000点です。6割取れれば合格です。

# ・勉強を始める前に
　勉強を始める前にまず以下を実施しました。
　**①目標設定(受験日・目標点数の決定)**
　　→受験日：2023/07/23　目標点数：科目A 650点　科目B 650点
　　
　**②スケジュール設定**
　　→1週間の勉強スケジュールを立てました。
　　　曜日ごとに勉強時間と勉強内容を決めておくことで、スムーズに勉強に取り掛かることができました。
例）【勉強スケジュール】勉強開始日：2023/4/22
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836584/e2b28354-a729-8dd7-1e9d-a34f1ac4f29f.png)
※通勤時間での勉強はできるときに実施していました。
　　
　**③マイルストーン(中間目標)の設定**
　　→1か月ごとに設定しました。過去問道場 過去4回分の正答率のマイルストーンを設定しました。
　　　例）
　　　　過去問道場 過去4回分を<FONT COLOR=red>8割</FONT>とれるようにする(5/17まで)
　　　　過去問道場 過去4回分を<FONT COLOR=red>9割</FONT>とれるようにする(6/17まで)
　　　　過去問道場 過去4回分を<FONT COLOR=red>10割</FONT>とれるようにする(試験日まで)
　　
　**④使用教材の選定**
　　→科目A：<A HREF=https://www.fe-siken.com/fekakomon.php TARGET=_blank>過去問道場</A>
　　　　　　  <A HREF=https://gihyo.jp/book/2021/978-4-297-12393-2 TARGET=_blank>令和04年 イメージ＆クレバー方式でよくわかる 栢木先生の基本情報技術者教室</A>
　　　　　　  <A HREF=https://www.youtube.com/@kihonzyouhou TARGET=_blank>Youtube動画「【基本情報技術者試験YouTuber】すーさん」</A>

　　　科目B：<A HREF=https://www.shoeisha.co.jp/book/detail/9784798177670 TARGET=_blank>情報処理教科書 出るとこだけ！基本情報技術者［科目B］第3版</A>

# ・勉強ポイント
　私が勉強する中で重視したところは2つあります。
　1つ目は、過去問道場は3ステップに分けて解くことです。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836584/21c307fe-a27d-beef-f227-24c50fa5cc90.png)
　この3ステップを過去4年分実施すれば、かなり知識は身につきます。
　
　2つ目は、PDCAを実施することです
　私は以下のようにPDCAを実施しました。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836584/af51a684-6951-6045-eb83-1f9e305c9f6e.png)

# ・受験当日
　試験当日は、過去問道場の過去6回分を10割取れるようにしていたので、あまり緊張せず受験できました。
　科目Aは一通り解き終わった後、時間に余裕があったので見直しをして、自信がある問題数が7割ほどあったのでそこで終了しました。
　科目Bは、意外と時間が足りず焦りましたが、残り3問を残した時点で、自信がない解答が3問くらいでしたので、
　残りの3問のうち1問をしっかりと解いて残り2問は勘で解答しました。
　科目Bの終了と同時に点数が表示されたので、両科目とも合格点以上であることがわかった瞬間はとてもうれしかったです。
　
# ・よかったこと
　基本情報技術者試験に合格できたことは、もちろんよかったのですが
　それ以上に勉強習慣と自分の勉強方法を確立できたことがよかったです。
　次は応用情報技術者試験合格に向けて勉強していきます。
　反省点としては、科目Bの時間が足りなくなったことです。
　科目Bは、アルゴリズム：16問 情報セキュリティ：4問の計20問です。
　戦略としては、情報セキュリティは暗記すれば確実に正解できるので、<INS>先に情報セキュリティを解いて、あとからアルゴリズムを解くこと</INS>をおすすめします。 
　
　余談ですが、私の勉強方法を1年目の後輩に実施してもらったところ、3か月で合格できました。
Excelのリボン設定方法

Excel
ファイル＞オプション＞リボンのユーザー設定
右下のインポート＞ユーザー設定ファイルをインポート
下記をファイル名
　Excel Customizations.exportedUI
で保存したものをインポート。


個人用のリボン設定
```
<mso:cmd app="Excel" dt="1" /><mso:customUI xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui"><mso:ribbon><mso:qat><mso:sharedControls><mso:control idQ="mso:AutoSaveSwitch" visible="false"/><mso:control idQ="mso:FileOpenUsingBackstage" visible="false" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:FileSave" visible="false" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:FileSendAsAttachment" visible="false" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:FilePrintQuick" visible="false" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:PrintPreviewAndPrint" visible="false" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:Spelling" visible="false" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:Undo" visible="true" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:Redo" visible="true" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:SortAscendingExcel" visible="false" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:SortDescendingExcel" visible="false" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:PointerModeOptions" visible="false" insertBeforeQ="mso:FileNewDefault"/><mso:control idQ="mso:FileNewDefault" visible="false"/><mso:control idQ="mso:SheetRename" visible="true"/><mso:control idQ="mso:ReadOnly" visible="true"/><mso:control idQ="mso:FontSizeDecrease" visible="true"/><mso:control idQ="mso:FontSizeIncrease" visible="true"/><mso:control idQ="mso:NameDefine" visible="true"/><mso:control idQ="mso:MergeCenter" visible="true"/><mso:control idQ="mso:UnmergeCells" visible="true"/><mso:control idQ="mso:HeaderFooterFormatPicture" visible="true"/><mso:control idQ="mso:TextBoxInsertExcel" visible="true"/><mso:control idQ="mso:ShapeRoundedRectangle" visible="true"/><mso:control idQ="mso:RemoveDuplicates" visible="true"/><mso:control idQ="mso:ConvertTextToTable" visible="true"/><mso:control idQ="mso:ConditionalFormattingMenu" visible="true"/><mso:control idQ="mso:NumberFormatGallery" visible="true"/><mso:control idQ="mso:ReviewShowOrHideComment" visible="true"/><mso:control idQ="mso:ObjectsSelect" visible="true"/><mso:control idQ="mso:ChartTypeStatisticalInsertGallery" visible="true"/><mso:control idQ="mso:WindowSideBySideSynchronousScrolling" visible="true"/><mso:control idQ="mso:_3DExtrusionPerspectiveClassic" visible="true"/></mso:sharedControls></mso:qat><mso:tabs><mso:tab idQ="mso:TabDrawInk" visible="false"/></mso:tabs></mso:ribbon></mso:customUI>
```
asciidocの図や表の番号を章番号に合わせる

色々調べたが、どうもadocファイル単体では難しそうということがわかった。

javascriptを埋め込んでhtml表示時に置換するのが一番楽っぽい

# adocファイル

sectnums,figure-caption,table-captionを指定する。
scriptは生成されるhtmlからの相対位置にあるものを指定する。
```asciidoc
# SomeTitle
:toc:
:toc-levels: 3
:toc-title: 目次
:nofooter:
:sectnums:
:figure-caption: 図
:table-caption: 表
:stylesheet: asciidoc.css

++++
<script src="scripts/custom.js"></script>
++++

...<snip>
```

# javascriptファイル

図は`<div class="title">`タグに記載されている。
表は`<caption class="title">`タグに記載されている。
余計なものも交じるので弾くようにする。

章番号は`<div class="sect1">`毎の`<h2 id="xxxxx">`にあるので
後は章毎に番号をincrementして置換していくだけ。

```javascript
document.addEventListener('DOMContentLoaded', function () {
    var figures = document.querySelectorAll('div.title');
    var tables = document.querySelectorAll('caption.title');

    function updateCaptions(elements, type) {
        var sect_cnt = {};
        elements.forEach(function (element) {
            let before = element.innerText;
            // console.log(`${before}`);
            if (!before.match(`^${type} `)) {
                return;
            }
                
            // console.log(element + " " + element.innerText);
            const ancestor = element.closest("div.sect1");
            const sect = ancestor.querySelector('h2');
            const snum = sect.innerText.replace(/\..*$/, '').trim();
            if (!sect_cnt[snum]) {
                sect_cnt[snum] = 0;
            }
            sect_cnt[snum]++;
            const counter = sect_cnt[snum];
            const after = before.replace(/\d+/, `${snum}.${counter}`);
            element.innerText = after;
            // console.log(after);
        });
    }

    updateCaptions(figures, '図');
    updateCaptions(tables, '表');
});

```
ITパスポート トランザクション処理

・トランザクション
関連する複数の処理を、一連の切り離せない処理単位としてまとめたもの

・コミット
一連の処理が異常なくできたときは、その全ての結果を確定する

・排他制御（同時実行制御）
複数のトランザクションが同一のデータを同時に更新する際に、データの不整合が生じないよう制限（ロック）をかける機能

・デッドロック
複数のトランザクションが同時にデータをロックし、お互いのロックが解除されるのを待ち続けて処理が止まってしまう現象

・データベースの障害
・バックアップファイル
ある時点のデータベースの内容を複製したファイル
・ログファイル
データベースの更新前や更新後の値を書き出して、データベースの更新履歴を記録したファイル

・データベースの復旧
・ロールフォワード
バックアップファイルと更新後ログで復旧させる
・ロールバック
更新前ログで復旧させる

・ACID特性
・原子性
トランザクション処理が、全て完了したか、全く処理されていないかで終了すること
・一貫性
データベースの内容に矛盾がないこと
・独立性
複数のトランザクションを同時に実行した場合と、順番に実行した場合の処理結果が一致すること
・耐久性
トランザクションが正常終了すると、更新結果は障害が発生してもデータベースから消失しないこと

・レプリケーション
別のサーバにデータをリアルタイムに複製して、同期をとることで、可用性の向上や負荷分散を図る仕組み

・分散型データベース
データベースを複数の場所に分散させ、一つの大きなデータベースとして制御する方式
確定（コミット）も取り消し（ロールバック）もどちらもできる中間状態を設定し、全ての処理が成功したら確定させる

・２相コミット制御
中間状態中に障害が発生したときは、全ての処理を強制終了して取り消す
Next.jsを使用して成果物をS3にデプロイし、CloudFront経由で公開する方法

CloudFrontを使ったページ公開時に詰まった経験のある方、これからページ公開をやりたい方はぜひみていただけると幸いです。

## 使用するAWSサービス

- S3
- CloudFront
- (Route53)

## 0. HTMLを生成
Next.jsのプロジェクトでは、ページを生成する方法としてSPA（シングルページアプリケーション）、SSG（静的サイト生成）、SSR（サーバーサイドレンダリング）の3つの選択肢があります。今回はSSG（静的サイト生成）を対象に手順を説明します。なお、SPAの設定も大きくは変わりませんが、SSRはLambdaなどサーバーが必要になるため、別記事で詳しく説明します。

手順:
`next.config.mjs` に以下を設定します

```ts
/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'export'
};

export default nextConfig;
```

これにより、静的なHTMLファイルが、outディレクトリに生成されます
そして、生成されたファイルをAWS S3バケットに配置します。直接アクセスさせず、次のステップで作成するCloudFront経由でのアクセスのみを許可します。

手順:
1. AWS Management Consoleにログインし、S3サービスに移動します
2. 新しいバケットを作成するか、既存のバケットを選択します
3. outディレクトリの内容を選択したS3バケットにアップロードします


:::note info
なぜCloudFrontを使用するのか：
1. パフォーマンス向上: CloudFrontはAWSのCDN（コンテンツ配信ネットワーク）サービスであり、グローバルなエッジロケーションを通じてコンテンツをキャッシュし、ユーザーに対して高速に提供します
2. セキュリティ: CloudFrontを介してアクセスを管理することで、S3バケットの直接アクセスを防ぎ、セキュリティを向上させることができます
3. 柔軟な設定: CloudFrontは多様なオプションと設定が可能で、複雑な要件にも対応できます
:::

![Screenshot 2024-07-19 at 10.45.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295481/4ddcc6c8-e698-531a-ab4b-8ed557d7807b.png)


## 2. 外部からS3のオブジェクトにアクセスさせる（CloudFront）
CloudFrontを設定し、S3バケットのオブジェクトへアクセスできるようにルーティングを設定します。


手順:
1. AWS Management ConsoleでCloudFrontサービスに移動し、新しいディストリビューションを作成します
2. オリジン設定で、S3バケットをオリジンとして指定します
3. オリジンアクセスコントロール（OAC）を有効にし、CloudFrontがS3バケットへアクセスできるようにします

![Screenshot 2024-07-19 at 10.45.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295481/1a21339a-754d-6a79-427b-f6a5d6cdbe29.png)


:::note info
オリジンとビヘイビア：
オリジン: オリジンとは、CloudFrontがコンテンツを取得する元のサーバーやストレージのことを指します。通常、オリジンはS3バケット、HTTPサーバー（例えば、EC2インスタンスや他の外部サーバー）などが使用されます。
ビヘイビア：CloudFrontが特定のパスに対してどのようにリクエストを処理するかを定義する設定です。ビヘイビアはキャッシュの設定やリダイレクトルールなど、リクエストに対する具体的な動作を決定します。
:::

## 3. CloudFront経由のアクセス許可をS3に与える
OAC経由でのアクセスを許可するために、CloudFrontが生成するアクセスポリシーをS3バケットに設定します

手順:
S3バケットの「パーミッション」タブに移動し、バケットポリシーを編集します。
CloudFrontが生成したアクセスポリシーをコピーし、バケットポリシーに追加します。
以下のコードはOACを生成した時に勝手に生成してくれるのでそれを使用してください。
あくまで以下は一例です。

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::your-cloudfront-distribution-id"
        }
      }
    }
  ]
}
```

## 4. (オプション) カスタムドメインを設定する
カスタムドメインを設定して、ユーザーが覚えやすいURLでサイトへアクセスできるようにします。

手順:
AWS Management ConsoleでRoute 53サービスに移動し、ドメインを登録または既存のドメインを選択します。
新しいAレコードを追加し、エイリアスとしてCloudFrontディストリビューションを指定します。
CloudFrontディストリビューションの設定で、カスタムドメインを追加し、SSL証明書を設定します。
これで、Next.jsを使用したSSGサイトのデプロイと公開が完了しました。

## 以下、デプロイしたもの（宣伝）

https://the-3.net

法人設立しました！（正確には登記中ですが）
`the3合同会社`と申します。
色々手が回っておらず情報が不足していますがITをメインとして扱う会社となります。
何か相談事等、お引きあいございましたらよろしくお願いいたします。
技術スタック等はQiitaにある通り、高度なセキュリティ以外となります。
Chat GPT-4o miniとClaude 3 Haikuを簡単比較

# はじめに

現在運営している学習アプリ 「[コンウォーク](https://konwalk.jp)」 では、問題を入力したら回答を自動生成する機能があり、そこでは***Claude 3 Haiku***を利用していました。

ただ今回発表された***GPT-4o mini***もClaude 3 Haikuと同じように、非常にコスパが高そうなので、実際に簡単な比較を行ってみることにしました。

:::note warn
本記事では、APIの詳細な使い方は解説致しません
:::

# 料金

気になる方も多いと思うので、まず料金について触れておきます。

| モデル | インプット* | アウトプット* |
|:-:|:-:|:-:|
| GPT-4o mini  |  $0.15 |  $0.60 |
|  Claude 3 Haiku |  $0.25  | $1.25  |
|  (参考)gpt-4o |  $5.00 | $15.00  |

*100万トークンあたり



***Claude 3 Haiku***もかなり低コストですが、***GPT-4o-mini***はその半額近い料金ですね。


# 性能

続いて性能の比較です。[こちら](https://openai.com/index/gpt-4o-mini-advancing-cost-efficient-intelligence/)にてOpenAIが発表している資料を参考にするのを中心に、個人的な印象についても話します。

まず、OpenAI発表の資料によるモデルの比較にて気になった点を抜粋しながら紹介します。

## 1. MMLU

| モデル | スコア |
|:-:|:-:|
|  GPT-4o mini | 82.0  |
|  Claude 3 Haiku |  73.8 |
|  (参考)GPT-4o |  88.7 |

MMLUは、モデルの総合的な性能評価に多く用いられる指標ですが、GPT-4oが最も高い性能をしています。
ただ、GPT-4o miniもClaude 3 Haikuに8ポイント近く差をつけており、性能の高さが伺えます。

## 2. GPQA

| モデル | スコア |
|:-:|:-:|
|  GPT-4o mini | 40.2  |
|  Claude 3 Haiku |  35.7 |
|  (参考)GPT-4o |  53.6 |

GPQAは、大学院レベルの専門的な知識、高度な推論能力を評価するための指標ですが、こちらもMMLUと同じような結果になっています。

## 3. MATH

| モデル | スコア |
|:-:|:-:|
|  GPT-4o mini | 70.2  |
|  Claude 3 Haiku |  40.9 |
|  (参考)GPT-4o |  76.6 |

MATHは、小学生から大学生程度の算数問題によってモデルを測る指標ですが、GPT-4o miniが30ポイント近くの差をつけて、Claude 3 Haikuを上回っているのが特徴的です。

## 4. HumanEval


| モデル | スコア |
|:-:|:-:|
|  GPT-4o mini | 87.2  |
|  Claude 3 Haiku |  75.9 |
|  (参考)GPT-4o |  90.2 |

HumanEvalは主にプログラミング能力を測る指標ですが、GPT-4o miniはGPT-4oと大きく変わらないほどの性能を持ち、Claude 3 Haikuには10ポイント以上の差をつけています。

## その他

他にも紹介されている指標がありましたが、GPT-4o miniがClaude 3 Haikuに優れている点が多いようでした。

## 個人的な印象

両方のAPIを使用してみたところ、総じてGPT-4o miniが正確な回答を行ったというのが印象です。

運営しているアプリの性質上、一問一答形式の問題をいくつか試したので少し紹介します。
<br>

(問題)初代内閣総理大臣は？
| モデル | 回答|
|:-:|:-:|
|  GPT-4o mini | 伊藤博文  |
|  Claude 3 Haiku |  大久保利通 |
|  (参考)GPT-4o |  伊藤博文 |

<br>

(問題)生類憐みの令を行った将軍は？
| モデル | 回答|
|:-:|:-:|
|  GPT-4o mini | 徳川綱吉  |
|  Claude 3 Haiku |  徳川秀忠、など安定しない回答 |
|  (参考)GPT-4o |  徳川綱吉 |


まだ少ない例ですが、今の所Claude 3 Haikuが正解したにも関わらず、GPT-4o miniが誤った回答をしたことはありません。

# おわりに

実際に発表している資料からもわかるように、やはりGPT-4o miniの性能が高く、料金も踏まえると、かなりコスパの高い言語モデルが発表されたと思います。

速度の面については考慮しきれていないので、この点も比較したいですね。

最後に、結局GPT-4o miniの凄さをまとめるだけの記事になってしまいましたが、読んでいただきありがとうございました！

参考になると嬉しいです。

# 宣伝

記事内でも何度か触れましたが、[コンウォーク](https://konwalk.jp)という学習アプリを運営しています！
生成AIも活用して、オリジナル学習セットをサクサク作れるようになってるので、よかったら使ってみてください！

https://konwalk.jp
Solr9にアップグレードしたらrequireFieldMatchが必須になった

# はじめに

イントラネットの検索エンジンを作っていて、Solr8(8.11.2)がそろそろ終りになるのでSolr9(9.6.1)にアップグレードすることにしました。

KubernetesでSolrCloudを運用しているので単純にコンテナのバージョンをdocker.io/library/solr:9.6.1にしたのですが、だいたい動作するもののhighlightingの結果が空になってしまいました。

さらに面倒なことに、検索文字列やオプションの指定によって空にならない場合もあるため原因の調査に少し時間がかかりました。

:::note
タイトルではrequireFieldMatchをtrueに**しなければいけない**といった印象を与えますが、これは自分の環境においてはという事です。問題が発生していなければfalseの方が使い勝手が良い環境もあると思います。
:::

# 調査

まず自作のWebアプリは検索結果をJSONでも出力できるので、現在のQueryパラメータがどんなものか確認していきます。

```json:
{
  "responseHeader": {
    "zkConnected": true,
    "status": 0,
    "QTime": 85,
    "params": {
      "hl": "on",
      "fl": "id,title,author,copyright,parent_url,last_update",
      "hl.fragsize": "200",
      "start": "0",
      "fq": "last_update:[2024-03-28T11:21:02Z TO NOW]",
      "sort": "last_modified desc",
      "rows": "10",
      "hl.simple.pre": "<em class=\"matched-querystring\">",
      "usePhraseHighLighter": "true",
      "q": " ( content:空調申請 )  AND id:*example.org/official/*",
      "defType": "edismax",
      "hl.simple.post": "</em>",
      "qf": "content^100",
      "hl.fl": "content",
      "wt": "json"
    }
  },
...
  "highlighting": {
    "https://intra.example.org/hoge.pdf": {},
    ...
  }
}
```

usePhraseHighLighterは必要ない気もしますが、とりあえずこれでいままで返されていた"highlighting"フィールドの出力が空になっていることが分かります。

問題は検索文字列によっては、ちゃんとhighlightingが返ってくる点です。

またバージョンアップ以前のSolr8の時に保存したドキュメントでも、新しくSolr9後に更新したドキュメントでもhighlightingが返ってきたり、空になったりしているので、機能そのものが動いていないということではないようです。

## Solr管理コンソールからの原因追及

続いて管理系ネットワークからSolrのAdminコンソールに接続して、いろいろパラメータを調整してみます。

hl関連のパラメータは多くないので、"hl.requireFieldMatch" をチェックするとhighlightingに意味のある結果が返ってくるようになりました。

また"hl.highlightMultiTerm"の値が影響しない場合もありましたが、trueの方が全体としては期待したどおりの挙動になるようでした。

# 対応

Ruby/Sinatraで開発しているWebアプリケーションのコードに ``:"hl.requireFieldMatch" => "true",``を追加することで対応しました。

Solr管理コンソールで"highlightMultiTerm"の状態によっても結果が変化しましたが、このデフォルト値は"true"なのでコードを変更することはしませんでした。

結果的にアプリケーションは期待したように動作していて、無事に問題は解決してSolr8からSolr9へのアップグレード対応も完了しました。

# さいごに

Solrは非常に強力な全文検索エンジンで、それほどチューニングに時間を割かなくても概ね期待したような動作をしてくれます。

ただUTF-8を当然のように要求してくるので、内部のドキュメントを保存するためにPostScriptファイルをPDFに変換したり、EUCやShift-JISのコードをUTF-8に変換するような仕組みを入れる日本語対応の部分では対応が必要になってきます。

## requireFieldMatch について

このデフォルト値はfalseです。ちなみにusePhraseHighLighterのデフォルト値はtrueなので、動作には影響ありませんでした。

これがfalseであれば、より広い対象が対象となるため合理的な初期値ではあると思います。

根本原因は分かっていませんが、他にもcontent_ngramのような似たような名前のフィールド定義があった事も影響していたかもしれません。

Highlighting周りの挙動はSolr9になってから少し変化したのかもしれません。

# バージョンアップとは関係なく、highlightingが空になる場合

そもそものfield定義で、"stored"を"true"に設定する必要があります。そのため"hl.fl"に設定する対象のfieldのschemaを確認しておくことも必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78296/fa2cd61c-f3ee-c5ce-37a3-8ed5ded052d9.png)

QueryはちゃんとしているのにHighlighting機能そのものが動作しないように思われる場合は、Solr Adminからschemaを確認して、"Stored"のチェックを確認しましょう。

以上
Macで画像の解像度を一括で変更する方法

## 以前公開した AppleScript が動かない
　iPhone 15 Pro Max で撮影した画像ファイルが、1枚あたり、数GBと結構大きなサイズなので、パワーポイントなどに使用するには大きすぎる。横を1024ピクセル程度にすると数百KBになるので、フォルダに持ってきて一括で変換しようと、以前作成したスクリプトを使ったらダメだった。
以前（2016年3月）に書いた記事[「Macで複数の画像を一括でリサイズする AppleScript （サムネイル化などに） ](https://qiita.com/ynomura/items/76bde7935af4b82ab8b1) のスクリプトが、今の環境では動作しないようだ。エラーも出ないで一見ちゃんと動いたように見えているが、画像のサイズは変わっていない。

## 最新の環境で作ってみた
　以前のスクリプトが動作しない原因はわからないが、Image Events　が使えないようなので、他の方法でやってみることにした。
 調べると、shellスクリプトに、Mac専用の sips という便利なコマンドが有った。
 このコマンドについては[「Macのターミナルで簡単に画像処理できるsipsの使い方」](https://qiita.com/livlea/items/53b755e5067d4ebc5b43)が参考になります。

 ## 完成したソース
 フォルダを指定し、変更したいサイズ（ピクセル）をしているると、フォルダ内の全ての画像ファイルを一括でリサイズする、AppleScript
 ```AppleScript:RisizeImage.scpt
-- 指定したフォルダー内の画像データを指定した幅になるよう縮小します。
-- 幅の指定はピクセル値で指定します。
-- 【注意】フォルダーまでのパスの中に、空白等が入っていると動作しません。
-- wtitten by ynomura.com

set outputFolder to POSIX path of (choose folder with prompt "サイズを変換する画像が入っているフォルダーを指定")
display dialog "返還後の幅をピクセル値で指定" default answer 150
set pixSize to text returned of result

set aList to list folder outputFolder
set procCount to 0
repeat with img in aList
	if not ((text of img) = ".DS_Store") then
		set aFile to outputFolder & img
		do shell script "sips -Z " & pixSize & " " & POSIX path of aFile
		set procCount to procCount + 1
	end if
end repeat
-- end tell
display dialog (procCount as text) & " 件を " & pixSize & " にリサイズしました"
 ```
 【追記】　Image Events を使う手もあるようです。
 ```AppleScript:scaleImageTo1024.scpt
 property scaleSize : 1024
 
on run
	set f to choose file
	processTheFiles({f})
end run

on open theFiles
	processTheFiles(theFiles)
end open

on processTheFiles(theFiles)
	tell application "Image Events" to launch
	repeat with f in theFiles
		set thisFile to f as text
		tell application "Image Events"
			set a to open f
			scale a to size scaleSize
			save a in thisFile
		end tell
		delay 0.2
	end repeat
	tell application "Image Events" to quit
end processTheFiles
```


## 同じ処理をショートカットアプリで作ると
　最近、ショートカットアプリの凄さが分かったので、どうなのかな？とトライしてみたら、こんな感じでできた。
 慣れないので、試行錯誤しながら作ったが、出来上がってみると、こんな簡単にできるのかと思う。
 ![画像サイズ変更.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16491/f368ce69-a656-7c09-f485-019246f19226.png)
　複数のファイルを処理するのに、repeat を考えなくてもできるのが楽ですが、メモリーの制限があるんだろうな。

 ## どちらでもお好きな方を
 　ショートカットアプリ版は、保存するフォルダを指定する手間がありますが、どちらでも同じことができます。お好きな方をお使いください。
  まだまだどちらの環境も勉強中ですので、ご意見・ご指摘を歓迎します。
【AWS】リソースごとの料金を確認したい！

![緑 シンプル かわいい 黒板 学校 先生 質問 タイトル YouTube サムネイル (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822977/73231eac-7fae-872d-d146-17b5d0e92ab4.png)
# はじめに

AWS の利用料金は AWS サービスごとに、使用した量に応じて課金されます。
しかし、これだけではコスト管理が十分に実施できないケースがあります。
　
例えば、同一 AWS アカウント上で別々のプロジェクトが進められているケースや、同一 AWS アカウント上に本番用サーバーと開発用サーバー両方が存在するケースなどです。
　
使用する AWS サービスが同じであれば、利用料金はまとまって算出されてしまい、それぞれどのぐらい課金されているかわからないということになります。
　
そのような場合に、「コスト配分タグ」の機能を利用します。
「コスト配分タグ」を活用することでプロジェクトごと、リソースごとの料金を確認することができます。

　
# AWS における "タグ" とは

「コスト配分タグ」を活用していく上でまず AWS における "タグ" の概念を理解しておく必要があります。

　
タグとは、リソースに対して設定可能なキーと値のペアです。
タグはリソース作成時や作成後に設定できます。
　

:::note info
タグキーはリソースごとにそれぞれ一意である必要があります。
また各タグキーに設定できる値は 1 つのみです。
:::

　
例えば、プロジェクト A で利用している EC2 に以下のようにタグを付与できます。

タグキー："Project"
タグ値："A"
　
リソースにタグを付与する目的は様々です。
タグごとにフィルターをかけてデータを一つにまとめたり、タグを基にアクセス権限を設定できたりします。


# コスト配分タグ とは
上記のタグ付け機能をコスト管理にも応用させたのが「コスト配分タグ」です。

　  
文字通り、コストをタグごとに配分するので、
どのタグのリソースにどれぐらい料金がかかっているかを算出することができます。

　
例えば、同一 AWS アカウント上で別々のプロジェクトが進められていて、どちらのプロジェクトも EC2 を利用しているケースを想定します。

　
コスト配分タグを活用しない場合、AWS はサービスごとに料金が算出されるため、どちらのプロジェクトがどれぐらい EC2 を利用したかがわかりません。

　
そこで EC2 に以下のようにタグを設定します。

<table>
  <caption>各 EC2 のタグ設定</caption>
  <thead>
    <tr>
      <th>キー</th> <th>値</th><th>備考</th>
    </tr>
  </thead>
  <tr>
    <td> Project </td> <td>A</td><td>プロジェクト A で利用している EC2 に設定</td>
  </tr>
  <tr>
    <td> Project </td> <td>B</td><td>プロジェクト B で利用している EC2 に設定</td>
  </tr>
  </tr>
</table>

タグ付けすることで、コストをタグで分割して表示することができます。
これらは、Cost Explorer や、Cost Usage Report（CUR）、Detailed Billing Report（DBR）にて確認可能です。

　
例）Cost Explorer にてフィルタリング
タグキー：Cost Allovcation Tag
タグ値：A
![スクリーンショット 2024-07-19 191722.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822977/36833579-dc99-d401-afba-a1adfadc0e60.png)



　

:::note info
以前は、コスト配分タグ有効化前の料金については算出できませんでしたが、
最大 12 か月間、コスト配分タグのバックフィルをリクエストできます。
バックフィルをリクエストすると、選択した期間遡って料金を算出可能です。

-AWS コスト配分タグが遡及適用のサポートを開始
https://aws.amazon.com/jp/about-aws/whats-new/2024/03/aws-cost-allocation-tags-retroactive-application/
:::

# コスト配分タグを有効化する手順

リソースにタグを設定するのみでは、コスト配分タグとして利用することはできません。
タグ設定後、そのタグをコスト配分タグとして有効化する必要があります。

　
有効化は、請求を取りまとめている管理アカウントから実施します。

　
Billing の画面にて、すでにリソースに設定しているタグを選択して有効化を押下し、ステータスがアクティブになると完了です。
　

![スクリーンショット 2024-07-19 170249.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822977/d1884665-e8a5-2ef9-3873-27c6778b3b09.png)
※このキャプチャでは「Cost Allocation Tag」タグキーが既に有効になっています。

　

:::note warn
リソースへのタグ設定 → コスト配分タグ有効化 の順序です
どのリソースにも設定されていないタグキーは上画面に表示されないためです
:::


:::note warn
有効化後、アクティブになるまで最大 24 時間ほどかかる場合があります
:::


# おわりに
ここまでコスト配分タグについてまとめてきました。
ご利用中の環境に応じてコスト配分タグを活用し、コストを適切に管理しながら AWS を運用していきましょう。
ExchangeOnlineのSMTP DANEパブリックプレビュー

## DANE

やっと、ExchangeOnlineのSMTP DANEパブリックプレビューが開始されました。

https://learn.microsoft.com/en-us/purview/how-smtp-dane-works?view=o365-worldwide#how-can-exchange-online-customers-use-inbound-smtp-dane-with-dnssec-in-preview

:::note warn
警告
Microsftの資料にも書いてある通り、プレビュー機能であり動作保証がありません。
この記事を読んで設定変更を思い立ったとしても、一切の保証はしませんので、ご注意ください。
:::

****
## DANEの有効化作業
上記ページの通り進めていけば有効になります。
きちんと読めばそんなに難しくないと思いますが、やってみた中でいくつか補足したいと思います。
****
### DNSレコードの変更が複数回必要

DNSレコードの変更が必要になるので、変更権限があるか確認しましょう。
設定変更は何度かあるので、全部一人で出来る場合はあまり問題はないと思いますが、
他の人にレコード変更を依頼する必要がある場合は、作業中何度か変更するという事を十分説明してから始めましょう。

***
### そもそものドメインがDNSSECに対応しているか？

> To receive the full security benefits of the feature, ensure that you have enabled DNSSEC for your domain.

とあるように、メールのドメインのDNS自体がDNSSECに対応していない場合は
機能に不備が出来てしまいます。
そのような場合はわざわざパブリックプレビュー中にやる必要はないと思います。
****
### Connect to Exchange Online PowerShell. とだけ言われる。

これの細かい説明がありません、わざわざプレビュー機能に手を出す人は知っておくべきという事でしょう。
ちなみに
```
Connect-ExchangeOnline -UserPrincipalName <管理者PrincipalName>
```
****
### 実行前に対象テナントにDNSSECの機能が有効に出来るか確認する方法

プレビュー機能が使えない場合、関連コマンドが存在しないと言われます。
以下のコマンドは現在のDNSSECの設定状況を確認するコマンドです。
```
Get-DnssecStatusForVerifiedDomain -DomainName <DOMAIN>
```
これが
> <font color="HotPink">名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。</font>

とか出たら、たぶん関連コマンドは全部使えません。

****
### 手順3のEnable-DnssecForVerifiedDomainの実行時間

> This command can take a few minutes to execute.

の通り、少し時間かかります。コマンド実行後何も反応ありませんが待ちましょう。
終われば、以下のような表示が出てきます

```
DnssecMxValue                   Result  ErrorData
-------------                   ------  ---------
            jp.    .mx.microsoft Success    
```
***
### TTLは待った方がいい？

手順7で
> Then, update the TTL for the MX record ending in mx.microsoft to 3600 seconds.

とありますが、個人的にはパブリックプレビュー中は短めにしておこうと思っています。


****
### 最終的に有効になるのも少し待つ

手順8で
```
Enable-SmtpDaneInbound -DomainName <DomainName>
```
これの実行後、
手順9での確認は、書いてある通り少し時間がかかります。
完全に反映されるまではDNNSEC,TLSA,DANE３つの内一部が緑でなくて、
一部のみが緑なのに「テストに合格しました」とか出る場合がありますが、
完了すれば３つとも緑なるので、きちんと確認しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667610/2b14a7b8-11a2-cce4-7b76-657d21c6530f.png)


## 結果

以前の状況はこちらの記事参照

https://qiita.com/ripple_naip/items/5a8e353d76d09d0e780f

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667610/fb9b1dea-6161-43b5-2c17-376bc7e2cd4a.png)

IPv6以外はクリアとなり、65%→87%に上がった。
しかし、TLSの暗号選択で警告が出ています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667610/5bee0ce4-9c05-6384-de53-49d22eb2467c.png)

切り替え前は出ていなかったはずなんですが、なんででしょうか？
マイクロソフトのコミュニティサイトで確認している人がいたので、そのうちなにか情報が得られるかも。
Box Driveを使ってみよう!!

**はじめに** 

今日は、Box社のクラウドストレージサービス「Box」について、特に便利な機能である「Box Drive」のインストールから使い方までを、分かりやすく説明したいと思います！ 
<br>
 

**目次** 
1. Box Driveのインストール 
2. データの選定 
3. フォルダの作成 
4. データの移行 
4. ブラウザ上でも見られることを確認 
6. 使用してみた感想 
<br>

**1. Box Driveのインストール**
まず、Box Driveを使うためには、インストールが必要です。手順を参考に、サクサクっとインストールしちゃいましょう！ 

 

必要なもの 
・パソコン 
・インターネット接続 
・Boxアカウント 

 

Boxの管理画面にログインし、「デスクトップアプリ」を選択します。 

https://account.box.com/login 

「Box Drive」のダウンロードボタンをクリックします。 
ダウンロードしたファイルをダブルクリックして、インストールを開始します。 
インストールウィザードの指示に従って、インストールを完了します。 
<br> 


**2. データの選定** 
Box Driveに最初に何を移行するか、迷ってしまいますよね？ そこで、まずは共有したいデータを選んでみましょう！ 

 
ポイント 
・最初は、重要なデータやよく使うデータから移行するのがおすすめです。 
・ファイルサイズが大きい場合は、インターネット環境によっては時間がかかる場合があるので、注意が必要です。 
<br>


**3. フォルダの作成**
Box Drive上（エクスプローラー）で、データを整理しやすいようにフォルダを作成しましょう！ 

① Box Driveを開き、フォルダを作成したい場所を右クリックし、「新規作成」 > 「フォルダ」を選択します。 
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3799749/368c1681-8f49-76d3-1813-4bf096353623.png)

② フォルダ名を入力してクリックします。
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3799749/525e0bc1-3a5c-c51e-5f7e-83f2d88a8200.png)
<br>

**4. データの移行**
いよいよ、データをBox Driveに移行します！ 

① 作成したフォルダを開きます。 
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3799749/34fae9c4-0306-1b64-44ee-5d9838ae8eff.png)

② 移行したいファイルをドラッグして、フォルダにドロップします。 
![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3799749/aeb8cc79-68c8-8d85-06c6-a2ece6f03054.png)

③ ファイルのアップロードが完了するまで待ちます。 
<br>

**5. ブラウザでも見られることを確認**
Box Driveにアップロードしたデータは、ブラウザ上でも確認できます！ 

① WebブラウザでBoxにログインします。 

② 左側のメニューで、「すべてのファイル」を選択します。 
![キャプチャ5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3799749/0265e49b-7e2a-759d-1926-95a3654cdabc.png)

③ 先ほど移行したフォルダを開きます。
![キャプチャ6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3799749/54848834-101c-d335-889b-6aba268316a0.png)
<br>

**5. 使用してみた感想**
実際にBox Driveを使ってみて、便利だなと感じた点がいくつかあります！ 

 ・エクスプローラー上でローカルドライブのようにデータにアクセスできるので、とても使いやすいです。 
・インターネットさえあれば、どこでもデータにアクセスできるので、テレワークにも最適です。 
・ファイルのバージョン管理機能があるので、うっかりファイルを消去しても復元できます。 
<br>
 
**まとめ** 
Box Driveはとても便利なツールだと思います。ぜひ、皆さんも積極的に活用してみてください！ 
<br>
<br>

補足 

・Box Driveには、他にもたくさんの便利な機能があります。詳細は、Boxのヘルプページなどを参照してください。 

・データを移行する前に、必ずバックアップを取っておきましょう。
Minix3をVirtualBoxにインストールする

# Minix3をVirtualBoxにインストールする

詰まったところのみ書いています。

## Minix3イメージをダウンロードする

[公式ホームページ](https://www.minix3.org/)からダウンロードしてください。

### Image下のボタンを押してもダウンロードが始まらない場合。

ダウンロードできないときは、リンク(aタグ)のURLをコピペなりして、直接アクセスしてください。

![スクリーンショット 2024-07-19 10.35.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3084522/98fa9b25-bb68-88c2-db6a-142e5ca5c45c.png)

## VirtualBoxに入れる

### 初回起動

基本的にデフォルト設定で問題ないと思います。

1. rootでログイン
1. setup
1. 設定を指定する
1. 再起動

### 2回目以降の起動

Minixイメージは不要なので、仮想ドライブからディスクを除去してください。
(Minixイメージのチェックを外します)

![スクリーンショット 2024-07-19 10.42.17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3084522/5b376465-98a5-a510-e2dd-21623884f7e0.png)
Google AI Essentials：生成AIの基礎

# はじめに

本記事は、Google AI Essentialsのプログラムより、参照させて頂いています。興味を持った方は、是非受講してみてください。

https://www.coursera.org/learn/google-ai-essentials

# 自然言語

生成 AI ツールのユニークな点は、 自然言語で使用できることです。 自然言語とは、 人々が互いにコミュニケーションを とるときに話したり書いたりする 方法を指します。 

### <font color="MediumBlue">生成 AI ツールが 自然言語で機能する仕組み</font>

1. 入力します。 多くの生成 AI ツールは、テキストや 音声の入力を受け入れますが、 画像や動画ファイルも 受け入れるツールもあります。
2. データは AI ツールによって 処理されます。 
3. テキスト、画像、音声、 または動画の形式で出力が生成されます。

生成 AIと 自然言語を使用して コンピューターと対話する機能により、 人々が AI で創造できるものの 可能性が広がりました。 

- 例えば、あなたが新しいビジネスの マーケティングを担当しているとします。 新製品を宣伝するには、 販促用ポスターのような新鮮で 魅力的なコンテンツが必要ですが、 アイデアを実現する クリエイティブチームがいません。 いくつかのステップに従えば 生成 AI でポスターの作成ができます。 生成されたコンテンツが期待どおりで ない場合は、 ニーズに合ったコンテンツできるまで、 追加の指示を出すことができます。 

これは、生成 AI で スキルを補完する一例に過ぎません。 あなたやあなたの仕事に 役立てる方法は他にもたくさんあります。

- 例えば、生成 AI は、 メールへの返信の下書きなどの タスクをサポートし、 生産性を向上させることができます。 ミスを防ぐのに役立ち、 質問に答えたり アイデアを一緒に ブレイン ストーミングしたりして、 意思決定の過程を改善できます。 

# 会話型AIツール

医療、教育、金融、小売、どの分野でもニーズに応えることができる さまざまな生成 AI ツールが存在します。その一例が会話型 AI ツールです。 

会話型 AI ツールは、 テキスト リクエストを処理して テキストで応答を生成する生成 AI ツールです。 アイデアを出し合ったり、 質問に答えたり、 生産性を高めたりするのに使えます。 

### <font color="MediumBlue">Gemini</font>

Gemini と呼ばれる Google の会話型 AI ツールを使うと 行き詰まったときにクリエイティブな インスピレーションを得たり、 アイデアを膨らませたり、 トピックを調べるのに役立つ 詳細な説明を得たりすることができます。 

- 例えば、夏休みのワーク リトリートで、 チームの絆を深めるアクティビティの リストを Gemini に ブレインストーミングしてもらいます。 AI ツールは、 楽しいビーチパーティーから リラックスできる陶芸教室まで、 幅広いアイデアで応えてくれます。
FlutterプロジェクトのGit情報をプログラム上で表示する方法


# FlutterプロジェクトのGit情報をプログラム上で表示する方法

アプリ開発などでこのプログラムはいつ作製したものだろう？同じバージョンはどれ？といった問題に直面したのでアプリ上にGIT情報としてコミット日時、編集の有無、ブランチ、コミットIDを表示させるようにしました。

ハードではこちらの記事で運用をしていてFlutter環境でも応用してみました。
https://asukiaaa.blogspot.com/2023/01/add-git-info-to-platformio-project.html
## 前提条件
- VSCode 
- Flutterプロジェクト
- Gitがインストールされていること

## スクリプトの作成

まず、プロジェクトのルートに `get_git_info.ps1` というPowerShellスクリプトを作成します。

```powershell
#!/bin/bash

# 最新のコミット日時を取得
$commit_date = git log -1 --pretty=%cd --date=format:%Y-%m-%d-%H:%M

# コミットIDを取得
$commit_id = git rev-parse --short HEAD

# 未コミットの変更があるか確認
$diff_status = if ((git status --porcelain) -eq $null) { "no-diff" } else { "modified" }

# 現在のブランチ名を取得
$branch_name = git rev-parse --abbrev-ref HEAD

# 情報を結合
$git_info = "$commit_date-$diff_status-$branch_name-$commit_id"

# Dartファイルに情報を書き込む
"const String gitInfo = '$git_info';" | Out-File -Encoding utf8 lib/git_info.dart
```

## スクリプトの実行

次に、PowerShellを管理者として実行し、以下のコマンドを入力してスクリプトの実行ポリシーを変更します。

```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```

その後、以下のコマンドでスクリプトを実行します。

```powershell
.\get_git_info.ps1
```

これにより、`lib/git_info.dart` ファイルが生成され、Gitの情報が含まれます。

## Dartコード内での使用

生成された `lib/git_info.dart` ファイルをFlutterコード内でインポートして使用します。

```dart
import 'package:your_project/git_info.dart';

void main() {
  print('Git Info: $gitInfo');
}
```

アプリ上で表示したり管理者ページで確認するようにすることで保守の向上が期待できます。
docker  コンテナ内でDBをSQLで操作してみよう　(カラム削除）

Dockerのコンテナ内でDBを直接操作する必要があることもあると思います。適切に操作ができるように一例をここにあげておきます。特定のテーブルの特定のカラムを削除する操作を示しています。

### 入るコンテナの確認
```
docker ps
```

```
docker exec コンテナ名　bash
```

```
mysql -u ユーザー名　-p
```

```
USE database名;
```

ここからsqlでの操作
```
ALTER TABLE your_table_name DROP COLUMN your_column_name;
DBのカラムを除ける処理
```
例
```
USE my_database;
ALTER TABLE users DROP COLUMN age;
```

migrationとの同期のズレに気をつけておかないと、思わぬエラーが起きることもあり、注意が必要です！！
なぜControllerでインターフェースを呼び出すと、そのインターフェースの実装クラスのメソッドを実行できるのでしょうか？（インターフェースとポリモーフィズムに対する理解を深めましょう）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809422/087ce4e2-89c7-057f-9cfb-3a2d38a40bc8.png)

Springを学ぶときに、このような疑問が生じることがあるかもしれません。**私たちはここでインターフェースの抽象メソッドを呼び出しているだけなのに、なぜ実行時にそのインターフェースの実装クラスのメソッドが実行されるのでしょうか？**

直接に答えると：ここではJavaの三大特徴の一つである**ポリモーフィズム**が使われています。

**ポリモーフィズム**はオブジェクト指向プログラミングの重要な特徴の一つです。**ポリモーフィズムを通じて、親クラス（またはインターフェース）の参照変数は、任意の子クラス（または実装クラス）のインスタンスを指すことができます。** これにより、より汎用的で柔軟なコードを書くことができます。

:::note info
Javaの三大特徴は、カプセル化、継承、そしてポリモーフィズムです。
:::
____________________________
:::note warn
理解しやすくするために、まず「ポリモーフィズム」の概念を振り返りましょう。
:::
## ポリモーフィズムの核心：コンパイル時には左側（親クラスの参照）を見て、実行時には右側（子クラスのオブジェクト）を見ます。

### コンパイル時：「左側を見ます」
コンパイル時に、コンパイラはコードの文法と型が正しいかどうかをチェックします。変数を宣言するとき、コンパイラはその型を記憶します。**ポリモーフィズムの場合、この型は親クラスの型です。** 例えば：
```
Parent obj = new Child();
```
この行のコードでは、obj の宣言型は Parent です。コンパイラはこの型に基づいて、obj があるメソッドを呼び出すことができるか、あるいは特定の属性にアクセスできるかをチェックします。つまり、**コンパイラは Parent クラスに宣言されているメソッドや属性のみをチェックします。**

例えば、Parent クラスに show() メソッドがあり、Child クラスがこのメソッドをオーバーライドしている場合：

```
class Parent {
    void show() {
        System.out.println("Parent's show()");
    }
}

class Child extends Parent {
    @Override
    void show() {
        System.out.println("Child's show()");
    }
}

```
次のコードをコンパイル時に書くと：
```
Parent obj = new Child();
obj.show();
```

コンパイラは obj の宣言型 Parent をチェックし、**Parent クラス** に show() メソッドが確かに存在することを確認します。したがって、このコードは合法であり、コンパイルが通ります。

しかし、Child クラスにのみ存在し、Parent クラスには存在しないメソッドを呼び出そうとすると、例えば：
```
Parent obj = new Child();
obj.childOnlyMethod(); // このメソッドが Child クラスにのみ宣言されていると仮定
```
コンパイラはエラーを報告します。なぜなら、childOnlyMethod() は**Parent クラス**に存在しないからです：
```
error: cannot find symbol
```

### 実行時：「右側を見ます」
**実行時には、Java仮想マシン（JVM）がコードを実行します。このとき、obj は実際には Child オブジェクトを参照しています。** したがって、obj.show() を呼び出すと、JVM は obj の実際の型（Child）に基づいて Child クラスでオーバーライドされた show() メソッドを呼び出します。これにより、Parent クラスの show() メソッドではなく、Child クラスの show() メソッドが実行されます。

**例のまとめ**
```
class Parent {
    void show() {
        System.out.println("Parent's show()");
    }
}

class Child extends Parent {
    @Override
    void show() {
        System.out.println("Child's show()");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent obj = new Child(); // 宣言型は Parent、実際の型は Child
        obj.show(); // 出力: Child's show()
    }
}
```
この例では：

1.コンパイル時：
 - コンパイラは obj の宣言型が Parent であることをチェックします
 - Parent クラスに show() メソッドがあることを確認し、コンパイルが通ります

2.実行時：
 - JVM は obj が実際には Child オブジェクトを参照していることを知っています
 - obj.show() を呼び出すとき、実際に実行されるのは Child クラスでオーバーライドされた show() メソッドです。したがって、Child's show() が出力されます

これが**ポリモーフィズム**の核心です：**コンパイル時は左側（親クラスの参照）を見て、実行時は右側（子クラスのオブジェクト）を見ます。**

----------------------

こちらをご覧いただければ、最初に提起した質問を完全に理解いただけると思います。最後に、Springにおいてポリモーフィズム（多態性）がどのように機能するかを明確にしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809422/1016ea7d-771a-6fac-b491-b75aceb0e7ca.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809422/9764e3d6-77fd-3ea7-5a23-b545593e7067.png)

長い記事に最後までお付き合いいただきありがとうございました。ご質問や異論があれば、コメントをお願いします。
脱初心者！「社内向けAWS実践提案道場」参加感想

# 参加前

AWSからパートナー企業向けに提供されているAWS実践道場がありますが、今まで参加した経験がないのでずっと行きたいと思っていました。

今回、社内で似たようなイベントが開催され、どうしても参加したかったので部署内で調整してもらい、行かせてもらいました。
（機会を譲ってくださったPJリーダーのAさん、本当にありがとうございます！）

私が所属している部署にはAWSの黒帯のベテランがたくさんいるので、参加前は自分自身が大丈夫か？足を引っ張ったらどうしよう？といった不安がありました。

しかし、チャレンジしないと人間は成長しないので、最後は平常心で臨みました。


# イベント内容

弊社の先輩方のブログをご参照ください～

https://www.beex-inc.com/blog/aws_practicedojo


# 印象的なところ①
「みなさんはなぜEC2を使わないのか？」と講評者さんがイベントの最後におっしゃった言葉が非常に印象的でした。

「確かに。。。」と思いました。

いつの間にか、「クラウドを使う＝脱オンプレミス＝サーバーレス」という固定概念が心の中にできていたのかもしれません。

今まで使ってきたAWSの教材（Udemyや市販のテキストなど）は、確かに最初はEC2から紹介し、EC2の概念が何となくわかったら次にLambdaを紹介するという流れが多かったと思います。

そして、今まで経験したプロジェクトは全てLambdaでカバーしていたので、「Lambdaを使うのが普通だ」と思うようになってきたのかもしれません。

でも、EC2も悪くないと今回改めて思いました！

何でもかんでもすぐにLambdaではなく、場合によってはEC2の方がより適切なこともあり、しっかり要件を理解した上で最善のアーキテクチャを考え出すことが大事だと痛感しました！

# 印象的なところ②
これも講評者さんから頂いた言葉ですが、

ネットで調べたアーキテクチャをそのまま使うのはいいですが、この構成図で何を実現したいか？各サービスは何の役割を持っているのか？を考えるのが重要だということです。

確かに、普段実績のない構築をするとき、「とりあえずネットで調べて試そう」という感じでやってきました。

未知の分野について「ネットで調べて試そう」というチャレンジ精神はとても大事なことですが、もっと大事なのは、他人のアーキテクチャを鵜呑みにせずに、自分の頭で各サービスをしっかり理解することですね！

「試して終わり」ではなく、そのあとの反省点や注意点をメモするよう心掛けていきます！

# 印象的なところ③

今回を機に、少し自分に自信がついたのかもしれません。

普段の仕事では、周りに凄すぎる方々がいらっしゃるので、私はいつも追いつけていない立場でした。。。

しかし、今回のイベントのお題はたまたま私が得意なWeb分野で（得意というか、普段のプロジェクトと丸被りしているだけですが(笑)）、同じチームのメンバーもたまたま全然違う分野の仕事をされていたので、

今回は私が率先してアーキテクチャを提案したり、みんなと議論したりすることが多く、とても楽しかったです！

プロジェクトのおかげで、毎日の小さな知識の積み重ねが役に立ちました！

「まだこれもできない、あれもわからない。。。」という焦り感から脱出し、「もうすでにこれができるんじゃないか」ともっとプラス思考にするようになりました！

私の発表を聞いて褒めてくれた方々や、同じチームの仲間たち、本当に感謝しています！

# 最後ですが
今回「社内向けAWS実践提案道場」を企画した担当者の方々に、改めて感謝申し上げます。貴重な勉強の機会をありがとうございました！

AWSの道はまだまだ遠いです！エンジニアとして生きていくために、一生勉強していく覚悟をしなければなりません！

今までともに歩んできた以下の方々にも感謝を伝えたいです。
普段一緒にAWS勉強会をやっている、Oさん、Kさん、K先生

これからも勉強を続けますぞ！
cscの作法 その516

# 概要
cscの作法、調べてみた。
練習問題やってみた。

# 練習問題
Excelで、列幅と行の高さを設定せよ。

# サンプルコード

```
using System;
using System.IO;
using ClosedXML.Excel;

namespace App
{
	class Program {
		static void Main(string[] args) {
			var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Book8.xlsx");
			var wb = new XLWorkbook();
			var sheet = wb.Worksheets.Add("Sheet1");
			sheet.Cell("A1").Value = "中央揃え";
			sheet.Cell("A1").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
			sheet.Cell("A2").Value = "下詰め";
			sheet.Cell("A2").Style.Alignment.Vertical = XLAlignmentVerticalValues.Bottom;
			sheet.Cell("A3").Value = "インデント=2";
			sheet.Cell("A3").Style.Alignment.Indent = 2;
			sheet.Cell("A4").Value = "折り返して全体を表示";
			sheet.Cell("A4").Style.Alignment.WrapText = true;
			sheet.Cell("A5").Value = "縮小して全体を表示";
			sheet.Cell("A5").Style.Alignment.ShrinkToFit = true;
			sheet.Cell("A6").Value = "45度";
			sheet.Cell("A6").Style.Alignment.TextRotation = 45;
			sheet.Cell("A7").Value = "縦方向";
			sheet.Cell("A7").Style.Alignment.TopToBottom = true;
			sheet.Cell("A8").SetValue("メソッドで設定")
				.Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
				.Alignment.SetVertical(XLAlignmentVerticalValues.Center)
				.Alignment.SetTextRotation(45);
			sheet.Cell("C5").Value = "aqua";
			sheet.Cell("C5").Style.Fill.BackgroundColor = XLColor.Aqua;
			sheet.Cell("C8").Value = "widtht";
			sheet.Cell("C8").Style.Font.FontColor = XLColor.Tomato;
			sheet.Cell("C9").Value = "height";
			sheet.Cell("C9").Style.Font.FontColor = XLColor.Tomato;
			sheet.Cell("C10").Value = "point";
			sheet.Cell("C10").Style.Font.FontSize = 40;
			sheet.Column("C").Width = 50;
			sheet.Row(10).Height = 50;
			wb.SaveAs(filePath);
			Console.WriteLine("ok");
		}
	}
}


```

# 写真


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/795c47a1-eeff-1d3c-a3e9-502ae19c773d.png)


以上。
生成AI: SQL の作成

## 課題
ChatGPT と wrtn に次の依頼をしました。

```text
PostgreSQL 　の次のSQL を1行にできませんか。

ALTER TABLE sch004.ren004 ADD COLUMN id004 bigint;
ALTER TABLE sch004.ren004 ALTER COLUMN id004 set default 1;
```

## ChatGPT の回答

```sql
ALTER TABLE sch004.ren004 ADD COLUMN id004 bigint; ALTER TABLE sch004.ren004 ALTER COLUMN id004 SET DEFAULT 1;
```

画面コピー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/b46576d7-dc61-46a5-2c9d-8e883850a69e.png)

感想

```text
確かに、改行をはずせば1行になる。
```

## wrtn の回答

```sql
ALTER TABLE sch004.ren004 ADD COLUMN id004 bigint DEFAULT 1;
```

画面コピー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/836edfc2-c62d-a9e4-f68b-9213f9cb472b.png)

感想

```text
これが、求めていた回答です。
```
20240719

```
$sourceFolder = "C:\パス\フォルダA"
$destinationFolder = "C:\パス\フォルダB"

# フォルダAの全サブフォルダ内のファイルを再帰的に取得し、フォルダBにコピー
Get-ChildItem -Path $sourceFolder -Recurse -File | ForEach-Object {
    $destinationPath = Join-Path -Path $destinationFolder -ChildPath $_.Name
    Copy-Item -Path $_.FullName -Destination $destinationPath -Force
}
```
UE5勉強日記AI TO MOVE

AI TO MOVEを使用する前に
Nav Mesh Bounds Volume配置必要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574567/0080fcee-13f7-d4b0-a995-f9b29b7551df.png)

配置後 Pを押して、ナビできる地域確認できる
※緑のエリア
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574567/233d3de8-31a6-1be7-b196-2a6680da7434.png)

actorなどの範囲内ではナビできないエリアがあります。
DetailのCan Ever Affect Navigationのチェックを外すことで、
ナビゲーションする時にactorを無視できる。
※物理効果を無効化ではなく、あくまでルート探す時に蒸し。ぶつかり合い時はcollisionの設定従い処理を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574567/acf9015f-0359-512c-b149-8cc8b9d0b31d.png)

椅子actorのCan Ever Affect Navigationのチェック外すと下記の図のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574567/cb97d18a-0d88-614f-ed38-d78cc572ceb5.png)
Azure OpenAI Studio の Early access playground で GPT-4o mini を試す

[GPT-4o mini が発表](https://openai.com/index/gpt-4o-mini-advancing-cost-efficient-intelligence/)されましたね！
GPT-3.5 Turboより安くて賢い待望のモデルです。

Azure AI でも即日利用可能とのアナウンスが出ています。
[OpenAI’s fastest model, GPT-4o mini is now available on Azure AI](https://azure.microsoft.com/en-us/blog/openais-fastest-model-gpt-4o-mini-is-now-available-on-azure-ai/)

2024/07/19現在では、Azure OpenAI Service(AOAI)のデプロイの選択肢にまだ出てきていません。上の投稿では、

> Try it at no cost in the Azure OpenAI Studio Playground.

とあります。Azure OpenAI Studio のプレイグラウンドで利用可能とのことです。
早速使ってみましょう。

## Azure OpenAI Studio Playground

公式ドキュメント

https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models?WT.mc_id=dotnet-8948-machiy#early-access-playground

> The GPT-4o mini early access playground is currently only available for resources in West US3 and East US, and is limited to 10 requests every five minutes per subscription. Azure OpenAI content filters are enabled at the default configuration and cannot be modified. GPT-4o mini is a preview model and is currently not available for deployment/direct API access.

> GPT-4o mini 早期アクセスプレイグラウンドは現在、West US3 および East USのリソースでのみ利用可能であり、サブスクリプションごとに5分間に10リクエストに制限されています。Azure OpenAIコンテンツフィルターはデフォルト設定で有効になっており、変更することはできません。GPT-4o mini はプレビューモデルであり、現在は デプロイメント/直接APIアクセス は利用できません。(GPT-4o による翻訳)


というわけで、通常のプレイグラウンドではなく早期アクセスプレイグランドのみで利用でき、West US3 または East US のみ対応しています。
なのでどちらかのリージョンでAOAIのリソースを作成し、Azure OpenAI Studioに移動してください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24487/fa43d70e-5a5c-639f-44a4-fcf5a8a10e0f.png)
左メニューに早期アクセスプレイグランドが表示されているので選択してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24487/90cb5d7e-fed6-e20b-edc7-22a3cfd655f1.png)
モデルで `GPT-4o mini` が選択可能になっています。

早速使ってみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24487/bdeebf78-7cc1-7300-ad16-d50e2419fe39.png)
ジョークのクオリティはともかく爆速です。AOAIにデプロイできるようになるのが待ち遠しいですね！