OmniAICreator/Qiita-1.07M huggingface dataset:
【Rails】コントローラやアクション毎に切り替えることができる（layoutメソッド）

#背景
ヘッダーやフッターなど「app/views/layouts/application.html.erb」の`yield`のよってレイアウトの共通化をしている。
今回、コントローラやアクション毎にレイアウトを切り替えることができることを知り、今後使うことがあると思い残すこととした。

#使い方
**1.コントローラ毎に使用するレイアウトを自動設定する方法.**
`app/views/layouts/コントローラ名.html.erb`
このように、レイアウトファイルを作成することで、コントローラ単位でのレイアウトを切り替えが可能になる。



**2.複数のコントローラからファイル指定してレイアウトを設定する方法**
①　`app/views/layouts/レイアウト名.html.erb`作成。
②　Cnotroller内で`layoutメソッド`で呼び出す。


```Cnotroller.rb
class コントローラー名 < ApplicationController
  layout 'レイアウト名' except: [:アクション] #onlyやexceptオプションで指定することも可能

  def アクション
  end
end
```

**3.アクション毎に適用するレイアウトファイルを切り替える方法**

```Cnotroller.rb
class コントローラー名 < ApplicationController

  def アクション
    render layout: 'レイアウトファイル名`
  end
end
```


**4.レイアウトを無効にする方法**

```Cnotroller.rb
#コントローラ毎にレイアウトを無効にする場合
class コントローラー名 < ApplicationController
  layout false

  def アクション
  end
end

#アクション毎にレイアウトを無効にする場合
class コントローラー名 < ApplicationController

  def アクション
    render layout: false
  end
end
```

#参考
[コントローラやアクション毎に使用するレイアウトを切り替える](https://www.javadrive.jp/rails/template/index3.html)
「$ firebase list」のエラーに関して

はじめまして、初投稿になります。
ただいま、ポートフォリオサイトをVue.jsのSPAを用いて鋭意作成中です。

その中で、
<a href="https://qiita.com/ryo2132/items/7cdd6c86dd418095f74a">「Vue.js + Firebase functionsでお問い合わせフォームを作成する」</a>
を参照させて頂きながら、組み込もうと考えておりました。

大変些細な一件ですが、Firebase CLIをインストール中に起きたエラーの対応法を記事にさせて頂きます。

## 「firebase list」でエラーが返ってくる

<a href="https://firebase.google.com/docs/cli/">Firebase CLI リファレンス</a>に沿って、インストールしていると、

「Firebase プロジェクトを一覧表示し、CLI が正しくインストールされていて、アカウントにアクセスしていることをテストします。次のコマンドを実行します。」と出てきます。

しかしは、

`$ firebase list`

しても

`Error: list is not a Firebase command`

と返される。

<br>


## 解決法

どうやら

`$ firebase projects:list`

に変更されたようです。

<br>


それだけのお話でした、初投稿もということもありテストも兼ねて失礼します。
（公式リファレンスに載せられている通りに行ってもエラーになり、なかなかググっても出てこなかったので記事にさせて頂きました。）
Nuxt.js + Vue + axios でURLのid (パスパラメータ) を利用してhttpリクエストする例

- nuxtの命名規則にのっとって pages/<page_name>/_id.vue などという名前でファイルを作る
- ブラウザで /path-parameter-id/1 にアクセスして動作確認する
- axios で は、URL のパスパラメータを利用して、外部サイトにリクエストする

# File

pages/path-parameter-id/_id.vue

```vue
<template>
  <div>
    <h1>
      Path parameter id
    </h1>
    <h2>ID</h2>
    <div>
      {{ path_parameter_id }}
    </div>
    <h2>httpbin reponse</h2>
    <div>
      {{ response }}
    </div>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  async asyncData ({ $axios, params }) {
    const path_parameter_id = `${params.id}`
    const response = await $axios.$get(`https://httpbin.org/get?id=${path_parameter_id}`)

    return { path_parameter_id, response }
  }
}
</script>

```

# 例

http://localhost:3000/path-parameter-id/1

httpbinを利用してお手軽に動作確認可能

httpbin というサービスのAPIの仕様で
リクエスト先のURLがレスポンスに含まれて返ってくる `"url": "https://httpbin.org/get?id=1" ` 

![image](https://user-images.githubusercontent.com/13635059/80932354-1876ca00-8dfa-11ea-8fa4-7776c4ae0c1c.png)


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/3133











<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
pythonのnumpy.zerosで”TypeError: data type not understood”が出るときの対処

```python
import numpy as np
n_mat = np.zeros(20, 20)
```
とすると，エラーがでる．

```text:実行結果

      1 import numpy as n
----> 2 n_mat = np.zeros(20, 20)

TypeError: data type not understood
```

これは，次のようにすると回避できる．

```python
import numpy as np
n_mat = np.zeros((20, 20))
```

つまり，zerosの引数はコンマ区切りではなく，タプル形式として入力する必要がある．
本当にしょうもない記事ではあるが，元MATLAB使いの私はこれで5分程度悩んだので，戒めとして記録しておく．
【Ruby】自分が間違ったpaizaの例題の解説

##例題

改行区切りで正の整数がn個入力されるので、n個の整数のうち5以上のものを全て足し合わせた値を出力する。

ポイント

・最後に計算するために空の配列aを作成する。
・n、bは文字列ではなく数字。
・timesメソッドを使う。
・timesメソッド内でif文を使い条件にあったらからの配列にいれる。
・<<を使うことによって配列の最後に要素を追加できる。
・最後に配列aの中身を足して出力する。


```
n = gets.to_i   
a = []
n.times do
    b = gets.to_i
    if b > 4
        a << b
    end
end
puts a.sum
```

空の配列aを使わなくても計算できそう？
知見がある方がおりましたら配列を使わない方法についてアドバイスをください。




##例題

aとbを足した値を出力する。入力はa bというフォーマットで与えられる。


ポイント

・入力のフォーマット条件からnを空白区切りにする。
・splitとto_iは一緒に使えないので計算する際に融通が効くto_iで数字に直す。

```
n = gets.split(' ')
puts n[0].to_i + n[1].to_i
```


例題

九九を1の段から9の段まで出力する。

ポイント
for in文の中にfor in文をいれる。

```
def multi(x, y)
    return x * y
end

for a in 1..9
  for n in 1..9
    print multi(a, n)
    if num < 9
    print ", "  #最後まで(ここでいう9)計算が終わったらカンマで結果を区切る。
  end
  puts ""  #各段の計算が終わったら改行する
end
```

##例題

a と b の間の全ての整数を順に表示する。

ポイント
・改行する

```
n = gets.split(' ')
for i in n[0]..n[1]
puts i
end
```


##例題

"Nara", "Shiga", "Hokkaido", "Chiba"を要素に持つ配列（リスト）をプログラムで定義する。
配列（リスト）の要素をインデックス順に１行ずつ、全て表示する。


||の中に入れた変数をputsで表示します。

```
n = ["Nara", "Shiga", "Hokkaido", "Chiba"]
n.each do |s|
    puts s
end
```


##例題

文字列nの各文字を、1文字ずつ出力する。
1文字出力ごとに改行する。
最後は改行し、余計な文字、空行を含んではいけない。

splitメソッドはsplit('')で改行ができる。

```
n = gets.split('')
puts n
```


##例題


1文字目と2文字目を半角スペース区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。

出力例1
r e

```
n = gets
puts "#{n[0]} #{n[1]}"
```

##例題

n 文字目と n + 1 文字目を半角スペース区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。

入力例1
2
read

出力例1
e a

```
n = gets.to_i
s = gets
if s[n]
puts "#{s[n - 1]} #{s[n]}" 
end
```


##例題

1行目に行数を表す整数 n、続く n 行で m 個の「文字」と「整数」の組が空白区切りで入力されます。
n 個の整数だけをそのまま順に出力してください。


n 個の整数を順に改行区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。

入力例1
4
S 1
F 2
E 5
Y 6

出力例1
1
2
5
6

```
n = gets.to_i
n.times do
  puts gets.split(' ')[1]
end
```


##例題

"HND", "NRT", "KIX", "NGO", "NGO", "NGO", "NGO", "NGO"
を要素に持つ配列（リスト）をプログラムで定義し、使用すること。
ただし、2つ以上同じ要素が出現するのは、1種類の文字列についてだけです。

同じ要素の数をカウントして、その数を出力してください。
最後は改行し、余計な文字、空行を含んではいけません。


```
n = ['HND', 'NRT', 'KIX', 'NGO', 'NGO', 'NGO', 'NGO', 'NGO']
count = {}  #空の配列を作る

