OmniAICreator/Qiita-1.07M huggingface dataset:
GPT4vについて

GPT4vってすごいらしいよ。

## ファッションを理解できる


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/1bf581c8-f640-3d02-76b9-0797d5fd37d3.png)
男性のファッションが異常であると認識できています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/507254af-83b8-8191-5c4f-f0b906a323d6.png)
ださいって事よ。すみませんでした。



## 文化と間取りの理解

これを見ている重役のあなた！そろそろニューヨークに栄転かもですよ！
でもGPT4vがあれば、見知らぬ家を借りるのも安心。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/2fe2f96d-aa2e-65f9-3c35-91b890ad3819.png)



## キャプチャ認証

APIに組み込めば、セキュリティ脅威になりえる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/0b9427d4-b250-3f3a-3075-6437827be3ac.png)

え？reCAPTCHA画像のやつならどうなん？
できらぁ！


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/6118df71-1f06-9efb-13c6-dabfea070364.png)






## JSON形式でのプロンプト
画像に対してJSON情報を付与して情報ゲットだぜ。
論文から。




![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/3eb9665e-d5a4-0689-7f76-ae6a7b8364ad.png)


やってみたけどエラー。日本の免許証のデータが少ないのかなと思ったけど多分NGワード。※後述します。


## 最適なプロンプト
①ステップバイステップ
これは前から言われてた。
③正しい答えを得たい。で性能アップ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/f95207dd-e981-0f60-b04c-0cead376d755.png)



## 注釈プロンプト
画像に注釈をつける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/e92addb4-46e1-c1ec-7430-2596e77d0946.png)






やってみた。よさげ。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/f24363a2-aee2-4b6b-1b3c-92ef41619e9e.png)






## 使用の注意。NGワード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/c71ac407-5fba-ec71-ed6e-9ddba78e0434.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337456/60896c01-61fd-d59a-f26a-18197d6dec19.png)




NGワード対応が難しい。
・反社会的勢力ワード
・アダルト系。特に子供系は厳しく、健全な画像でも入力時点ではじかれるが多い。
・差別系
・個人情報

プロンプトが悪いのか、NGのせいで動かないのか、わかりにくいので修行あるのみ。




おわり。
Bing Chat に学習指導案、授業計画の下書きを作ってもらう(GIGAスクール時代の探究学習)

# はじめに

この記事では、[**「Bing Chat に学習指導案、指導計画書、発問計画、総合評価問題の下書きを作ってもらう」**](https://qiita.com/hisaho/items/fd90f8247af0437c6d75) で紹介した内容を元に GIGA スクール時代の探究型学習のための学習指導案、授業計画書を作ってみます。

# プロンプト改良のポイント

プロンプト改良点は以下の2つです。

- 探求学習とは何かを定義した
- 学習ツールを定義し、授業計画で利用するにように指示した

# プロンプト

```:プロンプト
あなたは{学年}の教員です。
次の条件で{学年}の{問題解決学習}のための学習指導案を作成します。

{学年}: 小学校1年(Grade 1)

{授業科目}: 生活科学

{単元名}:たのしいあき　いっぱい

{小単元}: あきのおもちゃをつくろう

{授業時間} 45分×10回

{学習ツール}: 
-ノートPC: インターネット検索ができるPC
-ホワイトボード: グループのメンバーが何でも書くことができるデジタルホワイトボード
-Forms: アンケートなどをオンラインでとることができるツール
-OneNote: デジタルノードにノートをとる、他人との情報共有ができる
-大型モニター:映像、音声を共有できる

{探究型学習}:
探究型学習は次の手順で行う
-学習者自身が一人で学習問題を発見し、主体的になる
-みんなで議論し、学習問題を整理、理解する
-学習者自身が一人で仮説を立てて検証する
-みんなでグループディスカッションし、検証、解決にたどり着く
-学習者自身が一人で解決策を吟味し自分が納得する



#学習指導案
-{小単元}の学習指導案は次の書式で作成します。

---
{学年} {授業科目} 学習指導案

#単元名:

「{単元名}」

#小単元名:

「{小単元名}」
---

#小単元の目標:

次の観点を考慮し、{小単元}の目標を箇条書きで作成します。
-知識及び技能の基礎
-思考力、判断力、表現力等の基礎
-学びに向かう力、人間性等

#単元について:
次の観点を考慮し学習者の目線で何を学ぶのかを箇条書きでまとめます。
-この{小単元}についての学習者の目線で何を学ぶのかを作成します。

#学びを支えるために
次の観点を考慮して学びを支えるための手法を箇条書きで記述します。
-学習ツールを使用せずに、学習者の学習の質を高める方法5以下で作成します。
-学習ツールを使って、学習者の学習の質を高める方法を5以下で作成します。


#小単元の評価基準:

小単元の評価基準は以下の項目にそって作成します。
-知識・技能
-思考・判断・表現
-主体的に学習に取り組む態度

#学習計画:
次の条件に従い、学習プランを作成します。
- {学習指導案}を元に各授業時間の学習計画を作成してください。
```

# 回答結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/f66f669d-2afd-c57b-f91f-2b82ef84d237.png)

小単元の目標や評価基準はそれほど変化は見られません。

授業は45分×10回で設定したので、各授業の授業計画の概要は次のようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/fa79a8aa-127d-3945-886f-c31285927ee3.png)

各授業の授業計画の詳細を見ていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/1ab6c4c1-bbbc-53ef-b611-0756af2f580a.png)

教員主導の授業ではなく、学習者が自ら学ぶ授業形態になっているのがわかります。また、適切な場面で事前に指定した学習ツールを取り入れていることもわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/27a5c874-f54d-b3b7-2ca7-77ece32b2dca.png)

前回の授業の振り返りをちゃんと授業冒頭にもってきていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/6c5955fb-db95-a7dc-957c-23f6afca5e0c.png)

Forms 使ってアンケートもとろうとしていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/dc618980-3ff9-c84c-c579-79caed5ead8c.png)

この授業では、アンケート結果を元に、最も人気のあったアイデアについてのディスカッションからはじめています。

# まとめ

どのような教育を実施したいのか、授業中に使用する学習ツールを定義することで、適切な授業計画を Bing Chat が生成できることが検証できました。
Databricksジョブで実行したSQLクエリーの結果を参照する際のアクセス権

意外とハマりました。

# クエリー結果を参照できる条件

ジョブの結果からSQLクエリーの実行結果を参照するには、以下の条件を全て満たす必要があります。

1. 参照者がジョブの参照権限を持っている
1. 参照者が実行されるクエリーの参照権限を持っている
1. 以下のいずれかを満たしている
    1. ジョブの実行者とクエリーの実行者が一致している
    1. ジョブの実行者とジョブ結果の参照者が一致している

ジョブの実行者はジョブの画面の**ジョブの詳細**で設定できます。
![Screenshot 2023-10-24 at 7.48.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/449630fa-747f-91fa-25fa-d94ae594e3f5.png)

クエリーの実行者はクエリーの権限設定で選択します。この際に注意しなくてはならないのは資格情報です。**所有者として実行**と**閲覧者として実行**が選択できます。

- 所有者として実行：クエリーの作成者の権限でクエリーが実行されます。
- 閲覧者として実行：クエリーを参照するユーザーの権限でクエリーが実行されます。

![Screenshot 2023-10-23 at 9.22.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c1337990-409e-6072-4054-fa89c84d5fa7.png)

条件1と条件2は設定すれば良い話ですが、条件3-1を満たすのか、条件3-2を満たすのかでアプローチが変わってきます。

# 条件3-1「ジョブの実行者とクエリーの実行者が一致」を満たすアプローチ

**ジョブの実行者とクエリーの実行者が一致している**必要がありますが、ジョブの実行者は設定可能ですが固定です。クエリーの資格情報が**所有者として実行**になっているのであれば、ジョブの実行者もクエリーの所有者にすればOKです。

以下の例では、一番上のユーザーがクエリー`last_login`の所有者(クエリー所有者)です。このユーザーの権限でクエリーが実行されるようにします。また、参照者(takaaki.yayoi@databricks.com: 参照ユーザー)に対してクエリーの参照権限を付与します。
![Screenshot 2023-10-24 at 7.55.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4d4deefd-65ad-ba2c-7985-542d1195fe2f.png)

このSQLクエリーを実行するジョブの実行者もクエリー所有者にします。
![Screenshot 2023-10-24 at 7.57.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/39cc775c-e3ba-da7f-5443-fce73765d307.png)

これで、参照ユーザーもSQLクエリーの実行結果を参照できます。
![Screenshot 2023-10-24 at 8.01.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7a6327a8-c982-ab9c-c938-d587ce1e1450.png)

