OmniAICreator/Qiita-1.07M huggingface dataset:
Docker版OWASP ZAPでBasic認証を突破する

# 始めに
OWASP ZAPはWebアプリケーションの脆弱性診断ができるOSSです。
デスクトップアプリケーションとしての色が強いですがDocker版もリリースされており、特にCI/CD環境で簡単にZAPを実行することで開発フェーズの中で脆弱性診断を行うことができます。

基本的な操作、インストールなどは公式の１次情報がわかりやすいです。
https://www.zaproxy.org/docs/docker/
参考にしたQiita:
https://qiita.com/koujimatsuda11/items/83558cd62c20141ebdda

本記事のOS:AmazonLinux2

# Basic認証を突破する
OWASP ZAPでBasic認証のかけられたサイトを診断しようとすると401エラーが返ってきます。
```
docker run -v $(pwd):/zap/wrk/:rw -t owasp/zap2docker-stable zap-baseline.py -t https://test.com/ -r test.html

> Automation plan failures:
        Job spider failed to access URL https://test.com/ status code returned : 401 expected 200
```

Basic認証を突破する方法はいくつかありますが、今回は
Httpリクエストヘッダーに`Authorization: Base <User>:<pass>※base64エンコード`
を追加する方法をとりました。
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Authorization

ZAPの診断で独自のカスタムヘッダーを追加するには`-z`オプションでConfigを設定する必要があります。

Linuxであれば `echo user:pass | base64`でエンコードされた文字列を取得できます。
その文字列を`replacement= Base *****`に代入。
```
docker run -v $(pwd):/zap/wrk/:rw -t owasp/zap2docker-stable zap-baseline.py -t https://test.com/ -r test.html \
  -z " -config replacer.full_list\\(0\\).description=auth1 \ 
  -config replacer.full_list\\(0\\).enabled=true \  
  -config replacer.full_list\\(0\\).matchtype=REQ_HEADER \  
  -config replacer.full_list\\(0\\).matchstr=Authorization \  
  -config replacer.full_list\\(0\\).regex=false \  
  -config replacer.full_list\\(0\\).replacement=Base ***** "
```
あるいは、以下のようなConfig fileをホームディレクトリ直下に用意しておき、
```option.prop
replacer.full_list(0).description=auth1
replacer.full_list(0).enabled=true
replacer.full_list(0).matchtype=REQ_HEADER
replacer.full_list(0).matchstr=Authorization
replacer.full_list(0).regex=false
replacer.full_list(0).replacement=Base *****
```
ZAP実行時に`-z`オプションでConfig Fileを指定。
```
docker run -v $(pwd):/zap/wrk/:rw -t owasp/zap2docker-stable zap-baseline.py \
> -t https://test.com/ -r test.html \
> -z "-configfile /zap/wrk/option.prop"
```
これでBasic認証を突破できました。

# 参考にした記事
https://www.zaproxy.org/docs/docker/baseline-scan/
https://www.zaproxy.org/docs/desktop/cmdline/
https://www.zaproxy.org/faq/how-do-you-find-out-what-key-to-use-to-set-a-config-value-on-the-command-line/
error: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1"

## What's This

以下コマンドを実行しようとしたら、表題のエラー。
解決のメモです。

```
$ aws eks --region ap-northeast-1 update-kubeconfig --name "Cluster Name"

$ kubectl get svc
error: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1"
```

## AWS CLIのバージョンアップ

```
aws --version
aws-cli/2.1.31 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off
```

以下からGUIで最新をインストール

https://awscli.amazonaws.com/AWSCLIV2.pkg

```
aws --version
aws-cli/2.7.19 Python/3.9.11 Darwin/20.6.0 exe/x86_64 prompt/off
```

## 冒頭のコマンドを再度実行

```
$ aws eks --region ap-northeast-1 update-kubeconfig --name "Cluster Name"
Updated context arn:aws:eks:ap-northeast-1:"AWS Account ID":cluster/"Cluster Name" in /Users/"User Name"/.kube/config

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   hogehoge     <none>        443/TCP   66m
```

コマンドが通りました。

## Conclusion
調べたところ、AWS CLIを最新にアップグレードするか、kubectlバージョンをダウングレードするか、の２つの解決方法があるっぽいですね。
前者の方がすぐ解決できそうだったので前者にしました。

## Reference
・https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/
・https://github.com/aws/aws-cli/issues/6920
・https://stackoverflow.com/questions/72126048/circleci-message-error-exec-plugin-invalid-apiversion-client-authentication
・https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/create-kubeconfig.html
・https://elvisciotti.medium.com/how-to-fix-kubectl-exec-plugin-invalid-apiversion-client-authentication-k8s-io-v1alpha1-94fa583ef924
・https://yaniv-bhemo.medium.com/fix-invalid-apiversion-client-authentication-k8s-io-v1alpha1-194b16b7ce90

参考になりました。ありがとうございます。
windowsでJupyter Notebookを用いてRDKitを使えるようにする方法

Windows PCでもRDKitを便利に使いたい！
と思ったものの，設定になかなか手こずったのでその備忘録。

## STEP1

まずはAnaconda3をインストールする。
インストールされたAnaconda Prompt(anaconda3)を開き，以下のコマンドを実行。
```
conda create -c rdkit -n my-rdkit-env rdkit
```
my-rdkit-envという仮想環境が作成される

## STEP2
以下のコマンド例に従い，Anaconda Promptを立ち上げ、baseとmyenv両方にインストール。
(仮想環境の切り替えを相互に行うため、base仮想環境と自分の仮想環境両方にjupyterとenvironment_kernelsモジュールが必要らしい。)
```
conda activate base
(base) C:\Users\((User_name))>pip install jupyter environment_kernels
(base) C:\Users\((User_name))>conda deactivate

conda activate my-rdkit-env
(my-rdkit-env) C:\Users\((User_name))>pip install jupyter environment_kernels
```
スタートメニュー→Anadonda3 64-bit→Jupyter Notebook(64bit)で起動されるのはbase環境のJupyter。

## STEP3

デフォルト仮想環境baseでJupyter初期設定ファイルを生成・編集。
Jupyerの初期設定ファイルは１つのはずなのでどちらでも良いはずだがbaseで行う。
```
(base) C:\Users\((User_name))>jupyter notebook --generate-config
Writing default config to: C:\Users\((User_name))\.jupyter\jupyter_notebook_config.py
 ```

##### 作成したjupyter_notebook_config.pyをテキストエディタで開いて編集する。

```
## The kernel spec manager class to use. Should be a subclass of
#  `jupyter_client.kernelspec.KernelSpecManager`.
#  
#  The Api of KernelSpecManager is provisional and might change without warning
#  between this version of Jupyter and the next stable one.
#c.NotebookApp.kernel_spec_manager_class = 'jupyter_client.kernelspec.KernelSpecManager'
```
 ↑こんな感じの所を・・・


 ↓こんなん（下に二行書き加える）にする。
```
## The kernel spec manager class to use. Should be a subclass of
#  `jupyter_client.kernelspec.KernelSpecManager`.
#  
#  The Api of KernelSpecManager is provisional and might change without warning
#  between this version of Jupyter and the next stable one.
#  Default: 'jupyter_client.kernelspec.KernelSpecManager'
# c.NotebookApp.kernel_spec_manager_class = 'jupyter_client.kernelspec.KernelSpecManager'
c.NotebookApp.kernel_spec_manager_class='environment_kernels.EnvironmentKernelSpecManager'
c.EnvironmentKernelSpecManager.conda_env_dirs=['C:/Users/((User_name))/anaconda3/envs/']
```
`['C:/Users/((User_name))/anaconda3/envs/']`のところは自分で`envs`を探してパスを確認して書く。

これでJupyter NotebookのNewのタブにEnvironment(conda_my-rdkit-env)が追加されたはずなので，そこから始めると，rdkitモジュールが読み込める‼Chem関数等々が使える‼

★終わり★
重い腰をあげてGA4と仲良くなる話

# 序文
2023年7月1日をもってGA(UA)のサービスが終了されることが発表されて早数カ月が経ちました。
こうして文字に起こすと終了まで一年を切ったことをありありと実感させられます。

さて、本題ですが。
みなさん勿論GA4には移行できてないですよね？




**わかります。**

この記事は、
・GA4とは仲良くできない。
・ずっとGA(UA)を使っていたい
・もう少し時間が経てばGA(UA)を使い続けられるワザップが発見されると信じている
・GA(UA)が終了する前にGA(UA)と完全互換性があるGA5(仮)が出ると信じている
上記のような何が何でもGA4と関わりたくないと思っている方を対象に書いています。

とは言え、実際問題GA(UA)の終わりは迫ってくる。
我々はなんとか現実を受け止めなければいけません。

**GA4から逃げるな！！！！**

# GA4と仲良くなる1st step：なぜ我々はGA4が憎いのか
それはわかりにくいからです。（結論）
ページにアクセスしたら発火してPVが取得できるというわかりやすさしかないGA(UA)と違い、
GA4はPVの取得方法について尋ねると、やれイベントだ、やれユーザー体験だと言葉を濁すのです。

