OmniAICreator/Qiita-1.07M huggingface dataset:
"required condition is false: format.sampleRate == hwFormat.sampleRate"エラー解消


# はじめに
レコーダーアプリを作成にあたって
```
Thread 1: "required condition is false: format.sampleRate == hwFormat.sampleRate"
```
というエラーにかなり悩まされてとりあえず解決したのでメモ

ググっても5件しかヒットしないw
![スクリーンショット 2023-05-27 17.09.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/6f833c28-59de-3e8b-c789-b3d140243b4e.png)


GitHubのissue等も調べ､話題してるとこはあったのですが根本的な解決方法を見つけられなかった

# デバイスごとにマイクのサンプルレートが違う
録音するためにサンプルレートを設定するのですがiPhone8だと44100、iPhone12miniは48000、iPadmini6は48000のようにデバイスごとにマイクのサンプルレートが異なってきます。

新しいデバイスは48000になってそうですが情報をみつけられませんでした（知ってる方いたら教えてください）
全てのデバイスを揃えるのは無理だし、当てずっほうでデバイスごとに振り分けるコードを書くことになるので半年間くらい放置してました。

# 解決方法
ChatGPT4に相談してみたらヒントを得て解決しました！！

```swift
import AVFoundation
let engine = AVAudioEngine()
let inputNode = engine.inputNode
let inputFormat = inputNode.outputFormat(forBus: 0)
let format = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: inputFormat.sampleRate, channels: inputFormat.channelCount, interleaved: true)
```
こうするとデバイスのマイクの現在のサンプルレートを取得できるようです。

https://developer.apple.com/documentation/avfaudio/avaudioformat/1387814-samplerate


# 終わりに
間違っている点などありましたらご指摘いただけると幸いです！
ランダムでエフェクトがかかるレコーダーアプリを作りました！！

https://t.co/1eVzZaFm91

興味あったら使ってみてください
Chrome でProxy設定するときに loopback/localhost/127.0.0.1 がProxy通ってくれない問題を解決

