OmniAICreator/Qiita-1.07M huggingface dataset:
azureの望まない高額請求を回避するために予算アラートを設定してみた。


# はじめに

azure をフリープランで色々遊んでいたが、その無料期間が終わり、pay-as-goに切り替えないといけなかった。pay-as-goに切り替えると、知らない間に高額請求がくる可能性もあるので、予算アラートを登録する事にした。

# 予算の登録

![1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822052/816d860f-ce76-cc3f-5bfe-a2936e7c8953.jpeg)

Cost Management + Billing (コストの管理と請求)のサービスを検索して、見つける。

![2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822052/453ecf9a-53df-01bd-6a31-971d1acdf206.jpeg)

Budgets (予算)を選択する。

![3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822052/91d26381-38dd-8749-b4cb-d2f66cb67738.jpeg)


スコープを選択する。

![4.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822052/82485f29-a0d0-54a1-980d-d08779195a10.jpeg)


予算の設定は、大きく分けて4つのスコープに設定出来る。

- Billing account (課金アカウント）
- Management group（管理グループ）
- Subscription（サブスクリプション）
- Resource group（リソースグループ）

今回は、Subscription スコープに予算を設定する。

![5.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822052/65264d38-a55c-9866-0b9b-de046a5e2d78.jpeg)
![6.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822052/a0d31b55-ea06-7dd0-f816-900fd6d12cec.jpeg)


Subscriptionの設定が成功したら、Scopeのセクションが、Subscription の名前に変わる。

![7.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822052/f1efb3a9-31e4-f2dd-3896-41f06acbbc69.jpeg)

Reset period は次の3種類から選ぶことができる。

- Monthly (月単位）
- Quarterly （四半期ごと）
- Annually （毎年）

今回は、Monthly を選んだ。

![8.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822052/32bb1e00-8a7a-7dd1-e7a9-d4b8d0206814.jpeg)

Alert condition (アラートの条件）のタイプは次の2種類。

- actual (実際）
- forecast（予測）

actual ば実際に設定した予算の割合に到達した際に、アラートされる。

forecastは、設定した予算の割合に到達する可能性が高くなった場合にアラートされる。

alert recipientで、アラートを通知させたいメールアドレスを登録できる。

Language preferenceは、アラートのメール内容の言語を設定できる。

![9.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822052/f4350195-afe1-51ed-c6c2-30625ae586f7.jpeg)
Subscription に予算の設定が成功したら、リスト欄に新しく追加される。これで、設定した条件通りにアラートが指定したメールアドレスに届くようになる。

# おわり

今回は、望まない高額請求を回避するための、予算及び、アラートの設定をした。思った以上に簡単に設定できるので、pay-as-goに切り替えた際には必須の設定になる。
はじめに

 はじめまして、雪凪と申します。
2022年10月現在、Java・Pythonの職業訓練を受けながら、29歳で未経験からエンジニアを目指して再就職活動をしております。
成果物に関してのアウトプットをIT業界に勤める友達から勧められ、大学時代ぶりとなるブログを書くに至りました。

 この記事では「はじめに」と題しまして、簡単な自己紹介と、Qiitaに自分が発信する記事の方向性、エンジニアとして目指すキャリアの指針を記します。
***
### 自己紹介
前職はアルミ加工業で契約社員として、1年間溶接工として現場、3年間品質保証グループで検査員をしておりました。
文系の大学卒業後、フリーター期間と職業訓練を挟み就職した会社で、現場との人間関係はぶつかることはあれど上手くいってたのですが、
自身のキャリアを鑑みた時に「好きでもない仕事で40年も働くのか……」という想い（+その他色々な事情や気持ちがあって）退職を決意。

そこから2ヶ月ほど、改めて興味があったことにチャレンジしておりました。
仕事を始める前は元々オタク的な趣味で、コンテンツ産業に興味が強く、配信機材を揃えてイラスト描いてLive2dモデルを作ってみたり、
そのままイラストを描いてみたり、ちょっと動画で収益出せないかと思ってみたり……。
ただ、自分自身がコンテンツになって「これで稼ぐ」というのは（少なくとも現時点での貯金で個人事業主になるのは）厳しいと結論づけ、再就職を目指し、職業訓練を受けることにしました。

そこで目に入ったのがJava・Pythonの職業訓練コース。
エンジニア、なるほど、その道があったか……。

私、元々パソコンへの得意意識はあり、大卒時の就活でも興味はありました。
そこで何故選べなかったかというと、分岐点となったのは高校の文理選択のこと。

うちの高校の文理選択は高2での「数B or 美術 or 書道」でした。

その時の私は漫画やライトノベルが好きなお年頃、イラストへの興味が一番強い時期でして。
進路のことも深くは考えず、美術を選択してしまったんですね。

数Bを取らないとほぼ自動的に理系が自分の選択肢から外れていき、気がつけばパソコンに関わる仕事を選べなくなっていました。
（もし進路を考えておられる若い方が見ていらっしゃったら、パソコンを使った仕事がしたいなら理数系を選択することをオススメします。
機械的なプログラミングはもちろん、ゲーム作りにも、数学的な知識を使ってゲーム上の位置情報を求めたりとかするので……。）

さて、そんな訳で文系大学を卒業しここまでやってきた私が、29歳になってエンジニアとして再就職活動をしております。
上記の通り、自分の興味関心は「コンテンツ制作」に関わるものが主となっています。

読者の皆さんはコンピューターに楽しんで触れるようになったきっかけはなんでしょうか。
私は小学生～中学生の時に触れた「おもしろフラッシュ倉庫」「ニコニコ動画」がきっかけでパソコンに触れるのが好きになりました。
「寿司打」に触れてタイピングを覚え、ROM専だったのでレスバなどの経験はないものの、好きなアニメなどの「2ちゃんまとめ」なんかも見ていました。
大学生の時には某アイドルアニメにハマり、二次創作のイラストや小説をpixivに投稿していました。

「娯楽」や「趣味」と言ってしまえばそれまでですが、私はそれらが大好きでした。
エンジニアならば、ネットを通じてコンテンツ制作に携われる。
コンテンツを通じて、「コンピューターに触れるのが楽しい」「創作が楽しい」「ワクワクする」――そんな気持ちの原体験を、届けたい。

そういった気持ちで、私は29歳になってようやく、自分のやりたい仕事の「方向性」を見つけたのです。

## これからQiitaに投稿していくコンテンツ
基本的には「成果物の公開の場」として活用していくつもりで、不定期での更新になります。

その制作内容ですが、
「運用を目的としたオリジナルサービス」
「勉強の為に既存のサービスをなぞった習作」
この2つになるかと思います。

割合としては2：8とか、1：9になるかもしれません。

また基本的にアイデア・設計段階での公開はしない方針とします。
進行中の個人的なプロジェクトの中の一つのシステムを取り上げて、制作過程として記事を作ることはあるかもしれません

## これから製作していくものの方針
私が現時点（2022年10月）で思い描いているキャリアプランは2つあります。

◎将来的に、アプリゲームの設計開発に携わる
一番分かりやすい形での「エンジニアとしてのコンテンツとの関わり方」の一つです。
ユーザーの生活の一部に溶け込んでいるコンテンツ製作に直接携わる形です。


◎Webコンテンツの作成に携わる
主に学生に向けて、ワクワクの原体験となるようなWebコンテンツ製作をしていきたいと思っています。

これらを組み合わせて、
「学生向けのゲーム形式のアプリ開発」を2022年度の目標として掲げます。
またそれに付随する形で、必要な機能の学習のアウトプットの為の小規模システム開発も随時行います。

## コンテンツ制作ポリシー

・「消費させることだけを目的としたコンテンツを作らない」
　これはただユーザーに使ってもらって稼ぐことだけを目的としたコンテンツの制作を個人のポリシーとして禁止します。
　例えば、なんのテーマも無い「既存のゲーム性にただ広告をつけただけのアプリ」のようなモノを指します。
　（ただし、学習目的・企業へのスキルPR目的の制作は除きます。この場合、収益に結びつかない公開の仕方をします）

・「嘘を広めるようなもの、人を貶めるようなものは作らない」
　これは以後メディアとして振る舞う機会があったとしても、誰かの不幸に繋がる嘘の拡散はしない、誹謗中傷に繋がる内容を取り扱わないことを個人のポリシーとします。
　これにより、Qiitaの投稿コンテンツに関しても個人の努力の限り、検索ノイズとならないよう誤情報の拡散には十分に気をつけ、指摘があれば随時精査し追記する方向を取ります。
SSH をする時に"Permission denied (publickey)."が出た時のチェックポイント

自分用備忘録です。
記憶力が悪いから年一くらいしかやらないと忘れる…

## 接続先の設定確認(Ubuntu)
### /etc/ssh/sshd_config
  + PublickeyAuthentication yes
### authorized_keysの場所
:::note info
/home/USER_NAME/authorized_keys
:::
:::note alert
/etc/ssh/authorized_keys
:::
### 設定の反映
+ sudo systemctl restart ssh
+ /etc/init.d/ssh restart
## 凡ミス:x:
### コピーした鍵ファイルの中身
:::note info
ssh-rsa ～
:::
:::note alert
-----BEGIN OPENSSH PRIVATE KEY-----
:::

***
ミスに出会い次第更新していく予定～
Macで『ボリュームハッシュの不一致』のエラー通知が出たときにやったこと

# 現象

Macについて、朝4:30にシャットダウンして、1時間後の5:30に起動を毎日している。
起動後、画面右上に下記のような通知が出た。

>ボリュームハッシュの不一致
>ボリューム"disk1s5"でハッシュの不一致が見つかりました。
>macOSをこのボリュームに再インストールする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/de154f0e-ed9b-4923-de5f-0e63bfa106b2.png)

通知が出始めたのは2022年10月下旬ごろ。（うろ覚え）
この通知は毎回出るわけではなく、2～4日に1回程度の割合で出る。

# 何をおいてもまずはバックアップ

調査をするにしても何らかの対応をするにしても、まずは重要なデータのバックアップ。

# リセット系を試してみる

通知の内容からして『ストレージの物理故障』または『ストレージの論理エラー』の可能性が高い。
でも最初にリセット系を試してみる。
（リセット周りの方法の勉強も兼ねて）

# SMCリセット

SMCはSystem Management Controllerの略で、電源まわりを管理している機能。

まずはこれをリセットしてみる。

T2セキュリティチップ搭載のMacかどうかによってSMCリセットの方法が変わる。
なのでT2セキュリティチップ搭載Macかどうかを最初に確認。

このMacについて 。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/238694fb-98b5-506d-295e-514a46fa6118.png)

システムレポート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/fc459828-6f00-0698-66bc-633950e5e5f3.png)

ハードウェア ⇒ コントローラ ⇒ 機種名 。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/0f3fd633-520f-155b-34fe-f7118029d500.png)