クエリーへの参照権限がないとエラーになります。
![Screenshot 2023-10-24 at 8.02.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/98a01895-0889-4822-5425-0af3aaa5055b.png)

# 条件3-2「ジョブの実行者とジョブ結果の参照者が一致」を満たすアプローチ

クエリーの資格情報を**所有者として実行**に設定できないケースがあります。その場合にはこちらのアプローチを取ることになります。**クエリー結果の参照者をジョブの実行者にする**というものです。注意点としては、特定のユーザーに対して設定できるものであり、グループには設定できないというものです。

クエリーの資格情報を**閲覧者として実行**を選択します。そして、参照者(takaaki.yayoi@databricks.com: 参照ユーザー)に対してクエリーの実行権限を付与します。また、クエリーで操作するテーブルに対して適切な参照権限を付与します。
![Screenshot 2023-10-24 at 8.05.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/75ec86b2-0d1f-d58c-4937-947ccc20990b.png)

ジョブの実行者を**参照ユーザー**に設定してジョブを実行します。
![Screenshot 2023-10-24 at 8.09.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9dacb104-3499-515e-ef0b-fde7e1ac6ef4.png)

参照ユーザーとしてジョブの実行結果にアクセスするとクエリーの結果を確認できます。
![Screenshot 2023-10-24 at 8.10.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/28142a26-79c7-54fe-bd9f-128ff3686095.png)

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
JTC作法！もう日付を手打ちしない！バッチファイルでファイル名を簡単付与

## この記事のハイライト
![Animation_AddDate(Top).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1582/16df0c61-6450-914b-c784-7fe400254d39.gif)

「報告書.docx」のファイル名を、バッチ処理により、末尾に日付をつけています。予め古い日付が入っている場合は、現在日付に更新します。複数ファイルも対応しています。

## 背景
現在もファイル名に日付を含めて管理している会社は少なくありません。色々と議論がある方法だとは思いますが、ルールに従うしかありません。

例として、以下のようなファイル名を考えてみましょう。
* 231024_報告書.docx
* 報告書_231024.docx

## 課題
このようなファイル名での管理方法は、いくつかの点で不便です。

* 日付を毎回思い出して入力するのが面倒
* 日付の数字を一つずつ打ち込むのが煩わしい
* 更新する度に日付を変更するのが面倒

全社規模でのファイル管理システムの導入は難しい場合もあるでしょう。しかし我々は、個人の範疇で改善策を考えることはできます。

そこで、日付を自動でファイル名に追加するバッチファイルを作成しました。

## 使用方法
以下のコードをメモ帳や任意のテキストエディタにコピーして、ANSI形式で保存します。保存時の初期名が「新しいテキストドキュメント.txt」となっている場合、これを「AddDate(Top).bat」という名前に変更します。

このバッチファイルにファイルをドラッグアンドドロップすることで、自動的にそのファイル名に日付を追加できます。

もしファイル名にすでに日付が含まれている場合、その日付部分を現在の日付で更新します。もちろん、複数のファイルを一度に処理することも可能です。

ファイルだけでなく、フォルダをドラッグアンドドロップしても、フォルダの名前を変更できます。

## 右クリックメニューから使用
さらに便利に使用するため、このバッチファイルを「送る」メニューに追加することもできます。具体的な方法としては、Windows+Rキーを同時に押し、「cmd」ウィンドウを開きます。そこで「shell:sendto」と入力してEnterキーを押します。そうすると表示されるフォルダ内に「AddDate(Top).bat」を移動またはコピーします。

これにより、ファイルを右クリックした際のコンテキストメニュー内に「AddDate(Top).bat」が表示され、そこから直接日付の追加が可能となります。

## バッチファイルのコード
### AddDate(Top)
ファイル名の先頭に日付を追加するバッチファイルのコードは以下の通りです。

```batch:AddDate(Top).bat
@echo off
setlocal enabledelayedexpansion

:LOOP
rem Exit if no filename is provided
if "%~nx1" == "" goto EOF

rem Get the date in YYMMDD format
set "NewDate=!DATE:~2,2!!DATE:~5,2!!DATE:~8,2!"

set "FileName=%~n1"


rem Remove a 6-digit date at the beginning, if it exists
if "!FileName:~0,6!" lss "290000" (
    if "!FileName:~0,6!" gtr "200000" (
        set "FileName=!FileName:~6!"
    )
)

rem Remove a leading underscore or space
if "!FileName:~0,1!"=="_" set "FileName=!FileName:~1!"
if "!FileName:~0,1!"==" " set "FileName=!FileName:~1!"

rem Concatenate the date and filename
set "NewFileName=!NewDate!_!FileName!%~x1"

rem Rename the file
ren "%~1" "!NewFileName!"

rem Move to the next file
shift
goto LOOP

:EOF
endlocal
```

### AddDate(End)
ファイル名の後ろに日付を入力するバッチファイルはこちら。コメント部分は日本語です。

```batch:AddDate(End).bat
@echo off
setlocal enabledelayedexpansion

:LOOP
rem ファイル名がない場合、処理終了
if "%~nx1" == "" goto EOF

rem 日付をYYMMDD形式で取得
set "NewDate=!DATE:~2,2!!DATE:~5,2!!DATE:~8,2!"

set "FileName=%~n1"

rem 6桁の日付が後ろにあるかチェックして削除
if "!FileName:~-6!" lss "290000" if "!FileName:~-6!" gtr "200000" set "FileName=!FileName:~0,-6!"
rem 8桁の日付が後ろにあるかチェックして削除
if "!FileName:~-8!" lss "20900000" if "!FileName:~-8!" gtr "20000000" set "FileName=!FileName:~0,-8!"

rem アンダースコアやスペースで終わる場合、それを取り除く
if "!FileName:~-1!"=="_" set "FileName=!FileName:~0,-1!"
if "!FileName:~-1!"==" " set "FileName=!FileName:~0,-1!"

rem ファイル名と日付を結合
set "NewFileName=!FileName!_!NewDate!%~x1"

rem リネーム
ren "%~1" "!NewFileName!"

rem 次のファイルに移動
shift
goto LOOP

:EOF
endlocal
```

## 最後に
これで、日付の手打ち作業から解放されますね！

* 上記の日付はYYMMDDというタイプ。YYYYMMDD(20231024)の日付で管理する会社もあるかもしれません。

* 特殊な日付環境やお行儀の悪いファイル名は考慮していません。

* ここまで書いた後に見つけた、同じような内容の記事。日付更新、複数ファイル対応したのが私の記事の特徴ですね。

バッチファイルにドロップして、ファイル名に現在日時を付加する
https://qiita.com/koiwaiwaiko/items/09960b80b31fd02cbd8a
Kotlin: Coroutine の使い方

## プログラム

```kt
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.delay

suspend fun main() = coroutineScope {
    val aa = 10
    val bb = 20
    var cc = 0
    var dd = 0
    launch {
       delay(1000)
       println("Kotlin Coroutines World!") 
       cc = aa + bb
       dd = aa - bb     
       println("cc = $cc\t\tdd = $dd")
    }
    println("こんにちは") 
    println("cc = $cc\t\tdd = $dd")   
}
```

## 実行結果

```text
こんにちは
cc = 0		dd = 0
Kotlin Coroutines World!
cc = 30		dd = -10
```

play.kotinlang.org で実行した時の様子
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/fc790e7d-4ff3-396d-8e76-29b3f07ce60d.png)

## Coroutine の終了を待機
.join を加えます。
プログラム

```kt
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.delay

suspend fun main() = coroutineScope {
    val aa = 10
    val bb = 20
    var cc = 0
    var dd = 0
    launch {
       delay(1000)
       println("Kotlin Coroutines World!") 
       cc = aa + bb
       dd = aa - bb     
       println("cc = $cc\t\tdd = $dd")
    }.join()
    println("こんにちは") 
    println("cc = $cc\t\tdd = $dd")   
}
```

実行結果

```text
Kotlin Coroutines World!
cc = 30		dd = -10
こんにちは
cc = 30		dd = -10
```
MAUI Tips - SQL Serverとの接続エラー回避（取扱い注意）

# 概要
LAN上にある.NET MAUI アプリ（Android端末で実行）と
SQL Serverを接続させようとした際に発生したエラーを
とりあえず回避する方法の備忘録。

# 環境
◾️Android端末（API 30）
Visual Studio for MAC
.NET MAUI
.NET 7
Microsoft.Data.SqlClient（Ver 5.1.1）

◾️サーバー
SQL Server 2022


# 発生したエラー
※スマホアプリでデータベースを直接見に行くのは
　いかがなものかという話は置いといて・・・。

SQL Serverに接続すると、以下のような例外が発生。

```
A connection was successfully established with the server, 
but then an error occurred during the pre-login handshake. 
(provider: TCP Provider, error: 35 - An internal exception was caught)
```

