OmniAICreator/Qiita-1.07M huggingface dataset:
ABC303回答メモ

0.はじめに
　今回は全体的に難易度が高かった感じでした。
　結局D問題はACできずレート-10で終えました。

1.A - Similar String
　いつものスマートに行きそうな気もするけどめんどいので
　SとTを一文字ずつ比較し、似た文字列の条件の組を数えて
　文字数と一致したらYesを出力と、実装しました。
　後で、解説よんでも同様の解き方でした。
　ユーザー解説の方は0をoに1をiに置き換えて判断と
　いく分スタイリッシュな解き方が書いてありました。

　https://atcoder.jp/contests/abc303/submissions/41730540

2.B - Discord
　Bの割に難易度高くなーい？と思いつつ解いたら意外と早く解けました。
　隣合わせの組をキーにして辞書登録して、最後に全組み合わせについて
　辞書にあるかをチェックする形で実装しました。

　実装
　　1.NとMを読み込み、初期化した辞書dictとansを用意する
　　2.リストを1行ずつリストAに読み込む
　　　2-1.リストAを、0～N-2までのインデックスで順に読み込む
　　　　2-1-1.pにA[i]とA[i-1]の小さい方をセット
　　　　2-1-2.qにA[i]とA[i-1]の大きい方をセット
　　　　2-1-3.str(p)+str(q)をキー、値1を辞書に登録
　　3.インデックスiを1～N-1まで繰り返す
　　　3-1.インデックスjをi+1～Nまで繰り返す
　　　　3-1-1.str(i)+str(j)をキーに辞書を検索
　　　　　3-1-1-1.辞書にない場合にansに１を加算
　　4.ansを表示
　
　　実装時に3-1-1.の部分でわざわざiとjの大小を気にしてしまいましたが
　　今考えると、i<jは保証されてるなと思いました。

　https://atcoder.jp/contests/abc303/submissions/41740355

3.C - Dash
　ややこしい問題でした。
　実装方法は悩みましたが、高度な数学的知識とかは不要で
　TLEも考慮しないでよい問題でした。

　考え方
　　・アイテムの場所は辞書で管理。
　　　・キーはB座標を文字列として結合
　　　・使用したかどうかは、辞書登録時に値を1にしつかったら0にしておく
　　・文字列に従って、主人公の座標を動かしていく
　　・動かした時点でHPを減算し、-1だったらNoを出力して終了
　　・HPが0異常なら、アイテムがあるかを辞書検索し、ある且つ値が1だったら
　　　HPを回復
　　・最後まで移動出来たらYesを出力して終了

　意外とすんなり実装できましたが、WAが4つ発生。
　悩んでいろいろ確認していたら、アイテムを使用した後に値を0にする
　ロジックで、=を書くところが、==になっていて、値が膿和が枯れて
　いませんでした。
　これのせいで30分近くロスしてしまいました・・・・。

　https://atcoder.jp/contests/abc303/submissions/41762897

4.D - Shift vs. CapsLock
　なんとなくDPかとは思いつつ、以下の考えで実装。
　aが連続している場合、capsを押して、shift+aと押さないでａの
　どちらが時間がかからないか・・・
　といった形で、連続したa　or　Aに応じて
　capsを押すかを判定・・・という実装をしました。

　結果はＷＡが2個と、意外と惜しい感じではありましたが
　おそらくこのＷＡをつぶすためにＤＰを導入しないと
　いけないんだろうなと思います・・・。

　そのうちリベンジするかも。　

以上
Blender 3.5/3.6で、addonにTestingを復活させる方法

Blender 3.4まで表示されていたのに 3.5あるいは3.6になったらaddonにTestingが表示されなくなっていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13955/e84975f7-0b0a-f952-a47d-5c4d46b507ee.png)

下記などで議論されていますが、仕様のようです。

https://projects.blender.org/blender/blender/issues/106306

ところで、Blender 3.4まで導入していたTestingのaddonは使えますが、無効化など制御不能になっています。困りました。
調べたところ、下記に解決策がありました。

https://blenderartists.org/t/blender-3-5-and-addons-folder/1457584/11

Blenderのコードを直接編集する方法です。
macOSの例だと、下記のようになります。

```python:/Applications/Blender.app/Contents/Resources/3.5/scripts/startup/bl_ui/__init__.pyの149行目
-    if bpy.app.version_cycle == "alpha":
+    if bpy.app.version_cycle == "release":
```

起動し直すと、復活できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13955/30f1fbd1-21ee-2c8b-2bc5-24ae12be8bf7.png)

修正は自己責任でお願いします。

以上
Streamlitにクソ適当な認証機能を付けたった

# 前書き

前回に続き、USER認証でデータベースを生成するAPI処理を書いています。

https://qiita.com/EasyCording/items/b52d129ea3387153f4fa

ログイン認証はFASTAPI側で完成している前提です。

# Streamlitの認証

一般的なStreamlitの認証は以下です。

https://github.com/mkhorasani/Streamlit-Authenticator

今回はStreamlit側も完成しており、インデントを一切触りたくないので、メインストリームで何とかします。

# クソ認証

検討時間は、実質半日です。

今回はSTREAMLITのエンドポイントにパスパラメータを書き加えるという、
斬新な認証を付与することとしました。

## FASTAPI側

BACKENDからリダイレクトされるURLは以下
```http://host:8501/?user=moto&auth=True```

```login.py
 # StreamlitのURLとクエリパラメーターを定義する
    next_url = 'http://host:8501/' #streamlit-app のURL
    query_params = {'user': username,'auth':True}
    return_url = f'{next_url}?{urllib.parse.urlencode(query_params)}'
```

## Streamlit側

・URLのパスパラメータから、userと認証完了をGET
・AUTHがFalseなら、ログイン画面のURLを示して停止（なんと斬新な）
・あとはsession_stateのユーザー名でチョメチョメ

```main.py
from streamlit import session_state as ses # streamlitからsession_stateをsesという名前でインポート

# セッション情報を取得する関数
params = st.experimental_get_query_params()
username = params.get("user",[""])[0]
auth = params.get("auth",[""])[0]

if auth:
    ses.user = username
else:
    stc.html(f"<a href={login_url} target='_blank'>Click here to Login</a>")
    st.stop()
```

# 詳細

このコードは、Streamlitの実験的な機能である`st.experimental_get_query_params()`を使用して、現在のセッションのクエリパラメータを取得し、それらの値を`params`変数に格納します。これは、URLの末尾に付けられた任意のクエリパラメータ（例えば `?user=john&auth=1234`）を扱うことができます。

その後、`params.get()`関数を使用して、特定のクエリパラメータ（この場合は"user"と"auth"）の値を取得します。

以下に各行の詳細な説明を提供します：

```python
# セッション情報を取得する関数
params = st.experimental_get_query_params()
```
この行では、`st.experimental_get_query_params()`関数を使用して現在のセッションのクエリパラメータを取得し、それらの値を`params`変数に格納します。

```python
username = params.get("user",[""])[0]
```
この行では、`params.get()`関数を使用して"user"という名前のクエリパラメータを探し、その値を`username`変数に格納します。もし"user"パラメータが存在しない場合、デフォルト値として空文字列（""）が返されます。

```python
auth = params.get("auth",[""])[0]
```
これも同様に、"auth"という名前のクエリパラメータを探し、その値を`auth`変数に格納します。もし"auth"パラメータが存在しない場合、デフォルト値として空文字列（""）が返されます。

これらのパラメータは、一般的にユーザー認証やセッション管理に使用されます。

# まとめ
* もちろんURLのルールが他人にバレるとＮＧです。
* 社内アプリなので、まったく問題ありません
* 凝ったStreamlitの認証など、最初から挑んではいけません　→　これ大事！


# 最後に

* authをtokenに変えて、ユーザー名を暗号化するのも良いかもしれません
Cocoa MVC アーキテクチャについて


# Cocoa MVCについて
個人的な学んだ復習メモ

## Cocoa MVC 図解
![スクリーンショット 2023-05-28 9.48.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/3d38aae6-c385-967f-324a-bb1e785adb8e.png)
![スクリーンショット 2023-05-28 9.48.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/1e5d7ca4-3d1e-476b-0fa9-d311f697ecce.png)

# 設計とは
人間にわかりすく小さい機能ごとにソースコードを分けて､改修や追加機能時に関係のないファイルやコードを見なくてもいいようにするための分け方

# Model,View,Controller役割
### Model
データ､いいね数､年齢とかそれをクラスや構造体にまとめたもの
アプリケーションがどのように動作するべきかコア的な部分をきめるもの

### View
画面の描画､人の目につくパーツたち
操作を受け付けるのものたち(Buttonなど)
### Controller
タップされたらの処理を書くなど､何かしらの入力に対する適切な処理を行う
(APIなどサーバーと通信､APIなどがモデルにデータを返す､モデルを受け取りViewに返すなど)


# なぜ?ViewとModelが完全に独立
原初MVCでは View が Model を監視していためViewの再利用性が低かった｡
View も Model のように再利用性の高くするために独立し､両方を Controller が参照する形になった｡

# Controller の再利用性をあきらめた設計
Cocoa MVCにおいてはController が他のすべてを参照する形になる
ControllerがViewとModelに依存している(Controllerを機能させるためにはViewとModelが必要)になるので再利用性が低い｡

# まとめ
ModelとViewがお互いのことをまったく知らないのがCocoaMVCの特徴
MVCの悪いところ(Controllerに処理が集中しての記述が多いなど)を改良してのが今トレンドになってたりするアークテクチャだったりする
MVCは逆に依存関係をViewControllerに押し込めたともいえる

# おわり
クラスや関数がやるべき役割を見定めて依存を減らしていくことを意識して設計をする､コードを書いていきたいです!