T2セキュリティチップ搭載と分かったので、それに合わせた手順でSMCリセット。

1. シャットダウン。
1. 本体から電源コード抜いて15秒待つ。
1. 本体に電源コード差す。
1. 5秒待って電源ボタン押して起動。

# いったん様子見

2022年11月10日にSMCリセットをしたので、いったんこれで様子を見てみる。
改善しないようであれば後述の対応をやってみる予定。

# NVRAMリセット

SMCリセットで改善しなければNVRAMリセットを予定。

TODO:NVRAMリセット方法分かったらコマンドで実行できるか調査。
（リセット処理は月1回など定期的にやっておきたい）

# 蛇足

もしかしたら『比較的古い型番のMacにMontereyをインストールした』が原因による誤検知かもしれない。

# 参考サイトさん

https://www.taikun-room.com/2021/11/how-to-install-macos-monterey-on-unsupported-mac.html

https://www.too.com/support/faq/mac/hardware/24090.html

https://macgarage.jp/mac-smc-nvram/

https://www.capa.co.jp/archives/23432

# バージョン

macOS Monterey 12.6
ChromeBookでCADを使う

# はじめに
ChromeBookは低価格かつ軽量で持ち運びには非常に便利です。
ただし、ChromeOSは基本的にCloudのソフトウェア利用を前提としているために普段使用しているソフトウェアが使えない事が多いです。
今回は、ChromeBookでCADを使うためにインストールの方法を記録します。
# 前提条件
いろいろ調べたのですが、機械・建築系で使えるCADでChromeBookで使えるものはほぼありません。
Fusion360やWebで使えるCADがあるようですが、年額15万円とちょっと使うには高額すぎます。
ChromeBookでは、Linuxモードなるものがあり、これを使うとLinuxアプリケーションを動かすことができます。
そこで、Linuxで動作して、無償で利用できる3次元CADのFreeCADをインストールすることにしました。
まず、Linuxモードを有効にします。
設定を開き、詳細設定をクリックし、デベロッパを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133769/6c434ca2-aec4-b540-0e29-f8934a25950b.png)

Linux開発環境を有効にすると各種設定ができるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133769/a3fa4e2c-00fd-df64-d7bf-ba05f6ceacb7.png)

適当に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133769/4dddd1af-a94e-dd12-2104-4acb3e079f90.png)

メニューを開きコンソールを開きます。これでLinuxのコマンドが使えるようになりました。

# FreeCADのインストール
さて、本題です。
まずはアップデート。
```
~$ sudo apt update
```
これでレポジトリを最新にアップデートします。
アップデートが完了したら、
```
~$ sudo apt-get install freecad
```
これで必要なライブラリも含めすべて自動的にインストールしてくれます。
Y/nを聞かれたらYを入力します。
# FreeCAD起動
コンソールを開いて
```
~$ freecad
```
で起動できます。
メニューにLinuxアプリという項目があり、そこにFreeCADのアイコンが入っているので、そちらをクリックしても起動できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133769/fe90bd2a-67d4-2e7f-fb4d-5e0af2fde704.png)

起動するとFreeCADのスタート画面が起動してきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133769/47d6328b-29ba-b6d5-f32d-19956986ecb6.png)

# 終わりに
ChromeBookで何でもできれば起動も早いし軽いしいいですね。
他のアプリについても色々試してみることにします。
【GitHub】タスクリストのフォーマット【小ネタ】


## 🐱 結論

GitHubのタスクリストを使うにはこう書きます。
```
- [ ] タスク
- [x] タスク
```

- チェックなし: `ハイフン、スペース、カッコ、スペース、カッコ閉、スペース、タスク名`です。
- チェックあり: `ハイフン、スペース、カッコ、小文字エックス(x)、カッコ閉、スペース、タスク名`

反映されるとこう見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284077/3c932866-e3c4-2f9e-7c48-07d3700a8b7d.png)


## 🐱 補足
GitHubのissueでタスクリストを使おうと思ったとき`-[]` でできるよーって公式にこう書かれているのですが・・・
>タスク リストを作成するには、リスト アイテムの前に空白、ハイフン、[ ] を付けます。 完了したタスクをマークするには、[x] を使います。

スペースの有無など、ちゃんと書かないと反映されないんですよね。


ダメな例
```
-[]タスク
-[] タスク
- []タスク
- [] タスク

-[ ]タスク
-[ ] タスク
- [ ]タスク
- [ ] タスク
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284077/2c374d67-e1da-3984-85d6-1c55d7fe06ad.png)


以上


## 🐱 参考
- [タスクリストについて - GitHub Docs](https://docs.github.com/ja/issues/tracking-your-work-with-issues/about-task-lists)
Gitのブランチとは(初心者向）

# ブランチとは何か

メインの作業に加えて`新しい機能を追加する際`など、
`作業を分岐して開発`することを指します。

![スクリーンショット 2022-10-09 8.24.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2765288/d12d696d-9a3d-f47a-34da-8caf00863787.png)

mainブランチの作業に加えて"C"をコミットした際、全く異なる開発を`並行作業したい場合`
subブランチ（仮名）を作成し、mainブランチとは異なる開発を並行して進めることができます。

## ブランチを作成する

ブランチを作成には次のコマンドを実行します

```
$ git branch sub

// git branch "ブランチ名"
```

## 作成したブランチを一覧表示する

次のコマンドでブランチ設定を確認できます

```
//　ブランチの一覧を表示したい
$ git branch

// GitHubを含めた全てのブランチを確認したい
$ git branch -a 
```
例：git branchの実行結果
![スクリーンショット 2022-10-09 22.45.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2765288/00d23e5f-1ede-7520-9480-8dceba82944a.png)

## ブランチを切り替える方法

見本のようにブランチを作成しただけでは、putする対象のブランチは変更されません。

```
$ git switch sub
// git switch ブランチ名 

$ git switch -c sub2
// ブランチを新規作成した後に切り替える
```
例：sub2ブランチを作成し切り替えた場合
![スクリーンショット 2022-10-09 22.54.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2765288/d80ae5e6-7ae0-015b-6f73-b22db3ed092b.png)


## ブランチで分岐した内容をマージ（取り込み）する

見本のように`main` `sub` `sub2`などブランチを複数用意し
各々のブランチへ変更内容を登録した場合、
内容を1つのブランチへ結合することができます

```
// 現在のブランチがmainで、subの情報を取り込みたい場合
$ git merge sub
//　git merge 対象のブランチ名

