OmniAICreator/Qiita-1.07M huggingface dataset:
初学者が条件付き確率やベイズの学習時にひっかりやすいポイント整理【ベイズ・条件付き確率連載#0】

ベイズの学習を始ようと教科書やWebサイトを見てみるとだいたい、有名でキャッチーな話題から入りたがるためか、「条件付き確率は難しいぞ！」と初学者を怖がらせるためか、いきなりモンティ・ホール問題の紹介が始まったりするわけですが、初学者に初っ端からモンティ・ホール問題を解説したところであまり教訓がなく(答えが確かにそうなるという確認ができるだけで、自分で条件付き確率の考え方ができるようにならない)、ただ怖がらせる意味しかないと思っています。
無秩序に「条件付き確率はこの問題が難しい」「あの問題も難しい」と並び立てられても「なんだかよく分からなくて怖い」となるだけだと思いますが、引っかかってしまう問題は背後に何種類かの共通パターンが存在していまして、そのパターンを身につければそこまで難解なものではなくなります。


そこで「どのポイントで初学者は引っかかってしまうのか」をパターンごとに分類して、連載という形で解説して行こうと思います。
件のモンティ・ホール問題は第2回(今回は第0回)で解説しますが、第1回が最重要だと思います。
今回の「難しさ」はあくまでも学習上のものであり、実務上のものは扱いません(実務上どう難しいかは扱う対象と目的によるはずです)。
今回は、各回でどういう内容を論じる予定であるかの紹介です。
第0回と第1回はほぼ同時に公開しますが、それ以降は随時追加していきます。

### 連載内容
 -> 今ここ　初学者が条件付き確率やベイズの学習時にひっかりやすいポイント整理【ベイズ・条件付き確率連載#0】
・<a href="https://qiita.com/takumi-wada/items/16580df316ad0318ff93">条件反転の誤謬【ベイズ・条件付き確率連載#1】</a>
・「共通の結果」の固定【ベイズ・条件付き確率連載#2】
・事前分布・尤度・事後確率・周辺化【ベイズ・条件付き確率連載#3】
・サンプリングアルゴリズム【ベイズ・条件付き確率連載#4】
・前提条件不揃い問題【ベイズ・条件付き確率連載・おまけ回】

# 条件反転の誤謬
どの変数で条件付けられており、どの値を比較しようとしているのかが明確に理解できないとそもそも条件付き確率が理解できるようになりません。「サッカー部員の足が速い確率」と「足が速い人がサッカー部員の確率」を混同するという過ちです。有名な問題ですと「医療診断における偽陽性、偽陰性に関する問題」などが該当します。

https://qiita.com/takumi-wada/items/16580df316ad0318ff93
# 共通の結果を観測
2変数(X, Y)について、その2変数の「共通の結果」として現れてくる変数Zを固定して考えると着目していたX-Y間に従属性がもたらされる可能性があります。有名な問題ですと「車の燃料装置問題」があります。「モンティ・ホール問題」も実はここです。

# 事前分布・尤度・事後確率・周辺化
ベイズ統計の基本概念である事前分布・尤度・事後確率は条件付き確率についてきちんと理解していると(実務上ではなく概念的には)そこまで難しくありません。#1の「条件反転の誤謬」回で紹介した概念に照らし合わせてベイズの基本概念を説明します。また、周辺化についても単に計算方法についてのみならず、データ分析上、何を意味するのか、周辺化すると何が嬉しいのかという観点から説明します。

# サンプリングアルゴリズム
「ベイズと言ったらMCMC」のように連想ゲームかの如く名が挙がるMCMCなどのサンプリングアルゴリズム。個別のアルゴリズムの仔細よりもサンプリングとはなんなのか、なぜ必要なのか、何をしようとしているのかについてについて、初学者はきちんと理解する必要があると考えておりそのあたりを重点的に解説します。

# 前提条件不揃い問題
条件付き確率の計算問題などで初学者を困惑させがちな問題の一部がこのカテゴリに属しており、実際のデータ分析でも示唆的な問題ですが、基礎理論の学習上で遭遇することはあまりないので、おまけとして解説します。条件付き確率で同じ条件を形式的に与えていても、実際同じ条件を与えられていないという問題であり、実データ解析では頻繁に、(条件付き確率を明に使用していなくても暗に)関係してきます。シンプソンのパラドックスもここに該当します。

---
nodebrew → Volta に移行する手順 (node.js バージョン管理ツール)