同じコードでAzure SQL Databaseには接続できていたので、
何かしらサーバー側の設定なんだと思って調べていたけど、
よくわからず・・・。

# 解決策

githubのissueを読んでいたら、今回の環境（ローカルネットワーク内で閉じた接続）であれば
適用できる解決策が記載されていました。

[https://github.com/dotnet/SqlClient/issues/1656#issuecomment-1355500465](https://github.com/dotnet/SqlClient/issues/1656#issuecomment-1355500465)

上記のリンク先のコードをそのまま実装したところ、エラーを回避できます。
※このリンク先にも書いてありますが、この解決策はセキュリティ上問題があります。


サーバー証明書がない場合に、Android側のセキュリティによってエラーとなるようですね。
自己証明書でも同様のエラーになるかは未確認です。

今回の環境やケースは特殊なので、あくまで参考までに・・・ということで。
Zsh: 起動を94%高速化したコマンド補完のオンデマンドロード

私たちはソフトウェア開発において、頻繁にターミナルを使用します。特にZshのような強力なシェルは、その豊富な機能とカスタマイズ性により、私たちの手助けをしてくれます。しかし、その一方で、Zshの起動が遅くなる問題があります。それは一体何が原因で、どう改善できるのでしょうか。この記事では、その問題と解決策について見ていきましょう。

## コマンドの補完とパフォーマンス

Zshでは、多くのコマンドに対して補完機能を提供しています。また、多くのコマンドラインツールも自身の補完機能を提供し、それを`.zshrc`に追加するように指示しています。例えば、`op`コマンドは以下のように補完機能を提供します。

```zsh
eval "$(op completion zsh)"
```

しかし、こうした補完スクリプトを気軽に`.zshrc`に追加していくと、Zshの起動時間がぐんと増えてしまいます。`.zshrc`に書かれたものは、新しいターミナルセッションを開始するたびに読み込まれるからです。

## 遅延ローディング（オンデマンドローディング）を利用しよう

そこで、補完スクリプトを「遅延ローディング」または「オンデマンドローディング」させる方法を紹介します。これは補完スクリプトを必要になったときだけロードするというアイデアです。具体的には、以下のように設定します。

```zsh
function _op() {
  unfunction "$0"
  eval "$(op completion zsh)"
  $0 "$@"
}
compdef _op op
```

このスクリプトは次のように働きます。

1. `_op`という新しい関数を定義します。
2. この関数の中で、まず関数自身を削除します。
3. 次に`eval`のところで`op`の補完を生成します。
4. 最後に生成した補完コマンドを、元の`_op`コマンドを同じ引数で実行します。
5. これにより、`_op`関数は一度だけ評価され、それ以降は生成された補完コマンドが直接呼ばれます。

このようにして、補完が必要になったときだけ補完をロードします。

## パフォーマンスの向上

この改善により、zshの起動時間が大幅に短縮されました。

ためしに、施策前の書き方と施策後の書き方を100回繰り返してからzshを起動するようにしてみました。

その結果、施策前の方法では起動に4.7秒かかったのに対し、遅延ローディングを利用した方法ではわずか0.3秒となりました。

つまり、起動時間が約94%短縮され、大きなパフォーマンスの改善が見られました。

## まとめ

Zshの起動時間の問題は、命令を遅延ローディング（オンデマンドローディング）させることで解決することができました。このように単純な変更がパフォーマンスに大きな影響を与えることがあります。この経験が、皆さんの作業を少しでも効率化するのに役立つことを願っています。
心理学安全性が欠如している状態と「マザーコンプレックス」の状態は似ている





## 「マザコン」との関連

心理的安全性をこれまでの知識と照らし合わせたとき、
**心理学安全性が欠如している状態と「マザーコンプレックス」の状態は非常に似ていると思いました。**(あくまで個人の意見)

そもそも「マザーコンプレックス」の定義とは何でしょうか？


## マザーコンプレックスの定義

簡単に言えば「**母親にすべての判断をゆだねてしまう**」という症状である。
実際の表現としては、「母親離れしていない」「自己決断力に欠ける」などが適切です。

別の表現では**自分と母親の境界線が引けなくなった状態**と説明している。

> 癒着の状態は、「お母さんはお母さん。私は私。」という線が引けなくなっている状態です。癒着していると、自分の気持ちがどうかよりも、「お母さんがどう思っているのか？」と母親の顔色をうかがったり、「お母さんが気に入るかどうか？」で決めようとしたりしがちになります。


## 似ていると思った点

心理的安全性が保たれていない状態は以下のような状態です。

- （１）無知だと思われる不安（Ignorant）
質問や確認をしたくても「こんなことも知らないのかと思われないか」と不安になり、その結果、気になることがあっても質問しづらくなってしまいます。

- （２）無能だと思われる不安（Incompetent）
ミスや失敗した時に「仕事ができないと思われるのでは」と不安になり、自分の失敗や弱点を認めなかったり、ミスを報告しなかったりするようになります。

- （３）邪魔をしていると思われる不安（Intrusive）
自分が発言することで「話の邪魔をしていると思われないか」不安になり、提案や発言をしなくなっていきます。

- （４）ネガティブだと思われる不安（Negative）
改善を提案したくても「他の人の意見を批判していると否定的に捉えられるのでは」と不安になり、現状の批判をしなくなったり、意見があっても言わなくなったりします。

以下の記事を参考にしました。

https://www.recruit-ms.co.jp/glossary/dtl/0000000230/

4つありますが共通点をとらえると、**上司をがっかりさせたくない**という心理があります。

**上司をがっかりさせたくないと思った結果、質問も確認もネガティブだと思われる発言もミスの報告もできなくなってしまうのです。**

この**上司をがっかりさせたくない**という心理はマザーコンプレックスの子の心理と非常に酷似していると思います。



## マザーコンプレックスの原因:母親の過干渉と期待に答えようとした

もっともわかりやすく、そして簡略化された母親との癒着の原因は次の通りです。

> 子供に「ああしなさい。こうしなさい。」「これしちゃダメ、あれしちゃダメ。」と口出しをする母親がいたとします。実は、母親として自信がなかったから過干渉にならなければならなかったのだとしたら、傍に居る子供が感じる気持ちは、母親の不安です。子供の心では、自分が母親の言うことを聞くことで母親が安心するならばと、いい子ほどがんばります。

from https://www.counselingservice.jp/lecture/3310/

つまり、**母親の過干渉から親の不安を感じ取り、「母親の不安を取り除くにはどうすればいいか？」を成功の指標としてしまう。** ということが根本の原因の用です。

「自分にとって最大の利益は何か？」「自分はどうしたいのか?」ではなく、「母親の不安を取り除くには？」を第一に考えてしまうのでしょう。

> 母親に笑顔でいてほしくて、自分の気持ちをがまんしてまで、母親を優先してきたことに気がつけると、子供のやり方ではない母親とのかかわり方が見つけやすくなるでしょう。

from https://www.counselingservice.jp/lecture/3310/

この理屈を心理的安全性の欠如に当てはめると

- 上長の過干渉
- 目標のすり替え（「自分にとっての最大の利益」ではなく、「上長の不安を取り除く」を第一に考えてしまう）

この二つが心理的安全性の欠如につながります。



## 改善策:自分の心理状態に気づく、目的と役割責任範囲の設定

### まずは気づくこと

心理的安全性の確保のために重要なことは、まずは自分の心理状態に気づくことです。

虐待を受けた子供への心理療法で最も難しいのは、**自分自身が病気である、親からひどいことをされたと認識すること**です。
ですのでこの記事を読んだときに、**自分の上長はよい人だ、今の組織がなんかよくないのは自分が原因だ**と言い聞かせる状態は危険であると認識したほうがよいと思います。

その意味ではこの記事を読んでいる時点で改善に向けたスタートラインには立っています。



### 目的の設定

次は目的を設定しましょう。
ここでの目的とは、プロジェクトにおけるゴール、開発チームにおけるゴールのことです。

ここの認識を1on1の機会ですり合わせることで、「目的は上長の期待に応えることではない」
「目的はプロジェクトを成功させること」で一致させます。

このようにすることで、目標のすり替え（「自分にとっての最大の利益」ではなく、「上長の不安を取り除く」を第一に考えてしまう）を防ぐことが出来ます。


### 役割,責任範囲の設定

目的が決まった後はチームの中での自分の立ち位置、責任範囲の話をしましょう。

- 目的のために自分の役割は何か？
- 役割に伴う責任にはどの程度のものが含まれるのか？

このように自分の動ける範囲をあらかじめすり合わせることで、**目的を達成するために必要なことはなんでもやろう**という**自主性**が出てくるように思えます。










page:
せんせー、マイクロスケール3Dプリンティングってなに？

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

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

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

せんせー、マイクロスケール3Dプリンティングってなに？

# マイクロスケール3Dプリンティングとは

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

## マイクロスケール3Dプリンティングって何？

みんな、3Dプリンターって知ってる？それは、特別な機械を使って、プラスチックみたいな材料でおもちゃや小物を作ることができるんだよ。でも、「マイクロスケール3Dプリンティング」は、もっとすごい！これは、とっても小さなものを作る特別な3Dプリンターのことなんだ。

## どういうこと？

通常の3Dプリンターは、大きなものや簡単な形のものを作るのに使われるけど、マイクロスケール3Dプリンティングは、髪の毛よりも細いとっても小さいものを作るのに使われるんだ。科学者たちは、この技術を使って、見えないくらい小さな機械や部品を作ることができるの。

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

とっても小さいものを作るのは、とても難しいんだ。でも、このマイクロスケール3Dプリンティングを使えば、病院で使う小さな道具や、コンピュータの部品など、とても精密なものを作ることができるよ。それに、小さなものを作ることができれば、スペースをたくさん節約することもできるんだ。

## だから、マイクロスケール3Dプリンティングってなに？

マイクロスケール3Dプリンティングは、超ミニサイズのものを作ることができる特別な3Dプリンターのこと。これで、医療機器やコンピューターの部品など、小さくて複雑な形のものを作ることができるんだよ。

# まとめ

このように、マイクロスケール3Dプリンティングは、小さな世界で大きな革命を起こしているんだ。科学者たちは、この技術を使って、今までにないような小さなものを作り、私たちの生活をもっと便利で、すごいものに変えてくれるんだよ。
せんせー、スターダスト研究ってなに？

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

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

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

せんせー、スターダスト研究ってなに？

# スターダスト研究とは

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

## スターダスト研究って何？

ねえ、みんな、星のキラキラした粉、スターダストって聞いたことある？これは、宇宙の星から来たとても小さな粒子で、地球にも落ちてくるんだ。科学者の人たちは、このスターダストを集めて、調べることで宇宙のひみつを解き明かそうとしているの。それが「スターダスト研究」なんだよ。

## どういうこと？

スターダストは、遠くの星や惑星、彗星から飛んできたものなんだ。これが地球に落ちてくると、科学者たちはそれを拾って、特別な機械でどんな材料でできているのか、また、どんな場所から来たのかを調べるの。

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

スターダストを調べることで、星がどんなものでできているのか、宇宙はどんな風にできているのか、地球以外の場所にはどんなものがあるのかなど、大切なことがたくさんわかるんだ。これは、宇宙の大きなひみつを解く手がかりになることもあるんだよ。

## だから、スターダスト研究ってなに？

スターダスト研究は、宇宙から来た小さなキラキラした粒子を使って、星や宇宙のことをもっと知ろうとする科学者たちの活動のこと。この研究で、私たちは宇宙のことをもっと深く知ることができるんだ。

# まとめ

このように、スターダスト研究は宇宙の星からの小さなメッセージを読み解くことで、大きな宇宙のひみつ、星の生まれ変わりや宇宙の歴史について学ぶことができるの。科学者たちは、これからもスターダストのひみつを解き明かして、宇宙の不思議を教えてくれるんだよ。
AI-102試験対策のまとめ「Azure AI Document Intelligence」

## はじめに
Azure AI Engineer Associate(AI-102)取得に向けた勉強でまとめた内容を本記事では投稿しています。
試験範囲の内容を私が勉強していく中で、
・忘れてしまっていた内容
・他の知識と絡めて理解した方が良い内容
・Microsoft Learnの読解に苦戦した内容
などをできるだけ分かりやすく簡潔にまとめることを意識しています。
Azureの勉強を一から始め、AI-102取得を目指している方の参考になれば幸いです。
※本記事の内容が必ず試験に出るわけではないこと、ご注意ください
※勉強しながら投稿しているため、追加で学んだことがあれば随時投稿内容を更新します。

## 試験対策のまとめ
## Azure AI Document Intelligence(旧称：Form Recognizer)
フォームやドキュメントから個別のデータを抽出可能

### ドキュメント分析モデル
| モデル名 | PDF | 画像 | Microsoft Office <br> (Word/Excel/Power Point/HTML) | 抽出対象 |
| --- | :---: | :---: | :---: | --- |
| OCR読み取りモデル | ○ | ○ | ○ | ・PDFの印刷テキスト <br> ・スキャン画像の手書きテキスト <br> ・Microsoftドキュメントのテキスト |
| レイアウト分析モデル | ○ | ○ | × | ・テキスト <br> ・構造要素(タイトル/見出しなど) |
| 一般的なドキュメントモデル | ○ | ○ | × | ・キーと関連する値 <br> ・選択マーク <br> ・テキスト <br> ・テーブル <br> ・構造 |

### 事前構築済みのモデル
独自モデルのトレーニングや構築が不要  
PDFと画像ファイルをサポート
| モデル名 | 抽出対象例 |
| --- | --- |
| 請求書モデル | 発注書 / 売上請求書 / 公共料金など |
| 領収書モデル | 領収書 / レシートなど |
| 身分証明書(ID)モデル | 身分証明書 / パスポート / 運転免許証など |
| 医療保険カード | 米国の健康保険カード |
| 名刺モデル | 名刺 |
| コントラクトモデル | 契約書 |

#### **画像ファイルの入力要件**
* 形式：JPG/PNG/BMP/PDF/TIFF
* サイズ
    - 無料(FO)レベル：4MB
    - 有料(S0)レベル：500MB
    - 旧サービス(Form Recognizer)：50MB
* ディメンション：50×50ピクセル～10,000×10,000ピクセル

### カスタムモデル
#### **抽出モデル**
カスタム抽出モデルをトレーニングして、ドキュメントからラベル付きフィールドを抽出
* カスタムテンプレート：静的レイアウトからデータを抽出
* カスタムニュートラル：混在型ドキュメントからデータを抽出
* カスタム構成：モデルのコレクションを使用してデータを抽出

#### **分類モデル**
抽出モデルを呼び出す前に、入力ドキュメントを分析してドキュメントのタイプを識別
* カスタム分類子：下記を組み合わせて入力ファイル内のドキュメントを検出/識別/分類
    - レイアウト機能
    - 言語機能
* 使用例
    - 下記を含むローン申請パッケージ
        - 申込書
        - 給与明細
        - 銀行明細書
    - スキャンされた請求書のコレクション

### コマンド
* 使用するクライアント
    - モデルをトレーニングする場合：```FormTrainingClient```クラス
    - データを抽出する場合：```FormRecognizerClient```クラス
* 使用するメソッド(一例)
    - 一般的なコンテンツ認識の場合：```StartRecognizeContentFromUri```メソッド
    - 領収書を認識する場合；```StartRecognizeReceiptsFromUri```メソッド

<br>

* 参考
    - https://learn.microsoft.com/ja-jp/azure/ai-services/document-intelligence/overview?view=doc-intel-3.1.0

## 次の試験対策のまとめ
* **AI-102試験対策のまとめ「Azure AI Vision」**

https://qiita.com/fsd-jume/items/eecf039da5ada0a080d8

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/65aba5d5514e023fd66d
UnityでのNull合体演算子の使用に関する注意点

### UnityでのNull合体演算子の使用に関する注意点

Unityを使用してゲーム開発を行う中で、コンポーネントの取得や追加を効率的に書く方法として、C#の`Null合体演算子(??)`を利用することが考えられます。この記事では、その使用方法と注意点について説明します。

#### 基本的なコード:

以下のコードは、`Rigidbody2D`コンポーネントがアタッチされているか確認し、なければ追加する処理です。

```csharp
void Test1()
{
    rigidbody2D = GetComponent<Rigidbody2D>();
    if(rigidbody2D == null)
    {
        rigidbody2D = gameObject.AddComponent<Rigidbody2D>();
        Debug.Log("Test1 Rigidbody2Dがなかったためアタッチされました。");
    }
}
```

#### Null合体演算子を使った短縮形:

上記のコードは、Null合体演算子を使用して以下のように短縮することができます。

```csharp
void Test2()
{
    rigidbody2D = GetComponent<Rigidbody2D>() ?? gameObject.AddComponent<Rigidbody2D>();
    Debug.Log($"Test2 {rigidbody2D}");
}
```

![代替テキスト](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531872/e1a024b1-6086-20f1-2b81-f826b6b0b5c2.png)

しかし、この短縮形を使用した場合、意図した通りに`rigidbody2D`がセットされない場合があります。

```csharp
void Test3()
{
    rigidbody2D = GetComponent<Rigidbody2D>();
    Debug.Log($"Test3 {rigidbody2D == null}");
    Debug.Log($"Test3 {rigidbody2D is null}");
}
```

![代替テキスト](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531872/4ed32fdd-f967-44b0-8560-0d11ecdc33b1.png)
`== null` と `is null` は、一般的にC#で同じような動作をすると考えられていますが、Unityの特定の状況やシナリオでは異なる結果を返すことがあります。

`==`演算子は、特定のクラスでオーバーロードされている場合、そのオーバーロードされた動作を行います。Unityの `UnityEngine.Object` クラス（およびそのサブクラス）は `==` 演算子をオーバーロードしており、破棄されたオブジェクトや未参照のオブジェクトを `null` として扱うようにしてあります。

一方で、`is` キーワードは参照が実際にnullであるかどうかを確認します。そのため、`UnityEngine.Object`のインスタンスが破棄されているか、アクセス可能でない場合、`== null`は`true`を返すのに対して、`is null`は`false`を返す場合があります。

この挙動は、Unityの `UnityEngine.Object` の特性に由来しており、他のC#の環境やフレームワークではこのような挙動は発生しないことが多いです。
せんせー、スペクトル成像ってなに？

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

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

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

せんせー、スペクトル成像ってなに？

# スペクトル成像とは

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

## スペクトル成像って何？

ねえ、みんなは虹を見たことがあるかな？虹にはいろんな色があって、きれいだよね。この虹のように、光には見えない色もたくさんあるんだ。スペクトル成像とは、物や場所から来る光の特別な色を見つける方法だよ。

## どういうこと？

普通のカメラで写真を撮ると、物の色が分かるね。でも、スペクトル成像カメラはもっとすごいんだ！物から出る光の隠れた色も見つけることができるの。それによって、その物が何でできているのか、どんな特徴があるのかを知ることができるんだよ。

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

この特別なカメラを使うと、ただの赤や青じゃなくて、もっとたくさんの色を見ることができるんだ。たとえば、病気の植物や健康な植物、本物の絵画や偽物の絵画など、見た目では分からない違いを見つけられるの。これは、普通の目では見ることができない色まで見ることができるから、とても特別なことなんだよ。

## だから、スペクトル成像ってなに？

スペクトル成像は、虹のようにたくさんの隠れた色を見つける特別なカメラの使い方。この方法で、物や場所の秘密を知ることができるんだ。

# まとめ

このように、スペクトル成像は、物や場所が出す特別な光の色を見つけることができるすごい方法なんだ。これによって、見た目ではわからない情報を見つけたり、隠れた秘密を解き明かしたりすることができるんだよ！だから、このカメラはとっても魔法みたいな特別な道具なんだね。
せんせー、フェムト技術ってなに？

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

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

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

せんせー、フェムト技術ってなに？

# フェムト技術とは

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

## フェムト技術って何？

みんな、「フェムト」っていう言葉、聞いたことがあるかな？これは、とっても短い時間を表す言葉なんだ。一秒の何十兆分の一っていう、本当にちょっとした時間だよ。フェムト技術は、このような短い時間を使って、色んなことを調べたり、作ったりする技術のことを言うんだ。

## どういうこと？

一秒っていうと、ちょっとした時間だけど、フェムトはもっともっと短い時間なんだよ。この短い時間を使って、光や電気などをコントロールすることで、いろんなものを調べることができるの。たとえば、分子や原子がどう動いているかを見ることができるんだ。

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

普通のカメラで写真を撮ると、動いているものはぼんやりとしか写らないよね。でも、フェムト技術を使えば、動いているものもはっきりと見ることができるの。それは、超高速のカメラのようなものだと思ってね。これによって、私たちが普段見ることができない、とっても小さな世界の動きを知ることができるんだよ。

## だから、フェムト技術ってなに？

フェムト技術は、とっても短い時間を使って、小さなものの動きを調べる特別な技術。超高速のカメラのようなもので、分子や原子の動きを見ることができるんだ。

# まとめ

このように、フェムト技術は、とっても短い時間を使って、小さなものの不思議な動きを調べることができる特別な技術。これによって、私たちのまわりにあるものの秘密を知ることができるんだよ。不思議な世界を知るための、すごい技術なんだね！
せんせー、窒素固定化ってなに？

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

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

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

せんせー、窒素固定化ってなに？

# 窒素固定化とは

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

## 窒素固定化って何？

みんな、空気って息をするために必要だよね。空気の中には「窒素」という見えない成分がたくさんあるんだけど、そのままでは植物たちは使えないんだ。だから、特別な方法で「窒素固定化」をして、植物が食べられる形に変えるんだよ。

## どういうこと？

窒素は、植物が大きくなるのにとっても大切なんだ。でも、植物は空気の中の窒素を直接使うことができないの。だから、空気中の窒素を植物が使える形に変える必要があるの。これを助けるのが、特別なバイキン（微生物）や機械（工業的方法）だよ。

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

窒素固定化があるから、植物は成長して、おいしい野菜や果物になるんだ。もしこのすごい作業がなかったら、植物は十分な食べ物（栄養）を得られず、私たちの食べるものも少なくなっちゃう。だから、この過程は自然の中でも、農業で作物を育てる時にも、とっても大切なんだよ。

## だから、窒素固定化ってなに？

窒素固定化は、空気の中の見えないものを、植物が食べられる特別な食べ物に変える魔法のようなもの。このおかげで、植物は元気に育って、私たちが食べる野菜や果物を作ることができるんだ。

# まとめ

このように、窒素固定化は、植物が成長するために必要な特別な魔法のステップ。特別なバイキンや機械がこの魔法を使って、私たちのためにたくさんの食べ物を作ってくれるんだよ。それは自然の不思議な方法で、私たちの食卓に色々な食べ物を届けてくれるんだね！
【JavaScript・学習ログ4】クラスの構成

## クラスとは
オブジェクトの設計図。一度作成すれば、同じ特徴を持つオブジェクトを大量に生産できる。

## 構成
```javascript
// クラスを定義する
class Product {
	// コンストラクタ（初期化）
	constructor(name,price,category) {
		this.name = name;
		this.price = price;
		this.category = category;
	}

	//メソッドの定義
	describe() {
		console.log('この商品名は' + this.name + 'です。');
	} 
}

// インスタンス化する
const shampoo = new Product('シャンプー',500,'生活雑貨');
const coffee = new Product('コーヒー',1500,'飲料');

// インスタンスの出力
console.log(shampoo);
console.log(coffee);

// メソッド呼び出し
shampoo.describe();

// 通常のオブジェクトにメソッドを定義する
const user = {
	name:'太郎',
	age: 36,
	gender: '男性',
	greet: () => {
		console.log('よろしくお願いします');
	}
}
// メソッド呼び出し
user.greet();
```
<hr>
備忘録）RenderにGitHub経由でデプロイするなら、最初はHelloworldからでいい

結局無料のRenderが最強！といいたいところだけど、どうもRenderもポンコツで
いざデプロイしようと思ったら、大量にエラーはいて数時間たってもデプロイできないみたいなことあるので、
開発初めて早々にサーバー側・データベースで使うであろう「URL取得」・データベースログインID・PASSを取得の目的も踏まえて、
フロントはHellow　ファッキン　Worldのみ
サーバーも(expressなら）　

app.listen(port, () => {
  console.log("server running on " + port);
});
だけの状態でさっさとデプロイしてしまおう


＊どうせのちのちの修正・開発も git add . =>git commit => git push origin master(main)でできてしまうし
せんせー、ニューロインフォマティクスってなに？

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

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

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

せんせー、ニューロインフォマティクスってなに？

# ニューロインフォマティクスとは

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

## ニューロインフォマティクスって何？

みんな、自分の頭の中には、考えたり、学んだり、遊んだりするときに使う大事なものがあるって知ってる？それが「脳」だよ。ニューロインフォマティクスは、この脳をもっとよく理解するために、コンピュータの力を使って、脳のことをいっぱい勉強するんだ。

## どういうこと？

脳はとっても複雑で、何がどう動いているのかを全部把握するのは大変なんだ。だから、科学者たちはコンピュータを使って、脳の中のパズルを解こうとしているんだよ。コンピュータは、脳の写真を見たり、どう動いているかを計算したりして、脳がどう働いているのかを教えてくれるんだ。

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

脳は私たちが思ったり感じたりするすべてのことをコントロールしているから、それを理解することはとても大切。ニューロインフォマティクスがすごいのは、病気の治療を見つけたり、学ぶことをもっと楽にしたりする手がかりを見つけるのを助けてくれるからなんだよ。

## だから、ニューロインフォマティクスってなに？

ニューロインフォマティクスは、脳の動きや秘密を知るための大きな宝探しのようなもの。コンピュータの助けを借りて、私たちの脳がどうやってこんなにも素晴らしいことができるのかを探る大冒険なんだ！

# まとめ

このように、ニューロインフォマティクスは、私たちの脳についてもっと学ぶための特別な道具箱みたいなもの。科学者たちがこれを使って、私たちがどうやって考えたり、感じたりするのかを探って、みんなの生活をより良くするために役立てているんだよ！
せんせー、遺伝的プログラミングってなに？

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

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

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

せんせー、遺伝的プログラミングってなに？

# 遺伝的プログラミングとは

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

## 遺伝的プログラミングって何？

お話の中に、魔法の杖で何でも作れる魔法使いがいるよね。遺伝的プログラミングも、ちょっと似ていて、コンピュータに魔法をかけて、自分で考えたり、問題を解いたりするように教える方法なんだよ！

## どういうこと？

これは、大人たちがコンピュータゲームを作るみたいに、コンピュータに「ゲーム」をしてもらうんだ。でも、その「ゲーム」は、問題を解くこと。コンピュータはたくさんの「アイデア」を出して、一番いいアイデアが何かを自分で探すゲームなんだ。

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

この遺伝的プログラミングがすごいのは、コンピュータが自分で考える方法を学ぶから、人間が思いつかないような解決方法を見つけられることなんだ。それは、まるでコンピュータが自分の頭で考えているみたい！

## だから、遺伝的プログラミングってなに？

遺伝的プログラミングは、コンピュータに自分で考え方を学ばせる特別な魔法のようなもの。コンピュータは、新しいアイデアを自分で考え出して、問題を解決する方法を見つけるんだ。

# まとめ

このように、遺伝的プログラミングは、コンピュータがまるで魔法使いのように賢くなる方法なんだ。コンピュータが自分で考えたり、問題を解いたりすることで、私たちの生活がもっと便利に、楽しくなるんだよ！
せんせー、スキャンニングトンネル顕微鏡ってなに？

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

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

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

せんせー、スキャンニングトンネル顕微鏡ってなに？

# スキャンニングトンネル顕微鏡とは

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

## スキャンニングトンネル顕微鏡って何？

みんな、虫眼鏡で小さなものをよく見たことある？スキャンニングトンネル顕微鏡は、それよりもっと、もっと小さなものを見るための特別な「超」虫眼鏡みたいなものなんだよ。

## どういうこと？

この特別な虫眼鏡は、普通の虫眼鏡や顕微鏡とは違って、光を使わないんだ。代わりに、とっても小さな電気の「トンネル」を使って、物の表面の形や構造を見ることができるんだよ。

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

この「超」虫眼鏡で、私たちの目には見えない超小さな世界を探検することができるんだ。原子という、ものを作っているとっても小さな粒を直接見ることができるの！それは、宇宙を探検するのと同じくらいワクワクする冒険なんだよ。

## だから、スキャンニングトンネル顕微鏡ってなに？

スキャンニングトンネル顕微鏡は、超小さなものを見るための特別な道具で、とても小さな電気のトンネルを使って、物の表面を探検することができるんだ。それは、隠された小さな宝物を見つけるみたいで、とっても楽しいんだよ。

# まとめ

このように、スキャンニングトンネル顕微鏡は、私たちの目には見えない小さな世界を発見するための特別な道具なんだ。それを使って、科学者たちは新しい発見をたくさんしているんだよ。私たちのまわりには、まだまだ知らないことがたくさんあるんだね！
デカ文字)ESP32でカラー液晶、赤外線距離計を作って遊ぶ4(書き込み)



目的
秋月で売っているSTM32L010F4P6の書き込み方法

x ATM0177B5


●NUCLEO-64シリーズを用意する

![o_cop689.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/7b6d0b40-b157-732f-1b4d-9a0a7b751bb1.jpeg)



●stlinkのジャンパーを開く
(ジャンパーを図の様に付け直す)

![o_cop690.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/def9f412-b954-f965-463a-c8dc33a1ae66.jpeg)



●NUCLEO-64とSTM32L010F4P6を接続する

![o_cop691.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/74339210-f52d-6182-3895-027519fc07b1.jpeg)



●STM32CubeProgで書き込む


![o_cop692.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/313c475b-3c8c-699d-7db5-7db567696387.jpeg)
three.jsでanimation system その10

# 概要
three.jsでanimation systemを、理解したかった。
練習問題、やってみた。

# 練習問題
AnimationClipを自作せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/9f1ad93c-e225-1641-566f-aec77a87f6a9.png)