Chrome で HTTP Proxy (BurpSuiteなど) を設定して、ローカルで建てたサーバでいろいろ実験しようとすると、localhost や 127.0.0.1 宛が proxy を通ってくれずしょんぼり顔になります。(´・ω・`)

これは chrome 自身が proxy の bypass list を持っていて、その中に loopback 系(localhost/127.0.0.1)が含まれていることが原因です。

この bypass をさらに回避(bypass) することが可能で、bypass リストがあればそこに `<-loopback>` を加えます。
自分は Proxy 切り替えに [SwitchyOmega](https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif) を使っていますが、SwitchyOmega の proxy profile の Bypass List に `<-loopback>` を加えることで、無事 localhost や 127.0.0.1 宛も burp を通るようになりました。(2023年5月時点の確認状況)

**2025年5月追記**
SwitchyOmegaですが、2025年5月時点で「この拡張機能は、Chrome 拡張機能のベスト プラクティスに沿わないため、ご利用いただけなくなりました。」というメッセージが表示され、インストールできなくなっています。
そのため2025年5月時点では仕事/プライベート双方で「[FoxyProxy Basic](https://chromewebstore.google.com/detail/foxyproxy-basic/dookpfaalaaappcdneeahomimbllocnb)」を使っており、同じような bypass リストがありました。
「オプション」タブ→「グローバル除外」リストに `<-loopback>` を登録することで、FoxyProxy Basic でも loopback 宛がproxyを通るようになります。
（無印版の [FoxyProxy](https://chromewebstore.google.com/detail/foxyproxy/gcknhkkoolaabfmlnjonogaaifnjlfnp?hl=ja) でも同様と思われます）

参考資料:

- https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md#bypass-rule_subtract-implicit-rules
- `A note about Chrome and proxying requests to localhost | Whitesmith`
  - https://www.whitesmith.co/blog/a-note-about-chrome-and-proxying-requests-to-localhost/
- `How to avoid google chrome proxy bypass for localhost? - Super User`
  - https://superuser.com/questions/1418848/how-to-avoid-google-chrome-proxy-bypass-for-localhost

自分は Chrome + FoxyProxy Basic(かつては SwitchyOmega) でしたが、他の設定方法でも似たりよったりで bypass list があると思います。そこに `<-loopback>` をいれれば同様の効果が得られると思いますので、同じ悩みを抱えている方はぜひ一度お試しください。

それでは皆様、たのしい Proxy 生活を enjoy してください。
振り返り分析をしようという流れになったときに

# 弊社でも振り返り分析をしようという流れになったのでメモ

振り返り分析手法を見ていて、「適材適所で使うといいよ」と言われているものの、そもそも難易度が違うような気がしたのでメモを残します。

***

# レベル別振り返り分析

| Lv | 手法 | 説明 |
|:-:|:-:|:-|
| 5  | 分析+A  | PDCA/SDCA/OODAなど、分析手法に行動を伴わせる。改善内容や標準それ自体の水準を、分析と行動の繰り返しにより向上させる  |
| 4  | KPT分析  | Keep、Problem、Tryにより、継続すべきことや挑戦すべきことといった「べき論」を押さえることで改善につなげる  |
| 3  | YWT分析  | Yatta→Wakatta→Tsugi-Yaruの順番で振り返り、改善項目をストーリー立てて作り上げる  |
| 2  | FDL分析  | Fun、Done、Learnへの配置により、実績に加えて気づき事項やモチベーションを確認する  |
| 1  | Done分析  | やったことを列挙し、やるべきだったことと比較できる状態にする  |
| 0  | パニック  | 分析できない。自分たちがやったことを振り返ることができない  |

***

# おわりに：ハレーションは避ける

会議で「僕たちはまだレベル1(0)の状態ですよね」と不用意に言ってハレーションを起こさないようにしましょう
RPA（Uipath，PowerAutomate）とプログラミングの組み合わせ

現場で作成したツールで試した組み合わせから、それぞれの組み合わせの特徴を簡易的にまとめてみました。
（※他の組み合わせも試し次第、随時更新していきます）

・RPA x Excel VBA
Excelファイルのの編集は、RPAで処理するよりもExcel VBAで処理した方が早い。
StudioXやPowerAutomateのアクションでは部分的にしか行えないExcelの操作も、VBAであれば操作することが可能です。

・RPA x PowerShell
背景として、100万行を超えるcsvファイルの編集のためにPowerShellと組み合わせました。
条件抽出とCSVファイルの編集も可能です。RPAで処理するよりも圧倒的に早いです。

・RPA x VBS
csvファイルの編集のため試した組み合わせです。
100万行のCSVファイルでの処理時間はPowerShellとの組み合わせの方が早いです。
たぶん、フォルダを編集するとか、ファイルを作成するとかは、もしかしたらVBSの方が早いのではないかと考える。CSVファイルの編集以外の処理も今後試してみたいです。

今後も試した組み合わせを随時あげていきます！
Python 開発環境 for Visual Studio Code

# Python 開発環境 for Visual Studio Code

Visual Studio Code には公式で Python 開発環境のプロファイルテンプレートが用意されています。Python 以外のプロファイルテンプレートも用意されており、詳しくは[公式サイト](https://code.visualstudio.com/docs/editor/profiles)を確認してください。本記事では プロファイルテンプレートを用いて Python 開発環境を構築する手順を紹介します。Python プロファイルには Python 開発に適した環境（拡張機能や設定）が用意されています。

## プロファイルの作成

新しいプロファイルを作成するには以下の順番でメニューを選択します。
**ファイル** > **ユーザー設定** > **プロファイル** > **プロファイルの作成**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33079/2f851d5c-2417-f619-0dbb-d05d4316f031.png)
プロファイルテンプレートの中から **Python** を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33079/f655afb5-34b9-10bf-3111-a47c9841b88c.png)
**プロファイルを作成する** ボタンをクリックし、新しいプロファイルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33079/46885d51-b6fa-dd9f-0a8b-cb6538b2a71d.png)

## プロファイルの切り替え

プロファイルを切り替えるには以下の順番でメニューを選択します。
**ファイル** > **ユーザー設定** > **プロファイル** > **Python**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33079/89ec6de2-9f74-62a4-5989-5eed1444914d.png)

## その他の設定

Visual Studio Code のターミナルに **PowerShell** を使用した場合、Python 公式の仮想環境 venv でエラーが発生するため、**コマンドプロンプト** を Visual Studio Code のターミナルに設定しています。

```json
"terminal.integrated.defaultProfile.windows": "Command Prompt"
```

## Python 開発環境のセットアップ

Python 開発環境のセットアップは、[こちらの記事](https://qiita.com/naoyoshinori/items/b551b414574c00b22ec7)を参照してください。

## 参考

[Profiles in Visual Studio Code](https://code.visualstudio.com/docs/editor/profiles)
PHPでの日付取得処理

ここでは色々な日付を文字列で取得する方法を関数別に分けて記載してます

# DateTimeを使用
   - 今日を文字列(yyyy-mm-dd)で取得
       ```
       $date = new DateTime('now');
       echo $date->format('Y-m-d');
       ```
    
   - 昨日を文字列(yyyy-mm-dd)で取得
       ```
       $date = new DateTime('-1 day');
       echo $date->format('Y-m-d');
       ```
    
   - 今日の月末の文字列(yyyy-mm-dd)で取得
       ```
       $date = new DateTime('now');
       echo $date->format('Y-m-t');
       ```
       ```
       $date = new DateTime('last day of this month');
       echo $date->format('Y-m-d');
       ```
    
   - yyyy-mm-ddの文字列から対象日の月初を取得
       ```
       $target_date = '2023-05-10';
       $date = new DateTime($target_date);
       echo $date->format('Y-m-01');
       ```
    
   - yyyy-mm-ddの文字列から対象日の月末を取得
       ```
       $target_date = '2023-05-10';
       $date = new DateTime($target_date);
       echo $date->format('Y-m-t');
       ```

# strtotimeを使用
   - 今日を文字列(yyyy-mm-dd)で取得
       ```
       echo date('Y-m-d', strtotime('now'));
       ```

   - 昨日を文字列(yyyy-mm-dd)で取得
       ```
       echo date('Y-m-d', strtotime('-1 day', time()));
       ```
 
   - 今日の月末の文字列(yyyy-mm-dd)で取得
       ```
       echo date('Y-m-t', strtotime('now'));
       ```
       ```
       echo date('Y-m-d', strtotime('last day of now'));
       ```
  
   - yyyy-mm-ddの文字列から対象日の前日を取得
       ```
       $target_date = '2023-05-10';
       echo date('Y-m-d', strtotime($target_date . '-1 day'));
       ```
       ```
       $target_date = '2023-05-10';
       echo date('Y-m-d', strtotime('-1 day', strtotime($target_date)));
       ```
 
   - yyyy-mm-ddの文字列から対象日の月初を取得
       ```
       $target_date = '2023-05-10';
       echo date('Y-m-01', strtotime($target_date));
       ```
       ```
       $target_date = '2023-05-10';
       echo date('Y-m-d', strtotime('first day of ' . $target_date));
       ```
 
   - yyyy-mm-ddの文字列から対象日の月末を取得
       ```
       $target_date = '2023-05-01';
       echo date('Y-m-t', strtotime($target_date));
       ```
       ```
       $target_date = '2023-05-01';
       echo date('Y-m-d', strtotime('last day of ' . $target_date));
       ```
Web API：リクエストしたデータが存在しないときのステータスコードは200?404?

### はじめに

特定のカテゴリの質問項目をとってくる場合
- GET /questions/category_id?=1 →カテゴリ1は存在する、質問項目は0件だった
- GET /questions/category_id?=5 →カテゴリ自体存在しない

この2つのリクエスト結果のステータスコードは？
**どちらも質問は存在しなかったので404**？という疑問からのスタートです。

### 結論
結果だけ知りたい人はこちら
> - GET /questions/category_id?=1 →カテゴリ=1は存在する、質問項目は0件だった

こちらはカテゴリ=1は存在するので、**リソースは存在している**ので、**200**を返す

> - GET /questions/category_id?=5 →カテゴリ自体存在しない

カテゴリ自体存在しない=**リソースが存在しない**ので**404**を返す



### ステータスコードのおさらい
※ステータスコード：ここではHTTPステータスコードのことを指しています

https://developer.mozilla.org/ja/docs/Web/HTTP/Status

↑引用すると、

>HTTPプロトコルにおいて通信の成否や処理状態を示すために使われるもの


ステータスコードを参照することで、処理状態やを把握し、表示の分岐を変更します
404でGoogleだとこういうやつよく見ますよね
![](https://storage.googleapis.com/zenn-user-upload/df7805dc3b0f-20230527.png)

ステータスコードの中で、タイトルにある200と400だけここで取り扱います。
成功レスポンス (200–299)の中で
> 200 OK
リクエストが成功したことを示します。成功が意味することは、 HTTP メソッドにより異なります。

https://developer.mozilla.org/ja/docs/Web/HTTP/Status/200


> 404 Not Found
サーバーがリクエストされたリソースを発見できないことを示します。

https://developer.mozilla.org/ja/docs/Web/HTTP/Status/404


単純に、リクエストしたデータがない＝404なのでは？となるかもしれないのですが
**リソース**がないというのがミソです。

### リソースとURI
https://learn.microsoft.com/ja-jp/azure/architecture/best-practices/api-design
↑から引用すると

> REST API は "リソース" を中心に設計します。リソースは、クライアントがアクセスできるあらゆる種類のオブジェクト、データ、またはサービスです。
リソースには "識別子" があります。識別子は、そのリソースを一意に識別する URI です。

（REST APIについて記載すると長くなってしまうので省略）

URIを使ってリソースにアクセスします。
冒頭の
> - GET /questions/category_id?=1 
> - GET /questions/category_id?=5

/questions/category_id?=** はURIの一部というわけです。

### 冒頭の疑問の答え
> - GET /questions/category_id?=1 →カテゴリ=1は存在する、質問項目は0件だった

こちらはカテゴリ=1は存在するので、
***リソースは存在している**ので、**200**を返す

- GET /questions/category_id?=5 →カテゴリ自体存在しない

カテゴリ自体存在しない=**リソースが存在しない**ので**404**を返す


### 自分なりの結論

200なのか404なのかは、リソースの存在有無で分岐させる
存在する場合：200
存在しない場合：404　だという結論がしっくりきました。


### 参考文献
https://developer.mozilla.org/ja/docs/Web/HTTP/Status
https://learn.microsoft.com/ja-jp/azure/architecture/best-practices/api-design
【Python】一つ上の階層のファイルのパスを取得する

# はじめに
Pythonを書く機会があり、実装に迷ったポイントがあったので記録しておきます。

# ディレクトリ構成
```
root
  ├ src
  │  └ example.py
  └ example.txt
```

# 実装
```python:example.py
import os

# 現在のスクリプトファイルのディレクトリを取得
current_dir = os.path.dirname(os.path.abspath(__file__))

# 1つ上の階層のディレクトリパスを取得
parent_dir = os.path.abspath(os.path.join(current_dir, os.pardir))

# 1つ上の階層にあるファイルのパスを作成
file_path = os.path.join(parent_dir, "example.txt")
```

# おわり
Pythonにはたくさんライブラリがあって便利ですね
【Python】大量ファイルを一括リネーム


# Introduction

頻繁にデータセットに大量のファイルを追加することがあり、ファイル名に統一感がなくないことが気になっていました。

使用する端末が異なることもあり、何かある度に使い捨てでコードを書くのが手間なため備忘録とします。

ファイル名が被るとリネームする手間が増えるのと、雑多なデータセットを見る際の抵抗感を減らすことが目的です。

処理自体は単純ですが他の記事を見ていると、バックアップせずに使って上書かれ、泣きを見そうなスクリプトが多いです。
コピペしても比較的安全に使用できるコードを紹介します。

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

## 環境

Ubuntu22.04
Python3.11.1

## 実装

先にソースコード全体を紹介します。

```python: rename.py
import os
import argparse
from glob import glob
import shutil

parser = argparse.ArgumentParser()
parser.add_argument("-i", "--input", type=str, default="input")
parser.add_argument("-o", "--output", type=str, default="output")
parser.add_argument("-n", "--name", type=str, required=True)
parser.add_argument("-e", "--extension", type=str, required=True)
args = parser.parse_args()

input_dir = args.input
output_dir = args.output
backup_dir = "backup"

os.makedirs(output_dir, exist_ok=True)
os.makedirs(backup_dir, exist_ok=True)

files = glob(f"{input_dir}/*")

for i, file in enumerate(files):
    rename_file = f"{output_dir}/{args.name}_{i}.{args.extension}"
    backup_file = f"{backup_dir}/{os.path.basename(file)}"
    while os.path.exists(rename_file):
        i += 1
        rename_file = f"{output_dir}/{args.name}_{i}.{args.extension}"
    shutil.copy2(file, backup_file)
    shutil.move(file, rename_file)
```

1. `./input`(又は`-i`で指定するディレクトリ)にファイルを格納。
1. コピペして以下のコマンドを実行。
   ```bash:
   python3 rename.py -n <ファイル名> -e <拡張子>
   ```
1. `./backup`にリネーム前のファイル、`./output`にリネーム後のファイルが格納されていることを確認。

## お試し

`./input`に画像を格納します。
フェアリーペンギンのデータセットを作る予定で追加を重ねた結果、統一感のないネーミングになってしまいました。(という設定です)

![Screenshot from 2023-05-27 12-15-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3292052/e7dcb684-a8b2-10a1-3523-366efca85ea5.png)

リネームのスクリプトを実行します。
ファイル名は`Fairy_<連番>.png`にします。
拡張子を指定するコードにした理由は統一感と、`jpg`では透過(アルファチャンネル)対応していないので`png`に変える必要性が出るためです。

```bash:
python3 rename.py -n Fairy -o png
```

`./output`を確認すると、`Fairy_<連番>.png`にリネームされています。
統一感が出ました。

![Screenshot from 2023-05-27 12-23-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3292052/2e7a7a52-54cb-97a6-c244-3e6c87946ea3.png)

## おまけ ワンライナーでリネーム

お試しで行ったような簡単なリネームならワンライナーでも可能です。

```bash:
ls *.png | awk 'BEGIN{ a=1 }{ printf "mv %s Fairy_%d.png\n", $0, a++ }' | sh
```

ただしワンライナーで`|`を挟んだ箇所は別個の処理となるため、他の処理が割り込む可能性を考慮してバックアップだけは取っておくことをおすすめします。

余談ですが、`awk`には`NR`という処理中の行番号を表すビルトイン変数があります。
連番に使えそうですが、あくまで`NR`の値は`ls`コマンドの出力行数なため行番号の重複でファイルが一部消えます。

**※シェルは下記書籍 1 冊読んだだけの門外漢のため、あくまで参考程度に。**

https://www.amazon.co.jp/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0Linux%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88-%E7%AC%AC2%E7%89%88-%E2%80%95Linux%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%80%81bash%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%80%81%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-Mokhtar-Ebrahim/dp/481440011X

## 最後に

最後まで閲覧頂きありがとうございました。
備忘録の側面もありますが、本記事がお役に立てば幸いです！

### 参考 URL

https://note.nkmk.me/python-os-rename-glob-format-basename-splitext/
【AWS】VPCピアリングとは

## 0.学習前のイメージ
名前（VPCピアリング）から推測すると「VPCとVPCを接続するサービス」のようなイメージ、、かな？

もう少し細分化して表現すると、ピア→ピアツーピア（P2P）→連携や通信を表している？
というようなイメージ


## 1-1.VPCピアリングとは
プライベートIPv4アドレスまたはIPv6アドレスを使用して2つのVPC間を相互接続すること。

## 1-2.VPCピアリングでできること
お客様とのVPC間や、他のAWSアカウント間のVPCとの間に作成できる。

## 2.VPCペアリングのメリット・デメリット

【メリット】
・データの転送が容易になる。
例えば、複数のAWSアカウントがある場合、これらのアカウント間で VPCをピアリングし、ファイル共有ネットワークを作成することが可能。
・VPCピアリング接続の確立に料金は発生しない。
・AZ内で維持されるVPCピアリング接続経由でのデータ転送はすべて無料。


【デメリット】
・リージョンが異なる間はVPCピアリングの作成・相互接続ができない。
・複数のAZとリージョンにまたがるVPCピアリング接続経由でのデータ転送には料金が発生する。

## 3.学習後のイメージ
「VPCとVPCを接続するサービス」の認識は外れていなかった。また、料金形態で「VPCピアリング接続の確立」と「AZ内で維持されるVPCピアリング接続経由でのデータ転送」に料金は発生しない点は良心的だと感じました。



## 4.まとめ
簡単に概要だけまとめてみましたが、まだまだ分からない点（便利さや作成方法など）が多々あるので自分で一度作成してみたいと思います。。。

各項目の内容についても、都度、調べながら更新していきますので、暖かい目で見ていただけると幸いです。

## 参考文献
ありがとうございました！
参考にさせていただきました🙇‍♂️


[QVPC ピア機能とは](https://docs.aws.amazon.com/ja_jp/vpc/latest/peering/what-is-vpc-peering.html)
[Amazon VPC Peeringの技術的考察と留意点](https://dev.classmethod.jp/articles/vpc-peering-restricts-and-considerations/)
匿名クラス

## 匿名クラスとは
新しくクラスを作成せずに、クラスの宣言と利用を同時に行うもの。

#### 使いどころ
抽象クラスやインタフェースは直接インスタンス化することができないので、実装クラスを作成する必要がある。
たった１度だけ、特定の抽象クラスやインタフェースを利用したい時でも、実装クラスを作成し続ければ定義クラスが多くなってしまう。たった１度使うためだけに、実装クラスを定義しインタンス化するのも少々面倒な作業。
匿名クラスを使えば、実装クラスを作成しなくても、抽象クラスやインタフェースのメソッドを使用することができる。

## 使い方
```java
new ◯◯() {
  匿名クラスの内容(メンバ)定義
}
```

**匿名クラスを使わない場合**
```java
public interface A{
  void do();
}

public B implements A{ //実装クラス
  public void do(){
    System.out.println("Hello World");
  }
}

public class Main{
  public static void main(String[] args){
    B b = new B(); //実装クラスのインスタンス作成
    b.do(); //実行
  }
}
```
**匿名クラスを使った場合**
```java
public interface A {
    void doSomething();
}

public class Main {
    public static void main(String[] args) {
        A a = new A() { // 匿名クラス作成
            public void doSomething() { // インタフェースのメソッドを実装
                System.out.println("匿名クラス");
            }
        };
        
        a.doSomething(); // メソッドの呼び出し
    }
}
```
変数を省略することも可能
```java
new A() {
    public void doSomething() {
        System.out.println("匿名クラス");
     }
}.doSomething();
```
新しくクラスを作成せずに、インタフェースのメソッドを実装することができました。
new Aとありますが、インタフェースをインスタンス化しようとしている訳ではありません。
Aというインタフェースを基に匿名クラスが作成されているのです。
Spring boot でテンプレートが表示されない謎のエラー

##### テンプレートファイルは正しいはずなのにエラーが出る

kindle unlimitedに加入したのでspring bootの勉強をしていました。

https://www.amazon.co.jp/Spring-Boot-2-%E5%85%A5%E9%96%80-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AE%9F%E6%BC%94%E3%81%BE%E3%81%A7-ebook/dp/B0893LQ5KY/ref=sr_1_11?adgrpid=117468126124&hvadid=655058904363&hvdev=c&hvqmt=b&hvtargid=kwd-331918583416&hydadcr=27294_14668748&jp-ad-ap=0&keywords=spring+boot+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80&qid=1685172933&sr=8-11

その中でファイルの構成・プログラムともに正しいはずなのにエラーが出てしまいました。。。


##### エラー内容

Error resolving template [hello], template might not exist or might not be accessible by any of the configured Template Resolvers

つまりはhello.htmlが存在しないよって言ってます。

存在しているんだけどな！！！！！


##### 解決方法

eclipseを再起動した後にもう一度コントローラファイルを実行
その後に shift + F5で　ブラウザのキャッシュクリア(chrome)


2023/5/27日追記
アプリケーション名.javaファイルを実行ではなく
コントローラ名.javaファイルを実行することでも上手くいきそう
PerlでHelloWorldプログラムを実装してみた

# 概要
PerlでHelloWorldプログラムを実装してみました。

# プログラム作成
ソースコードを以下の通り作成しました。
```hello.pl
print "Hello World!\n";
```

# プログラム実行
コマンドを以下の通り実行しました。
```
$ perl hello.pl 
Hello World!
```

# まとめ
何かの役に立てばと。
未経験のAWSクラウドプラクティショナー体験記

# はじめに
表題の通り、先日AWS認定クラウドプラクティショナーに合格しました。
超初学者のため何百時間とかけて学習し一発合格することが出来ました！
![スクリーンショット 0005-05-06 0.15.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/74813449-f77c-630b-be3e-ca35025f5b2d.png)
以下、受験時（前）に気になった点をいくつか挙げております。
WhisperAPIに関することも書いておりましたが先にこちらを投稿します。

やっとキリコが認めてくれてハンター試験会場にたどり着くことが出来ましたo(｀ω´ )o

# 試験前
・合格したら受験料50％オフか、1回目の受験で不合格でも無料で再受験が可能
のバウチャーがあり、悩んだ末に後者を選択しました。
・ピアソンでの住所登録
![スクリーンショット 0005-05-06 0.15.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/4d8a25b4-885b-e9bd-5574-921442b1c6f2.png)
-> 画像のように住所を入力しました。最初は行3を使用せずに記述したところ、
予約完了時に送信されるメールに記載される町名 番地が長く全て表示されておらず
「これだと受験すら出来ない…」と考え一旦予約をキャンセルし住所を入力し直しました。
画像のような入力で無事受験出来ました。

# 試験当日（テストセンター）
・本人確認書類：受付にて免許証とマイナンバーカードを提示しました。
-> AWSには「[セカンダリ ID は、ローマ字 (英語) の姓と名、署名が含まれているか、ローマ字 (英語) の姓と名、顔が確認できる最近の写真が含まれているあらゆる ID です。](https://aws.amazon.com/jp/certification/policies/during-testing/#:~:text=%E3%82%BB%E3%82%AB%E3%83%B3%E3%83%80%E3%83%AA%20ID%20%E3%81%AF%E3%80%81%E3%83%AD%E3%83%BC%E3%83%9E%E5%AD%97%20(%E8%8B%B1%E8%AA%9E)%20%E3%81%AE%E5%A7%93%E3%81%A8%E5%90%8D%E3%80%81%E7%BD%B2%E5%90%8D%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%80%81%E3%83%AD%E3%83%BC%E3%83%9E%E5%AD%97%20(%E8%8B%B1%E8%AA%9E)%20%E3%81%AE%E5%A7%93%E3%81%A8%E5%90%8D%E3%80%81%E9%A1%94%E3%81%8C%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B%E6%9C%80%E8%BF%91%E3%81%AE%E5%86%99%E7%9C%9F%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%82%E3%82%89%E3%82%86%E3%82%8B%20ID%20%E3%81%A7%E3%81%99%E3%80%82)」と
記載がありましたがピアソンでの受験に限り[日本国政府発行の顔写真付き本人確認書類](https://www.pearsonvue.co.jp/Test-takers/Tutorial/Identification-1S.aspx)との
ことで念の為クレジットカードとパスポートを持っていきましたが上記書類でOKでした。
・ローマ字での名前の記載
-> 名字と名前の一文字目は大文字でお願いします、と仰っておられていたような気がします
・マスクを外して写真撮影
・荷物はすべてロッカーへ！！アクセサリーや肩こり用磁気治療器、腕時計等々もダメです
・試験室内での上着の着用は△（金具が付いてあるものは脱ぐように言われていました）
-> 暖かい日でしたが試験会場は少しひんやりしていました
・服のポケットに何も入っていないか受付の方といっしょに確認

# 試験中
・試験室には本人確認書類1つ（選べます）、ロッカーキー、渡されるボードとペン2つのみ
-> 試験終了後、マイナンバーが隠れるスリーブの中をチェックしていたため、何かを挟んで
いる方は予め出しておきましょう（スリーブを外しておけばよかったと反省しています）。
・受付の方が指定されたPCにて撮影された顔写真の確認まで実行してくださいました
-> すぐに試験スタート、予約時間にはAWS受験者は当方しかいませんでした。
・試験時間を30分ほど残して試験終了。
全問解き終わる -> 確認する（🏳ボタンあります）-> アンケートに回答する -> 合否表示
「おめでとうございます。合格です！」（あやふやです）みたいな感じでした。
合格という文字を見たときは少し泣きそうになりました笑

30分早く離席したためドアを開けながら「もしかしてこれって途中離席になるのでは、、
いやでも試験終わったし合格は取り消されないか、、」とネテロ会長のようなことを考え
受付に行きました。大丈夫でした。借りたボードとペン2本を返却、
時間を記入し試験終了です（おうちに着くまでが試験です！）。

# 試験の感想
フラグボタンは大いに活用すべし！！
何問かUdemyの[【2023年版】この問題だけで合格可能！AWS 認定クラウドプラクティショナー 模擬試験問題集（6回分390問）](https://www.udemy.com/course/aws-4260/)が出ました。
・S3（Trusted Advisor）
・AWS Organizationsの一括請求
・Auto Scaling
・コンピューティングリソース（BatchやLightsail）
（みなさま評価コメントに3周くらいでと書いておられましたが5周はしました。
問題文と答えを覚えてしまうので無料の問題集サイトも何周もしました）
初見の問題もありました。質問文が「？？？」となることが多かったので随時英文表記に
変更し解き進めました。コスト管理が苦手なため何度も問題を解いたり壁に貼り付けたり
しましたがやはりコスト管理が一番が低かったです（試験後に試験結果の内訳が出ます）。
スコアパフォーマンスが全て「コンピテンシーを満たしている」でしたので、
そこは純粋に喜びたいと思います。

面接もそうですが何度経験していても受験は慣れないものですね。。
これまでの受験日当日のご飯や服装って何してたっけ。。となりました。

AWSに初めて触れたとき本当に感動してそのまま惹かれるように学習を始めましたが
それらが合格という形で表すことが出来て嬉しい限りです。

自身のサイトも立ち上げ中でこれまでの内容をまとめていきたいなと考えています。

これからもAWSを勉強し続けたいと思いますo(｀ω´ )o
ここまでお読みいただきありがとうございました。
「プログラマー脳」を読んだらコードが少し早く読めるようになったので感想書きます！


## この投稿は？

[プログラマー脳](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E8%84%B3-%EF%BD%9E%E5%84%AA%E3%82%8C%E3%81%9F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E8%AA%8D%E7%9F%A5%E7%A7%91%E5%AD%A6%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%8F%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81-Felienne-Hermans/dp/4798068535)を読んだら、ちょっとコード読むのが早くなった感覚があったので、なぜそう思ったのか考える投稿です。

Part1 「コードをより良く読むために」を読んだ段階で、効果がありそうなので文章化します！


## こんな人に読んでほしい(プログラマー脳を)
 - 他人が書いたソースコード読むのが苦手な人
 - ソースコードを読むと頭が痛くなる人
 - ソースコードは上から下に順々に読むものだと思っている人


## なぜ読もうと思ったのか？

> 長年プログラミング教育の研究に取り組んでいる著者が、最新の「認知科学」に基づいて、プログラミングの際のさまざまな作業や技術の取得を効率的に行うための方法を解説しています。
まずは、コードを書いたり読んだりするときに「プログラマーの脳」がどのように働くかという認知プロセスについて説明しています。なぜなら、作業が異なれば、利用する認知プロセスも異なり、使うべきテクニックも変わってくるからです。
認知プロセスの段階や相互作用について理解したところで、「コードを速く、深く読む」「コードを読みやすくする」「新しい言語を短時間で習得する」といったことについて、どの認知プロセスを活用しているのかを考えて、どのような方法を採るべきかなのかを具体例を挙げて説明しています。また、プログラミングそのものではありませんが、新しい開発者を迎え入れる際のオンボーディングプロセスについても、認知科学的な側面から掘り下げています。

※[プログラマー脳](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E8%84%B3-%EF%BD%9E%E5%84%AA%E3%82%8C%E3%81%9F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E8%AA%8D%E7%9F%A5%E7%A7%91%E5%AD%A6%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%8F%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81-Felienne-Hermans/dp/4798068535)から引用

ズバリ、本のキャッチコピーがとても興味深かったからですね！

プログラミング言語の書き方や設計に関する本は多く出版されていますが、「認知科学」に基づいてプログラミングの際のさまざまな作業を効率化するという観点で書かれている本はそんなにないと思うので思わず手に取ってしまいました。

## 感想書いている人の背景
 - 入社間もないので、初見で読むコードがたくさんある
 - 普段読書感想文を書かない
 - コード読むの苦手、読んでると眠くなってくる


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330768/1fd6c51f-7641-e633-b17f-235d73424cb9.png" width="300">



## 読んだ感想

もちろんGoodだったので、投稿しているのですが、どんなところが良いと思ったのかまとめます！

### コーディング中に脳が疲れてしまう要因について説明されている

みなさん、コーディングしている際にこうなったことありませんか？
「やべぇ、おら何やってるかわかんなくなってきたぞ！」

私はあります！

この本はそんなコーディング中の混乱に対して、混乱のタイプを分けを行います。
その後、コードを読み書きする際の**認知プロセス**を説明し、混乱がどのような認知プロセスを経て引き起こされるのか説明します。

私はこう変わりました。

「やべぇ、ソースコード内の知識不足が原因で、何書いているかわからなくなってきたぞ！長期記憶と呼ばれる認知プロセスが少ねぇからわからなくなっている！周りの長期記憶を持っている人にこの部分聞こう！！」

わからないなりに先に進めそうな気がします。希望が見えてきました！

### 認知科学を用いてコードをより良く読む方法がわかる

みなさん！こんな経験はありませんか？
「やべぇ、このコード何書いているのかわかんねぇぞ！ここは日本か？」

私はあります！

コードが下記のような状態のとき、どうしてもわからなくなってしまいます。
 - 馴染みのないコード(初見コード)
 - 複雑な仕様を実装しているコード(コード固有の複雑さがあるコード)
 - 複雑な書き方をしているコード（コードを書く人と読む人で知識のギャップがあるコード）

この本には、上記のようなコードを読む障害となっている例を認知科学をもとに読み解くテクニックが書かれています。

上記テクニックを使用して、コードをより良く読むことで、コードをより良く書くことができるでしょう。認知科学を用いてプログラミングへの向き合い方を変えることでより良い循環が生まれそうです。

可能性を感じますね！


## まとめ

まだ第1章しか読んでいないのですが、衝撃を受けたので読書感想文を投稿してみました。
第2章は「コードについて考える」というタイトルなので、考えます。

みなさんもぜひ、「プログラマー脳」読んでみてください。きっと読み終わった後は、冷静にコーディングできるはずです！
AWS認定クラウドプラクティショナーに合格した話

# 0章
***これは、クラウドからは程遠いエンジニアがクラウドエンジニアになるべく最初の一歩を踏み出した物語である。***

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">合格体験記を記載してみました。<br>AWS全く触ったことないエンジニアがクラウドエンジニアになるべく最初の一歩を踏み出した勇姿？を記してみました。<br>これからクラウドプラクティショナーを受験しようかと持っている方の参考になれば幸いです。<a href="https://t.co/l62f4itCeE">https://t.co/l62f4itCeE</a><a href="https://twitter.com/hashtag/AWS?src=hash&amp;ref_src=twsrc%5Etfw">#AWS</a></p>&mdash; LittleBear🐻 (@littlebear_6w6) <a href="https://twitter.com/littlebear_6w6/status/1662353762483339265?ref_src=twsrc%5Etfw">May 27, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# はじめに
私が、AWS認定クラウドプラクティショナーに合格するまでの軌跡を記した物語です。
私はシステムエンジンとして企業に所属しております。業務ではAWSを触ったことはほぼないですが、会社から取得するように指示がありそろそろ受けるかということで受けることにしてみました。

# 学習に使用した教材
- 山下光弘、海老原寛之著、「AWS認定資格試験テキスト　AWS認定 クラウドプラクティショナー」、SB クリエイティブ株式会社、2021年6月22日　初版 第14刷
- AWS Skill Builder、「AWS Cloud Practitioner Essentials (Japanese) (Na) 日本語実写版」

この２つの教材を使用して勉強しました。
１点目の書籍はAWS認定対策教材ではメジャーだと思います。著者はIT技術系研修会社のトレノケートでAWS認定インストラクターをされています。そういった意味で言っても信頼がおける内容になっていることは間違いないでしょう。
私がこの書籍を選んだ理由としては、以下の３点です。
1. 各分野で章が分かれており基礎知識が丁寧に仮説されていて理解しやすい
1. AWSの実際の画面キャプチャが充実していてイメージを持ちやすい
1. 章末に学習した基礎知識を確認する問題がある

初学者にとって基礎知識が整理されてまとまっているのはありがたいですが、それ以上に画面キャプチャが充実していてAWSを操作しなくてもイメージを持ちやすいのが一番うれしいですね。
正直、無料枠があると言え個人でAWSのアカウントを取得して学習するはちょっとハードルが高いかなと言う方は本書はおすすめです。
私も資格試験のために、AWSのアカウントを取得して学習するのはハードルが高いかなと思う派です:sweat_smile:。

２点目のAWS Skill Builderの「AWS Cloud Practitioner Essentials (Japanese) (Na) 日本語実写版」ですが公式が出しているだけあって充実した内容でした。
前述の本では取り上げていないサービスについても触れらているので、おすすめです。
公式で取り扱っているサービスの知識が試験範囲となるので、公式から出ているものはなるたけチェックするのが鉄則だと思います。
各セクションの最後の確認問題以外にも最後に30問くらいの仕上げ問題があるので、模擬試験的なつもり演習を行うことができます。

# 学習方法
AWSの知識がなかったので、「AWS認定資格試験テキスト　AWS認定 クラウドプラクティショナー」を読んで章末問題を解くというのを3周しました。
これだけもAWSの知識をつけることができると思いますが、公式で出ている「AWS Cloud Practitioner Essentials (Japanese) (Na) 日本語実写版」を視聴しました。
これにより復習と同時にAWSという企業が考える公式の考えを学ぶことができます。
この公式の考えが試験で役に立つかもしれません。
:point_up:実際、選択肢の微妙なニュアンスを感じ取って選択肢を絞るのに役立ちました。

# 試験
テストセンターで受験しました。
書籍にもSkill Builderにもこんな内容取り上げられていたか？と思う問題が半分くらい出て、「正直危ないぞ」と思ってました。
でも、最後に「合格」という文字が出たときは飛び上がるくらい嬉しく、ほっとしました:laughing:

ユーザーが使用する際の状況が仮定されて、どんなサービスを使用したら良いかという問題が多い印象です。
これから受験される方は、その観点を念頭に置いて学習していただければ良いのかなと思います。

# 最後に
簡単にですが、受験体験記を書いてみました。
これから受験する方の参考になれば、幸いです。

ちょっとしたら、上位試験に向けて始動するか考えます！
続編が出るかもしれません（笑）。
AWS CLI or CloudShellで使用したコマンド達

**コマンドは使わないと忘れるんだ.....だからまとめておくんだ**

# AWS CLIの設定方法

**[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html)**

##### AWS CLI の設定、確認
- IAMで発行できるアクセスキー、シークレットアクセスキー、及びリージョン、出力形式の設定が行えるコマンド
```
aws configure
```

##### AWS CLI のバージョン確認
```
aws --version
```

# CloudShellの注意点

CloudShellはAWS CLIを設定しなくてもIAMに準ずる権限でAWSコマンドが叩ける便利な機能です。
検索バーで検索するか、フッター部分のCloudShellを押下すれば起動可能です。
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638561/819aa9f0-6cfd-835c-8aa4-82f2d2c79b32.jpeg)
![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638561/d680fff0-aa21-5129-b956-4ff4fa2d82f2.jpeg)
東京リージョンで使うなら問題ないですが、現状**大阪リージョンではCloudShellは使えません。
大阪リージョンを使用する場合はAWS CLIを設定しましょう。**
![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638561/5f2d2dd2-7b92-7190-4d07-23f789cd6461.jpeg)
本文：
CloudShell is not available in the selected AWS Console region. CloudShell will run in Asia Pacific (Sydney) ap-southeast-2 and use the home directory in ap-southeast-2. To run commands on AWS resources in a different region, see Working in AWS Regions

訳：選択したAWS ConsoleのリージョンでCloudShellが利用できません。CloudShellはアジア太平洋（シドニー）ap-southeast-2で実行され、ap-southeast-2のホームディレクトリが使用されます。異なるリージョンのAWSリソースでコマンドを実行するには、「AWSリージョンでの作業」を参照してください。





# その他、AWS CLI or CloudShellで使用したコマンド


##### 特定のEC2インスタンスIDの情報を取得
```
aws ec2 describe-instances --instance-ids【 i-XXXXで始まるインスタンスID】
```

##### IAMロールの情報取得
```
aws iam get-role --role-name【IAMロール名】
```

##### IAMポリシーの情報取得
```
aws iam get-policy --policy-arn【IAMポリシーARN】
```

##### インスタンスプロファイルの一覧取得
```
aws iam list-instance-profiles | jq -r '.InstanceProfiles[] | [.Arn, .Roles[].RoleName] | @csv' | tee tmpRole.csv | cat
```

##### 任意のインスタンスプロファイル情報取得
```
aws iam get-instance-profile --instance-profile-name【インスタンスプロファイル名】
```

##### EBSの一覧情報取得
```
aws ec2 describe-volumes --query "Volumes[].[Attachments[0].InstanceId,AvailabilityZone,Encrypted,Size,State,VolumeId,Iops,VolumeType]" --output text
```

##### キーペアの確認コマンド
```
aws ec2 describe-key-pairs --key-name【キーペアの名前】
```

##### securityhubのARNの取得
```
aws securityhub get-enabled-standards
```

##### S3バケットの一覧表示
```
aws s3 ls
```

##### ローカルPCからS3へファイルアップロード
```
aws s3 cp {ローカルPCファイルパス} s3://{バケット名}/{パス}
```
- (例) WORKフォルダのsample01.txtをwork/Evidence/Testにアップロードしたい場合
```
aws s3 cp C:\WORK\sample01.txt s3://work/Evidence/Test/
```

##### S3からローカルPCへファイルコピー
```
aws s3 cp s3://{バケット名}/{パス} {ローカルPCファイルパス}
```
- (例) S3のWORKフォルダのsample01.txtをローカルPCへダウンロードしたい場合
```
aws s3 cp C:\WORK\sample01.txt s3://work/Evidence/Test/
```

# 参照したもの
**[AWS CLI Command Reference](https://docs.aws.amazon.com/cli/latest/index.html)**
**[AWS CLIでS3を操作するコマンド一覧](https://qiita.com/uhooi/items/48ef6ef2b34162988295)**
バイリニア補完を分かりやすく説明

本来の画素位置からずれた位置の値を求めたい時にその値を**補完**する．
その補完方法の１つにバイリニア補完がある．

赤い点の位置I(x,y)の値を導きたい時に，近傍4点の値（W,X,Y,Z）の値を使用して**ちょうどいい感じに**求める．以下の式で求めることができる．


~~~math

I(x,y) = (1-a_y) \times (1-a_x) \times W\\
+ a_y \times (1-a_x) \times X\\
+ (1-a_y) \times a_x \times Y\\
+ a_y \times a_x \times Z
~~~



![スクリーンショット 2023-05-27 15.21.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457775/3d7c136c-10e1-cc78-3d01-0179280dd23b.png)
GASで、Googleスプレッドシートに書かれた曜日・時間にメールを送る。

# 1. はじめに
　GAS でメールを送れるし、トリガーを時間指定にすれば、特定の時刻に送れる。しかし、それは、そうした操作ができる人だけだ。不慣れな人に「時間主導型でトリガーを設定して」と説明して、対応してもらえるとは思えない。
　そこで、シートに、曜日、時間、メールの内容を書き込むだけで良いようにしたい。

# 2. 方法
## 2.1 スプレッドシート
次のようなシートを作成する。この機能を利用したい人に編集許可を与える。
![Googleスプレッドシート画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253484/b5f28eda-d7a2-92ca-ac00-f0bfee996534.png)

## 2.2 GAS
入力した人が全角やスペースを無駄に含む文字列を入力しても大丈夫なようにした。[【GAS】全角英数字、スペースなどを半角に置換する](https://qiita.com/connect0459/items/3bba7b57b747868abb66)をありがたく使わせてもらう。
```javascript:
function sendEmails() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('シート1');

  var dataRange = sheet.getDataRange();
  var data = dataRange.getValues();

  var now = new Date();
  // 現在の曜日を数字で、時刻を分で取得
  var currentDayOfWeek = now.getDay(); 
  var currentTime = now.getHours() * 60 + now.getMinutes();

  let dayOfWeekNUM = {'日':0, '月':1, '火':2, '水':3, '木':4, '金':5, '土':6}

  // シートのデータを処理
  for (var i = 1; i < data.length; i++) {
    var row = data[i];
    var recipient   = convertCharacters(row[0]).trim();
    var dayOfWeekJP = row[1].trim();
    var sendTime    = row[2]*60; // 入力されいている時刻を分に変換
    var message     = row[3];

    // 送信する曜日と時刻に近い場合にメールを送信
    if (dayOfWeekNUM[dayOfWeekJP] === currentDayOfWeek) {
      var timeDiff = Math.abs(currentTime - sendTime);
      if (timeDiff <= 30) { // 30分以内で近い時刻とする
        MailApp.sendEmail(recipient, '自動送信メール(GASによる)', message);
        Logger.log("Done!")
      }
    }
  }
}