プロジェクトにバージョンを固定できない [nodebrew](https://github.com/hokaccha/nodebrew) から、できる [Volta](https://volta.sh/) に移行した。その手順をメモしとく。簡単、スムースにいけば５分以内でできる。

## 1. nodebrew のアンインストール

1. グローバルにインストールしてるライブラリ名(nodemodules 内のディレクトリ名)をコピーしとく
2. 環境変数から nodebrew の PATH を削除
    - .zshrc から `export PATH="$HOME/.nodebrew/current/bin:$PATH"` を削除
    - 参考：[Nodebrew本体を削除する方法 | Qiita](https://qiita.com/tonkotsuboy_com/items/f5d17f0b9698554a7716)
3. [Node.jsやnpmをアンインストール | IMA WEBCREATION](https://ima-wc.jp/blog/1357) を参考にアンインストール
4. 1 のライブリをグローバルにインストール

## 2. Volta、node.js (npm 含む) のインストール

公式サイトの通りにインストール。Homebrew でのインストールは良くないという記事を見たのでやめといた

1. `curl https://get.volta.sh | bash` インストール
2. .zshrc 編集
    - 以下がファイル末尾に書き込まれている
    ```.zshrc
    export VOLTA_HOME="$HOME/.volta"
    export PATH="$VOLTA_HOME/bin:$PATH"
    ```
    - [fig](https://fig.io/) を導入してる場合は、末尾に書く必要のある記述があるので、Volta の設定をその上に来るように移動する
2. ターミナル再起動
3. `volta install node` node.js インストール
4. 確認：`node -v`, `npm -v`

### 使い方

[Node.jsのバージョン管理にVoltaを推したい | Zenn](https://zenn.dev/taichifukumoto/articles/how-to-use-volta)

> volta pinコマンドで、プロジェクトのバージョンを指定することでき、Volta の設定が記述されたpackage.jsonをチームで共有することで、全員の Node や npm、Yarn のバージョンを揃えることができる

* 安定版のインストール＆デフォルト設定
  `volta install node`
* 最新バージョンのインストール
  `volta install node@latest`
* 特定のバージョンのインストール
  `volta install node@18.17.1`
* Nodeのバージョンを固定 (package.jsonに保存)
  `volta pin node@18.17`
* npmのバージョンを固定 (package.jsonに保存)
  `volta pin npm@9.8.1`

## 3. エディタの設定も

エディタ(今回は Jetbrains 系) 設定で node.js の場所が外れているので、新しいパスをセット

## 感想

ほぼ全てのプロジェクトで node.js を使っているのでいじるのが怖くてなかなか移行に踏み出せなかったけど、いざやってみるとハマることなく一瞬でできた。情報提供してくださってる方々に感謝！🙏
なぁ、Amazon Athenaのクエリを実行したときにS3へ出力されるcsvとcsv.metadataって消していいん？？

# はじめに
ある日のこと、
「Amazon QuickSightを触ってみたいなぁ〜」
と思い、「[BIサービス Amazon QuickSight のセルフハンズオンキット日本語版を公開（随時更新）](https://aws.amazon.com/jp/blogs/news/amazon-quicksight-handson-202006/)」というブログにある「QuickSight Basicハンズオン編 (更新 2022/1/7)」というハンズオンをやってみました。

そのハンズオンの
「ハンズオン 4:大規模データを ATHENA 経由で可視化する」
という箇所でAthenaを触っていた際、Athenaのクエリの結果を出力するS3バケット(以下のスクショ参照)を設定しました。 

![Athena.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2109911/77663cdc-d91c-3871-1bf1-d906d7f5bd9b.png)

そのままハンズオンを進めていき、Athenaでクエリを実行すると、<font color="red">**csv**</font >と<font color="red">**csv.metadata**</font>という文字列が一番後ろについたファイルが設定したS3バケットに作成されておりました。

![suzuki-quicksight-handson_-_S3_bucket.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2109911/dc8c2644-8c94-b4e9-c253-d8397fe10860.png)

このファイルたち、Athenaを使い始めた最初はいいかもしれませんが、クエリをたくさん実行して次第に増えていった際にコストとして積み上がってくるのではないかと少し不安になりました。
（まぁS3のストレージコストなんて、たかが知れていますが...）

そこで、作成された csv と metadata.csv ファイルを削除したいと削除したいと思いました。
しかし実際のところ、「削除することによって何か支障が発生するの？？」という部分が不明だったため、今回調査/検証してみた次第となります。


# 結論
<font color="red">**Athenaのマネジメントコンソールで結果が表示できなくなりました。**</font >

![スクリーンショット_2022-12-30_18_15_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2109911/4f9073e5-059e-7b36-ec3d-41d776e36772.png)

なお、通常は以下のスクリーンショットのようにクエリの結果が表示されます。

![スクリーンショット_2022-12-30_18_16_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2109911/6e6c8559-44c2-75f9-b00c-87c4e89f4254.png)

# 調査内容
[Athenaの公式ドキュメント](https://docs.aws.amazon.com/athena/latest/ug/querying.html)を確認すると「QueryID.csv.metadata」の説明に以下のような記載があり、削除は推奨されていないことは分かります。
> DML and DDL query metadata files are saved in binary format and are not human readable. The file extension corresponds to the related query results file. Athena uses the metadata when reading query results using the GetQueryResults action. Although these files can be deleted, we do not recommend it because important information about the query is lost.

訳：
DML および DDL クエリ メタデータ ファイルはバイナリ形式で保存され、人間が判読することはできません。ファイル拡張子は、関連するクエリ結果ファイルに対応しています。
Athena は、GetQueryResultsアクションを使用してクエリ結果を読み取るときにメタデータを使用します。
これらのファイルは削除できますが、クエリに関する重要な情報が失われるため、お勧めしません。

GetQueryResultsアクションなので、クエリ結果を確認する際に支障が出るようです。

さらに調査をした結果、「[Amazon Athena 初心者向けハンズオンの資料およびQA公開](https://aws.typepad.com/sajp/2017/10/athena_online_handson_material_qa.html)」というブログ記事を発見し、そのQAの箇所に以下のような記載がありました。

> Q: 結果格納バケットに入っている *.csv.metadata のファイルは何ですか？
A: クエリの結果を Athena のマネジメントコンソール状で表示する際に必要となる，メタデータが含まれたファイルになります．こちらを削除すると，結果がマネジメントコンソール上で正しく表示できなくなりますのでご注意ください

実際に試した結果は、すでに結論で書いた通りですが、コンソールでクエリ結果を確認する際に裏でGetQueryResultsアクションが実行されているということを意味します。

# おわりに
削除したファイルと同じクエリを再度実行すると新たに csv と metadata.csv ファイルが作成されるので、あまり気にしすぎる必要もないのかなとも思います。
ただ、毎回クエリを実行している方がS3に保存しているより費用的に高くなると思うので、「クエリの実行履歴を見返そう」という予定がある方は削除しない方が良いかと思います。

ハンズオンをやっていて、ちょっと気になったので検証してみただけですが、もし同じことが気になった方がいた時の参考になればと思います。
2023/1/1主にITとかセキュリティの記事

自衛隊、民間企業をサイバー防護へ　機密情報の流出防止(12/31)
https://www.nikkei.com/article/DGXZQOUA21BO90R21C22A2000000/

ランサムウエアの暗号解除　日本警察の「国際通行手形」(12/31)
https://www.nikkei.com/article/DGXZQOCD289U50Y2A221C2000000/

ネットギアの無線Wi-Fiルータに重要な脆弱性、確認とアップデートを(12/31)
https://news.mynavi.jp/techplus/article/20221231-2550852/

Google Homeで盗聴が可能になる脆弱性の詳細情報が公開(12/31)
https://news.mynavi.jp/techplus/article/20221231-2550840/

分散型マルチチェーン暗号資産ウォレットのBitKeep、サイバー攻撃で秘密鍵漏洩(12/30)
https://news.mynavi.jp/techplus/article/20221230-2550125/

「地銀共同システム」のクラウド化　金融庁による再編誘発の思惑も(12/30)
https://news.mynavi.jp/techplus/article/20221230-2550269/

メールにExcelアドインのXLLファイルやPublisherファイルが付いていたら要注意(12/30)
https://news.mynavi.jp/techplus/article/20221230-2550138/

意外と大変。パートナーと円満な｢デジタル別れ｣をする方法…スマホの電話番号、ファミリー契約から位置情報まで(12/30)
https://www.businessinsider.jp/post-263489
[備忘録] [Python] azure-cliの基本的な使い方

# 環境

```
MacOS: 12.6
Python: 3.9.10
azure-cli==2.32.0
azure-cli-core==2.32.0
```

# 基本的なazコマンドの実行

例えば、`az vm show --resource-group QueryDemo --name TestVM`を実行したければこんな感じ

```az_cli.py
from azure.cli.core import get_default_cli
cli = get_default_cli()
res = cli.invoke(
    [
        "vm",
        "show",
        "--resource-group",
        "QueryDemo",
        "--name",
        "TestVM",
    ]
)
# 0: success
# 1: failure
if res != 0:
    print("ERROR!")
```

もちろん、リソースグループ名などは定数や環境変数としてセットし、参照することも可能
クエリ結果はコンソールにドバッと出力される

## azコマンドリファレンス

ここで調べたいazコマンドは網羅できるはず

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

# コンソール出力形式やプロパティのカスタマイズ

このページを見るのが早い

https://learn.microsoft.com/ja-jp/cli/azure/query-azure-cli?tabs=concepts%2Ccmd

https://learn.microsoft.com/ja-jp/cli/azure/format-output-azure-cli

# コンソール出力を変数に格納したい時

`cli.result.result`で取れる

`cli.invoke()`の戻り値で受け取れるって思うよね......
この場合の変数`res`に入ってるのは、先述の通り`0`: success、`1`: failure　なので注意

```py
from azure.cli.core import get_default_cli

cli = get_default_cli()
res = cli.invoke([...])
if cli.result.result:
    print(cli.result.result)
elif cli.result.error:
    print(cli.result.error)
```

参考

https://stackoverflow.com/a/65833287
VSCode のカーソルの色を変更する方法

# はじめに
カーサの色が文字の色に似ていると、現在のカーサがどこにあるか迷うことがある。
開発環境が変わったときのためにちょっとメモっておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/d9043125-f518-0653-0bab-61913e5e4d2b.png)


# 方法
`ctrl + shit + p`からUser Settingsを開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/bd8eac35-1b17-ed24-daac-6976f1e69053.png)


```json
    "workbench.colorCustomizations": {
        "editorCursor.foreground": "#15ff00",
        "terminalCursor.foreground": "#15ff00"
    },
```
これを追加
   
    

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/7d3f375e-dd3d-2670-88c8-2ddc2a4b7f44.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/fa6a5e3f-6e1a-4bf1-678c-0c12c9e41628.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/105a1d80-1dfe-39b2-f869-03af7ff8a6e4.png)

これでVSCodeとターミナルのカーサが黄緑色になった。言語、VSCodeのテーマにもよるが、デフォルトが文字と同じ色の白色ならかなり使いにくさを感じる。

# 参考

https://jaegeun.tistory.com/56#:~:text=setting.json%20%ED%8C%8C%EC%9D%BC%20%EC%95%84%EB%AC%B4%EB%8C%80%EB%82%98,%EC%9E%88%EB%8A%94%EA%B2%83%EC%9D%80%20%EB%8B%A4%EB%A5%BC%20%EC%88%98%20%EC%9E%88%EB%8B%A4.)&text=terminalCursor.foreground%20%EB%8A%94%20%ED%84%B0%EB%AF%B8%EB%84%90%EC%9D%98,%EB%B3%B5%EC%82%AC%ED%95%B4%EC%84%9C%20%EB%B6%99%EC%97%AC%EB%84%A3%EC%96%B4%EC%A3%BC%EC%9E%90
p5.js の WEBGLモードで Google Fonts の Webフォントを利用する（loadFont()を使って CDN から読み込む）

以下の記事で扱った内容とキーワード的には少し共通点がある、Google Fonts の Webフォントに関する記事です。

●【完走賞ゲット-1】p5.js Web Editor で Google Fonts の絵文字の Webフォントを利用する - Qiita
　https://qiita.com/youtoy/items/34920d8a49f45653d77a

ただし、今回の記事の内容は、上記の記事の内容とは違っているところがあります。
上記では、HTMLファイルで  Webフォントを読み込んでいましたが、この記事では、JavaScript の中で Webフォントを読み込むやり方になります。それに関して、この後に書いていきます。

## プログラム
それでは、まずは今回のテスト用に作ったプログラムを掲載します。
ここで JavaScript で Webフォントを読み込んでいますが、そこで利用しているのは `fonts.gstatic.com` に置かれた OpenTypeフォントです。

```javascript
let myFont;

function preload() {
  const url =
    "https://fonts.gstatic.com/ea/notosansjapanese/v6/NotoSansJP-Bold.otf";
  myFont = loadFont(url);
}

function setup() {
  createCanvas(400, 400, WEBGL);

  textFont(myFont);
  textSize(30);
}

function draw() {
  background(50);

  text("test", -50, 0);
}
```

上記を実行すると、WEBGLモードのキャンバスで、文字を表示することができました。
![文字の表示](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/434d0720-4a50-21bc-edfc-b2533fb8213d.png)

ちなみに、上記のような Webフォントの読み込みなどを行わず text() を利用しようとすると、WEBGLモードを利用している場合は `loadFont` や `textFont` を利用するようにという、以下のメッセージが出ます。
![エラー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d6fd707d-22fa-021c-513c-e9a24ff577f6.png)

OpenTypeフォントのファイルを自分で配置するやり方もありますが、オンラインで読み込めると楽で良いです。

## フォントの読み込み方の違い
過去の記事で Webフォントを読み込んだ時との違いについて、少し説明します。

過去の記事では、以下のように HTMLファイルの中で読み込みをしていました。
![過去の記事の事例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/8622e891-e061-c710-6f0a-6d2bc7e1a6d2.png)
また、ここで href属性に指定している URL もファイルを直接リンクするようなものにはなっていません。

なお、ここで href属性に指定している URL である `https://fonts.googleapis.com/css2?family=Noto+Color+Emoji&display=swap` に、ブラウザでアクセスしてみると、以下のような内容が読み込まれていることが分かります。
![URLを直接開いた場合](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5284b309-bb56-4054-09bc-42be7c6251a6.png)

## 参照した情報
今回の記事に書いた内容に関して、参照した記事を掲載します。

- [p5.jsのWEBGLモードにするとtext();が表示されない](https://teratail.com/questions/249066)
- [Noto Sans Japaneseを利用する(cdn利用) – Share-Snippet-Code](https://snippet.m-g-n.me/2017/02/28/88)
SSHエージェントフォワーディングして別のユーザーで鍵を使いたかったけどだめだった

## はじめに

明けましておめでとうございます。

SSHエージェントフォワーディングをして、接続先のサーバーでユーザーを切り替え、git cloneなどをしたかった。
結論、sudoでなら鍵を使えたが、切り替えたユーザーでは使えなかったので、記録として残しておく。（代わりにPersonal Access Tokenを使うことにした）

## やりたかったこと

```bash
# user1にSSH
$ ssh user1@192.168.0.0 -A

# user2に切り替え
$ whoami
user1
$ sudo -i -u user2

# user2でgit clone
$ whoami
user2
$ git clone git@github.com:ohakutsu/repository_name.git
```

## なぜ鍵を使えないのか

user1の`SSH_AUTH_SOCK`がuser2に引き継がれていない

```bash
$ whoami
user1
$ env | grep 'SSH_AUTH_SOCK'
SSH_AUTH_SOCK=/path/to/socket

# user2に切り替え
$ sudo -i -u user2
$ whoami
user2
$ env | grep 'SSH_AUTH_SOCK' # ない
```

`env_keep`を設定して`SSH_AUTH_SOCK`が引き継がれるようにしたが、

```bash
# 以下を追加
$ sudo visudo
Defaults env_keep += "SSH_AUTH_SOCK"
```

うまく動いていない。

```bash
$ sudo -i -u user2
$ whoami
user2

# 渡っていることを確認
$ env | grep 'SSH_AUTH_SOCK'
SSH_AUTH_SOCK=/path/to/socket

$ git clone git@github.com:ohakutsu/repository_name.git
Cloning into 'repository_name'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

ssh-agentに登録されている鍵を確認してみると、パーミッションに問題がありそう。

```bash
# user1
$ ssh-add -l
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

# user2
$ ssh-add -l
Error connecting to agent: Permission denied
```

見てみると、所有者がuser1になっているための様。

```bash
$ ls -la /tmp | grep 'ssh'
drwx------  2 user1      4096 Jan 1 00:00 ssh-XXXXXX
```

なので、以下のようにsudoでcloneなどはすることはできるが微妙な感じ。

```bash
$ whoami
user2
$ sudo git clone git@github.com:ohakutsu/repository_name.git
```

パーミッションを変えるのは怖いので諦めることにした（Personal Access Tokenを使うことにした）

## Refs

- [SSHエージェントフォワード後に他のユーザでgit cloneする(鍵を使う)ことに関する考察](https://blog.mosuke.tech/entry/2015/04/05/212518/)
- [SSHのエージェントフォワーディングを「sudo」の後でも引き継ぐ - ngyukiの日記](https://ngyuki.hatenablog.com/entry/20120508/p1)
- [ssh-agent を sudo 実行時にも有効にする - Qiita](https://qiita.com/aki77/items/f09434361d9d582edaeb)
【CakePHP】git cloneして開発環境構築

# 0. はじめに
大阪の受託開発エンジニアの、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です！
CakePHPプロジェクトを`git clone`して、`vendor`や`.env`,`app_local.php`ファイルを作って`bin/cake server`するまでのメモです！

## 0-1. 目次
> [1.環境構築](#1-環境構築)
> [2.初期設定](#2-初期設定)
> [Reference](#reference)

## 0-2. 前提条件
- Gitインストール済み
- GitHub登録済み

## 0-3. 開発環境
|key|value|
|:--:|:--:|
|OS|macOS|
|FW|CakePHP|
|バーション管理|Git/GitHub|
|パッケージ管理|Composer|

# 1. 環境構築
## 1-1. git clone
```terminal:local
$ mkdir cakephp
$ cd cakephp
$ git clone https://github.com/xxxxxxxxxxxxxxx/xxxx.git
```

## 1-2. vendor
```terminal:local
$ composer install
```

## 1-3. 動作確認
```terminal:local
$ bin/cake server
```

# 2. 初期設定
## 2-1. config
```terminal:local
$ cp .env.example .env
$ cp app_local.example.php app_local.php
```

```.env:config/.env
export APP_NAME="hoge"
export APP_DEFAULT_LOCALE="ja_JP"
export APP_DEFAULT_TIMEZONE="Asia/Tokyo"
export SECURITY_SALT="__SALT__" 
```

```php:config/bootstrap.php
if (!env('APP_NAME') && file_exists(CONFIG . '.env')) {
    $dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']);
    $dotenv->parse()
        ->putenv()
        ->toEnv()
        ->toServer();
}
```

```php:config/app_local.php
    'Datasources' => [
        'default' => [
            'host' => 'localhost',
            'username' => 'root',
            'password' => '',
            'database' => 'hoge',
            'url' => env('DATABASE_URL', null),
        ],
```

```php:config/app.php
'App' => [
    'encoding' => env('APP_ENCODING', 'UTF-8'),
    'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'),
    'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'Asia/Tokyo'),
],

'Datasources' => [
    'default' => [
        'timezone' => 'Asia/Tokyo',
        'quoteIdentifiers' => true,
    ],
],

```

## 2-2. migration
```terminal:local
$ bin/cake migrations migrate
$ bin/cake migrations seed
```

# Reference
https://qiita.com/ym_cat-neko/items/6f706bfa8e85c9dca68b

https://www.webopixel.net/cakephp/1612.html
[Biopython]GenBank形式ファイルの一部を切り出す

# 動機
GenBank形式ファイルからある遺伝子の部分だけを切り出したかったのだが、Biopythonでできることに気付いた。

# crop_genbank.py
https://github.com/satoshikawato/bio_small_scripts/blob/main/crop_genbank.py
## Requirements
- [Biopython](https://biopython.org/)
## Usage
```sh
$ ./crop_genbank.py
usage: crop_genbank.py [-h] -i INPUT --output FILE -s START -e END

Crop genbank file.

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT, --input INPUT
                        Genbank/DDBJ flatfile (required)
  --output FILE, -o FILE, --out FILE, --output FILE
                        output Genbank file
  -s START, --start START
                        start position
  -e END, --end END     end position
```

```sh
$ ./crop_genbank.py -i NC_003225.3.gb -s 199621 -e 230880 -o NC_003225_199621-230880.gb
```
- 単一エントリにしか対応していない今後修正する
- メタデータが消失するので今後修正する
- 始点または終点に被ったfeatureは消失する
【ルール説明】no-log-password

こちらの記事は [Ansible lint Advent Calendar 2022 カレンダー2](https://qiita.com/advent-calendar/2022/ansible-lint) 25日目の記事になります。

今回はルール [no-log-password](https://ansible-lint.readthedocs.io/rules/no-log-password/) について説明します。

### no-log-password

[no-log-password](https://ansible-lint.readthedocs.io/rules/no-log-password/) はパスワード等の秘匿情報が渡された時に秘匿情報が Ansible の実行ログに露出しないか検証します。[no-log-password](https://ansible-lint.readthedocs.io/rules/no-log-password/) は`opt-in`のため初期設定では有効になっていません。[no-log-password](https://ansible-lint.readthedocs.io/rules/no-log-password/) を適用する場合は設定ファイル等で有効にします。

```yaml
enable_list:
  - no-log-password
```

ほとんどの Ansible モジュールでは秘匿情報が実行ログに露出する事はありません。しかしが万が一を避けるために`no_log: true`にする方法も考えられます。

#### 問題のあるコード

```yaml
---
- name: Example playbook
  hosts: localhost
  tasks:
    - name: Log user passwords
      ansible.builtin.user:
        name: john_doe
        comment: John Doe
        uid: 1040
        group: admin
        password: "{{ item }}"
      with_items:
        - wow
      no_log: false # <- no_log が false になっている
```

#### 修正されたコード

```yaml
---
- name: Example playbook
  hosts: localhost
  tasks:
    - name: Do not log user passwords
      ansible.builtin.user:
        name: john_doe
        comment: John Doe
        uid: 1040
        group: admin
        password: "{{ item }}"
      with_items:
        - wow
      no_log: true # <- no_log を true にする
```

### 参考サイト

* [no-log-password — Ansible Lint Documentation](https://ansible-lint.readthedocs.io/rules/no-log-password/)
GraphQL サーバー構築(その6. prismaとgraphql(apollo)サーバーの連携)

id: 91eea4d1
## この記事のリポジトリ
https://github.com/ykitaza/graphql-tutorial/tree/develop

## 前回
https://qiita.com/ponchuchu/items/449a1e459b00f914696b

## 今回やること
- [x] resolver で使用するためのcontextを用いて、prisma と接続
- [x] クエリをなげて、prismaと接続できていることを確認

### resolver で使用するためのcontextを用いて、prisma と接続

* contextの型定義
```ts:index.ts
interface Context {  
    dbsource: {
        prisma: PrismaClient;
    }
}
```

* contextにdbsourceを追加
```ts:index.ts
  const { url } = await startStandaloneServer(server, {
    listen: { port: 4000 },
    context: async () => ({
      dbsource: {
        prisma: prisma
      }
    })
  });

  console.log(`🚀  Server ready at: ${url}`);
}
```

* context を用いてprismaにクエリをなげることができるようにresolver を 修正
```ts:index.ts
  const resolvers: Resolvers = {
    Query: {
      books: async (parent, args, context: Context) => await context.dbsource.prisma.book.findMany(),
    },
    Mutation: {
      addBook: async (parent, args, context: Context) => {
        await prisma.book.create({
          data: {
            title: args.title,
            author: args.author
          }
        });
        return await context.dbsource.prisma.book.findMany()
      }
    }
  };
```

### クエリをなげて、prismaと接続できていることを確認
```sh:bash
$ yarn start
```
オッケーです。
![2022-12-31_23h58_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2193053/dbb26fea-80ac-f93a-c996-a39c4093bad8.png)


## 次回以降
- [ ] next.js でgraphql サーバーにクエリをなげる
- [ ] sqlite -> mysql に変更。dokcer 使用する。
- [ ] nestjsを用いたgraphqlの導入
2022年の振り返り

お久しぶりです。24卒エンジニア志望の大学3回生のkitsune🦊です。
遅くなりましたが、今年の振り返りをしたいと思います！（本当に色々あった。。）

# 個人開発

web制作をずっと学んでいましたが、webアプリ開発に興味を持ち、React.jsの勉強をし始めました！そこから個人開発を始めたり、インターンに参加したり。。
現在は、フロントエンドメインですが、2023年はバックエンド、モバイル、インフラ問わずに知識の幅を広げていきたいです！頑張るぞ！！

# サマーインターン

3月〜人気サマーインターンなどの選考を受け始め、計20社くらいは受けたと思います。。選考事態は、なかなか辛い結果となりました。
なので、最終的に参加した開発系のサマーインターンは2つでした！

* [MTI Summer 2022](https://www.kitsune-blog.tokyo/mti-summer-internship) - 9月
* [RAKUS Tech Lab](https://fresh-recruit.rakus.co.jp/recruit/internship.html) - 10, 11月

めっちゃ楽しかった！欲を言うなら、もっと早く開発経験を積めていればよかったなぁ。
# ハッカソン

今年は初めてのハッカソンにも参加してみました！
参加したのは3つでした！（楽しかった）
というのも、CAの選考を受けた際に、チーム開発の経験が足りないとの言葉を頂き、落選。。その経験が悔しく、チーム開発の経験を積むためにハッカソンには参加していました。
* [PR TIMES 2days Hackathon Summer](https://prtimes.jp/main/html/rd/p/000001195.000000112.html) - 8月
* [サポーターズ主催 技育展【開発経験 1年未満】](https://talent.supporterz.jp/geekten/2022/)- 8, 9月

# 開発アルバイト

Web開発を勉強し始め、2つの開発アルバイトにJoinしていました！
* [株式会社AIoT](http://www.ai-ot.com/recruit.html) - 3月下旬~5月
* [株式会社YOLO JAPAN](https://www.yolo-japan.co.jp/) - 11月~現在

関係者各位の皆様、未熟にも関わらずJoinさせて頂きありがとうございました。
特に、株式会社YOLO JAPANでは、2023年も継続してJoinするので、フロントエンドをメインにどんどん貢献していきたいと考えています！よろしくお願いします！

# デジタルマーケティングアルバイト

2月から参加していた飲食店でのデジタルマーケティングチームも就活や色々な事情が重なり解散することとなりました。チーム立ち上げ時からディレクターとして、営業や企画、採用、チームマネジメントなど、コンサルの方々に指導してもらいながら行いました。
最終的には、企業利益として結果を残せた部分と思うように結果を残せなかった部分があり、悔いが残ります。
関係者各位の皆様、ありがとうございました。大学生という身分でありながら、チームディレクターとして利益を求められプレッシャーのある中で、関われたことは貴重な経験でした。この経験を今後とも活かし、成長をぶち上げていきたいと考えています。

# エンジニアコミュニティ あまてく

10月からエンジニアコミュニティ あまてくを立ち上げました。現在は、メンバー50名を抱えており、LT会やもくもく会、エンジニア座談会、ハッカソン参加など活動を行っています！
関係者各位の皆さん、おせわになりました！！
ありがとうございました！！
地方大学特有の閉鎖的な文化や文系進学率の高さを俯瞰するべく、自らの成長はもちろん、エンジニアを目指す学生が切磋琢磨できる環境を作っていきます！
2023年は、他大学コミュニティやSTECH、企業の方々にも協賛して頂き多くのイベントや勉強会を行なっていく予定です！（お楽しみに！！）
来年もよろしくお願いいたします！！

# 2023年の抱負

## 就活終わらせたい

まず、就活を終わらせたいですね。。（切実に）
ただ、自分に妥協せず吟味し、納得した内定と企業選びを行いたいです。そのために、日々思考を止めず、やりきっていきます！

## 個人開発

UI/UXやReact.jsなど、フロントエンドは大好きですが、今後のキャリアや技術力を考えたときに、圧倒的にバックエンドやインフラなどフルスタックな技術力が足りないと考えています。
なので、今学んでいる、Golangを中心にどんどん突き抜けていきます！（やっていき）

# 最後に

今年も、たくさんの人たちに関わり恵まれた1年でした！2023年もよろしくお願いします！！
また、あまてくでは、企業様の協賛やエンジニアの登壇、コラボイベントなどいつでも募集しています！
ご連絡は、[あまてく公式Twitter](https://twitter.com/amatech1006) or [Kitsune](https://twitter.com/kitsune_yk) までお願い致します！
DHCPv6とIPv6におけるアドレス設定

【DHCPv6とIPv6におけるアドレス設定】
IPv6では、IPv4と同様な固定アドレス設定やDHCPでのアドレス設定に加え、IPv6自体の機能として独自にアドレス設定を行う機能を持っています。IPv6におけるDHCPであるDHCPv6と併せて、固定アドレス以外の設定方法を確認。

IPv6で行われるアドレス設定の代表的なものは以下。LinuxでもIPv6をサポートし、これらの機能を利用できる。

・ステートレス自動設定
・ステートフル自動設定
・DHCPv6（DHCPv4とは互換性ない）

まず、IPv6でのステートレス自動設定、ステートフル自動設定を確認。
「ステートレス」は「状態なし自動設定」、ステートフルは「状態あり自動設定」、「ステート」=「ホストとIPの紐づきの状態」について、サーバ等で管理しない状態が「ステートレス」、サーバ等で管理する状態を「ステートフル」


IPv4プロトコル自体にはアドレス自動設定の機能はない。

ステートレス自動設定を使用するホストは、「ルータ要請」（RS、Router Solicitation）をルータに発信し、ルータから「ルータ広告」（RA、Router Advertisement）を受け取ることで、ネットワークのプレフィックスとデフォルトゲートウエイの情報を入手。
そして、そのプレフィックスと、個々のホストを識別するためのインターフェイスID（MACアドレスを元に自動生成）から自動的にアドレスが生成。

上記のようにアドレスは自動で付与されますが、DHCPv6を組み合わせることで、アドレス以外の情報を配布することを可能。


【DHCPで割り当てることができるアドレスの種類】
DHCPv6では、割り当てられるアドレスの種類がいくつかあり、通常のIPv6アドレス以外も割り当て可能なアドレスがあります。

その代表が一時アドレス。
DHCPv6を使ったアドレス割り当ての対象となるのは、主にユニークローカルアドレスとグローバルアドレス。
VSCode でつくった数式や図の入った小冊子にページ番号をつける

「VSCode で数式や図の入った小冊子をつくる」
https://qiita.com/nanbuwks/items/56dad2c4d6a640f550e2

では、

> # 今後
> いろいろ問題があります。しかしながら設定をやり込んでいくと Re:View 使えばいいじゃんということになってしまいます。お手軽な中でやれることということで VSCode 内で完結する制限内でできることを試してみました。しかしながらページ表示やキャプションなど、ほんのちょっとしたところで厳しいところがあるのも事実です。


と書きました。

これを検討してみました。

# 課題

- ページ番号をつけたい
- 目次のターゲットにページ番号を表示したい
- キャプション機能をつけたい

# Markdown PDFの改造を検討

ネックとなるのはどれも印刷の問題となります。特に目次は、3パスも4パスも通して目次を作成したことで生じるページ数のゆらぎを吸収しないといけません。
Markdown PDF の印刷エンジンに手を加えるのは無理そうということで、この方法はあきらめました。



# VSCode 外で

VSCode 内でやることにこだわってましたが、VSCode 外でのプロセスを導入することに切り替えました。しかしながらあまり複雑になってしまうと VSCode を使う魅力も薄れてしまうので、簡単な手順でできるという条件付きです。

# 目次

目次は前回、Markdown 段階で目次をつけました。これにはページ番号がついていません。ページ番号をつけるとすると、PDFにした本文のうちの目次対象が何ページに存在するかを検出しなければなりません。ちょっと手間がかかりそうなので今回はパス。

# キャプション

図や表へのキャプションは後々欲しい機能ですが、現在はまだ切実ではないので今回はパス。しかしながらキャプション代わりにつけた説明が、改ページで泣き別れになるのが問題なので次回でどうにかしたいところです。

# ページ番号

今回は、この問題だけを解決することにしました。

ポストプロセスでページ番号を付けます。
addpage コマンドを使います。

## addpage を導入する

python のプログラムとして PIP で導入できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f2a65cf7-aa99-2267-df5f-c6136abfb7e9.png)


## addpage を使う

以下は3ページ目からページ番号をつける例です。
```
$ addpage -o orbitcalc-addpage.pdf orbitcalc.pdf -s 3
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e649288c-43a5-1cfb-93ea-bdba8a5617e3.png)

本文のエリアと干渉しているので、`-y` パラメータを追加して調整します。

```
$ addpage -o orbitcalc-addpage.pdf orbitcalc.pdf -s 3 -y 30
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d060e787-cce3-f21c-69de-6f1b1cc88b2c.png)

重なりが解消しました。

今回は簡単なコピー本なので、表紙もいっしょに小冊子印刷してしまいます。表2を1ページ目として数えることにし、以下の扉の「本書の狙い」のある物理で3ページ目を本書内の2ページ目として「 - 2 - 」と表示するようにします。そのためには `-k` オプションを使います。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5910e0fd-9920-2fdf-6272-9c5b1e4464ed.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/aced53f5-01bf-e503-9901-061a1630e6c8.png)

以下の内容のスクリプトを作成して、pdf 作った後にこれを適用するようにしました。
```
addpage -o orbitcalc-addpage.pdf orbitcalc.pdf -k 2 -s 2 -y 30
```

# コミケに間に合う

今回は、これで当日のコミケになんとか!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/aa5754fd-36ac-e0c2-1113-e66b5c758578.png)
技術的負債を返済していくには

## なぜ記事を書こうと思ったか

この記事をご覧の皆様同様、我々も例に漏れず技術的負債の返済には、悩んでおります。
まだ返済には届かずとも一定の見通しが立ったため、我々が当たったケースをもとに反省と宣言を込めて認めようという試みです。
とはいえ、見返してみると当たり前のことであり、当たり前のことを当たり前にやってくのって難しいよねっていう吐き出しに仕上がってたりします。

お忙しい人は、「反省点と結論」をみてください！

## サマリー

テーマの技術的負債を返済していくには、これら問題を評価し継続的に施策を打ち出せるリソースの確保と関係者の属性(と彼らとの関わり合いかた)が非常に重要だと感じました。

前者のリソースが不在だとスタートはできても継続はできずうやむやになりがちです。
後者の文脈に関して特に注意すべき点は、非IT人材のビジネス領域の人たちとの折り合いの付け方です。
我々にも知らないことがあるのと同じように彼らにも知らないことがあり、一歩間違えるとお互いに「あいつ分かってない」という状況に陥ります(念の為補足しておくと、今のチームはそういう状況には陥ってはいません。私の経験上、こういう現場がかなり多かったというあくまで経験上の注釈です。)。

### 前提(登場人物)

* PO: ビジネス領域スキルセット持ち。

## 問題解決

### まずは問題を正しく認知すること

問題を認知するには到達すべき目標を正しく認識する必要があります。我々の場合は、下記のような問題を認知しました。

(色々取り組むべき課題はたくさんありますが)技術的観点では、下記を「社内の技術スタック・市場を鑑み上記目標達成できるか」を評価しました。
* ビジネス要件を満たせるか
* 非機能要件を満たせるか(☆)

我々の組織には、ビジネス側のスキルスタックは多かったため、特に後者の問題が顕著でした。
ということで、非機能(セキュリティ、性能・拡張性、運用・保守性などなど)にコミットできるような場づくりをしていくことにしました。

### 計画-実施

その上でこれらに対する計画です。中期計画に対して、半年〜1年の短期目標を定めました。
冒頭にも書きましたが、一番エネルギーを使ったのは特に非エンジニアであるPOに向けて、スクラムイベント内で結果をどうアピールしていくかという点です。
言い換えると、単にコーディングやCD/CIの範疇にとどまらず、スクラムイベントという単位で生産性を評価するということになります。
※(エンジニアのみなさまはここが一番気になると思うので軽く触れます)余談ですが、この課題を解決するのに、storybookというライブラリを使用しました。
　具体的な方法については、コードベースのソリューションでまた別途リリースする予定です。


### 反省点と結論

この記事の肝部分です。

* 技術的負債などを(再)評価できるソフトウェアエンジニアリングに精通したリソースを確保する
* PO含むステークホルダーにどう可視化するか

技術的負債とよく付き合っていくには上記の点と折り合いつけていくいことが肝要と考えます。
特に前者に関しては、計画-実施にて記載しましたが、後者の点が初期計画の時点で盲点でした(下で補足します。)。

「ソフトウェアエンジニアリングに精通したリソースを確保する」について補足すると、この計画自体スタートはかなり良好に進んでおりましたが、実は技術的負債を先導していた者の異動を機にその後滞りがみえるようになりました。
技術的負債に対するアンテナは、そこそこにハードスキルスタックがものをいうところがあると考えております(アーキテクチャーだったり運用だったりを複数経験しないと比較し得ないため)。
問題解決プロセス上本来は、「振り返りポイントによって再評価がなされるべき」ところですが、根本原因を探ると人事異動によって再評価できるリソースが不在になったというのが私の評価になります(この文章読みにくいですね。。)。


ちょっと念の為補足しておくと、今この記事が書けているのも、実はその状態はある程度改善していて、技術的負債に対する評価ができるリソースがたまたまアサインできたからだったりします。
(まだまだ解決の余地が見えなかったら書けません！)



## 最後に

硬い文章を書いてきたので最後ちょっと緩和させるためにこんなこと書くのですが、実はこの文章アドベントカレンダーの中でリリース予定ですた。
色々訳あってズレ込んでのリリースになるのですが、`まだ俺たちのクリスマスは終わっちゃいない！ドン！` ということでクリスマス兼2022年の締めくくりとしたいと思います。
【ルール説明・basic】playbook-extension

こちらの記事は [Ansible lint Advent Calendar 2022 カレンダー2](https://qiita.com/advent-calendar/2022/ansible-lint) 13日目の記事になります。

今回はルール [playbook-extension](https://ansible-lint.readthedocs.io/rules/playbook-extension/) について説明します。

### playbook-extension

[playbook-extension](https://ansible-lint.readthedocs.io/rules/playbook-extension/) は playbook ファイルの拡張子が`.yaml`もしくは`.yml`になっているか検証します。

Ansible playbook ファイルには`playbook.json`や`playbook.xml`のようなファイル名は採用できません。

### 参考サイト

* [playbook-extension — Ansible Lint Documentation](https://ansible-lint.readthedocs.io/rules/playbook-extension/)
AWS日記50(Amazon EventBridge)

# はじめに
今回は Amazon EventBridgeを試します
デベロッパーガイドの[チュートリアル: ファイルが Amazon S3 バケットにアップロードされたときに Amazon ECS タスクを実行する](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/CloudWatch-Events-tutorial-ECS.html)を参考に設定します

# 準備
[バケットの作成](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/create-bucket-overview.html)

[Amazon ECR を使用してセットアップする](https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html)

[Amazon ECS で使用するコンテナイメージの作成](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/create-container-image.html)

# 設定

### CloudWatch設定

![01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/8b0d901a-7064-8243-f9f6-e25d89fe031e.jpeg)

![02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/7f03040a-b359-2986-372f-86c687745da8.jpeg)

![03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/e48519a1-4609-358d-cd31-64f9b80fb363.jpeg)



### S3設定

![05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/b5a217c4-8de5-e076-6b0e-c67187eb4740.jpeg)

![06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/abb6d641-7362-33ef-1f59-412cb7099935.jpeg)


# 確認
![07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/434bbb9f-592c-2c33-c372-2c9fe9bdb0ec.jpeg)


# 終わりに
今回はAmazon EventBridgeを試しました。


### 参考ドキュメント

[チュートリアル: ファイルが Amazon S3 バケットにアップロードされたときに Amazon ECS タスクを実行する](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/CloudWatch-Events-tutorial-ECS.html)

[EventBridge の使用
](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/EventBridge.html)

[【Amazon ECS】Amazon Elastic Container Service (Fargate)](https://blog.serverworks.co.jp/ecs-fargate)
住所自動取得(郵便番号全角入力対応)[Vus.js2]

### 環境

|  | バージョン |
| ---- | ---- |
| Vue.js     | 2.7.14      |
| axios-jsonp| 1.0.4       |


### 使用API
郵便番号-住所検索API
https://zipaddress.net/

### レスポンス内容
| キー  | バリュー |
| ---- | ---- |
| pref | 都道府県名 |
| city | 市区町村名 |
| town | 町域名 |
| address | cityとtownを結合したもの |
| fullAddress | 都道府県+市区町村+町域名 |

### 全角→半角を変換用の関数を用意
```js
//全角英数記号を半角に変換する
const replaceToHalfWidth = strVal => {
  var halfVal = String(strVal).replace(/[！-～]/g, function (str) {
    return String.fromCharCode(str.charCodeAt(0) - 0xFEE0);
  });
​
  // 文字コードシフトで対応できない文字の変換
  return halfVal.replace(/”/g, "\"")
    .replace(/’/g, "'")
    .replace(/‘/g, "`")
    .replace(/￥/g, "\\")
    .replace(/　/g, " ")
    .replace(/〜/g, "~")
}
```

#### vueファイル（シングルファイルコンポーネント）
```vue
<template>
  <div>
    郵便番号<input type="text" v-model="post_code" @change="getAddressFromAPi">
    都道府県<input type="text" v-model="pref">
    住所<input type="text" v-model="address">
  </div>
</template>
<script>
import jsonpAdapter from 'axios-jsonp'

export default {
  data () {
    return {
      post_code: null,
      pref: null,
      address: null,
    }
  },
  methods: {
    getAddressFromAPi() {
      const replacedAddress = replaceToHalfWidth(this.post_code)

      axios.get(`https://api.zipaddress.net/?zipcode=${replacedAddress}`,
        {adapter: jsonpAdapter})
        .then(res => {
          this.pref = res.data.pref
          this.address = res.data.address
            })
        }
  },
}
</script>
```
VisualBasic ベースの測定データ収集管理システムをIoT化してリプレイス


レガシーシステム

# VisualBasic の時代

MS-Windows が実用になった MS-Windows3.1 と共に、Visual Basic 2.0 が 1992年にお目見えしました。

その後1997年に VB5.0 1998 年に VB6 が出荷されました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/bfad6a55-ad8c-05b5-8efa-486835228afb.png)
出典：https://hu.wikipedia.org/wiki/F%C3%A1jl:Illusztr%C3%A1ci%C3%B3_VisualBasic6_1.png

当時はGUIで作ることが一般化できるということで革命的に迎えられ、VisualBasic でフリーソフトが花盛りになりました。

1990年代当時は「笑って、お仕事」のキャッチフレーズでMS-WindowsがPRされ、今では DX となっている概念と同様、当時はビジネスユーザが自分でプログラムを組むということが期待されていました。

# Microsoft Access

この当時にはやった Access は、VisualBasic と同様に画面設計ができていて、データベースが扱えました。しかしながら本格的なものを作るとなると職人的なスキルが要求されるものでした。

# レガシーシステム

- アクセスベースのDBがあり、
- 測定機器で測定→測定結果をICカードで収集、
- ICカードを回収し DB に書き込み、
- 年度更新

これが20年程度動いてました。

さすがにつぎはぎ!


# データ収集

収集方法は測定機器から RS-232C 通信で Windows で取得、IC カードに書き込んでました。

# DB連動

 VisualBasic5 → VisualBasic6 → VBA 

Microsoft Access → SQL Server → SQL Server

# 問題

## ?問題

- 検索が、わけがわからない
- プリンタドライバの問題で、ソートに影響が出るとか
- ユーザが作ったバージョンが乱立して分けがわからない

## レガシーによる問題
- ODBC 
- 32ビット
- カードリーダのOLEが対応しなくなる
- カードも FeliCa 

# 要件

- SQL でスカッと検索
- Webアプリケーション
- エンドユーザもプログラムのロジックがわかる
- 計測器はRS-232Cで接続

# DB

MySQLにリプレイスしたいなあ!

# カードリーダーを作成


MyFare,FeliCa 対応のカードリーダをカードリーダーを3種類開発

- 作成、IoTで測定
- サーバ機能
- HID カードリーダー機能


# Web

途中から、 XoJo 2020 に変わったため PHP に変更
帳票システムは LibreOffice で。

# 完成 ! 

なんとか、できました。

一部の要素機能はこちらでご紹介しています。


## 帳票出力

LibreOffice でテンプレートを作ったものから PDF が出力できるシステムを作りました。

https://qiita.com/nanbuwks/items/d4696542760cf4b8a24a
https://qiita.com/nanbuwks/items/8ea939ad497fec29c069
https://qiita.com/nanbuwks/items/f11e4e3aabac33f9a32b

## Xojo

VisualBasic 5/6 に変わって簡単なレイアウト変更だとユーザができるものとして Xojo を用いました。

https://qiita.com/nanbuwks/items/4743756186060c3c3d20
https://qiita.com/nanbuwks/items/615a929babca8986e634
https://qiita.com/nanbuwks/items/055bcc55ed2bf848bc0e

## IC カードとの連携

MiFare / FeliCa に対応した IoT リーダーとして作成。

https://qiita.com/nanbuwks/items/48ac619d21839e261a93
https://qiita.com/nanbuwks/items/1f416d6e45a87250ee0a
Next.jsを楽にテスト(スナップショットテスト)

## はじめに
コードテストの保守が大変だと思ったことはありませんか。
Next.jsとJestでスナップショットテストを行うことで、表示に関わるDOMを直接テストでき、尚且つページの更新などによるテストコードの変更もほとんどない快適なテストをしませんか。

## 方法
Next.jsとJest、jest-domを使用してスナップショットテストを行います。
スナップショットテストは仮想的にDOMを操作してテストを行います。
あらかじめ記録したDOMとテスト時のDOMが一致するかどうかを確かめるだけでテストをすることができるので、Reactのコードが更新されても、記録したDOMを更新するだけで、テストのコードを更新せずにテストをすることができます。

### 前提
- Next.js 13
- TypeScript
- Jest

### コード
まずはテストに使用するパッケージをインストールします。
```shell
> npm install -D @testing-library/dom @testing-library/jest-dom @testing-library/react @testing-library/user-event @types/jest @types/react-test-renderer jest jest-environment-jsdom
```

`src/__test__`ディレクトリを作成し、中にテストのコードを配置します。
```tsx
import { render } from "@testing-library/react";
import "@testing-library/jest-dom/extend-expect";

describe("Rendering", () => {
  it("Test", () => {
    const { asFragment } = render(<div>Hello, world!</div>);
    expect(asFragment()).toMatchSnapshot();
  });
});
```

スナップショットテストはjsでDOMを仮想的に生成しそれをスナップショットとして保存します。
`render()`では仮想的なDOMをレンダリングすることができます。
それをasFragmentとして変数にもち、jestの`toMatchSnapshot()`で以前に保存したスナップショットとasFragmentのDOMを比較して一致したらテストが通ります。
スナップショットが保存されていなかった場合、自動でスナップショットを保存してテストが通過します。
スナップショットはテストのコードと同じ階層の`__snapshots__`ディレクトリの中に保存されます。

スナップショットは次のように保存されています。
私の環境で上記のコードを実行した時のスナップショットです。
```jsx
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Rendering Test 1`] = `
<DocumentFragment>
  <div>
    Hello, world!
  </div>
</DocumentFragment>
`;

```
このようにDOMの状態がそのまま保存されています。
Unreal Engine 5.1 移行ガイド

# Linux開発環境用のUnreal Engine5.1移行メモ

# エンジンのConfigファイルを変更
```DefaultEngine.ini
[/Script/Engine.RendererSettings]
r.ReflectionMethod=1
r.GenerateMeshDistanceFields=True
r.DynamicGlobalIlluminationMethod=1
r.shadow.Virtual.Enable=1

[/Script/WindowsTargetPlatform.WindowsTargetSettings]
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
pixD3D12TargetedShaderFormats=PCD3D_SM6
```

# プラグインをアップグレード

`RunUAT.sh BuildPlugin -plugin="/UnrealPlugins/old/UE4.uplugin" -package="/UnrealPlugins/new/UE5.uplugin" -TargetPlatforms=Linux`

# Nanite対応メッシュ
Blend Mode = Opaque
~~WorldPositionOffset 設定なし~~　5.1で対応
~~VertexLerp 設定なし~~　5.1で対応も、1pixel毎に3倍のコスト
~~カスタムUV 設定なし~~　5.1で対応も、1pixel毎に3倍のコスト

# Nanite Audit toolでまとめて確認・編集

Tools > Nanite Tools > Optimize
Triangle Count Thresholdを1に下げる
Enable Naniteをクリック

# Nanite非対応にLODを設定

Content browserからStatic Meshを全て選び Assset Action > Bulk Edit via Property Matrixを開き、LODグループとLODの数を設定

# Two-Sided Foliage
FoliageのStatic MeshをBulk Edit via Propertyで開き、Naniteに変更、

# Lumenとライトマップ

Lumen使用時のStatich Lightingは、メモリにロードされるがレンダリングされないため、次のいずれかを設定する。

- プロジェクトセッティング > レンダリング > Allow Static Lighting　のチェックボックスを外す
- ワールドセッティング > Lightmass > Force No precomputed Lighting　をチェックする

# バーチャルシャドウマップ
`r.Shadow.Virtual.Cache.MaxMaterialPositionInvalidationRange`
上記コンソルコマンドで、ディレクショナル ライトの Dynamic Shadow Distance Movable の値よりも小さい値を定。

# World Partition
旧システムのWorldCompositionの変換や、現在のレベルを変換する。

- Tools > World Partition > Convert Level
1. Convert in placeをチェック（なければ、suffix=_WPのレベルが作成される）
2. Verbose、Report Onlyをチェック
3. 変換を実行
4. World Partition Editorでアセットをロード

One File Per Actorを設定することで、全てが個別アセットになり外部ファイルとして扱われ、大規模プロジェクトの共同作業が容易になる。
ソース管理はPerforceのみをサポートする。

# Decalsのブレンドモード不要

GBuffer Deffered DEcals は廃止となり、 DBuffer Decals になりました。ブレンドモードを設定したり、UE4からの移行によりコンテンツの変更も不要。

# 移行後の問題を見つける方法

- Build > Map check
- Window > Message Log, Output Log
- パッケージの実行で、他の方法で見つけにくい問題を特定

# その他5.1新機能

- Lumenの Software Ray Tracing
- High Quality Translucency Reflections
- Single Layer Water
[python] for文の基本と応用(リスト内ループ)

pythonのfor文をちと整理し直してみた。
特にリスト内包表記は完全に理解しきれんかったのでなかなかお勉強になりました。

# 目次
- 動作環境
- for文の概要
- 基本的な使い方: range、リスト、文字列
- 少し応用: リスト内包表記

# 動作環境
|種類             |バージョン       |
|:---------------|:--------------|
|MacBook Air     |Ventura13.0.1  |
|python          |3.9.6          |
|jupyter notebook|6.5.2          |
|pandas          |1.5.2          |

# for文の概要
for文はまぁ大体のプログラミング言語にあって、俗にiterable(繰り返し可能な)処理を行うものになる。
基本的な形式は、
```python:
for (変数) in (range or リスト):
    処理
```

# 基本的な使い方: range、リスト、文字列
まずはrange関数。規定の関数繰り返したい時はこれを使うのが安牌。
```python:
for i in range(5):
    print(i)
# 0
# 1
# 2
# 3
# 4
```
勿論、処理内に変数に入ってなくても規定の回数繰り返してくれる。
```python:
for i in range(3):
    print('Hello!')
# Hello!
# Hello!
# Hello!
```
リストをinの後に入れ込むと、変数にリストの各要素が代入される。
```python:
for i in ['one', 'two', 'three']:
    print(i)
# one
# two
# three
```
リストを入れてたところに文字列を入れると左から順に一文字ずつ変数に代入される。
```python:
for i in 'Konyanyachiwa!':
    print(i)
# K
# o
# n
# y
# a
# n
# y
# a
# c
# h
# i
# w
# a
# !
```

# 少し応用: リスト内包表記
for文の仕組みを応用して、[]内でiterableにリストの成分を生成できる。
ある規則性を持った成分を持つリストを作るにはとても便利。
```python:
apple = [10, 20, 30, 40, 50]
```
の形のリストを作りたい時よくあるのは、for文を使って
```python:
apple = []
for i in range(5):
    apple.append((i + 1) * 10)
print(apple)
# [10, 20, 30, 40, 50]
```
と書くのがまぁコードの構造としては一番明確。
for文の内包表記を使うとこの3行を1行で書けるゆえに便利。
```python:
# [(処理) for (変数) in (range or リスト)]
apple = [(i + 1) * 10 for i in range(5)]
print(apple)
# [10, 20, 30, 40, 50]
```
なおappendメソッドについては後々あげる(予定)

# 参考にしたURL
- [【Python入門】for文の使い方とは？基礎 + 応用的な使い方を解説
](https://www.sejuku.net/blog/24766)
- [Pythonリスト内包表記の使い方](https://note.nkmk.me/python-list-comprehension/)
LEDパネルの公開データベースを作る

# LEDパネルのキット

LEDパネルは元々複数枚をパネライズして使う用の製品ですが、単一枚あるいは2〜3枚程度をお手軽に使うためのキット「AKBONE2022」を今年開発しました。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/dad187f7-0b35-6694-35f8-b911dfead6e2.png)

そのドライバに LovyanGFX を使うようにしたのですが・・・


# LEDパネルのバリエーション

まず、サイズがいろいろあります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/467aedba-9e83-64c8-6a1a-bc8e0c99cc46.png)

64x64というのもあったりします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5c8fd7e5-5dee-714b-5b04-6b02cca83ca8.png)

ピッチも様々です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f7f98358-cd5c-c8d8-ab93-59f60e8de504.png)


また、インターフェースは HUB75 という名前ですがこれもサブタイプがかなりあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/72c2ea98-adc0-14dc-f8d2-9936a375ea9a.png)

駆動方式も、LEDのアドレスの指定方法がパラレル・シリアル・ごちゃまぜなど・・

毎度仕入れるごとに違ったりします。

パネルの仕様書などは無いので、ドライバを作るにはドライバICの型番から追っていかないといけません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/42643431-6bbf-9070-1a91-f1e5d359ef82.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/eeaa4f78-916f-1171-1156-d3b97a0ae36b.png)

描画異常になると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e4bb804e-34fb-1379-e204-b35fed69a082.png)

