OmniAICreator/Qiita-1.07M huggingface dataset:
Spring Boot 2.0のカテゴリ別重要プロパティ一覧

プロパティ一覧は[公式リファレンス](https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html)をどうぞ。

気がついたものがあれば追記します。

# Web

## サーバー関連

### `server.port`
組み込みサーバーのポート番号を指定。デフォルトは8080。

### `server.servlet.context-path`
アプリケーションにコンテキストパスを指定。デフォルトはコンテキストパス無し。

### `server.servlet.session.*`
HTTPセッションに関する諸々を指定。Cookie、タイムアウト時間など。

### `server.ssl.*`
SSLに関する諸々を指定。

### `server.tomcat.*` 、 `server.jetty.*` 、 `server.undertow.*`
各サーバーに関する諸々を指定。

### `spring.servlet.multipart.*`
マルチパートリクエスト（ファイルアップロードとか）に関する設定。アップロードされたファイルの保存場所、ファイルサイズの上限など。

## Jackson

### `spring.jackson.date-format`
日付フォーマットのデフォルトを指定。 `java.util.Date` 、 Date and Time API、Joda-Timeのいずれでも指定可能。（例: `spring.jackson.date-format=com.fasterxml.jackson.databind.util.StdDateFormat`）

### `spring.jackson.time-zone`
タイムゾーンのデフォルトを指定。（例: `spring.jackson.time-zone=Asia/Tokyo`）

### `spring.jackson.property-naming-strategy`
Jacksonの`PropertyNamingStrategy`を指定。`PropertyNamingStrategy`クラスの定数名（`SNAKE_CASE`など）、または`PropertyNamingStrategy`サブクラスの完全修飾名を指定。
（例: `spring.jackson.property-naming-strategy=SNAKE_CASE`）

## Thymeleaf

### `spring.thymeleaf.cache`
Thymeleafのテンプレートキャッシュを有効化するか否かを指定。デフォルトは`true`（キャッシュする）。

### `spring.thymeleaf.mode`
Thymeleafのテンプレートモードを指定。デフォルトは`HTML`。

### `spring.thymeleaf.prefix`
`ThymeleafViewResolver`が使うプレフィックスを指定。デフォルトは`classpath:/templates/`。

### `spring.thymeleaf.suffix`
`ThymeleafViewResolver`が使うサフィックスを指定。デフォルトは`.html`。

> 「プレフィックス + コントローラーメソッドの戻り値 + サフィックス」が、使われるThymeleafテンプレートのパスになります。

<!------------------------------------------------------------------>
# Data

## データソース関連

### `spring.datasource.driver-class-name`
JDBCドライバークラス名を指定。デフォルトで自動検知されるので、明示的に指定することは少ないかも。

### `spring.datasource.url`
データベースのURLを指定。

### `spring.datasource.username`
データベースのユーザー名を指定。

### `spring.datasource.password`
データベースのパスワードを指定。

### `spring.datasource.initialization-mode`
SQLファイルを利用したデータベース初期化を行うかどうかの設定。`always`（行う）、`embedded`（組み込みDBのときのみ行う）、`never`（行わない）のいずれかを指定。デフォルトは`embedded`。

### `spring.datasource.schema`
SQLファイルを利用したデータベース初期化を行う際に、`CREATE TABLE`などのDDLが書かれたファイル名を指定。指定しなかった場合、デフォルトでクラスパス直下のschema.sqlが利用される。

### `spring.datasource.data`
SQLファイルを利用したデータベース初期化を行う際に、`INSERT`などのDMLが書かれたファイル名を指定。指定しなかった場合、デフォルトでクラスパス直下のdata.sqlが利用される。

### `spring.datasource.sql-script-encoding`
上記SQLファイルの文字コードを指定。
pandasのapplyに複数の引数を持つ関数を与える

# どういうこと？

以下のような状況のとき、

```py
import pandas as pd
df = pd.DataFrame({'x': [1, 2, 3, 4], 'y': ['A', 'B', 'C', 'D']})

def f1(a, b):
    return a * b

def f2(a, b, c):
    return a * b * c
```

`f1` や `f2` を `apply` で列に適用したいということです。

# どうすれば？

[公式pandas.Series.applyリファレンス](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.apply.html) の Examples を見ればOKです。

あえて上記の例にあてはめると次のようになります。

## 2引数の関数を`Series`へ与える場合

`args` にタプルで追加の引数を与えます。

```py
df.x.apply(f1, args=(2,))
```

または、 `apply` にキーワード引数で与えます。

```py
df.x.apply(f1, b=2)
```

出力は

```
0    2
1    4
2    6
3    8
Name: x, dtype: int64
```

## 引数が3つの場合

この場合も同様です。

```py
df.x.apply(f2, args=(2, 3))
# または
df.x.apply(f2, b=2, c=3)
```

出力は

```
0     6
1    12
2    18
3    24
Name: x, dtype: int64
```

## 各列へ一度に適用する場合

```py
df.apply(f1, args=(2,))
# または
df.apply(f1, b=2)
```

出力

```
   x   y
0  2  AA
1  4  BB
2  6  CC
3  8  DD
```
RailsでJSONを返すシンプルなWebAPIを作ってみる

## 備忘録です。

Ruby on RailsでシンプルなJSONを返すWebAPIを作ってみようと思います。コントローラーに定義したjsonを返すだけのシンプルなapi（本当だったら、dbから取り出したデータとか？）です。下記のようにjsonを定義する。

```rb
personal = {

    "smile face":[
        {
            "url":"http://localhost:3333/face/smile/smile1.img"
        },
        {
        	"url":"http://localhost:3333/face/smile/smile2.img"
        }
    ]
}
```


## 使い方

具体的には`$ curl`コマンドでapiを叩くと、画像のurlを取得できるapiを作ってみようと思います、下記のエンドポイントを指定してcurlを叩くことで、具体的には、笑ってる顔、怒ってる顔、泣いてる顔、の画像のurlを返すapiです。勿論webからもアクセスできますよ。今回はパラメーターなどの指定による、複雑なapi操作はなし。とにかくapiを叩いて結果を受け取る。

```
$ curl -i http://localhost:3333/face/angry
$ curl -i http://localhost:3333/face/sad
$ curl -i http://localhost:3333/face/smile
```

## やり方

まずは、railsのプロジェクトを作る。

```
$ rails new api-test
```

プロジェクトに移動して

```
$ cd /Users/hujisawa/Desktop/api-test
```

プロジェクトに移動して、コントローラーとビューと、ルートを作る。今回はjsonを返すのでビューはいらないから後で消す。

```
$ generate controller Face smile sad angry
```

## 実装

下記のように記述することで、jsonを返すことができる。renderがわからないければググる。personalは作ってあるjsonデータ。

```
render :json => personal
```

完成

```face_controller.rb

class FaceController < ApplicationController
  def smile

  	personal = {

    "smile face":[
        {
            "url":"http://localhost:3333/face/smile/smile1.img"
        },
        {
        	"url":"http://localhost:3333/face/smile/smile2.img"
        }
    ]
}
    render :json => personal

  end

  def sad

  	personal = {

    "sad_face":[
        {
            "url":"http://localhost:3333/face/smile/sad1.img"
        },
        {
        	"url":"http://localhost:3333/face/smile/sad2.img"
        }
    ]
}
    render :json => personal
  end

  def angry

  	personal = {

    "angry_face":[
        {
            "url":"http://localhost:3333/face/smile/angry1.img"
        },
        {
        	"url":"http://localhost:3333/face/smile/angry2.img"
        }
    ]
}
    render :json => personal

  end
end

```

# ビューは消しとこ

今回はhtmlを使わないのでこれらは消す。

<img width="307" alt="Screen Shot 2018-09-13 at 15.40.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/135794/50cd95c6-3767-cad4-c8a3-f5388aecf395.png">


# ウェブからアクセス

<img width="983" alt="Screen Shot 2018-09-13 at 15.42.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/135794/32f5b467-fd0a-c985-3c02-cc9e4cc47160.png">


# apiを叩く

```bash
$ curl -i http://localhost:3333/face/smile
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
Content-Type: application/json; charset=utf-8
ETag: W/"12078d41e23365917dee4fe08ad8508e"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 764425e8-8ed1-4aa4-a781-b0b98e8b19fd
X-Runtime: 0.005404
Transfer-Encoding: chunked

{"smile face":[{"url":"http://localhost:3333/face/smile/smile1.img"},{"url":"http://localhost:3333/face/smile/smile2.img"}]}f
```

# 参考

[JSON/XML形式で出力する](https://www.rubylife.jp/rails/controller/index7.html)
pipのupdateでエラー(アクセス権がない)

Windows10の環境で以下のコマンドでpipをアップグレードしようとすると、｢アクセス権がない｣｢PermissionError｣ではじかれる。

python -m pip install --upgrade pip

単純でした。｢管理者として実行｣していませんでした。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/102784/fa6c071d-a7a5-753b-1b72-b91c09b13525.png)

スタートメニューから｢Anaconda Prompt｣でマウスの右ボタンを押し｢ファイルの場所を開く｣を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/102784/c73ae420-fb4b-cac1-5a5d-388e07fc6d76.png)


