OmniAICreator/Qiita-1.07M huggingface dataset:
マイナンバー関連のパスワードを Google アカウントに紐づける方法

マイナンバーカードで手続きをする際にパスワードは全部で 4 種類ありますが、これらをすべて覚えるのは大変です。

- 署名用電子証明書の暗証番号 (アルファベット大文字・数字で 6 文字以上 16 文字以下)
- 利用者証明用電子証明用の暗証番号 (数字 4 桁)
- 住民基本台帳用の暗証番号 (数字 4 桁)
- 券面事項入力補助用の暗証番号 (数字 4 桁)

役所ではパスワードを控えるための用紙が提供されますが、エンジニアとしては（エンジニアでなくても）パスワードを紙に控えておくことはちょっと気が引けます。

ならば、これらのパスワードを Google アカウントで管理してしまえばいいのではないかと。
Google で何かのサービスにログインしたとき、パスワードを保存するダイアログが表示されることを利用します。

![save-password.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/7bf820b4-2a82-bbec-d802-9883bd8e4289.png)

LastPass や 1Password など、パスワード管理用のサービスもありますが、大半が有料サービスで、月額で料金がかかってしまうので今回はスキップします。

## 用意するもの

- PC
- Google Chrome
- エディタ
- POST リクエストが送信できるサーバー
  - Apache 等でなくても PHP, Python 等で簡易的に立ち上げるサーバーで問題ありません

## 手順

ここでは PHP のビルトイン Web サーバーを利用する方法をご紹介します。

### HTML を用意する

`index.html` を作成します。

```html
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">

<form action="/" method="post">
    <label for="input-name">パスワードの項目名</label>
    <input id="input-name" type="text" name="name" autocomplete="off"><br>
    <label for="input-password">パスワードの値</label>
    <input id="input-password" type="password" name="password"><br>
    <input type="submit" value="保存">
</form>
```

### 好きなドメイン名を決めて hosts ファイルに記載する

ここでは、マイナンバー関連であることがわかるように `mynumber.example.com` とします。
hosts ファイルに次の 1 行を記載します。

```text
127.0.0.1 mynumber.example.com
```

### サーバーを立ち上げてブラウザでアクセスする

サーバーを立ち上げます。

```sh
php -S mynumber.example.com:80
```

ブラウザで `http://mynumber.example.com` にアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/f1ef44ae-8a71-6c83-88fc-67aa3a6082ca.png)

### パスワードを保存する

項目名と値を入力し、「保存」ボタンをクリックします。

こういったダイアログが出てきたら、「保存」をクリックします。
出てこない場合は、アドレスバーの右側にある鍵マークをクリックすると出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/a11e9919-2c4b-5688-9148-18a33385e682.png)

### 保存されたパスワードを確認する

ブラウザで `chrome://settings/passwords` を開きます。

画面右上の「パスワードを検索」の欄に `mynumber` と入力し、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/f69ed0c3-4ca0-2e75-9c59-b1909bee0a3c.png)

先ほど保存したパスワードが表示されていれば成功です！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/4eea931f-47da-b691-5d0d-edf5b2091932.png)

・・・ていうか「追加」ボタンあるし。知らなかった。

---

## まとめ

今回ご紹介した方法は、実際に試していただいても構いませんが、あくまで読み物として楽しんでいただき、実際にパスワードを保存するのであれば以下の 2 ステップがおすすめです。

- ブラウザで `chrome://settings/passwords` を開く
- 追加ボタンを押し、以下の内容で登録する
    - サイト: `mynumber.example.com` (実在するサイトと被らないようにするのがポイント)
    - ユーザー名: ○○用
    - パスワード: (パスワード)
機械学習〜ロジスティック回帰　数学

##数学で躓く

ロジック回帰分析の全て
>https://www.youtube.com/watch?v=mMMzDFttZ8A
>https://qiita.com/matsukura04583/items/0fb73183e4a7a6f06aa5

###疑問１；商の微分公式とは？
商の微分係数の役割；分数の形の数字を簡単に素早く微分。
>https://mathtrain.jp/syonobibun

###疑問２；シグモイド関数について
シグモイド関数の役割はシグモイド関数特有の性質よりデータの概形作成。
不連続だがよく使う関数をなめらかな関数で近似する役割。
＊e=ネイピア数　
>https://atarimae.biz/archives/10256#i-2

複利で考えた際に元利に＋複利としていき極限値まで求めたもの。
#####シグモイド関数は確率を計算する上で便利。
グラフより上限１で加減が０となっていてX＝０の時Y=１／2になる。
軸となるのはこのX=0の時点の値１／2。
これは５０％を表していて５０％を基準としてプラスに進めば進むほど確率は上がり、マイナスに進めば進むほど確率は0％に近づいていく。


###疑問３；決定境界って何？
決定境界とは、クラスで分ける際にひく線のこと？
イメージ分析などで用いられる。

###疑問４；尤度関数って何？
>尤度関数（ゆうどかんすう、英: likelihood function）とは統計学において、ある前提条件に従って結果が出現する場合に、逆に観察結果からみて前提条件が「何々であった」と推測する尤もらしさ（もっともらしさ）を表す数値を、「何々」を変数とする関数として捉えたものである。また単に尤度ともいう。 wikiより

　youtubeの方がわかりやす
>https://www.youtube.com/watch?v=gVZ5qCoRxgo

###疑問５；パラメーター更新式って何？
パラメーター更新式は偏微分によって求められる。
偏微分は一つの変数を中心として考え他の変数を定数として考える。
ここで言う変数というのは、結果から逆算し結果を引き起こしている事象のことをいう？
パラメーターを用いる理由は関数における最も近しい法則を導き出すために用いる。
>機械学習ではこれを利用し、目的関数を各パラメータで微分することで、目的関数の最小値を探します。

###疑問５；標本データの標準化って何？
平均を０、分散を１としてデータの位置を把握しやすくする。
>なぜ、わざわざ正規分布を標準化する必要があるのでしょうか？
理由は標準化してしまうことにより、確率変数のある実現値が得られた時、その値が分布の中でどれくらいの位置にあるのかが分かりやすくなるからです。https://toukei.link/probabilitydistributions/standardnormal/#:~:text=%E6%A8%99%E6%BA%96%E6%AD%A3%E8%A6%8F%E5%88%86%E5%B8%83%E3%81%A8%E3%81%AF%E3%80%81%E5%B9%B3%E5%9D%87%E5%80%A40%E3%80%81%E5%88%86%E6%95%A31,%CF%832%3D1%20%E3%81%A8%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82&text=%E3%81%AA%E3%81%A9%E3%81%A8%E8%A1%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82,%E3%81%A7%E3%82%82%E4%BD%95%E3%81%A7%E3%82%82%E6%A7%8B%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82

###変な記号で何かわからない時は。
>https://www.benricho.org/symbol/kigou_09.html
東京都環境局で発表されている等価騒音レベルを機械学習を組み合わせて分析。

機械学習を組み合わせて分析を行うにあたって
モデルの選定や目的がわからなくなることを防ぐための記録

##データ分析の目的とは。

東京都の騒音状況を理解・把握したい。

###視点①理解思考型or応用試行型？
理解思考型の考えから東京都の騒音状況の性質について考える。
→理解思考型モデルの最終的な目標としては現象・データ生成ルールの理解。

###視点②データ・変数の選択と調整
＊理解思考型モデリングにおいての注意を踏まえ。
1.変数に関して次元の呪いがないかを確認。
2.離散値変数or連続値変数かを確認。
3.フィッシャーの三原則について

理解思考型モデリングにおいての仮定
「昼間等価騒音レベル８０以上の地域に説明変数の値の相関性があった場合、
騒音状況が〜であるとわかる」

目的変数→昼間等価騒音レベル80db以上
説明変数→自動車騒音、高架下、線路付近、居酒屋などの飲食店
目的変数のメカニズムについて考える場合！
・確率モデルを利用する。
・決定論的な数理構造を用いて変数の振る舞いを記述する

|　　|離散値変数or連続値変数|
|:-:|:-:|:-:|:-:|
|昼間等価騒音レベル|連続値変数|   |   |
|夜間等価騒音レベル|連続値変数|   |   |
|車線数|連続値変数|   |   |
|道路種別|離散値変数|   |   |
|遮音壁等の有無|離散値変数|   |   |
|車道端からの距離|連続値変数|　　|


###視点③エージェントベースモデルからの予測
エージェントベースモデルでは、要素の振る舞いを記述する。
要素の振る舞いを表す方法として常微分モデルや確率過程モデルを利用。
<strong><特徴></strong>
・要素の間にネットワークがあり、つながっている相手に相互作用する。
<strong>＜以下の要素から選んで考える＞</strong>
時系列
車線数
周辺の建物によって一定の重みを加える。


| 1 | 2 |
|:-:|:-:|
|   |   |
|   |   |
|   |   |
|   |   |
|   |   |
|   |   |
|   |   |
|   |   |
|   |   |
|   |   |

##実行内容

①一般的な理解試行型モデリングにおいて向いているデータの特徴について
・パラメータの数が少ない
・使用している関数が簡単
・モデルの各要素（数理構造・変数・パラメータ）が直感的に理解できる
・数理的に解析できる

###_理解思考型モデリングにおいて注意_
・変数などを作成特徴量エンジニアリングなどを行うとモデルの解釈性が下がったり、統計検定におけるp-hacking（所望の範囲のp値が出るまでデータをこねくり回すことのことを指す）につながったりするため、基本的には推奨されない。
・現実に何に対応するか説明できない変数に関しては排除する。