ロジアナで追っかけて・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d7bb0b49-e635-cc7b-03fd-a092cf43ca7d.png)

労力が大変です。ドライバを開発するために、LEDパネルの管理が必要ですね。

https://www.usbdev.ru/databases/

こんな感じのパネルと仕様のデータベース。
構成ICについてはこんな感じで。 

https://www.usbdev.ru/cics/


# Wiki の作成

誰でも編集ができるようにしたいと思い、Wiki にしてみました。

GitHub Wiki も検討しましたが、コメントをつける機能が不足している感じ?

無料Wikiの中で、@wiki がいいかな・・・


https://w.atwiki.jp/ledpanel

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/3c2b810c-11c6-42f6-9935-1fb28a5f99e8.png)

とりあえず、こんな感じで作ってみました。
適宜情報追加していきます
書籍『社会に最先端の数学が求められるワケ』の紹介

この記事は [EAGLYS Advent Calendar 2022](https://qiita.com/advent-calendar/2022/eaglys_adcal) の15日目の記事です

# はじめに
昨年のアドカレでは，↓の書評記事を書きました

[書籍『耐量子計算機暗号』の紹介](https://qiita.com/0917laplace/items/7c1535c3236c259e07ea)
[書籍『データ解析におけるプライバシー保護』の紹介](https://qiita.com/0917laplace/items/babf31440efe255e9e7d)
[書籍『セキュリティエンジニアのための機械学習』の紹介](https://qiita.com/0917laplace/items/7f20ef077967b44f9760)

~~書評記事は書くのが楽なので~~今年も書こうと思います

Q. それってあなたの感想ですよね？
A. はい

ということですので，あくまで個人の感想となります

# 今回紹介する本

[社会に最先端の数学が求められるワケ(1)](https://www.nippyo.co.jp/shop/book/8767.html)
[社会に最先端の数学が求められるワケ(2)](https://www.nippyo.co.jp/shop/book/8768.html)

目次はそれぞれ↑のURL内に記載

# 第１巻　第２章　量子情報処理
量子誤り訂正を目的としています

量子誤り訂正の書籍は数少ないですし，気持ちが理解できるのではないでしょうか

量子誤り訂正が載っている書籍として，[符号ベース暗号に入門する（前半）](https://qiita.com/0917laplace/items/6f3f291527438bde66dc) で紹介した↓の本を載せておきます

[萩原 学 : 進化する符号理論, 日本評論社, 2016.](https://www.nippyo.co.jp/shop/book/7206.html)

# 第１巻　第３章　耐量子計算機暗号
来ましたPQC

楕円曲線の話から始まるのでなんとなく思っていましたが，今回は同種写像をテーマに取り上げています

SIKEが書籍に載る時代が来たんだなぁと（~~とあるePrintで標準化候補からは外れそうですが~~）

こういうざっくり紹介系の書籍で符号ベース暗号が載るように僕も頑張ろうと思いました・・・

# 第２巻　第４章　数学と可視化技術
微分トポロジーとかMorse関数の話から始まります

幾何がこういうCG分野で使われることは知っていたのですが，まさかここまで使われているなんて思ってもいませんでした

~~超絶幾何苦手マンなので~~そのうち勉強してまた読み直したいです

# 第２巻　第８章　トポロジカルデータ解析
今度はホモロジーの話です

４章より馴染みあって読みやすかったです（~~Morse関数は全く知らないので~~）


# まとめ
前半が量子とか耐量子で馴染みのある分野で，後半が機械学習よりの話でした

機械学習と幾何は苦手寄り（というかあまりよく知らない）の分野なので，これを機に勉強してみたいです

かなりざっくり目の紹介になってしまいましたが，おそらくどの章もその分野のさわりのさわりなので，あまり詳細を書くのは良くないかなと・・・気になった方は是非手に取ってみてください！（~~日本評論社の回し者ではありません~~）

------------------------------------
今回の内容はここまでです．ここまでご覧になってくださった方々ありがとうございます！
エンジニア1年生、基本情報技術者試験合格しました。

# エンジニア1年生、基本情報技術者試験合格しました。
アウトプットの習慣をつけようと思いQiitaのアカウントを作ったのはいいですが、特に書けることがなく困ってしまいました。　　
2022年度秋季の基本情報技術者試験に(おそらく)合格したので、自己紹介がてらのそのときのことでも書こうと思います。(これから試験制度が変わるので、あまり参考にならないかもしれません…）

## 自己紹介(とスペック紹介)
スペックがわからないと参考にならないと思いますので、軽く紹介します。  
* 文学部言語学専攻出身(4年制大学)
* ガチガチのプログラミング未経験
* 地方中小IT企業22卒新卒1年目
* 4～6月自社研修、7月～案件参画

## 対策
### 午前対策
午前対策は、参考書の読み込みと過去問の演習のみを行いました。
8割得点できたので、対策としては十分だったと思います。
7月から10月まで会社の昼休みと自宅で夜に1～2時間ぐらい勉強しましたが、途中の1～2か月はやる気が消失していてほとんど勉強できていませんでした…。

#### 参考書
私は、最初は本当に知識がなくてちんぷんかんぷんだったので、参考書を一冊まるっと読み込むところから始めました。ある程度経験がある方は、過去問を解いてみて解説がまるっきりわからないとかでなければ、知識が不足していると感じるところだけ読み込みをするので大丈夫だと思います。
英語の略称を覚えるのがすごく苦手だったので、それだけはチートシートを作成して、空き時間に見直すようにしました。

https://amzn.asia/d/e6A34hz

#### 過去問演習
これはもうみんなお世話になっているであろう過去問道場にお世話になりました。
年々出題傾向が変わってきているので、あまり古い問題を解いても効果が薄いように感じたので、直近の年度から平成22年度ぐらいまでさかのぼりながら1周解き、そのあと間違えたところを解きなおしました。
過去問道場はユーザー登録すると、解答履歴を見ることができたり、問題にフラグを立てて解きなおすことができるのでかなり便利です。
私は、知識問題で間違えたもの→赤、計算問題で間違えたもの→緑、というように2色のフラグを立てながら問題を解きました。（スキマ時間には、紙やペンがなくて、計算問題が解けないため）

https://www.fe-siken.com/fekakomon.php

### 午後対策
「午後対策をするよりも、午前で基礎を固めたほうがいい！」などとほざいていたせいで、午後は2週間弱しか勉強時間が取れませんでした。奇跡的に7割をとることができましたが、絶対に早めに勉強したほうがいいです。

#### 選択問題の選定
本格的に勉強する前に、自分がどの分野が苦手で、どの分野が得意なのか知るために1度2～3回分過去問を1通り解きました。
この段階で「苦手すぎて本当に無理！！」という分野がある人は、**１つだけ捨てる**ことをおすすめします。選択問題で、まじで苦手な分野をわざわざ選択して解くことはほぼないので、時間の無駄だからです。
逆に、**得意な分野以外をすべて捨てるのもおすすめしません**。当日自分の得意な分野が出ない可能性があるし、問題の分野によってかなり難易度が違うことがあるからです。得意な分野だからと言ってゴリ押しで難易度高めの問題を解くより、ちょっと苦手な分野でも簡単な問題を解くほうが得点が取れる場合があります。
本当に苦手な分野（できれば１つ）をまるっきり捨てて、それ以外は得意な分野に重点を置きながら過去問中心に満遍なく勉強するのがいいと思います。

午後対策の演習も過去問道場にお世話になりました。

https://www.fe-siken.com/fekakomon_pm.php


#### 基礎知識の補充
情報セキュリティなどは知識ベースの分野なので、過去問を解いていて足りないと感じた場合は、参考書で基礎知識を補います。

#### ソフトウェア開発（表計算）
ソフトウェア開発は、未経験で特に業務で使っている言語がなかったので、表計算を選択しました。
下記の参考書を一周するだけで、過去問は8割～10割ぐらい取れるようになりました。（もう問題がでなくなるので詳しくは割愛します。）

https://amzn.asia/d/cw1hVRw

#### アルゴリズム
アルゴリズムは本当に苦手で分からなかったです。本番で5割しかとれなかったのでかなり危なかったです。
参考書としては、**矢沢久雄さんの『基本情報技術者試験のアルゴリズム問題がちゃんと解ける本**』を使用しました。未経験の人でもわかるように丁寧に書かれている反面、プログラムを書いたことがある人なら少し説明がくどく感じるかもしれません。

https://amzn.asia/d/cw1hVRw

アルゴリズムに関しては、必殺技みたいなのはないので、参考書と過去問を利用して、地道に時間をかけてトレースして勉強するしかないのかなという印象です。

#### データベース
ちょうど業務でSQLを書いてて知識が不足していると感じていたこともあって、参考書で勉強しました。
経験がない人には、午前の知識だけでは少し厳しいと思うので、午後用に知識を補充することをおすすめします。
データベースは業務で触ったことがある人なら比較的簡単に点数が取れる分野だと思います。
私は『**スッキリわかるSQL入門**』で勉強しました。Webで簡単にSQLを実行できる環境が提供されているので、手を動かしながら勉強できるので、理解しやすいと思います。

https://amzn.asia/d/h9d9bVw


## 結果

午前　82.5点
午後　69.5点（選択問題：データベース/ソフトウェア設計/表計算）

ということでなんとか合格することができました。

次はAWSのSAAを年度内に取得できるよう勉強中です...。
2023はたくさん積み上げられるように頑張ります:fire:
BSD系OSにElixirをインストールしてみる

BSD系OSにElixirをインストールしたいと思います

# インストール方法

公式を確認
https://elixir-lang.org/install.html#bsd

```:ターミナル
$ su
# pkg install elixir
```
# 動作確認

```sh:ターミナル
$ iex
```

```Elixir:iex
Erlang/OTP 24 [erts-12.3.2.6] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit] [dtrace]

Interactive Elixir (1.13.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> :os.version
{13, 1, 0}
iex(2)> 1..10 |> Enum.sum()
55
```

![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295814/792eb4e3-6a9d-cf0c-d359-aa3684d14d33.png)
データベーススペシャリストの勉強方法

図らずも、データベーススペシャリストに合格したわけなので、勉強方法を誰の参考になるかわからないけども紹介しておきます。
基本的に午後1、午後2は交互に１日1時間〜2時間を使って解きました。

午前1
免除でしたが、昔勉強した際は過去問道場を過去9年間分全て解けるようになるまでやり込んだ結果、　92点取れたので、その方法で行けるはずです。

午前Ⅱ
こちらも過去問道場一択です。
私は試験2週間前ぐらいから、通勤時間に問題を解けるだけ解きました。
総時間でいうと8時間ぐらいの勉強時間でしょうか。
中身をちゃんと理解すると、午後1や午後2で知識問題が出た場合には役に立つと思いますが、とりあえず午前2を突破するのであれば、丸暗記でも大丈夫と思います。

午後1
ALL IN ONE パーフェクトマスター データベーススペシャリスト／TAC株式会社
こちらの本で勉強して、演習問題も解きました。
後は、単純にIPAから過去問をダウンロードして解きました。
平成28年〜令和3年まで解きました。

午後2
同様に
ALL IN ONE パーフェクトマスター データベーススペシャリスト／TAC株式会社
で勉強して演習問題を解き、後はやはりIPAから過去問をダウンロードして解きました。
平成28年〜令和3年まで解きました。

午後1、午後2はそれぞれ答え合わせの時に、なぜその答えになるのかわからないものはあまりなかったですが、あった場合はネットなどで検索して解説を見て理解することを心がけました。
今は便利な世の中で、誰かしら解説をしてくれているものです。
私もそれぐらいのエンジニアになりたかったですね。
Windows 11のシャットダウン後の勝手な再起動の解決にむけて

# シャットダウンにストレスを感じる日々
　Windows 11パソコンを使用していますが、ここ1か月ほど、シャットダウンメニューの実行後、すぐに再起動をしてしまう状況に**難儀**をしていました。
　- シャットダウンしたはずなのに？
　- 再起動をクリックしたのかな？
　- いやそんなことはない確かにシャットダウンだ。
と、すっきりしないことが数回続き、この現象は自分の操作ミスではなく、シャットダウン機能のバグか当機の故障だろうとの確信の域に達しました。
　現象は、
+ スタートメニュー→電源→シャットダウン操作では、確実に再起動
+ altキー＋f4キー→シャットダウン操作：2回に1回くらい再起動

です。
　なお、ウィルス対策には、マカフィートタルプロテクションを利用しています。OSのビルドは22621.963です。
　再起動後には**電源長押しで電源オフ**をする日々です。

# 原因不明

　当機はノートパソコンであり、3か月前に自分で行ったバッテリー交換のためではないかと疑ってはいるのですが、2か月間無事だったので、半信半疑です。
　ほかに思い当たることといえば、アプリや更新（22H2含む）のインストールくらいなので、とりあえずアプリをアンインストールしてみましたが、改善なしです。更新を戻るのは面倒なので、していません。
　ネットで探してみると、同様症状の報告はいくつかあり、**高速スタートアップをオフ**にする、という案がありました。当機は高速スタートアップをしていないのですが、念のため、オンにしたりオフにしたりと幾度かトライをしてみても改善なしです。

# shutdownコマンドに思い至る

　Windowsには、shutdownコマンドがあるのを思い出し、試してみました。
　shutdownコマンドのパラメータは数多くありますが、そのうちの

```
/s　コンピューターをシャットダウンします。
```

がよさそうです。
　コマンドプロンプトで

```
shutdown /s
```

を実行すると、

![out.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173967/2b98113b-adbf-cbda-46c5-a78b5db184fc.png)


のダイアログメッセージが表示され、シャットダウンまで1分だけ猶予が与えられます。
　「閉じる」をクリックすると通常の操作ができますので、1分以内に必要なことは済ませましょう。
　また、次のようにオプションを付けると、シャットダウンまでの秒数も指定できます。
```
/t xxx     シャットダウンまでのタイムアウト期間を xxx 秒に設定します。
           有効範囲は 0 から 315360000 (10 年) までで、既定値は 30 です。
           タイムアウト期間が 0 より大きい場合、/f パラメーターが
           暗黙的に指定されます。
```
　実際に、

```
shutdown /s /t 010
```
とすると、10秒でシャットダウンされます。
　ただし、実行後の画面は先のダイアログの内容のままです。
　起動中のアプリは、オープンしているファイルがあっても、終了させられました。アプリによる差はあるかもしれません。

# シャットダウン成功！

　結果的に、shutdownコマンドにより、無事シャットダウンが成功しました。もやもやが吹っ飛んだ年の瀬です。一度だけ再起動がありましたが、数10回以上、そのまま電源オフになりました。
　また、高速スタートアップが勝手にオンになるのでは？という心配があったのですが、これはたんなる心配性でした。
　.batファイル等にしておくと便利かもしれませんが、間違った実行なんてことがないように、作ってはいません。
　shutdownは、通常はサーバー管理ツールのようですが、クライアントPCの日常作用の役にも立つものですね。
【ルール説明】partial-become

こちらの記事は [Ansible lint Advent Calendar 2022 カレンダー2](https://qiita.com/advent-calendar/2022/ansible-lint) 12日目の記事になります。

今回はルール [partial-become](https://ansible-lint.readthedocs.io/rules/partial-become/) について説明します。

### partial-become

[partial-become](https://ansible-lint.readthedocs.io/rules/partial-become/) はユーザーを変更して権限を昇格させる時に`become: true`ディレクティブが記述されているか検証し違反している場合は警告を出力します。

例えば処理を実行するユーザーが変更先のユーザーより強い権限を与えられていれば`become: true`ディレクティブの付与は必要ないように見えます。（例: Ansible を root で実行、処理の途中で`apache`にユーザー変更し httpd をリロードする）しかし不必要な混乱を避けるために`become`と`become_user`は同時に利用します。

#### 問題のあるコード

```yaml
---
- name: Example playbook
  hosts: localhost
  tasks:
    - name: Start the httpd service as the apache user
      ansible.builtin.service:
        name: httpd
        state: started
        become_user: apache # <- become:true が記述されていない
```

#### 修正されたコード

```yaml
- name: Example playbook
  hosts: localhost
  tasks:
    - name: Start the httpd service as the apache user
      ansible.builtin.service:
        name: httpd
        state: started
        become: true # <- become: true を記述する
        become_user: apache
```

### 参考サイト

* [partial-become — Ansible Lint Documentation](https://ansible-lint.readthedocs.io/rules/partial-become/)