// 英数字を全角から半角に変換
// 次のページから取得
// 【GAS】全角英数字、スペースなどを半角に置換する
// https://qiita.com/connect0459/items/3bba7b57b747868abb66
function convertCharacters(original) {
  let converted = ""; // 空の変数
  const pattern = /[Ａ-Ｚａ-ｚ０-９]/; // 全角英数のパターンを用意
  for (let i = 0; i < original.length; i++) { // 受け取った文字列の数だけ繰り返し
    if (pattern.test(original[i])) { // 文字が全角英数のとき
      const half = String.fromCharCode(original[i].charCodeAt(0) - 65248); // 半角英数に変換
      converted += half;
    } else {
      converted += original[i];
    }
  }
  converted = converted.replace(/　/g, ' ').replace(/．/g, '.'); // gオプションで該当文字列をすべて置換
  // Logger.log(converted);
  return converted;
}
```
## 2.3 トリガー
| 設定項目 | 設定 |
|:-|-|
|実行する関数| sendEmails|
|イベントのソース|時間主導型|
|時間ベースのトリガータイプ|時間ベースのタイマー|
|時間の間隔を選択|1時間おき|
# 3 注意
運用を開始してみると、正時の5分前(X時55分)頃に実行されるようだ。それが保証されているわけではないので、場合によっては実行されないこともあるかもしれない。
kritaのビルド後のポータブル版バイナリ(インストーラ無し)と配布用のインストーラの作成方法

実際の作業した録画
https://youtu.be/f4VIF_NUFTI

前回の記事でkritaのWindowsローカル環境でのビルドで一応動作するアプリケーションの構築には成功しましたがこれだと毎回バッチファイルでコンパイラやkritaのインストールディレクトリをセットしないと一部dllなどの読み込みが出来なくてアプリを配布する際や日常使いする場合に不便です。
なので今回は単体で実行できるポータブル版と、通常の使用方法で手軽にデスクトップにショートカット作成なりアンインストールが簡単にできるインストーラ版の作成方法を記事にします。

手順は以下の通りです

kritaをビルド(前回の記事参照)

ポータブル版の作成

ポータブル版をもとにしてインストーラ作成

の流れになります。
Elmのレコードでのエラーが分かりづらいとき


# Debug.todoはundefinedのようなもの
```Elm
type alias Config =
    { hoge : Int
    , piyo : String
    }


