OmniAICreator/Qiita-1.07M huggingface dataset:
Twilio Studioをさわってみた

[beta](https://www.twilio.com/blog/2018/01/twilio-studio-the-new-way-to-build-communications.html)が公開されたのを機に、Twilio Studioをさわってみました。

# 必要なもの
* Twilioアカウント


# 作業概要
　1. 無料トライアルアカウント作成と電話番号購入
　2. function作成
　3. フロー作成
　4. 電話着信時の設定
　5. 動作確認

# 1. 無料トライアルアカウント作成と電話番号購入

まだアカウントがない場合は、[Twilio](https://twilio.kddi-web.com)のサイトから無料トライアルアカウント作成を作成します。
無料トライアルアカウントは以下の制限があるようです。

- 利用できる無料電話番号は1個
- 利用料金の上限(非公開)を超えると無料トライアル終了

# 2. function作成
今回studio内で利用するfunctionをあらかじめ作成しておきます。
時間帯に応じた挨拶の文言を返します。

　1. ログイン後、左側の[DEVELOPER TOOLS] - [Runtime]を選択
　2. [Functions]を選択
　3. 赤丸のプラスを選択
　4. 以下内容を記述して新規functionを作成

FUNCTION NAME: welcome
PATH: /welcome

```node.js
exports.handler = function(context, event, callback) {
  var date = new Date();
  var msg;
  if (date.getUTCHours() >= 11 && date.getUTCHours() < 21){
    msg = "こんばんは。";
  } else {
    msg = "こんにちは。";
  }
  let response = { message: msg };
  callback(null, response);
};
```

# 3. フロー作成

　1. 左側の[ENGAGEMENT CLOUD] - [Studio]を選択
　2. 赤丸のプラスを選択
　3. widgetを配置して、フローを作成

### 完成したフロー図

<img width="801" alt="flow_summary.png" src="https://qiita-image-store.s3.amazonaws.com/0/192584/05be8d6f-a52d-f4c2-41a2-c8e726d20ae1.png">

### 1. Run Functionを配置する

　1. Run Functionを右側から選択して配置
　2. TriggerのIncomming Callと接続
　3. 以下を設定
　　FUNCTION URL: welcome

### 2. Say/Playを配置する

　1. Say/Playを右側から選択して配置
　2. Run FunctionのSuccessと接続
　3. 以下を設定
　　TEXT TO SAY: {{widgets.function_1.parsed.message}} 
　　LANGUAGE: Japanese,Japan

### 3. Gather Input On Callを配置する

　1. Gather Input On Callを右側から選択して配置
　2. Say/PlayのAudio Completeと接続
　3. 以下を設定
　　TEXT TO SAY: 今日の運勢を占う場合は１を、終了する場合は２を押してください。
　　LANGUAGE: Japanese,Japan

### 4. Split Base On...を配置する

　1. Split Base On...を右側から選択して配置
　2. Gather Input On CallのUser Pressed keysと接続
　3. 以下を設定
　　VARIABLE TO TEST: gather_1.Digits
　4. 赤字の[New]を選択し、下に出てくる[Condition Matches]を選択
　5. VALUE: 1を入力
　6. 4, 5を繰り返し、VALUE: 2を入力

### 5. 残りのSay/Playを配置する

　1. Say/Playを右側から選択して配置
　2. Split Base On...の1と接続
　3. 以下を設定
　　TEXT TO SAY: 大吉です。 
　　LANGUAGE: Japanese,Japan
　4. Say/Playを右側から選択して配置
　5. Split Base On...の2と接続
　6. 以下を設定
　　TEXT TO SAY: 終了します。 
　　LANGUAGE: Japanese,Japan

# 4. 電話着信時の設定

購入した電話番号に着信したら、上記で設定したStudioのFLOWが動作するように設定する必要があります。

　1. 左側の[SUPER NETWORK] - [Phone Numbers]を選択
　2. 購入した電話番号を選択
　3. 下記を設定(作成したフロー名がtest8の場合)

<img width="988" alt="4_setting.png" src="https://qiita-image-store.s3.amazonaws.com/0/192584/999ce6ca-3da4-70cc-593a-0c8aeaeefe47.png">


# 5. 動作確認

購入した電話番号に電話します。以下のようなフローになれば成功です。

　1. 「こんにちは。(こんばんは)」
　2. 「今日の運勢を占う場合は１を、終了する場合は２を押してください。」
　3. 1を押す / 2を押す
　4. 「大吉です。」 / 「終了します。」

# 雑感

- 操作がとても簡単。
- Coming Soonになっているthird-party integrationsが気になる。また作成したWidgetやFlowが共有・公開できると面白そう。
- 「TriggerのREST API」「Run Function」「Split Base On...」「HTTP Request」を利用して電話とかSMSとか関係ないワークフローも簡単にできそう。
- 参考にした[動画](https://www.youtube.com/watch?v=eowoG0GCB8U)からの教訓：Bobの発音は難しい
【CSSアニメーション】css-animationでcssプロパティが効かなかった問題


## 状況
webサイトでよく見る『スクロールすると要素が下からふんわり現れるあれ』を作りたくてcssアニメーションをさせたんだけど、思ったように移動してくれない。
コードこんな感じ。

```css
div {
    opacity: 0;
}
.is-active {
    animation-name: scrolleffect;
    animation-duration: 2s;
}

@keyframes scrolleffect {
    form {
        opacity: 0;
        transform:translateY(-10px); /*動かない*/
    }
    to {
        opacity: 1;
        transform:translateY(0); /*動かない*/
    }
}
```

 ちなみにこっちは動く↓

```css
div {
    opacity: 0;
}
.is-active {
    animation-name: scrolleffect;
    animation-duration: 2s;
}

@keyframes scrolleffect {
    form {
        opacity: 0;
        transform:translateY(0); /*動く*/
    }
    to {
        opacity: 1;
        transform:translateY(-10px); /*動く*/
    }
}
```

数字が逆の時は動くとか意味わからん。
負の値がダメなのかと思ったけどそうゆうわけでもない。

こんな感じで詰まってたんですが、解決しました。

## 原因と解決方法
```css
div{
    opacity: 0;
    transform:translateY(-10px); /*追加箇所*/
}
.is-active {
    animation-name: scrolleffect;
    animation-duration: 2s;
}

@keyframes scrolleffect {
    form {
        opacity: 0;
        transform:translateY(-10px);
    }
    to {
        opacity: 1;
        transform:translateY(0);
    }
}
```
**原因は、始まりの値が`keyframes`内の`from`の値と異なっていたため。**
そのためデフォルト値と同じ`transform:translateY（0）`から始まるものは動くのに、`transform:translateY（-10px)`から始まるものは動かなかったようです。
`div`に`transform:translateY(-10px)`を設定してあげたら動くようになりました。

別に`transform`じゃなくても起こり得ますね。
同僚も同じ経験をしたことがあると話していたので、割と陥りやすい罠かもしれません。
Python: コマンドライン引数とは？（超基礎）

# コマンドライン引数とは？

* Pythonのプログラム実行時に，引数を渡すことができる
* `sys`モジュールの`argv`を利用する
* 入力値は文字列型として扱われる

## どうやって引数を渡すか

* サンプルとしてtest.pyというファイルをつくる
* `args[1]`とインデックスが`1`から始まっているのは，実行結果を見れば理由が分かる

```python:test.py
import sys

args = sys.argv

print(args)
print("第1引数：" + args[1])
print("第2引数：" + args[2])
print("第3引数：" + args[3])
```

* 下記コマンドで実行する
* `a b c`を引数として渡している（`test.py`も表示される）

```pycon:コマンド
python test.py a b c
```

* 実行すると以下のようになる

```pycon:実行結果
['test.py', 'a', 'b', 'c']
第1引数：a
第2引数：b
第3引数：c
```

* この`test.py`起動時に，3行目の`sys.argv`に渡したい引数が格納される
* 実行結果からわかるように，リストとして値が返される
* `argv[1]`のインデックスが`1`から始まっているのは，このリストの最初の要素に実行ファイル名が入るため

##その他

* 上のプログラムでは引数が不足しているとエラーを吐く
* 処理前に`len()`を用いて引数の数をチェックすると良い
iOSメモ①

# iOSプロジェクトを作って、初めてやること

## Cocoapod入れる

```sh
touch /path/to/project/Podfile
```

中身の補充

```ruby
source 'https://github.com/CocoaPods/Specs.git'
inhibit_all_warnings!
use_frameworks!
platform :ios, '11.0'

PROJECT_NAME    = '<project name>'

def base_pods
    pod 'Alamofire'
    pod 'XCGLogger', '~> 6.0.2'
end

def view_pods
end

target PROJECT_NAME do
    base_pods
    view_pods
end
```

```
pod install
```

これで、workspaceが生成される

xcodeでbuildすれば、R.generated.swiftが生成される
(R.swift使う前提なので)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165810/b254f3cb-6089-0209-a3e8-8f764f18fe6a.png)

enjoy development!
Raspberry PiでQuimat 3.5インチHDMIディスプレイを使う

# Quimat 3.5インチHDMIディスプレイとは

* 3.5インチHDMI接続のRaspberry Pi用ディスプレイ
* GPIO端子に接続しますが、ディスプレイ側にもGPIO端子がありますので、ディスプレイを付けた上でGPIOを別用途に使用することが可能
* https://www.amazon.co.jp/gp/product/B075K56C12
 * 4000円弱のコストパフォーマンス
* ただし、液晶の質はそれなりなので、過度な期待は禁物
* 3.5インチなので指での操作はちょっとつらい(反応も微妙)が、タッチペンでの操作は結構いける

# 設定

* http://karaage.hatenadiary.jp/entry/2017/12/25/073000

> $ git clone https://github.com/karaage0703/raspberry-pi-setup
> $ cd raspberry-pi-setup
> $ ./setup-quimat_3_5_display.sh


# 参考

* https://github.com/goodtft/LCD-show
* http://karaage.hatenadiary.jp/entry/2017/12/25/073000
 * この記事を見て買いました。ありがとうございます。
【機械学習】最小二乗法について　メモ




<br>
機械学習で使用することを前提として、最小二乗法についてまとめます。
ど文系のメモなので、誤りなどあったら指摘していただければ嬉しいです。

## 最小二乗法とは

>最小二乗法(さいしょうにじょうほう、さいしょうじじょうほう；最小自乗法とも書く、英: least squares method)は、測定で得られた数値の組を、適当なモデルから想定される1次関数、対数曲線など特定の関数を用いて近似するときに、想定する関数が測定値に対してよい近似となるように、残差の二乗和を最小とするような係数を決定する方法、あるいはそのような方法によって近似を行うことである。(Wikipedia)

あるデータの分散について回帰を行いたいときなどに用いる考え方。
回帰直線をはじめとし、ロッソ回帰やリッジ回帰などの根底となる概念。

## 数式について

### 数式
モデル関数を f(x) とするとき

```math
\sum_{i=1}^{n}{{(y_i-f(x))^2}} 
```

が最小となるように f(x) を求めることである

### 数式の意味


|文字の意味|説明|
|-----------|----------------------------------------|
|f(x)       |暫定的に分散空間上に引いた関数のこと。モデル関数|
|y          |分散しているそれぞれのデータのこと。|
|yi-f(x)    |分散しているそれぞれのデータと、分散空間上に引いた差のこと。|
|(yi-f(x))^2|上の式で求めた結果に絶対値による違いを取り除く処理を加えたもの。|


分散空間上に関数の存在を仮定し、分散したデータそれぞれとの差を測定する。
その差が最も小さくなるように f(x) を設定できたならば、すなわちその関数は分散に対して最も相関性のある関数と言える。

## プログラムによる実践

最小二乗法に基づいている直線回帰モデルを使用して、作成される関数のイメージを掴む。

```python:直線回帰モデルによる最小二乗関数の可視化
import pandas as pd
import matplotlib.pyplot as pyp
from numpy.random import *
from sklearn.linear_model import LinearRegression

# x軸
data_x = pd.DataFrame([0,1,2,3,4,5,6,7,8,9])
# y軸　データはランダムに生成
data_y = pd.DataFrame(randn(10))

# 回帰直線モデルを生成
model_lr = LinearRegression()
# 最小二乗法に基づいて、モデル関数を作成
model_lr.fit(data_x, data_y)

pyp.plot(data_x, data_y, 'o')
pyp.plot(model_lr.predict(data_x), linestyle="solid")
pyp.show()

print('モデル関数の回帰変数 : %.3f' %model_lr.coef_)
print('モデル関数の切片 : %.3f' %model_lr.intercept_)

```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/184568/86d1f456-c9ca-bbe6-487e-d78da492ee45.png)


グラフ上の分散に対して最小二乗法を実行し、発見されたモデル関数を直線で表したのが上記の図。
ここでも求められた直線は 
   y = -0.287 * x + 1.261
となる。



以上。
メイドさんが東北ずん子をつくる【下絵～棒人間作成編】

はじめまして。

メイドさんと畳の上でプログラミングが勉強できるスクール兼ノマドスペース、Made in Maid Familyでメイドとして働いております、ふわりと申します。

現在カリキュラムの中心はUnityなのですが、モデリングもスクールで教えることになりまして。
イラストの仕事もやっているわたくし食いつきました。


**3Dモデリングの勉強、始めることにしました！！**


ずん子制作に当たって覚えた技術をQiitaで皆さんと共有できればと思います。どうぞよろしくお願い致します。


# 教科書紹介

使用する教科書はこちら↓

<img width="225" alt="2.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/224183/e626c094-bc5b-077f-dcc8-120e1483bf3f.jpeg">

[東北ずん子で覚える！アニメキャラクターモデリング](http://amzn.asia/1VMGhfB)(Amazon)

フルカラー印刷でスクショも多いので初心者には大変有難いです。
こちらを手元に用意していただいた上でこれからの記事を読むと、ふわりさんがどのページを見ながら何をやっているのかわかると思います。

#さっそく挑戦
![image.png](https://qiita-image-store.s3.amazonaws.com/0/224183/50aa6dca-1fb5-1e6a-0306-2b793e398195.png)

上図のように下絵を表示させます。

絵を描くのもそうですが、下書きがあるとないとでは作業スピードに大きな差が出ると思います。
ていうか人物なんて下絵なしだとかなりしんどいですよね。やったことなくてもそれくらいならなんとなくわかります。

*※今回は各ウィンドウの見方などは省略します！申し訳ありませんが、わかりやすいサイトを探して見てみてください…*

# 下絵を貼る方法

1.画像ファイルを選択する
（左上の**[ビュー]**→**[プロパティ]**→出てきたプロパティシェルフの**[下絵]**→▶から**[画像を追加]**→**[開く]** →左側のシステムパネルなどから下絵の保存場所
を選択、ファイルを選択して右上の**[画像を開く]**）


2.正しい比率で表示させる
（プロパティシェルフの下絵パネルに追加されたスタックの[座標軸][すべての視点]→**[カメラ]**→**テンキー0**でカメラからのビューに変更→プロパティ・エディターヘッダーの**[レンダー]**→寸法パネルの解像度のXを**1080px**、Yを**1920px**と入力←オリジナルの下絵を使用する場合はその下絵の解像度を入力）

3.カメラをいじる
（**テンキー0**でビュー変更→アウトアイナー・エディターの**[cube]右側の目のマーク**をクリックしてcubeを非表示→カメラを選択してトランスフォームパネルの[位置]のX,Y,Zにそれぞれ**0**を入力、今度は[回転]のXに**90**、Y,Zに**0**を入力、**テンキー0**でビュー変更）

4.位置調整
（プロパティ・エディターヘッダーの**[データ]**→レンズパネル、シフトの**Yの数値を下げて、カメラの水平線を下絵の水平線に合わせる**→プロパティシェルフのトランスフォームパネルの[位置]の**Zの数値を床が見えるまで上げる**。適当でよい→今度は**Yの数値をXYZ軸の原点が見えるまで下げる**。このとき3Dカーソルが原点になかったら原点に移動させる。→先ほどいじった[位置]の**XY数値を変更して、キャラの足元が原点に近づくようにする**。大体でよい。→不安ならアウトアイナー・エディターの[Camera]の矢印をクリックしてカメラ位置をロック→**目のマーク**でcubeを表示）


**以上！**

#締め
実は私、ずん子制作の前にぶっつけ本番でモデリングに挑戦してまして、その時は下絵なし予備知識なしで挑戦したんです。
すんごいこだわって作ったはいいものの、ポリゴン数がエグいことになってました。
そりゃそうだポリゴン数は少ないほうがいいなんて知らないんだもん。
お勉強は大事ですね。

マイペースに更新していきますので、どうぞよろしくお願いいたします！
3年後、人を感動させられるモデルを自分の力で作れるようになることを目指して、今日もメイド服でPCに向かうふわりでした。
いつかずん子ちゃんの恰好もしてみたいです。

[Twitter](https://twitter.com/Fuwari_mimf)もよろしくお願いします！モデラー育てたい方（いるのか？）のご連絡お待ちしております笑
ゼロからはじめる量子コンピュータ #1


【モチベーション】
巷で盛んな量子コンピュータの勉強会に行ってイメージが少し出来てきたので、
自分でも量子コンピュータを作りたくなってきた。

【記事を書いている人】
量子論のついての知識はゼロのエンジニア。猫と毒薬を箱に入れたらどうなるか、聞いたことがある程度の理解。コードを書きながら、世界を理解したい。

【はじめにやったこと１】
https://quantumexperience.ng.bluemix.net/qx/introduction/complete/5

イメージを掴みました。

【はじめにやったこと２】
https://github.com/QISKit/qiskit-sdk-py

IBMの初心者向けキットがあるので、
とりあえずインストールしてみる。
anaconda3 とJupiter notebook を推奨しているのか、
ふむふむ。
って、既にGCP上のインスタンスに入っているので、
IBMと気があうな。。。。

【はじめにやったこと３】
pip3 install qiskit

しようと思ったが、
ちょっと考え直して、はじめる前に、
スナップショットを取っておくことにした。
再度挑戦

```
* The following required packages can not be built:
* freetype * Try installing freetype with `apt-get
* install libfreetype6-dev` 
```
というエラーが出たので、
```
sudo apt-get install libfreetype6-dev
```
してみる。が治らないが、pipのログを見る限り
matplotlibの依存性の問題っぽいので

```
pip uninstall matplotlib
sudo apt-get install libfreetype6-dev libxft-dev
sudo easy_install matplotlib
sudo pip3 install qiskit
```
したら

```
Successfully installed qiskit IBMQuantumExperience matplotlib networkx ply Sphinx sympy requests-ntlm decorator babel snowballstemmer sphinxcontrib-websupport imagesize alabaster mpmath ntlm-auth
Cleaning up...
```
されたので
とりあえずインストールは完了

次回からキットを動かしてみます。
homebrewのインストール

現在、vagrantで仮想環境を立ち上げて、

vagrant@localhost

におります。

railsを使用したいため、先ずhomebrewをインストールしようとしたところ、

[vagrant@localhost ~]$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
See Linuxbrew: http://linuxbrew.sh/

上記のように表示されました。

どのように対処すればいいのか分かりません。

フォローいただけると幸いです。

よろしくお願い致します。
音声入力で確定申告の領収書を瞬殺する方法

# はじめに

* フリーランスなので確定申告をする必要があるが、毎年ギリギリまでなにもしないので領収書を帳簿につける作業が地獄。
* 今年は音声入力を使ってわりと楽に帳簿をつけられたので、来年またギリギリまで何もしない自分向けに記録しておく。

# なぜ音声入力か？

* 領収書をたぐりながらキーボードで入力をすると手元が忙しくなって効率が悪いしわりとストレス。
* 領収書を持って音声で入力できるとあまり忙しい感じがなく低ストレスで比較的効率よく作業ができる。
  * テンキー使ってガシガシ入力できるプロの人とかに比べたらもちろん作業は遅いと思うがたまにしかやらないので嫌にならずにできることのほうが大事。

# 他の方法もあるのでは？

* 画像認識なんかもあるのは知っているが一枚ずつ写真に撮っておくるのはわりと面倒。データ反映まで時間がかかったり取り込み件数に上限があったりするので、確定申告ギリギリで大量に領収書を処理したい場合には向かない。
* 毎日帳簿をつけられる偉い人には嬉しいのだと思う。

# なにでやるのか？

* macOS の音声入力機能を使う。
* Google ドキュメントの音声入力も試してみたが、自分の滑舌とか用途だと macOS のものが精度が良かった。

# どうやるのか？

* Fn キー連打で音声入力機能を有効にする。
* Fn キー 2 連続押下で音声入力開始。
* 入力時に出てくるポップアップの "完了" ボタン押下で音声入力終了。

# 領収書を帳簿につける手順は？

1. 領収書を勘定科目毎（交通費、会議費、接待交遊費など）に分ける。
1. 領収書を見ながら音声入力で日付と金額をどんどん入力していく。
1. 入力したデータを正規化して CSV などでインポートできる形式に変換する。

## 領収書を勘定科目毎に分ける

* がんばってやる。

## 音声入力で日付と金額を入力する

* 「いちがつついたちひゃくえん、にがつついたちにひゃくえん」といった具合にどんどん入力していく。
  * 改行や空行は後の工程で適当に無視するので見やすいように適当に入力していく。
  * 音声入力のコツとしては合成音声っぽく発音すると認識しやすそうだった。
  * 「はっぴゃくえん」とか「さんびゃくえん」とか破裂音は認識苦しいようなので余り音声入力にこだわらずに適当にキーボードを使って入力していく。

## 入力したデータを正規化する

* 入力した日付と金額をカンマ区切りにして任意の CSV にコピペしやすくする。
* 前の段階でできたデータは以下のようなものになる。

```
1月1日100円1月2日100円1月3日100円1月1日510円1月1日100円1月2日100円1月3日100円1月1日510円
1月10日1,00円12月2日10,000円
```

* これを以下のコマンドで変換する。
  * データは `data.txt` に入っているものとし、 `out.csv` に出力されるものとする。

```bash
perl -lne '
  s/,//g;
  while(m/(\d+)月(\d+)日([\d,]+)円/g) {
    print "2017/$1/$2,$3";
  }
' data.txt > out.csv
```

* out.csv は以下のような感じになる

```
2017/1/1,100
2017/1/2,100
2017/1/3,100
2017/1/1,510
2017/1/1,100
2017/1/2,100
2017/1/3,100
2017/1/1,510
2017/1/10,100
2017/12/2,10000
```

# データを任意の仕訳帳形式にしてインポートする

* ここまでやれば後は CSV インポートなんかができる任意の仕訳帳にコピーしていけばいいはず。
* 自分は MF 確定申告をつかっているのでその手順だけ記載する。
  * 去年くらいにクラウドの確定申告サービスで仕訳帳をいい感じに CSV インポートできるものが MF 確定申告くらいしか見つからなかった。今探せばもっと他でもできるかもしれない。

## MF確定申告にログイン

* ログインする

## 年度の切り替え

* 年度が一昨年のものになっているはずなので操作する年度を去年に切り替える
* ホーム画面右上のユーザー名のメニューボックスから "事業所・年度の管理"
* これで残高などを引き継いで次年度の入力へ切り替える

## 仕訳帳のひな形のダウンロード

* メニュー "会計帳簿" > "仕訳帳"
* "インボート" ボタン押下 > "仕訳帳"
* "サンプルフォーマットをダウンロード" でサンプルの "journal_sample.csv" をダウンロード

## 仕訳帳の作成

* 先に領収書から作ったデータを使って仕訳帳を作成する。

## 仕訳帳のインポート

* ひな形をダウンロードしたページからインポートを行う。
Azure deploy





発行プロファイルの取得
![image](https://qiita-image-store.s3.amazonaws.com/0/49910/5a41754d-5a64-077c-5fe9-626312434a2d.png)

プロファイル情報をダウンロード

発行で新しいプロファイルの作成

![image](https://qiita-image-store.s3.amazonaws.com/0/49910/5003f61c-1d36-17de-c159-2a916b5409c1.png)

プロファイルのインポートを選択し、先ほどダウンロードしたファイルを選択する。

発行ボタンを押すことでAzure上に発行ができる。
Javaのインストーラを実行すると「別のJavaインストールが進行中」になる状況を解消する

# やりたいこと

Java(JDK) のインストーラを多重起動していないのに下記のエラーが出る。
この状況を解消したい[^1]。

[^1]: [Qiitaのガイドライン](https://help.qiita.com/ja/articles/qiita-article-guideline)にあるように「Qiitaは、プログラミングに関する知識を記録・共有するためのサービス」なので、本記事の内容はQiitaの方針に沿っているのかちょっと気になる。プログラミング環境作成に関わることではあるので完全にNGではないと思うけど…。

```title:Javaインストール中
別のJavaインストールが進行中です。
このインストーラを実行する前に、
そのインストールを完了する必要があります。
```

![Javaインストール中.png](https://qiita-image-store.s3.amazonaws.com/0/73432/4d19d02d-75fa-d9e9-e163-7f5326132277.png)

OS は Windows10 、インストーラは `jdk-10+43_windows-x64_bin.exe` [^2] で発生。

[^2]: http://jdk.java.net/10/ からダウンロード。


# 何をすればいい？

下記のディレクトリのいずれか、あるいは全部に `JAVA_INSTALL_FLAG`[^3] というファイルが
存在しているはずなので、それらを全て削除する。

* `C:\ProgramData\Oracle\Java`
* `C:\Users\(ユーザ名)\AppData\LocalLow\Oracle\Java`
* `C:\Users\(ユーザ名)\AppData\LocalLow\Sun\Java`

[^3]: 多重起動防止のため作成される、いわゆるロックファイル(lock file)。インストーラを起動していないのにこのファイルが何らかの原因で存在してしまっている場合、今回のような状況になる。自分の場合は JDK インストール中に OS が落ちたためロックファイルが残っていた。

その後、インストーラを再度実行すれば今度はうまくいくはず。

上記で解決しない場合は別の問題なのでインストールログ等を足がかりに頑張ろう。
インストールログについては [Javaソフトウェアのインストール・ログ・ファイルの取得方法](https://www.java.com/ja/download/help/log_files.xml) を参考に。


# 参考

* [Stack Overflow - Can't install JDK 9 because “Another Java installation is in progress”
](https://stackoverflow.com/questions/44641878/cant-install-jdk-9-because-another-java-installation-is-in-progress)
git-bash on windowsでherokuコマンドを使う方法

## 背景

ちょっとHerokuに関して検証する必要がでてきて、HerokuCLI環境を作ることに。

私の環境はwindows64ビットです。

## Heroku公式ページへ

まずは以下にアクセス
https://devcenter.heroku.com/articles/heroku-cli

## HerokuCLIのインストール

まずは以下をクリックしてインストールします。
※自分のPCの環境に合わせましょう。私はwindows64ビットなので以下です。

[![https://gyazo.com/68a1f9a0f44a713e944af0cb30d5af2a](https://i.gyazo.com/68a1f9a0f44a713e944af0cb30d5af2a.png)](https://gyazo.com/68a1f9a0f44a713e944af0cb30d5af2a)

`heroku-cli-x64.exe`がダウンロードされます。
起動して全部デフォルトのままクリックしてインストールします。

## ではgit-bash on windowsを起動して検証

まずはherokuコマンドが使えるか検証。

```
$ heroku --version
heroku-cli/6.15.26-5726b6f (win32-x64) node-v9.3.0
```

オッケー！使える！

では早速ログイン！

```
$ heroku login
Enter your Heroku credentials:
Email: hogehoge@gmail.com
 !    Login is currently incompatible with git bash/Cygwin/MinGW
```

ログインの互換性がないとのこと。。

当然`heroku create`でも以下の感じでログインが求められます。

```
$ heroku create
Creating app... !
 !    Invalid credentials provided.
Enter your Heroku credentials:
Email: hogehoge@gmail.com
 !    Login is currently incompatible with git bash/Cygwin/MinGW
```

## じゃあどうするのか？cmdでログインだけします。

Windows基本機能のcmdでログインだけします。

```
Microsoft Windows [Version 10.0.16299.192]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\Users\hogehoge>heroku login
Enter your Heroku credentials:
Email: hogehoge@gmail.com
Password: **************
Logged in as hogehoge@gmail.com

C:\Users\hogehoge>
```

おお、当然だが、cmdでは普通にログインできる。
その後、`gitbash`を起動してコマンド実行。

```
$ heroku create
Creating app... done, xxxx-xxxx-xxxx
https://xxxx-xxxx-xxxx.herokuapp.com/ | https://git.heroku.com/xxxx-xxxx-xxxx.git
```

ログインが求められない！いけた！
WordPress WP_REST_API　使い方の基本設定とエンドポイントの勉強

WordPress WP_REST_APIを使うのに色々と調べましたのでここに整理していきたいと思います。
関連記事　[WordPress WP_REST_APIで投稿データを取得するでサムネイル画像とアドバンスカスタムフイールド画像を出力する](https://qiita.com/dropmo/items/5d2cbc70910d2c4eb106)
も合わせてみてみてください。

##デフォルト

####【固定ページ一覧】
`https://example.com/wp-json/wp/v2/pages`

####【投稿ページ一覧】
`https://example.com/wp-json/wp/v2/posts`

####【投稿ページ一覧(サムネイル画像情報を取得)】
`https://example.com/wp-json/wp/v2/posts?_embed`



##カスタム投稿記事を取得

functions.phpでカスタム投稿記事の設定の中に下記の記述を追記する

`'show_in_rest' => true,`

####【カスタム投稿（news）ページ一覧】
`https://example.com/wp-json/wp/v2/news`

####【カスタム投稿（news）ページ一覧(サムネイル画像情報を取得)】
`https://example.com/wp-json/wp/v2/news/?_embed`

####【カスタム投稿（news）ページ最新15件とサムネイル画像群取得】
`https://example.com/wp-json/wp/v2/news/?_embed&per_page=15`

##カスタム投稿のタクソノミー分類された記事を取得

functions.phpでタクソノミー設定の中に下記の記述を追記する

`'show_in_rest' => true,`

####【カスタム投稿（news）ページの在るターム記事の一覧】
`https://example.com/wp/v2/news?news_cat=29`

####【カスタム投稿（news）ページの在るターム記事の最新5件】
`https://example.com/wp/v2/news/?news_cat=29&per_page=5`



##カスタム投稿記事の中のアドバンスカスタムフィールドの値を取得したい場合
プラグインを使います。
【ACF to REST API】をプラグインインストールして有効にするだけでオーケーです。
Where can I get OpenJDK binaries and archives?

# OpenJDK binary and archive

Where can I get OpenJDK binaries and archives?

## Oracle (java.net)

### JDK 10

* http://jdk.java.net/10/
* GA will be released at 20/March/2018

### JDK 9

* http://jdk.java.net/9/
* Archive link is not provided, you must get from the direct link as below.
    * `https://download.java.net/java/GA/jdk9/<version>/binaries/openjdk-<version>_(linux|osx|windows)-x64_bin.tar.gz`
* Linux
    * [9.0.4](https://download.java.net/java/GA/jdk9/9.0.4/binaries/openjdk-9.0.4_linux-x64_bin.tar.gz)
    * [9.0.1](https://download.java.net/java/GA/jdk9/9.0.1/binaries/openjdk-9.0.1_linux-x64_bin.tar.gz)
    * [9](https://download.java.net/java/GA/jdk9/9/binaries/openjdk-9_linux-x64_bin.tar.gz)
* Mac
    * [9.0.4](https://download.java.net/java/GA/jdk9/9.0.4/binaries/openjdk-9.0.4_osx-x64_bin.tar.gz)
    * 9.0.1 and 9 have not been released.
* Windows
    * [9.0.4](https://download.java.net/java/GA/jdk9/9.0.4/binaries/openjdk-9.0.4_windows-x64_bin.tar.gz)
    * 9.0.1 and 9 have not been released.

## Red Hat

Red Hat provides OpenJDK binaries which includes implementation of icedtea for Windows. If you want Linux binaries, buy RHEL and run `yum install java` or get from customer portal.

* https://developers.redhat.com/products/openjdk/download/
    * Archive links are also provided
* Requires an account to accept the term and conditions, which provides no-cost subscriptions for development use only.

## Azul Systems

Azul Systems provides Zulu which is a certified build of OpenJDK for Windows / MacOS / Linux.
https://www.azul.com/downloads/zulu/

## Adopt OpenJDK (Java User Groups)

AdoptOpenJDK provides prebuilt OpenJDK binaries for Linux, MacOS, and Windows. It's useful for testing your application before GA release.

https://adoptopenjdk.net/
Windows の Emacs で Shell Script を実行

# Windows の Emacs で Shell Script を実行できるようにします。

1行目が `"#!"` で始まるいわゆる Shebang style のスクリプトが Windows の Emacs からでもそのまま実行できるようになります。勿論実行ビットは不要です。

RCS の ci / co 等がスクリプトになってしまい、 Windows の Emacs の VC からだと動かなくなってしまったのが再び動くようになります。

ついでに `M-!` や `eshell` などからも実行できるようにしてあります。

[shebang-exec.el をダウンロード](https://gist.github.com/s-fubuki/819a7f7e7cb2cbcaa5b9bd04dcb1e713)

# インストール

shebang-exec.el を `load-path` の下に置き init.el で以下のようにします。

```emacs-lisp:sample
(when (eq system-type 'windows-nt)
  (require 'shebang-exec))
```
# org-mode の info file export 等

makeinfo も Perl script になってしまいましたが、それも簡潔にスクリプト名だけで実行できるので Linux 等で書いた設定がそのまま持ってこれるのではないのでしょうか(未テスト)。

```emacs-lisp:sample
(add-hook 'org-mode-hook #'(lambda () (push 'texinfo org-export-backends)))
(setq org-texinfo-info-process '("makeinfo --force -o %b.info %f"))
```

# 補足や注意点等

## Emacs の版
対象(テスト)は以下の Emacs です(GNU のサイトで配布する Windows 版)。
nadvice で実装してあるので advice が以前のものしか無いとロード中(eval中)にエラーになります。

> (version)
> "GNU Emacs 25.3.1 (i686-w64-mingw32)
>  of 2017-09-18"

## RCS のログメッセージが化けるとき

プロセスの文字コードを `sjis` にします。
この場合 `sh` が RCS を起動するので `sh` を `sjis` に指定します。

サンプルとして以下が現在の自分の設定ですが、この場合 `sh` だけでいいですが、詰めていないので余計なものもあります。
`sh` は `bash` 等他のシェルにもマッチします。
ちなみに touch chmod は wdired 対策です。

```emacs-lisp:sample
(modify-coding-system-alist
 'process "sh\\|rcs\\|diff\\|c[io]\\|rlog\\|cvs\\|touch\\|chmod" '(undecided . sjis-unix))
```

古いサイトでは `UTF-8` にしたいとき `UTF-8` にするとありますが、
ここで指定するのはコマンドに渡す引数のコーディングなので Windows の場合 `sjis` にします。
引数で渡されるファイルの中身のコードは変換されないので `UTF-8` でも `EUC-JP` でも関係ありません。

## 実行形式の判別

`file-executable-p` をフックして shebang file を eshell 等に実行可能に見せかけていますが、それとは別口の `executable-find` には同期していません。
なので `file-executable-p` で真であっても `executable-find` では真になるとは限りません。現実的にそちらまでフックする意味もないのでそのままにしてあります。

## 利用ライブラリ

shebang file かどうかと実行パス検索は eshell のライブラリを使って検知しています(Emacs標準附属)。
はじめは自作ルーチンでしたが、まったく同じことをしている殆ど同一のコードがあったので、サイズを小さくするためにそちらを使っています。

ちなみに `eshell-search-path` の方で `"."` をくっつけているのは `"./"` にしないと、意味がないバグのような気がするのですが...

- 例: cal を起動すると 設定ファイルの .cal を起動しようとしてエラーになる。
ESLint v4.18.0

前 [v4.17.0] | 次 [v4.19.0]

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">ESLint v4.18.0 has been released: <a href="https://t.co/lVzWEDpKrH">https://t.co/lVzWEDpKrH</a></p>&mdash; ESLint (@geteslint) <a href="https://twitter.com/geteslint/status/964627435244449792">2018年2月17日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ESLint 4.18.0 がリリースされました。
小さな機能追加とバグ修正が含まれています。

質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。

> 🏢 [日本語 Issue 管理リポジトリ](https://github.com/eslint/eslint-jp)
> 👫 [日本語サポート チャット](https://gitter.im/eslint/eslint-jp)
> 🏢 [本家リポジトリ](https://github.com/eslint/eslint)
> 👫 [本家サポート チャット](https://gitter.im/eslint/eslint)

# 🚀 本体への機能追加

ECMAScript 2018 言語仕様にて追加される構文の一部をサポートしました。

- [Rest/Spread Properties](https://github.com/tc39/proposal-object-rest-spread)
- [Async Iteration](https://github.com/tc39/proposal-async-iteration)

利用するには、設定ファイルに `ecmaVersion` を追加します。

```json:.eslintrc.json
{
    "parserOptions": {
        "ecmaVersion": 2018
    }
}
```

また、Rest/Spread Properties が正式な構文になったため `experimentalObjectRestSpread` オプションは非推奨になりました。
利用している場合は `ecmaVersion` に置き換えるようお願いします。

> なお、ES2018 の残りの新構文のサポートは[こちら](https://github.com/acornjs/acorn/pull/673)で進行中です。

# 💡 新しいルール

特になし。

# 🔧 オプションが追加されたルール

## [#9876]: [object-curly-newline] ImportDeclaration and ExportDeclaration

オブジェクトの波括弧まわりの改行に関するルールに、Import/Export 構文を検証するためのオプションが追加されました。

> ```js
> /*eslint object-curly-newline: [
>     error,
>     { ImportDeclaration: {minProperties: 3}, ExportDeclaration: {minProperties: 3} }
> ] */
> 
> //✘ BAD
> import {a, b, c} from "./lib"
> export {a, b, c}
> 
> //✓ GOOD
> import {d, e} from "./lib"
> import {
>     f,
>     g,
>     h
> } from "./lib"
> 
> export {d, e}
> export {
>     f,
>     g,
>     h
> }
> ```
> [Open online demo](https://eslint.org/demo/#eyJ0ZXh0IjoiLyplc2xpbnQgb2JqZWN0LWN1cmx5LW5ld2xpbmU6IFtcclxuICAgIGVycm9yLFxyXG4gICAgeyBJbXBvcnREZWNsYXJhdGlvbjoge21pblByb3BlcnRpZXM6IDN9LCBFeHBvcnREZWNsYXJhdGlvbjoge21pblByb3BlcnRpZXM6IDN9IH1cclxuXSAqL1xyXG5cclxuLy/inJggQkFEXHJcbmltcG9ydCB7YSwgYiwgY30gZnJvbSBcIi4vbGliXCJcclxuZXhwb3J0IHthLCBiLCBjfVxyXG5cclxuLy/inJMgR09PRFxyXG5pbXBvcnQge2QsIGV9IGZyb20gXCIuL2xpYlwiXHJcbmltcG9ydCB7XHJcbiAgICBmLFxyXG4gICAgZyxcclxuICAgIGhcclxufSBmcm9tIFwiLi9saWJcIlxyXG5cclxuZXhwb3J0IHtkLCBlfVxyXG5leHBvcnQge1xyXG4gICAgZixcclxuICAgIGcsXHJcbiAgICBoXHJcbn0iLCJvcHRpb25zIjp7InBhcnNlck9wdGlvbnMiOnsiZWNtYVZlcnNpb24iOjgsInNvdXJjZVR5cGUiOiJtb2R1bGUiLCJlY21hRmVhdHVyZXMiOnt9fSwicnVsZXMiOnt9LCJlbnYiOnt9fX0=)

# ✒️ `eslint --fix` をサポートしたルール

特になし。

[v4.17.0]: http://qiita.com/mysticatea/items/1ec9ca9a00c308487fce
[v4.19.0]: http://qiita.com/mysticatea/items/be9558c263aca26416ca
[#9876]: https://github.com/eslint/eslint/issues/9876
[#9999]: https://github.com/eslint/eslint/issues/9999
[object-curly-newline]: http://eslint.org/docs/rules/object-curly-newline
[xxxx]: http://eslint.org/docs/rules/xxxx

<!-- 
![JSCS Icon](http://jscs.info/favicon.ico) JSCS 互換ルールです。
-->
werckerの基礎知識

## 基礎概念

- step
- pipeline（`build` `deploy` `dev`などのこと）
- workflow（pipelineをさらに組み合わせたもの）
- service（PostgresやElasticSearchなどを使いたい場合は、それらをserviceとして指定する）
- application
- user
- organization

デフォルトではapplicationはpublicになっているので注意。

## werckerの仕組み 

- werckerはDockerベースである
- `box`で指定したDockerコンテナ内で実行される
- `box`にはDocker Hubに登録されているDockerイメージをなんでも指定できる
- PostgresやElasticSearchなどを使うにはserviceを使う
    - serviceは別のDockerコンテナとして実行され、Docker Linkによってリンクされる
    - あるコンテナから別のサービスにアクセスするには、環境変数で示されたホスト名、ポートを使う

## タイムアウト

- 5分間何も出力がないとbuildがabortされる（変更可）
- 1つのstepのタイムアウトはデフォルトでは25分間（変更可）

http://devcenter.wercker.com/docs/faq/how-to-bypass-timeouts

## Steps Marketplace (Steps Registry)

他人が作ったstepを自分のpipelineに組み込める。
https://app.wercker.com/explore/steps/search/

## 公式ドキュメント

- [用語集](http://devcenter.wercker.com/docs/wercker-glossary)
- [Rubyの場合のGetting Started](http://devcenter.wercker.com/docs/quickstarts/building/ruby)
- [FAQ](http://devcenter.wercker.com/docs/faq)
   - [Dockerfileをビルドすることはできない](http://devcenter.wercker.com/docs/faq/can-i-build-dockerfiles)
   - [pipelineの中でdockerコマンドを使うことはできない](http://devcenter.wercker.com/docs/faq/can-i-run-docker-commands)
プログラミング 11 か月目

　もうすぐプログラミングから 1 年になろうとしています

　前回から復習メインとなっていますが、新しいことにも少しずつ触れています。今回も前回と同様に書きたいと思います。

#:pencil2: 進捗状況

**Progate**

　Ruby on Rails 5 : メモアプリを作るために辞書代わりとして


**ウェブカツ！！**
　
  　javascript・jQuery部 中級 : 非同期処理（Ajax,JSON)
　HTML・CSS部中級：　CSS3を使ったアニメーション

**CODEPREP**
　
　HTML+ CSS3 : ボタンのアニメーション（疑似要素メイン）
  　初めてのScala： 一回サラッとやっただけ
　
　※　9月30日まで延長とのこと。
　

**ドットインストール**

　cakePHP 入門 : 学び始めの頃グズグズだったが、ようやくコツを掴んだ
　Scala 入門 : CODEPREP と同様にサラッとやっただけ

#:pencil2: 新着事項
　11 か月目で新たに取り入れたことや、プログラミングで意識したこと・感じたことを書いていこうと思います。

###:page_facing_up: Ruby on Rails でメモアプリ
　
　構成はドットインストールを参考に作りましたが、プログラムを組み立てるときはほぼ Progate をメインにしています。ごくシンプルな機能にはなっていますが、特に問題なく使用できています。　

###:page_facing_up:  IT パスポート試験の勉強を始める

　 応用情報技術者試験（AP）を取得したいと思い、まずは最初のステップである IT パスポート試験から勉強を始めました。資格を取得するためだとはいえ、プログラミングをやっているだけでは見えないことも見えるようになってきた気がします。

　勉強だけでなく活用できそうな部分もあるので、それらは積極的にプログラミングや日常生活に取り入れようと思います。

#:star: 最後に
　
　プログラミングに加えて IT パスポートの勉強となると結構大変にはなってきますが、それぞれ独立しているというわけではなく、つながっている部分が多いと感じられます。それらをうまく活用して、両方とも進めていけたらなと思っています。

　まだ分からないことがたくさんありますが、一日でも早く上達できるように頑張りたいと思います。
CSS産アコーディオンの盛り合わせ ~Font Awesomeを添えて~

#CSSでアコーディオンを作成しよう
っていうやつです。

今回はFont Awesomeのアイコンを使用してみました。
[https://fontawesome.com/](https://fontawesome.com/)

Bootstrapみたいにclassに規定のものを指定するだけでアイコンが表示されて便利でした
そして初学者からするとアイコンがでるだけで楽しかった◎


##アコーディオンを開くためのラベル作成
まずこちらで対応するアコーディオンのラベルとチェックボックスを作成します。

```html:accordion.html
<!-- hiddenになっているチェックボックスに紐付くラベル -->
<label for="target_1" class="checkbox_label" >
	<i class="fa fa-user fa-fw"></i>Profile
</label>

<!-- チェックボックスのチェックの有無をクリックでの分岐に使用 -->
<input type="checkbox" id="target_1" class="hidden_checkbox" style="display: none;">
	
<!-- ここのdivはクリックされた時に表示 -->
<div class="hidden_box">
	<p>表示します</p>
</div>

```

そして、彼らにCSSを提供します

```css
/***** チェック前 *******************************/
		
/*ボックス消す*/
.hidden_box{
	display: none;
}

/***** チェック後 *******************************/

/*ボックス表示*/
.hidden_checkbox:checked + .hidden_box{
	 display: block;
 }	
```

チェックされたチェックボックスの下にあるdivに対してdisplayをして、表示をさせています。
とりあえずここまでの結果がこちら↓↓

![accordion_1.gif](https://qiita-image-store.s3.amazonaws.com/0/224934/4d28fd62-ffa8-fecf-4ae5-b6751943d157.gif)

アコーディオン感がない、、、
びよーんって出てくる感が必要な気がしたので、displayからheightで高さを持たせる方向に変更します

```css
/***** チェック前 *******************************/
		
/*ボックス消す*/
.hidden_box{
     max-height: 0;
     overflow: hidden;
     transition: 0.5s;
}  

/***** チェック後 *******************************/

/*ボックス表示*/
.hidden_checkbox:checked + .hidden_box{
     max-height: 50;
 }	
```

そして、出てくる側に出てきてることがわかりやすいように色をつけると、、
![accordion_2.gif](https://qiita-image-store.s3.amazonaws.com/0/224934/8cb5686f-9414-9b32-6905-d6578cf120cd.gif)

っぽい感じになった！(hover時の色も少し変えてみた)

あとはラベルに対して開いてる感が欲しいので、
ラベルに矢印アイコンをつけて開閉に応じて矢印を向きが変わるやつも一緒にします。

![accordion_3.gif](https://qiita-image-store.s3.amazonaws.com/0/224934/5bee469b-3306-e924-0cae-31261841a537.gif)

矢印を下に向ける分岐がわからなかった、、、
チェックされた時に,上向きを```display: none;```にして、
下向きを表示する、という風にしたかったけど、わからなかったので、ここまで〜

とりあえず複数並べて盛り合わせの完成〜
![accordion_4.gif](https://qiita-image-store.s3.amazonaws.com/0/224934/b02047a7-7501-6b14-f613-1aed74b53aeb.gif)

#まとめ
- アイコンの変更までを行うとjQueryを使った方が楽だなと思った
- そして、CSSの勉強の必要性を感じた、、
- そして、色の配色センスがなかった、、

CSSのみでアイコンの表示変更がお分かりになる方がいらっしゃいましたら、
教えてください、、

アイコン用にhiddenのチェックボックスを作成してラベルと紐づけて、
アイコンの上に配置する、とかしたらできる気がしたけど、ご飯タイム🍙

[https://github.com/SyoheiYamaki/AccordionWithCss](https://github.com/SyoheiYamaki/AccordionWithCss)
Routing Error uninitialized constant HomeControllerと出てしまいました

![image.png](https://qiita-image-store.s3.amazonaws.com/0/237524/267b6914-0fbb-75c5-7d77-4a93814dbb73.png)

このようにエラーが出てしまいました。どこからどのように直していいのか、分かりません。
どなたかわかる方、教えてください。
numpy.padの使い方が分からなかったのでメモ

Numpyのメソッドの一つ、`pad`がよく分からなかったので、調べた内容をメモします。

[numpy.pad](https://docs.scipy.org/doc/numpy/reference/generated/numpy.pad.html)

```.py
>>> data = [1,2,3]
>>> numpy.pad(data, [2,3], 'constant')
array([0, 0, 1, 2, 3, 0, 0, 0])
```
上記の引数の説明は以下のように書かれています。

- array : array_like of rank N
 - Input array
- pad_width : {sequence, array_like, int}
 - Number of values padded to the edges of each axis. ((before_1, after_1), ... (before_N, after_N)) unique pad widths for each axis. ((before, after),) yields same before and after pad for each axis. (pad,) or int is a shortcut for before = after = pad width for all axes.
- mode : str or function

第1引数にはN次元の配列、第2引数には前・後の文字詰め量、第3引数には埋め込み方式を指定します。
先の例だと元データ`data`の前に2つ、後に3つの埋め込み値`0`を連結します。
`[0,0] + [1,2,3] + [0,0,0]`

第2引数はタプルも可

```.py
numpy.pad(data, (2,3), 'constant')
```

第3引数の`mode`は色々指定ができて、`edge`だと両端の値をコピーします。

- *constant* 標準
- *edge* 端の値をコピー
- *linear_ramp* 直線傾斜になる様に端を補完
- *maximum* 最大値で補完
- *mean* 平均値で補完
- *median* 中央値で補完
- *minimum* 最小値で補完
- *reflect* 反射して補完 - ABCBABCBA の様になる
- *symmetric* 対称な補完 - ABCCBAABC の様になる
- *wrap* 順序を模して補完
- *empty* 1.17以降使用可能

```.py
>>> numpy.pad(data, (2,3), 'edge')
array([1, 1, 1, 2, 3, 3, 3, 3])
```

埋め込む値を変えるには名前付き引数で`constant_values`を指定します。

```.py
>>> numpy.pad(data, (2,3), 'constant', constant_values=(8,9))
array([8, 8, 1, 2, 3, 9, 9, 9])
```

次は2次元データを見て見ます。

```.py
>>> data = [[1,2,3],[4,5,6]]
>>> numpy.pad(data, (2,3), 'constant')
array([[0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 2, 3, 0, 0, 0],
       [0, 0, 4, 5, 6, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0]])
>>> numpy.pad(data, (2,3), 'edge')
array([[1, 1, 1, 2, 3, 3, 3, 3],
       [1, 1, 1, 2, 3, 3, 3, 3],
       [1, 1, 1, 2, 3, 3, 3, 3],
       [4, 4, 4, 5, 6, 6, 6, 6],
       [4, 4, 4, 5, 6, 6, 6, 6],
       [4, 4, 4, 5, 6, 6, 6, 6],
       [4, 4, 4, 5, 6, 6, 6, 6]])
```

前後に値または配列がコピーされているのがわかります。

第2引数を配列にすることによって各ランクの幅量を変えられます。

```.py
>>> numpy.pad(data, [(0,1),(2,3)], 'constant')
array([[0, 0, 1, 2, 3, 0, 0, 0],
       [0, 0, 4, 5, 6, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0]])
```

以上です。
Pythonで音を監視して一定以上の音量を録音する

# はじめに

「音をテーマに機械学習の題材を調査する」という宿題を頂いたことから、一定のルールで継続的に音を収集する方法を検討したのでメモします。

ちなみに、環境設定などは以下の記事をご参照下さい。

[Pythonで音を録音して可視化する](https://qiita.com/mix_dvd/items/adce7636e2ab33b25208)

# 閾値を超えたら2秒間録音

以下のスクリプトを作成する。

```py:record2sec.py
#!/usr/bin/env python

# ライブラリの読込
import pyaudio
import wave
import numpy as np
from datetime import datetime

# 音データフォーマット
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 2

# 閾値
threshold = 0.01

# 音の取込開始
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
    channels = CHANNELS,
    rate = RATE,
    input = True,
    frames_per_buffer = chunk
)

cnt = 0

while True:
    # 音データの取得
    data = stream.read(chunk)
    # ndarrayに変換
    x = np.frombuffer(data, dtype="int16") / 32768.0

    # 閾値以上の場合はファイルに保存
    if x.max() > threshold:
        filename = datetime.today().strftime("%Y%m%d%H%M%S") + ".wav"
        print(cnt, filename)

        # 2秒間の音データを取込
        all = []
        all.append(data)
        for i in range(0, int(RATE / chunk * int(RECORD_SECONDS))):
            data = stream.read(chunk)
            all.append(data)
        data = b''.join(all)
        
        # 音声ファイルとして出力
        out = wave.open(filename,'w')
        out.setnchannels(CHANNELS)
        out.setsampwidth(2)
        out.setframerate(RATE)
        out.writeframes(data)
        out.close()
        
        print("Saved.")
        
        cnt += 1

    # 5回検出したら終了
    if cnt > 5:
        break
        
stream.close()
p.terminate()
```

# 動作確認と閾値調整

以下のコマンドを実行すると、閾値以上の音量の音が鳴ると自動的に発生日時をファイル名としたWAVファイルが出力されます。

```
chmod a+x record2sec.py
./record2sec.py
```

検出したい音量が検出できるよう閾値（threshold）を調整。

# データ収集

調整ができたら以下のとおりスクリプトを変更。

```py:
    #    cnt += 1
    #if cnt > 5:
    #    break
```

コメントアウト後、以下のコマンドを実行すると継続的に音を収集し、WAVファイルを生成します。

```
./record2sec.py &
```

できた！

これをRaspberry PIなどを使って自動的に実行させれば、音が収集できて機械学習に利用できるかも...（続く）
卒論執筆環境を手軽に構築する

# はじめに
卒論の執筆にあたり、私はMac, Windows, Linux系のどれもよく使うのでそれぞれでのLaTeXの環境構築がネックでした。
また、いちいち指導教員に見せるのもすら面倒だったのでそれならGithHubにLaTeXのソースをpushすればtravis-ciでpdfをビルドし、Dropboxにアップロードしてそれを指導教員にメールで通知とするところまで自動化すれば私は執筆に集中できる！と考えました。
この記事ではdockerとかtravis-ciなどの細かい説明はしません。

# dockerを選んだ理由
手元のマシンにいちいちMacTexとかTexLiveとか入れるのめんどい。。。
ということでdockerであらかじめLaTeXのビルド環境を構築しておいて各ローカルマシンでそれを走らせればローカル環境の差をなくせるし、travis-ciでもいちいちaptでtexliveをインストールするよりdocker pullするだけで環境構築できるので楽だということです。

# dockerのイメージについて
ベースはdebian-stable-slimとしてaptでtexliveを構築します。
alpineでインストーラをダウンロードしてインストールすることも考えましたが、後々何かを追加したい時にaptがあると便利なのでdebianをベースイメージとして採用しました。
不要な言語環境やドキュメントは削除することでイメージサイズを削減します。
最終的にイメージサイズは405MBになりました。
色々工夫すればもう少しダイエットできそうですがこのくらいにしておきます。

```Dockerfile:Dockerfile
FROM debian:stable-slim

RUN apt update && \
    apt upgrade -y && \
    apt install fonts-ipafont fonts-ipaexfont texlive texlive-formats-extra texlive-science texlive-lang-japanese -y && \
    apt purge *-doc* *chinese* *korean* *thai* -y && \
    apt clean -y && \
    apt autoremove -y && \
    apt autoclean -y && \
    mkdir /workdir

WORKDIR /workdir

VOLUME ["/workdir"]

CMD ["bash"]
```

このイメージはDockerHubに公開しているので以下のコマンドで取得可能です。

```
$ docker pull johejo/debian-latex-jp
```
# ビルド
作成したイメージをデーモンとして走らせます。
デーモンにする理由は単に私の好みです。
基本的に私はdockerを使うときはデーモンで起動して入力はdocker execでするようにしています。

```
$ docker run --name latex-env -itd -v $PWD:/workdir johejo/debian-latex-jp
$ docker exec latex-env bash -c "SOME LATEX COMMAND"
```
# Dropboxへのアップロード
curlを用いたDropboxへのアップロードツールを用います。
[andreafabrizi/Dropbox-Uploader](https://github.com/andreafabrizi/Dropbox-Uploader)
通常はこのスクリプトを初めて実行した時にトークンの設定ができるのですが、今回は自動化が目的ですのでトークンを環境変数から読み込みます。
homeディレクトリに.dropbox_uploaderという名前でトークンを書き込んでおくとそれを使ってくれます
アップロードスクリプトはこんな感じです

```bash
 #!/bin/bash
 
readonly BUILD_DIR=build
readonly DROPBOX_UPLOADER_URL=https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh

curl $DROPBOX_UPLOADER_URL -o dropbox_uploader.sh
chmod +x dropbox_uploader.sh
echo "OAUTH_ACCESS_TOKEN=($DROPBOX_TOKEN)"  >  ~/.dropbox_uploader
./dropbox_uploader.sh upload $BUILD_DIR/hoge.pdf .
rm -f ~/.dropbox_uploader
```

## travis-ci
GitHubのリポジトリと連携してCIするサービスですが、スクリプトを設置することで色々な自動化に使えます。
今回はtravis-ciの通知機能でビルド完了時にメールを送るようにしています。
ここら辺はslackに置き換えるのも良いでしょう。
あらかじめtravis-ciの設定でDropboxのトークンを環境変数としてセットしておく必要があります。

```yml:travis.yml
service: docker

language: bash

notifications:
  email:
    - foo@bar.com
  on_success: always
  on_failure: never

addons:
  apt:
    packages:
      - curl

before_install:
    - docker run --name latex -itd -v $PWD:/workdir johejo/debian-latex-jp:latest

script:
    - docker exec latex bash build.sh
    - ./upload.sh
```
# 最後に
快適で手軽な執筆のためでしたが私はこの環境を作り上げるまでに割と時間がかかって執筆がおろそかになりました。
werckerで途中の状態をDocker Hubにpushする

# TLDR

werckerのパイプラインはDockerコンテナ内で実行される。`wercker.yml`に`internal/docker-push`というステップを組み込むと、その時点のコンテナの状態をDockerイメージ化し、Docker Hubにpushすることができる。これを使うとパイプラインがうまく動かないとき問題調査に役立つかもしれない（実際に調査に使ったことはまだないので）。


# wercker.ymlにinternal/docker-pushを追加

```
    steps:
        # （中略）
        - internal/docker-push:
            username: $DOCKERHUB_USERNAME
            password: $DOCKERHUB_PASSWORD
            repository: myname/repo_name
```

`$DOCKERHUB_USERNAME`, `$DOCKERHUB_PASSWORD` は環境変数で指定しておく。

以上を記述してパイプラインを実行すると、Docker Hubにイメージがpushされる。


# Docker Hubにpushされたイメージを実行

ローカルにて

```
$ docker run -it --rm myname/repo_name /bin/bash
```

Dockerコンテナ内にて

```
root@5a8e4cdd3366:/# cd /pipeline/
root@5a8e4cdd3366:/pipeline# ls -l
total 24
drwxr-xr-x 2 root root 4096 Feb 17 01:01 cache
drwxr-xr-x 2 root root 4096 Feb 17 01:01 output
drwxr-xr-x 2 root root 4096 Feb 17 01:01 script-9154b912-8d10-4d94-804a-18ab5832c388
drwxr-xr-x 2 root root 4096 Feb 17 01:01 script-d3b86d33-24a1-4cfd-8a44-f3c60022eb17
drwxr-xr-x 3 root root 4096 Feb 17 01:01 source
drwxr-xr-x 2 root root 4096 Feb 17 01:01 wercker-init-f0f3b304-4197-4328-9524-348011fce6fb
```

こんな感じで`/pipeline`に各種ファイルが保存されているので、ここを調べれば良い。
Power BIでデータを曜日でフィルタする方法

Power BI上で時系列のデータを表示する際、例えば「月曜日のデータだけ見たい」というようなときに曜日でデータをフィルタリングする方法を説明します。

以下のようなデータがあるとします。このデータをTableと名付けます。

![table.jpg](https://qiita-image-store.s3.amazonaws.com/0/203824/e558775d-233b-4d78-902f-30b1591e348d.jpeg)

このデータを読み込んだら、これとは別に以下のようなマスターテーブルをPower BI上に作成します。これをDayOfWeekTableと名付けます。

![dayofweek.jpg](https://qiita-image-store.s3.amazonaws.com/0/203824/5b147cfe-b89e-9d5d-4c40-5b772ec5845d.jpeg)

次に先ほど読み込んだTableに、以下のようなメジャーを定義します。

```
ShowValue = SWITCH(TRUE,
   CONTAINS(DayOfWeekTable, DayOfWeekTable[DayOfWeekId], WEEKDAY(MAX('Table'[Date]))),
   MIN('Table'[Value])
)
```
これで準備完了です。データをビジュアライズしてみましょう。ここでは分かり易くするために、単純な表にデータをビジュアライズします。このときValueを表示するのではなく、先ほど作成したメジャーであるShowValueを使うことに注意します。

そして隣にスライサーを追加し、ここに先ほど作成した曜日のマスターテーブルのDayOfWeekNameを追加します。ちょっと並び順が気持ち悪いですがご愛嬌ということで。

![Visual.jpg](https://qiita-image-store.s3.amazonaws.com/0/203824/eebe793c-e5f4-7a4c-0e20-91a52b57699b.jpeg)

スライサーの曜日を選択すると、その選択した曜日のデータだけ表示されることが確認できると思います。複数選択にも対応しています。

![selec.jpg](https://qiita-image-store.s3.amazonaws.com/0/203824/f7ca97a3-d049-0734-a972-80cfe8ad8b89.jpeg)
GitHubのPull Requestのレビューの際にそのブランチの内容をマージした時のものを取得する

## 概要

GitHub上のPull Request(以下、PR)をレビューする際に、そのPRを実際に動かして挙動を確認したい場面がある。しかしながらPRのHEADが最新のmaster(=マージ先ブランチの内容)を反映しているとは限らない。つまり本来であれば動作確認のためにローカルにPRのHEADにチェックアウトして、自分でマージコミットを作る必要があるが、実はリモートがGitHubであれば既にマージ先ブランチの内容を反映したマージ済みブランチを作ってくれている。しかし通常ではそこにアクセスしないようになっているので、そこにアクセスできるようにしたい。

## 変更内容

### Git config を変更する

`.git/config` を編集し、 remote ブランチの fetch するものの中に以下の行を追加する。

```diff:.git/config
 [remote "origin"]
   url = git@github.com:windyakin/kosen-website-crawler.git
   fetch = +refs/heads/*:refs/remotes/origin/*
+  fetch = +refs/pull/*/merge:refs/remotes/pr/*
```

### fetch してみる

```console
$ git fetch -p
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
From github.com:windyakin/kosen-website-crawler
 * [new ref]         refs/pull/21/merge -> pr/21
 * [new ref]         refs/pull/22/merge -> pr/22
```

この際の「21」や「22」はPRの番号(ID)のこと。

以降、 `git fetch` を行うと `pr/[ID]` にそのPRのマージ先のブランチがマージされたコミットが取得できるようになる。

### checkout してみる

```console
$ git checkout pr/21
Note: checking out 'pr/21'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at e0ba4c3 Merge b826855ed0f0e16b2e432ff467372c87951d5323 into f60fff0e26671d935ed9e65e3f52a6bdd69ac1b0
```

HEAD を確認するとその PR の HEAD がマージ先ブランチにマージされた状態のブランチであることがわかる。

## 注意事項

* PRがコンフリクトすると、そのコンフリクトを起こす直前までのマージコミットしか取れない
* このままでは push はできない

## 参考にしたやつ

* https://help.github.com/articles/checking-out-pull-requests-locally/
* https://qiita.com/tarr1124/items/d807887418671adbc46f
Macにruby環境を用意する

# この記事について
Macにruby入れたことが無かったのでそのメモ :pencil: バージョン管理というか切り替えができるものを入れたいなぁ程度に考えてた感じ。

# インストール手順
割りと最近の記事だったので https://qiita.com/shinkuFencer/items/3679cfd966f6a61ccd1b を参考に。以下はただのコマンドのログなのでインストール手順はこちらの記事の方を。

公式の手順はgithub.com見る→ https://github.com/rbenv/rbenv

```bash
$ brew --version
Homebrew 0.9.9 (git revision aae4; last commit 2016-05-13)
Homebrew/homebrew-core (git revision ff768; last commit 2016-05-13)
```

## rbenvをインストール

```bash
$ brew install rbenv ruby-build
```

```bash
$ rbenv init
# Load rbenv automatically by appending
# the following to ~/.bash_profile:

eval "$(rbenv init -)"
```

↑と出るので .bash_profile を変更

:star: ここで設定を反映させるために新しいターミナルを起動

## ruby をインストール

```bash
$ rbenv --version
rbenv 1.0.0
```

安定版は本日時点で2.5.0だったのでそれを入れよう↓で安定版を確認
https://www.ruby-lang.org/ja/downloads/

```bash
$ rbenv install -l
Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
...
  2.3.0
  2.3.1
  2.4.0-dev
  jruby-1.5.6
  jruby-1.6.3
  jruby-1.6.4
...
```

2.5.0 無いじゃん :cry: 最新のリリース版っぽい 2.3.1 を入れる

```bash
$ rbenv intall 2.3.1
```

```bash
$ rbenv versions
* system (set by /Users/aki/.rbenv/version)
  2.3.1
```

```bash
$ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
```

```bash
$ rbenv global 2.3.1
```

```bash
$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
```
EISlive2d.jsを使ってツクールMVでLive2Dを動かす

多分、同じことをやっている人は他にもいるでしょうが、こういう記事をまとめるとどこかで役に立つのです。
今回使うのは[EIS Live2D](http://endlessillusoft.com/eis-live2d/)です。
必要な機能がそろっていますし、とてもきれいに設計されているプラグインです。

#導入の仕方
上記URLからダウンロードをクリックして、libs.zipとEISlive2d.jsを入手します。
さらに、公式SDKからlive2d.min.jsを入手します。
EISlive2d.jsをjs/pluguins/フォルダに配置、残りの3ファイルはjs/libs/フォルダへ配置します。

さらに、imgなどの他のファイルがあるプロジェクト直下にlive2dフォルダを作成します。
そのあとはプラグインパラメータで使用するデータを設定します。
第一要素のnameはプラグインコマンドでモデルを呼び出す際の識別子です。
第二要素のmodelPathはモデルの定義ファイルを設定します。
実行時には'live2d/'+modelPath+'.json'と連結された形で使用されます。
![2018-02-17 (1).png](https://qiita-image-store.s3.amazonaws.com/0/92869/7dd874fe-a93c-4c0f-ac1b-659a9d91817b.png)

#動かしてみる
<pre><font color="black">◆</font><font color="indigo">プラグインコマンド：</font><font color="navy">addToScene inside</font>
<font color="black">◆</font><font color="indigo">プラグインコマンド：</font><font color="navy">showModel inside</font>
<font color="black">◆</font><font color="indigo">プラグインコマンド：</font><font color="navy">stopRandomMotion inside</font></pre>
これだけで動きます。
プラグインコマンドはhelpを見ずにソースコードから推察しました。

想像以上に簡単で、技術調査としてあれこれやった2週間が一発で解決しました。
EISlive2d.jsは非常に明快でわかりやすい書き方をしているので、読みながら機能を探れると思います。
Discord.py の example/playlist.py を Windowsで動かした

Discordの音楽再生用サンプルBot（example/playlist.py）をWindowsで動かしてみた

Windows環境にインストーラでPythonをインストール（3.6.4を入れた）

```
python -m pip install -U discord.py[voice]
python -m pip install -U youtube-dl
```
別途ffmpeg をインストールする必要がありました

あとはファイルの中のトークンを適時書き換えると動きます

```
python playlist.py
```

参考：https://github.com/Rapptz/discord.py
wercker APIの使い方

現在のところ、提供されているendpointは4つ。今後拡充していくとのこと。

1. applications
1. runs
1. builds（古いstackのユーザー向け。新しいユーザーはrunsを使うこと）
1. deploys（古いstackのユーザー向け。新しいユーザーはrunsを使うこと）

## トークンの取得方法

画面右上の自分のアバター→Settings→Personal tokens からトークンを発行できる。トークン発行後は見えなくなるのでメモしておくこと。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/79394/8f57e04f-a457-d037-7d03-32bddb8d5915.png)


## application一覧
※$WERCKER_USERNAMEはログインするときの名前

```sh
curl -H "Authorization: Bearer $TOKEN" https://app.wercker.com/api/v3/applications/$WERCKER_USERNAME
```

## runs一覧
※$APPLICATION_IDは24桁の文字列

```sh
curl -H "Authorization: Bearer $TOKEN" "https://app.wercker.com/api/v3/runs?applicationId=$APPLICATION_ID"
```




# 公式ドキュメント

- [認証](http://devcenter.wercker.com/docs/api/getting-started/authentication)
- [endpoint一覧](http://devcenter.wercker.com/docs/api/endpoints)
git pushする時に意図しないuserが使われて認証エラーになる

## 3行で言うと
- `git push`すると、意図しないuserが使われて認証エラーとなる
- `.git/config`や、`~/.netrc`にuser指定するとそちらのuserが使われるが、消すと意図しないuserが使われてしまう
- 昔RSA認証でログインする設定をしていて、keychainに鍵登録していたのを忘れていた

## 現象
- git pushする時に認証エラーが発生した

```
% git push origin master
remote: Permission to Anorlondo448/simple-web-on-docker-compose.git denied to [意図しないuser].
fatal: unable to access 'https://github.com/Anorlondo448/simple-web-on-docker-compose.git/': The requested URL returned error: 403
```

- `~/.netrc`を設定するとそちらのuserが使われる

```
machine github.com
login Anorlondo448
password xxxxx
```

- `.git/config`に設定するとそちらのuserが使われる

```
[remote "origin"]
  url = https://Anorlondo448:xxxxx@github.com/Anorlondo448/simple-web-on-docker-compose.git
```

- `~/.gitconfig` のuserが使われない

```
[user]
  useConfigOnly = true
  email = xxxxxx@yyyy.zzz
  name = Anorlondo448
```

## 原因調査
### Macのターミナルで確認
- gitの認証方法を確認

```
% git config credential.helper
osxkeychain
```
- MacのKeyChainを使っている模様

### MacのKeyChain確認
- [アプリケーション]-[ユーティリティ]でキーチェーンアクセス.appを開く
- 検索窓で`git`で検索したら`github.com`で登録された秘密鍵が出て来た

## 原因
- 昔、githubにRSA認証でログインするために、別のuserの鍵登録していた

## 対処
### github側
- github.comのSettingから`SSH and GPG keys`を選択<img width="1041" alt="スクリーンショット 2018-02-17 9.08.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/94838/309b0f5c-8b87-1a08-db4b-33ad82713f95.png">
- 登録してある鍵を削除

### Mac側
- KeyChainに登録されているgithub.comの鍵を削除

## 解決
- `~/.netrc` `.git/config` に設定なしの状態で、userを聞かれるようになった！

```
% git push origin master
Username for 'https://github.com':
```
- あとは自分の使いたいuserの設定に戻すだけ(またRSA認証にする)

## 謝辞
- 長年解決しなかった問題ですが、
[インフラ勉強会](https://wiki.infra-workshop.tech/)で教えてくれる有志がおり、上記方法で瞬殺されました。
- [インフラ勉強会](https://wiki.infra-workshop.tech/)最高なのでは？
SparkFun Eagle Library をインストールする方法

# Eagle CAD とライブラリ
電子回路設計に [Eagle CAD](https://www.autodesk.com/products/eagle/overview) を使われている方は多いだろう．この Eagle CAD にはよく使う電子部品がライブラリとして予め登録されているが，それでも使いたい部品が登録されていないことが多々ある．

我々メイカーがよくお世話になる [SparkFun Electronics](https://www.sparkfun.com/) と [Adafruit](https://www.adafruit.com/) はこの Eagle CAD 向けにライブラリを無償提供しているので，是非インストールしておこう．

# GitHub からライブラリをダウンロードする
SparkFun も Adafruit も [GitHub](https://github.com) で Eagle ライブラリを公開している．
* [SparkFun (Git)](https://github.com/sparkfun/SparkFun-Eagle-Libraries)
* [Adafruit (Git)](https://github.com/adafruit/Adafruit-Eagle-Library)
まずは両方共クローンしておこう．ターミナルで ```
$ cd {WORKING_DIR}
$ git clone https://github.com/sparkfun/SparkFun-Eagle-Libraries.git
$ git clone https://github.com/adafruit/Adafruit-Eagle-Library.git
``` とするのが簡単だが，それも面倒なら次のリンク先からZIPをダウンロードしても構わない．
* [SparkFun (Zip)](https://github.com/sparkfun/SparkFun-Eagle-Libraries/archive/master.zip)
* [Adafruit (Zip)](https://github.com/adafruit/Adafruit-Eagle-Library/archive/master.zip)
いずれにせよ `SparkFun-Eagle-Libraries` と `Adafruit-Eagle-Library` というフォルダが出来る．

# Eagle CAD のライブラリパスを通す
Eagle CAD を立ち上げて Options メニューから Directories... を選ぶ．

Libraries の項目が最初 `$EAGLEDIR/lbr` となっているので，ここを `$EAGLEDIR/lbr:{WORKING_DIR}/SparkFun-Eagle-Libraries:{WORKING_DIR}/Adafruit-Eagle-Librari` に変更する．（注：Windowsの場合は `:` ではなく `;` を使う．）`{WORKING_DIR}` は Eagle ライブラリを置いたディレクトリ名なので，各自変えてもらえたい．例えば僕は `/Users/kanaya/Documents` にしているので，次のような設定になる．

<img width="777" alt="Eagle-Options-Directories.png" src="https://qiita-image-store.s3.amazonaws.com/0/15782/f4745cd4-ceb2-b3a8-06f6-2665c69e6d15.png">

これで次のように部品が選べるようになる．

<img width="752" alt="Eagle-Add.png" src="https://qiita-image-store.s3.amazonaws.com/0/15782/84411d49-7744-d4bb-1138-9f2f257f9b0e.png">