OmniAICreator/Qiita-1.07M huggingface dataset:
password_verifyは本当にタイミングセーフなのか？

このコードには問題点がある．

```php
<?php

$username = 'ユーザ名';
$password = 'パスワード';

$hashes = [
    'mpyw' => '$2y$10$p3v4KlSFqx11/84YF2xTJu4h5hQKhwsH5/X5bqoVgkY./.vFxf3HS',
];
$result = isset($hashes[$username]) && password_verify($password, $hashes[$username]);
```

`password_verify`を実行するかしないかで大きく実行時間に差が現れるため，**ユーザ名が存在すること・しないことがバレやすい**．これではユーザ名をできるだけ保護したい目的で「ユーザ名またはパスワードのどちらかが違います」のようにメッセージを出したとしても意味が無くなってしまう．

では，ただ`password_verify`をとりあえず実行しておけばいいのか？というとそうでもない模様．

```php
<?php

for ($i = 0; $i < 25; ++$i) {
    $hash = '$2y$10$' . str_repeat('A', $i + 1);
    $sum = 0.0;
    for ($j = 0; $j < 30; ++$j) {
        $start = microtime(true);
        password_verify('a', $hash);
        $end = microtime(true);
        $sum += $end - $start;
        unset($start, $end);
    }
    printf("%02d: %.5f\n", $i + 1, $sum / 30);
}

/*

01: 0.00015
02: 0.00013
03: 0.00014
04: 0.00016
05: 0.00020
06: 0.00016
07: 0.00013
08: 0.00014
09: 0.00015
10: 0.00015
11: 0.00013
12: 0.00015
13: 0.00015
14: 0.00016
15: 0.00020
16: 0.00018
17: 0.00015
18: 0.00014
19: 0.00017
20: 0.00013
21: 0.00013
22: 0.08747
23: 0.08111
24: 0.08496
25: 0.08421

*/
```

ダミーデータを (あり得る文字を使って) **22バイト**用意しておけばいい感じに一律になりそうですね．

```php
<?php

$username = 'ユーザ名';
$password = 'パスワード';

$hashes = [
    'mpyw' => '$2y$10$p3v4KlSFqx11/84YF2xTJu4h5hQKhwsH5/X5bqoVgkY./.vFxf3HS',
];
$result = password_verify(
    $password,
    isset($hashes[$username])
        ? $hashes[$username]
        : '$2y$10$abcdefghijklmnopqrstuv'
);
```
gitをソースコードからインストールする

CentOC6系だとyumからインストールできるgitのバージョンが1.7...

既に最新は2.7とかなり離れているのでいろいろ使えないオプションがあったり。。。。

ということでソースからインストール

下記からソースを取得

