OmniAICreator/Qiita-1.07M huggingface dataset:
PATH_INFOをクエリストリングとした時の$_GET対策

さくらサーバーでfuelphpを動かす際には、そのままだと
.htaccessに修正を加え、PATH_INFOをクエリストリングにする必要がある。

変更前
```RewriteRule ^(.*)$ index.php/$1```
↓
変更（１）
```RewriteRule ^(.*)$ index.php?/$1```

?を付けるだけの修正だが、これだと$_GETの値が取得ができなくなる。。
取得するとリクエストパスを取得してしまう..

変更（２）
```RewriteRule ^(.*)$ index.php?%{QUERY_STRING}&request=$1 [L]```
これで、$_GETの値取得も対応できました。

参考：
[さくらサーバでNo input file specified.](http://blog.setunai.net/20121014/%E3%81%95%E3%81%8F%E3%82%89%E3%82%B5%E3%83%BC%E3%83%90%E3%81%A7no-input-file-specified/)
[リクエスト(URL文字列)を.htaccessでindex.phpにGETで渡してあげるやつ](http://qiita.com/git6_com/items/cf3cdf70555c5c03f5b8)
技術英語 > the same goes for counting the t's. / Credit goes to XXX.

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 2366 / 12833)

> the same goes for counting the t's.

関連 http://ideone.com/TolDeK

'letters'という文字列において、eの説明があり、その説明がtも同様である、とのこと。

<hr>
関連して思い出したのは

Credit goes to XXX.

論文のAcknowledgement（謝辞）において「XXXさんに感謝」という使い方をする。

関連 https://www.usingenglish.com/forum/threads/149193-quot-Credits-goes-to-quot
python超初心者のkivy勉強中のメモ

ググれば出てくるんだけど、どのサイトだったかとか忘れないようにQiitaにもこんなふうにメモしていきます。

----
1. **Widgetクラス**だとボタンは**動的配置出来ない(?)**みたいなのでFloatLayoutクラスを使った方が良い

2. kvfileについて

- **Widget**クラスを用いた場合
size:[幅、高さ]

追記:shiracamusさんよりご指摘いただき、
pos:[xが増えるほど右、~~yが増えるほど下~~
※（正しくはyが増えるほど上でした！)　デフォルトの座標は左下が0, 0]

root.xは今見ているウィジェットの一番左[root：今見ているウィジェット]
root.topで今見ているウィジェットのてっぺん[top:てっぺん]
self.heightはselfとして参照できる（まだよくわかってない）

- **FloatLayout**クラスを用いた場合

pos_hint: {"x":0, "top":1}

これでボタン左上に配置。

x：ボタンの左の位置を(ウィンドウの幅)に合わせる．
y：ボタンの下の位置を(ウィンドウの高さ)に合わせる．
right：ボタンの右の位置を(ウィンドウの幅)に合わせる．
top：ボタンの上の位置を(ウィンドウの高さ)に合わせる．

**pos_hintはすべてのレイアウトに使用できるわけではない。**
Label, Buttonに関しては使用できる。

----
Unityでオブジェクトの法線方向を視覚的に見えるようにする！！！