```

GitHubにあるブランチをローカル上でマージ（結合）したい場合
```
$ git merge origin/sub
// git merge リモート名/取り込み対象のブランチ名
```

## ブランチのコンフリクト（衝突）について

例えば、`sub` `sub2`の各ブランチにindexファイルが存在し
同じ3行目部分をそれぞれ異なる内容で修正したとします

この状況でブランチのマージを実行した場合起きる事象が
`コンフリクト(衝突）`です。

### コンフリクト状態で実行しようとした場合のエラーメッセージ
訳：自動マージに失敗しました。競合を修正し結果をコミットします。
![スクリーンショット 2022-10-11 10.41.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2765288/cf443734-75df-fc85-ecf9-b85f889819d0.png)

### コンフリクトの場合の実行結果（見本）

- `git merge`を実行するとワークツリーのファイルがマージされた状態に更新されます
- コンフリクト状態になった場合は次の見本のように記号で追加情報が区別されます

![スクリーンショット 2022-10-11 12.58.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2765288/bf8016bb-b78e-6ac1-da02-a41cacbc02a1.png)

- HEAD＝現在のブランチ
- sub2＝取込みする対象から取得した変更コード

### コンフリクトが発生した場合の修正方法

- <<,==,>>などの記号を含む不要なコードを削除し上書きする
- コマンド　`git reset --hard`　でマージ前の状態に戻す

## GitHub(リモート）からローカルへ情報を取得する方法

GitHubに最新の状態のデータがある場合、ローカルのデータを最新な状態にするには
`pull`コマンドを使います

```
git pull origin main
// git pull リモート名 ブランチ名
// git pull　以降は省略が可能です
```

### プルコマンドに似たフェッチコマンドについて

同じくGitHub(リモート）からローカルリポジトリに情報を取得するコマンドに
fetchコマンドが存在します

fetchコマンドを実行した場合ローカルリポジトリへ情報を取得しますが、
ワークツリー(作業環境）までは更新されません。
fetchで情報を取得した場合、ワークツリーの情報も更新したい場合は
mergeコマンドも実施する必要があります

### fetchコマンドを使う場面とは

ローカルリポジトリとGitHub上のデータでコンフリクトが発生しそうな場合などに
fetchコマンドで情報を確認し、mergeを行う流れが推奨される場面があります
【Swift】LaunchScreenでカスタムフォントが使えない

# 問題
ビルド時にカスタムフォントが適用されない

|Xcode上での表示|ビルド時の表示|
|-|-|
|![スクリーンショット 2022-10-11 14.53.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4522208f-ad72-1c4b-226f-30e36ca8e3d7.png)|![Simulator Screen Shot - iPhone 12 - 2022-10-11 at 14.52.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/b1201e8e-373b-32ed-73c3-cb7eaa8f6972.png)|

# 原因
起動時点ではカスタムフォントの読み込みが終わっていないので設定できてない(たぶん)

# 解決方法(仮)
画像で配置する

# おわり
もっと良い方法があればコメントで教えていただけると嬉しいです。
二重ハッシュについて

# 目的
二重ハッシュから任意の値を取り出す方法を記録する。

## 二重ハッシュから任意の値を取り出す方法
取得したい値のキーまで連続して指定すると取得できます。
    
    ハッシュ[:取得したい値のキー名][:取得したい値のキー名]

    <例>
    user_data = [
     {user: {profile: {name: 'George'}}},
     {user: {profile: {name: 'Alice'}}},
     {user: {profile: {name: 'Taro'}}},
    ]
    からnameキーの値を取り出すには、
    user_data.each do |u|
      puts u[:user][:profile][:name]
    end

    もしくは、digメソッドを用いて
    user_data.each{ |u| puts u.dig(:user, :profile, :name) }

## 補足
digメソッドについては、
https://techtechmedia.com/dig/
の記事がわかりやすい。
【Terraform】VPCエンドポイントの設定で service_name が取得できなかった場合、service から組み立てられる件

# はじめに

こちらのモジュールをつかって、VPCエンドポイントを作成する際、`service_name`を渡さなくても、自動で設定されます

https://github.com/terraform-aws-modules/terraform-aws-vpc/tree/master/modules/vpc-endpoints

```tf
module "endpoints" {
  source = "terraform-aws-modules/vpc/aws//modules/vpc-endpoints"

  vpc_id             = "vpc-12345678"
  security_group_ids = ["sg-12345678"]

  endpoints = {
    s3 = {
      # interface endpoint
      service             = "s3"
      tags                = { Name = "s3-vpc-endpoint" }
    },
  }

  tags = {
    Owner       = "user"
    Environment = "dev"
  }
}
```
出典：https://github.com/terraform-aws-modules/terraform-aws-vpc/tree/master/modules/vpc-endpoints

上記の例から見てもわかるように、設定しているのは`service`だけです
直感的に、`service`から`service_name`が設定されていると想定されます

また、公式ドキュメントには以下のように説明されています

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_endpoint#service_name

> service_name - (Required) The service name. For AWS services the service name is usually in the form com.amazonaws.<region>.<service> (the SageMaker Notebook service is an exception to this rule, the service name is in the form aws.sagemaker.<region>.notebook).

> `service_name`は通常、`com.amazonaws.<region>.<service>`の形式です

# ソースを確認してみた

以下で設定されているのを見つけました

https://github.com/hashicorp/terraform-provider-aws/blob/19574e39cbbb44a59b5809697030e54daf15c990/internal/service/ec2/vpc_endpoint_service_data_source.go#L107-L111

```go
	if v, ok := d.GetOk("service_name"); ok {
		serviceName = v.(string)
	} else if v, ok := d.GetOk("service"); ok {
		serviceName = fmt.Sprintf("com.amazonaws.%s.%s", meta.(*conns.AWSClient).Region, v.(string))
	}
```
出典: https://github.com/hashicorp/terraform-provider-aws

`service_name`のフィールドは必須なのですが、取得できなかった場合に、`service`から組み立てられているのがわかります
バイナリーサーチ

# はじめに
バイナリーサーチについて、忘れないように記録を残す。

## バイナリーサーチとは

ソート済みのリストや配列に入ったデータ（同一の値はないものとする）に対する検索を行うときに用いられる手法。
まず、中央の値を確認し、検索したい値との大小関係を用いて、検索したい値が中央の値の右にあるか、左にあるかを判断する。
それを繰り返し、片側には存在しないことを確かめながら検索していく方法。
1回の処理で選択肢が半分になるので、処理速度の向上が期待できる。

## バイナリーサーチの利用法

    def binary_search(array, right, target)
      left = 0
      while left <= right
        center = (left + right) / 2
        if array[center] == target
          return center
        elsif array[center] < target
          left = center + 1
        else
          right = center - 1
        end
      end
      return -1 
    end
    
    array=[1,3,5,6,9,10,13,20,26,31]
    
    puts "検索したい数字を入力してください"
    target = gets.to_i
    number_of_elements = array.length
    
    result = binary_search(array, number_of_elements, target)
    
    if result == -1
      puts "#{target}は配列内に存在しません"
    else
      puts "#{target}は配列の#{result}番目に存在します "
    end
poetry addしようとしたらFailed to unlock the collection!と怒られた



ぱっとググって、直接的な記事が見当たらなかったので、念の為備忘録的に残しておきます。
誰かの助けになれば幸いです。


poetryでpythonの環境構築をしようとして、poetry initとかで立ち上げたプロジェクトに対し、poetry addでライブラリを追加しようとしたら、掲題の通りのエラーがでました。

```sh
$ poetry add numpy

Failed to unlock the collection!
```

下記のpoetryのissueを見ていくと、ターミナルで`keyring --disable`を実行すると良い、とおっしゃってる方がいるので、そちらをやってみました。
- https://github.com/python-poetry/poetry/issues/2692


```
$ keyring --disable
```

poetry addをしてみると、うまくライブラリがインストールできました。

```
$ poetry add numpy
Using version ^1.23.3 for numpy

Updating dependencies
Resolving dependencies... (10.5s)
```

`toml`ファイルにちゃんと追加されていることも確認できました。

```
$ cat pyproject.toml 
[tool.poetry]
name = "poetry-tutorial-pj"
version = "0.1.0"
description = ""
authors = ["hoge.fuga <hoge.fuga@hogehoge.com>"]
readme = "README.md"
packages = [{include = "poetry_tutorial_pj"}]

[tool.poetry.dependencies]
python = "^3.9"
numpy = "^1.23.3"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
```

以上です。
条件に基づく共有ルールで使用されているため、レコード タイプを非アクティブ化できません。


# 条件に基づく共有ルールで使用されているため、レコード タイプを非アクティブ化できません。ただし、レコードタイプのオブジェクトに関連付けられた条件に基づく共有ルールはありません

[Cannot inactivate a record type because it is used by Criteria-Based Sharing Rules. But there isn’t any Criteria-Based Sharing Rule associated to the Record Type’s object](https://sathishsfdc.com/2017/02/03/cannot-inactivate-a-record-type-because-it-is-used-by-criteria-based-sharing-rules-but-there-isnt-any-criteria-based-sharing-rule-associated-to-the-record-types-object/)
goで画像の色調変換の処理を行う

# はじめに

こんにちは、icemint0828です。
今回は自作パッケージの紹介も兼ねて、goでの画像の色調変換の処理の方法を紹介します。


## 動作環境
go 1.18.3

## 使用パッケージ

* icemint0828/imgedit
  画像の色調変換の処理に使用しています。
  画像ファイルの拡張子の変換にも使用しています。

https://github.com/icemint0828/imgedit

## インストール

```shell
$  go get github.com/icemint0828/imgedit@v1.6.0
```

# 画像の色調変換の処理

```main.go
package main

import (
	"github.com/icemint0828/imgedit"
)

func main() {
	// FileConverter
	fc, _, err := imgedit.NewFileConverter("srcImage.png")
	if err != nil {
		panic(err)
	}
    // 色調変換(imgedit.GrayModel, imgedit.SepiaModelで指定)
	fc.Filter(imgedit.GrayModel)
	
	// 保存(jpeg, gif形式での保存も可能)
	err = fc.SaveAs("dstImage.png", imgedit.Png)
	if err != nil {
		panic(err)
	}
}

```

色調はグレースケールとセピアの2種類が用意されています。
後述しますが独自の色調変換を行う事も可能です。

`fc.SaveAs`の第二引数では以下の形式で保存するファイルの形式を選択出来ます。
* `imgedit.Png`
* `imgedit.Jpeg`
* `imgedit.Gif`


# 画像の色調変換の処理(image取得)
```main.go
package main

import (
	"image"

	"github.com/icemint0828/imgedit"
)

func main() {
	// srcImgを何らかの方法で取得
	var srcImg image.Image

	// FileConverter
	c := imgedit.NewConverter(srcImg)

    // 色調変換(imgedit.GrayModel, imgedit.SepiaModelで指定)
	c.Filter(imgedit.GrayModel)
	dstImg := c.Convert()

	// dstImgを使用
}

```

ファイルを介さずにimageを処理したい場合は、上記のように`imgedit.NewConverter`で直接画像の加工が出来ます。

# パッケージ内の処理の説明

[imgedit](https://github.com/icemint0828/imgedit)パッケージ内の`converter.go`で画像の色調変換の処理を実施しています。

```converter.go
// Filter change the image color to specified color model
// GrayModel, SepiaModel
func (c *converter) Filter(filterModel FilterModel) {
	if filterModel == nil {
		return
	}

	dst := image.NewRGBA(image.Rect(0, 0, c.Bounds().Dx(), c.Bounds().Dy()))
	dstSize := dst.Bounds().Size()
	alphaModel := color.AlphaModel
	for x := 0; x < dstSize.X; x++ {
		for y := 0; y < dstSize.Y; y++ {
			dstColor := c.Image.At(x, y)
			_, _, _, a := dstColor.RGBA()
			if a <= 0 {
				dst.Set(x, y, alphaModel.Convert(dstColor))
			} else {
				dst.Set(x, y, filterModel.Convert(dstColor))
			}
		}
	}
	c.Image = dst
}
```

引数から色調変換のモデルを取得し、`*image.RGBA`に対して、各ピクセルの色情報の変換を行った後に書き込みしています。  
α値(透過度)が0のものは色調変換時に予期せぬ色調になる事があるため、別途標準パッケージで定義されている`color.AlphaModel`にて変換を行っています。
`imgedit.FilterModel型`は標準パッケージの`color.Model型`のラッパーとなっています。

```converter.go
// FilterModel wrapper
type FilterModel color.Model

// GrayModel convert image to gray
var GrayModel = FilterModel(color.GrayModel)

// SepiaModel convert image to sepia
var SepiaModel = FilterModel(color.ModelFunc(sepiaModel))

func sepiaModel(c color.Color) color.Color {
	// once converted to GRAY, then to SEPIA, we can get a beautiful conversion.
	grayColor := color.GrayModel.Convert(c)
	r, g, b, a := grayColor.RGBA()

	r = uint32(float64(r) * (float64(240) / float64(255)))
	g = uint32(float64(g) * (float64(200) / float64(255)))
	b = uint32(float64(b) * (float64(148) / float64(255)))
	return color.RGBA{R: uint8(r >> 8), G: uint8(g >> 8), B: uint8(b >> 8), A: uint8(a >> 8)}
}
```

`imgedit.SepiaModel`を参考にr,g,bの値を変化させる事で独自の色調変換の実施が可能となります。

# おわりに
簡単な内容とはなりますが、画像の色調変換の処理を紹介させて頂きました。
最後まで読んで頂き、ありがとうございました。

#### 前の記事
[goで画像の反転処理を行う](https://qiita.com/icemint0828/items/32aacfebed52be4fa40d)
php v8 + MySQL v8 connection

# データベースの設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/70910c14-83d5-e2f5-0b9a-5515303421fe.png)

# ソースコード
```php:index.php
<?php

define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'php_dev');