# サンプルコード

```
	var clock;
	var scene,
		camera,
		renderer,
		mixer;
	function init() {
    renderer = new THREE.WebGLRenderer({
			antialias: true
		});
		renderer.setPixelRatio(window.devicePixelRatio);
		renderer.setSize(window.innerWidth, window.innerHeight);
		document.body.appendChild(renderer.domElement);
		scene = new THREE.Scene();
		clock = new THREE.Clock();
		camera = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 1, 1000);
		camera.position.set(50, 50, 100);
		camera.lookAt(scene.position);
		var axesHelper = new THREE.AxesHelper(10);
		//scene.add(axesHelper);
    scene.add(new THREE.GridHelper(60, 10));
   	scene.background = new THREE.Color(0xbfd1e5);
		var geometry = new THREE.BoxBufferGeometry(5, 5, 5);
		var material = new THREE.MeshBasicMaterial({
			color: 0xffffff,
			transparent: true
		});
		var mesh = new THREE.Mesh(geometry, material);
		scene.add(mesh);
		var positionKF = new THREE.VectorKeyframeTrack('.position', [0, 1, 2], [0, 0, 0, 30, 0, 0, 0, 0, 0]);
		var scaleKF = new THREE.VectorKeyframeTrack('.scale', [0, 1, 2], [1, 1, 1, 2, 2, 2, 1, 1, 1]);
		var xAxis = new THREE.Vector3(1, 0, 0);
		var qInitial = new THREE.Quaternion().setFromAxisAngle(xAxis, 0);
		var qFinal = new THREE.Quaternion().setFromAxisAngle(xAxis, Math.PI);
		var quaternionKF = new THREE.QuaternionKeyframeTrack('.quaternion', [0, 1, 2], [qInitial.x, qInitial.y, qInitial.z, qInitial.w, qFinal.x, qFinal.y, qFinal.z, qFinal.w, qInitial.x, qInitial.y, qInitial.z, qInitial.w]);
		var colorKF = new THREE.ColorKeyframeTrack('.material.color', [0, 1, 2], [1, 0, 0, 0, 1, 0, 0, 0, 1], THREE.InterpolateDiscrete);
		var opacityKF = new THREE.NumberKeyframeTrack('.material.opacity', [0, 1, 2], [1, 0, 1]);
		var clip = new THREE.AnimationClip('Action', 3, [scaleKF, positionKF, quaternionKF, colorKF, opacityKF]);
		mixer = new THREE.AnimationMixer(mesh);
		var clipAction = mixer.clipAction(clip);
		clipAction.play();		
		window.addEventListener('resize', onWindowResize, false);
	}
	function onWindowResize() {
		camera.aspect = window.innerWidth / window.innerHeight;
		camera.updateProjectionMatrix();
		renderer.setSize(window.innerWidth, window.innerHeight);
	}
	function animate() {
		requestAnimationFrame(animate);
		var delta = clock.getDelta();
		if (mixer)
		{
			mixer.update(delta);
		}
		renderer.render(scene, camera);
	}
	init();
	animate();


```

