OmniAICreator/Qiita-1.07M huggingface dataset:
ずっと完全無料で使えるクラウドサービスの調べ方

# はじめに
AWSをはじめとする大手クラウドサービスでは、**12ヶ月無料**や**クーポン**、**1カ月〇〇までは無料で使用できる**、というのが基本だと思っていました。
**ずっと完全無料のサービス（無制限）** があるというのは、一部しか知りませんでした。そのサービスはけっこう多いということを知ったので、確認する方法を備忘しておきたいと思います。

## Amazon Web Services（AWS）
https://aws.amazon.com/jp/

メニュー「料金」→「AWS無料利用枠」　無期限無料でフィルタ

![01 (Custom).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/f6657872-e9ec-60ba-92a7-299dfb9b1565.png)

![02 (Custom).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/25e86a5d-a5fb-6323-c9ae-c120d264aeda.png)

- AWSに限らずクラウドサービスは数え切れないほどあるが、下記URLは各サービスを1行で説明しているため、わかりやすくなっている。

https://gigazine.net/news/20200528-aws-one-line-explanation/

## Google Cloud
https://cloud.google.com/?hl=ja

「料金」→「GCPの無料サービス」 Always Freeプロダクト
https://cloud.google.com/free?hl=ja

![05 (Custom).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/847a86d0-8742-3ae8-7942-3c741b774bbd.png)

![06-1 (Custom).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/38b5e957-7fcd-85c4-1ef3-c39e77bdee73.png)


## MS Azure
https://azure.microsoft.com/ja-jp/

「無料ではじめる」ボタン　を押下

https://azure.microsoft.com/ja-jp/free/

![03 (Custom).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/6f8e964c-77bb-2d38-b408-f699d9180c83.png)


「いつでも無料なのは、どの製品ですか。」を確認

![04 (Custom).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/173add06-18e8-74b2-5301-b5e88a98377f.png)


## IBM Cloud
https://www.ibm.com/jp-ja/cloud

メニュー「料金体系」→「Lite」　Free IBM Cloud services
https://www.ibm.com/jp-ja/cloud/free

最近、請求について揉めていたIBM Cloudですが、クレジットカード不要のサービスでいろいろ使ってみてからのほうがよいかと思います。（請求くらいました・・）

![07 (Custom).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/1c5bba5b-a4d7-7b39-9da4-84bfbc30efa7.png)

![08 (Custom).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167772/74c84225-3653-61c8-6a09-08f07a4b4df7.png)


## 参考URL

https://www.publickey1.jp/blog/20/free_tier2020.html
ABAPプログラムのパフォーマンスの調べ方


ABAPプログラムのパフォーマンスを分析する方法を２つ解説します。

 * ABAP実行時間分析
 * パフォーマンス分析


## ABAP実行時間分析
TCODE：SE30
SE38からプログラム＞実行＞実行時間分析でもアクセス可能

###操作方法
####Step1
測定＞ダイアログ
実行したいPGのTCODE、PGIDまたは汎用モジュールを指定
####Step2
レポートプログラムの選択画面が表示される。
パタメータを入力して実行ボタンを押下
####Step3
ABAP実行時間分析の画面に戻る
アプリケーションデータファイルの"評価"を押下
####Step4
実行時間分析評価の画面が表示される
左上のアイコンから詳細を開くと、Perform、メソッド、SELECT文毎にかかった時間が表示される。

###すでに実行されたバックグラウンドのPGのパフォーマンスを調べるには？
TCODE：SE30
####Step1
メニューバーから実行時間分析＞計測＞実行中のアプリケーションに対して有効化を選択する。
####Step2
"選択されたワークプロセスでの測定開始/終了"という画面が表示される。
実行時間を見たいプロセスを選択して有効化する。
####Step3
ABAP実行時間分析の画面に戻る
アプリケーションデータファイルの"評価"を押下

##パフォーマンス分析
TCODE：ST05
####Step1
"トレース選択"で”SQLトレース”にチェックを入れる
"トレース機能選択"でトレース有効化を押下
####Step2
実行時間を分析したいプログラムに遷移し、実行する
####Step3
ST05の画面に戻り、"トレース機能選択"でトレース無効化を押下
####Step4
"トレース機能選択"でトレース照会を押下
"トレースコード照会制限の設定"で選択値を入力
####Step5
プログラムが実行したSELECT文の一覧が表示される。
詳細を見たいSELECT文を選択して"EXPLAIN"を押下
"SQL文の実行計画照会"が表示される。
この画面でSQLの実行計画を照会可能。
INDEXが効いているかどうかなども確認できる。
Macで一時的にDefault Gatewayを変更する

# はじめに

この記事は、ほとんど備忘録です。

先日、IPv6対応のISPを追加契約して、既存のISPと併用して使っています。
既存ISP側には、固定IPを設定してあり、AWSを始めとしたクラウドサービスはIPアドレスでフィルタをかけています。
通常はv6側を使うのですが、セキュリティ設定されているサイトには既存ISPを通る必要があり、そのために一時的にDefault Gatewayを変更する必要があります。

現在の Default Gateway を確認するには、以下のコマンドを使います。

```sh
% route -n get 0.0.0.0
   route to: default
destination: default
       mask: default
    gateway: 192.168.1.XXX  <- ここが Default Gateway
  interface: en14
      flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0
```

Default Gatewayを一時的に変更するには、以下のコマンドを使います。

```sh
% sudo route -n flush
default              192.168.1.XXX        done   <-- 現在設定されているDG
route: write to routing socket: No such process
got only -1 for rlen
% sudo route add -net 0.0.0.0/0 192.168.1.YYY  <-- 変更したいDGアドレス
add net 0.0.0.0: gateway 192.168.1.YYY
```

ポイントは、flushをすること。flushしないでルートを追加しようとすると、以下のようなエラーができます。

```sh
% sudo route add -net 0.0.0.0/0 192.168.1.YYY  <-- 変更したいDGアドレス
route: writing to routing socket: File exists
add net 0.0.0.0: gateway 192.168.1.YYY: File exists
```

元に戻すには、以下のコマンドを利用して現在のDefault Gatewayを削除してから、上記のコマンドで設定し直します。

```sh
sudo route delete -net 0.0.0.0/0 192.168.1.YYY
delete net 0.0.0.0: gateway 192.168.1.YYY
```

忘れないように記録しておきますが、他にも同じような方がいらっしゃったらと思い記事にしました。
Atcoder ABC169 A-EをPythonで