$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

if($conn->connect_error){
    die('Connection Failed ' . $conn->connect_error);
}

echo 'CONNECTED!';

$sql= 'SELECT * FROM feedback';
$result = mysqli_query($conn, $sql);
$feedback= mysqli_fetch_all($result, MYSQLI_ASSOC);

echo var_dump($feedback);

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

<h1>Past Feedback</h1>
<?php if(empty($feedback)): ?>
<p>There is no feedback</p>
<?php endif; ?>
<?php foreach($feedback as $item):  ?>
<div>
    <div>
        <?php echo $item['body']; ?>
    </div>
    
    <div>
        <?php echo $item['name']; ?> on <?php echo $item['date']; ?>
    </div>
</div>
<?php endforeach; ?>

</body>
</html>
```

# ブラウザ表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/8118bf1d-e2ae-d521-111f-83fb769b1f6a.png)
【Go】リリース直後の自作モジュールをgo getしてくれない問題について

# 経緯
先日Goで開発を行なっていた所、
自作したモジュールのプログラムを修正して更新しようとしました。

しかし、
最新のコミットのモジュールを**go get**しようとしても、
一向に**go.mod**のバージョンが書き変わりません。

`go env GOPATH`
で本体の場所を確認。
↓
コードを確認
↓
やっぱりプログラム変わっていない。。

# 試した事
`go clean -modcache`
でモジュールをクリア
↓
対象のモジュールを**go get**し直し
↓
修正前のモジュールを取得してきているようで、
変化なし。。

`@latest`を付けてもダメ❌
`@HEAD`でもダメ❌
`go get -u`でもダメ❌
`go install`でもダメ❌
で暗礁に乗り上げてしまっていました。

# 原因
調べていると、
proxyがモジュールの新規リリースを認識していない事が原因だと判明。

※明確な公式のソースは未確認です。
※個人ブログのtipsにより確認しました。
（記事下にリンクあり）

# 解決する為にやった事
対象のモジュールの最新のバージョンを確認
```
GOPROXY=direct go list -m github.com/hoge/fuga/go/app/rooting@HEAD