# 成果物

https://embed.plnkr.co/plunk/agNVX1aKJeO9S37E


以上。
Pytorch lightningのEarlyStoppingを高速化

## モチベーション
* LLMのファインチューニングは過学習するためにEarlyStoppingをかける事が定番。
* チェックポイントの保存が必須となるが、標準はストレージへの保存となる。BERT系だと1GB弱もある。
* 交差検証なら気にならなかったがハイパーパラメータサーチとなるとSSDとはいえI/Oにかかる時間が無視できず、モデルの保存も必須ではない。
* 100サンプルの少ないデータセットだと学習している時間よりI/Oに時間がかかり、GPUの使用率が低すぎるという事態に…（ほぼ定常状態の発熱と変わらない）
* なので、計算機サーバのメモリに余裕があるのでインメモリ化して高速化

## ライブラリ
* torch2.0.1+cu118
* pytorch-lightning 2.0.9.post0

## インメモリ化の定義
* ModelCheckpointの保存先をBytesIOに渡すようにオーバーライドするだけ

```python
import io
class InMemoryModelCheckpoint(ModelCheckpoint):
    def _save_model(self, trainer, filepath):
        """モデルのstate_dictをメモリに保存"""
        binary_stream = io.BytesIO()
        trainer.save_checkpoint(filepath=binary_stream)
```