config : Config
config =
    -- piyoが違うのでエラーになる
    { hoge = 5
    , piyo = 10
    }
```
下記のようにする。
```Elm
config : Config
config =
    -- エラーが消える
    { hoge = 5
    , piyo = Debug.todo "" -- 10
    }
```
レコードでエラーが起きたときに、どのフィールドでエラーが起きたのか分かりづらいなと思っていたのですが、Debug.todoを使えばよかったんですね。

# Debug.toStringで文字列にできる
```Elm
config : Config
config =
    { hoge = 5
    , piyo = "abc"
    }


view : Model -> Html Msg
view model =
    text <| Debug.toString config
```
Debug.toStringも何故か忘れていました。
「THE」で終わらない文字列を受理するDFAのコード(C++)

以下のサイトで勉強していると、「「THE」で終わらない文字列を受理するDFA」というテーマがあった。

https://www.geeksforgeeks.org/dfa-for-strings-not-ending-with-the/

そのDFAは以下のようになる（上記のサイトから引用しているが、小英文字も加える必要がある）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1693441/3e7ced9f-c5a1-aec6-f42f-3a70b9b57124.png)

それを再現するために紹介されていたコードが分かりにくかったので、自分で書き直した。

ただし、状態集合を{s0, s1, s2, s3}とし、初期状態はs0、受理状態を{s0, s1, s2}とした。
また、変数nextsには、遷移先の状態の番号が入る。
ex.) 遷移先がs2 ⇒ nexts = 2

```cpp
#include <iostream>
#include <string>
using namespace std;