**我々はPVを計測したいだけなのに！！！**

でもちょっと待ってください。
GA4と向き合うには、一つの思い込みを改める必要があるのです。

# GA4と仲良くなる2nd step：ユーザー体験とは何か
GA4という名称からGA4はGA(UA)の続編だったり、精神的続編だったり、
オマージュ作品と思われがちですが、
その思い込みがGA4を理解するための最大の障害です。
GA(UA)とGA4では、計測に対する考え方が違います。
GA(UA)がページを計測するのに対し、GA4が計測するのはユーザー体験です。

*「また出たよ。なんだそのユーザー体験というのは？」*

その疑問はもっともです。ユーザー体験とはいったい何を指すのでしょう？
例えば、GA(UA)でユーザーがボタンを何度クリックしたか計測したい場合、
onclick時にボタンを押したと分かる形のURLをGA(UA)に送る方法を取ったりします。
つまり、ボタンを押したというユーザー体験をPVに無理やり変換して計測していたわけです。
それに対してGA4では、
画面を閲覧するユーザー体験をした場合、画面を閲覧した(PV)イベントとして計測が行われます。
ボタンをクリックするユーザー体験の場合、ボタンをクリックしたイベントとして計測が行われます。
画面をスクロールすればスクロールのイベントが、スワイプすればスワイプしたイベントの計測が行われます。
そうです。実は我々はGA(UA)においてもユーザー体験を計測していたのです。
その方法がPVを介していたというだけなのです。

# GA4と仲良くなる3rd step：GA(UA)とGA4は他人
_「ユーザー体験がなんなのかはわかったけど、_
　_結局PVの計測はできるんでしょ？それならGA(UA)もGA4も一緒じゃないの？」_
その疑問ももっともです。
しかし、我々がGA(UA)で計測していたのは本当にPV(page view)なのでしょうか？
例えば、スマホのサイト等でよく目にする記事がスワイプで無限に出てくるページ。
GA(UA)ではあのページを1ページと認識します。
なぜなら、GA(UA)におけるPVはURLの変動によって判定が行われるからです。
モーダルやツールチップが何度表示されても、スワイプによって記事が無限に表示されても、
URLが変わらなければ1ページと言うわけです。
それに対してGA4は、
モーダルやツールチップも閲覧したというイベントだから、設定してくれれば当然計測できるよ？
無限表示記事の測定？ははーん、それならスワイプ数を計測するのはどうだい？
と自慢げに語りかけてきます。
そう、GA(UA)とGA4ではPVを計測する際の定義が違うんです。
定義が違うものを並べて同じと見做すことができますか？できないでしょう？
それゆえにGA(UA)とGA4には互換性がないのです。

# GA4と仲良くなるfinal step：あとは設定だけだ
ここまで読んでいただきありがとうございます。
どうでしょう？GA4と仲良くなれそうでしょうか？
*「なるほど。GA4がそういう考え方で作られているのはわかった。ぼちぼち移行タスクを切るかぁ」*
と思っていただけたのなら幸いです。


__ちなみに筆者は仲良くなれそうにありません！__

その理由は、GA4はPV以外のユーザー体験を直接的に計測できるようになった反面、
何を計測するにもGA4側でユーザー体験を定義し、設定する必要があるからです。
これが面倒くささしかなく、設定したものが取れた取れないの確認で発狂しそうになります。
この記事のタイトルが仲良くなった話ではなく、仲良くなる話な理由はそこにあります。

じゃあ、結局この記事で何が言いたかったのかと言うと……GA4はそういう奴。ってことです。

GA(UA)と比べるのではなく、ありのままのGA4を受け入れてみてください。
過去の人を引き合いに出し、不要なバイアスがかかった状態で設定を行うより、
幾分心に平穏を保ったまま設定が行えるはずです。

いまだにGA(UA)の事が忘れられない筆者が言うのだから間違いありません。
AWS CloudWatchで請求アラートを設定する

AWSマネジメントコンソールにログインしてください。
左上のアカウント名のリンクをクリックし、メニューから[請求ダッシュボード]をクリックしてください。
![スクリーンショット 2022-07-28 6.50.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/37bcf243-2e38-2858-6a15-4549b6c9a037.png)

請求ダッシュボードが表示されます。
[請求設定]をクリックしてください。
![スクリーンショット 2022-07-28 6.52.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/c4a7b693-79e4-5127-60a2-d1a9cff74316.png)

請求設定画面が表示されます。
3つのチェックボックスをチェックし、[詳細設定を保存]をクリックしてください。
設定が保存されます。
![スクリーンショット 2022-07-28 6.55.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/abbc23fe-2ba4-fc4b-8947-42683419ef90.png)

続いて、[請求アラートを管理する]をクリックしてください。
![スクリーンショット 2022-07-28 6.56.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/b472770c-1c31-f73f-4cd9-465a12214e7b.png)

CloudWatch画面が表示されます。
左のメニューの[アラート]-[請求]をクリックしてください。
![スクリーンショット 2022-07-28 6.59.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/4e0e1f2d-b9a9-0c1e-360b-93f10a1b418f.png)

請求アラーム画面が表示されます。
[アラームの作成]をクリックしてください。
メトリクスと条件の指定画面が表示されます。
例えば、1ドル以上になったらメールを送信するように条件に入力します。
[次へ]をクリックしてください。
![スクリーンショット 2022-07-28 11.07.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/05bcf9c1-6a45-7b0e-5b7a-a979718d1e6d.png)

アクションの設定画面が表示されます。
[新しいトピックの作成]をチェックし、[通知を受け取るEメールエンドポイント]に通知を受け取りたいメールアドレスを入力してください。
[トピックの作成]をクリックしてください。
[次へ]をクリックしてください。
![スクリーンショット 2022-07-28 11.11.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/427c1491-0389-79ab-7094-872b2c63faf9.png)

名前と説明の追加画面が表示されます。
[名前]と[説明]を入力し、[次へ]をクリックしてください。
![スクリーンショット 2022-07-28 11.15.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/acc5c8eb-095f-0653-17c7-fde7ad42f6d3.png)

プレビューと作成画面が表示されます。
[アラームの作成]をクリックしてください。

通知を受け取るメールアドレスに通知の受け取りを許可するか確認するメールが届きます。
[Confirm subscription]をクリックしてください。
![スクリーンショット 2022-07-28 11.17.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/b1109a2c-7afb-634b-29b8-a52cff36e8b2.png)

以上です。
エンジニアとしてビジネスマンとして成長するために読んだ本（個人用まとめ）