# 参考
https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html#//apple_ref/doc/uid/TP40008195-CH32-SW1

https://peaks.cc/books/iOS_architecture
jenkins: github連携: SSH公開鍵認証使用

jenkinsでgithubにSSH鍵認証でアクセスする方法。

# SSH鍵生成
SSH鍵を登録するユーザで以下を実行。
```shell
$ ssh-keygen -t rsa
```
~/.ssh配下に以下のファイルが生成される。
|　ファイル名　 |　鍵の種類　| 登録先 |
|-------------|---------|--------|
|　id_rsa　   |　秘密鍵　　| github |
|　id_rsa.pub |　公開鍵 　| jenkins |


# GitHubにSSH公開鍵登録
Githubに生成した公開鍵を登録。
1. [Setting]-> [SSH and GPG Keys]
2. [New SSH Key]を押下。
3. Keyに公開鍵(id_rsa.pub)の内容をコピペし[ADD SSH Key]を押下。

4. SSH Keyでgithubにアクセスできることを確認。
```shell
$ ssh -T git@github.com
```
最初のアクセスの場合はKnown hostsに登録する。
以下のように表示されれば成功。
```
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
```

# JenkinsのGithubアクセスの設定

1. [＋新規ジョブ作成]　を押下。
2. フリースタイル・ビルドの作成を選択し[OK]を押下。
![Screenshot from 2023-05-27 21-19-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139931/53aa1fd8-2ea5-857c-210e-1f560928f6de.png)

3. [ソースコード管理]でGitを選択。
3. [リポジトリURL]にアクセスするリポジトリのSSH用URLを設定。
![Screenshot from 2023-05-27 21-32-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139931/802a0961-b079-ef6d-8f16-bc0aa1ffff1f.png)
3. [認証情報]で[追加]を押下し、[Jenkins]を押下。
![Screenshot from 2023-05-27 21-35-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139931/1d43292d-9c10-aebc-d69a-45c40baef548.png)
3. Jenkins Credentials Provider: Jenkins画面で[種類]で[SSHユーザ名と秘密鍵]を選択。
![Screenshot from 2023-05-27 21-37-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139931/cc58789c-ff8a-fe79-247e-0e26d9be73bd.png)
3. ユーザ名にSSH鍵を生成したユーザ＠ホスト名を入力。
![Screenshot from 2023-05-27 21-47-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139931/88107f15-1d05-b6e2-7fef-31ee403c33b2.png)
4. 秘密鍵で[直接入力]を選択し、[ADD]を押下後秘密鍵(id_rsa)の内容をコピペ。鍵生成時、パスフレーズを設定した場合はパスフレーズも設定。
![Screenshot from 2023-05-27 21-46-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139931/92421ad2-5497-8325-cbee-53f14081dce3.png) 
4. [追加]を押下。
4. [Build Step]など、その他必要な設定を行ったあと[保存]を押下。
4. [ビルド実行]を行い、正常に稼働するか確認。

# Pipeline内でgithubからチェックアウト
1. [＋新規ジョブ作成]　を押下。
2. パイプラインを選択し[OK]を押下。
![Screenshot from 2023-05-28 10-13-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139931/ff754a61-3010-4422-2231-2f30fdc2e622.png)

2. pipelineのstep内でcheckout scmGitを呼び出し。
```
pipeline {
    agent any

    stages {
        stage('build') {
            steps {
                echo 'checkout from Github'
                checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '<認証情報IDを指定>', url: '<SSH用URLを指定>']])
            }
        }
    }
}
```
データベース間のデータ移行: OracleからMySQLへの経験から学ぶ

## データ移行
データベース間の移行作業について解説します。ここでは、OracleからMySQLへのデータ移行の例を考えます。初めてデータ移行プロジェクトに取り組む方でも理解できるよう、基本的な知識と必要な手順を説明します。

## 移行手順の例
一般的な移行作業では以下の2つの手順が主に必要とされます。
1. スキーマの作成
2. データの移行

### 1.スキーマの作成
Oracleのテーブルから定義書を作成し、それを基にMySQL用のスキーマを定義します。データ型の変換や調整が必要な場合もあります。

### 2.データの移行
phpMyAdminやAdminerのツールを使い、CSVで移行元のデータをエクスポート、移行先にインポートするという手順があります。

## データ移行時の一般的な問題点
以下にデータ移行時に出くわす可能性のある一般的な問題点をいくつか挙げますが、これらは一部の例であり、実際のところは移行するデータベースやアプリケーションの特性によります。
- **日付形式の変換**: OracleとMySQLでは日付のデータ形式が異なるため、変換が必要です。
- **DDL定義書の修正**: Oracleでは問題ないものが、MySQLではエラーになる場合があります。
- **文字コードの問題**: 異なるデータベース間での移行では、文字コードの違いが問題となることがあります。
- **データの整合性**: データベースのスキーマが異なる場合や、複数のテーブル間でリレーショナルデータが一貫していなければならない場合、データの整合性を見直すことがあります。

## 本来考慮するべき移行手順
前述の基本的な手順は、私が直面した具体的な問題とその解決策を示すためのもので、実際のプロジェクトでは、以下のようなより詳細な手順を考慮し、計画的に進めることが求められるはずです。

1. データベースの評価と準備: 移行前には、移行元のデータベースの詳細な評価と準備が必要です。これには、データの整合性確認、データの量の確認、使用されている機能の確認などが含まれます。
2. ツールの選択: 移行に用いるツールは、移行元と移行先のデータベースの種類、データの量、必要な移行速度などにより選択します。
3. スキーマの移行: 移行元のデータベーススキーマを移行先のデータベースに適応する必要があります。これには、移行元と移行先のデータベース間で異なる可能性のあるデータ型の変換が含まれます。
4. データの移行: スキーマの移行後、次にデータの移行を行います。この際、移行速度やデータの整合性を保つための戦略が必要です。
5. ストアドプロシージャとビューの移行: ストアドプロシージャ、ビュー、トリガー、その他のデータベースオブジェクトの移行を行います。これらのオブジェクトはデータベース間で異なるため、変換が必要な場合があります。
6. テスト: 移行が正しく行われたかを確認するために、機能テストやパフォーマンステストを行います。これには、アプリケーションが新しいデータベースで正しく動作すること、パフォーマンスが要求を満たすこと、等が含まれます。
7. トラブルシューティングと最適化: テストの結果をもとに、必要な修正や最適化を行います。
8. 本番環境への適用: すべてのテストが完了し、問題が解決したら、最後に本番環境に移行します。

## データ移行ツール
移行作業をサポートするツールが数多く存在します。それぞれのツールは特性と利点がありますので、具体的な状況や要求に応じて選択することになります。
- スキーマ作成: SQL Developer、MySQL Workbench、AWS Schema Conversion Tool (AWS SCT)
- データ移行: SQL Developer、
Oracle Migration Workbench、AWS DMS (Amazon Web Services Database Migration Service)、phpMyAdmin、Adminer

## 参考リンク
以下に、本ガイド作成の参考となったリソースをリスト化します：