github.com/hoge/fuga/go/app/rooting v0.0.0-20221010092340-3qc15c3ef11a
```
↓
取得したバージョンを指定して**go get**
```
go get github.com/hoge/fuga/go/app/rooting@v0.0.0-20221010092340-3qc15c3ef11a
```
↓
書き変わった
```
go: upgraded github.com/hoge/fuga/go/app/rooting v0.0.0-20221010091705-5961bda086fb => v0.0.0-20221010092340-3qc15c3ef11a
```
# あとがき
完全にハマってしまい、
開発が滞りました。

この問題について、
さらに詳細なソースが分かる方がいらっしゃれば、
ご教示いただけると幸いです。

# 参考にさせていただいた記事
https://www.kaoriya.net/blog/2020/06/16/
https://text.baldanders.info/golang/mirror-index-and-checksum-database-for-go-module/
Microsoft SC-900試験受験振り返り

株式会社船井総研デジタルのよもぎたです。

つい先日、[受験準備編](https://qiita.com/t_ymgt/items/5a1d27ebc911c82fff01)を投稿しましたが、その次がいきなり受験の振り返りです。その間のアウトプットがないのは反省です。毎日のように学習内容のまとめをアウトプットしている同僚の[@fsd-jume](https://qiita.com/fsd-jume)を見習いたいものです。

[試験のページはこちら](https://learn.microsoft.com/ja-jp/certifications/exams/sc-900)、[資格のページはこちら](https://learn.microsoft.com/ja-jp/certifications/security-compliance-and-identity-fundamentals/)です。

### 試験結果と学習方法、今後（直近）について
昨日10/10に受験して、無事合格しました。分野別のスコアとしては、「セキュリティ、コンプライアンス、ID の概念について」は100%だったものの、他の3つ、Microsoftソリューションについては80%前後と、合格はしたものの不満の残るスコアでした。試験対策は、AZ-900試験同様、[Microsoft Learn](https://learn.microsoft.com/ja-jp/)での座学です。


自身の復習もかねて、試験範囲のMicrosoftソリューションのまとめ・整理を今週中にアウトプットしたいと思います。


### 座学で試験に合格（資格取得）することの是非について
座学だけで試験に合格してよいのか？資格取得して役に立つのか？というのは昔から議論されていることですが、個人的には、AZ-900試験、SC-900試験に関しては「座学で合格」でよいと考えています。（もちろん、実環境に触れているに越したことはないですが）。なぜなら、受験対象者としてビジネスユーザーや学生さんが含まれていて、エンジニアのためだけの試験ではないからです。試験内容の面からも、クラウドの基礎やAzureをはじめとするMicrosoftソリューションにどんなものがあるかを「知っている」のを証明する試験で、それを使って「何かができる」ことを証明する試験ではないと考えるからです。
AZ-900試験やSC-900試験に合格していることをもって実務で即戦力扱いするのが、試験内容・資格概要を理解していない行為だと思います。「基礎知識はあるんだね」位の認識が正しいと思います。

### 試験の振り返り
話がそれましたが、SC-900試験について振り返ってみたいと思います。

まず、試験範囲のおさらいです。
* セキュリティ、コンプライアンス、ID の概念について説明する (10 - 15%)
* Microsoft Identity およびアクセス管理ソリューションの機能について説明します (25-30%)
* Microsoft セキュリティ ソリューションの機能について説明する (25 - 30%)
* Microsoft コンプライアンス ソリューションの機能について説明する (25-30%)

一つ目の「セキュリティ、コンプライアンス、ID の概念」は、[情報処理技術者試験](https://www.jitec.ipa.go.jp/)の[情報セキュリティマネジメント試験](https://www.jitec.ipa.go.jp/1_11seido/sg.html)に近いなと感じました。クラウドに重点が置かれているなどの違いはあります。受験後に試験内容に踏み込むのは規約の面でアウトな気がするのであまり踏み込みません。しかし、Microsoft Learnの内容をしっかり読み込めば十分合格ラインに到達できると思います。

残りの3つの領域は、情報セキュリティに関して、決して深くはないものの、広い知識が求められます。さらに、それらに関連するMicrosoftソリューションの知識が上乗せで要求されます。私は前者はある程度あったものの、後者は詰め込みでした（言い訳）。
ここでネックになるのが、提供されているMicrosoftソリューションの幅広さと奥深さです。「[マイクロソフトは世界最大のセキュリティベンダ](https://qiita.com/t_ymgt/items/8ddbf77d82eefce1cbfe#%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88%E3%81%AF%E4%B8%96%E7%95%8C%E6%9C%80%E5%A4%A7%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%99%E3%83%B3%E3%83%80)」というだけのことはあります。

肝は[Azure AD](https://learn.microsoft.com/ja-jp/azure/active-directory/fundamentals/active-directory-whatis)と[Microsoft 365 Defender](https://learn.microsoft.com/ja-jp/microsoft-365/security/defender/microsoft-365-defender?view=o365-worldwide)に集約されると思うのですが、提供されている機能が多岐にわたるのはもちろん、一部エディションによる違いも考慮しないといけないのが大変でした。正直、この3領域はMicrosoft Learnだけでなくて、各ソリューション、プロダクトの紹介ページくらいは押さえておいた方がよかったと思いました。この辺りは追ってまとめたいですね、今後の自分のためにも。

### まとめ
いずれにしろ、合格できてよかったです。次は[AZ-104/Microsoft 認定:Azure Administrator Associate](https://learn.microsoft.com/ja-jp/certifications/azure-administrator/)を目指します。ざっと学習ガイドに目を通しましたが、ここからは実際の環境で手を動かしていった方がよさそうですね。楽しみです。

最後までお付き合いいただきありがとうございました。引き続きよろしくお願いいたします。
【Mac】snowsqlを有効化するまでの初期設定

snowsqlを有効化するまでの手順で戸惑った部分があったので残しておきます。

詳しくは以下を参照ください。

https://docs.snowflake.com/ja/user-guide/snowsql-install-config.html#installing-snowsql-on-linux-using-the-installer

## brew install
```bash
brew install --cask snowflake-snowsql
```
上記のコマンドを打つと、SnowSQLがダウンロードされます。

![スクリーンショット 2022-10-11 12.51.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/af1fb3a2-d5ff-53a1-9c57-f40de3e1e90e.png)

## chmodで権限を与える。

```
sudo chmod 777 /Applications/SnowSQL.app/Contents/MacOS/snowsql
```

## shellにaliasで登録する
```bash
alias snowsql=/Applications/SnowSQL.app/Contents/MacOS/snowsql
```

## snowsql -vとするとエラーが出るのでconfigを書き換える。
以下のようなPermission Errorが出てくる
![スクリーンショット 2022-10-11 13.04.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/1c5910be-d400-9fce-2ebf-ca019deb1705.png)

`vi ~/.snowsql/config`で`log_file`のパスを`~/snowsql/snowsql_rt.log`に書き換える。

![スクリーンショット 2022-10-11 13.05.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/b4bc5acb-4054-ddeb-2478-bad933e2ad66.png)



## snowsql -vで疎通確認

![スクリーンショット 2022-10-11 13.08.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/311a180b-113d-55ec-b062-f8e7b915e8f7.png)
Salesforce認定アドミニストレーター試験の公式練習問題を解説してみた-その050

こんにちは。本橋孝昭です。

Salesforce認定アドミニストレーター試験の公式練習問題があるのはご存じでしょうか。
Trailheadにフラッシュカードとして何度も解ける練習問題がございます。

今回はTrailhead
アドミニストレーター認定の準備: データと自動化
ワークフローと自動化の学習

にある練習問題6問目をご紹介します

なお今回の内容は動画でも紹介されています

https://www.youtube.com/watch?v=07rnYr-xbuw

<iframe width="560" height="315" src="https://www.youtube.com/embed/07rnYr-xbuw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


![50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/2b1fd338-22c9-3698-a9af-cb2db2bf1691.png)


今回の問題はこちらです

https://trailhead.salesforce.com/ja/content/learn/modules/administrator-certification-prep-security-and-data-management/study-up-on-security-and-access?trail_id=administrator-certification-prep



正解はAのデバックツールです




フローデバックの詳細はこちらのヘルプに書いてあります

Flow Builder でのフローのデバッグ
https://help.salesforce.com/s/articleView?id=sf.flow_test_debug.htm&type=5



失敗したフローのトラブルシューティングをする場合は、Flow Builder のデバッグオプションが便利です


実際のデバックの動きは動画でご確認ください
tcpdumpコマンド、メトリック、マルチホームについて

●デフォルトゲートウェイは、同一のホストで2つ同時に動作すると、ルーティングテーブル上どちらに送信するか判断が困難になる。
こうした重複した宛先に対するルーティングテーブル上のルートの比較には、通常、メトリックが用いられます。メトリックの値の少ない方が優先経路になる。

●マルチホーム
同一のホストにおいて、複数のインターフェイスや複数のIPアドレスなどにより、ネットワークへ接続する経路が複数ある状態のこと。

●Linuxをルータとして使用するためには、異なるネットワーク間（複数のネットワークインターフェース間）でのパケットの転送を許可する必要がある。パケットの転送を許可するにはsysctlコマンドでカーネルパラメータ「net.ipv4.ip_forward」の値を1に設定。

sysctl -w net.ipv4.ip_forward=1

sysctlコマンド以外にも、「/proc/sys」以下に存在するカーネルパラメータを操作するための仮想ファイルの内容を変更する方法もある。

echo 1 > /proc/sys/net/ipv4/ip_forward

※この2つの方法で設定した場合はすぐに反映されるが、再起動時に設定が失われる。

恒久的に（再起動後も）設定を有効にするためには、起動時に自動実行されるスクリプトを編集し、起動毎に設定したい値を変更するsysctlコマンドを実行するようにするか、「/etc/sysctl.conf」または「/etc/sysctl.d」ディレクトリ配下の設定ファイルに設定を記述。この場合、再起動前に設定を反映するには「sysctl -p」コマンドを実行。

● tcpdump コマンド
Linux では tcpdump コマンドを使うことで各プロトコルがどのような通信を行うのかや、不審な通信が行われていないか等を調べ、ネットワークインタフェース上を流れるパケットを監視（パケットキャプチャ）する。
tcpdump はユーザ権限で利用できてしまうとセキュリティ上問題があるため、通常 root 権限でのみ実行。

tcpdump [オプション] [監視対象の条件式]

主要なオプション
・-i 監視するインターフェースを指定
・-n 名前解決を行わずIPアドレスのまま表示
・-X 16進数とASCIIの表でパケットの内容を表示

「監視対象の条件式」部分では以下のような指定を組み合わせて使うことができ、条件に合致したパケットのみが表示。
条件式を何も書かなかった場合は、すべてのパケットが対象になる。

・host 続けてダンプ対象とするホスト(またはIPアドレス)を指定
・port　続けｔダンプ対象とするうポート番号を指定
・tcp TCPのパケットを対象とする
・udp UDPパケットを対象とする
・icmp ICMPのパケットを対象とする
・arp ARPのパケットを対象とする
・src 指定した送信元からのパケットを対象とする(続けて送信元をhost、port、IPアドレスなどで指定)
・dst 指定した送信へのパケットを対象とする(続けて送信元をhost、port、IPアドレスなどで指定)

■表示に関するオプションを指定しないで実行したとき、tcpdump の結果は、基本的に以下のような書式で表示される。

送受信時刻 プロトコル 送信元 > 送信先: 内容
Nucoインターン体験記



# 自己紹介
記事を読んでくださった方、ありがとうございます。
私は都内の大学に通う理系の(非情報系)大学４年生です。現在約1年ほど株式会社Nucoでインターンとして働いています。
今回、体験記を書く機会をいただいたので、きっかけや学んだことなどまとめてみます。この体験記がインターンを始めるか悩んでいる人の参考になれば幸いです。

# きっかけ
大学３年生まで教育系のバイトを長くやっていました。しかし、人に教えることで学ぶことは多いものの、大学も後半戦になり、自分自身に将来に役立つであろう知識や技能を身につけられる仕事を始めたいと考えていました。様々なインターンがありましたが、理系ということもありプログラミングに興味もあったため株式会社Nucoに応募しました。
元々はPCやネットの知識に乏しく、プログラミングも大学の授業でやった程度でしたが、結果として、業務上で得た技術的なスキルだけでなく、仕事での時間の使い方など、アルバイトとは異なる技能が身についたと思います。

# インターンの中身
1.具体的な業務
業務は個人によって様々ですが、私は言語はPythonを用いています。内容としてはウェブメディアに関するデータの解析や既存のサービスの移行などに携わっています。
実際に採用されると、PCのセットアップ、用いるソフトのインストールや環境構築などの準備の後、業務の説明などを受けて質問したり、調べたりしながら社員の手伝いのような形で業務を進めていきました。はじめは右も左も分からない状態でしたが、ある程度やり方がわかってくると自分で進めて、社員に疑問を逐一質問するような形になりました。


2.学んだこと
- プログラミングの知識
Pythonの基本的なコードの書き方や、標準ライブラリを使い慣れました。仕事を進める上での実際的なプログラミングについての知識が身についたのはもちろんですが、それまで苦手だった環境構築やファイルの整理など、基礎的な手続きへの忌避感がなくなったことはとてもプラスになったと考えています。

- 質問の仕方を考えるようになった
わからないことは沢山出てくるので、どう質問すれば回答者にとってわかりやすいかや、どう調べれば求める答えが出るかを考えるようになりました。質問内容を考えているうちに解決策を思いついたりもするので、わからないことを整理することは大切だと思います。

- より一般に問題の解決のやり方
仕事をしていると問題が山積みになって何から手をつければいいかわからなくなることも多いですが、一度やるべきことを整理して優先順位を考えるようになりました。プログラミングで起こる問題は、エラーが出たならエラーコードを読めば大体解決し、それでわからなければ調べれば似たようなエラーで困っている人がいることが多いので、エラーコードが大切だと痛感しました。しかしこれはプログラミング以外でも同様で、問題があれば落ち着いて何が具体的に問題なのかを整理していけば解決する問題が沢山あることに気づきました。これは日常生活にもこれから役立つと考えています。

-  楽をするために今頑張る
後々デバッグしたりする時の面倒を減らすため、その時多少面倒であってもよく使うものを関数やクラスとして切り出したり、できるだけ見やすくコードを書くように意識する様になりました。その結果、後々の苦労のために意識してちょっと遠回りすることを厭わなくなりました。この感覚は日常生活においても大きく活きていると感じています。(会員登録や家計簿など苦手でしたが、今ではコツコツ手続きを進めていける様になりました笑)

## 最後に
インターンは怖いな〜と思っている方もいると思いますが、実際にはプログラミングだけでなく日常生活などこれからもずっと役に立つことを学べる大変良い機会だと思います。私をしては、インターンで誇張でなく様々な考え方が変わったと思います。
興味があれば一緒に働けたら嬉しいです！
Insert failed. First exception on row 0; first error: MIXED_DML_OPERATION, 非設定オブジェクトを更新した後の設定オブジェクト上の DML 操作 (またはその逆) は、許可されていません: Account、元のオブジェクト: User: []

何でだろうなぁ。今まで機能していたのに急に動かなくなった感じです。


```
static testMethod void  Modal_mainTest() {
        User u = fkd_User.createTestUser();
        
        sobject[] recordTypeList = [select Id, Name from RecordType WHERE Name = '得意先' ];   
        Account myAcc = new Account(Name = 'xxxxxx',
                                    customer_code__c='14xyz',
                                    RecordTypeId = recordTypeList[0].Id
                                   );
        insert myAcc;
        
        Test.startTest();
        // 作成したユーザで処理を実行
        System.runAs(u){
            
			UpdateData.update_Account();            
        }
        Test.stopTest();
    }
