OmniAICreator/Qiita-1.07M huggingface dataset:
UIView.transformを使って回転させるときには、対象Viewのautolayoutを無効にする必要がある

回転させ続ける場合、UIViewの再配置がtransformの度に行われてしまい、へんてこな回転をしてしまう。

```objc
// UIViewの回転の処理の例
-(void)rotate {
  // _myviewの中心を基準に100度回転させる
  CGFloat angle = 100 * M_PI / 180;
  _myview.transform = CGAffineTrasnformMakeRotation(angle);
}
```

autolayoutを有効にしたままの回転方法をご存知の方は、教えて頂ければ幸いです。
Gitのcommit-msg hookでプロンプト表示して確認

# 概要

git hookを使ってフォーマットをチェックして、正しくなければ確認を促すスクリプトを作ってみました。
フォーマット確認とか、チケット番号の自動補完は見かけたのですが入力を受け付けるサンプルが少なかったので。

## この投稿が役に立つ人
　チケット駆動で開発している。
　チケット番号とブランチ名が連動している。(ex. #1234, iss-1234)
　一つのブランチに複数のチケットを結びつけることを許している。

　→チケット番号を間違えてコミットして、メンバーに怒られる！（俺）

# 実例

## 前提

チケット番号1234に結びついたiss-1234ブランチにいるとする。

```shell-session
$ git branch
  develop
* iss-1234
```

## チケット番号をうっかり間違えた場合
コミットメッセージにブランチ名内のチケット番号が含まれない場合は、確認する
"y"以外を入力した場合は、コミット中止

```shell-session
$ touch testfile
$ git add .
$ git commit -m "refs #5678 add testfile"
[NOTICE] refs #5678 is not match iss-1234. Is that right? [y/N]

aborted
```

## チケット番号を意図的に変えた場合

"y"を明示的に入力した場合はコミット

```shell-session
$ git commit -m "refs #5678 add testfile" 
[NOTICE] refs #5678 is not match iss-1234. Is that right? [y/N]
y
[iss-1234 6d4be6c] refs #5678 add testfile
 0 files changed
 create mode 100644 testfile
```

# commit-msg コード

rubyで記述してあります。ブランチ名のprefixはお好みで。
.git/hooks/commit-msg

```ruby:.git/hooks/commit-msg
#!/usr/bin/env ruby

require "readline"

message_file = ARGV[0]
message = File.read(message_file)

$regex = /refs #(\d+)/

if !$regex.match(message)
  puts "[POLICY] Your message is not formatted correctly"
  puts 'ex. git commit -m "refs #XXXX test"'
  exit 1
end
$message_ticket_no = $1

$current_branch_name = `git rev-parse --abbrev-ref HEAD`.chomp
/iss-(\d+)/ =~ $current_branch_name
$branch_ticket_no = $1

if $message_ticket_no != $branch_ticket_no
  puts "[NOTICE] refs ##{$message_ticket_no} is not match #{$current_branch_name}. Is that right? [y/N]"
  STDIN.reopen('/dev/tty')
  input = Readline.readline
  if input != "y"
    puts "aborted"
    exit 1
  end
end
```

# 参考にしたページ

[Git の commit-msg hook でコミットメッセージにチケット番号が含まれるかチェックする](http://qiita.com/tbpgr/items/222030af9cc266f9781e)

[How do I prompt the user from within a commit-msg hook?]
(http://stackoverflow.com/questions/3417896/how-do-i-prompt-the-user-from-within-a-commit-msg-hook)
友達の数

　今回は全探索みたいに書けた様な気がします！でも、枝刈りの意識をもうちょっとしたほうがいいかな・・・

```java:
public class Main {
	
	int highestScore(String[] friends) {
		int[] score = new int[friends.length];
		for(int r = 0; r < friends.length; r++) {
			for(int c = 0; c < friends[r].length(); c++) {
				if(friends[r].charAt(c) == 'Y') {
					score[r]++;
				} else if(r != c) {
					for(int k = 0; k < friends.length; k++) {
						if(k == r || k == c) continue;
						if(friends[k].charAt(r) == 'Y' && friends[k].charAt(c) == 'Y') {
							score[r]++;
							break;
						}
					}
				}
			}
		}
		
		int max = Integer.MIN_VALUE;
		for(int r = 0; r < score.length; r++) {
			max = Math.max(max, score[r]);
		}
		return(max);
	}
	
	void doIt() {
		//0
		String[] friends = {
				"NNN",
				"NNN",
				"NNN",
		};
		//2
		String[] friends2 = {
				"NYY",
				"YNY",
				"YYN",
		};
		//4
		String[] friends3 = {
				"NYNNN",
				"YNYNN",
				"NYNYN",
				"NNYNY",
				"NNNYN",
		};
		//8
		String[] friends4 = {
				"NNNNYNNNNN",
				"NNNNYNYYNN",
				"NNNYYYNNNN",
				"NNYNNNNNNN",
				"YYYNNNNNNY",
				"NNYNNNNNYN",
				"NYNNNNNYNN",
				"NYNNNNYNNN",
				"NNNNNYNNNN",
				"NNNNYNNNNN",
		};
		//6
		String[] friends5 = {
				"NNNNNNNNNNNNNNY",
				"NNNNNNNNNNNNNNN",
				"NNNNNNNYNNNNNNN",
				"NNNNNNNYNNNNNNY",
				"NNNNNNNNNNNNNNY",
				"NNNNNNNNYNNNNNN",
				"NNNNNNNNNNNNNNN",
				"NNYYNNNNNNNNNNN",
				"NNNNNYNNNNNYNNN",
				"NNNNNNNNNNNNNNY",
				"NNNNNNNNNNNNNNN",
				"NNNNNNNNYNNNNNN",
				"NNNNNNNNNNNNNNN",
				"NNNNNNNNNNNNNNN",
				"YNNYYNNNNYNNNNN",
		};
		
		System.out.println(highestScore(friends5));
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Main().doIt();
	}

}
```
CodeIgniterのFormヘルパーではfomr_button()を使おう


[クールなお問い合せフォームをコーディングするための9つのTips | 株式会社LIG -](http://go.shr.lc/1jy4CtV)
この記事は私の隣の席の彼の記事ですが、`<input type='submit'>`じゃなくて`buttonタグ`を利用しよう!と言っています。

理由は
* buttonでもtype='submit'が使える
* 閉じタグがある

ことです。

なるほどと思ってあんまり自分には関係無い話かと思っていたのですが、
先日CodeIgniterでformヘルパーを使っていて、諸事情で`form_submit()`が使えなくなったときに`form_buttom()`で代用出来ました。

##form_submit()時代
今まではform_submitを使ってこんな感じで書いてました。

```formヘルパー
echo form_submit([
	'class' => 'hogehoge',
    'value' => 'ログイン'
]);
```

↑の記事の彼とコードを書いていたのですが、彼曰く、こんな感じで
![](http://i.gyazo.com/b48c6d4d2e35d66e235e25854ef8f3f6.png)

submitボタンにデザインをあてたい時はbuttonタグの中にiタグなどでアイコンを入れる実装もそこそこ多いそうです。

```submit.html
<button type="submit" class="hogehoge">
  <span>
   <i class="icon"></i>
　　ログイン
　</span>
</button>
```

こういうときにform_submit()だと閉じタグが無いので入れ子構造は使えません。

##form_button()があった。
と思ってたら
[Form Helper : CodeIgniter User Guide - ](http://go.shr.lc/1jMD5zD)

form_button()がありました。

ということで、こんな感じで記述できました。

```
$data = array(
    'type' => 'submit',
    'class' => 'hogehoge',
    'content' => '<span><i class="icon"></i>ログイン</span>'
);
echo form_button($data);
```

これで↑のsubmitボタンをデザイン通りに実装できました。
めでたし。
LINE Developer Meetup in Fukuoka #5



#Swift おさらい
以下に内容をメモしましたが、スライドが公開されたのでそちらをみた方が確実です。
http://www.slideshare.net/taketin/swift-36238223



##Swiftとは？
Swift is "Objective-C without the C"

##特徴

+ モダン
 
+ 安全

+ 高速

+ インタラクティブ

## 仕様
変数（var)
定数（let)
型推論

変数名は日本語、ユニコード絵文字も一部使用可。

暗黙の型変換はしない。

変数の展開　
\\()で展開

optional Value

nil許容（型の後ろに？をつける）
「wrap」する
「unwrap」する　！

## OpitionalChaining

メソッドチェーンを書く

## Tuple
 var response = (404, #NotFound")
 

## Bool型
Yes、Noがなくなった

## コレクション
+ 配列
　いろんな書き方がある。

+ 配列イテレーション

+ 配列のコピー
 参照渡し、コピーがあるので注意

+ 配列範囲指定
　..は未満　...は以下（Rubyとは逆なので注意）

+ ディクショナリ
 キーの型はhashableでなくてはならない。

+ ディクショナリイテレーション

+ ディクショナリのコピー

## コントロール
+ if文
+ while文
+ for文
+ switch文
　基本berak動作

## 列挙型（Enum)
パワーアップ！
Associated　Values

## 関数
func foo(bar;String,baz:lnt)->String{}

+ キーワード指定可
+ 引数の省略可
+ 引数の可変長可
+ 返値が関数、返値がタップ

## クロージャ
+ 型推論が聞く
+ 式が一つだけの場合Returnを省略できる
+ 引数をプレースホルダで置換できる
+ blocks内でselfを使った場合の循環参照回避

## クラス

基本はキャメルケースで名前を書く

+ コンストラクタ
+ コンビニエンスコンストラクタ
　コンストラクタ引数を省略することができる
+ 継承
+ メソッドオーバーライド
+ コピー
　クラスは参照渡し
+比較(===)
+ Getter,Setter
　getのみでReadOnryにできる
+ willSet,didSet
+ 遅延ロード

## Subscript
オブジェクトへの添え字アクセスができる
アクセスコントロールも可能

## 構造体
+ 初期化が必要
+ mutationg
+ コピー（構造体は値渡し）

## protpcol

## Extention
クラスだけではなく型などにも適用できる
プロトコルの継承もできる

## Generics
+ 型制約なし
+ 型制約あり

## TypeCastion
+ Any & AnyObject
+ 型チェック
+ ダウンキャスト
　オプショナルで安全に使える

## Operator Functions
+ 存在する演算子を拡張
+ 存在しない演算子を定義

### おまけ：正規表現
### おまけ：名前空間
「Swiftは名前空間は暗黙のうちに提供される」
### おまけ：今後の展望
+ アクセス修飾子
+ CocoaPods
+ 汎用言語として公開して欲しい

# SwiftとObjectve-Cの蜜月関係
## 今までの資産はどうなるのか？
## Swift->Objective-C
+ SwiftからObjectibe-Cのコードを呼び出す
+ SwiftでObjectibe-Cのクラスをサブクラス化する

> AFNetworkingって何？　オープンソースウエア

## Objective-C->Swift
+ Swiftで作ったクラスはObjectibe-Cのサブクラス化できない。


# 私的感想
+ Swiftを使うと生産性が上がる＆安全性が高くなる
+ Objective-Cで作っていたクラスを呼び出すことができるので過去の資産も使える
だが、安全性を考えるとなるべく使わない方がいいのかなと思った。

+ コードの短縮は便利な反面、可読性が低くなるのでチームや会社でコーディングする時は規約をしっかり決めないと、各自が自由なコードを書いて保守が大変になりそう。
[Go言語]codegangsta/cliで、サブコマンドとして外部コマンドをとれるようにしてみた



## codegangsta/cli

コンソールアプリを作るのに便利なライブラリ。
簡単に、オプションやサブコマンドを扱える。

* https://github.com/codegangsta/cli

## サブコマンドとして外部コマンドをとる

`git`コマンドのようにPATHの通っているところに`git-xxxx`みたいな実行可能ファイルがあると、`git xxxx`みたいに、あたかも`git`コマンドのサブコマンドとして扱える。

`codegangsta/cli`を使って同じようなことをしたい。

`cli.App`に`Before`というフィールドがあり、サブコマンドを実行する前に実行できる関数を設定できる。
また、`exec.LookPath`を使えば、PATHの通った実行可能ファイルの絶対パスを探すことができる。
この2つを使って、サブコマンドが実行される前に、プログラミング引数の2番目の値を実行可能ファイルとして探し出し、`Before`でその外部コマンドを実行するような、`cli.Command`を作成して、`App`にサブコマンドとして登録してやればよい。

* http://golang.org/pkg/os/exec/#LookPath

```main.go
package main

import (
    "github.com/codegangsta/cli"
    "os"
    "os/exec"
    "strings"
)

func main() {
    app := cli.NewApp()
    app.Before = func(c *cli.Context) error {
        args := c.Args()
        if len(args) <= 0 {
            return nil
        }

        subcommand := args.First()
        for _, c := range app.Commands {
            if c.HasName(subcommand) {
                return nil
            }
        }

        path, err := exec.LookPath(app.Name + "-" + subcommand)
        if err != nil {
            return err
        }

        app.Commands = append(app.Commands, cli.Command{
            Name: subcommand,
            Action: func(c *cli.Context) {
                cmd := exec.Command(path, strings.Join(os.Args[2:], " "))
                cmd.Stdout = os.Stdout
                cmd.Stdin = os.Stdin
                cmd.Stderr = os.Stderr
                cmd.Run()
            },
        })

        return nil
    }
    app.Run(os.Args)
}
```

```sub.go
package main

import (
    "fmt"
    "github.com/codegangsta/cli"
    "os"
)

func main() {
    app := cli.NewApp()
    app.Action = func(c *cli.Context) {
        args := c.Args()
        if len(args) <= 0 {
            fmt.Println("no params")
            return
        }

        fmt.Println(args.First())
    }
    app.Run(os.Args)
}
```

`main.go`はメインとなるプログラムで以下の様にビルドするとする。

```
% go build -o main main.go
```

`sub.go`はサブコマンドとして呼び出すコマンドで、以下の様にビルドするとする。

```
% go build -o main-sub sub.go
```

このようにすると、以下のように`sub.go`から作った実行可能ファイルを、`main`のサブコマンドとして実行できる。

```
% ./main sub hogehoge
hogehoge
```
ファイルを検索して、peco って cd するやつ

`Dockerfile` を検索して、`peco` に流して、そのフォルダに `cd` するものを考えていたんですけれども、`find` だと検索対象フォルダを絞らないと検索が遅くて使い物にならないなぁと思っていた矢先。

[peco + spotlightで超高速にファイル名検索して開く - Qiita](http://qiita.com/keita/items/8f7b593969b5151b1154)

を発見！これだー！

ということで、`spotlight(mdfind)` を使ったやつを書いてみました。

```bash:.bashrc
peco-mdfind-cd() {
  local FILENAME="$1"

  if [ -z "$FILENAME" ] ; then
    echo "Usage: peco-mdfind-cd <FILENAME>" >&2
    return 1
  fi

  local DIR=$(mdfind -onlyin ~ -name ${FILENAME} | grep -e "/${FILENAME}$" | peco | head -n 1)

  if [ -n "$DIR" ] ; then
    DIR=${DIR%/*}
    echo "pushd \"$DIR\""
    pushd "$DIR"
  fi
}

peco-docker-cd() {
  peco-mdfind-cd "Dockerfile"
}

peco-vagrant-cd() {
  peco-mdfind-cd "Vagrantfile"
}
```

```
$ peco-mdfind-cd "Dockerfile"
```

で、
1. `Dockerfile` を検索し、
2. 一覧を `peco` に渡し、
3. 選択結果のフォルダに `cd` する
という流れです。

ちょっと名前が微妙ですが、`alias` を設定するなり、ショートカットキーを設定するなりして下さいませw

<del>`.git` に対してもやりたかったんですけども、`mdfind` が不可視属性のものを対象に出来ないようなので、ちょっと無理っぽいです。。</del>

追記：

```
peco-find-cd() {
  local FILENAME="$1"

  if [ -z "$FILENAME" ] ; then
    echo "Usage: peco-find-cd <FILENAME>" >&2
    return 1
  fi

  local DIR=$(find ~ -maxdepth 5 -name ${FILENAME} | peco | head -n 1)

  if [ -n "$DIR" ] ; then
    DIR=${DIR%/*}
    echo "pushd \"$DIR\""
    pushd "$DIR"
  fi
}

peco-git-cd() {
  peco-find-cd '.git'
}

peco-docker-cd() {
  peco-find-cd "Dockerfile"
}

peco-vagrant-cd() {
  peco-find-cd "Vagrantfile"
}
```
MySQL Dump （crontab 用見本）

# バックアップコマンド

```bash:DB全体
mysqldump -u root -ppassword -A
# ファイル出力（圧縮コミ）
# | gzip  -c > mysql.all.dump.$(date -I).gz
# | bzip2 -c > mysql.all.dump.$(date -I).bz2
```

```bash:DB単独
mysqldump -u root -ppassword database
```

```bash:DB単独（特定条件を除く）
# 例：申し込み情報を除く
mysqldump -u root -ppassword database -w "order_id IS NULL"
# 例：特定テーブルのデータを除く
mysqldump -u root -ppassword database -w "order.id IS NULL"
```

```bash:DB単独（テーブル構成のみ）
mysqldump -uroot -ppassword database --no-data
```

```bash:DB単独（データのみ）
mysqldump -uroot -ppassword database --no-create-info
```

```bash:DB複数
mysqldump -uroot -ppassword -B database1 database2
```

```bash:DB単独＋特定テーブル
mysqldump -uroot -ppassword database table
mysqldump -uroot -ppassword database table1 table2
```
# 追加オプション

| オプション概要   | オプション               |
|:--------------|-------------------------|
| Insert 1行単位 | --skip-extended-insert  |
| XML 形式で出力  | --xml                   |
AngularJSでチェックボックスの状態を配列に格納したい

## チェックボックスの状態を配列に格納したい

配列からチェックボックスを生成し、そのチェック状態を配列に格納したいという場面はよく出てくると思います。

例えば

```js
[
  {id: 1, name: 'リンゴ'},
  {id: 2, name: 'バナナ'},
  {id: 3, name: 'グレープ'},
  {id: 4, name: 'オレンジ'},
  {id: 5, name: 'ピーチ'}
]
```

このような配列があったとすると、

![checkbox.png](https://qiita-image-store.s3.amazonaws.com/0/32030/23669b26-5a00-80e7-6051-23884165b683.png)

このようなチェックボックスを表示し、チェックされた要素のid値を配列で取得したい、ということです。仮にバナナとピーチがチェックされたなら、

```js
[2, 5]
```

このような配列が欲しいのです。

## ソースコード

これ単体で動きます。

```html
<!doctype html>
<html ng-app="app" ng-controller="Ctrl">
<meta charset="utf-8">
<title>チェックボックステスト</title>
<ul>
  <li ng-repeat="fruit in fruits">
    <label><input type="checkbox" ng-model="fruit.checked">{{fruit.name}}</label>
  </li>
</ul>
<button ng-click="check()">チェック</button>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.18/angular.min.js"></script>
<script>
angular.module('app', []).controller('Ctrl', function($scope) {
  $scope.fruits = [
    {id: 1, name: 'リンゴ'},
    {id: 2, name: 'バナナ'},
    {id: 3, name: 'グレープ'},
    {id: 4, name: 'オレンジ'},
    {id: 5, name: 'ピーチ'}
  ];
  $scope.check = function() {
    var checks = [];
    angular.forEach($scope.fruits, function(fruit) {
      if (fruit.checked) checks.push(fruit.id);
    });
    console.log(checks);
  };
});
</script>
</html>
```

もっとうまいやり方がありましたら、是非教えてください。
atom をwindows7 64bitでビルドしてみた

# はじめに

　sublimeがwindowsでなんか異常に調子悪く、atomをwindows7 64bitでビルドしてみました。というメモです。
メモというか後半に関しては、ヘルプミーです。githubの中の人みてますかー。

# 環境

OS
・windows 7 64bit
ビルド用にインストールしたもの
・node v0.10.29 64bit (npm 1.4.14 ※後述)
・python v2.7.7 64bit
・Microsoft Visual studio 2013 for windows desktop (持ってるサブスクリプションでインストール)

# 手順

githubのページに書かれているとおりなので、割愛します。手抜きですいません。
<a href="https://github.com/atom/atom/blob/master/docs/build-instructions/windows.md">https://github.com/atom/atom/blob/master/docs/build-instructions/windows.md</a>

# ハマった

## npm のバージョンが問われた

script/buildした時に下記のエラーが表示される

```shell-session
npm v1.4+ is required to build Atom.
```

これは、最初にインストールしたnode v0.10.25の日本語版のnpmが1.3系だったので怒られました。npm扱ったことないので、v0.10.29をダウンロードして解決しました。

## 何かnotfoundだよって言われる

下記のご様子

```shell-session
github-url-from-git@1.1.1 No repository field atom
```

たぶんインストール系でミスってると思い、32bit版で合わせてたものをさっきのnodeの件と合わせて64bit版を入れなおした。
あとpathの中にnpmのpathが知らないもので入っていて"c\users\local\roaming\npm"みたいになってた（うる覚え）。とりあえず消してみた。
その後script\buildして

```shell-session
Done, without errors.
```

でビルド成功。

## しかし、起動はするのにウィンドウが表示されない(とりあえず解決！)

こんなかんじでアイコンは表示され起動されているのにウィンドウが表示されない。
完全にヘルプミー。
<a href="http://engine.workapart.org/wp-content/uploads/2014-06-25_atom.png"><img src="http://engine.workapart.org/wp-content/uploads/2014-06-25_atom-640x408.png" alt="2014-06-25_atom" width="640" height="408" class="alignnone size-medium wp-image-771" /></a>

# まとめ（まとまってない）

というわけで、今詰んでいます。
詳しくないわたくしには正式版まちですかねー。

以上、ヘルプミー共有でした。

## 追記(2014/06/25)

コメント欄に神様到来されました、下記でとりあえず対処可能です。

```
Aeroプレビュー(スクショのやつ)にマウス乗っけて右クリック→最大化 でとりあえず解決
```

kimama1997 さんありがとうございます！
CentOS 6.5でnginxを動かす為の最低限の設定


### yumリポジトリ設定

参考：[nginx: Linux packages](http://nginx.org/en/linux_packages.html)

```bash:yumリポジトリ追加＆インストール
$ sudo rpm --nosignature -i http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum -y install nginx
$ nginx -v
nginx version: nginx/1.6.0
```

公式のStable versionとして1.6.0が無事インストールできました。

インストールが終わったら`/etc/yum.repos.d/nginx.repo`は`enable=0`にしておいてもいいかもしれません。

### 初期設定

```bash:nginx設定変更
$ grep include /etc/nginx/nginx.conf 
    include       /etc/nginx/mime.types;
    include /etc/nginx/conf.d/*.conf;
$ cd /etc/nginx/conf.d
$ sudo mv default.conf default.conf.orig
$ vi default.conf
$ vi mydomain.conf
```

includeしている設定ファイル名を確認し、default.confはバックアップとして念のため残して(includeされないようにして)おきます。

サービス提供用には任意の(自分のドメイン名で)server_nameを提供して設定をするので、正常なアクセスとは想定されないデフォルト用として基本拒否する設定を設けておきます。

```nginx:mydomain.conf
server {
	listen 80 default_server;
	server_name _;
	access_log off;
	return 444;
}
````

参考：[nginx はどのようにリクエストを処理するか - サーバ名未定義のリクエストの処理を防ぐ](http://nginx.org/ja/docs/http/request_processing.html#how_to_prevent_undefined_server_names)

そこから新しく自分のドメイン用の設定を作成しておきます。

```nginx:mydomain.conf
server {
	listen 80;
	server_name	example.org;
	location / {
		root	/var/www/example.org;
		index	index.html index.htm;
	}
}
````

ひとまずは動作確認だけ出来れば充分な設定ということで。

### ローカルディレクトリの作成

まずは公開用のディレクトリを整理しておきます。

```bash:公開ディレクトリ作成
$ sudo mkdir -p /var/www/example.org
$ sudo chown user.group /var/www/example.org
$ cd /var/www/example.org
$ cp -p /usr/share/nginx/html/index.html .
```

今後の整理などを考慮して、所有権などは作業用のユーザに設定しておきます。`/var/www`配下にディレクトリを作っているのは「何となくWeb関連のファイルってここだよね」と自分が思っているだけなので、好みに合わせてください。

動作確認用のHTMLファイルはnginxのデフォルトの物を拾っておきます。

### nginxサービスの起動

という感じで動作確認します。

```bash:nginx起動
$ sudo service nginx start
nginx を起動中:                                            [  OK  ]
$ curl --head http://localhost
HTTP/1.1 200 OK
Server: nginx/1.6.0
(略)
$ sudo tail /var/log/nginx/*.log
==> /var/log/nginx/access.log <==
(略)
==> /var/log/nginx/error.log <==
(略)
```

動作確認は、正直`curl`打つより先にブラウザで見るほうが早いかもしれません。

```bash:自動起動設定
$ chkconfig nginx --list
nginx          	0:off	1:off	2:off	3:off	4:off	5:off	6:off
$ sudo chkconfig nginx on
$ chkconfig nginx --list
nginx          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
```

無事に動作が確認できたら、自動起動の設定を入れておきます。
Railsで、S3にコンテンツをアップロードしCloudFrontから配信したメモ

**準備**
1.S3にbacket作成
2.cloudfrontに新規distributionを作成し、originを1で作成したbacketにする

コントローラで必要な情報を指定（各パラメータはs3.ymlに設定した）
`AWS.config(
      :access_key_id => S3_CONFIG['access_key_id'],
      :secret_access_key => S3_CONFIG['secret_access_key'])`

対象のアクションに下記コードを書く
`s3 = AWS::S3.new
    bucket = s3.buckets[S3_CONFIG['bucket']]
    file_name = file.original_filename
    file_full_path="users/images/#{@user.id}/#{file_name}"
    object = bucket.objects[file_full_path]
    object.write(file, :acl => :public_read)`

下記のようなURLでアップロードされる
???.cloudfront.net/users/images/???/???


**参考URL**
http://joppot.info/2014/06/13/1583
http://akasata.com/articles/292
http://www.aguuu.com/archives/2012/12/paperclip/
http://rock-and-hack.blogspot.jp/2013/02/railsassetss3cloudfront.html
RMagickで画像を正方形に加工したmemo

ユーザーがプロフィール画像をアップロードする機能を実装するとき、
下記の要件を満たしたかった。

・画像の形式指定、画像のサイズ最大値指定
・画像のトリミング、縮小

まず、ImageMagickをインストール
`brew install imagemagick` or `yum install imagemagick`

Gemfileに下記追加
`gem 'rmagick'` その後 `bundle install`

ざっくりこんな感じで処理できる。
`file = params[:users][:image] #フォームからアップロードされた画像
thumb = Magick::Image.from_blob(file.read).shift
thumb_out = thumb.resize_to_fill!(120, 120).to_blob
`

ちなみに形式とサイズ最大値のバリデーションはこんな感じ。
`file.content_type =~ /^image/ && file.size < 2048.kilobytes`

**参考URL**
http://morizyun.github.io/blog/rmagic-square-thumbnail-ruby/
http://blog.ruedap.com/2011/03/20/mac-ruby-imagemagick-rmagick-install
GithubのIssueやPR画面にひな形を適用するブックマークレット



```js
javascript:(function(){location.search="title=[WIP]%2520xxのyyを修正する&body=#%2520Summary%2520(%E4%BB%95%E6%A7%98%E3%81%AE%E6%A6%82%E8%A6%81)%250A-%2520First%2520spec%2520to%2520accept.%250A-%2520Second%2520spec%2520to%2520accept.%250A-%2520Last%2520spec%2520to%2520accept.%250A%250A#%2520Ref%250A#9999%2520(%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8BIssue)%250A%250A#%2520ToDo%2520(%E3%81%93%E3%81%AEPR%E3%81%A7%E3%81%99%E3%81%B9%E3%81%8D%E3%82%BF%E3%82%B9%E3%82%AF)%250A-%2520[%2520]%2520Task%2520No.1%250A-%2520[%2520]%2520Task%2520No.2%250A-%2520[%2520]%2520Task%2520No.3%250A%250A#%2520Involved%2520(%E9%96%A2%E4%BF%82%E8%80%85)%250A@xxxxxx%2520@yyyyyy%250A%250A#%2520Reviewer%2520(%E3%83%AC%E3%83%93%E3%83%A5%E3%83%AF%E3%83%BC)%250A@zzzzzz%250A"})()
```

このブックマークレットを保存して実行すると、GithubのIssue画面やPull-Request画面でひな形を適用できる。

 

![before](https://qiita-image-store.s3.amazonaws.com/0/10272/8991ac1f-65b6-d934-abad-8e5af3acc0fd.png)

↑これが、こうなる↓

![after](https://qiita-image-store.s3.amazonaws.com/0/10272/80c73ef7-df28-8f93-964a-60931b39232a.png)


パーセントエンコードされていて読みにくいですが、デコードするとこんな感じ

```
?
title
=
[WIP]%20xxのyyを修正する
&
body
=
%23%20Summary%20(仕様の概要)%0A-%20First%20spec%20to%20accept.%0A-%20Second%20spec%20to%20accept.%0A-%20Last%20spec%20to%20accept.%0A%0A%23%20Ref%0A%239999%20(関連するIssue)%0A%0A%23%20ToDo%20(このPRですべきタスク)%0A-%20[%20]%20Task%20No.1%0A-%20[%20]%20Task%20No.2%0A-%20[%20]%20Task%20No.3%0A%0A%23%20Involved%20(関係者)%0A@xxxxxx%20@yyyyyy%0A%0A%23%20Reviewer%20(レビュワー)%0A@zzzzzz%0A
```

基本的には下のパーセントエンコードを施せば使えますが、最後にもう一度 `%(パーセント)` 自体を `%25` に変換する必要があることに注意。

| 文字 | エンコード後 |
|:--------:|:--------:|
| スペース | %20 | 
| 改行 | %0A |
| # | %23 | 
| % | %25 |
goandroidをDockerでビルド


[goandroid](https://github.com/eliasnaur/goandroid)の説明と[GoAndroidでʕ ◔ϖ◔ʔGo~](http://qiita.com/Ladicle/items/fc694c726a84f4c3b7ff)を参考にさせていただき、goandroidの環境をDockerで作ってみました。

# Repository

Docker HubでAutomated Buildしてあります。
[ksoichiro/goandroid Repository](https://registry.hub.docker.com/u/ksoichiro/goandroid/)

# goandroidビルド時の注意点

躓いたポイントについて、
上記イメージを使う場合は関係ありませんが、
Docker以外でビルドする場合に参考になるかもしれないのでメモしておきます。

普通に手順通りに進めると、patch適用後にgolangをソースコードからビルドする際、以下のように`release`のタグを選ぶようになっています。

```sh
$ hg clone -u release https://code.google.com/p/go
```

しかし、2014/6/24現在ではこれではうまくいきませんでした。
patchの適用に失敗します。

```
patching file src/pkg/runtime/proc.c
Hunk #1 succeeded at 75 with fuzz 2 (offset 7 lines).
Hunk #2 succeeded at 196 with fuzz 2 (offset 24 lines).
```

`release`タグは最新版につけられているようで、変動していくと思われます。

そこで、patchに含まれるチェンジセットの値を参考に過去のコミットを選択してみましたが、今度は`build.c`で除外ファイルのチェックに引っ掛かり、失敗しました。

```
go tool dist: /usr/local/src/go/src/cmd/prof should not exist in release build
```

最終的に、タグ`go1.2`を選ぶことでこれを回避し、ビルド成功しました。

# 使い方

`goandroid`に付属のサンプル`hello-gl2`をビルドする例です。

```sh
$ cd goandroid/hello-gl2
$ docker run -t -i -v `pwd`:/workspace ksoichiro/goandroid ./build.sh
runtime/cgo
hellogl2
```

上記ではコンテナの`/workspace`というパスをローカルのカレントディレクトリに割り当てています。

サンプルではこの配下の`android`ディレクトリに`build.xml`が含まれていますので、これをAntでビルドできれば成功です。

```sh
$ cd android
$ ant debug
```
ubuntuのrootパスワード設定、変更(CLI)

VMware playerにubuntu13.10をインストール。
簡単インストールでインストールすると
設定がどうなっているかわからない状態になるので
設定を修正するためのメモ。

CentOS などだと簡単インストールで作成するユーザに
設定されたパスワードがrootにも適用されるが、
ubuntu だとそうではない模様。
いちいち sudo するのがめんどくさい場合は
su で root 権限に上がるために root のパスワードを設定する。

```
$ sudo passwd root
[sudo] password for <user名>        ← 現在のユーザのパスワードを入力
Enter new UNIX password:            ← 設定するパスワードを入力
Retype new UNIX password:           ← 設定するパスワードを入力
passwd: password updated successfully
$
```

その後 su でユーザ変更を行う。

```
$ su -
password:
#            ← プロンプトが#に変わる
```

これでコマンド打ち放題。
「CodeIQ ２周年！」をWhiteSpaceで出力

|言語|CodeIQ ２周年おめでとうございます。|
|:--|:--|
|Brainf\*\*k|http://ideone.com/xwXeFp<br>https://github.com/cielavenir/codeiq_solutions/blob/master/q835/death2_bf.c|
|Intercal|http://ideone.com/JbAqfF<br>http://qiita.com/cielavenir/items/0c9720f7df6d796a547a|
|Lazy K|http://melpon.org/wandbox/permlink/kZSCbtHgnGnHxHeE<br>http://qiita.com/cielavenir/items/f4428c6a2aefbf8af532|
|Unlambda|http://ideone.com/vQ1EQE<br>https://github.com/cielavenir/codeiq_solutions/blob/master/codeiq2nd_unlambda.rb|
|WhiteSpace|http://ideone.com/VrQVsv<br>http://qiita.com/cielavenir/items/ebca62f3e689c049ac24|

```rb:codeiq2nd_whitespace.rb
#!/usr/bin/ruby
#coding:utf-8

def gen_label(n)
	raise 'gen_label' if !n.is_a?(Integer) || n<0
	n.to_s(2).tr('01'," \t")+"\n"
end

def gen_number(n)
	raise 'gen_number' if !n.is_a?(Integer)
	(n<0 ? "\t" : ' ')+gen_label(n.abs)
end

STR="CodeIQ ２周年！\n"
STR.each_byte{|e|
	c = e
	print '  '+gen_number(c)
	print "\t\n  "
}
#ideoneだと正常終了時に末端に変な出力がある。
#なのでCodeIQの問題では(一部例外を除き)正常終了させてはいけないというローカルルールがある。
#print "\n\n\n"
```

出力：http://ideone.com/VrQVsv

なお、HaskellのputCharの仕様により、ローカル実行の場合はeach_codepointに変更してプログラムを生成しなおさなければなりません(怒)。
「CodeIQ ２周年！」をIntercalで出力

|言語|CodeIQ ２周年おめでとうございます。|
|:--|:--|
|Brainf\*\*k|http://ideone.com/xwXeFp<br>https://github.com/cielavenir/codeiq_solutions/blob/master/q835/death2_bf.c|
|Intercal|http://ideone.com/JbAqfF<br>http://qiita.com/cielavenir/items/0c9720f7df6d796a547a|
|Lazy K|http://melpon.org/wandbox/permlink/kZSCbtHgnGnHxHeE<br>http://qiita.com/cielavenir/items/f4428c6a2aefbf8af532|
|Unlambda|http://ideone.com/vQ1EQE<br>https://github.com/cielavenir/codeiq_solutions/blob/master/codeiq2nd_unlambda.rb|
|WhiteSpace|http://ideone.com/VrQVsv<br>http://qiita.com/cielavenir/items/ebca62f3e689c049ac24|

```rb:codeiq2nd_intercal.rb
#!/usr/bin/ruby
#coding:utf-8

STR="CodeIQ ２周年！\n"
last=0
siz=STR.bytes.to_a.size
please=(siz+3)/4-2
puts "DO ,1 <- ##{siz}"
STR.each_byte.with_index{|e,i|
	c = e
	c = (c & 0x55) << 1 | (c & 0xaa) >> 1
	c = (c & 0x33) << 2 | (c & 0xcc) >> 2
	c = (c & 0x0f) << 4 | (c & 0xf0) >> 4
	last2 = c
	c = (last-c)&0xff
	last = last2
	print 'PLEASE ' if i<=please
	puts "DO ,1 SUB ##{i+1} <- ##{c&0xff}"
}
puts 'PLEASE READ OUT ,1'
puts 'PLEASE GIVE UP'

__END__
[cesspool.c]
unsigned int lastout = 0;
c = lastout - a[i];
lastout = c;
c = (c & 0x0f) << 4 | (c & 0xf0) >> 4;
c = (c & 0x33) << 2 | (c & 0xcc) >> 2;
c = (c & 0x55) << 1 | (c & 0xaa) >> 1;
putchar(c);
```

```intercal:codeiq2nd_intercal.i
DO ,1 <- #20
PLEASE DO ,1 SUB #1 <- #62
PLEASE DO ,1 SUB #2 <- #204
PLEASE DO ,1 SUB #3 <- #208
PLEASE DO ,1 SUB #4 <- #128
DO ,1 SUB #5 <- #20
DO ,1 SUB #6 <- #8
DO ,1 SUB #7 <- #134
DO ,1 SUB #8 <- #13
DO ,1 SUB #9 <- #186
DO ,1 SUB #10 <- #244
DO ,1 SUB #11 <- #162
DO ,1 SUB #12 <- #30
DO ,1 SUB #13 <- #116
DO ,1 SUB #14 <- #110
DO ,1 SUB #15 <- #10
DO ,1 SUB #16 <- #112
DO ,1 SUB #17 <- #54
DO ,1 SUB #18 <- #186
DO ,1 SUB #19 <- #188
DO ,1 SUB #20 <- #49
PLEASE READ OUT ,1
PLEASE GIVE UP
```
Swiftで現在日時を取得し、独自のフォーマットで出力する方法


# 開発環境
* Xcode 6 Beta
* Mac OS X 10.9.3

# 実行環境
* iOS Simulator (iPhone5s / iOS 8.0)

# コード
```swift
let now = NSDate() // 現在日時の取得

let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale(localeIdentifier: "en_US") // ロケールの設定
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss" // 日付フォーマットの設定

println(dateFormatter.stringFromDate(now)) // -> 2014/06/25 02:13:18
```

# 日付フォーマットの詳細

|記号|意味|
|:--|:--|
|yyyy|年|
|MM  |月|
|dd  |日|
|HH  |時|
|mm  |分|
|ss  |秒|

# 参考文献

[Foundation Framework Reference - NSDate](https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/)

[Foundation Framework Reference - NSDateFormatter](https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/)
fluentd の timezone バグにはまった(v0.10.45)

# fluentd のバグにはまった
fluentd 最新版 [2014/06/19: version v1.1.20](http://docs.treasuredata.com/articles/td-agent-changelog#20140619-version-v1120) をインストール（自動だと）すると、fluentd v0.10.50 がインストールされるのだけど、このバージョンでは timezone がうまく処理されないバグがあるようです。

具体的には、timezone の処理がバグっているため ```type file``` で出力すると下記の様になる。JST(+0900) 以外も同様の現象がでてるんじゃないかな？

```lang:bug
2014-06-25T18:02:17Z    apache.access   {"host":"192.168.11.1","user":null,・・・
```

本来は

```lang:ok
2014-06-26T03:02:17+09:00    apache.access   {"host":"192.168.11.1","user":null,・・・
```

## 回避方法
fluentd v0.10.45 では、本現象がでていないので指定のバージョンを yum でインストール（ダウングレード）する。
32/64bit でパッケージ名が異なるので、そこらへんは適宜 http://packages.treasure-data.com/redhat/ で調べること。

```lang:command
$ sudo yum remove td-agent-1.1.20-0.x86_64
$ sudo yum install td-agent-1.1.19-0.x86_64
$ td-agent --version
td-agent 0.10.45
```

# yum で自動更新している場合
yum の fastestmirror を導入していると折角ダウングレードしたのが最新化されてしまうので ```/etc/yum.conf``` に以下を追加する。

```
exclude=td-*
```

> [yum によるパッケージ管理](http://linux.kororo.jp/cont/intro/yum.php)

# テンプレ・・・が
初心者っぽい初期の設定で悩んでいました。この時期に fluentd を導入するぞ！って人・・・私も含めつまずくよな～。と私も、２日悩んだｗ

お約束のテンプレ、指定が間違っていないのに・・・出力結果が違うよ！！て、そりゃ悩むよね。

```/etc/td-agent/td-agent.conf
<source>
  type tail
  path /var/log/httpd/access_log
  tag apache.access
  pos_file /var/log/td-agent/httpd-access.log.pos
  format apache2
</source>

<match apache.access>
  type copy

  <store>
    type stdout
  </store>

  <store>
    type file
    path /tmp/aaaaa
    time_slice_format %Y%m%d_%H%M
    time_slice_wait 1m
  </store>
</match>
```
ArduinoでBluetoothを使ってハマったこと（解決）

ArduinoとAndroid端末の通信を行う前段階として、ArduinoとPCにて通信を行おうとしたところ、うまくいかない。
まだ解決していないがメモ。うまく行ったら記事更新します。

6/26追記：無事通信できたのでまとめなおしました。

#環境
- Arduino Uno
- IDE 1.0.5
- Bluetoothモジュール RN41
- Mac OS 10.9.3

#手順
基本的にhttp://thinkit.co.jp/story/2013/03/06/3995を参考とした。

##RN41とArduinoを接続
 - RX1(受信器)⇒TX(送信機) 
 - TX⇒RX
 - vcc⇒vin※1
 - GND⇒GND

残り2本のピンは使わない
 
##Arduinoにプログラムの書き込み
- プログラムを書き込む際にはTXとRXは外しておく(書き込めない)。
- プログラムは通常のシリアル通信と同様。Bluetoothのバンドがデフォルトで115200になっているので、シリアル通信のバンド115200にセットするだけでよい。
````
//original http://thinkit.co.jp/story/2013/03/06/3995/page/0/1
//n押すとArduino付属の13番のLEDが光り,fを押すと消える
    void setup() {
      			 Serial.begin(115200);
       			pinMode(13, OUTPUT);
     			}
     void loop() {
       			if (Serial.available() > 0) {
        			char c = Serial.read();
    				if (c == 'n') {
      					digitalWrite(13, HIGH);
    				} else if(c == 'f') {
      			digitalWrite(13, LOW);}
     			 }
    				}      
````




##PCにてBluetoothをペアリング
- 環境設定からbluetoothを開く
- 対象の端末を選択(自分はRNKS-CN-39)
- ペアリングのパスワードは初期設定1234
- MacOs10.9.3では参考サイトのBluetoothの「シリアル通信の編集」ができなかったが、できなくても問題なく接続できた
- 後述するが非常に不安定であり、一度「未接続」になると以下手順が必要だった（めんどくさかった）
 - いったんRNKS-CN-39を削除
 - bluetoothを切る
 - 再ペアリング(パスワード入力)

##通信
- ターミナルにて````screen/ dev/tty.RNKS-CN-39````と入力(RNKS-CN-39は自分のやつにあわせてください)
- nを入力

#ハマったところ
- 文字の送信ができない
 - プログラムは正常に書き込まれている（通常のUSBを通じたシリアル通信では動作）
 -  Bluetoothの接続はできている 
 - n入力後could not find PTYとエラーが出る
 - Ztermでも試してみたがだめ

#原因/解決法
単純に接続が不安定すぎて、未接続の状態になっていたようだ。
Mac側の問題であり、再起動・PRAMクリア※2を行うことで解決できた。


#注
※1 vinは外部電源(USBポートではなく)を使う場合に使うポートのようだ。今回はUSBから給電しているためvinを使う必要はないと思われるが、今後のこと(bluetooth使うんだから動かせる電源につなぐっしょ？)を考えてvinにしている。
- http://www.senio.co.jp/bbs/viewtopic.php?f=7&t=85

※2PRAMクリアについて
- http://apple-relationship.com/mac/mac%EF%BC%9Aiphone%E3%81%A8%E3%81%AEbluetooth%E6%8E%A5%E7%B6%9A%E3%81%8C%E9%A0%BB%E7%B9%81%E3%81%AB%E5%88%87%E3%82%8C%E3%82%8B%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95/
Particle2dxで作ったパーティクルの生成を4〜5倍高速化する

# cocos2dxでパーティクルを使いたい

パーティクル生成ツールはいくつかありますが、WEBで生成できるParticle2dxというツールがあります。
http://particle2dx.com/

ここで設定したパーティクルをplistとして出力すると、cocos2dxでパーティクルの設定として読み込むことができます。

# パーティクル出た！ でも...

ぶっちゃけplistを読み込んでるせいか、パーティクル生成がめっちゃ重いです。
いくつか理由がありますが、

* initWithFile時に、一度読んだplistファイルのキャッシュもってなさそう
  * [GitHub](https://github.com/cocos2d/cocos2d-x/blob/v2/cocos2dx/particle_nodes/CCParticleSystem.cpp#L172)
* initWithDictionaryの辞書アクセスが重そう
  * [GitHub](https://github.com/cocos2d/cocos2d-x/blob/v2/cocos2dx/particle_nodes/CCParticleSystem.cpp#L198) 

とかが主な原因ぽい。

# 本題：plistをクラス化しちゃえばいいんじゃね？

ようやく本題。
たぶん同じParticleシステムを使ってる方はとっくに独自実装してると思いますが、plistをC++プログラムに変換するスクリプトを書きました。
コードの中身はv2系のinitWithDictionaryを忠実に移植してます。
自由に使ってアレンジしてくださって大丈夫ですが、ご利用はご利用は自己責任でお願いします。

# スクリプト
長いのでGitHubにあげときます。
https://github.com/nubilum/convert-particle-plist

# ベンチマーク
```cpp:SampleScene.cpp
    CCParticleSystemQuad* particle = CCParticleSystemQuad::create("particleTexture.plist");
    CCParticleBatchNode* node = CCParticleBatchNode::createWithTexture(particle->getTexture(), 10000);
    double start = clock();
    for ( int i = 0; i < 20; i++ ) {
        CCParticleSystemQuad* particle = CCParticleSystemQuad::create("particleTexture.plist");
        particle->setPosition(ccp((i % 5) * 100, (i / 5) * 100));
        node->addChild(particle);
    }
    CCLOG("plist time: %f", ((double)clock() - start) / CLOCKS_PER_SEC);
    
    MeteorParticle* particle2 = MeteorParticle::create();
    CCParticleBatchNode* node2 = CCParticleBatchNode::createWithTexture(particle2->getTexture(), 10000);
    double start2 = clock();
    for ( int i = 0; i < 20; i++ ) {
        MeteorParticle* particle = MeteorParticle::create();
        particle->setPosition(ccp((i % 5) * 100 + 400, (i / 5) * 100));
        node2->addChild(particle);
    }
    CCLOG("class time: %f", ((double)clock() - start2) / CLOCKS_PER_SEC);
```
```bash:result
1回目
Cocos2d: plist time: 0.019896
Cocos2d: class time: 0.002814
2回目
Cocos2d: plist time: 0.016060
Cocos2d: class time: 0.004208
```
plistとclass化したものとで、大体4〜5倍(?)くらい生成速度が改善しました。
肝心の描画更新処理は、たぶんどっちも変わらんです。
# 余談
（´-`）.｡oO（でもぶっちゃけ、このパーティクルシステムをそのまま本番でも使うことあんまないんじゃ...）
ユーザーfacebookページに飛ぶ短縮URLの注意点

facebookの短縮URLにはfb.meとfb.comがあります。
この短縮URLを作成してfacebookのユーザーページに飛ぶ場合はfb.comを使わなくてはいけないようです。
###短縮URL fb.comを使った場合  
* http://fb.com/{ユーザーのfacebook id}とすると、ユーザーのfacebookページにリダイレクトされます。
  * 例：ザッカーバーグのページへのリンク <http://fb.com/4>  
->ザッカーバークのページへ正しく飛ぶ

###短縮URL fb.meを使った場合  
* http://fb.me/{ユーザーのfacebook id}を使うと、Facebookアプリのダウンロードのページにリダイレクトされます。モバイルの場合、エラーページへ遷移しまうようです。
  * 例：ザッカーバーグのページへのリンク <http://fb.me/4>  
  -> アプリダウンロードページへ遷移
[bootstrap]modalの背景色を特定のmodalを開くときに変更する

modalのデフォルトの背景色を特定のmodalのみ変更したかったので対応したときのメモ。

modalを開くとbodyに下記div要素が追加される。
`<div class="modal-backdrop fade in"></div>`
.modal-backdropで
`background-color: #000`
が設定されているので黒系の背景となる

<img src="https://qiita-image-store.s3.amazonaws.com/0/47343/ac15988d-d029-2169-fce7-debad6d3fc17.png" width="50%">

特定のmodalの時だけカラーを変えたかったのでshowとhiddenイベントでbodyにclassを追加して対応する
hideだと途中で黒に戻ってしまうのでhiddenで設定。

```javascript:sample.js
  var _openDefaultModal = function() {
    $('#bg-test1')
    .modal('show');
  };
  var _openBlueModal = function() {
    $('#bg-test1')
      .on('show.bs.modal', function(e) {
        $('body').addClass('modal-bgcolor-blue');
      })
      .on('hidden.bs.modal', function(e) {
        $('body').removeClass('modal-bgcolor-blue');
      })
      .modal('show');
  };
```

```css:sample.css
.modal-bgcolor-blue .modal-backdrop {
  background-color: #428bca;
}
```

こんな感じでbackdropの色が変更できた

<img src="https://qiita-image-store.s3.amazonaws.com/0/47343/dcf16797-b911-853c-e948-6e334cb0889f.png" width="50%>
Hubotの応答に権限追加

社内でHipchatなどでhubotで`hubot deploy to production`とかでdeployをできるようにしているのですが、これって誰でもデプロイができて結構危ない。

じゃあ、権限追加しようと思って[hubot-privilege](https://github.com/dtaniwaki/hubot-privilege)作ってみました。
Hubotのreceiveをフックして、内部に持っている権限テーブルをチェックして反応するかどうかを判断します。

```
hubot ignore user1
```

とやると、以降hubotはuser1のメッセージを無視します。

```
hubot forgive user1
```

で、無視をやめます。

自虐的な

```
hubot ignore me
```

もありますw

現在の権限は

```
hubot privilege
```

で確認。

```
hubot privilege clear
```

で権限テーブルをクリアできます。

遊んでみてください〜。

## TODO

- 権限テーブルでグループを管理できるようにする
- 特定のアクションだけ無視させる

この辺がカバーできれば、けっこう重宝しそう。

でも、権限テーブルの構成にだいぶ手が入りそうなので、互換性を保つのが大変そうだ。。。
思い切って互換性なくすかもしれないです。
swiftでFizzBuzz

さっきは[オブジェクト指向＋C#でFizzBuzz](http://qiita.com/siluejp/items/5b9872056c0c66b31627)でしたが、
今回は、swift。

どんなもんかなってことで、「hello world」的な感じ書いてみました。

```swift
// Playground - noun: a place where people can play

import Cocoa

let MAX = 20
var output = ""

for i in 1...MAX {

    output = ""
    
    if ( i % 3 == 0 ) {
        output += "Fizz"
    }
    
    if ( i % 5 == 0 ) {
        output += "Buzz"
    }
    
    if ( output == "") {
        output = String(i)
    }
    
    println(output)
    
}
```

ちなみに第１印象はcoffeescriptでした。
今回は使ってませんが、クロージャー等のstabby lambdaの使い方とか。
（まぁRubyっぽくもあるけど）

それと、全然関係ないですが、Playgroundすぐ落ちる。
マシンが弱い？or betaだから？

次はオブジェクト指向的に書いてみたいと思います。
Unity C# GameObjectのインスタンス化


```C#
using UnityEngine;

public class Sample : MonoBehaviour {

    [SerializeField] 
    GameObject pCube; // InspectorでPrefabを登録しておく

    void Start () {

        GameObject gCube = Instantiate(pCube) as GameObject;
        // Object型をGameObjectにキャスト

        gCube.transform.parent = transform; // 自身の子に移動
    }
}
```

GameObject型にキャストする必要がある。
peco + spotlightで超高速にファイル名検索して開く

## 目的

SpotlightのCUIであるmdfindを使って、ホームディレクトリ内を対象にファイル名で検索して開く。

## 設定

.bashrcとかに。

```bash
_peco_mdfind() {
  open "$(mdfind -onlyin ~/ -name $@ | peco)"
}
alias s="_peco_mdfind"
```

とやっておけば

```shell-session
~/ 23:47:57  $ s nginx.conf
```

でホームディレクトリ内にあるnginx.confの検索結果が出てきて選択すれば紐付けられてるアプリケーションが開く。

## tips

* mdfindの`-onlyin`で検索対象のディレクトリを指定出来る。
* mdfindの`-name`を省けばファイルの中身でも検索可能。

--

Alfredの`'`で似たようなことが出来るので、ホントに便利なのかは分からない。
Vim スペースに割り当てたマッピングの解除

# マッピング解除の話  
最近vimrcをいじっていたら、スペースを打つと、入力されるまでに二秒ほどラグが起きていることに気付いた。  

原因は、スペースにマッピングを割り当てたこと。
スペースは、画面に表示されないため、二秒の待ち時間が与えられるっぽい。
その微妙なラグが嫌で、解除する方法を探した。

## 解除方法
1. `:verbose imap`で挿入モードのマッピングを確認する
2. `<SPACE>`に割り当てられているマッピングがあるときは、どこからそのマッピングが行われているかを確認する
3. vimrcから`<SPACE>`に関するマッピングを削除する
3. もし、過去のマッピングが残っている場合は、`:imapclear`を打って、マッピングを解除した後`:source .vimrc`で再度マッピングを読み込む

これで、何とかなりました。
vimrcには書いていないが、以前書いてあったマッピングが残っていたことが原因でした。

これで、気持ちよくスペースが押せそうです。
PHPのイテレータでフィボナッチ数列を計算

[フィボナッチ数 - Wikipedia](http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0)

定義通り再帰で実装すると、非常に非効率になることで知られる(ゆえにベンチマーク用に使われたりする)フィボナッチ数列計算ですが、イテレータで解いてみるテスト。

```php
<?php

class Fib implements Iterator
{
    private $prevprev = -1, $prev = 1, $i = 0, $k = 0;

    function key() { return $this->k; }

    function current() { return $this->i = $this->prevprev + $this->prev; }

    function next() {
        $this->prevprev = $this->prev;
        $this->prev = $this->i;
        ++$this->k;
    }

    function rewind() {
        $this->prevprev = -1;
        $this->prev = 1;
        $this->k = 0;
    }

    function valid() { return true; }
}

$fib = new Fib;

foreach ($fib as $i => $v) {
    echo "$i\t$v\n";
    usleep(50000);
} //無限ループ

```

[フィボナッチで各種言語をベンチマーク - satosystemsの日記](http://d.hatena.ne.jp/satosystems/20121228/1356655565)

fib(38)が欲しいなら、LimitIteratorの合わせ技で求められるよ！

```php
$fib38 = new LimitIterator(new Fib, 0, 38 + 1);
foreach ($fib38 as $_);

echo $_;
```
[vDSP][信号処理]オーディオ・音声分析への道8 FFT 音の明度

#[vDSP][信号処理]オーディオ・音声分析への道7 FFT 音の明度

##概要

今回は、FFTで得られたスペクトラル情報を分析し、音の明度を計る尺度の一つ、スペクトラル中心（Centroid）について書きます。
FFTのプログラムについては触れません。過去の[この記事](http://qiita.com/programanx1/items/ba0e7828b7bab060ccf2)や、[この記事](http://qiita.com/programanx1/items/ba0e7828b7bab060ccf2)を参考にしてください。

スペクトラル中心とは、スペクトラムの重心の位置(単位はHz)を計算しる事で得る事ができます。例えば、440hzの純音のCentroidは理論上440HzのCentroidを持つ事になります。また、純音に高周波数を足し合わせていくと、その程度に沿ってCentroidの値は大きくなっていきます。

##数式

Centroidの算出方法は、以下の様に定義されます。

```math
Centroid_t = \frac{\sum_{n=0}^{N-1} (F_n \cdot M_n)}{ \sum_{k=0}^{N-1} M_n}

```

FFTフレームtに於ける、周波数Fと音の強度Mの積の総和を、音の強度Mの総和で割った値になります。NはFFTサイズになります。

##総和 : vDSP_sve

vDSPには総和を行う関数が用意されています。

```C:
void vDSP_sve (
   float *__vDSP_A,
   vDSP_Stride __vDSP_I,
   float *__vDSP_C,
   vDSP_Length __vDSP_N
);
```

##Centroid 
[wikipedia](http://en.wikipedia.org/wiki/Spectral_centroid)

音の強度、Magnitudeの算出は以下の通りです。

```C:
 MagnitudeSum = sqrt(real * real + img * img);
```

vDSPの関数を使うと

```C:
vDSP_zvabs(&splitComplex,1,magnitude,1,ffthalfsize);
```

FFTの各binに対応する周波数の算出方法は、

```C:
float freq_bin = SamplingRate/fftsize;
```

よってCentroid式の分子部分は、

```C:
float cen = 0;
for(i=0;i<ffthalfsize;i++){
    cen = freq_bin * i * magnitude[i];
}
```

となり、centroidは

```C:
centroid = cen/MagnitudeSum;
```

となります。単位はHzです。
音の明るさを示す尺度となるCentroidですが、Centroidの数値単体では信頼性にかける場合があります。

例えば、以下のようなスペクトラルを例に出します。

![spread2.jpg](https://qiita-image-store.s3.amazonaws.com/0/46509/41527b33-3397-790a-99c1-cd33bf221e05.jpeg)
上の図はスペクトラルの中心に強い強度を持つ信号を示しています。
この場合得られるCentroidは、スペクトラルの中心地点、サンプリングレートが44.1Hzならば、10kHzくらいになります。

ところが次のスペクトラルを見てみてください。

![spread1.jpg](https://qiita-image-store.s3.amazonaws.com/0/46509/c6c3e303-4e97-6964-1668-8c54a4ce82f2.jpeg)
今度は、最低音と最高音に大きな強度を持つ信号で、スペクトラルの中心を境に線対称になっています。
このCentroidはどのような値になるでしょうか。Centroidはスペクトラルの重心を計算する事になりますので、初めの図と同じく、10kHz付近の値が得られます。これでは、全く異なる性質を持つ音信号でも、同じCentroidの値を持ってしまいます。


以上を解決する為にCentroidは、それ単体で音の性質を評価するよりも、以下のSpectral spreadという尺度と一緒に扱うと、より高い信頼性を得る事ができます。

##Spectral Spread

Spectral Spreadは、スペクトラル上に於いて、各ビンの強度がどの様に分布しているかを表します。分布度は以下の数式で定義されます。

```math
Spread = \frac{\sum_{n=0}^{N-1} (|F_n - C \cdot M_n)}{ \sum_{k=0}^{N-1} M_n}

```

この時、CはCentroidを表します。

1FFTframeに於けるSpectral Spreadの計算方法は、

```c:spread
for(i=0;i<ffthalfsize;i++){
    accum_spread += magnitude[i] * fabs(i*freq_bin - Centroid);
    accum_mag += magnitude[i];

}
```

とし、最後に

```C:spread2
    spread = accum_spread / accum_mag;
```

で得られます。
Spreadの値が大きければ、より多様な周波数スペクトラムを含む音信号、逆に小さければ、より純音に近い音信号となります。


##まとめ
今回は、信号のスペクトラル情報を分析し、その信号の性質を測る事を目的としました。一つの尺度のみを利用するだけでは、正確な音の性質はなかなか得る事はできません。複数の尺度を上手く組み合わせる事で、より正確な尺度が得られると思います。いずれにせよ、使用する音信号の性質をあらかじめ把握し、それに適した分析法を取捨選択するのが最良の道かもしれません。
Windows版PHPのcurlの証明書

Windows版のPHPでcurlを使った時に、CA証明書がないというエラーが発生する場合がある。

```php:test.php
<?php
$ch = curl_init("https://www.google.co.jp");
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_exec($ch);
curl_close($ch);
```

```
> php test.php
* Adding handle: conn: 0x3015700
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x3015700) send_pipe: 1, recv_pipe: 0
* About to connect() to www.google.co.jp port 443 (#0)
*   Trying 74.125.235.87...
* Connected to www.google.co.jp (74.125.235.87) port 443 (#0)
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0

```

あと、composerで警告がでることもある。

※2016/8/3現在リリースされているcomposerには証明書が同梱されているようです(https://github.com/composer/ca-bundle)

```
  - Installing pimple/pimple (v1.1.1)
Failed to download pimple/pimple from dist: You must enable the openssl extension to download files via https
Now trying to download from source
  - Installing pimple/pimple (v1.1.1)
    Cloning 2019c145fe393923f3441b23f29bbdfaa5c58c4d
```

解決方法は色々あるがその1つ。

Windowsのコマンドラインからcurlが動く環境であれば、バイナリと同じ場所に証明書が置いてある可能性がある。

自分の環境では、Git for Windowsにcurlが同梱されていたので、
C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
があった。

これをPHPのcurlで使うには、php.iniで`curl.cainfo`を設定する。

```:php.ini
curl.cainfo="c:\Program Files (x86)\Git\bin\curl-ca-bundle.crt" (無くなってます)
curl.cainfo="c:\Program Files\Git\usr\ssl\certs\ca-bundle.crt"
```
FizzBuzzにデザインパターンをかますと。

かの有名なFizzBuzzを、
C#を使って、デザインパターンのストラテジーパターンで実装してみました。

```csharp
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
 
/*
 * FizzBuzz (ストラテジーパターン版)
 *
 * 特徴
 * １．FizzBuzzになるための条件と、条件が成立した場合のアクションをクラスに委譲。
 * ２．機能追加はクラス作成してファクトリー部分（コンストラクタ）に追加。
 */
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int input = 1;
            int max   = 100;
 
            FizzBuzz objFizBuz = new FizzBuzz();
            string msg = "";
 
            try
            {
                for (int i = input; i <= max; i++)
                {
                    msg += objFizBuz.DoFizzBuzz(i);
                }
 
                Console.WriteLine(msg);
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }
    }
 
    // strategyパターン用IF
    interface IStrategy
    {
        bool IsFizzBuzz(int i);
        string DoFizzBuzz();
    }
 
    // strategy インターフェイスを用いてアルゴリズムを実装
    class Fizz : IStrategy
    {
        public bool IsFizzBuzz(int i)
        {
            return (i % 3) == 0;
        }
 
        public string DoFizzBuzz()
        {
            return "Fizz";
        }
    }
 
    class Buzz : IStrategy
    {
        public bool IsFizzBuzz(int i)
        {
            return (i % 5) == 0;
        }
 
        public string DoFizzBuzz()
        {
            return "Buzz";
        }
    }
 
    class FizzBuzz
    {
        private List<IStrategy> strategy = new List<IStrategy>();
 
        public FizzBuzz()
        {
            // クラスを新規作成して、ここに追加すれば良い
            this.strategy.Add(new Fizz());
            this.strategy.Add(new Buzz());
        }
 
        public string DoFizzBuzz(int i)
        {
            if (i == 0) return "";
 
            string msg = "";
 
            bool isAllFizzBuzz = true;
 
            foreach (IStrategy st in this.strategy)
            {
                if (st.IsFizzBuzz(i))
                {
                    msg += st.DoFizzBuzz();
                }
                else
                {
                    isAllFizzBuzz = false;
                }
            }
 
            // 全ての条件が正の場合
            if (isAllFizzBuzz)
            {
                msg = "";
 
                // 全部のメッセージをマージして出力
                foreach (IStrategy st in this.strategy)
                {
                    msg += st.DoFizzBuzz();
                }
            }
            else if (string.Empty == msg) {
                msg = i.ToString();
            }
 
            return msg + Environment.NewLine;
        }
    }
}
```

例えば、Buzzを外したい場合は、
class FizzBuzzのコンストラクタの

```csharp
this.strategy.Add(new Buzz());
```
を外すだけ。

また、新しく「Bizz」を追加するとした場合は、
IStrategyを実装（細かいですが継承ではないですよ）したBizzを作成し、
IsFizzBuzzとDoFizzBuzzをそれぞれ実装し、
class FizzBuzzのコンストラクタの叫びたい任意の場所に、
以下を追加するだけ

```csharp
this.strategy.Add(new Bizz());
```

これで、実装は本当に必要な箇所のみに絞り、他は全く手をつけずに、
追加、削除、並び替えが出来るようになりました。

めでたしめでたし
bitbucketのwikiで議事録を管理、Home.mdに逆順にソート・リンクしたい人の為のスクリプト

# bitbucketのwikiで議事録を管理、Home.mdに逆順にソート・リンクしたい人の為のスクリプト
git+markdownで管理しやすいWikiがないので、職場でbitbucketのプライベートリポジトリで管理しています。
しかし毎回毎回Home.mdにリンクを追加するのも面倒だったので、スクリプト化してみました。

## 環境
- Mac
- php

## デフォルトの命名規則
```
Y-m-d_title.md (例： 2014-06-24_全体ミーティング議事録.md)
Y-m-d.mdだと日時がタイトルに入ります。
```

## デフォルトの出力
```Home.md
# 全ページ
## 2014-06
- [2014-06-24] [全体ミーティング議事録](https://bitbucket.org/username/reposname/wiki/2014-06-24_全体ミーティング議事録)
- [2014-06-21] [全体ミーティング議事録](https://bitbucket.org/username/reposname/wiki/2014-06-21_全体ミーティング議事録)
## 2014-05
- [2014-05-24] [チームミーティング議事録](https://bitbucket.org/username/reposname/wiki/2014-06-24_チームミーティング議事録)
- [2014-05-20] [2014-05-20](https://bitbucket.org/username/reposname/wiki/2014-05-20)
```

## 使い方
wikiの.gitフォルダと同じ階層にファイルを置き

```console:Terminal.app
$ php push "commit comment"
```

と実行するだけです。
コメントが無い場合にはデフォルトで「no comment」がコミットコメントに入ります。

## 注意
- 命名規則から外れたファイルがあるとバグるかもしれない
- デフォルトでは自動でgit pushまで走ります
- Fetch/Merge等は入れていないので、必要な場合には実装or削除願います。

## スクリプト
```php:push
<?php
    define("DIR",dirname(__FILE__));
    $config = parse_ini_file(DIR."/.git/config",TRUE);
    $git_url = str_replace(".git/","/",$config["remote origin"]["url"]);
    define("GITURI",$git_url);

    $comment = (isset($argv[1])) ? $argv[1] : "no comment";
    $files = getFileList(DIR);

    if(createHome($files)) {
        print "Home.md update!".PHP_EOL;
        $output = shell_exec('git add -A 2>&1');
        $output .= shell_exec('git commit -m "'.$comment.'" 2>&1');
        $output .= shell_exec('git push origin master 2>&1');
        print $output;
    } else {
        print "Home.md update failed!";
    }
    exit;


    function getFileList($dir) {
        $list = getMDDesc($dir);
        foreach($list as $file_name) {
            $meta = explode("_",$file_name);
            $result[substr($meta[0],0,7)][] = array(
                "file"=>str_replace(".md","",$file_name),
                "date"=>str_replace(".md","",$meta[0]),
                "title"=>createTitle($meta)
            );
        }
        return $result;
    }

    function getMDDesc($dir) {
        $handle = opendir($dir);
        while($file_name = readdir($handle)){
            if(is_file($file_name) && $file_name !== "Home.md" && $file_name !== "_template.md" && $file_name !== $_SERVER["PHP_SELF"]) {
                $array[] = $file_name;
            }
        }
        closedir($handle);
        return array_reverse($array);
    }

    function createTitle($meta) {
        if(isset($meta[1])) {
            return str_replace(".md","",$meta[1]);
        } else {
            return str_replace(".md","",$meta[0]);
        }
    }

    function createHome($list) {
        $md = "# 全ページ\n";
        foreach($list as $month=>$items)  {
            $md .= "## {$month}\n";
            foreach($items as $item) {
                $md .= sprintf("- [%s] [%s](%s/%s)\n",$item["date"],$item["title"],GITURI,$item["file"]);
            }
        }
        return file_put_contents("Home.md",$md,LOCK_EX);
    }
```
[Ruby]gsubにhashを渡す

1.9.3からgsubの第二引数にhashを渡せるようになっていたことを今日知りました。
[gsubのマニュアル](http://docs.ruby-lang.org/ja/search/query:gsub/type:instance-method/#entry-3)

時々erbを使うほどでも無いテンプレートの変数置換で

```rb
replace_hash = {
  "#to#"   => "taro",
  "#from#" => "jiro"
}

template = <<EOS
hello, #to#.
message from #from#.
EOS
```

というのがある場合、

```rb
puts template.gsub(/#.*#/) {|matched|
  replace_hash[matched]
}
#=>hello, taro.
#  message from jiro.
```

というようなコードをよく書いていたのですが、これが単純に

```rb
puts template.gsub(/#.*#/, replace_hash)
#=>hello, taro.
#  message from jiro.
```

これで、同じことができます。

やっぱりマニュアルは日頃からよく読んでおかないといけませんね。