＊数理モデルに関して、推論とそのモデルとの辻褄が合うことつまり演繹的な思考で結果の信頼性は証明できるがそれよりも前のなぜ推論したダイナミクスが生じているのか？という問題に対しては何も言えない。それを証明するためには、さらに掘り下げて考える必要がある。

NowLoading
「達人プログラマー」を読んだので、その要点

[エンジニアとしてこの先生きのこるために - Speaker Deck](https://speakerdeck.com/rtechkouhou/enziniatositekofalsexian-sheng-kifalsekorutameni) でも登場する本、「達人プログラマー」を読んだ、読書感想文（脳内でマーカーを付けた部分のメモ）です。

[達人プログラマー（第2版） 熟達に向けたあなたの旅 | Ohmsha](https://www.ohmsha.co.jp/book/9784274226298/)
[達人プログラマー(第2版): 熟達に向けたあなたの旅 | Thomas,David, Hunt,Andrew, 雅章, 村上 |本 | 通販 | Amazon](https://www.amazon.co.jp/dp/4274226298)

![](https://images-na.ssl-images-amazon.com/images/I/51I6qY0nswL._SX350_BO1,204,203,200_.jpg)

## 感想

- 何でしょう、一言で表現するとプログラミングマッチョ思想
- より効率的、より生産的なプログラマーになりたいと願う人のための本 ...
- 達人プログラマーになるためには
    - 新しい物好き
    - 研究好き
    - 批判的
    - 現実的
    - 何でも屋
        - でありたい... 

### 第1章　達人の哲学
- あなたは組織を変えることができる。組織を変わることもできる。
- 「割れ窓理論」。割れ窓は作らない。
- 知識ポートフォリオ: あなたのポートフォリオを作成する。
    - 定期的に投資する
    - 多様化する
    - リスクを管理する
    - 安値で買い、高値で売る
    - 見直しと再配分をする
- 例えば
    - 毎年少なくとも言語を1つ学習する
    - 月に1冊のペースで技術書を読む
    - 技術書以外の書籍を読む
    - 講習を受講する
    - ユーザーグループに参加する
    - 異なった環境（WindowsだけでなくLinux）に慣れ親しむ
    - 最先端にとどまり続ける

### 第2章　達人のアプローチ
- 良い設計は悪い設計よりも変更しやすい
- DRY原則
- 直交性
    - 直交していないシステムは変更や制御が難しい
- 可逆性
- プロトタイプの真の目的は学びにある

### 第3章　基本的なツール
- シェル
- テキスト操作言語を学ぶ
- [達人プログラマーが使っているツールとは? | typememo.jp](https://typememo.jp/tech/pragmatic-programmer-chapter3/)

### 第4章　妄想の達人
- あなたは完璧なソフトウェアをつくることができない
- 予言は避ける
- https://zenn.dev/link/comments/bbc40c1ec4d35d

### 第5章　柳に雪折れ無し
- `find . -type f | xargs wc -l | sort -n | tail -5`

```bash
/home/e99h2121
e99h2121@DESKTOP-8PG96UV:~$ find . -type f | xargs wc -l | sort -n | tail -5
  27 ./.profile
  86 ./.viminfo
 117 ./.bashrc
 157 ./.bash_history
 402 total
```
- `find . -type f | xargs wc -l | sort -n | tail -6 | head -5`

```bash
e99h2121@DESKTOP-8PG96UV:~$ find . -type f | xargs wc -l | sort -n | tail -6 | head -5
   7 ./.bash_logout
  27 ./.profile
  86 ./.viminfo
 117 ./.bashrc
 157 ./.bash_history
```

### 第6章　並行性
- ワークフローを強調させるためにはホワイトボードというコンセプトを活用する。ちょっと難しい

### 第7章　コーディング段階
- 命名大事
- コードで使用する名前に明確さは必要ですが、ブランディングは全く別の話となります。プロジェクトやプロジェクトチームの名前には、曖昧で「気の利いた」名前を付けることが昔からの伝統として受け継がれてきています。
### 第8章　プロジェクトを始める前に
- 自ら欲しているものを正確に認識している人などいない
- プログラマーの仕事は、人々自身が欲しているものを気づいてもらえるように支援すること
- 要求はフィードバックループの中で学んでいくものである
- ユーザーとともに働き、ユーザーのように考える
- 枠にとらわれずに考えるのではなく、枠を見つけ出す
- ともに働く

### 第9章　達人のプロジェクト

- 計画する
- あなたの作品に署名する

## 参考


[達人プログラマーまとめ - Qiita](https://qiita.com/m-hatano/items/872c26106240e0e21e0f)
[「達人プログラマー」を読んだ](https://zenn.dev/hiroendore/articles/6e04c87f42b974)
[達人プログラマー 第2版はいいぞ](https://zenn.dev/taiga533/articles/904e842f67d8bf#%E8%AA%AD%E3%81%BF%E3%81%8D%E3%81%A3%E3%81%9F%E6%84%9F%E6%83%B3)
[達人プログラマー第2版_読書メモ](https://gist.github.com/gushernobindsme/d74a89a3a8a37891ae7d423b5a796478)

以下スライドを見ると更にモチベーションが湧くとおもう。

<script async class="speakerdeck-embed" data-id="f92624dfc28b49e48acb0614b3d62d96" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>

以上です～
Azureアカウントを作成してみた

# はじめに
“エンジニアファーストの会社　株式会社CRE-CO”のクワバラと申します。

Azureを個人で勉強用に使用したいと考え、無料でアカウント登録ができるため、アカウントを作成してみようと考えています。
これができれば[Azure公式サイトURL](https://azure.microsoft.com/ja-jp/free/search/?&ef_id=CjwKCAjwnZaVBhA6EiwAVVyv9NcBLxET2UUtffuf5aJ9GNKgvGMz-7mmQo6hxrU57ClQX2WxKsAF_BoC0ScQAvD_BwE:G:s&OCID=AID2200208_SEM_CjwKCAjwnZaVBhA6EiwAVVyv9NcBLxET2UUtffuf5aJ9GNKgvGMz-7mmQo6hxrU57ClQX2WxKsAF_BoC0ScQAvD_BwE:G:s&gclid=CjwKCAjwnZaVBhA6EiwAVVyv9NcBLxET2UUtffuf5aJ9GNKgvGMz-7mmQo6hxrU57ClQX2WxKsAF_BoC0ScQAvD_BwE)記載の12か月間の無料サービスを試すことができるので、環境を整えたいと思います:relaxed:

需要があるかは置いておいて、、、

それでは、レッツゴー！！

## アカウント作成手順
### 1 Azure公式サイトへアクセス（[Azure公式サイトURL](https://azure.microsoft.com/ja-jp/free/search/?&ef_id=CjwKCAjwnZaVBhA6EiwAVVyv9NcBLxET2UUtffuf5aJ9GNKgvGMz-7mmQo6hxrU57ClQX2WxKsAF_BoC0ScQAvD_BwE:G:s&OCID=AID2200208_SEM_CjwKCAjwnZaVBhA6EiwAVVyv9NcBLxET2UUtffuf5aJ9GNKgvGMz-7mmQo6hxrU57ClQX2WxKsAF_BoC0ScQAvD_BwE:G:s&gclid=CjwKCAjwnZaVBhA6EiwAVVyv9NcBLxET2UUtffuf5aJ9GNKgvGMz-7mmQo6hxrU57ClQX2WxKsAF_BoC0ScQAvD_BwE)）
上記URLを選択して下記画面にアクセス
緑色の「無料で始める」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/71ff05f8-fb03-74cb-84d5-8885f3e55bf5.png)

### 2 Microsoftアカウントのサインインを行う
自分のMicrosoftアカウントに使用しているメールアドレスとパスワードを記載してサインインを行う。
※GitHubアカウントでも可能であるが、今回はMicrosoftアカウントでサインインを行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/61059ea3-8577-566d-c092-f1da14762a12.png)

### 3 プロフィールの設定を行う
各項目の設定を行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/5d372f63-ae07-07f3-22f0-adc84da2052c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/9737a9d3-96cf-ff9e-ac84-a2435cc0b82d.png)

### 4 カードによる本人確認の設定を行う
各項目の入力を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/6937bd29-108a-ccf9-2604-346908e62a51.png)

### 5 利用準備確認画面の確認
「Go to the Azure portal」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/aa1785f1-ed3b-38a4-4e14-67da771753af.png)

### 6 Azureポータルへアクセスできることを確認
「Go to the Azure portal」を選択後、下記画面に移動することを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2576052/0c242eea-dffb-f417-98ac-8f9f7b668f2b.png)

# おわりに
今回Azureのアカウントを比較的簡単に作成することができたと思います。
Microsoft社の製品ということでアカウント連携等非常に便利だと実感しました。

どのようなサービスがそろっているのか、まだまだ知識不足なため、サービスの概要や無料利用枠等、
調査していければと思っています:relaxed:

今回もクワバラの他愛もない記事を閲覧いただきありがとうございました！
2022/6/13主にITとかセキュリティの記事

不正アクセスで上越市ガス水道局のサイト一部改ざん 午後7時に復旧 個人情報の流出なし(6/10)
https://www.joetsu.ne.jp/184484

Passkeys(パスキー)って結局なんなの？ パスワードの「怖さ」や「面倒臭さ」を解消する機能です(6/10)
https://gunosy.com/articles/eYWf7

5月マルウェアランキング、キーロガー「Snake Keylogger」がPDFで感染拡大(6/10)
https://news.mynavi.jp/techplus/article/20220610-2364564/

「面倒」より「安全」を　田辺でサイバーセキュリティー講座(6/11)
https://www.agara.co.jp/article/204732?rct=nnews

Web3時代「日本の勝機」　連続起業家・小林氏の見立て(6/11)
https://www.nikkei.com/article/DGXZQOUC316DC0R30C22A5000000/

暗号資産に交錯する期待　Web3に備える3冊 慶応大学教授　坂井豊貴（今を読み解く）(6/11)
https://www.nikkei.com/article/DGXZQOUD309FM0Q2A530C2000000/

Cake DeFiはリトアニアの登録機関から仮想通貨ライセンスを取得(6/10)
https://nextmoney.jp/?p=50979

東京都 島しょ部で利用できる商品券 システム障害で一時停止(6/11)
https://www3.nhk.or.jp/news/html/20220611/k10013667281000.html

東京都のプレミアム付き商品券「しまぽ通貨」でトラブル(6/11)
https://www.nikkei.com/article/DGXZQOCC1116X0R10C22A6000000/

LINE、「ほしいものリスト」の情報誤配信　友人以外にも(6/11)
https://www.nikkei.com/article/DGXZQOUC10B350Q2A610C2000000/

「BOOK☆WALKER」で不正ログイン発生　パスワード変更、購入履歴確認など呼び掛け(6/10)
https://news.infoseek.co.jp/article/itmedia_news_20220610185/?tpgnr=it

TISAXⓇ – 自動車業界における情報セキュリティ標準の普及(6/10)
https://www.bureauveritas.jp/magazine/220610/004
【TypeScript】アクセス修飾子 

## アクセス修飾子とは
アクセス修飾子を使用することでメンバのアクセス範囲を限定することができます。
アクセス修飾子には`public`, `private`, `protected`があります。
| アクセス修飾子 | 範囲 |
|:-:|:- |
| なし         | publicと同様  |
| public      | どこからでもアクセス可能  |
| private     | クラス内のみアクセス可能   |
| protected   | クラス内とサブクラスからアクセス可能 |

## public
``` ts
class Person { 
  // publicは省略可
  public name: string
  public age: number
  constructor(name: string, age: number) {
    this.name = name
    this.age = age
  }
  profile(): string {
    return `name: ${this.name}, age: ${this.age}`
  }
}

let tanaka = new Person("Tanaka", 32)
console.log(tanaka.profile())
// > name: Tanaka, age: 32
// public のため参照可能
```

## private
```ts
class Person {
  public name: string
  // private　に変更
  private age: number
  constructor(name: string, age: number) {
    this.name = name
    this.age = age
  }
  profile(): string {
    return `name: ${this.name}, age: ${this.age}`
  }
}

let tanaka = new Person("Tanaka", 32)
console.log(tanaka.profile())
//  > name: Tanaka, age: 32
// Profile 内のため参照可能
console.log(tanaka.name)
// > Tanaka
// public のため参照可能
console.log(tanaka.age)
// > error TS2341: Property 'age' is private and only accessible within class 'Person'.
// Person 外のため参照不可
```

## protected
```ts
class Person {
  public name: string
  // public　に変更
  public age: number
  // protected を追加
  protected nationality: string
  constructor(name: string, age: number, nationality: string) {
    this.name = name
    this.age = age
    this.nationality = nationality
  }
  profile(): string {
    return `name: ${this.name}, age: ${this.age}`
  }
}

class Android extends Person {
  constructor(name: string, age: number, nationality: string) {
    super(name, age, nationality)
  }
  profile(): string {
    return `name: ${this.name}, age: ${this.age}, nationality: ${this.nationality}`
  }
}

let kato = new Android("kato", 24, "Japan")
console.log(kato.nationality)
// > error TS2445: Property 'nationality' is protected and only accessible within class 'Person' and its subclasses.
// Preson 内でも Android 内でもないため参照不可
console.log(kato.profile())
// > name: kato, age: 24, nationality: Japan
// Android 内のため参照可能
```
SwiftUIでもサイドメニューを作ってみた。

# はじめに
SwiftUIを勉強始めました!!
UIKitでも自分なりに考えて制作したサイドメニュー

https://qiita.com/masasumi0327/items/00a81a3dbbadbdd4f1e6

をSwiftUIでも作れるか、トライしてみました。
GitHubにソースコード貼っておきました。

https://github.com/masatakasumida/SideMenu-SwiftUI

### 参考にした記事
https://dev.classmethod.jp/articles/swiftui_overlay_sidemenu/

https://qiita.com/mass_ssa/items/8f0f75b688819d6838f1

https://d1v1b.com/swiftui/various_slidemenu


#### 機能
・スワイプで画面遷移
・「SideMenu」ボタンから画面遷移
・遷移後、スワイプで画面を閉じれる
・画面外からでもスワイプで画面を閉じれる、タップでも閉じれる
・それぞれの画面遷移時、開度に応じて画面を開く、閉じるを判断して最適な遷移が出来る

細かいアニメーションの部分で、改善したい所があるので、適宜更新していきたいと思います。

![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2428088/387d8d14-d8f8-58ca-cbc0-88138f2760e5.gif)

# さいごに
最終的なコードの記述量が、UIKitと比べると凄くスッキリ書けました。
一行ごとに、何をしているのかも分かりやすく、面白いし、今後も継続して勉強していきたいと思いました!!
【AWS】料金の管理~その１~

## 記事の対象者
インフラの勉強をしたいけど、AWSの料金が心配な方

## 経緯
以前投稿した[請求書の内訳が気になったお話](https://qiita.com/wark_ran/items/5e1ff2126839e7ab47c1)から、その他のサービスの料金についても調べることにしました。

## 注意点
あくまで個人で触った範囲でしか調べていないです。
情報に漏れがある可能性もあるので、参考程度に見て頂けると幸いです。

## 目次
①EC2
②EBS
③S3
④RDS
⑤EIP
⑥ALB
⑦AMI
⑧Route53

## EC2
AWSが提供する仮想サーバーです。
EC2の無料枠は、以下の通りです。

**１、AWSアカウント作成後、１年間
２、月７５０時間まで
３、無料のインスタンスタイプであること（私はt2.microだった）
４、EC2インスタンス全体でカウントされる**

## EBS
EC2で使用するブロックストレージです。
処理速度を高速化したいデータの保存に適しています。
参考URL : [AmazonS3とAmazonEBSの違い](https://bcblog.sios.jp/what-is-amazon-ebs/#Amazon_S3)
EBSの無料枠は、以下の通りです。

**1、月30GiBまで
[注意点]※EC2を停止してもEBSに対しての課金は停まらないため、個別で削除すること**

## S3
EC2で使用するオブジェクトストレージです。
耐久性が高く大量のデータを保存することに適しています。
参考URL : [AmazonS3とAmazonEBSの違い](https://bcblog.sios.jp/what-is-amazon-ebs/#Amazon_S3)
S3は、実際に使った分のみ料金を支払うシステムで、最低料金の設定はありません。
利用料金は下記４つで発生します。
詳しい料金設定については[公式](https://aws.amazon.com/jp/s3/pricing/?nc=sn&loc=4)をご確認ください。

**・ストレージの料金
→S3バケットにオブジェクトを保存するための料金
・リクエストとデータ取り出しの料金
→オブジェクトに対するリクエストやデータ取り出しに対する料金
・マネジメントとレプリケーションの料金
→アカウントのバケットで有効になっているストレージを管理するための料金
・データ転送の料金
→S3のデータ転送にかかる料金**

## RDS
AWSが提供するクラウド型のデータベースサービスです。
無料枠と有料枠で利用できる機能が変わります。
RDSの無料枠は、以下の通りです。

**１、月750時間まで
２、20 GB の汎用 (SSD) データベースストレージ
３、20 GB のデータベースバックアップおよび DB スナップショット用ストレージ
[注意]※RDSのDBインスタンスは停止から７日間、経過した後、8日目には自動的にインスタンスが起動する。**

## EIP
Elastic IP」の略称で、AWSで固定IPアドレスを利用したいときに便利なサービスです。
EIPは、稼働中のEC2インスタンスに関連付けられている場合は、料金はかかりません。
ただし、下記２つの場合は料金が発生します。

**１、EIPが関連付けられていない
２、関連付けられたEC２インスタンスが停止状態である**

## ALB
「ALB（Application Load Balancer）」は、アプリケーションへのトラフィックを複数のターゲットに分散するサービスです。
ALBはHTTPやHTTPSトラフィックの負荷分散に向いているロードバランサーです。
参考URL : [AWSロードバランサーについて](https://www.cloudsolution.tokai-com.co.jp/white-paper/2021/0830-251.html#anc-02-01)
ALBは、使用した分のみ料金が発生します。

**[注意]※アクセスがなくても料金が発生するため、使用しない時は削除する。
1、時間（または1時間未満）あたり、0.0243USD
２、LCU時間（または1時間未満）あたり、0.008USD**

## AMI
EC2インスタンスの構成を取得し、テンプレートを作成するサービスです。
スナップショットを使用し、無料枠を超えると料金が発生します。
AMIの無料枠は、以下の通りです。

**１、1ヶ月あたり1GBまで**

## Route53
ドメインネームシステム (DNS) ウェブサービスです。
参考URL：[Route53はどんなサービス？](https://www.fenet.jp/aws/column/aws-beginner/311/)
利用料金が発生する条件は下記です。

**1、取得したドメインの維持費用（取得時、更新時（１年後））
２、ホストゾーンの維持・管理に発生する費用（25ゾーンまでは$0.5/月）
３、DNSクエリへの応答時に発生する費用**


## まとめ
無料枠はアカウント登録してから１年間になります。その後は設定料金に従い料金が発生します。
１年間の無料枠を有効活用できるようにしたいです。
最後まで読んでいただきありがとうございました。
web系エンジニアになりたいと思って勉強を初めて３ヶ月が経ちました。

html、css、javascript、reactを勉強してきて初めて思ったことデーターベースを勉強しないと何もwebサイト作れないことを今日初めて知りました。今まで避けてきたmysqlを本格的に勉強を始めたいと思います。
学び直しのJS ~ var・let・const編 ~

Reactの勉強にあたってES6の仕様をしっかりと理解しておかないと後々つまづきそうなので、
学び直しの第一弾としてやっていこうかなと思います！

## 早見表
|       | 再宣言 | 再代入 | スコープ | ホイスティング | 
| :---: | :----: | :----: | :------: | :------------: | 
| let   | ×      | ○     | ブロック | ×              | 
| const | ×      | ×      | ブロック | ×              | 
| var   | ○     | ○     | 関数     | undefined      |  

基本的には`const`を使って、再代入が必要な時は`let`を使う。
`var`は**非推奨**。

## 再宣言
JavaScriptでは変数を宣言する際に`let` `const`または`var`を変数名の前に付けるのですが,
同じ変数名を使って宣言し直すことを**再宣言**といいます。

varを使って例にするとこんな感じです。
最初の行で定義したnameを次の行で再宣言しています。
```javascript
var name = "Mike";
var name = "Bob";
```

次の例は再宣言ではなく<font color="red">**再代入**</font>です！
```javascript
var name = "Mike";
name = "Bob";
```

再宣言をできるのはvarだけです。
letやconstは再宣言をしてしまうとエラーになります。

## 再代入
再代入は変数に一度設定した値を上書きすることをいいます。
const以外は再代入が可能です。
```javascript
let language = "Japanese";
language = "English"; // OK

var name = "Mike";
name ="Bob"; // OK

const taxRate = 0.1;
taxRate = 0.15; // ERROR
```

## スコープ
スコープは変数や関数が参照できる範囲のことをいいます。

### ブロックスコープ
ブロック(`{}`)毎に作られるスコープのことをブロックスコープといいます。
ブロックの内側で宣言した変数は、ブロックの外側からアクセスできず、ブロックの内側からのみアクセスが可能となります。
`let`或いは`const`で宣言された変数はブロックスコープの変数になります。
```javascript
const name = "Mike";

{
  console.log(name); // ブロックの外側に宣言した変数を参照しているのでOK

  const message1 = "Hello World";
}

console.log(message1); // ブロックの内側で宣言した変数を参照しているのでERROR

let age = 20;

if (age >= 20) {
  const message2 = `${name}は${age}歳なので成人しています`;
  var message3 = "varは関数スコープ";
}

console.log(message2); // ブロックの内側で宣言した変数を参照しているのでERROR
console.log(message3); // varはブロックスコープではないのでOK
```

### 関数スコープ
関数毎に作られるスコープのことを関数スコープといいます。

```javascript
{
  var message1 = "Hello World";
}

console.log(message1);

function fn1() {
  var message2 = "fn1が呼び出されました";
}

console.log(message2);
```

## ホイスティング
ホイスティングは変数や関数をコード実行前にメモリに配置することをいいます。
`宣言の巻き上げ`といったりもします。
JavaScriptは上から順に処理が実行されるので、関数の定義より先に関数の呼び出しがあったらエラーになりそうですが、コード実行前にメモリに配置するのでエラーにはなりません。
```javascript
fn1(); // 関数の定義より先に関数の呼び出しがあってもエラーにならない

function fn1() {
  console.log("Hello World");
}
```
<br>

varは宣言した値がホイスティングされた時の値になるのではなく、**undefined**がホイスティングされた時の値になります。

```javascript
console.log(name); // undefined

var name = "Mike";
```
<br>

対して、letとconstは未定義のものを参照しようとした時点でエラーになります。

```javascript
console.log(name); // ERROR
console.log(language); // ERROR

const name = "Mike";
let language = "English";
```
<br>

関数をホイスティングさせたくない場合は、無名関数をletあるいはconstの変数に代入してあげればOKです。

```javascript
something(); // constで定義しているのでERROR

const something = function () {
  console.log("Hello World");
};
```
wsl2環境へsshログインするまでの手順

# これは
本稿は、wsl2環境にsshログインするまでに私が実施した手順をまとめたものです。なお、認証方法はパスワード認証です。

# 環境
OSは`Windows 11 Home(21H2)`, wslは`Ubuntu 20.04 LTS`です。

# 手順
## 1. ホスト鍵を生成
ssh接続のためホスト鍵を作成します。
```bash
$ sudo ssh-keygen -A
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
```

## 2. sshdのパスワード認証を許可
sshdのパスワード認証を許可するため、`/etc/ssh/sshd_config`の`PasswordAuthentication`を`yes`に設定します。
```bash
$ sudo vi /etc/ssh/sshd_config

- 変更前
PasswordAuthentication no
- 変更後
PasswordAuthentication yes
```

## 3. sshdの自動起動を設定
wsl環境ではsshdは自動起動しないため、`/etc/wsl.conf`の設定でwsl起動時にsshdが自動起動するように設定します。
```bash
$ sudo vi /etc/wsl.conf

- 追記
[boot]
command = service ssh start
```

## 4. ssh接続する
teratermなどでssh接続をします。なお、wsl環境へは**localhostを指定することで接続できます**。
これは、下記に示す通り`localhostForwarding`の設定がデフォルト`true`に設定されているためです。
https://docs.microsoft.com/ja-jp/windows/wsl/wsl-config#configuration-setting-for-wslconfig

以上です。Enjoy!!
git resetを2回やってunknown revision or path not in the working tree.と出た時の対処法

今すぐに2回目のresetをしたい人向け。本質的な解決方法ではないです。

# 起きたこと
1回目のgit reset --hard HEAD~xxはできたが、2回目をすると以下のエラーが出た。
```
fatal: ambiguous argument 'HEAD~xx': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
```
``HEAD~xx``という引数が曖昧だと言っている。

# じゃあid指定しよう
``git reflog``の一番左に表示されるIDを引数に渡せば流石に曖昧じゃないだろう、と思い実行すると成功した。
```
$ git reflog
...
e1499887 HEAD@{15}: commit: docker化した
$ git reset --hard e1499887
HEAD is now at e1499887 docker化した
```

# 参考
https://www.reddit.com/r/git/comments/mv6u75/what_does_fatal_ambiguous_argument_argument_name/
ActiveAdminの検索条件の入力欄の左右を入れ替える方法

# 概要
ActvieAdminの検索条件でテキスト入力で検索する場合に、
「を含む」「等しい」「で始まる」「で終わる」が表示されます。

日本語化すると違和感あるため、修正したいなと思って試行錯誤した結果、
CSSで左右入れ替えることにしました。

# 環境
Rails 7.0

Gemfile
```
gem 'activeadmin'
gem 'devise'
# 日本語化
gem 'rails-i18n'
gem 'devise-i18n'
gem 'enum_help'
```

# 対策
app/assets/stylesheets/active_admin.scssに追加
```
#active_admin_content {
  #sidebar .sidebar_section .select_and_search {
    input {
      float: left !important;
    }
    select {
      width: auto;
      margin-left: 4px;
    }
  }
}
```

# スクリーンショット
* 変更前
![スクリーンショット 2022-06-13 002835.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20061/de67a39d-637f-4a2c-3fc6-765ce0b31d9c.png)

* 変更後
![スクリーンショット 2022-06-13 003530.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20061/6c9fff21-fc23-dc42-67f8-ba6c898d0b71.png)

# 備考
幅や位置はデザインごとに調整してください！
直近のfollowerの行動記録

こんなにfollow順番が似てるのってどういう現象＝偽識別子

https://qiita.com/kaizen_nagoya/items/ea0de85a2e5fbcbdd06e

直近の１６人を記録させてください。

私の行動：F:follow,B:Block, X:このアカウントは利用規約違反によりユーザー資格を取り消されています。

|ID |投稿数|follow数|Follower|質問数|いいね数|コメント・編集リクエスト等|私の行動|
|:--|--:|--:|--:|--:|--:|--:|--:|
|@xfrogboutique|0|30|0|0|0|0|
|@bolabanteng|0|20|0|0|0|0|X|
|@ibetaku|1|5|3|0|約340|2|F|
|@davids9287|0|31|0|0|0|0|||
|@lloydvgibson|0|31|0|0|0|0|||
|@rtsukasa|0|7|0|0|2|0|||
|@hoangkhuong|0|27|0|0|0|0|||
|@a_jengineer|3|9|6|0|1|0|F|
|@71j20010|0|31|0|0|1|0|||
@nedesengineering|0|7|0|0|0|0||||
|@TSM|0|30|0|0|0|0||||
|@felixwangyq1113|0|8|1|0|8|0||||
|@islamic-quran-center|0|28|0|0|0|0|||
|@doithuonghot|0|5|0|0|0|0|X|
|@kpasso1015|11|62|27|0|約300|17|F|
|@Akira_0917|0|3|0|0|6|0|F|

基本的に、followさせていただくのは、
githubにIDのある方は、Githubで積極的に活動されている方か、
Qiitaの記事５つ拝見して、自分のいいね（LGTM)基準をみたされている方とさせていただいています。

twitterにIDのある方は、Twitterのつぶやきと、Qiitaの記事３つ拝見し、自分のいいね（LGTM)基準をみたされている方とさせていただいています。

今回、2022年3月24日以降に、なんらかの行動があった1000項目から、
followいただいた100人くらいの方のうち、40人くらいの方をブロックさせていただき、
10人の方のfollowを取り消させていただきました。

もし、記事をご投稿いただいた際に、私の記事のどれかを参照して書いていただければ、
その記事の内容にもとづいて、ブロックを取り消させていただいたり、followさせていただこうと思います。なんつう上から目線。

こちらの一方的な都合で、厳密な基準もないままの行動で申し訳ありません。

なにか、ご不明の点がありましたら、コメント欄におかきいただけると幸いです。

原則的に、いいね（LGTM)をいただいた方にのみ反応させていただいています。

よろしくお願いします。


いいねが少数の場合のいいね先の例：

https://qiita.com/taijusanagi/items/9ce63d64c9f5b4d6b66e

https://qiita.com/saki-engineering/items/afe8fd6f1ff946e19735

https://qiita.com/htnk/items/dac2dca3cc67b98b2fe7


# 参考資料

人格改造　あいうえお。仮説（185）

https://qiita.com/kaizen_nagoya/items/bfae8b4a486ee5fd72de

記事を書こう or いいね(LGTM)しよう。followはそれから。

https://qiita.com/kaizen_nagoya/items/3116c6e18b6e0ca6c9fe


偽識別子(fake ID)と呼んでもいいですか

https://qiita.com/kaizen_nagoya/items/ad466661c9985457cb70

ブロックさせていただきました。followを取り消させていただきました。

https://qiita.com/kaizen_nagoya/items/a1bfb426cfed1b534dfe

ブロックさせていただきました。followを取り消させていただきました(2)

https://qiita.com/kaizen_nagoya/items/51363c3e3e6d4396a067

いいね(lgtm)せずにfollowする人の行動を分類

https://qiita.com/kaizen_nagoya/items/1496dac5a85d10b461d9


p.s. 20220716追記

記事を書かれた方は、中身を拝見し、followさせていただきました。
名前を出してしまってごめんなさい。

@shiracamus さんのおかげで、上記のうち、@bolabanteng @doithuonghotが、

>このアカウントは利用規約違反によりユーザー資格を取り消されています。

としてもらえました。

明らかにおかしいIDを、Qiitaが放置していたり、常連の方々が放置されているのがなぜかよくわかっていませんでした。皆さんもお忙しいそがしいでしょうから、毎週対応するのは無理としても、毎月くらいの頻度で対応するとよいかもと感じています。
この追記も１ヶ月遅れで申し訳ありません。その後も、31 followしている人が新たに登場して、誰かが、どこかで指南しているのを追跡したいと思いつつ、該当IDの方のアクセス経路を調べるプログラムが書けずに、、、。


２０２３年５月追記
その後の調べでは、同一行動をとっている人の何割かはスパムでないことが判明しました。
一部の人が怪しいIDだからといって、同じ行動をとっている人がすべて怪しいことはないことが判明しまいsた。
アプリ、サイトなどで、まず２１人フォローしようということをお勧めされている方がおみえのようです。

いくつかのSNSでは、主催者自体が推奨していたり、フォローしないと先に進めないサイトがあったりします。キータがどういうつもりかよくわかっていません。関係者とお話しした際も、フォローについての話題はでませんでした。キータも高校などの関係で、ISとかアクセス数とか、後悔できない事情がいろいろあり、経営判断がよくゆらいでいるのかもしれません。

Qiitaが調べて、それらのアプリ、サイトに助言してくださるのがいいかと考え、Qiitaにはお伝えしているつもりです。お返事を欲しいという文章は書いていません。お返事はいただいていません。

ver. 0.01 初稿 　20220613
ver. 0.02 ありがとう追記 20230503

## 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
wingetを使ってみる

# はじめに

SSDを入れ替えるついでにWindows11をインストールし直したので環境構築のメモ

いつもは[Chocolatey](https://chocolatey.org/)を使っていましたが、今回は標準でバンドルされるようになったwingetを利用。
ただ標準でバンドルされるようになった気がしていたんですがインストールされていなかったのでMicrosoft Storeにて `アプリインストーラー` をインストールする必要がありました。

https://www.microsoft.com/p/app-installer/9nblggh4nns1#activetab=pivot:overviewtab

使い方は凄く簡単

```powershell
winget search クエリ
```

で検索して

```powershell
winget install ID
```

でインストール。
IDじゃなくクエリのままでもインストールできますが、複数の候補がある場合インストールできないのでIDを指定したほうがよい。
また、検索結果にMicrosoft Store版と、winget版(おそらく公式サイト配布の物)の両方があるならどちらをインストールしても良いと思いますが、バージョン表示されないStore版よりもバージョンが表示されwingetで更新チェックも行えるwinget版を利用した方が今後もwingetを使うなら良さそうかなと。

https://docs.microsoft.com/ja-jp/windows/package-manager/winget/install

とりあえず必要そうなのをインストール

```powershell
winget install Microsoft.PowerShell
winget install Microsoft.VC++2015-2022Redist-x86
winget install Microsoft.VC++2015-2022Redist-x64
winget install vscode
winget install Notion
winget install Zoom.Zoom
winget install SlackTechnologies.Slack
winget install Git.Git
winget install Docker.DockerDesktop
winget install JetBrains.Toolbox
```

更新は

```powershell
winget upgrade
```

を引数なしで実行すれば更新可能なアプリケーションが、winget以外でインストールしたアプリケーションについても表示されます。便利。

```powershell
winget upgrade ID
```

で個別更新するか

```powershell
winget upgrade --all
```

で全て最新に更新する

# Chocolateyとの比較

Chocolateyと比較するとwingetはGUIが無く、対応アプリケーションが少ないのがデメリットのように思いますが、Chocolateyとは異なりアプリを独自管理せず標準のWindows Installerのデータベースを使っているので問題が起こりずらいと思いますし、細かいことを気にする必要が無いというのがメリットだと思います。
何よりMicrosoft公式のパッケージ マネージャーってのが良いですよね。

# 最後に

Windows11を新規インストールしたのは初めてだったので初知りだったんですが、[Windows Terminal](https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701?hl=ja-jp&gl=JP)が標準バンドルされるようになったんですね。あとは`Windows PowerShell` ではなく `PowerShell` を標準にして欲しいなと。
DAでエラーが発生したタイミングで画面全体をスクショする方法

## はじめに
DS[^1]のWebロボットと違って、DA[^2]では１ステップごとに画面の動きを一時停止することはできません。
一般的にRPAというのはロボットに合わせてアプリが動きを止めるのではなく、動き続けるアプリにタイミングを合わせてロボットが画面操作をしていくものなので、たまに足を滑らせてロボットがコケたとしても「単に足を滑らせたのか」「足場が崩れてバランスを失ったのか」エラーを検知して人が駆け付けた時には既にアプリの状態が変わっていて、 __事故発生時の状況__ が確認できないこともあります。

現実世界では「ドライブレコーダ」が事故の状況を録画して後からでも確認可能ですが、ロボットの場合にはエラーが発生した瞬間のPC画面やアプリケーション画面を __パシャリ__ とスナップし、後から確認しています。

別に普通にBizRobo!でやってることなのですが（v10.7以降で可能）「えっ！できないよ」と言う反応が周辺からあったので、説明したついでにこちらでもまとめてみようと思います。

:::note info
確かに標準機能として自動的にスナップを撮っているのではなく既存の機能を組み合わせて実現しているので「できないよ？」という反応が返ってくるのは無理のない部分もありますが、特別なことをやっているわけでもないので皆が使えるようになるといいなぁと思います。
:::

## スクショを撮っている処理の周辺
以下のように何らかの処理を実行するにあたり、「〇〇が見つからなかった場合」や「〇〇秒経過したとき」など異常時のパターンを設定します。
デフォルトでは「60秒経過したとき」→「TimeOutError」という処理が自動的に挿入されますが、その場合にも間に `エラー画像抽出` のステップ群を挿入することで、任意のフォルダにエラー発生時のスナップを画像ファイル[^3]として保存してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1524794/25edba78-68e6-fb4f-1b9c-7d137378aca3.png)
`エラー画像抽出` の中身ですが、とりあえずこんな風に作ってあります。（いつもコピペで張り付けてます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1524794/1eb440bb-bae5-b29d-49ba-b43b9e08180f.png)
1. スクショを撮る範囲を指定しています。
大体はPCの画面全体とか、Chromiumを使っているときには操作対象のウィンドウ全体を指定します。
1. ロボットファイルシステムを使って指定のリモートドライブに出力したり、ローカルドライブにパス指定して出力することができます。[^4]
デバッグ時にはローカルドライブに出力するのが楽ですが、本番環境で動かす場合にはロボットファイルシステムを使って特定のフォルダに出力するようにすれば複数のデバイスから出力されるスクショを一か所で集中管理できるのでその方が実用的だと思います。
1. スクショ取得処理もロボットの処理なので、万が一失敗したときにはその旨ログに出力されるようにしています。

## サンプルの説明
実物のサンプルがあった方がわかりやすいと思うので、v10.7.0.9 にて作成したものを __[GitHub](https://github.com/1010-junji/bizrobo-tips/tree/main/ExtractSnap/Library)__ からダウンロードできるようにしました。

ちなみに、実際のサンプルから取得したスクショのサンプルは以下。（うちはデュアルディスプレイなので２画面分取得されてますね。。まったく参考にならないと思いますが。）
![hoge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1524794/d921d126-32b2-43ca-9dbc-1ebd0f2a1998.png)

## まとめ
今回 DAに関するスクショについて記述しましたが、DSのWebロボットでも同じように画面イメージを取得できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1524794/d14793f2-02ac-bd2b-6b63-fc0ffc75feea.png)
Webロボットの場合にはどちらかというと画像よりも画面に読み込んだHTMLのソースを定期的にファイル出力していました。
というのは外部のサイトにアクセスする機会が多く、ある日突然サイトの構造が変わってロボットが動かなくなってしまった時などに非常に役立ったからです。
構造が変わっってしまったサイトと定期的に取得していたサイトのソースを比較すればどこが構造上変化したのか比較できるため、ロボットを修正する際にも変更箇所をピンポイントでとらえて調整することができるからですね。

まぁ、実はこれについてもDAでも同様にXML形式で画面の構成情報を抜き出すことができるんですね。WebサイトだけでなくWindowsアプリケーションに対しても同様に。ただ、これについては気が向いたらまた別途紹介させていただきます。

BizRobo！って結構こういうマニアックなところが便利だったりするのですが、私の知る狭い範囲では使いこなせている人があまりいなくて残念だったりします。

## 追記（2022.06.18）
その後、画面全体のスクショを撮る方法としてもっと簡単な方法を教えてもらったので紹介します。
```
[Windows] + [PrintScreen]
```
の同時押しで png 形式の画像が自動的に以下のフォルダに出力されます。
```
C:\Users\%username%\Pictures\Screenshots
```
出力される画像のファイル名を指定できないのがいまいちではありますが、まぁこれでも用途によっては十分かもしれませんね。

ちなみにDAでの設定方法は以下の通り。
| 設定例 | コメント |
| :---: | :--- |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1524794/41f65792-31f8-39af-3f38-d26bdcc5ab55.png) | - キープレスステップ <br/>- キーコード：v0x5b v0x2c v0x2c, fu v0x5b,fu |


[^1]:Design Studio
[^2]:Desktop Automation
[^3]:出力時の拡張子を bmp にしても png にしても jpg にしても画像ソフトで開けますが、実際の画像の形式は不明です。。
[^4]:以下の通り出力先を選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1524794/89b0ec81-fd82-46e6-9f26-2715fec1c861.png)
requireとは？permitとは？ストロングパラメータとは？

# はじめに
WebからPostリクエストやPatchリクエストによって送られきた情報は**paramsの中のモデルの中の値**のように入れ子構造になって格納され、サーバーに渡される。
``` 言語名:app/controllers/posts_controller.rb
  def post_params
    # params[:post][:content]のように階層構造になっている
    params.require(:post).permit(:content)
  end
```
これだけのコードだが、一つずつ読み解いていく。

使用環境は以下の通りである。
| No |    項目     |   内容    |
|---:|-------------|------------|
| 1  |      OS       |   Mac     |
| 2  |       Ruby      |   2.6.3   |
| 3  |       rails      |      6.0.4 |
# 目次
[1.requireとは](#1-requireとは)
[2.permitとは](#2-permitとは)
[3.ストロングパラメータとは](#3-ストロングパラメータとは)
[4.まとめ](#4-まとめ)

# 1. requireとは
params.require(:post)　で、paramsに渡すモデルを指定する。

# 2. permitとは
params.permit(:content)　で、paramsに渡すキーを指定する。
ちなみに、これらの指定はストロングパラメータと呼ばれる。
[参考元](https://qiita.com/ozackiee/items/f100fd51f4839b3fdca8)
# 3. ストロングパラメータとは
本当に必要な情報のみをWeb上でやり取りすることができるように設定すること。
これにより、admin権限の改ざんなど、悪質な行為を制御できる。
# 4. まとめ
`params.require(:post).permit(:content)` で、paramsに渡すモデルを`:post`、キーを`:content`に指定する。
これにより、`params[:post][:content]`に値が渡される。
ggplot2で描いた生存曲線の見栄えを微調整したい

# survminerで描画した生存曲線の微調整
Rパッケージ[survminer](https://rpkgs.datanovia.com/survminer/index.html)は生存分析と可視化が簡単にできる。
しかしggplot2は独特の癖があるため、そのままでは論文には使いづらい場合がある。
微調整の方法を忘備録として書き残す。あくまで可視化についての内容なので。

テストデータ
架空のデータ。マウスに病原体を感染させ、片方には治療介入をして生存への影響を見た。

```r
library(survival)
library(survminer)
# テストデータ
group <- c("control", "control", "control", "control", "control", "control", "control", "control", "control", "control",
           "treated", "treated", "treated", "treated", "treated", "treated", "treated", "treated", "treated", "treated")
time <- c(25, 26, 24, 29, 28, 25, 27, 29, 30, 23, 41, 50, 44, 42, 47, 39, 49, 51, 37, 48)
censor <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
# dataframeにまとめる
data <- data.frame(group = group, time = time, censor = censor)

survdiff(Surv(time, censor) ~ group, data = data)
test_fit <- survfit(Surv(time,censor)~group, data = data)
qiita <- ggsurvplot(fit = test_fit, 
                   data = data, 
                   legend.title = "",
                   legend.labs = c("control", "treated"),
                   legend = c(0.9, 0.7),
                   font.legend = 20,
                   xlab = "days post infection", 
                   ylab = "Survival (%)",
                   font.x = 30,
                   font.y = 30,
                   xlim = c(0, 55),
                   palette = "lancet",
                   font.xtickslab = 22,
                   font.ytickslab = 22, 
                   size = 3,
                   surv.scale = c("percent")
)
qiita
```
![c8168323-45a1-4758-a469-7af1d435e7e4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233994/12dc7400-c08c-24af-aac2-5f193e475559.png)

これでも良いが、ggplot2特有の隙間がどうしてもできてしまう。
直してみる。

```r
qiita_new <- qiita$plot + scale_y_continuous(expand = c(0, 0), limits = c(0, 1.05), breaks = seq(0, 1, by = 0.2), labels = seq(0, 100, by = 20))
qiita_new
```
![113c9a2f-6276-4c50-b197-eaee72edf59d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233994/1ef1136e-55f5-9625-66ea-475d504fdf04.png)

もう少し直す。
```r
qiita_new + scale_x_continuous(expand = c(0, 0)) + theme(element_line(size = 2), axis.ticks = element_line(size = 2), axis.ticks.length = unit(5, "mm"))
```

![3584405f-726e-4a36-b5f1-8f49e7b6cf66.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233994/d30337a7-b94a-23d7-3261-10af8cae6561.png)

だいぶそれっぽくなったのではないでしょうか。
本質ではないと言われればそれまで。でも、見栄えの良い図が欲しい。趣味みたいなものです。
おしまい。
Lチカで始めるテスト自動化(23)ブレッドボード互換のユニバーサル基板

## 1. はじめに
ソフト屋さんでありながらも必要とあればメカやエレキも触るSQA（ソフトウェアのQAエンジニア）は回路設計の専門家でないがゆえにブレッドボードでテストツールを試作したり実装したりすることがあります。

ところでブレッドボードははんだ付け不要でお手軽ですがしっかり止めたいとなるとはんだ付けしたくなると思います。とはいえ基板を起こすのは手間だしユニバーサル基板にスズメッキ線でチマチマ配線するのは1枚作るだけでも大変です。

そんなときブレッドボード互換のユニバーサル基板が便利です。

## 2. サンハヤト UB-BRD01
上側に[サンハヤト](https://www.sunhayato.co.jp)のブレッドボード[SAD-101](https://shop.sunhayato.co.jp/products/sad-101)、下側にブレッドボード互換ユニバーサル基板[UB-BRD01](https://shop.sunhayato.co.jp/products/ub-brd01)を示します。横が1～30、縦がa～f、g～lの部品エリアと下部に電源ラインが引いてあります。標準的なブレッドボードと比べると電源ラインが片側のみ、その代わり回路エリアが広いです。UB-BRD01はブレッドボードで実装した回路をそのまま移植できます。
![breadboard_s01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221758/92a5d272-0d35-3383-f1cd-42def2644506.jpeg)

基板の表面と裏面です。**RoHS指令対応**で裏面は**鉛フリーはんだ**仕上げです。今時、特に理由がなければ職場のはんだは鉛フリーはんだで統一されていると思いますのでRoHS指令対応は安心ですね。
![breadboard_s02](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221758/010162b0-f0fb-efb0-1840-b18af04ff529.jpeg)

:::note
RoHSはThe Restriction of the use of certain Hazardous Substances in electrical and electronic equipment（電気・電子機器に含まれる特定有害物質の使用制限に関する欧州議会及び理事会指令）の略称で、電気・電子機器廃棄時の有害物質による環境汚染を抑制するため特定有害物質（鉛、水銀、カドミウム、六価クロムなど）の使用を制限するものです。
:::

基板にネジ穴がないためゴム足を両面テープで貼ったりスペーサーで筐体に貼り付けたりします。秋月電子通商の[基板用ワンタッチスペーサー　両面テープ付](https://akizukidenshi.com/catalog/g/gP-12347/)の使用例を以下に示します。
![breadboard_s03](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221758/eb328d67-8ba8-5e47-73ed-2ba8cc9e808d.jpeg)

## 3. おわりに
鉛フリーはんだ用のはんだごてを鉛入りはんだでコンタミ（汚染）しないよう筆者は趣味の電子工作とリモートワークのはんだ付けのどちらも鉛フリーはんだで行っています。テストツールを設計、実装される際はRoHS指令対応にも気を配っていただければと思います。
サクラエディタでJSON整形

サクラエディタでJSONを整形する方法を紹介します（力技）。

## jqをダウンロードする
（いきなり力業ですが）お使いの環境にjqが無い場合は下記よりjqをダウンロードし、適当な場所に配置します。
[Download jq](https://stedolan.github.io/jq/download/) [^1]

## jq実行用のキーマクロを作成する
① 上部メニューのツール(T)より「キーマクロの記録開始(R)」を実行する。

② ツール(T)の「外部コマンド実行(X)」を実行し、下記のように入力する。
![img1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241891/fc1d9af2-34cb-00b2-9ff8-f98d92d09dc3.png)
| 項目 | 設定内容 |
|:-|:-|
| 名前(N) | jqまでのパス |
| 標準出力を得る(S) | チェックを入れてUTF-8選択 |
| 標準入力に送る(I) | チェックを入れてUTF-8選択 |
| 標準出力リダイレクト先 | 編集中のウィンドウ(C)選択 |

③ ②を実行する

④ ツール(T)の「キーマクロの記録終了＆保存(M)」でキーマクロ記録の終了および保存する。
キーマクロは下記のようになっています。[^2]
![img3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241891/17d4d967-81b4-24d6-503b-869fcfd7cedd.png)

⑤ マクロとして登録しておくと便利です。
Fileに入力する際のパス区切り文字に注意ください（相対パススラッシュ区切りでも起動しました）。
![img5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241891/0504da67-f34f-c2dc-3459-19e21545ffc9.png)
![img6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241891/c6188209-ea95-cb5b-c73f-5ef9df99e0a8.png)
![img7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241891/2d53c657-e0c9-3003-798f-2a51c728a2e1.png)

## おわりに
今回はサクラエディタより編集内容のをjqに渡して整形結果を得る方法を紹介しました。
この方法で様々なプログラムが（もちろん自作プログラムも）呼び出せるので、シンプルなエディタですができることがかなり広がるかと思います。
皆様の作業が少しでも楽になれば幸いです。

[^1]:JSONを扱う業務ではかなり重宝しました。jqの詳細は https://stedolan.github.io/jq/
[^2]:実はExecCommandを紹介することが目的でした
[Unity] CommandInvokationFailure: Failed to update Android SDK package list.

# 経緯
UnityでAndroidビルドしようとしたらエラー。何もいじっていないはずなのに。
```:エラー内容
CommandInvokationFailure: Failed to update Android SDK package list.
```

# 解決方法

Preference > ExternalTools
AndroidのJDKとSDKのチェックを外す。
一度設定ウィンドウを閉じる。
JDKとSDKのチェックを再度入れる。

直る。

# 環境
macOS Monterey
Unity 2020.3.34f1

# 参考文献
- [【Unity】failed to update android sdk package listの解決方法](https://ymgsapo.com/2021/08/18/%E3%80%90unity%E3%80%91failed-to-update-android-sdk-package-list%E3%81%AE%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95/)
[Unity] duplicate symbol for architecture arm64

# 経緯
Unityで作ってるアプリをXcodeでビルドしようとしたらエラーが。
何かが重複して存在しているっぽい。


```:エラー内容
duplicate symbol '_requestIDFA' in:
    /Users/hoge/Library/Developer/Xcode/DerivedData/Unity-iPhone-cwyshjudtfdtzegrxrvyryduqogv/Build/Intermediates.noindex/ArchiveIntermediates/Unity-iPhone/IntermediateBuildFilesPath/Unity-iPhone.build/Release-iphoneos/UnityFramework.build/Objects-normal/arm64/RequestAttDialog-5e6bdc01a9588a8b4d1572842eba3a98.o
    /Users/hoge/Library/Developer/Xcode/DerivedData/Unity-iPhone-cwyshjudtfdtzegrxrvyryduqogv/Build/Intermediates.noindex/ArchiveIntermediates/Unity-iPhone/IntermediateBuildFilesPath/Unity-iPhone.build/Release-iphoneos/UnityFramework.build/Objects-normal/arm64/RequestAttDialog-ff0606b37cf49ec30d45e70892504c3f.o
ld: 1 duplicate symbol for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
```

# 解決方法
エラーを見たら簡単でした。
```
duplicate symbol '_requestIDFA' in:...
```
とあるように、
ファイル名から何から全く同じ.mmファイルが複数存在し、そのファイルの中で定義されているrequestIDFA() が重複していた。
なので重複している関数が書かれているファイルの片方を削除することで解決

# 環境
macOS Monterey
Unity 2020.3.34f1
初心者がinstagramの自動いいね作ってみた



概要
<h1>pythonを触り始めて1ヶ月ほど経ったのでアウトプットをしてみる</h1>

<h2>流れ</h2>  

インスタへの自動ログイン
↓
タグのページへ移動
↓
最新の投稿のパス？を取得
↓
いいね、次の投稿へのスワイプを実行
（ループを回す）  



<h2>必要なライブラリのインポート</h2>

```python
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time
```

<h2>　自動ブラウザの起動</h2>

```python
browser = webdriver.Chrome()
url = 'https://www.instagram.com/explore/'
browser.get(url)
time.sleep(3)
keyword_tag = 'タグ名'
username = 'ユーザーネーム'
password = 'パスワード'
num_nice = 100
```

<h2>ログイン処理</h2>  

```python
elem_username = browser.find_element_by_name('username')
elem_username.send_keys(username)
elem_password = browser.find_element_by_name("password")
elem_password.send_keys(password)
elem_botton = browser.find_element_by_xpath('/html/body/div[1]/section/main/div/div/div[1]/div[2]/form/div/div[3]')
time.sleep(1)
elem_botton.click()
time.sleep(3)
```
<h2> 指定したタグページに移動</h2>

```python
def function_search(keyword_tag):
    browser.get( url +"tags/"+ keyword_tag)
    time.sleep(3)
function_search(keyword_tag)
time.sleep(5)

```
<h2>最初の投稿へ焦点を合わせる</h2>

```python
elem_first_target =browser.find_element_by_xpath('/html/body/div[1]/div/div[1]/div/div[1]/div/div/div[1]/div[1]/section/main/article/div[2]/div/div[1]/div[1]')
elem_first_target.click()
nice_num = 100
time.sleep(3)

```
<h2>投稿へのいいねと次の投稿への移動</h2>

```python

for i in range(nice_num-1):
    elem_target = browser.find_element_by_class_name('_aamw').click()
    time.sleep(3)
    elem_next = browser.find_element_by_xpath('/html/body/div[1]/div/div[1]/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[1]/div/div/div[2]/button').click()
    time.sleep(5)
```







<h3>感想</h3>
初めてカタチになるものを作ってみて、さらにプログラミングへの興味が増した。しかし、今後どのような学習をしていけばいいか曖昧な状況であり、学生のうちに就職可能な実力をつけたいところです。
それぞれの処理を関数でまとめたいのだが、browserが定義されていないとエラーを吐くので諦めた。
統計検定2級を目指して統計学学び直し

[こちら](https://bellcurve.jp/statistics/course/18769.html)を参考にしつつ、統計学の学び直しを図ります。

## 1-3.データからグラフを作ってみよう2
#### まとめ
・データが量的変数ならば度数分布表が作れる
・度数分布表が作れる場合は階級の区分は気を付ける事（適当に階級を区切らない）

少しづつ専門用語が出てきて難しくなってきましたね。（相対度数とか）
少しづつ使って（見て）、どんどん慣れていきましょう。

## 相対度数とは
相対度数はデータの総数をN、その階級の度数をX(i)とすると以下式で表せます
```math
相対度数 = \frac{X_{i}}{N}×100　(1)
``` 
各相対度数を順番に足していけば必ず100になります。
早速これは示してみましょう。
データの総数は100です。

| 度数 | 相対度数 |
|:-:|:-:|
| 5 | ? |
| 10 | ? |
| 30 | ? |
| 35 | ? |
| 20 | ? |

先ほど、各相対度数は、(1)式によって求められることは分かっているので
上の表を埋めると下記のようになります。

| 度数 | 相対度数 |
|:-:|:-:|
| 5 | 5% |
| 10 | 10% |
| 30 | 30% |
| 35 | 35% |
| 20 | 20% |

ではここで、各相対度数を足し合わせてみましょう。
簡単な足し算で出来るので、計算は省略しますが合計100%になったはずです。

##### つまり、相対度数は全体に対しての<font color="red">割合</font>を表していることになります。
ここから話を進めていく際、難しい言葉がたくさん出てくると思います。
その際は、一つずつ意味をしっかりと把握していきましょう！（私も進んでは分からない言葉を調べたりしています...一進一退ですね！）

階級地の設定に関しては深くは述べません。興味がある方は調べてみるといいかもしれません！

## クイズ
下記、度数分布表を見て、pythonを用いグラフを記載せよ。

| 階級 | 度数 |
|:-:|:-:|
|  26~28 | 5 |
| 28~30 | 10 |
| 30~32 | 30 |
| 32~34 | 35 |
| 34~36 | 20 |

もしpythonでのグラフを忘れてしまった人は以前の記事を見ていただくといいかもしれません...
ヒントは「matplotlib」は様々なグラフを準備してくれている、ですよ！

## 回答
一例をお見せします。

```python:ヒストグラム
import matplotlib.pyplot as plt
#from matplotlib import pyplot as plt でも可能
x1 = [26 for x in range(5)]
x2 = [29 for x in range(10)]
x3 = [31 for x in range(30)]
x4 = [33 for x in range(35)]
x5 = [36 for x in range(20)]

x = x1 + x2 + x3 + x4 + x5

#print(x)

plt.xlim(26,36)
#範囲の指定
plt.hist(x,bins = 5)
#binsによってどれだけ棒を表示させるか決められる、今回だと5個のグラフが表示されている
plt.grid()
plt.show();
```
すこし見慣れないものが現れましたね...
こちらに関しては敢えて内緒にしておきましょう！！（笑）
大丈夫です、googleで調べてみてください！
作者は度数を因数に与えてしまっていて、グラフが全然できませんでした。
みなさんは引っ掛かりませんでしたか？
分からない箇所は質問してもらって大丈夫です！

（内包表記の部分に関しては一つずつ値を与えても大丈夫です！
もしくは、for文を回しながら、20回までは26~28の値、その次は28~30、といった形でappendを用いて追加することもできそうですね！）
Node.jsに初めて触れてみた


## 背景
今までバックエンドの言語に触れたことがなかった。（そもそも駆け出しエンジニア。笑）
自分で以前作ったアプリでは、
MBaaSのFirebaseでバックエンドの処理を代行してもらってた程度。

そんな状態ではいかんぜよ。。
ということで、Node.jsの基本を学んだので、
復習もかねて、アウトプットしてみる。

## 前提
* Node.js(v16.14.2）
* VSCode
→適当なディレクトリでtest.jsを作成しておく

## Node.jsを学ぼう
それでは、いってみよう～！
### 【1】簡単な計算をしてみよう
以下のように、aに10を、bに5という数値を入れて、
console.logにてa+bの結果を表示させてみる。
```test.js
let a = 10;
let b = 5;
console.log(a+b);
```
VSCodeでターミナルを開き、`node test.js`を実行。
そうすると、以下のように結果を表示してくれる。
```ターミナル
C:\example\example> node test.js
15
```
#### 重要
このような使い方では、Node.jsじゃなくてもよくね？と疑問が出る。
実は、Node.jsには凄くたくさんのライブラリがある。
このライブラリをうまく使う事で、非常に大きな効果が出る。

### 【2】Node.jsでライブラリを読み込んでみよう
以下の例を実行してみる
```test.js
const os = require('os');
console.log(os.arch());
console.log(os.version());
console.log(os.totalmem());
console.log(os.platform());
```
結果はここには載せないが、
ライブラリを利用する事で、
自分のパソコンのOS情報を簡単に読み込むことができる。

#### 【重要】
Node.jsを使いたいときは、
実行したい事がライブラリにあるかをまずはGoogle等で調べるようにする。
ただし、バージョンによって、ライブラリの利用可否が変わるとのこと。

### 【3】Node.jsでファイルにアクセスしてみよう
タイトルの通り、ファイルにアクセスする事もできる。

まずは、test.jsと同じ階層に、test.txtを作成し、
適当なコメントを入力・保存する。
```test.txt
Happy Weekend!!
```

以下の例を実行してみる
```test.js
const fs = require('fs');
fs.readFile('./test.txt', (err, file) => {
  if (err) {
    console.log(err);
  } else {
    console.log(file);
  }
})
```
#### 【重要】
* fsは、file systemの略。
* readFileは、非同期で読み込む。
* コールバック関数。

この状態で、`node test.js`を実行してみる
結果
```ターミナル
<Buffer 48 61 70 70 79 20 57 65 65 6b 65 6e 64 21 0d 0a>
```
おやおやおや？なんだこれは？笑
と一瞬思ったが、問題ないらしい。（後述）

以下コードで実行してみる。
→utf-8でエンコーディング
```test.js
const fs = require('fs');
let text = fs.readFileSync('./test.txt', 'utf-8')
console.log(text);
```
test.txtファイルの中身をutf-8でエンコーディングし、
textで宣言する。
そして、console.logでtextを表示させる流れ。
結果
```ターミナル
Happy Weekend!
```
表示できたー！

### 【4】補足：同期・非同期処理について
【3】で記載したが、`fs.readFile`は非同期処理である。
試しに以下のように、
console.logで処理前・処理中・処理後を追記して、実行してみる。

```test.js
const fs = require('fs');
console.log('処理の前にあるコメント');
fs.readFile('./test.txt', (err, file) => {
  console.log('処理の中にあるコメント');
  if (err) {
    console.log(err);
  } else {
    console.log(file);
  }
})
console.log('処理の後にあるコメント');
```
結果
```
処理の前にあるコメント
処理の後にあるコメント
処理の中にあるコメント
<Buffer 48 61 70 70 79 20 57 65 65 6b 65 6e 64 21 0d 0a>
```
最初に「処理の前に～～」を読まれ、
次に「処理の中に～～」が続くと思いきや、
先に「処理の後に～～」が読まれた。

これは、`fs.readFile`の処理が始まった後、
「処理の中に～～」へたどり着く前に、
非同期処理で「処理の後に～～」が先に読まれた為である。

では、どうすれば、前→中→後　といった具合に
順番通りに読んでくれるのか。
例えば、以下コード。
```test.js
const fs = require('fs');
console.log('処理の前にあるコメント');
fs.readFile('./test.txt', (err, file) => {
console.log('処理の中にあるコメント');
 if (err) {
// 失敗した時
 console.log(err);
 } else {
  // 成功した時
 console.log(file);
 console.log('処理の後にあるコメント');
 }
})
```
途中で、if文を作り、非同期処理を同期させている。
以下結果
```
処理の前にあるコメント
処理の中にあるコメント
<Buffer 48 61 70 70 79 20 57 65 65 6b 65 6e 64 21 0d 0a>
処理の後にあるコメント
```
### 終わりに

冒頭記載したが、初めてバックエンドに触れた。
何より嬉しかった・楽しかったのは、
どれも理解できたという点だろうか。
（もちろん、簡単なものを用意・教えて頂いたから。という背景があるのだが。笑）

やはり、
コードに触れている時が楽しいと改めて実感した。
現時点では、フロントエンドの勉強時間の方が長いのだが、
ここ最近、バックエンドに非常に興味を持ち始めた心境の変化もあってか、
非常に有意義な学びで、今後さらにスキルアップしたいと改めて思った。
spanで使えそうな機能

# はじめに
今回はspanというTextに対してコードで装飾を施せるものを使ったので、
spanについて調べた中で使えそうな機能をまとめます

# span早見表

|span|説明|
|:---|:---|
|LeadingMarginSpan|マージンを変更する|
|LineBackgroundSpan|背景を変更する|
|BackgroundColorSpan|背景色を変更する|
|LineHeightSpan|行の高さを変更する|
|AbsoluteSizeSpan|テキストサイズを変更する|
|ClickableSpan|テキストをクリック可能にする|
|DrawableMarginSpan|画像(Drawable)とマージンを設定する|
|ForegroundColorSpan|テキストカラーを変更する|
|ImageSpan|テキストを画像(Drawable)に変更する|
|QuoteSpan|テキストの先頭に縦線を追加|
|UnderlineSpan|テキストにアンダーラインを追加|
|StrikethroughSpan|テキストに取り消し線を入れる|
|StyleSpan|テキストのスタイルを変更する|
|URLSpan|テキストをURL化する(ClickableSpanを継承する必要がある)|

# Spanについて参考にした記事

https://qiita.com/wiroha/items/a5c763d391cfa10aa833

https://qiita.com/messi_/items/48206ce6ed67d216ad55

https://developer.android.com/reference/android/text/style/package-summary


# 終わりに　
今回まとめたものは、特に使えそうだなと思ったものを表にしました
他にもたくさんの機能がありそうです
使いこなせればもっといろんなことに活用できそうだなと思いました
Tips：Eclipse上のファイルをWindowsエクスプローラーで開くショートカットキーの割り当て方

特にプラグイン不要で、Eclipseで選択中のファイルやフォルダをWindowsのエクスプローラーで開くショートカットキーが割り当てられるので、そのやり方をメモします。

# 環境
- OS：Windows10
- Eclipse：2021-09 (4.21.0)

# 割り当て方法
1. `Window > Preference > General > Keys`を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366737/9a642a4c-04be-7aaf-156b-63d3d8fd1946.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366737/5afe368f-6cf2-d95d-a5d7-bf4524f86d31.png)
1. `Show In (System Explorer)`を検索
   `system`と検索窓に入れればある程度絞り込めます。
   日本語版の場合は`表示（システム・エクスプローラー）`です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366737/ca31916f-84db-10ea-ad18-34b3501609dc.png)
   |Command|Binding|When|Category|User|
   |:-:|:-:|:-:|:-:|:-:|
   |Show In (System Explorer)|||Navigate||
 1. `Binding:`に任意のコマンドを入力
   Bindingの入力欄にカーソルを合わせ、割り当てたいキーをそのまま打てば割り当てられます。今回は`Ctrl + Alt + O`を割り当ててみました。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366737/5d63bbc1-20da-778e-0cdb-2f0d4b5f0c66.png)
   他のショートカットキーとコンフリクトしている場合はBinding入力欄の右側にある`Conflicts`エリアに表示されます。ショートカットキーを変更するなどして競合しないようにしましょう。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366737/fa97efc2-c54b-1928-630a-8e9cf2d63189.png)
1. ショートカットキーの割り当てタイミングを変更したい場合は、`When:`を変更する

# キー割り当てるほどじゃないんだけど・・
そんな方にはこちらがおすすめです。
[Eclipse - ソースファイルのフォルダを開くには](https://freebsd.sing.ne.jp/tool/07/20.html)