n.each do |e|
  if count[e]
    count[e] = count[e] + 1
  else
    count[e] = 1
  end
end

count.each do |key, value|  #_keyで文字列から数字に変更する
  if value != 1  #!=は異なる値かどうかを確かめる。
    puts value  #=>5
  end
end
```
React Native BLE Major/Minor取得

# はじめに
前回の記事(https://qiita.com/yokobonbon/items/f17bac71e9ba02a713ac)
でReact NativeでBLEペリフェラルのスキャンを実現しました。今回はそこから、iBeaconのMajor/Minorデータ取得します。

# Manufacture SpecificとiBeacon
以下のページが参考になります。
https://fabo.gitbooks.io/bledocs/content/nordic/beaconadvdata.html

iBeaconはUUID + Major(16ビット) + Minor(16ビット）で一意な端末を識別しますが、その情報は、BLE Advertised PacketのManufacture Specificデータの中に含まれます。Majro番号は25,26バイト目に格納され、Minor番号は26,27バイト目に格納されます。

Manufacture SpecificデータはBleManagerDiscoverPeripheralにおいて、advertisingの中のmanufactureDataに格納されています。
https://github.com/innoveit/react-native-ble-manager

* id - String - the id of the peripheral
* name - String - the name of the peripheral
* rssi - Number - the RSSI value
* advertising - JSON - the advertising payload, here are some examples:
    * isConnectable - Boolean
    * serviceUUIDs - Array of String
    * manufacturerData - JSON - contains the raw bytes and data (Base64 encoded string)
    * serviceData - JSON - contains the raw bytes and data (Base64 encoded string)
    * txPowerLevel - Int

manufacturerDataはbytesとdataが格納されているようですが、bytesの中の25、26バイト目がMajor番号、27、28バイト目がMinor番号が格納されています。

# Major Minor番号の取得と表示
前回の記事に記述しているコードの差分になります。

```js
      bleManagerEmitter.addListener(
        'BleManagerDiscoverPeripheral',
        (args) => {
            let major = 0;
            let minor = 0;
            major = args.advertising.manufacturerData.bytes[25] * 256 + args.advertising.manufacturerData.bytes[26];
            minor = args.advertising.manufacturerData.bytes[27] * 256 + args.advertising.manufacturerData.bytes[28];
            let peripheral = { 'id': args.id, 'name': args.name, 'major': major, 'minor': minor };
            this.discoveredPeripheralList.push(peripheral);
            this.setState({peripheralList: this.discoveredPeripheralList});
```

```js
  renderPeripheral({ item }) {
    return (
      <View style={styles.peripheralList}>
        <Text style={styles.id_text}>ID: {item.id}</Text>
        <Text style={styles.id_text}>NAME: {item.name}</Text>
        <Text style={styles.id_text}>MAJOR: {item.major}</Text>
        <Text style={styles.id_text}>MINOR: {item.minor}</Text>
      </View>
    );
  }
```
<img width="382" alt="スクリーンショット 2020-05-05 12.31.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85182/e1f9c795-ae35-5133-d131-60baff4a0973.png">
GitHub CLI のビルド方法

# GitHub CLI のビルド方法

[GitHub CLI](https://cli.github.com/) のビルド方法です。

## 準備

1. [Golang](https://golang.org/) をダウンロードしてインストールします。
2. git をインストールします。
3. git で ソースを取得します。

git の場合

```
git clone https://github.com/cli/cli.git
```

GitHub CLI をインストール済みの場合

```
gh repo clone cli/cli
```

## ビルド (Windows, Linux 共通)

```
go mod download
go build -v ./cmd/gh
```

参考:
https://github.com/cli/cli/blob/59580e6ac70343ee68ad86736ba43f617c8e98b8/.github/workflows/go.yml
macOS Catalina & Safari でマイナポータル・ぴったりサービスで特別定額給付金を申請

例の[特別定額給付金(新型コロナウイルス感染症緊急経済対策関連)](https://kyufukin.soumu.go.jp/ja-JP/index.html)の申請の話です。

追記: 5/5に申し込んで5/15に振り込むとの通知が自治体からきました。アベノマスク？そんなもの来ないし…その金どうなったの？あとバッチイマスクいらないよ！:anger:
![IMG_4049.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132537/e2e73f43-8726-8f4e-d54a-bdab32a056de.jpeg)

# TL;DR

総務省や国税庁などのマイナンバーを利用したサービスはUser-Agentでブラウザチェックされて、特にmacOSユーザは最新環境だと使えないことが多いので、とりあえずUser-Agent偽装するとなんとかなることが多い(無保証だけど)…

# Safariでの話
以前、[macOS Safari 13.1での令和元年分の確定申告(延長)](https://qiita.com/hkato/items/155b740aa3b58abb0dc7)という記事を書きましたが、総務省もブラウザチェックが入るようで…ネタ的には@katzuenoさんの
[macOS Catalina & Chrome でもマイナポータル・ぴったりサービスで特別定額給付金を申請できた](https://qiita.com/katzueno/items/92b03d7b44a7d1764b42)と同じです。

# 自分の環境

おそらくこの記事を書いた時点で最新(ハードウェアは古いけど…)

- MacBook Pro (Retina, Mid 2012)
- macOS Catalina 10.15.4（19E287）
- Safari 13.1 (15609.1.20.111.8)
- カードリーダー: NTTコミュニケーション[ACR1251CL-NTTCom](https://www.ntt.com/business/services/application/authentication/jpki.html)

# User-Agentの変更内容

```diff
-Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15
+Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15
```

`10_15_4` -> `10_14_6`とかせずに`10_14`だけで通りました、`major_minor`だけ見てるのかな？ちょっと前のe-Taxの場合は`Version/13.1` -> `Version/13.0`だったりと受託先でチェックの指針が異なるのかも。

# おまけ

- （No.1）確定申告書作成コーナーAP 2.0
- （No.2）確定申告書作成コーナーAP 2.0
-  e-Taxソフト（Web版） 2.0.0.0
-  マイナンバーポータルAP 8.2.0

とかSafariに機能拡張が入ってるんですがなんか嫌ですねぇ…とりあえず無効にしました。e-Taxの方もChromeに対応してもらえれば、プロファイル切り替えにしてマイナンバー用のプロファイルに機能拡張を入れればよいのですが。
ビットコインの半減期の仕組み

#はじめに
もうすぐビットコインの半減期ですね(2020.5.5現在)．半減期を前にその仕組みについて整理したいと思います．

#ソースコード
https://github.com/bitcoin/bitcoin/blob/master/src/validation.cpp#L1238

```
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
    int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
    // Force block reward to zero when right shift is undefined.
    if (halvings >= 64)
        return 0;

    CAmount nSubsidy = 50 * COIN;
    // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
    nSubsidy >>= halvings;
    return nSubsidy;
}
```

nSubsidyがマイニング報酬です．初期設定は50BTCとなっており，halvings分右シフトすることによって半分になっていきます．

consensusParams.nSubsidyHalvingIntervalが210000に設定されているので，halvingsはブロック高が210000増加する毎に1つずつ増えていきます．
ブロック生成間隔が約10分なので，210000 / 144 = 1458.3日，即ち約4年に1回ずつ半減期は訪れます．

https://github.com/bitcoin/bitcoin/blob/master/src/miner.cpp#L157

```
    // Create coinbase transaction.
    CMutableTransaction coinbaseTx;
    coinbaseTx.vin.resize(1);
    coinbaseTx.vin[0].prevout.SetNull();
    coinbaseTx.vout.resize(1);
    coinbaseTx.vout[0].scriptPubKey = scriptPubKeyIn;
    coinbaseTx.vout[0].nValue = nFees + GetBlockSubsidy(nHeight, chainparams.GetConsensus());
    coinbaseTx.vin[0].scriptSig = CScript() << nHeight << OP_0;
    pblock->vtx[0] = MakeTransactionRef(std::move(coinbaseTx));
    pblocktemplate->vchCoinbaseCommitment = GenerateCoinbaseCommitment(*pblock, pindexPrev, chainparams.GetConsensus());
    pblocktemplate->vTxFees[0] = -nFees;
```
coinbaseトランザクションに先ほどのマイニング報酬が代入されていることが読み取れます．

# 参考
ブロック高419999，420000のコインベーストランザクションから，マイニング報酬が変化している様子が読み取れます．
https://www.blockchain.com/btc/block/419999
https://www.blockchain.com/btc/block/420000

次の半減期はブロック高630000で行われ，マイニング報酬は12.5BTCから6.25BTCに変化します．
MySQLのレプリケーションを浅く理解する

MySQLのレプリケーションについて簡単ですが、まとめたいと思います。

# レプリケーション？
ふと思うんですけど「レプリケーション」ってなんでしょうか？
「バックアップ」と何が違うのでしょうか？

おそらくですけど、こんな違いがあります。

- バックアップ -> **ある次点における**複製を作成する
- レプリケーション -> 複製を作成する

あまり違いはないように思えますが、大きな違いがありますね。作成されたものが **点 と 線** で大きく異なっていますね。つまり、レプリケーションとは複製元のデータを複製先にリアルタイムに反映させるための仕組みと言えるかと思います。

# MySQLのレプリケーション
MySQLではレプリケーションの仕組みを構築することが可能です。MySQLではバイナリログを別のサーバに転送することでレプリケーションを行っています。

MySQLでは複製元を「マスター」、コピー先を「スレーブ」と呼んでいます。どのようにこれらはデータの同期を行っているのでしょうか？

# レプリケーションの流れ
ざっくりですが、レプリケーションの流れを追っていきたいと思います。

1. マスターへ更新処理が発生
    2. 変更を「イベント」として「バイナリログ」に書き込む

2. スレーブがマスターに接続する
    3. スレーブはマスター接続のための**スレッド(スレーブ I/O スレッド**)を作成
    4. 作成されたスレッドはマスターに、バイナリログに記録された更新内容を要求

3. マスターがスレーブにバイナリログを送信する
    4. マスターはバイナリログを送信するための**スレッド(Binlog Dump スレッド)**を作成
    5. 作成されたスレッドはデータ送信のために、マスターのバイナリログをロック
    6. バイナリログに記載されたイベントをスレーブに送信

4. スレーブがバイナリログを受け取る
    5. 受け取った更新内容を**リレーログ**としてローカルに保存される

5. スレーブで更新処理を行う
    6. スレーブは更新されたリレーログを読み取り、イベントを実行するための**スレッド(スレーブSQLスレッド)**を作成し更新を行う

# レプリケーションの流れ(おまけ)
さて、上記でざっくりとした流れは記載しましたが、いくつか気になった点があるのではないでしょうか？
自分が気になった点についてまとめたいと思います。

## 送受信した内容をどうやって記録しているの？
気になりますね。マスターだと「バイナリログのどこまで送ったか」、スレーブ側だと「リレーログのどこまで実行したか」等の大変そうな制御をどうやって行っているのでしょうか？

答えは簡単です。その情報を持っているんです。スレーブ側に**スレーブステータスログ**を保持しています。このログの実体は

- マスター情報ログ(master.info) -> スレーブ I/O スレッドによって更新
    - マスターへの接続情報
    - 読み取りを開始するバイナリログの位置情報やファイル名
    - etc
- リレーログ情報(relay-log.info) -> スレーブSQLスレッドによって更新 
    - 現在のリレーログファイルの情報や現在位置
    - 最後に実行されたバイナリログの位置
    - etc
 
というログです。(ログファイルではなく、テーブルに書き込むこともできます)

## リレーログのローテーションは？
「スレッドは役目が終わったら削除するのはわかるけど、リレーログの削除とかの制御って大変そう。。。」ってなりました。
ただこのリレーログのローテートは特に何も考慮する必要がありません(おそらく)

SQLスレッドがリレーログファイルの内容を全て実行した後はこのファイルは不要になりますよね？これをSQLスレッドは自動的に削除してくれますのでリレーログのローテーションはあまり考慮しなくても大丈夫という事です。

# まとめ
MySQLのレプリケーションについてまとめましたが、すごい技術ですね。用語自体は理解していましたが、実際の流れとかを理解すると面白さみたいなものを感じました。(と同時に複雑さも感じましたけどね。。。。)

どなたかのお役に立てればと思います。ではまた
P5.js 日本語リファレンス(quadraticVertex)


このページでは[「P5.js 日本語リファレンス」] (https://qiita.com/bit0101/items/91818244dc26c767a0fe) の quadraticVertex関数を説明します。

## quadraticVertex()

### 説明文

2次ベジェ曲線の頂点座標を指定します。 quadraticVertex() を呼び出すたびにベジェ曲線の1つの制御点と1つのアンカー点の位置を指定すると、線分または形状に新しいセグメントが追加されます。 quadraticVertex() が beginShape() 呼び出し内で初めて使用されるとき、最初のアンカーポイントを設定するには、その前に vertex() を呼び出す必要があります。 WebGL モードの場合, quadraticVertex() は2Dおよび3Dモードで使用できます。 2Dモードでは4つのパラメータが想定されますが, 3Dモードでは6つのパラメータ(z座標を含む)が想定されます。

この関数は, beginShape() と endShape() の間で, beginShape() に MODE または POINTS パラメータが指定されていない場合にのみ使用する必要があります。

### 構文

quadraticVertex(cx, cy, x3, y3)

quadraticVertex(cx, cy, cz, x3, y3, z3)

### パラメタ

cx  
Number：制御点のx座標

cy  
Number：制御点のy座標

x3  
Number：アンカー点のx座標

y3  
Number：アンカー点のy座標

cz  
Number：制御点のz座標(WebGLモードの場合)

z3  
Number：アンカー点のz座標(WebGLモードの場合)

### 例1

```javascript
function draw() {
  strokeWeight(5);

  // 定義点を描画する
  stroke(255, 0, 0); // 赤色
  point(20, 20);
  stroke(0, 255, 0); // 緑色
  point(80, 20);
  stroke(0, 0, 255); // 青色
  point(50, 50);

  noFill();
  strokeWeight(1);
  stroke(0);
  
  beginShape();
    vertex(20, 20);  // 赤色
    quadraticVertex(80, 20, 50, 50); // 緑色、青色
  endShape();
}
```

### 実行結果
![quadraticVertex-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43467/0c734254-6b58-c8b9-a9a7-3e02417537e2.png)


### 例2

```javascript
function draw() {
  strokeWeight(5);

  // 定義点を描画する
  stroke(255, 0, 0); // 赤色
  point(20, 20);
  stroke(0, 255, 0); // 緑色
  point(80, 20);

  stroke(0, 0, 255); // 青色
  point(50, 50);

  stroke(50, 200, 255); // 水色
  point(20, 80);
  stroke(255, 165, 0); // オレンジ色
  point(80, 80);
  stroke(190, 0, 255); // 紫色
  point(80, 60);

  noFill();
  strokeWeight(1);
  stroke(0);
  
  beginShape();
    vertex(20, 20); // 赤色
    quadraticVertex(80, 20, 50, 50); // 緑色、青色
    quadraticVertex(20, 80, 80, 80); // 水色、オレンジ色
    vertex(80, 60);  // 紫色
  endShape();
}
```

### 実行結果
![quadraticVertex-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43467/746acaa0-4667-b291-cd34-cdce7be227af.png)


### 著作権

p5.js was created by Lauren McCarthy and is developed by a community of collaborators, with support from the Processing Foundation and NYU ITP. Identity and graphic design by Jerel Johnson.

### ライセンス

Creative Commons(CC BY-NC-SA 4.0) に従います。
nodeのバージョンを下げる@ubuntu18.04

# nodeの互換でエラーが出て困った
- nodeを最新バージョンで入れていて、そのバージョンでアプリが動かない
- その時の対処法のメモです。

# そもそもnodeのインストール方法をメモ
- 私はいつもこのサイトを参考にさせて頂いています。(https://qiita.com/seibe/items/36cef7df85fe2cefa3ea)

# 全てのバージョンを確認する
```
sudo n ls-remote --all
```

# 試すバージョンを切り替える
```
sudo n 11.15.0
```
1. Pythonで学ぶ統計学　1-3. 各種統計量の計算(statistics)

statisticsとは、Pythonの標準ライブラリで、統計計算用のパッケージです。
このstatisticsをつかって各種の統計量を計算していきます。
（原則として Google Colaboratory 上でコードの記述や結果の確認をおこないます）

####**⑴ 数値計算に使うライブラリをインポートする**
まず、`!pip install xxxx`コマンドを使って、statisticsをColaboratory上にインストールします。

```python
!pip install statistics
import statistics as stat # statisticsをインポート
```


####**⑵ データを用意する**

```python
data = [12, 3, 5, 2, 6, 7, 9, 6, 4, 11]
```

####**⑶ 母標準偏差・不偏標準偏差を算出する**

```python
stat.pstdev(data)
```
statisticsの`pstdev`関数は **p**opulation **st**andard **dev**iation の略で、つまりstatisticsでは**母標準偏差**を指定して計算します。
![001_003_001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/b5aa70c9-eb08-2ba2-d107-4f5329f7f0e6.png)


続いて、不偏標準偏差を算出します。

```python
stat.stdev(data)
```
英語で**不偏標準偏差**は unbiased **st**andard **dev**iation ですが、statisticsにおいてはこれが`stdev`関数となります。
![001_003_002.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/056d9b6a-c660-9f28-7be2-dbb1593d2803.png)


##**<font color="Gray">分散</font>**

標準偏差は、分散の平方根をとったものです。
そして**分散**は、「データが平均値からどの程度ばらついているか」を表した指標であり、計算式に書くと次のようになります。
$σ^2 = \frac{1}{N} {\displaystyle {\sum_{i=1}^{N} (x_{i}-μ)^2}}$
データの個数は全部で$N$個あります。
式中の$(x_{i}-μ)$は、データ$x$の$i$番目の値から平均値$μ$を差し引いたもの、これを**偏差**と呼びます。この偏差を2乗したもの$(x_{i}-μ)^2$を、$i=1$番目から$N$番目まで全部のデータについて合計するというのが$\sum_{i=1}^{N}$の意味するところです。これをまとめて**偏差平方和**と呼びます。
この偏差平方和に$\frac{1}{N}$をかけ算する、つまりデータの個数$N$個で割ったものが分散です。
かりに、「データと平均値との差」をその間の距離だとすると、分散とは、データ全体としてみたときの「データと平均値との距離の平均値」といえます。データ全体として平均値からどの程度離れているか、ばらつき具合いを表していることになります。
正確には、これを**標本分散**といいます。
標本分散には偏りがあることが知られており、この欠点を修正した**不偏分散**を使うのが普通です。

####**⑷ 不偏分散を算出する**

```python
stat.variance(data)
```
![001_003_003.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/f6c12f85-2761-2364-b39a-0f0e9b77f8b1.png)


念の為、不偏分散の平方根をとって確かめてみます。

```python
import numpy as np # Numpyをインポート
data_2 = stat.variance(data) # 不偏分散の値を変数data_2に格納
np.sqrt(data_2) # data_2の平方根をとる
```
![001_003_004.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/a79a6e63-6a98-db95-78ff-2f5df62a91ed.png)


不偏分散の平方根は、確かに不偏標準偏差と一致しています。

##**<font color="Gray">不偏分散</font>**

不偏分散の計算式を示します。
$σ^2 = \frac{1}{N-1} {\displaystyle {\sum_{i=1}^{N} (x_{i}-μ)^2}}$
先の標本分散の計算式と異なるのは、$\frac{1}{N}$が$\frac{1}{N-1}$になっているところです。分母が1だけ小さくなるので、不偏分散は標本分散よりも少し大きな値となります。
なぜ、このような操作をするのか。
ここで思い起こしたいのは、分散を計算するために、あらかじめ平均値を計算しているということです。
本当なら母平均を使いたい、でもそれがわからないから標本平均を使うしかない。
この標本平均は、母集団の中の一部の平均値に過ぎないので、母集団における真の平均値（母平均）とは多少ずれていると考えるのが自然でしょう。

そこで、この ‘ずれ’ のメカニズムを考えてみたいと思います。
![001_003_005.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/21e9c6d8-2dbb-cced-398c-99190731dade.png)
標本平均を使うしかないことで、常に標本分散は、本来あるべき真の分散よりも小さくなってしまうのです。
この偏りを補正するために、**不偏分散**すなわち「偏りのない分散」を用い、その平方根をとった**不偏標準偏差**を使うこととなっています。
Docker内の php から SQL Server に接続する（2020年版）

## はじめに
普段は、`MySQL`か`PostgreSQL`が多いので、メモとして残しておきます。

## docker-compose.yml
`php-fpm`と`nginx`の構成に、`mssql-server`を下記のように追加します。

```docker-compose.yml
version: "3"

services:
  php-fpm:
    build: .
    volumes:
      - .:/var/www/app:cached

  nginx:
    image: nginx
    ports:
      - "8000:80"
    volumes:
      - .:/var/www/app:cached
      - ./etc/nginx/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - php-fpm

  mssql-server:
    image: mcr.microsoft.com/mssql/server:2017-latest
    environment:
      ACCEPT_EULA: Y
      SA_PASSWORD: P@ssw0rd
    ports:
      - "1433:1433"
```

## Dockerfile

```dockerfile
FROM php:7.4-fpm

# Install basic packages and extensions
RUN apt-get update \
  && apt-get install -y zlib1g-dev libzip-dev wget gnupg \
  && docker-php-ext-install zip opcache

# Install SQL Server extensions
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools
RUN apt-get install -y unixodbc-dev libgssapi-krb5-2
RUN pecl install sqlsrv
RUN pecl install pdo_sqlsrv
RUN docker-php-ext-enable sqlsrv
RUN docker-php-ext-enable pdo_sqlsrv

WORKDIR /var/www/app
```

## 参考リンク
- https://hub.docker.com/_/microsoft-mssql-server
- https://docs.microsoft.com/ja-jp/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver15
- https://docs.microsoft.com/ja-jp/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15

## おわりに
数年前は、もう少し手順が多く、トラブルも多かった印象ありますが、`Microsoft`も`Linux`対応を頑張っているのか、スムーズにセットアップできました。
参考になれば幸いです。
ではでは。
1. Pythonで学ぶ統計学　1-2. 各種統計量の計算(Numpy)

ここで、まずPandasとNumpyの用途性をおさえておきます。

- **Numpyは多次元データを扱う**
    - Numpyが対象とするのは多次元配列の数値データであり、これ以外のデータ型を処理する関数はほとんどない。
    - 計算速度がかなり速く、またCython化（C/C++に変換してコンパイル）するとC言語並みの速さになったりする。
- **Pandasは多次元以外の実データを扱う**
    - 多次元配列以外の実データを対象とし、CSVやSQL、Excelで保存されているようなデータの入出力や加工に適している。
    - 数値データだけでなく、時系列データであろうが文字列を含んでいようが、あらゆるデータを処理する関数を備えている。

したがって、PandasとNumpyとを段階的に組み合わせて、例えば以下のような一連の流れで使われることが多いといえます。
![001_002_002.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/7a8b3f12-be65-420b-4dfe-954cb0395b5e.png)







####**⑴ データを用意する**

```python
data = [12, 3, 5, 2, 6, 7, 9, 6, 4, 11]
```
`変数名 = []`の中に値をカンマ区切りで直接書いてPython標準のリストを作成しました。
以下、Numpyを用いて各種統計量を算出していきます。

####**⑵ 平均値を算出する**

```python
np.mean(data)
```
![001_002_001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/34110d6d-6ab4-8de0-673f-c02bae0f41dc.png)

Numpyの`mean`関数によって平均値 6.5 が算出されました。


####**⑶ 中央値を算出する**

```pyton
np.median(data)
```
![001_002_003.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/92993ee1-38d8-66f0-3b2c-b8895f567af9.png)

Numpyの`median`関数によって中央値 6.0 が算出されました。
データを大きさの順に並べ替えたとき、ちょうど中央に位置する値のことでメディアン（median）とも言います。第２四分位数に等しく、データが複数個の場合は、中央に近接する２つの値の平均値となります。


####**⑷ 合計値を算出する**

```python
np.sum(data)
```
![001_002_004.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/8795c81f-db7a-6b5b-2e11-909cc09a7713.png)

Numpyの`sum`関数によって合計値 65 が算出されました。


####**⑸ 標準偏差を算出する**

```python
np.std(data)
```
![001_002_005.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/5b91e954-3f6e-09fd-8169-b6338cd3f0e9.png)

Numpyの`std`関数によって 3.138470965295043 という結果が得られました。
ただし、これは**母標準偏差**の値です。
標準偏差には、母標準偏差と**不偏標準偏差**という２つの種類があるので注意が必要です。


##**<font color="Gray">母集団と標本</font>**

調査や研究の対象となるものの全体を**母集団**といい、母集団から抽出された一部を**標本**といいます。
母集団全体を調べる調査を**全数調査**とか**悉皆調査**といいます。その代表的なものとしては、日本に居住するすべての人に回答する義務が法律で定められている「国勢調査」とか、事業所の国勢調査とでもいうべき「事業所・企業統計調査」くらいでしょう。
つまり、実社会で扱うデータというのは、ほぼすべてが標本調査による標本といえます。しかし、なにも標本の特徴や傾向を知りたいわけではなくて、常に標本を対象としながら母集団の特徴や傾向を推し量るということをしています。
さて、標準偏差を算出するには２つの統計量が必要です。まず平均値を計算し、それを使って分散を計算し、分散の平方根をとったものが標準偏差になります。
標本から算出される平均、分散、標準偏差は、それぞれ「標本」ないし「不偏」という接頭語をつけて、**標本平均$\bar{X}$**、**不偏分散$s^2$**、**不偏標準偏差$s$**といいます。これに対して、標本から推定される母集団の平均、分散、標準偏差を、**母平均$μ$**、**母分散$σ^2$**、**母標準偏差$σ$**と呼んで区別しています。


そこで、Numpyをつかって不偏標準偏差を求める場合には次のようにします。


```python
np.std(data, ddof=1) 
```
![001_002_006.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/64e039f2-cd7f-c877-e335-25f1bdba46de.png)


先にPandasを用いて算出された標準偏差と比較してみます。

```python
df = pd.DataFrame(data) # dataをPandasのデータフレームに変換
df.describe().loc['std']
```
![001_002_007.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/14afcf16-6880-c7e3-49af-2b1f784cba68.png)


Pandasによる標準偏差は、不偏標準偏差となっています。

---
続いて今度は、Pythonの標準ライブラリであるstatisticsを用いて基本統計量を算出してみます。
ゼロから始めるLeetCode Day14 「136. Single Number」

#概要
海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。

その対策としてLeetCodeなるサイトで対策を行うようだ。

早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイト。

せっかくだし人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。

[Leetcode](https://leetcode.com/)

[ゼロから始めるLeetCode 目次](https://qiita.com/KueharX/items/6ee2502c3b620c795b70)

前回
[ゼロから始めるLeetCode Day13 「338. Counting Bits」](https://qiita.com/KueharX/items/98dcdb1b82d39c464a92)

基本的にeasyのacceptanceが高い順から解いていこうかと思います。

# 問題
[136. Single Number](https://leetcode.com/problems/single-number/)

難易度はeasy。
こちらの問題もTop 100 Liked Questionsからです。
やたらGood数が多いのでなんでだろう？と思っていたのですが、解いてみたらあーなるほどってなったので実際に解法をみる前に自分で解いてみると良いかもしれません。

問題としては、空ではない数字の配列が与えられるので、その中に二つ表示されていない数値を抜き出して返してください、とのことです。

>Example 1:

>Input: [2,2,1]
Output: 1

こちらの例だと1のみが配列の中に1個しかないので1を返します。

>Example 2:

>Input: [4,1,2,1,2]
Output: 4

こちらの例だと4のみが配列の中に1個しかないので４を返します。

# 解法

今回は少し情報系について知っているような書き方をしてみました。

```Python
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        ans = 0
        for n in nums:
            ans ^= n
        return ans
# Runtime: 80 ms, faster than 93.89% of Python3 online submissions for Single Number.
# Memory Usage: 16.5 MB, less than 6.56% of Python3 online submissions for Single Number.
```

Pythonに詳しくない方は

```Python
ans ^= n
```

これなんだよってなるかもしれないので補足しておくと、排他的論理和（XOR）を表す代入演算子ですね。

多くの方がご存知のように、二つの入力のうち、どちらか一方のみが1のときに1をを返すようなXORはこの問題にうってつけです。

実際、解いた後にDiscussを覗いてみたらXORを使った答えが多かったですね。
もう少しいい答えがありそうならば追記します。
VRChatでテレポート機能をつける（VRCSDK3、Udon、Unity 2018.4.20f1）

# はじめに
リモートワークで複数の会議の立ち上げが面倒だったり、オープンチャンネルで呼びかけても反応がなく、相手の状態がわからないことってありますよね？

VR内の同一空間で、実際の物理空間みたいに部屋を移動して、会議ができたら便利だなと思い、しかも完全防音で内側から鍵をかけられる会議室を作ろうかと。学会とかセッションごとに部屋を分けるという使い方もできますよね。クラブもいいなー。

いろいろ検索していると完全防音、内側から鍵がかけられる仕様のラブホテルを見つけましたｗ これ欲しいｗ
[VRChat 9日目（ラブホテル女子会）](
https://yuukisorato.com/vrchat-9%E6%97%A5%E7%9B%AE%EF%BC%88%E3%83%A9%E3%83%96%E3%83%9B%E3%83%86%E3%83%AB%E5%A5%B3%E5%AD%90%E4%BC%9A%EF%BC%89/)
[Hotel Beautiful Night by MinaFrancesca](https://www.vrchat.net/launch?worldId=wrld_6893fb89-5dbe-4499-9eae-7f7f5b039ad5&instanceId=960~public)

完全防音するためには、ワールド内で距離をとる必要があったので、今回テレポート機能を作りました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/VRChat?src=hash&amp;ref_src=twsrc%5Etfw">#VRChat</a> <br>ワールド内でピンポイント遮音するメモ（知ってる人は知ってるはず）<br>①Reference cameraにcameraを設定<br>②設定したcameraのclipping PlanesのFarの距離を適当に設定<br>③別室の端から遮音したい部屋を②で設定した距離より遠くに置く<br>少なくとも2号店、3号店、4号店の遮音は全てこの方式 <a href="https://t.co/Gla3OQsyra">pic.twitter.com/Gla3OQsyra</a></p>&mdash; Niko_14 (@himazin917) <a href="https://twitter.com/himazin917/status/1102865445659398144?ref_src=twsrc%5Etfw">March 5, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 開発環境
- Windows10 PC
- Unity 2018.4.20f1
- VRCSDK3（VRCSDK3-UDON-2020.04.25.13.00.unitypackage）
- Steam 
- VRChat


# 導入
テレポートを発火させるためのドアを用意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/c30925eb-b578-22ac-f6c7-55eed4a1d4ca.png)

ドアにBox ColliderとUdon BehaviorをAdd Componentします。UdonBehaviorの中身は下の図を参照。ドアに近づいてクリックすると、CustomEventを発火させる仕組み。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/36b72157-6c9c-a15b-1bce-b8a0678a6f2c.png)

ドアに空の子オブジェクト(Teleport)を作成し、Udon BehaviorをAdd Componentします。 UdonBehaviorの中身は下の図を参照。CustomEventが発火したら、TeleportToを用いて、teleportPosの位置にプレイヤーをテレポートさせます。CustomEventの中身にteleportと入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/6292e72f-298f-9ad0-9f7a-aa31b3bbd156.png)

ドアのInspectorビューからAllow Ownership Transfer on Collisionにチェックを入れ、eventNameをteleport、targetにTeleportをアタッチします。

Build&Testで結果を見てみましょう。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ドアにちゃんとつけた。ナビゲーションのUseをInとかにしたいんだけどどうするんだ。 <a href="https://twitter.com/hashtag/VRChat?src=hash&amp;ref_src=twsrc%5Etfw">#VRChat</a> <a href="https://twitter.com/hashtag/MadeWithUdon?src=hash&amp;ref_src=twsrc%5Etfw">#MadeWithUdon</a> <a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://t.co/tLT7HnJN3s">pic.twitter.com/tLT7HnJN3s</a></p>&mdash; 藤本賢志(ガチ本)@pixivFANBOXはじめました (@sotongshi) <a href="https://twitter.com/sotongshi/status/1257488472006258689?ref_src=twsrc%5Etfw">May 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# まとめ
テレポートできました。
完全防音になったかどうかはこれから実験します。全体と各部屋わけて音声再生できるのかな？とか。あとは部屋から脱出して空飛べる人は各部屋に近づけるし、会話が聞こえるんじゃないかな？とかｗ （Collider解除できちゃう人いるんかな。）
あとは内側から鍵をかけて完成。

コロナの時代の新しい日常のために、VRChatでリモートワークしましょう～！
.vimrcをファイル分割して可読性を上げてみた

<img width="303" alt="スクリーンショット 2020-04-29 21.37.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308284/9c271260-f4a9-4d1e-2812-09100c1832a1.png">


## 概要
vimrcって長くなって読みにくくなったりしますよね。
そこで、vimrcの記述をいくつかのファイルに分けることで可読性を上げましょうってお話です。

実際のコード郡はこちらのリポジトリ（GitHub）から確認できます。
https://github.com/yamamoto7/.dotfiles/tree/config/vim


実際のディレクトリ構成はこのようになっています。
<img width="168" alt="スクリーンショット 2020-04-29 21.21.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308284/64f13382-14bb-709a-0159-1cab223f5493.png">


## vimrcの中身
こうしちゃいます。めっちゃ短くてよいですよね。

```vim:~/.vimrc
runtime! settings/init/*.vim
runtime! settings/pluginconfig/*.vim
```

今回は、vimの設定を~/.vim/settings の中のファイルに書くものとしました。

`~/.vim/settings/init/`
　→初期化時設定を入れるディレクトリ
`~/.vim/settings/pluginconfig/`
　→プラグインの設定を入れるディレクトリ

として、その中にマッピングやシンタックスハイライトなどの.vimのファイルを入れていっています。
中身に関しては、概要のGitHubリポジトリより確認いただけます。

プラグインの読み込み、設定の2つに関しては読み込む順番が重要になってくるので、その順番を決定するためだけにruntimeは2行になっています。

## 説明
`runtime! ~` で、外部ファイルの記述を読み込みに行っています。
vimの設定はデフォルトで`~/.vim`というディレクトリに入っているため、ない人は作りましょう！

おすすめの設定などについては別の機会に触れたいと思っていますが、GitHubから僕の設定が全部見れるので気になる方は下のリンクから見てみてください！
https://github.com/yamamoto7/.dotfiles/tree/config/vim

始めたばかりですが、ブログも見ていただけたら嬉しいです。
https://blog.ychof.com/
1. Pythonで学ぶ統計学　1-1. 基本統計量(Pandas)

統計学には、さまざまな用語が使われます。
平均や偏差値など、ごく身近なものから、普段あまり馴染みのないものまで多々ありますが、
まずはじめに、基本的な用語について、その意味を正しく理解するところから始めたいと思います。
（原則として Google Colaboratory 上でコードの記述や結果の確認をおこないます）

####**⑴ 数値計算に使うライブラリをインポートする**

```python
import numpy as np
import pandas as pd
```

####**⑵ データセットを読み込む**

```python
df = pd.read_csv("https://raw.githubusercontent.com/karaage0703/machine-learning-study/master/data/karaage_data.csv")
```

pandasの`read_csv`関数を使って("ファイル名")で指定したcsvファイルを読み込み、変数dfに格納しています。

####**⑶ データの中身を確認する**

```python
df.head()
```

`head`関数によって変数dfに格納されたデータの先頭5行分だけが表示されます。
![001_001_001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/c37dc5ef-032f-779a-4ee3-519f0b986b04.png)

xとyという2つの変量からなるデータであることがわかります。

####**⑷ 基本統計量を算出する**

```python
df.describe()
```

pandasの`describe`関数によって基本統計量の一覧表が取得されます。
![001_001_002.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/96b8e175-4fa4-467a-836a-9619a0499c4a.png)


さて、**統計量**という用語ですが、データを集計した値のことをそう呼びます。
統計量を見ることによって、標本の特徴を知ることができます。
基本統計量として示された８つの統計量、それぞれの用語の意味を確認しておきます。

|   |統計量|変量x|変量y|用語の意味|
|---|---|---|---|---|
|count|標本数|6|6|n=6すなわち全部で6行分のデータが入っている|
|mean|平均値|14.33|3.33|いわゆる代表値（標本を代表する値）として使われる|
|std|標準偏差|16.01|1.51|standard deviationの略で、データがどの程度ばらついているかを表す統計量の一つ|
|min|最小値|1.00|2.00|その変量の中で最も小さい値|
|25%|第１四分位数|2.75|2.25|データを小さい順に並び替えたとき、データ個数を小さい方から数えて4分の1番目にあたる値|
|50%|第２四分位数|7.50|3.00|データを小さい順に並び替えたとき、データ個数を小さい方から数えて4分の2番目にあたる値|
|75%|第３四分位数|23.50|3.75|データを小さい順に並び替えたとき、データ個数を小さい方から数えて4分の3番目にあたる値|
|max|最大値|40.00|6.00|その変量の中で最も大きい値|

####**⑸ 基本統計量を個別に算出する**
まず、平均を計算してみます。

```python
df.describe().loc['mean']
```
![001_001_003.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/58cca89c-5c1d-d40a-d8b4-96f32971bd75.png)


つづけて標準偏差、第１四分位数を、`loc['xxx']`にその統計量を指定して計算します。

```python
df.describe().loc['std']
```
![001_001_004.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/7fd665d2-49e6-e4b9-af62-127a1afb1963.png)


```python
df.describe().loc['25%']
```
![001_001_005.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502109/54271fda-8b12-4c3e-0752-f8595b6cebd7.png)



---
以上、Pandasを用いて、基本的な統計量を見てきました。
次いで、今度はNumpyをつかって各種統計量を計算してみて、その統計量の大もとの計算方法や特徴について考察します。
AppStoreConnectでリジェクトへの返信でファイルアップロードができない問題

#リジェクトされた
今回Flutterで作成したアプリを公開しようと思い申請してみたけど予想通りリジェクトされてしまいました。
バイナリでの却下ということでリジェクト内容は以下でした。
###リジェクト内容

```
Guideline 5.3.2 - Legal - Gaming, Gambling, and Lotteries


Your app includes a contest or sweepstakes but it does not:

- Indicate that Apple is not involved in any way with the contest or sweepstakes.

Next Steps

It is necessary to:

- Include official rules of the contest or sweepstakes in the app and ensure the rules are available to users at all times.
- Include an explicit statement in the contest or sweepstakes rules specifying that Apple is not a sponsor.
- Enforce an age rating of 17+.

Please see attached screenshot for details.


```

###日本語訳(Google翻訳)
```
ガイドライン5.3.2-法的事項-ゲーム、ギャンブル、宝くじ


アプリにはコンテストまたは懸賞が含まれていますが、以下は含まれていません。

-Appleがコンテストや懸賞に一切関与していないことを示します。

次のステップ

それはする必要があります：

-アプリにコンテストや懸賞の公式ルールを含め、ユーザーがいつでもルールを利用できるようにします。
-アップルがスポンサーではないことを明記したコンテストまたは懸賞のルールに明示的なステートメントを含めます。
-17歳以上の年齢評価を適用します。

詳細は添付のスクリーンショットをご覧ください。
```

今回のアプリはガチャ要素を含んでいたので、**ゲーム、ギャンブル、宝くじ**に当てはまるようで、
それについてのルールを明記しろという内容でした。

ただこのガイドラインについては承知していたので、既にアプリ内の利用規約に記載していたのですがレビュアーの方が見落としていた（見つけられなかった？）ようでした。

#キャプチャを添付しようとしたらできなかった
リジェクトに対して質問や伝えることがあればAppStoreConnectの問題解決センターから**返信**という箇所でAppReviewチームへ直接連絡ができます。
ここでファイルを添付して伝えることもできるのですが、ファイルをアップロードしようとした時に

`ファイルを読み込めませんでした。もう一度やり直してください。`

という内容のエラーが出ました。
<img width="1088" alt="スクリーンショット 2020-05-05 10.37.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/515481/27ee49d8-eeb0-227d-56e3-4148475a7259.png">
#解決方法
最初は拡張子の問題かなと思ったのですが、ファイル名が問題でした。
どうやら**ファイル名に全角が入っているとエラーになる**ようです。

iPhoneやMacのスクリーンショットはデフォルトだと
`iOS の画像.jpg`
`スクリーンショット 2020-04-10 21.47.21.PNG`
のような名前になってるのでそのままアップロードしようとするとエラーになります。
こんな簡単なことだった、、、

キャプチャをアップロードする時は名前を変えてみてくださいね。
Vue  Nuxt.js  でURLのクエリパラメータをテンプレートやscriptで利用する ( #Nuxt #Vue )

use `$route.query` in view template
use `this.$route.query` in script

# index.vue

```vue
<template>
  <div>
      {{ $route.query }}
  </div>
</template>

<script>
export default {
  created () {
    console.log(this.$route.query)
  },
}
</script>

```

# URL example
http://localhost:3000/url-query?id=1&foo=bar

# View example

![image](https://user-images.githubusercontent.com/13635059/80930371-20307180-8dee-11ea-9c5d-ae866c4f2b82.png)


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/3132











<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Vue with Nuxt.js  –  show GET URL query parameters in view template or script ( #Nuxt #Vue )

use `$route.query` in view template
use `this.$route.query` in script

# index.vue

```vue
<template>
  <div>
      {{ $route.query }}
  </div>
</template>

<script>
export default {
  created () {
    console.log(this.$route.query)
  },
}
</script>

```

# URL example
http://localhost:3000/url-query?id=1&foo=bar

# View example

![image](https://user-images.githubusercontent.com/13635059/80930371-20307180-8dee-11ea-9c5d-ae866c4f2b82.png)


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/3131











<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Insert Final Newlineの設定をしようという話

## TL;DR

ほとんどのエディタに存在するInsert Final Newlineの設定を、基本的にはしておきましょうという話です。

## Why?

POSIXでLineの定義が **0個以上のNewLineでない文字と末尾のNewLineの集合** となっており、TextFileがLineの集合だからです。

ref: [https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_206](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_206)

ファイルの末尾が改行で終わっていないとCLIで `diff` を実行した際に `\ No newline at end of file` という表示が出たり `cat` を実行した際に以下のようにファイルの内容の右にpromptが表示されてしまったりします。

```sh
Terminal:~ user% cat foo.txt
barTerminal:~ user%
```

GitHubではPull RequestのFiles changed上で赤いアイコンが表示されますね。

<img width="372" alt="no-newline-at-end-of-file-on-github.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18007/b4bc4287-5a0a-9594-ab1d-ca59a4d29527.png">

## What?

おそらく皆さんが使っているエディタには "ファイルを保存した際に末尾に改行がなければ追加する" という設定があると思います。これを設定しましょう。

## How?

VSCode, Emacs, Vim, IntelliJ-based IDEsの設定を記載しておきます。この4つを選んだのは私がよく使うエディタだからという理由です。

### VSCode

<img width="986" alt="Pasted_Image_2020_05_05_10_45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18007/8bfbea01-4b7c-a225-61a3-f0189e23e1dd.png">

### Emacs

```lisp
(setq require-final-newline t)
```

### Vim

デフォルトがそうなっていると思います。

### IntelliJ-based IDEs

<img width="608" alt="Pasted_Image_2020_05_05_10_57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18007/bbf06ebe-2f5e-6bbc-eaa9-fe3ba5be5f50.png">

## ref

- https://stackoverflow.com/questions/729692/why-should-text-files-end-with-a-newline
- https://thoughtbot.com/blog/no-newline-at-end-of-file
- http://www.gnu.org/software/emacs/manual/html_node/emacs/Customize-Save.html
P5.js 日本語リファレンス(curveVertex)


このページでは[「P5.js 日本語リファレンス」] (https://qiita.com/bit0101/items/91818244dc26c767a0fe) の curveVertex関数を説明します。

## curveVertex()

### 説明文

曲線の頂点座標を指定します。この関数は beginShape() と endShape() の間で、かつbeginShape() に MODE パラメータが指定されていない場合にのみ使用できます。 WebGL モードの場合, curveVertex() は2Dおよび3Dモードで使用できます。 2Dモードは2つのパラメータを想定していますが、3Dモードは3つのパラメータを想定しています。

一連の curveVertex() ラインの最初と最後のポイントは、カーブの開始と終了をガイドするために使用されます。 2番目と3番目のポイント間に小さな曲線を描くには, 最低4つのポイントが必要です。 curveVertex() を使用して5番目のポイントを追加すると、2番目、3番目、4番目のポイント間にカーブが描画されます。 curveVertex() は Catmull-Rom スプラインの実装です。

### 構文

curveVertex(x, y)

curveVertex(x, y, [z])

### パラメタ

- x  
Number：頂点のx座標

- y  
Number：頂点のy座標

- z  
Number：頂点のz座標(WebGLモードの場合)(オプション)

### 例1

```javascript
function draw() {
  strokeWeight(5);
  
  // 定義点を描画する
  stroke(50, 200, 255); // 水色
  point(150, 80);
  stroke(255, 0, 0); // 赤色
  point(84, 91);
  stroke(0, 255, 0); // 緑色
  point(68, 19);
  stroke(0, 0, 255); // 青色
  point(21, 17);
  stroke(255, 165, 0); // オレンジ色
  point(32, 91);

  strokeWeight(1);
  noFill();
  stroke(0);
  
  beginShape();
    curveVertex(150, 80); // 水色
    curveVertex(84, 91);  // 赤色
    curveVertex(68, 19);  // 緑色
    curveVertex(21, 17);  // 青色
    curveVertex(32, 91);  // オレンジ色
    curveVertex(32, 91);  // オレンジ色
  endShape();
}
```

### 実行結果
![curveVertex.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43467/d1b25f58-626a-c574-f292-4285d2c043c9.png)


### 著作権

p5.js was created by Lauren McCarthy and is developed by a community of collaborators, with support from the Processing Foundation and NYU ITP. Identity and graphic design by Jerel Johnson.

### ライセンス

Creative Commons(CC BY-NC-SA 4.0) に従います。
ComposerでCakePHP3.8をインストール

# ComposerでCakePHP3.8をインストール

WEBシステムを構築する際には、様々なフレームワークを利用されると思います。 フレームワークを導入することで、少ないコードで効率的にWEBシステムを組むことができるようになります。 今回はフレームワークの CakePHP3.8 をcomposerでインストールする方法をご紹介しようと思います。

CakePHP3.8 でWEBシステムを構築する際は、プロジェクトディレクトリのルートでComposerを実行する必要があります。Composerのインストール方法については、今回は割愛させていただきます。 次回以降でこちらの方法をご紹介できたらと思います。

Composer ダウンロードサイト
    https://getcomposer.org/

installation (CakePHP 3.x Cookbook)
    https://book.cakephp.org/3/ja/installation.html

## 環境
OS: Windows10
PHP: 7.4.1
xampp: 7.4.1

## 手順
CakePHP3 のプロジェクトディレクトリを作成する階層へ移動
※記事ではディレクトリ「Project」直下にプロジェクトディレクトリを作成することを想定しています。

```shell
>cd /path/to/Project/
```

```shell
Project>composer create-project --prefer-dist cakephp/app:3.8.* my-project
```

※注意事項
・バージョンを指定しないと、最新版の CakePHP4 がインストールされるので、「:3.8.*」を入れてください。
・「my-project」は今回のCakePHP3をインストールするプロジェクトディレクトリの名前になります。


インストールの処理が始まり、途中で下記の質問がされるので、「Y」を入力して進行します。

```shell
Set Folder Permissions ? (Default to Y) [Y,n]?
```

インストール後は、サイトURLにアクセスし、下記画面が表示されること確認できれば、インストール作業は完了となります。
![Cake php3_画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138225/d9c86a7a-1709-289f-74b0-8b668ff41c59.png)

CakePHP3のインストールは、Composer を使用してインストールをすることになります。
Composer はプロジェクトで使用するライブラリやパッケージを管理し、それらのバージョンをチームで共有することができます。非常に便利なツールですね。
Python+SeleniumでスクレイピングしてApple整備済製品をカートに入れ、ラインで通知する

##はじめに
Mac等を定価より安く買う方法として、[認定整備済製品](https://www.apple.com/jp/shop/refurbished/mac)は選択肢の一つとしてなりえます。
新品同様の製品を約15％オフの値段で購入できますが、人気商品であればすぐに売り切れてしまいます。
機会を逃さないために、プログラミングで希望の商品を検索してカートに追加、ラインで通知するまでをプログラミングで実装しました。

##実際のコード
###本体
目的のページにアクセス→指定した文字列が含まれるURLにジャンプ→ログイン処理→カートに入れる→ラインで通知→商品名を保存、の流れです。
Seleniumに関する説明は多々あるので、この記事では割愛させて頂きます。
[Selenium](https://qiita.com/kinpira/items/383b0fbee6bf229ea03d)
*hoge*は実際の文字に置き換えてください。

```python:AppleUsedSearch.py
from selenium import webdriver
from selenium.webdriver.common.by import By
from line_notify_bot import LINENotifyBot

bot = LINENotifyBot(access_token='hoge')

options = webdriver.ChromeOptions()

options.add_argument('--headless')
driver = webdriver.Chrome(options=options) 

driver.get('https://www.apple.com/jp/shop/refurbished/mac/2019') 

r = driver.find_elements_by_class_name('as-producttile-tilelink')
len = len(r)
list =[]
for i in range(len):
    r = driver.find_elements_by_class_name('as-producttile-tilelink')[i].get_attribute('data-display-name')
    list.append(r)
    if "15.4インチMacBook Pro 2.2GHz" in r and "スペースグレイ" in r:
        detail = driver.find_elements_by_class_name('as-producttile-tilelink')[i].get_attribute("href")
        driver.get(detail)
        if driver.find_elements_by_class_name('ac-gn-bagview-nav-link ac-gn-bagview-nav-link-signIn'):
            login = driver.find_element_by_class_name('ac-gn-bagview-nav-link ac-gn-bagview-nav-link-signIn').get_attribute("href")
            driver.get('login')
            driver.find_element_by_id("loginHome.customerLogin.appleId-label").send_keys("hogehoge@gmail.com")
            driver.find_element_by_id("loginHome.customerLogin.password-label").send_keys("hogehogehoge")
            driver.find_element_by_id("signin-button-submit").click()
        driver.find_element_by_name("add-to-cart").click()
        bot.send(
            message='入荷有り'+r
        )
        driver.get('https://www.apple.com/jp/shop/refurbished/mac/2019') 
driver.quit()

print(list)
import pandas as pd
df = pd.Series(list)
df.to_csv("Item.csv", encoding='utf_8_sig')
```
###ライン通知
先人が素晴らしいコードを書かれていたので、僭越ながら使わせていただきました。
[PythonでLINEにメッセージを送る](https://qiita.com/moriita/items/5b199ac6b14ceaa4f7c9)

```python:line_notify_bot.py
import requests

class LINENotifyBot:
    API_URL = 'https://notify-api.line.me/api/notify'
    def __init__(self, access_token):
        self.__headers = {'Authorization': 'Bearer ' + access_token}

    def send(
            self, message,
            image=None, sticker_package_id=None, sticker_id=None,
            ):
        payload = {
            'message': message,
            'stickerPackageId': sticker_package_id,
            'stickerId': sticker_id,
            }
        files = {}
        if image != None:
            files = {'imageFile': open(image, 'rb')}
        r = requests.post(
            LINENotifyBot.API_URL,
            headers=self.__headers,
            data=payload,
            files=files,
            )
```

##まとめ
サイドプロジェクトの初投稿ということで、自分が興味を持っているスクレイピングについて勉強したことを書きました。
定期実行できていない点や、アクセスコードを直接記述している点は修正に取り組みます。
日々コーディングして、情報発信していきます。
.NET Frameworkから.NET Coreに移行したくてもできない理由

# .NET Coreとは
.NET CoreはMicrosoftが開発を進めているオープンソースの汎用開発フレームワークです。
11月に発表予定の.NET5のベースになるフレームワークです。
#.NET Coreに移行するメリット#
- マルチプラットフォームに対応できる
- 最新技術が早く実装される

# .NETのCore問題点
- .NET Frameworkとメソッド、クラスの構成が変わっている。
- .NET CoreのFormアプリケーションでFormデザイナに対応していない
- **実装されていない機能がある**(実装する予定すらなくなっているものもある)

このように移行には問題があります
特に最後の実装されていない機能がある点について詳しく書いていこうと思います。

# 移行しようとしてみた
私は今自作言語をC#で開発しています。
そのため、マルチプラットフォームに対応していたほうが多くのメリットがあります。
なので.NET Frameworkで書いた動的コード生成のプログラムの構文を.NET Coreで書いてみました。

コードについては[こちら](https://qiita.com/BinaryNumber/items/0988ed5fe1da85d7cfbb#c%E3%81%AE%E6%A7%8B%E6%96%87)の記事を使いました。
これをコピペしたらこんな問題が発生しました。
![スクリーンショット (38).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606743/ef16590f-a214-6100-ffb7-e3a842530389.png)

エラーを一づつ見てみましょう
### 一つ目のエラー  CS1061エラー
アセンブリ参照が不足しているという問題です。
これについてはAppDomainを対応しないといっていたので仕方ありません。
なのでGoogleで
`DefineDynamicAssembly`
と調べてみました。
すると[こちらのサイト](https://docs.microsoft.com/ja-jp/dotnet/api/system.reflection.emit.assemblybuilder.definedynamicassembly?view=netcore-3.1)で
**AssemblyBuilder.DefineDynamicAssembly**メソッドを代わりに使えるようです。
これで一つ目のエラーは解消しました。


### 二つ目のエラー  CS0117
これはAssemblyBuilderAccessにSaveがないということです。これについて調べると[こちらのサイト](https://docs.microsoft.com/ja-jp/dotnet/api/system.reflection.emit.assemblybuilderaccess?view=netcore-3.1)が見つかりました。
その結果残念なことがわかりました。
.NET CoreではRunとRunAndCollectしかありません。
つまり**保存することができない**のです

2020/5/5時点で.NET CoreのSystem.Reflection.Emitでは動的に実行ファイルの生成ができないということです。
これについてはどうすることもできません。
### その他のエラー
そのほかのエラーは二つ目のエラーが原因となっているものと、
変数名の変更といった最悪消してしまってもよい機能ですので、割愛します。

#最後に#
このように.NET Coreは実装が終わったといっておりますが、実際には実装されていない機能があり.NET Frameworkでしかできないことがあります。
なので11月にリリースされる.NET5では実装されることを祈ります。
また、これを使うとできるよーって言う方法がありましたらコメントお願いします。

#追記#
System.Reflection.Emitの動的コード生成ができませんと説明しましたが
現在開発中のようですので.NET8以降で追加される可能性があるようです。
また、.NET Core限定でMetadataBuilderというもので動的コード生成できるようなので、そちらを使うのことも可能なようです。
私が、使い方を理解できれば記事にするかもしてません。
Javascript/TypescriptでOptional  Chainingが使えるようになるらしい。


ECMAScript２０２０の新機能の一つに、Optinal Chainingが入っていました。
これはSwiftなどではすでに使える構文で、値が入っているかどうかわからない変数にアクセスする場合、手前に？をつけておくことでnullpointerExceptionなどのエラーが発生しないようすることができる機能です。

例えば、foo.barの中にあるbaz関数を実行したい。でも、fooの中にbarが入っていない事がある場合、記述するプログラムはそのことを考慮して以下のようになります。

```
let x = (foo === null || foo === undefined) ?
    undefined :
    foo.bar.baz();
```

これが、Optional Chainingを使うことによって以下の記述となります。

```
let x = foo?.bar.baz();
```


Typescript3.7のリリースノートを見ると、Typescriptではすでにこの記法は利用できるようになっている様です。

是非活用して行きたいですね。


### Typescript3.7 リリースノート
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html

### ECMAScript2020 What's new
https://www.digitalocean.com/community/tutorials/js-es2020
force cliのまとめ


+ [force cli : force field creatの改造](https://qiita.com/Keiji_otsubo/items/12f8313faa63884bd279)
+ [force cli :カスタムフィールドの追加（参照）](https://qiita.com/Keiji_otsubo/items/547eb6e42443595b1936)
+ [force cli : グローバルセットの設定を取る](https://qiita.com/Keiji_otsubo/items/198f6eea0261495cb0eb)
+ [force cli : コンポーネントを取る](https://qiita.com/Keiji_otsubo/items/e81bf7631d1879ec4cfa)
Spring Bootで作成したウェブサービスをHerokuにデプロイするとエラーが起こる。

#詰まったこと
Spring Bootで作成したウェブサービスをHerokuにデプロイすると次のエラーが出る。

```
There was an unexpected error (type=Internal Server Error, status=500).
Error resolving template [/index], template might not exist or might not be accessible by any of the configured Template Resolvers
```

index.htmlというテンプレートが存在しない、あるいは、アクセスできない、というエラーです。

ローカルでは、問題なく動作するのですが、Herokuにデプロイした途端にこのようなエラーで出てきたわけです。


#解決方法
最初の /(スラッシュ) を取り除く！！！！！！

つまり、もし今、このように記載している場合、

```Java
@GetMapping("/sample")
public String add(Model model) {
	return "/index";
}
```

次のようにしてください。

```Java
@GetMapping("/sample")
public String add(Model model) {
	return "index";
}
```


私は、先頭の/(スラッシュ)を取り除くことで解消できましたが、
テンプレートに_(アンダーバー)を使用していると、Herokuデプロイ時にエラーが起きるようです。
[herokuにデプロイしたアプリでhtml表示時にエラーが発生した場合の原因と対処](https://raishin.xyz/heroku-error-html/)

#Spring Boot（Gradle）で作ったプロジェクトをHerokuにデプロイする方法
[こちら](https://qiita.com/dumbbell/items/c7e5162557a1a299b44b)を参照してください。

最後まで読んでくださり、ありがとうございました。

#参考
[Spring Boot app deployed to Heroku doesn't locate its' thymeleaf views](https://stackoverflow.com/questions/44308546/spring-boot-app-deployed-to-heroku-doesnt-locate-its-thymeleaf-views)
[herokuにデプロイしたアプリでhtml表示時にエラーが発生した場合の原因と対処](https://raishin.xyz/heroku-error-html/)