OmniAICreator/Qiita-1.07M huggingface dataset:
[auth0] auth0/node-jwks-rsaを使ってJWT token JSON Web Keyを検証する時にgetSigningKeyをawaitする方法

# auth0発行のログインユーザーアクセストークンの検証

通常[jwks-rsaパッケージ][1]を使って改ざんされていないかを確認する

# 問題点

```js
// https://github.com/auth0/node-jwks-rsa

const jwksClient = require('jwks-rsa');

const client = jwksClient({
  strictSsl: true, // Default value
  jwksUri: 'https://sandrino.auth0.com/.well-known/jwks.json',
  requestHeaders: {}, // Optional
  requestAgentOptions: {}, // Optional
  timeout: 30000, // Defaults to 30s
  proxy: '[protocol]://[username]:[pass]@[address]:[port]', // Optional
});

const kid = 'RkI5MjI5OUY5ODc1N0Q4QzM0OUYzNkVGMTJDOUEzQkFCOTU3NjE2Rg';
client.getSigningKey(kid, (err, key) => {
  const signingKey = key.getPublicKey();

  // Now I can use this to configure my Express or Hapi middleware
});
```

この`client.getSigningKey`がコールバックを呼ぶメソッドになっており、Promiseを返さない。await出来ない。

# 解決方法

Promiseなメソッドに変えてやる。
https://github.com/auth0/node-jwks-rsa/issues/76#issuecomment-569486814

```js
const { promisify } = require("util");
const jwksClient = require("jwks-rsa");

...

const client = jwksClient({ <yourOptions> });

// promisify the function:
const getSigningKey = promisify(client.getSigningKey);

// use it like any other promise:
const key = await getSigningKey(kid);
```

# v1.9.0からは...

Readmeにもあるように

> Note that all methods on the JwksClient have asynchronous equivalents, where the promisified name is suffixed with Async, e.g., client.getSigningKeyAsync(kid).then(key => { /* ... */ });

`getSigningKeyAsync`でawaitすれば良いのだが...


# v1.9.0でもTypescriptだと

まだ定義が更新されてないので、コンパイルエラーになる
https://github.com/auth0/node-jwks-rsa/issues/164

[master][2]で直ったっぽい。まだ、リリースされてない。

### [v1.10.0][3]で直った


[1]: https://github.com/auth0/node-jwks-rsa
[2]: https://github.com/auth0/node-jwks-rsa/compare/v1.9.0...master#diff-b52768974e6bc0faccb7d4b75b162c99
[3]: https://github.com/auth0/node-jwks-rsa/releases/tag/v1.10.0
Host PCからmbedボードを経由してシリアルデバイスを操作する(シリアルコンソール)

モデム等を用いた開発をしていると、PCからマイコンボードを経由して直接ATコマンド等をシリアルデバイスに流し込みたい時があります。
[Arduino系の場合はサンプルがある](http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=95)のですが、mbedでは見当たらなかったのでメモ代わりに置いておきます。

![a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/21a7509c-3911-cf29-8703-a07761b36809.gif)

## 論よりコード

```c++:main.cpp
#include "mbed.h"

Serial HostPC(USBTX, USBRX);
Serial UARTdevice(PA_0, PA_1); /* Using serial4 on F446RE */

int main() {
    HostPC.baud(115200);
    HostPC.printf("\r\n-- Start: SerialBridge\r\n");
    UARTdevice.baud(9600); /* Check: Baudrate of UARTdevice */
    wait(0.2);             /* IMPORTANT: waiting for warm-up of UARTdevice */
    HostPC.printf("-- Start interactive session (Recommmend: Local echo ON and CRLF)\r\n");
    HostPC.printf("-- Example: AT[enter]\r\n");
    while(1) {
        while (UARTdevice.readable()) HostPC.putc(UARTdevice.getc());
        while (HostPC.readable()) UARTdevice.putc(HostPC.getc());
    }
}
```

### 確認環境