過去最低のパフォーマンスでした:(

#A: Multiplication 1
やるだけ。

```ABC169a.py
a,b=map(int,input().split())

print(a*b)
```

#B: Multiplication 2
$N<10^5$なのに普通に回すとTLEになる。が、途中でループから抜けるようにすると通った。~~オーバーフローした際の演算に時間がかかるのかも（そもそもオーバーフローした時点でWAだが）。~~

```ABC169b.py
n=int(input())
a=list(map(int,input().split()))

ans=1

if 0 in a:
    print(0)
    exit()

for i in a:
   ans*=i
   if ans>10**18:
    print(-1)
    exit()


print(ans)
```

#C: Multiplication 3
解説AC。高精度な計算が必要と感じたら浮動小数点型を扱うときはFloatではなく例えばDecimal使うとかしましょうね、というだけ。知識問題。


```ABC169c.py
from decimal import Decimal
from math import floor

a,b=map(Decimal,input().split())

print(floor(a*b))
```

#D: Div Game
$z$を何種類用意できますか？と言い換えられます。
$z$は$N$の素因数の累乗で表せるため、各素因数ごとに同じ素因数の個数を数え、2個以下⇒1つ、3個以上6個未満⇒2つ（$p^1$, $p^2$）、6個以上10個未満⇒3つ（$p^1$, $p^2$, $p^3$）・・・といったように、各素因数で表現できる$z$の数を数え上げれば良いです。$2^{43}>10^{12}$なので、各素因数の個数については高々42まで考えておけばOK。例外として、1の場合だけは0になります。
素因数分解の関数部分は、[こちら](https://qiita.com/snow67675476/items/e87ddb9285e27ea555f8)を参考にさせていただきました。

```ABC169d.py
def factorization(n):
    arr = []
    temp = n
    for i in range(2, int(-(-n**0.5//1))+1):
        if temp%i==0:
            cnt=0
            while temp%i==0:
                cnt+=1
                temp //= i
            arr.append([i, cnt])

    if temp!=1:
        arr.append([temp, 1])

    if arr==[]:
        arr.append([n, 1])

    return arr
    
a=factorization(int(input()))

b=[1,3,6,10,15,21,28,36,43]

ans=0
if len(a)==1 and a[0][0]==1:
    print(0)
    exit()

for i in a:
    for j in range(len(b)):
        if i[1]<b[j]:
            ans+=j
            break
print(ans)
```

#E: Count Median
Aの集合の中央値とBの集合の中央値の間が全体の中央値として取りうる値。
Nが偶数の場合は0.5刻みになり、奇数の場合は1刻みになる。

```ABC169e.py
def median(q):
    l=len(q)
    q=sorted(q,reverse=True)
    if l%2==0:
        return (q[int(l/2)]+q[int(l/2)-1])/2
    else:
        return q[int((l+1)/2-1)]

n=int(input())

a=[]
b=[]

for i in range(n):
   x,y=map(int,input().split())
   a.append(x)
   b.append(y)
   
med_a=median(a)
med_b=median(b)

if n%2==0:
    print(int(2*(med_b-med_a)+1))
    
else:
    print((med_b-med_a)+1)
```

ちなみに、WA出しまくった八つ当たりではありますが今回のB-Cの問題形式は個人的には好きではないです。同じ頭を使うなら、実装上の制約そのものではなく制約を突破するアルゴリズムについて考えたい・・・今後もこういった問題の出題が続くと、あまり初心者の友達にAtcoder勧められないな、と感じました。
[メモ]「Rhythm Game Starter」シーケンスエディタの編集画面が足りなくなった時の増やし方

Unity Assets Storeの
「Rhythm Game Starter」
Assets/RhythmGameStarter/Editor/Sequence/SequenceEditor.cs
の114行目
``` itemLimit = 500;```
ここを例えば
``` itemLimit = 1000;``` 
のように変更すると、このシーケンスエディタの編集画面が拡張される。
micro:bitでゲーム性を持たせた濃厚接触防止＆接触履歴装置を作ってみた

※2020/06/13:MakeCode V3がリリースされたのに伴い修正しました

#はじめに

 micro:bitを無線を使って楽しく(?)濃厚接触を避けつつ接触履歴を記録する装置を作ってみました。
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44523/a0c8bc2a-fc96-f71e-822e-7103feb207e0.png)

#背景

　緊急事態宣言が解除され、今月から学校が全国で一斉に再開します。想定されるのは学校でのクラスター発生です。この対策として、中国では[帽子の上に棒をつけて、1m以上近づけないように](https://www.epochtimes.jp/p/2020/04/55779.html)したり、日本でも[机にダンボールの衝立を取り付けたり](https://www3.nhk.or.jp/news/html/20200530/k10012451241000.html)しています。また、技術系では、AppleとGoogleで開発した[接触確認アプリが間もなく政府からリリース](https://iphone-mania.jp/news-290302/)されるそうです。でも日本の場合、小中学校はスマホの持ち込みは禁止ですし、小学生では持っていない子の方が多数派なのが現状です。
　そこで、子供達に楽しくソーシャルディスタンスを保ってもらえる装置をmiro:bitで試しにつくってみました。

#仕様

- 1人1個 電池ボックスとスピーカーを取り付けたmicor:bit を持ってもらいます
- micro:bitの無線機能を使い、お互いが近づくと警告音が鳴ります(1～2m程度)
- 持ち点は10点
- 警告音が5秒以上鳴ると1点減点
- 1時間、一度も減点が無ければボーナス得点として1点加算
- Aボタンで現在の得点確認
- Bボタンで自分の固有の名前(micro:bitが持つユニークなID）を確認
- A+Bボタンで接触履歴（時間と固有の名前）をUSBシリアルで出力(115200bps 8bitノンパリ)

#用意する物

- micro:bit
- 電池ボックス
- スピーカー

写真はリストバンドやストラップが取り付けられるスピーカー付き電池ボックスTFW-BT3を使用していますが、どんな電池ボックスやスピーカーでもOK。ちなみにエネループで実験したところ単4x2本で丸一日は十分持ちました。
![IMG_2159.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44523/b440e105-8ad1-a695-6222-d208f08e57ab.jpeg)


#プログラム

- プログラムがかなり長くなってしまったので、全部のブロックをここに貼り付けるのは割愛させて頂きます。
- https://makecode.microbit.org/_hj1iVEEjAh15 か[github](https://github.com/asondemita/contact-warning-and-tracing)を参照願います。
![block.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44523/f628f481-4cdc-fe02-5b9b-2cf877e72013.jpeg)

# 使い方

- 全部のmicro:bitにプログラム https://makecode.microbit.org/_hj1iVEEjAh15  をダウンロードします
- Bボタンを押して、各micro:bitの固有の名前を確認。誰にどのmicro:bitを持たせたがメモをします。
- 全員がmicro:bitを身に着け「ピッ」と音が鳴らないようにソーシャルディスタンスを保ちます。もし鳴ったら5秒以内に離れて下さい。
- 5秒以内に離れなと「ピコーン」と音が鳴ってスコアが１点減点され、接触履歴に時刻と相手の固有の名前が記録されます。
- 現在のスコアはAボタンで確認が出来ます
- 1時間以上接触が無いとボーナス得点(1点）が加算されます
- 接触履歴をダウンロードする場合はターミナルソフトに接続してAボタンとBボタンを同時に押します
    - Windows Tera termの例
        - micro:bitをUSBでPCに接続します
        - Tera termを起動します
        - 接続は「シリアル」を選択します
        - 「設定」をクリックし、「シリアルポート」をクリック。「ボー・レート」を115200にします。
        - micro:bitのAボタンとBボタンを同時押しすると、ターミナルに時間（現在より何秒前）とmicro:bitが持つ固有の名前が表示されます
![名称未設定-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44523/001dfd7d-090a-4354-e3da-2b9c21be4629.jpeg)

 

#使ってみて

知り合いと試しに使ってみた感想

- 無線を使うので反応距離がかなりバラバラ（概ね1～2ｍ）
- 距離センサーで作るより指向性はマシだが、中国のように頭に付けないと死角が出来る
- 単4エネループ2本で十分１日電池は持った
- 同時に複数人で接触すると履歴の取りこぼしが出来る
- 接触履歴のダウンロードのためターミナルソフトを使うのが面倒（1日バッテリーが持つM5StackCがあればいいのになぁ）
- 途中でリセットすると履歴が消えてしまう
- 履歴データの時間がダウンロードを実行した時刻から何秒前だったかの表示なので、計算が必要なのが微妙（micro:bitに時計は無いのでしかたがない）
- micro:bitが持つ個別の名前をメモするのが面倒（当然、接触確認アプリのように匿名性は無い）

#最後に

　濃厚接触者がわかったからと言って、それ以外の人は大丈夫という保証は何処にもありません。ただ、この装置を身につける事により、**「あっ、ソーシャルディスタンスをとらなきゃ」と思う心の養成ギブス**(?)的な効果はあると思いました。
数式を見ないでAIが理解できる本

AIや人工知能は、複雑で敷居が高く、理解するには難しいと感じている方は多いと思います。

そんな方におすすめなのが、森川幸人さんが書かれた「[マッチ箱の脳(AI)―使える人工知能のお話](https://www.amazon.co.jp/dp/B00DT4DY0M/ref=cm_sw_r_tw_dp_U_x_Fad1EbMX5JE7C)」という本です。電子書籍(Kindle版）もあります。

![マッチ箱の脳.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646886/1489dcad-69c0-deda-aef2-0a1bb9dc0d8b.jpeg)


この本は以下の様な特徴があります。

1. 数式が一切出てこない。なので、AIがどの様に動作するのかを概念で理解しやすい。
2. 技術者でない人に理解できる様に非常に分かりやすい文章で書かれている。
2. 実際にマッチ棒を使ってAIの動作を解説する。もちろん、自分で実際にマッチ棒を動かしながらAIを体験できる。
3. 筆者がどのようにAIをゲームに応用したかという経験談（事例）が学べる。

AIに関する知識が全く無いけれど、AIに興味がある方は、まず読んでみることをお勧めします。

2000年に書かれた本なので、ディープラーニングに関しての記載はございませんが、機械学習の基礎的な概念を理解するには最適な入門書だと思います。

[マッチ箱の脳(AI)―使える人工知能のお話   森川幸人](https://www.amazon.co.jp/dp/B00DT4DY0M/ref=cm_sw_r_tw_dp_U_x_Fad1EbMX5JE7C)
Railsチュートリアルで遭遇したテスト関連のバグ

Railsチュートリアルを勉強していて原因不明のバグに遭遇したので対処方法を記録しておきます。

# 環境
ホストマシン：macOS Catalina 10.15.4
関係してそうなGemのバージョン：

```Gemfile
  gem 'rails',　                  '6.0.3'
  gem 'spring',　                 '2.1.0'
  gem 'rails-controller-testing', '1.0.4'
  gem 'minitest',                 '5.11.3'
```

#エラー
###発生条件
詳細は不明ですが、いろいろなタイミングで発生しました。rails generateコマンドでControllerを作った後などに頻発。
###エラー内容
テストがGreenになるはずの状況でrails test コマンドでエラーが出る。しかもエラーの原因箇所を特定不能。
2000行以上にわたる大量のログ(おそらくGemのパスを示している)が吐かれたのちに以下のエラーメッセージ。

```
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: https://www.ruby-lang.org/bugreport.html

[IMPORTANT]
Don't forget to include the Crash Report log file under
DiagnosticReports directory in bug reports.

Traceback (most recent call last):
        5: from -e:1:in `<main>'
        4: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        3: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        2: from /Library/Ruby/Gems/2.6.0/gems/minitest-5.11.3/lib/minitest.rb:63:in `block in autorun'
        1: from /Library/Ruby/Gems/2.6.0/gems/minitest-5.11.3/lib/minitest.rb:140:in `run'
/Library/Ruby/Gems/2.6.0/gems/activesupport-6.0.3/lib/active_support/testing/parallelization.rb:124:in `shutdown': Queue not empty, but all workers have finished. This probably means that a worker crashed and 7 tests were missed. (RuntimeError)
```
冒頭の[NOTE]にあるようにライブラリ関連のバグなのでしょうか。
#対処方法
ターミナルに以下のコマンドを打ち込んでspringを再起動する

```
rm bin/spring
pkill -9 -f spring
```
これは推測になりますが追加したファイルの内容が正確に読み込まれていないのが原因かもしれません。このようなバグがあるとTDDの効率は著しく下がってので辛いです。本来はGreenなテストがコード以外の部分が原因でRedになってしまうという厄介なバグでした。
#追記
Railsチュートリアル内にも対処方法の記述がありました。記載箇所は第３章。

```
bin/spring stop    # テストが原因不明で動かなくなったら、このコマンドを実行してみる
```
とにかくspringとやらを一回止めることが大事らしい。springが一体何者なのか...誰か教えてください😂
The Essential Guide to Link Building

You should ensure that when you are dealing with your website that you are making the best possible connections. There is a lot that you should ensure that you are considering and even doing when it comes to creating the necessary connections for your website. Not only can you hire the experts with their link building service, but you can do it yourself or you should know what needs to be done, so keep reading on to know more.

What to Know About Building Links
When it comes to building connections or bridges between your website and others there is plenty that you should consider. Some of the top things to think about are:

Type – There are going to be a wide variety of types of connections you can make when you are looking at the link building service. This includes the types that you can do yourself like commenting on forums, on social media pages and much more. You must think about the types of connections you are making and avoid using ones that aren’t valued.

Reputation – Another thing to consider about the websites that you want to connect with is their reputation. Ensure that you are finding sites that have a good reputation since that can help to increase yours at the same time along with helping to increase your authority in the industry.

Relation – You also want to make sure that you are choosing sites that have a good relation to the industry that you are in. Don’t post randomly and on sites that aren’t related to your industry since it won’t really help anything in the end.

Blogs – Another great way to create these vital connections is through blogs and other types of posts. Make sure that you are considering having someone write a guest post for your site or that you could do the same for theirs, which would give you a viable and useful connection between sites.

Reviews – This is one of the top ways that you can get more connections to your website and that is through the use of reviews. The more people you have reviewing your products and services on their site or even their social media sites, then the more you can get in terms of views and recommendations.

It is extremely important that you are using all of these methods to help your business and your website get the connections that the search engines can see and map. The more you know the more the best methods can be used and the higher ranking your page would end up earning.

If you don’t know what you are doing with creating these connections, then the experts can help you with their <a href="https://www.ezrankings.org/link-building-services.html">Link Building Service</a> options. However, you should make sure that you are finding sites that have a good reputation and that are related to the industry that you are working in. Also, think about using guest posts on your site or others to create more links that would give the customers what they want in terms of information.
[今度こそ完全に理解した]vueで数字しか入力できないinputタグのカスタムコンポーネントを作る

[vue.jsで「数字」しか入力できないinput要素を作る](https://qiita.com/rh_taro/items/a8ffd51264d1767dd1d0)
[[Vue.js]小数や整数しか入力できないinputタグのカスタムコンポーネント](https://qiita.com/rh_taro/items/94849950277860a5f6b3)

過去に二度、同じことを試行錯誤して記事を書きました
いずれも動作としては問題ないのですが今読み返すと「これってどうなの？」というポイントがあり
改めて考えて今度こそちゃんとした（つもりの)コードを書いてみました

# 結論
```vue:IntegerStringOnlyInput.vue
<template>
  <input
    type="text"
    :value="value"
    @input="sanitizeAndEmit($event.target.value)"
  >
</template>

<script>
export default {
  name: 'IntegerStringOnlyInput',
  props: {
    value: {
      type: String,
      required: true,
      default: '',
    },
  },
  watch: {
    // 親からの値変更の時もサニタイズするためにwatch
    value(newValue) {
      this.sanitizeAndEmit(newValue);
    },
  },
  mounted() {
    this.sanitizeAndEmit(this.value);
  },
  methods: {
    sanitizeAndEmit(val) {
      // 数字以外を消す & 全角数字を半角数字へ変換
      this.$emit(
        'input',
        val.replace(/[^0-9０-９]/g, '').replace(/[０-９]/g, (s) => String.fromCharCode(s.charCodeAt(0) - 0xFEE0)),
      );
      // サニタイズされた値は直前の値と変わらないので再描画されない 強制的に再描画しないと、表示と実際の値がずれる
      this.$forceUpdate();
    },
  },
};
</script>

```

使い方としては普通のカスタムコンポーネントと同じで
importして`v-model`で変数をバインドするだけです

```vue
<IntegerStringOnlyInput v-model="int" />
```

# 過去の記事のコードがなぜよくなかったのか
## [vue.jsで「数字」しか入力できないinput要素を作る](https://qiita.com/rh_taro/items/a8ffd51264d1767dd1d0)
### `v-model` と `@input` が同時に存在しているから
その記事では

```vue
<input
  @input="validate"
  v-model="numValue"
>
```

というように書いていました
幸か不幸かこのコードは意図した通りの挙動をしてくれます(通常のv-modelの挙動のあとに値を上書きする)

ではなぜ `v-model` と `@input` が同時に存在するコードがだめなのか

そもそも `v-model` はシュガーシンタックス(※1)なので
つまるところ上記のコードは

```vue
<input
  @input="numValue = $event.target.value"
  @input="validate"
  :value="numValue"
>
```
と同じであると解釈できるのでは、と思いました
(`@input` の重複はパースエラーになるので実際にはこのように書くことはできませんが。。。)

そのため、たまたま動くだけで `v-model` と `@input` が共存することは本来は意図されてない使われ方ではないかと考えています

- もしそうならいつかバージョンが上がった時に動かなくなる可能性があるのではないか
- そうでなくともコードとして同じイベントハンドラが2つあるという状況もあまりよいものではない

と思い、「これはよくない」という結論にいたりました

## [[Vue.js]小数や整数しか入力できないinputタグのカスタムコンポーネント](https://qiita.com/rh_taro/items/94849950277860a5f6b3)

### `$refs` を使っているから
値が変更されず再描画されないために実際の変数の中身と見た目がずれる問題を解消するために
当時は「再描画されないからずれる」ことに気づかず解決しようと `$refs` を使ってしまいましたが
そもそも `$refs` は使用が推奨されておらず(※2)、使わずに済むならそれに越したことはないため
今回気づいたずれの原因から再描画が解決の糸口なので `$forceUpdate()` の方がいいのではという結論に至りました。

### 単純にコードが冗長
`computed` を使ったために無駄にコード量が増え可読性が低下していました
改めて考えてみるとcomputed挟む必要はありませんでした

### 親コンポーネントからの変更にサニタイズがされない
親コンポーネントから数字以外のものが含まれる値に変更されてもその際には数字以外の文字が取り除かれないため
今回新たに `watch` で変更を監視してサニタイズされるようにしました


### ※1

- [フォーム入力バインディング](https://jp.vuejs.org/v2/guide/forms.html)
- [Vue.jsのv-modelを正しく使う](https://qiita.com/simezi9/items/c27d69f17d2d08722b3a#v-model%E3%81%AE%E5%8B%95%E4%BD%9C)

### ※2
参考ドキュメント
- [特別な問題に対処する](https://jp.vuejs.org/v2/guide/components-edge-cases.html#%E5%AD%90%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%A8%E5%AD%90%E8%A6%81%E7%B4%A0%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9)

# 好みや要件次第で
全角許容する場合は半角への変換をなくしたり
親からの変更時やmount時にサニタイズがされたくない場合は `watch` や `mounted` を消したりでコントロール可能です
【Golang】ゴルーチン③バッファ、チャネル

#【Golang】ゴルーチン③バッファ、チャネル
Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。

```
package main
//Buffered Channels
//同じチャネルに複数ゴルーチンから送信

import "fmt"

func main() {
	//1
	//channelを作成 2はバッファ 2つまで受け取る。長さ
	//3つあるとエラーになる
	ch := make(chan int, 2)
	ch <- 1000
	fmt.Println(len(ch))
	//>>1

	ch <- 2000
	fmt.Println(len(ch))
	//>>2

	//ch <- 300はバッファサイズ以上になる為、エラー（デッドロック）

    //2
	//一つ取り出す。channelの中は1つ減るため、追加できる
	/*
	x := <- ch
	fmt.Println(x)
	ch <- 3000
	*/


	//3
	//forで取り出す
	//2つ以上取りに行くため、エラーになる。
	//チャネルに３つ目がないのに撮りに行こうとする為。
	//close(ch)にすることで、それ以上読み込まなくなり、エラーがなくなる
	//rangeで回す場合は必要
	//close()で全て入ったら閉じる
	close(ch)
	for c := range ch {
		fmt.Println(c)
	}
	/*
	1000
    2000
	*/
}

/*
close
バッファ内が空になったりクローズされたりしても、チャネルが内包する型の初期値を受信する
ch := make(chan iont, 3)
ch <- 1
ch <- 2
ch <- 3
close(ch)
i, ok<- ch
//>>1, true
i, ok<- ch
//>>2, true
i, ok<- ch
//>>3, true
i, ok<- ch
//>>0, false
i, ok<- ch
//>>0, false
*/
```
windowsにpowershell, openssh, terminalをインストールしてwingetを使ってみる

windowsがWSL2, terminalなどリリースしてたりしたので、色々とupdateしてみました。

```sh
$ scoop install curl 7z

# powershell 7.0.1
# https://github.com/PowerShell/PowerShell/releases
$ curl -LO https://github.com/PowerShell/PowerShell/releases/download/v7.0.1/PowerShell-7.0.1-win-x64.msi
$ msiexec.exe /package PowerShell-7.0.1-win-x64.msi /quiet ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1

# openssh v8.1.0
# https://github.com/PowerShell/Win32-OpenSSH/releases
$ curl -LO https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.1.0.0p1-Beta/OpenSSH-Win64.zip
$ 7z x OpenSSH-Win64.zip
$ cp OpenSSH-Win64/* 'c:\programfiles\OpenSSH\'
or
$ robocopy .\OpenSSH-Win64\ 'c:\Program Files\OpenSSH\'

# terminal 1.0.1
# https://github.com/microsoft/terminal/releases
$ curl -LO https://github.com/microsoft/terminal/releases/download/v1.0.1401.0/Microsoft.WindowsTerminal_1.0.1401.0_8wekyb3d8bbwe.msixbundle
$ Add-AppxPackage ./Microsoft.WindowsTerminal_1.0.1401.0_8wekyb3d8bbwe.msixbundle
```

`robocopy`は例えば、sshdというprocessが起動していても上書きするので便利です。

### winget

今までは、scoopを愛用してたけど、wingetが公式で提供され始めたので、よさそうだったら使っていきたい。

https://github.com/microsoft/winget-cli

```sh
$ curl -LO https://github.com/microsoft/winget-cli/releases/download/v0.1.4331-preview/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.appxbundle
$ Add-AppxPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.appxbundle
$ winget
```

なお、ssh経由では、wingetは使用できない感じでした。アクセス権関連ぽい気がする。これは採用しづらい...。

```sh
$ scoop install which
$ which winget
c:\Users\syui\AppData\Local\Microsoft\WindowsApps\winget.EXE
```

issue : https://github.com/microsoft/winget-cli/issues/256

### 参照

https://docs.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-core-on-windows

https://docs.microsoft.com/en-us/powershell/module/appx/add-appxpackage
初心者によるプログラミング学習ログ 331日目

#100日チャレンジの331日目
twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。
100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。
331日目は、

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おはようございます<br>331日目　8h<br>・ポートフォリオ作成<br>cssのアニメーションいれたり、なんかいろいろ。<a href="https://twitter.com/hashtag/%E6%97%A9%E8%B5%B7%E3%81%8D%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8?src=hash&amp;ref_src=twsrc%5Etfw">#早起きチャレンジ</a><a href="https://twitter.com/hashtag/%E9%A7%86%E3%81%91%E5%87%BA%E3%81%97%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%A8%E7%B9%8B%E3%81%8C%E3%82%8A%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#駆け出しエンジニアと繋がりたい</a><a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfCode</a></p>&mdash; ぱぺまぺ@webエンジニアを目指したい社畜 (@yudapinokio) <a href="https://twitter.com/yudapinokio/status/1267188615920021504?ref_src=twsrc%5Etfw">May 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
rails active_storage: install実行時に追加されるテーブルについて

active_storage使用時に作成されるテーブルとカラムの役割について自分なりにまとめてみました
## 参考
https://railsguides.jp/active_storage_overview.html
## 環境
- Rails 5.2.4
- PostgreSQL
- Tweetモデルにactive_storageでtweet_imageを追加したとする
- 同様に、Userモデルにprofile_imageを追加

` $ rails dbconsole`を使ってDBの中身を見ていきます

```sql
select * from Tweet

 id | content |         created_at         |         updated_at         
----+---------+----------------------------+----------------------------
  1 | first   | 2020-05-31 09:15:39.315909 | 2020-05-31 09:15:39.34726
  2 | second  | 2020-05-31 09:41:35.573983 | 2020-05-31 09:42:03.209896
 ```

## 各テーブルについて
### active_storage_blobs
画像データを保存するためのテーブル

```sql
select * from active_storage_blobs;

 id |           key            |                      filename                       | content_type |              metadata               | byte_size |         checksum         |         created_at         
----+--------------------------+-----------------------------------------------------+--------------+-------------------------------------+-----------+--------------------------+----------------------------
  1 | g8VoNYkesyKi779tsSdQ2q2W | first_image.jpg                                     | image/jpeg   | {"identified":true,"analyzed":true} |      8237 | zcwCqc6RTr8QFI4elbnF+w== | 2020-05-31 09:15:39.270823
  2 | uzRSGT69i5cNhoWDdoQ2gu8C | second_image.jpg                                    | image/jpeg   | {"identified":true,"analyzed":true} |   2481215 | m5LFOmNS4v3ddFGrtN/byA== | 2020-05-31 09:42:03.191085
  3 | 9o2qkgbC77MixCiYKc3thCdx | user_image.jpg                                      | image/png    | {"identified":true,"analyzed":true} |    254885 | 0+RUqCki1Yn4sZB1ZjpJCw== | 2020-05-31 19:02:28.999065
```

### active_storage_attachment
使うモデルのクラス名を保存するポリモーフィックjoinテーブル

```sql
select * from active_storage_attachments;

 id |    name      | record_type | record_id | blob_id |         created_at         
----+--------------+-------------+-----------+---------+----------------------------
  1 | tweet_image  | Tweet       |         1 |       1 | 2020-05-31 09:15:39.324196
  2 | tweet_image  | Tweet       |         2 |       2 | 2020-05-31 09:42:03.199872
  3 | profile_image| User        |         1 |       3 | 2020-05-31 19:02:29.025411
```

- name
    - 紐づけるモデルの画像用カラム
- record_type
    - 紐づけるモデル名
- record_id
    - record_typeのモデルのid
- blob_id
  - active_storage_blobsに保存された画像のid

`name`, `record_type`, `record_id`でモデルと画像カラムを決めて、`blob_id`で画像を紐づけることで一意な画像投稿機能ができると考えています

## 最後に
おかしい部分があればご指摘いただけると嬉しいです！
【CORS】ドメインの異なるサイトにAPIリクエストを送るとエラーが発生


ブラウザから違うドメインにAPIリクエストをした際に、以下のエラーが発生

```
Access to XMLHttpRequest at 'http://xxxxx' from origin 'http://localhost:3001' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
```

## 原因
ドメインが違うサイトにリクエストを送る時、クライアント(送信元のサイト)からのリクエストを許可していないときに起こるエラー

## 解決策は３つ
1. リクエストを送りたいサイトに、自分のサイトのドメインからのリクエストを許可してもらう。
2. Chromeの拡張機能 [CORS Unblock](https://chrome.google.com/webstore/detail/cors-unblock/lfhmikememgdcahcdlaciloancbhjino/related?hl=ja) を使ってリクエストを送れるようにする
3. サーバサイド(Nodeやphpなど)からリクエストを送る。

## 実施した解決策
リクエストの送信先がLaravelで作っている自作APIだったので、1 の方法を実施。
具体的には、laravelに新しくCORSを許可するミドルウェアを作成して、router.php で該当のAPIリクエストにミドルウェアを適応することで解決。

## 参考にしたサイト
[クロスドメインによるエラーを解決する](https://developer.yukimonkey.com/article/20200227/)
[CORSについて理解してLaravel5.6で対応する](https://qiita.com/kobayashi-m42/items/c0a2609ae61a72dcc60f)
NFSサーバーでexportされたディレクトリをマウントする

1. サーバー側設定ファイルを記述する

```conf:/etc/exports
/export_dir 172.17.255.253(fsid=0,rw)
```

2. エクスポートされているディレクトリをマウントする

```bash
mount -t nfs 172.17.255.254:/export_dir /mount_dir
```
jQuery~上級編(ページ内のリンクとナビゲーションの作成)~

# プログラミングの勉強日記
2020年6月1日　Progate Lv.83

##ページ内のリンクの作成

###aタグで作る
　`<a>`タグは他のページのリンクではなく、ページ内のリンクを作ることもできる。`<a>`タグのhref属性に`"#id名"`を追加すると、`<a>`タグをクリックするとそのidの要素が表示するところまで移動する。

```html
<a href="#conetnt">...</a>
<div id="content">...<div>
```

###scrollTopメソッド
　ページ内リンクはjQureyでも実装することができる。jQueryで実装するとリンク先への移動にアニメーションを付けることができる。`$('html body').scrollTop(値);`のように設定し、ページ最上部からの値pxの位置に移動できる。

```js
$('#top-btn').click(function(){
  $('html body').scrollTop(0);  //スクロールされている部分の距離が0=ページ最上部
});
```

<img width="641" alt="jquery2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642821/ae683739-e21e-b2fe-f860-af841202c2b3.png">


##ナビゲーションの作成
　押したボタンに応じて任意の場所まで自動でスクロールする
 
###offsetメソッドを作る
　offsetメソッドは要素の位置を取得することができる。ページの上端からの距離とページの左端からの距離が連想配列の形で返ってくる。`offset().top`とするとページ上部からの距離を取得できる。

```js:h1要素の表示位置を取得
$('h1').offset();   //{top:180, left:100}
```

```js:ページ最上部からのh1の要素の距離を取得
$('h1').offset().top;  //180
```

<img width="641" alt="jquery3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642821/119441ef-1bd3-691c-9a3f-2538c23258a7.png">

###attrメソッドで飛び先の取得
　各ボタンはaタグにして、そのhref属性に飛ぶ先のid名を指定する。クリックしたときにattrメソッドでhref属性の値を取得して、offsetメソッドでその位置を取得することでページ内リンクを実装する。

```html
<a class="scroll-btn" href="#html">HTML</a>
....
<div id="html">....</div>
```

```js
$('.scroll-btn').click(function(){
  var id=$(this).attr('href');     //クリックしたボタンの飛び先を取得
  var position=$(id).attr('href'); //飛び先の最上部からの距離を取得
});
```
numpyとscipyでFFT処理してローパスフィルター

FFT処理でnumpyとscipyを使った方法をまとめておきます。
このページでは処理時間を比較しています。

以下のページを参考にさせていただきました。
■Python NumPy SciPy : FFT 処理による波形整形(スムーザ)
https://org-technology.com/posts/smoother.html


まず、処理するサンプルデータを作成します。

```python
import numpy as np
from scipy import fftpack
import matplotlib.pyplot as plt

# サンプルデータ作成
n = 512                         # データ数
dt = 0.01                       # サンプリング間隔
f = 1                           # 周波数
t = np.linspace(1, n, n)*dt-dt
y = np.sin(2*np.pi*f*t)+0.5*np.random.randn(t.size)

# FFT 処理と周波数軸の作成
yf = fftpack.fft(y)/(n/2)
freq = fftpack.fftfreq(n, dt)
```


①scipyのfftpackを使う方法(fft, ifft)

```python
yf = fftpack.fft(y)/(n/2)
freq = fftpack.fftfreq(n, dt)

fs = 2
yf2 = np.copy(yf)
yf2[(freq > fs)] = 0
yf2[(freq < 0)] = 0

y2 = np.real(fftpack.ifft(yf2)*n)
```
計算時間：48.2 µs ± 869 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)



②scipyのfftpackを使う方法（rfft, irfft）

```python
yf = fftpack.rfft(y)/(n/2)
freq = fftpack.fftfreq(n, dt)

fs = 2
yf2 = np.copy(yf)
yf2[(freq > fs)] = 0
yf2[(freq < 0)] = 0

y2 = np.real(fftpack.irfft(yf2)*(n/2))
```
計算時間：38.7 µs ± 723 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)


③numpyのfftを使う方法

```python
yf = np.fft.fft(y)/(n/2)
freq = np.fft.fftfreq(n, d=dt)

fs = 2
yf2 = np.copy(yf)
yf2[(freq > fs)] = 0
yf2[(freq < 0)] = 0

y2 = np.real(np.fft.ifft(yf2)*n)
```

計算時間：41.3 µs ± 2.3 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

結果は
１位　38.7us　②scipyのfftpackを使う方法（rfft, irfft）
２位　41.3us　③numpyのfftを使う方法
３位　48.2us　①scipyのfftpackを使う方法(fft, ifft)

以上です。
rsyncコマンドで設定ファイルの内容をコピーする

別ホストでアプリケーション(ここではWEBサーバー)をインストールした際、設定ファイルを現状あるホストからコピーする

```bash
# rsyncをインストールする(両ホストにインストールされている必要あり)
 yum install rsync.x86_64
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package rsync.x86_64 0:3.1.2-10.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch             Version                  Repository      Size
================================================================================
Installing:
 rsync           x86_64           3.1.2-10.el7             base           404 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 404 k
Installed size: 815 k
Is this ok [y/d/N]: y
Downloading packages:

rsync-3.1.2-10.el7.x86_64. 0% [                 ]  0.0 B/s |    0 B   --:-- ETA 

rsync-3.1.2-10.el7.x86_64.rpm                              | 404 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction

  Installing : rsync-3.1.2-10.el7.x86_64 [                                ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [##                              ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [####                            ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [#######                         ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [#########                       ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [############                    ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [##############                  ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [#################               ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [##################              ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [####################            ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [######################          ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [#########################       ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [##########################      ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [###########################     ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [############################    ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [#############################   ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64 [############################### ] 1/1
  Installing : rsync-3.1.2-10.el7.x86_64                                    1/1 

  Verifying  : rsync-3.1.2-10.el7.x86_64                                    1/1 

Installed:
  rsync.x86_64 0:3.1.2-10.el7                                                   

Complete!

#　設定ファイルをローカルからリモートへ差分コピー
rsync -v /etc/httpd/conf/httpd.conf root@172.16.0.11:/etc/httpd/conf/httpd.conf
root@172.16.0.11's password: 
httpd.conf

sent 156 bytes  received 143 bytes  54.36 bytes/sec
total size is 12,280  speedup is 41.07
```
jQuery~上級編~

# プログラミングの勉強日記
2020年6月1日　Progate Lv.83

#####inputタグの入力値
　inputタグを用いると、1行の入力欄を作れる。<font color=blue>inputタグに入力されている値はvalメソッドで取得できる。</font>

```html
<form>
  <div>名前：</div>
  <input id="name" type="text">
</form>
```
```js
var name=$('#name').val();  //入力された値が格納される
```

#####submitイベント
　フォームが送信されたときのイベント。クリックだけでなくEnterキーでフォームが送信された場合もイベントが発生する。
`$('form').submit(function(){ });`という形で使う。

#####セレクトボックスの入力値
　selectタグを用いると、選択肢式のセレクトボックスを作れる。各optionタグからなり、各optionタグが選択肢になる。

```html
<form>
  <div>性別：</div>
  <select id="gender">
    <option value="male">男</option>    <!--セレクトボックスの選択肢-->
    <option value="female">女</option>  <!--セレクトボックスの選択肢-->
  </select>
</form>
```
```js
//select要素の選択されているoptionのvalue属性を取得
var gender=$('#gender').val(); 
```

#####カスタムデータ属性
　属性を自分で作ることである。`data-`から始まる属性名を自由に設定できる。data属性は何らかの情報をHTML内に指定しておくのに便利なのでjQueryで用いられる。

```html
<img src="image.jpg">  <!--srcは特定の属性-->
<div data-option="dog">...</div>  <!--data-optionは自分で作れる属性-->
```
```js
$('img').attr('src'); //img要素内のsrc属性の値を取得
$('div').attr('data-option'); //div要素内のdata-option属性の値を取得
```

#####animateメソッド
　アニメーションを付けられる。`$('セレクタ').animate({'プロパティ':'値`})`のように引数は連想配列で指定する。<font color=blue>2つ目の引数でアニメーションの時間を設定できる。</font>時間はミリ秒で指定するか、'slow'や'fast'などの文字列で指定できる。CSSの値だけでなく、scrollTopの値も入れることができる。

```js:cssの値を入れる
$('h1').animate({
  'font-size':'30px' // '変更するプロパティ' : '変更後の値'
},1000);  //アニメーションのミリ秒
```
```js:scrollTopの値を入れる
$('html top').animate({
  'scrollTop':0
},'slow');
```
素因数分解してmapに格納する関数

素因数分解する問題が出てきた＋次回同じものを書くのが面倒なのでスニペット化するついでに共有。

```C++:main.cpp
template<typename T, typename U>
void primeFactorization(map<T, U> &primes, T N) {
  T n = N;
  U num = 0;
  while (n%2 == 0) {
    num++;
    n /= 2;
  }
  if (num != 0) {
    primes.emplace(2, num);
  }

  for (T i = 3; i*i <= N; i += 2) {
    num = 0;

    while (n%i == 0) {
      num++;
      n /= i;
    }
    if (num != 0) {
      primes.emplace(i, num);
    }

  }

  /* √Nより大きい値の素数が存在する場合nが1にならないので最後に追加 */
  if (n != 1) {
    primes.emplace(n, 1);
  }
}


int main(void) {
  /* 使用例 */
  long long N; cin >> N;
  map<long long, int> p;
  primeFactorization(p, N);
  
  return 0;
}
```

#使いどころさん！
**ABC169 D - Div Game** [問題](https://atcoder.jp/contests/abc169/tasks/abc169_d) + [回答例](https://atcoder.jp/contests/abc169/submissions/13901969)
KV-memNN (Miller et al., 2016)論文備忘録

#簡単歴史
end-to-end Memory Network
KVmemNN
Translater
BERT

#abstract
 Knowledge Base(以下KB)よりも、柔軟性にとんでいる。
Key-Value MemoryNetworksは、$memory$とエンコーダを分けたから、柔軟性に富んでいる。

#手法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628578/382868ea-534c-39f3-4aed-1ed28e67008b.png)

学習するものは、$A, B, R_i$である。ここで、$(k, v)$は、最初に選定された値を用いている。ホップ数  $  j  $  回、巡回した後に、$H+１$が出力される。

モデル概要
・$Query$を入力
・$Key$に入る
・$Query$と最も関連性のある$Key$が発火する
・その部分の$Key$があいて、$Value$をとる
・繰り返す
・$Value$を絞っていく

$ y_i = \sum_{j = 1}^{n} \alpha_{i, j} V$
$\alpha_{i,j} = Attention(Query,Key) = softmax({QK^T})$


#Attentionの復習

$Query$, $Key$, $Value$を用いて、注意機構が作られる。

$ Attention(Query,Key, Value) = softmax(\frac{QK^T}{\sqrt{d^k}})V$

$
ここで、Self-Attentionを考えると、(以下論文にはない)

$Q_i(x) := xW_i^Q + b_i^Q$ 
$K_i(x) := xW_i^K + b_i^K$ 
$V_i(x) := xW_i^V + b_i^V$ 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628578/d8e6a58f-2955-ad6b-d78b-643928ca235f.png)


# Key-Value Memories

Sentence Level < Windows Level < Window+Title < Window+Center Encording+Title

## 1. KB Triple
“subject, relation, object” = $(Key,Key,Value )$

## 2. Sentence Level

Both $Key$ and $Value$ = "bags-of-words" of the entire sentence


## 3. Windows Level

・文書を$Window = W$で分割する。
・$Key$ = "bags  of  words" in entire Window
・$Value$ = the center word in Window 

## 4. Windows + Center Encording

よくわからん、、、

## 5. Window + Title

・$Key$ = "bags  of  words" in entire Window
・$Value$ = title

#参考資料
[Key-Value Memory Networks for Directly Reading Documents](Key-Value Memory Networks for Directly Reading Documents)
[Attention Is All You Need](Attention Is All You Need)
grep コマンド Linux


#### ファイルを開いた中身に、「検索したい文字列」が含まれているファイルのリストを表示（検索対象フォルダ配下を再帰検索）

```zsh:
grep [検索したい文字列] -rl [検索対象フォルダのパス]
```

#### 前後の行も取得して出力したいとき（-数字 / -B 数字 / -A 数字）

```zsh:サンプル：前後の行も取得＋複数の検索対象
# 検索対象（plug & exact）の前後3行を表示
cat /etc/yum.conf | grep -3 -e plug -e exact

# 検索対象（plug & exact）の前4行も表示（Back）
cat /etc/yum.conf | grep -B 4 -e plug -e exact

# 検索対象（plug & exact）の後5行も表示（Add）
cat /etc/yum.conf | grep -A 5 -e plug -e exact
```
他のコマンドと組み合わせず、 `grep` だけで良ければ `cat` は不要

```zsh:
grep -3 -e plug -e exact /etc/yum.conf
```

#### `-`を検索対象文字列として認識させたいときの記述例

```zsh:--を使うか
grep -- '-word'
```
```zsh:-をエスケープする
grep - '\-word'
```

`--` についてのChatGPT説明
> `--` は、コマンドラインオプションの終了を示すために使われます。
これ以降のすべての文字列はオプションではなく、引数として扱われます。
これにより、検索パターンやファイル名が - で始まる場合でも正しく解釈されます。
この場合、`--` は `word` をオプションではなくパターンとして扱うことを保証します。




# 参考と過去記事

https://www.atmarkit.co.jp/flinux/rensai/linuxtips/137greplineplus.html

https://qiita.com/ntkgcj/items/46d78c4d92768e77a1ea#複数選択
Accessフォーム作成例

#一覧フォーム

・フォームウィザード
　表形式で作成

・デザインビューに切り替え
　ウィンドウ名で表示する予定なので、
　キャプションのラベルを削除する。

よく使う書式パターン
　高さ　0.6cm
   フォントサイズ　11　→　8
　フォント　メイリオ
　文字の色　黒　→　グレー

【フォーム単位】
・1レコード単位で別フォームを開いて編集するのであれば
　   フォーム＞データ＞レコードセット＞スナップショット

・そのまま一覧フォームからデータを編集するのであれば
　　フォーム＞データ＞レコードセット＞ダイナセット

・閉じるボタン追加
　DoCmd.Close acForm, "XXXX", acSaveNo

・新規ボタンを追加
　
・フォーム＞書式
　「レコードセレクタ」いいえ
　「移動ボタン」いいえ

　「閉じるボタン」いいえ
　「最小化/最大化ボタン」なし

【フィールド単位】
　コントロールの設定（フィールド＞データ）

　編集不可にするなら
　　使用可能＞いいえ
       編集ロック＞はい
　
　入力モードを変更するなら
　　IME入力モード（使用不可・ひらがな等）

【レコード単位】

　別途編集フォームを使うなら
　　「編集」ボタンを行ごとに追加
　　　個別編集(Update)用フォームを開く
　
　そのまま編集するなら　


	Filterに該当行を特定するものを
　　　DoCmd.OpenForm "XXXX", acNormal,Filter , , acFormEdit , acWindowNormal


		Filter → フィールド名 = 値　（主キー ＝ 値なら確実）
		WindowMode → acWindowNormal or acDialog


#個別フォーム

・フォームウィザード
　単票形式で作成

・デザインビューに切り替え
　ウィンドウ名で表示する予定なので、
　キャプションのラベルを削除する。

よく使う書式パターン
　高さ　0.6cm
   フォントサイズ　11　→　8
　フォント　メイリオ
　文字の色　黒　→　グレー

【フォーム単位】
・そのままフォームからデータを編集するのであれば
　   フォーム＞データ＞レコードセット＞ダイナセット

・ボタンイベントからVBAで更新する場合は
　　フォーム＞データ＞レコードセット＞スナップショット

・閉じるボタン追加
　DoCmd.Close acForm, "XXXX", acSaveNo

・更新ボタンを追加（直編集であれば不要）
　新規ならInsert、更新ならUpdateクエリを実行するVBAを起動する。

・フォーム＞書式
　「レコードセレクタ」いいえ
　「移動ボタン」いいえ

　「閉じるボタン」いいえ
　「最小化/最大化ボタン」なし

【フィールド単位】
　コントロールの設定（フィールド＞データ）

　編集不可にするなら
　　使用可能＞いいえ
       編集ロック＞はい
　
　入力モードを変更するなら
　　IME入力モード（使用不可・ひらがな等）

1レコードしか表示されないので、レコード単位の設定は不要
WEBサーバー(apache)のインストール＆設定ファイル

CentOsでapacheをインストール

```bash
 yum install httpd.x86_64
```

ファイアウォールの設定でhttpdへの接続を許可する

```bash
# 現在のファイアウォールの設定を確認
 firewall-cmd --list-service
dhcpv6-client dns nfs ssh
# httpdへの接続許可　
 firewall-cmd --add-service=http --zone=public --permanent
success
# firewalld.serviceを再起動し、設定が反映されているか確認
 systemctl restart firewalld
 firewall-cmd --list-service
dhcpv6-client dns http nfs ssh
```

設定ファイルは

```conf 
/etc/httpd/conf/httpd.conf
# apacheの作業ディレクトリ
ServerRoot "/etc/httpd"
# 接続を受け付けるポート
Listen 80
# レスポンスするドキュメントのルートディレクトリ
DocumentRoot "/var/www/html"
```

１つのサーバーで複数のサイトを提供する方法

名前ベースのバーチャルホスト

```conf

```

IPベースのバーチャルホスト

```conf

```

バーチャルホストについては後日改めて追記する
共立エレショップのダイヤモンドバッファアンプ基板を検討する

ミニワッターで美しい回路のトランジスタアンプを作ってみたくなった。
以前に、５W程度のダイヤモンドエミッタフォロワで組まれたトランジスタアンプの記事を見たことがあり、いつか作ってみたいと思っていたら、ヘッドホンアンプをこの回路で作っている例を見つけて「これ、作ってみたい」と思った。
[ダイヤモンドバッファアンプ基板(P4-10098)](https://eleshop.jp/shop/g/gK5F411/)
共立エレショップで基板を扱っている以上、ここでまとめて部品を買った方が送料も含めてお得だろうと考え、とりあえず部品を揃えてみた。

フロントエンドには東芝の有名な2SC1815を使う設計らしいけど、
併記されていたコンパクトで安いトランジスタが叩き売りになっていたので採用してみる。
雑音特性(NF)が表示されていないのがちょっと気になるが。

NPN型 NPN型 一般小信号増幅用トランジスタ SC-72(小型) 10本切
[2SC1740S-10P](https://eleshop.jp/shop/g/gG9H416/)　商品コード： G9H416　￥82
注文受付単位：1	数量:   2  	￥164

このアンプでは初段にコンプリメンタリなPNP型を使う必要は無いのだけど、値段も安く、今後の実験にも使えそうなので一応仕入れてみる。
PNP型 PNP型 一般小信号増幅用トランジスタ 10本切
[2SA933S-10P](https://eleshop.jp/shop/g/gG9H414/)　商品コード： G9H414　￥82
注文受付単位：1	数量:   2  	￥164

ダイヤモンドバッファに使うトランジスタは候補が２つ。
コレクタ損失が1Wのモノと0.9Wのモノ。多分たいして違いは無い。

PNP型 トランジスタ[RoHS]
[2SA1020-Y](https://eleshop.jp/shop/g/gSA1020/)　商品コード： SA1020　￥66
注文受付単位：1	数量:   4  	￥264

NPN型 トランジスタ[RoHS]
[2SC2655-Y](https://eleshop.jp/shop/g/gSC265Y/)　商品コード： SC265Y　￥66
注文受付単位：1	数量:   4  	￥264

2SB/PNP型 中電力・低電圧トランジスタ[鉛F]
[2SB772LP](https://eleshop.jp/shop/g/gF2D128/)　商品コード： F2D128　￥61
注文受付単位：1	数量:   4  	￥244

NPN型 中電力・低電圧トランジスタ[鉛F]
[2SD882LP](https://eleshop.jp/shop/g/gF2D12F/)　商品コード： F2D12F　￥61
注文受付単位：1	数量:   4  	￥244

オーディオ用標準品電解コンデンサ FWシリーズ 25V 47uF
[UFW1E470MDD](https://eleshop.jp/shop/g/gD1S41B/)　商品コード： D1S41B　￥35
注文受付単位：1	数量:   2  	￥70

オーディオ用標準品電解コンデンサ FWシリーズ 25V 220uF
[UFW1E221MPD](https://eleshop.jp/shop/g/gD1S41D/)　商品コード： D1S41D　￥58
注文受付単位：1	数量:   4  	￥232

セラミックコンデンサ 50V 0.1uF
[0.1uF](https://eleshop.jp/shop/g/g4C713V/)　商品コード： 4C713V　￥22
★数量割引対象商品
注文受付単位：1	数量:   2  	￥44

導電性高分子アルミ固体電解コンデンサ 16V 270μF[RoHS]
[PLF1C271MD01](https://eleshop.jp/shop/g/g99U139/)　商品コード： 99U139　￥127
注文受付単位：1	数量:   1  	￥127

オーディオ用金属皮膜抵抗器 1/4W ±1％ 3.3kΩ[RoHS]
[REY25FY 3.3KΩ](https://eleshop.jp/shop/g/gGC7E1R/)　商品コード： GC7E1R　￥30
注文受付単位：1	数量:   2  	￥60

オーディオ用金属皮膜抵抗器 1/4W ±1％ 6.8kΩ[RoHS]
[REY25FY 6.8KΩ](https://eleshop.jp/shop/g/gGC7E2D/)　商品コード： GC7E2D　￥30
注文受付単位：1	数量:   2  	￥60

オーディオ用金属皮膜抵抗器 1/4W ±1％ 22kΩ[RoHS]
[REY25FY 22KΩ](https://eleshop.jp/shop/g/gGC7E2P/)　商品コード： GC7E2P　￥30
注文受付単位：1	数量:   2  	￥60

カーボン抵抗 1/4W 5% ★受注単位有★
[10kΩ](https://eleshop.jp/shop/g/g6AY31D/)　商品コード： 6AY31D　￥4
★数量割引対象商品
注文受付単位：20本	数量:   20　  	￥80

カーボン抵抗 1/4W 5% ★受注単位有★
[6.8kΩ](https://eleshop.jp/shop/g/g6AY319/)　商品コード： 6AY319　￥4
★数量割引対象商品
注文受付単位：20本	数量:   20　  	￥80

S付基板用2連可変抵抗 Aカーブ 10kΩ
[RK0972S-A10K L-20KC](https://eleshop.jp/shop/g/g86A314/)　商品コード： 86A314　￥210
★数量割引対象商品
注文受付単位：1	数量:   1  	￥210

ツマミ φ20.7mm(ローレット)黒
[WTN-15-1177/18T](https://eleshop.jp/shop/g/gD2541B/)　商品コード： D2541B　￥105

指定されたステレオミニジャックが共立では買えない。
検索してみると扱っているのは秋月電子らしい。

基板取付用 ３．５ｍｍ小型ステレオミニジャック
[C-02460](http://akizukidenshi.com/catalog/g/gC-02460/) 基板取付用	1個 ￥50
数量:   2 個	￥100	

この他、電池ホルダとなる金属板も共立、秋月共に扱いがなく、実はケースもこの２店では買えないことが判明した。
[マルツかデジットに電池ホルダ、西川電機にケースはある](https://docs.google.com/spreadsheets/d/13ZG83vWk95UG4AXWMP2CXTNppyVyZ-6vaU8f5pfot2Q)そうなので、買えなくはないが、なかなか部品集めは骨が折れそうな感じ。

細かい点だが、回路図を見てみるとC9の記述がない。
プリント基板のほうを見ると電源のパスコンらしいが、これは記述抜けじゃないかな。
機械学習エンジニア パダワンへの道

# はじめに
[機械学習の門戸を叩きに行](https://qiita.com/hamham194/items/70b4f84d883b2c417f37)…き忘れたまま放置してたので、
再度叩きに行って、**機械学習エンジニアパダワン**くらいになろう、そろそろ。

（8/3 add）
状況を更新。まずまず、といったところ。

# 大前提
無理だったらやめる！（笑）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384185/5df33a83-bab6-110d-4979-c4828cb12b12.png)
いや、機械学習だけ学びたいわけでもないし！
っていう盛大な言い訳からスタート。精神衛生上それが良い。

# ゴール像
なんかそこまではっきりした目標はないっす。
あったらとっくにやってるっつーの。MLPは造語です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384185/470a1cfb-7acd-16e9-815d-038adacd27b7.png)

（8/3 upd）
統計をもっと重要視することにした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384185/971f9e72-049d-ca8e-c113-4773283c7002.png)


# Roadmap

（8/3 upd）
後半にめちゃ詰め込んだ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384185/54c5403f-c464-4623-61d7-a3001a60cc78.png)


# くじけそうになった時
マスターヨーダの教えを思い出そう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384185/f4671716-80c3-3530-69d0-3d513beeb7fa.png)

くじける前になんか他に策を打たないとね。
一緒に歩み続けるの、よろしくだ。

# 振り返りつつ走る
やっぱり振り返りつつ走るのが大事なので、年計画と同様の形式で振り返りしていこう。
細かくしすぎるとやる気なくしそうだし、時間かかるのでこの粒度で良いや。
（8/3 add）
　6~7月 こう書くと、大してやってないのが分かる。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384185/4860b4c1-19fc-f079-23c9-def7a578d2bd.png)


あとはTrelloのボードをいい感じにダッシュボードで可視化していきたい。
きっとやる気の源になってくれることだろう。（タスク管理信者）
（8/3 add）
 [やったらやる気出た。](https://qiita.com/haman/items/706c681769ad93a8f8b4)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384185/807e75bd-bea8-2675-30bb-da8ce2b375c8.png)


# 参考
とても参考にしたサイトたち。感謝。

- [2020年版：実務の現場で求められるデータサイエンティスト・機械学習エンジニアのスキル要件](
https://tjo.hatenablog.com/entry/2020/03/09/172000)

- [初心者から data scientist・AI engineer になるための勉強法&おすすめサイト・本を一つの記事にまとめたかった](https://qiita.com/poisuke/items/4be5feafd317b4ec706f)
【C#】Array.Sortに勝てた話

# 初めに
本記事では特にコードとかは記載されません。

#目的
C#にはusing systemで追加されるクラスでArrayクラスがあります、このクラスの中にはSort関数がありかなりの処理速度でソートをかけてくれます。</br>
この速度になんか勝ちたいなと思いまして色々試してみました。

#試したこと
とりあえず自分の中でソートといえば**バブルソート**と**クイックソート**の2種類が主流です。
とりあえず各ソートの処理速度を見てみましょう。
各ソートは1万回ずつ実行した時の数値となっています。

#バブルソート
![a59c245735815260207550317024280e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211130/44893c75-84ca-679d-9e3d-7997600942c5.png)
こんな感じの速度ですね。

#クイックソート
![c92314c24c00d07349481f08ae57325a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211130/42cebca4-9a27-8d46-0067-5f104ea429a3.png)
やっぱりソート最速と噂されるソートなだけあって早いです。

#Array.Sort
![eb6f944a19fd535acfc8469efc0ca7ba.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211130/23633dcf-d25c-549b-bca8-0e3be0e82f7a.png)

#まとめ
クイックソートすごいですね、爆速です。
機会がありましたらソースも公開したいと思います。

#追記
数回のテストで勝ってる！と思ってましたがもう何度かテストした結果ほぼ同じ速度であることがわかりました。
悔しい！
Redux Toolkit + TypeScriptのボイラープレートを一瞬で作る

Redux Toolkit + TypeScriptの環境をパッと用意したい。

Redux Toolkitを導入する記事はすでに結構あるが、大体が

```
npm install @reduxjs/toolkit
```

でRedux Toolkitのインストールをしている。

インストールするだけではなくて、Redux Toolkitを用いた典型的なテンプレコードも込みで用意してくれるようなやつが欲しかった。かつ、tsも初めから使えるようなやつ。

探したら[公式](https://github.com/reduxjs/cra-template-redux-typescript)が用意してた。

```
npx create-react-app my-app --template redux-typescript
```

これで、Redux Toolkit + TypeScript + Thunkの環境で、ボイラープレートのコードもちょっとありの環境ができる。
生成されるコードは[Re-ducksパターン](https://noah.plus/blog/021/)を意識した感じになっており、機能ごとにフォルダが分けられている。

![スクリーンショット 2020-06-01 3.37.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131625/df923da0-f636-a202-7871-e9acb13ab79c.png)
（機能ごとと言っても、カウンター機能のみではあるが）

[Redux Toolkit公式のQuickStart](https://redux-toolkit.js.org/introduction/quick-start)に、tsありでの導入方法も記載すればいいのにと思った。


<img width="400" alt="スクリーンショット 2020-06-01 1.51.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131625/54f65438-09a3-2b08-09f1-43ebfdeabc88.png">
SSL化へ　ロードバランサーでALBにhttpsの設定を入れて作成

#目的
個人アプリでssl化が必要だったためSSL証明書の発行が求められた。
筆者の備忘録

#前提条件
AWS、ALB(Application Load Balancer)、ec2、を活用します。
開発環境 rails unicorn nginx

##ssl化までの手順
[Route53でドメインを購入（有料です）](https://qiita.com/takashi8816/items/d6d7edc711494dd24e0d)　
[AWS Certificate Manager(ACM)でSSL証明書の発行](https://qiita.com/takashi8816/items/c82c7f69256863df5b38)
[ロードバランサーでALBにhttpsの設定を入れて作成](https://qiita.com/takashi8816/items/6dbbfe1d91724be5f6bb) <=今回はここ
Route53でAレコードのエイリアスを作成

##ロードバランサーについて
> ロードバランサーとは、その名の通りサーバーにかかる負荷を、平等に振り分けるための装置のことを指します。これによって1つのサーバーにかかる負担を軽減したり、停止状態を防ぐことができたりします。

サーバの数を増やすことで負荷がかかりすぎている一つあたりの負荷が減る作戦。
仕事で例えるなら１人で大量の仕事を抱え込むオーバーワークで倒れてしまう。だから社員のみんなで分担して仕事を分け合おうねということだろう。言い換えるならその仕事の量が多すぎたら多数のサーバもともにダウンしてまう。そのために大量のサーバつまりコストが必要なのだろう。

*今回はawsでssl発行書を発行したため、ロードバランサーを使用した。

#ロードバランサーでALBにhttpsの設定を入れて作成
awsのコンソールEC2の飛び、横のタブからロードバランサーを選択し、ロードバランサーの作成をクリック
ALB（Application Load Balancer）を選択。

##手順１　ロードバランサーの設定
<img width="1427" alt="aws10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589433/3cf7a62e-24c5-f0bc-e9e1-9c7bfff2a023.png">
名前は区別が付く名前に
リスナー：ロードバランサーのプロトコル　＝＞　HTTPSを選択
アベイラビリティーゾーンは２つ以上選択します。

###ポイント
リスナーは
究極的にはリクエストした側がhttpで通したいのかhttps通したいのかを聞いているにで
今回はssl化が目的なのでhttpsを選択。

##手順２　セキリティ設定の構成
<img width="1430" alt="aws11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589433/aef926eb-fcd7-58cb-aa7d-544bb3e77471.png">

証明書タイプ：ACMから証明書を選択する（事前にSSL証明書を発行したため）
証明書の名前に事前にSSL証明書を選択

##手順3 セキュリティグループの設定
<img width="1415" alt="aws12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589433/cd9ea88b-e98d-d73b-3279-365527c7f65c.png">

既存のセキリティグループでもよし
今回は新しくセキリティグループを作成し、
HTTPSを選択

##手順４ ルーティングの設定
<img width="1432" alt="aws13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589433/7f000d9d-15c2-8a74-ca31-69d4108f080d.png">

>ALBはターゲットグループにルーティングが行える
>>ALBはターゲットグループと呼ばれる別々のサーバグループに対してインスタンスを紐付け、ルーティングを設定することができます。
直接的にインスタンスを設定していたELBとは違って、サービスを独立させて実行することもでき、ルーティングのルール定義も複数作成可能です。

###ポイント
ルーティングは、どのインスタンスと結びつけたいかだから
紐付けたいインスタンスのポートに合わせよう。
そのためhttpsを選択せず今回は、httpを選択した。

ヘルスチェックは、同様にhttp：/80を選択（ここは検証していません）

##手順５　ターゲットの登録
<img width="1413" alt="aws14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589433/d3c77dd5-132a-555c-0346-3a298e152efd.png">

紐付けたいインスタンスを登録させる。

##手順 6: 確認
設定がただしか確認する。
確認後ALBが作成される。
##最後にターゲットグループの紐付けたインスタンスを確認する
<img width="1187" alt="aws15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589433/f0431b5b-7088-a52b-cf5c-86dbf05930d5.png">

横のタブからターゲットグループを選択
作成したターゲットがロードバランサーとつながっているか確認し
登録済みのターゲットのステータスがhealthyになっているか確認する。
ここがしっかり紐付いていなかっため筆者は痛い目にあった。