OmniAICreator/Qiita-1.07M huggingface dataset:
JSONファイルを使用したカメラ設定の管理方法

# はじめに
　カメラの設定を調整する際、何度も試行錯誤しながらさまざまな変更を加えることがあります。設定項目が固定されている場合は簡単ですが、項目自体も変更したい場合は手間がかかります。この記事では、私が個人的に便利だと感じるカメラ設定の管理方法を紹介します。

# 方法
　カメラの設定を管理するために、JSONファイルを使用します。設定したい`cap.set()`の第一引数をキーにし、第二引数をバリューとして記述します。

```json: camera_config.json
{
    "cv2.CAP_PROP_FRAME_WIDTH": 800,
    "cv2.CAP_PROP_FRAME_HEIGHT": 640,
    "cv2.CAP_PROP_SATURATION": 20
}
```

　設定ファイルを読み込む際には、evalを使用することでキーを文字列ではなく定数として扱えるようにします。

```python: main.py
import cv2
import json

cap = cv2.VideoCapture(0)
camera_config = json.load(open("camera_config.json"))
for k in camera_config:
    cap.set(eval(k), camera_config[k])
```

# おわりに
　この方法を使用すると、カメラの設定を簡単かつ柔軟に管理することができます。設定項目を追加・変更する際も、JSONファイルの編集だけで済むため便利です。ぜひ試してみてください。
【DB】データベース専門用語一覧

データベース設計時に使われる専門用語一覧です。
勉強したものを追加していきます。

### データベース（Database）
 関連するデータの集合体。データベースは構造化されており、データの追加、削除、更新、検索などが容易に行えます。

### データベース管理システム（DBMS）
データベースの作成、管理をするためのソフトウェアです。MySQL、Oracle、PostgreSQL、SQLiteなどが例です。

### テーブル（Table）
データベース内の情報を構造化して格納するためのデータの表。テーブルは複数の行（レコード）と列（カラム）で構成されます。

### 列（カラム）
テーブル内の縦方向のデータ要素。列は特定のデータ型を持ち、データの属性や情報を表現します。

### 行（レコード、ロウ）
テーブル内の水平方向のデータ要素。行は特定の列に対応するデータ値を持ち、1つのエンティティ（例：顧客、商品）の情報を表します。

### 主キー（Primary Key）
テーブル内の一意な識別子で、各行を一意に識別します。主キーは一般的に1つ以上の列で構成され、データの一貫性と参照のために使用されます。

### 外部キー（Foreign Key）
別のテーブルの主キーと関連付けられた列であり、テーブル間の関係性を定義します。外部キーは、異なるテーブル間でのデータの参照や結合に使用されます。

### エンティティ
データベースで扱う対象のことを指します。それは具体的な物（人、建物など）でも抽象的な概念（イベント、システムなど）でも構いません。

### 属性
エンティティを特徴づける詳細情報。例えば、'学生'エンティティの属性は学生ID、名前、メールアドレス、専攻などになります。

### フィールド
データベース内の個々のデータ要素を指します。エクセルのセルみたいなもの。

### リレーションシップ
エンティティ同士の関連性を示します。一対一、一対多、多対多のリレーションシップがあります。
スキーマデータベースの構造（テーブル、フィールド、リレーションシップなど）を定義したものです。

### インデックス
データベース内の特定のフィールドに対する検索を高速化するためのデータ構造です。カーディナリティの高い列に作成します。

### カーディナリティ
カーディナリティとは、特定の列の値が、どのくらいの種類を多さを持つかということを表す概念

### トランザクション
一連のデータベース操作のまとまり。トランザクションはACIDプロパティ（原子性、一貫性、分離性、耐久性）を持つべきです。

### SQL（Structured Query Language）
データベースからデータを問い合わせたり操作したりするための言語。

### 正規化
データベース設計のプロセスであり、データの整合性と効率性を向上させるために行われます。正規化によって、データの重複や冗長性を削減し、データベースの柔軟性と管理が向上します。 一般的に第3正規形までやると良いです。
昨今のAI技術やChatGPTの登場により評価が高まるであろうIT周辺の技術・その他について

* 正規表現
* ルールベース / ルールを巧みに記述する方法
* アルゴリズム / デザインパターン
* CI/CD
* UNIX (という考え方)
* ITインフラ
* ITセキュリティ
* IT Architecture
* 要求定義 / 要件定義

:::note
上記リストは、『人間の建設』 小林秀雄/岡清 著を読んでいるときに、頭に浮かんだ事をリスト化してみたものです
:::
iOSのバーチャルキーボードが入力欄を被ってしまう問題の対応策

## 概要

昔からiOSにこいう問題があったらしい。画面上の入力項目をタップすると、バーチャルキーボードが表示されるが、キーボードが入力欄を被ってしまうため、入力できなくて困る。

## 詳細

最新のiOS16.4のシミュレータで確認したところ、50%くらいの確率で被る問題が発生している。

- ①キーボードが表示され、ブラウザ画面全体がキーボード領域を除いて縮めされたら、被らない
- ②キーボードが表示され、ブラウザ画面全体が縮めされなかったら、被る
  - ブラウザweb画面がキーボードの後ろにいる
  - ここはsafariやiosのバグのでは？

①が本来の正しい動きであるし、そうなる確率も50%近いため、safariやiosのバグのではと思われる。

しかし、それがiOSに対応してくれそうもないので、画面実装に何とかの対策を入れなければならい。

## 対応策

キーボードが表示される時に、画面下部にバーチャルキーボードの高さ分以上のpaddingを入れる。

- キーボード表示フラグisKeyboardShownを定義
- isKeyboardShownがtrueの場合、画面要素にの`padding-bottom: 240px`スタイルを与える
- 入力フィールドのonFocusイベントハンドラーにiOSの場合、isKeyboardShownをtrueに更新する
- 入力フィールドのonBlurイベントハンドラーにiOSの場合、isKeyboardShownをfalseに更新する

これでバーチャルキーボード表示動画が終わったら、入力欄が上に自動的にスクロールされる

## 纏め

多分iOSやsafariの実装では①の動きを取ろうとしたが、スクロールできなくて止まってしまったかも。padding-bottomを入れることで、スクロールできるようになった感じ。
Reactでラジオボタンを使った検索機能を実装する

Reactでラジオボタンを使った検索機能を実装したので、備忘録として残します。

前回の記事では、
ファイター一覧を名称で検索をできるよう実装しましたが、それに加えて
特定のカラムの値がtrue/falseかで検索できるよう実装しました。

前回：
https://qiita.com/taramu/items/5037bfbeba8c049760a8