```

System.runAs(u){の位置を変えるとエラーが消えた

```
static testMethod void  Modal_mainTest() {
        User u = fkd_User.createTestUser();
        // 作成したユーザで処理を実行
        System.runAs(u){
        
        sobject[] recordTypeList = [select Id, Name from RecordType WHERE Name = '得意先' ];   
        Account myAcc = new Account(Name = 'xxxxxx',
                                    customer_code__c='14xyz',
                                    RecordTypeId = recordTypeList[0].Id
                                   );
        insert myAcc;
        
        Test.startTest();
			UpdateData.update_Account(); 
        Test.stopTest();
        }    
    
}
```

[テストメソッドでの混合 DML 操作](https://developer.salesforce.com/docs/atlas.ja-jp.238.0.apexcode.meta/apexcode/apex_dml_non_mix_sobjects_test_methods.htm)

しかし、本番環境にはこの書き方のテストクラスがいっぱいあるけど、デプロイしてもエラーにならなかったです。
もしかしてsandboxだけの問題かな？

単にこの書き方が悪るいのかもしれない。
ユーザを作るプロセスと他のレコード作成プロセスをTest.startTest()あるいはSystem.runAs(u){で分けたら問題ない。
【Unity】Unity認定プロフェッショナル：プログラマーの概要と体験記

# 背景
2022/07/16 に [Unity認定プロフェッショナル：プログラマー](https://unity.com/ja/products/unity-certifications/professional-programmer) に合格したので、受験を試みている人に向けて記事を書こうと思いました。

# 一読推奨ページ
[よくある質問（ページ下部）](https://unity.com/ja/products/unity-certifications)
[ドキュメント（サンプル問題あり）](https://images.response.unity3d.com/Web/Unity/%7B2f80c889-b1bd-4f28-a72f-ed9dd5369423%7D_UCP_Exam_Objectives_JP.pdf)

# 試験の概要

|質問|回答|
|-|-|
|利用規約|[利用規約全文リンク](https://unity3d.com/legal/terms-of-service/certification-program)|
|開催場所|[オンライン・オフライン](https://www.pearsonvue.co.jp/Clients/Unity-Certification.aspx)|
|問題数|アソシエイト:100問<br>他:40～70問|
|所要時間|アソシエイト:90分<br>プロフェッショナル:105分<br>エキスパート:165分<br>（+利用規約を読む時間:15分）|


問題文は日本語でした。
大体4択問題です（一部、4択の組み合わせ問題や4択以上の問題もありました）。
問題は再確認・再回答が可能です。誤答による減点はありません。
200～700点の内、500点以上で合格です。問題の正解や配点は発表されません。
Unity認定資格は3年間有効です。資格の維持には再受験が必要です。

### 不合格の場合
再受験には15日以上の待機期間が必要です。2度不合格の際は最低90日以上の待機期間が必要です。
スコアの再評価や返金はできません。

### 主な出題形式

- ゲーム開発で起きた問題に対して、問題を解消できるコンポーネントのプロパティやProjectSettingsのプロパティを選択
- 色々なゲームの要件に対して、適切な手法・設計・機能を選択

# 体験記

## コースウェア・模擬試験
受験をするにあたり、[コースウェア & 模擬試験 & 試験のバンドル](https://unityedustore-global2.pearsonvue.com/unity-certified-professional-programmer-bundle-certification-and-courseware/p/BDL-UCPP-CRT-12CW) を購入しました（経費）。
コースウェアは全文英語でしたが、映像に日本語字幕を表示したり文章をGoogle翻訳にかけたりすれば、一応読み進められました。Unityでゲームを作った経験が少ない人には参考になるような内容でした（コースウェアの代わりに、日本語でUnityを解説している動画や記事を見て勉強しても良さそうです）。
模擬試験は、約95問の模擬問題を2か月の間、何度も見たり解いたりできるといった内容でした。模擬問題は実際の試験にも出てきそうな感じでした。
試験日2週間前からは、模擬試験の問題を解きながら、分からない用語や曖昧に理解している用語を調べ直していきました（問題文は英語なのでGoogle翻訳を使いました）。
問題文の翻訳には[Google翻訳のアドオン](https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb?hl=ja)等を利用すると便利でした。
試験勉強にコースウェア・模擬試験を利用しない場合、[ドキュメント](https://images.response.unity3d.com/Web/Unity/%7B2f80c889-b1bd-4f28-a72f-ed9dd5369423%7D_UCP_Exam_Objectives_JP.pdf) の**認定試験のトピック**に書かれている項目と一致する項目を [Unityマニュアル](https://docs.unity3d.com/ja/current/Manual/UnityManual.html) から探して、問題になりそうな箇所を中心に読むと良さそうです。

## 試験会場

はじめはオンライン受験を予約したものの、他の方の受験ブログを読んでオンライン受験が困難に思い、予約をキャンセルしました。予約に使ったバンドルのキーは再度使えたので、今度はピアソンテストセンターを予約してオフライン受験する事にしました。

## 試験

他の方の受験ブログでは、試験時間に余裕があったと書かれている事が多かったですが、私は終了直前まで悩みました。
試験後すぐに点数と合否が表示され、窓口で同様の内容が書かれた紙を貰えました。
結果は592/700点で合格でした。

## 感想

Unityで小規模なゲーム開発に慣れている人が勉強しないまま挑むと、ぎりぎり合格するかどうかといった難易度だと思いました。
テスト、VR、広告、課金、Unity Analytics、マルチプレイヤーといった幅広い知識が問われるため、[ドキュメント](https://images.response.unity3d.com/Web/Unity/%7B2f80c889-b1bd-4f28-a72f-ed9dd5369423%7D_UCP_Exam_Objectives_JP.pdf) の**認定試験のトピック**に書かれている知識が無いほど点を取るのが難しいと思いました。
模擬試験と[Unityマニュアル](https://docs.unity3d.com/ja/current/Manual/UnityManual.html)を沢山読んでおいて良かったです。
Railsでカラムにnull制約を後から設定する

# 目的
Postテーブルにある既存のtitleカラムに```null:false```を追加すること

# 設定方法
### migartionファイルの作成
```ruby
$ rails g migration ChangePresenseTitleOfPosts

create    db/migrate/20221008061033_change_presense_title_of_posts.rb
```

### migrationファイル追記
```20221008061033_change_presense_title_of_posts.rb
class ChangePresenseTitleOfPosts < ActiveRecord::Migration[7.0]
  def change
    change_column :posts, :title, :string, null: false
  end
