OmniAICreator/Qiita-1.07M huggingface dataset:
Macでのpythonプログラミング環境の構築

落合陽一方式でまとめる

### 何をした？

最近macを手に入れ、そのプログラミング環境、特にpythonのプログラミング環境が欲しかったので、ちゃちゃっと構築する。

### 何が新しい？

特に他の記事に比べて新しいことはないが、自身にとってmacが初であり、またvscodeを使っている人が便利そうで使ってみたかったので、使い始めてみたかった。

### 実際の方法は？　

#### インストール関連
1. まずは、vscodeを[ダウンロードサイト](https://code.visualstudio.com/download, "Download Visual Studio Code")より入手、インストール
1. 自身のダウンロードフォルダに格納されてしまうので、視認性を良くするため、ドラッグ＆ドロップにてアプリケーションフォルダへ移動
1. python環境はanacondaを[サイト](https://www.anaconda.com)よりインストール
1. anacondaはbaseだと扱いにくいので、一つenvironmentsを作っておく。Anaconda-Navigatorを起動し、HomeタブからEnvironmentsタブへ移動。Createボタンをクリックして環境を作成。今回はpython3.9.16をpy39という名前で作成

#### vscode環境とanacondaとの連携　

1. vscodeの右側のアイコンから拡張機能追加に進み、pythonをインストールする
1. vscodeにpathを通す通す。設定を開き、Python: Default Interpreter Pathに、```conda info -e``` から得られるpathを入力する
1. code作成後、右下からpy39を仮想環境として選択

### 他のウェブサイトを参考に追加

1. macの初期設定として色々と変更した方が使いやすく[参考サイト](https://www.youtube.com/watch?v=J5e8Rv80bbk)を見ながら設定を実施。具体的には、dockの大きさの変更、Finderの情報追加、デスクトップ設定、指紋追加、デスクトップ画面追加・壁紙変更、Mission Control機能追加
1. トラックパッドの使い方を[参考サイト](https://support.apple.com/ja-jp/HT204895)を見ながら理解。
    1. 二本指：右クリック（クリック）、拡大縮小/Safari全タブ表示（ピンチ）、スクロール（上下スライド）、前と後ろ画面への移動（左右スライド）
    1. 三本指：LaunchPad(親指＋三本指でピンチ)、別デスクトップへ移動（左右スライド）、デスクトップ全体表示（三本指で下スライド）
1. [参考サイト](https://qiita.com/naru0504/items/29d54d91e7823732ab9b)を見ながら nano -> vim へ変更


### どうやって有効と検証した？

1. codeだけ書く場合：spyderを過去利用し、F9でコンソールで実行しながら確認していた。rstudioと使い勝手が似ており、かなり使いやすく、それと比べると使いにくい
1. jupyter notebookと組み合わせる場合：かなり使いやすいかも。関数などをノートで作ってそれを.py に変えていき、メインの検討コードだけjupyterで書くような運用がやりやすいのかも


### 別の視点はある？

1. pycharmは今回未検証
1. 代表的なシチュエーション、たとえばデバッグする場合、web開発
1. 他のコードを書く場合
1. こちらに良記事あり　[link](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504)

### 次は何をする？

1. 実際に使ってみる
1. 他必要ツールの導入（思いつくのはコード管理：sourcetree）
非エンジニアにシステム開発を教える側になって気づいたこと

# はじめに
非エンジニアの友達が、Androidのカメラアプリの開発方法について教えて欲しいと言われ、レクチャーする機会を頂いた。指導者側になって、自分が指導する時に気をつけることについてまとめてみた。

# 指導する時に気をつけること
* スキル習得を目的とする
* スキル習得のプロセスを教える
* 生徒が考える&調べる時間を作る
* 事前準備は必要

## スキル習得を目的とする
❌：システム完成
⭕：スキル習得

カメラアプリの開発はハードルが高すぎて、スキルが身についていない感じがした。なので、システムを完成させることではなく、まずは**スキルを身に着けるために基礎を教えた方が良い**。

## スキル習得のプロセスを教える
❌：スキル自体を教える
⭕：スキル習得のプロセスを教える

システム開発スキルを身に着けることが目的ではあるが、1から10までスキルを教えるべきではない。それだと一生教師が必要になってくる。いずれ1人立ちをすることを考えると、**スキルの身に着け方を教えるべきである**。

例えば、エラーが出た時の対処方法だったり、新機能を追加した時の検索方法など。そうでないと、エラーが出たり新機能を追加したりする度に教師が必要になる。

## 考える&調べる時間を作る
❌：何でも質問してもらう
⭕：自分で考えたり調べたりしてもわからなかったら、質問してもらう

分からないことがあったら何でも質問してもらうようにしていたが、そうではなく生徒側が自分なりに考えたり、調べたりする時間を設けることをお勧めする。それでもわからなかったら質問してもらうようにする。

## 事前準備は必要
❌：何も準備せずに教える
⭕：大まかな流れをイメージ&自分も躓きそうな箇所は前もって準備

時と場合によると思うが、事前準備は必要である。どういった流れで教えていくのかを考えたり、こちら側でも躓きそうな箇所は前もって調べることをお勧めする。

# 感想
* 人に指導することの難しさを再確認できた。
* エンジニアと非エンジニアのギャップを感じた。
* エンジニアという職業を客観的に捉えることができた。
【MySQL】複合インデックスを貼ってみた

# はじめに
ある問題が発生し、100万件超のレコードを更新する羽目になりました。
更新バッチを作成し、動作検証したところ処理時間に問題があり、さてどうしたものかと5秒悩んだ結果、インデックスを貼れば早くなるんじゃね？と安易な考えに辿り着いたので、脳内検証を行なった後、複合インデックスを貼ってみました。
結果、劇的に速くなり、無事メンテナンス時間内に完了させることができたので、備忘として残しておきます。

# 複合インデックス追加
```
ALTER TABLE table_name ADD INDEX index_name (column_1, column_2, column_3, ...);
```

# おわりに
複合インデックスを貼る際には、カーディナリテイが高いカラム順に指定しましょう。
因みにインデックスを貼る前後でどのくらい処理時間に差が出たかと言うと、インデックスを貼る前では数時間、インデックス貼った後では数分でした（・∀・）

# おまけ（インデックス削除）
```
ALTER TABLE table_name DROP INDEX index_name;
```

# 参考
・https://qiita.com/ichi_zamurai/items/a8e5e4a37faecf9cd77a
顧客分析の手順  - まとめ 感性を刺激するための分析

:::note
この本書は2017年4月1日にTeradata Japanのブログに掲載された内容を、再掲載したものです。
掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
:::


著者 山本 泰史 （やまもと やすし）

# 顧客分析の手順

## 最終回： 感性を刺激するための分析
前回までで、幾つかの分析フォーマットを駆使した分析手法、そしてそこに至るまでの手順について概観してきました。最終回の今回はまとめに代えて、分析の意義について整理します。

### 感性 vs. 理性？
良く、「データは過去のものであり、本当に必要なマーケティング上の情報やアイデアは、外部から得るしかない」といった主張や、「顧客は心理や感性に基づいて動いているのだから、データやそれに基づいた論理的結論はあてにならない」といった主張が見受けられます。一方でこれに対する反論として「すべては経済行動なのだから、合理的な選択の結果であり、すべて定量的な観点から把握できるはず」といった主張も存在します。

筆者としては、いずれも極論でしかなく、現実のマーケティングに携わる方々からすれば「（感性も理性も）使えるものはすべて使う」という貪欲な姿勢が重要であると考えます。別の言い方をすれば、データの観点から捉えた方が良い部分と、肌感覚や感性、センスで捉えた方が良い部分の両方があり、それらの両方を駆使することによってマーケティング活動がうまく行くのであれば、それで何の問題もないはずです。重要なのは結果であり、自らのアイデアが顧客に響き、顧客と共有できるかどうかです。イデオロギー的に、どちらかかに属さなければならないという理由はありません。

そして、各々のアプローチには相互に役割が存在しています。例えば、ある単一のキャンペーンが、企業活動の一環としてどの程度の経済的価値があるかを理解するのにデータ分析は役立つはずですし、一方でキャンペーンのメッセージ文言やクリエイティブの印象、もしくはもっと根源的なキャンペーンアイデアの発想はマーケティング担当者の感覚が捉えるしかありません。

さらに、この役割分担に加えて、データ分析と感性に依存したアプローチが相互補完的である点も注目すべきです。例えば自らの感性に従って、何らかのキャンペーンやそれを伝えるメッセージを作成したとしましょう。それがどの程度効くのかを定量的に捉え直してくれるのはテストマーケティング等を通じて得られるデータです。また、常日頃よりデータに慣れ親しむことができれば、徐々にデータが見せてくれる顧客の微細な変化にも気付くようになり、データの向こうにいる顧客に対して思いを巡らせることも容易となります。自らの感覚を鋭敏にするためにデータが役割を果たしてくれるのです。



### データを通じて「顧客に思いを巡らせる」
企業の商売は、顧客が自社の商品やサービスを購入してくれることによって成り立っています。一方で顧客の側では日々の生活を送っており、その中で必要な「何か」、を商品やサービスを購入することによって満たしています。これがニーズと呼ばれる概念ですが、このニーズには当然ながら人間である以上、もしくは日本人である以上共通している部分が存在します。一方でそのヒトの送る生活によって様々に異なる部分も存在しています。

企業は今日、社会生活の多様化、直接的／電子的なコミュニケーション手段の進展、企業競争の激化、人口の伸び悩みも含めた消費需要の減退といった理由から、共通性に根ざしたニーズだけでなく、多様性に根ざしたニーズも細かく拾い上げ、商売へと転換していく方向へと進んでいます。

このような状況下で企業が捉えるべき単位、それが顧客の「生活」です。「生活」は喩えるなら、ヒトの生活する風景を数分の動画に収めたようなものです。多くの人々がその主役にあてはまるシーン（朝食をとる風景）もあれば、比較的少ない人々しか当てはまらないシーン（交通事故に遭う風景）も存在することでしょう。ヒトはそれぞれの日常生活を移り進み、それが 1日、1週間、1ヶ月、1年といった形でつなぎ合わさって、人生が進んでいきます。これらの生活を、例えばあるセグメントを代表する 1人のヒトの生活として分析から想起することができれば、そこに求められている商品やサービスも想像し易くなるはずです。また、そのデリバリータイミングや経路も想像が容易になるはずです。たとえ解像度が悪く、写りはおぼろげであろうとも、そのヒトの生活を切り取った動画を頭の中に再生できているなら、分析はマーケティング担当者の想像力を確実に強化してくれています。

テクノロジーやチャネル、想像を超える量の顧客やデータといった介在物を通じてしまうが故に、モノゴトは複雑に見えるかもしれません。でも、突き詰めればそれは、「ヒト（マーケティング担当者）がヒト（顧客）を理解する」行為なのです。

分析の目的が行動であり、業績指標改善への寄与であることは本稿で述べてきた通りです。そしてそこに至るまでの本筋も、前回までで示してきました。これに加えて分析に好ましい副次効果があるとすれば、それは分析が顧客に対する想像力や理解力を豊かにしてくれることです。そこから得られた理解が、訴求力の高いキャンペーンを捻り出すための豊潤な土壌になることです。豊潤な土壌がもたらす力 - それは感度でもあり、定量的な理解に基づいた理知的なアプローチでもあるのですが、この能力が再度本筋である「行動と業績指標改善のための分析手順」にフィードバックされれば、この手順を廻す際のスピード、そして分析結果に基づく行動や意思決定の精度を改善してくれるはずです。




#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)
NPSP ファイルのアップロードができない


+ [Getting Error message: Can't Upload](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000O6rS0)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0ba2335a-360f-d2e1-2f6d-dedbe25e159b.png)

+ [Error 'Can't Upload' on attempt to attach or upload Files on a record](https://help.salesforce.com/s/articleView?id=000381870&type=1)


# おなじ？
+ [Error Message: `Can't upload` when Uploading into Files](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000O6riBSAR)
highlight panelのまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)


# タブレットバージョンでは7項目が出力されない

+ [Can't see all fields in highlight panel on Tablet](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgDq1SAF)

+ [Compact Layout Limitations and Considerations](https://help.salesforce.com/s/articleView?id=sf.compact_layout_notes.htm&type=5)

バグのような...

With the spring 22 release, we are seeing a drastic change on tablets, where only 4 fields from compact layout are visible in the highlights panel. Before this update, we were able to see more fields. Does anyone have a work around for tablet here?

+ [Allow more than 4 fields in Lightning Compact Layout](https://ideas.salesforce.com/s/idea/a0B8W00000GdaRbUAJ/allow-more-than-4-fields-in-lightning-compact-layout)

+ [Salesforce Mobile App Considerations forTablets](https://help.salesforce.com/s/articleView?id=sf.salesforce_app_ipad_considerations.htm&type=5)


# 変更が反映されない

+ [Compact Layout field changes not reflected in Lightning Highlights Panel](https://ideas.salesforce.com/s/idea/a0B8W00000GdiTvUAJ/compact-layout-field-changes-not-reflected-in-lightning-highlights-panel)

コンパクト レイアウト (5 つのフィールドのみ) のフィールドを変更すると、ハイライト パネルに変更が表示されることがあります。また、ハイライト パネルのフィールドが動かなくなり、コンパクト レイアウトへの追加の変更が反映されないこともあります。ログアウトして再度ログインし、ブラウザーを更新して、コンパクト レイアウトの割り当てを確認します。十分に長く格闘すると (待ってください?)、最終的に目的のフィールドを表示できるようになることがあります。 

+ [Field not showing in highlight panel](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000BsyZKSAZ)

他の誰かがこの問題に遭遇した場合。

1. ハイライト パネルに表示するフィールドがページ レイアウトにもあることを確認します。
オブジェクトの編集 > ページ レイアウト

2. コンパクト レイアウトで項目を更新すると、Salesforce の更新に時間がかかります。お茶やコーヒーを飲み、本を書き、ピアノを習い、画面を更新するかもしれません。

+ [Hi, I have added compact layout assignment.In selected field I select 3 fields but Highlight panel is showing only2 fields.First field name is not appearing. Please help me on this Thanks, Hema.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000O972v)

意味が分からん。

:::note
.I havent give space in between last and name thats why I am not able to complete module.
:::

# What is this section of visible fields called -- and what controls it?

+ [What is this section of visible fields called -- and what controls it?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgAfR)

:::note
In Lightning Experience

Setup | Users | Users

1. Select the name of the user.
2. Click Profile.
3. Under Apps, click Object Settings then click the object.
4. Under Field Permissions, click Edit.
5. Select the Read and Edit checkbox for the preferred fields they must see.
6. Save.
 

Fields Are Not Visible on a New Page Layout for Certain Users

https://help.salesforce.com/s/articleView?id=000385368&type=1
:::
Cognitive Services カスタム質問応答へのデータ取り込み

### はじめに

この記事は、[過去にご紹介した Power Virtual Agents と Cognitive Services によるボット開発](https://qiita.com/fsdg-honda/items/30cc711d064d96850958)に引き続き、Azure Cognitive Services for Language のカスタム質問応答機能について、調査、動作検証した内容を記載しています。
今回はナレッジベースのソースの指定方法に関する内容となっています。

### ナレッジベースのソース

既存の FAQ 文書や、マニュアルをソースとしてナレッジベースを構築することができます。
ソースには下記 3 種類のデータを利用可能です。

- URL: インターネットに公開されている FAQ、マニュアルの Web ページと連携できます。
- ファイル: PDF、テキスト、Excel 文書などをアップロードできます。
- Chitchat（おしゃべり、雑談）: 定義済みのデータセットに複数のペルソナ（プロフェッショナル、親しみやすいなど）が含まれており、これらを取り込むことができます。

### Web ページ URL からのナレッジベース更新

質問応答では、下記のような形式の Web ページがサポートされています。

- 基本的な FAQ ページ: 質問と回答が同じページにあり、質問の下に回答がある形式。
- リンク付き FAQ ページ: 質問が 1 か所に集約され、同じページ上の別のセクションまたは別のページのどちらかにある回答にリンクされている形式。
- トピック ホームページがある FAQ ページ: 各トピックが別ページの対応する質問と回答のセットにリンクされている形式。
- サポートページ: 特定のタスクを実行する方法、特定の問題を診断および解決する方法、特定のプロセスに対するベストプラクティスについて説明する Web の記事など。新機能で初期段階にあるとのことです。

具体的なイメージなどは[MS Learn のドキュメント](https://learn.microsoft.com/ja-jp/azure/cognitive-services/language-service/question-answering/reference/document-format-guidelines#faq-urls)に記載されています。

私が試したところ、下記のような基本的な FAQ ページでの構成では回答が取り込まれていることが確認できましたが、複数ページからなる構成では取り込まれない場合がありました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/5c8af409-13e9-9889-0edf-d0be336d54b1.png" width="480"/>

#### スマート URL 更新

ナレッジベースのソースとした Web ページが更新された場合、ナレッジベースの画面で対象のソースを選択し、「URL の更新」ボタンを押せば、最新の Web ページの内容が反映されます。新旧で回答が同じで質問が異なるといった場合は、ペアが複数できるのではなく、複数の質問に対応した一つの回答となるように統合されます。

### ファイルからのナレッジベース更新

質問列と回答列があるような、構造化された TSV、Excel スプレッドシートの他、質問と回答が交互に並ぶような Word 文書、製品マニュアルのような階層化された見出しのある PDF ファイルからもナレッジベースを更新することができます。
TSV（タブ区切りのテキスト）はサポートされていますが、CSV（「,」区切りのテキスト）はサポートされていないようです。

こちらも具体的なイメージなどは[MS Learn のドキュメント](https://learn.microsoft.com/ja-jp/azure/cognitive-services/language-service/question-answering/reference/document-format-guidelines#basic-document-formatting)に記載されています。

私が先程の基本的な FAQ ページから作成した PDF、Word 文書、質問と回答列から構成した Excel スプレッドシート、TSV ファイルで試したところ、全 6 項目のうち、取り込まれた項目は下記となりました。

- PDF: 4、先頭と末尾の項目が読み込まれず。
- Word 文書（.docx）: 6
- Excel スプレッドシート（.xlsx）: 6
- TSV: 6

Word 文書
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/68a9b56d-fa4f-352b-fc44-445cdf654e4a.png" width="480"/>

Excel スプレッドシート
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/b40ea60a-fcf9-922d-3871-dc37990de7e9.png" width="600"/>

### Chitchat（おしゃべり、雑談）の追加

ボットのパーソナリティを決めておしゃべりを追加できます。
試しに各パーソナリティのおしゃべりを追加し、それぞれに対して「すばらしい」と発言したときの回答は下記のようになりました。

- プロフェッショナル: お役に立てて光栄です。
- 親しみやすい: わあ、照れます！
- 機知に富んでいる: お世辞がお上手ですね。そういうの、好きです。
- 温かい: ありがとうございます。とても嬉しいです！
- 熱心: やったね！

追加したおしゃべりに対しても、新たに質問ペアを追加することが可能となっています。

### REST API による質問と回答の更新

REST API でソースや質問と回答のペアを追加、更新、削除することも可能です。
ソースが外部のシステムにあり、REST API が使える場合は、この形式で連携するとよいのではないかと思います。

### まとめ

カスタム質問応答機能ではナレッジベースのソースの指定方法が複数あり、既存の FAQ、マニュアルや標準で用意されたデータセットを利用できるようになっているように思います。
質問と回答がペアになっていないような文書や Web ページでも取り込んでくれる場合があるようですので、既存のデータがある場合はソースとしてナレッジベースに取り込まれるかを検証してみるとよいと思います。
Get-DateコマンドレットのFormatオプション"u"について

PowerShellの`Get-Dateコマンドレット`の`Format`オプションの`u` を利用した場合のメモ。

## 今回実行した環境

PowerShell 7.3.2

## ドキュメント

[Standard date and time format strings](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings#UniversalSortable)

## タイムゾーンが大阪、札幌、東京の端末で実行してみる

```powershell
Get-Date -Format "u"
```

現在のローカル時間をそのままオフセット考慮せずにutcとして出力するようです。

たとえば日本時間 2023年2月22日 09:00:00 に`Get-Date -Format "u"`と実行すると、`2023-02-22 09:00:00Z`と返却されます。

上記のケースで`2023-02-22 00:00:00Z`としたい場合は、下記のいずれかの方法でできました。

- Get-Date -AsUTC -Format "u" とAsUTCオプションを追加する。（`AsUTC`はPowerShell 7.1から追加されたオプション）
- `[DataTimeOffset]`にしてから`.ToString("u")`で出力

```PowerShell
Get-Date

Get-Date -Format "u"

# AsUTCはPowerShell 7.1で導入されたオプション
Get-Date -AsUTC -Format "u"

([DateTimeOffset](Get-Date)).ToString("u")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/66d8986c-29e4-5e6b-8bc5-1b4c57680353.png)

## 総評

PowerShellで日付周りは実際に実行してみると、自分だけかもしれませんが、そうなるのかといった動作がある気がします。
確認しながら、齟齬がないように気をつけたい所です。
[Android] [Kotlin] RecyclerViewやListViewで上部や下部の余白を均等に表示したい！

### できたこと
RecyclerViewやListViewでいい感じにPadding、Marginしたいけど、上手くできない方向けです。
例えば、RecyclerViewのItemをmargin="10dp"とした場合、
上部と下部は margin="10dp" できるんだけど、
間にあるItemは margin="10dp" + margin="10dp" で間隔が異なる。
それならbottomやendだけにmarginをつければいいや。ってなるかもしれませんが、
私は "全部均等に余白を作りたい" 派の人間ですので、
その方法を見つけました！

### レイアウト
```activtiy_main.xml
<RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="１0dp"
    //　コレ
    android:clipToPadding="false"/>
```

```recyclerview_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_marginTop="10dp">

    ~
    ~
    ~

</LinearLayout>

```

clipToPaddingは、Viewのpaddingが0でない場合、その子のViewに対して、paddingを適用"しない"かどうかを切り替えるものです。
適用しないかどうかなので、Trueで適用しない、Falseで適用するとなります。デフォルト値はTrueとなっております。

なので、paddingを指定した上で、clipToPaddingにfalseを指定すれば、RecyclerViewとその要素の間に余白を空けることができます！
是非試してみて下さい。
リーダブルコードを読んで腹落ちした内容を確認する。

# はじめに
リーダブルコードを読んで、納得感を持って理解できた部分をメモしていく。エンジニア初学者の自分が理解できたことと、数ヶ月後・数年後の自分が理解できることは違うと思うので、時々読み返したら新たに追記していこうと思う。

# 履歴
2023/2/18 初読

## 1章 理解しやすいコード
### コードは他の人が最短時間で理解できるように書かなければいけない。
他の人が自分が書いたコードを読んで理解し、修正・機能追加できるようになるまでの時間が少ないほど良い、ということである。
これまでなんとなく、わかりやすいコードにしないといけないと思っていたが、わかりやすいコードの定義というのは明確に考えていなかった。より早く理解できるようにするためにどうすべきかを考えていきたい。

# 第I部　表面上の改善
## 2章 名前に情報を詰め込む
### スコープが小さければ短い名前でもいい
定義されてから役割を終えるまでの範囲が狭い変数などには、名前にそれほど情報を詰め込まなくてよい。過去のコーディングの中で、明らかにすぐ役割を終える変数に、長ったらしい名前をつけた記憶があった。丁寧に名前をつけても理解するまでの時間に影響がないなら、短い方が良いなと納得できる。

### 不要な単語を投げ捨てる
なくなっても情報量に影響がない単語はなくしてしまおう、ということ。変数やメソッドの名前が長くなりがちな自分にとっては、考えなくてはいけないことだと思った。名前が長くなったら、とりあえず何個か単語を抜いて並べてみよう。

## 4章　美しさ
### 一貫性のある簡潔な改行位置
一貫性のあるコードには、適切な改行を行なって一貫性のあるコードにする。これについては読む前から実践できていた。ただ、綺麗に整列されたのに満足してコードが長くなることを許容してはいけないので注意する。

## 5章　コメントすべきことを知る
### コメントするべきでは「ない」こと
コードに書いてあることの抽出でしかないコメントには価値がない。自分のこれまでの学習を振り返ると価値のないコメントをたくさんしてきた。このコメントにより、情報が増えたかどうかを逐一確認する。

## 6章　コメントは正確で簡潔に
### あいまいな代名詞を避ける
コメントに限らず読み物すべてに通じるところがあるが、代名詞を不用意に使うと誤解やわかりづらさにつながる。不用意に使用した代名詞が原因で、作成したドキュメントに対して指摘を受けた記憶があったので注意したい。代名詞は名詞に変換を徹底する。どうしても使わないといけない場面もあまりないだろう。

# 第II部　ループとロジックの単純化
## 7章　制御フローを読みやすくする
### if/elseブロックの並び順
これまで基本的にif/elseは肯定形の条件を使うべきだと感じていたが、一概にそうではないそうだ。以下二つのことを考慮に入れて、否定形から始めるif/elseも検討する。
<dl>
    <dt>単純な条件を先に書く</dt>
    <dd>if/elseが同じ画面に表示されやすいので条件を忘れない</dd>
    <dt>関心を引く条件や目立つ条件を先に書く</dt>
    <dd>目立つ条件とそれ以外の構図にすることで理解しやすくなる。</dd>
</dl>

if/elseでロジックを書いたら、一度は入れ替えてみてこの2つの条件を検討するようにしよう。

### ネストを浅くする
自分が書いている時には複雑な条件をすべて理解しているため、ネストの深くまで行っても何をやりたいかがわかるけど、それは自分だけである。読み手の時は深いネストにとても苦痛を感じるのに、書き手になると全く注意できていないと思った。対策の一つとして、失敗ケースを早めに返して、ネストを浅くするよう意識してみる。

## 9章　変数と読みやすさ
### 変数のスコープを縮める
変数が見えるコード行をできるだけ減らすことが重要である。現職（もうすぐ前職になるけど）で扱っているCOBOLは、変数はすべてロジックと別箇所で定義しないといけなかったのでとても納得した。既存のロジックを追う時に、毎度毎度変数の定義を確認しにいくのはとても苦痛である。（可能であれば）変数の定義は変数を使う直前に行い、それが使用される範囲は可能な限り狭くすることが重要である。

# 第Ⅲ部　コードの再構成
## 12章　コードに思いを込める
### ロジックを明確に説明する
自分が書いたロジックを簡単な言葉で説明してみることで、複雑になったロジックを自然な形に単純化できるかもしれない。逆に、簡単な言葉で説明しきれない場合は、書こうとしているロジックのタスクが細分化されていない可能性が高い。相手を想像してロジックについて説明してみたうえで、自分が発した言葉を整理し、ロジックに落とし込む。

## 13章　短いコードを書く
### その機能の実装について悩まないでーきっと必要ないからプロジェクトに欠かせない機能を多く見積もってしまうのをやめようという話。不要なコードはない方がまし、ということである。この話題と完全に一致しているわけではないが、現職で似たようなケースに遭遇した。本番環境で動いているプログラムのテスト用プログラムに不要なバリデーション機能があったという話である。その不要なバリデーション機能のせいで、テスト用プログラムのために新しくインプットを一つ用意しなければならず、しかもそのインプットをストックして保守していた。（しかも実はバリデーション機能自体もロジックが誤っていて正常に動いていなかった。）

### 身近なライブラリに親しむ
既存のライブラリで解決できることは、ライブラリで解決しようという話。がんばって書いたコードがこの関数を使えば一発で書けていた、というのは自分も経験がある。「たまには標準ライブラリのすべての関数・モジュール・型の名前を１５分かけて読んでみよう。」という言葉に、とても納得した。

# 第Ⅳ部　選抜テーマ
## 14章　テストと読みやすさ
### 最小のテストを作る
テストコードが何をしようとしているかは基本的に１行で書くことができる。こういう入力を与えると、こういう出力が返ってくる。
当たり前のことだが、言われると納得した。結論ファーストで話すこととなんら変わらない。

# おわりに
最初に記述した通り、何度か読み返して腹落ちした部分を増やしていこうと思う。履歴のところが増えていって、いずれ本書の全文章がこの記事に書かれてるといいな。
Swiftのシミュレーター環境のCoreDataで保存したDBの中身を見る方法

CoreDataはsqliteというファイルを作ってデータを保存する。
このファイルを「DB Browser for SQLite」などのツールを使って中を見ることができる。
https://sqlitebrowser.org/

そのやり方をご紹介。

まずはターミナルで
```
cd ~/Library/Developer/CoreSimulator/Devices
```
に移動しEntityを作ったファイル名を確認する。
「XXXXXXX.xcdatamodeld」という名前なので「XXXXXXX」の部分を検索する
```
find . -name "XXXXXXX.sqlite"
```
と検索すると　DBの場所がわかる。hogeはEntityが入っているファイルの名前。
あとはツールで開けば見れる。

sqliteファイルの場所がわかれば、openコマンド使ってfinderでファイルの場所を開くこともできる。
```
open ~/Library/Developer/CoreSimulator/Devices/9A7E70B3-7EF1-4BF8-BB25-856930388994/data/Containers/Data/Application/E40C9D21-44D7-4EF7-A621-56D3D9DD29AD/Library/Application\ Support/
```
商談商品のまとめ


[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)


+ [商談商品を使った積上げ計算](https://qiita.com/Keiji_otsubo/items/500fdb3e19e9ad81fec3)
+ [商談商品にあるステータスの割合を表示する ロールアップサマリーフィールドの活用](https://qiita.com/Keiji_otsubo/items/34997176f17613fa4514)
+ [商談と商談商品に関係するバリデーションルールの考察](https://qiita.com/Keiji_otsubo/items/95577aa82cdd259f49a1)
+ [商談商品のレコードをメールテンプレートに表示する](https://qiita.com/Keiji_otsubo/items/0a63adf0c8697572cce1)
+ [商談の価格表の選択](https://qiita.com/Keiji_otsubo/items/004338ed4e71b4fa44bb)

# エラー

+ [Error Adding Product to Opportunity](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000BqZJrSAN)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/03e1334a-d08d-2e93-fecd-89a94c249f5e.png)

:::note
Solution: Update Price Book Sharing... Classic > Products tab > Manage Price Books > [select price book] > Sharing > update Price Book Sharing settings

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/af86e287-9916-c46d-c6f9-1dc7b88f0ecf.png)
:::

+ [Configure quotes for your customers and track contracts](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgDuXSAV)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0a67193e-8692-648c-6733-a66c64377346.png)


+ [Lightning Validation Rule error in opportunity product more informative](https://ideas.salesforce.com/s/idea/a0B8W00000GdVgbUAF/lightning-validation-rule-error-in-opportunity-product-more-informative)
初めてのvim【基本操作編】

## Vim概要
### Vimとは
>Vim（ヴィム。「ヴィアイエム」という読み方は誤り[2][3]）は、vi から派生し、発展した高機能なテキストエディタである。

https://ja.wikipedia.org/wiki/Vim

普段使っているVScodeやAtomなど便利なエディタがありますが、Vimを使うことで高速に編集することが可能なため、慣れてしまえば他のテキストエディタよりも便利に利用できるでしょう。

## Vimを操作するコマンド

### 起動方法
```
$ vim [ここにファイル名を入れる]

例えば以下のようなコマンド
$ vim firstvim.txt
```
上記コマンドでVimを起動することが可能です。
※先頭にある「$」は不要

### ファイルの操作
| Vimコマンド | 実行結果 |
|:-:|:-:|
| :w  |  内容を保存 |
| :q  | 終了  |
| :q!  | 強制終了  |
| :wq  | 保存して終了  |
| ZZ  | ファイルに変更があれば保存して終了、なければ上書きせずに終了  |

※個人的には一番下の`ZZ`が楽なので頻繁に使用しています


### カーソルの移動
| Vimコマンド | 実行結果 |
|:-:|:-:|
| h  |  左に移動 |
| j  | 下に移動  |
| k  | 上に移動  |
| l  | 右に移動  |
| 0  | 行頭に移動  |
| $  | 行末に移動  |
| w  | 1つ前の単語に移動  |
| b  | 1つ後の単語に移動  |
| gg  | 1行目(一番上)に移動  |
| G  | 最終行(一番下)に移動  |


### モード
Vimは最初の状態ではノーマルモードですが、ファイルに新しく記述したい場合等にコマンド一つでモードを切り替えることが可能です。

| Vimコマンド | 実行結果 |
|:-:|:-:|
| i  |  カーソルのある部分で挿入モード |
| a  | カーソルの後ろで挿入モード  |
| o  | カーソルのある行の下に新しい行を追加して挿入モード  |
| O  | カーソルのある行の上に新しい行を追加して挿入モード  |
| S  | カーソルのある行を削除して挿入モード  |
| v  | ビジュアルモード |
| ESC  | ノーマルモードに戻る  |


### 編集・削除

| Vimコマンド | 実行結果 |
|:-:|:-:|
| .  |  直前の変更を繰り返し |
| u  | Undo（変更1つ取り消し）  |
| Ctrl + r  | Redo  |
| x  | カーソルのある位置の文字を1つ削除  |
| X  | カーソルのある位置の1文字後ろを削除  |
| dd  | 一行削除 |
| dw  | 単語を削除（単語の先頭にカーソルがある場合）  |


### コピペ

| Vimコマンド | 実行結果 |
|:-:|:-:|
| y  |  コピー |
| yy  | 1行コピー  |
| p  | カーソルのある下の行にペースト  |
| P  | カーソルのある行にペースト  |
| 2yy  | 2行コピー  |
| 3yy  | 3行コピー  |
| 4yy  | 4行コピー(以降同様)  |
| d$  | カーソルの位置から行末までカット  |
| d0  | カーソルの位置から行頭までカット  |
| ddp  | 行をカット&ペースト(ddとpの組み合わせ)  |
| dwp  | 単語をカット&ペースト(dwとpの組み合わせ)  |

## 参考文献
私がVimを学習するにあたり利用したサイトを掲載します。
興味がある方は是非覗いてみてください。

■Vim日本語ドキュメント

https://vim-jp.org/vimdoc-ja/intro.html

■Udemy動画

https://www.udemy.com/course/vim-tmux-zsh/


それでは良いVimライフを。
[Blender]結合(Join)したオブジェクトを再びパーツで別れた状態に戻したい時

# 概要
キャラクターが完成した後「Ctrl + J」で全部結合したけれど、後でやっぱりバラバラのパーツ状態に戻したくなった。そんな時に便利な機能がBlenderにはあります。
# 本文
「Ctrl + J」で一つにまとめられたキャラクターオブジェクトがあります
![スクリーンショット 2023-02-22 6.25.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/e81d9ada-87b9-c9e7-6800-f8905a17248d.png)
Edit Modeにして全選択
![スクリーンショット 2023-02-22 6.26.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/0751d85e-19a7-6ded-b6d0-b6aab3ad5f6b.png)
Mesh > Separate > By Loose Parts
![スクリーンショット 2023-02-22 6.26.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/afc67348-eec0-b475-d283-8a251aaa3c5a.png)
これでパーツごとの状態に分割されます
![スクリーンショット 2023-02-22 6.27.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/72a7e144-485b-eea7-8f75-2e62fc5093e3.png)

:::note warn
Blenderが構造を分析して分けてくれるだけなので **結合前の状態を再現してくれるわけではありません。** 完全に元に戻るわけではないのでご注意ください。
:::
WSUSの設定確認コマンド


`WSUS`の設定だけ確認したい場合に、管理コンソールを使うと誤操作の危険性があるので、powershellコマンドで設定だけ参照

```powershell:powershell
> $wsus = Get-WsusServer -Name WSUSサーバ名 -PortNumber 8530
> $wsus.GetConfiguration()


UpdateServer                                  : Microsoft.UpdateServices.Internal.BaseApi.UpdateServer
LastConfigChange                              : 2023/02/21 21:35:09
ServerId                                      : 65709cdc-a83b-4b63-bb86-ebda292115c1
SupportedUpdateLanguages                      : {he, cs, fr, es...}
TargetingMode                                 : Server
TrackDynamicCategories                        : False
SyncFromMicrosoftUpdate                       : True
IsReplicaServer                               : False
HostBinariesOnMicrosoftUpdate                 : False
UpstreamWsusServerName                        :
UpstreamWsusServerPortNumber                  : 8530
UpstreamWsusServerUseSsl                      : False
UseProxy                                      : True
ProxyName                                     : 192.168.0.15
ProxyServerPort                               : 3128
UseSeparateProxyForSsl                        : False
SslProxyName                                  :
SslProxyServerPort                            : 443
AnonymousProxyAccess                          : False
ProxyUserName                                 : user01
ProxyUserDomain                               :
HasProxyPassword                              : True
AllowProxyCredentialsOverNonSsl               : True
AllUpdateLanguagesEnabled                     : False
AllUpdateLanguagesDssEnabled                  : False
AllUpdateLanguagesUssEnabled                  : True
```

こんな感じで設定が見れる。
SFDC世帯＆関連顧客管理の設定

### 要件
CRM管理は取引先と取引先責任者、個人間の関係を管理するものです。
取引先、取引先責任者はぞれぞく親IDを持ち、Hierarchy（階層）構成ができるが、あるアカウント（取引先）の全部関連ものは図形化表示することはARC（ActionableRelationCenter）で表示できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/3c465743-06e9-3b9f-1f0b-1107920d7705.png)

### 参照
Public Sector Solutionsという政府、区域と人の証明書手続きソリューションの中の一つ概念です。関係するものは可視化することです。
https://help.salesforce.com/s/articleView?id=sf.psc_household.htm&type=5

### 設定
上記参照リンクより。七つステップがある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/cf87ec49-e0f0-2606-8949-23ee4a5d92e1.png)

#### ①　Group Membership有効化
クラウドライセンスより、場所が変わることがある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/d1352742-8c40-c157-e4f6-44008ba7bd3a.png)
始めてParty関連オブジェクトが出で来る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/3e93e2ab-e2ed-49bf-4a29-536ba3a6298c.png)



#### ②③　説明通りにRelated Contactsを追加
結果は下記ようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/26593efd-bfa0-5fab-9b5c-973ccb042ddf.png)
#### ④⑤⑥　説明通りに、世帯関係レコートが作成し、メンバー追加ができる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/8eee1b5c-9eb6-4855-1e44-0cb6aee6b4f6.png)

#### ⑦　成員とグループ関係設定（ContactとContactなど）②と似ている
　　割愛
### 図形化
設定にアカウント用のARCを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/a27fd7dd-e836-df6a-385c-4ebc633f893f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/9204a477-f081-ea04-c8c0-4f1f3a6b5bba.png)

アカウント画面に配置する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/8365aaf2-7a00-c332-cc43-4a42b958503b.png)
【GitHub Actions】actions-ecosystem/action-regex-matchを使っているとWarningが出る件

GitHub Actionsでは、ワークフローの実行中にさまざまなタスクを自動化するために、アクションが使用されます。
アクションは、GitHub上で他の開発者が共有することができるツールで、既存のアクションを組み合わせることで、柔軟性の高いワークフローを構築することができます。

`actions-ecosystem/action-regex-match`は、GitHub Actionsで利用可能なアクションの一つで、文字列に対して正規表現を適用し、マッチした結果を出力することができ非常に便利です

しかし、ある日から以下のようなエラーがactionsの画面上で出るようになりました

```
Node.js 12 actions are deprecated. Please update the following actions to use Node.js 16: actions-ecosystem/action-regex-match@v2. For more information see: https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/.

The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
```

どうやら2023年5月31日に動かなくなると言っているようです

# やったこと
単純にバージョンアップすればいいのですが、どうやらこのツールはしばらくアップデートされていない(更新されていない)ようです [現時点: 2023/02/22]

そのため、有志が作成した以下のツールに置き換えを行いました
`KyoriPowered/action-regex-match`

https://github.com/KyoriPowered/action-regex-match/


### 置き換え前
```
uses: actions-ecosystem/action-regex-match@v2
```

### 置き換え後
```
uses: KyoriPowered/action-regex-match@v3
```


これでWarningエラーが出ることなく動くようになりました
本来の `actions-ecosystem/action-regex-match` が更新されるといいのですが...
[streamlit]backgroud imageをつける

# やりたいこと
streamlitは簡単にフロントを作ることができる一方でデザインに関しては不自由です。
そんな時は背景画像だけ設定すれば良い感じに補えたりします。
トップページにmidjourneyで作った画像を入れただけでこんな感じ。~~肝心のデータ分析やらはちっぽけですが、~~ 壮大な感じを演出できます。

https://twitter.com/www_y118/status/1628098281376194560?s=20

# やり方
基本st.markdownでstyleごりごりに書いていくのが良さそうです。
stAppが表示部分なので、怒られそうですがここを変更します。

```python
import streamlit as st

def render()->st:
    bg_img = '''
    <style>
    .stApp {
      background-image: url("https://url");
      background-size: cover;
      background-repeat: no-repeat;
    }
    </style>
    '''

    return st.markdown(bg_img, unsafe_allow_html=True)
```

表示したいページでrender()してください。
また、他のコンポーネント単位でも同様にスタイリングが可能です。

```python
st.markdown('''
<h1 style='font-size: 64px; font-family: serif; text-align: right; margin-top: 84px;'>title</h1>

<div style='font-size: 12px; width: 28rem; text-align: right; margin: auto 0 auto auto'>hogefugapiyo</div>
''', unsafe_allow_html=True)
```

# Tips
ちなみに画像は手っ取り早くgoogle driveに上げて表示するのが楽でした。
```python
url("https://drive.google.com/uc?export=view&id=[共有リンクの/viewの前のid]")
```
2023/2/22主にITとかセキュリティの記事

PHPにセキュリティアップデート - 脆弱性3件を修正
https://www.security-next.com/143880

「Git」に脆弱性、アップデートを - GitHubやGitLabも対応
https://www.security-next.com/143877

Fortinet、脆弱性40件を公表 - 重要度「クリティカル」も
https://www.security-next.com/143868

メタバースセキュリティガイドラインの一部を公開 - 関連3団体
https://www.security-next.com/143863

若年層向けCTFのアジア選抜予選、「ACSC 2023」がまもなく開催
https://www.security-next.com/143884

三京商会、通販サイトから9000人分のカード情報流出(2/20)
https://www.nikkei.com/article/DGXZQOUE209ZF0Q3A220C2000000/

日系企業の海外子会社・関係会社がサイバー犯罪者に狙われる本当の理由(2/20)
https://forbesjapan.com/articles/detail/60981

“危ないWi-Fi”の原因「不正なアクセスポイント」に要注意　身を守るために知っておきたい「無線LAN攻撃の手口」とは(2/20)
https://news.yahoo.co.jp/articles/bcdd8c948d929e85a5dc391ee297345ad1e7792f?source=rss

通販サイトで8700人余りのカード情報流出か 不正利用の疑いも(2/20)
https://www3.nhk.or.jp/news/html/20230220/k10013985991000.html

ATMで本人認証、セブン銀行が新システム(2/20)
https://www.nikkei.com/article/DGXZQOUB205P70Q3A220C2000000/

セブン銀行、「ATM認証コード発行サービス」を提供開始(2/20)
https://www.nikkei.com/article/DGXZRSP649699_Q3A220C2000000/

Imperva、金融業界のサイバー脅威調査を発表 攻撃の約3割が金融サービスを標的に(2/20)
https://enterprisezine.jp/news/detail/17393

AI使う詐欺メールの脅威　日本企業は認証技術で後手(2/20)
https://www.nikkei.com/article/DGXZQOUC107EJ0Q3A210C2000000/

クレカ情報の防壁に穴　ECサイトで流出1万4000件以上か(2/20)
https://www.nikkei.com/article/DGXZQOUE075XO0X01C22A1000000/

［新電力顧客情報不正閲覧］関西送配電・関西電力、閲覧数は約１５万件に拡大(2/20)
https://www.denkishimbun.com/archives/263439

やってはいけない！空き巣に狙われるゴミの捨て方(2/20)
https://agora-web.jp/archives/230219073814.html

いざというときに役立つかも……マルウェアが破壊したOS機能を復旧するフリーソフト
勝手に無効化されたOS機能を復活させたり、改竄されたレジストリキーを元の状態へ(2/20)
https://forest.watch.impress.co.jp/docs/review/1479957.html

新たに500台超のVMware ESXiサーバがランサムウェアに感染、注意を(2/20)
https://news.mynavi.jp/techplus/article/20230220-2595285/

FileSystems.newFileSystem で Zip ファイルを扱える。ただし、バグったり例外が起きたりする場合があるので要注意。(2/19)
https://qiita.com/YujiSoftware/items/ebc2abe64953683bbcf7

GitHub Copilotが進化、脆弱性のあるコードパターンをAIで検出可能に(2/20)
https://news.mynavi.jp/techplus/article/20230220-2594994/

NECが「サポートが終わったPostgreSQLの修正パッチ」を作成するサービスを提供開始(2/20)
https://atmarkit.itmedia.co.jp/ait/articles/2302/20/news035.html

Coins of War：制裁をくぐり抜け、ロシア軍支援に使われる暗号資産(2/20)
https://www.coindeskjapan.com/174558/

ノルウェー警察はAxie Infinityのハッキングに関連して590万ドルを押収(2/20)
https://nextmoney.jp/?p=56792

「知らずにいるという暗闇晴れる」　中国の流出データでウイグル族が知る、不明家族の実態(2/20)
https://news.yahoo.co.jp/articles/6b08a4cd74d15cfa84a41bd9969e78a6ece2dc77?source=rss

欧米やOSS先進企業が注目する「ソフトウェアの部品構成表」の重要性
経産省による、SBOM導入の4つのシナリオ(11/15-11/17開催)
https://logmi.jp/business/articles/328118

第15回 産業サイバーセキュリティ研究会 ワーキンググループ1（制度・技術・標準化） 電力サブワーキンググループ(2/20)
https://www.meti.go.jp/shingikai/mono_info_service/sangyo_cyber/wg_seido/wg_denryoku/015.html

AWS・グーグル・MS・オラクル、公務員とベンダーに無償でクラウド人材育成へ(2/21)
https://xtech.nikkei.com/atcl/nxt/column/18/00001/07731/

KLabが社内システムの脆弱性を一掃へ、供給網のセキュリティー対策強化を訴求(2/21)
https://xtech.nikkei.com/atcl/nxt/column/18/00001/07714/

朝8時の設定ミスで正午に不正侵入を許す、埼玉大学のランサムウエア被害(2/21)
https://xtech.nikkei.com/atcl/nxt/column/18/00598/021000202/

ANAが旅客系システムを2025～26年度に刷新、JALとは異なる3つの特徴(2/20)
https://xtech.nikkei.com/atcl/nxt/column/18/00001/07733/
Forward RenderingでSpriteをライティングする方法とバグ、一時的な解決策(Unity)

# はじめに
https://unity.com/ja/features/2dtools
Unityでは2D専用のライティングシステム(2D Renderer)が用意されています。
この専用パイプラインを用いずに、通常のURP(Forward Rendering)でもスプライトをライティングさせることも可能ですが、ライティングの際に特定の状況でバグが生じたため、その再現と解決法を解説します。

# 環境
・Unity(2020.3.24f)
・URP10.9.0

## セッティング
### SpriteRendererの設定
![](https://storage.googleapis.com/zenn-user-upload/d26505e3c83f-20230221.png)
適当なGameObjectを作成しSpriteRendererコンポーネントを追加します。
![](https://storage.googleapis.com/zenn-user-upload/2a5cd9a79876-20230221.png)
右上の三点が連なった部分をクリックしてデバッグを選択し、SpriteRendererの**投影**と**影を受ける**をチェックします。スプライトでも影の生成、影を受けることができるようになりました。

### Shaderを作成
次に適当なShaderを作成してプロパティにテクスチャを追加します。**Reference**に_MainTexを設定することでスプライトの画像をマテリアルが受け取れるようになります。
![](https://storage.googleapis.com/zenn-user-upload/66f858a27621-20230221.png)

### Use Alpha ClipとTwo Slide
![](https://storage.googleapis.com/zenn-user-upload/21b63d3fd983-20230221.png)
・Alphaを透過するために**Use Alpha Clip**をオン
・両面を描画するために**Two Slide**をオン
デフォルトのSpriteRendererが用いるマテリアルはRenderQueueがTransparent(不透明)に設定されているためAlpha Blendを行うことができますが、今回はスプライトを不透明描画(Opaque)で描画したいため、AlphaClipをオンにして透過させます。
![](https://storage.googleapis.com/zenn-user-upload/8bdc8546a2e4-20230221.png)
出力のAlphaの値にテクスチャのAチャンネルを接続します。

RenderQueueの詳細な説明は省きます。ドキュメント等々を参照してください。
https://docs.unity3d.com/ja/2018.4/ScriptReference/Rendering.RenderQueue.html

## ライティング
![](https://storage.googleapis.com/zenn-user-upload/6bb03f990f48-20230221.png)
ライティングを行います。左右反転したい場合はSprite Rendererの反転ボックスをオンにしてください。問題なくライティングを行うことができます。

## バグと原因
この方法では以下の状況で正常にライティングが行えません。
・オブジェクトを回転させ裏面をライティングする
・スプライトのスケールを-1に設定してをライティングする
![](https://storage.googleapis.com/zenn-user-upload/a26ba1931aeb-20230222.png)
左側が回転を行っていない状態、右側がY軸周りに回転させた状態です。
ライティング結果が異なることが分かります。
![](https://storage.googleapis.com/zenn-user-upload/99475a6f8b32-20230222.png)
上記のような状況では裏面描画の際のノーマル値、タンジェント値、バイタンジェント値が若干弱いです。接空間自体が裏表で異なるようです。ノーマル値はShaderGraph内で修正することができますが、タンジェント値、バイタンジェント値は変更することができないのでShader Graph内の操作のみで完結する根本的な解決策はありません。



## 一時的な解決策
### ライティング方法を変更する
一時的な解決策としてはLit Shaderのライティング処理を切って独自のライティングを行うことです。
![](https://storage.googleapis.com/zenn-user-upload/00dad0fd47f1-20230222.png)
![](https://storage.googleapis.com/zenn-user-upload/8cfb7a5d8185-20230222.png)
Workflowを**Specular**に設定してBase ColorやSpecular Colorを真っ黒にすることでライティングの影響は受けない状態になります。ライティングの出力結果をEmissionとして出力すればPBRのライト結果を無効にした状態でカスタムライティングを行うことができます。
カスタムライティングはUnityの公式チュートリアルを参考にしてください。
https://blog.unity.com/ja/technology/custom-lighting-in-shader-graph-expanding-your-graphs-in-2019

Unlit Shaderを用いてもライティング処理は行えますが、Unlit Shaderではメインライト(Direction Light)やサブライト(Spot Light)のシャドウを受け取れないため注意してください。

# 終わりに
Unityの意図していない方法でグラフィックス処理を行うと度々問題に衝突します。URPの機能自体もバージョンごとに若干異なるので移行も大変なので、基本的な機能は安定してほしいなぁという感想です。
未経験からのエンジニア転職


初めまして。

初投稿になります。
今後転職活動と並行して記事を投稿していければと思っています。

# 自己紹介
__年齢__: `31歳`
__学歴__: `高卒`
__前職__: `医療器具の製造`
__使用言語__: `PHP & Laravel`
__ポートフォリオ__: `ジャーナリング(書く瞑想）アプリ作成`
プロシージャルなHeightMapを用いる方法(Unity)

https://www.youtube.com/watch?v=kZPKoC5IctQ&feature=youtu.be

# はじめに 
プロシージャルなHeightMapを用いる方法を解説します。

# 必要な知識
・Shaderの基礎知識
・Shader Graph(Unity)

# シェーダーの概要
![](https://storage.googleapis.com/zenn-user-upload/902e20bef975-20230221.png)
*ShaderGraphの全体像*
![](https://storage.googleapis.com/zenn-user-upload/108fba480617-20230221.png)
*ParallaxTangent*

　グラフの全体像とサブグラフ(ParallaxTangent)です。要点となるParallaxTangentはHeightを与えることで対応するUVオフセットを出力します。

# 視線方向に応じてサンプル位置を変える
　オフセット位置は接空間の視線ベクトル$\vec{V}$と任意のスカラー値$h$によって求めることができます。
![](https://storage.googleapis.com/zenn-user-upload/264c46083a9c-20230221.png)
　説明を簡単にするために$UW$座標で説明します。視線ベクトル$\vec{V}$　と　HeightMapによってできた凹凸の高さを$h$とします。求めたいオフセット位置を$x$とすると、成す三角形の相似比によって
$$\vec{V_u}:\vec{V_w} = x : h$$
 であることが分かります。
よって
$$x = \vec{V_u} / \vec{V_w} ・ h$$
　これで$U$軸におけるオフセット位置が求まりました。同様に$V$座標にも計算を行うことで$UV$のオフセット位置が求められます。

# テクスチャのサンプリング
　![](https://storage.googleapis.com/zenn-user-upload/e31848bb008e-20230221.png)
　テクスチャのサンプリングについては特別な説明はありません。得られたオフセットを任意のUVに足し合わせ、テクスチャをサンプリングすることで視差効果が得られます。HeightMapからノーマル値を計算して出力することで上記の動画と同じ見た目の結果になります。
 視差マップの問題点として、視差によって生じる射影を考慮できていないためHeightが強すぎたり、横から覗き込むように見るとテクスチャが歪んで見えます。
![](https://storage.googleapis.com/zenn-user-upload/0795e9c6c26d-20230221.png)
フレネル光で隠したり、ロケーションを限るなど工夫が必要です。

# 終わりに
　視差マッピングは単純な方法ではありますが、雲や宝石といった厚みのある表現に用いられます。それだけでなく複数枚サンプリングして厚みをもたせたりUVスクロールを用いて立体感を与える等々、様々な応用が考えられそうです。
【Swift】アプリアイコンのバッジを消す方法

Swiftでアプリアイコンのバッジを消す方法
## アプリアイコンのバッジを消す方法

applicationIconBadgeNumberを0にするだけ。

```swift
let application = UIApplication.shared
application.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge], categories: nil))
application.applicationIconBadgeNumber = 0
```

## 参考

https://developer.apple.com/documentation/uikit/uiapplication/1622918-applicationiconbadgenumber

## Swiftのお役立ち情報

https://wagtechblog.com/programing/swift-iphone-application-school

https://wagtechblog.com/programing/swift-textbook.html
Rustで文字列に特定の文字が含まれるかどうかを判定する方法

# contains

```rust
let s = "hello";
if s.contains("l") {
    println!("'l' is in the string!");
}
```
 指定した文字列が、対象の文字列に含まれる場合に true を、含まれない場合に false を返します。
もっとも一般的な方法かと。
戻り値：bool

# find

```rust
let s = "hello";
if s.find("l").is_some() {
    println!("'l' is in the string!");
}
```
指定した文字列が対象の文字列に含まれる場合は、その最初の出現箇所のインデックスを Some で返します。含まれない場合は None を返します。
戻り値:Option<usize>

# matches

```rust
let s = "hello";
if s.matches("l").count() > 0 {
    println!("'l' is in the string!");
}
```
正規表現のパターン文字列を指定し、対象の文字列にパターンがマッチするすべての箇所のイテレータを返します。
戻り値：Matches<'a, P>

# is_match

```rust
use regex::Regex;
let s = "hello";
let re = Regex::new(r"l").unwrap();
if re.is_match(s) {
    println!("'l' is in the string!");
}
```
正規表現のパターン文字列を指定し、対象の文字列がパターンにマッチする場合に true を、マッチしない場合に false を返します。
戻り値：bool

# char_indices

```rust
let s = "hello";
if s.char_indices().any(|(_, c)| c == 'l') {
    println!("'l' is in the string!");
}
```
文字列に含まれる各文字のインデックスとその文字を順に返すイテレータを生成するメソッドです。

# 番外編


### starts_with

```rust
let s = "hello";
if s.starts_with("he") {
    println!("'hello' starts with 'he'!");
}
```

対象の文字列が、指定した文字列で始まる場合に true を、始まらない場合に false を返します。
戻り値：bool

### ends_with

```rust
let s = "hello";
if s.ends_with("lo") {
    println!("'hello' ends with 'lo'!");
}
```

対象の文字列が、指定した文字列で終わる場合に true を、終わらない場合に false を返します。
戻り値：bool
【Swift】FirebaseAnalyticsでイベントを測定する方法

## 目的
Swiftで実装したiOSアプリの任意のイベントを測定し、Google Analyticsで確認できるようにする

## 前提
SwiftとFirebaseを使用している

## 実装

まずcocoapodsでFirebaseAnalyticsをインストールする

```
pod 'Firebase/Analytics'
```
```
pod update
```

次に、様々なViewControllerでイベントを測定できるように、extension UIViewControllerでイベント測定用の関数を作る。

```swift
import FirebaseAnalytics

extension UIViewController {
    func sendAnalyticsEvent(eventName: String){
        Analytics.logEvent(eventName, parameters: [
            "userID": "ユーザーID",
            "date": Date()
        ])
    }
}
```
このように任意のパラメーターを設定できるので、分析したい項目を入れる。

そして測定したい場所で関数を呼び出す。

```swift
sendAnalyticsEvent(eventName: "click_send_message")
```
確かイベント名に「-」は使えなかった気がするのでご注意ください。

## 確認

イベントが測定されているかは以下の手順で確認できます。

1. Xcodeでシミュレーターにビルドする
2. Xcodeでアプリを停止する 
3. シミュレーターでアプリを起動する
4. Firebase管理画面のDebugViewで確認（Google Analyticsのイベントでも確認できる）

また自分で設定したイベント以外にもデフォルトで測定されるイベントもあります。
https://support.google.com/firebase/answer/9234069?hl=ja

## Swiftのお役立ち情報

https://wagtechblog.com/programing/swift-iphone-application-school

https://wagtechblog.com/programing/swift-textbook.html
【Visual Studio Code】既存のテーマを編集する方法

## 環境
+ Microsoft Windows 10.0.22621
+ Visual Studio Code 1.75.1

## 手順
### 1. 編集したいテーマの `.json` ファイルを探す
#### テーマが入っているフォルダの場所
デフォルトのテーマ：`C:\Users\AppData\Local\Programs\Microsoft VS Code\resources\app\extensions`
インストールしたテーマ：`C:\Users\USERNAME\.vscode\extensions`

目的のテーマのフォルダを開き，`themes` フォルダの中にある目的の `.json` ファイルを開く．

### 2. `.json` ファイルを編集する
`.json` ファイルを開くとこのようになっている．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1946472/c043ee60-9958-75b6-24d3-7ff81cf20e8b.png)


例えば，ステータスバーの背景色の設定を変更または追加する場合は以下のように書き換える．
```json
{
	"colors": {
		"statusBar.background": "#87B9B8",
		"statusBar.noFolderBackground": "#87B9B8",
		"statusBar.debuggingBackground": "#87B9B8"
	}
}
```

テーマカラーのカスタマイズは以下のリファレンスを参考にする．

https://code.visualstudio.com/api/references/theme-color
Node.jsのパッケージ管理ツールって何がいいんだろう？

#目次
[1.はじめに](#はじめに)
[2.npm yarn pnpm](#npm-yarn-pnpm)
[3.State of js 2022](#state-of-js-2022)
[4.結論](#結論)

# はじめに
初めまして！社会人一年目の新米エンジニアです！
今回は個人開発するための環境構築に使用するNode.jsのパッケージ管理ツールについて調べてみたので、備忘録もかねて記事にしたいと思います。

# npm yarn pnpm
Node.jsのパッケージマネージャーといえばこのまず３つが思い浮かぶと思います。
一応これら以外にも「ent、ied、Volo、Bower、Component、JSPM、npm5」などもありますが、現在ではあまり使用されていないので今回は深く調べません。

### npm
やはりNode.jに標準で備わっているツールなので、上記の３つの中でも使用率はトップに位置します。
元々はパフォーマンスやセキュリティ面で問題が多かったようですが、現在では他のツールに劣らない性能となっております。

### yarn
yarnの次に使用されているパッケージマネージャーです。
yarn v2やzero-installなどさまざまな機能がある印象です（正直具体的な機能はよくわかっていません笑）。

### pnpm
pnpmは上記の２つほど使用率は高くないがインストールが非常に速くパフォーマンスも高いです。
本来はパッケージをインストールするたびに独立したnode_moduleを作成するのですが、pnpmは、パッケージ間で共有できるシンボリックリンクを使用することにより、ディスクスペースの使用量を削減して高速なインストールを実現しています。

# state of js 2022
こちらのサイトはライブラリの傾向などを多くのIT技術者にアンケートをとって結果をまとめてくれるサイトになります。
こちらを見るとやはりnpmとyarnが優勢ということになりますが、pnpmとの差は大きくなくnpmとyarnがやや否定的な意見が増えている中pnpmは肯定的な意見が増えてきているので、おそらくどれを選択しても間違いではないと思いました。

![スクリーンショット 2023-02-22 0.41.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918624/735ef36c-cdb5-f109-46cb-62ff91c195b1.png)

https://2022.stateofjs.com/ja-JP/

# 結論
仕事で使用しているということもあり、自分はpnpmを使用したいと思います。npmのメリットはドキュメントの豊富さやインストールが不要など、**複数人での開発で生かされる**ものだと思います。
一方でyarnやpnpmはインストール、アンインストールの高速化やnode_moduleの軽量化など**個人開発で生かされる機能**が備わっているように感じました。
よって仕事で使用していて、今勢いがあるpnpmで開発を進めたいと思います！

## 参考記事

https://zenn.dev/hibikine/articles/27621a7f95e761
読書感想文: プログラマーのためのCPU入門

[プログラマーのためのCPU入門](https://www.lambdanote.com/products/cpu)を読んでみたので感想を書いてみる。
20年くらい前にちょっとだけCPUを開発する会社に在籍していたことがあり、それ以来CPUに興味を持っている。といっても専門的なものではなく、PC Watchの記事を読んだり、x86勉強会に参加して話を聞いたりする程度。
ざっと読んでみたが、x86とARMとRISC-Vなど、複数のプロセッサの幅広いトピックが網羅されていて、レイテンシの測定など、コードの例もあってわかりやすい。キャッシュのコヒーレンス制御のプロトコルなど、他の本ではあまり説明されていないトピックもいろいろ載っている。
CPUはものすごい技術の集積体であるということを改めて実感でき、CPUの気持ちを理解するのに非常に良い一冊だと思った。
逆に本書に載っていないところでいうと、本書は高速化という観点で書かれたこともあり、消費電力についてはスコープ外となっている。個人的には、低消費電力なコードを書くという観点も将来求められる可能性があると思っていて、動的なクロック変更のメカニズムや、ソフトウェアでどうやって消費電力を下げるのかなどにも興味がある。そのほか、温度を測定したり、CPUを制御するCPU(ME)などのトピックも省略されている。
細かいところで言うと、第2章にて、命令の処理は フェッチ -> デコード -> 実行 という3ステージで説明されているが、実行の並列実行可能性(主にALUのリソース)とストアの並列実行可能性(メモリの依存関係)はそれぞれ別なので、フェッチ -> デコード -> 実行 -> ストア という4ステージで説明するほうが一般的かもと思った。また、第5章では、キャッシュライン衝突について説明されていない気がした。(本書は重要な部分に絞って説明しており本書の説明が間違っているわけではない)

2023-02-27 追記
そういえばM1のRosetta 2はメモリオーダリングをx86互換に変更可能というのを思い出した。
参考リンク:
- [メモリアクセスのセマンティクスとApple siliconの裏技(?)について](https://yamasa.hatenablog.jp/entry/2020/12/07/041649)
- [2のべき乗サイズの配列は危ないという話 via 行列積](https://elkurin.hatenablog.com/entry/2021/05/25/013033)
sqlite3 トランザクション制御 リファレンス

Python の `sqlite3` ライブラリのトランザクション制御に関する項目が未翻訳でしたので、英語が苦手なりに頑張って読みました。せっかく作ったメモですので稚拙な内容ながら投稿させていただきます。

https://docs.python.org/ja/3.5/library/sqlite3.html#controlling-transactions

# 本文

> By default, the `sqlite3` module opens transactions implicitly before a Data Modification Language (DML) statement (i.e. `INSERT`/`UPDATE`/`DELETE`/`REPLACE`), and commits transactions implicitly before a non-DML, non-query statement (i. e. anything other than `SELECT` or the aforementioned).

既定では `sqlite3` は DML文の前に暗黙的にトランザクションを発行します。また、非DML文 [^1] や非クエリ文の前には暗黙的にトランザクションをコミットします。

<details><summary>語句</summary>

> implicitly = [副] 暗黙的に
anything other than ~ = ～以外の
aforementioned = [形] 前述の
[^1]:DML文および非DML文の分類は [こちら](https://docs.oracle.com/cd/E16338_01/server.112/b56299/statements_1001.htm) をご参照ください。

</details>


> So if you are within a transaction and issue a command like `CREATE TABLE ...`, `VACUUM`, `PRAGMA`, the `sqlite3` module will commit implicitly before executing that command. There are two reasons for doing that. The first is that some of these commands don't work within transactions. The other reason is that sqlite3 needs to keep track of the transaction state (if a transaction is active or not). The current transaction state is exposed through the `Connection.in_transaction` attribute of the connection object.

トランザクション中に `CREATE TABLE ...` などの命令が呼び出されたときは、その文を実行する前に暗黙的にコミットします。この理由は2つあります。

1. それらの命令はトランザクション内で実行できないから。
2. sqlite3 は トランザクションの状態（アクティブであるかどうか）を追跡する必要があるから。

トランザクションの状態は `Connection.in_transaction` で取得できます。

<details><summary>語句</summary>

> issue = [他動] ～を発布する，～を発行する
keep track of... = …を追跡する
expose = [他動] ～をさらす

</details>

---

> You can control which kind of `BEGIN` statements `sqlite3` implicitly executes (or none at all) via the `isolation_level` parameter to the `connect()` call, or via the `isolation_level` property of connections.

`sqlite3` が暗黙的に実行する `BEGIN` 文の種類は `sqlite3.connect` の 引数 `isolation_level` において設定可能です。インスタンス化の時点のみでなく プロパティ `isolation_level` を通しても随時設定可能です。

---

> If you want **autocommit mode**, then set `isolation_level` to `None`.

前述の `isolation` に `None` を設定すると **autocommit** モードになります。

---

> Otherwise leave it at its default, which will result in a plain `BEGIN` statement, or set it to one of SQLite's supported isolation levels: `"DEFERRED"`, `"IMMEDIATE"` or `"EXCLUSIVE"`.

`isolation_level` に `"DEFERRED"`, `"IMMEDIATE"`, `"EXCLUSIVE"` が設定された場合はそれぞれに対応した隔離レベルが適用されます。デフォルトのままであれば、通常の `BEGIN` が実行されます。

<details><summary>語句</summary>

> otherwise = [副] さもなくば，もしそうでなければ
result in ... = 〔結果的に〕～をもたらす，～につながる

</details>
Javaのコンパイル時にエラーが発生(全角文字の出力)

# 概要
Java学習時に、ソースコードを実行しようとしたらコンパイル時にエラーが発生したので、発生事象と解決方法をメモとして残します。

## 環境
```
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment Temurin-11.0.18+10 (build 11.0.18+10)
OpenJDK 64-Bit Server VM Temurin-11.0.18+10 (build 11.0.18+10, mixed mode)
```
## ソースコード
```
class Sample1_03_1 {
    public static void main (String[] args) {
        System.out.println("山田　太郎");
    }
}
```
## 発生事象
上記のソースコードをコンパイルしようとすると以下のエラーが出ました。
```
C:\WorkSpace>javac Sample1_03_1.java
Sample1_03_1.java:3: �G���[: ���̕���(0x80)�́A�G���R�[�f�B���Owindows-31j�Ƀ}�b�v�ł��܂���
        System.out.println("山田�?太�?");
                                 ^
Sample1_03_1.java:3: �G���[: ���̕���(0x8E)�́A�G���R�[�f�B���Owindows-31j�Ƀ}�b�v�ł��܂���
        System.out.println("山田�?太�?");
                                     ^
�G���[2��
```
(山田　太郎)の箇所が半角文字("Taro Yamada")だと正常に出力されるため、ソースコードのエラーではないと考えました。
全角文字を出力しようとエラーが起こります。
## 解決方法
調べてみるとどうやらエンコードの問題みたいで、コンパイル時に下記のコマンドをたたくことで正常に動作しました。
```
javac -encoding UTF-8 Sample1_03_1.java
```
## おわりに
意外なところでつまずきました。
エンコーディングを毎回明記することを忘れずにしていきます。
AIで normal map を作成する

良好な結果が得られたので導入リンクと結果だけ貼っておきます。

[インストール方法](https://youtu.be/VXEyhM3Djqg)
[利用方法](https://youtu.be/TmOtHWNnPZM)

[結果1](https://youtu.be/n7V-vB1Ezvg)
![ダウンロード.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/d83a6097-6940-c30f-3454-cfc0da5ba167.gif)

![mountrushmore_alphacut.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/72e0d1e0-003c-3c1b-b66d-5f8e824bd530.png)
![mountrushmore_normal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/1583025a-9190-8d3b-a8ab-c9928ef5f39f.png)


結果2
<iframe width="560" height="315" src="https://www.youtube.com/embed/OuQ3HLBqQ9Y" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/y49YtQKSQ4I" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
The compiler option dagger.hilt.android.internal.projectType is not a recognized Hilt option. Is there a typo? と言われたら

## はじめに
延々ハマったのでメモ。

## 何が起こったか
ビルド時に
`The compiler option dagger.hilt.android.internal.projectType is not a recognized Hilt option. Is there a typo?`
というエラーが出てビルドに失敗する。

## 原因
DaggerHiltのプラグインのバージョンが合ってなかった！！

Android Gradle Plugin Version が7.4.0, Gradleが7.5 の場合は
com.google.dagger:hilt-android-gradle-plugin:**2.40.5**

だと動いた。

## 補足
Gradleのバージョン確認は
File > ProjectStructure > Project から確認/再設定できるよ
【GitHub】テンプレートリポジトリを作成する方法

## 作成方法
通常どおりリポジトリを準備します。

作成したリポジトリのページを開き、「Settings」をクリックします。
「Template repository」にチェックを入れます。

![スクリーンショット 2022-09-10 15.29.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/a97d11ba-fc78-1125-9bf9-eb786ce43f83.png)

これでテンプレートリポジトリが作成できました。

## 使用方法
テンプレートリポジトリを使用して新規リポジトリを作成するには以下の2つの方法があります。

- テンプレートリポジトリのページから作成
- 「New repository」から作成

### テンプレートリポジトリから作成
テンプレートリポジトリのページを開き、画面右上にある「Use this template」を選択します。
![スクリーンショット 2022-09-10 15.36.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/5d694747-2c23-8a4e-023a-43f90ccf4603.png)


すると以下の画面になりますので通常どおりリポジトリ名などを入力してリポジトリを作成します。
![スクリーンショット 2022-09-10 15.47.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/fabc900e-12bb-a610-38b3-be3a560ab968.png)

するとテンプレートリポジトリの内容が`Initial commit`された状態のリポジトリが作成されます。

![スクリーンショット 2022-09-10 15.55.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/95bd1ff8-c07c-c140-0931-ba1df2fd2a56.png)


### 「New repository」から作成する

通常どおり「New repository」から作成するには「Create a new repository」の画面の「Repository template」の項目でテンプレートリポジトリを選択します。
すると選択したテンプレートリポジトリの内容が`Initial commit`されたリポジトリが作成されます。

![スクリーンショット 2022-09-10 15.54.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/e5712333-7380-2274-6735-6f274629dccf.png)

![スクリーンショット 2022-09-10 15.55.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/95bd1ff8-c07c-c140-0931-ba1df2fd2a56.png)