int nexts = 0; // start state = 0

void s0(char c){
    if(c == 'T' || c == 't') nexts = 1;
    else nexts = 0;
}

void s1(char c){
    if(c == 'H' || c == 'h') nexts = 2;
    else if(c == 'T' || c == 't') nexts = 1;
    else nexts = 0;
}

void s2(char c){
    if(c == 'E' || c == 'e') nexts = 3;
    else if(c == 'T' || c == 't') nexts = 1;
    else nexts = 0;
}

void s3(char c){
    if(c == 'T' || c == 't') nexts = 0;
    else nexts = 3;
}

bool isAccepted(string str){
    for(int i = 0; i < (int)str.length(); i++){
        switch(nexts){
            case 0:
                s0(str[i]);
                break;
            case 1:
                s1(str[i]);
                break;
            case 2:
                s2(str[i]);
                break;
            case 3:
                s3(str[i]);
                break;
            default:
                cout << "The variable nexts should be an integer between 0 and 3." << endl;
                return false;
        }
    }
    return nexts != 3;
}

int main() {
    string str;
    cin >> str;
    if(isAccepted(str)) cout << "ACCEPTED" << endl;
    else cout << "REJECTED" << endl;
    return 0;
}
```
iterm2かっこいい画面にしたい

新しくPCを購入したのでせっかくだからターミナルの画面をカッコよくしたいと思い環境構築をしました。

# 今回作りたい画面
![スクリーンショット 2023-05-27 14.38.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712534/b0ddffa3-197a-7aba-f228-c566c6dcbb91.png)



## iterm2
- [iterm2ダウンロード](https://iterm2.com/)


## powerlevel10k

- [powerlevel10k](https://github.com/romkatv/powerlevel10k)
![スクリーンショット 2023-05-27 14.41.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712534/34f3b3d0-5067-e3e7-f483-44b204fa5a94.png)

## oh my zsh
- [oh my zshインストール](https://ohmyz.sh/)

## 手順
oh-my-zshをインストールする。

```
リポジトリをclone
% git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k