- mbedボード: [NUCLEO-F446RE](https://os.mbed.com/platforms/ST-Nucleo-F446RE/)
- シリアルデバイス: [Sigfox Shield for Arduino "UnaShield V2S / 20170107"](https://unabiz.github.io/unashield/hardware)
- IDE: [mbed オンラインコンパイラ](https://ide.mbed.com/compiler/)

### 解説

`mbed.h` のみで実現したので、大体どのボードでも使えるとは思います。
ローカルエコーや改行コードはHost PCのターミナルで設定してください。

オフィシャルのシリアル通信クラスはバッファリングが無いので取りこぼしもありそうです。そのためBufferedSerialを使うのも良さそうです。([出典: mbed シリアル通信クラス](https://qiita.com/matsujirushi/items/88e7943617f6ca1e4f75))

### テンプレートを使わずに「スッピンで」mbedの環境をそろえる

mbed オンラインコンパイラで新しく開発を始めようとすると色々テンプレートがあります。便利ですが、ちょっとしたことを行うにはデカすぎることが多いです。
ゼロから開発する方法を [オンラインIDEで、新規から開発する](https://blog.soracom.com/ja-jp/2017/04/28/getting-start-mbed-board/#%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3ide%E3%81%A7%E6%96%B0%E8%A6%8F%E3%81%8B%E3%82%89%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B) で解説してあります。

## 参考資料

- mbed シリアル通信クラス / https://qiita.com/matsujirushi/items/88e7943617f6ca1e4f75
- mbedのSerial通信要項 / https://qiita.com/hiRina/items/c642908a7cc0de95658d

## あとがき

久々に書いたよ。

EoT
【JavaScript】小数点第{n}位で四捨五入・切上げ・切捨てる方法〜10^x倍して10^xで割る儀式すればよい

※確認ののち再公開します

##前提
###Math.round( ) は整数値を返す
小数点第{n}位で四捨五入・切上げ・切捨てたいと思ったことはありますか.

JavaScriptには小数点第●位を四捨五入する関数がありません.
Mathクラスのメソッドでは,全て**小数点以下が省かれて整数が**返ります.

```JavaScript
//四捨五入 Math.round(<数値>)
Math.round(123.456) // 出力：123
Math.round(123.567) // 出力：124

//切り上げ Math.ceil(<数値>)
Math.ceil(123.456) // 出力：124
Math.ceil(123.567) // 出力：124

//切り捨て Math.floor(<数値>)
Math.floor(123.456) // 出力：123
Math.floor(123.567) // 出力：123
```
解決するには,10^x倍して10^xで割ればよいという話です.

##ケーススタディ
###【問い】小数点第2位を四捨五入するには？
シンプルなパターンです.

たとえば, 79.5714が与えられたとき,
どのように79.6 を出力してあげればよいでしょうか？

###【答え】
```JavaScript
Math.round(79.5714 *10 ) / 10 // 出力：79.6
```
10倍してMath処理,のちに10で割ればよいのです

##補足(ひとこと)
slice と splice 間違えがち.
配列対象と文字列対象間違えがち.
int.toString()を toString(int)って書きがち.

`参考` https://qiita.com/nagito25/items/0293bc317067d9e6c560
学習記録（2020/9/18）

##ユーザ認証とアクセス管理

![20200918-143040-6585947.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/723458/16868b80-849f-f6cc-ff0f-55860ff897ad.jpeg)


##コンピュータウイルスの脅威

![20200918-143040-6689010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/723458/df176209-3d4c-e2d5-992d-41946b66c465.jpeg)



##ネットワークのセキュリティ対策

![20200918-143040-6640691.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/723458/66a84013-ece6-01b5-3793-367f1db83302.jpeg)


![20200918-143040-6360830.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/723458/b3b40212-71dd-02ce-5e88-5a28ec811cdc.jpeg)
【Python学習中】 4桁のパスコードを総当たりするのに、何秒かかるのか randint/for/time/

**やりたいこと**
手元のiPhoneをみていたら、4桁のパスコードロックはどのくらいで破られるのかが気になりました。
さっと計算すると、「0000」から「9999」まで、10の4乗で10000通りの組み合わせがあるはず。
これをPythonをつかって総当たりしていくと、一体何秒でパスコードを見破れるのかを測ってみました。

「8400rpm。420馬力
あなたがこの文章を読み終える時間で
時速100kmまで加速する。」
10年前くらいの自動車雑誌に掲載されていた、BMW M3クーペの宣伝文句です。

果たしてそれよりも早いのか、遅いのか。
BMW M3クーペと勝負!




**背景**
・Python初習者です。
・基本的なことは学んだが、どう応用して良いかわからず、仕事で使うわけでもなく、モチベーション低下気味です。


**考え方**
・4桁のPINコードは、銀行の暗証番号やスマホのロック画面でよく使われる0から9の数字を4桁に組み合わせて使うものを想定。
・PINコードはわからない前提で、ランダム関数を使ってランダムに生成。
・「0000」から「9999」まで総当たりで試していき、マッチした場合に「iPhone unlocked」というメッセージを表示することにする。


**コード**

```python:pin_code_breaker.py
from random import randint
import time
        
pin_n = randint(0, 9999)

def iphone_unlock(pin_n):
    for i in range(0, 9999):
        print(format(i, '04'))
        if i == pin_n:
            print(f"PIN is {pin_n}, iPhone unlocked.")
            break
    else:
        print('Process finished.')
        
        
start = time.time()
iphone_unlock(pin_n)
elapsed_time = time.time() - start
print(f"elapsed time: {elapsed_time}")
```


**考察**
・0000から総当たりでマッチングを試していくので、生成されたPINコードが若い（0000に近い）ほど処理時間は短く、大きいほど（9999に近い）処理時間が長くなる。
・しかし、長くても3秒以内には処理が終わる。
・4桁のパスワードそのものは無防備であることがわかった。
TeratermでSSH接続時の公開鍵認証を設定する


#はじめに
サーバーについてあまりにも知識が無さ過ぎたので、「さくらのVPS」でVPSサーバーを借り、実際に触ってみることにしました。「公開鍵認証」の仕組み・やり方がよくわからずかなり苦戦したので、記録も兼ねてここにまとめます。
##環境
・さくらのVPS
・CentOS Linux release 7.8.2003
## 公開鍵認証とは
サーバーへのログインをパスワード認証で行うと、パスワードが割れれば第三者がログインできるので危険だが、公開鍵認証を使えば、パスワードを使わず、安全にログインすることができる。
公開鍵認証は、公開鍵と秘密鍵のペアを生成・使用することで行われる。二つの鍵には以下の特徴がある。

・秘密鍵がないと署名が作れない
・公開鍵で(対応した秘密鍵による)正しい署名かどうか検証できる

クライアント側で公開鍵と秘密鍵を生成した後、公開鍵は接続先サーバーに登録し、秘密鍵はクライアント側のみが保管する。ログイン時、サーバーに登録されている公開鍵と、クライアントが提示した秘密鍵が適合すれば、ログインが成功する。

![SSH公開鍵認証.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673146/39e9fedf-2e68-767b-fbb5-e67cb4b9330a.png)

#実際の手順
##公開鍵・秘密鍵の生成
ここからは、「Tera Term」を使用してやっていきます。TeraTermは https://ja.osdn.net/projects/ttssh2/ からダウンロードできます。
　
（１）「TeraTerm」の設定メニューの「SSH鍵生成」をクリックする。
![teraterm1copy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673146/943bf5b2-2807-88a8-fe6f-fe033518e73b.png)
（２）以下の画面が表示されるので、「生成」をクリックする。
![teraterm2copy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673146/f617c25e-ff53-f957-c8d0-16af010b1718.png)
（３）「生成」を実行すると画面下部の「パスフレーズ」、「コメント」を入力できる状態になる。（パスフレーズはログイン時、秘密鍵を使用する際に入力を求められる。一応空欄でも生成は可能。）
　

（４）最後に、画面下部の「公開鍵の保存」「秘密鍵の保存」をそれぞれクリックして、鍵を保存する。
※　「id_rsa.pub」が公開鍵、「id_rsa」が秘密鍵。
　
##公開鍵の登録　
（１）公開鍵をサーバー側に登録する。TeraTermでサーバーにログインし、「id_rsa.pub」をTeraTermウィンドウ上にドラッグ＆ドロップする。以下のウィンドウが表示されるので、任意のフォルダを設定して「送信」ボタンを押す。　
![teraterm3copy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673146/853fcdbb-8ac5-2ada-0b69-3c0a62c5b58f.png)
（２）公開鍵をサーバー内のディレクトリに送ったが、まだ登録はできていない。以下のコマンドで、公開鍵を`~/.ssh/authorized_keys`ファイルに登録する。

```
$ cat id_rsa.pub >> .ssh/authorized_keys
```

`authorized_keys`のアクセス権を変更する。（所有者以外がアクセスできないようにする。）

```
$ chmod 600 .ssh/authorized_keys
```
以上で鍵の登録は完了。SSH認証画面で、`RSA/DSA/ECDSA/ED25519`にチェックを入れ、生成した秘密鍵を指定する。それでログインできればOK。
![teraterm4copy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673146/c57e24a8-9393-c191-27ba-c05ef04e78e7.png)　
　
##パスワード認証を無効にする
最後に、パスワードではログインできないよう設定を変更する。
以下のコマンド入力して`/etc/ssh/sshd_config`ファイルの編集画面を開く。

```
# vim /etc/ssh/sshd_config
```
このファイルの以下の部分を変更する。

```
PasswordAuthentication yes　→　PasswordAuthentication no
```

変更後ファイルを保存したら、設定を再読込する。

```
# systemctl reload sshd.service
```
　
※　鍵認証の設定がうまくいってないと、パスワード認証を無効化した時点でTeraTermからはログインできなくなる。その場合はVNCコンソールからログインして`/etc/ssh/sshd_config`の変更箇所を元に戻す。
APIとは

見てくださった方々に正しい情報を伝えられるように頑張りますが、初投稿なので細かい所は大目に見てくださいっ。

#定義
APIとは「Application Programming Interface」の頭文字を取ったものです。
「Application」→アプリケーション、ソフトウェア
「Programming」→プログラム
「Interface」→「何か」と「何か」を繋ぐもの
以上を大雑把に言うと<font color="Red">「アプリケーション、ソフトウェアとプログラムを繋ぐもの」</font>ということになります。
例えるなら、パソコンと周辺機器をつなげるUSBも役割的には同じ役割です。
APIの場合ソフトウェア同士をつなげます。つまり、APIを使うと異なるソフトウェアやサービス間で認証機能を共有したり、チャット機能を共有したり、片方から数値データを取り込み、別のプログラムでそのデータを解析したりできるようになります。

#メリット
・アプリケーションの開発時間やコストの削減が可能
・セキュリティの向上
・最新情報を簡単に取得できる

他にもあると思いますが、以上がAPIの利点と言えます。
####アプリケーションの開発時間やコストの削減が可能
APIを使うことによって自分で1からプログラムを組む必要がなくなり、プログラムの開発時間を省略できるようになります。開発になれていないエンジニアでも簡単にアプリケーション開発が可能になります。
####セキュリティの向上
色々な世の中のサービスの中で会員登録時にGoogleアカウントやFaceboolアカウントと連携することで登録できたという経験があると思いますがこれはAPIのおかげでできています。
この連携により簡単に会員登録できるようになる他に、自社でセキュリティレベルの高い会員登録システムを入れるよりも、すでにあるセキュリティレベルの高い会員システムを導入する方がユーザーも安心してサービスを使うことができます。
####最新情報を簡単に取得できる
APIを使えばそれぞれの最新情報をこちら側から取得しなくても取得、利用できるようになります。
例えば、自分のサイトでAmazonや楽天などの商品を売っている場合、販売価格や商品情報が変わった時にも自動で変更されるようになります。

#WEBAPI
WEBAPIとはweb上に公開されていて、外部から呼び出して利用することができるAPIです。
####WEBAPIの例
<a href="https://aws.amazon.com/jp/api-gateway/api-management/">・Amazon</a>
<a href="https://developers.facebook.com/docs/graph-api?locale=ja_JP">・Facebook</a>
<a href="https://developer.twitter.com/ja/docs/ads/general/api-reference">・Twitter</a>
<a href="https://console.cloud.google.com/apis/library?hl=ja&pli=1">・Google</a>
<a href="https://api.gnavi.co.jp/api/">・ぐるなび</a>
<a href="https://webservice.rakuten.co.jp/document/">・楽天</a>
<a href="https://developer.yahoo.co.jp/">・Yahoo</a>

一般的には企業のwebサイトから登録をしてAPIを取得します。各々のAPIの使い方は今回また別の機会で紹介できたらなと思います。
####WEBAPIを使うにあたって
実際にAPIを使うときには注意点があります。
・APIキー（アクセスキー）
・APIシークレットキー
この2つを使うときに取得するのですがAPIキーはログインの際のID名にあたる部分、APIシークレットはパスワードのようなものです。なので大切に管理しなければなりません。この2つが第三者や外部に漏れてしまうと情報を買い替えられたり、勝手に送金や出金をされてしまう場合もあります。なのでパスワードや他の権利関連のものは大切に管理しましょう。

#終わりに
https://data.wingarc.com/what-is-api-16084/4
https://www.internetacademy.jp/it/programming/javascript/how-to-use-web-api.html

こちらのサイトを参考にさせていただきました。
簡単になりましたが大体APIとはこんな感じなんだなと思っていただければ幸いです。
詳しい各々のAPIの紹介は<a href="https://qiita.com/mikan3rd/items/ba4737023f08bb2ca161">こちら</a>の方が紹介しているQiitaが分かりやすくておすすめです。
Xcode 12 環境でアプリがビルドできない

## Xcode 12
"Xcode 12 beta 2〜3"辺りから、
Carthage/CocoaPodsを使用している
自作アプリがビルドできなくなりました。
"Xcode 12"の正式版がでても解消されていません。

その原因、対策のまとめです。
各対策は、効果はありましたが、
暫定的なものか、恒久的なものかは分かりません。

### Xcode 12 + Carthage
- Carthageビルドについてのやりとり（英語）
[Carthage builds fail at xcrun lipo on Xcode 12 beta(3,4,5...)](https://github.com/Carthage/Carthage/issues/3019)

- Carthageビルドエラー原因についての日本語記事
[Xcode12 betaでCarthageによる依存ライブラリのビルドが失敗する](https://qiita.com/temoki/items/e3c05ee7e0f7a37b87e9)


#### Carthageビルドの対策

[carthage.sh](https://github.com/Carthage/Carthage/issues/3019#issuecomment-665136323)
リンク先の```carthage.sh```をプロジェクトルートに作成し、
以下を実行する。

```
carthage checkout
chmod +x carthage.sh
./carthage.sh build --platform iOS
```

#### Carthageバージョンエラー
Carthage実行時に、"Carthage 0.35.1"にバージョンアップエラーが出た。
```brew upgrade carthage```で、"0.35.1"にバージョンアップしても、
繰り返しバージョンアップエラーが表示される。

[対策]
1. ```brew uninstall carthage```でCarthageをアンインストール
2. https://github.com/Carthage/Carthage/releases/tag/0.35.1
　からCarthage.pkgをダウンロード＞インストール

#### aws-sdk-ios + Carthage
"Xcode 12 + Carthage"環境で"aws-sdk-ios"がビルドできない。
＞CocoaPodsではビルドできるため、CocoaPodsに移設する。

### Xcode 12 + CocoaPods
Xcodeでビルド時に、
```Xcode 12, building for iOS Simulator, but linking in object file built for iOS, for architecture arm64```
のビルドエラーになる。

#### CocoaPodsビルドの対策
[Xcode 12, building for iOS Simulator, but linking in object file built for iOS, for architecture arm64](https://stackoverflow.com/a/63622570)

## Xcodeのバージョン一覧
Xcode Releases
https://xcodereleases.com/

Xcode wiki（英語版）
https://en.wikipedia.org/wiki/Xcode#12.x_series
対応するmacOSと、Xcode内のiOS SDKバージョンの確認用
インストールしてあるのに、ModuleNotFoundError: No module named 'xxx' になるとき

久々にkerasをimportしたらエラー。。。

```
>>> import keras
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'keras'
```


なんなら、numpyもだめ


```
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
```

こいつは、環境側ってことで

```
import sys
import pprint
pprint.pprint(sys.path)
```

とすると、"/usr/local/lib/python3.8/site-packages"が無い・・・

```
import sys
sys.path.append("/usr/local/lib/python3.8/site-packages")
import keras
```

でOK。
xcodeのupdateが原因？！？！？
UiPath 今のブラウザーのURLを獲得する

#はじめに
UiPathにブラウザーに関するアクティビティは今のURLを取得する機能がないため、
色々な調査をやってかここにメモします。

#ホットキーで
* 環境: Chrome

##ステップ1 --- URLをフォーカスする
###**Uipath.Core.Activities.SendHotkey**
- [x]  Ctrl
- キー： L
- プロパティ
    - オプション
        - 特殊キー：False

##ステップ2 --- 選択されたテキストをコピーする
###**Uipath.Core.Activities.SendHotkey**
- [x]  Ctrl
- キー： C
- プロパティ
    - オプション
        - 特殊キー：False

###**UiPath.Core.Activities.GetFromClipboard**
- プロパティ
    - 出力
        - 結果：変数を格納

###あるいは

###UiPath.Core.Activities.CopySelectedText
- プロパティ
    - オプション
        - 結果：変数を格納

#JavaScriptで
* 環境: Chrome

##ステップ1 --- JavaScriptファイルを作成

```javascript:GetUrl.js
function(e){
	return window.location.href;
}
```

##ステップ2 --- JSを挿入
###UiPath.Core.Activities.InjectJsScript
- プロパティ
    - 入力
        - スクリプト　コード：保存したJSファイル
    - 出力
        - スクリプト出力：変数を格納


#参考
http://www.uipath-dojo.com/purpose/browser_geturl.html
iOSプッシュ通知証明書の更新でp12ファイルが書き出せなかった凡ミスの話

OneSignalのiOSプッシュ通知証明書が期限切れになったので、更新を試みました。
折角なので備忘録としてp12証明書の作成方法を順を追って説明していきます。

#キーチェーンアクセスからCSRファイルを作成

macのキーチェーンアクセスを起動して、CSRファイルを作成します。

1. 左上のキーチェーンアクセスから
証明書アシスタント -> 認証局に証明書を要求を選択
![スクリーンショット 2020-09-18 12.17.42（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/e69d4031-af78-18fa-1675-d4b8d7ef4ec6.png)

2. 以下のポップアップが開くので画像のように内容を埋めていきます。
[メールでCAに送信]はチェックしなくてOKです。
[CAのメールアドレス]も同様に空欄でOKです。
![スクリーンショット 2020-09-18 12.22.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/19bc20b4-06ae-4925-5a3e-b6d548098f2d.png)


3. CSRファイルの保存を要求されるので任意の場所にダウンロードします。
CSRファイルは画像のようなタキシード姿のファイルとして出力されます。
![スクリーンショット 2020-09-18 12.15.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/eac292e6-6d5a-9664-b2be-8f650a48fd19.png)

#AppDeveloperからcerファイルを作成

AppDeveloperからプッシュ通知用のCertificateを作成してCSRファイルアップロードすることでcerファイルがダウンロードできるようになります。
[AppDeveloper : Certificates, Identifiers & Profiles](https://developer.apple.com/account/resources/certificates/list)

1. Certificates, Identifiers & ProfileのCertificatesから＋を押して新しいCertificateを作成します。
![スクリーンショット 2020-09-18 12.46.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/64735da0-f451-18f2-ae70-86839f0dc89b.png)


2. SoftwareやServicesの一覧が出てきます。
今回は**[Apple Push Notification service SSL (sandbox&Production)]**を選びます。
![スクリーンショット 2020-09-18 12.47.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/cb21f0c9-f51b-b93d-06cf-365fcf1bbea6.png)

3. プッシュ通知をしたいアプリのAppIDを選択して次に進みます。
AppIDがない場合はまずAppIDの作成を先に行ってください。
![スクリーンショット 2020-09-18 12.47.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/5fa323d3-500a-7acb-f9d7-8c5cc77adc89.png)

4. ここでCSRファイルを要求されるので、先ほど作成したCSRファイルを選択して次に進みます。
![スクリーンショット 2020-09-18 12.48.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/0240114e-9d26-4bb0-dcfa-c14ec5505ab1.png)

5.Certificateの作成が完了しました。
ここでは作成したCertificateが紐づいているAppIDや証明書の期限が書かれています。
Downloadを押して証明書ファイル(cer)をダウンロードします。
![スクリーンショット 2020-09-18 12.48.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/61e03ec2-e63c-96ea-d7b5-97a41fc5c49c.png)

cerファイルはこんなやつ
![スクリーンショット 2020-09-18 13.07.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/304e4288-0ca3-73d1-5480-e7467a7781f3.png)

6.ダウンロードしたcerファイルをダブルクリックすると、キーチェーンアクセスに追加されます。
追加された証明書を右クリックして書き出すことでp12ファイルを作成することができます。

#p12ファイルが書き出せない...?

ここまで順調だったのにいざp12ファイルを書き出そうとしたらp12ファイルが選択ができませんでした。
手順を間違えたのかと何度繰り返しても同じだったので不思議だなと頭を捻っていました。
![スクリーンショット 2020-09-18 13.10.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/7887de99-7db2-d906-0541-34382ca052ef.png)

#ただの凡ミス

理由は単純。
キーチェーンアクセスの左下にある[分類]を**[自分の証明書]**にするだけでした。
![スクリーンショット 2020-09-18 13.14.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726235/b966b282-5dd7-6168-477b-924f55c958f6.png)

自分で作成したCSRファイルからしかp12ファイルを作成することはできないようです。
他人のCSRファイルで作成したCertificateからcerファイルをダウンロードしても当然p12ファイルは書き出すことはできません。

これで無事にp12ファイルを書き出すことができました。
OneSignalの更新も問題なく終わったのでよかったです。
fml 4.0 でSubject中に[ml-name:999]が複数入ってしまうのを回避

##やりたいこと
fml 4.0 でSubject中が
「Re: [ml-name:999] Re:[ml-name:998]ほげほげ」
のように　通し番号が複数入ってしまうのを回避

##Special Thanks↓
http://umomemo.hatenadiary.jp/entry/20130830/p1

##cfファイルに下記を追加

```
$START_HOOK .= q{
  use Encode qw(decode);
  use Jcode;
  my($subject) ;
  $subject = $Envelope{'h:subject:'} ;
  $subject = decode ('MIME-header', $subject) ;
  $subject =~ s/\[ML名:[0-9]+\]//g;
  $subject = jcode($subject)->mime_encode;
  $Envelope{'h:Subject:'} = $subject ;
};
```

##SSHで下記を実施

```
$ ~/fml/sbin/makefml update-config [ML名]
```

##さくらレンタルサーバの場合の手順参考ページ
https://qiita.com/Qamada_Case_K/items/9ca0f04e7e1f4727740f
Pythonによる素数生成プログラム





中身のないprime.txtを別途用意してください。

```python:prime.py
import math
num = 3 #探索を開始する数
prime = [2] #素数に２を追加
prm_cnt = 1 #発見した素数をカウントする変数
pfile = 'prime.txt' #発見した素数を書き込むファイル

####################################################################
#Function Description: 前回実施した素数リストのファイル読込関数
####################################################################
def load_prime():
    global prm_cnt
    global prime
    global num
    
    file_data = open(pfile, "r")#ファイル読み込み
    print("!! load start !!\n")
    for line in file_data:
        prime.append(int(line))
    num = int(line)
    print("!! load end !!\n")
    file_data.close()
    prm_cnt = len(prime)

####################################################################
#Function Description: 素数を発見したらフラグを立てる関数
#Arg1:　素数か判定する数　これまで出現してきた素数で割って余りが出ないかチェック
#Arg2:　これまでに発見された素数の数
#Arg3:　素数のリスト　関数外から参照可能
#Return: 素数判定FLAG
####################################################################
def prime_func(num ,prm_lp, prm ):
    cnt = 0
    ret = "FALSE"
    for j in range(0,prm_lp):
        rem = num % prm[j]
        if rem == 0:
            cnt = 1#FALSE
            break
    if cnt == 0:
            prm_lp = prm_lp + 1#新しい素数をカウント、次の素数発見のための割り算回数が１増える
            prm.append(num)#新しい素数をリストに追加
            ret = "TRUE"
    return ret

####################################################################
#Function Description: 素数探索
####################################################################
def calc_prime():
    global prime
    global prm_cnt
    global num
    pfile = 'prime.txt'
    E_OK = "TRUE"

    out_file = open(pfile,'a')
    while 1 :
        ret = prime_func(
                num,      #素数か判定する数
                prm_cnt,  #素数の発生した数
                prime     #素数のリスト
            )
        if E_OK == ret: #素数発見
            print(str(prime[len(prime)-1]) )
            prm_cnt = prm_cnt + 1
            out_file.write(str(num) + "\n")
        num = num + 2 #奇数の中にしか素数はないため2ずつ探索
     out_file.close()

####################################################################
#Function Description: main関数
####################################################################
def Main():
    load_prime()
    calc_prime()

if __name__=="__main__":
    Main()
```
ReactiveProperty v7.4.0 出てます

7.3 は特に記事書いてないので、ここでは 7.3 と 7.4 で追加されたものを書いていこうと思います。

## ToReactivePropertySlimAsSynchronized 拡張メソッド (7.3 で追加)

`INotifyPropertyChanged` インターフェースを実装したクラスのプロパティと同期する `ReactivePropertySlim<T>` を生成する `ToReactivePropertySlimAsSynchronized` 拡張メソッドを追加しました。

以下のような感じです。scheduler の設定と ignoreValidationErrorValue が無い以外は `ToReactivePropertyAsSynchronized` と同じです。

```csharp
var p = new Person { Name = "hoge" };
var rp = p.ToReactivePropertySlimAsSynchronized(x => x.Name);
```

## ReactivePropertyScheduler.SetDefaultSchedulerFactory メソッド (7.4 で追加)

今までは ReactiveProperty や ReactiveCollection がイベントをディスパッチするために使う `IScheduler` のインスタンスの指定方法は 2 種類しかありませんでした。

- `ReactivePropertyScheduler.SetDefault(...)` でグローバルに設定
- コンストラクタかファクトリーメソッドの `scheduler` 引数で明示的に指定

今回追加した `ReactivePropertyScheduler.SetDefaultSchedulerFactory` は、ReactiveProperty や ReactiveCollection が生成されるタイミングで `IScheduler` を生成する処理を指定できます。なので WPF だと App クラスの Startup イベントで以下のような設定をしておくと、インスタンス生成時の Dispatcher を使ってイベントをディスパッチするようにできます。

```csharp
private void Application_Startup(object sender, StartupEventArgs e)
{
    ReactivePropertyScheduler.SetDefaultSchedulerFactory(() =>
        new DispatcherScheduler(Dispatcher.CurrentDispatcher));
}
```

ViewModel などが、必ず自分が紐づく UI スレッド上で作られるという前提があるなら、この方法で複数 UI スレッドがあっても動くようにはなると思います。

個人的には複数の UI スレッドを WPF で作るのは、やらないですむならやらないことをお勧めしますが、今までは ReactiveProperty を使ってると割と詰んでいたけど、一応使えるようにしたという感じです。

## まとめ

GitHub Actions も整理したので手動作業が結構減ったのでリリースやドキュメントの更新などが楽になりました。
【SQL】GROUP化しないで集約・累積計算するOVER句

集約関数はGROUP句と一緒に使うことで、特定の条件(グループ)ごとの集計結果を出力することができる。
一方で、例えば部署に所属している人数を各階層(係、課、部、全社など)に抽出したいことなどがあった場合、集約関数を使うとそれぞれの階層ごとに計算して、結合する必要がある。

こういった問題を解決するのが、OVER句だ。
GROUP化することなく、指定した条件での集約結果を抽出することができる。
ここに関して、調べてみると分析関数、ウィンドウ関数、OVER句など様々な言葉が出てきますが、[Microsoftのドキュメント](https://docs.microsoft.com/ja-jp/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-ver15)を意訳すると、
 
* 集約関数：COUNT,SUMなどのGROUP句と一緒に使うもの(OVER句とも一緒に使える)
* 分析関数：OVER句と一緒に使うもの(OVER句で指定された条件での相対的な結果を出す)
* ウィンドウ関数：集約関数/分析関数の部分の総称。
* OVER句：集約/分析関数をどの条件で計算するかを指定する。

# 書き方

```SQL
     SELECT SUM(a) OVER(PARTITION b) FROM DUAL
```

SUM(a)がウィンドウ関数でSUMは他の関数に変更が可能です。
PARTITION bは省略可能で省略すると全行のSUM(a)を計算します。

# OVER句の条件
OVER句で利用可能な条件は以下のとおり

|記述|説明|
|---|---|
|PARTITION BY *column*|集計する行セットを指定します。GROUP句と同じかと思います。<br/>カンマ区切りで複数指定することが可能です。|
|ORDER BY *column* [ASC / DESC]|行の並び順を指定します。<br/>カンマ区切りで複数指定することが可能です。<br/>指定した条件の後方にASC(昇順・デフォルト)、DESC(降順)を指定することができます。|
|ROWS [*start* / BETWEEN *start* and *end*]|PARTITIONで区切った領域からウィンドウ関数で計算する範囲をさらに絞り込む条件です。<br/>現在の行を基準に指定することができます。(指定方法は後述)|
|RANGE [*start* / BETWEEN *start* and *end*]|ROWS同様に、PARTITIONで区切った領域からウィンドウ関数で計算する範囲をさらに絞り込む条件です。<br/>現在の行を基準に指定することができます。|

ROW/RANGEで指定する範囲は以下の条件を指定することができます。
(上記の*strat*、*end*に入れる値)

|記述|説明|
|---|---|
|CURRENT ROW|現在の行|
|[UNBOUNDED / *number*] PRECEDING|行セットの最初の行(UNBOUNDED)または、現在の行からnumberの指定分前の行。|
|[UNBOUNDED / *number*] FOLLOWING|行セットの最後の行(UNBOUNDED)または、現在の行からnumberの指定分後の行。|


# 注意点
GROUP句と同じような感覚で使って私がよく間違えたのは、OVER句の場合は出力される行は集約されないということです。
つまり、社員名簿のデータをもとに部署/階層ごとの所属人数を計算すると社員数の行だけ出力されます。
そのため、必要に応じてGROUP句やDISTINCTを使う必要があります。

悪い例
この書き方だと、社員数分の行が出力されてしまします。

```SQL
     SELECT UNIT, COUNT(*) OVER (PARTITION UNIT) -- 係の所属人数
          , DIV, COUNT(*) OVER (PARTITION DIV) -- 課の所属人数
          , DEPT, COUNT(*) OVER (PARTITION DEPT) -- 部の所属人数
          , 'ALL', COUNT(*) -- 全社員数
          FROM EMPLOYEE_LIST
```

良い例
DISTIONCTすることで出力対象で最小単位となる係の数だけの行数になります。

```SQL
     SELECT DITINCT
          UNIT, COUNT(*) OVER (PARTITION UNIT) -- 係の所属人数
          , DIV, COUNT(*) OVER (PARTITION DIV) -- 課の所属人数
          , DEPT, COUNT(*) OVER (PARTITION DEPT) -- 部の所属人数
          , 'ALL', COUNT(*) -- 全社員数
          FROM EMPLOYEE_LIST
```

例文少なめですが、とりあえずこんなところ、気が向いたら追記していきます。
GITの使い方（自分用）

# 手順
1. ファイルをダウンロードする
    2. `git clone`
2. ファイルを編集する
3. 更新内容を確認する
    4. `git status`
    5. `git diff`
4. 更新内容を履歴に追加する
    5. `git add`
5. 更新内容の説明を作成する
    6. `git commit`
6. 更新内容をアップロードする
    7. `git push`

# 基本コマンド一覧

## git clone

ファイルをダウンロードします。
`[ディレクトリ名]`を省略するとプロジェクト名が使用されます。

* `-b`: ブランチ指定（_省略するとmasterが選択されます_）

```bash
git clone -b [ブランチ名] https://[GITアカウント]:[GITパスワード]@github.com/[組織名]/[プロジェクト名].git [ディレクトリ名(省略可)]
```

## git status

更新または追加したファイルの一覧を取得します。

```bash
git status
```

## git diff

更新したファイルの差分を表示します。
通常だと見にくいため、`less`コマンドと合わせて使います。

```bash
git diff | less
```

## git add

更新または追加したファイルを更新対象に追加します。
追加しなければ後述するアップロード時に送信されません。

### 全体

* `-A`: 更新または追加したファイル全てを指定

```bash
git add -A
```

### 個別

```bash
git add [対象ファイルのパス]
```

## git commit

更新内容を記録します。

* `-m`: 変更内容を1行で指定

```bash
git commit -m [変更内容]
```

## git push

変更履歴をアップロードします。

### 全体

```bash
git push
```

### ブランチ指定

```bash
git push origin [ブランチ名]
```

# 応用コマンド一覧

## git pull

リモート先の更新を取得します。

### 全体

```bash
git pull
```
### ブランチ指定

```bash
git pull origin [ブランチ名]
```

## git checkout

ブランチを切り替えます。

### ローカル

```bash
git checkout [ブランチ名]
```
### リモート

```bash
git checkout -t origin/[ブランチ名]
```
GOPATHについてメモ

Goの環境構築をしていてGOPATHについて結理解するのに時間がかかったのでまとめ
他の言語と全然違って戸惑い😿

#GOPATHとは

`GOPATH`は、ワークスペースのルートのこと
ソースコードとかパッケージとかコンパイルした後の実行ファイルを全部ぶちこむ🌵

デフォルトは `$HOME/go`で、Goのインストールディレクトリじゃなければどこでもいい。

※みた感じデフォルトのまま使っている人が多そう。

#フォルダ構成

例えばGOPATHを`$HOME/go`にしたときのフォルダ構成はこんな感じ

```
  go
   ├── src
   ├── pkg
   └── bin
```

##src
ソースコードを置くディレクトリ。一ディレクトリ一アプリケーションが基本。
packageがmainであれば実行可能アプリケーション、違ったらアプリケーションパッケージ

##pkg
アプリケーションパッケージが保存される

##bin
実行ファイルが保存される。
Gitについて（わかる範囲でアウトプットをします！）

#Gitとはそもそも何？
ソースコードを履歴していくツール。といった認識でいました。
で、今回深堀で勉強し直しました。Gitとは、分散型バージョン管理システムである。と言うことだそうです。要は、ファイルのバージョン管理が簡単にできるツールだと書いてありました。
【ここで、バージョンと言う言葉が出てきましたが、聞いたことがありますが何かと問われたら説明できない。と言うそこのあなた！
伝えますよ、ファイルをアップデートしたり更新した時に変化するものです。iPhoneとかで最新バージョンにアップデートするように通知が来るあれです！】
と言うことは、自分の認識は合っていたと言っても過言ではないでしょうか！

#Gitはなぜ必要なの？
私は、エンジニアでもなければプログラマーでもありません、ただの（エンジニアを目指し勉強をしている）ニートなので、実際に現場で使われているものを見たことがありませんが（そもそも、現場に入ったことがないので）、ネットの情報を鵜呑みにして必要性を書きます。
【プログラマーにとって、多くのコードを編集した上で何か不具合が起きた時に、元のバージョンへ戻すことは日常茶飯事です。かといって、一つ一つコードの編集の度に古いバージョンの日付や時刻をつけて保存して、また新しい作業をするようなことをしては、時間はかかりますし、人的ミスも増えます。そういった作業を無駄なく、効率的に行うためにGitは必要なんだ。】と記載されてました。
要は、ゲームで言うとこのセーブポイントなのかなと感じましたね。一つのプログラムを作成するために、違う世界線で違う人たちが作り上げていくためのツールなんだと思いました！

#では、Gitに関してさらに見ていきます！
####リポジトリーって何？
リポジトリーとは、Gitの管理元にあるファイルやディレクトリの変更履歴を保管する箱のようなものです。
で、そのリポジトリーには、ローカルリポジトリとリモートリポジトリが存在します。
ローカルリポジトリは、自分のPC上（ローカル環境）に置くリポジトリのことを指します。自分のPC上にあるファイルやディレクトリのバージョン管理をしたい場合に使用します。
リモートリポジトリは、外部のサーバなどのネットワーク上に置くリポジトリのことを指します。ネットワーク上に置くことで複数人で管理のファイルやディレクトリを共有することができます。複数人で開発を進めていく上では、必要なものです。

ちょっと長くなりますがもうちょっと付き合ってください。すみません😋
#Gitはわかりました！それを実際に使用する中で、GigHubなるものが存在するとのこと、なんぞやと言うことを調べていきます！

##GitHubについて
Gitを利用してチーム開発に便利な機能を提供するWebサービスのことを指します。
要は、Gitのリモートリポジトリの役割を担うものだといった認識でいいのかと考えます。
GitHubを利用することで、自分の作業が他の開発者に影響を及ぼしたり、反対に他の開発者の作業が自分に影響を及ぼすことを避けて開発を進めることができるとても便利なものです。

##GitHubDesktopについて
この流れで説明します。GitHubDesktopとは、GitHubが提供しているデスクトップ用のアプリケーションのことを指します。GitHubを直感的に操作しやすくしたツールです。より使いやすくなったものといった認識でいます。

最後に、このGitHubの使用手順を記述して終わります！もうちょっと付き合ってください😂

#GitHub Desktopの使用手順
①まず、編集を加えるファイルをGitHub Desktopで選択し、名前をつけてブランチを作ります。（ブランチとは、各々が作業する際に、一人ひとりが行う作業場的なものを指します。）

②コードを実際に触っていく作業を行います。

③とりあえず、作業にひと段落があれば、名前をつけてコミットします。（コミットとは、追加・変更したファイルをgitに登録するコマンドです。）

④コミットし終えたら、プッシュを行います。（プッシュとは、ローカルリポジトリで保存を行なったものを、リモートリポジトリに反映させるためのコマンドです。）

⑤コードの内容に間違え等がない場合、マージを行います。（マージとは、ブランチをマスターブランチに結合することを指します。マスターブランチとは、プログラムを作成する大本といった認識です。）
※マージした際に、コンフリクトが起こっていないか表示されます。その際に、コンフリクト起こっている場合、編集を加える必要があります。（コンフリクトとは、例えば、ブランチNo.１で「A」と入力した箇所を、ブランチNo.２では「B」と入力をし、マージを行なった場合に表示されるものです。ブランチNo.1の変更とブランチNo.２の変更をどちらをマスターブランチに結合するかといった状態を指します。）

⑥マージができたら、GitHub Desktopでプルを行います。（プルとは、リモートリポジトリの変更をローカルリポジトリに取り込む操作のことを指します。）
これで一連の流れは終わりです。

#まとめ
Git,github,githubdesktopはエンジニアになるには、必須なものなんだと改めて思いました。ならば、もっと勉強をしていこうと思いました。お付き合いいただきありがとうございました！
id_rsaを上書きしてしまった

AWS C9でアプリケーション開発を行う際、SSH接続がgithubとEC2インスタンスでこんがらがった話。

C9上でgit管理している場合
githubをリポジトリとしてssh接続する際は```~/environment/.ssh```フォルダに置いておくと思う（当時無知識だったため、そのままid_rsaという名前にした）
ここで登録する際に名前を例えばid_rsa_githubなどに変更するか、もしくはディレクトリを切ってgithubを指定しておけば後々詰まることもなかっただろう

そして開発がある程度終了し
EC2インスタンスに接続するためのid_rsaを同じフォルダに上書きしてしまっていた

今までgithubにssh接続出来ていたものが、突然Permission denied (publickey).と怒られるようになる

上書きしてしまったのものは仕方ないので、こういった場合はgithubのssh接続を再登録すればOK
その際、ちゃんとディレクトリを切るなり、ファイル名を変更するなりして
```.ssh/config```ファイルの中のパスを指定してあげましょう。
VSCodeのPython ExtensionでSort importsが動かなくなったときの対処法（2020/09ぐらい）

Sort imports 終わらない…。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15627/aa312864-9815-c2d7-9a49-35696d415c7f.png)

https://github.com/microsoft/vscode-python/issues/13312#issuecomment-694285071

> But great workaround using the locally installed isort via python.sortImports.path! It actually works without any issues along with the isort arguments and everything.

なんかよくわからんが `isort` を virtualenv に入れて `python.sortImports.path` を設定すると良いらしい。

```sh
poetry add -D isort
```

で `dev-dependencies` にしたあとに `.vscode/settings.json` に `"python.sortImports.path": "${workspaceFolder}/.venv/bin/isort"` を設定。
VSCodeでgatsbyのデバッグをする

# 今回の目的
gatsbyで作成したサイトのデバッグをVSCodeで実行できるように、VSCodeを設定していきます。

# まずはVSCodeを開く！
gatsbyのサイトを作成しているディレクトリにてVSCOdeを開きます。
![2020-09-18_10h01_13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567235/e9d69e58-1b17-a3fb-a3d3-3a1a640fa828.jpeg)

# Debugger for Chromeのインストール
VSCodeの拡張機能アイコンをクリックます。
『Debugger for Chrome』と入力し、対象機能をインストールします。
![2020-09-18_10h05_20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567235/faf775cb-4981-2259-f0f5-e96b19a8ff21.jpeg)
※インストール完了後にVSCodeの再起動が必要かもしれません。

# launch.jsonの作成
実行アイコンクリック→『launch.jsonファイルを作成します』リンククリックを行うと、環境の選択が出てきます。
後ほど書き換えるのでどれを選択しても問題ないです。
![2020-09-18_10h15_35.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567235/c08c22dc-b2ab-fd0f-54aa-cdac75816bb2.jpeg)
作成されたlaunch.jsonを以下に書き換えます。

```json:.vscode/launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Gatsby develop",
      "type": "node",
      "request": "launch",
      "protocol": "inspector",
      "program": "${workspaceRoot}/node_modules/gatsby/dist/bin/gatsby",
      "args": ["develop"],
      "stopOnEntry": false,
      "runtimeArgs": ["--nolazy"],
      "sourceMaps": false
    },
    {
      "name": "Gatsby build",
      "type": "node",
      "request": "launch",
      "protocol": "inspector",
      "program": "${workspaceRoot}/node_modules/gatsby/dist/bin/gatsby",
      "args": ["build"],
      "stopOnEntry": false,
      "runtimeArgs": ["--nolazy"],
      "sourceMaps": false
    },
    {
      "name": "Launch Chrome",
      "type": "chrome",
      "request": "launch",
      "url": "http://localhost:8000",
      "webRoot": "${workspaceFolder}"
    }
  ]
}
```

![2020-09-18_10h47_39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567235/efd32a4a-da0e-0822-9c79-e681508a8130.jpeg)
実行構成が追加されています。

- Gatsby develop  
gatsby developをデバッグ実行します。デプロイ処理などのデバッグを行います。
- Gatsby build  
gatsby buildをデバッグ実行します。
- Launch Chrome  
実行時にChromeを起動しhttp\://localhost:8000にアクセスします。
モジュールの表示処理時などのデバッグを行います。

# 起動
Gatsby developを選択し、再生ボタン(緑三角ボタン)を押します。
develop処理のデバッグが開始されます。
![2020-09-18_10h31_42.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567235/8dd8ecd8-8fe1-9c4a-5a12-74d1372a116b.jpeg)
Launch Chromeを選択し、再生ボタンを押下するとchromeが自動で開き対象のサイトが確認できます。
![2020-09-18_10h35_21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567235/ab374b5f-598d-64b7-8999-651751833497.jpeg)

これでgatsbyサイトのデバッグが可能になりました。
あとは適当な箇所にブレークポイントを入れ、好きなようにデバッグしちゃってください。

今回は以上です。

ありがとうございました。

# 参考サイト
[How to debug Gatsby.js in VS Code (build process and client side)](https://medium.com/@arthur.rodzkin/how-to-debug-gatsby-js-build-process-and-html-in-vs-code-6d1a31512b5b)
Radiative Backpropagation: An Adjoint Method for Lightning-Fast Differentiable Rendering のメモ

Radiative Backpropagation: An Adjoint Method for Lightning-Fast Differentiable Rendering

実装コードが 2020/08 月に公開されました.

Mitsuba2 と比較して, 最大 1000 倍早く収束する.

既存の back propagation で計算グラフを作って微分を取るばあい, レンダリング(Light Transport)用途では Jacobian などが大きくなってしまいメモリがたりなかったり state space が大きすぎて最適化がうまくいかなくなってくる.

光輸送積分式のレベルで微分を取ったりして中間的な微分計算グラフをなくす. adjoint でぺろぺろやることで効率的に back propagation する.

## 利点

アルゴリズムは GPU 化や並列処理がしやすい.

## 制約

unbias では, 計算量がパス(光路)の長さに quadratic に比例するので, 複雑なシーンは扱えない.
(レンダリング理論としては正確ではないが)bias モードにすることで効率的に計算できるようにして高速化する(そして奇妙なことに bias モードのほうが収束がよい)方法も提案している.

現状ではシェーダなどは変更できるが, visibility などは変えられないという制約がある(TODO).

## その他

実装は Mitsuba2 を custom, GPU は OptiX を使っています. ただ, 現時点で公開されているコードでは, 古い mitsuba2 + OptiX 6.x API ベースになります.
Developper Toolがなぜか使えない時のデバック方法

## はじめに

コード書き終わった！　リロード！

![Error文](https://i.gyazo.com/fde3880ccb793d3a66e528059708a048.png"エラー箇所")


。。。。。




なんじゃこりゃ。





Vue.jsでフロントを開発している際にCromeブラウザ、Developper Toolの両方がエラーを起こして使えなくなってしまい、デバッグをしようにもできない状態になったのでその解決方法を手順に沿って共有しようと思います。




## 1.コミット履歴を遡りロールバックしてみる。　

まず、Gitを使用していることが前提になりますが、問題が起こったところの手前のコミット履歴からコードの差分を見てみましょう。

正常に動作していた時がコミット履歴から分かれば、原因の範囲を特定することができます。

細かい粒度でのコミットができていれば、ここでその原因が判明することもあります。

## 2.コメントアウト

コミット履歴を参考に、ここ原因だと思われるメソッドなどをコメントアウトしてみましょう。　

原因であるところを引き当てた場合、DevelopperToolが動作します。


## 3.console.log

その原因に関連するコードをひたすらにconsole.logして原因箇所を絞り込んでいきましょう。

しっかりと値が渡されているか、意図していない動きがでていないか確認していきましょう。

この段階で原因箇所が特定できると思います。



## 終わりに

私の場合はfor文による”無限ループ”が原因でした。

コミットの粒度や意義を考えずに適当にコミットしていたので、原因を特定するのにかなり時間がかかってしまいました。

適切な粒度でのコミットについて考えるいいきっかけになりました。

## 参考記事

・[デバックのコツ](https://qiita.com/tetr4lab/items/c558de2cc26324930ba9 "デバックのコツ")

・[デバッグに大活躍! JavaScriptのconsole.logで値を表示しよう](https://www.sejuku.net/blog/27205 "デバッグに大活躍! JavaScriptのconsole.logで値を表示しよう")
DBにカラム追加したら英語が弱いと思われた話。birthdayとbirthdateの違い


# 何が違ったか
ウィキペデイア先生によると

```
birthdayは毎年やってくる誕生日（例　1/15）のこと。
一方で、 birthdate は生まれた日（例　2001/1/15） のこと。
```

# 経緯
仕事で、DBに生年月日のカラムを追加する必要があって、自分は「birthday」っていうDate型のカラムを追加したんです。

変更する必要はないけど、「birthdate」のほうがいいですよっていう指摘があったので調べてみました。
実際は結構おっさんですが、そんなこと言われたら意地でもなおしちゃうところが、まだ子供だなと思いましたね。
djangoでログイン画面の実装にはまった話

こんにちは、rickyです。
最近本格的にDjangoを使い始めて、アプリ作成をしています。
そんな中ログイン画面の実装にはまったので備忘録として記事にします。
原因はsetting.pyにtemplatesの情報を記入していなかったためです。
DjangoGirlsなどのチュートリアルもしっかり実装できたので、自分で考えたアプリを作ろうとしたら、上記の点でではまりました。
詳しく説明をするとdjangoではtemplatesディレクトリにアプリの名前のディレクトリを作成し、その中にhtmlを記述し利用するのですが、その設定をsetting.pyに記載する必要があります。
そのため、Templatesディレクトリを作成し、アプリ名のディレクトリにhtmlを入れても、エラーが出るのでTemplatesディレクトリの中にhtmlを作っていました。（これで中途半端に動いてしまったのでその後のエラー解消に時間がかかりました。）
そしていざログイン画面に遷移しようとしたら、エラーが発生しました。
原因はlogin.htmlをregistrationのディレクトリに配備していなかったことが原因でした。
なぜ配備していなかったというと先のTemplatesが機能していなかったため、login.htmlをディレクトリに配備していませんでいした。
やっぱり基本の部分をしっかり理解しておかないと簡単な処理でさえ作りこめないなと思い知らされました。
【Ruby on Rails】ランキング表示（合計、平均値）

# 目標
ランキングの表示

# 開発環境
ruby 2.5.7
Rails 5.2.4.3
OS: macOS Catalina

# 前提
※　▶◯◯　を選択すると、説明等が出てきますので、
　　よくわからない場合の参考にしていただければと思います。

- controllerとviewのみ変更
- userモデル
- postモデル（:body, :score)
- いいね機能実装
- Google Natural Language APIによるコメント感情分析導入済み（投稿の点数付け）

※今回の方法では、
数値がない（いいねが押されていない、平均値がない）ユーザーは
表示されません。

# controller
コントローラーさえできればできたも同然です！

```rb:平均値のランキング：app/controllers/users_controller.rb
  def rank
    @users = User.
              find(Post.
                    group(:score).
                    order('avg(score) desc').
                    pluck(:user_id)
                  )
  end
```
<details><summary>補足</summary>
・@users = User.find( )：@userにUserモデルから以下の条件で取得した値を入力
・Post.group(:score)：Postモデルからscoreカラムでグループ分け
・order('avg(score) desc')：scoreの平均順で降順並び替え
・pluck(:user_id)：上記値のuser_idがあるものを全て配列
</details>


```rb:合計のランキング：app/controllers/posts_controller.rb
  def rank
    @posts = Post.
              find(Favorite.
                    group(:post_id).
                    order('count(post_id) desc').
                    pluck(:post_id)
                  )
  end
```
<details><summary>補足</summary>
・@posts = Post.find( )：@postにPostモデルから以下の条件で取得した値を入力
・Favorite.group(:post_id)：Favoriteモデルからpost_idカラムでグループ分け
・order('count(post_id) desc')：post_idの個数で降順並び替え
・pluck(:post_id)：上記値のpost_idがあるものを全て配列
</details>


# view
下記のようにeach降順順で表示可能

```erb:
<% @users.each do |user| %>
<% end %>
<% @posts.each do |user| %>
<% end %>
```

# Kaminariを使用する場合
前にKaminari.paginate_array(　)、後ろに.page(params[:page])をつければOK

```rb:
@posts = Kaminari.paginate_array(Post.find(Favorite.group(:post_id).order('count(post_id) desc').pluck(:post_id))).page(params[:page])
```

# 参考サイト
[Railsでお手軽ランキング機能]
(https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4)
[【Rails】ランキング機能の実装](https://qiita.com/hitochan/items/258215ec62ead338c2eb)
FlaskのDockerイメージをHerokuにデプロイする

# FlaskのDockerイメージをHerokuにデプロイする

## はじめに

`macOS環境の記事ですが、Windows環境も同じ手順になります。環境依存の部分は読み替えてお試しください。`

### 目的

この記事を最後まで読むと、次のことができるようになります。

| No.  | 概要                            | キーワード                   |
| :--- | :------------------------------ | :--------------------------- |
| 1    | Dockerイメージのビルド/プッシュ | heroku container:push web    |
| 2    | Dockerイメージのリリース        | heroku container:release web |

### 実行環境

| 環境           | Ver.     |
| :------------- | :------- |
| macOS Catalina | 10.15.6  |
| Python         | 3.7.3    |
| Heroku         | 7.42.13  |
| Docker         | 19.03.12 |
| Flask          | 1.1.2    |
| gunicorn       | 20.0.4   |
| Jinja2         | 2.11.2   |
| Werkzeug       | 1.0.1    |

### ソースコード

実際に実装内容やソースコードを追いながら読むとより理解が深まるかと思います。是非ご活用ください。

- [GitHub](https://github.com/nsuhara/heroku-docker.git)

### 関連する記事

- [Container Registry & Runtime (Docker Deploys)](https://devcenter.heroku.com/articles/container-registry-and-runtime)

## 手順

### 1. Container Registry ログイン

```command.sh
~% heroku container:login
```

### 2. サンプルコード取得

```command.sh
~% git clone https://github.com/nsuhara/heroku-docker.git -b master
```

```tree.sh
heroku-docker
    ├── Dockerfile
    ├── docker-compose.yml
    ├── docker_compose_up.sh
    └── webapp
            ├── app.py
            ├── requirements.txt
            ├── tests
            │       ├── __init__.py
            │       └── tests.py
            └── wsgi.py
```

### 3. ディレクトリ移動

```command.sh
~% cd heroku-docker
```

### 4. Herokuアプリ作成

`※今回のアプリ名は自動生成とします`

```command.sh
~% heroku create
Creating app... done, ⬢ {app-name}
```

### 5. リモートリポジトリ設定

```command.sh
~% heroku git:remote -a {app-name}
```

### 6. イメージビルド & Container Registry プッシュ

```command.sh
~% heroku container:push web
```

### 7. Container Registry リリース

```command.sh
~% heroku container:release web
```

### 8. アプリ表示

```command.sh
~% heroku open
```

## おまけ

### ローカル環境アプリ表示

```command.sh
~% sh docker_compose_up.sh
```

```command.sh
~% open http://0.0.0.0:5000/
```

### コードチェック (pylint)

```command.sh
~% python -B -m pylint --rcfile=.pylintrc -f parseable `find webapp -name "*.py" -not -path "webapp/tests"`
```

### コードテスト (unittest)

```command.sh
~% python -B -m unittest discover tests
```
Laravel8 (laravel/ui)でのLogin機能の実装方法メモ

##Laravle6.x/7.x/8.xのログイン実装コマンドの違いを見る
みなさんこんにちは 
[ジーズアカデミー学校長 山崎ですm(_ _)m](https://gsacademy.jp/mentor/)
今回はLaravel8にアップデートされLogin画面作成(laravel/ui)を前バージョン同様で使用したい場合
の方法をMemoしておきます（初めてLaravel触る人はこっちが良いかも、、敷居が低い）。

**「jetstreamの人はこちらのリンク」**
https://qiita.com/daisu_yamazaki/items/607ea579a374c4187562
**【Laravel6.xのLOGIN動画も用意してます！】**
https://youtu.be/FKxqjoJUKh4
**【Laravel8.xのLOGIN(Breaze)動画も用意してます！】**
https://youtu.be/XXXQOYnsCBk
**【Laravel9.19以降のLOGIN(Breaze)動画も用意してます！】**
https://qiita.com/daisu_yamazaki/items/79718fa900c2fd142599


###前提条件/検証環境

 - LaravelでCRUDを作成した経験がある人
 - Laravelの基本を理解している人
 - 記事内容的には、Laravel6のAuthを使う場合の***自分メモ***です。
 - *Laravel6/7=PHP 7.2.x(確認した環境)*
 - *Laravel8  =PHP 7.3.x(確認した環境)*
 - **EC2の場合：t2.small （メモリ２G以上必要 "laravel/ui"に必要なため,t2.microだとコケます）**
 - *Node.js インストール済みであること*


###【 Laravel6/7/8でのログイン(laravel/ui)画面作成】
Laravel5.xでは「php artisan make:auth」コマンドで簡単にLOGIN機能を作成できていました。
※Laravel6.x以降 php artisann make:auth コマンドは無くなりました。


---


#### Laravel6 / Laravel7 / Laravel8 ログイン画面作成
#####１. laravel/uiをインストール
**【要注意】**Laravel7 が出たタイミング・・・だと思いますが、
laravel/ui コマンドにバージョンを付けないとエラーがでるようになりました！！！ 
6 or 7  or 8 に合わせて使い分けてください！！

```cmd:ターミナル

#Laravel6.x 公式ではこちらに変わってました。
composer require laravel/ui:^1.0 --dev

#laravel7の場合
composer require laravel/ui:^2.4

#laravel8の場合
composer require laravel/ui

```
※Laravel6.x 公式
https://laravel.com/docs/6.x/frontend#introduction
※Laravel7.x 公式
https://laravel.com/docs/7.x/frontend#introduction
※Laravel8.x 公式（解説が無いようですが、Updating Dependenciesを参照）
https://laravel.com/docs/8.x/upgrade#updating-dependencies


２. LOGIN機能＆テーブル作成

```cmd:ターミナル
php artisan ui vue --auth

php artisan migrate
```

３. FrontEndに必要なPackageをインストール
 （Node/npmの使用が必要）

```cmd:ターミナル
npm install
```

４. CSS/JSを作成ビルド

```cmd:ターミナル
npm run dev
```

| welcome |R egister | Login |
|:-----------|:------------|:------------|
| <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/333c627e-d02b-3d83-57d2-5e2237559620.png" width="400">| <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/16ab36e6-de59-a4ed-6035-b22f6bcf2577.png" width="400">| <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/a2e30b7f-2220-7a8c-6fdb-ff45b24e1772.png" width="400">|


####これでLaravel5/6/7どうようのLOGIN機能が実装できました！


##◇「動かして学ぶ！Laravel開発入門(翔泳社)」本だしました。
https://www.amazon.co.jp/dp/B08TBF3FQS/


## 「Laravel DB.com」も運用中
Laravelをテーブル設計するだけでMigrationも生成できるツール
https://qiita.com/daisu_yamazaki/items/9f0dd73553367f8077f0
※是非こちらも見てください


# 今回のLogin機能：参考「Laravel ドキュメント」
【ver6.x】https://laravel.com/docs/7.x/frontend#introduction
【ver7.x】https://laravel.com/docs/6.x/frontend#introduction
【ver8.x】https://laravel.com/docs/8.x/upgrade#updating-dependencies
※Laravel8.x 公式（2020/09/17段階では解説が無いようです...Updating Dependenciesを参照）


#◇ Youtubeチャンネル
[「遅咲きエンジニア」MicrosoftMVP 山崎](https://www.youtube.com/channel/UCmMFmjhf1BXB1tlLcbkVRrg)
https://www.youtube.com/channel/UCmMFmjhf1BXB1tlLcbkVRrg



以上
Amazon SESの1日の送信制限を引き上げる方法

SESを利用していて、これからも同じようなことがありそうなので忘れないようにまとめておきます。

## SESとは？
SESとは__Amazon Simple Email Service__の略で、デベロッパーが任意のアプリケーションでメールを送信できるようにするメール配信サービスです。

特徴としては、__従量課金制__、__導入コストが低い__等が挙げられています。

また、SESには無料枠があり月62000通までは無料で使用できます(EC2からメールを送信する場合)。

詳しい料金設定は以下を参考にして下さい。
[SESの料金について](https://aws.amazon.com/jp/ses/pricing/)


##1日の送信制限の上限を上げたい
SESを利用する場合、デフォルトで送信できるメールの数が制限されいています。

なので大勢のユーザーに一斉にEメールを送りたいが、この申請をしていないと1日の送信制限に引っかかってしまい、送信できないなんてことが起きてしまいます。

なので以下に手順をまとめていきます。

__1. AWSマネジメントコンソールにサインイン__

__2. 左上のサービスからSES(Simple Email Service)の設定画面へ__
![Screen Shot 2020-09-17 at 11.03.44 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520526/d54c68bf-d760-fd4e-045c-c096bff5ee66.png)


__3. Sending Statisticsを押し、 Your Amazon SES Sending Limitsの
Sending Quotaを確認__

ここで現在の1日あたりの送信クォータが確認できます。
※画像では既に上限を引き上げているため50000となっていますが、デフォルトは200となっています。
![Screen Shot 2020-09-17 at 11.29.07 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520526/7ec85b34-4369-a36d-99bb-db3379b3ba22.png)


__4. 上限を引き上げたい場合は、右上のサポートからサポートセンターへ__
![Screen Shot 2020-09-17 at 11.09.30 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520526/2812ddeb-9126-f930-166a-d609a44d36ff.png)



__5. 真ん中のオレンジの「ケースの作成」ボタンを押す__
![Screen Shot 2020-09-17 at 11.09.58 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520526/0509d8ca-8c4f-31ef-4fcd-4a4e28b2574c.png)

__6. サービス制限の緩和を押す__
![Screen Shot 2020-09-17 at 11.11.13 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520526/d1b1ea23-39b8-a0a5-4030-b291416e0905.png)


__7. 下に入力欄が出てくるので必要な項目を入力__
ここで入力する項目は、以下になります。
・AWSアカウントID
・送信制限の引き上げをリクエストする AWS リージョン
・制限タイプ：希望する一日あたりの送信クォータ or 希望する最大送信レート
・新しい制限値
・Eメールメッセージタイプ（システム通知など該当するものを選択）
・ウェブサイトURL（必須ではないが、あったほうがいい）
・申請理由の説明

項目の入力が完了したら送信。

ここまで終えれば基本的に24時間以内にAWSから返答があります。



## まとめ
覚えといて損はないし、1回やってみると案外あっという間に終わったのでいい経験だった。
Zennが良かったので、ローカルで記事を作れるようにした(yarn版)

「[新サービスZennが面白い！](https://qiita.com/engineerhikaru/items/d3be9d731a5327a1ed70)」という記事を見てサイトを見たのですが、確かにおもしろそうだし、ローカルで記事を書いて投稿することができるっぽいので、ローカルで記事が書けるところまで試してみました

# 環境構築の基本的な流れ

Zenn公式で以下のように紹介されています

* [GitHubリポジトリでZennのコンテンツを管理する
](https://zenn.dev/zenn/articles/connect-to-github)
* [Zenn CLIをインストールする](https://zenn.dev/zenn/articles/install-zenn-cli)

これでもローカルで記事を作れますが、`npx`での環境構築だったので、`yarn`派である私は`yarn`で構築、記事の作成までしました
実際の手順、記事の作成は「[yarnでzenn-cli導入する](https://zenn.dev/luna_chevalier/articles/56dcac1f1f8709d433a3)」で紹介しています
最終的なGitHubの内容は[こちら](https://github.com/LunaChevalier/zenn/tree/v1.0)になります

# 所感

思ってた以上に使い心地が良かったです
特にエラーもなくサクッと記事の投稿まで出来ました
~~唯一の不満といえば、[ローカルでのプレビューがホットリロードに対応してない](https://github.com/zenn-dev/zenn-editor/issues/3)くらいです~~
0.1.23以上のバージョンに上げると、[ホットリロードに対応しています](https://github.com/zenn-dev/zenn-editor/pull/5)
しばらくはZennを使いまくります
[sed] macOSでもLinuxでもsedを使ってtab文字を置換する

# 要約

ASCIIコードを用いることで、macOSでもLinuxでも同じ書き方でtab文字を置換できるようになります。

```sh
TAB="$(printf '\\\011')"
printf "hoge\tfuga\n" | sed "s/${TAB}/,/g"
```

# `sed`のOS依存 (BSD sed vs GNU sed)

`sed`の使用例として、タブ区切りをコンマ区切りにする下記のスクリプトをよく用いていました。

```sh
# Linux
$ printf "foo\tbar\n"
foo    bar
$ printf "foo\tbar\n" | sed "s/\t/,/g"
foo,bar
```

しかし:point_up:の方法ではmacOSではうまく置換できません。

```sh
# macOS
$ printf "foo\tbar\n"
foo    bar
$ printf "foo\tbar\n" | sed "s/\t/,/g"
foo    bar # <-変わっていない！
```

どうやらこの違いはmacOSは`BSD sed`で、Linuxは`GNU sed`を使用していることに起因するようです。

- [Know Your Tools: Linux (GNU) vs. Mac (BSD) Command Line Utilities](https://ponderthebits.com/2017/01/know-your-tools-linux-gnu-vs-mac-bsd-command-line-utilities-grep-strings-sed-and-find/)


`BSD sed`でタブ文字置換をどうするかついて、過去のQiita記事にございました:bow:

- [macOSXでsedを使ってtabの文字列を置換](https://qiita.com/kyanagimoto/items/37cc8e7a242ca2d1a29e)
- [macOSXでsedを使ってtabの文字列を置換](https://qiita.com/kohashi/items/73708dea71a3ac233b29)

（同じタイトルですが、違う記事です）

しかし上記事の方法は使用状況が限られるため、もう少し汎用性を持ちたいと思っていたところ、次の記事がございました。

- [sedコマンドで文字列を改行に置換する、しかもスマートに置換する。
](https://qiita.com/richmikan@github/items/3c74212b0d8dec9bd00f)

上記事では以下のように[ASCIIコード](https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/network/conversion_table.html)を使ってLF（改行）を表現していました。

```sh
LF=$(printf '\\\012_')
LF=${LF%_}

echo "hogehoge\nfoo\nbar" | sed 's/\\n/'"$LF"'/g'
```

この方法はそのままタブ文字に応用できるのでは、と思って検証したところ、無事に動作しました。

```sh
# ASCIIコードで水平タブ（HT）は011です
TAB="$(printf '\\\011')" 
printf "hoge\tfuga\n" | sed "s/${TAB}/,/g"
```

これでmacOSでもLinuxでも、同じ書き方でtab文字を置換できるようになりました。

## 検証環境

```
# macOS
- OS: Catalina 10.15.6 19G2021 x86_64
- Kernel: 19.6.0
- Shell: zsh 5.7.1

# Linux
- OS: Linux Mint 20 x86_64
- kernel: 5.4.0-47-generic
- shell: bash 5.0.17
```
移動平均線、ストキャスティックス、などは効果あるのか？明日上がるような株を出してみました。

こんにちは、最近株の勉強してます。ゴールデンクロスができた株は次の日上昇する傾向があるか試してみました。


## 条件
 - その日の終値を基準に移動平均線(5,20)を突破してるか
 - ストキャスティックスを使い、買い時(売られ過ぎ？)なのか
 - 出来高がある程度ある

## 出力結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88511/50985c47-51bb-af6d-3e8f-c5eeec01950b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88511/ea2029dd-0bc8-c7a5-d98c-719b2cdc5040.png)

## 次の日実際株価
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88511/ae7cd651-417b-9bb4-8ae5-e13d5b24ea28.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88511/fb55c6b3-4f54-fadf-63b7-ca41fe867e64.png)

## 結論
ほぼ上がってる銘柄が多いけど、1%くらい低いのが多かったです。

サイト
http://bigcross.net/cross/cross_list/jp