[https://www.kernel.org/pub/software/scm/git/](https://www.kernel.org/pub/software/scm/git/)

```
wget https://www.kernel.org/pub/software/scm/git/git-2.7.4.tar.gz
cd git-2.7.4
./configure
make
```

エラーが出ました

```
/usr/bin/perl Makefile.PL PREFIX='/usr/local' INSTALL_BASE='' --localedir='/usr/local/share/locale'
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
make[1]: *** [perl.mak] Error 2
make: *** [perl/perl.mak] Error 2
```

perlモジュールが無いようなのでインストールします

```
yum install perl-ExtUtils-MakeMaker
```
再度make

```
/bin/sh: msgfmt: command not found
make: *** [po/build/locale/bg/LC_MESSAGES/git.mo] Error 127
```

またもエラー、今度はgettextというパッケージ

```
yum install gettext
```

今度は無事インストールできました

```
make
make install
```

これでOK
「Scala 関数型デザイン＆プログラミング」第2章の解答用紙

「Scala 関数型デザイン＆プログラミング ―Scalazコントリビューターによる関数型徹底ガイド」（原書：Functional Programming in Scala）の第2章「Scala 関数型プログラミングの準備」の練習問題を解くときに使える解答用紙。IntelliJ IDEA の Scala Worksheet に貼り付けて使ってね。正しく関数を実装すれば関数を呼び出している行の結果が true になるはず。

# 第2章「Scala 関数型プログラミングの準備」の解答用紙

```scala:02_GettingStarted.sc
"Exercise 1"

def fib(n: Int): Int = ???

fib(0) == 0
fib(1) == 1
fib(2) == 1
fib(3) == 2
fib(4) == 3
fib(5) == 5

"Exercise 2"

def isSorted[A](as: Array[A], ordered: (A, A) => Boolean): Boolean = ???

isSorted(Array(1, 2, 3), (n: Int, m: Int) => n < m)
!isSorted(Array(1, 3, 2), (n: Int, m: Int) => n < m)

"Exercise 3"

def curry[A, B, C](f: (A, B) => C): A => B => C = ???

curry((n: Int, m: Int) => n < m)(1)(2)
!curry((n: Int, m: Int) => n < m)(3)(2)

"Exercise 4"

def uncurry[A, B, C](f: A => B => C): (A, B) => C = ???

uncurry(curry((n: Int, m: Int) => n < m))(1, 2)
!uncurry(curry((n: Int, m: Int) => n < m))(3, 2)

"Exercise 5"

def compose[A, B, C](f: B => C, g: A => B): A => C = ???

val double = (n: Int) => n * 2
val quadruple = compose(double, double)
quadruple(1) == 4
quadruple(2) == 8
quadruple(3) == 12
```

# 関連記事

[「Scala 関数型デザイン＆プログラミング」の練習問題を解くための開発環境の構築（IntelliJ IDEA 編）](http://qiita.com/takuya0301/items/679bc5d2c47bac5ca860)
[iOS]次の◯曜日を取得。の最も簡単なコード

##NSCalendar<br> - nextDateAfterDate:matchingUnit:value:options: ##

``` swift:サンプルコード
let mondayNumber = 2
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)

//これ！
let nextDate = calendar?.nextDateAfterDate(NSDate(), matchingUnit: NSCalendarUnit.Weekday, value: mondayNumber, options: NSCalendarOptions.MatchNextTime)

let todaysComponents = calendar?.components([.Month, .Day, .Weekday], fromDate: NSDate())
let nextDateComponents = calendar!.components([.Month, .Day, .Weekday], fromDate: nextDate!)
print("[today]","Month:",todaysComponents?.month, "Day:",todaysComponents?.day,"Weekday:",calendar?.weekdaySymbols[(todaysComponents?.weekday)! - 1])
print("[nextDate]","Month:", nextDateComponents.month, "Day:", nextDateComponents.day,"Weekday:", calendar?.weekdaySymbols[(nextDateComponents.weekday) - 1]) 
```

```swift:結果
[today] Month: Optional(3) Day: Optional(31) Weekday: Optional("Thu")
[nextDate] Month: 4 Day: 4 Weekday: Optional("Mon") 
```

#引数#

<dl>
  <dt> nextDateAfterDate(date: NSDate </dt>
  <dd> "どの日基準で◯曜日か"の指定。サンプルはNSDate()で今日基準</dd><br>
  <dt> matchingUnit: NSCalendarUnit </dt>
  <dd>何の要素で探すかという値。.Weekdayで曜日を指定</dd><br>
  <dt>value: Int</dt>
  <dd>検索数値。曜日の場合、日曜日1,月曜日2...土曜日:7となる。サンプルは月曜で検索
 </dd><br>
<dt>options: NSCalendarOptions </dt>
<dd>検索オプション。次の〇〇の場合は、.MatchNextTimeを使う </dd>
</dl>

***
ネットの記事を見回っているとNSDateComponentsをいじくって日付を操作して...。というコードばっかり見かけるのですが、このコードを使えば、スッキリして簡単になります。

指摘などあればお願いします。

#参考記事#
[iOS8からの日付(NSDate)操作・比較](http://qiita.com/_mpon/items/c5b9573b4250f9a1d567)
> 謎のAPI

>APIのドキュメントも読んだんですがなんとなく使い道がイメージできなかったやつたちです。
>使い方も理解するのに時間がかかった。
>その1: nextDateAfterDate

>次のマッチする日付を探索します。
>例えば、次の13日はいつ？というのを調べます。
>calendar.nextDateAfterDate(NSDate(), matchingUnit: .DayCalendarUnit, value: 13, >options: NSCalendarOptions.MatchNextTime)

>// 今日が12/11だとしたら、12/13がかえってきます。
>// 今日が12/14だとしたら、1/13がかえってきます。
>うーん何かに使えるのかな。あと、NSCalendarOptionsの詳しい説明がリファレンスに書いてなくて各>値が何を表すのかが分からないです。。カレンダーを探索するときに使えそうな雰囲気ではあるんだが。
WebAPIをRSpecでテストする（削除API）

今回はWebAPIの削除機能テストコードを書きます。
#RSpecでテストするAPI
今日は5番のAPIをテストします。

|NO|Method|URL|
|-----------:|:-----------|:------------|
|1|GET|http://example.com/select/|
|2|GET|http://example.com/select/id|
|3|POST|http://example.com/create/|
|4|PUT|http://example.com/update/id|
|5|DELETE|http://example.com/delete/id|


#本テスト関連の過去投稿
[**WebAPIをRSpecでテストする（準備+参照API）**](http://qiita.com/kaikusakari/items/450cde4940c3652659db)
[**WebAPIをRSpecでテストする（登録API）**]
(http://qiita.com/kaikusakari/items/43282c6882d7b8059df8)
[**WebAPIをRSpecでテストする（更新API）**]
(http://qiita.com/kaikusakari/items/b6e6fdebea5e6975bce0)

#テストコーディングと実施
今回テストするAPIは以下

**テストするAPI**
DELETE http://example.co.jp/update/id
すでにDBにデータが登録してあり、DBのデータを削除してステータスコードのみ返す。

```rb:/home/ruby/app/controllers/user_controller.rb
  def delete
    user  = User.find_by("id = ?",params[:num])
    if user.nil?
      render json: '{}' , status: 404
    else
      if user.destroy
        render json: '{}',status: :ok
      else
        render json: '{}',status: :ng
      end
    end
  end
```

**テスト対象のAPIがデータ更新するテーブル構成**

```mysql
MariaDB [app]> desc users;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| name            | varchar(255) | YES  |     | NULL    |                |
| auth            | varchar(255) | YES  |     | NULL    |                |
| password_digest | varchar(255) | NO   |     | NULL    |                |
| mail            | varchar(255) | YES  |     | NULL    |                |
| created_at      | datetime     | NO   |     | NULL    |                |
| updated_at      | datetime     | NO   |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+
10 rows in set (0.00 sec)
```

#テストコード
削除APIをテストするコードを書く

**ファクトリに削除APIで削除するデータを用意する**
今回は、初回の参照APIテストで利用したユーザと、削除時のパラメータ受け渡し用のファクトリを作成する。

```rb:/opt/app/spec/factories/user.rb
FactoryGirl.define do
  factory :Venus, class: User do
    name     "Venus"
    auth     "1234"
    password "kinsei"
    email    "kai.kuskari@gmail.com"
  end
  factory :Saturn, class: User do
  end
end
```

**テストコードに削除APIのテストを書く**

```rb:/home/app/spec/controllers/user_controller_spec.rb
require 'rails_helper'

  describe 'DELETE delete' do
    before do
      @user = FactoryGirl.create(:Venus)
      delete "delete"
    end
    it "delete delete" do
      request_headers = {
        "HTTP_ACCEPT"  => "application/json",
        "CONTENT_TYPE" => "application/json",
        "DATA_TYPE"    => "json"
      }
      @params[:num] = @user.id.to_s
      expect {
        delete "delete", @params , request_headers
      }.to change { User.count }.by(1)
      expect(response).to be_success
    end
  end
```

**テスト実行**

```sh
$ rake spec
Finished in 0.13091 seconds (files took 1.67 seconds to load)
6 examples, 0 failures, 1 pending
```
matplotlibの日本語文字化け対応

プロットしたグラフのタイトルやラベルに日本語が混ざっていると文字化けしてしまう。これはmatploblitが日本語フォントを持っていないことが理由。日本語フォントを指定してやる事で解決可能。

本目的の為に実施した内容を以下にまとめる。
環境は以下の通り：
-　VirtualBox上のxubuntu15.10
-　pythonはpyenvでインストール
-　Anacondaを利用
-　フォントはSystemで使っているRictyを流用する

pyenvでAnacondaをインストールした場合はmatplotlibrcの雛形は以下のディレクトリに置かれている。

`$ ~/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/maplobli/mpl-data/matplotlibrc`

これを以下ディレクトリにコピーする

`$ ~/.config/matplotlib`

このディレクトリにコピーしたmatplotlibrc内を以下のように編集してRictyを使用する事にした。Rictyはsystemフォントが気に食わなくて、以前自分でインストールしたもの。

```:matplotlibrc
font.family     : ricty 
```

Rictyは
`$ /usr/local/share/fonts`
にインストールしていたが、これをそのままコピーするとディスクスペースの浪費となってしまうので、シンボリックリンクで対応することにした。
matplotlibで使用するフォントは以下のディレクトリに集められている必要がある。
`$ ~/.pyenv/versions/anaconda3-2.5.0/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf`

ここに以下のようにシンボリックリンクを作成

```shell-session:作業手順
$ cd ~/.pyenv/versions/anaconda/3-2.5.0/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf
$ ln -s /usr/local/share/fonts/Ricty-Regular.ttf Ricty-Regular.ttf
$ ln -s /usr/local/share/fonts/Ricty-Bold.ttf Ricty-Bold.ttf
$ ln -s /usr/local/share/fonts/RictyDiscord-Regular.ttf RictyDiscord-Regular.ttf
$ ln -s /usr/local/share/fonts/RictyDiscord-Bold.ttf RictyDiscord-Bold.ttf
```
これでグラフ中で日本語が使えるようになる。



![good.PNG](https://qiita-image-store.s3.amazonaws.com/0/105711/a1f0d681-1654-aea8-ee8f-c44da6586e97.png)
メニューの頭に矢印を付ける -フッター用メニューを作る2-


[前回](http://qiita.com/NeGI1009/items/6f116a6197d107026243)の続き。

## メニューの頭に矢印

＞のような矢印をCSSで書いてメニューの頭に付ける。
作り方の流れとしては

1. border-top, border-rightで線を書く
1. translateのrotationで45度傾ける

cssのコードは以下のとおり。

```css:矢印
a:before {
     margin-right: 1em;
     content: "";
     display: inline-block;
     position: relative;
     border-top: solid 1px #000;
     border-right: solid 1px #000;
     width: 0.8em;
     height: 0.8em;
     transform: rotate(45deg);
}
```

widthとheightは0.8emとして高さが文字のサイズと同じにした。
45度傾けると高さが横幅の$\sqrt{2}$になる。
0.8を$\sqrt{2}$すると1になるため高さが1emになる。

## 完成

その他デザインを整えて[完成](http://tetsuyanegishi.github.io/Warehouse/footer_menu/index2.html)。
便利だったのが奇数番目要素を指定する擬似クラスnth-chile(odd)。
oddをevenに変えると偶数番目を指定できる。

```html:完成
<!DOCTYPE html>
<html>
    <head>
	<style type="text/css">
	 * {
	     margin: 0;
	     padding: 0;
	 }
	 ul {
	     margin: 10px 0;
	     list-style: none;
	     border-top: double 3px #000;
	 }
	 ul:after {
	     content: "";
	     display: block;
	     clear: both;
	 }
	 li {
	     float: left;
	     width: 50%;
	     border-bottom: solid 1px #000;
	     box-sizing: border-box;
	 }
	 li:nth-child(odd) {
	     border-right: solid 1px #000;
	 }
	 a {
	     display: block;
	     width: 100%;
	     text-align: center;
	     text-decoration: none;
	     color: #000;
	 }
	 a:before {
	     margin-right: 1em;
	     content: "";
	     display: inline-block;
	     position: relative;
	     border-top: solid 1px #000;
	     border-right: solid 1px #000;
	     width: 0.8em;
	     height: 0.8em;
	     transform: rotate(45deg);
	 }
	</style>
    </head>
    <body>
	<ul>
	    <li><a href="#">メニュー1</a></li>
	    <li><a href="#">メニュー2</a></li>
	    <li><a href="#">メニュー3</a></li>
	    <li><a href="#">メニュー4</a></li>
	    <li><a href="#">メニュー5</a></li>
	    <li><a href="#">メニュー6</a></li>
	</ul>
    </body>
</html>
```
[Node]画像をバイナリデータで取得する時にはまった

#画像をバイナリデータで取得する時にはまった
`request`を使って画像を取得、ヘッダーから画像フォーマットの情報を取得しようとした際にハマったので共有。

```js:JavaScript
const request = require('request');

request.get(IMAGE_URL, function(error, response, body) {
  var buffer = new Buffer.from(body);
  console.log(buffer);
});
```

これで取得できると思ったが以下のようになった。
<img width="980" alt="スクリーンショット 2016-03-31 0.48.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/74405/fa46f8af-e953-9ccc-67fb-37f4e671a633.png">
上が正しい画像データで、下がコードの実行結果。
内容が違う...(jpgなので`FF D8`からはじまるはず)

#解決方法
<a href="https://www.npmjs.com/package/request">request - npm</a>に書いてありました。
> encoding - encoding to be used on setEncoding of response data. If null, the body is returned as a Buffer. Anything else (including the default value of undefined) will be passed as the encoding parameter to toString() (meaning this is effectively utf8 by default). (Note: if you expect binary data, you should set encoding: null.)

つまりバイナリデータを期待する場合は`encoding`を`null`にセットしなければならない

それを考慮すると....

```js:JavaScript
const request = require('request');

request.get(IMAGE_URL, {encoding: null},function(error, response, body) {
  var buffer = new Buffer.from(body);
  console.log(buffer);
});
```

実行して上下同じ結果になったので成功です。
<img width="983" alt="スクリーンショット 2016-03-31 1.16.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/74405/471b5c5f-fc03-8b6f-d858-4f9d3c0a9a91.png">
スンドコ by Javascript

# ついに来たズンドコキヨシブーム
毎週メールが来る "先週ストックが多かった投稿ベスト20" を見ていたら、
[ズンドコキヨシまとめ](http://qiita.us5.list-manage1.com/track/click?u=e220ac811523723b60d055c87&id=7e342ae658&e=729830e8d9)
というめっちゃ気になる謎のタイトルがありました

twitter で話題になっていたらしく、
> 「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了

ということらしいです
FizzBuzz のズンドコキヨシ版みたいな感じですね
※ズンドコキヨシ版て何だよ

そんなズンドコキヨシが意味わからないくらいたくさんの言語で実装されています


# javascript でズンドコキヨシ

試しにやってみようと思い javascript で書いてみました
あんまり特徴はありませんが、クロージャで定義したところと、再帰で表現してるところがポイントです

ブラウザでも node.js でも動きます

```js
// ズンドコ定義
var zundoko = function(){
    var word = ['ズン', 'ドコ'];
    
    function play(n){
        n &= 31; 
        if(n === 1){
            console.log('キ・ヨ・シ！');
        }else{
            var rand = +(Math.random()<0.5);
            console.log(word[rand])
            play(n*2 + rand);
        }
    };

    return play(31);
};

// ズンドコ実行
zundoko();
```

# 解説
処理内容を要約すると、"ズン"、"ドコ"の文字をそれぞれビット符号化し、
0 → ズン、 1 → ドコ
として扱います

直前の5回分が
00001 → ズンズンズンズンドコ
となったら、"キ・ヨ・シ！" を表示して終了します

最低でも5周はさせる必要があるので、
play の初期値は 31 (つまり 11111) としています
※補足
どんなパターンでも5周するまで 00001 と一致しなければいいので、下位5ビットを最上位ビットを反転させた値にすればいいと考えました
これは十分条件なので他にも条件を満たす値はあります

ビット演算の部分は
[jsでズンドコキヨシのコードゴルフ(87byte)](http://qiita.com/kikurage/items/8535e757a0cb133571d7)
を参考にさせていただきました
これはすごすぎます

上記の記事でほとんど解説されているので特筆するところはほとんどありませんが、
31 は2進数で 11111 なので、それとの論理積を取ることで末尾の5ビットだけ抜き出せるわけですね

他には、以下の部分では論理値から数値に変換してます

```js
+(Math.random()<0.5);
```

黒魔術感がハンパないですね・・・！
「Scala 関数型デザイン＆プログラミング」の練習問題を解くための開発環境の構築（IntelliJ IDEA 編）

「Scala 関数型デザイン＆プログラミング ―Scalazコントリビューターによる関数型徹底ガイド」（原書：Functional Programming in Scala）の練習問題を IntelliJ IDEA 上で解くための開発環境の構築手順をメモっとく。

なお、ターミナルで練習問題を解く場合は[「Scala 関数型デザイン＆プログラミング」の練習問題を解くための開発環境の構築](http://qiita.com/takuya0301/items/bbcef24a87d938195953)を見てね。

# OS X での開発環境の構築手順

## 初期設定

サンプルコードを Git リポジトリからクローンする。Scala のビルドツール sbt が一緒に入ってるので、sbt に実行権限を付与する。IntelliJ IDEA 用のプロジェクトを生成するための sbt プラグインを追加する。IntelliJ IDEA 用のプロジェクトを生成する。

```
$ git clone https://github.com/fpinscala/fpinscala.git
$ cd fpinscala
$ chmod a+x ./sbt
$ cat > project/plugins.sbt << EOS
> addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
> EOS
$ ./sbt gen-idea
```

## 動作確認

IntelliJ IDEA でプロジェクトを開く。exercises ディレクトリを右クリックして Compile Module 'exercises' を実行する。exercises ディレクトリに worksheets ディレクトリを作成する。worksheets ディレクトリに 02_GettingStarted.sc というような名前で Scala Worksheet を作成する。

![Screen Shot 2016-03-31 at 01.14.17.png](https://qiita-image-store.s3.amazonaws.com/0/67627/f50fb58d-001a-2581-bb12-02414c35c0f2.png)

# 練習問題の解答手順

作成した Worksheet に練習問題の解答になる関数定義とその関数呼び出しを書く。右側に出力される結果を確認する。

練習問題を解くときは answerkey ディレクトリのヒントファイルを参考にする。また、練習問題を解き終わったら answerkey ディレクトリの解答ファイルを読むと効率的な書き方がわかるのでオススメ。

ヒントファイルの段落には改行が入ってないので、Preferences > Editor > General > Soft Wraps > Use soft wraps in editor を有効にしておくと少し読みやすくなる。

# 関連記事

[「Scala 関数型デザイン＆プログラミング」の練習問題を解くための開発環境の構築](http://qiita.com/takuya0301/items/bbcef24a87d938195953)

# 参考文献

http://www.slideshare.net/Satully/fpinscala-2
XCPlaygroundを試してみる


数値をちょっと変えてみたい時とかにいいですね

![スクリーンショット 2016-03-31 00.22.21.png](https://qiita-image-store.s3.amazonaws.com/0/40693/86f5a84c-6b97-3fae-02db-fc4f6adefeba.png "スクリーンショット 2016-03-31 00.22.21.png")


```
import UIKit
import XCPlayground

let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 200, height: 200))
XCPlaygroundPage.currentPage.liveView = view


class customLayer : CAShapeLayer {
    
    override init() {
        super.init()
    }
    
    override init(layer: AnyObject) {
        if let layer = layer as? customLayer {
        }
        super.init(layer: layer)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func drawInContext(ctx: CGContext) {
        //背景
        let c = UIColor.whiteColor()
        CGContextSetFillColorWithColor(ctx, c.CGColor)
        CGContextAddRect(ctx, self.bounds)
        CGContextDrawPath(ctx, .Fill)
        

        for(var i : CGFloat = 0;i<360;i+=1){
            let cc = UIColor(hue: i/360, saturation: 1.0, brightness: 1.0, alpha: 1.0)
            CGContextMoveToPoint(ctx, 100, 100)
            let sa : CGFloat = i * CGFloat(M_PI/180)
            let ea : CGFloat = ((i + 1) * CGFloat(M_PI/180))
            
            CGContextAddArc(ctx, 100, 100, 100, sa, ea, 0)
            CGContextClosePath(ctx)
            CGContextSetFillColorWithColor(ctx, cc.CGColor)
            CGContextDrawPath(ctx, .Fill)

        }
    }
}


let c = customLayer()
c.frame = view.frame
view.backgroundColor = UIColor.blueColor()
view.layer.addSublayer(c)
c.setNeedsDisplay()

```

######参考

[UIBezierPath with color gradient](http://stackoverflow.com/questions/32117722/uibezierpath-with-color-gradient)

[XcodeのPlaygroundをつかってUIの実装をサクサク試す](http://himaratsu.hatenablog.com/entry/playground)
rspec-json_matcherでJSONの検証を自由自在に行う

概要
----

RSpecを用いてJSONの検証をする際に使える [rspec-json_matcher](https://github.com/r7kamura/rspec-json_matcher) の隠された(?)能力を紹介しましょう

rspec-json\_matcherとは
----------------------

```rb
expect('{"a": "b", "c": "d" }').to be_json_as("a" => "b", "c" => "d")
```

このように、JSON文字列を直接検証できます

でも、こんな時どうする？
--------------------

下記のような２つのJSONがあったとき、*root* の配列の順序を気にすること無く、内包している値のみに注目して検証するにはどうしたらいいでしょうか？

```json
{
  "root": [
    {"a": 1},
    {"b": 2}
  ]
}
```

```json
{
  "root": [
    {"b": 2},
    {"a": 1}
  ]
}
```

ちなみに、これでは2番目で失敗します (配列内の順番も検証してしまうため)

```rb
let(:spec) { {"root" => [{"a" => 1}, {"b" => 2}]} }
expect('{"root":[{"a":1},{"b":2}]}').to be_json_as(spec)
#=> pass
expect('{"root":[{"b":2},{"a":1}]}').to be_json_as(spec)
#=> fail
```

解決策
-----

rspec-json\_matcherは、RSpecのmatcherをそのまま書くことができます
今回の例では [contain_exactly](https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/contain-exactly-matcher) を使うのが良さそうです

```rb
let(:spec) { {"root" => contain_exactly({"a" => 1}, {"b" => 2})} }
expect('{"root":[{"a":1},{"b":2}]}').to be_json_as(spec)
#=> pass
expect('{"root":[{"b":2},{"a":1}]}').to be_json_as(spec)
#=> pass
```

 またはマッチャ合成機能(and/or)とincludeを組み合わせても同じことが実現できます

```rb
let(:spec) { {"root" => include({"a" => 1}).and include({"b" => 2})} }
expect('{"root":[{"a":1},{"b":2}]}').to be_json_as(spec)
#=> pass
expect('{"root":[{"b":2},{"a":1}]}').to be_json_as(spec)
#=> pass
```

解説
----

[rspec-json\_matcherの例](https://github.com/r7kamura/rspec-json_matcher#example)にも書いてあるとおり、値の部分には true/falseだけでなく、StringやHashといったオブジェクトタイプの他、正規表現も書くことができます

これの応用です。すなわち値に書かれた内容はそのままRSpecのmatcherとして評価されることを利用しています

これが分かっていれば、自由自在にJSON検証が可能です

### 注意 ###

残念なことに、キーの方には適用(評価)できません

```rb
expect('{"root":[{"a":1},{"b":2}]}').to be_json_as( {start_with("r") => Array} )
#=> fail
#||        reason: [
#||            [0] "root",
#||            [1] "#<RSpec::Matchers::BuiltIn::StartWith:0x0055e05b3cc0d0>"
#||         ]
```

検証コード
--------

RSpec 3.4.0

```rb:Gemfile
source "https://rubygems.org"
gem "rspec", require: "rspec/core"
gem "rspec-json_matcher", require: "rspec/json_matcher"
gem "rake"
```

```rb:spec/spec_helper.rb 
require "bundler"
Bundler.require
RSpec.configuration.include RSpec::JsonMatcher
```

```rb:spec/json_spec.rb 
describe "json" do
  let(:spec) {
    {"root" => contain_exactly({"a" => 1}, {"b" => 2})}
  }

  it "order is a to b" do
    expect('{"root":[{"a":1},{"b":2}]}').to be_json_as(spec)
  end

  it "order is b to a" do
    expect('{"root":[{"b":2},{"a":1}]}').to be_json_as(spec)
  end
end
```

実行結果

```console
$ bundle exec rspec --format d

json
  order is a to b
  order is b to a

Finished in 0.00201 seconds (files took 0.09972 seconds to load)
2 examples, 0 failures
```

参考資料
-------

* [GitHub: r7kamura/rspec-json_matcher](https://github.com/r7kamura/rspec-json_matcher)
* [Qiita: RspecでJsonをテストするMatcher](http://qiita.com/yuutetu/items/efa698d523e3089a40bd)
* [Qiita: 今日から使える！RSpec 3で追加された8つの新機能](http://qiita.com/jnchito/items/a4a51852c2c678b57868)

あとがき
-------

REST API開発が捗ります
ってか、APIのチェックの為だけにRSpec使っても良いくらいです (=> [やってました](http://techlife.cookpad.com/entry/2014/11/19/151557))
RubyMineのメモリ割り当てを増やす

アクティビティモニタでRubyMineをみたら、結構メモリを消費していることがわかりました。私が利用していたアプリケーションの中でPhotoshopの次に多くてびっくり。

<img width="252" alt="スクリーンショット 2016-03-30 23.59.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/59560/4421780a-2792-7f30-00c2-da07d98178f2.png">

そこで、メモリ割り当てを増やす設定をします。`/Applications/RubyMine.app/Contents/bin/rubymine.vmoption` のファイルの内容を下記のように数値を変更するだけ。PCのメモリスペックも上がってきているのでそれに合わせてカスタマイズしましょー。

```rubymine.vmoption
-Xms1024m
-Xmx2048m
-XX:MaxPermSize=356m
-XX:+UseCompressedOops
```
UPS オムロン BN50T with Mac Pro (El Capitan) の設定でつまづいた

停電などでブツッとPCが落ちるのを防ぐUPS（無停電電源装置）。とても便利。
今回はオムロンのBN50Tの設定をしていたのですが、つまづいたのでメモ。

### 環境

- Mac Pro
    - OS: El Capitan
    - UPS監視ソフト: PowerAct Pro ver. 4.7 (Master Agent)
- EN50T （オムロン）

## 何が起きたか
UPSの状況を監視するステータスバー常駐アプリ MasterAgent が自動起動しなかった。

MacとUPSを接続すると、ステータスアイコンが接続状態になるはずが、そうはならず、
接続監視エージェントが常に停止している状態。バツが表示されてる。
[ エージェント起動 ] 押しても起動しない。
インストーラーは正常終了しており、表面的にはエラーがわからない。

## 解決法
El Capitan の SIP を切ってから、ソフトウェアをインストールする。

リカバリーモードで起動（起動時に command + R）し、[ユーティリティー] > [ターミナル] から

    $ csrutil disable

を実行し、再起動。
起動したらインストーラーを実行。すると正常に動作します。


## 以下ダラダラと

おそらくインストーラーが深いところに実行ファイルを置こうとしたら、
SIPに阻まれ、自動起動するはずのソフトが起動しなかった感じかな。

アプリケーションの説明部分に明記されている対応OSは 10.10 までだから、まあ仕方ないんだけど、
おそらくインストール中、内部的にはエラーが返ってきてるはずだし、アラート出して欲しいな〜。

（気づく経緯など後で書く）
hapijsのcors設定

前回hapijsで画像生成サーバをたてました。
となると次はajaxでデータのやり取りができるようにしたいところです。
CORSの設定が必要になるのでやってみました。

## hapijsの設定

設定は簡単で `connection` の呼び出しのときに `routes.cors` のしたに設定します。

* origin : 許可するアクセス元のリスト
* maxAge : preflightリクエストの有効期間
* headers: 許可するカスタムタグのリスト

```js
server.connection({
	port: process.env.PORT || 3000,
	routes:{
		cors:{
			origin:["https://desolate-cove-15227.herokuapp.com"],
			maxAge: 10,
			headers:["x-api-key"]
		}
	}
});
```

次にRouteの設定ですが `headers` のvalidationは少し工夫が必要で `Joi.object` を使って設定します
そのまま渡すとValidationが通らなくなるので `.options({ allowUnknown: true }) が必要です。
詳しくは[本家のissue](https://github.com/hapijs/hapi/issues/2407)を参照してください

```js
validate: {
	params: {
		id: Joi.string()
			.regex(/^[a-zA-Z0-9]{3,20}$/)
			.default("test"),
	},
	headers: Joi.object().keys({
		"x-api-key": Joi.number().integer()
			.min(-1000).max(1000)
			.default(0)
	}).options({ allowUnknown: true })
}
```

これでアクセスする準備ができました。
実際に別ドメインからアクセスしてみたのが[こちらになります](https://desolate-cove-15227.herokuapp.com/)
imgタグにアドレスを直接書き込む場合と、CORSのテストのためdataURLで取得する場合を試してます。

これでAPIサーバとしても使えるようになりました。

### 所感

hapijsの特徴を考えてみると `Joi` と `Hoek` です。
`Joi` はhapijs全体に型のような機能を提供し設定とレスポンスを `Joi` を通して使っています。
`Hoek` はObjectの取り扱いを補助するものでマージ、比較、平坦化などの操作を容易にしてくれます。
hapijsはサーバの機能をJoiで定義。ユーザーはhoekで必要な範囲を拡張して使う、意図しない動作が少ないサーバを作ることできます。
そのあたりexpressはずっと自由度の高く気軽に使える分、気を使わないと脆弱性を作り込みやすいので注意が必要ですね。
機能を提供するのはhapiで、静的なものはexpressをと使い分けると使い勝手が良さそうです。
Genymotionでエミュレータを起動してもデバイス一覧に表示されない場合の対処方法

# Genymotionでのadb

Genymotionは高速なAndroidエミュレータで、この頃かなり人気がある。実際に開発に使っているが、いろんな点で公式エミュレータよりも使いやすい場合が多い。

このGenymotionを使用していると（特に最近インストールした場合）、下記のようなエラーが出る場合がある

```
adb server version (32) doesn't match this client (35); killing...
error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 通常、各ソケット アドレスに対してプロトコル、ネ 
```

この場合、Genymotion同梱のadbとAndroid SDK内のSDKバージョンが一致してないのが問題なので、Genymotionインストール先配下にある（Windowsであれば"C:\Program Files\Genymobile\Genymotion\tools"）adbコマンドを削除し、${ANDROID_HOME}/platform-tools配下にあるadbコマンドをコピペすれば接続できる。
Excel-DNAからの多元配列の戻り値の取得について


[Excel-DNA](http://excel-dna.net/)側で関数を

```csharp
public static object[,] DNA関数名(引数) { .. }
```
のように戻り値をobjectの多元配列とした場合のVBA側での受け方。

# VBAでの記述

```vbnet
    Dim val As Variant
    val = Application.Run("DNA関数名", 引数)
```

のようにVariant型で受け、次元数を見て処理を分岐させる。

```vbnet
    d = Dimension(val)
    '0: 引数なし
    '1: n x 1配列 val(i)
    '2: n x m配列 val(i, 1), val(j, 2)
    '添え字の最少最大はLBound, UBoundで取得
```

Variant型の次元数は

```vbnet
' Variant配列の次元数を取得
Function Dimension(val As Variant) As Integer
    Dim TempData As Variant
    Dim i As Long

    On Error Resume Next
    Do While Err.Number = 0
        i = i + 1
        TempData = UBound(val, i)
    Loop
    On Error GoTo 0

    Dimension = i - 1
End Function
```

で取得できる。
Android Studioのエミュレータ起動時に、Segmentation faultが発生する

# 環境

- OS -  OS X EI Caption
- Android Studio - 2.0 Beta 7
- Java -  1.8.0_20, x86_64:	"Java SE 8"

# Problem

ターミナルからemulatorを起動しようとすると、Segmentation faultが発生する。

```
$ /Users/hoge/Library/Android/sdk/tools/emulator -netdelay none -netspeed full -avd Nexus_4_API_21
Segmentation fault: 11
```

# Solution

同じコマンドをsudoで実行したところ、起動した。



```
# avdの一覧を取得
$ emulator -list-avds
Nexus_4_API_21
Nexus_5_API_21_x86
Nexus_6_API_21
Nexus_6_API_22
Nexus_6_API_23
Nexus_9_API_21
Nexus_S_API_23

# エミュレータ起動
$ sudo /Users/hoge/Library/Android/sdk/tools/emulator -netdelay none -netspeed full -avd Nexus_4_API_21
Password:
emulator: WARNING: Classic qemu does not support SMP. The hw.cpu.ncore option from your config file is ignored.
Creating filesystem with parameters:
    Size: 69206016
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 4224
    Inode size: 256
    Journal blocks: 1024
    Label: 
    Blocks: 16896
    Block groups: 1
    Reserved block group size: 7
Created filesystem with 11/4224 inodes and 1302/16896 blocks
HAXM is working and emulator runs in fast virt mode
...
```

# 参考

- [OSX Segmentation Fault 11 - Android](http://stackoverflow.com/questions/10122464/osx-segmentation-fault-11-android)
Power 8 on SoftLayer触ってみました。

SoftLayer上に新しいランアップが加わりました。今までのインテルＣＰＵに加えPower 8 CPUが選択できるようになりました。元インテルの私としては昔の競合製品なのでなんとなくわくわくしてしまいました。
![power2.jpg](https://qiita-image-store.s3.amazonaws.com/0/59741/10eef19f-9c6b-097e-a2c0-dbcf65306cdf.jpeg)
今回少しの時間ですが試せたのでブログを書きました。
ログイン画面ほとんどIntel Ubuntuと代りませんがPowerの文字が
![power3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59741/4aa22d24-8d9f-10e8-6f5b-cb092b5361f6.jpeg)

CPUの情報を見てみましょう。/proc/cpuinfo で
![cpuinfo3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59741/6b1b4686-1199-e193-b3c5-ca813de09699.jpeg)

CPUの情報がずらっと出てきます。０～６３で６４個出てきました。今回使っているのは１ソケットのシステム、コア数は８です。SMT(Simultaneous Multithreading)は８なので全部で６４個ＣＰＵがあるように見えるのですね。
https://ja.wikipedia.org/wiki/%E5%90%8C%E6%99%82%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0

今度はlscpuでも見てみます。
![lscpu3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59741/21b2c3f8-f61f-9f87-f03d-db3ad4d50722.jpeg)

Power 8 CPUは３次キャッシュまであるんですね。Ｌ１キャッシュは命令とデータが分かれている。ハーバードアーキテクチャーというのでしょうか？
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%BC%E3%83%90%E3%83%BC%E3%83%89%E3%83%BB%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3

ちなみにマザーボードの情報も見れますね。これのようです。(Habanero)
http://www.tyan.com/solutions/tyan_openpower_system.html

さて早くも時間がなくなってしまったので何か計算を。手元にパイの計算をするＣのプログラムがあったのでやってみました。
---------------------------------------------------

```c
int main(int argc, char* argv[])
{
        int i;
	double start_time, stop_time;
	double x, pi, sum=0.0;

	step = 1./(double)num_steps;
	start_time = clock();

	for (i=0; i<num_steps; i++)
	{
		x = (i + .5)*step;
		sum = sum + 4.0/(1.+ x*x);
	}
	pi = sum*step;
	stop_time = clock();

	printf("The value of PI is %10.7f\n",pi);
	printf("The time to calculate PI was %lf seconds\n",((double)(stop_time - start_time)/CLOCKS_PER_SEC));

	return 0;
}
```

----------------------------------------------------------------
10億桁のパイの値を求める計算です。約１０秒かかりました。
これだけではいいのかどうかわからないのでインテルCPUでもやってみました。ちょうど同じぐらいのシステムがすぐに使えるのがなかったので48 CPU (12コアx2 (HT) x 2(ソケット)と少し小さめでした。（メモリー容量は同じ）結果は約１８秒。しかしCPUの数の比から見るとPower 8 CPUの性能の高さがわかりますね。ちなみに周波数はどちらも２ＧＨｚ
RDBに長けてるセンパイに教えてもらった、テーブル設計の金言集

データベース（特にRDB）に長けてるセンパイに教えてもらった、
テーブル設計するときに心がけるべきことのメモです。

# 1. 全てのテーブルには目的がある
全てのテーブルには目的があります（当然ながら）。
例えばテーブルAはデータの実体を表すとか、テーブルBはXX画面の表示用とかとか。

自分で一から設計するときはあまり意識しなくても大丈夫ですが、
他人が作ったテーブルを変更するときは、
そのテーブルがどういった目的で作られたのかちゃんと理解するようにしましょう。

そのテーブルの目的に沿わない変更はしない方が、
結局見通しの良さやパフォーマンスの観点から良いことが多いです。

# 2. プログラムでマイグレーションする必要があるなら、まずテーブル設計を疑え
バージョンアップの際、テーブルレイアウトの変更やデータマイグレーションが必要な場合があります。
このときSQLを流すだけでマイグレーションが済めばよいですが、
SQLだと煩雑になりすぎるからプログラムを書いてマイグレーションしたいときがあります。

でもちょっと待ってください。
もしかするとそれは、テーブル設計がやたらと複雑過ぎるだけかもしれません。
一度立ち止まって、もう一度テーブル設計を考えてみましょう。

# 3. マイグレーションでは影響をゼロにするのではなく、ミニマムにすることを優先せよ
またまたバージョンアップのときの話です。
マイグレーションのときは既存のユーザへの影響をゼロにするのがベストですが、
まずは影響をゼロにするのではなく、ミニマムにする案を考えてみてください。

というのも、マイグレーションを行う時点で
バージョンアップ前後で何かしら矛盾を抱えていることが多く、
ゼロにしようと頑張っていると一向に解が見つからなかったりするからです。

まずはミニマムにする案を考え、
それからゼロにできないか考えてみましょう。

# 4. NULLは極力使うな（初心者の場合）
NULLは各種データベースで扱いが若干異なり、
安易に使うと意図しない検索結果が返ってきたりパフォーマンスの低下を引き起こしたりします。

適切に扱えればベストですが、
まだ経験の浅いエンジニアは安易に`DEFAULT NULL`にするのではなく、
他の値で代用できないか考えてみましょう。
Sql Loader 列の読み飛ばし方(CSV・テーブル両方)

Sql Loaderで列の読み飛ばし方がわからなくてハマったので、解決法をメモしておく。
環境：Oracle 11g
※環境が手元にないのでコードは未テストです。
#テーブルの読み飛ばし方
【やりたいこと】
下記のようなCSVのデータがあった時に、テーブル側の列(B,D)を読み飛ばす。

CSVのデータ
A,C,E

テーブル
列A,列B,列C,列D,列E 

``` sample.CTL
省略...
(
 A
,B CONSTANT ' '
,C
,D COSTANT ' '
,E
)
```

正確には読み飛ばすのではなく、テーブルの項目数にCSVの項目数が合うように定数などを編集します。
本当は項目の初期値を設定できればよかったのですが、やり方がわかりませんでした(orz

どうやら、CONSTANTを指定するとCSVを読み進める代わりに
定数を読み込んでくれるようです。(テーブルの列BならCSVのCの代わりに定数' ')

なので、上記の場合CSVとテーブルの項目のマッピングは以下のようになります。
テーブル|CSV
列A|A
列B|' '(定数)
列C|C
列D|' '(定数)
列E|E

※定数以外でも同じようなことができるかは未調査。

#CSVの読み飛ばし方
【やりたいこと】
下記のようなCSVのデータがあった時に、CSV側の列(B,D)を読み飛ばす。

CSVのデータ
A,B,C,D,E

テーブル
列A,列C,列E 

``` sample.CTL
省略...
(
 A
,"B" filler
,C
,"D" filler
,E
)
```
深い階層の UIView が 特定の UIViewController を見つける方法


ものすごく深い階層の View から 特定のViewController にたどり着きたい時があったとします。そのView から その ViewController にたどり着くには、中間に UIView や UIViewController がいくつも介在している可能性もあります。 `NSNotification` を投げてやりとりをする人もいるかもしれませんが、今回は別の方法を紹介したいと思います。

<img width="512" alt="Screen Shot 2016-03-31 at 12.27.55 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/65634/3ee8352c-6dbc-966f-b51a-b5187ad5ea9c.png">

iOS も OS X もイベントなどを処理する仕組みとして Responder Chain と言う仕組みがあります。これを辿れば、目的となる View Controller が見つかるはずです。

OS X では、`NSViewController` が Responder Chain に入ってきたのは最近ですので、version の確認が必要です。[WWDC 2104 Storyboards and Controllers on OS X](http://asciiwwdc.com/2014/sessions/212)


そこで、こんな Extension を紹介いたします。

```.swift
extension UIResponder {

	func findViewController<T: UIViewController>() -> T? {
		var responder = self.nextResponder()
		while responder != nil {
			if let viewController = responder as? T {
				return viewController
			}
			responder = responder!.nextResponder()
		}
		return nil
	}

}
```

EDIT: UIResponder の extension に変更しました。<font color="silver">2016.5.19</font>


使い方は以下のようなイメージです。 Generics で `UIViewController` の縛りが入っているので、`as? MyViewController` とか `as? UIViewController` とか型を決定させてあげる必要があります。この場合当然見つからない場合は `nil` が帰ってきます。

```.swift
let myViewController = view.findViewController() as? MyViewController
```

追記: うまく型が Generic に伝わらない場合がある事に気がつきました。まだ挙動に関して納得できていない部分が多いので、詳細は調査中としますが、以下のコードの方が安全のようです。<font color="silver">2016.5.19</font>

```.swift
if let myViewController: MyViewController = view.findViewController() {
	//...
}
```


同様に、superview を辿って、特定のクラスにたどり着きたい場合には、以下の extension を使います。

```.swift
extension UIView {

	func findView<T: UIView>() -> T? {
		var view = self.superview
		while view != nil {
			if let view = view as? T {
				return view
			}
			view = view!.superview
		}
		return nil
	}

}
```

使い方の例は、以下の通りです。

```.swift
let myView = view.findView() as? MyView
```

View が多重階層となり、View と ViewController にいくつもの 中間 View や 中間 ViewController を介在するようになると、多くの中間 delegate プロトコルを用意して、処理やイベントを中継に中継を重ねて伝達させる必要があったりします。そんな場合には、こんな方法もありますが、無用な密結合が生まれるのでご注意ください。

応用すれば、Responder Chain で特定の Delegate などの特定のプロトコルを持つオブジェクトを探す、なんてのも可能かと思いますので、機会があれば是非実験してみてください。では、Have a happy coding!

```.console
swift --version
Apple Swift version 2.2 (swiftlang-703.0.18.1 clang-703.0.29)
```
macでGO言語の開発環境を作成



Goをインストールするには、方法が２つあります。
バイナリでのインストールとソースコードからのインストール。
バイナリでのインストールは、簡単です。
ソースコードからのインストールは、ソースコードの確認ができます。
自分で開発もできます。

両方チャレンジしてみます。

#開発環境の作成
##方法１　バイナリでのインストール
### コンパイラのダウンロード
http://golang.org/dl からダウンロードする。
/usr/local で展開するように作られているそうです。

```
wget https://storage.googleapis.com/golang/go1.5.3.darwin-amd64.tar.gz
sudo tar -C /usr/local/ -xzf go1.5.3.darwin-amd64.tar.gz 
```

### PATHの設定
export PATH=$PATH:/usr/local/go/bin

完了です。

##方法２　ソースコードからインストール
###ソースのダウンロード
```
git clone https://go.googlesource.com/go
cd go
git checkout go1.5
cd src
GOROOT_BOOTSTRAP=/usr/local/go ./all.bash
```

なにかエラーがでました。

```
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find /Users/*****/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
./make.bash: 行 121: /Users/*****/go1.4/bin/go: No such file or directory

```

gcc入れてないからですね。
xcodeでgccをいれました。

再度実行

```
cd src
GOROOT_BOOTSTRAP=/usr/local/go ./all.bash
```


##### API check
Go version is "go1.5", ignoring -next /Users/*****/workspace/GO/go/api/next.txt

ALL TESTS PASSED

---
Installed Go for darwin/amd64 in /Users/****/workspace/GO/go
Installed commands in /Users/XXXXXX/workspace/GO/go/bin
*** You need to add /Users/XXXXXXX/workspace/GO/go/bin to your PATH.
bash-3.2$ heroku login

完了です。
MySQLで区切り文字保存したフィールドの検索

## 前提

* MySQLで氏名を姓と名を1フィールドで保存。
* 姓と名の間に区切り文字として半角スペースを入れる。
* 姓で検索したい。名で検索したい。

## テーブル

```
CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
);
```

## サンプル

```
mysql> SELECT * FROM `user`;
+----+---------------+
| id | name          |
+----+---------------+
|  1 | 山田 太郎     |
|  2 | 山田 花子     |
+----+---------------+
2 rows in set (0.00 sec)
```

## 検索

* 姓で検索

```
mysql> SELECT * FROM `user` WHERE SUBSTRING_INDEX(`name`,' ',1) = '山田';
+----+---------------+
| id | name          |
+----+---------------+
|  1 | 山田 太郎     |
|  2 | 山田 花子     |
+----+---------------+
2 rows in set (0.01 sec)
```

* 名で検索

```
mysql> SELECT * FROM `user` WHERE SUBSTRING_INDEX(`name`,' ',-1) = '花子';
+----+---------------+
| id | name          |
+----+---------------+
|  2 | 山田 花子     |
+----+---------------+
1 row in set (0.00 sec)
```

## (※注意)INDEXは?

* 効かない模様

```
mysql> EXPLAIN SELECT * FROM `user` WHERE SUBSTRING_INDEX(`name`,' ',1) = '山田';
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | user  | ALL  | NULL          | NULL | NULL    | NULL |    2 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

mysql> EXPLAIN SELECT * FROM `user` WHERE `name` = '山田';
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref   | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
|  1 | SIMPLE      | user  | ref  | name          | name | 194     | const |    1 | Using where |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
1 row in set (0.00 sec)
```
RESTful、HTTPメソッドについて　[ 自分用メモ ]

# RESTfulとは？

RESTとは、Representational State Transferの略語。
アプリケーションの設計方法の1つで、操作の対象となるリソースをURLを使って表し、
それに対してHTTPメソッドの「GET」「POST」「DELETE」「PUT」を使って操作を行なうというもの。

RESTにおいては、情報のことを「リソース（resource）」と呼ぶ。

RESTfulとは、
URI とメソッド(GET, POST, PUT, DELETE)の関係が REST に則っていること。
※「UXに悪影響を与えない限り、原則的に」RESTfulな設計にする。

・HTTPを使ったシンプルなWebサービス
・すべてのリソースは、一意なアドレスで識別される
・特定のHTTPメソッドを使用して操作する（GET、POST、PUT、DELETEなど）
・JSON、XML、YAMLがサポートされている

これらの仕様にそって実装されたサービスが、
RESTful Webサービスと呼ばれ、推奨される。


参考サイト
第2回 RESTfulなAPIの設計を学ぼう (1/2)
http://www.atmarkit.co.jp/ait/articles/1310/23/news078.html

RESTful Rails
http://s3.amazonaws.com/ozonesoft.net_public/RESTfulRails.pdf<br><br>


# RESTfulの設計思想では、以下のように処理によってhttpのメソッドの使い分けをすることとされている。

・データを参照したいときは、GET
・データを新規登録したいときは、POST
・データを更新したいときは、PUT
・データを削除したいときは、DELETE

POSTとPUTの違いは、新規登録か否か、である。

参考サイト
http://sandbox-6810.blogspot.jp/2011/11/railsrestputdelete.html
Polygon の頂点数を数える（geojson ファイル）

こんにちは。
geojson ファイル内の Polygon（複数）の外周の頂点数を数えてみました。jq コマンドを利用しました。

```console
$ cat my.geojson | jq '.features[].geometry | select(.type == "Polygon").coordinates[0] | length - 1' | sort -k1nr 
6
6
4
3
```

また、穴開き Polygon の穴の個数を数えるには。

```console
$ cat my.geojson | jq '.features[].geometry | select(.type == "Polygon").coordinates | length - 1' | sort -k1nr 
2
1
0
0
```
「論より証拠」「推測より計測」…実動作を確認しながらのデバッグ術

ある程度の大きさを持ったプログラムの場合、「書いて一発で問題なく動く」ということは、ほぼ期待できません。ということで、開発の大半は動作検証とデバッグということになりますが、デバッグに当たっていくつか知っておくと役に立つことがあります。

# エラーメッセージは情報の宝庫
ときどき、「エラーが出ると一目散にコードを開いて、とりあえず眺める」という人がいるようですが、これは無駄が多すぎます。エラーメッセージには多くの場合、

* エラーが起きたファイルと、その行数
* どのようなエラーが起きたか
* スタックトレース（エラーが起きるコードが、どこから呼び出されたか）

などといった情報が含まれています。これをスタートラインとしましょう。

なお、エラーメッセージについてはどれだけ出すかの設定が可能です。たとえばPHPでは、`error_reporting(-1);`とすればすべてのエラーを表示する設定になります[^1]。逆に本番環境では、表に出しては**攻撃者にとって格好の手がかりとなる**ので、エラーは表示させないようにしましょう。

## メッセージから辿る
書いてある行自体にエラーの原因があることもありますが、そうでないケースももちろん多いです。まず、文法エラーの場合は、エラーに「気づいた」行でエラーとなるので、その前後の行にミスがあることもあります。また、その行で意図して例外を投げている場合は、「与えた引数がおかしい」、あるいは「外部環境にエラーがある」などの状況ということもあります[^2]。

## 実環境でのエラーログ
実環境でもエラーは起きうるので、（表示はともかく）内部的にログを取っていくことが重要となります。Railsの[`exception_notification`](https://github.com/smartinez87/exception_notification)のように、メールなり社内チャットなりに流す仕組みを作っておくといいでしょう。ときどきは生ログもチェックして、不自然な動作がないか確認することも必要です。

# デバッグ術
エラーが出なくても、うまく動作しない、ということも多いものです。そのような場合にも、いくつか定石のようなものがあります。

## デバッグツールを活用する
デバッグツールが整っている環境であれば、それを使って変数のウォッチやブレークポイントの設置など、便利に進められます。IDEでもデバッグ機能がある例は多いですし、ブラウザのJavaScriptであればF12キーで開発ツールを開けます。Railsでは[`web-console`](https://github.com/rails/web-console)があって、そのページにロードされた変数を使えるコンソール環境が、Web内で動かせます。

## 要素ごとに分けてチェックする
複雑に絡まったものをまとめてチェックしても、動いているか動いていないかしかわかりません。たとえば、JavaScriptからAjaxでPHPにリクエストを投げて、返り値で処理をする場合、

0. JavaScriptで送信する値を集計する
1. Ajax送信する
2. PHP側で値を受信する
3. 受信した値をPHP側で処理して、結果を返す
4. JavaScriptで結果を受信する
5. 受信した値を元に、処理を行う

のようなステップに分かれています。まずはF12でブラウザの開発ツールを開けば、リクエストの送受信状況が見られますので、「そもそもリクエストが飛んでいない」とか「PHPが500 Internal Server Errorを返している」とか、状況の切り分けができます。

## デバッグ用にもコードを書き換える
「ここの値をとりあえず確認したい」、あるいは「とりあえずここまでの動きを確認したい」というような場合、一時的にコードを書き換えるような方法が有効です。Gitなどでバージョン管理された環境なら、いくら変えても簡単に元に戻せます。

# 速度チューニング
こちらについては[以前にまとめた](http://qiita.com/jkr_2255/items/cacb9710808e749c6141)ものがありますが、まずは「計測」です。思わぬところが速度的に足を引っ張るということも、よくあります。たとえば、もともと1ミリ秒しかかかっていない処理は、どれだけ速くしたところで、1ミリ秒以上速くなることはありません。逆に、100ミリ秒かかる処理を5%高速化できるなら、そっちのほうが全体への効果としては大きくなります。

# 重大な例外
1つだけ気をつけて欲しいのは、**仕様の範囲外の動作**についてです。たとえば、[JavaScriptでのソートは安定性が保証されていません](http://qiita.com/falsandtru/items/41591040633bc88fcde7)し、C言語ではあちこちに「未定義の動作」という怪物が現れます。このような場面では、仕様の範囲外の挙動を可能な限り回避するようにコードを書きましょう。「仕様にない」ということは、「何かの気まぐれで将来的に変わるかもしれない」ということと同義なので、現行の環境で動いても、それは「たまたま」に過ぎないものです。

[^1]: 軽度の`E_NOTICE`まで表示するようになりますが、（既存のコードで`E_NOTICE`が出まくるものを流用するような状況なら別として）変数名間違いを報告してくれるなど有用なので、`E_NOTICE`も出さないコードで書くことを、強く推奨します。
[^2]: たまに、先に空っぽの関数を作っておくような場合に、「例外を投げる行だけ書いておく」なんてこともあります。
bluemixでMySQLを使う方法


以外な落とし穴だったので、忘れないようにメモっておく。

日本リージョンは無く、緯度と経度から一番近いリージョンが割り当てられる。割り当てられるのは「Sydney」リージョンだが、そのリージョンではMySQLが使えるシステム(SQL Database サービス)が利用できない。そのため、リージョンを変えてあげる必要がある。

# 結論

リージョンを「アメリカ」にすれば解決する。
【Swift】UIScrollViewに可変のUILabelを配置する

限られたスペースにテキストを表示させる時に、
テキストの文字数に応じてスクロールして表示する方法です。

- 表示するテキストは可変
- フォントを小さくしたくない
- 長いテキストも全て表示したい

上記のことを実現するため、最初はUITextViewで試したのですが、
フォーカスや編集機能を無効にはできたのですが、範囲選択が無効にならず、
今回はスクロール機能だけでよかったのでUIScrollViewを使う方法にしました。
* * *

```swift:ViewController.swift
override func viewDidLoad() {
        super.viewDidLoad()
    
        self.view.backgroundColor = UIColor.whiteColor()
        let screenSize = UIScreen.mainScreen().bounds.size
        
        // ScrollView と Label を作成.
        let scrollView = UIScrollView(frame: CGRectMake(0, 0, 150, 150))
        let textLabel = UILabel(frame: CGRectMake(0, 0, 150, 150))
        
        textLabel.text = "長いテキストを設定"
        
        // 表示可能最大行数を無制限にする.
        textLabel.numberOfLines = 0
        // コンテンツに合わせてサイズを自動調整してくれる.
        textLabel.sizeToFit()
        // スクリーンの中央に表示.
        scrollView.layer.position = CGPoint(x: screenSize.width/2, y: screenSize.height/2)
        // ScrollView に textLabel を追加する.
        scrollView.addSubview(textLabel)
        // ScrollView に設定した content(textLabel) のサイズを設定する.
        scrollView.contentSize = CGSizeMake(textLabel.frame.width, textLabel.frame.height)
        
        // View に ScrollView を追加.
        self.view.addSubview(scrollView) 
    }
```
* * *
#追記
u39uedaさんに教えていただきUITextViewでもできました。

* * *
```swift
        let textView = UITextView(frame: CGRectMake(0, 0, 150, 150))
        textView.text = "長いテキストを設定"
        
        // 編集機能を無効にする.
        textView.editable = false
        // 範囲選択を無効にする.
        textView.selectable = false
        
        textView.layer.position = CGPoint(x: screenSize.width/2, y: screenSize.height/2)
        
        self.view.addSubview(textView)
```
* * *

UITextViewにはデフォルトでpaddingが入っているようです。
場合によって使い分けたいと思います。

まだまだ勉強中なので、もっといいやり方などありましたら、
教えていただけると嬉しいです。
GMailからメール送信できなくなったので調べてみた


■メール送信時にこんなエラーが出るって声が聞こえた

    501 5.5.4 HELO/EHLO argument ssl://smtp.gmail.com invalid, closing connection. 22sm5605803pfh.48 - gsmtp
-

■コマンドで試してみた

    $ openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf
    (略)
    ehlo ssl://smtp.gmail.com
    501 5.5.4 HELO/EHLO argument ssl://smtp.gmail.com invalid, closing connection. 22sm5605803pfh.48 - gsmtp
    
    これだ。
-

「EHLO ssl://smtp.gmail.com」を「EHLO smtp.gmail.com」にしたら良いんじゃないのかと推測。

-

■再びコマンドで試してみる

1) コマンドで認証するためにGMailのアプリ固有のパスワードを生成
2) アプリ固有パスワードからbase64 encodeした文字列を作成

    $ perl -MMIME::Base64 -e 'print encode_base64("\000自分のメールユーザ名\@hogehoge.co.jp\000アプリ固有パスワード")'
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    　→文字列を控えておこう

3) opensslコマンドで送信を試みる

	$ openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf
	(略)
	ehlo smtp.gmail.com　→ここを変えてみた
	(略)
	auth plain XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
	235 2.7.0 Accepted
	mail from: <hoge@hogehoge.co.jp>
	250 2.1.0 OK qh8sm5566595pac.40 - gsmtp
	rcpt to: <hoge@hogehoge.co.jp>
	250 2.1.5 OK qh8sm5566595pac.40 - gsmtp
	data
	354  Go ahead qh8sm5566595pac.40 - gsmtp
	Subject: hogehoge
	
	mail test
	.
	250 2.0.0 OK 1459339665 xxxxxxxxxxxxxxx.40 - gsmtp
	　★メール送信成功。(実際届いてるとこまで確認できた)

-

ということで恐らくGMail側でEHLOに指定するホスト名の指定についての仕様変更的なものがあったのかなと。

そもそもssl://付けないのが正しいのかどうかまでは調べてないのでご容赦(汗

-
[Swift] UISearchBarの背景色を変える

UISearchBarのテキストフィールド背景色を変える

<img width="368" alt="スクリーンショット 2016-03-30 21.24.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/35979/1ccb227f-f909-e339-e720-f502e844ee8e.png">
↓
<img width="371" alt="スクリーンショット 2016-03-30 21.23.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/35979/a53a10b9-ecf5-f9f8-5a97-b369222d1440.png">


UISearchBarのサブビュー内にTextFieldnのviewがあるので、その背景色を変えてあげる

```lang:RootViewController.swift
import UIKit

class RootViewController: UIViewController , UISearchBarDelegate{
    
    private var mySearchBar: UISearchBar!
    
    override func viewDidLoad() {
        mySearchBar = UISearchBar()
        mySearchBar.delegate = self
        mySearchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44)
        mySearchBar.layer.position = CGPoint(x: self.view.bounds.width/2, y: 32)
        mySearchBar.tintColor = UIColor.darkGrayColor()
        mySearchBar.text = "テスト"
        // 背景色を変える
        for subView in mySearchBar.subviews {
            for secondSubView in subView.subviews {
                if secondSubView.isKindOfClass(UITextField) {
                    secondSubView.backgroundColor = UIColor.lightGrayColor().colorWithAlphaComponent(0.3)
                }
            }
        }
        
        self.navigationItem.titleView = mySearchBar
    }
    
}

```

[参考:　[stackoverflow] Cannot change search bar background color](http://stackoverflow.com/questions/33751292/cannot-change-search-bar-background-color)
HTML,CSS勉強メモ #6 〜高さ画面いっぱいの詳細〜

本日の勉強。

##**勉強内容**##
###実践！ウェブサイトを作ろう###
　　05～09

##**進度**##
- 05:３カラムのレイアウト（可変幅）
- 06:３カラムのレイアウト（固定幅）
- 07:文書の構造を作っていこう
- 08:２カラムのレイアウトを作ろう
- 09:背景を設定しよう

まで終了。

##**メモ**##
###背景を設定しよう:`container`の高さを画面一杯にする方法詳細###

レッスン内ではおまじない的に書かれていましたので調べてみました。

```css
html {
    height: 100%
}
body {
    height: 100%
}
body > #container {
    height: auto;
}
#container {
    min-height: 100%;
    height: 100%;
}
```

- `html`と`body`の`height:100%;`はそのままの意味ですが、子要素で`height:100%;`を指定した場合、親要素の高さを元に算出されるためここを指定しないとキチンと表示されません。
- `body > #container`の`height: auto`は、`container`の中身が多くなりすぎたとき用の対応のようです。
- `#container`の`min-height: 100%`は高さの最小値を指定するもので、上の`auto`の影響で中身が少ない時に縮まってしまうのを防止する用です。
- その下の`height:100%`はそのままの意味だと思うのですが、これをつけなくても高さはいっぱいになりました。なのでなぜあえて付けるのか調べ中です。
ズンドコキヨシの成功率をズンとドコの発生確率が可変のケースで求めた

# 背景
ズンドコキヨシ問題、今更社内でうっかり流行ったりしたところ、ある同僚曰く、
「ズンとドコが出る確率を等しくせず、ズンの方を大きくしたら、どんどん早くキ・ヨ・シ！が成立するのでは」
いやいやいや、そんなばかな。まずドコが0だと永遠に成立しないし。おかしいやろ。
と、ムキになっていろいろ解いてみた。

# TL;DR
- 高々5次の多項式の増減を求める問題に帰着。
- ズンが4/5の割合で出る時一番早く成立する。
- ズンがk回連続する場合も同様に簡単に求まる。
- Qiita で LaTeX 記法うれしい。

# とりあえず計算
ズンが出る確率を x とすると、ドコが出る確率は

```math
1 - x
```

となる。
ズンが4回連続出て、その直後にドコが出てキ・ヨ・シ！が成立する確率は、  

```math
P(x) = x^{4} (1 - x) , (0 \leq x \leq 1)
```

ここで、  

```math
P(0) = 0, P(1) = 0
```

である。  

P(x) を微分すると、

```math
\frac{d}{dx} P(x) = x^{3}(4-5x)
```

となり、

```math
\frac{d}{dx} P(\frac{4}{5}) = 0
```

とわかる。

さらに2回微分を求めると、  

```math
\frac{d^{2}}{dx^{2}} P(x) = 4x^{2}(3-5x)
```

なので、これより、  

```math
\frac{d^{2}}{dx^{2}} P(\frac{4}{5}) = -\frac{64}{25} < 0
```

となる。  
以上を踏まえて、増減表を書くと、

|x|0|...|3/5|...|4/5|...|1|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|P''(x)|0||0||-(64/25)||0|
|P'(x)|0|増加|27/125|減少|0|減少|-1|
|P(x)|0|増加|162/3125|増加|256/3125|減少|0|

となり、ズンの出現確率が

```math
\frac{4}{5}
```

の時、確率が最大

```math
\frac{256}{3125}
```

となる。
# ズンがk回連続する場合の一般解
ズンがk回連続出て、その直後にドコが出てキ・ヨ・シ！が成立する確率は、  

```math
P(x) = x^{k} (1 - x) , (0 \leq x \leq 1)
```

ここで、  

```math
P(0) = 0, P(1) = 0
```

である。  

P(x) を微分すると、

```math
\frac{d}{dx} P(x) = x^{k-1}(k-(k+1)x)
```

となり、

```math
\frac{d}{dx} P(\frac{k}{k+1}) = 0
```

とわかる。
ここまで解けば、k=4 の時と増減表は同様になるので、2階微分導出と増減表の記述は省略する。  
よって、ズンの出現確率 x が

```math
\frac{k}{k+1}
```

の時、確率が最大 

```math
\frac{1}{k+1} (\frac{k}{k+1})^{k}
```

となる。

# 感想
ここまで書いたけど心底どうでもいい。時間を返して欲しい。
Qiita の数式記法を試したいだけの人生だった。
no implicit conversion of String into Array と言われました。

activeadminを試していたら、特定の管理ページだけ表示できませんでした。


# 特定ページだけエラー
作成中管理ページの特定のページprofileモデルの管理画面だけエラーがでます。

```
TypeError in Admin::Profiles#index
Showing /var/www/html/local.pugiemonn.com/vendor/bundle/ruby/2.2.0/bundler/gems/activeadmin-18fd1c23fc60/app/views/active_admin/resource/index.html.arb where line #2 raised:

no implicit conversion of String into Array
Extracted source (around line #20):
        
        def label_text
          ((localized_label || humanized_method_name) + requirement_text).html_safe
        end
        
        # TODO: why does this need to be memoized in order to make the inputs_spec tests pass? 
```
`no implicit conversion of String into Array`ってなんでしょうか。

# i18nのファイルを編集
i18nのyaml辞書ファイルで配列を指定している箇所を削除したら動きました。どうやら記述する場所を間違っていたみたいです。

`config/locales/models/profile/ja.yml` モデルに以下の様な配列を書いていました。

```yaml:profileモデルの辞書ファイル
ja:
  activerecord:
    attributes:
      profile:
         sex:
           -
             - '男性'
             - 1
           -
             - '女性'
             - 2
```
たぶんactiveadminがこの配列部分を読みに行って失敗してるのですかね。

```diff:profileモデルの辞書ファイル
ja:
  activerecord:
    attributes:
      profile:
-         sex:
-           -
-             - '男性'
-             - 1
-           -
-             - '女性'
-             - 2
```
配列部分を削除しました。

# 再度ページを確認
今度は表示されました(☝ ՞ਊ ՞)☝