* 考える技術・書く技術―問題解決力を伸ばすピラミッド原則　バーバラミント
* 小倉昌男　経営学（日経BP）
* [失敗の本質](https://www.amazon.co.jp/%E5%A4%B1%E6%95%97%E3%81%AE%E6%9C%AC%E8%B3%AA-%E6%88%B8%E9%83%A8-%E8%89%AF%E4%B8%80-ebook/dp/B00BN16XX8/)
* [成長する管理職: 優れたマネジャーはいかに経験から学んでいるのか](https://www.amazon.co.jp/%E6%88%90%E9%95%B7%E3%81%99%E3%82%8B%E7%AE%A1%E7%90%86%E8%81%B7-%E5%84%AA%E3%82%8C%E3%81%9F%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A3%E3%83%BC%E3%81%AF%E3%81%84%E3%81%8B%E3%81%AB%E7%B5%8C%E9%A8%93%E3%81%8B%E3%82%89%E5%AD%A6%E3%82%93%E3%81%A7%E3%81%84%E3%82%8B%E3%81%AE%E3%81%8B-%E6%9D%BE%E5%B0%BE-%E7%9D%A6/dp/4492533281)
* [人材マネジメント入門](https://www.amazon.co.jp/%E4%BA%BA%E6%9D%90%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88%E5%85%A5%E9%96%80-%E6%97%A5%E7%B5%8C%E6%96%87%E5%BA%ABB76-%E5%AE%88%E5%B3%B6-%E5%9F%BA%E5%8D%9A/dp/4532110017/)
* [Ｖ字回復の経営](https://www.amazon.co.jp/gp/product/B093BH1Z4N/ref=ppx_yo_dt_b_d_asin_title_o02?ie=UTF8&psc=1)
* [経営パワーの危機　会社再建の企業変革ドラマ](https://www.amazon.co.jp/gp/product/B009S7CDNS)
* [戦略プロフェッショナル](https://www.amazon.co.jp/gp/product/B00D72SKCS)
* [組織戦略の考え方―企業経営の健全性のために](https://www.amazon.co.jp/%E7%B5%84%E7%B9%94%E6%88%A6%E7%95%A5%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9%E2%80%95%E4%BC%81%E6%A5%AD%E7%B5%8C%E5%96%B6%E3%81%AE%E5%81%A5%E5%85%A8%E6%80%A7%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB-%E3%81%A1%E3%81%8F%E3%81%BE%E6%96%B0%E6%9B%B8-%E6%B2%BC%E4%B8%8A-%E5%B9%B9/dp/4480059962/ref=pd_lpo_1?pd_rd_i=4480059962&psc=1)
* [組織デザイン](https://www.amazon.co.jp/%E7%B5%84%E7%B9%94%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3-%E6%97%A5%E7%B5%8C%E6%96%87%E5%BA%AB-%E6%B2%BC%E4%B8%8A-%E5%B9%B9/dp/4532110238)
* [マインドセット：「やればできる！」の研究](https://www.amazon.co.jp/gp/product/B01FTIQY6G/ref=ppx_yo_dt_b_d_asin_title_o00?ie=UTF8&psc=1)
* [採用基準](https://www.amazon.co.jp/gp/product/B00B42SX70/ref=ppx_yo_dt_b_d_asin_title_o02?ie=UTF8&psc=1)
* [ビジョナリー・カンパニー　時代を超える生存の原則](https://www.amazon.co.jp/gp/product/B00MVM2EPE/ref=ppx_yo_dt_b_d_asin_title_o03?ie=UTF8&psc=1)
* [基礎から学ぶ Flutter](https://www.amazon.co.jp/gp/product/B082XQ81FH/ref=ppx_yo_dt_b_d_asin_title_o08?ie=UTF8&psc=1)
* [リーン・スタートアップ　ムダのない起業プロセスでイノベーションを生みだす](https://www.amazon.co.jp/gp/product/B00F3UTIQY/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1)
* [ロジカル・プレゼンテーション ― 自分の考えを効果的に伝える戦略コンサルタントの「提案の技術」](https://www.amazon.co.jp/gp/product/B00TNZX8YS/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1)
cscの作法 その260

# 概要
cscの作法、調べてみた。
練習問題やってみた。
構想編

# 練習問題
Let's Encryptでjwtを投げてニューアカウントを獲れ。

# 方針

- xml秘密鍵を準備する。
- json

```
{
  	"payload": "eyJyZXNvdXJjZSI6Im5ldy1jZ...",
  	"protected": "eyJhbGciOiJSUzI1NiIsImp3a...",
  	"signature": "Mo1ZVEkT_QjsH4Yy98tTm3JEp..."
}
```
を、https://acme-v02.api.letsencrypt.org/acme/new-acctに、postする。


-  "payload": は、

```
{
 	"contact": ["mailto:hoge@gmail.com"],
 	"termsOfServiceAgreed": true
}
```
を、base64urlしたもの。

-  "protected": は、


```
{
	"nonce": "0002cpZ-shmzq4450HB5b_Ou4Ku0Is_RFpPeG2xOltYzJ3o",
	"url": "https://acme-v02.api.letsencrypt.org/acme/new-acct",
	"alg": "RS256",
	"jwk": {
		"e": "AQAB",
		"kty": "RSA",
		"n": "g37tF-kJOoi0zZ5FD8TRw2I3C8U7XAf4hcCNL8H16g8QY5TLtWvOPL18t36ArhcE2j8Bh-S358k17MWX2Vba5x8v38mNcfaAPWNOXOKZwHTISg4iRskgbBdAISpcj1aeNDxNSRCxO6rD_nfv-bs9rbj4U_MActFAYsVRPWNo9dA7j7woi3FseHP8YJyxpJGbD1j2DdCtslieXrycpMrjONlx7BNkb2p6W08ax8C1q3NaF6SnSnBdnIdYpTNdv2UM6GDUEINmKiCUyfHTiF9kkboVxKyP1o2UzHqvkg2RXP8-WFOpDDLw6a5ypgJOfY7XCYPgsCwkzNFnjtCg5lWOHQ"
	}
}
```
を、base64urlしたもの。

-  "signature": は、protected + "." +  payload を秘密鍵で署名してbase64urlしたもの。

- nonceは、https://acme-v02.api.letsencrypt.org/acme/new-nonceのレスポンスヘッダー
    Replay-Nonceから取得
- jwkは、xml秘密鍵から生成する。
- 全て、base64urlエンコードする。
- termsOfServiceAgreed, url, alg, e, ktyは、固定。



以上。
cscの作法 その259

# 概要
cscの作法、調べてみた。
練習問題やってみた。

# 練習問題
httpプロトコルでエラーレスポンスを獲れ。

# 方針
- webclient使う
- try-catch使う
- Response使う

# サンプルコード

```
using System.Collections;
using System.IO;
using System;
using System.Text;
using System.Net;

namespace app
{
	class test0 {
		static void Main() {
			ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
			WebClient wc = new WebClient();
			string json = "{}";
			try
			{
				wc.Headers[HttpRequestHeader.ContentType] = "application/jose+json";
				//wc.Headers[HttpRequestHeader.ContentType] = "application/json";
				string response = wc.UploadString("https://acme-staging-v02.api.letsencrypt.org/acme/new-acct", "POST", json);
				Console.WriteLine(response);
			}
			catch (System.Net.WebException ex)
			{
				if (ex.Status == System.Net.WebExceptionStatus.ProtocolError)
				{
					System.Net.HttpWebResponse errres = (System.Net.HttpWebResponse) ex.Response;
					Console.WriteLine("{0}: {1}", errres.StatusCode, errres.StatusDescription);
					Console.WriteLine(ex.ToString());
					string responseText;
					using (var reader = new StreamReader(ex.Response.GetResponseStream()))
					{
						responseText = reader.ReadToEnd();
					}
					Console.WriteLine("WebException caught. Response text is {0}", responseText);
				}
				else
					Console.WriteLine(ex.Message);
			}
		}
	}
}

```

# 実行結果

```
>res0
BadRequest: Bad Request
System.Net.WebException: リモート サーバーがエラーを返しました: (400) 要求が不適切です
   場所 System.Net.WebClient.UploadDataInternal(Uri address, String method, Byte[] data, WebRequest& request)
   場所 System.Net.WebClient.UploadString(Uri address, String method, String data)
   場所 app.test0.Main()
WebException caught. Response text is {
  "type": "urn:ietf:params:acme:error:malformed",
  "detail": "Parse error reading JWS",
  "status": 400
}

>
```


以上。
【C#】手っ取り早くUnixtimeをJSTに変換する

## Timezoneとかやりだすとめんどくさい、JSTが＋９なことくらいわかってる
ワンライナーできないのが残念（できないことはないかも？）

``` cs
var dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(unixTime);
dateTimeOffset = dateTimeOffset.ToOffset(new TimeSpan(+9, 0, 0)); // set to JST
dateTimeOffset.ToString("yyyy-MM-dd HH:mm:ss"); // 2022-01-01 12:31:55
```

SQL形式もスパッと変換してほしい…
Alteryx Designer Core の勉強法

# 1. はじめに
Alteryxと出会って2か月でAlteryx Designer Core に合格した私の勉強法をご紹介します。

# 2. Alteryx Designer Core について
アナリティクス初心者を対象に、Alteryxの基本機能に対する知識を測定するための試験です。
質問は80問、質問形式は選択問題、制限時間は2時間、費用は無料です。

# 3. 勉強法
### 3.1「Interactive Lessons」でツールを学ぶ
Alteryx community の 「Interactive Lessons」ではビデオとクイズ形式でAlteryxについて学ぶことできます。1つのビデオは約7分なので気軽に観ることができます。
「Alteryx Designer 入門」でツールの基本的な使い方を学習しましょう。
 
### 3.2 「weekly challenge」の初級を解く
[3.1「Interactive Lessons」でツールを学ぶ](###3-1)でツールの使い方がわかったところで、「weekly challenge」の初級問題で手を動かして勉強しましょう。
ここで大事なことは、 **「問題文を読んで頭の中でフローをイメージしてからツールを動かす」** ことです。

以下の問題を例として説明します。
下記の表のような歯科医IDと予約日、予定診療時間の長さが記録されているデータについて、
平均予定診療時間が最も長い歯科医の平均予定診療時間を求める問題があります。(一部データ抜粋)
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2618987/38b115a5-02ba-5972-d325-49d289b28737.png)


問題文と与えられたデータからイメージできることは
　・「平均予定診療時間〇〇分」が答えとなる
　・歯科医IDと予約日が同じ列にデータがあるので、2列に分けたい
　・予定診療時間が1列に複数個データがあるので分けたい
　・歯科医IDごとの予定診療時間の平均を求める（レコードの数は3つになるはず）
　・平均予定診療時間が最も長い歯科医の平均予定診療時間がわかる！
です。
いきなりツールを動かすのではなく、問題文からわかることやどうやって解いていけばよいのかをイメージすることが大事だと思います。

ここまでイメージができれば、イメージ通りにツールを並べて実行を繰り返していきます。


最初のは問題文の意味がわからずイメージすることを放棄してしまいがちですが、上記のようにわかること・やりたいことをできる限り言語化し、これ以上イメージできないと限界を感じてから解答を見るようにしてください。
weekly challenge を解き進めていくうちにイメージできるようになります！！！

### 3.3 ツール help を読む
ある程度weekly challenge が解けるようになった後に、ツールの知識問題対策として、Alteryx Designer Core の試験範囲内のツールヘルプを読みます。

# 4. 試験に挑む
[3.勉強法](#3-勉強法)で学んだことを試験で存分に発揮しましょう！
たとえ不合格でも一週間後に試験を受けることができます。
皆さんAlteryx Designer Core 合格に向けて一緒に頑張っていきましょう！
JavaScript_"use strict"

"use strict" : エラーチェックを行う

```
例１：
<script>

"use strict";

str = "test";
// コンソールにエラーが出る、str変数未定義
// 「"use strict";」ない場合、コンソールに「test」出力
console.log(str);
</script>

例２：
<script>
 function test(para){
  // 下記の範囲はtestメソッド内だけ
  "use strict";
}
</script>

※　メソッド内でも、varをついてない時、グローバル変数になる
function(){
　// varをついてないため、グローバル変数
　testName = "test";
　// varをついてるため、ローカル変数
　var testProperty = "test";
}
```
git pull したときに出たエラーの対処法

# git pull のエラー
```
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint: 
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint: 
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
```

### このエラーが出たときに行った対処法
pull --rebase や pull --ff-only のふるまいを期待しているにも関わらずそれらの指定をしないまま pull してしまったユーザが、意図しないマージコミットを作ってしまうケースを避けるための警告らしい
>エラーの解読に参考にしたサイト
https://blog.agile.esm.co.jp/entry/git-warns-pulling-without-specifying-how-to-reconcile-divergent-branches

### そこで行った対処法
```
git reset --hard origin/「ブランチ名」
```
を実行してリモートのブランチに強制的に同期させる これで対処した
```
git reset 
```
このresetコマンドのオプションがあり、
```
git reset --soft
git reset --mixed
git reset --hard
```
softは現在のbranchの先頭 だけをリセット 
mixedは現在のbranchの先頭と、インデックスをリセット
 hard　は現在のbranchの先頭、インデックスと作業ツリーを全部リセットするコマンド
>resetの解読に参考にしたサイト
https://www-creators.com/archives/1097
VMware Update Managerの定期的に実行される更新チェックを停止する方法

1. Update ManagerのSettingsにて、Editを押下。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746922/a721ff1b-8832-0dff-6c75-8b42ddbf3c69.png)
2. `Check notifiation`のチェックボックスを外して、`Save`を押下。<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746922/9518164c-6782-da1a-8357-8bc25a8d4ca2.png)
3. スケジュールされなくなった<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746922/ea1cb76d-95ac-f30a-9638-fa21e5dea71a.png)
プログラミング未経験者が育休中にKagglerになるまでの記録（1か月進捗 2022/7）

育休中にkagglerになれるかの記録。

kaggleスキルはいずれ海外含めたビジネスシーンで活用したい。
そのため、英語とビジネススキルについても同時並行で習得目指す。


# プログラミングやったこと
・kaggle の Courses
　- Python, Intro Machine to Learning, Intro to Deep Learning はほぼ完了。
　- Data Visualization, Feature Engineering, Data Cleaning は一部完了。

・kaggle の Competition
　- House Prices の特徴量を吟味（EDA）したのみ。特徴量エンジニアリングまだ。
　　他者のコードをコピペして一つ一つ意味理解しながら実行。

・Signate の Quest
　- 株価予測（ファンダメンタルズ分析）はほぼ完了。

# 英語やったこと
・Amazon Prime のドラマ
　- 「ラグジュアリーシドニー」を観ながらシャドーイング

# ビジネススキルやったこと
・Udemy の 米国MBA教授が教える：起業からIPOまでMBAのすべて
　- 1回分のみ視聴

# やってみた感想
・SignateよりKaggleの方がUIが好みなのでkaggle実践を続ける。
・特徴量への愛が大事だとおもった（特徴量理解が深ければ解ける）。
・英語はモチベーション低空飛行なため、しばらく海外ドラマでリハビリ。
・MBA講座の進みが悪いのでおもしろいところだけ飛ばし見する。

# 現在の腕前
・kaggleがわかってきた（強気）。
・特徴量エンジニアリングまだよくわからん。もっと学ぶ。

# 次の1か月の目標
・kaggleコンペに参加。
・特徴量エンジニアリングの引き出しを増やす。


引き続き、がんばります！
VMware DRS （Distributed Resource Scheduler）を停止/再開する方法

# 1. DRSを止める方法

- クラスターの構成画面でEditを押す<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746922/553a56c6-1ac3-ea61-2d73-78e5953a6321.png)
- `vSphere DRS`を無効にして、OKを押す<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746922/f0b8f407-7ed2-bd11-2682-d0c7ab1bc063.png)
- DRSが無効になった<Br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746922/6d644a6a-da44-185f-947e-f33f4fd9a93a.png)

# 2. DRSを有効にする方法

- クラスターの構成画面でEditを押す<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746922/6d644a6a-da44-185f-947e-f33f4fd9a93a.png)
- `vSphere DRS`を有効にして、OKを押す<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746922/cc0d3835-81c8-c5a9-ff25-be501f5844f4.png)
- DRSが有効になった<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746922/17f13cdd-ebab-c3dc-d9cf-6170c9ef8eeb.png)
ライセンスまとめ

自分の暗記用
＝＝＝＝＝＝＝＝

## Input
#### SalesCloud/ServiceCloud

https://www.salesforce.com/jp/editions-pricing/sales-cloud/

#### Experience Cloud

https://help.salesforce.com/s/articleView?id=sf.users_license_types_communities.htm&type=5

#### FieldService

https://www.salesforce.com/jp/products/field-service/pricing/

#### メモ

https://qiita.com/nori83/items/ea526e0d05efae1a9552

## ライセンスまとめ

＜判断ポイント＞
:writing_hand_tone4: 社内

SalesCloudのみ
・見積
・契約（？）
・売上予測
・テリトリー

ServiceCloudのみ
・作業指示
・ナレッジの編集権限
・CTIの利用
・LiveAgent（現チャット）
・エンタイトルメントの利用
・オムニチャネルのルーティング

＋FiledServiceのみ
・ディスパッチャー
・FSCモバイル
など、FSL固有のオブジェクト？（例；サービスリソースとか？？）

意外と？共通
・商談、商談チーム（ALL）
・注文・リード（Sales＆Service）
　※問い合わせを受けて注文みたり、コールセンターがリードみたりする？（Web-to-リード）

注意：社員は共有セット使えない

:writing_hand_tone4: 社外

CC
　・ロールやApex共有使えない
　・行動／カレンダーはReadOnly
　・メール送信できない
　・レポート／ダッシュボード使えない
　・代理管理も使えない
　・SFA使えない

CCP
　・SFA使えない

PC
　・SFA使える（商談・リード・見積もり・キャンペーン・テリトリー）

その他：
注文や商品、ケースは皆使える


### FSL
＜社内＞ディスパッチャー
　・ディスパッチ

＜社内＞MoblieEmployee
　・FSLアプリ

＜社内＞FSL＋
　・FSL＋Sales＋Service

＜社外＞Contractor
　・CCP
　・FSLアプリ

＜社外＞Contractor＋
　・PC　※なのでSFA使える。
　・FSLアプリ
echo コマンドで改行を有効にするのは -e オプション

## echo で改行が反映されない
echo コマンドに何も指定しないと `\n` は改行コードとして反映されず、そのまま出力されてしまう。
```bash
echo "First line.\nSecond line."
```
```
First line.\nSecond line.
```

## echo で改行を有効化する
```bash
echo -e "First line.\nSecond line."
```
```
First line.
Second line.
```
`-e` オプションでバックスラッシュエスケープの解釈を有効にすることができる。

## ヘルプ
```bash
man -P cat echo | egrep '\-e|\\'
```
```
       -e     enable interpretation of backslash escapes
       If -e is in effect, the following sequences are recognized:
       \\     backslash
       \a     alert (BEL)
       \b     backspace
       \c     produce no further output
       \e     escape
       \f     form feed
       \n     new line
       \r     carriage return
       \t     horizontal tab
       \v     vertical tab
       \0NNN  byte with octal value NNN (1 to 3 digits)
       \xHH   byte with hexadecimal value HH (1 to 2 digits)
```
Linuxについて９（自分用メモ



●ファイルを名前で検索
locate ファイル名パターン

「*」や「?」などのメタキャラクタを使うこともできる。その場合はファイル名パターンを引用符で囲む必要がある。
例）locate ‘*sh*locate’

※locateコマンドは作成済みのファイル名データベースを使って検索しているため、ファイル名データベース更新後に作成されたファイルは検索することができない。ファイル名データベースを更新するには、updatedbコマンドを実行する。(rootのみ）

●findコマンド
ファイル名だけでなく、さまざまな条件を指定し、リアルタイムでファイルを検索できる。
find ［検索対象パス］　［検索式］

●findで検索したファイルに対してコマンドを実行　-exec
find ［検索対象パス］　［検索式］　-exec 実行コマンド　{} \;
例）find regular +366 -exec rm -i {} \;
一年以上アクセスのないファイルを削除する

●grepコマンド
テキストファイル内容を検索し、指定した正規表現に一致する行があれば表示する
grep ［オプション］　［文字列パターン］　［検索対象ファイル］

●headコマンド
ファイルの先頭部分だけ表示する。デフォルトでは先頭１０行。
head ［-行数］　［ファイル名］

●tailコマンド
末尾部分だけ表示。デフォルトは１０
tail ［-行数］　［ファイル名］

※headコマンドとtailコマンドはpsコマンドと組み合わせることもできる
例）ps aux | head(tail) −8
psコマンドの出力の先頭8行を表示

●sortコマンド
ファイル内容をソートして表示。
sort ［オプション］　［ファイル名］

-nオプションをつけると数値を昇順でソート。-nrで降順。

●nlコマンド
ファイルに行番号を付けて表示
nl［ファイル名］

●cutコマンド
ファイルのそれぞれの行から指定したフィールドだけを取り出す。
cut ［オプション］　［ファイル名］

●wcコマンド
ファイルの行数、単語数、バイト数を表示
wc ［オプション］　［ファイル名］

※-lオプションを使うと行数だけ表示できる
例）ls /etc | wc -l
半角カタカナを全角カタカナへ置換する(SPSS Modeler データ加工逆引き2-9)

# 半角カタカナを全角カタカナへ置換する（名寄せ）

![スクリーンショット 2022-07-15 14.29.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d1ab8262-f9d9-7ceb-ec3f-88cff918c149.png)

## 1.想定される利用目的

・顧客マスタや取引先マスタデータのクレンジング
・対象データの精査

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/katakana.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2022-07-15 14.22.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b2b50f30-ed2a-becd-ec89-cdf87ce8c844.png)

a.入力するデータは以下の通りです。
![スクリーンショット 2022-07-15 14.21.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/cc2579aa-5f4c-b099-3ec6-40e291ac09a4.png)

b.[フィルター]ノードを編集します。もし利用されるフィールドが会社名でない場合でも後続の関数を変更しなくてよいように準備しました。例えば商品名を扱う場合には後続のスーパーノードの後でもう一度フィルターノードを利用してフィールド名を復元してください。
![スクリーンショット 2022-07-15 14.23.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d3b9c2af-a597-0f6d-49a1-e702b61f917c.png)

c.スーパーノードを編集します。文字列を置換える関数replace("ｱ","ア", 会社名)を利用しています。 
![スクリーンショット 2022-07-15 14.23.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2a228e1e-397e-5db1-3a33-fbf187f108da.png)

[テーブル]ノードを実行します。
![スクリーンショット 2022-07-15 14.29.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/6523afff-8768-eec6-2d21-9ed12c9fe9b0.png)

#### 注意事項

スーパーノード内では最初に「ｳﾞ」のような濁音や半濁音の処理を先に行なっています。これにより「ウ」と「”」を分割した特殊な構成を別々に処理する誤りを回避しています。

## 4.参考情報

#### 名寄せを解説した記事

https://www.ibm.com/blogs/solutions/jp-ja/learn-modeler-03/

#### よく使う文字列関数とアルファベットの小文字・大文字変換

https://qiita.com/Makimaki2020/items/35ab02a7375325e678c1#%EF%BC%91%E7%B5%90%E6%9E%9C%E3%82%92%E6%96%87%E5%AD%97%E5%88%97%E3%81%A7%E8%BF%94%E3%81%99%E9%96%A2%E6%95%B0


#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
Salesforceで項目の必須の考え方～入力規則や必須項目について

こんにちは。本橋孝昭です。
Salesforceで「項目を必須にしたい」という考えはよくあります。

その場合、どのような考え方をするか考えましょう


## パターン1 必ず項目を必須入力してほしい場合


必須項目の設定は２つあります

### 1　項目の設定
### 2 ページレイアウトの設定

まずは項目の設定から確認します。


### 1　項目の設定

項目の必須項目の設定場所はこちらです
![必須１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/7d31bed3-48b8-73c1-1c8c-c44bd278dea3.png)


「項目の設定」で「必須項目」にチェックをした場合、項目の必須が可能です。
この「必須項目」にチェックをすれば項目は必須になるので
#### (レコードタイプなどにかかわらず)このオブジェクトのレコードがすべて必須になります


次にページレイアウトの設定を確認します

### 2 ページレイアウトの設定

ページレイアウトの項目の必須項目設定場所はこちらです
![必須２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/43770f55-97e8-9d1f-5306-92d4e92abbf3.png)

このページレイアウトの「必須」にすれば
#### そのページレイアウトの項目は必須となります


では、この「項目の必須設定」と「ページレイアウトの必須設定」は同じ「必須」設定ですが何が違うのでしょうか？

ここで分かりやすく２つの例を紹介します

#### 例１
株式会社MOTOHASHIにはBtoB営業部部門とBtoC営業部門があります。
BtoB営業部門とBtoC営業部門は同じ「商談オブジェクト」を使ってますが営業の流れや入力項目がほとんど異なるので商談オブジェクトでレコードタイプ、ページレイアウトで分けています
さて、株式会社MOTOHASHIの社長は「商談に「商談ランク」というカスタム項目を作成し、すべての営業担当者は今後商談レコード作成時に「商談ランク」を必ず記載してほしい」と考えています。
この場合Salesforceシステム管理者はどのように設定をしましょう。


この場合、注目すべき点は
・レコード作成時に必ずすべてのユーザに特定の項目を必須として入力したい


です。
この場合、必須の設定は「項目の設定」をお勧めします

もう一つ例を挙げます

#### 例2
株式会社MOTOHASHIにはBtoB営業部部門とBtoC営業部門があります。
BtoB営業部門とBtoC営業部門は同じ「商談オブジェクト」を使ってますが営業の流れや入力項目がほとんど異なるので商談オブジェクトでレコードタイプ、ページレイアウトで分けています
さて、株式会社MOTOHASHIの社長は「商談に「商談ランク」というカスタム項目を作成し、BtoB営業担当者は今後商談レコード作成時に「商談ランク」を必ず記載してほしい」と考えています。
（どうやらこの会社では「商談ランク」という考えはBtoB営業部部門にはあるのですがBtoC営業部門には無いようです）
この場合Salesforceシステム管理者はどのように設定をしましょう。


この場合、注目すべき点は
・レコード作成時にBtoB営業担当者のみ特定の項目を必須として入力したい

です。
この場合、必須の設定は「ページレイアウトの設定」をお勧めします

もしも「項目の設定」で設定してしまうと、

BtoB営業部部門とBtoC営業部門全員が商談レコード作成時に「商談ランク」が必須化されてしまい、BtoC営業部門の人は困ってしまいますね


#### 入力規則での必須方法

さて、最後に入力規則についての説明を行います。

入力規則は、特定のレコード条件の場合、特定の項目の入力を促す設定が可能です


先ほどの項目やページレイアウトの必須設定と何が違うのでしょうか。
では、今回も分かりやすく例文を出します。


#### 例３
株式会社MOTOHASHIにはBtoB営業部部門とBtoC営業部門があります。
BtoB営業部門とBtoC営業部門は同じ「商談オブジェクト」を使ってますが営業の流れや入力項目がほとんど異なるので商談オブジェクトでレコードタイプ、ページレイアウトで分けています
さて、株式会社MOTOHASHIの社長は「商談に「商談ランク」というカスタム項目を作成し、すべての営業担当者は今後商談クローズ時に「商談ランク」を必ず記載してほしい（商談作成や商談中は商談ランクが空欄でも問題ない。あくまでクローズ時の商談ランクが知りたいので、商談クローズ時に必ず「商談ランク」に空欄が無いようにしたい）」と考えています。
この場合Salesforceシステム管理者はどのように設定をしましょう。


この場合、注目すべき点は
・商談クローズ時に特定の項目を必須として入力したい
・あくまで入力してほしいのは商談クローズ時、レコード新規作成時などは空欄でも構わない（空欄でも新規作成を許したい）

です。
この場合、項目の設定やページレイアウトの設定で「必須」対応をすることはできません

（必須の設定は「いかなるときも必須にするか」「それとも必須にしないか」しか設定できないのでこのようなクローズ時に必須　という設定はできません）

このように、特定のレコード条件の場合、特定の項目の入力を促す入力規則の設定になります。


#### なお、今回の例ですが、例３はもちろん、例１と例２も入力規則で対応可能といえば対応可能です。

しかしながら
・入力規則は複雑な数式を作成する必要がある
・必須はクリック１つなので設定が簡単

上記のように入力規則は作成が必須設定よりも大変なこともありますので、もしも必須設定で対応可能な場合はなるべく必須項目で対応することがお勧めです
（もちろんSalesforce環境ごとに最適解は違いますが。）
Go パッケージグローバル変数が何故アンスコで宣言されていたか？

[gin/render.go at master · gin-gonic/gin · GitHub](https://github.com/gin-gonic/gin/blob/master/render/render.go)

[Goのアンダースコアはどんな意味なのでしょうか？](https://teratail.com/questions/58180)

render　パッケージでアンスコを変数名にして変数を宣言しているが目的がわからなかったので調べた。

結論としては型名をRenderインターフェースとして宣言することによって代入している構造体は常にRenderインターフェースを実装していることを伝える目的で書かれている。(javaのimplみたい明示できないので)
【伝える技術】プレゼンテーション～３の法則～

エンジニアにとって**プレゼンテーション能力**はニーズの高いスキルの１つです
今回、**プレゼンテーション**で使えるテクニックを紹介します

## ３の法則（マジックナンバー３）
**３の法則**とは・・・
人間の『**記憶・印象に残りやすい**』数字が`３`であるという法則ことです
**マジックナンバー３**とも呼ばれます
※『ソースコードに直で書かれた自明でない数値』のことではありません

ちなみに人間の短期記憶の上限は`７`と言われているそうです

## プレゼンにおける３の法則
**３の法則**はプレゼンにおいて活用できます
**アピールポイント**や**要点**を**３つ**に絞って説明しましょう

実際に**３の法則**を活用したスライドの例を見てみます

### 悪いスライドの例
伝えたい内容をすべて列挙したスライド
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/838217b0-7916-c036-987a-f1c47cfb632c.png)

### 良いスライドの例
伝えたい内容を**３つ**に絞る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719666/ac400b9d-3d80-f920-8dd1-bc28e467e35a.png)

**印象・記憶に残る**という観点で、後者のスライドが優れているように感じると思います

## まとめ
**アピールポイント**や**要点**は**３つ**に絞る！
**３の法則**を活用して、印象に残るプレゼンをしましょう！
照度計のグラフをいじってみた

おうちモニター(oumon)で照度計のデーターをChart.js V2でグラフを表示しているのですが、いまいちピンときません。

![filename(8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/9cd71de3-d61d-5235-bf20-19e2a1718905.png)

センサーは東向きの窓際にあり、ほぼほぼ自然光の値です。

気圧のグラフを流用して作っていました。

元々48時間分のデーターをsqlite3からmrubyでjsonにして受け取っていたのですが、cgiにパラメータを追加して3日分とかの取得を取得を可能にしました。

```ruby
if params["days"]
  count = (params["days"].to_i - 1) * 24 + Time.new.to_s[11,2].to_i
else
  count = 48
end

i = 0
sel = "select date(datetime(date,time,'localtime')),time(datetime(date,time,'localtime')),temp,humi,atmo,lax from (select * from wsmst order by date desc, time desc limit " + count.to_s + ") as A order by date, time"
```

このデーターをjavascriptで日ごとに分解して、重ねて表示するようにしてみました。

![filename(7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/352d6504-d1f8-60df-2ca4-3ba6d52955f6.png)

Chart.jsぽくデフォルトのベジェ曲線で表示するようにしてみました

当日をdatasetsの最初に書き一番上にして、他は気持ちアルファを小さくしてあります。
libファイルが表示されない

# 概要
CloneやらGithubやらの関係っぽいので、libファイルが、表示されない。
そんなときありますよね？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/19ecad06-924c-6470-05db-63ebfca61f06.png)

Android Studio弄ってたら対処見つけたので共有です

# 方法
まず、`Project Structure`を開きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/27d68567-99d5-8210-534a-bcca36288fa0.png)

次に、これを`Remove`します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/9c263ad9-648d-228b-1853-6bfdfc0f029e.png)

次に、`Add Content Root`します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/529c6546-5d8c-c21a-7660-0b4f68cbe1cf.png)

最後に自分のフォルダを選択し、`OK`を押します。
![myFolder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/a292da3f-84f9-e43f-602e-2858222e2275.png)

`Apply`を押し、`OK`を押して、`Project Structure`を閉じます。
完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/bda2b237-f5fa-85be-f8de-32b34bcbd969.png)

こんな感じになるはずです。

# そもそもProject Structureが空な人
~~プロジェクト名.imlファイルでも作って、右クリックでモジュールに追加やらしたあと、右クリックでMake Moduleなんとかとかでなんとかなります。~~
たぶんなりません。
なんか頑張ってください。
再インストールをお勧めします
firestoreの利用量はKeyVisualizerを使うことでどこにアクセスできるか見渡す事ができるゾ！

こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[もぐめっと](https://mogmet.com)です。
![mogmet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/8460b01b-7130-f353-32a7-eb01c8582590.jpeg)
最近数年ぶりに夢の国に行きました。
ファストパスがなくなってスタンバイパスになったことで、秒殺でファストパスがなくなったり、プレミアムファストパスなるものが導入されていたり、お金とるようになっていたりと色々変わってました。

本日はfirestoreを開いたらKeyVisualizerなるものが追加されていたので試してみた記事になります。

## KeyVisualizerの使い方

firestoreの右上の「Google Cloudのその他の機能」から

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/d6b2b669-cfd8-0cbe-4299-b87ced934d22.png)

Key Visualizerをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/2d7bfc73-95d2-cce9-24ed-0f9deaaf134c.png)

すると過去にどれだけつかわれたのかを時刻とリードされたドキュメントベースでヒートマップで見れます。
![スクリーンショット 2022-07-27 16.04.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/b492e91d-43be-7e34-0e6d-4680a8d9cbd1.png)

色のところクリックするとどこのドキュメントなのか、どれくらいのアクセスなのかが見れます。
色が薄いほどアクセスが多いみたいですね。
![スクリーンショット 2022-07-27 16.07.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/aef33fda-714b-97ea-3e75-a053a455731f.png)


左側の白いところを押下すると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/18167273-7f1a-f106-d4a6-faf5050b26b6.png)

ドキュメント単位で細かく見れます。
![スクリーンショット 2022-07-27 18.46.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/290534ae-5aaf-1766-0082-0921067c300e.png)

見れるデータはいろいろ変更することができるのでreadが多いのか、writeが多いのかなどを判定することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/80caf659-6dc8-3e1a-3abe-fd7db1fe734f.png)