## 通常のModelCheckpointと同様にコンストラクタ引数を設定

```python
checkpoint_callback = InMemoryModelCheckpoint(
    monitor='val_loss', # LightningModuleのself.logで保存しているパラメータ
    mode='min',
    save_top_k=1,
    save_last=False,
)

trainer = Trainer(callbacks=[checkpoint_callback])
trainer.fit(model)
```

## ロード
通常と同じ

```python
ckpt = torch.load(checkpoint_callback.best_model_path)
model.load_state_dict(ckpt['state_dict'])
```
Djangoの学習①（Djangoのインストールからプロジェクトの動作確認まで）

PythonのWebアプリケーションフレームワークDjangoを学習してみようと思いました。
ググってみたのですがあまり興味を惹かれる記事がなく
公式のTutorialを参考にすることにしました。

## Djangoをpip（Pythonのパッケージ管理ツール）インストール
```
$ pip install django

Successfully installed asgiref-3.7.2 django-4.2.6 sqlparse-0.4.4 tzdata-2023.3
```

DjangoのVersionを確認
```
$ python -m django --version
4.2.6
```


## プロジェクトの作成
```
$ django-admin startproject mysite
```
これで「mysite」という名称のディレクトリが作成されているはずです

以下のファイル構成になっていれば大丈夫
```
mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
```