zshrcに設定書き込み 
% echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc

```
zshrcファイルに直接記述する場合
```
% vim ~/.zshrc
```
~/.zshrcに``source ~/powerlevel10k/powerlevel10k.zsh-theme``を記述
保存したら~/.zshrc

あとは、画面に従って設定していく。

## ミスった時の再設定
1. oh-my-zshを削除
```shell
sudo rm -r /Users/ユーザ名/.oh-my-zsh
```
2. powerlevel10kを削除
3. 再度インストール


その他の環境設定については
ブログの方に書かせていただきます。

更新次第、リンクを貼ります、
windows11でexcel2007

# 概要
windows11でexcel2007やってみた。

# 問題
activexコントロールのボタンが動かない。

# 対策
フォームコントロールのボタンに置き換える。

# 手順
- フォームコントロールのボタンを設置

- 新規作成をクリック
module1にコードができるので、sheetsを指定しなくちゃ。

- コードをコピペ
sheetsを指定

- テキストの編集でコマンド１を書き換え

以上。
Windowsの実務経験しかない医療系SEが、Linuxサーバを立ててPython製WEBサービスを公開してみた

私はとある地方都市で、人材派遣会社の正社員として働いています。
基本的には、客先病院に常駐し、その病院の電子カルテや業務システムの運用保守をしています。

WindowsのサーバやVisual basic6.0、FileMakerなどを保守する機会はあるのですが、
ゼロからシステム開発をした経験はありません。
2020年、コロナウイルスの蔓延により、自宅で過ごす時間が増えました。
そんななか、以前から興味を持っていたPythonを学習することにしました。

勉強を始めて数か月後、ようやくDjangoというPythonフレームワークを利用したWEBサービスが公開できました。

https://www.medicareless.info

![medicareless_page.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135571/3d370d43-0be8-482f-d3bb-422841bed788.jpeg)

おもに、病院や医療に関するインシデントやハッカー被害、不正問題などの海外ニュースを紹介するサイトです。（まだまだ細かい機能が実装できていませんが、メイン機能は動いているので、いちおう完成ということで汗） 

どうせ知識ゼロからPythonを触るのなら、いっそのこと載せるサーバやフレームワークなども未経験のものを試してみようと思い、最終的に、この図のような構成となりました。

![MedicarelessInfo概要図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135571/b504ee26-8f4b-5358-d43c-0786d2ccaebf.jpeg)

主な環境は、以下のとおり。
① 	Centos8　：　　　Conoha VPSのレンタルサーバ
② 	Python3.6.8　：　Centos8にインストール
③ 	Django3.0.8　：　PythonのWEBフレームワーク
  	SQLite　：　　　　Django搭載のデータベース言語
  	HTML　：　　　　　WEB用テキスト言語
  	CSS　：　　　　　スタイルシート
  	BootStrap4　：　 デザイン用フレームワーク
④ 	Lets Encrypt　：　SSL証明書サービス
⑤ 	uWSGI・Gunicorn　：　WEBサーバゲートウェイ
⑥ 	Nginx　：　　　　WEBサーバ
⑦ 	クライアント　：　マルチプラットフォーム対応
⑧ 	管理者PC　：　　　各種開発環境
⑨ 	Bitbucket　：　　　開発環境を本番環境へデプロイ

参考にした書籍です。

![20200926082623.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135571/fc4e5677-4c17-bc9e-1971-2fa8bc4cd75b.jpeg)
 
自習課題として始めたこのWEBサービス、デプロイにこぎつけるまでが本当に大変でした・・・。

これまでWindows ServerやVB、.Net関連の技術しか触っておらず、しかも既存パッケージの保守運用だから、ほとんどプログラミングを実務ですることがありませんでした（もちろんPythonは全く業務で触りません）。

Djangoフレームワークのエラーではまるのはもちろん、デプロイする前のNginxのエラーやGunicornのエラーなども相当に厄介で、それによって土日祝日がどれだけ潰れたかわかりません。

それでも、Linux系OSを経験できたこと、Pythonという未知のプログラミング言語を学び、ひとつの作品として公開するまでこぎつけたこと、NginxやGunicornなどのバックエンド、HTMLやCSS、BootstrapなどのフロントエンドなどのWEB技術の全体が俯瞰できたことは、自分にとって大きな収穫でした。

ただ、今の業務にすぐ活かせるかというと全くそんなことはなく、せいぜいコマンドプロンプトへの苦手意識が薄れたぐらいですが・・・。

ひとまず今回のWEBサービス公開ノウハウを糧に、また別のレンタルサーバを借りて、また新たなWEBサービスを作ってみたいと思います。今度はubunntluにしようか、Windows Serverにしようか、思案中です。
fail2banの設定とBanIPの定期報告設定

# なにこれ
久々にサクラのVPSを再セットアップしたので、いろいろやったので備忘録代わりに書いておく

OS
CentOS Stream 9
# まずはfail2banのインストール

CentOS9の場合インストール前にEPELのリポジトリを先に有効にしておく。
有効化の方法はほかのサイトでも記載があるので割愛。

### インストールコマンド
```
dnf install fail2ban fail2ban-systemd -y
```
インストールが終わったらjail.localファイルを作成していく

```
vi /etc/fail2ban/jail.local