![0009cebd8b9a6200882ffec12c7d49e0.gif](https://qiita-image-store.s3.amazonaws.com/0/108368/5ca34889-fd68-4b2f-a4d0-bb8eeeb43ba4.gif)

こんな感じ

以下のスクリプトをアタッチしたオブジェクトの法線方向がベクトルとして見えます。

わかりやすい！

これでシェーダでいじるとき楽かも！

（ちなみにオールC#なんですこぶる遅いです。改善の余地大いにあり）

使ったのは以下のPhotoshopで簡単に作ったpng画像。

![vector.png](https://qiita-image-store.s3.amazonaws.com/0/108368/063fc8b0-c376-120f-2dd9-ff18febe25ae.png)

qiita上だと見えないですね。

色をspriteRendererのcolorで変更できるように白色で作ったんで見えなくて仕方ないです。

心の目で見てください。

(保存してUnityに入れ込めばちゃんと使えます。)



#コード

```csharp:qiita.csharp

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MakingNormalVector : MonoBehaviour {


	List<GameObject> vectors = new List<GameObject>();

	Mesh mesh{set {this.mesh= value;} get{return GetComponent <MeshFilter> ().sharedMesh;}}

	private Vector3[] vertices,normals;

	void Start () {

		var vector = Resources.Load ("Vector");

		vertices = mesh.vertices;
		normals = mesh.normals;


		mesh.vertices = vertices;

		for(int i =0;i<vertices.Length; i++){
			vectors.Add((GameObject)Instantiate (vector, this.transform.position+vertices[i], Quaternion.identity));
			vectors [i].transform.LookAt (normals[i]);
			vectors [i].transform.rotation *= Quaternion.Euler (90, 0, 90);
			vectors [i].transform.parent = this.transform;

		}

	}


}

```

一番頭を悩ませたのはここ

**vectors [i].transform.rotation *= Quaternion.Euler (90, 0, 90);**

Sprite画像の回転方向の向きが理想的な向き(normal[i]に勝手に向いてー)ってのと違いました。

明日中にGithubにもあげたい。

てかshaderから、法線情報取得してC#側に渡した方が軽いかな。

なんかいい方法あったら教えてください。。。。
AzureのAppServiceからSQLデータベースにasp.netで接続するまでに4日かかった話

# ちょっとAzure触りたくなった #

ちょっとAzure触ってみてなんかリッチなUIだし？
さすがMicrosoft様Webブラウザ以外は完璧ね！
と思ってたのですが…

そいでもってちょっとなんか作ってみようかなとか思っちゃったわけですが！！
ついでにこのページをやってみようとか思ったわけですが！！
https://docs.microsoft.com/ja-jp/azure/app-service-web/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth-sql-database

C#は好きだけど今までasp.netに一切触ってこず！
Azureも今あと無料期間9日残っているわたくしには！！
はまるポイントがめちゃくちゃあったので！！

僕と同じように挫折しそうな人のためにDB接続までの顛末記紹介していきます。

# 発行までの道のりがやばい #

## 1,リソースグループを日本に立てよう ##

チュートリアルではVisualStudioがいい感じにやってくれると言っていますが
リソースグループを東日本にしときましょう。
特に無料のAppService使うなら日本のほうが近いぞ

AppServiceとかの新規のリソースグループから設定するとなんかアメリカになるっぽい

## 2,SQLデータベースとかVisualStudioから作ってくれなかった ##

デプロイ失敗したからあきらめて自分でインスタンス立てました(試用版だとだめなのかな？)
いいかい
以下の二つを立てるんだぞ

* 「App Service」
* 「SQL データベース」

よく似た「MySQL データベース」とかいうのがあるけどそれは罠だ
初心者を陥れようとする悪辣な罠だ
一番安いやつだと月額600円くらいで借りれるみたい幸せ

# 発行してからDBに接続できない編 #

## 3,とりあえず発行してみたら接続できなかった ##

チュートリアルでContactsっていうページを作って、ローカルで見てみたらわーい動いた楽しいなー
だったわけですが…
そっから発行したら動かない…

いやまぁそりゃそうだ（発行先の）ローカルにDBなんてありゃしない
さてここから三日かかりました…

## 4,そもそもローカルからデータベースに接続できない ##

じゃあとりあえずDBに（手元の）ローカルマシンから接続してみようというわけでこれを起動してみて接続してみる。
[SQL Server Management Studio (SSMS) のダウンロード](https://msdn.microsoft.com/ja-jp/library/mt238290.aspx)

なんかIPがどうとか言ってる…わかんない…

### 解決策 ###

これに関してはSQLデータベースの設定から
ファイアウォール設定
でクライアントIPを許可リストに入れてあげよう

そうすると(多分)空のDBが表示されるはず

## 5,接続文字列…とは…？ ##

なんやかんや探していると接続文字列というのがあるらしい
これをどっかにぶち込めばいいんだ！

Web.configとかいうのになんか書いてある
これ書きかえればいいんでしょ！

って**失敗しました**
そこを書き換えてはだめです。

ちなみに接続文字列はDBの設定から
データベース接続文字列の表示
というのが見れるのでそちらから取得できます。

このいかにもコピペできそうな文字列がまた罠だったんですけどね…

## 6,データベースは書き換えられた ##

接続文字列は発行するときのダイアログの
「設定」->「ApplicationDBContext」にコピペで設定します。
チュートリアルに沿ってCode First Migrationsを実行するにチェックを入れます。

そして発行すると…
DBが！書き換わりません！！

実はですね…よく見るとですね
この接続文字列こんな感じになってましてね
「Server=tcp:hogehogehugahuga.windows.net,1433;Initial Catalog=hoge_db;Persist Security Info=False;User ID=**{your_username}**;Password=**{your_password}**;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;」

ここ、書き換えないといけないんだよね…
注意書きとか書いといてよ…

* {your_username}
* {your_password}

というわけで、これを入れるとDBが書き換わって無事Contactsに素晴らしいページが出来上がって！！**ない。゜(゜´Д｀゜)゜。**!!

次で本当に接続できます。

## 7,AppService側にも接続文字列の設定あった ##

最後にAppServiceの画面から
アプリケーション設定というものがあるのでそこの接続文字列の設定をいじってあげてください。
これが上書きされるみたいです。

これで無事素敵なContactsページができました。

めでたしめでたし…
なおチュートリアルまだ終わってない模様…
無料で為替レートを毎日取得しよう

# TL;DR

定期的（毎日10:00JST）に為替レートを取得して、slackに通知する方法を示す

- 定期スクリプト実行に[zapier](https://zapier.com/)を使用
- 為替レート取得に[YQL](https://developer.yahoo.com/yql/)を利用
- 通知先にslackを利用
    - （メール送信に変更可能）

# 各社で為替レート通知サービスはあるが・・

メインの取引サイトではサービスされてなかったり、別会社がやってても口座契約必須だったり、iOSアプリでも個別に通知してくれるものもあるけど、通知のだけのためにアプリ入れるのも心がザワザワする。ウェブで為替レート取得APIはあっても自前herokuしたりする規模でもないしな、という事でざっくりとzapierにまかせてみたら出来た。

意外とJavaScript（Pythonも実行できるらしい）を実行出来て、JSONで返ってくるなら勝手にパースもしてくれて、次のタスクに変数として引き継いでくれて・・結構使い勝手はいいかもねzapier、と思った。

図示して説明しようかと思ったけど、説明過剰になるので省くことにした。それにzapierの紹介ページでもないので、zapier本体のことについては、これも省略する。また、YQLについてももっとよく知ればたくさんできるようになるかもしれないけど、本記事とは関係ないので深追いしないことにした。

# 01. zapierのタスク構成

1. Schedule by Zapier
1. Code by Zapier 
1. Slack

## 01-01. Schedule by Zapier　設定

- Every Day , 10am などに設定する。
- [[Profile]](https://zapier.com/app/settings/profile)のTimeZoneを`(GMT +9:00) Tokyo`にしておく。

## 01-02. Code by Zapier　設定

Run JavaScriptで下記を記述

```js
fetch('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20("USDJPY")&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys')
  .then(function(res) {
    return res.json();
  })
  .then(function(json) {
    callback(null, json);
  })
  .catch(callback);
```

YQLの中身は下記（今回は、USDJPYだけ抽出する）

> https://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in ("USDJPY")&format=json&env=store://datatables.org/alltableswithkeys

- 参考：[YQLを使ってYahoo! Financeから為替レートを取得する](http://qiita.com/masato/items/6f81bdc89f81a7b6cc3a)
- 参考：[YQL Console](https://developer.yahoo.com/yql/console/?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22USDJPY%22)&env=store://datatables.org/alltableswithkeys#h=select+*+from+yahoo.finance.xchange+where+pair+in+(%22USDJPY%22))


## 01-03. Slack　設定

チャンネルを指定して下記を指定

```
{{query__results__rate__Name}} = {{query__results__rate__Rate}}
```

結果は下記のようにメッセージが得られる

```
USD/JPY = 114.8200
```
xcode：iOS シミュレーターのフォルダの場所

OSX El Capitan(10.11.6)
Xcode 8.2.1
Swift version 3.0.2
を使用しております。

最近シミュレーターで開発をしてて、めんどうになってきたので覚書。
開発時、シミュレーターを使って開発することが多いかと思います。
データのダウンロードがうまくいったか？、作ったデータファイルがきちんとできているのか？
など、シミュレーターのフォルダの中を見たいことがあるかと思います。
慣れた人だと多分
ファインダー：移動＋optionでライブラリに移動してそれらしいフォルダを探せるかと思われます。

*~/Library/Developer/CoreSimulator/Devices/*
がシミュレーターのフォルダの場所です。
実際フォルダに移動してみると、アプリを開発している本数によるかもしれませんが、英数字のフォルダ名が並んでいてどれを使っているのかわからない。

で、どこだ？とググっったりするのですが、よく考えたら
プログラムで単純にログに表示させれば使用しているシミュレーターのフォルダの場所はわかりますね。
下記、単純にログに表示させるだけ

```swift:例swift
let documentDirPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(documentDirPath)
```
作成したプロジェクトのDocumentsまでが表示されるのでそこまで辿っていけば使っているフォルダまでいけますね。

これを毎回確認して移動というのは面倒なのでここでAutomator登場。
アプリケーション ＞ Automator.app

<img width="316" alt="スクリーンショット 2017-03-14 2.15.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/120102/e26162d0-e0ae-8242-806c-bee0677a15c4.png">


<img width="1000" alt="スクリーンショット 2017-03-13 12.50.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/120102/ff0e8d3b-d651-9f3d-2af2-072b0edd7cdb.png">

```shell-session:スクリプト内容
cd ~/Library/Developer/CoreSimulator/Devices/
cd `ls -t | head -n 1`/data/Containers/Data/Application 
cd `ls -t | head -n 1`/Documents
open .
```
Automatorで新規を選んで「シェルスクリプト実行」（ダブルクリック）を選び上記を入力orコピペ
　※バッククォートってあまり使うことないのであれ？どこ？ってなるかもしれません。
　　日本語キーボードですが
　　Shift+@キーで「\`」が入力できます。＠はどこ？ってあまりならないかとおもいますが「P」の右です。
　　コピペすれば探すこともないです。

入力後、適当な場所に保存。

**1行目**
```cd ~/Library/Developer/CoreSimulator/Devices/```
ここはスパッと取得できないので決め打ちです。シミュレータがある場所まで移動します。
今後場所が変わったら修正が必要になります。そもそもこのスクリプトが使えるかどうかもわかりません。

**2行目**
```cd `ls -t | head -n 1`/data/Containers/Data/Application```
\`ls -t | head -n 1\`はタイムスタンプ順にファイル取得し、その最新１つだけのファイル名を表示するということになります。
**ls -t** がタイムスタンプ順に名前を取得、
**|**  がパイプラインで結果を次に渡すということになり（今回は結果を連結させて使用）
**head -n 1**  は先頭部分を表示するのですが **-n 1**はその行数表示ということで1行表示となります。
**\`\`**で括ってあるのは結果の出力を使用したいのでこのような書き方になってます。
cd lsと書くとそんなファルダはないとエラーになります（lsというフォルダがなければですが）。
なので実行すると
”一番タイムスタンプの新しいフォルダ/data/Containers/Data/Application”
ということになり、そのフォルダに移動。
シミュレーターのアプリフォルダになります。

**3行目**
```cd `ls -t | head -n 1`/Documents```
更に使ったアプリ（実行したアプリ）が一番新しいはずなのでそれのフォルダを取得して移動。

**最後、4行目**
```open .```
開く。ということになります。

Xcodeからアプリ実行をしシミュレーター起動。
Automatorで作ったものを実行するとアプリで使っているフォルダーがファインダーが開く。
これで少しは楽になるかと。
Swift and Test 記事まとめ (不定期更新)

僕参考になる記事、使っているや興味があるテスティングライブラリーらのリスト。

## 記事

### 日本語

- [CarthageでQuickを導入してテストを動かしてみるまで](http://qiita.com/akatsuki174/items/77cb95265919b5ad4965)
- [GitHub上のiOSプロジェクトでもTravis CI × CodecovでCIしたい!](http://qiita.com/KAGE_MIKU/items/727b9100c66a44b3a38c)
- [Travis CIでObjective-C/Swiftのテストを実行する](http://yanamura.hatenablog.com/entry/2014/10/25/225053)
- [Carthageのcacheを実現して、CircleCIを10分早くする！](http://qiita.com/yoshimikeisui/items/630df90fd1022db8faac)

### 英語

- [Better Unit Testing with Swift](http://masilotti.com/better-swift-unit-testing/): Mindset, Dependency Injection など

## Libraries

- [AliSoftware/OHHTTPStubs](https://github.com/AliSoftware/OHHTTPStubs): Stub, Mock, Test double
- [Quick/Quick](https://github.com/Quick/Quick): BDD
- [Quick/Nimble](https://github.com/Quick/Nimble)
Xcode8.2でSimulatorのスクリーンショットを撮るとSimulatorが落ちる


Xcode 8.2 以降でSimulatorの「Save Screen Shot (⌘S)」するとシミュレーターが落ちますね。

これはAppleの[Xcode8のリリースノート](https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Introduction.html#//apple_ref/doc/uid/TP40001051)のXcode 8.2 Updateの部分に下記のように記載されています。

> Known Issues

> Simulator can crash when saving a screenshot when running on OS X El Capitan. (29182710)
> The crash does not occur on macOS Sierra.

**El Capitanでsave screenshotすると落ちるよ。Sierraだったら落ちないよ。**

まだEl Capitanの人残念・・・

とりあえずシミュレーター立ち上げて下記のコマンドで叩けばスクショは撮れます。

```
$ xcrun simctl io booted screenshot hoge.png
```

以上
Azure AD Application Proxyの代わりに、nginxでAzureADの認証情報(ADAL)を使用した認証を実装(1/3)

オンプレミスのWebサーバのリバースプロキシサーバとして、nginxを構築する必要があったが、外部公開はしたくなかったのでAzureADの認証情報を利用して認証したいと思い構築したらできたのでその記事。

ちなみに、IISサーバの場合は、ネクストスケープさんの[すばらしい記事](http://blog.nextscape.net/archives/Date/2015/06/azuread01)があるので、そちらを参照いただくといいと思います。

# 経緯
下記内容は本当は[Azure AD Application Proxy](https://docs.microsoft.com/ja-jp/azure/active-directory/active-directory-application-proxy-publish)でさっくり、要件を満たしたかったのです。
が、リンク先が相対参照 (HTMLタグでいうと\<a href=./hogehoge\>)ではなく、絶対参照(HTMLタグでいうと\<a href="http\://hogehoge">)で指定されている場合、正しくリバプロされず、絶対参照で指定されたURLが開いちゃう、という仕様のため、望むようなリバプロにならなかったのです。
しかたなくnginxで代用することにしました。

# 要件
社内環境でのみ公開されているオンプレミスWebサーバを外部からも参照したい。でも、オンプレミスWebサーバの修正はしたくない。

# はじめに
[Azure AD Application Proxy](https://docs.microsoft.com/ja-jp/azure/active-directory/active-directory-application-proxy-publish)よりかなり面倒な構成です。リンク先が全て相対参照のサイトの場合はAzure AD Application Proxyによる構築を強く推奨します。

# 設定概要

- Linuxサーバを用意(私はAzure上にOpenLogic7のインスタンスを用意しました。もちろん、オンプレミスWebサーバにネットワーク的に接続できる必要があります)
   - sub_filterモジュールをコンパイルしたnginxを用意。
      - htmlの中身を書き換えるために必要です。
   - oauth2_proxyモジュールをダウンロード。
      - AzureAD認証用に必要。これが肝です。
- Azure AD上にOauth2用のネイティブアプリケーションを用意。ディレクトリのリード権も付与。

長くなりそうなので、続きは別ページで用意します。。
Guakeターミナル,Vim,Rangerの組み合わせ

# 概略

Vim、Rangerは、キーバインドが似ているので相性がよいです。

- Guake
    - tab1 - Vim - tab1,tab2
    - tab2 - Ranber - tab1 ,tab2
 
# 特徴

- それぞれのTAB機能を使用して階層で使用。コンソールなので素早い。
- GUIのブラウザー、オフィスプログラを使用中、テキスト保管、ファイル操作が素早くできます、意外と便利。

# 操作
- Guake
    - F12で表示、非表示
    - F11で全画面表示
    - C＋Tab+ｔ　タブ追加
    - tab タブ切り替え

- Gauke　最初の画面(TAB)でVIM立ち上げ
    - プログラム、データの編集　自分は作業管理(Zimと連携して）しています。
    - タブ使用

- Gauke 次の画面(TB)でRangerの立ち上げ
    - ファイル管理、ランチャーがわりに使用
    - ここでもタブ使用
Azure SQL Serverのデータテーブルをpyodbcで抽出してみる

Microsoft Azure上のSQL Server上のデータを手元(local pc)に持ってきて、pythonのpandas dataframeにするところまでのmemo

# 試行前提

- PC OS: `Windows 10 `

- Python: `Python 2.7`

- python libraries: `pyodbc`,`pandas`, `numpy`

- Azure上のテーブル設定(SQL Server)
    - server: `abc_server.database.windows.net`
    - database: `abc_database`
    - username: `abc_user`
    - password: `abc_password`
        - それぞれの`abc...`は、適宜Azure上で設定する時に書き換えて下さい。
- Azure SQL ServerのFireWall設定を許可しといて下さい
    - そうでないと認証でコケます、、


# 何はともあれinstall & 初期設定

## `pyodbc`をコマンドプロンプトからinstall

- 例によって`pip`にて。

```py
pip install pyodbc
```

## Microsoft ODBC Driver 13 for SQL Server
- [ココからinstall](https://www.microsoft.com/en-us/download/details.aspx?id=50420)

# ではpythonで書いていきましょう。

```py
## libraries
import pyodbc

## initial setting
## 上述の通り、適宜設定値は変えて下さい
server = 'abc_server.database.windows.net'  
database = 'abc_database'  
username = 'abc_user'  
password = 'abc_password'  

## 関数定義
### DB connectionを定義
def db_connection(sv=server, db=database, un=username, pw=password):    
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER='+sv+';DATABASE='+db+';UID='+un+';PWD='+ pw)
    return cnxn.cursor()

### SQLを発行
def query_output(sql):
    cursor.execute(sql)
    row = cursor.fetchone()
    while row:  
        print row[0]  
        row = cursor.fetchone()
```


## Case 1: テーブルの件数(行数)を数える

```py
### DB connectionしときます
cursor = db_connection()

### SalesLT.Customerはテンプレートとしてあるテーブル
sql = 'select count(*) from SalesLT.Customer;' 
query_output(sql) #結果は847
```


上述に引き続き、[テーブル作成はこちらから](http://qiita.com/kyoro1/items/36f4ca666125d26136f6)。



# Reference
- [PYthon SQL Driver](https://docs.microsoft.com/ja-jp/sql/connect/python/pyodbc/python-sql-driver-pyodbc)
超便利！半角文字をそのまま日本語変換するツール

プログラミングをしていて、全角で打ちたいのに半角のまま打ってしまって
イライラすることがよくある。

それを解消してくれるツールを見つけた。
以下のツールは半角/全角キーを複数回連打すると
半角で打ち続けてしまった文字を消すことなく
そのまま日本語に直して変換してくれる。

http://forest.watch.impress.co.jp/library/software/rikana/
Circle CIでFirebaseにデプロイする方法

Circle CIからFirebaseにデプロイを試してみました．

コードの例はこちらにあります．
https://github.com/ottijp/circle-ci-first-try/tree/362dcc071abbbf0bf89bb935d1a5ad16350cda90

## 環境

* Node v5.11
* firebase-tools v3.4


## Firebaseデプロイ用トークンの発行

```bash:
$ firebase login:ci
Visit this URL on any device to log in:
*************

Waiting for authentication...

✔  Success! Use this token to login on a CI server:

*************（トークンがここに表示される）

Example: firebase deploy --token "$FIREBASE_TOKEN"

```

ブラウザが開き，Google認証を通すとトークンが発行されコマンドの出力として表示されます．

## Circle CIのビルド環境変数を追加

プロジェクト設定の`BUILD SETTINGS > Environment Variables`で先程発行されたトークンと，プロジェクトIDを登録しておきます．

![Project settings - ottijp_circle-ci-first-try - CircleCI.jpg](https://qiita-image-store.s3.amazonaws.com/0/35592/f90276da-9f75-a5f0-3224-efa595a412de.jpeg "Project settings - ottijp_circle-ci-first-try - CircleCI.jpg")



## circle.ymlの作成

`dependencies`でfirebase-toolsのインストールを行い，`deployment`で環境変数のプロジェクトPJとトークンを使いデプロイする設定にしています．

```yaml:circle.yml
dependencies:
  override:
    - npm install -g firebase-tools
deployment:
  deploy:
    branch: master
    commands:
      - firebase deploy --project "$FIREBASE_PJ" --token "$FIREBASE_TOKEN"
```

## デプロイ用トークンの削除（無効化）方法は不明

[CLIツールのリファレンス](https://firebase.google.com/docs/cli/)を見ても，発行した認証トークンの削除（無効化）に関する記述が無いのですが，どうやってやるんですかね・・・？
Railsエンジニアが次に狙うべき!? Elixir(Phoenix)を今から勉強する人におすすめしたい本やリンク

最近知り合いから教えてもらいElixirをPhoenixフレームワークで勉強はじめました。
まずはどんな書籍やサイトがあるのかまとめてみます！

ちなみにElixir（エリクサー）は、並行処理を得意とするプログラミング言語ErlangのVM（エンジン部分）を基盤とし、Erlangよりもなじみやすい文法を採用したプログラミング言語です。

【随時更新中】

# リンク

## Elixir School

Elixir基礎レッスンは、Twitterの Scala Schoolにインスパイアされたもので、Elixirの基礎が学べます！

[Elixir School 日本語訳](http://elixirschool.com/jp/)

# 書籍　

## プログラミングElixir

世界的なRubyプログラマであるDave Thomas氏が書いた、プログラミング言語Elixirの本格的解説書、“Programming Elixir 1.2” (Pragmatic Bookshelf, 2016) の日本語訳です。通常のプログラミングから、並行処理、さらなる応用へと順を追って進む構成になっています。本書を読むことで、Elixirらしいプログラミングを学ぶことができます。

[![プログラミングElixir](https://images-fe.ssl-images-amazon.com/images/I/518jex9rmIL._SL500_SR113,160_.jpg)](http://amzn.to/2mCoxfk)

Kindle版は[こちら](http://amzn.to/2mjfgYQ)
[プログラミングElixir Kindle版](http://amzn.to/2mjfgYQ)

英語版になりますが1.3系対応版の本は後で紹介する2017/5/25に発売予定の[Programming Phoenix 1.3: Productive > Reliable > Fast ](http://amzn.to/2n1jg3H)があります。


## Elixir/Phoenix 初級①: はじめの一歩

日本語で書かれたElixir(Phoenix)の入門書です。

[![Elixir/Phoenix 初級①: はじめの一歩](https://images-fe.ssl-images-amazon.com/images/I/51PHY5B8GyL._AC_US160_.jpg)](http://amzn.to/2mjoof5)

## Elixir/Phoenix 初級②: データベースとクエリ構造体 

[![Elixir/Phoenix 初級②: データベースとクエリ構造体](https://images-fe.ssl-images-amazon.com/images/I/51Jpfps57AL._AC_US160_.jpg)](http://amzn.to/2mSxmUP)

## The Little Elixir & Otp Guidebook

[![The Little Elixir & Otp Guidebook](https://images-fe.ssl-images-amazon.com/images/I/51FgGCiigyL._SL500_SR127,160_.jpg)](http://amzn.to/2mjxete)


## Introducing Elixir: Getting Started in Functional Programming

[![Introducing Elixir: Getting Started in Functional Programming](https://images-fe.ssl-images-amazon.com/images/I/51gsw115kvL._AC_US160_.jpg)](http://amzn.to/2mjgceR)

Kindle版は[こちら](http://amzn.to/2mSosXi)

[Introducing Elixir: Getting Started in Functional Programming (Kindle 版)](http://amzn.to/2mSosXi)

## Elixir Cookbook

[![Elixir Cookbook](https://images-na.ssl-images-amazon.com/images/I/51eaLT3dNbL._AC_UL160_SR260,160_.jpg)](http://amzn.to/2mjy3TC)


## Programming Phoenix: Productive |> Reliable |> Fast 

2017/5/25に次に紹介する本がありますが、発売されるまではこれで勉強！

[![Programming Phoenix: Productive |> Reliable |> Fast](https://images-fe.ssl-images-amazon.com/images/I/41pPn50VnvL._AC_US160_.jpg)](http://amzn.to/2mC53ry)

## Programming Phoenix 1.3: Productive > Reliable > Fast

※ 2017/5/25発売予定

[![Programming Phoenix 1.3: Productive > Reliable > Fast](https://images-fe.ssl-images-amazon.com/images/I/41Cjuf+pXXL._AC_US160_.jpg)](http://amzn.to/2mC7eLp)

## Programming Elixir 1.3: Functional |> Concurrent |> Pragmatic |> Fun

[![Programming Elixir 1.3: Functional |> Concurrent |> Pragmatic |> Fun](https://images-fe.ssl-images-amazon.com/images/I/51YplJvWTkL._AC_US160_.jpg)](http://amzn.to/2n1jQi7)

## Elixir in Action

[![Elixir in Action](https://images-na.ssl-images-amazon.com/images/I/51XxwmImH5L._AC_UL160_SR254,160_.jpg)](http://amzn.to/2n1hAHE)


## Metaprogramming Elixir: Write Less Code, Get More Done (and Have Fun!) 

[![Metaprogramming Elixir: Write Less Code, Get More Done (and Have Fun!) ](https://images-fe.ssl-images-amazon.com/images/I/519mAxTAcNL._AC_US160_.jpg)](http://amzn.to/2mjpEPk)
docker上のdebianのlocale問題で文字化けする場合

## 環境
docker 1.6.2
debian : jessie
docker上のdebian : jessie

## 症状
docker上のos(debian)のlocale設定されてないために、
日本語ファイルが文字化けする。
自分はdockerfileでgit cloneしてきたファイル内に日本語が入っていたため
ここで躓いた。

## 対策
Dockerfileに以下を記せばok

```
RUN apt-get install locales
RUN locale-gen ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LC_CTYPE ja_JP.UTF-8
RUN localedef -f UTF-8 -i ja_JP ja_JP.utf8
```
※　他のサイトとか見てると最後の一行ないのが多いけど、自分の場合だと動かなかった。
3次ベジェ曲線の変曲点、そして、それが分かるとなぜ嬉しいか

とりあえず、断章。

```
　P0(x0,y0), P1(x1,y1), P2(x2,y2), P3(x3,y3)
```
で表される3次ベジェ曲線があるとする。

パラメータはtね。
```
　x = (1-t)^3*x0 + ...
```
って感じ。

でもって
```
　X0 = x1-x0, Y0 = y1-y0,
　X1 = x2-x1, Y1 = y2-y1,
　X2 = x3-x2, Y2 = y3-y2
```
とおく。

するってえと、ベジェの変曲点は、
```
　((X1-X2)*(Y0-Y1)-(Y1-Y2)*(X0-X1)) * t^2
　- (2*(X1*Y0-X0*Y1)+(X0*Y2-X2*Y0)) * t
　+ X1*Y0-Y1*X0 = 0
　(0 < t < 1)
```
の解になる。tの範囲が開区間なのは、後で述べる「活用方法」において、端っこの変曲点は気にしなくて良いからだ。この式に至る詳しい解説は端折る。分からなければ考えて、分かったらQiitaに記事を書こう（丸投げ）。

判別式を整理すると、
```
　D = (X0*Y2-X2*Y0)^2 - 4*(X2*Y1-X1*Y2)*(X1*Y0-X0*Y1)
```
なんか、外積がずらずらでてきて、サイクリックだし、正しそうだね。ちなみにmaximaって、こういう式変形下手だよね。外積っぽい形を拾ってまとめる、とかしてくれない。まあ、そういうツールじゃないもんね。

で、変曲点が分かると何が嬉しいって、色々嬉しい。特に分割する時が嬉しいかな。例えばね、変曲点を含まないベジェ曲線は、制御点を順番通りに並べると凸包になる。ほら。変曲点を含まないベジェ曲線を任意の点で分割しても、分割されたそれぞれのベジェ曲線は変曲点を含まない。ほら。S字になってるベジェ曲線のための配慮をしないで、分割再帰できるってこと。ちょっとだけど嬉しいよね。凸包の「厚み」を計算して再帰の止め時を判定する時も通常ヘロン4回のところヘロン2回で済むし、距離計算するんでも通常線分6本の評価が必要なところ4本の評価で済む。最初だけで良いってことは、精度の高い処理をしたい時ほど嬉しいってことだ。

ちなみに、別のお遊びをしている時に、お手軽に法線だけ弄ってイカサマG2曲面（まあ、つまり、スペキュラが綺麗に乗る、というメリットしかないんだが）を作るアルゴリズムを思いついたので、それを書こうかとも思ったんだが、図をいっぱい書かなきゃなので諦めた。お遊びだしね、ま、いいか。

そういうわけで、忙しいので小ネタだけ更新してみた。ガブリール見てから仕事する。
Springの概要と使い方, Rackの概要

![](http://findicons.com/files/icons/1607/ruby_on_rails/128/ror_logo.png)

## Application preloader
spring
https://github.com/rails/spring
spork
https://github.com/sporkrb/spork

* 事前にバックグラウンドでライブラリをロードしておくことで、その待ち時間を短くする
* テストやサーバー起動時
* Process.forkを使っているのでWindows, JRuby環境はだめ

## Install

```
gem 'spring', group: :development
bundle install
spring binstub --all
spring status
```

## Add command

```
gem "spring-commands-rspec", group: :development
bundle install
spring stop
bundle exec spring binstub --all
rspec
# added command
# spring-commands-rspec
# spring-commands-cucumber
# spring-commands-spinach
# spring-commands-testunit
# spring-commands-teaspoon```
```

## uninstall

```
bin/spring binstub --remove --all
# gem 'spring',        group: :development
bundle install
```

## 計測

```
/usr/bin/time bin/rake about
/usr/bin/time bin/rspec spec/requests/user_pages_spec.rb
```

## Rackとは
* RackはRubyでWebサーバーを立ち上げるためのインターフェースである
* 様々なミドルウェア、アプリケーションを組み合わせてWebサーバを立ち上げることができるrackupというコマンドを提供するライブラリ

## rails(config.ru)
* Rails.applicationはRackアプリケーション仕様に準拠
* サーバと直接ではなくRackという抽象インターフェースを介してHTTP送受信処理を行う
* サーバの種類による違いは全てRackが吸収し、Rails側はどのサーバでも同じコードで記述できる

## Rack::Server
* Rack::Server.start(ruckup)

1. config.ruをRack::Builder DSLとして評価し、Rackアプリケーションを生成
2. RACK_ENVに応じてRackアプリケーションにRackミドルウェアをラップする
3. RackミドルウェアをラップしたRackアプリケーションをRackハンドラに渡す

## Rack::Builder DSL
* rackup(rackup config)を叩くと指定したファイルをRack::Builder DSLとして読み込み、そのDSLによって設定されたWebサーバーが立ち上がる

## Rackアプリケーション(RailsやSinatra)
* 引数を1つ取り3つの値を返すcallを呼び出すことができるオブジェクト

## Rackミドルウェア(rack-のつくgem)
* Rackアプリケーションのcallの前後に行いたい処理を記述するクラス
* Rack::Builder DSL内で複数のRackミドルウェアをuseすることでミドルウェアスタックが作られる

## Rackハンドラ(WEBrick, Thin, Puma)
* RackミドルウェアにラップされたRackアプリケーションと、portやhostなどのオプションを受け取って実際にWebサーバを立ち上げるクラス
* HTTPリクエストをパースしたりHTTPレスポンスを組み立てるの

## Rails::Server
* opt_parserをオーバーライドしてrails s特有のオプションを定義
* デフォルトポートを3000
* RAILS_ENVに応じた処理が定義
Powershellでの関数のreturnとクラスでのreturnの違い

![](https://www.powershellgallery.com/Content/Images/packageDefaultIcon.png)

## 関数の`return`
* 現在のスコープを抜ける
* `return`はあってもなくてもいい
* `return`以外の他のオブジェクトも返す

```ps1
function Test-Return
{
	'Hello'
	return 12
	'Good'
}

Test-Return
# Hello
# 12
```

## クラスの`return`
* 現在のスコープを抜ける
* returnは必須(ない場合errorになる)
* `return`で指定されたものだけ返す

```ps1
class ReturnTester
{
    [int32]TestReturn()
    {
        'Hello'
        return 12
        'Good'
    }
}

$return = New-Object -TypeName ReturnTester
$return.TestReturn()
# 12
```
[Visual Studio Code][Golang][Windows] VSCodeでGoの開発環境を作成する方法まとめ

VSCodeでGoの開発環境を作成する方法メモ

感覚的にはほとんど苦労せずにコード補完、デバッグも含めた環境を作成できました。
(Vimでの設定時はけっこう苦労したんですが、VSCodeはサポート手厚いですね・・・)

# 検証環境

+ Windows10 64bit
+ Visual Studio Code 1.10.2
+ Go 1.8
+ Git for Windows 2.12.0

# 前提
## Visual Studio Code
VSCodeをインストールします。

[Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/)

## Git for Windows
go get などで使用されるため、Gitをインストールします。

+ [Git for Windows](https://git-for-windows.github.io/)

以下の画面で真ん中の選択肢を選んで、コマンドプロンプトからのgitコマンドの実行ができるようにするのをおすすめします。（VSCodeの端末がPowerShellのため）

![2.png](https://qiita-image-store.s3.amazonaws.com/0/37721/abb19fbf-6baa-16f4-36e5-ca47d5105e53.png)

## Go のインストール
Go の Windows 向けのものをインストールします。

[Downloads - The Go Programming Language](https://golang.org/dl/)

## 環境変数にGOPATHを追加

以下は設定例

| 環境変数名 | 値 | 備考 |
|:--|:--|:--|
| GOPATH  | %USERPROFILE%\go | 左は設定なしの場合のインストールされるデフォルト値 |
| PATH  | %USERPROFILE%\go\bin  | 既存のものに追加、GOPATHに合わせる |

# Visual Studio Codeの拡張機能を導入
## 拡張機能本体のインストール
同名の拡張機能がありますが、２番めのアイコン付きの方をインストールします。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/37721/18e55873-77a6-f64b-0e91-9de5db6d589c.png)

## 拡張機能から使われるGoのパッケージのインストール

READMEのしたのほうにも書いてありますが、依存パッケージをインストールします。
もし、Go環境をアップデートした場合は以下のパッケージも合わせてアップデートするのをおすすめします。

```bash:開発用Goの依存パッケージのインストール
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/zmb3/gogetdoc
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/lukehoban/go-outline
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v github.com/tpng/gopkgs
go get -u -v github.com/newhook/go-symbols
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v github.com/cweill/gotests/...
```

## デバッグ用のDELVEのインストール
古い記事だと証明書などの手順がありますが、今はWindowsでは `go get` からで良いようです。

```bash:DELVEのインストール
go get github.com/derekparker/delve/cmd/dlv
```

[delve/install.md at master · derekparker/delve](https://github.com/derekparker/delve/blob/master/Documentation/installation/windows/install.md)

# 動作確認
## パッケージ補完
![1.png](https://qiita-image-store.s3.amazonaws.com/0/37721/3b63c10d-7f77-611f-ec01-263e207f255d.png)

## メソッド補完

![2.png](https://qiita-image-store.s3.amazonaws.com/0/37721/92e6119a-5079-bbf5-4656-b17e151f589c.png)

## ブレークポイントを設定したデバッグ

![3.png](https://qiita-image-store.s3.amazonaws.com/0/37721/6bb32e60-c830-6b26-2353-55637d13cff5.png)

だいたい動作したので環境作成としては以上です。（何かあれば追記します）
その他の使用方法などは、拡張機能のREADMEを参照してください。

[Go - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=lukehoban.Go)

# 参考
[WindowsのVisual Studio CodeでGo言語の開発環境を作る - 素敵なおひげですね](http://stknohg.hatenablog.jp/entry/2016/07/23/024613)
[Visual Studio CodeによるGo言語のデバッグ ｜ Developers.IO](http://dev.classmethod.jp/go/visual-studio-code-golang-debug/)
Pythonでテキストマイニング　②Word Cloudで可視化

Pythonでテキストマイニングに挑戦。(Python3系対象)
以下のステップで取り組む。

①形態素解析([前回](http://qiita.com/furipon/items/0d626f4a943c99fe32c6))
②Word Cloudで可視化(今回)
③日本語の文書を形態素解析してWord Cloudで可視化(次回)

#Word Cloudとは
[goo辞書](http://dictionary.goo.ne.jp/jn/253039/meaning/m0u/)によると、「文章中で出現頻度が高い単語を複数選び出し、その頻度に応じた大きさで図示する手法。（中略）文字の大きさだけでなく、色、字体、向きに変化をつけることで、文章の内容をひと目で印象づけることができる。」

要するに、↓こんなやつ。
![wordcloud_sample.png](https://qiita-image-store.s3.amazonaws.com/0/100998/e787bd5e-013d-c776-1675-2ddd0d962852.png)

[ユーザーローカル](http://www.userlocal.jp/)さんが無料で[Webサービス](http://textmining.userlocal.jp/)を公開しているが、これをPythonでやってみる。

#Word Cloudのライブラリ
Pythonで使えるものとして[Andreas Mueller](http://amueller.github.io/)さんが公開している[word_cloud](http://amueller.github.io/word_cloud/)があるようなので、これを使ってみる。

#word_cloudのインストール
pipでインストールできるよう。

```
sudo pip3 install wordcloud
```

すんなりインストールできたので試しに使ってみる。
半角スペースで区切られた文字列を渡す必要があるようなので、とりあえず英文で。トランプ大統領の就任演説の冒頭部分を題材にする。

```python3:wordcloud_sample.py
# coding: utf-8
from wordcloud import WordCloud

text = "Chief Justice Roberts, President Carter, President Clinton, President \
		Bush, President Obama, fellow Americans, and people of the world: \
		thank you. We, the citizens of America, are now joined in a great \
		national effort to rebuild our country and to restore its promise for \
		all of our people. \
		Together, we will determine the course of America and the world for \
		years to come. \
		We will face challenges. We will confront hardships. But we will get \
		the job done. \
		Every four years, we gather on these steps to carry out the orderly \
		and peaceful transfer of power, and we are grateful to President Obama \
		and First Lady Michelle Obama for their gracious aid throughout this \
		transition. They have been magnificent."

wordcloud = WordCloud(background_color="white",
	font_path="/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf",
	width=800,height=600).generate(text)

wordcloud.to_file("./wordcloud_sample.png")
```

簡単に解説すると、作成する画像に関する設定を引数にしてWordCloudオブジェクトを作り、generate()メソッドに描画対象となる文字列を渡して初期化。to_file()メソッドで画像ファイルに出力、という感じ。
コンストラクタの引数は[公式リファレンス](http://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html#wordcloud.WordCloud)を参照。

上記サンプルを動かしてできあがった画像が冒頭のもの。

```
python3 wordcloud_sample.py
```

#参考にしたサイト
- [PythonでWordCloudを利用してTwitterアカウントを可視化する](http://www.utali.io/entry/2016/10/03/001210)
- [Word Cloudで文章の単語出現頻度を可視化する。\[Python\]](http://qiita.com/kenmatsu4/items/9b6ac74f831443d29074)
Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition読んだ

http://dl.acm.org/citation.cfm?id=2978392

<h1>モチベーション</h1>
・Face Recognitionシステムにおいて、Impersonation(なりすまし、特定の誰かに誤識別させる)やDodging(単に誤識別させる)をしたい

<img width="596" alt="スクリーンショット 2017-03-13 22.23.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/8dc4bf94-7670-bcc2-9fb0-6922216d650a.png">

<h1>手法</h1>
・特殊なメガネを3D(or2D)プリンターで作る
<img width="426" alt="スクリーンショット 2017-03-13 22.35.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/9c14e3ab-dc23-21dc-b5bf-3d7ff7850abd.png">
・このメガネは、以下を満たすrの画像
<img width="323" alt="スクリーンショット 2017-03-13 22.37.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/63d53b7b-5046-8ef1-ccb1-5386a202d00d.png">
r : メガネの画像
X : Attacker(上の画像でのEinstein)の顔画像集合,
x : X内の画像,
ct : Impersonationしたい対象(上の画像でのKevin Spacey),
TV(r) : rのsmoothnessを保つための制約。smoothでない(=極端な色の変化がある)画像は、カメラでうまくcaptureできないから。
NPS(r) : rを印刷可能な色の範囲に制限するための制約
softmaxloss : 騙したいFace Recognitionモデルのsoftmaxloss

要するに、xに何を足せばctだと判定されるかをいろんな制約のもとで求めてる

<img width="646" alt="スクリーンショット 2017-03-13 23.11.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/34bbd38e-d44e-de9c-8b61-2d5920542734.png">
Figure 4

・これで、Face Recognitionのカメラに写ると・・


<h1>結果</h1>
<img width="901" alt="スクリーンショット 2017-03-13 22.55.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/701b1891-cc6a-6ab0-41cd-5b693c6187c6.png">

<img width="879" alt="スクリーンショット 2017-03-13 22.55.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/34f5d6fb-cac4-42ea-9ca9-c7ff50e942b4.png">
Source

・高精度でImpersonation, Dodgingができた

<h1>感想</h1>
・リアル環境ではFace Recognitionモデルがブラックボックスの場合が多いんでは
・ネットに落ちてる学習済みモデルをそのまま使ってる方々は気をつけよう（APIも）
・こんな眼鏡、恥ずかしくて使いたくない　恥ずかしさ制約を入れよう
【Unity】Everyplayで特定の動画を指定して再生する【Everyplay】

メモ書き。

# Everyplay使ってみた
[テラシュールブログさんの記事](http://tsubakit1.hateblo.jp/entry/20140314/1394807130)を読んでEveryplayを組み込んでみた（どうでもいいけどずっと「エヴァープレイ（Everplay）」だと思ってた）。

ゲーム内で他の人の超絶プレイを再生して見せたらみんなもっと遊んでくれると思ったので、特定の動画を指定して再生する機能の実装方法を調べた。

# ドキュメントを読んだ
APIについて詳しく知りたくなって[ドキュメント](https://developers.everyplay.com/documentation/Everyplay-integration-to-Unity3d-game.md)を読んでみたけど、説明がしょぼかった。

# ソースコードを読んだ
ドキュメントに載ってないAPIを探してソースコードを読んだ。`Everyplay.PlayVideoWithURL(string url)`で動画指定して再生できるっぽい。

試してみるも再生されず。

# API用のURIがあるっぽい
[この投稿](https://forum.unity3d.com/threads/everyplay-does-not-show-a-recorded-facecam-on-device.381389/)読んだら`Everyplay.PlayVideoWithURL("https://api.everyplay.com/videos/" + videoId.ToString());`と書いてあったので試したらできた。

開発者用サイト見ても api.everyplay.com なんて書いてないんだけど。。。

# 最後に
`PlayVideoWithDictionary(Dictionary<string, object> dict)`というAPIもあるようだけど用途不明。
『Java言語で学ぶデザインパターン(マルチスレッド編)』まとめ(その９)

<img width="300" alt="javathread.jpeg" src="https://qiita-image-store.s3.amazonaws.com/0/165994/9d302410-0471-96c1-f097-d46649d17209.jpeg">

#Thread-Per-Messageパターン

何らかの命令や要求ごとに新しくひとつのスレッドが割り当てられ、そのスレッドが処理を行う。これがThread-Per-Messageパターン。

次のような例を考える。MainクラスがHostクラスへ文字の表示を依頼する。Hostクラスはその依頼を処理するスレッドを生成して起動する。起動されたスレッドはHelperクラスを使って実際の表示を行う。

(コード全体は本書を参照のこと)

```java:Host.java
public class Host { 
    private final Helper helper = new Helper(); 
    public void request(final int count, final char c) { 
        new Thread() { 
            public void run() { 
                helper.handle(count, c); 
            } 
        }.start(); 
    } 
}
```

##登場人物
Client役
Client役は、Host役に対して要求を出す。Host役がどのようにしてその要求を実現しているか、Client役は知らない。サンプルプログラムでは、Mainクラスがこの役をつとめた。

Host役
Host役は、Client役から要求を受けると、スレッドを新しく作って起動する。新しく作られたスレッドは、Helper役を使って、要求を処理する。サンプルプログラムでは、Hostクラスがこの役をつとめた。

Helper役
Helper役は、要求を処理する機能をHost役に提供する。Host役によって作られた新しいスレッドがHelper役を利用する。サンプルプログラムでは、Helperクラスがこの役をつとめた。

##考えを広げるためのヒント
**Thread-Per-Messageパターンでhandleメソッドの処理が行われる順番は、requestメソッドが呼び出された順番通りとは限らない。そのため、処理の順番が意味を持つ場合には、このパターンを使うのは不適切。**

**Thread-Per-Messageパターンでは、requestメソッド側はhandleメソッドの完了を待たない。そのため、handleの実行結果をrequest側で得ることはできない。したがって、このパターンは、処理結果がいらない場合に使うことになる。**処理の結果が必要な場合には、Futureパターンを使う。


---

関連
[『Java言語で学ぶデザインパターン(マルチスレッド編)』まとめ(その１)](http://qiita.com/yoshi-yoshi/items/83ecc4476904fa144577)
[『Java言語で学ぶデザインパターン(マルチスレッド編)』まとめ(その２)](http://qiita.com/yoshi-yoshi/items/792ed2e9dc09f63c5004#_reference-5f26b880e1c02b87a1d8)
[『Java言語で学ぶデザインパターン(マルチスレッド編)』まとめ(その３)](http://qiita.com/yoshi-yoshi/items/1d2c0e1279af4adb2e9b)
[『Java言語で学ぶデザインパターン(マルチスレッド編)』まとめ(その４)](http://qiita.com/yoshi-yoshi/items/3b642f91b27120cc4b15)
[『Java言語で学ぶデザインパターン(マルチスレッド編)』まとめ(その５)](http://qiita.com/yoshi-yoshi/items/427be45a8b0044083911)
[『Java言語で学ぶデザインパターン(マルチスレッド編)』まとめ(その６)](http://qiita.com/yoshi-yoshi/items/38187c25619a173ea8b8)
[『Java言語で学ぶデザインパターン(マルチスレッド編)』まとめ(その７)](http://qiita.com/yoshi-yoshi/items/1b6f4e0247496fdaac4c)
[『Java言語で学ぶデザインパターン(マルチスレッド編)』まとめ(その８)](http://qiita.com/yoshi-yoshi/items/eefbf9ee8137f7ba808d)
【PHP】PHP単体でforeachelseが使いたいとき

使わなくていいから（良心）
<br /><br /><br /><br /><br /><br /><br />
・
・
・
Smartyとか使うとforeachの対象のリストが空だったときなんかに通る処理が`{foreachelse}～{/foreach}`に書けるけど
あるいはPythonなんかだと`for～else～`なんかで実現できるんですけど
PHPでやろうとすると

```php
if ($arrData) {
    foreach ($arrData as $k => $v) {
        // うーんかっこわるい
    }
} else {

}

```

なんとなくきちゃない。
どうしても使いたいときは、こう書くとすこしだけきれいに収まる。

```php
if (!$arrData) {
    // こっちがelse的な内容だから順序がね・・・
} else foreach ($arrData as $k => $v) {
    // あんま使わないほうがいいかも
}
```
ESP32 GPIOのErrata

# 概要

ESP32で実験を行っていたら、GPIOの理解不能な動作に遭遇した。
原因を調べたところ CPUのバグ(Eratta)であることが判明。
原因がわからないと、かなり厄介な現象なので報告する。

# 現象

ESP32で8bitパラレル接続のTFT-LCD(コントローラはST7781)に表示を行おうとするのだが、時々おかしな点が描画される。下の写真は、現象を観測しやすくするため、RGBの3色で縦線を3本描画している。上はErattaを回避後の正常動作の写真で、下は回避前の写真。

![170313a2.jpg](https://qiita-image-store.s3.amazonaws.com/0/144308/cd3db88e-704d-e442-f43a-fa1c0761b5a2.jpeg)

![170313a5m.jpg](https://qiita-image-store.s3.amazonaws.com/0/144308/77600ee3-3c4d-4780-742f-13379b7293ed.jpeg)

オシロスコープで信号を観測したところ、WR = Lowでデータ書き込み時に CS=Highになっている場合があることが判明した。

# Eratta

問題のerattaは、Espressifの文書 <a href="https://espressif.com/sites/default/files/documentation/eco_and_workarounds_for_bugs_in_esp32_en.pdf">ECO and Workarounds for Bugs in ESP32</a>の「**3.3. When the CPU accesses peripherals and writes one address　repeatedly, random data loss occurs**」。

タイトルからは、わかり難いが、対象に GPIOの主要レジスタが含まれている。GPIO以外は、UARTやI2SのFIFOなど。

対象となるチップのリビジョンは、 2016-09リリースのリビジョン0で、2017-02リリースのリビジョン1では修正されている模様。

# 回避方法

文書に書かれている回避方法は簡単で、別のアドレスでレジスタにアクセスしてくださいとのこと。
今回関係するレジスタだけ抜き出すと次のようになる。

| Registers | Original addr | Changed addr |
|:----------|:------------|:-------------|
| GPIO_OUT_W1TS_REG |0x3ff44008 |0x60004008 |
| GPIO_OUT_W1TC_REG |0x3ff4400c |0x6000400c |

文書にW1TSの方は含まれていなかったが、これは記述抜けではないかと思う。
Original addrからのアクセスとChanged addrからのアクセスではタイミングがずれるようなので、変更するのであれば全部変更する方が好ましい。

# esp-idf, Arduinoの状況

esp-idfやArduinoではGPIO操作をGPIOという名前の構造体を使って行っている。
この構造体のアドレスは tools/sdk/ld/esp32.peripherals.ldというファイルに定義されているが、値は0x3ff44000となっていた。~~これを0x60004000に変更すれば解決かと思われたが現象は変化しなかった。ライブラリの再生成などが必要なのかもしれない。~~ これを0x60004000に変更することで、回避することができた。 (2017/3/24 訂正)

```control:esp32.peripherals.ld
/* PROVIDE ( GPIO = 0x3ff44000 ); */
PROVIDE ( GPIO = 0x60004000 );
```

# 動作確認

以下のように GPIO_OUT_W1TS,GPIO_OUT_W1TCレジスタと、各信号線の操作を定義したところ、プログラムはErrataを回避し、期待通りの動作をした。

```c
#define GPIO_OUT_W1TS	ESP_REG(0x60004008)
#define GPIO_OUT_W1TC	ESP_REG(0x6000400C)
#define RD_ACTIVE  GPIO_OUT_W1TC = _BV(LCD_RD)
#define RD_IDLE    GPIO_OUT_W1TS = _BV(LCD_RD)
#define WR_ACTIVE  GPIO_OUT_W1TC = _BV(LCD_WR)
#define WR_IDLE    GPIO_OUT_W1TS = _BV(LCD_WR)
#define CD_COMMAND GPIO_OUT_W1TC = _BV(LCD_CD)
#define CD_DATA    GPIO_OUT_W1TS = _BV(LCD_CD)
```

# 最後に

Errataは、一度目を通していたはずなのに、この問題の原因と気が付くまで、かなり時間がかかってしまった。まだまだ修行が足りない。

この文章が誰かのお役に立てれば幸いです。
GUI を使わずにコマンドで GitHub に公開鍵を登録する

諸事情で Mac から Windows に回帰し、Bash on Ubuntu on Windows で開発環境を作ったり壊したりするのがライフワークになりつつある今日このごろですが、環境の再構築を繰り返していると、GUI で行う操作がどうしても面倒になってきます。

開発環境の SSH Key を作った際に、GitHub に公開鍵を登録する操作は、ターミナル上で公開鍵の中身をクリップボードにコピーし、GitHub の Web サイト上でペーストして登録するのが[公式手順](https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/)ですが、特にこの操作は以前から面倒だなぁと思っていました。なんとかならんものかとふと調べてみたところ…、思いのほかあっさり解決したので紹介します。

## 動作確認した環境

- Windows 10 x64, Version 1607 (Bash on Ubuntu on Windows)
- macOS Sierra
- Ubuntu 16.04 LTS

## 前提

- GitHub にアカウントを登録している
- [公式手順](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/)などで SSH Key を作成している
- 公開鍵を `~/.ssh/id_rsa.pub` に配置している

## 実施例

`curl` の `-u` オプションで GitHub のユーザー名を指定し、パスワードで認証して登録します。


```
$ curl -u "<GitHub のユーザー名>" --data '{"title":"'"$(whoami)@$(hostname)"'","key":"'"$(cat ~/.ssh/id_rsa.pub)"'"}' https://api.github.com/user/keys
Enter host password for user '<GitHub のユーザー名>': (パスワードを入力)
{
  "id": 222...,
  "key": "ssh-rsa AAA...",
  "url": "https://api.github.com/user/keys/222...",
  "title": "bowuser@BOWHOST",
  "verified": true,
  "created_at": "2017-03-13T12:44:28Z",
  "read_only": false
}
```

なお、以下のような結果が返ってきた場合、同じ公開鍵が既に登録されています。

```
{
  "message": "Validation Failed",
  "errors": [
    {
      "resource": "PublicKey",
      "code": "custom",
      "field": "key",
      "message": "key is already in use"
    }
  ],
  "documentation_url": "https://developer.github.com/v3/users/keys/#create-a-public-key"
}
```

## キー認証の動作確認

公開鍵を登録後、キー認証の動作確認をします。

```
$ ssh -T git@github.com
```

## 参考

- [Adding a new SSH key to your GitHub account](https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/)
- [Generating a new SSH key and adding it to the ssh-agent](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/)
- [User Public Keys > Create a public key](https://developer.github.com/v3/users/keys/#create-a-public-key)
- [Testing your SSH connection](https://help.github.com/articles/testing-your-ssh-connection/)
- [git - upload ssh key on github from command line](http://unix.stackexchange.com/questions/297301/upload-ssh-key-on-github-from-command-line)
Do We Really Need to Collect Millions of Faces for Effective Face Recognition?読んだ

ECCV2016の論文
https://arxiv.org/pdf/1603.07057.pdf
<h1>モチベーション</h1>
・Face Recognitionにおいて、少ない学習データ枚数でそれなりの精度を出したい
・Googleの提案モデルが200M枚,Facebookが4.4M枚の顔画像で学習させているが,この論文では495K枚程度のデータセット(CASIA WebFace)で、同じくらいの精度を出したい

<img width="359" alt="スクリーンショット 2017-03-13 21.22.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/43936a08-e117-ca7a-672d-f706af62e626.png">
(a) Face set statistics

<h1>手法</h1>
・一枚の顔写真から、顔の多様なPose,Shape,Expressionをシミュレートできるようなモデルをつかって、データ数を増やした(詳しくは載ってなかった)

・Pose
顔の角度を{0◦, ±40◦, ±75◦}の範囲でシミュレート
<img width="698" alt="スクリーンショット 2017-03-13 21.36.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/a1e68171-2037-e454-fc1a-dff3ea49e535.png">

・Shape
色んな顔の形（？）を既存の3Dモデルでシミュレート
<img width="711" alt="スクリーンショット 2017-03-13 21.38.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/d5a4a57d-6b0d-2dae-1dbe-1dadfb839da3.png">

・Expression
口を閉じたり、開けたり、笑顔にしたりをシミュレート
<img width="701" alt="スクリーンショット 2017-03-13 21.39.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/a21f275b-b38b-be4c-d81c-652ffb3384f8.png">


<h1>結果</h1>
・学習データ枚数が495Kから2.4Mになって、LFWにおけるAccuracyも95.31%から98.06%くらいになった （Googleの99.63%には勝てなかった）
<img width="470" alt="スクリーンショット 2017-03-13 21.53.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/170131/bc893900-239f-3522-c2e8-e6ec0fe117e7.png">

<h1>感想</h1>
・Google、Facebookのデータ数で同じことするとどうなるんだろう
MacにPython3.x系と2.x系を共存する方法(おまけでopencvも入れました)

#やりたいこと
1.双方のバージョンが互いに干渉せずに独立してインストールすること
2.簡単にバージョンを切り替えられること

#手順
##1.pyenvのインストール
 `$ brew install pyenv`

その後、環境変数に以下を追加します。 例えばシェルにzshを使っている人は、~/.zshrcに、以下を追加します。bashを利用している人は、~/.bash_profileに追加しましょう。

```~/.bash_profile
export PATH="$PYENV_ROOT/bin:$PATH"
export PYENV_ROOT="$HOME/.pyenv"
eval "$(pyenv init -)"
```
##2.anacondaのインストール
###python3系のインストール
`$ pyenv install anaconda3-x.x.x`
###python2系のインストール
`$ pyenv install anaconda2-x.x.x`

###pyenv global と pyenv local
pyenv global hogehogeまたは、pyenv local hugahugaでバージョンの切り替えができます。 globalとすると全体に、localにするとそのカレントディレクトリ以下にバージョンの切り替えが反映されます。

##3 OpenCVのインストール

##Python3 + OpenCV3
`$ conda install -c https://conda.anaconda.org/menpo opencv3`
##Python2 + OpenCV2
`$ conda install -c menpo opencv=2.4.11`

その後
`$ pyenv rehash`

きちんとインストールされているかどうか確かめるためには、Pythonを起動して、以下のコードを実行しましょう。


`import cv2`
`cv2.__version__`
WindowsバッチからPerlのコードを呼んで、その結果を受取る

### 概要

- シェルスクリプトの処理をバッチスクリプトでお願いします
- ついでにWindows側の環境はなるべく汚染させないようにお願いします
- Windows7〜10がターゲット

### 環境

バッチスクリプト用の環境は特に何もしなくて良いため、後はLL言語の環境を用意すれば良いという事で、
シェルスクリプトの処理を補完させるためにPerlを選択しました。
Windowsなので、ActivePerlをインストールして後は何もせずバッチスクリプトを起動させれば動くし、
利用者は最低限の労力でスクリプトの恩恵を得られるためこの選択は問題無いと判断してGOしました。

### コードを書く

シェルスクリプト側の処理は、文字列の操作とか色々ある訳です。
その辺バッチスクリプトだけだと無理無理無理なので、バッチスクリプト起動時に渡されたコマンドライン引数から、ディレクトリを調べ、そのディレクトリ内にあるファイル一覧の内容をどうこうしたり、ファイル名の拡張子によって処理を変更したりというのを行うのをPerl側でやらせ、その結果を受け取って、また別の処理を〜…。というのを目指す事にしました。

自分が調べた感じだと、下記のように、FORを駆使してPerlのスクリプトを呼出し、その結果を変数に入れるという方法を取りました。

###### バッチスクリプトのコード
```bat
REM 例えばコマンドライン引数の１つ目が特定のディレクトリまでのパスだとして
SET TARGET_PATH=%1

REM TARGET_PATHをhoge.plに渡し、そこから得られた結果をHOGE_RESULTに代入
FOR /F "usebackq delims==" %%i IN (`perl scripts\hoge.pl %TARGET_PATH%`) DO SET HOGE_RESULT=%%i
```

###### Perlのコード
```perl
my $target_path = $ARGV[0];

# 何かしらの処理
$result = do_something();

print STDOUT $result;
```

こういった処理をひたすら書いていく事で、シェルスクリプトのコードをバッチスクリプトへ移行させられました。
環境構築が容易で、利用者に追加で沢山のインストールや時間を掛けず環境を構築しなければならないような時はこういうアプローチはありかなと思います。
(C#使うのもありですが、何をやるかに依る気がします。)

とりあえず今回はバッチスクリプトからこういう事をやる場合どうすればいいんだろうという事で調べてみてこうなったという事で終わりたいと思います。
CSSで見出しをデザインする

# 見出しデザイン一覧

## 01.テキストに下線
![コンポーネント_見出し_下線.png](https://qiita-image-store.s3.amazonaws.com/0/160563/a9193d22-ddff-1c43-1f77-0a738b3b474b.png)

```html:qiita.rb
<div class="headline">
  <h2 class="headline__title">タイトル</h2>
</div>
```
```css:qiita.rb
.headline {
    background-color: #fff;
    clear: both;
    margin-bottom:3rem;
    overflow: hidden;
    padding: 3rem;
}
.headline__title{
    color:#24936E;
    border-bottom: 1px solid #434343;
    font-size: 3rem;
    padding:0 2rem 2rem;
}
```
> ファイル保管場所：[GitHub](https://github.com/AquaMeria/Compornent_module_headline-standart)

## 02.テキストに下線(2色)
![コンポーネント_見出し_下線2色.png](https://qiita-image-store.s3.amazonaws.com/0/160563/a1c79d15-b6b1-10fb-d668-908e1505eca5.png)

```html:qiita.rb
<div class="headline">
  <h2 class="headline__title">タイトル</h2>
</div>
```
```css:qiita.rb
.headline__title{
    border-bottom: solid 3px #7E807B;
    padding-bottom: 1rem;
    position: relative;
}
.headline__title:after{
    border-bottom: solid 3px #333333;
    bottom: -3px;
    content: " ";
    display: block;
    position: absolute;
    width: 20%;
}
```
> ファイル保管場所：[GitHub](https://github.com/AquaMeria/Compornent_module_headline-underline2color)

## 03.アイコン付き
![アイコン付き.png](https://qiita-image-store.s3.amazonaws.com/0/160563/9082ff24-8226-98dc-61fb-2a335f30c967.png)

```html:qiita.rb
<!-- アイコンフォント読込 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">

<!-- 見出し -->
<h2 class="headline">タイトル</h2>
```
```css:qiita.rb
.headline{
    background: #f1f8ff;
    border-left: solid 2em #009ABF;
    padding: 0.3em 0.5em;
    position: relative;
}
.headline:before{
    color:#fff;
    content: "\f021";
    font-family: FontAwesome;
    font-weight: normal;
    left: -1.45em;
    position: absolute;
    padding: 0em;
    -moz-transform: translateY(-50%);
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
    top: 50%;
}
```
> ファイル保管場所：[GitHub](https://github.com/AquaMeria/Compornent_module_headline-icon)

使用するアイコンを変更する場合は、CSSの"content"の値を変更。
[Font Awesome](http://fontawesome.io/icons/)のページの"unicode"から値は取得可能。
![font_refresh.png](https://qiita-image-store.s3.amazonaws.com/0/160563/e3f2a21e-f262-dd13-d178-08f3b028150b.png)

> アイコンフォントを使用した見出しは他にも[こちら](https://goo.gl/ostfM8)で色々なサンプルあり



# 参考
## CSSで見出しデザインをするときに参考になるサイト
* [HTMLとCSSのコピペですぐに実装できる見出しデザイン14選](https://goo.gl/UNuFcv) 
* [CSSのコピペだけ！おしゃれな見出しのデザイン例まとめ68選](https://goo.gl/kjTmY2)
[備忘録]Herokuのデータベースの中身を手元にコピーする

ほとんど[リファレンス](https://devcenter.heroku.com/articles/heroku-postgres-import-export)にある通りなんだけど、自分用

## 下準備

データベースの初期化
`$ bundle exec rake db:migrate:reset`

`bundle exec rake db:reset` でも可。テーブルの作成をschemaファイルから作るのか、マイグレーションファイルから作るのかの違い。

## Heroku上のデータベースのバックアップの作成、ダウンロード

完全にリファレンス通り

```
$ heroku pg:backups:capture
$ heroku pg:backups:download
```

## 手元のテーブルにデータの流し込み　

```
$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump
```

これもリファレンス通り、 `myuser` と `mydb` の部分を適宜書き換える。 `config/database.yml` を参考に。
psshでリモートホストを操作するときに覚えておきたい3つのTips

# tl;dr

プロビジョニング未満の粒度の作業に対して。

1. ポイント①： ローカルからリモートホスト上でsudoを扱う場合は、pssh実行時に、 -x '-tt' を付与してコマンド実行する
1. ポイント②： 1行のみ追記したい場合は sh -c オプションでコマンドを渡せばOK
1. ポイント③： 複数行ヒアドキュメントでroot権限下のファイルを追記する場合は、'EOT'のようにシングルクオテーションまたはダブルコーテーションで囲む

# 内容

### 環境

CentOS Linux release 7.3.1611 (Core)

### 状況（例）

filebeatサービスをCentOS7にインストールする


### ローカルの実行コマンド

ポイント① 
> $ pssh -P -x '-tt' -h web-hosts -I < web.sh


### リモートホスト一覧 
> $vi web-hosts

<pre>
172.21.102.xx
172.21.102.xx
172.21.102.xx
...
</pre>

### リモートホスト上の実行コマンド 
> $vi web.sh

<pre>
#!/bin/bash

cd /tmp
curl -L -O https://download.elastic.co/beats/filebeat/filebeat-1.2.3-x86_64.rpm
sudo rpm -ivh filebeat-1.2.3-x86_64.rpm

echo "filebeat was installed"

sudo mv /etc/filebeat/filebeat.yml /etc/filebeat/filebeat_yml_org

# ポイント② 
sudo sh -c 'echo 172.21.103.237 logstash-01 >> /etc/hosts'

# ポイント③   
sudo cat << 'EOT' | sudo tee /etc/filebeat/filebeat.yml
filebeat:
  prospectors:
    -
      paths:
        - /apphome/MetaData/log/*
        - /var/log/httpd/access_log
        - /var/log/httpd/error_log
      input_type: log
      multiline:
        pattern: "^[[:digit:]]{4}"
        negate: true
        match: after
  registry_file: /var/lib/filebeat/registry
output:
  logstash:
    hosts: ["logstash-01:5044"]
shipper:
logging:
EOT

sudo systemctl restart filebeat

echo "all process were done."
exit 0
</pre>


## 参照

sh -c へ引数を渡す
http://uyota.asablo.jp/blog/2012/08/28/6557461

スーパーユーザー権限が必要なファイルにcatコマンドでテキストを書き込む。
http://blog.katty.in/3922

bashのヒアドキュメントを使ったスクリプトの作成
http://te2u.hatenablog.jp/entry/2015/05/12/001915