## Djangoプロジェクトが動作することを確認
manage.pyファイルのあるmysiteディレクトリにに移動。
```
$ cd mysite
```

サーバーを実行
```
$ python manage.py runserver


Django version 4.2.6, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
```

[URL](http://127.0.0.1:8000/)をクリックしてブラウザにアクセス

以下のような画像が表示されれば成功です
![screencapture-127-0-0-1-8000-2023-10-24-03_40_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790258/16ea5f72-e5d6-f715-832b-83d62f7c81d7.png)



続きは次回以降行います。
2023/10/24主にITとかセキュリティの記事

シスコのIOS XE Softwareのセキュリティ問題続く、追加で重大な脆弱性が発覚(10/22)
https://news.mynavi.jp/techplus/article/20231022-2798392/

KnowBe4のフィッシングテストの結果、人事関連の件名の電子メールで攻撃する傾向が依然として強い(10/21)
https://www.businesswire.com/news/home/20231018091819/ja

初心者が Fastly の基本を理解してみる(10/21)
https://dev.classmethod.jp/articles/fastly-basics-for-beginners/

中丸雄一　ＮＴＴ子会社情報流出に「同等規模の企業でもあるんじゃないかと不安」(10/22)
https://news.yahoo.co.jp/articles/91dc88595baeb7b9938aad8e33597ca125821137

企業ユーザーへの提供はいつ？　9月配布開始のWindows 11更新の疑問に答える(10/23)
https://xtech.nikkei.com/atcl/nxt/column/18/02620/101900003/

まずは小さい部署から始めよう、企業への「パスキー」導入の勘所(10/23)
https://xtech.nikkei.com/atcl/nxt/column/18/02618/101900003/

超小型ラズパイの「Pico W」、自在なネットワーク接続でIoT機器を実現 Part1 無線LAN編（前半）(10/23)
https://xtech.nikkei.com/atcl/nxt/column/18/02584/091900001/

NTT法（NTT Law）(10/23)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600009/101700153/

「本業」の変革なきDXの落とし穴　新規事業の創出だけでよいのか(10/23)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600007/101300152/

全銀システム50年で初の不覚　他行宛て振り込みが不能に
全国銀行資金決済ネットワーク(10/23)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600011/101800142/

イチから理解　生成AI10の疑問(10/23)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600014/101600158/
psycopg2をpip installしようとすると、UnicodeDecodeErrorになる



```
pip install psycopg2
や
pip install psycopg2-binary
```
を行うとUnicodeDecodeErrorエラーになる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125193/f0b2e8a8-2b0f-b50d-140e-b0647d69c3e9.png)

調べていろいろやったが、うまくいかない

pythonのバージョンを 3.12.0 から 3.8.10に落としたら行けた
```
> python -V
Python 3.12.0
```

ダウングレードは、そのバージョンのインストーラーをダウンロードして、インストール時にパスを上書くようにすればいいだけ
もし仮想環境を使っているのならそれも作り直す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125193/cb57c207-720f-35ef-54f3-cfd469cf323f.png)
JavaScriptの非同期処理の変遷② Promiseを利用することで改善できたこととは？

前回の記事でコールバック関数の登場とその課題について整理しました。

https://qiita.com/yusuke2310/items/534a007836089eebb2f4

今回はそんなコールバック関数の問題を解決した**Promise**について記載しています。

今回もSoftware Design 2023年9月号の内容をまとめています。

▼参考文献

https://gihyo.jp/magazine/SD/archive/2023/202309

---

## Promiseを用いた非同期処理の改善
:::note
非同期処理では処理結果の値をすぐには使えないという性質がある。
:::

同期処理のように結果を関数の戻り値にできない。例えば次のような投稿取得処理getPostが処理結果となる結果postを返すことはできない。
```javascript
// 非同期処理では結果をすぐに返せない
const post = getPost(postId);
```

結果を次の処理に受け渡すために、どうしてもコールバック関数の受け渡しが必要でした。この制約がコールバック地獄に繋がっていた。

この問題を解決するために、投稿取得処理getPostは将来得られるであろう投稿postをPromiseオブジェクトpostPromiseとして返すことができる。

```javascript
// 結果の代わりにPromiseを返す
const psotPromise = getPost(postId);
```

Promiseが返された時点では結果が確定していない場合もあるため、PromiseからPromise.resultのように結果を参照することはできない。
その代わり、Promiseのthenメソッドにコールバック関数を渡すことで、**結果が確定した時にその値を参照できる。**



以下では前回の記事で書かれたコールバック関数によって生まれた2つの問題をPromiseがどのように解消したか記述しています。

## コールバック地獄を解消
:::note
Promiseの特徴は、同期処理の関数呼び出しと戻り値の関係と同じ形で書けるようになるところ。そのためコールバック地獄の例で見たような処理の入れ子が発生しなくなる。
:::

#### コールバック地獄
```javascript
getPost(postId, (post) => {
    getUser(post.userId, (user) => {
        getOrganization(user.orgId, (org) => {
            // さらにコードがネストされて読みにくくなる
        });
    });
});
```

#### 非同期処理がフラットになった様子
```javascript
const promise1 = getPost(postId);
const promise2 = promise1.then((post) => getUser(post.userId));
const promise3 = promise2.then((user) => getOrganization(user.orgId));
```

## 不統一なコールバックAPIを解消
コールバック関数APIには標準的なパターンがなく、各APIは独自のパターンを持っていた.そのため「開発者は各APIごとにコールバックパターンを正しく理解する」必要があり、実装の障壁となったり、コールバック地獄をさらに複雑化させたりする要因になっていた。

そこでPromiseが導入されたことで、上記のような問題も解消された。

#### 不統一なコールバックAPI
```javascript
// readFile関数（Node.jsのAPIで、ファイルを読み込む関数）
import { readFile } from "fs";
readFile("file.txt", "utf8", (error, data) => {
    if (error) {
        // 失敗時の処理
    } else {
        // 成功時の処理
    }
});

/*================================================*/
// XMLHttpRequest(HTTPリクエストを送信するAPI)
onst xhr = new XMLHttpRequest();
xhr.open("GET", "http://api.example.com");
xhr.onload = () => {
    // 成功時の処理
};
xhr.onerror = () => {
    // 失敗時の処理
};
xhr.send();
```

#### Promiseの導入
```javascript
// Promise化されたreadFile
import { readFile } from "fs/promises";
readFile("file.txt", "utf8")
    .then((data) => {
        // 成功時の処理
    })
    .catch((error) => {
        // 失敗時の処理
    }
});

// Promise化したXMLHttpRequest（Promiseを返すfetchを用いる方法）
fetch("http://api.example.com")
    .then((response) => {
        // 成功時の処理
    })
    .catch((error) => {
        // 失敗時の処理
    }
```

:::note
非同期処理にPromiseが用いられると、全く異なる目的や機能を持つAPIでも、同じ形式で書くことができるようになった。
こうした非同期処理の統一性が、JavaScriptのPromiseがもたらした最も重要な改善の一つ。
:::

---

https://qiita.com/yusuke2310/items/b2dbe85c966bb14268eb
Powershellを使って定型メールに必要な情報を入力した上でメールで通知する処理を効率化する

## 背景
入社処理とかで、システムのアカウント情報を複数人宛にメールで通知する際、一人一人に対してメール本文を作成して送るのが面倒だったので作成。


## 仕組み
Powershellで標準入力待ちの状態でプログラムを起動させ、メールに必要な情報を入力して定例のメール文を作成して送信する。