ラジオボタン：true
[![Image from Gyazo](https://i.gyazo.com/c46e98cb45f0ef97cebb9a12dc2960ee.png)](https://gyazo.com/c46e98cb45f0ef97cebb9a12dc2960ee)

ラジオボタン：false
[![Image from Gyazo](https://i.gyazo.com/f9ffc34725646801f90d994e70868b4a.png)](https://gyazo.com/f9ffc34725646801f90d994e70868b4a)

ラジオボタン：false　＋　名称検索
[![Image from Gyazo](https://i.gyazo.com/ffe26ff63e0974de65ceb969f06402fe.png)](https://gyazo.com/ffe26ff63e0974de65ceb969f06402fe)

処理の流れ（インクリメンタルサーチと基本的に同じ）
・ラジオボタンに入力した値を保持するuseStateを用意する。
・ラジオボタンを押下した際、radioChangeファンクションを呼び出すようにする。
・radioChangeファンクションで入力した値をstateにsetさせる。
・selectedOption（state）の値が更新されたので、
　selectedOptionを使用しているfilterdCharacters定数のフィルターが更新される。
・検索結果が表示される。


```jsx
 // ラジオボタンに入力した値を保持するuseState
 const [selectedOption, setSelectedOption] = useState("");

　// ラジオボタンに入力した値をセットする。
  const radioChange = (event) => {
    setSelectedOption(event.target.value)
  };


  const filteredCharacters = Object.values(characters).filter((character) => {
    const nameFilter = character.name.includes(searchTerm)

    // ラジオボタンの値が空の時は名称検索の結果のみ返す。
    if (selectedOption === '') {
      return nameFilter
    } else {
      //true、falseの文字列を真偽値に変換する。
      //参考：https://pisuke-code.com/js-convert-string-to-boolean/#_JSONparse
      const vipFilter = character.vip == JSON.parse(selectedOption)
      return nameFilter && vipFilter
    }
  })


  return (
    < div >
      <label>
        <input
          type="radio"
          value=''
          checked={selectedOption === ''}
          onChange={radioChange}
        />
        all
      </label>
      <label>
        <input
          type="radio"
          value='true'
          checked={selectedOption === 'true'}
          onChange={radioChange}
        />
        VIP入り
      </label>
      <label>
        <input
          type="radio"
          value='false'
          checked={selectedOption === 'false'}
          onChange={radioChange}
        />
        VIPじゃない
      </label>
      <input
        type="text" autoFocus
        placeholder="ファイター名検索"
        value={searchTerm}
        onChange={handleChange}
      />
      <button onClick={() => {
        setSelectedOption('');
        setSearchTerm('');
      }}>
        リセット
      </button>

```
plunkerでexceljs

# 概要
plunkerでexceljs、やってみた。

# サンプルコード

```

function run() {
	let wb = new ExcelJS.Workbook();
	var sheet1 = wb.addWorksheet("test");
	var worksheet = wb.getWorksheet("test");
	worksheet.getCell(1, 1).value = "商品";
	worksheet.getCell(2, 1).value = "りんご";
	worksheet.getCell(3, 1).value = "みかん";
	worksheet.getCell(4, 1).value = "ぶどう";	
	worksheet.getCell('B1').value = "Item";
	worksheet.getCell('C1').value = "Plice";
	var Item = [["apple", 150], ["orange", 200], ["grape", 280]];
	for (var row = 0; row < Item.length; row++)
	{
		worksheet.getCell(row + 2, 2).value = Item[row][0];
		worksheet.getCell(row + 2, 3).value = Item[row][1];
	}
	worksheet.mergeCells('A5:C5');
	worksheet.getCell('A5').value =  {
		formula: "SUM(C2:C4)"
	};
	wb.xlsx.writeBuffer().then(function(buffer) {
		var blob = new Blob([buffer], {
			type: "application/octet-stream"
		});
		var url = URL.createObjectURL(blob);
		var a = document.createElement('A');
		a.download = 'test.xlsx';
		a.href = url;
		document.body.appendChild(a);
		a.click();
		document.body.removeChild(a);
	});
	alert("ok");
}




```

# 成果物

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


以上。
Hyper-Vでホストとの画面共有を試みた記録

## 背景
Windows7上でやりたい作業があったため、Hyper-Vで仮想マシンを構築した。
直接インターネットには繋ぎたくないが、作業効率化のためホスト(Win11機)とのファイル共有や画面共有がしたい。
その方法について試行錯誤する中で学びがあったので記しておく

## 前提：Hyper-Vにおける制限
- 拡張セッションという、クリップボードやオーディオなどの共有がスムーズに行える機能がある。
ただし、ゲストOSがProエディション以上でないといけない。
今回インストールしたのは Win7 Home Premium なので使用不可
- 仮想グラフィックドライバは最低限の機能しか持たないものなので、描画関係ではトラブルが起きがち

## ネット接続・ファイル共有編
1. **Hyper-Vマネージャーで【内部スイッチ】を作成**

1. **仮想マシンの設定で、そのスイッチに紐づけたネットワークアダプターを追加**
    - Win7の場合、【レガシ ネットワーク アダプター】を使用する必要があった
    
1. **（ホストOS側）作成したスイッチをncpa.cplなどで開き、IPを設定**
    - 今回は 10.99.0.1/16 とした

1. **（ゲストOS側）静的IPを設定**
    - 今回は 10.99.0.10/16 とした
    - DHCPにすると、169.254.x.x のアドレスになってしまう
    （参考：[なぜネットの調子が悪いと”169.254″から始まるIPアドレスになるのか - 株式会社シーポイントラボ](https://cpoint-lab.co.jp/article/201911/12493/)）

これでpingが通るはず。
（筆者環境では、ホスト→ゲストはそのまま通ったがゲスト→ホストはファイアウォールで遮断された）

以降、
- ホストの作業フォルダを共有設定
- ゲストからネットワークドライブ割当て

すれば快適なファイル共有環境ができる


## 画面共有編_概論
**やりたいこと**
仮想マシン上で行う作業の中で、ネット上の画像をスクショして使いたい場面がある。
ネットに出れるのはホストだけなので、ホスト上のブラウザで開いたものをゲストOS上で表示できないか？

**考えた手段**
1. ホスト上でスクショして共有フォルダに保存
    - 確実な方法だが、ちょっと手間がかかる（ホストで保存→ゲストで開く とかが毎回発生するので）
    -  なにより、愚直すぎて面白くない！

1. ゲストからホストにリモート接続
    - 扱い上は同一LANにいる別PCなのだから、MoonlightやParsecで接続できるはず
    - ただ、ゲストからホストを操作してしまうと、ホスト→ゲスト→ホスト→・・・ と無限ループになっておかしなことにならないか？（今回はこれについては検証できず。どうなるんだろう）

1. ホストから動画配信
    - LAN内での動画配信など考えたこともなかったので知らなかったが、rtpやrtspというプロトコルがあり、カメラからPCへの動画転送などで使われているらしい
    - 今回はOBSを使って似たことをやってみた


## 画面共有編_リモート接続
> 結論だけ、書く。失敗した失敗した（ry

ホスト機にはMoonlightのサーバー側アプリを導入済みだったので、Moonlightを使用することを試みた。

- moonlight-chrome の利用
Win7用のGoogle Chromeはもう（少なくとも公式からは）手に入らないので、Vivaldiをインストールしてこの拡張を導入しようとするも、「WebGLはサポートされていません」と出てできなかった

- ネイティブアプリ版の利用
OpenGLが使えないことでエラーが発生した。
しかし、OpenGLのエミュレーションライブラリを準備すれば実行できる模様
ただし、このライブラリの準備に大変な手間がかかる。
（参考：[その１ OpenGL ES 2.0が動く環境を用意する - ○×つくろーどっとコム](http://marupeke296.com/GLES2_No1_Install.html)）
Visual StudioをホストにインストールしたくなかったのでゲストのWin7で行ったが、途中でエラーになってしまった。
ホストにインストールするなり、ライブラリ作成専用にWin10仮想マシンを準備するなりすれば多分できると思うが、後者を行う気力が残っておらずここで断念

## 画面共有編_動画配信

1. （ホスト側）OBSで、設定画面【出力】→【録画】から出力先を以下に設定
    `udp://10.99.0.10:2345`

1. 【録画開始】を押して配信スタート

1. （ゲスト側）MPC-HCで上記のURLを指定して再生

**参考サイト**
[OBSとVLCでLAN内ストリーミング - TKSOFT](https://www.tksoft.work/archives/1803)
[OBS StudioでLAN内のWindows10、Mac、Androidに映像を配信する方法 - kohacraftのblog](https://kohacraft.com/archives/obs-studio%E3%81%A7lan%E5%86%85%E3%81%AEwindows10%E3%80%81mac%E3%80%81android%E3%81%AB%E6%98%A0%E5%83%8F%E3%82%92%E9%85%8D%E4%BF%A1%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.html)

rtp/udp、配信/録画 など、それぞれやり方が微妙に異なるのだが、筆者環境ではudp＆録画の組み合わせで成功した

**課題点**
- 映像がカクつく
MPC-HCを起動したときに、グラフィックドライバが悪いのでうまく再生できないかもよ的な警告が出ていたので、Hyper-Vの限界か

- 解像度
拡張セッションなしでは1152x864までしか解像度が上げられず、FullHDのホストから配信された動画はジャギーな感じになってしまう


## 結論
おとなしくProライセンス買うか共有フォルダ経由で我慢しましょう
・・・なのかな。
ColorMagicでカラーパレットを作成してみた

# ColorMagicの配色が素敵
ColorMagicは資料の作成で配色に迷ったとき、お客様（企業）のイメージカラーに合わせたいとき、デザインを学んでいない素人には、とてもありがたいアプリです。16進数カラーコードとRGBが出力されます。こんな感じです。
![color2-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392601/c686b1c9-90ae-b594-cc5c-4454538314e6.jpeg)


今回は試しにグラフの色に使ってみました。16進法を入力してカラーリストを作成しています。
```
color_list={0: '#f16f7a', 1: '#fbbcc2', 2: '#473335', 3: '#7e5d71'}
df[1:].plot(figsize=(12,10), kind="barh" , subplots=True, layout=(1, 4) , sharey=True,color=color_list)
```
(コードの前後は省略しています）
![df.plot-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392601/8644bf36-e16a-c40f-f4c9-b80e5069d39a.jpeg)



# ここに行くだけ
https://colormagic.app/

# もうちょっと詳しい使い方
case1. 　そのまま「パレットを作る」でイメージのキーワードを入力。
配色を決めるだけならログインしなくても使えますが、保存は不可。

case2.　googleアカウントでログインするとすべての機能が使えます。パレット生成は1日10回まで。

case3. 　有料会員になる（年間プラン480円/月。月間プラン680円/月）。

# original information
https://twitter.com/nztm_tw/status/1619278886629675008

------------------------------------
参考HP及び参考文献
（df.plotの色変更については）
https://www.relief.jp/docs/pandas-change-colors-bar-chart.html
（テストしたグラフのコードについては）
篠田裕之　翔泳社「Pythonで動かして学ぶ！Kaggleデータ分析入門」pp.262-269

-------------------------------
カラーパレットの生成は
> OpenAIのAPIをうまく使って

いるそうです。
Amazon CloudWatch LogsのメトリクスフィルターでLambdaの処理の統計情報を取得する

# はじめに
Lambdaを使ってアプリケーションを作っていると、カスタムメトリクスを取得したくなるケースが発生する。
しかし、FaaSでは統計情報を収集する・定期でメトリクス情報を送る仕組みがないため、コンテナとは異なるアプローチが必要になる(例えばコンテナアプリでは、定期的にPutMetricDataのAPIを呼ぶことでメトリクス情報を送ることが可能)。

Amazon CloudWatch Logsのメトリクスフィルターを使えば、ログの情報をカスタムメトリクスとして送信することができる。

今回は、この方式の統計情報作成をTerraformで自動化する。

# アプリケーションのログ情報
例えば、今回のアプリケーションでは、処理中に文字列の修正を行ったかどうかを判定して統計を取りたいとする。
メトリクスを分けるために、以下のようなINFOログを出力するとしよう。

- 修正を行わなかった場合
```
[2023-05-21T02:15:16.701] [INFO] default - [Metric Filter] CorrectWord: Uncorrected.
```

- 修正を行った場合
```
[2023-05-21T02:15:16.701] [INFO] default - [Metric Filter] CorrectWord: Corrected.
```

# メトリクスフィルタの設定
上記のログを統計する場合、以下のようなメトリクスフィルタを作れば良い。
```pettern```の部分がフィルタ用文字列、```metric_transformation```の部分がメトリクスの設定だ。
今回は件数を計上したいので、1ログ1件として、```value = "1"```、```unit = "Count"```を設定している。
今回はLambdaでディメンション指定は不要なので、使っていない。EC2やECSで見分けが必要な場合はディメンションを使おう。

```HCL
resource "aws_cloudwatch_log_group" "lambda" {
  name              = "/aws/lambda/${local.lambda_function_name}"
}

resource "aws_cloudwatch_log_metric_filter" "example1" {
  name           = "${local.lambda_function_name}-correctword-corrected"
  pattern        = "Metric Filter Corrected"
  log_group_name = aws_cloudwatch_log_group.lambda.name

  metric_transformation {
    namespace  = "CustomMetrics/xxxxxxxx"
    name       = "CorrectedCount"
    value      = "1"
    unit       = "Count"
  }
}

resource "aws_cloudwatch_log_metric_filter" "example2" {
  name           = "${local.lambda_function_name}-correctword-uncorrected"
  pattern        = "Metric Filter Uncorrected"
  log_group_name = aws_cloudwatch_log_group.lambda.name

  metric_transformation {
    namespace  = "CustomMetrics/xxxxxxxx"
    name       = "UncorrectedCount"
    value      = "1"
    unit       = "Count"
  }
}
```

なお、フィルタを作ってからチェックするのは面倒なので、マネージメントコンソールでは既存のログからパターンをテストをしてから適用する方が良い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111314/37d9a7d7-afbb-43d0-3c4f-b03bc30ddee1.png)

# 結果確認
上記の設定を入れた後に適当にアプリを動かしてログを出力させてから、CloudWatchメトリクスのコンソールを確認しよう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111314/e611eae8-84aa-e4aa-6345-fbbacc8a875c.png)

自分で作ったフィルタのメトリクス情報が出力されるようになった！
ABC302 - C Almost Equal 自己解法

# 問題

https://atcoder.jp/contests/abc302/tasks/abc302_c

# 考察
文字列 N 個を条件を満たすように並び替えることができますかという問題です。
Nが最大でも8であることから、並び替えられるパターンを全て試しても実行時間制限以内で実行できそうです。
全てのパターンの試し方はC++の場合、next_permutationという関数が便利です。
全てのパターンを試すことができる状況を作り出すことができれば、各々のパターンで条件を満たしているかを確かめていきます。
今回の場合、「任意の隣同士の文字列を比較した時、異なる箇所がちょうど1箇所」を実装して確かめればいいです。

# 提出コード(コンテスト後)

https://atcoder.jp/contests/abc302/submissions/41593781

ご不明点などがあれば教えていただけると幸いです。
[忘備録]dockerによるdjangoの起動方法

# dockerでdjangoを起動するときの方法

すぐに忘れてしまうのでここに忘備として置く。

## dockerfile 

```dockerfile

FROM python:3.8.12

# 必要なパッケージやライブラリをインストール
RUN pip install django==4.0.2

# コンテナ内に作業ディレクトリを作成
WORKDIR /app

# ホストマシンの特定のディレクトリをコンテナ内のディレクトリにマウント
VOLUME [" C:/Users/自分の名前/Documents/python/django4:/app"]

# コンテナ内で実行するコマンド
CMD ["python", "blogproject/manage.py", "runserver", "0.0.0.0:8000"]

```

## dockerの構築

>  docker build -t my-django-app .

## dockerの起動とdjangoのrun

> docker run -it -p 8000:8000 -v C:/Users/自分の名前/Documents/python/django4:/app my-django-app

## dockerコンテナ内に入る

psで自分の入りたいコンテナIDを探してから、execで起動する。

> docker ps

> docker exec -it コンテナID bash

# "the docker daemon is not running"と表示したとき

docker desctopを起動せよ。

```
PS C:\Users\自分の名前\Documents\python\django4> docker build -t my-django-app .
ERROR: error during connect: this error may indicate that the docker daemon is not running: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/_ping": open //./pipe/docker_engine: The system cannot find the file specified.
```

# bootstrapが読み込まれなかったとき

[Django4 Webアプリ開発 実装ハンドブック](https://www.amazon.co.jp/Django4-Web%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA-%E5%AE%9F%E8%A3%85%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-Python%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E5%AE%9A%E7%95%AA%E3%82%BB%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3-%E3%83%81%E3%83%BC%E3%83%A0%E3%83%BB%E3%82%AB%E3%83%AB%E3%83%9D/dp/4798067172/ref=d_pd_sbs_sccl_1_1/356-4558816-3333230?pd_rd_w=BWQO0&content-id=amzn1.sym.0658137e-f5cd-4a01-8903-013eee01b385&pf_rd_p=0658137e-f5cd-4a01-8903-013eee01b385&pf_rd_r=RJNAY4WERPAGJS9B6JCP&pd_rd_wg=Kycrb&pd_rd_r=f909f9dc-5432-499b-b317-5d1bead6ebeb&pd_rd_i=4798067172&psc=1)の第4章で、ダウンロードされたindex.htmlを改造したとき、cssやjsが読み込まれず、文字のみが表示される場合がある。このときは```/blogproject/blogproject/setting.py```で以下の様にする。

## 前

> STATIC_URL = 'static/'

## 後

> STATIC_URL = '/static/'
辞書のリストの操作【Python】

# 並び替え
辞書の値(value)によって並び替える。
たとえば、以下のようなチームのListをメンバーの多さによって並べ替える。

```python
teams = [
          {"team":"A", "member": ["Bob", "Alice", "John"]},
          {"team":"B", "member": ["Liam", "Olivia", "Emma", "Amelia"]},
          {"team":"C", "member": ["Luna", "Ethan"]}
         ]  

sorted_teams = sorted(teams, key=lambda x: len(x['member']), reverse=True)
print(sorted_teams)
```

>[{'team': 'B', 'member': ['Liam', 'Olivia', 'Emma', 'Amelia']},
 {'team': 'A', 'member': ['Bob', 'Alice', 'John']},
 {'team': 'C', 'member': ['Luna', 'Ethan']}]




# 辞書の値による検索

上記のリストの中で、リアムのいるチームを検索する。

```python
team_with_liam = next(item for item in teams if "Liam" in item["member"])
print(team_with_liam)
```

>{'team': 'B', 'member': ['Liam', 'Olivia', 'Emma', 'Amelia']}

🐣
****
フリーランスエンジニアです。
AIについて色々記事を書いていますのでよかったらプロフィールを見てみてください。

もし以下のようなご要望をお持ちでしたらお気軽にご相談ください。
AIサービスを開発したい、ビジネスにAIを組み込んで効率化したい、AIを使ったスマホアプリを開発したい、
ARを使ったアプリケーションを作りたい、スマホアプリを作りたいけどどこに相談したらいいかわからない…

いずれも中間コストを省いたリーズナブルな価格でお請けできます。

お仕事のご相談はこちらまで
rockyshikoku@gmail.com

機械学習やAR技術を使ったアプリケーションを作っています。
機械学習／AR関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
[GitHub](https://github.com/john-rocky)
ABC302回答メモ

0.はじめに
　通常のコンテストとA~Dの難易度の上がり方が
　違う感じでした。点数を見て気づきました。
　Bが難しいというか面倒で時間がかかりDまでしか
　解けませんでしたが、レートは+29と上がりました。


1.A - Attack
　AをBで割り、割り切れれば商を、割り切れなければ商に1足した
　値を出力しました。

　https://atcoder.jp/contests/abc302/submissions/41539881


2.B - Find snuke
　愚直に実装したら、3KBを超える超大作に。
　整頓した書き方にしたかったのですが
　いったん実装した時点でだいぶ時間が経過していたので
　そのまま提出しACでした。
　
　考え方
　　・文字列からuをさがす
　　・uを中心に左上、左、左下、下、右下、右、右上、上から見た場合に
　　　snukeになるかをチェックし、snukeになっていれば座標を出力して終了

　https://atcoder.jp/contests/abc302/submissions/41562592


3.C - Almost Equal
　ざっと見た感じで、なかなか難しいと思いましたが
　制約を見たところ文字列は8種まで、文字数は5文字までだったの
　全パターンチェックで行けそうなことに気づきました。
　実装
　　・itertoolsをインポート
　　・文字列をリストSに格納。
　　・itertools.permutationsでSから5個を抽出したリストｖを作成
　　・ｖを順に読んでいき、単語単位の差が2以上あった場合は
　　　ブレイクして次のｖへ、無い場合は次の単語のチェックをする
　　・ｖの単語すべてのチェックがＯＫの組み合わせがあったらＹｅｓを出力して
　　　終了
　　・すべてのｖをチェックして、Ｙｅｓの組み合わせが無かったらＮｏを出力
　　　して終了
　
　https://atcoder.jp/contests/abc302/submissions/41567964


4.D - Impartial Gift
　ぱっと見B、Cよりもかんたんだな・・・と思いつつ実装。
　10分で回答できました。

　実装
　　・リストA、Bを昇順ソート
　　・変数iにN-1をjにM-1をセット
　　・以下、iかjが-1になるまで繰り返し
　　　・A[i]-B[j]の絶対値がD以下の場合
　　　　・A[i]+B[j]の値を出力して終了
　　　・A[i]-B[j]の絶対値がDより大きい場合
　　　　・A[i]がB[j]より大きい場合
　　　　　・iから1をマイナス
　　　　・B[j]かA[i]以上の場合
　　　　　・jから1をマイナス
　　・繰り返し終了しても該当組み合わせがない場合-1を出力して終了

　https://atcoder.jp/contests/abc302/submissions/41571563


以上
エクセル作業の効率化まとめ

###### 以下は、作業効率化の操作のまとめ
##    はじめに

　　　　こちらは、主にエクセルで使用すると便利な操作等のまとめです。


○<font color="blue">セルに入力規則を設定する</font>（入力できる値を制限）

　 (1) ［データ］タブの「データの入力規則」から
　　　　ダイアログ ボックスを開く（Alt+A 押しながら[V]+[V]）
　　1･･･入力の種類から「リスト」を選択
![スクリーンショット 2023-06-09 12.00.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1214133/9818c26b-4dc0-e39a-3033-6766a2d2bb5b.png)
　　2･･･元の値に「,」で区切って値を設定
![スクリーンショット 2023-06-09 12.14.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1214133/f1de56ad-1af2-06e7-313d-820b3b7cc773.png)



○<font color="blue">列または行をグループ化する</font>（折りたたんで、一時的に非表示にする）

　 (1) 以下の例でD列をグループ化する
　　1･･･対象の列を選ぶ
![d.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1214133/9cd3833d-f122-fc75-3ea6-6d2e59bb9897.jpeg)

　　2･･･Shift+Alt+「→」ボタンを押下。（「-」で畳めるようになる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1214133/2f241d3b-5e25-3503-10af-cde13f1e3b6b.png)


○<font color="blue">選択した状態で、CTRL+「５」で 取り消し線</font>

　 (1) 以下の例でE6の二行目を取り消し線
　　1･･･対象を選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1214133/92a4d6f6-79f0-dc25-059d-4121b841c7fc.png)


　　2･･･CTRL+「5」ボタンを押下。（取り消し線）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1214133/d9575dea-f5ba-0ac6-7a27-6c52d0da0092.png)

○<font color="blue">オートシェイプの平行移動</font>（コピー）

　 (1) 対象を選んだ状態で Shift 押しながら Ctrl
Github Actions PR Open時、PR 再Open時、PR作成ブランチにPushがあった時にワークフローを実行するトリガー設定

# 概要

- Github Actionsにてワークフローのトリガーを「PR Open時」「PR 再Open時」「PR作成ブランチにPushがあった時」に設定する方法を簡単にまとめる。

# 方法

- `.github/workflows/foo.yml`のワークフロートリガー設定であるonキーで下記のように記載する。

    ```.github/workflows/foo.yml
    on:
      pull_request:
        types: [opened, reopened, synchronize]
    ```

- typesのopenedが「PR Open時」
- typesのreopenedが「PR 再Open時」
- typesのsynchronizeが「PR作成ブランチにPushがあった時」

# 参考文献

https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows#pull_request
【自作アプリ】実装機能➁

#### 【機能】
機能としてはログインしたユーザーのみに閲覧権限と編集権限を与えること。
（ログインしたユーザーのみがユーザー情報を確認できる）

#### 【遷移】
ログイン画面
↓
トップ画面

#### 【SQL】
テーブルとしては２つ
➀USERテーブル：idカラム
➁INVESTテーブル：idカラム・user_idカラム（USERテーブルidカラムとの紐付け用カラム）
USERテーブルはユーザー情報、INVESTテーブルは株式投資情報。

ログイン時、USER情報がSESSIONで飛ばされており、それをキャッチしてINVESTテーブルから情報を取得する動作。

以下はそれぞれのidを取得するSQL文
```sql
--USERテーブル
--USER情報を取得
SELECT * FROM USER WHERE id = ;
```
```sql
--INVESTテーブル
--株式投資情報を取得
SELECT * FROM USER WHERE id = ;
--USERテーブルの情報TO紐付けができる
SELECT * FROM USER WHERE user_id = ;
```

```sql
--２つのテーブルを紐付け可能
SELECT * FROM USER a INNER JOIN INVEST b ON a.id = b.user_id 
WHERE a.id = '1';--例）idが1のユーザーの場合
```

![ログイン画面　第二期.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918178/86a2c006-2831-7a0a-155c-27964e81eea3.png)

![トップ画面　第二期➀.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918178/93abba79-da33-1f25-adc1-59b27df090d7.png)

![トップ画面　第二期➁.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918178/bcf65f0f-0c9a-e363-7aa3-ff6334d0f859.png)

##### ↑ユーザー情報のみが取得できていることの確認

#### 【総括】
今まではオープンなアプリのみを作ってきましたが今回初めてログイン機能を実装し、その上でログインしたユーザーのみがその人自身の情報を覗けるという機能を実装してみました。
実際の現場でSQLを触っているのでかなりスムーズに実装する事ができたと思います。
paiza.ioでelixir その224

# 概要
paiza.ioでelixirやってみた。
練習問題、やってみた。

# 練習問題
ハノイの塔を、Zenスタイルで、決めよ。

# 方針
- 再帰的でない解き方で、ハノイの塔を解く。

- 円盤がn枚の時、以下を2のｎ乗 - 1回繰り返す
	一番小さい円盤を動かす。
	それ以外の円盤を動かす。

- 条件として、小さな円盤の上に大きな円盤を乗せることはできない。
- 手順として、一番小さい円盤は、常に1→2→0→1(nが偶数の場合)、または2→1→0→2(nが奇数の場合)の順に動かす。
- 驚いたことに、一番小さな円盤以外の円盤を動かす場面では、動かせる方法は1通りしかない。
- Agentを使う。
- Listを使う。


# サンプルコード

```


defmodule Hanoi do
	def start_link do
		Agent.start_link(fn ->
			[a: 0, b: 0, c: 0, n: 0]
		end, name: __MODULE__)
	end
	def init(n) do
		Agent.update(__MODULE__, fn v ->
			List.keyreplace(v, :n, 0, {:n, n})
		end)
	end
	def move_1() do
		Agent.update(__MODULE__, fn v ->
		    {_, a} = List.keyfind(v, :a, 0)
		    a2 = a - 1
		    if a2 < 0 do
		        a2 = 2
		        IO.puts "円盤1を #{a} -> #{a2}"
                v = List.keyreplace(v, :a, 0, {:a, a2})
		    else
                IO.puts "円盤1を #{a} -> #{a2}"
                v = List.keyreplace(v, :a, 0, {:a, a2})
            end
		end)
	end
	def move_n() do
		Agent.update(__MODULE__, fn v ->
		    {_, a} = List.keyfind(v, :a, 0)
		    {_, b} = List.keyfind(v, :b, 0)
		    {_, c} = List.keyfind(v, :c, 0)
	    	if a == 2 && b == 0 && c == 0 do
	    	    b2 = 1
                IO.puts "円盤2を #{b} -> #{b2}"
                v = List.keyreplace(v, :b, 0, {:b, b2})
            else
		        if a == 1 && b == 1 && c == 0 do
	        	    c2 = 2
                    IO.puts "円盤3を #{c} -> #{c2}"
                    v = List.keyreplace(v, :c, 0, {:c, c2})
                else
                    if a == 0 && b == 1 && c == 2 do
	        	        b2 = 2
                        IO.puts "円盤2を #{b} -> #{b2}"
                        v = List.keyreplace(v, :b, 0, {:b, b2})
                    else
                        v
		            end
		        end
            end  
		end)
	end
	def print() do
		Agent.get(__MODULE__, fn v ->
			v
		end)
	end
end

defmodule Main do
	def run(n) do
	    Hanoi.init(n)
	    p = (:math.pow(2, n) - 2) / 2
	        |> round
        for i <- 1..p do
        	Hanoi.move_1
        	Hanoi.move_n
        end
        Hanoi.move_1
	end
end

Hanoi.start_link
Main.run(3)




```

# 実行結果

```
円盤1を 0 -> 2
円盤2を 0 -> 1
円盤1を 2 -> 1
円盤3を 0 -> 2
円盤1を 1 -> 0
円盤2を 1 -> 2
円盤1を 0 -> 2



```

# 成果物

https://paiza.io/projects/0ceD8cfIyi37nWm-SxYZtw


以上。
ASRock B650M PGメインボード起動しても画面に何も出ない問題解決！

# マザボからパワーオンしたのに画面に何も出ないときの方策

パソコンをくみ上げることになり、難儀したので備忘録がわりに情報共有。
CPU、マザボ、電源、DDR5という最小限で起動を試みるも失敗。
原因は UEFIのバージョンが古いことだった！！

## 構成

- Ryzen9-7950X（最近3Dってのが出てきたので、無印とわざわざ断る必要あり）
- ASRock B650M PG Riptide WiFiマザボ
- AdataのDDR5 (32G)
- クーラーマスターの550ワット電源。

最小限構成にして給電、スイッチオンしてもBios画面すら出ません。
説明書を冷静に読んでみると、当該マザボには 

```
スマートボタンが 1 つ装備: BIOS フラッシュバックボタンにより、BIOS をフラッシュできる。
```

そう記述してます。biosフラッシュ→アップデートだと解釈してみた。

side noteですが、[YouTube動画](https://youtu.be/L3A2jdnzU7Q)見ていると、無理むりDDR5を4枚刺しに
したら、うんともすんとも言わなくなったけど, biosをアップデートするとうまく
いったそう。そんな動画を見てひらめきました。

# Biosすら出てこない状態でもBiosをアップデートする方法

CPUとDDR5は突き刺しておいてもかまわないと思います。正式には外すみたいですが・・

## 空っぽっぽのフラッシュメモリーを準備

FAT32フォーマットである必要。マザボのサポートサイトから最新のUEFIをダウンロード。ZIP圧縮してあるので、
それを展開し、フラッシュメモリーroot directoryにコピー。そのときファイル名を `creative.rom`にチェンジしてください。

## CMOSリセット

必要かどうかわからないが、ねんのために。CMOSリセットやったほうがいいでしょう

マザボへの給電経路をたつ。CPU電源8pinコネクターを外して、マザボ24pinコネクタだけつなぐ。CMOSリセットピンをジャンパーでショート（ジャンパーピンは、古くなって使ってないマザボとかにおそらくついてる）。3秒我慢。ジャンパーをぬく。

## フラッシュメモリーの中身をマザボに読み込ませる

マザボに給電する。フラッシュメモリーをバックポートの指定されたところに突き刺す。（マザボによってフラッシュできるポートがことなるらしい）。私の場合は4連ポートの一番下でした。機種によってフラッシュボタンもことなる場所にあると思うが、ボタンを3秒以上押す。私の場合は、バックポートでした。フラッシュメモリーのLEDが点滅する。消えるまで待つ。マザボにあるダイオードも光るのかな？消えたら、フラッシュメモリーをぬく。

## ローンチテスト

CPU給電用の8PINコネクターをつなぐ。パワーオンオフPINにスイッチを接続。スイッチオンする。これで画面になにかが出るはずです。


# ご参考

[BIOS フラッシュバック機能 ユーザーガイド](https://www.cfd.co.jp/biz/news/detail/__icsFiles/afieldfile/2022/10/14/asrock_bios_flashback_guide.pdf)
[Ryzen9-7950Xで128Gにしてみた](https://youtu.be/L3A2jdnzU7Q)
【Python】偶数のリストを返すアルゴリズム

# はじめに
偶数のリストを返すアルゴリズムです。
（例）input: 20, output: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# 実装
```python:even_numbers.py
from typing import List
def func(num: int) -> List[int]:
  numbers = []
  for i in range(num+1):
    if i%2 == 0:
      numbers.append(i)
    else:
      continue
  return numbers

if __name__ == "__main__":
  num = 20
  print(func(20))
【JavaScript】オブジェクトについて

## はじめに
JavaScript勉強中の👶です。
理解を深めるために日々の学びを記事にしています。
初心者の記事なので言い回しや記載に誤りがあるかも知れませんが、暖かく見守っていただけると幸いです。
<font color="gray">(よろしければ間違いをコメントいただけると学び、励みになります！)</font>

## 学んだこと
・オブジェクト定義のやり方
・スプレッド構文
・等値性について


## オブジェクトの定義
```js
const name = input?input:"名無し";

const user= {
	name, //プロパティ名=変数名(name: name)の場合省略可
	age:20,
}
console.log(user.age); //[LOG]:20
```

## 動的なオブジェクト定義
### プロパティ名を動的に定義する
`[オブジェクト名]`とすることで動的に定義可能。
```js
const name = input?input:"名無し";
const propName = "foo";  //プロパティ名の定義

const user= {
	name, //プロパティ名=変数名(name: name)の場合省略可
	age:20,
	[propName]: "bar",
}
console.log(user.foo); //[LOG]:bar
console.log(user[propName]); //[LOG]:bar
```

### オブジェクトの呼び出しを動的に操作する
`オブジェクト名[式]`を用いることで下記のように呼び出すプロパティを動的に操作できる。
```js
const age = 20;
const messages = {
	adult: "成人ずみです",
	child: "未成年です",
}

console.log(messages[age>=18?"adult":"child"]) //[LOG]:成人ずみです
```

## スプレッド構文
### `...式`で要素を展開する構文
```js
const obj1 = {
	foo: 123,
	bar: 456,
}

const obj2 = {
	...obj1,
}
console.log(obj2); // [LOG]: { "foo": 123, "bar": 456 }
```
### 要素が被る場合は、後に宣言された方が優先される
```js
const obj1 = {
	foo: 123,
	bar: 456,
}

const obj2 = {
	...obj1,
	foo: 0,
}
console.log(obj2); // [LOG]: { "foo": 0, "bar": 456 }
```


## オブジェクトの等値性
```js
const foo = {num: 1234}
const bar = foo;
bar.num = 0;
console.log(bar.num); // [LOG]: 0
console.log(foo.num); // [LOG]: 0
```
変数fooに{num: 1234}を作成しbarに代入しています。この時、fooの{num: 1234}がコピー(複製))されて別オブジェクトの{num: 1234}が格納されているわけではありません。fooもbarも同じ{num: 1234}オブジェクトを参照しています。そのためbar.numの代入によりfoo.numの内容も変わってしまいます。

`=`は{num: 1234}をコピー、複製しているようで実際は出来ていないということですね。
単純に解決する方法は下記です。
```js
const foo = {num: 1234};
const bar = {num: 1234};
```

また、スプレッド構文を使用するとbarとfooのプロパティを別オブジェクトとしてコピー(複製)できます。
```js
const foo = {num: 1234}
const bar = {...foo};
```

スプレッド構文でコピー(複製)される対象に注意が必要です。スプレッド構文で展開されるオブジェクトに更にオブジェクトが格納されている場合、コピーの対象にあたりません。
```js
const foo = {obj:{num:1234}};
const bar = {...foo};
console.log(bar); // [LOG]: { "obj": { "num": 1234 } }
bar.obj.num = 0;
console.log(bar); // [LOG]: { "obj": { "num": 0 } }
console.log(foo); // [LOG]: { "obj": { "num": 0 } }
```

上記のような状況をシャローコピー(浅いコピー)というようです。ネストの中身までコピーすることをDeep Copyというようです。
"JavaScript DeepCopy"と検索するとさまざまなライブラリが出てきます。


## オブジェクトの一致判定
オブジェクトの内容が同じであっても`===`比較するとfalseになります。
```js
const foo = {num:1234};
const bar = foo;
const baz = {num:1234};

console.log(foo === bar); // [LOG]: true
console.log(foo === baz); // [LOG]: false
```
ベイズ最適化についての検索数や文献(論文・記事等)数の推移(2010～2022)

近年目にすることが多くなってきた「ベイズ最適化」について、Googleでの検索数や文献(論文・記事等)数数の推移がどうなっているかを調べてみました。
# 検索数の推移(Google)
Google Trendで"Bayesian Optimization"というワードで2010年1月~2023年4月までの推移を記載
![BO_Trend.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257243/79689cd1-f2fe-1b13-9f22-c2956267ce01.png)
大まかには検索数が増加しているのがわかります。
Google Trendでは対象期間で最も検索数が多い期間を100として、その割合の推移を表示しているようなので、実際の検索数のVolumeはわからないです。
Bing AIの登場によりGoogleの検索自体が減っていきそうなので、2023年以降は、Googleの検索数推移を見るのでは、あまりあてにならなくなってしまうかもしれないです。
# 論文・記事数の推移(Google scholar)
Google scholarにて"Bayesian Optimizaion"というワードで、期間指定を年毎に行い、全ての言語、全ての種類、でヒットした結果でまとめています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257243/7bdf6d08-4570-c709-a243-de2b2b3ac575.png)
2016年までは1,000件未満でしたが、近年急速に増加していることがわかります。最近ベイズ最適化関連の話題を見ることが多くなってきた印象がありましたが、ここまで増えているとは思いませんでした。事例としては、特にMI(Materials Informatics)の分野で多く目にする印象があります。
HTA、VBScriptを使用したファイル解凍

ファイル一覧から対象ファイルをチェックしてファイル解凍します。
3重、4重の圧縮ファイルの解凍に便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241687/fbf66e5b-c605-3e3a-29bf-35624d679478.png)

■仕様
・「一覧表示」押下で、HTAが配置されているフォルダのファイル一覧を再帰的に生成。
・tar,zip,gz,Zのファイルは緑色表示。
・「チェックボックス」がオン、「解凍実行」を押下で7zipを使用した解凍実施。
・解凍先は圧縮ファイルと同じ。同一ファイルが存在していた場合は上書き。
・7zipの処理結果をポップアップで表示。

```HTA
<html>
<head> 
<title>圧縮ファイル解凍</title> 
<HTA:APPLICATION  
     APPLICATIONNAME="圧縮ファイル解凍"
     SCROLL="yes"
     SINGLEINSTANCE="yes" 
>

<script language="VBScript">
Dim FSO
Dim REP
Dim s

'--- 起動時---
Sub Window_onLoad
  window.resizeTo 1400,900  
End Sub

'--- HTAと同一フォルダのファイル一覧作成 ---
sub MakeList()
  Set FSO = CreateObject("Scripting.FileSystemObject")
  Set REP = CreateObject("VBScript.RegExp")
  
  '--- 解凍対象識別子 ---
  REP.Pattern = ".tar$|.zip$|.Z$|.gz$"

  '--- HTMLを生成  ---  ※文字編集のときはspan contenteditable
  s = "<span><TABLE width=100% border><TR bgcolor=#FF9933><TD align=""center"">解凍対象</TD>"
  s = s & "<TD>ファイルパス</TD><TD>ファイル名</TD><TD>フルパス</TD></TR>"
  FindFolder FSO.GetFolder(".")
  s = s & "<TR><TD>END</TD><TD></TD><TD></TD><TD></TD></TABLE></span>"
  TableArea.innerHtml = s
  
  Set FSO = Nothing
  Set REP = Nothing
End Sub

'--- 再帰的にファイル一覧をtableフォーマットで作成 ---
Sub FindFolder(ByVal objMainFolder)
    Dim objSubFolder
    Dim objFile

    For Each objSubFolder In objMainFolder.SubFolders
      FindFolder objSubFolder
    Next

    For Each objFile In objMainFolder.files
      
      '--- 解凍対象を判定し解凍ボタン生成、テキスト開くボタン生成  ---
      If REP.Test(objFile.Name) Then 
        TR = "<TR bgcolor=#99ff66>"
      Else
        TR = "<TR>"
      END If
           
      '--- Tableの明細行作成  ---
      s = s & TR & "<TD align=""center""><input type=""checkbox"" /></TD><TD>" & objFile.ParentFolder
      s = s & "</TD><TD>" & objFile.Name & "</TD><TD>" & objFile.ParentFolder & "\" 
      s = s & objFile.Name &"</TD></TR>"
    Next
    
End Sub


'--- 7zipを利用して解凍する ---
Sub Tenkai()
  Dim wsh,osh
  Dim i,SZIP
  
  Set wsh = CreateObject("WScript.Shell")
  Set TABLE = document.getElementsByTagName("TABLE")(0)
  i = 0
  While TABLE.rows(i).cells(0).innerText <> "END"
    
    if TABLE.rows(i).cells(0).innerHTML = "<INPUT CHECKED type=checkbox>" then
      f_path = TABLE.rows(i).cells(1).innerText 
      f_full = TABLE.rows(i).cells(1).innerText & "\" & TABLE.rows(i).cells(2).innerText
      
      
      '---■■■7zipのパスを定義する■■---
      SZIP = "C:\Program Files\7-Zip\7z.exe"
      
      set osh = wsh.Exec(SZIP & " x -aoa ""-o" & f_path & """ """ & f_full & """")
      msgbox osh.Stdout.ReadAll
      
    End If
    
    i = i + 1
    Wend
  Set osh = Nothing
  Set wsh = Nothing
  
End Sub

Sub TextGo()
End Sub

</script></head>
<body>
■解凍するファイルとHTAを同一ディレクトリーへ配置して下さい。　　※7zipのインストールが必要です。<br>
■一覧表示を押下して下さい<br>
■解凍対象にチェックしてから「解凍実行」ボタンを押下してください。
　7zipの解凍処理結果が表示されますので確認してください。<p>
<input type="button" value="一覧表示" name="run_button1" onClick="MakeList">
<input type="button" value="解凍実行" name="run_button2" onClick="Tenkai">
<p>
<p>
<span id=TableArea></span>
<p>

</body> 
</html>
```
【Python】素数のリストを作成するアルゴリズム

# はじめに
与えた数字までに存在する素数を格納したリストを作成するアルゴリズムです。
（例）input: 20, output: [2, 3, 5, 7, 11, 13, 17, 19]

# 実装
```python:prime_numbers.py
# 関数に型明示ができるようにする
from typing import List, Generator

# 素数を抽出する関数（与えた数字までの素数を抽出する）
def generate_primes_v1(numbers: int) -> List[int]:
  # 空のリストの作成
  primes = []
  # for文を何回回したか
  i = 0
  for x in range(2, numbers + 1):
    for y in range(2, x):
      # for文カウント
      i += 1
      # 余りが０の時は含めない
      if x % y == 0:
        break
    else:
      # for文カウント
      i += 1
      primes.append(x)
  # for文を回した回数の表示
  print("v1=", i, "回")
  return primes

def generate_primes_v2(number: int) -> List[int]:
  primes = []
  # キャシュ用の辞書の作成
  cache = {}
  # for文のカウント用
  i = 0
  for x in range(2, number + 1):
    # for文の回数をカウントする
    i += 1
    is_prime = cache.get(x)
    if is_prime is False:
      continue
    primes.append(x)
    cache[x] = True
    # 倍数の除去
    for y in range(x*2, number+1, x):
      cache[y] = False
  print("v2", i, "回")
  return primes

# ジェネレータの場合
def generate_primes_v3(number: int) -> Generator[int, None, None]:
  cache = {}
  for x in range(2, number + 1):
    is_prime = cache.get(x)
    if is_prime is False:
      continue
    yield x
    cache[x] = True
    for y in range(x*2, number+1, x):
      cache[y] = False
    

if __name__ == "__main__":
  # 時間計測
  import time
  # 現時刻の取得
  start = time.time()
  # 関数の実行
  print(generate_primes_v1(50))
  # 処理にかかった時間
  print(time.time() - start)
  
  # 現時刻の取得
  start = time.time()
  # 関数の実行
  print(generate_primes_v2(50))
  # 処理にかかった時間
  print(time.time() - start)
  
  # 現時刻の取得
  start = time.time()
  # 関数の実行
  print([i for i in generate_primes_v3(50)])
  # 処理にかかった時間
  print(time.time() - start)
```

# 参考
https://www.udemy.com/course/python-algo/
【Maven】Fatal error compiling: エラー: リリース・バージョン17はサポートされていません

# はじめに
Mavenで「mvn spring:run」をしたらタイトルのエラーが出たので解決方法をメモしておく。
## 状況
Mavenで指定しているバージョンは17。
```pom.xml
	<properties>
		<java.version>17</java.version>
	</properties>
```
端末のJavaのバージョンは17。
``` 
> java -version
java version "17.0.2" 2022-01-18 LTS
Java(TM) SE Runtime Environment (build 17.0.2+8-LTS-86)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)
```

あれれ

# 解決方法１
`mvn -version`をすると分かるように、Mavenでは環境変数のJAVA_HOMEを使う。
```
> mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: C:\maven\bin\..
Java version: 12.0.1, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-12.0.1
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

> set JAVA_HOME
JAVA_HOME=C:\Program Files\Java\jdk-12.0.1
```

今回は、バージョン12が指定されていました。
なので、JAVA_HOMEで指定するJavaのバージョンを17に変更すると解消しました。
めでたしめでたし。

# 参考
https://mkyong.com/maven/maven-error-invalid-target-release-17/

# 補足
ちなみにエラーログ抜粋。
```
> mvn spring-boot:run
[INFO] Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.kyosoba:detail-api >-----------------------
[INFO] Building detail-api 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:3.1.0:run (default-cli) > test-compile @ detail-api >>>
[INFO]
[INFO] --- maven-resources-plugin:3.3.1:resources (default-resources) @ detail-api ---
[INFO] Copying 1 resource from src\main\resources to target\classes
[INFO] Copying 0 resource from src\main\resources to target\classes
[INFO]
[INFO] --- maven-compiler-plugin:3.11.0:compile (default-compile) @ detail-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.3.1:testResources (default-testResources) @ detail-api ---
[INFO] skip non existing resourceDirectory 
[INFO]
[INFO] --- maven-compiler-plugin:3.11.0:testCompile (default-testCompile) @ detail-api ---
[INFO] Changes detected - recompiling the module! :input tree
[INFO] Compiling 1 source file with javac [debug release 17] to target\test-classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.164 s
[INFO] Finished at: 2023-05-21T07:43:24+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:testCompile (default-testCompile) on project detail-api: Fatal error compiling: エラー: リリース・バージョン17はサポートされていません -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:testCompile (default-testCompile) on project detail-api: Fatal error compiling
----以下省略-----
```
人工知能規制法

世の中というものは、やはり資本主義であると思う。

* 最近の物価高で食料品や電気代が上がる
* 家計が圧迫される
* 節約しようというモチベーションに繋がる
* 省エネやＳＤＧ化が進む

最近はSDGsというキーワードで環境配慮が流行であるが、
結局、人間というものは利己的なものであって、
現実問題を言うと、環境配慮しようと努力することで
成り立つものでもない・・・

# ＡＩ規制

AIによる問題を議論する際にも同じであり、
このインターネット上のコンテンツ配信に対して、
現状は何のペナルティも発生しない
この世の中のシステムが課題なのだと思う。

これから必要になるのは、インターネット上の情報配信に対して
適切な課税制度を考えるべきではないかと思う。

そんな訳で、BARDに法案を考えてもらった

https://lifehacking1919.hatenablog.jp/entry/2023/05/21/070945

もちろん賛否両論はあるが、ＡＩのことはＡＩに聴くのが
一番良いのではないかと思う。

ＡＩは人類の知識を集めた英知の結晶なのだから・・・
Microsoft クラウドセキュリティベンチマークを Azure のリソースグループに適用してからポリシー準拠の状態変化を確認してみた

Azure に作成したリソースが、セキュリティ的に正しく設定されている事を説明したい場合があったとします。自分自身でセキュリティ診断をすると甘くなったり隠したりする可能性が否定できないので、第三者にセキュリティ診断を依頼して証明してもらうケースもあります。今回は、Azure Advisor や Microsoft Defender for Cloud のベースとなる「 Microsoft クラウドセキュリティベンチマーク」という Azure Policy 定義が 210 個含まれるものを、特定の Azure リソースグループに適用してから、ポリシーに準拠しない App Service を作成して状態変化を確認してみました。

## リソースグループを作成して Microsoft クラウドセキュリティベンチマークを割り当てる

```bash:bash
# 環境変数をセットします
prefix=mnrpt
region=japaneast

# リソースグループを作成し ID を取得します
rgid=$(az group create \
  --name ${prefix}-rg \
  --location $region \
  --query id \
  --output tsv)

# Microsoft クラウドセキュリティベンチマークの名前を取得します
defname=$(az policy set-definition list \
  --query "[?displayName=='Microsoft cloud security benchmark'].name" \
  --output tsv)

# リソースグループに Microsoft クラウドセキュリティベンチマークを割り当てます
az policy assignment create \
  --name MCSB-${prefix}-rg \
  --display-name MCSB-${prefix}-rg \
  --scope $rgid \
  --policy-set-definition $defname \
  --mi-system-assigned \
  --location $region

# ポリシーのスキャンを開始します
az policy state trigger-scan \
  --resource-group ${prefix}-rg \
  --no-wait
```

## ポリシースキャン後の状態

![azure-policy-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/2d2d1fb2-8877-164e-fac5-c19c7e2e9819.png)

## ポリシーに準拠しない App Service を作成

```bash:bash
# App Service プランを作成します
az appservice plan create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-plan \
  --sku FREE

# App Service を作成します
az webapp create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-web \
  --plan ${prefix}-plan

# ポリシーのスキャンを開始します
az policy state trigger-scan \
  --resource-group ${prefix}-rg \
  --no-wait
```

## ポリシー準拠の状態変化

![azure-policy-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/c8d32ef1-7850-44ee-5fc0-80085fb13972.png)

## Azure Advisor のセキュリティから見た状態

![azure-policy-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/957ce648-75e3-3ca7-08f0-5a0f1089ce39.png)

## Microsoft Defender for Cloud から作成した App Service のリソース正常性を見た状態

![azure-policy-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/b780fe98-dde8-558e-a9c1-1ed44cd4a771.png)

## 作成した App Service の Advisor の推奨事項から見た状態

![azure-policy-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/42862e16-dd70-fdf3-0887-785fa236064e.png)

## 参考

https://learn.microsoft.com/ja-jp/cli/azure/policy/assignment?view=azure-cli-latest

https://learn.microsoft.com/ja-jp/azure/governance/policy/assign-policy-azurecli

https://learn.microsoft.com/ja-jp/azure/advisor/advisor-security-recommendations
Rust: thiserrorでanyhow::Errorを手軽に隠蔽する方法

`anyhow`はエラー生成が便利で、開発速度にメリットがあるため初動で使われることが多いです。しかし、`Result`の`Err`に `anyhow::Error`を指定して露出させてしまうと、将来的な変更がしにくくなります。例えば、`anyhow`をやめてカスタムエラーに変更したくなったときにインターフェースの互換性が失われる恐れがあります。この問題を解決するために、`thiserror`の`#[error(transparent)]`を用いて`anyhow`を隠蔽する方法を紹介します。これにより、`anyhow`のエラー生成の手軽さと、将来の互換性を壊しにくさを両立できます。

まず、`Cargo.toml`に以下の依存関係を追加します。

```toml
[dependencies]
thiserror = "1.0.40"
anyhow = { version = "1.0.70", features = ["backtrace", "std"] }
```

`anyhow` の `backtrace` と `std` のfeaturesを有効にすることで、バックトレース情報をサポートし、エラーハンドリングで標準ライブラリのエラーも扱えるようになります。

以下のサンプルコードでは、`thiserror` を用いて `MyError` 構造体を定義し、その中に `anyhow::Error` を隠蔽しています。

```rust
fn main() {
    let err: Result<(), MyError> = stack1();
    eprintln!("{err:?}");
}

#[derive(Debug, thiserror::Error)]
#[error(transparent)]
struct MyError(anyhow::Error);

fn stack1() -> Result<(), MyError> {
    stack2()?;
    Ok(())
}

fn stack2() -> Result<(), MyError> {
    parse_int()?;
    Ok(())
}

fn parse_int() -> Result<i32, MyError> {
    "invalid"
        .parse::<i32>()
        .map_err(|e| e.into()) // ParseIntErrorをanyhow::Errorに変換する。このタイミングでバックトレースが付与される。
        .map_err(MyError) // anyhow::ErrorをMyErrorに変換する
}
```

プログラムを実行するために、以下のコマンドを使います。

```sh
RUST_BACKTRACE=1 cargo run
```

実行結果は以下のようになります。

```
Err(MyError(invalid digit found in string

Stack backtrace:
   ...
   6: my_crate::parse_int::{{closure}}
             at ./src/main.rs:23:22
   ...
   8: my_crate::parse_int
             at ./src/main.rs:21:5
   9: my_crate::stack2
             at ./src/main.rs:16:5
  10: my_crate::stack1
             at ./src/main.rs:11:5
  11: my_crate::main
             at ./src/main.rs:2:36
   ...

```

この方法で、`MyError` を使ってカスタムエラーに簡単に変更でき、将来のコード変更に備えることができます。また、`anyhow`のエラー生成の利便性も維持されています。
【解決方法】ToppageController#index is missing a template for request formats: text/htmlタイトルとは？

Ruby on rails を学習中の方の参考にしてもらえたら嬉しいです。 アプリケーションを作成している時に出てくるエラーとその解決方法について掲載します。
少しでも参考にしていただけると幸いです。 今回はToppageController#index is missing a template for request formats: text/htmlというエラーの解決方法をお話しします。

![スクリーンショット 2023-05-21 6.05.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/63d3bf37-05d2-087d-0095-99c2beaaece6.png)



<h2>結論から</h2>
結論からお伝えすると、これはエディターの　 『htmlファイルの名前が間違っている』ということです。
indexとかhtmlとかが抜けているとこのエラーが出ます。しっかり見直すと解決できます

<h2>解決策と具体例</h2>

▼下の画像のようにindex.html.hamlというファイル名にしなければいけないところを、、、
![スクリーンショット 2023-05-21 7.45.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/80df7347-9ba3-fedb-73ae-4c9806bbee82.png)

NG
![スクリーンショット 2023-05-21 7.45.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/e8cf12da-d16d-243d-4282-d42049526313.png)


NG
![スクリーンショット 2023-05-21 7.46.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/bd95b2ba-2114-181d-1d93-0b2b3f4cc257.png)

このようになっていませんか？これではrailsがちゃんとファイルを読んでくれませんのでindex.html.hamlとかshow.html.hamlのように付けてあげる必要があります。


<h2>最後に</h2>

いかがでしたでしょうか？
他にも記事を発信していきますので、私の QiitaやTwitterをフォローしていただけると嬉しいです。
個別の質問もぜひ歓迎します。
私自身、初学者ではありますが、1歩先を行くものとして回答できたらと思います。
それでは。
【解決方法】ActiveRecord::Pending MigrationError　とは？


Ruby on rails を学習中の方の参考にしてもらえたら嬉しいです。
アプリケーションを作成している時に出てくるエラーとその解決方法について掲載します。
少しでも参考にしていただけると幸いです。　
今回は　ActiveRecord::Pending MigrationError　というエラーの解決方法をお話しします。

![スクリーンショット 2023-05-19 7.04.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/24e33a4f-8b3b-5874-6854-5c9c0dd9d7fa.png)

<h2>結論から</h2>
結論からお話しすると、作成したデータベース（db）をrails db:migrateでマイグレーションを完了していないために出ているエラーです。
なので　rails db:migrate　で完了してあげれば解決です。
そのプロセスについてみていきます。

<h2>解決策</h2>
▼このエラーを解決していきます

![スクリーンショット 2023-05-19 6.48.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/87b227ac-4752-2d7d-1b79-73532f4ad151.png)

▼下の画像の中に解決策が書かれています
![スクリーンショット 2023-05-19 6.52.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/cb796b71-953a-cecc-0482-2c3f3b243f68.png)

<h2>statsの確認</h2>

▼まず下の画像のように　　rails db:migrate:status　を行い、スタッツを確認します。
画像のようにdownならUPにします
![スクリーンショット 2023-05-21 5.50.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/3bc42341-bf0e-c1ff-4853-1e6adf9d8dcb.png)
▲この時にハマった事例を紹介します。

<h2>migratできないなら他に原因がある</h2>

▼単にrails db:migrate　を行っても以下のようなエラーが発生し、migrateが完了しませんでした。
まあ内容をちゃんと読んでいけば全て書いてありますが、どうゆう内容かというと『articlesはdeviseのテーブルに依存関係がある』ので、deviseを先にUPにしてあげないとうまくいきません。なので作成日時をいじります

![スクリーンショット 2023-05-19 7.08.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/5d349f6c-4d31-f8d1-d58b-c714e4c2bbbb.png)


▼vscodeでdbのこの画面から名前の変更をしてあげます。上の画像と見比べるとdeviseの数字が変わっているのが分かります。
![スクリーンショット 2023-05-21 5.53.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/3131920f-fd66-420f-58e6-b0096086a866.png)



▼その後　rails db:migrate　を実行してあげると・・・
![スクリーンショット 2023-05-21 5.54.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/2d3eb7f3-579a-f481-048e-ec4d6b958bcd.png)













▼下の画像のようにちゃんと表示ができるようになりました。
![スクリーンショット 2023-05-21 6.12.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356902/bf0cf19b-0a19-a6dc-60dc-f0a6126b733e.png)


いかがでしたでしょうか？
他にも記事を発信していきますので、私の QiitaやTwitterをフォローしていただけると嬉しいです。
個別の質問もぜひ歓迎します。
私自身、初学者ではありますが、1歩先を行くものとして回答できたらと思います。
それでは。
Rust: anyhowを使ってビルトインエラーにバックトレース情報を付加する方法

この記事では、Rustのビルトインエラーにバックトレース情報を付加する方法を解説します。ここでは、`anyhow` クレートを使用してその問題を解決する方法について説明します。

## ビルトインエラーの問題点

Rustのビルトインエラーは便利ですが、「デフォルトではバックトレース情報が付加されていません」という問題点があります。これにより、エラーの原因を特定するのが困難になる場合があります。例えば、次のようなコードがあります。

```rust
use std::num::ParseIntError;

fn main() {
    let err: Result<(), ParseIntError> = stack1();
    eprintln!("{err:?}");
}

fn stack1() -> Result<(), ParseIntError> {
    stack2()?;
    Ok(())
}

fn stack2() -> Result<(), ParseIntError> {
    parse_int()?;
    Ok(())
}

fn parse_int() -> Result<i32, ParseIntError> {
    "invalid".parse::<i32>()
}

```

このコードを実行すると、エラーメッセージが次のように表示されます。

```
Err(ParseIntError { kind: InvalidDigit })
```

この結果から、エラーが `ParseIntError` であることはわかりますが、どの関数で問題が発生したのかは明らかになりません。

## 解決策: anyhowクレートを使用する

エラーが発生したスタックフレーム情報を含むバックトレースがあれば、開発者はエラーの原因を特定しやすくなります。

`anyhow` クレートは、エラー処理を簡単にするためのライブラリで、バックトレース情報を付加する機能も含まれています。以下のステップに従って、上記の問題を解決していきます。

### ステップ1: 依存関係を追加する

`Cargo.toml` に以下の依存関係を追加します。

```toml
[dependencies]
anyhow = { version = "1.0.70", features = ["backtrace", "std"] }
```

anyhowの `backtrace` と `std` のfeaturesを有効にすることで、バックトレース情報をサポートし、エラーハンドリングで標準エラーから`anyhow::error:Error`への変換も手軽に扱えるようになります。


### ステップ2: コードにあてはめる

以下のコードスニペットは、`anyhow` を使用してバックトレースを含むエラーを生成する方法を示しています。

```rust
fn main() {
    let err: Result<(), anyhow::Error> = stack1();
    eprintln!("{:#?}", err);
}

fn stack1() -> Result<(), anyhow::Error> {
    stack2()?;
    Ok(())
}

fn stack2() -> Result<(), anyhow::Error> {
    parse_int()?;
    Ok(())
}

fn parse_int() -> Result<i32, anyhow::Error> {
    "invalid".parse::<i32>().map_err(|e| e.into())
}
```

ライブラリエラーを返す可能性がある関数の呼び出しは、`?`でプロパゲーションする前に `into()` を使って `anyhow::Error` に変換することで、バックトレース情報が適切に付加されます。

### ステップ3: バックトレースを表示する

バックトレースを表示するには、`RUST_BACKTRACE` 環境変数を1に設定してプログラムを実行します。これにより、バックトレース情報が有効になります。

```sh
RUST_BACKTRACE=1 cargo run
```

これにより、以下のようなバックトレースが表示されます。

```
Err(invalid digit found in string

Stack backtrace:
    ...
   8: parse_int
             at ./src/main.rs:20:5
   9: stack2
             at ./src/main.rs:12:5
  10: stack1
             at ./src/main.rs:7:5
  11: main
             at ./src/main.rs:2:42
    ...
```

この結果から、エラーが `parse_int` 関数で発生したことがわかります。また、`stack1` と `stack2` の関数もバックトレースに表示されています。

## まとめ

この記事では、`anyhow` を使って Rust のビルトインエラーにバックトレース情報を付加する方法を紹介しました。これにより、開発者がエラーの原因を特定しやすくなり、デバッグが容易になります。

## 関連

https://qiita.com/suin/items/4d8b47f84fddfc3d168f
【Tips】DBUnitで自動連番になっているカラムに値を設定する方法

## はじめに


## 想定状況
以下のようなデータを投入することを想定しています。
`id`は自動採番になっているカラムとします。
```test.csv
id,name,age
1,bob,26
2.alice,24,
```
投入しようとすると、以下のようなエラーが出てきました。
```
Cannot insert explicit value for identity column in table 'table_name when IDENTITY_INSERT is set to OFF.
```

## 解決策
DbUnitの[FAQ](https://www.dbunit.org/faq.html#identity)に対処方が記載されていました。
>Can I use DbUnit with IDENTITY or auto-increment columns?
>>Many RDBMSes allow IDENTITY and auto-increment columns to be implicitly overwritten with client values. DbUnit can be used with these RDBMS natively. Some databases, like MS SQL Server and Sybase, need to explicitly activate client values writing. The way to activate this feature is vendor-specific.
DbUnit provides this functionality for MS SQL Server with the InsertIdentityOperation class.

`InsertIdentityOperation class`を使えば良いみたいです。

データ投入時の操作を以下のようにします。
```Test.java
new InsertIndentityOperation(DatabaseOperation.CLEAN_INSERT).execute(connection,dataSet); 
```


## 参考文献
- [DbUnit Frequently Asked Question](https://www.dbunit.org/faq.html#identity)