- [Qiita: MySQLとOracleの違い](https://qiita.com/mkyz08/items/89771d11b73d2a2d58f3)
- [Qiita: データベースの移行について](https://qiita.com/rirne/items/d973b6678981e46326a4)
- [Axia: データベースの移行手順](https://axia.co.jp/2021-09-28)
- [Fujitsu: データベース移行のプロセス](https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/migration-process/)
Google Colaboratoryを始めよう！



Google Colaboratory、通常「Colab」と呼ばれる、はGoogleが提供する無料のクラウドベースのコーディング環境です。
Pythonと機械学習を勉強したい初心者のみなさん、Colabはあなたたちにとって絶好のツールです！

## メリット

Colabの一番のメリットは**インストール不要**であることです。ブラウザがあれば、どのデバイスでもコーディングできます。さらに、Googleの強力なサーバーを利用できるため、高性能なハードウェアがなくても大丈夫。一部のGPUを無料で使うこともできます！

## 使用方法

Colabは**Jupyter Notebook**の形式を採用しています。テキストとコードを一つのドキュメントに混在させることができるため、説明と実行コードを同時に提供することができます。

1. 新しいNotebookを開く
2. コードやテキストを追加する
3. コードを実行する


## 注意点

無料のColabは一部制限があります。例えば、セッションの最大持続時間が存在します。また、一部の高性能な機器は有料版のみで利用可能です。

## まとめ

Colabは、初心者にも優しいPythonと機械学習の学習環境です。インストール不要で、Google Driveと連携しているため、どこからでもアクセス可能です。是非、一度試してみてください！
Elixirのhtml.eexをHTMLに変更してGitHub Pagesにコンバートする

# 概要
やっている事は、Elixirの
xxx.html.eexファイルをHTML化して、GitHubPagesに合わせている。

# 手順
GitHubPagesのリポジトリを作成する。
```
//make new repository
<username>.github.io
```
https://docs.github.com/ja/pages/getting-started-with-github-pages/creating-a-github-pages-site

・GitHub用のフォルダを作成
・narkkilさんのgblexをGitでクローン
・gblexのディレクトリに移動
```
mkdir GitHub
cd GitHub

git clone https://github.com/narck/gblex
cd gblex
```

https://github.com/narkkil/gblex/tree/master

`config/config.exs` を修正
Github ユーザー名とブログのタイトルを設定します。
``` config/config.exs
# Uncomment and configure these before starting with your blog!
- #config :gblex, github_username: "foo"
- #config :gblex, blog_title: "Foo's blog"

+ config :gblex, github_username: "frick-eldy" # 小文字
+ config :gblex, blog_title: "FRICK's blog"
```
・依存関係を取得

```
mix deps.get
```
・gblex初期化
```
mix gblex.init
```
・新規記事を作成
gblex/entriesに"#{date}-#{name}.md"ファイルが作成される。
```
mix gblex.new "name"
```
・パブリッシュ
username.github.io フォルダが生成され、
lib/templates/template.html.eexがHTML化する。
```
mix gblex.publish
```
# username.github.io フォルダをGitにPushする。
username.github.ioディレクトリに移動
Gitは設定されてあるので、masterにpush
```
cd <username>.github.io
git push -u origin master
```
公開される
https://frick-eldy.github.io/
pymatgen を用いて結晶中原子の対称位置を特定する方法

## 概要
　`pip`で `pymatgen` のアップデートを行ったら、従来の方法で結晶中原子の identical な位置の検索ができなくなっていたので、その時の備忘録的に対処法を書く。

## 環境
- pymatgen: 2023.5.10
- pymatgen-analysis-defects: 2023.5.8
- Python: 3.10.9

## 実装
```Python:POSCAR_data_extract.py
# This is the code for detecting identical atoms in a unitcell
import numpy as np
import pymatgen as mg
from pymatgen.io.vasp import Poscar
from pymatgen.core.sites import PeriodicSite
from pymatgen.analysis.defects.generators import VacancyGenerator

# from pymatgen.symmetry.analyzer import PointGroupAnalyzer
poscar = Poscar.from_file("POSCAR", check_for_POTCAR=False) # Read the POSCAR file in the same folder
structure = poscar.structure # Read the structure in the file
sp = structure.species # Detect species as list type
interstitial_gen = VacancyGenerator()
interstitial = interstitial_gen.generate(structure)
list1 = []
for i, vac in enumerate(interstitial):
    int_site = vac.site # Output as lists of coordinates and atoms
    list1.append(int_site)

# Save output into text file. 
with open('identicalList.txt','w') as f:
	f.write(str(list1))
```

## 出力
- $ZrO_2$ (cubic, $2\times2\times2$) で行った結果は以下の通り

```terminal
[PeriodicSite: Zr (0.0000, 0.0000, 0.0000) [0.0000, 0.0000, 0.0000], PeriodicSite: O (3.8176, 1.2725, 3.8176) [0.3750, 0.1250, 0.3750]]

(x, y, z): 格子定数を考慮した原子位置(=格子定数×相対座標)
[x, y, z]: 原子の相対座標（POSCARで書かれている原子座標はこっち）
```
## 注意点
- 実行コードと同じディレクトリ内に `POSCAR`が必要
- 構造を拡大したりした場合は、`POSCAR`の読み込みの際に`check_for_POTCAR=False`としておいた方が良い（実行時に怒られが発生するため）

## 参考
https://pypi.org/project/pymatgen-analysis-defects/
JuliaでHelloWorldプログラムを実装してみた

# 概要
JuliaでHelloWorldプログラムを実装してみました。以下のページを参考にしました。

https://qiita.com/niwasawa/items/09d1058ecfda1649bfe5

# 環境構築
以下からダウンロードしました。

https://julialang.org/downloads/

以下の通りファイルを展開しました。
```
$ tar xzvf julia-1.9.0-linux-x86_64.tar.gz 
```

# プログラム作成
以下の通りソースコードを作成しました。
```hello.jl
# Hello World してみる
println("Hello World")
```

# プログラム実行
以下の通りコマンドを実行しました。
```
$ ./julia-1.9.0/bin/julia ./hello.jl 
Hello World
```

# まとめ
何かの役に立てばと。
BizRobo!の資格とは～検定試験と勉強方法～

就業先で、RPAツールのBizRobo!を使用しています。BizRobo!開発で悩み、BizRobo!ナレッジベースで色々と検索しています。

BizRobo!の勉強を続けていた私が、どれくらい実力がついたか知りたいと思い、BizRobo!の資格を探してみました。各RPAベンダーは、RPA技術者の実力を把握できる資格を用意しているからです。
今回は、BizRobo!の検定試験の内容や勉強方法について、共有いたします。

※時間が経過して変わってしまった箇所や間違っている箇所、不適切な表現があるかもしれませんが、その時は都度修正いたしますので、ご指摘いただけると幸いです。


## My BizRobo!リリースに伴う変更点
24年1月11日追記
BizRobo!検定試験は、My BizRobo!のリリースに伴い、廃止されることになりました。今後はeラーニングの修了証が公認コンテンツになるそうです。

My BizRobo!の詳細は下記をご参照ください。
[2023/12/4にリリースされた『My BizRobo!』とは](https://qiita.com/TBO/items/0571c4cf31904a2b6ba1)


## BizRobo!検定試験とは
BizRobo!の資格に該当するものが、検定試験になります。
検定試験を受けるには、BizRobo! LAND COMMUNITYに登録する必要があります。
BizRobo! LAND COMMUNITYには、下記に書いていますので、そちらをご覧ください。
[BizRobo!学習するには～BizRobo e-learingがオススメ～](https://qiita.com/TBO/items/06122d910d44019b1896)

DA・DS開発に関する基礎知識の不足点を確認できる目的で作られたのが、BizRobo!検定試験です。

BizRobo! LAND COMMUNITYに記載している試験の概要を要約すると下記の通りです。
* 4択問題形式で、記述式なし
* DS試験とDA試験があり、各々計40問
* 試験時間は40分で、合格基準は、70%以上
* BizRobo! LAND COMMUNITYに登録できれば、どなたでも受験可能です。
* 受験料は、2200円。2020年6月1日以降無料になっています。
※新型コロナウィルスの影響もあるため、検定試験無料がいつまでかは不明です。


## BizRobo!検定試験の勉強方法とは
検定試験を受けてみた結果、無事に2つとも合格しました。
（BizRobo! LAND COMMUNITYの私のアイコンが金の枠になりました。）
合格した時の勉強方法や合格した際のメリットを紹介します。

### DS試験
まずBizRobo!eラーニングを受講しました。就業先で初めてBizRobo!を扱うことになったため、基礎知識習得を目的にeラーニングで学びました。ロボット開発初級者〜上級者コースは全て修了してから臨みました。

次に、BizRobo!でロボットを複数開発しました。これは就業先でカバーできました。正直に言いますと、就業先の業務でBizRobo!開発を行っていれば、合格できるレベルです。

ただ、BizRobo!開発していない場合は厳しいと思います。その場合は、BizRobo! LAND COMMUNITYの演習問題でロボット開発を行うのがいいでしょう。試験範囲が、この演習問題のロボットが開発できる範囲となっているからです。

BizRobo! LAND COMMUNITYの演習問題のURLは下記となります。
[演習問題](https://community.bizrobo.com/studies/drill)

上記対策を行った結果、DS試験は85%で合格できました。

### DA試験
DA試験は、2回試験を受けることになりました。不合格になったのは、DA開発の経験を積むことが出来なかったからです。

就業先では、DA開発を行っておらず、個人でDA開発もできませんでした。（有料プランに加入すれば可能ですが、かなりの額なので、個人で試すのは難しいです。また、DA開発には、パソコンが2台以上必要のため、それもネックとなります。）

そのため、ナレッジベースで調べ尽くしました。**検定試験のテスト結果は、不正解の問題のみ表示しています**。しかし、回答がありません。これは、復習して知識を定着させたいという意図があるそうです。

再受講が可能ですが、**受験後から7日間待たないといけません**。そのため、再試験までに回答を調べてから臨みました。

間違えた問題や知識があやふやだった問題をナレッジベースで調べ、間違えた原因と正しい知識を吸収することで2回目は合格することができました。

### メリット
無事に検定試験に合格しても、まだまだ知識が足りないなと感じています。検定試験での知識では、現場での開発には対応できないからです。
しかし、最低限の知識が身に着いたんだという実感を感じることができました。1からBizRobo!の使い方を勉強した私にとっては、最低限の知識が身に着いたという成長を感じました。

数年間、BizRobo!開発している人には不要だと思いますが、BizRobo!使い始めてから半年未満の人が自分の実力を試す試金石とするのがオススメです。また、BizRobo!開発できる人を増やしたい場合、判定基準として用いると有効だと感じました。


## 最後に
BizRobo!検定試験について、解説いたしました。BizRobo!のeラーニングで学んだり、就業先で経験を積むことで、検定試験に合格することができました。

検定試験に合格しても就業先レベルでの開発ができるようになるものではありません。しかし、自分の実力を確認したり、最低限の知識がないか点検したりできるいい機会だったと感じています。今回の記事が、検定試験を受講するか悩んでいる人の為になれば幸いです。

今後もBizRobo!開発に役立つような記事を書いていきます。
6000投稿。25000Contributions.記念。

おかげさまで、6000投稿。です。　

投稿が完了すると、25000Contributionsになります。ありがとうございます。


![スクリーンショット 2023-05-28 9.20.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/9cf5b17e-c1ed-4bbf-ea1c-58a526d0797a.png)

なんでそんなに沢山記事を書くんですか？

https://qiita.com/kaizen_nagoya/items/e291196f9b692757f2cc

出力(output)と呼ばないで。これは状態(state)です。

https://qiita.com/kaizen_nagoya/items/80b8b5913b2748867840

凡人は天才、秀才と違うことをして生きていく

https://qiita.com/kaizen_nagoya/items/0502aebb7610fef584f5

# 小川メソッド

@kazuo_reve 私が効果を確認した「小川メソッド」

https://qiita.com/kazuo_reve/items/a3ea1d9171deeccc04da

「@kazuo_reve 私が効果を確認した「小川メソッド」」引用確認記事

https://qiita.com/kaizen_nagoya/items/233f81ebe9166ea44d09

小川メソッド　覚え（書きかけ）

https://qiita.com/kaizen_nagoya/items/3593d72eca551742df68

## DoCAP

試行錯誤の一種を、PDCA, CAPDoとかいう流派にからめて、DoCAPと銘打っただけ。　
試行錯誤ができない人が、PDCPとかCAPDoって言っているのに腹が立たなくなる。


DoCAP（ドゥーキャップ）って何ですか？

https://qiita.com/kaizen_nagoya/items/47e0e6509ab792c43327

DoCAP(Check Action Plan) 芸術でも技術でも運動でも

https://qiita.com/kaizen_nagoya/items/28321da8285a5884c7ca

# 参考資料　
views 20,000越え自己記事一覧

https://qiita.com/kaizen_nagoya/items/58e8bd6450957cdecd81

Views１万越え、もうすぐ１万記事一覧 最近いいねをいただいた213記事

https://qiita.com/kaizen_nagoya/items/d2b805717a92459ce853

を作ったら、viewsが4000未満の記事でも、内容がいいものがいろいろあることを思い出した。よい記事は、数学、物理、自動車、言語・文学、医工連携に存在している。そこで、それぞれの分野の「推し」をviewsにこだわらずに一覧にすることにした。

Qiitaに書いた記事で
数学。
物理。
自動車。　
言語・文学。
医工連携。
５つについて、それぞれ上位１００を一覧にする。

物理記事　上位100

https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff

数学関連記事１００

https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d

自動車　記事　１００

https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5

言語・文学記事　１００

https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6




 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞


# 文書履歴(document history)
ver. 0.01初稿　　20230527

### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
smbclientコマンドでWindowsネットワーク上の共有リソースにアクセスする

●smbclientコマンドでWindowsネットワーク上の共有リソースにアクセスすることが出来る。

smbclientの書式とオプション

smbclient [オプション] //ホスト名/共有名
smbclient //ホスト名/共有名 [オプション]

オプション
・-L　ホスト名|--list=ホスト名　指定したホストで利用可能な共有リソースを一覧表示
・-N　認証を行わない
・-U ユーザ名|--user=ユーザ名　接続するユーザを指定
m5atom liteのUiFlow起動モード 

# UiFlowは便利なのだが・・・
UiFlowをインストールしたM5atomに、プログラムを書き込んだ後、デバックしたり、新しいプログラムを書こうとしたとき、ボタンを押しっぱなしにして、モードを切り替えるのだが、毎度【何色が何のモード】かを忘れて、M5Burnerでモード切り替えしなくてはいけなくなってしまうダメ人間なので、備忘録。
# UiFlowの起動モード
<font color=#00aa00>■緑</font>：UI Flow Onlineモード
<font color=#0000aa>■青</font>：UI Flow desktop IDEプログラム
<font color=#eeee00>■黄</font>：WiFi設定モード
<font color=#8800ff>■紫</font>：最新のダウンロードされたプログラムの実行
基本的には、LEDの表示が緑を待ってボタンから手を離せば、WiFi接続で再度プログラムできる状態になる。
[Flutter] 無限にvibrationを鳴らしてみようぜ

こんにちわ。今回は無限にvibrationを鳴らす方法を共有していこうと思います。
ある機能と組み合わせることでずっとvibrationを鳴らせるようにします。

↓こちらのPackageを使用します。

https://pub.dev/packages/vibration


# １、vibrationの導入

```yaml
 dependencies:
　 #適宜、最新のものを入れてください。
   vibration: ^1.7.5
```

### Androidの導入
以下の記載を`android/app/src//AndroidManifest.xml `にしてください。

```xml
<uses-permission android:name="android.permission.VIBRATE"/>
```

### iOSの導入

特になさそうです。

# ２、Timerを使って実装


```dart
Timer? timer;

@override
  void initState() {
    super.initState();
    //初期化をする。 ここは初期化するだけだからどんな記載でもOK
    timer = Timer.periodic(
      const Duration(seconds: 1),
      (Timer timer) => timer.cancel(),
    );
  }

void vibration() {
  timer?.cancel();
  // 第一引数：繰り返す間隔の時間を設定
  timer = Timer.periodic(const Duration(seconds: 1), (Timer timer) {
    //バイブレーションを鳴らす。
    Vibration.vibrate(duration: 1000);
  });
}

```


### 解説
今回使用した技術として
- vibration
- Timer

を使用しました。

vibrationだけ使うと、一度だけのバイブレーションになってしまいます。そのため、繰り返し読んであげる必要があります。そのために使用したものが`Timer`でした。

Timerを使うことで、1秒ごとに処理を呼べるようにしています。それによって、以下の処理になります。

```
バイブレーションがなる 
↓（1秒後）
バイブレーションがなる
↓（1秒後）
バイブレーションがなる
↓（1秒後）
バイブレーションがなる
↓（1秒後）
```


# ３、止める方法

こちらは簡単で、Timerを止めるだけでOKです。

```dart

void stop() {
 timer?.cancel();
}

```

# 最後に
Timerを使うだけで色々なことが無限できそうですね。おもしろそう。


# アプリの紹介

#### アプリ名

### 「寝過ごし防止」

#### アプリの概要
- 電車に乗っているときに、寝過ごしを防ぐことができるアプリ
- 指定した時間になるとバイブレーションが無限になります。
- 音がしないため、自分だけが気づくことができます。

#### iOSのダウンロード

https://apps.apple.com/jp/app/%E5%AF%9D%E9%81%8E%E3%81%94%E3%81%97%E9%98%B2%E6%AD%A2/id6449161692

#### Androidのダウンロード

https://play.google.com/store/apps/details?id=com.over_sleep_prevention_app
RedmineのチケットにCHATGPTを実装（２）

https://qiita.com/EasyCording/items/20439251ad82d492d654

前回の検討では、いくつか不具合があった
・Fieldの更新でAPIをコール　→　動作が分からない
・プロンプトの入力　→　指定フィールドのみで汎用性がない
・OPENAIトークンをソースに埋め込みたくない　
・他のissueフィールドもプロンプトの指示に使いたい

# 変更内容
redmine-view-customize-scriptsで、CHATGPTボタンを作って、別のAPIポイントで処理するようにした。

```js.js
	
$(function() {
  // Note: Change the ID according to the custom field you want to target
  const chatField = $('#issue_custom_field_values_11');
  const chatButton = $('<button>').text('Click me!');
  const url = "http://127.0.0.1:8000/redmine";
  const form = document.getElementById("issue-form");
  
  chatButton.on('click', async (event) => {
      event.preventDefault(); // Stop the default form submission behavior

      try {
        const formData = new FormData(form);
        
        const response = await fetch(url, { method: "POST", body: formData });
        const res = await response.json();

        // Check for errors before accessing properties
        if ('text' in res) {
          chatField.val(res.text);
        } else {
          console.log('Error: response data not in expected format');
        }
      } catch (error) {
        console.log(error);
      }
  });

  $('#issue_custom_field_values_11').parent().append(chatButton); // Add the button to the "attributes" section of the ticket page
});
```

# エンドポイント

```py.py
@router.post("/redmine")
async def post_handler(request: Request):
    form = await request.form()

    for field in form:
        value = form[field]
        print(f"{field}: {value}")

    return {"text":"api called"}
```

こんな感じでISSUEフィールドを全体でパース出来ている
→　後はPythonで好きな感じで、やりたいことを書けばいい。

```shell
INFO:     127.0.0.1:61906 - "POST /redmine HTTP/1.1" 200 OK
utf8: ✓
_method: patch
authenticity_token: mVVFSNv/1a4aBy29XRZIpEDT5k1u2+o2DkFXjub8XT1kha1D3V8BgLeSHTLYycvzqSz9P4FWqpxFFJYgxVHufQ==
form_update_triggered_by:
issue[is_private]: 0
issue[tracker_id]: 1
issue[subject]: CHATGP組み込み
issue[description]:
issue[status_id]: 1
was_default_status: 1
issue[priority_id]: 3
issue[assigned_to_id]:
issue[category_id]:
issue[parent_issue_id]: 179
issue[start_date]: 2023-05-27
issue[due_date]:
issue[estimated_hours]:
issue[done_ratio]: 0
issue[custom_field_values][11]: CHATGP組み込み、例を作って
issue[custom_field_values][13]:
time_entry[hours]:
time_entry[activity_id]:
time_entry[comments]:
time_entry[custom_field_values][5]: 1
time_entry[custom_field_values][14]:
time_entry[custom_field_values][15]:
issue[notes]:
issue[private_notes]: 0
attachments[dummy][file]: <starlette.datastructures.UploadFile object at 0x000001D6FB7121D0>
issue[lock_version]: 3
last_journal_id:
next_issue_id: 189
issue_position: 1
issue_count: 40
```

# スクショ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212914/02553136-2fd1-fce1-0de3-472ce233a84d.png)

# 結論

下記の検討はやーめた！！

https://qiita.com/EasyCording/items/5e837a3425d3df8bfb0c
OptunaのStudyを理解する: direction引数の解説

OptunaはPythonのハイパーパラメータ最適化ライブラリで、機械学習モデルのパラメータチューニングに広く使用されています。今回は、OptunaのStudyオブジェクトを作成する際の重要な引数、directionについて解説します。

```
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=1)

print('Number of finished trials:', len(study.trials))
print('Best trial:', study.best_trial.params)
```

## direction引数とは?
directionはOptunaのstudyの最適化方向を指定します。以下の2つの値を取ることができます。

'maximize'：目的関数の最大化を意味します。つまり、アルゴリズムは目的関数が出力する値を最大化しようとします。たとえば、機械学習モデルの精度を最大化するような問題に対して使用されます。

'minimize'：目的関数の最小化を意味します。つまり、アルゴリズムは目的関数が出力する値を最小化しようとします。たとえば、機械学習モデルの損失関数を最小化するような問題に対して使用されます。

目的関数が最小化または最大化を求めるかどうかにより、directionを適切に選択します。

## Optunaのその他の引数
sampler：Samplerオブジェクトを指定します。Samplerはハイパーパラメータの探索戦略を決定します。例えば、RandomSamplerはランダムサンプリングを行い、TPESamplerはTree-structured Parzen Estimatorアルゴリズムを用いてサンプリングを行います。

pruner：Prunerオブジェクトを指定します。Prunerは、トライアル中に条件を満たすとそれを早期に打ち切る戦略を決定します。これは無駄なトライアルを避けるために有用です。

study_name：Studyの名前を指定します。複数のStudyを管理するときに役立ちます。

storage：結果を保存するためのストレージのURLを指定します。データベース（例：SQLite、MySQL、PostgreSQL）や、メモリ上（例：'sqlite:///:memory:'）に保存することができます。



以上、Optunaのdirection引数とその他の引数についての解説でした。この記事がOptunaを使用する際の理解と活用に役立つことを願っています。
AWS認定試験（CLF、 SAA）に合格するまでの記録📚

## はじめに
AWS CLF、SAAの試験に合格するまでの記録をつけていきます。（完全に自己満ですw）スケジュール感や学習量について一例として参考にしていただけると幸いです！

## 前提
・AWSの実務経験なし
・業務内容は運用業務メイン（技術的な要素は激薄です...）

## 共通事項
都度、分からないことや不明な点はググったり、他の方の技術ブログ、参考書(※1)、CloudTechの教材(※2)、Udemyの教材(※3)を参考にさせていただいております。

後日使用している教材を追記する予定です。


(※1)AWS認定クラウドプラクティショナー（著者：山下氏/海老原氏）
　　AWS認定ソリューションアーキテクト［アソシエイト］（著者：佐々木氏/林氏）

(※2)

(※3)





## 目標
①CLFは7月上旬に受験&取得
②SAAは8月中旬までに受験&取得

## 学習計画
SAAの試験対策をメインに取り組みながら、CLF→SAAの順に取得する予定。

【修正】
一旦CLF合格を目指して学習を進める（5/31追記）





## AWS CLF対策
5/27(土)
・CloudTech：CLF-C01 Cloud Practitioner(1〜5問)
5/28(日)
・CloudTech：CLF-C01 Cloud Practitioner(1〜5問)復習
・CloudTech：CLF-C01 Cloud Practitioner(6〜20問)
5/29(月)
・CloudTech：CLF-C01 Cloud Practitioner(21〜30問)
5/30(火)
・CloudTech：CLF-C01 Cloud Practitioner(31〜40問)
5/31(水)
・CloudTech：CLF-C01 Cloud Practitioner(41〜60問)
6/1(木)
・CloudTech：CLF-C01 Cloud Practitioner(61〜120問)
6/2(金)
・CloudTech：CLF-C01 Cloud Practitioner(121〜170問)
6/3(土)
・CloudTech：CLF-C01 Cloud Practitioner(171〜250問)
6/4(日)
・CloudTech：CLF-C01 Cloud Practitioner(251〜300問)
6/5(月)
・CloudTech：CLF-C01 Cloud Practitioner(分野別)基礎知識
6/6(火)
・CloudTech：CLF-C01 Cloud Practitioner(分野別)分析、サーバーレス、コンテナ
6/7(水)
・CloudTech：CLF-C01 Cloud Practitioner(分野別)データベース
6/7(水)
・CloudTech：CLF-C01 Cloud Practitioner(分野別)その他



## AWS SAA対策
5/27(土)
・Ping-t：「オンプレミスとクラウド」「AWSの概要」「VPC」
5/28(日)
・Ping-t：「EC2」
5/29(月)
・Ping-t：「ELB/Auto Scaling」
5/30(火)
・Ping-t：「IAM」
【Java】例外の種類を見てみる

## 前置き
どのようなプログラムでもそうだが、完璧なプログラムは存在しない。ただし、トラブルが発生したからと言って、ソフトウェアが停止するようなことはあってはならない。トラブルが発生した時、どのように対処すべきかを記述する必要がある。それが、今回説明する**例外処理**である。

## 具体的に例外をどのような形で利用するのか
例外処理は以下のように記載する

```
try{
//例外が発生する可能性がある処理
}catch(例外クラス型 変数){
//例外が発生した時の処理
}finally{
//例外発生の有無にかかわらず実行したい処理
}

```

## 例外クラスの種類

### IndexOutOfBoundsException
これは存在しない要素にアクセスしようとすると発生する例外クラスである。

```
import java.util.ArrayList;
import java.util.List;

public class Main{
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		
		try{
			list.get(0);
		}catch(IndexOutOfBoundsException e) {
			System.out.println(e.getMessage());
		}
	}
}
```
>Index 0 out of bounds for length 0

### ArrayIndexOutOfBoundsException
これはIndexOutOfBoundsExceptionと似ているが、存在しない配列の要素にアクセスしようとすると発生する例外クラスである。

```
public class Main{
	public static void main(String[] args) {
		try {
			int[] array = {};
			array[0] = 10;
			System.out.println("10を代入");
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.println(e.getMessage());
		}
	}
}
```

>Index 0 out of bounds for length 0

### NullPointerException
これは参照型変数にnull値が格納されている時に、参照型変数を参照しようとした場合に発生する例外である。

```
public class Main{
	public static void main(String[] args) {
		String a = null;
		try{
			System.out.println(a.length());
		}catch(NullPointerException e) {
			System.out.println(e.getMessage());
		}
	}
}
```
>Cannot invoke "String.length()" because "a" is null

### ClassCastException
継承関係や実現関係にないクラスにキャストしようとした場合に発生する例外である。
※AクラスとBクラスには継承関係や実現関係にないとする。

```
public static void main(String[] args) {
		try {
			A a = new A(10);
			B b = new B(10);
			System.out.println(a.equals(b));
		}catch(ClassCastException e) {
			System.out.println(e.getMessage());
		}
}
```
>class test.B cannot be cast to class test.A (test.B and test.A are in unnamed module of loader 'app')

## 最後に
完璧なプログラムを作成することはほぼ不可能だから、いかに例外処理をうまく使うかが鍵だと感じた。
他にも例外クラスや使い方があるため、今後も学んでいきたい。
FONのコンデンサー

不調なFON2405があり、劣化が考えられるとするとコンデンサーなので、調べてみました。ロットによって違うかもしれませんが備忘録として。

# FON2305

|パーツ|仕様|メーカ|
|:--|:--|:--|
|C85|220uF 16V|日本ケミコン KY|
|C94|220uF 16V|日本ケミコン KY|

お饅頭型の最初の製品なのでよい部品使っています。すぐにFON2405に入れ替わり製造数は少なかったと思われます。Fonのマークがペイントではなくて凹凸です。（ネットにロゴがプリントタイプのFON2305の情報がありましたが、私は確認できてません）

# FON2405

|パーツ|仕様|メーカ|
|:--|:--|:--|
|C244|10uF 25V|STONE|
|C302|10uF 25V|STONE|
|C333|100uF 25V|STONE|
|C346|100uF 25V|STONE|

FON2405はFON2305から大幅にコスト削減された形跡があります。C244,C302はシルク印刷も一回り大きく、本来もう少し大きな物をつけるはずだったのではないでしょうか。また電源は5Vなので、耐圧25Vの部品を使う必要はなく、有り合わせで作られた感があります。

# FON2412J

|パーツ|仕様|メーカ|
|:--|:--|:--|
|C415|100uF 10V|STONE|
|C101|100uF 10V|STONE|
|C244|470uF 16V|Lelon|
|C165|220uF 16V|STONE|

ケースはFON2405より一回り小さくなってるのですが、コンデンサーは大きいものが使われいます。

すべて105度の製品ですが、105度で1000時間の耐久性があり、55度で使われた場合、1000*2^5=32000時間で、4年弱で寿命です。

コンデンサーは大きいほうが良さそうですが、大きすぎると電源投入時の突流電流が大きくなるので、ほどほどに。

並べてみてきがついたのですが、2305と2412はともにJTAGがあったり慎重に作られていますが、2405はかなりアバウトな感じがします。担当エンジニアが違ったのではないでしょうか。
Proxmox7 を試してみる　その５　Windows10(migration)

# Vmware Workstation16 からのお引越し
Vmware WorkstationにあるWindows10/11 を、Proxmox 7.4 に migration(お引越し)してみます。結論から先にいうと、Windows11 は、暗号化diskのためお引越しできませんでした。ですので Windows10のみ。

# Windows11 は、お引越しできない
Windows11 の vmdk を qmで変換できないと思ったら。vmが暗号化されているからとのこと。
ぐぐってみるとTPMを解除後に暗号化を解除するといけるみたいだけど、元に戻せないとな。なので後回しにします。
※どうせ検証用にwindows11 いれているだけなので初期インストールでも問題なしと後回しｗ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/c6924202-2044-e246-8337-a4b44a2b7e00.png)

# vmdk インポート作業
暗号化されていなければ OVF にてインポートできますが、あ・え・て vmdk からインポートしてみます。
まず OS＝Windows10 として空のVMを作成します。作成するとき ハードディスクを作成しない方がシンプルです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/ed676323-34a3-91cb-ed06-8b503c5837fb.png)

vmdk ファイルを Proxmox にssh転送します（手順は割愛）。Proxmox のコンソール(root) で以下のコマンドを実行します。こちらはOVFの指定と異なり存在するVMのidを指定します。

書式：qm importdisk id xxx.vmdk local-lvm --format qcow2

下記コマンドでは、id=200 を指定している。

```text
# qm importdisk 200 win10.vmdk local-lvm --format qcow2
```

正常に終わると `未使用のディスク` が追加されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/0e33d4bc-ac0c-4fc1-fc28-60154d1f0e7f.png)

ハードウエアから、この `未使用のディスク` を追加します。
このとき デバイスを `SATA` にしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/5b051e49-3494-c32f-7e1a-d9573be87017.png)

ついでにブート順も変更しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/a1f2ee0d-d1cd-ec48-e7e4-c6f6f26b7b0a.png)

# VirtIO ドライバーが無い → そうだ Realtek RTL8139 にしよう
Proxmox でVMを作成するとき気にしないとネットデバイスは `VirlIO(準仮想化)` となります。このままだと Windowsは立ち上がるがネットワークが見つからない状態となります。これは Windowsは標準でVirtIO ドライバーが無いためです。

・[[KVM]Windows10ゲストインストール時にVirtIOドライバーをインストールする](https://qiita.com/rarudonet/items/7b9a3cd11f642a1f362b)

とりあえず現時点で VirtIO にするメリットが判らないので蟹さん `Realtek RTL8139` にしてみます。こちらの方法が一番簡単です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44540/d86e36fe-3abd-b503-99bf-c81cd20eb1d4.png)

# ネットワークが異様に遅い（原因が分かった）
Proxmox をインストールしているPCのネットワークが異様に遅い。ギガビットEthernet なのに 100M なのです。こまった。。。
↓
原因がわかった
　・USB2.0 ポートに有線USB-LANを差していた
　・やはり VirlIO(準仮想化) が早かった

# 参考にさせて頂いたサイト様
・[[KVM]Windows10ゲストインストール時にVirtIOドライバーをインストールする](https://qiita.com/rarudonet/items/7b9a3cd11f642a1f362b)
・[Proxmox VE 7.x 上でwindows VMを構築する](https://nagikujira.hatenablog.com/entry/2022/08/10/011639)
・[proxmoxにvirtualboxのマシンをインポートする](https://zarat.hatenablog.com/entry/2020/06/26/195540)
views 一覧の使い方

views 20,000越え自己記事一覧

https://qiita.com/kaizen_nagoya/items/58e8bd6450957cdecd81

Views１万越え、もうすぐ１万記事一覧 最近いいねをいただいた213記事

https://qiita.com/kaizen_nagoya/items/d2b805717a92459ce853

を作ったら、viewsが4000未満の記事でも、内容がいいものがいろいろあることを思い出した。よい記事は、数学、物理、自動車、医工連携に存在している。そこで、それぞれの分野の「推し」をviewsにこだわらずに一覧にすることにした。

Qiitaに書いた記事で
数学。
物理。
自動車。　
言語・文学。
医工連携。
５つについて、それぞれ上位１００を一覧にする。


 ＜この記事は書きかけです。順次追記します。＞


物理記事　上位100

https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff

数学関連記事１００

https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d

自動車　記事　１００

https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5

言語・文学記事　１００

https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6

医工連携関連記事　１００

https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82

同じ記事が、あちこちに分散している。　

どこか、一番関連性の高いものだけに絞ろうと思う。　

現在、複数箇所に分散している記事の一覧を作り、それぞれの一覧の性格、情報量から、一箇所を決める資料を作る。　

 
 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
# 文書履歴(document history)
ver. 0.01初稿　20230528
ver. 0.02 ありがとう追記　20230602

### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
sort()メソッドで大文字と小文字を分けずにソートさせる方法

タイトルの通りの備忘録です。

```js
let a = ['Dog', 'cat', 'Bug', 'ant'];
a.sort(function (s, t) {
  let a = s.toLocaleLowerCase();
  let b = t.toLocaleLowerCase();
  if (a < b) return -1;
  if (a > b) return 1;
  return 0;
});
// a == ['ant', 'Bug', 'cat', 'Dog']
```
ソートの順序を変える場合は、sort()メソッドの引数に比較関数を指定する。この関数は引数を2つ取り、両者を比較する。第1引数を第2引数の前にしたければ関数から返す値をゼロより小さな値にする。前にしたければゼロより大きな値にする。2つの値が同じ場合は、関数から返す値を0にする。

#### 参考記事

https://qiita.com/standard-software/items/06ad3c1d72937ad1feba

#### 勉強本

https://www.amazon.co.jp/JavaScript-%E7%AC%AC7%E7%89%88-David-Flanagan/dp/4873119707
Stable Diffusion web UIの拡張機能「sd-webui-additional-networks」を手動インストール

Stable Diffusion web UIで使用するExtensionsの
「sd-webui-additional-networks」ですが
今までのようにStable Diffusion web UIから
URL指定でインストールするとエラーが発生するようになってしまいました。

ですのでこちらも「sd-webui-additional-networks」の
旧バージョンをcommit hash指定でダウンロードして
手動でインストールする必要が出てきました。

今回使用するのは、2023年05月12日版の「sd-webui-additional-networks」です。

https://github.com/kohya-ss/sd-webui-additional-networks/tree/2da464780254d3f5beaf15edaea78499896c52e7

上記のリンクにアクセスし、緑色の[Code]ボタンを押して[Download ZIP]でダウンロードします
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2790258/a1c5abe9-4c9d-aeb3-23fb-83049fc2fb07.png)

ダウンロードが終わったらローカルで解凍します。

解凍した「sd-webui-additional-networks-2da464780254d3f5beaf15edaea78499896c52e7」を
Google ドライブにアップロードします。

そして、Google ColaboratoryでStable Diffusion web UIをインストールする際に
Google ドライブをマウントし、コードセルに旧バージョンの
「sd-webui-additional-networks」を複製するコードを追加する必要があります

コードは以下のようなものになります。
```
# 旧バージョンのsd-webui-additional-networksを複製
import shutil

folder_1 = '/content/drive/MyDrive/StableDiffusion/sd-webui-additional-networks-2da464780254d3f5beaf15edaea78499896c52e7'
folder_2 = '/content/stable-diffusion-webui/extensions/sd-webui-additional-networks'
shutil.copytree(folder_1 , folder_2)
```

以上です。
次回のエントリーでは手順を改めてまとめたいと思います。
ghq get コマンドを使用してリポジトリを取得し、自動的に対象ディレクトリに移動するシェル関数の作成方法

# この記事は

ghq get コマンドを使用してリポジトリを取得し、自動的に対象ディレクトリに移動するシェル関数の作成方法を記載しています。

# カバーする内容

- grepコマンドを使用して変数に結果を格納する方法
- ヘルプメッセージの表示方法
- zshの条件文での比較演算子の選択（「=」または「'=='」）

# ゴール

ターミナルでghq getコマンドを実行した後、自動的に対象のフォルダに移動するシェルスクリプトを実現します。

```shell
ghq-acquire <user>/<project>
```

# コード

```shell
ghq-acquire()
{
    if [ "$1" = '' ] || [ "$1" = '-h' ]; then
        echo "Usage: ghq-acquire <user>/<project>"
        return
    fi
    ghq get $1
    location=$(ghq root)
    target=$(ghq list | grep $1)
    cd "${location}/${target}"
}
```

# 結び
ご覧いただきましてありがとうございます、ご意見やご質問がありましたら、いつでもお気軽にお知らせください。次回もお楽しみに！
pyenv + venvを用いて，LinuxでJupyterLabを使った開発をするための手順．

## 目的
Linux上で機械学習をするために，JupyterLabを使って開発できる状態にしたい．
ただし，将来的にPythonのバージョンを変える必要があるかもしれない，環境を汚したくないため，pyenv と venv を用いた環境構築を行い，開発できる状態にする．

## 前提条件
gitがインストールされている．

## 手順
開発できる状態にするまでの手順を示す．
1. pyenvの環境構築
1. venvの作成・有効化
1. JupyterLabの環境構築

## pyenvの環境構築
git から pyenv をインストールする．
~~~bash
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
~~~
環境変数を設定し，Linuxサーバ起動時にpyenvが起動されるように設定する．
~~~~
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
~~~~
pyenvを使って，Pythonの特定バージョンをインストールする．
本記事では，Python 3.11.0 をインストールする．
~~~~
pyenv install 3.11.0
~~~~
インストールしたPythonを実行する．
サーバ全体に適応したい場合はglobalを使用する．
~~~~
$ pyenv global 3.11.0
~~~~
特定のディレクトリにのみ適応したい場合は，そのディレクトリに移動し，localを使用する．
~~~~
$ pyenv local 3.11.0
~~~~
ここまでの作業で，Linuxサーバ上に，任意のバージョンのPythonが実行できるようになった．

## venvの作成・有効化
JupyterLabで開発したいディレクトリに移動し，.venvを作成，有効化する．
.venv 以外のディレクトリ名に設定も可能だが，.venv，venvとすることが多い．
~~~~
$ python -m venv .venv
$ source .venv/bin/activate
~~~~
ここまでの作業で，仮想環境を作成・有効化できるようになった．
インストールしたいパッケージがある場合は，有効化した状態で，pip install でインストールすればよい．

## JupyterLabの環境構築
JupyterLabをインストールし，起動する．
JupyterLabが立ち上がったら，開発できる状態になる．
ただし，リモートアクセスしたい等，何か設定したいことがある場合は，.jupyterディレクトリを作成し，設定ファイルを編集必要がある．以下の記事が参考になる．
[Jupyter Lab事始め](https://qiita.com/taka4sato/items/378782763dec3dacb1ee#jupyter-lab%E3%81%AE%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A)
~~~~
$ pip install jupyterlab
$ jupyter lab
~~~~
## 2回目以降に開発できる状態にするまでの手順
2回目以降に開発できる状態にするまでの手順を示す．
1. Linuxサーバを起動する．
1. 開発したいディレクトリに移動し，venvを有効化する．
1. JupyterLabを起動する
Clojure のポート、処理系

babashka を誰かに説明するとき JVM の Clojure の話から順を追って話すことが多いので簡単に羅列する。処理系によってはまったく知らないものも多いので、そういうのは ？ が付いていたり空欄になっている。



| 名前 | 登場時期 | アウトプット | 実行環境 | 拡張子 | 用途 |
|---|---|---|---|---|---|
| Clojure | 2007 | `Java` Byte code | JVM (Java Virtual Machine) や GraalVM | `.clj` | ウェブアプリケーションのサーバーサイド、データ分析など多岐。汎く Java の用途をカバー。 |
| ClojureScript | [2011?](https://clojure.org/news/2011/07/22/introducing-clojurescript) | `Javascript` コード | Browser, Nodejs などの Javascript が動くところ | `.cljs` | フロントエンド JS、Nodejs アプリケーションなど多岐。汎く Javascript の用途をカバー。 |
| ClljureCLR | [2009?](https://www.mail-archive.com/clojure@googlegroups.com/msg09387.html) | `CIL` コード | .NET, mono | `.clj` ? | あんまり知らない。まだ触ったことがない。ごめんなさい。 |
| ClojureDart | 2022? | `Dart` 　コード | 今は Flutter をメインターゲットにしている | `.cljd` | Flutter モバイルアプリ |
| Babashka (SCI) | 2019 | スタンドアロンのバイナリ |  | `.bb`, `.clj`  | Shell script の用途をカバーするところからスタートして Make のようなタスクランナー機能も組み込みで実装されたり、用途は広がっているように見える。 |
| nbb (SCI) | 2021 | `Javascript` コード？ | Nodejs | `.nbb` | Nodejs で動く Babashka のようなの。処理系として Babashka と同じ SCI (Small Clojure Interpreter) が使われていて作者も同じ。 ClojureScript のライブラリが一部使えたりするようだけどまだ試したことがない。 |

- もうメンテされてないようだが Ruby 環境で動く [`Rouge`](https://github.com/vic/rouge)とか他にも色々ありそう。

- Clojure Conj 2023 では LLVM で動いて C++ との interop が可能な Clojure Dialect [`jank`](https://jank-lang.org/) のセッションがあった。 ["How to build a Clojure dialect" by Jeaye Wilkerson - YouTube](https://www.youtube.com/watch?v=Yw4IAY4Nx_o)

- Python エコシステムとのからみでいえば [Hy](https://github.com/hylang/hy) や [libpython-clj](https://github.com/clj-python/libpython-clj) がある。拡張子に言及すると `.cljc` もある。いずれも記事のタイトルのスコープとは違うので触れてない（というかさらに詳しくない）。

単に clojure と言った場合に、処理系を指すのか、エコシステムを全体的に指すのか、言語を指すのか色々な気がする。ただ、明示したい場合は JVM の Clojure とか ClojureScript とかより修飾したり正確な名前を用いるので、コミュニケーションで困ったことは自分はない。

参考： 日本での採用例 - https://github.com/athos/japanese-clojure-companies
2023/5/28主にITとかセキュリティの記事

オープンデータ公開基盤の「CKAN」に深刻な脆弱性
https://www.security-next.com/146427

「MS Edge」にアップデート - 「クリティカル」とされる脆弱性を解消
https://www.security-next.com/146434

教委メールサーバ、不正中継でスパム踏み台に - 豊見城市
https://www.security-next.com/146395

サイトに不正アクセス、リンクの書き込み - 三重県立総合医療センター
https://www.security-next.com/146248

NTT西の固定電話で一時通信障害 - ネット接続は影響なし
https://www.security-next.com/146436

応募フォームで個人情報が閲覧可能に - 東京都交通局
https://www.security-next.com/146399

繰り返されるランサムウェア攻撃：何が被害者を危険にさらしているのか(5/22)
https://www.barracuda.co.jp/repeat-ransomware-attacks/

保安点検すら拒否していた韓国選管に昨年だけで4万件のサイバー攻撃(5/26)
https://news.yahoo.co.jp/articles/db56bd594451974da628eb0eae4c85c31df33064

中国、グアムのインフラにサイバー攻撃　軍事行動への布石か(5/26)
https://forbesjapan.com/articles/detail/63432

中国、米重要インフラへのサイバー攻撃能力を有する＝国務省(5/26)
https://jp.reuters.com/article/worldNews/idJPKBN2XG1QZ?il=0

【調査レポート】セキュリティ対策がしっかり行われていて安全性が高い仮想通貨の取引所サイト1位は？「Coincheck」という結果でした！(5/26)
https://prtimes.jp/main/html/rd/p/000000478.000093294.html

2023年第1四半期の仮想通貨ハッキングは70%急落も専門家は一時的な救済と警告(5/25)
https://nextmoney.jp/?p=58726

暗号化接続によるマルウェアデリバリが増加し、トラフィックを復号化しない組織はよりハイリスクに(5/26)
http://news1st.jp/archives/9533

CFTC米国商品先物取引委員会はビットコインポンジスキーム運営者5人を告発(5/26)
https://nextmoney.jp/?p=58765

ハッキングし「仮想通貨」強奪で荒稼ぎ、北朝鮮最新「サイバー攻撃」事情(5/26)
https://news.yahoo.co.jp/articles/e1e5aac19ab2956ba32b8ae369d058a6f988ec76

ウォッチガード、「インターネットセキュリティレポート」（2022年第4四半期）を発表(5/26)
https://www.nikkei.com/article/DGXZRSP655935_W3A520C2000000/

福山市 問い合わせ８５５通届かず　ＨＰからのメール 設定変更されず(5/26)
https://www.sanyonews.jp/article/1403701

中学校のネットワークに不正アクセス　配慮が必要な生徒などの個人情報140件以上漏えい　長野・伊那市(5/26)
https://news.yahoo.co.jp/articles/50a74641148fadf96ae053fb5cf3c633fa777272?source=rss

IDやパスワード、こうやって盗みます　青森県警と弘前署、「フィッシング」手口実演(5/26)
https://news.yahoo.co.jp/articles/bd700446fccb5d90d11da13374bcbc7ae4579b9f?source=rss

検温カメラに顔画像、転売品に９００点保存の例も…購入者「出品者は気づいていないのでは」(5/24)
https://www.yomiuri.co.jp/national/20230524-OYT1T50072/

2023年3月のモバイルマルウェアレビュー(5/22)
https://news.drweb.co.jp/show/review/?lng=ja&i=14695

WithSecureが「Sphere 23」を開催 - 民主主義国家でのサイバーセキュリティの重要性(5/26)
https://news.mynavi.jp/techplus/article/20230526-2687954/

田舎のおかんをお得な「Microsoft 365 Family」へ招待してみた ～値上げ前に検討を！
メリットと注意点をご紹介(5/26)
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1502774.html

覚えがないGoogleの「セキュリティ通知」が届いたら(5/26)
https://atmarkit.itmedia.co.jp/ait/articles/2305/26/news029.html

デジタル世代の社員、実はセキュリティー意識が低い(5/26)
https://www.nikkei.com/article/DGXZQOUC190XQ0Z10C23A5000000/

サイバーセキュリティ対策は小規模病院ほど不十分、大病院でもBCP策定やリスク低減措置など進まず―医療等情報利活用ワーキング（2）(5/26)
https://gemmed.ghc-j.com/?p=54269

いまだ不十分な医療機関のサイバーセキュリティー対策が浮き彫りに
システム障害発生時のBCP策定や訓練実施率も低調(5/26)
https://medical.nikkeibp.co.jp/leaf/mem/pub/hotnews/int/202305/579763.html

科学技術における知的⽣産活動と⽣成系AIの利⽤について 東京理科大(5/26)
https://www.tus.ac.jp/today/archive/20230526_0922.html

「AI裁判官の有罪判決、どこまで納得できるか」研究者やSF作家らが議論(5/26)
https://news.nicovideo.jp/watch/nw12636020
GithubのSSH設定

# GitHubでSSH接続する手順

GitHubでSSH接続する設定を行なったため、備忘録として残しておきます。
GitHubは公開鍵認証方式での接続になるため、公開鍵、秘密鍵の作成方法から順に記載していきたいと思います。

公開鍵認証方式とは

まず簡単に「公開鍵」と「秘密鍵」という二種類のキーペアの鍵を使用して認証する仕組みです。
秘密鍵は名前の通り、他人に見られてはいけない鍵であり、公開鍵はサーバーに登録して使用します。
今回の場合、秘密鍵と公開鍵を.sshフォルダに作成し、公開鍵をGitHubに登録します。

まず.sshフォルダに移動します。

```
cd ~/.ssh
```

移動できたら下記のコマンドで鍵を実行します。

```
ssh-keygen -t rsa
```

実行すると鍵の保存先やパスフレーズ等を質問されますが、デフォルトで問題ないため、三回ほどEnterを押すことで進めるとid_rsaとid_rsa.pubの2つの鍵が生成されます。

※余談ですが、ssh-keygen -t rsaにはオプションをつけることができます。
（例）-b (bit数)で鍵のbit数を指定することができます。（デフォルト:2048）

```
ssh-keygen -t rsa -b 1024
```

この後は公開鍵をGithubに登録するため、クリップボードにコピーします。
Macの場合は、`pbcopy < ~/.ssh/id_rsa.pub`でクリップボードにコピーすることができます。

## GitHubに公開鍵を登録する

次はGitHubに公開鍵を登録していきます。
[GitHub設定画面](https://github.com/settings/ssh)のAddSSHKeyボタンを押下し、下記の値を入力します。

Title:公開鍵名
Key:コピーした公開鍵

![スクリーンショット 2023-05-28 1.56.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958368/7b89c245-f96c-bf05-aa4d-b51f88d5d997.png)
# 接続を確認

最後にGithubとの接続を確認していきます。
```
ssh -T git@github.com
```

下記のように表示されれば接続できています。

![スクリーンショット 2023-05-28 2.08.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958368/3c940ab8-30f6-d1c6-6529-bb2063eac9f6.png)

SSHでのGitHubへの接続設定は以上になります。:relaxed:
StringScannerの紹介

## 前提

[世は大パーサー時代](https://yui-knk.hatenablog.com/entry/2023/05/23/191049)なわけですが、[Racc](https://i.loveruby.net/ja/projects/racc/)というパーサージェネレータを触っているときに内部で使うことの多いツールである[StringScanner](https://github.com/ruby/strscan)について改めて調べたので共有します。

## StringScannerとは

StringScannerクラスは文字通り文字列をスキャンする機能を提供するクラスです。動作としては正規表現を利用したスキャンと現在位置の管理を同時に行うため、利用者はスキャンのロジックに集中できます。

重要なこととして、StringScannerはRubyの標準ライブラリの一部であり、

```ruby
require 'strscan'
```

するだけで使うことができます。

主なメソッドとしては`scan`メソッドがありますが、他にも多くのメソッドを持つ非常に多機能なライブラリです。詳細は[ドキュメント](https://docs.ruby-lang.org/ja/latest/library/strscan.html)を読むのが良いでしょう。

## 実装について

StringScannerは主にC言語で実装されています。これはライブラリの高速な動作（主な目的です）のために重要である反面、内部を読み解くのはかなり困難です。ここでRubyのみでの実装があればよいとは思いませんか？

…という理由とは一切無関係に、かつて私がRubyでStringScannerを再実装したコードがあります。

https://gist.github.com/okuramasafumi/099f3b9590eef0a6a1b55d4ff78b582a

わずか200行程度のコードでほぼ全てのテストを通せています。Rubyすごい！

…速度は3分の1以下になってしまいましたが…

というのはまあさておき、このRubyコードを読むと内部的にポインタと文字列を管理している様子がわかりやすいのではないでしょうか。

## 使いどころについて

文字列をスキャンしたいときというのは、

1. 文字列にある種の構造があり、
2. かつそこから何らかの情報を得たいとき

になるかと思います。これは明らかにパーサーが該当しますが、例えばCSVのようなある種の構造化されたデータについても適用自体は可能でしょう（Rubyには[優れたCSVライブラリ](https://github.com/ruby/strscan)が存在するのでそちらを使えばいいのですが）。

## まとめ

ということでStringScannerクラスの紹介でした。実はこのライブラリ、[GitHubから遡れる最古のコミットが20世紀](https://github.com/ruby/strscan/commit/392296c12de9d7f9be03a8205250ba0844cb9d38)であるという、Rubyの世界における古参ライブラリでもあります。

この記事がパーサーを触っているRubyistのお役に立てたら嬉しいです。
【随時更新】インフラ初心者がAWS認定資格勉強中に遭遇した慣れない横文字カタカナ語まとめ

- 随時更新
- AWSのサービス特有のカタカナ語についてはカッコ内にサービス名を記載
- ソースはChatGPT(GPT-4)、Google検索で引っかかった記事等を参考にしたため、解説の粒度にバラつきがあります

## ア行

#### アウトバウンド
あるシステムやインターフェイスから外部へ向けて送出される（出て行く）トラフィックのこと

#### インバウンド
外部から、システムやインターフェイスに向けて送られてくる（入ってくる）トラフィックのこと

#### エイリアスレコード（Amazon Route53）
IPアドレスを直接入力しなくても裏でいい感じに設定してくれる機能


## カ行

#### 拡張ネットワーキング（Amazon EC2）
簡単に言えば有効化するだけでインスタンスのネットワークパフォーマンスが向上する機能

#### グローバルセカンダリインデックス（Amazon DynamoDB）
テーブル内のデータに対して追加のクエリ方法を提供するインデックス。異なるパーティションキーとソートキーを持ち、元のテーブルとは別のキー属性でアイテムを整理・検索できる

#### Golden Image
仮想サーバーやネットワークのテンプレート

#### コンポーネント
システムや機能の「部品単位」を表す用語

#### cron式（Amazon CloudWatch Events）
事前に「指定した時間に、どのプログラムを動作させるか」を指示しておくことで、その時間になった際にあらかじめ指定したプログラムを動かしてくれるもの


## サ行

#### サービスクォータ
AWSには、サービスに対してService Quotas（サービスクォータ）が設けられている。 サービスクォータとは、あらかじめ設定されたデフォルトの上限値である。 

#### シーケンシャル
記憶装置などにおけるデータへのアクセス方式のひとつであり、記憶媒体の先頭から順に検索しアクセスしていくこと

#### スループット
コンピュータやネットワーク機器が単位時間あたりに処理できるデータ量のこと

#### SaaS（Software as a Service）
クラウド上で実行されるソフトウェアを提供するサービスで、インターネット経由でアクセスできる。メンテナンスやアップデートはサービス提供者が行い、ユーザーはインストールや設定なしにソフトウェアを使用できる


## タ行

#### データウェアハウス
企業内のシステムやアプリ、クラウドサービスなどから定期的にデータを取得し、時系列に蓄積していくデータサーバー

## ハ行

#### PaaS（Platform as a Service）
開発・運用のためのプラットフォームをクラウド上で提供するサービスで、アプリケーション開発やデプロイに必要な環境やツールが含まれる。ユーザーはインフラ管理をサービス提供者に任せ、アプリケーション開発に集中できる

#### persistent
日本語で「持続的な」の意味。

#### ビジネスインテリジェンス（BI）
ビジネス分析やデータマイニング、データビジュアライゼーション、データツールやインフラストラクチャ、またベストプラクティスなどを組み合わせて、組織がよりデータに基づいた意思決定を行えるように支援すること

#### ブートストラッピング
コンピューターの電源を入れてから利用可能となるまでを自動化すること

#### プロキシ
日本語で「代理」の意味。 インターネットに直接接続できないコンピューターに代わり、インターネットに接続し、Webサイトへのアクセスなどを行うサーバーのことを指す

#### プロトコル
コンピュータでデータをやりとりするために定められた手順や規約、信号の電気的規則、通信における送受信の手順などを定めた規格


## マ行

#### マイグレーション
日本語で「移動・移住・移転」の意味。 自社で活用するシステムやハード・ソフトウェア、データなどを現在とは別の環境やプラットフォーム、バージョンへ移行すること

#### メタデータ
オブジェクト名、サイズ、キーワード等のコンテンツ自身のことを説明するためのデータのこと


## ラ行

#### ラウンドロビン（方式）
CPUを使用できる時間（タイムクォンタム）を定め、その時間内に処理が終わらない場合は、次のタスクにCPUの使用権が与えられる方式

#### リードレプリカ
プライマリデータベースの負荷を軽減し、パフォーマンスを向上。マスターサーバーとフロントエンドサーバーの間に立ち、負荷を分散させるイメージ。読み込み（リード）専用

#### リバースエンジニアリング
ソフトウェアやハードウェア製品の構造を調査、分析し、製造方法、構成部品、ソースコード、データ定義文などの技術情報を明らかにすること。完成した製品から構築、設計と開発工程をさかのぼるため、「逆行工学」とも呼ばれる

#### レプリカ
複製品

#### レプリケーション
複製品を作っておくこと（用意しておくこと）

#### ロール
複数の権限（ロール）をまとめて定義し、名前を付けたモノのこと


# 終わりに
このようなカタカナ語は開発やオンプレの現場でも当たり前のように使われるので、今後も継続して学習していければと思います。
React の Minifyについて

## はじめに

ReactはJavaScriptのライブラリであり、Webアプリケーションの開発によく使用されます。

その際によく用いられるテクニックが、コードを「Minify（ミニファイ）」することです。これは、プロダクション（本番環境）でのパフォーマンスを向上させるために重要な手段です。

## Minifyとは？

「Minify」は、主にJavaScriptやCSS、HTMLなどのファイルを小さくする（＝軽量化する）プロセスを指します。この手法により、不要な空白や改行、コメントなどが削除され、ファイルサイズが減少します。これによって、読み込み時間が短縮され、Webアプリケーションのパフォーマンスが向上します。

## ReactのMinify方法

ReactのMinify方法はいくつかありますが、ここでは主にCreate React Appを使用した場合の方法について説明します。

Create React Appを使用してアプリケーションを作成した場合、ビルド時に自動的にMinifyが行われます。以下のコマンドを実行するだけで、ビルドとMinifyが同時に行われます。

```shell
npm run build
```

また、WebpackやBabelなどのツールを使用して、独自のビルド設定を行うことも可能です。これらのツールを使用すれば、Minifyだけでなく、トランスパイル（新しいJavaScriptの機能を古いブラウザでも動作するように変換すること）など、さまざまな最適化を行うことができます。

## まとめ

ReactのMinifyは、Webアプリケーションのパフォーマンスを向上させるために重要な手段です。Create React Appを使用していれば、ビルド時に自動的にMinifyが行われます。

WebpackやBabelなどのツールを使用して、独自のビルド設定を行うことも可能です。このように、ReactのMinifyは非常に便利であり、Webアプリケーション開発において重要なテクニックとなっています。
【ChatGPT無】同一Chat内で話題を切り替える


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

　こんなことはないでしょうか。
　同一Chat内で、話題Ａから、話題Ｂに移ろうとする。
　でも、ChatGPTは切り替えてくれない、と。

　これは、話題Ａが「まだ続いている」と、ChatGPTは思っているためですね。

　人間同士であれば、「話は変わるけどさぁ」と言えば、事は済む。

　実は、ChatGPTも同じなんです。
「**新たな話題です**」とか
「**話題を変えます**」とかですね。
　話題の切り替えは、人それぞれありますので、似たような語句で大丈夫でしょう。

　まぁ、「この話題はあとで深掘りするから、NewChatするか」という判断もあり、ですけどね。