## コード
```
# スクリプトの実行ログを生成、取得開始
$filename = Get-Date -Format "yyyy-MMdd-HHmmss"
Start-Transcript -Path $filename -Append

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

    # 標準入力で必要な情報を入力する
    do {
        $name = Read-Host "`r`n名前を入力してください"
        $ma = Read-Host "`r`nメールアドレスを入力してください"
        $pass = Read-Host "`r`nパスワードを入力してください"
        $text = "${name} さん
    
        ■メールアドレス：${ma}
        ■パスワード：${pass}"
    
        # 送信するメール本文を表示
        Write-Output "

        送信するメール文はこんなかんじ！
        
        ↓ ↓ ↓
        
        ----
        
        $text
        
        ----"
    
        $to = $ma
        $to1 = ""  # ここに宛先アドレスを入力してください
        $from = ""  # ここに送信元メールアドレスを入力してください
        $smtp = ""  # ここにSMTPサーバーを入力してください
        $subject = "XXX"
        [string]$body = $text
    
        $input = Read-Host "`r`nメールを送信しますか(yes or no)？"
    
        # yesだったらメールを飛ばす
        If ($input -eq "yes") {
            Send-MailMessage -To $to -From $from -SmtpServer $smtp -Subject $subject -Body $body -Encoding UTF8
            Send-MailMessage -To $to1 -From $from -SmtpServer $smtp -Subject $subject -Body $body -Encoding UTF8
            Write-Output "`r`nメールの送信が完了しました！`r`n"
    
        # noたったらメールの送信を中止する
        } ElseIf ($input -eq "no") {
        　　　　Write-Output "`r`nメールの送信を中止しました！`r`n"
        }
    
        # 処理を継続する場合はyesを入力する。yesの場合最初の標準入力待ちの状態に戻る。
        $restart = Read-Host "`r`n処理を継続しますか(yes or no)？"
    } while ($restart -eq "yes")

# スクリプトの実行ログの取得終了
Stop-Transcript

```
Red Hat Enterprise Linux 8.8を導入後に行ったこと

# はじめに
Red Hat Enterprise Linux 8.8の導入後に幾つか行った環境設定を以下に記します。
# タイムゾーンの設定
デフォルトではタイムゾーンがAmerica/Los_Angelsでインストールされたので、タイムゾーンをAsia/Tokyoに変更します。タイムゾーンの設定、確認はtimedatectlコマンドを使用します。

・timedatectlの主なオプション
|オプション                   |説明                        |
|----------------------------|---------------------------|
|status　                    |現在の時刻と設定を表示       　|
|list-timezones            　|利用可能なタイムゾーンを表示   |
|set-timezone タイムゾーン名 　|タイムゾーンを設定　       　 |

それでは、タイムゾーンの現状を確認してみます。

timdatectl statusで現状を確認。
![rhel8.8_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366126/1b2f4cf5-9c40-5963-b15b-11e6fea77ca4.png)

America/Los_Angelsが設定されているので、Asia/Tokyoに設定、変更します。
![rhel8.8_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366126/2b6c67bc-b54d-54fd-3520-f647b8b09c57.png)

# システムロケールとキーボードレイアウトの設定
デフォルトではシステムロケールがen_US、キーボードレイアウトがusでインストールされたので、システムロケール、キーボードレイアウトを日本語に変更します。システムロケール、キーボードレイアウト共にlocalectlコマンドを使用します。

・localectlの主なオプション
|オプション                   |説明                             |
|----------------------------|---------------------------------|
|status　                    |現在のロケール設定を表示          　|
|list-locales              　|利用可能なロケールを表示            |
|set-locale 設定するロケール 　|システムロケールを設定　            |
|list-keymaps　              |利用可能なキーボードレイアウトを表示　|
|set-keymap 設定するキーマップ |キーマップを設定　                 |

それでは、システムロケールの現状を確認してみます。

localectl statusで現状を確認。
![rhel8.8_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366126/cb91b090-9b36-c85c-2faa-d98dd2dd0191.png)

en_USが設定されているので、ja_JP.utf8に設定、変更します。
キーボードがUSなので、日本語キーボードのja_JPのアンダースコアはShift+8で入力可能です。

localectl set-locale ja_JP.utf8でシステムロケールを日本語に変更。
![rhel8.8_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366126/0866a577-e3c3-386a-0bf9-d1c356953d12.png)

次に、jp106をオプションに指定してキーボードレイアウトを日本語に変更します。

localectl set-keymap jp106でキーボードレイアウトを日本語に変更。
![rhel8.8_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366126/c4b539ac-16eb-c120-a61f-bd3eb4a1d65f.png)

# ホスト名の設定
デフォルトではホスト名がlocalhostになっていたので、ホスト名を設定します。
hosnameおよびhostnamectlコマンドで現在のホスト名を確認します。

![rhel8.8_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366126/6c67ce42-cd32-bc03-020b-5e05b3cc019f.png)

hostnameコマンドでホスト名を変更することは可能ですが、Transient hostname、つまり一時的にホスト名が変更されるだけです。
![rhel8.8_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366126/6d89ed6e-7cb7-243c-d395-cc1026074f2b.png)

恒久的にホスト名を変更するためにhostnamectlコマンドにset-hostnameオプションを指定します。
![rhel8.8_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366126/d8d19ae7-ae91-2cdf-a88b-511c906c7e01.png)

# 終わりに
Cent OS8を導入したときはデフォルトでネットワークデバイスが無効になっていたので、nmcli c mとかやらなくてはいけませんでしたが、RHEL8は最初からネットワークデバイスが有効でネットワークに接続できました。
これを読むとコードがめっちゃ読みやすくなる! Next.js(React)とTypeScriptでパスのaliasを設定(importエイリアス)について

# この記事を書いている時のバージョン
Next.jsの13の時に書いてあります。
```
% npx next -v

Next.js v13.5.3
npm notice 
npm notice New major version of npm available! 8.19.2 -> 10.2.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.2.1
npm notice Run npm install -g npm@10.2.1 to update!
npm notice 
```

# どういう場面で使ったか
componentsフォルダの中にusersフォルダを作って、```Header.tsx```を作成した。
そのデータをインポートするために以下のコードを書いた。
```tsx
import { Header} from "../components/users/Header";
```
しかし、```importエイリアス```を使うように言われて調べて実装することにしました。

# どう書き換えた？
公式ドキュメントを調べてみて以下のように記述を書き換えました。

```tsx
import { TableHeader } from "@/components/users/Header";
```
```"../"```を```@に書き換え```ました。
そしてtsconfig.jsonを以下のように記載しました。
```tsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/components/*": ["components/*"]
    },
#省略
}
```
このように書き換えました。もし
```tsx
import { useAuth } from "@/contexts/authContext";
```
とかならこのようにtsconfig.jsonに付け足します。
```tsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/components/*": ["components/*"],
      "@/contexts/*": ["contexts/*"]
    },
#省略
}
```

# importエイリアスのメリット
ChatGPTに聞いてみました。

1.```ファイルパスの変更が簡単になる```
2.```コードが読みやすくなる```
3.```モジュールを別のところでも使える```
4.```エラーを防ぐ```
5.```モジュールのグループ化して整理できる```

上のようなメリットがあるのでよかったら使ってみてください。もし
```tsx
import Styled from "../../components/common/Styled";
import Header from "../../components/common/Header";
import Nav from "../../components/common/Nav";
import List from "../../components/users/List";
```
みたいなのが***列挙されていたら読みづらい***ですよね。😭
僕はこれでエラーで詰まって1時間も解決できずに詰まってしまいました泣。
***このやり方をやるとコード読みやすく***なりますよ！

# 公式ドキュメント
書き方は公式ドキュメントで確認してください。

https://nextjs.org/docs/app/building-your-application/configuring/absolute-imports-and-module-aliases

# 　資料

https://qiita.com/Statham/items/8a1161c7816e360590f3
Salesforce Einsteinボットのバージョンを戻す

https://qiita.com/pilot/items/8ab80d04328fd5664fae
をやる
ただし「SFDX:マニフェストファイルのソースを組織から取得」の前にpackage.xmlに以下を含めておく

```package.xml
    <types>
        <members>*</members>
        <name>Bot</name>
    </types>
```

Salesforceで当該ボットを無効化しておいてから、VSCodeで当該ボットのv2ファイル(v1.botVersion-meta.xml)を右クリックし、「SFDX: プロジェクトおよび組織から削除」で削除する
結果、v1.botVersion-meta.xmlファイルだけが残って、バージョンがv1に戻る
【java】eclipseでの開発におけるログファイルの場所

# 背景
エラーは出ないが処理がうまくいっていないときにログファイルがどこにあるか探したが、
ファイルの場所が分かりにくかった。

# 実行環境
- version：4.28.0
- java version：20.0.1

# ファイルの場所
- ～hoge～ java\workspace\.metadata\.log

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/f86728f3-1ed4-8bc2-0e7f-698160435f6a.png)