OmniAICreator/Qiita-1.07M huggingface dataset:
Error opening file /tmp/ct.shutdown, err = Operation not permitted からの回復方法

# Error opening file /tmp/ct.shutdown, err = Operation not permitted からの回復方法

朝、iMacを立ち上げると、以下のようなエラーが出て、vagrantが動かなくなり、回復に結構手間取りました。


![スクリーンショット 2016-10-18 8.57.26.png](https://qiita-image-store.s3.amazonaws.com/0/79673/81528b93-2307-ad1b-04ef-c3b3c88b7b5a.png)

```
CoreTelephony tracing has failed, you may be out of disk space.
Details 'Error opening file /tmp/ct.shutdown, err = Operation not permitted
```

ディスクの容量が足りないかもしれません、みたいなことを言われていますが、そこは全然関係ありません。

以下に原因と回復手順を残しておきます。

## 原因

ネット上の情報では、いくつか原因があるように見受けられましたが、筆者の場合は、
/private/tmp
ディレクトリのパーミションに drwxrwxrwt@ のように、EA(Extended Attriutes)が付与されており、拡張属性の内容が、
com.apple.rootless
だったためです。

なぜ/private/tmp に rootless が付与されたのかはわかりません。

ちなみにEAについては、
http://d.hatena.ne.jp/kanonji/20100912/1284292517
をご覧ください。

EAはMACでファイルに別途付与される拡張情報です。
ここに、El Capitanから、rootlessという属性が追加されたそうです。
http://applech2.com/archives/45140708.html

rootlessの属性は、root権限でもファイル・ディレクトリを編集できないようにする特殊な属性です。
rootlessはセキュリティを高めるための仕組みですが、今回はこの属性が/private/tmp に付与されているため、幾つかのプログラムの起動と、プログラムのインストールに影響が出ました。

/private/tmp ディレクトリにrootlessが付与されてしまっているかどうかは、

```bash
xattr /private/tmp
```

で分かります。


## 解決方法

基本的には
https://www.reddit.com/r/mac/comments/55s9yg/getting_an_error_message_on_startup_coretelephony/
の手順にのっとります。


簡単に翻訳すると、


> この問題は /tmp ディレクトリのパーミションが原因です。
このパーミションを変更しようとしても、通常は変更できません。
システムは、SIPと呼ばれる'System Integrity Protection'によって守られているからです。
パーミションを変更する場合は、先にSIPを無効化する必要があります。

> こちらを試してください:

> MACをリカバリーモードで起動してください。
MACの再起動時に、Command + R を押しっぱなしにします。アップルのロゴが現れるまで押し続けましょう。

> 画面上部のメニューのユーティリティからターミナルを起動します。

> ターミナル画面で、'csrutil disable'と入力してエンターを押します。

> MACを再起動します。

> MACの再起動後、コマンドを打ち込みます。 'sudo chmod 1777 /tmp'
もしくは、OnyX 3.1.8 for OS X 10.11 El Capitanをダウンロードして、OnyXを使用してパーミションを変更します。
（筆者はアプリを使用していないので、上のアプリへのリンクは原文を参照してください）

> アプリでのパーミションの変更が終わるか、'sudo chmod 1777 /tmp'のコマンドがうまくいったら、MACを再起動します。

> パーミションを変更できたら、以下の１〜４のステップを実行して、SIPを有効にしてください。

> 1. 先ほどと同じようにMACの再起動中に Command + Rをアップルのロゴが現れるまで押し続けます。
2. ユーティリティからターミナルを開きます。
3. ターミナルで 'csrutil enable' と入力して、Enterを押します。
4. MACを再起動します。


（補足：/tmp ディレクトリは /private/tmp ディレクトリへのシンボリックリンクです。）

ただし、私の場合は、上記のようにSIPを切っても、/private/tmp の権限を変更できませんでした。

また、以下のようにEAを除去しようとしてみましたがダメでした。

```bash
su -
xattr -c /private/tmp
xattr -d com.apple.rootless /private/tmp
```

(SIPがオフでもrootlessは除去できないのでしょうか。今度時間がある時にちゃんと検証したいです)


最終的には、SIPを無効化した後、一旦 /private/tmp ディレクトリを、以下のように削除後、

```bash
su -
rm -r /private/tmp
```

再度ディレクトリを作成して

```bash
mkdir /private/tmp
```

パーミションを付与しなおすことで直りました。

```bash
chmod 1777 /private/tmp
```

以上、参考になれば幸いです。
機械学習論文読みメモ_7

[Fictitious Self-Play in Extensive-Form Games](http://jmlr.org/proceedings/papers/v37/heinrich15.pdf), ICML2015
fictitious play問題は、プレイヤー同士がゲームをプレイし、敵対者の期待戦略に対する最適な対応行動を選択する問題である。
特定のクラスのゲームでは、上記設定におけるプレイヤーの期待行動はナッシュ均衡に収束する。
この問題に対する手法はlarge-scaleに対応したものが少ない。
ゲームには２種類あり、extensive formは逐次各状態毎に行動戦略関数を用い行動を決定する。
normal formはプレイヤーが到達可能な状態を全て考慮し行動を決定する。
extensive formはnormal formに変換可能だが、可能な行動が指数的に増大する。
extensive formは行動戦略関数の利用により表現力が高い。
この行動戦略関数にfictitious playの考え方を適用した２つの定義が提案されているが、それらの収束性は不完全情報ゲームで示されていない。
本論で提案するfictitious playの派生手法の１つ目は、normal formと等価なextensive formの手法で、収束保証がなされている。
しかし状態数に対して線形オーダーの複雑性を持った戦略関数しか用いる事が出来ない。
こうした手法は厳密に各状態から可能な行動を全て考慮する。
一方で戦略関数を機械学習モデルなどで近似して推論を行うweakened fictitious play手法がある。
本論でこの手法に基づき、かつサンプリングベースの強化学習手法としてfictitious self playを提案する。
これは今までの経験をexperience playの考え方で再学習する事も取り入れている。

[Subsampling Methods for Persistent Homology](https://arxiv.org/pdf/1406.1901v1.pdf), ICML2015
topological data analysisでは、ある確率測度の元サンプルされたデータを元にそれが持つ構造的特徴を解析する分野である。
TDAの１つとしてスケールを変化させられる距離関数で、そのスケール変化に対するデータ特徴変化を要約し、landscapeと呼ばれる要約関数で表現するpersistent homologyがある。
こうした要約統計量を計算する際には、データの時空間方向に対するスケーラビリティが、高次元データへTDAを適用する場合に問題になる。
本論では、Wasserstein計量の元で摂動が起こる測度空間上でサブサンプルする場合に、そこから確率的に得られるlandscape関数の期待値は不偏推定値として用いれる事を示した。
この期待値は外れ値に対してロバストである。
また同様の考え方で、測度に関するsupport集合に近づけるようなサブサンプルを行う事で推定を行う手法を提案する。
複数のテキストファイルに対してgrepをかけた時にファイル名と行番号を出す方法

 - [unix - Display filename and match in grep - Stack Overflow](http://stackoverflow.com/questions/15432156/display-filename-and-match-in-grep)

を参考に、以下でできた。

```
$ ls |xargs -I XXX grep -n 'searched_string' XXX /dev/null
```

※追記 

...と思ったら、以下で良いんですね。どや顔で載せた記事もしっかり読んでおらず、恥ずかしいです。。笑

```
$ grep 'searched_string' *
```
Redisコマンドのオプション値の記法

SETコマンドでEXオプションをつけようとしたときハマったのでメモ。

まちがい: `SET key val 10`
せいかい: `SET key val EX 10`

名前付きのオプションはオプション名、値の順で両方入れる必要がある。
ぐぐってもなかなか引っかからないし、
リファレンスにも明記されていないっぽいので
（一応サンプルを見ればなんとなく分かるけど）
メモしておきます。
paiza.ioで自分の好きなフォントを使う

[paiza.io](https://paiza.io/)でコーディングするとき、フォントサイズや配色は設定で変えられますが、フォントそのものを変えることはできません。

ブラウザの機能拡張を利用して変えてしまいましょう！

![paiza.png](https://qiita-image-store.s3.amazonaws.com/0/82307/4ce3d4e6-a980-cf09-903e-969c18f3209a.png)

## 導入するブラウザの機能拡張

「[Stylish](https://userstyles.org/)」を例にします。

+ [Stylish for Firefox](https://addons.mozilla.org/ja-JP/firefox/addon/stylish/?src=external-userstyleshome)
+ [Stylish for Chrome](https://chrome.google.com/webstore/detail/fjnbnpbmkenffdnngjfgmeleoegfcffe)
+ [Stylish for Safari](http://sobolev.us/stylish/)
+ [Stylish for Opera](https://addons.opera.com/extensions/details/stylish/)

IE、Edge愛好家のみなさん、ごめんなさい。

## 調整するクラス

+ ソース
  + **`.ace_editor`** @paiza.io
+ コメント欄
  + 全体：**`div.variable-area *`** @paiza.io  
  + 入力欄と出力欄で分けたい場合  
  入力欄のみ：**`div.variable-area`** @paiza.io  
  出力欄のみ：**`div.variable-area pre`** @paiza.io
+ 入力欄
  + **`textarea.variable-area`** @paiza.io
+ 出力欄
  + [TEXT] or [JSON]：**`.stdout`** @paiza.io
  + [HTML]: **`*`** @out.paiza.io  
  HTML出力はiframeで「out.paiza.io/~~」を埋め込んでいる

## Stylish(機能拡張)での実現例

上記で挙げたクラスに対して、font-familyの値を指定します。今回は、[源ノ角ゴシック Code JP](https://github.com/adobe-fonts/source-han-code-jp)(Source Han Code JP)をWindowsで指定する例とします。

### Mozilla Format

```css
@-moz-document domain("paiza.io") {
.ace_editor,
.stdout,
textarea.variable-area,
div.variable-area *{
    font-family: "Source Han Code JP";
}
}

@-moz-document domain("out.paiza.io") {
/* 出力(HTML) */
* {
    font-family: "Source Han Code JP";
}
}
```

### Chrome

#### 適用先:**`paiza.io`**

```css
.ace_editor,
.stdout,
textarea.variable-area,
div.variable-area *{
    font-family: "Source Han Code JP";
}
```

#### 適用先:**`out.paiza.io`**

```css
/* 出力(HTML) */
* {
    font-family: "Source Han Code JP";
}
```

## 注意事項

+ プロポーショナルフォントを指定すると悲しいことになります。やめておきましょう。
+ font-familyで源ノ角ゴシック Code JPを指定するとき、WindowsとLinuxで指定値が異なります。
  + [Source Han Code JPの闇(でもないけど) [Linux]](http://qiita.com/kachodairi/items/3f08cd707abd538dd3b7)
  + [Source Han Code JPの闇 [Windows7]](http://qiita.com/kachodairi/items/bcae2fc210326eda0ca3)
API Gateway + LambdaでJSONデータを受ける際に、認証/署名検証したい

# 認証

## API Key認証
API Gateway標準機能。呼び出し側でx-api-keyを付加する必要がある。詳しい方法は割愛

## IAM認証
API Gateway標準機能。呼び出し側がさらにAWS依存となる。詳しい方法は割愛。

## カスタム認証
API Gateway標準機能。OAuth等の情報をヘッダから読み取り認証を行う。詳しい方法は割愛。

## Lambda側で認証
### ソースIPで認証
Lambdaにcontext情報を受け渡して、source-ipを利用して認証する。
「メソッドリクエストのパススルー」で生成される標準のテンプレートで対応可能。

### Basic認証
Lambdaにヘッダを受け渡して、Authorizationヘッダを用いて認証する。
「メソッドリクエストのパススルー」で生成される標準のテンプレートで対応可能。

# 署名検証
AWS API Gateway + AWS LambdaでWeb Hook等を受ける場合、パススルー接続するとJSONのパース結果がLambdaに渡される。通常はこれで問題ないが、署名検証する場合には不要なスペース等も含めた正確な入力文字列が必要となる。

そのような場合、結合リクエストのマッピングテンプレートで、生の入力をbase64エンコードすると、Lambdaないから正確な入力文字列を取得できる。

```json
{
"body-raw-base64" : "$util.base64Encode($input.body)"
}
```

「メソッドリクエストのパススルー」で生成される標準のテンプレートに、上記のキーを追加して利用する。
git ドットインストールメモ①

ドットインストールをとりあえずメモって行った感じの記事です。

gitはバージョン管理システム
Linuxコマンドを知った上で学ぶべき内容

バージョン管理の具体的な3つの段階

1.作業ディレクトリ
　基本的にここでファイルの編集をする

2.ステージングエリア   
　とりあえずここを経由するんだよという認識で。後ほどわかる模様。
　
3.リポジトリ          
　ローカルとリモートがある
　一人で進める場合にはローカルで。
　リモートは他の人とソースコードを共有しながら進める場合に有用。

設定

```
$ git config --global user.name "名前"
$ git config --global user.email "Eメールアドレス"
```

以上が必須。以下はやっておくと「いろいろよろしい」らしい。

```$ git config --global color.ui true```

-lとすると、現在のgitの設定を確認できるので見ておく。

```$ git config -l```

gitは基本的にgit に続けてオプションを書いて行くことで実行して行く。

以下の２つのいずれかによって、gitのhelpを見ることができる。好きな方を１つ覚える。僕は下が好き。qキー（quit）で戻れる。

```
$ git config --help
$ git help config
```

現在のディレクトリ確認には以下のコマンド

```
$ pwd 
```

ここから実際にコミット。・・・コミット？

コミットは前回のコミット時から今回のコミット時の差分を記録したもので、リビジョンとも呼ばれる、だそうです。前回のコミット時の復元を行ったり、複数のコミットをたどっていけばかなり過去のものも復元することができそう。

文字だけ見てもピンとこないのでどんどんやっていきます。

```
$ mkdir test　
$ cd test　   
$ git init　  
```

上から順に、ディレクトリ作成、ディレクトリ移動、.gitファイルの作成。gitファイルの作成をすることで、「このダイアログではgitを使うよ！」という宣言になる。

```
$ vim index.html
```

aを押し、適当に内容を書き換えてEsc→:wq

```
$ cat index.html
```

内容が変わっているのを確認する。

先ほども書いたように、バージョン管理には３つの段階がある。１つ目が作業ディレクトリ、２つ目がステージングエリア、３つ目がリポジトリ（今回はローカル）。

作業ディレクトリからステージングエリアまで上げるコマンドはadd というもの

```
$ git add index.html
```

続いて、ステージングエリアに上げたものをリポジトリにあげるには以下のコマンドを入力する

```
$ git commit 
```

vimエディタ画面が出る。aから変更点とか入力してEsc、:wq。何も入力しないと失敗する。注意。

変更点を確認するには

```
$ git log
```

先ほど入力した情報が出てくれば成功してます。ナイスコミット。
logに表示される情報について

commit （英数字の羅列）　←コミットのID
Author: ~ ←コミットしたのは誰か。
Date: ~ ← コミットしたのはいつか。
以下commit時に入力した情報　←コミットの内容

みたいな感じ。

git logの便利なオプション

```
$ git log --oneline
$ git log -p
$ git log --stat
```

上から順に、簡易版で見たい場合、詳しく変更箇所も見たい場合、どのファイルが何箇所変更されたかを見たい場合に用いる。

以上ドットインストールの#01~#05までのまとめメモ。
タグを除去して文字列の一部取り出し


* strip_tags 文字列からタグを取り除く
* mb_substr 日本語を含む文字列から文字列を一部を取り出す

```
mb_internal_encoding('UTF-8');
$string = 'タグと日本語を含む文字列';

// 文字列からタグを取り除く
$string = strip_tags($string);

// 日本語を含む文字列から文字列を一部を取り出す
$string = mb_substr($string,0,100);

echo $string;
```
Google mapのスクロールがiOS10で出来ない時の対処方法

# 背景
`scroll: ture`にしていてiOS9では動作するにもかかわらず、iOS10のwebブラウザでgoogle mapがスクロール出来ないことがあります。

# 対応方法
google mapを読み込むurlの`signed_in=true`を`signed_in=false`にすると、自分の環境では期待通り動作するようになりました。

```html:before
<script src="https://maps.googleapis.com/maps/api/js?libraries=places&key=[ your key ]&signed_in=true"></script>
```

```html:after
<script src="https://maps.googleapis.com/maps/api/js?libraries=places&key=[ your key ]&signed_in=false"></script>
```

# 参考
http://stackoverflow.com/questions/39540515/google-maps-javascript-api-doesnt-respond-to-touch-events-in-ios-10#_=_
Javaの標準入力で入力の終わり(EOF)を検出する

標準入力から流し込まれるテキストをnextLineを使って拾う時に
`java.util.NoSuchElementException: No line found`
の例外が発生した
この例外を出さないために、入力の終わり(EOF)をwhile文で検出する必要があり、それには
`hasNext`
を使う。

以下、コード例

```java
String InputText;
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
    InputText = scan.nextLine();
    System.out.println(InputText);
}
System.out.println("StdIn completed");
```
AWS が IPv6 に順次対応を始めていた!

AWS のブログを見たところ IPv6 に対応するとアナウンス[^1]がされました。
調べてみたところもう一部でIPv6が割り振り始められてます。

[![https://gyazo.com/7c7286212d6aff66c62384089432f9e3](https://i.gyazo.com/7c7286212d6aff66c62384089432f9e3.png)](https://gyazo.com/7c7286212d6aff66c62384089432f9e3)

## IPv6が割り振られてるか確認するページ
- ~~[CloudFront IPv6 deployed status](https://ipv6deployedtoyouredgelocation.com/index.html)~~
サイトは閉鎖されました

[^1]: [IPv6 サポートの更新 – CloudFront、WAF、S3 Transfer Acceleration](https://aws.amazon.com/jp/blogs/news/ipv6-support-update-cloudfront-waf-and-s3-transfer-acceleration/)
nodejsのexpressでview engineがhtmlの時に、引数をescape無しで出力する方法

# 背景
下記のように`view engine`を`html`にした時に、引数を`escape`させずに表示させたい。

```app.js
var express = require('express');

var app = express();

app.set('view engine', 'html')

app.get('/', function(req, res) {
  res.render('index.html', {
    some_html: "本文とか<br>htmlで書きたいこと。"
  })
})
```

# 方法
三重括弧を使います。

```index.html
<h1>トップページ</h1>
{{{some_html}}}
```

ちなみに、二重括弧だと`escape`された値が出力されます。
二重括弧を元に試行錯誤していたところ、三重括弧にしたら成功しました。

# 参考
二重括弧の方法を紹介してくれています。
http://stackoverflow.com/questions/29328028/node-js-passing-parameters-to-client-via-express-render

三重括弧を説明したサイトがあれば、教えていただけると嬉しいです。
!= 演算子の意味 (Swift)

#!= 演算子の意味

A と等しくなければ true（真）

A と x が等しくなければ true（真）

等しければ false（偽）


#コード例文(Swift)

```swift:!=演算子


import UIKit
var SavePassCode:Int?


class SettingSecurityCodeViewController: BaseViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        
        
    }
    
    @IBOutlet weak var SavePassCode: UITextField!

    @IBAction func RegistrationPassCode(sender: AnyObject) {
        
        if((self.SavePassCode.text) != "a"){
            
            print("入っています")
            
        }else{
            
            print("暗証番号が入力されていません")

    } 
  }
}




```

# コード説明

TextFildの値が"a"の時false（偽）　

それ以外はtrue（真）





# 実用例

パスワード要求画面
MonoDevelopでStyleCopを使う

#はじめに
MonoDevelopでStyleCopを使おうとしたときにちょっと迷ったのでメモ

#環境
Version 5.9.6 (Windows10)


#インストール手順
1. 画面上部のメニューから```Add-in Manager```を選択<br><br>
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/20bf9db9-fd6b-bd9d-c401-c7affd2c9e71.png)

<br>
2. GalleryタブからStyleCop Supportをインストール
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/325a4d37-af7a-0d60-4bfa-7b57f6301e87.png)


<br>
3. インストールが完了するとToolsからStyleCopが使えるようになります(完)
![MonoDevelop-Unity 2016-10-18 11.31.44.png](https://qiita-image-store.s3.amazonaws.com/0/44288/0057f0e9-9c37-ff32-cb2e-74c227268826.png)

#参考
MonoDevelop.StyleCop
http://addins.monodevelop.com/Project/Index/54
Laravel5.2のEloquentで結合したテーブルの同名カラムの取得結果ではまった

Laravel5.2のEloquentで結合したテーブルの値についてはまったのでメモ。


# やりたかったこと

２つのテーブルを外部結合したを取得したい

## テーブル

t_project

| field |  |
|:-:|:-:|
| id  | PK  |
| name  |   |

t_result

| field |  |
|:-:|:-:|
| id  | PK  |
| user_id  | FK(t_user.id)  |
| project_id  | FK(t_project) |
| amount  |   |


## 実行したかったSQL

```
SELECT * 
FROM t_project LEFT OUTER JOIN t_result ON t_project.id = t_result.project_id
AND t_result.user_id = ?
ORDER BY t_result.amount desc
```
(※user_id条件はprepareStatement)
後続処理で使いたいのはt_projectの情報。

# 試したこと

## 最初に書いてみたもの

```
$projects = TProject:::leftJoin('t_result', function ($join) use ( $userId) {
                    $join->on('t_project.id', '=', 't_result.project_id')
                         ->where('t_result.user_id', '=',  $userId);
                })
                ->orderBy('t_result.amount', 'desc')->get();
```

## 問題

Eloquentのモデル、TProjectのコレクションとして結果が取得できるわけだが、コレクションをループした時に

t_project.idが取れるものと思っていたら

**id　が null**

になっているものがある・・・？？？


# わかったこと

デバッグしてわかったのが、

結合先のテーブルも同名のカラムとして取得できる
＝
Eloquentモデルのattribute配列のキーが同じ
＝
**LEFT OUTER JOIN でレコードがない場合＝nullで上書きされる
（つまりLEFT OUTER JOINでテーブルがあったらt_result.idで上書きされる）**
模様。


最初、別名でPKにしていたのでそれが悪いのかと思い、全部idに変えたんですよねー・・・それでもだめでしばらくはまる。
（PKであろうと同じ意味のフィールド＝同名をつけたいポリシー）



# 対処法

結局結合先のテーブル情報はつかわないので、t_projectに絞った。

```
$projects = TProject:::select(DB::raw('t_project.*'))
				->leftJoin('t_result', function ($join) use ( $userId) {
                    $join->on('t_project.id', '=', 't_result.project_id')
                         ->where('t_result.user_id', '=',  $userId);
                })
                ->orderBy('t_result.amount', 'desc')->get();

```



~~正直、rawとか絶対つかいたくないっていうかテーブル名をここにベタ書きとか未だにEloquentのメソッド（staticじゃないと使えないもの）とLaravelのクエリビルダとの境がわからなくてさっぱり仲良くなれなくていちいち調べるから実装時間がかかってしょうがなくてどうにも・・・~~
CentOSにPostgreSQL9.6をyumでインストール

## 環境
Vagrantを使用

* CentOS 6.6 64bit

## インストール方法

##### 標準のリポジトリで PostgreSQL がインストールされないように設定
```
sudo vi /etc/yum.repos.d/CentOS-Base.repo
```
```
[base]
.
.
exclude=postgresql* # 末尾に追加
[updates]
.
.
exclude=postgresql* # 末尾に追加
```

##### yum リポジトリを追加
以下は64bit版です。
```
sudo yum -y localinstall https://yum.postgresql.org/9.6/redhat/rhel-6.7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
```

##### PostgreSQLインストールと初期設定
```
sudo yum -y install postgresql96-server
sudo service postgresql-9.6 initdb
sudo service postgresql-9.6 start
sudo chkconfig postgresql-9.6 on
```

##### postgresユーザーのパスワード変更
```
sudo passwd postgres
```

##### 接続してみる
```
su - postgres
psql
```
`\q`で切断できます

##### 設定ファイルを変更
`/lib/pgsql/9.6/data/`配下に`pg_hba.conf`等があるので編集する
CentOS6で始めるScale + Play FrameworkのHello World


## はじめに
CentOS6でScala + Play FrameworkのHello Worldしてみる備忘録。

## 事前準備
CentOS6をインストールしておく。

## 実行環境メモ
- Host

macOS Sierra 10.12 (Mem 8GB)
VirtualBox 5.0.26
Vagrant 1.7.4

- Guest

CentOS 6.8 (64bit, Mem 1GB)

## インストール


```:Java開発、Java実行環境をインストール
$ sudo yum install java-1.8.0-openjdk-devel java-1.8.0-openjdk
```

```:Scalaをインストール
$ curl -LO http://www.scala-lang.org/files/archive/scala-2.11.8.tgz
tar xvzf scala-2.11.8.tgz
$ sudo mv scala-2.11.8 /usr/local/scala
$ sudo vi /etc/profile
最終行に以下を追加
export SCALA_HOME=/usr/local/scala
export PATH=$PATH:$SCALA_HOME/bin

$ source /etc/profile
```


```:Typesafe&nbsp;Activatorをインストール
$ sudo yum -y install unzip
$ curl -LO https://downloads.typesafe.com/typesafe-activator/1.3.10/typesafe-activator-1.3.10.zip
$ unzip typesafe-activator-1.3.10.zip
$ sudo mv activator-dist-1.3.10 /opt
$ sudo ln -s /opt/activator-dist-1.3.10/bin/activator /usr/local/sbin/activator
```
※最新バージョンは[Play公式サイト](https://www.lightbend.com/activator/download)で確認

## Hello world

```:プロジェクト作成
$ activator new play-hello-world play-scala
```

```:Activatorコンソールに入る
$ cd play-hello-world
$ activator
[play-hello-world] $ run
```

ブラウザから次のアドレスにアクセスしてみる。

http://<サーバのIPアドレス>:9000/
ターミナルからグローバルIPを確認できるURLたち

ときどき必要になるのでメモ。
Stackoverflow を漁ったらけっこう見つかった。

# サンプル
多分もっとあるんだろうけど、とりあえず確認範囲で、ある程度安定していたもののみ。

```
$ curl checkip.amazonaws.com
200.201.202.203

$ curl icanhazip.com
200.201.202.203

$ curl ipecho.net/plain; echo
200.201.202.203

$ curl ident.me; echo
200.201.202.203

$ curl inet-ip.info
200.201.202.203
```

# Whois
参考までに。

- http://whois.ansi.co.jp/amazonaws.com
- http://whois.ansi.co.jp/icanhazip.com
- http://whois.ansi.co.jp/ipecho.net
- http://whois.ansi.co.jp/ident.me
- http://whois.ansi.co.jp/inet-ip.info
AndroidのTestまとめ

※この記事は2016-08-10に書いた自分のブログからの移行です

##追記
* 2016/10/19 [static methodのテスト](#static-method%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88)

#はじめに

この記事をまとめるにあたって
[Best Practices for Testing | Android Developers](https://developer.android.com/training/testing/index.html) を主に参考にしています。

Androidのテストは大きく分けて `Unit test` と `UI test` の２種類があり、実装方法や対象などで分けると5種類ある。

|ジャンル| テストの種類  | Androidへの依存 | 主に利用するツール|特徴|
|:---|:---|:---|:---|:---|
|Unit Test| local unit Test   | なし | Mockito|java VMで動作する|
|         | instrumentation Test| あり | hamcrest|Android上で動作する。 Context, SharedPreference, Parcelable を利用したテストができる|
||App Component Test|あり||Serviceなどのテスト|
|UI Test  | single app Test| あり | espresso|実質Android5以上の端末で動作|
|         | multi app Test| あり | uiautomator|v18以上。|



## local unit test
android framework に依存しないテスト。java vm で実行されるため、他のAndroidOSに依存するテストに比べて高速。

android.jar は実際のコードが存在しないため、例外をスローしてしまう。そのため、以下の対応をする必要がある。

* Mockito で代替となるモックの処理を実装する
* テスト対象を android.jar に依存しないコードにがんばってする

### Mockitoで処理する場合

1. `unitTests.returnDefaultValues = true` を設定し、android.jarの中を呼んだ場合に、例外ではなくデフォルト値を返すようにする。
2. Mockitoでモックを実装する

```
#build.gradle
android{
    testOptions {
        unitTests.returnDefaultValues = true
    }
}
```

### kotlinでMockito

Mockitoがkotlinの予約語を使っているので、バッククォートが入ってちょっと書きづらい

>    Mockito.\`when\`()

[nhaarman/mockito-kotlin](github.com/nhaarman/mockito-kotlin) の`   whenever()`を使えばいい感じに出来そうだったけど、引数がnullを許容していないので使いづらい。

```
fun <T> whenever(methodCall: T?) = Mockito.`when`(methodCall)
```
こんな感じで定義し直せばそれっぽく使える。

### static methodのテスト
mockitoだけではできないので[powermock](https://github.com/jayway/powermock)を使います。


```build.gradle
dependencies {
//    testCompile 'org.mockito:mockito-all:1.10.19'
    testCompile 'org.powermock:powermock-module-junit4:1.6.2'
    testCompile 'org.powermock:powermock-api-mockito:1.6.2'
}
```

テストランナーとか以下みたいな感じにします。

```kotlin
@RunWith(PowerMockRunner::class)
@PrepareForTest(Uri::class)
class HogeTest {
    @Mock
    lateinit var uri: Uri
    @Test
    fun test(){
        PowerMockito.mockStatic(Uri::class.java)
        whenever(Uri.parse("http://example.com")).thenReturn(uri)
    }
}
```

## instrumentation test
android framework に依存したテスト。Android のエミュレータや実機 で実行される

### 直ぐにテストを実行できない問題にはまる
Android Studio の右クリック > Run すると、JUnitテストとして動いてしまい、 `Empty test suite.` とエラーになりテストできない。
以下の雛形を元に Android Testとしてビルド設定を作り実行するとちゃんと動く。
<img width="837" alt="Screen_Shot_2016-08-16_at_6_27_14.png" src="https://qiita-image-store.s3.amazonaws.com/0/16532/b0dc6d14-17d5-2331-4bf9-0f8ba82e3968.png">



## single app for espresso

後で書く

## multi app for uiautomator

後で書く

## Tips

### android library のテストで 64k 問題にはまる

テストと直接関係ない話だけど、テストライブラリとか追加してたらはまった。デバッグビルドの時だけ、multidexにする。

```
android{
     buildTypes {
        debug{
            multiDexEnabled true
        }
    }
}

dependencies {
    debugCompile 'com.android.support:multidex:1.0.1'
}
```

### DaggerによるDI差し替え
以下の記事が素敵です。
[現実世界でのAndroid + Dagger2によるテスト](http://qiita.com/arenahito/items/d9bbca61c8a67cfad226)
mailコマンドで長い日本語の件名を持つメールを送信する

#前提
Linuxのmailコマンドで「長めの日本語の件名」を持つメールを送信しようとして、謎の文字化けに悩まされた時の対応方法

#今回ぶつかった壁

```bash
mail -s "あいうえおかきくけこさしすせそ" test@example.com
テスト
.
EOF
```
としたところ、

件名：```あいうえおかきくけこさし��せそ```
本文：```テスト```

という**件名が中途半端に文字化けした**メールが飛んできた。
まあphpとかシェルスクリプトとか、他の方法使えよって話になるんですが、どうしてもmailコマンドでどうにかしたかった~~(上司にやれって言われた)~~ので、やってみることにしました。

#環境

| OS | serverのメーラー | clientのメーラー |
|:-------------:|:--------------:|:--------------:|
| CentOS7 | Heirloom mailx 12.5 7/5/10 | Thunderbird 45.4.0 |

#やったこと
##エスケープ処理してみる

```bash
mail -s "あいうえおかきくけこさし\すせそ" test@example.com
テスト
.
EOF
```

件名：```あいうえおかきくけこさし��せそ```
本文：```テスト```

変わらない。

##文言を変えてみる

```bash
mail -s "鳴かぬなら鳴くまで待とうホトトギス" test@example.com
テスト
.
EOF
```

件名：```鳴かぬなら鳴くまで待とう��トトギス```
本文：```テスト```

やっぱり変わらないが、ここら辺で規則性を見つける。
**13文字目がなんか化けてる！**

##メールヘッダを見てみる
```text
Subject: =?utf-8?B?44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX4w==?=
 =?utf-8?B?gZnjgZvjgZ0=?=
```

```bash
echo 44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX4w== | nkf -W -mB -w
あいうえおかきくけこさし

echo gZnjgZvjgZ0= | nkf -W -mB -w
せそ
```

なんか13文字目で切れて改行されてるようだ。

##調べてみる
13文字目が改行されているということで色々調べてみた結果、以下のサイトに行き着いた。
[RFC 2822](https://tools.ietf.org/html/rfc2822#section-2.2.3)
>the 998/78 character limitations per line
>(1ライン当たり78分の998文字の制限)

とあるので、998/78=12.7948....文字までしか1行に表示できない(らしい)。
12文字目の次の文字でsubjectに改行が入れられてしまった結果、次の行に当たる部分がおかしな表示になってしまう(らしい)。
**これが文字化けしている原因と推定する**

##逆に13文字目より前の部分で改行してみる
```bash
mail -s `echo -e "あいうえおかきくけこ\rさしすせそ"` test@example.com
```
件名：```あいうえおかきくけこさしすせそ```
本文：```テスト```

ｷﾏｼﾀﾜｧ・゜ﾟ・:.｡..｡.:・゜(n'∀')ηﾟ・:.｡..｡.:・゜ﾟ・

##別の回避方法
連続した13文字がダメなのであって、半角スペースなどを入れられるのであれば、入れてしまえば回避できる。

```bash
mail -s "鳴かぬなら 鳴くまで待とう ホトトギス" test@example.com
テスト
.
EOF
```

件名：```鳴かぬなら 鳴くまで待とう ホトトギス```
本文：```テスト```

件名に半角スペースを入れても違和感がないのであれば、これでも回避できそう。

#応用
shellでmailコマンドで日本語の長いタイトルのメールを送る機会となるとあんまり無い気がしますが、例えばcronの結果をパイプしてメールで送るとか、何かと組み合わせると使用用途があるような気がしないでもないです。

例えば

```bash
1 * * * * /bin/sh/ sagyou.sh 2>&1 | mail -s `echo -e "あいうえおかきくけこ\rさしすせそ"` to@example.com
```
みたいな使い方とか？

#備考
メーラーの環境やWEBメールだと``\r``が半角スペースになってしまうことがあるようです。
mysqlのsocketの位置を確認する

ソケットが見つからなくてよく出るエラー

```
Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
```

まずは、ソケットの位置が合っているのか確認したいですね。

```
mysql_config --socket
```

・結果
```
/var/lib/mysql/mysql.sock
```

指定された位置に読み込み先を設定しましょう
元請け 和 一次請け 的意思

今天看到這兩個詞，覺得有點特別又有點好奇，
查了之後發現是業界用語，就來紀錄一下。

## 請け

> 必要な諸準備の手配から完成まで、一括で仕事を請け負う

在查到的文章裡面有提到，在業界的用語是這個意思。

中文的意思大致上是：

> 從期限或預算等為基準，進行事前準備到完成的規劃及實行

要更簡短的話，應該是有「承包」的含義

## 元、一次

- **元～** - 第一承包商，台灣的話，應該叫做一包吧（？）；是第一層直接面對業主的承包商。
- **一次～** - 第二承包商，或簡稱「二包」。因為一包無法施作一些合約內容而再外包給其他公司或工作室；這些再外包的角色就是所謂的「一次請け」。

所以當有一就有二、有二就有三：

「二次請け」、「三次請け」 ... 的說法都是有的。
rbenvで異なるバージョンのrubyを並列でインストールする

元ネタはこちら [Loop background job - StackOverflow](http://stackoverflow.com/a/12472991)


```bash:直列にやっちゃう
for v in {2.2.2,2.2.3,2.2.4,2.2.5}; do rbenv install $v ; done
```

```bash:バックグラウンドジョブとして起動
for v in {2.2.2,2.2.3,2.2.4,2.2.5}; do rbenv install $v & done
```

`&`に変えただけだが，複数コアあるなら有効活用できる．
連想配列のソート

#連想配列のソート
良く忘れてしまうので覚え書き。
  
      function sort_by_target_date($a, $b) {
            if ($a['target_date'] == $b['target_date']) {
                return 0;
            }
            return ($a['target_date'] < $b['target_date']) ? -1 : 1;
        }
      usort($array, "sort_by_target_date");


日付のこれは昇順ソート。
符号を変えれば降順になる。

$arrayにソートしたい連想配列がある。
その中にtarget_dateがある。

<dl>
<dt>[0]</dt>
  <dd>{</dd>
    <dd>[id]=1</dd>
    <dd>[title]="foo"</dd>
    <dd>[target_date] = "2016-10-10"</dd>
  <dd>}</dd>
<dt>[1]</dt>
  <dd>{</dd>
    <dd>[id]=2</dd>
    <dd>[title]="bar"</dd>
    <dd>[target_date] = "2016-09-10"</dd>
  <dd>}</dd>
<dt>[2]</dt>
  <dd>{</dd>
    <dd>[id]=3</dd>
    <dd>[title]="hoge"</dd>
    <dd>[target_date] = "2016-12-10"</dd>
  <dd>}</dd>
</dl>
こういうのをソートできる。
便利。
ちょっと意味が分からないけど…

参考：
[php:usort](http://php.net/manual/ja/function.usort.php)
Ext JS 6.2 でグリッドのカラムが右寄せになってしまう

Ext JS 6.2.0 での不具合です。

[[FIXED] Upgrading from 6.0.2 to 6.2.0 has made all our grids right-align](https://www.sencha.com/forum/showthread.php?325776-Upgrading-from-6-0-2-to-6-2-0-has-made-all-our-grids-right-align)

次のオーバーライドを、*overrides/grid/column/Column.js* として配置すると回避できます。

6.2.1 では修正されるとのことですので、6.2.1 にアップグレードしたらオーバーライドは削除してください。

```javascript
Ext.define('MyApp.overrides.grid.column.Column', {
    override: 'Ext.grid.column.Column',

    config: {
        triggerVisible: false,
        sorter: null,
        align: 'left'
    }
});
```
機械学習レシピ#3

https://www.youtube.com/watch?v=N9fDIAflCMY&index=5&list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal

分類器の質は供給する特徴量の良さに依る。
⇒良い特徴量を出すことが機械学習における重要な仕事のひとつ。
何が良い特徴量になるのか、どうやって分かるのか？

二項分類をしている場合、良い特徴量だと２つの異なるものを決定するのが簡単になる。

特徴量を考えるとき、世界には変異がたくさんあるので、個体数の異なる値に対しどうかと考える必要がある。

犬の犬種を区分けする分類器を書きたいとし、このときの特徴量が犬の身長（インチ）と目の色だとする。
グレイハウンドはラブラドールより高いとし、目の色は犬の犬種に関係しないとする。すなわち身長は役に立つが、目の色は役に立たない特徴量である。

```
$ pip install matplotlib
```

```
import numpy as np
import matplotlib.pyplot as plt

greyhounds = 500
labs = 500

#グレイハウンドの平均身長は28インチ、ラブラドールは24インチ。ばらつきがあるので正規分布でプラスマイナス4インチとする。
#np.random.randn(greyhounds)で標準正規分布を500個生成
grey_height = 28 + 4 * np.random.randn(greyhounds)
lab_height = 24 + 4 * np.random.randn(labs)

#ヒストグラムで可視化
plt.hist([grey_height,lab_height], stacked=True, color=['r','b'])
plt.show()
```
<img width="641" alt="スクリーンショット 2016-10-17 22.17.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/95399/1844de12-d530-cccc-6daf-14254d07689a.png">

これは個体数中に所定の身長の犬が何匹いるかを示す。
20インチの身長のものはラブラドール（青）の確率が高く、35インチのものはグレイハウンドの確率が高い。ただ25インチの場合、各種の犬の確率が近いので判断できない。
そのため、身長は有用な特徴量だが完璧ではない。そのため機械学習では複数の特徴量が必要になる。

どういう特徴量を使えばいいか把握するには”思考実験”をする。
自分が分類器だと思って、ラブラドールかグレイハウンドかを分かろうとすれば他にどんなことを知りたいか？　毛の長さ？足の速さ？体重？
**いくつの特徴量を使うべきかは、目安として自分が問題を解くのにいくつ必要か考える。**

例えば目の色は二通り（青と茶）だけで、それが犬種に依らない場合、大抵の値に対して分布は半々になる。そのため、この特徴量は犬の種類とは関係せず何も教えないので、学習データにこのような無用な特徴量を含めるのは分類器の精度の害になりえる。それは誤って有用に見える可能性があるからである。特に少量の学習データしかない場合はそうなる。

**独立した特徴量であること。関連性の高い特徴量を学習データから除外すること。**
例えば既にインチの情報はあるが、これにcmを追加しても既にあるので役に立たない。
インチでの身長とcmでの身長を分類器は同じだと理解できない。特徴量の重要性を二重カウントしてしまう。

**特徴量を分かりやすくすること**
例えば２つの異なる都市間で手紙を送ると何日かかるか予測するとき、
良い特徴量は都市間の距離（マイル）で
悪い特徴量は経度と緯度による都市の位置
理由は人間でも距離を見れば手紙が付くまでの期間を推量できるが、緯度・経度と時間の関係を分かることは難しく、学習データにもっと多くのデータが必要になる。

特徴量がどのくらい役に立つか測るために使える技術があり、どの組み合わせがよいかも分かる。これについては次回。
【Swift3】UITextFiledのborderを下線のみにする方法

# デモ
これを
![スクリーンショット 2016-10-18 8.37.34.png](https://qiita-image-store.s3.amazonaws.com/0/135478/7ca5b793-46de-599a-e2c8-514a3eef1e76.png)

こうする
![スクリーンショット 2016-10-18 8.38.03.png](https://qiita-image-store.s3.amazonaws.com/0/135478/05e4d5f6-2729-662a-a885-997d8e6b7d3d.png)

# 準備
StoryboardでUITextfieldを配置、Border Styleを一番左のNo Borderにしておく。
![borderbottom.png](https://qiita-image-store.s3.amazonaws.com/0/135478/d66b1710-b94a-42ad-1002-ade9b6264817.png)


# 方法1

```ViewController.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        let border = CALayer()
        let width = CGFloat(2.0)
        
        border.borderColor = UIColor.gray.cgColor
        border.frame = CGRect(x: 0, y: textField.frame.size.height - width, width:  textField.frame.size.width, height: 1)
        border.borderWidth = width
        
        textField.placeholder = "NAME"
        textField.layer.addSublayer(border)
    }
}
```

この方法だと複数のUITextFieldを変更する場合コードが長くなる。
その場合は次のextensionを使う。

# 方法2

```ViewController.swift
import UIKit

extension UITextField {
    func addBorderBottom(height: CGFloat, color: UIColor) {
        let border = CALayer()
        border.frame = CGRect(x: 0, y: self.frame.height - height, width: self.frame.width, height: height)
        border.backgroundColor = color.cgColor
        self.layer.addSublayer(border)
    }
}

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        textField.placeholder = "NAME"
        textField.addBorderBottom(height: 1.0, color: UIColor.lightGray)
    }
}
```

## 参考
・[UITextField border for bottom side only in swift](http://stackoverflow.com/questions/26800963/uitextfield-border-for-bottom-side-only-in-swift)
・[UITextFieldに下線を追加](http://qiita.com/YoheiMiyamoto/items/cafc03fb6485d04ccfd4)
Rails で AWS SDK for Ruby の Aws.config を環境別に設定する

Rails から Amazon Web Services を利用するときは AWS SDK for Ruby を使用する。その場合、アクセスキーやシークレットアクセスキーなどは環境変数に設定することが多い。しかし、開発用やテスト用にローカルの DynamoDB を利用するときのエンドポイントは環境変数で設定できず `Aws.config` で設定する必要がある。そんなときいい感じに `Aws.config` を環境別に設定する方法をメモっとく。

# AWS SDK for Ruby を Gemfile に追加する

AWS SDK を導入するために `gem 'aws-sdk-rails'` を Gemfile に追加する。

```diff:Gemfile
--- a/Gemfile
+++ b/Gemfile
@@ -26,6 +26,8 @@ gem 'jbuilder', '~> 2.5'
 # gem 'redis', '~> 3.0'
 # Use ActiveModel has_secure_password
 # gem 'bcrypt', '~> 3.1.7'
+# Use AWS SDK for Ruby
+gem 'aws-sdk-rails'
 
 # Use Capistrano for deployment
 # gem 'capistrano-rails', group: :development
```

# 環境別設定ファイルを作成する

database.yml のように環境別の設定を記述する。依存している AWS に関わる環境変数も明示的に記述するといいと思う。

```yaml:config/aws.yml
default: &default
  access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
  secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
  region: <%= ENV["AWS_REGION"] %>

development:
  <<: *default
  endpoint: http://localhost:8000

test:
  <<: *default
  endpoint: http://localhost:8000

production:
  <<: *default
```

# イニシャライザファイルを作成する

あとはイニシャライザで Rails の起動時に設定を読み込む。Rails 4.2 から追加された `Rails.application.config_for` が便利だ。

```rb:config/initializers/aws.rb
# Be sure to restart your server when you modify this file.

# Configure AWS SDK for Ruby.
Aws.config.update(Rails.application.config_for(:aws).symbolize_keys)
```

# 設定を Rails コンソールで確認する

Rails コンソールで確認すると設定が反映されていることがわかる。なお、Spring プリローダーが環境変数をキャッシュしているようなので、Spring プリローダーを一度停止してから実行するといい。

```shell-session
$ export AWS_ACCESS_KEY_ID=TESTKEY
$ export AWS_SECRET_ACCESS_KEY=TESTSECRET
$ export AWS_REGION=ap-northeast-1
$ bin/spring stop
$ rails c
> Aws.config
=> {:logger=>#<ActiveSupport::Logger:0x007f81e2598088 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x007f81e2598010 @datetime_format=nil>, @formatter=#<ActiveSupport::Logger::SimpleFormatter:0x007f81e4c05108 @datetime_format=nil>, @logdev=#<Logger::LogDevice:0x007f81e2598ab0 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<File:/Users/takuya/Documents/Rails/bookshelf/log/development.log>, @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x007f81e259b620>>, @local_levels=#<Concurrent::Map:0x007f81e1c63f30 entries=0 default_proc=nil>>, :access_key_id=>"TESTKEY", :secret_access_key=>"TESTSECRET", :region=>"ap-northeast-1", :endpoint=>"http://localhost:8000"}
> exit
```
enhancdの実行後に自動でlsコマンドを実行する

# enhancdとは
![](https://raw.githubusercontent.com/b4b4r07/screenshots/master/enhancd/demo.gif)
>[b4b4r07/enhancd ❤ GitHub](https://github.com/b4b4r07/enhancd)
:rocket: A next-generation cd command with an interactive filter :sparkles:

@b4b4r07さんによって開発されたcdの拡張コマンドです. 
これが非常に便利で私も愛用しています. ターミナルを利用されている方は一度試してみてはいかがでしょうか.

詳細は開発者様の記事が参考になります.
[ターミナルのディレクトリ移動を高速化する](http://qiita.com/b4b4r07/items/2cf90da00a4c2c7b7e60)
[autojump/z から乗り換えよう、cd 拡張プラグイン enhancd](http://qiita.com/b4b4r07/items/4b97c2348af4dba29a03)


# やり方
2016/10/18時点で最新版のver2.2.2からenhancd実行後に実行されるコマンドを指定する変数**ENHANCD_HOOK_AFTER_CD**が用意されています. 今回はそれを利用します.

## 最新版enhancdの準備
enhancdのインストールは公式のドキュメントを参考にして下さい.
<https://github.com/b4b4r07/enhancd/tree/2.2.2#package-installation>

ただし, 2016/10/18時点では利用するver2.2.2がmasterブランチにはマージされていません.
そのため, 以下のコマンドでブランチを指定して, 最新版のenhancdを用意して下さい.

```bash
git clone -b 2.2.2 git@github.com:b4b4r07/enhancd.git
```

**※既にenhancdをインストールしている場合**
**既存のenhancdディレクトリを削除して, 最新版と入れ替えて下さい.**

## .zshrcの編集
`.zshrc`に以下のコードを追記

```zsh
source [path]/enhancd/init.sh
ENHANCD_HOOK_AFTER_CD=ls
```

インストール時に既に1行目のコードを記述していた場合は2行目のコードだけを追記.

最後に`.zshrc`の設定を反映.

```bash
source ~/.zshrc
```

# 動作
うまくいくと自動でlsが実行されます.
[![https://gyazo.com/35bf7320496d852cc9a21b5a680f3aab](https://i.gyazo.com/35bf7320496d852cc9a21b5a680f3aab.gif)](https://gyazo.com/35bf7320496d852cc9a21b5a680f3aab)

# 最後に
今回この動作を実現するにあたり, 開発者である@b4b4r07さんがenhancdを改良してくれました.
いきなりTwitterで開発者様からレスポンスがきた際には驚きましたが, いちユーザの声に対応していただきありがとうございました.

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr"><a href="https://twitter.com/icchi_h">@icchi_h</a> cd() { __enhancd::cd “$@“; ls; } とかでいけませんでしたっけ。。。</p>&mdash; b4b4r07 (@b4b4r07) <a href="https://twitter.com/b4b4r07/status/784402299963584512">October 7, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-conversation="none" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/icchi_h">@icchi_h</a> たいぶ遅くなってスミマセン。2.2.2 ブランチにて ENHANCD_HOOK_AFTER_CD という変数を追加しています。ENHANCD_HOOK_AFTER_CD=ls とすれば期待通り実行できるはずです。お試しください。近日マージ予定です。</p>&mdash; b4b4r07 (@b4b4r07) <a href="https://twitter.com/b4b4r07/status/787686113037070336">2016年10月16日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
magitチートシート

# 事前準備

## インストール

- パッケージアーカイブを登録しておく。
- `package-list-packages`で`magit`を選びインストール（自分のインストール時は`2.8.0`）。

```lisp:init.el
(require 'package)
(add-to-list 'package-archives
             '("melpa-stable" .
               "http://stable.melpa.org/packages/") t)
(add-to-list 'package-archives
             '("melpa" .
               "http://melpa.org/packages/") t)
(add-to-list 'package-archives
             '("marmalade" .
               "http://marmalade-repo.org/packages/") t)
(package-initialize)
```

## 設定

- `magit status`コマンドを多用するため、キーバインドを割り当てておく（自分は`C-x C-g`にした）。

```lisp:init.el
(global-set-key (kbd "C-x C-g")   'magit-status)
```

# 使い方

## ステージング

### 基本的な流れ

1. `magit status`すると、変更のあるファイル一覧が以下の分類で表示される。
2. `s/u`（共に小文字）でカーソル位置のファイルがステージング/ステージング解除される。

### Tips

- `G`で一覧を更新。
- `S/U`（共に大文字）で全変更をステージング/ステージング解除。
- `TAB`でカーソル位置のファイルの差分を確認できる。
- ファイルの差分表示内での`s/u`（共に小文字）により、ファイルの部分ステージングが可能。
- `k`（小文字）でカーソル位置のファイルの変更を取り消せる（**戻せないと思われるので注意**）。
- ファイルの差分表示内での`k`（小文字）により、ファイルの部分的変更取消が可能（**戻せないと思われるので注意**）。

## コミット

### 基本的な流れ

1. `magit status`画面を開く。
2. `c c`でコミットメッセージ入力バッファが開かれる。
3. 入力後`C-c C-c`でコミット確定（`C-x k`等でバッファを閉じればキャンセルされる）。

## ブランチ

### 基本的な流れ

1. `magit status`画面を開く。
2. 以下のどれかをやる。
2-a. `b b`後ミニバッファにブランチ名入力でチェックアウト。
2-b. `b n`後ミニバッファに起点入力→ブランチ名入力で新規ブランチ作成。
2-c. `b c`後ミニバッファに起点入力→ブランチ名入力で新規ブランチ作成＆チェックアウト。

## ログ確認

### 基本的な流れ

1. `magit status`画面を開く。
2. `l l`でログ確認バッファが開かれる。
3. 確認後は`C-x k`等でバッファを閉じることができる。

## プッシュ

### 基本的な流れ

1. `magit status`画面を開く。
2. `P p`（大文字・小文字）で`pull`完了。

## プル

### 基本的な流れ

1. `magit status`画面を開く。
2. `F u`（`u`は小文字）で`pull`完了。
コーディング規約管理のgem「RuboCop」を導入してみた

# 環境
```
Ruby: 2.1.0
Rails: 4.1.5
RuboCop: 0.43.0
```
# RuboCopってなに？
RubyのGemです。
設定したコーディング規約(後述)通りプログラムが書かれているかチェックします。
さらには自動で修正ができます。

# どうしてコーディング規約が必要なの？
- プログラムの可読性を上げるため 
- プログラムの品質を上げるため

# どうやってインストールするの？
以下のコマンドを入力します。
※ バージョンはプロジェクトに合わせて変更してくださいね。

```
$ gem install 'rubocop' -v='0.43.0'
```
# どうやって使うの？
以下のコマンドを入力します。
設定したコーディング規約(後述)に反している箇所を表示します。

```
$ rubocop
```

以下のようにファイル名を記入することで、そのファイルのみチェックができます。

```
$ rubocop Test.rb
```

規約に合わせて自動修正する場合は、以下のコマンドを入力します。

```
$ rubocop --auto-correct
$ rubocop -a # alias
```
他にも色々とオプションがあります。(が、割愛)

# 規約はどう設定するの？
主に以下の４ファイルで設定します。

```
default.yml # 規約の定義が書かれている
enabled.yml # デフォルトで有効なcopが書かれている
disabled.yml # デフォルトで無効なcopが書かれている
.rubocop.yml # 有効/無効を上書きする
```
前者３ファイルは**rubocopディレクトリ内のconfig配下**に、
.rubocop.ymlは**root配下に自分で**作成します。

# .rubocop.ymlの設定例
まずは方針をば。
今回導入したプロジェクトでは、**Performanceのcopのみ**を有効にしました。
理由は以下の２つ。

1. コーディング規約に全て目を通すのが大変
2. 全てのcopを有効にすると、警告がわんさか出る

小さく始めて徐々に増やす作戦です、はい。
※ この作戦がうまく行くかは、また改めて書くかも...。


さて、.rubocop.ymlの具体的な設定例です。

1. enabled.ymlを複製して、.rubocop.ymlにリネーム
2. 各設定の`Enabled: true`を`Enabled: false`に置き換える
3. Performanceの部分を全て削除

手順２で何をしたかというと、
enabled.ymlに書かれている有効なcopを、全て無効で上書きしています。

手順３では、Performanceの項目を削除することで、無効を解除しています。

# これからどう運用するの？
1. .rubocop.ymlに載っているcopのリファレンスを読む
2. 有効/無効を判断する
3. 有効なら.rubocopから削除. 無効なら残す
4. 1~3を繰り返す



# 参考文献
[RuboCopの設定アレコレ](http://qiita.com/necojackarc/items/8bc16092bbc69f17a16d)
[RuboCopをRailsオプションやLintオプションで使ってみよう](http://blog-ja.sideci.com/entry/2015/03/12/160441)
Xamarin を使わなくてもいい人たち

「Xamarin はいいぞ」ばかり言ってる私ですが、Xamarin がハマらないケースも当然あるわけで。

　いくつかピックアップしてみたいと思います。

## Android / iOS のスペシャリスト

　Android または iOS、Java や Swift が大好きで最先端を突っ走ってる人。
あるいは、最新のOSの機能をガンガンアプリに取り入れていくプロダクト。

　彼(または彼女)達に「Xamarin 使えよ、C# 使えよ」って言っても彼らの楽しみを奪ってしまうのでしない方がいいし、SDK が新しくなったら即使いたいという欲求はネイティブでないと満たせないですよね。
　
## 配布サイズを気にするプロダクト

　Xamarin でアプリを作ると、Monoランタイムを同梱するため配布パッケージの容量がびっくりするくらい増えます。（Android の場合、HelloWorld でも 10MByte は切れないんじゃなかったかな？）
　プロダクトが、世界をターゲットにしていて、それに回線の細い新興国も含まれている場合、注意した方がよいと思います。
　
## ガワネイティブでいいやつ

　Cordova, Monaca とかそういうの。例えばショッピングサイトのネイティブアプリだと、コンテンツの差し替えが激しいので HTML5 でモバイルWebサイトと共通化できたほうが運用の効率がよいです。
　
## 宗教上の理由

　マイクロソフトに親を殺された人は使わないでしょう。ただ、過去に何があったかは知らないですけど、今のマイクロソフトはあなたを殺しませんよ？
　
----


こんなもんかなあ。逆を言えば、上に当てはまらなければ Xamarin を選択しない理由はないわけで。

やっぱり、「Xamarin はいいぞ」
Chefのrecipeのlibraryで他のgemを使用したいとき

標準ではないgemを使用したいときは`chef_gem`リソースでgemをインストールすれば各レシピで使用できます。各レシピで共通で使用するメソッドはlibraryディレクトリにrubyスクリプトファイルを置けば使用できます。標準ではないgemをlibrary配下のrubyスクリプトで使おうとすると。。。

# 前提条件

Chefバージョン: 12

# うまく動かない例

```ruby:recipe/default.rb
chef_gem 'activesupport' do
  version "4.2.5.1"
end
```

```ruby:libraries/helper.rb
require 'active_support/core_ext/string/inflections'

module Helper
  def humanize_name(name)
    name.humanize
  end
end
```

エラーが発生します

```
LoadError
---------
cannot load such file -- active_support/core_ext/string/inflections
```


# うまく動く例

Chefはrecipeを実行する前にライブラリをロードしようとするので、methodの中でrequireしてやると遅延評価されてうまくいきます。

```ruby:recipe/default.rb
chef_gem 'activesupport' do
  version "4.2.5.1"
end
```
```ruby:libraries/helper.rb
module Helper
  def name(name)
    require 'active_support/core_ext/string/inflections'
    name.humanize
  end
end
```

# 参考元

https://sethvargo.com/using-gems-with-chef/

ここまでお読みくださってありがとうございました。
ご指摘お待ちしております。
bitbucketから突然git cloneが出来なくなった

## 現象
普段はbitbucketにSSHキーを登録し、git clone等の操作を行っていたが突然以下のエラーメッセージが表示されリモートリポジトリへのアクセスが不可能になった。

```
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

bitbucket側にSSHキーがちゃんと登録されているか再度確認してみたが問題なし、サーバ側の鍵のパーミッション等も問題なし。

もちろん対象のリモートリポジトリも確かに存在する。

ちなみにSourceTreeでリモートリポジトリへのアクセスは普通に出来る。（SourceTreeのアクセス方法としてはHTTPSを使用）

## 原因

bitbucket側の障害でSSH全般が利用出来なくなっていた。

<img width="901" alt="bitbucket_error.png" src="https://qiita-image-store.s3.amazonaws.com/0/71899/a8606e2c-f2de-f857-cc05-ab4ee22cadbe.png">

下記のページをチェックする事で気がついた。
https://status.bitbucket.org/

明らかにこちらの設定に問題がない時は上記のページをチェックしてみる。
Raspberry Pi 3+I2S+DAC(ES9023)+Volumioによるジュークボックス

#はじめに
Google Play musicの無料会員を機にPCに保存している音楽をクラウドへ移行。今まで適当だった自宅のオーディオ環境を快適にすべくRaspberry Pi3をジュークボックス化しようと決意。どうせなら、音質がよいといわれているI2S-DACでアンプにつなげようとって事になりました。(Google Play musicからの再生は宿題）


#今回の目標
１．Raspberry Pi3とES9023が実装された基盤の接続
２．VolumioのOSイメージ作成
３．Volumioの設定

#１．Raspberry Pi3とES9023が実装された基盤の接続
##DACについて
ネットを検索していると、Raspberry Pi+I2Cで使われるDACの大半は、TDA1543かES9023のいずれかのようです。その中でも汎用的な音質といわれているES9023をDACとして採用。（自分で聞き比べをしてません、ネットのレビューを参考にしてます）

##基盤の入手
ヤフオクでそれっぽいのを入手。ど素人のため確認ポイントもわからないですが、Volumioで動作確認済みという言葉を信じて落札。中華系サイトにも同様の基盤が売ってそうです。

###購入した基盤
**表面**
![IMG_0674 - コピー.JPG](https://qiita-image-store.s3.amazonaws.com/0/130007/7402bfda-a49d-4eb4-31d4-2561c1f9d136.jpeg)


**裏面**
![IMG_0675 - コピー.JPG](https://qiita-image-store.s3.amazonaws.com/0/130007/d262f306-fc31-ae02-2bf5-9afa5a074b92.jpeg)

###Raspberry Piとの接続
ピンの説明は下記の通り。かっこ内は[ここ](http://y2web.net/blog/d-i-y/network-audio-with-raspberry-pi-2-vol-3-4101/ "ここ")を参考にしました。略が違うが気にせず前に進みました。間違えてたら指摘して下さい。
GND（グランド）<-使わないっぽい
+5V（5V入力）

BCK（ビットクロック　データ信号の同期を取るためのクロック信号 ）
LRCK（ステレオ音声信号のLチャネルとRチャネルを区別するためのクロック信号）
DATA（ディジタル音声のデータ信号 (DIN) ）
GND（グランド）
MCLK（マスタークロック信号 ）<-使わないっぽい

使わないっぽいと記載したピンは同梱されたケーブルが接続されていなかったためです。根拠薄い・・・。
Raspberry Piとの接続は[ここ](http://www.denshi.club/pc/audio/raspberry-pi-2i2s-dac.html "ここ")を参考にすればできあがり。

#２．VolumioのOSイメージ作成
[本家サイト](https://volumio.org/get-started/ "本家サイト")からイメージファイルをゲットする。
以前イメージから書き込んだことがあるので[その手順](http://qiita.com/itti/items/c27a44f3eaef3a6e6b8a "その手順")に従いmicroSDへ書き込み

#３．Volumioの設定
##起動
有線でルータにLANケーブルを接続した状態でスイッチオン（スイッチないからmicroUSBイン！）。
起動すれば同一LAN内からブラウザでアクセス可能になる。
（当初、DHCPでIPが取得できずアクセスができませんでした。ルータのファームアップと再起動をしたらIPがすんなり取得できたのではまってる人はルータを疑うのも大事だと思います。）

##無線LAN設定
[ここ](http://raspberrypi.blog.fc2.com/blog-entry-90.html "ここ")を参考に設定をする。簡単。

##SSHの設定
デフォルトでできているっぽい。何もせずにアクセスできました。

##SDカードの領域拡張
今回は16GBのmicroSDを利用しました。（アキバで500円！安い！！）システム領域として2GB程度消費されていますが、残りが認識されていないので認識させて領域を拡張します。
が、やりかたがわからないので宿題とします。

##ドライバの設定
I2S用のドライバを設定して音楽を再生すれば聞けるはずです。いつかちゃんと書き直します。
shellで空白を含む実行するスクリプトを配列に格納

shellでunit testを書こうと思ったがFixtureの様な仕組みが作れなかったので、とりあえず暫定での対応方法を考え中。
後からいいのが思いついたら試してみる

## 文字列化 -> 後で除く
```shell-session

# !/bin/bash

function main() {
	local -a _arr=()
	local _func1="print_str hello"
	local _func2="print_str world"
	local _func3="print_str !"
	_arr+=("'\${_func1}'")
	_arr+=("'\${_func2}'")
	_arr+=("'\${_func3}'")

	for _func in ${_arr[@]}
	do
		echo "eval ${_func}"
		eval `echo ${_func} | tr -d "'"`
	done
}

function print_str() {
	local _str="${1}"
	echo "${_str}"
}
```

main
Herokuにphantomjsをinstall


このエラーの対応方法

```
Cliver::Dependency::NotFound: Could not find an executable ["phantomjs"] on your path.
```

```
heroku buildpack:set https://github.com/ddollar/heroku-buildpack-multi.git
```

```:bash
vi .buildpacks 
```

```:bash
https://github.com/heroku/heroku-buildpack-ruby
https://github.com/stomita/heroku-buildpack-phantomjs
```
【Swift】storyboardを利用しないテンプレート（UICollectionView、UICollectionViewCell）

# 概要
PureLayoutのサンプル（UICollectionView、UICollectionViewCell） 第3弾です。
[Yahooオークションの検索API](http://developer.yahoo.co.jp/webapi/auctions/auction/v2/search.html)の結果をCollectionViewに表示しています。
次回はUITabBar

# 目的
[storyboardを利用しない必要最低限のテンプレート（Swift）](http://qiita.com/menomoto/items/3140ec04b509e4726615) を参照ください。

# メリット （PureLayout vs Storyboard）
[[Swift] storyboardを利用しないテンプレート（基本的なView）](http://qiita.com/menomoto/items/0031c4b430a05f9554f6) を参照ください。

# 対象View
* UICollectionView
* UICollectionViewCell

# 結果
![サンプル](http://i.imgur.com/pPbO28T.png "サンプル")

# github
* https://github.com/menomoto/Sample_PureLayout/tree/master/pureLayoutSample03
* xcode8, swift2.3
* iPhone5,6,6s UI確認OK

# AutoLayout設定
#### CollectionView（& SearchBar）
```
    private func addConstraints() {
        searchBar.autoPinToTopLayoutGuideOfViewController(self, withInset: 0)
        searchBar.autoPinEdgeToSuperviewEdge(.Left)
        searchBar.autoPinEdgeToSuperviewEdge(.Right)
        
        collectionView.autoPinEdge(.Top, toEdge: .Bottom, ofView: searchBar)
        collectionView.autoPinEdgeToSuperviewEdge(.Left)
        collectionView.autoPinEdgeToSuperviewEdge(.Right)
        collectionView.autoPinEdgeToSuperviewEdge(.Bottom)
    }
```
#### CollectionViewCell内の各View
```
    private func addConstraints() {
        itemImageView.autoPinEdgeToSuperviewEdge(.Top, withInset: 2)
        itemImageView.autoPinEdgeToSuperviewEdge(.Left, withInset: 2)
        itemImageView.autoPinEdgeToSuperviewEdge(.Right, withInset: 2)

        titleLabel.autoPinEdge(.Top, toEdge: .Bottom, ofView: itemImageView, withOffset: 3.0)
        titleLabel.autoPinEdgeToSuperviewEdge(.Left, withInset: 2)
        titleLabel.autoPinEdgeToSuperviewEdge(.Right, withInset: 2)

        priceLabel.autoPinEdge(.Top, toEdge: .Bottom, ofView: titleLabel, withOffset: 3.0)
        priceLabel.autoPinEdgeToSuperviewEdge(.Left, withInset: 2)
        priceLabel.autoPinEdgeToSuperviewEdge(.Right, withInset: 2)

        endTimeLabel.autoPinEdge(.Top, toEdge: .Bottom, ofView: priceLabel, withOffset: 3.0)
        endTimeLabel.autoPinEdgeToSuperviewEdge(.Left, withInset: 2)
        endTimeLabel.autoPinEdgeToSuperviewEdge(.Bottom, withInset: 5)

        bidLabel.autoPinEdge(.Top, toEdge: .Bottom, ofView: priceLabel, withOffset: 3.0)
        bidLabel.autoPinEdge(.Left, toEdge: .Right, ofView: endTimeLabel, withOffset: 10.0)
        bidLabel.autoPinEdgeToSuperviewEdge(.Bottom, withInset: 5)

    }
```
Gitの補完やら、ブランチ名表示やらをbashでしようとしたらエラーが出る

まず、以下の記述を ~/.bashrc に記述する。

```
source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/git-completion.bash
GIT_PS1_SHOWDIRTYSTATE=true
export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
```

コンソールを再起動または、 source ~/.bashrc すると反映されるが、
ここで自分は以下のエラーが出てできなかった。

```
-bash: /usr/local/etc/bash_completion.d/git-prompt.sh: No such file or directory
-bash: /usr/local/etc/bash_completion.d/git-completion.bash: No such file or directory

// (このエラーも出た)
__git_ps1: command not found
```

そもそも、便利機能のシェルがないぜっ、ってことみたい。
(brewでgitを入れている人は問題ない？)

ってことで便利機能のシェルをダウンロードしてくることにした。
wgetなりcurlなりで以下の場所からダウンロードする。

```
// git-prompt.sh のダウンロード
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh  
// git-completion.sh のダウンロード
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
```

ダウンロードした二つのファイルを以下に保存。

```
/usr/local/etc/bash_completion.d/
```

これでOKでした。
【Android】DatePickerのフォントを変更する

#【Android】DatePickerのフォントを変更する

##環境
 - AndroidStudio 2.1.2
 - Java 1.8.0
 - Android 2.3.3

任意のフォントファイルをAssetsフォルダ内にコピーする。
※Assetsフォルダが存在しない場合は、
app/src/main を右クリック -> new -> Folder -> Assets Folder



```java:code.java
Typeface typeface = Typeface.createFromAsset(getAssets(), "font_file_name");

DatePicker datePicker = new DatePicker(this);
LinearLayout linearLayout = (LinearLayout) datePicker.getChildAt(0);

NumberPicker numberPicker1 = (NumberPicker) linearLayout.getChildAt(0);
EditText editText1 = (EditText) numberPicker1.getChildAt(1);
editText1.setTypeface(typeface);

NumberPicker numberPicker2 = (NumberPicker) linearLayout.getChildAt(1);
EditText editText2 = (EditText) numberPicker2.getChildAt(1);
editText2.setTypeface(typeface);

NumberPicker numberPicker3 = (NumberPicker) linearLayout.getChildAt(2);
EditText editText3 = (EditText) numberPicker3.getChildAt(1);
editText3.setTypeface(typeface);
【Android】AlertDialogからタイトル部分のViewを取得する

# 【Android】AlertDialogからタイトルのViewを取得する

##環境
 - AndroidStudio 2.1.2
 - Java 1.8.0
 - Android 2.3.3


```java:code.java
AlertDialog alertDialog = new AlertDialog.Builder(this)
                .setTitle("title")
                .setPositiveButton("ok", null)
                .create();

alertDialog.show();

int alertTitle = getResources().getIdentifier("alertTitle", "id", "android");
TextView textView = (TextView) alertDialog.findViewById(alertTitle);
```
EzMailからGmailへ移行するときのメモ

#はじめに
私ははや10年のauユーザーです(小1~高2)
昔はEzMailも普通に使えたんです。
でもまぁ子供とは言え何処かからメールアドレスは漏れるものですね
今ではいわゆるエロメールしか来ません(笑)
これでは将来使おうと思ったときやいざという時に使えないというわけでGmailを活用しようと思いました。

当方iPhone使いなため、iPhone向けの方法のみ記載します。
暗証番号等の入力につきましては省略させていただきます。

~~つい最近EzMailが迷惑メールフィルタ改善したとか言ってたけどその発表後から余計ひどくなった気がするの僕だけ？~~

#移行するメリット
##フィルタリング
今までのようにメールアドレスをコピーして#5000に1234と送って設定URL出して迷惑メールフィルタの設定を(ryから
?「これめーわくめーるだ！」 -> ぽちっ
になります。

##保存できる容量

|サービス|容量|
|:------------:|:------------:|
|Gmail|10GB|
|EzMail|0.2GB|

この差である。

#移行するデメリット
思いつかなかった。

#移行手順
## 1.Gmailのアカウントを作る
 (省略します)

## 2.Gmailへの転送設定を行う
1. まずはiPhoneをWifiから切断し4G(3Gでも可)接続にしましょう。
2. メッセージアプリを立ち上げ#5000に1234と送信します
3. 受信したSMSのURLに接続し[Eメールアドレス変更・迷惑メールフィルター・自動転送 -> 自動転送先の設定へ]より作成したGmailアドレスを入力し[送信]をタップします。

これでEzMailが全てGmailに転送されます

## 3.必要な情報の取得
1. 2-3で来たURLより(期限が切れていた場合には再度1234を送信しURLを受け取りましょう)[利用アプリ変更]欄の下にある[手動設定]をタップします。
2. [設定情報送信]をタップします。
3. 表示された情報とSMSで受信したユーザ名 パスワードは使うので保存してください。

## 4.GmailからEzMail名義で送信できるようにする
ここではPCからの操作が必須となります(PC閲覧モード等の機能を使えばiPhoneでも出来ますが操作しづらいのでPCおすすめ)
1. まずGmailにログインします。
2. [歯車マーク -> 設定]をクリックし[アカウントとインポート -> メールアドレスを追加]をクリックします。
3. 新しいウィンドウが開くので名前とメールアドレス(EzMail)を入力し[エイリアスとして扱います]のチェックを**外します**
4. [次のステップ]をクリックし、[STMP サーバー]を[smtp.ezweb.ne.jp]にし、3-3で保存した情報を入力します。
5. 入力したメールアドレス(Ez)に確認メールが来るのでURLを開くか、数字を入力しましょう。(すでに転送設定(2)が終わっていればGmailの受信トレイに入ります)
6. (4-2)を実行し名前欄にEzMailが追加されていることを確認したら[デフォルトに設定]をクリックします。

これで終了です。

#終わりに
この後アドレス帳の同期やフィルタ振り分けの設定等はここでは解説しません。
少し長くなりましたが簡単に出来るのでぜひ移行してみてはいかがでしょうか？