今回はsshの監視を入れておく

[sshd]
enabled = true
bantime  = 6000　# 秒数指定
findtime  = 10　# 秒数指定
maxretry = 2 #試行回数

やらかしたやつを豚箱にブチ込んでおく設定

[recidive]
enabled  = true
bantime  = 604800　# 秒数指定
findtime = 86400　# 秒数指定
maxretry = 2　# 二回やらかしたら豚箱行
```
### 設定の有効化
```
fail2ban-client start
```
### 監視状況確認 (今回の肝)
```
fail2ban-client status sshd
```
### 自動起動設定
```
systemctl enable fail2ban
systemctl start fail2ban
```

# メールで定期的に報告できるようにしよう
結構放置がちにしてしまうので今回はメールで定期的に報告できるようにしておく。

ネットで探すとmailコマンドで外部のSMTPサーバで送信する例とかはあるが、
どうもCentOS8からはmailコマンドではなく、s-nailコマンドを使用して送信する必要がある。
なので、s-nailコマンドをインストールする。
### s-nailコマンドインストール
```
dnf install s-nail -y
```
インストールしたら、送信できるかテストをする。
今回はXREAのメールサーバを使用するが、この記事見てやってみようと考えている方は
自分が使おうとしているメールサーバの設定に置き換えてやってください

### 簡単な設定のメモ
```
コマンドの一例
echo "本文" | mail -s "件名" -S v15-compat=yes -S mta=smtp://test%40exmple.com:Password@s1008.xrea.com:587 -S from=fromAddress@exmple.com ToAddress@gmail.com
```

| コマンドとオプション | 説明 |
|:-:|:-:|
| echo "本文" | ここに本文を入れる |
| mail -s "件名" | 件名を入れる |
| -S v15-compat=yes | サーバによっては要る |
| -S mta=smtp://test%40exmple.com:Password@s1008.xrea.com:587 | SMTPサーバに関する設定。詳細については後述 |
| -S from=fromAddress@exmple.com | 送信元のアドレス |
| ToAddress@gmail.com | 送信先のアドレス。送信元アドレスの後ろに半角スペースをつけて記載する  |

## SMTPサーバに関する設定について
結構ややこしい部分があるためここについては詳細を記載する

### SMTP認証でメールアドレスを使用する場合とパスワードに記号が含む場合
認証周りの記載としては基本的に以下の書式
```
UserID:Password
```
ただし、UserIDの設定でメールアドレスを設定する必要がある場合は次のコマンドでエンコードする必要がある
```
echo 'urlcodec enc test@exmple.com' | s-nail -#
test%40exmple.com
```
エンコードというよりもエスケープに近いが、上のコマンドを実施することによりアットマークが、
該当するコードに置き換わる。
なお、パスワードに記号を含む場合も上記のコマンドを実施する必要がある。
その場合は「test@exmple.com」の部分をエンコードするパスワードに置き換える。

### 送信サーバとポートの指定について
送信サーバについてはサーバによってまちまちなので指定方法について書く
```
@送信サーバアドレス:ポート番号
```
送信サーバアドレスはIPアドレスでも問題ないと思われるが、ポート番号に関しては25番の指定より、
サブミッションポートの587にしておけば問題ないと思う。

基本的にわかりずらいのはSMTP認証の設定がわかりずらいので、ここでエンコードがいるって認識なら躓かないかも。

# 定期報告を行うシェル
放置をかけてしまうので、後からどこのIPアドレス帯かを確認したいのでメールのコマンドと
fail2banの確認コマンドで定期的にメールで報告するシェルを作成する。

```
banrepo.sh

# !/bin/bash

reportdate=`date +%Y/%m/%d`
repoetsshbandata=`fail2ban-client status sshd`

echo "$repoetsshbandata" | mail -s "fail2ban sshd BanIP Report Mail $reportdate " -S v15-compat=yes -S mta=smtp://test%40exmple.com:Password@s1008.xrea.com:587 -S from=fromAddress@exmple.com ToAddress@gmail.com
```

特に変な処理は入れてないがfail2ban-client status sshdの結果を本文に入れて送る、
ごくシンプルなシェルです。
送信先が複数ある場合は実行結果を一時ファイルに書き込んで送信するのもよし、
メールの送信コマンドが長すぎるのであればすべて変数にしてしまうのもいい。

# Cronに作ったシェルを設定
```
crontab -e
00 7 * * * /root/banrepo.sh
```
終わり

# 参考にしたサイト
[s-nailで外部SMTPサーバーを利用してメール送信](https://qiita.com/non_qii/items/37c292a1a1359906396c)
[キャンパーSEの備忘録 CentOSへFail2Banをインストール](https://shoboon.net/?p=286)
[それマグで！ さくっとメールを送るコマンド mailx(s-nail/bsd-mailx)](https://takuya-1st.hatenablog.jp/entry/2021/11/23/041931)
[ITSakura Linux cronでhello worldを表示するサンプル](https://itsakura.com/centos-cron-hello)
ストワで始めるLua 第八回 パッシブソナーのコード

動画はこちら

https://www.nicovideo.jp/watch/sm42269509

https://www.nicovideo.jp/watch/sm42269504


```lua:passive

--init
pi=math.pi
pi2=pi*2

behindAngle=math.rad(3) --Backward angle not visible.
echoAngle=math.rad(3) --Viewing angle of the echo.

function onTick()
	passiveData={} --Initialize

    --Sonar data input
	for i=0,15 do
		if input.getBool(i+1) then
            local x,y
			x=input.getNumber(i*2+1)*pi2
			y=input.getNumber(i*2+2)*pi2
			table.insert(passiveData,{bearing=x,elevation=y})
		end
	end