｢Anaconda Prompt｣をマウスの右ボタンで選択し、｢管理者として実行｣を選びます。

再度｢Anaconda Prompt｣を起動し、以下のコマンドを実行

python -m pip install --upgrade pip

無事に実行できました。
[rails]既存のテーブルに新しいカラムを追加する(関連付け)

## 既存のテーブルに新しくカラムを追加したい。
今回、新規プロジェクトで作業を進めていたのだが、
既存のテーブルに新しくカラムを追加することになった。

```terminal
$rails g model add_column_title_to_article
```
こうするとmigrationファイルが作成される。
中身は

```ruby
def change
end
```

これだけなので以下を追加。

```ruby
add_column :articles, :title, :string
```

これで

```terminal
$rails db:migrate
```

を実行すると追加された。

## 同じ要領で関連付けしたいカラムも追加した。
```ruby
add_column :articles, :test_id, :references, foreign_key: true
```
これでrails db:migrateを実行しましたが、エラーになってしまいました。。

```ruby
add_reference :articles, :test1, foreign_key: true
```

こうすることによってエラーを吐くこともなく綺麗にカラムを追加できました！
ubuntu ftpd install 備忘録

授業でした内容を自分のメモとして書き残します。

---

■ **ftpd install**

ftpd インストール コマンド

```
sudo apt-get install -y vsftpd
```

■ **ftpd Configuration**

① ファイルの編集 - 訂正・追記

```
sudo vi /etc/vsftpd.conf
```
キーボードの i で入力可能にしておく

```
14、22、25、28、31、
48、54、57、60、99、
100、114、123、125、131、
142、145、149、150、151
```
上記の行の **# を削除**
末尾に、下記を追記

```
local_root=/var/www/html
seccomp_sandbox=NO
```

② ファイルの作成

```
sudo vi /etc/vsftpd.chroot_list
```
一行目に任意のユーザ名を入力し保存

■ **ftpd Confirmation**

① 設定が終了したので再起動

```
sudo service vsftpd restart
```
② ftpd のステータスを確認

```
sudo service vsftpd status
```
③ 繋がっているか確認(?)

```
telnet localhost 21
```
④ Bye

```
quit
```

あくまで自分の備忘録ですので、よろしくお願いします

---

最後までお読みいただきありがとうございました。
iOS12以降でCNCopyCurrentNetworkInfo() の注意点

## まとめ
iOS12以降、`CNCopyCurrentNetworkInfo()`でSSIDなどの情報を取得するには、Capablitiesで`"Access Wifi Information"`を追加する必要があります。

## どうしてこうなった