end
```
### データベース反映
```Ruby
rails db:migrate
```

# まとめ
書き方としては
```ruby
change_column :テーブル名, :カラム名, :データ型, null: false
```
今回説明した上記の方法(change_columnメソッド)だけではなくて、change_column_nullメソッドでの方法(下記のリンク)もあります。
https://railsdoc.com/page/change_column_null
Nuxt3のlocalhostでhttps

Nuxt3の3.0.0-rc.11で`nuxi dev`と`vite`上でのIPv6とhttpsがサポートされたので使ってみます。

[Changelog：https://v3.nuxtjs.org/community/changelog](https://v3.nuxtjs.org/community/changelog)

## 新規Nuxt3のセットアップ

```
npx nuxi init nuxt-app
cd nuxt-app
yarn install
```

## mkcertのセットアップとオレオレ証明書の発行

### macの場合

```sh
brew install mkcert
mkcert -install

mkcert localhost
```

### Windowsの場合


自環境にないので検証していませんが、
[Chocolatey](https://chocolatey.org/install)を使ったインストール方法の紹介ですです。

```sh
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

cinst -y mkcert
mkcert -install

mkcert localhost
```

うまく作成できていれば`localhost.pem`と`localhost-key.pem`が生成されていると思います。

## スクリプトの変更

`--https`の指定と、`--ssl-cert`と`ssl-key`を指定したものを追加します。

```package.json
  "scripts": {
    "dev:ssl": "nuxt dev --https --ssl-cert localhost.pem --ssl-key localhost-key.pem",
  }
```

作成したスクリプトで起動

```
yarn dev:ssl

> Local:    https://localhost:3000/ 
```

`https://localhost:3000/`が確認できれば成功です。
Window11マシンを手に入れたので開発環境を構築する

# はじめに
3年ほどMacで開発をしてきましたが、自作PCを作ったのをきっかけにWindowsに乗り換えました。
今回はWindows11のPCでWSL2 + Ubuntu + Windows Terminal + HomeBrew(LinuxBrew) + Zsh + neovimな開発環境を構築する過程を備忘録がてら残せたらと思います。

# 構築
## WSL2 + Ubuntu
以下コマンドでWSL2のインストール、Ubuntuの最新版インストール、Windows上の各種設定まで実施されます。
powershellを管理者権限で開いて実行してください。
```
wsl --install
```
再起動するとUbuntuが起動するので、Ubuntuのターミナルから以下コマンドでwsl2がインストールされていることを確認してください。
```
wsl.exe -l -v
```
実行結果は以下のようになります。
```
  NAME      STATE           VERSION
* Ubuntu    Running         2
```
これでWSL2とUbuntuのセットアップは完了です。

## Windows Terminal
以下リンクからWindows Terminalをインストールします。
https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701?hl=ja-jp&gl=jp
自分はひとまずフォントの設定、起動時の画面サイズの設定等々しておきました。

## Zsh
以下コマンドを実行してUbuntuにZshをインストールします。
```
sudo apt install zsh
```
インストールが完了したら、デフォルトのシェルをbashからzshに変更しましょう。
以下コマンドで変更できます。
```
chsh -s $(which zsh)
```
あとはoh-my-zsh、powerlevel10kあたりを使って便利なエイリアスを使えるようにしたり、テーマを自分好みにかっこよくしたりしましょう！（ここ重要）

## HomeBrew(LinuxBrew)
パッケージをインストールするのが楽ちんになるので、HomeBrewをインストールしておきます。
公式サイトの手順に沿ってインストールしていきます。
https://brew.sh/index_ja
インストールが完了したらコマンドを叩いて動作確認しておきましょう。
```
brew
```
実行結果はこちら
```
Example usage:
  brew search TEXT|/REGEX/
  brew info [FORMULA|CASK...]
  brew install FORMULA|CASK...
  brew update
  brew upgrade [FORMULA|CASK...]
  brew uninstall FORMULA|CASK...
  brew list [FORMULA|CASK...]

Troubleshooting:
  brew config
  brew doctor
  brew install --verbose --debug FORMULA|CASK

Contributing:
  brew create URL [--no-fetch]
  brew edit [FORMULA|CASK...]

Further help:
  brew commands
  brew help [COMMAND]
  man brew
  https://docs.brew.sh
```

## ghqやらpecoやら
ソースの管理が便利になるので、個人的にghqとpecoは必須だと思います。
以下コマンドで入れちゃいましょう。
```
brew install ghq
brew install peco
```
pecoのキーバインドはお好みですが、自分はctrl+]で設定しています。
設定は.zshrcに記述。
```.zshrc
# Peco
function peco-src () {
  local selected_dir=$(ghq list -p | peco --query "$LBUFFER")
  if [ -n "$selected_dir" ]; then
    BUFFER="cd ${selected_dir}"
    zle accept-line
  fi
  zle clear-screen
}
zle -N peco-src
bindkey '^]' peco-src
```

## neovim
自分は普段、vscodeか言語によってはintelliJを使用してきたので、完全なるvim初心者です。
学習コストがかかるためハードルが高かったのですが、PCを買い替えて心機一転、ついでにvimmer見習いにもなってしまおう！ということでvimの環境構築していきます。
自分の場合はneovimを使っていきます。

まずはインストールから。
```
brew install neovim
```
動作確認。
```
nvim
```

あとは細かい設定を作り込んでいくのがvimmerへの第一歩らしい。
まずはneovimの設定ファイルを作成します。（インストール時に自動生成はされないので注意）
```
cd ~/.config
mkdir nvim && cd nvim
touch init.vim
```

あとは設定を好きなようにしていきましょう。
このあたりは色々試してみて、また別記事でまとめようかと思います。

# おわりに
ざっくりとですが、新しいPCで開発できる環境が最低限整ったかと思います。
今後もより快適に開発ができるようアップデートできればと思います！
それではまた！
ターミナルの表示異常を直す

# 環境


- GNOME端末 Version 3.44.0 for GNOME 42


```
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04 LTS
Release:	22.04
Codename:	jammy
```

# 試験症状：カーソルを消す

文字化けだとかもテストしたかったけれどもバイナリを cat しても文字化けが再現できず、仕方なくカーソルが消えた症状をターゲットとしました。

```
$ echo -e "\e[?25l"
```
とするとカーソルが消えます。

カーソルを再表示させるには?

# echo でエスケープシーケンス

```
$ echo -e "\e[?25h"
```

で表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/4a04bd40-5b02-e13a-3b8f-b713dbb87888.png)

# GUI メニュー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a4613da0-e1ce-b1bf-cb1f-57aba1baec91.png)
これの「リセット」でカーソルが出現します。

「リセットとクリア」だと画面もクリアされ、スクロールバックが使えなくなります。

# reset コマンド


```

$ reset

```
先の「リセットとクリア」と同じように画面もクリアされ、スクロールバックが使えなくなります。

:::note
2024/7/6 追記

Debian で、タイプしたエコーバックが表示されない問題が発生しました。

上記の 「GUIメニュー」では直りませんでしたがこの「reset」コマンド、ないし下記の「tset」を発行したら直りました。

:::

# tset

先の reset コマンドの実体は tset コマンドです。
```
$ ls -alh /usr/bin/reset
lrwxrwxrwx 1 root root 4  7月  9 20:39 /usr/bin/reset -> tset
```
tset コマンドを単純に呼び出すようにすると、画面クリアせずにカーソルが表示されます。

```

$ tset

```
[Xcode14]Could not find a storyboard named 'Main' in bundle NSBundle

バンドルNSBundleで「メイン」という名前のストーリーボードが見つかりませんとのこと。
![スクリーンショット 2022-10-11 11.07.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/838b0544-5bcf-d89b-9f6a-d188663420b0.png)

今回はStoryboardなしで作業したいので、Mainがなくて当たり前なんですが、なぜかMainについて言われていたので。なんでだ？ってなりました。

なので、Mainで調べてみました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/733f0795-0171-4a87-d053-b435af08dac9.png" width=40%>

するとgenex？というところにMainがありました。

![スクリーンショット 2022-10-11 11.05.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/6dfe5a9d-61a3-0131-1962-5faea984fb04.png)

info.plistの場所が変わったんですね。genexの中のInfo.plist Valuesの中のMainを削除したらエラーが消えました。

半年ニートした後にflutterやったりAndroidやったりしてたらいつの間にかiOSを1年近く触ってなくて、久々に触ったと思ったら別のものみたいになってて混乱しました。

どなたかの参考になれば幸いです。
【VSCode】インストールしたら入れておきたい拡張機能

PCが新しくなるたびにどの拡張機能入れていたっけとなるのが面倒なので
Qiitaの初投稿としてまとめてみました。

## Japanese Language Pack for Visual Studio Code
VSCodeインストール時に既に紹介をしておりますが、VSCodeを日本語化してくれる機能です。

https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja

## vscode-icons
フォルダやファイルに言語別のアイコンが表示され見やすくなります

https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons

## zenkaku
全角スペース、全角英数字を検出して見やすくしてくれる拡張機能です。

https://marketplace.visualstudio.com/items?itemName=mosapride.zenkaku


##　indent-rainbow
インデントを色付けをしてくれる拡張機能です。めちゃくちゃインデントが見やすくなります。

https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow

## Edit csv
CSVをテーブルにしてくれる拡張機能です。ヘッダーと項目が見やすくなります。

https://marketplace.visualstudio.com/items?itemName=janisdd.vscode-edit-csv

## GitHub Theme
VSCodeのテーマを変更できます。おすすめは'GitHub Dark Dimmed'です。
めちゃくちゃかっこよくなります！

https://marketplace.visualstudio.com/items?itemName=GitHub.github-vscode-theme
Githubではまった