end

function onDraw()
    local w,h,cw,ch,radius
    --resolution
	w=screen.getWidth()
	h=screen.getHeight()
    --center
	cw=w/2
	ch=h/2
    --display sonars circle radius
	radius=h/2-3
    
    --drawing echo
    screen.setColor(0,255,0,128)
	for i=1,#passiveData do
        local bearing=passiveData[i].bearing
        if pi-behindAngle >= bearing and -pi+behindAngle <= bearing then
            local triAngleX1,triAngleY1,triAngleX2,triAngleY2
            triAngleX1=cw+radius*math.sin(bearing-echoAngle)
            triAngleY1=ch-radius*math.cos(bearing-echoAngle)
            triAngleX2=cw+radius*math.sin(bearing+echoAngle)
            triAngleY2=ch-radius*math.cos(bearing+echoAngle)
            screen.drawTriangleF(cw, ch, triAngleX1, triAngleY1, triAngleX2, triAngleY2)
        end
	end
    
    --drawing circle
    screen.setColor(0,255,0)
	screen.drawCircle(cw,ch,radius)
end
```
swiftの@objc private funcって何

Swiftは、Objective-Cとの互換性を維持するためにいくつかの特殊な機能を提供しています。この特殊な機能の一つが @objc 属性です。


`@objc` 属性は、SwiftコードをObjective-Cから利用可能にします。


これは、Objective-CのライブラリやフレームワークをSwiftで使用しているときや、Objective-CのコードからSwiftのコードを呼び出す必要があるときに便利です。

例えば、以下のSwift関数は、`@objc` 属性を使ってObjective-Cから呼び出し可能になります。

```swift
@objc func myFunction() {
    // 関数の実装
}
```

`private` はアクセス修飾子であり、それが付けられた関数や変数がその定義がされているスコープからしかアクセスできないことを示しています。これはデータ隠蔽やカプセル化の一部となり、クラスや構造体の内部詳細を隠蔽するために使用されます。

つまり、`@objc private func` はSwift関数がObjective-Cから呼び出し可能であり、かつその関数が定義されたスコープ内でのみアクセス可能であることを示しています。この特性は、Objective-Cのコードから直接呼び出せるSwiftのメソッドを制限するために有用です。
debian

linux-tools-5.10

# ユーザでリモートデスクトップ接続できるようにする
sudo apt install xrdp tigervnc-standalone-server
sudo systemctl enable xrdp

### 一般ユーザでリモートデスクトップ接続できない場合
rootでリモートデスクトップ接続→OK
一般ユーザでリモートデスクトップ接続→リモートデスクトップ画面がクローズされる。
→/var/log/xrdp.logに以下のメッセージが出力されている
Cannot read private key file /etc/xrdp/key.pem: Permission denied
→xrdpユーザをssl-certに追加する
sudo gpasswd -a xrdp ssl-cert
※ちなみにリモートログイン可能になった後、groupから外してもログイン可能だった（よくわからない）

### リモートデスクトップ接続で「カラーマネジメントされたデバイスを作成するには認証が必要です。」のメッセージが表示された場合（rootのパスワード入力して「認証する」で回避は可能）
→参考URL（未検証）
https://tech.nkhn37.net/ubuntu-xrdp-remove-dialog/
https://tarufu.info/ubuntu_xrdp_color_profile/

# キーボード設定（「'」が「:」になる）
### システムのキー配列設定
sudo dpkg-reconfigure keyboard-configuration
→Generic 101-key PC
→English (US)
→AltGrとかの設定は（こだわりなければ）すべてデフォルトで。
### X のキー配列設定
setxkbmap us
Pyenv仮想環境の作成

## pyenvの設定
### pyenvの入手
- zipファイルのダウンロード方法:
pyenv-winの公式GitHubリポジトリ: [pyenv-win](https://github.com/pyenv-win/pyenv-win)
ダウンロード: [pyenv-win.zip](https://github.com/pyenv-win/pyenv-win/archive/master.zip)
ダウンロードが完了したら、適当な場所にzipファイルを展開。
展開場所を以下としてみる。
C:\Users\%USERPROFILE%\.pyenv
```batchfile
.pyenv
├─.github
│  ├─ISSUE_TEMPLATE
│  ├─scripts
│  └─workflows
├─docs
├─pyenv-win
│  ├─bin
│  │  └─WiX
│  └─libexec
│      └─libs
└─tests
    └─bat_files
```

### 環境変数の設定

システム>バージョン情報>システムの詳細設定>環境変数>%USERPROFILE%のユーザー環境変数を変更する

`Path`に以下を追加
`C:\Users\%USERPROFILE%\.pyenv\pyenv-win\bin`
`C:\Users\%USERPROFILE%\.pyenv\pyenv-win\shims`

以下の変数を追加
`PYENV`: `C:\Users\%USERPROFILE%\.pyenv\pyenv-win\`
`PYENV_HOME`: `C:\Users\%USERPROFILE%\.pyenv\pyenv-win\`  
`PUENV_ROOT`: `C:\Users\%USERPROFILE%\.pyenv\pyenv-win\`


## pythonのイストール
pyenvでインストールできるpythonバージョン確認
```batchfile
pyenv install -l
```
pythonのインストール
```
pyenv install "バージョンNo"
% バージョン3.9.13の場合は以下
pyenv install 3.9.13
```
  

  
仮想環境を作りたいフォルダに移動し、pythonを立ち上げる
```
pyenv local "バージョンNo"
% バージョン3.9.13の場合は以下
pyenv local 3.9.13
```

仮想環境を作成
```
python -m venv "フォルダ名"
% フォルダ名 .envの場合は以下
python -m venv .\.venv
```

アクティベートする
```
フォルダ名\Scripts\activate
% フォルダ名 .envの場合は以下
.\.venv\Scripts\activate
```

ディアクティベート
```
deactivate
```
公設試験研究機関　デザイン部門

産業技術連携推進会議　ライフサイエンス部会　デザイン分科会
https://design-bm.shiga-irc.go.jp

公的試験研究機関に、デザイン部門がある機関と、様々な部門の中に一人または二人デザイン担当がいる組織がある。繊維、窯業、機械、電気、Webなど様々な分野で工業デザイン、生活デザイン担当がいるため、上記分科会に入っているのは50%未満であると推定している。下記、組織一覧は現在作成中で、そのうちの約１割。

自治体では、自治体職員ではなく、企業等に委託してデザインセンターを運営している場合がある。誰かその活動を十分に把握している人はいるのだろうか。

私は、産業技術連携推進会議に属する地方組織から６ヶ月間派遣され、中小企業大学校のデザイナ指導者養成コースで、公的試験研究機関の受講者のリーダとして活動した。　

次の機関の方々よりも、それ以外の組織の方も受講されていた。　

 ＜この記事は書きかけです。順次追記します。＞
# 組織一覧
地方独立行政法人　北海道立総合研究機構
https://www.hro.or.jp/list/industrial/research/iri/organization/center.html

地方独立行政法人青森県産業技術センター　弘前工業研究所　~~生活デザイン部~~
https://www.aomori-itc.or.jp/soshiki/kou_hirosaki/

岩手県工業技術センター
https://www2.pref.iwate.jp/~kiri/exam/kakou/index.html

栃木県産業技術センター
http://www.iri.pref.tochigi.lg.jp/

東京都　デザイン
https://www.sangyo-rodo.metro.tokyo.lg.jp/chushou/shoko/chizai/sien/

地方独立行政法人東京都立産業技術研究センター（上記URLではリンク切れ）
https://www.iri-tokyo.jp/site/gaiyo/soshiki.html

山梨県デザインセンター
https://www.pref.yamanashi.jp/yitc/design/index.html

石川県デザインセンター
https://design-ishikawa.jp

高岡市デザイン・工芸センター
http://suncenter.co.jp/takaoka/

富山県総合デザインセンター
https://toyamadesign.jp

京都市産業 技術研究所　 デザインチーム
http://tc-kyoto.or.jp/about/organization/design/

大阪府産業デザイン~~センター~~
https://www.obda.or.jp/jigyo/oidc.html

奈良県産業振興総合センター
https://www.pref.nara.jp/module/54107.htm#moduleid54107

宮崎県工業技術センター
　~~宮崎県工業技術センターにおける デザイン支援活動~~
https://www.iri.pref.miyazaki.jp/?page_id=97

一般財団法人 工芸財団
https://www.kougeizaidan.jp

# 参考資料
平成 30 年度 産業技術連携推進会議 ライフサイエンス部会
第 23 回デザイン分科会 議事録
https://regcol.aist.go.jp/file/kenkyukai/gldesign/1625807165279.pdf

公設試験研究機関　デザイン部門
https://researchmap.jp/blogs/blog_entries/view/78451/5d82b453f3988c6df053e49764b844e2?frame_id=407644

物理記事　上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff

数学関連記事１００
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

小川清最終講義、小川清最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.
# 文書履歴(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.