[CNCopyCurrentNetworkInfo()](https://developer.apple.com/documentation/systemconfiguration/1614126-cncopycurrentnetworkinfo?language=objc)のDiscussionから抜粋。

> Important
>
> To use this function in iOS 12 and later, enable the Access WiFi Information capability for your app in Xcode. When you enable this capability, Xcode automatically adds the Access WiFi Information entitlement to your entitlements file and App ID. 

## 対策
プロジェクトの`Targets` -> `Capablities`の`Access Wifi Information`をONにします。

![Capablities.png](https://qiita-image-store.s3.amazonaws.com/0/30970/8747e87b-857b-3322-644b-67cf7ace9fa3.png)
sckit-learnのPiplineを使って、カスタム前処理をモデルの中に組み込む

# はじめに
Watson Studioの機能を使うと、sckit-learnのモデルを簡単にWebサービスにすることができます。
(参考リンク) [Watson Studioでscikit-learn機械学習モデルをWebサービス化する](https://qiita.com/makaishi2/items/38371d272d752b6e7647)

便利な機能なのですが、この機能を実業務で使うことを想定すると、前処理にあたる部分もモデル処理に含めてしまいたくなります。
sckit-learnのカスタムモデルクラスと、Pipelineを使って、これを実装してみたサンプルコードをメモとして残しておきます。

(2019-01-05 FunctionTransformerを使った方式に全面書き換え)

# 前提
元データは、Irisデータセットを使います。
このデータセットは、ご存じのとおり、4次元の入力データですが、このうち、1番目と3番目の列は、x に対して np.log(x + 1)に値を変更し、これを後段のモデルの入力とします。
後段のモデルはパラメータすべてデフォルト値のSVMとします。
(業務的には何の意味もないです。単なるサンプルコードと考えて下さい)
動作確認はWatson Studio上のJupyter Notebookで行っています。

# データ準備
この部分は特別なことは何もしていないので、解説は省略します。

```py3
from sklearn.datasets import load_iris
iris = load_iris()
import pandas as pd
X = iris.data
y = iris.target
```

# フィルター関数の定義
FunctionTransformerの引数として使う、フィルター処理の実装を行う関数です。

```py3
import numpy as np

# フィルター関数の実装例
# 　(1列名と　3列名に　 np.log1pをかける)

def select_log1p(X):
    # 元の変数に副作用を与えないため、コピーを作成
    XX = X.copy()
    # 1列名と　3列名に　 np.log1pをかける
    XX[:,[0,2]] = np.log1p(XX[:,[0,2]])
    # コピーした変数を戻す
    return XX
```

# パイプラインの定義
``make_pipeline``関数を使ってパイプラインの定義を行います。
今回は、前処理の関数1段だけとなっていますが、フィルター関数は複数段入れることも可能です。

```py3
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import FunctionTransformer
from sklearn.svm import SVC

# Pipelineの定義
pipe = make_pipeline(
    FunctionTransformer(select_log1p), SVC())
```

# 呼出し方法
このようにして定義したオブジェクト``pipe``は、通常のモデルのように、``fit``,``predict``,``score``関数が利用可能です。
具体的には、次のようなコードになります。

```py3
# 学習実施
pipe.fit(X, y)

# 予測実施
pipe.predict(X)

# 精度評価
pipe.score(X, y)
```

# (おまけ)Webサービス化
Watson Machine Learingを使っている場合、このような方法で作ったPipelineオブジェクトは、Modelとしての保存やWebサービス化が可能です。
具体的な手順については[Watson Studioでscikit-learn機械学習モデルをWebサービス化する](https://qiita.com/makaishi2/items/38371d272d752b6e7647)を参照して下さい。

## おまけのおまけ
Watson Machine Learningにsckit-learnで作ったモデルを登録する場合、**ライブラリのみ使ってモデルを作る**のであれば可能なのですが、**独自クラスを拡張してモデルを作る**ことをやってしまうと、登録不可となります。この記事自身も最初は独自クラス実装で書いていたのですが、この理由でWatson Machine Learningへのモデル登録ができないことに気付いて、コードを全面的に見直した次第です。
【Laravel】マイグレーションを使用する際にintegerのサイズの指定方法に注意

integerのサイズ指定で困ったことがあったため備忘録として残します。
[結論だけ見たい人はクリックME](#結論)

#【概要】
laravelの便利機能の一つマイグレーション。
多くの人は新規開発の際、これを利用してDB構築をする人が多いと思います。
ｇ
その際、カラムで指定した型の長さを明示的に指定する場合もあります。
（サーバの記憶領域が多きくなった昨今、意味もなく長さ指定するのは逆にNG）

特にでコード値を保存しますよーってパターンはほぼ必ずあると思います。
例えば、都道府県マスタを作成する際、皆さんほぼほぼ`JIS X0401` をベースにテーブル定義をすると思います。

```php5
    //prefsマイグレーション 
    public function up()
    {
        Schema::create('prefs', function (Blueprint $table) {
                // JIS X0401に準拠して01～47が入るためstring（verchar(2)）で定義
        	$table->string('pref_code',2)->unique()->comment('都道府県コード');
        	$table->string('pref_name')->comment('都道府県名');
        });
    }
```
ミニマムですが、基本的に上記のような書き方になると思います。

では、今度は性別マスタを例にあげてみます。（実際はこんなマスタはACCESS以外作らないと思う）
性別も一応ISOが定めているため、`ISO 5218` をベースに定義してみましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/213462/f5e0377c-41ba-b60a-005c-178a65ba60dc.png)

コードは0、1、2、9の整数を使用するので今度は整数型で定義しましょう。

```php5
    //sexマイグレーション 
    public function up()
    {
        Schema::create('sex', function (Blueprint $table) {
                // ISO 5218
        	$table->integer('sex_code')->length(1)->unique()->comment('性別コード');
        	$table->string('sex_name')->comment('名称');
        });
    }
```

はい。たぶんミニマムだとこんな感じになると思います。

では、最後に`小数を扱うカラム` の場合どうなるのか？
面倒なので、テーブルは適当。

```php5
    //hogeマイグレーション 
    public function up()
    {
        Schema::create('hoge', function (Blueprint $table) {
                // 総桁8の小数点以下2桁以内
                $table->float('column1', 8, 2);
                // 総桁15の小数点以下8桁
                $table->double('column2', 15, 8);
                // 総桁5の小数点以下2桁
                $table->decimal('column3', 5, 2);
        });
    }
```

こういう感じなります。

#【結論】
はい。感のいい方は気が付いていると思いますが、
`integer`はサイズを指定するとき`length(N)`でチェーンしなきゃあかん。
こいつ以外のやつはご紹介した通り、第2引数以降でサイズの指定をしているのになんでだよ。

Laravelがそうしろっていうんだから仕方ない。
はい。

ということで、長くなりましたが、間違っても`integerの第二引数にサイズを指定しない`ようにしましょう。
間違った場合どうなるのって？
早い話が、主キー扱いになって`php artisan migrate`コマンドたたいた時に「なんで？なんで？エラーなんで？？」ってなります。
まぁ、一緒に実行されたクエリも帰ってきますが、そのクエリを見るとおかしいのはわかりますが、サイズの指定方法が間違っているとマイグレーションファイルのどこの記述がおかしいのって？なります。

こんなことに1時間費やした。


以上です。

余談だけど、〇〇コードを使うってなったらDBだろうが何だろうがJISとかISOとかIEEEだろうが（IEEEはたぶんコード関係はないと思う）標準化機構によって定められた規格ないかな～？って思考をもってコーディングしていきたいです。
AWS 認定ソリューションアーキテクト – アソシエイトを取得した話

転職した先の会社の命令（？）もあり、ソリューションアーキテクト – アソシエイトを受けてきました。
結果は無事に合格したのですが、その時の体験などを残しておきます。

# 勉強方法
- 以前、Architecting on AWS （https://aws.amazon.com/jp/training/course-descriptions/architect/ ) を受けていました。その時の資料を再度読み直し＆記憶が怪しいところに関しては実際にコンソールを操作し、思い出していました。
- 公式で出している練習問題　https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/ を解きました。現状、英語でしか公開されていないのですが　こちら　（　https://dev.classmethod.jp/cloud/aws/saa-february-2018-sample-questions/ ）にて和訳していただいているので、これを解いてみるのがおすすめです。
- 社内にある問題集（弊社はかなりの人がアソシエイトを持っているので、過去のノウハウいっぱい）を解きました。
- 社内の問題集を解いてわからないところ、疑問に思ったことはAWSの各サービスのQAページ　（具体的にS3だったら https://aws.amazon.com/jp/s3/faqs/?nc=sn&loc=6 ここ)といったように具体的なQAを見ていました。
- 以前からAWSでサービスを作っていたため、細かいところのみ押さえた形だったので実際には15時間程度しか勉強していないと思います。
大まかな勉強方法はざっくりこんな感じです。

# 試験内容の改定について
実は最近、アソシエイト試験が改定されました。実際に受けて見た感想では、kinesisや Beanstalkといった新しいサービスがどのような用途で使われるものなのかを問われる問題が入ってきたように感じました。
私は古い問題ではどのようなものが出されていたかはわかりませんが、ここ数年で追加された新サービスがどのように使われるのかといった点は押さえておく必要があると感じました。

# 当日
Kiosk端末で受験しましたが、受験会場には30分ぐらい前には行っておくべきだと感じました。案内のメールですと１５分前と記載がありますが、いろいろと細かい受付があるため、実際には20分〜30分前にはついていて損はないと思います。
kiosk端末の前で免許証やクレジットカードをかざす必要があるのですが、割と煩雑でかなり迷いました。その段階から落ち着いていられると良いと思います。
私が受験した際、私が使っていたkiosk端末が３回フリーズしました。（そのうち２回はPC再起動）
そういうこともあるので、困った時の手段は覚えておくことをお勧めします。事前に説明されますが、ちゃんと読んでおくこと。
私の場合、時間は割と余りました。一回問題が見直せる程度には。なので、ゆっくり考えて解いた方が良いと思います。


# 結果
無事に合格しました。試験終了時に、あなたは合格しました等の表示がでますが、正直信用できなかった私がいます。
1〜２日後にはちゃんとした試験結果をダウンロードできるようになり、そこでやっと自分がやったことがわかった感じでした。

# あとがき
本当にざっくりですが、こんな感じで無事に受かりました。
次は、AWS 認定ソリューションアーキテクト – プロフェッショナル を取りたいと思います。
https://aws.amazon.com/jp/certification/certified-solutions-architect-professional/
今度はあまり日本語の資料がないようで、英語と戦う感じになりそうですが、頑張りたいと思います。
9/13　Webpack　講義

#Webpack
##とは
JavascriptとCSSのファイルを一つにまとめてくれるやつ
→一つのJavScriptファイルにまとめてくれる！
##使用するメリット
・機能ごとにファイルを分割する開発ができる
分割して開発→Webpackで最後にまとめる

・開発作業の分担やテストが楽になる

・変数の競合や名前空間の汚染を防ぐ
→一つのファイルにまとめることが前提なので名前とか被らないように

##実際の使用 
参考
https://dackdive.hateblo.jp/entry/2016/04/13/123000#webpackconfigjs-%E3%81%AE%E4%BE%8B


webpack.config.jsの例
moduleのファイルをその上のentryのファイルにまとめる

module：どのファイルをまとめるのかの部分
exclude:どのファイルはまとめないか（除外する）

・GoUnite
React
・Reach@
ES06を使ってる
entryにapp.jsがある

読み方がわかる：どのJavaScriptファイルたちが一つのJavascriptファイルにまとめられているかわかる状態
↑
これをとりあえず目指す

###コマンド

webpack__watch:一回これを打ったら常にwebpackが実行されてるようになる



#パッケージ管理ツール
パッケージ：追加機能（Atomの日本語対応パッケージみたいなイメージ）

魔法の言葉：魔法の効果
がバーッと並んでるのをまとめて管理してるイメージ

PHP：composer
Python:pip
Javascript:npm


・ローカルとグローバルでのインストールがある
ローカル：プロジェクトごとにこの機能を使いたい→プロジェクト単位にパッケージをインストール
グローバル：パソコン自体にその機能を入れたい→パソコン全体にそのパッケージをインストール

・開発用と公開用でもインストールが分かれる
jdbcRunnerでPostgresql性能検証(Tiny TPC-C)

#目的
jdbcRunnerを使ってPostgresqlの性能検証のための手順を作成。
jdbcRunnerの「Tiny TPC-C」を使った検証手順。

#前提条件
Postgresql環境+検証用ユーザ
jdbcRunnerダウンロード

※Postgresql検証用ユーザ作成は[こちら](https://qiita.com/s-kin/items/397138a264334077e745)参照

#目次


#1. DB準備
* データベース作成
Postgresqlに検証用データベースを作成します。

```sql
postgres=# create database tpcc;
CREATE DATABASE
```

* 検証用ユーザに新データベース権限を付与します。

```sql
postgres=# grant all on database tpcc to jdbc_runner;
GRANT
```

* 検証用ユーザで検証データベースへログインします。

```
Server [localhost]:
Database [postgres]: tpcc
Port [5432]:
Username [postgres]: jdbc_runner
Client Encoding [SJIS]:
ユーザー jdbc_runner のパスワード:
psql (10.4)
"help" でヘルプを表示します。

tpcc=>
```

* ターミナルからjdbcRunnerを環境変数CLASSPATHへ追加します。

```sh
$ export CLASSPATH=jdbcrunner-1.3.jar
```

* テーブル作成、データロードします。

jdbcRunnerのscripts/tpcc_load.jsファイルを検証環境に合わせて修正します。

```js
...
// MySQL
// var jdbcUrl = "jdbc:mysql://localhost:3306/tpcc?useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true";

// PostgreSQL
 var jdbcUrl = "jdbc:postgresql://localhost:5432/tpcc";

//var jdbcUser = "tpcc";
var jdbcUser = "jdbc_runner";
// var jdbcPass = "tpcc";
var jdbcPass = "********";
...
```

下記スクリプト実行してテーブル作成、データロード実施します。

```sh
$ java JR scripts/tpcc_load.js
```

#2. 性能検証
* jdbcRunnerのscripts/tpcc.jsファイルを検証環境に合わせて修正します。

```js
// MySQL
// var jdbcUrl = "jdbc:mysql://localhost:3306/tpcc?useSSL=false&allowPublicKeyRetrieval=true";

// PostgreSQL
var jdbcUrl = "jdbc:postgresql://localhost:5432/tpcc";

//var jdbcUser = "tpcc";
var jdbcUser = "jdbc_runner";
//var jdbcPass = "tpcc";
var jdbcPass = "********";
```

* 性能測定スクリプト実行

```sh
$ java JR scripts/tpcc.js
```

#参考内容

[10. テストキット Tiny TPC-C](https://dbstudy.info/jdbcrunner/docs_ja/tpc-c.html)
AWS AppSyncでElasticsearchから検索結果とtotal件数を取得するresponse mapping template.

AWS AppSyncでElasticsearchを利用していると検索結果だけでなく、合計件数も取得したくなる場合があります。
AppSyncでは、response mapping templateの定義を調整することで実現できます。

検索結果とあわせて合計件数を取得するよう定義したresponse mapping templateは、以下。

```velocity
{
  #set($total = $context.result.hits.total)
  #set($list = [])
  #if($total > 0)
    #foreach($entry in $context.result.hits.hits)
       $util.qr($list.add($entry.get('_source')))
    #end
    "list" : $util.toJson($list),
    "total" : "$total"
  #end
}
```

##### templateの説明

Elasticsearchでの検索結果が `$context.result` に格納されているので、
そこから `total` と 該当データをlistとして取得し、まとめて`json objects`で返します。

* AppSyncで戻されるjsonのイメージ

```json

{
  "list": [],
  "total": 0
}
```

`total`以外にも `max_socre`, `took`等もあわせて取得したい場合も同じように調整することで対応できます。

AppSyncのresponse mapping templateを作成する時は、**どのようなjsonを返すのか** をイメージしながら考えると、定義しやすいです。

##### 参考

https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/resolver-mapping-template-reference-elasticsearch.html
https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/resolver-util-reference.html
Bitrise(fastlane)でitc_providerを指定しないとAppStore Connectへのアップロードに失敗する


## 概要

普段Bitriseでアップロードしていて問題なくできていたのが、2018年9月中旬頃に急にエラーできなくなった。
エラーの内容は以下の通り。

> Your Apple ID account is attached to other iTunes providers. You will need to specify which provider you intend to submit content to by using the -itc_provider command. Please contact us if you have questions or need help. (1627)

iTunes providersというのがよくわからないが、**どうも `-itc_provider` に何かを渡せば良いらしい。**

調べると **このオプションでAppleのTeam IDを渡せば良いらしい。**
Team IDは[Apple Dev CenterのMembershipページ](https://developer.apple.com/account/#/membership/)から確認できる。

**そもそもBitriseのワークフロー内ではTeam IDを指定する箇所があってそこには記入済みだったが、どうも追加でここにもTeam IDを渡してあげる必要があるらしい。**

Appleの仕様変更かFastlaneまたはBitriseのワークフローになにかバグがあるのかもしれないが、調べた限りではあまり情報がなかった。
[FastlaneのISSUE](https://github.com/fastlane/fastlane/issues?utf8=%E2%9C%93&q=itc_provider)はしばらく見ておこうと思う。

![unspecified.png](https://qiita-image-store.s3.amazonaws.com/0/17214/5157337a-c825-9a9a-6312-e134652feaab.png)

よってBitriseでは "Additional options for deliver call" の欄に `--itc_provider [YOUR TEAM ID]` を設定すると、アーカイブアップロードが正常に完了する。
(エラーではハイフンが1つだが2つが正しいので注意)

## 参考情報

- https://twitter.com/Cocoanetics/status/1035806188984840192
- [Deploy to iTunes Connect Error \- Issues \- Bitrise Discussions](https://discuss.bitrise.io/t/deploy-to-itunes-connect-error/4774/11)
- [Unable to submit app \|Apple Developer Forums](https://forums.developer.apple.com/thread/107991)
mysqlの frm ibd からテーブルを復活させたい！

# 前置き
## ことの起こり
ある日、PCが再起動し、その後にmysqlを起動しようとした

```
$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/uhuko.local.pid).
```

ぐええええ:innocent:

## 原因
`cat /usr/local/var/mysql/uhuko.local.err`

```
[ERROR] [MY-012526] [InnoDB] InnoDB: Upgrade after a crash is not supported. This redo log was created with MySQL 5.7.17. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html
[ERROR] [MY-012930] [InnoDB] InnoDB: Plugin initialization aborted with error Generic error.
[ERROR] [MY-011013] [Server] Failed to initialize DD Storage Engine.
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
[ERROR] [MY-010119] [Server] Aborting
```

## 落ち着いた対処
```
$ brew uninstall mysql --force
$ rm -rf /usr/local/var/mysql
$ brew install mysql
```

# データベースが消えてしまった！
奇跡的に`.frm` `.ibd`は残っているのでここから復活させよう
同名のdatabaseを作成しそのフォルダに`.frm` `.ibd`をコピーさせると復活する？
そんなことはなかった
 
# `.frm` `.ibd`からの復元
https://teratail.com/questions/7925
[ここ](https://teratail.com/questions/7925)を参考にDDLを`.frm`ファイルから取り出し、次に


>テーブルを作成したら、以下のコマンドをMySQL で実行して、作ったテーブルの 
テーブルスペースNoを調べてください。 
mysql> select SPACE,NAME from information_schema.innodb_sys_tablespaces; 
テーブルスペースNoが一致したら mysqld を停止して、元の復元したいテーブルの.ibd と.frm を 
新しくできた.ibd と.frm に上書きしてください。

```
$ od -Ax -j 16418 -N4 -t x1 example_table.ibd
0 0 0 0 5f
```

**5f**


> テーブルスペースNoが一致したら

**5f = 95**

つらくない？

## 解決策の解決策
https://stackoverflow.com/questions/26868956/restore-table-structure-from-frm-and-ibd-files

まず以下を実行する

```sql
ALTER TABLE example_table DISCARD TABLESPACE;
```

`.frm` `.ibd`を上書きし

```sql
ALTER TABLE example_table IMPORT TABLESPACE;
```

復活！


# まとめ
`.frm` `.ibd`からは以下の手順で復活できる

1. 同名のdatabaseを作成する  
2. 同じ定義のテーブルを作成する（`cat example_table.frm` などでDDLを手に入れる）
3. `ALTER TABLE example_table DISCARD TABLESPACE;` でTABLESPACEを消す
4. `.frm` `.ibd`を上書き
5. `ALTER TABLE example_table IMPORT TABLESPACE;`でファイルのTABLESPACEを取り込む
angularのバージョンアップ

#経緯
ng build --prodしたら挙動が変わっちゃう事象に遭遇
→もしかしたらangular CLIのバージョンめっさ古いからじゃね？
→バージョンアップして試してみよう(v1.7.4→6.2.1)

##結論
###解決せず。
最適化め、なんてことをしてくれたんだ…！※解決しました→[prodビルドはイベント名も節約](https://qiita.com/aoi_erimiya/items/09e8dcaeb5cad987abb8)
開発ビルドとか--aotだと問題ないんだけど、
--prodの時だけ何か最適化されて、navigationEndイベントが拾えなくなるっぽい。

とはいっても、アップデート作業は勉強になったのでメモ。

##手順
###コマンドを順番に実行

```
npm uninstall -g @angular/cli
npm cache verify
npm install -g @angular/cli@latest
npm install @angular/cli@latest
ng update @angular/cli
```
→.angular-cli.jsonがangular.jsonに進化する

```
ng update @angular/core
ng update @angular/material
npm install -g rxjs-tslint
rxjs-5-to-6-migrate -p src/tsconfig.app.json
```

##秋のエラー収穫祭
コマンド実行だけで終わる人もいるかもしれない。
主にrxjs周りでエラーが豊作だったので、刈り方をメモ。

###Error: Cannot find module 'typescript'
https://github.com/clausreinke/typescript-tools/issues/59
なんかTypeScriptがなくなるっぽい？ので、素直にインストール
↓↓↓

```
npm install -g typescript
```

###error TS2305: Module '"/node_modules/@angular/core/core"' has no exported member 'transition'.
https://stackoverflow.com/questions/50184274/update-angular-5-to-angular-6-error
アニメーション周りのモジュールがangular/animationsに移動したらしいので、import書き換え。

```ts

import {
    Component, OnInit, Input, Output, OnChanges, EventEmitter,
    trigger, state, style, animate, transition
} from '@angular/core';
```
↓↓↓

```ts

import {
  Component, OnInit, Input, Output, OnChanges, EventEmitter
} from '@angular/core';
import {
  trigger, state, style, animate, transition
} from '@angular/animations';
```

###Property 'of' does not exist on type 'typeof Observable [duplicate]
https://stackoverflow.com/questions/38067580/property-of-does-not-exist-on-type-typeof-observable
またrxjs周りの仕様変わってたんだねぇ。

```ts

import { Observable } from 'rxjs/Observable';
...
return Observable.of(...);
```
↓↓↓

```ts

import { Observable, of } from 'rxjs';
return of(...);
```

###Property 'map' does not exist on type 'Observable<Response>'. 
https://github.com/angular/angular/issues/15548
ofと同じかと思ってたらなんか違うし！

```ts

import { Subscription } from 'rxjs/Subscription';
...
this.http
  .get('/getApi', {})
  .map(...)
```
↓↓↓

```ts
import { Subscription } from 'rxjs';
import { map } from 'rxjs/operators';
...
this.http
  .pipe(
      .get('/getApi', {})
      .map(...)
   )
```

##おわりに
頑張ってrxjsのインポート範囲削るために'rxjs/***'書いたのに、rxjs-5-to-6-migrateが元通りに書き戻してくれた。
でもコマンド実行だけで書き換えてくれるのはありがたい。
Spring Boot(Kotlin) + GradleでAPIを書いてAzure Web Appにデプロイする。

## 環境構築
IntelliJをつかう。

### 1. プロジェクトをつくる
Spring Initializer https://start.spring.io/  
で`Gradle`、`Kotlin`と、プラグインに`Web`を設定してダウンロード。  

### 2. プロジェクトを読み込む
IntelliJで`File`→`Open`で作成したプロジェクトを開く。

Use auto-importにチェックを入れる。
![](https://i.imgur.com/E9ePH7I.png)



## 実装

一通り実装すると`src/main/kotlin`配下はこんな感じになる。  

```
- com
  - example
    - BootApp.kt
    - MyController.kt
    - Main.kt
```
### メインクラス（Main.kt）
おまじない。

```kotlin:Main.kt
fun main(args: Array<String>) {
    runApplication<BootApp>(*args)
}
```

### BootApp.kt
おまじない。  

```kotlin:BootApp.kt
@SpringBootApplication
class BootApp : SpringBootServletInitializer()
```

### コントローラクラス（MyContoroller.kt）
この例だと`localhost:8080`に行くと"Hello"が返ってくる。

```kotlin:MyController.kt
@RestController
class MyController {

    // URLに対応する処理を書いていく
    @RequestMapping("/")
    fun hello(): String {
        return "Hello"
    }
    
    // http://localhost:8080?name=hoge
    // みたいにGETパラメータをもらいたいときはこう
    @RequestMapping("/paramTest")
    fun paramTest(@RequestParam(value = "name") name: String): String {
        return name
    }
}
```

## ローカルサーバで動作確認
gradleで`bootRun`タスクを実行するだけ。  
コマンドラインでやりたい場合はこう↓  

```bash
./gradlew bootRun
```

実行すると`http://localhost:8080`で立ち上がる。


## Azureへデプロイ
`war`をつくってAzure Web Appに置く手順。  

### 1. warプラグインを入れ、warを有効にする。
```groovy:build.gradle
apply plugin: 'war'
war {
	enabled = true
}
```

### 2. warをつくる
gradleで`war`タスクを実行する。  

`build/libs`の中に`war`が生成される。


### 3. Azure Web Appのアプリケーション設定でJava, Tomcatを設定する
![](https://i.imgur.com/PMgpGxe.png)

### 4. warをAzure Web Appの`wwwRoot/webapps`におく

App Service Editorを開く。  

![](https://i.imgur.com/MTyylyD.png)


App Service Editorを開いたら、エクスプローラから`war`をドラッグ&ドロップする。  
※画像ではすでに`practice-0.0.1-SNAPSHOT`フォルダに展開されているが、`war`を置いたあとアプリのURLへ1度行かないと展開されないので注意。  

![](https://i.imgur.com/0SJokc7.png)


### 5. Web AppのURLへ行く
warが展開される。  
結構時間かかる場合もあるのでページ読み込み終わるまで気長に待つ。

URLは以下のようになる。
`https://***.azurewebsites.net/[warファイルの名前]/`


## 参考
1. Spring Boot (Kotlin) はじめの一歩  
https://qiita.com/Yuki10/items/aef152f300a500b85725
サーバ間の全てのファイル差分を調べる

## 背景
Active・Standbyサーバ間のファイル同期がうまくいっておらず、インフラ初心者が調査依頼を受けた。
稼働サーバであったこともあり高負荷は掛けられないようで、、、

- SSHで繋いで全ファイルのDiff取るのは負荷が過ごそう。（分割は時間かかりそう）
- 純粋に全ファイル落としてローカルでDiff取ろうにもネットワークの帯域制限に引っかかってDL終わらない。

どうしたものかと考えたあげくこうなった。

## やったこと

１．2サーバでファイルのハッシュ値を出力する。

```BASH
$ find / -type f -not -path "{除外パス}" | xargs md5sum | sed 1d | awk '{print $2,$1}' > /tmp/active_md5sum.txt
$ find / -type f -not -path "{除外パス}" | xargs md5sum | sed 1d | awk '{print $2,$1}' > /tmp/standby_md5sum.txt
```

２．Diff比較をして差分が出れば中身に違いがあることがわかる

```BAS
$ diff tmp/active_md5sum.txt /tmp/standby_md5sum.txt
```
```DIFF
# example
- /etc/aliases 5cf86e039c230ed8dfc36e1ec8cef8ad
+ /etc/aliases 6d7ead55409c2959da7f984c607d2a45
```

３．実際に差分のあったファイル持ってきて中身を比較

## おわりに
こんなやり方で良かったのか、もっとスマートな方法があるんじゃなかと思いながらも妥協した。
~~そもそも同期してないってどうなの~~

こんなやり方あるよ。というものがあったら教えてください。m(_ _)m
[PB12.6] "Powerbuilderは動作を停止しました” 解決策まとめ

ほぼ自分用

##### ●動作環境
- Winodws 10(Pro 64bit)
- SAP Powerbuilder 12.6 Build 4035J

##### ●事象
Powerbuilderを利用中、Windowsアプリケーションあるあるな以下のダイアログが出て、
強制終了せざるを得なくなる

```
SAP Powerbuilder は動作を停止しました。
（以下略）
```
##### ●原因
原因不明（技術情報にも原因記載なし）

##### ●対応

[ググると大抵引っかかる技術情報](http://www.powerbuilder.jp/technical/)に近しいものがありました
- [PowerBuilderで、プログラムのデータウィンドウでエラーが発生。](http://www.powerbuilder.jp/technical/2011/05/tech000-2454.html)

以下のレジストリパスに存在するキーのうち、おかしくなったと思われるキーを、
キーごと消してPowerbuilderを再起動します。
（必ずバックアップは取っておきましょう）

```
HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\[PBVer(12.6なら12.6です)]\Layout\Default\
```

挙動を見るに、レイアウト情報か何かを保持するキーのようですがこれで治る理屈は不明。

今までの経験的に、データウィンドウを開けなくなったときはDatawindowキーを、
関数などのエディタがおかしくなったときは、Functionキー（うろ覚え）を削除したら解決しました。
【3Dプリンタ】【メモ】

#印刷失敗が多いケース
印刷の際に同じ層で頻繁に上下が繰り返される(複数のオブジェクトを一気に印刷しようとする)
しょっぱなからサポートが多い
密閉空間でサポートが多い
ギヤの掃除をしていない
管の中でフィラメントの抵抗が大きくなっている
フィラメントのリールの自重でフィラメントのロードがうまくいっていない

#なぜか反るケース
もともと平面のオブジェクトだけれども、斜めになっていてサポートが発生してラフト自体が反り始める

#超絶レアケース
エクストルーダに金属ブラシの破片が入り込み、フィラメントがソフトクリーム上に出力されて印刷が失敗する

#ダヴィンチメモ
ダヴィンチproは3Mのシートを貼ればスティックのりを塗り塗りしなくて良い

#印刷メモ
7cm立法とかのキューブを印刷するとなかなか剥がせなくて泣く
→ヘラでがんがんやりより、握力でがしっと上斜めのベクトルで力を持っていくと、"浮く"部分があるので、そこにヘラを突っ込む

#この道具は用意しとけ!!
ニッパー(100均のは切断できないので論外)
ラジオペンチ
ピンセット(先が折れ曲がっているタイプ)
スティックのり"シワなしPiTS"(アスクルにもある) ダヴィンチ+3Mのプラットフォームシートなら不要
[3M 3Dプリンタプラットフォームシート](https://www.amazon.co.jp/3M-3D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%B7%E3%83%BC%E3%83%88-3%E6%9E%9A%E5%85%A5-PLA%E5%AF%BE%E5%BF%9C-3099AB/dp/B01M11XI4Y/ref=sr_1_1?ie=UTF8&qid=1536814941&sr=8-1&keywords=3D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%80%803m)

#なんか白だけちがくね？
白フィラは他の色と素材が違ったりする

#オススメのフィラメントplz
[最近教室で使っているpla "3D Hero" 最近値上がりしまくり](https://www.amazon.co.jp/3D-Hero-%E3%83%95%E3%82%A3%E3%83%A9%E3%83%A1%E3%83%B3%E3%83%88PLA-%E7%9C%9F%E3%81%AE%E9%87%91%E3%83%A1%E3%83%83%E3%82%AD%E3%80%81%E6%BB%91%E3%82%89%E3%81%8B%E3%81%AA%E8%A1%A8%E9%9D%A2%E3%81%AB%E8%BF%91%E3%81%84%EF%BC%89%E3%80%81PLA%E3%82%B9%E3%83%95%E3%82%A3%E3%83%A9%E3%83%A1%E3%83%B3%E3%83%881-75mm%E3%80%81%E7%84%A1%E8%87%AD%E3%80%81%E5%AF%B8%E6%B3%95%E7%B2%BE%E5%BA%A6-0-02mm%E3%80%813D%E5%8D%B0%E5%88%B7%E3%83%95%E3%82%A3%E3%83%A9%E3%83%A1%E3%83%B3%E3%83%88%E3%80%812-2LBS%EF%BC%881KG%EF%BC%89%E3%81%AE%E3%82%B9%E3%83%97%E3%83%BC%E3%83%AB%E3%83%95%E3%82%A3%E3%83%A9%E3%83%A1%E3%83%B3%E3%83%88%E3%80%823D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%83%BC%E3%80%813D%E3%83%9A%E3%83%B3%E3%80%81100%EF%BC%85%E3%83%90%E3%83%BC%E3%82%B8%E3%83%B3%E5%8E%9F%E6%96%99/dp/B07CPYRC71/ref=sr_1_4_sspa?ie=UTF8&qid=1536814354&sr=8-4-spons&keywords=PLA%E3%80%80%E3%83%95%E3%82%A3%E3%83%A9%E3%83%A1%E3%83%B3%E3%83%88&th=1)
[タイムセールで見つけた "SUNLU" PLA+ いっかい試そう](https://www.amazon.co.jp/SUNLU-3D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A3%E3%83%A9%E3%83%A1%E3%83%B3%E3%83%88PLA-Plus%E3%80%811-75mm-PLA%E3%83%95%E3%82%A3%E3%83%A9%E3%83%A1%E3%83%B3%E3%83%88%E3%80%813D%E3%83%95%E3%82%A3%E3%83%A9%E3%83%A1%E3%83%B3%E3%83%88%E4%BD%8E%E8%87%AD%E6%B0%97%E3%80%81%E5%AF%B8%E6%B3%95%E7%B2%BE%E5%BA%A6-0-02mm%E3%80%813D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%81%8A%E3%82%88%E3%81%B33D%E3%83%9A%E3%83%B3%E7%94%A8LBS%EF%BC%881KG%EF%BC%89%E3%82%B9%E3%83%97%E3%83%BC%E3%83%AB3D%E3%83%95%E3%82%A3%E3%83%A9%E3%83%A1%E3%83%B3%E3%83%88%E3%80%81%E3%82%B7%E3%83%AB%E3%83%90%E3%83%BC%E3%82%B0%E3%83%AC%E3%83%BCPLA/dp/B07F6623KW/ref=sr_1_8?ie=UTF8&qid=1536814354&sr=8-8&keywords=PLA%E3%80%80%E3%83%95%E3%82%A3%E3%83%A9%E3%83%A1%E3%83%B3%E3%83%88&th=1)
Seabornで相関係数行列を書こう

初投稿です。お手柔らかにお願いします！

今日は、kaggleのタイタニックでとあるkernelsを読んでいたところ、
Seabornというライブラリを使った、相関係数行列の作成があったので詳しく見ていきたいと思います。

参考:
https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python

環境：kaggleのkernel(仮想環境）


##相関係数行列、書けると何が嬉しいの？
機械学習において余計なパラメータは計算リソースが増える・過学習の可能性が増えるので、
減らしたいものです。

相関が強い二つパラメータは、片方のパラメータで説明できてしまうので、
必要が薄いのです。

相関係数行列を表示すると、パラメータ毎の相関が一発でわかるので、
パラメータ選定の助けになります。


##seabornとは？

seabornとは、pythonのライブラリの一つで、
matplotlibのラッパー的なやつです。

matplotlibより、簡単に綺麗にグラフの描画が出来ます！
細かい設定はmatplotlibのが出来るけどざっくり書くには見やすく、簡単にかけてお勧めです。

参考:
https://myenigma.hatenablog.com/entry/2015/10/09/223629

##コードとグラフの出力結果

入力（train)↓
trainはpd.Dataframe型に格納されており、全て数値になるように前処理しています。
![入力.PNG](https://qiita-image-store.s3.amazonaws.com/0/259417/f713e2b2-b41d-4159-9786-7956dd3aaa37.png)



```python:code.py
import seaborn as sns
import matplotlib.pyplot as plt

colormap = plt.cm.RdBu
plt.figure(figsize=(14,12))
plt.title('Pearson Correlation of Features', y=1.05, size=15)
sns.heatmap(train.astype(float).corr(),linewidths=0.1,vmax=1.0, 
            square=True, cmap=colormap, linecolor='white', annot=True)
```
出力↓

![__results___10_1.png](https://qiita-image-store.s3.amazonaws.com/0/259417/31012dcc-cbfe-963a-17d2-4c35267d16a7.png)

##詳しい説明
細かく見ていきましょう。

```python:first.py
colormap = plt.cm.RdBu
```
plt.cmでカラーマップを呼び出しています。
RdBuとはどんな色を使うかの指定です。
今回はRed⇔Blueのカラーマップなのでこのように指定しています。
他の指定をしたい場合は下記のサイトにまとまっています。
参考:
https://matplotlib.org/examples/color/colormaps_reference.html

---


```python:second.py
plt.figure(figsize=(14,12))
plt.title('Pearson Correlation of Features', y=1.05, size=15)
```

描画するサイズとタイトルを設定しています。
これはmatplotlibの設定ですね！


---


```python:third.py
sns.heatmap(train.astype(float).corr(),linewidths=0.1,vmax=1.0, 
            square=True, cmap=colormap, linecolor='white', annot=True)
```

この一文でheatmapが書けてしまいます！
各引数を見ていきましょう。


`train.astype(float).corr()`
これによって、各列の相関係数が計算されています。
DataFrame型のメソッドの一つです。

参考:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.corr.html

`linewidths=0.1`
格子線の太さを指定しています

`vmax=1.0`
相関係数の最大値を指定してます。右側のバーの一番上の値と思ってOKです。

`square=True`
正方形で出力されます

`cmap=colormap`
色の指定です。matplotlbのカラーマップを使用します。

`linecolor='white'`
格子線の色指定です。

`annot=True`
各要素に値を表示するかどうかを指定できます。

##終わり

こんなに簡単に書けるなんて驚きですね！

kaggleのkernelsは英語でちょっと抵抗があるかと思いますが、
強いデータサイエンティストの華麗なPython捌きを無料で見ることが出来るため、
非常にお勧めです！

初投稿ゆえ、見づらい部分などありましたらご指摘いただけたら幸いです！
StravaAPIを簡単に扱えるRubyGemを作った

## がんばルビィ
![がんばルビィ！](
https://raw.githubusercontent.com/aimerald/struby/master/images/do_your_rubesty.jpg?token=AHmiDaD_Kv_M-nkcmKKQTUH2vyeZdjaGks5bnR89wA%3D%3D)
[https://github.com/aimerald/struby](https://github.com/aimerald/struby)

## 概要
肉体派エンジニアとして日々のロードバイクでのトレーニングに明け暮れている私はStravaというSNSを使ってトレーニング(主にライドの)を記録している。[Strava](https://www.strava.com/)
Stravaは自転車に機材がついていれば走行距離やケイデンス(1分でペダルを何回回したか)とかスピードとか出力とかを記録できる。GPS対応のスピードメーターがついていればどこを走ったかも記録される！
トレーニーとしてもエンジニアとしては日々のトレーニングを通じて自分がどの程度成長できたのかはとても気になる！
そこでStravaからデータを持ってきて自身の成長ぶりを見る方法を考えたのでした！

## APIのドキュメントを確認しよう
[https://developers.strava.com/docs/reference/](https://developers.strava.com/docs/reference/)
StravaのAPIはしっかり作られていてドキュメントもある！

## Rubyでは提供されていない
完璧じゃん！と思ったんだけどなんとRubyのライブラリがない！
まじかよ！と思ったんですが同じことを考えているエンジニアが他にもいたみたいでRubyで使えるようにしてくれてる！
[https://github.com/jaredholdcroft/strava-api-v3](https://github.com/jaredholdcroft/strava-api-v3)
これを使うかと思ったんだけどレスポンスがHash。別にこれで悪いわけではないんだけどちょっと勉強のためにオブジェクト化して使いやすくしてみようって思ったのでした！

## Gemにしよう！
自分でGemを作る経験ってあんまりなくってすべてが新鮮だった。
普段minitestしか使わないのですが　　`bundle gem struby`としたらRspecだったのでそういうもんかと思ってRspecでテスト書いてた。後で知ったけどminitestでもOKらしい。(´・ω・`)

## TDD
ドキュメントを見てもらったら分かる通りでレスポンスのJSONが結構ごっつい。
なのでオブジェクトを作る前に事前にどういうインスタンスが生成されるかをテストに書き出してその上で実装していった。テストを書いていると設計を見直したいなと思うところがでてきて実装を先にしてテストをあとからやってたら収集がつかなかっただろうなと思ったのでTDDって有意義なんだなぁって感動した

## 使い方

```shell
git clone https://github.com/aimerald/struby
cd struby
./bin/install
```
これでStrubyをインストールすることができる
あとは

```ruby
require 'struby'

API_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
athlete = Struby::Athlete.new(API_TOKEN)
activities = athlete.activities
puta activities.first.distance
# => 10000
my_bike = athlete.bikes.first
puts my_bike.distance
# => 4400

club = athlete.clubs.first
puts clubs.name
# => I am Specialized
```

こんな感じ！

## 作ってみて
初めてrequireして呼び出すGemを作ったけどRubyはTDDの方針も明確に用意してくれてるのでありがたいなって思った。
Railsでのメソッド呼び出しを参考にしながら実装したのでかなりオブジェクト指向的なコードになってると思うし勉強になったので作ってよかった大満足！
ubuntu wordpress install 備忘録

授業でした内容を自分のメモとして書き残します。

---

![1.png](https://qiita-image-store.s3.amazonaws.com/0/249699/45181c90-bcc5-2e40-d2cf-b7a40a9a5871.png)
*図1 - ログインできそうなページ*

図1 のようなページが表示されたら成功とします

■ **wordpress install**

1. [WordPressダウンロード - 日本語](https://ja.wordpress.org/download/) からダウンロード

2. zip ファイルを **/var/www/html** に解凍

3. 任意のブラウザでアクセス
**exe) http:// 192.168.23.204/wordpress/**
※ 上記では、リンクを防ぐためスペースを入れています

4. 次へ進んだページに記述されている php ソースを全てコピーしておく

**ここでデータベース接続エラーが起こる可能性があり、
そのため、php のソースが表示されない
その場合少し面倒なので、ここにその php ソースを記述しておく**
※ <?php ?> も含めてコピーペーストすること

```wp-config.php
<?php

define('DB_NAME', 'wordpress');

define('DB_USER', 'root');

define('DB_PASSWORD', 'trustno1');

define('DB_HOST', 'localhost');

define('DB_CHARSET', 'utf8mb4');

define('DB_COLLATE', '');

define('AUTH_KEY',         'oI|nFjp_<YbsnH*6J`zd3q?yRDSud)Y>SU[sMTQG^#P^&nG]X!{hZL,R(lKy:g/A');
define('SECURE_AUTH_KEY',  'fi=gmFt0KflG2QtLkl#Ms6k+e>M#*C.kj84e_5*4dU,(l.e+gT)yMi-]m>,Yot;-');
define('LOGGED_IN_KEY',    'P~;oB~H|@d0ZJELtZQ6_v>`Lq>R;6nH|5 ]j6@afODnb&<M<B.D0%+P}X?1}l$qN');
define('NONCE_KEY',        'db+dHV#_j+T;NTz=v[-V}:?*KNZc$b2F,V^Lz%LXO`P2:[VCR?Rz$}<rk*.,ORpt');
define('AUTH_SALT',        'Xv!P[R 6fr m/d{D%{0z:KF9,.k1]<$XV105X iK3YS4fq}v`~_*9$6mu8bH5A]q');
define('SECURE_AUTH_SALT', 'qPbF&RR}s&O:u63PSo d3k{=~e_E,HJO0,)[8V->*#c-&4x9}p+AQ*T7aZvx2cY_');
define('LOGGED_IN_SALT',   'm*z4aH%sv<oJ;K-W~%-/12-]o=BT^=Fu|z+_!@{(4 e,1[61|WTc7v:@2FIx-5ar');
define('NONCE_SALT',       ', >k?_TckC3[MH_n@0>Gtx/*L}SkE~GOeQ5+w6y%1kPwgeUBIKW4-tg)g$8lbQ3Y');

$table_prefix  = 'wp_';

define('WP_DEBUG', false);

if ( !defined('ABSPATH') )
	define('ABSPATH', dirname(__FILE__) . '/');

require_once(ABSPATH . 'wp-settings.php');

?>
```

■ **wordpress Configuration**

1. 各項目に任意入力<br>
**・データベース名<br>
・ユーザ名<br>
・パスワード<br>
・データベースのホスト名<br>
・テーブル接頭辞**<br>
を入力します
<p>以下、メモ<br>
データベース名 : wordpress<br>
ホスト名 : localhost<br>
接頭辞 : wp-</p>
2. wp-config.php の作成<br>
```
cd /var/www/html/wordpress
```でディレクトリ移動<br>
後、```sudo vim wp-config.php```で新規ファイル作成
3. php ファイルに記述<br>
先程コピーした php ソースを全て貼り付ける
4. ブラウザに戻り、実行 をクリック

■ **wordpress welcome**

1. 各項目に任意入力<br>
**・サイトのタイトル<br>
・ユーザー名<br>
・パスワード<br>
・メールアドレス<br>
・検索エンジンでの表示**<br>
を入力、チェックします
2. サイトが作成されました、ログインします
3. ログアウトするには？<br>
右上のアイコンにマウスをかざす<br>
ログアウトがあるのでクリック

これで無事に 図1 のようになったかと思います
あくまで自分の備忘録ですので、よろしくお願いします

---

最後までお読みいただきありがとうございました。
Object Spread Operatorを使ってReducerを見やすくする

## はじめに
最近react-redux書き始めたんですが、Reducerを書いて行く中で、Object.assignを使っていたんですが、少し見にくいなと思っていました。
そこで調べた結果Object Spread Operatorを使うというのがRedux公式にありました。
使って見た結果、Obeject.assignよりも可読性が高いなと思ったので（個人的に）一応Qiitaにまとめておこうと思います。

## Object Spread Operator

コード見た方が早いのでコードを見せます。
服の情報を非同期でとってくる処理を書きたい場合にはこんな感じでかけます。（簡略化してます。）
非常にシンプルです。

```javascript

import * as types from 'client/constants/ActionTypes/Clothes';

const initialState = {
  fetching:   false,
  fetched:    false,
  clothes: [],
}

const Clothes = (state = initialState, action) => {
  switch(action.type){

    case types.FETCH_CLOTHES:
      return {
        ...state,
        fetching: true,
        fetched: false,
      }

    case types.FETCH_CLOTHES_SUCCESS:
      return {
        ...state,
        clothes: {
          ...state.clothes,
          ...action.payload
        },
        fetched: true,
      }

    case types.FETCH_CLOTHES_FAILED:
      return {
        ...state,
        fetching: false,
        fetched: false,
      }

    default:
      return state
  }
}

export default Clothes;
```

この部分にだけ注目して見ます。

```javascript

    case types.FETCH_CLOTHES_SUCCESS:
      return {
        ...state,
        clothes: {
          ...state.clothes,
          ...action.payload
        },
        fetched: true,
      }
```


Obejct.assignを使うとこんな感じ、少し見にくい気がします。

```javascript

    case types.FETCH_MEDICINES_SUCCESS:
      new_clothes = Object.assign({}, state, action.payload);
      return Object.assign({}, state, clothes: new_clothes, fetched: true);

```

## 終わりに
参考になれば幸いです。
よかったらいいね！押していただけると嬉しいです！

ご意見アドバイス等もぜひお願いします！

## 参考
https://redux.js.org/recipes/usingobjectspreadoperator
Bundle Identifierを取得する方法(Obj-C)

`Info.plist` の `Bundle Identifier` に定義している値を取得する方法です。

<img width="579" alt="スクリーンショット_2018-09-13_13_41_29.png" src="https://qiita-image-store.s3.amazonaws.com/0/138245/a6fa7638-ba52-58ff-b987-553f60baa3d1.png">

```objc
NSBundle *bundle = [NSBundle mainBundle];
NSString *bid = [bundle bundleIdentifier];
```

## 参考リンク

- [NSBundle - iPhoneアプリ開発の虎の巻](https://iphone-tora.sakura.ne.jp/nsbundle.html)
ethereumのgasについてちょっとだけわかりやすく書いてみた

## gasとは…

トランザクションを生成する際に必要なガソリン=燃料。

## gasって名前のつくもの一覧

```
gas(ガス)
gasLimit(ガスリミット)
gasPrice(ガスプライス)
```

## ちょっとわかりやすくしてみる

```
gas         = トランザクションで消費される燃料
gasLimit    = トランザクションで許容する燃料
gasPrice    = ガソリン代(時価)
```

## ちょっと現実世界に落とし込んでみる

例えば、自宅から職場まで車で移動した場合。

```
gas         = 自宅ー職場間にかかったガソリン
gasLimit    = 車に入るガソリンの最大値
              もちろん車ごとに最大値が違いますが、ethereumのmainnetの場合約8000000gas。
gasPrice    = ガソリン代
              その時によって変化する。
              現実世界のガソリンと一緒。
              だいたい10000000000gas = 0.00000001etherくらいが平均値。
```

## gas代の求め方

```
gas * gasPrice = 自宅から職場までにかかるガソリン代 = トランザクションを発行するのにかかるgas代
```
【MacBook Pro】【メモ】

【メモ】
MacBook Proの画面がつかず、しかしキーボードのライトがついていて、なにかしら反応があったときの対応

電源コードをつけたら画面がついたりした

macの電源を切る
cmd + opt + P + R + 電源
音が鳴ったら電源だけ離す
より大きな音が鳴ったら全部離す

これで画面がついた
CoreDataで自作クラスのAttributeを保存する方法

## 概要
CoreData noobということもあって、AttributeのTypeに標準で用意されていない型をTransformableを使用して保存したい時に戸惑ってしまったので、備忘録として残しておきます。

恐らく、正解の流れとしては

1. 保存したい自作クラスを定義
1. そのクラスをNSCodingプロトコルに準拠させる
1. エンコード処理とデコード処理の実装
1. EntityのTypeをTransformableに設定する

です。以下で詳しく述べます。
Swiftのバージョンは4.1です。

## 自作クラスの定義

```User.swift
class User: NSManagedObject {
  @NSManaged var name: String
  @NSManaged var pet: Pet
}

class Pet {
  var name: String?
  var gender: Gender?
}

enum Gender: Int {
  case male = 0
  case female
}
```
上記は、今回扱うデータモデルです。_User_は名前と飼っているペットを持ち、_Pet_は名前と性別を持っていることにします。_User_クラスをCoreDataのEntityとして扱う為、_NSManagedObject_を継承させ、プロパティには`@NSManaged`を付けています。

この記事のゴールは、___pet_プロパティをAttributeとして保存できるようにすること__です。

さて、上記のコードをそのまま書くと、「_pet_プロパティは`@NSManaged`を使えんぞ！」と怒られてしまいます。どうやら、Obj-Cで表現できるクラスでなければならないようです。ですので、_Pet_クラスに_NSObject_を継承させます。

```User.swift
...

class Pet: NSObject {
  var name: String?
  var gender: Gender?
}

...
```

これで怒られなくなりますが、まだCoreDataで扱える形にはなっていません。


## NSCodingに準拠させる
続いて、_Pet_クラスを_NSCoding_に準拠させ、エンコード処理とデコード処理を実装します。

```User.swift
...

class Pet: NSObject, NSCoding {
  var name: String?
  var gender: Gender?

  func encode(with aCoder: NSCoder) {
    aCoder.encode(self.name, forKey: "Name")
    aCoder.encode(self.gender!.rawValue, forKey: "Gender")
  }

  required init?(coder aDecoder: NSCoder) {
    super.init()
    
    self.name = aDecoder.decodeObject(forKey: "Name") as? String
    let genderValue = aDecoder.decodeInteger(forKey: "Gender")
    self.gender = Gender(rawValue: genderValue)
  }
}

...
```
これで_Pet_クラスをCoreDataで扱えるようになりました！  
ここで注意すべき（僕が躓いた）ところは、enumもそのまま保存できるわけではないので、一旦_rawValue_を介してエンコード/デコードする必要があるところです。当然といえば当然なのですが...

## Transformableに設定
最後に、AttributeのTypeをTransformableに変更して完了です。
![スクリーンショット 2018-09-13 13.07.34.png](https://qiita-image-store.s3.amazonaws.com/0/145750/6310a7db-26c8-47fe-160b-1b1ba52b17bf.png)

どうでもいいですけど、"AttributeのTypeをTransformableにする"って文章ヤバイですね。ヤバイ...（語彙力0）
お役所化したGitHub【GitHub Repository設定アンチパターン】

レビュ済みの変更をmasterにmergeするためにたらい回しにされたので、アンチパターンとして共有します

# 前提
- [git flow](https://qiita.com/mint__/items/bfc58589b5b1e0a1856a)のようにdev branchを利用している
- **dev branchは複数並列で存在する**
- [branch protection rule](https://dev.classmethod.jp/tool/github/protect-branch/)により、master branch, dev branchが保護されている
    - *Require pull request reviews before merging* (レビュ必須、勝手なforce push不可)
    - *Dismiss stale pull request approvals when new commits are pushed* (新たなコミットが追加されると再レビュが必要)
    - **Require branches to be up to date before merging** (base branchが更新された場合、取り込まなければPRをmergeできない)


## protection rule参考画像
<img width="743" alt="スクリーンショット 2018-09-13 12.24.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/112173/bfa35ca0-2d0d-894e-6085-19414244bb91.png">


# たらい回し詳細
## 1: dev branch Aをmasterにmergeできない
複数の開発が並列で進行しており、いざリリースのためとあるdev branch Aをmasterにmergeしようとしたそのとき、mergeボタンが押せない状況に遭遇

### 参考画像
<img width="789" alt="スクリーンショット 2018-09-13 12.16.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/112173/e4de7a95-fcb3-03e0-5455-54a8dbaacda7.png">

### 原因
master branchが進行しているため、**Require branches to be up to date before merging**によりmergeできない

## 2: dev branch Aをupdateできない
ならばbaseをupdateすればいいじゃないと思いupdate branchボタンを押すもエラー

### 参考画像
<img width="785" alt="スクリーンショット 2018-09-13 12.34.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/112173/ffa60fb4-06be-c5d5-edca-fb3ebf73d532.png">

### 原因
dev branchが*Require pull request reviews before merging*によって保護されているため、update(内部的には最新のbase branchをmergeする操作)が許可されず、エラー

## 3: updateしたdev branch Aをpushできない
localでdev branch Aに最新のmasterをmerge（もしくはrebase）し、それをpushするもエラー

### 原因
dev branchが*Require pull request reviews before merging*によって保護されているため、pushが許可されず、エラー

## 一旦の解決
- dev branch Aから別にbranchを切り、最新のmasterをmergeし、dev　branch Aに向けたPRを作成
- CIチェック・レビュを済ませ、dev branch Aにmerge

これにより、dev branch Aはmasterにmergeできるようになる

## 続: たらい回しは終わらない
前述したdev branch Aとは全く異なるdev branch Bもリリースするため、masterにmergeしたいのだが・・・
masterはdev branch Aを取り込んだことにより進行しているため、mergeできない
↓
俺たちのリリース作業はまだ始まったばかりだ！


# 問題
厳格に保護され、 意図しない変更が混入することが防げているこの状況で何が問題なのでしょうか
私は以下のものを問題だと考えています

- CIによるチェック待ちが何度も発生する
- mergeするためにapproveするだけのレビュが何度も発生する
- **dev branchが複数ある場合、それぞれをmergeするたびに、それ以外のdev branchはupdateしなければmergeできない(新規PR・CIチェック・無駄なレビュが発生する)**

# 根本的解決策
- **Require branches to be up to date before merging**の適用は慎重に検討しよう
- とっさに設定変更するために、Repositoryの権限を複数人に移譲しよう
jdbcRunnerでPostgresql性能検証（チュートリアル）

#目的
jdbcRunnerを使ってPostgresqlの性能検証のための手順を作成。
jdbcRunnerドキュメントのチュートリアルとおりの手順。

#前提条件
Postgresql環境
jdbcRunnerダウンロード

#目次
1. DB準備
2. jdbcRunner準備
3. チュートリアル実行

#1. DB準備
* 検証用データベース作成

```
postgres=# create database tutorial;
CREATE DATABASE
```

* jdbcRunner用ユーザ作成

```
postgres=# create role jdbc_runner with login password '******';
CREATE ROLE
```

* 権限付与

```
postgres=# grant all on database tutorial to jdbc_runner;
GRANT
```

* ログインしなおす

```
Server [localhost]:
Database [postgres]: tutorial
Port [5432]:
Username [postgres]: jdbc_runner
Client Encoding [SJIS]:
ユーザー jdbc_runner のパスワード:
psql (10.4)
"help" でヘルプを表示します。

tutorial=>
```

* テーブル作成

```
tutorial=> CREATE TABLE sample (id INT PRIMARY KEY, data VARCHAR(10));
CREATE TABLE
tutorial=>  INSERT INTO sample (id, data) VALUES (1, 'aaaaaaaaaa');
INSERT 0 1
tutorial=> INSERT INTO sample (id, data) VALUES (2, 'bbbbbbbbbb');
INSERT 0 1
tutorial=> INSERT INTO sample (id, data) VALUES (3, 'cccccccccc');
INSERT 0 1
tutorial=> INSERT INTO sample (id, data) VALUES (4, 'dddddddddd');
INSERT 0 1
tutorial=> INSERT INTO sample (id, data) VALUES (5, 'eeeeeeeeee');
INSERT 0 1
```

#2. jdbcRunner準備

* ダウンロードしたjdbcRunnerを任意の場所に解凍し、環境変数CLASSPATHにjarファイルを設定する。

```
$ export CLASSPATH=jdbcrunner-1.3.jar
```

* 実行確認

```
$ java JR
JdbcRunner 1.3
スクリプトファイルが指定されていません

...
```

#3. チュートリアル実行

* 以下のスクリプトをtest.jsファイルとして保存する。

```
function run() {
    var param = random(1, 5);
    query("SELECT data FROM sample WHERE id = $int", param);
}
```

* スクリプトを実行する

```
$ java JR test.js -jdbcUrl jdbc:postgresql://localhost:5432/tutorial -jdbcUser jdbc_runner -jdbcPass jdbc_runner
12:43:46 [INFO ] > JdbcRunner 1.3
12:43:46 [INFO ] [Config]
Program start time   : 20180913-124346
Script filename      : test.js
JDBC driver          : -
JDBC URL             : jdbc:postgresql://localhost:5432/tutorial
JDBC user            : jdbc_runner
Warmup time          : 10 sec
Measurement time     : 60 sec
...
```

#参考内容
[jdbcRunnerチュートリアル](https://dbstudy.info/jdbcrunner/docs_ja/tutorial.html#id2)
[python]何かに囲まれた間のテキストを取得したい

見つからなかったので作成して公開。

#Thanks！！
2018/09/15 @uasiさんから編集リクエストをいただき、マージしました！ありがとう！！！

```extract_text.py
- match_obj = re.search(begin + '(.*)' + end), text)
+ match_obj = re.search(re.escape(begin) + '(.*)' + re.escape(end), text)
```
#コード

```extract_text.py
def extract_text(begin, end, text):
	match_obj = re.search(re.escape(begin) + '(.*)' + re.escape(end), text)
	pretty_text = match_obj.groups()[0]
	return pretty_text
```
#注意点
re.searchで取得してるので、最初にマッチしたもののみ取得します。


#メモ
htmlタグのタグ内のテキストコンテンツを取得する時とかに使えると思います（そういう用途で作った）。

※今の使い方なら大丈夫だけど、.*というマッチではダメな場合も出てくるかも？？？
-> https://blog.mah-lab.com/2014/06/07/regular-expression-lazy-quantifiers/