久しぶりにGithubに置いていたコードを触ろうと思ったら、TortoiseGitにアクセス出来ずてんぱりました。

Githubに確かにそこにあるコードを、TortoiseGitでクローンしようとすると、ログインに失敗し、git did not exit cleanly (exit code 128)　とエラー表示。

パスワードを間違えたのかと思って、何度も入力を試すも、何度も失敗！！！

認証を無視する設定にするとか、ツールバージョンアップするとか、いろいろと試してみましたが、お手上げ状態。

改めて調べると、2021年にパスワード認証が廃止されて、アクセストークン方式に代わっていたんですね。知りませんでした。しかもGithub自体にはパスワードでサインイン出来るもんだからそんなこと気づきませんでした。

https://qiita.com/shiro01/items/e886aa1e4beb404f9038
Dockerコンテナ内でyarn installを実行したら遅い上にエラーがでた

```
error An unexpected error occurred: "ENOTEMPTY: directory not empty, rmdir '/app/node_modules/.bin'".
info If you think this is a bug, please open a bug report with the information provided in "/app/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
```

# 状況
- ReactコンテナをDocker composeで立ち上げ、yarn installを実行
- 途中で止まる＆エラーが出て失敗(エラー文は↑)

# 環境
windows10 21H2
Docker Desktop 4.12.0

# 対処法
### ローカルのnode_modulesを削除してから再度実行する
エラー文から、ディレクトリが空ではないことが原因だと読み取れたので、ローカルのnode_modulesを削除
その後yarn installを実行すると成功(しかしとてつもなく遅い・・・・)

# 参考
https://stackoverflow.com/questions/64628315/how-to-solve-yarn-build-error-error-enotempty-directory-not-empty-rmdir-f
Google翻訳とDeepL翻訳を比較してみた

※前提
「〇〇が良い！」とお伝えしてしまうと、双方のサービスに申し訳ないため、「あるサイトを翻訳すると結果こうなった」という記事とさせて頂きます:bow:

## 翻訳って必要なの？
「私、英語できるので」ということではなく、日本語サイトで充分なのでは？
確かに、良質なサイト・良質なブログが多くあり、わざわさ海外サイトを閲覧しなくても良いんじゃない？と思いがちですよね。

私も、英語苦手で、Google検索で日本語サイトのみで検索していました💦
**だって。。。検索するとめっちゃ英語版サイトがヒットするし・・・。**
これはよくないです(笑)自ら機会を減らしています(笑)

なぜなら・・・
世界のデジタル競争力ランキングで見ると我が国は2022年9月時点で29位😿

>世界デジタル競争力ランキング、日本は29位に低下
https://www.jetro.go.jp/biznews/2022/10/1128218948d5f5df.html

::: note info
ちょっとズレますが、画像検索も良いですよ:relaxed:
なかなか目的の内容がヒットしない際には、画像で検索すると、「あっ！これこれ！」というケースがよくあります:sunny:
::: 

つまり、日本語サイトを否定しませんが、**海外サイトの方がより多くの情報を収集できる可能性**があります！

でも、英語みると、そーっと閉じてしまうんです。
分かります！でもそんなときには、Google翻訳やDeepL翻訳を積極的に使いましょう！

## Google翻訳
そのままですが、Googleが提供する翻訳サイトであり、テキストはもちろんですが、Webページ全体を翻訳してくれるサービスです。

## DeepL翻訳
ドイツに本拠地を置く、DeepL GmbHが提供する機械翻訳システムであり、Google翻訳より自然な翻訳ができると話題のようです。

## 比較してみた
弊社ホームページで比較してみました。
https://abridge-co.jp/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/91bd4827-ceed-d89d-c41e-b34f70877273.png)

### 日本語から英語
#### Google翻訳
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/02f12e10-1040-dc5b-ff33-50b3c30104af.png)
なるほど・・・

#### DeepL翻訳
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/b8eed9f4-ccfa-fda3-f28a-320525a0a2d9.png)
おぉぉっ！「？」つけてくれる:ok_hand:
英検4級の私でもわかる(笑)

### 英語から日本語
先ほど、英語に訳された文章を今度は日本語に翻訳してもらいます。
#### Google翻訳
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/c3447e4d-8413-0e29-4b20-abd4285d3018.png)

アブリッジではなく、エイブリッジでございます:sweat_smile:

”What is Abridge”に続けて「？」を付与して、もう一度翻訳してもらいます:grinning:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/8a99060c-209d-66ce-9161-c26ac12ab1ca.png)

変わらず。
ま、いっか:hand_splayed:


#### DeepL翻訳
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/059b52ce-0283-7319-ec75-7edb34981da3.png)

おぉぉっ！ちゃんと固有名詞として認識して頂いてありがとうございます:bow:

せっかくなので、「？」を外すしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/5ecdc993-bf1f-d4d1-4868-a14a6183b2ba.png)

変わらず固有名詞。
そりゃそうだ:ok_woman:

#### DeepLのChrome拡張機能
Chromeに拡張機能があり便利です^^
https://www.deepl.com/ja/chrome-extension
![2022-10-19_09h32_52.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2854030/85fceba5-a102-5b2e-833b-d04a95c092a7.gif)



## おわりに
今回は弊社のホームページを利用して、あまり差が分からないと思いますが、
様々な海外サイトで翻訳するとDeepL翻訳の方が精度高いのかな？という印象でした。

ただ、DeepL翻訳よりもGoogle翻訳の方が分かりやすいというサイトもありましたので、効率的ではありませんが、併用すると良いのかな？と感じました。

あまり有益な情報でなく申し訳ございません。。。
依存パッケージの脆弱性修正には、package.jsonのoverrides / resolutionsフィールドを使いましょう

## はじめに

この記事は、npmとyarnの依存関係ツリーを上書きする`overrides` / `resolutions`フィールドの使い方を共有するためのものです。

### 想定する環境

- node.js 16.17.1
- npm 8.15.0
- yarn v1.22.19

:::note warn
overridesフィールドは、npm [v8.3.0](https://github.com/npm/cli/releases/tag/v8.3.0)で導入されました。それ以前のバージョンでは動作しません。
:::

:::note warn
この記事は[yarn v1](https://classic.yarnpkg.com/lang/en/)系統を対象としています。[yarn v2+](https://yarnpkg.com/)では挙動が変わるかもしれません。各自でご確認ください。
:::

## 依存関係ツリーを上書きして脆弱性に対応する

依存パッケージが以下のような状態だと、セキュリティ更新に追従するのが難しくなります。

- 脆弱性を持ったパッケージに依存している
- メンテナーが不在で更新がない

そこで導入された機能がpackage.jsonの`overrides` / `resolutions`フィールドです。

## npmの場合

https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides

`overrides`フィールドは、依存パッケージ内のバージョンを固定します。

以下の場合、依存パッケージ内の`foo`パッケージはすべて1.0.0に固定されます。

_▼package.json_
```json
{
  "overrides": {
    "foo": "1.0.0"
  }
}
```

特定のパッケージ内の依存パッケージのみを上書きすることもできます。

_▼package.json_
```json
{
  "overrides": {
    "foo": {
      ".": "1.0.0",
      "bar": "1.0.0"
    }
  }
}
```

特定の依存パッケージ内だけバージョンを固定する場合、overridesフィールドをネストします。この例の場合`.`は自分自身を指し、`foo`は1.0.0に固定されます。また、`foo`から参照される`bar`も1.0.0に固定されます。

## yarnの場合

yarnの場合`resolutions`フィールドで依存関係ツリーのバージョンを上書きします。

https://classic.yarnpkg.com/lang/en/docs/selective-version-resolutions/

_▼package.json_
```json
{
  "resolutions": {
    "d2/left-pad": "1.1.1",
    "c/**/left-pad": "^1.1.2"
  }
}
```
resolutionsフィールドとoverridesフィールドの違いは、特定の依存パッケージ内のバージョンの指定方法です。overridesフィールドはパッケージ情報を階層化しますが、resolutionsではキーを[Glob](https://github.com/isaacs/minimatch#readme)で記述します。

https://yarnpkg.com/configuration/manifest#resolutions

なお、v2以降の公式ドキュメントはこちらです。v2以降のyarnをご利用中の方は、こちらもあわせてご確認ください。


以上、ありがとうございました。
Windows10の新規作成メニューにPowerShellスクリプトを追加する

# はじめに
Explorerの新規作成メニューに「新規 Windows PowerShell スクリプト.ps1」を追加する方法をまとめてみた。

:::note warn
本手順ではユーザ毎に管理されるテンプレートを使用します
:::

# 手順

## 1.テンプレートファイルを用意する

### 1-1.テンプレートフォルダパスを調べる
PowerShell Host にて``[Environment]::GetFolderPath("Template")``コマンドを実行。

### 1-2.テンプレートフォルダパスにPoWerShellスクリプトファイルを作成
```powershell:NewPowerShellScript.ps1
function 動詞-名詞 {
  [CmdletBinding()]
  Param(
  )
  Begin{
  }
  Process{
  }
  End{
  }
}
```

## 2.[.ps1]ファイルに新規作成レジストリを追加する

1. レジストリエディタを開く

2. 「HKEY_CLASSROOT\.ps1」にレジストリキー「ShellNew」を追加
3. 「ShellNew」に文字列を追加し
名前：FileName
値　：NewPowerShellScript.ps1