## まとめ

KeyVisualizerを使うことで本番のプロジェクトでのアクセス分布をみることができるようになりました！
これを使うことで利用料が多いときにどこが原因かなどを探ることができそうです！


最後に、[ワンナイト人狼オンライン](https://online.1nite-jinro.com/link/blog)というゲームを作ってます！よかったら遊んでね！

https://online.1nite-jinro.com/link/blog

他にも[Camecon](https://camecon.me/)や[Offcha](https://offcha.com/)、問い合わせ対応が簡単にできる[CSmart](https://csmart.jp/lp)といったサービスも作ってるのでよかったら使ってね！

https://camecon.me/

https://offcha.com/

https://csmart.jp/lp

また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。

https://virapture.com/

ラグナロクでもエンジニアやデザイナーのメンバーを募集しています！！楽しくぶち上げたい人はぜひお話ししましょう！！

https://ragna-rock.com
「DevRelとは何か、そして今日からどうすればいいのか？」


"What is DevRel and how can you start doing it today?"

https://dev.to/jacobandrewsky/what-is-devrel-and-how-can-you-start-doing-it-today-lpc

という記事の要点。DeepL翻訳を利用してのまとめです。

## 概要

- 初めて「DevRel」という言葉を聞いたとき、何を意味するのか分かりませんでした。
- Vue Storefrontに参加する前は、ポーランドの大手商社でeコマースサイトを構築する開発者として働き、その前は大企業でVue.jsを使ってテレビソフトウェアを構築していました。
- オープンソースのソフトウェアを使いながら、何も見返りがない（GitHubの星さえも）状態だったのです。VSFに参加したことで、誰もが使えるオープンソースソフトウェアを構築できることを知りました。それだけでなく、コミュニティのアップデートを作成したり、コントリビューターと会って一緒にプロジェクトを作ったり、イベントを開催したり、その他にもたくさんのことができるのです。
- DevRelという言葉を初めて聞き、瞬時に「自分が成長するための素晴らしい場所だ！」と感じました。

「DevRelのコンセプトと側面について深く掘り下げ、私のストーリーを共有し、今日からでもDevRelを始める手助けになればと思います」という話


### DevRelとは？

- DevRelとはDeveloper Relationsの略で、製品やプロジェクトを使っている開発者との関係を優先するアプローチ。
- DevRelとは開発者を教育し、コミュニティを成長させること
- DevRelとは、自社や製品、開発者が、外部の開発者と相互のコミュニケーションを通じて、良好で継続的な関係を築くためのマーケティング手法である。
- 企業によって、DevRelにはいくつかの形態がある。

### DevRelの種類

出典: https://www.swyx.io/measuring-devrel

以下に焦点を当てることができる。

- ドキュメンテーション
- イベント
- デベロッパーエクスペリエンス
- セールスデモの作成
- ビデオチュートリアル
- 記事一覧
- その他多数

DevRelという用語の意味は実に幅広い。日常的にこれらのトピックを少しづつこなすことになるのは間違いない。一つのことに集中したい人には不利ですが、複数のことにチャレンジしたい人には、DevRelはぴったりかもしれない。


### Samuel Snopko 

- 彼: https://twitter.com/SamuelSnopko
- Samuelは優れたDevRelであるだけでなく、優れたLeaderでもあった。
- 彼は、経験豊富で関わるDevRelを自分のチームに集め、その結果、コミュニティが成長し、多くのイベントに参加している。
- 最も重要なのは、モダンなフロントエンド技術の専門家であること。どんなフロントエンド技術を使っていても、Storyblok DevRelチームにはあなたを即座に助けてくれるエキスパートがいるということ。

https://twitter.com/SamuelSnopko/status/1512185171197538311?s=20&t=ytR2PmQ9KzD6trWAH3tHYQ


### そして...

- 影響を受けdev.toとVue Storefrontのブログに記事を書き始めることにした。ブログは以下

https://dev.to/jacobandrewsky

https://blog.vuestorefront.io/

https://dev.to/vue-storefront

- 記事を書くことは比較的簡単でありながら、真の価値を提供することができるのでとても楽しい。Vue.js、Nuxt.js、Vue Storefront、たくさんのことについて書いている。
- その後、Nuxt、Storyblok、Algoliaのエコシステムに貢献するようになった。結果、Organizationのアンバサダーになることができた。
- YouTubeチャンネルも始めた。こちら -> https://www.youtube.com/channel/UCW6UqQL88mtamj3wi7s0tLQ. 
- Vue Storefront、Nuxt、Headless Commerceに関するビデオを定期的に公開している。
- 結論から言うと「DevRelでなくてもDevRelはできる」。

### 今日からできること

- **「もしあなたが、自分の会社で素晴らしい製品を作っていて、それをもっと多くの人に見てもらい、使ってもらいたいと感じているなら、それが最初のステップになる。あなたができることは、製品に関する記事やブログポストを書き始めることです」**
- オープンソース製品では、コア製品がコントリビュータにオープンにされているので、そのようなコミュニティを作るのは簡単。
- 一方コア製品がエンタープライズ向けで、エンタープライズによってのみ開発されていても、良いDevRelとコミュニティが存在する例もある。
    - どのように使い始めるか、ユーザーが遭遇しやすい落とし穴は何か、特定の機能をどのように使うか。
    - あるいはフレームワークやツールが人気を集めていることに気づいたとする。そのフレームワークとあなたの製品を統合する方法について、簡単なGithubリポジトリを作成してはどうか？
    - 他の誰かがあなたの製品を使って新しいアプリケーションを構築することができるようになる。
- 「今日からDevRelを始めるために活用できるアプローチがたくさんあるので、ぜひ試してみてください😉」

## 「おまけ」

https://devrel.co/about/
https://dev.to/t/devrel
https://www.youtube.com/c/DevRel
https://leerob.io/blog/devrel-at-vercel

以上です～
【Git】最初のコミットメッセージを修正する

## 修正方法
以下のコマンドを実行します。
```:ターミナル
$ git rebase -i --root
```

するとGitで設定しているエディタが開きます。
```
pick f2a0ijl 最初のコミット
pick 4d506gf 2回目のコミット
pick 23456a5 3回目のコミット
```

最初のコミットの`pick`の箇所を編集します。

```
r f2a0ijl 最初のコミット
pick 4d506gf 2回目のコミット
pick 23456a5 3回目のコミット
```
すると以下のようにエディタに表示されます。
```
最初のコミット

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

```
コミットメッセージを変更して保存し、エディタを閉じます。
```
initial commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

```

コミットメッセージが変更されたことを確認して`push`します。
```
$ git push -f origin main
```
Bloggerの投稿画像の遅延読み込みの自動化にIntersection Observer APIを使ったJavaScriptプログラムと説明

Bloggerの記事／追加ページの投稿画像や動画の遅延読み込みをIntersection Observer APIを使って自動化するJavaScriptプログラムの内容を説明する。
```JavaScript:JavaScript
// 記事の本文の要素（psbd）と記事の本文の中身に付けたnoscript要素（blct）と記事の本文の要素の複製（npsbd）と新しいdiv要素（nl）の取得
const psbd = Blog1.querySelector("div.post-body"), blct = psbd.querySelector("noscript.blog-content"), npsbd = psbd.cloneNode(false), nl = document.createElement("div");

// 新しいdiv要素の高さを画面の縦幅と同じにする
nl.style.height = "100vh";

// 新しいdiv要素をnoscript要素の前に挿入する（無地の画面が最初に素早く出るようにしてプログラムの実行で記事の表示が遅れた際の違和感を減らすため）
psbd.insertBefore(nl, blct);

// 記事の本文の複製にnoscript要素のソースコードを入れる（noscript要素のソースコードはテキストだからそのままではHTMLとして扱えないため）
npsbd.insertAdjacentHTML("afterbegin", blct.innerText);

// 記事の本文の複製から画像要素を取得
const blimgs = npsbd.querySelectorAll("img");

// 画像の場合（画像か動画ありで振り分け済みの記事の本文から動画を除外するため／遅延読み込みに動画を含めるならば不要）
if (blimgs[0]) {

// 画像の配列をPromise.allとmapで並列処理
Promise.all([...blimgs].map(blimg => {

// 画像の縦横比（aroi）の取得
const aroi = blimg.dataset.originalWidth / blimg.dataset.originalHeight;

// 画像に縦幅がある場合、画像に横幅がなくて縦横比があれば算出して付ける
if (blimg.height) {
if (!blimg.width && aroi) blimg.width = blimg.height * aroi; }

// 縦幅がなくて横幅がある場合、縦横比があれば算出して縦幅を付ける
else if (blimg.width) {
if (aroi) blimg.height = blimg.width / aroi; }

// 縦幅も横幅もなくて縦横比があってCSSの縦横比の指定のaspect-ratioがない場合、画面の横幅に対する画像の縦幅を算出して画像の位置（ブログの最上段からの距離）を推測するためにCSSのaspect-ratioを付ける 
else if (aroi && !blimg.style.aspectRatio) {
blimg.style.aspectRatio = aroi; }

// 画像のalt属性が空だったら「イメージ」（日本語の場合）を記載する（Google検索のサイト評価のモバイルユーザビリティの警告を避けるため）
if (!blimg.alt) blimg.alt = "<data:messages.image/>";

// 画像要素のURLをカスタムデータへ移動してsrc属性から取り除いて画像要素を次のthen関数へ渡す
blimg.dataset.src = blimg.src; blimg.src = "": return blimg; })).then(results => {

// 記事の本文の複製を元の記事の本文（中身がnoscriptタグで止められたもの）と入れ換える（画像の位置を把握するために記事の本文を表示させるが、この時点ではsrc属性が空だから画像は読み込まれない）
psbd.parentNode.replaceChild(npsbd, psbd);

// 画像と画面の交差を監視するIntersection Observerのコンストラクター（postContentObserver）の設置
const postContentObserver = new IntersectionObserver(entries => {

// 監視する対象（画像要素）の配列の繰り返し処理
entries.forEach(entry => {

// 画面と交差した対象（画面に入った画像要素）の場合
if (entry.isIntersecting) {

// 監視する対象（画像要素）の取得
const et = entry.target;

// 監視する対象（画像要素）のsrc属性にカスタムデータのURLを移動して画像を表示してカスタムデータを削除して監視する対象（画像要素）の監視を終了する
et.src = et.dataset.src; delete et.dataset.src; postContentObserver.unobserve(et); }}); }, {

// 判定の余白を付ける（Intersection Observerコンストラクターのオプション）
rootMargin: "240px" });

// 画像の配列の繰り返し処理
results.forEach(result => {

// ブラウザがIntersection Observer APIに対応する場合は画像要素の監視を開始する
if ("IntersectionObserver" in window)
postContentObserver.observe(result);

// ブラウザがIntersection Observer APIに対応しない場合は画像要素のsrc属性にカスタムデータのURLを移動して画像を表示する
else result.src = result.dataset.src; }); }); }

// 動画の場合（遅延読み込みに動画を含めるならば不要）、記事の本文の複製を元の記事の本文（中身がnoscriptタグで止められたもの）と入れ換える（記事の本文が全て表示される）
else {
psbd.parentNode.replaceChild(npsbd, psbd); }
```
出典：[Bloggerの投稿画像の自動的な遅延読み込みを確実に行うためのプログラム](https://www.nagahitoyuki.com/2022/03/a-program-to-ensure-automatic-lazy-loading-of-posted-images-on-blogger.html)
Bloggerの投稿画像のWebPのrwの自動化のJavaScriptプログラムと説明

Bloggerの記事／追加ページの投稿画像にWebPへ軽量化するrwのパラメーターを自動的に付けるJavaScriptプログラムの内容を説明する。

```JavaScript:JavaScript
// 記事の本文の要素（psbd）と記事の本文の中身に付けたnoscript要素（blct）と記事の本文の要素の複製（npsbd）と新しいdiv要素（nl）の取得
const psbd = Blog1.querySelector("div.post-body"), blct = psbd.querySelector("noscript.blog-content"), npsbd = psbd.cloneNode(false), nl = document.createElement("div");

// 新しいdiv要素の高さを画面の縦幅と同じにする
nl.style.height = "100vh";

// 新しいdiv要素をnoscript要素の前に挿入する（無地の画面が最初に素早く出るようにしてプログラムの実行で記事の表示が遅れた際の違和感を減らすため）
psbd.insertBefore(nl, blct);

// 記事の本文の複製にnoscript要素のソースコードを入れる（noscript要素のソースコードはテキストだからそのままではHTMLとして扱えないため）
npsbd.insertAdjacentHTML("afterbegin", blct.innerText);

// 記事の本文の複製から画像要素を取得
const blimgs = npsbd.querySelectorAll("img");

// 画像の場合（画像か動画ありで振り分け済みの記事の本文から動画を除外するため／遅延読み込みに動画を含めるならば不要）
if (blimgs[0]) {

// 画像の配列をPromise.allとmapで並列処理
Promise.all([...blimgs].map(blimg => {

// 画像URL（bisrc）と画像の縦横比（aroi）の取得
const bisrc = blimg.src, aroi = blimg.dataset.originalWidth / blimg.dataset.originalHeight;

// 画像URLがblogger.googleusercontent.comのドメインの場合
if (/blogger\.googleusercontent\.com/.test(bisrc)) {

// 画像URLの末尾に既存のパラメーターがあれば「-rw」、何もなければ「=rw」を追加して書き換える
blimg.src = /=.*$/.test(bisrc) ? bisrc + "-rw" : bisrc + "=rw"; } else {

// 画像URLがblogger.googleusercontent.com以外のドメインで、末尾がjpg／JPGかjpeg／JPEGのファイル形式の場合
if (/\.jpg|jpeg$/i.test(bisrc)) {

// 画像URLと後ろから二つ前の半角スラッシュで囲まれた部分のパラメーターの取得
const pmoi = /^(.+\/)(.*)(\/.*)$/.exec(bisrc);

// 画像URLの既存のパラメーターに「-rw」を追加して書き換える
blimg.src = pmoi[1] + pmoi[2] + "-rw" + pmoi[3]; }}

// 画像に縦幅がある場合、画像に横幅がなくて縦横比があれば算出して付ける
if (blimg.height) {
if (!blimg.width && aroi) blimg.width = blimg.height * aroi; }

// 縦幅がなくて横幅がある場合、縦横比があれば算出して縦幅を付ける
else if (blimg.width) {
if (aroi) blimg.height = blimg.width / aroi; }

// 画像URLの書き換えを終えて次のthen関数へ処理を移す
})).then(() => {

// 記事の本文の複製を元の記事の本文（中身がnoscriptタグで止められたもの）と入れ換える（記事の本文とWebPのパラメーターのrw付きの画像URLで画像が表示される）
psbd.parentNode.replaceChild(npsbd, psbd); }); }

// 動画の場合（遅延読み込みに動画を含めるならば不要）、記事の本文の複製を元の記事の本文（中身がnoscriptタグで止められたもの）と入れ換える（記事の本文が全て表示される）
else {
psbd.parentNode.replaceChild(npsbd, psbd); }
```
出典：[Bloggerの記事／追加ページの投稿画像にWebPのrwを自動的に付けるプログラム](https://www.nagahitoyuki.com/2022/01/automatic-webp-rw-program-for-post-and-page-images-on-blogger.html)
MVCでのPOST RequestとGET Requestの流れ

# POST Request
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2662678/0e9bf53d-c4b1-63db-6414-5dd60d73cb85.png)

---

# GET Request
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2662678/a4006abb-b4b9-baf3-8835-bf6f11925c36.png)

---

#### CRUDはそれぞれPOSTとGETの中どちらを使用するロジック？
- Create : GET→POSTの順
- Read：GET
- Update：GET→POSTの順
- Delete：GET

<br>
文書で書くより絵のほうが理解しやすいと思い、pptで作ってみました。自分も勉強になりました。
覚えておくと便利なショートカットキー

# はじめに
こんにちは、かみむーです。
皆さんはパソコン作業で長時間のマウス操作を繰り返していると、指や腕が痛くなった経験、ありませんか？
これからご紹介するショートカットキーを覚えてキーボード操作に切り替えると、マウス操作より手の負担が減るだけでなく、
作業時間も短縮できるので、ぜひ活用することをお勧めします。
この記事では、特に使用頻度の高そうな（個人的主観ですが）ショートカットキーを選んで記載しました。
普段の業務に役立てもらえれば幸いです。

## ＜必須のショートカットキー＞
下のショートカットはパソコンを使う人なら、一番初めに覚えるショートカットキーです。

　　　1. コピー `[ Ctrl + C ]`
　　　2. 貼り付け `[ Ctrl + V ]`
　　　3. 切り取り `[ Ctrl + X ]`
　　　4. 取り消し・ひとつ前に戻る `[ Ctrl + Z ]`
　　　5. 取り消しの戻し `[ Ctrl + Y ]`

## ＜使用頻度の高いショートカットキー＞
編集や保存する大抵のアプリケーションで使用できます。

　　　1. 全選択 `[ Ctrl + A ]`
　　　2. 探す `[ Ctrl + F ]`
　　　3. フォーカスの移動 `[ Tab ]` `[ Shift + Tab ]` `[ → ]` `[ ↓ ]` `[ ← ]` `[ ↑ ]`
　　　　※いずれか一つ（以下省略）
　　　4. フォーカスがあたった所の選択(チェックオンオフ)・実行 `[ スペース ]` `[ Enter ]`
　　　5. 行頭 `[ HOME ]`
　　　6. 行末 `[ END ]`
　　　7. 大文字小文字の切替 `[ Shift + CapsLock ]`
　　　8. 画面表示の拡大・縮小 `[ Ctrl + マウスのホイール ]`

## ＜Windows操作時のショートカットキー＞
Windowsを操作する際に便利なショートカットキーをまとめました。
　　　1. アプリやウインドウの切り替え `[ Alt + Tab ]`
　　　2. デスクトップの表示（全ウインドウの最小化） `[ Windowsマーク + D ]`
　　　3. 画面ロック `[ Windowsマーク + L ]`
　　　4. ウィンドウを閉じる（アプリケーションの終了） `[ Alt + F4 ]`
　　　5. デスクトップの画面コピー（画面キャプチャ） `[ PrintScreen ]` `[PRTSC]`
　　　6. アクティブ画面のみの画面コピー `[ Alt + PrintScreen ]`

## ＜Excelのショートカットキー＞

個人的にExcelをよく使用するので、よく使うショートカットキーをまとめました。

#### アクティブセルの移動
　　　1. 最終セル(最後のセル)  `[ Ctrl + End ]`
　　　　※Shiftキーと合わせればセルの範囲選択が可能
　　　2. A1セルの選択 `[ Ctrl + Home ]`
　　　　※Shiftキーと合わせればセルの範囲選択が可能
　　　3. 連続入力セルの移動/連続空白セルの移動 `[ Ctrl + → ]` `[ Ctrl + ↓ ]` `[ Ctrl + ← ]` `[ Ctrl + ↑ ]`
　　　　※アクティブセルの枠上でのダブルクリックと同じ
　　　　※Shiftキーと合わせればセルの範囲選択が可能
　　　4. 選択範囲を行全体に拡張する `[ Shift + スペース ]`
　　　　※Excelの行番号のクリックと同じ
　　　　※入力モードが半角英数の時に限る
　　　5. 選択範囲を列全体に拡張する `[ Ctrl + スペース ]`
　　　　※Excelの列番号のクリックと同じ
　　　6. 右隣のシートへの移動 `[ Ctrl + PageDown ]`
　　　7. 左隣のシートへの移動 `[ Ctrl + PageUp ]`

#### セルの書式設定、文字編集
　　　8. セルの書式設定ダイアログ `[ Ctrl + 1 ]`
　　　9. 太文字 `[ Ctrl + B ]`
　　 10. 文字の下線 `[ Ctrl + U ]`
　　 11. アクティブセルの編集モード切替 `[ F2 ]`
　　　　※アクティブセルの枠内をダブルクリックと同じ
　　 12. 文字の取り消し線 `[ Ctrl + 5 ]`
　　 13. 今日の日付（パソコンの日付）の入力  `[ Ctrl + ; ]`
　　 14. 現時点の時刻の入力 `[ Ctrl + : ]`
　　 15. セル内での改行 `[ Alt + Enter ]`
　　 16. 形式を選択して貼付ダイアログの表示 `[ Ctrl + Alt + V ]`

#### たまに使う
　　 17. すぐ上のセル値をコピー `[ Ctrl + D ]`
　　 18. 左隣のセル値をコピー `[ Ctrl + R ]`
　　 19. セルの削除 `[ Ctrl + - ]`
　　 　　※アクティブセルの右クリックの削除と同じ
　　 20. セルの挿入 `[ Ctrl + Shift + + ]`
　　 21. フィルター設定・フィルター解除 `[ Ctrl + Shift + L ]`
　　 22. 直前の操作の繰り返し `[ F4 ]`
　　 23. 置換ダイアログの表示 `[ Ctrl + H ]`
　　 24. 印刷ダイアログの表示 `[ Ctrl + P ]`


#### 困ったとき
　　 25. スクロールロック・ロック解除 `[ Scroll-Lock ]` `[ Fn + C ]`


## 最後に
今回、使用頻度の高いと思われるショートカットをご紹介しましたが、まだまだショートカットキーは多く存在します。
「こんな便利なショートカットキーがあるのに（このページに）記載されてない」など、
追記してほしいショートカットキーがありましたら教えてください。

今後、ツールやミドルウェアでの便利なショートカットキーなども調査して、記載したいと考えています。