OmniAICreator/Qiita-1.07M huggingface dataset:
filterMの定義を覗いたら疲れた

`filterM` を使って、べき集合を表すことができる。

```hs
*Main Control.Monad> filterM (\x -> [True, False]) [1..3]
[[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]]
```

`filterM` は、述語にモナド値を返す関数を取ることができるので、この場合は**非決定性計算** の文脈を付けられることになる。つまり、`[1..3]` のそれぞれの要素に対して、対象とするパターンと対象外とするパターンを試し、**答えになり得るリストを全て出力することができる**。これは、べき集合（与えられた集合から、その部分集合の全体として新たに作り出される集合）である。

と、日本語で書いてみると確かにそうなりそうだなぁと思えるのだが、定義を見てみたら頭がこんがらがってしまったので整理することにした。
実際のところ、非決定性計算 ＋ 畳み込み関数 という、内部の操作が膨れ上がりそうな定義を見て胸がウッとなったのが、今回の動機である。


## `filterM` の定義を覗く
```hs
filterM          :: (Monad m) => (a -> m Bool) -> [a] -> m [a]
filterM p        = foldr go (return [])
  where
    go x r = do
      flg <- p x
      ys <- r
      return (if flg then x:ys else ys)
```

とりあえず、 `filterM` 関数の実体は `foldr` 関数であり、その引数に `go` というモナド値を返す関数を取っていることがわかる。畳み込み操作にこのような関数を使うとどうなるのか。これは、文脈を維持して値を畳み込んでいくということなので、今回はリストのリストがどんどん出来上がっていくことになる。

## `go` 関数を `>>=` で表す

定義に沿って、内容を確かめるために、上記の `go` 関数を書き換える。局所関数なのでこのコードは正しくないが、雰囲気としてはこのようになる。

```hs
go x r =    p x >>= (\flg -> 
            r   >>= (\ys -> 
            return (if flg then x:ys else ys)))
```

リストモナドの定義は次のようになっている。

```hs
instance Monad []  where
    xs >>= f             = [y | x <- xs, y <- f x]
```

つまり、リストモナドの場合、 `>>=` は左辺のリストの各要素に右辺の関数を適用した結果（この結果はリストになる）を連結している。

この操作を `go` 関数に当てはめてみると、**`x` を引数に取って作られた `p x` ( `Bool` のリスト )の各要素を `r`  ( リストのリスト )に置き換えて、この時`Bool` のリストの要素が `True` なら対応するリストのリストの要素の先頭に `x` をくっつけるが`False` なら何もしない**、ということになる。なるほどわかりにくい。

## 図解してみる
ここで、 `filterM (\x -> [True, False]) [1..3]` を`foldr` で表してみると、

```hs
filterM (\x -> [True, False]) [1..3] 
1 =>  foldr go (return []) [1..3]
2 =>  go 1 (go 2 (go 3 (return [])))
3 =>  go 1 (go 2 ([ y | x <- [True, False], y <- (\z -> return []) x ] ])
4 =>  go 1 (go 2 ( [[], []]))
5 =>  go 1 (go 2 ( [[3], []]))
6 =>  go 1 [ y | x <- [True, False], y <- (\z -> return [[3], []]) ]
7 =>  go 1 [ [3], [], [3], []] ]
8 =>  go 1 [ [2,3], [2], [3], [] ]
9 =>  [ y | x <- [True, False], y <- (\z -> return [ [2,3], [2], [3], [] ])]
10 =>  [[2,3], [2], [3], [], [2,3], [2], [3], []]
11 =>  [[1,2,3], [1,2], [1,3], [1], [2,3], [2], [3], []]
```

上の５行目から８行目までを図解してみると、少し理解が進みそう。

![go.png](https://qiita-image-store.s3.amazonaws.com/0/37895/7b4433a7-0185-2f3e-38e8-ff83afbabef1.png)

`go` 関数の第一引数が`Bool` のリストになり、`True` と `False` のそれぞれがアキュムレータで置き換わるために、再帰されるたびに全体の要素数が２倍になっているということがわかる。


## 終わりに

一旦は何をやっているのか腑に落ちたものの、また忘れそうな気がする。このページは私自身何度も見ることになりそう。
コルーチンの止め方と処理間隔について

#序
基本的に扱い方は分ってるという前提ですので、ご了承ください。
実際に使ってみて分った事なので、
既にガッツリ使われている人には、あまりメリットがないかもしれません。
ご参考までにという事で。

#コルーチンの止め方
StopCoroutine(～～) で止める訳だが、引数には3つ取る事が出来る。

* String型
* IEnumerator型
* Coroutine型

大体の場合に置いて、String型がいいよ、という事になっているわけだが、
それは、メソッド名で動かした時に、止めるときに同じ方法で止まらないからだ。

だが、Stringで渡した時に致命的な欠点があって、
MonoDevelop上から、F2で置き換えた場合に、Stringなので当然一緒に置き変わらないというところだ。
これはコンパイルチェック上から外れてしまうので当然なわけだ。
（そんな迂闊なことしない？　まあその通りだが。）

単純にStringが気持ち悪く、
恐らく Coroutine型 で止めるのが一番気持ちいいと思うのだが、
意外と情報がないので記載する事にした。


```C#:coroutinStopTest.cs
using UnityEngine;
using System.Collections;

public class coroutinStopTest : MonoBehaviour {

	void Start () {
		Coroutine retC = StartCoroutine (mainLoop());

		StopCoroutine (retC);
	}

	IEnumerator mainLoop(){
		while (true) {
			Debug.Log ("loop Coroutine");
			yield return new WaitForSeconds (0.5f);
		}
	}
}
```

StartCoroutine の戻り値が Coroutine型なので、
それを引数に StopCoroutine すれば良い。

これもんの、

```C#
	Coroutine retC = StartCoroutine (mainLoop());
```

これということ。

```C#
	StopCoroutine (retC);

```

サンプルソースの場合は、直ぐに停止されるので、ログは出ない。
ちゃんと動いて止まった事を確認したい人は、下の方のソースを見てください。

これがいちばんスマートで直感的だと思うのだが、
検索すると IEnumerator で止める方法が一番最初に上がってくるから不思議だ。


#コルーチンの実行タイミングと時間間隔
これは実際に使った人は大体分っているものと思う。

###**・実行タイミング**
これは、描写間隔と同期される。
つまり、WaitTimeを極小にした場合、Update() と同じタイミングで実行される。

・　yield return new WaitForSeconds (0.00001f);

などとしても、毎フレームに抑えられる。


###**・時間間隔の計測タイミング**
上記のような極小タイミングだった場合、1フレームに沢山実行されない事から分るように、
「フレーム毎に、規定時間を過ぎていた場合に実行する」という処理であるといえる。

`Time.timescale` を少し小さくしてみると、その処理誤差が段々顕著になる。
WaitForSeconds は当然 `Time.timescale` の影響を受けるが、
毎フレームのタイミングを遅らせるものではない為、
規定時間を経過したと判定され、毎フレーム実行される。

止めるコルーチンに、retC を引数で渡している。

```C#:coroutinStopTest2.cs
using UnityEngine;
using System.Collections;

public class coroutinStopTest2 : MonoBehaviour {

	void Start () {
		Time.timeScale = 0.1f;
		Coroutine retC = StartCoroutine (mainLoop());

		StartCoroutine (stopWait(retC));
	}

	IEnumerator mainLoop(){
		yield return new WaitForSeconds (0.2f);　//実行時処理の遅延の解消のため

		while (true) {
			yield return new WaitForSeconds (0.0001f);

			Debug.Log ("time : " + Time.deltaTime);
		}
	}

	IEnumerator stopWait(Coroutine retC){
		yield return new WaitForSeconds (2f);

		StopCoroutine (retC);
		Debug.Log ("stop Coroutine");
	}
}

```

つまり、極小の待機時間にした場合、殆どUpdate()と同じ動きになるという事だ。

#で、何が言いたいかというと
Update() と同じ働きに近いが、`Time.timescale` の影響を受ける。

これを逆に利用して、ポーズ処理の実装が面倒な**雑な**アプリを作る時には、
`Time.timescale = 0` で使えるのではないかという話。

とは言え、ポーズ処理はコンポーネントを無効化するのが一番無難そうですよね。

個人的には、パーティクルシステムが `Time.timescale = 0` で動く方法があれば、
大体ビジュアル的にも問題ないですし、これでオッケーなんじゃないかと思ったりするわけですがｗ

ちなみに、**`yield return null`** とした場合は、
**時間関数を通らないので、`Time.timescale = 0` の影響は受けませんので、**
そこは誤解の無きよう。

あと、今回の内容を踏まえてもらうと分ると思うのですが、
通常の使い方でも、WaitForSecondsでループする時は、
それなりに大きい待ち時間じゃないと時間誤差が大きく出るので、あまりよくないです（と思います）。

手抜き上等な方は、こっそり使ってみてはどうでしょうか
（全く推奨しませんがｗ）
UbuntuにPHPをインストールする

Ubuntu 14.04にPHP 5.6をインストールする方法のメモ

#リポジトリを追加
最初から設定されているリポジトリでは古いバージョンがインストールされてしまうため、リポジトリを追加する。

```
$ sudo apt-add-repository ppa:ondrej/php5-5.6
```

#パッケージのリストを最新化
```
$ sudo apt-get update
```

#インストールされるPHPのバージョンを確認
```
$ sudo apt-cache policy php5
php5:
  インストールされているバージョン: (なし)
  候補:               5.6.7+dfsg-1+deb.sury.org~trusty+1

```

#PHPのインストール
```
$ sudo apt-get install php5
```
#インストールされたPHPのバージョンを確認
```
$ php -v
PHP 5.6.7-1+deb.sury.org~trusty+1 (cli) (built: Mar 24 2015 11:21:10) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies
```
css bookmark

css bookmark
==========

■ フレームワーク
----------

Basscss | Utility
: http://www.basscss.com/docs/utility/

UIkit
: http://getuikit.com/index.html

Semantic UI
: http://semantic-ui.com/

Kube Web Framework
: http://imperavi.com/kube/

Bootflat
: http://bootflat.github.io/

Material UI - Material Design React Components
: http://callemall.github.io/material-ui/#/

Primer - GitHub製。みんなで使えるデザインフレームワーク MOONGIFT
: http://www.moongift.jp/2015/04/primer-github%e8%a3%bd%e3%80%82%e3%81%bf%e3%82%93%e3%81%aa%e3%81%a7%e4%bd%bf%e3%81%88%e3%82%8b%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%95%e3%83%ac%e3%83%bc%e3%83%a0%e3%83%af%e3%83%bc%e3%82%af/

CSS Front-end Frameworks with comparison - By usabli.ca
: http://usablica.github.io/front-end-frameworks/compare.html


■設計
----------

Bootstrap と BEM を組み合わせた CSS 設計パターンについて考える | NET BIZ DIV. TECH BLOG
: http://tech.recruit-mp.co.jp/front-end/architecture-bootstrap-bem/

モダンなCSS設計パターンを考える
: http://www.slideshare.net/hiloki/modern-cssarchitectureqcon

破綻しにくいCSS設計の法則 15 - Qiita
: http://qiita.com/BYODKM/items/b8f545453f656270212a?utm_content=buffer900c1&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer

CSSが破綻する4つの理由 - Qiita
: http://qiita.com/BYODKM/items/8c777db2d89f4e830c93




■小技
----------

HTML5, css3の小技集など - NAVER まとめ
: http://matome.naver.jp/odai/2129619626260903201

[続編] 効率的になった！最近のサイトで使われていたCSS小技集 | コムテブログ
: http://commte.net/blog/archives/4887

素早く制作できた！Web制作に役立つトレンドのツール一覧 | コムテブログ
: http://commte.net/blog/archives/4953





■セレクタ
----------
CSS3のセレクタ全42種 まとめておさらい使い方リファレンス | EXP – クリエイティブな事をはじめた(い)全ての人達へ
: http://wp-e.org/2014/05/20/2420/
bGeigie Nano ファームウェア更新方法

Windows 8.1 でのやりかたです。

[Arduino IDE](http://arduino.cc/en/main/software) を使うので、インストールしておきます。

Arduino IDE はディレクトリ構造の流儀が決まっています。bGeigieNanoKit のディレクトリ構造は、これには従っていないので適宜調整することになります。

次のようにソースコードを取得します。`bGeigieNanoKit` ではなく `bGeigieNano` というディレクトリ名にしていますが、これは `bGeigieNano.ino` の名前と一致させるためです（Arduino IDE の流儀）。

```
git clone https://github.com/Safecast/bGeigieNanoKit bGeigieNano
```

ソースツリー内にある `libraries` は `%USERPROFILE%\My Documents\Arduino\libraries` という場所になるように中身を配置します（[Arduino IDE の流儀](http://arduino.cc/en/Hacking/LibraryTutorial)）。

```
My Documents
|- Arduino
   |- libraries
      |- Adafruit_GFX
      |- Adafruit_SSD1306
```

`bGeigieNano.ino` と同じ階層にある *.h, *.cpp を `bGeigieNanoLib` というディレクトリ名にまとめて、同じように libraries の下に配置します（移動させます）。この `bGeigieNanoLib` は違う名前でも構いません。

```
My Documents
|- Arduino
   |- libraries
      |- Adafruit_GFX
      |- Adafruit_SSD1306
      |- bGeigieNanoLib
         |- *.h
         |- *.cpp
```

`bGeigieNano.ino` をダブルクリックして開きます。

Fio に[シリアル接続](http://arduino.cc/en/Main/ArduinoBoardFioProgramming)します。 私は [switch science 製](https://www.switch-science.com/catalog/1534/)のを使っていて、ピン配置が同じなので、Nano の L 字足にそのまま差し込んでいます。3.3Vです。また、Nano 側の電源スイッチは off にしたままです。USB 給電で fio が起動します。

Arduino IDE でターゲットボードを Arduino fio に設定し、先ほど繋いだ USB シリアルのポートを選んでおきます。

Arduino IDE でプログラムを書き込みます。

書き込みできたら、シリアル接続を外して、いつも通り Nano の電源を入れれば使えます。

以上。
Amazon LinuxでImageMagick-lastを使いたい！！


Qiita初投稿です！！
最近、AWSでサーバ構築していてハマったので共有します。

## はじめに

Amazon Linux標準のyumリポジトリにあるImageMagickのバージョンは「6.7.8.9」で古いです。
そこで、remiリポジトリを追加してImageMagick-lastを入れようというお話です。


## 1. remiリポジトリを追加して実行

```bash
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum -y install --enablerepo=remi,epel ImageMagick-last ImageMagick-last-devel ImageMagick-last-libs
```

＊ 依存パッケージ「lcms2」がepelにあるのでepelも有効にしておきます。


### しかし、、、

```
エラー: パッケージ: ImageMagick-last-libs-6.9.0.4-1.el6.remi.x86_64 (remi)
             要求: libHalf.so.6()(64bit)
エラー: パッケージ: ImageMagick-last-libs-6.9.0.4-1.el6.remi.x86_64 (remi)
             要求: libIlmThread.so.6()(64bit)
エラー: パッケージ: ImageMagick-last-libs-6.9.0.4-1.el6.remi.x86_64 (remi)
             要求: libIlmImf.so.6()(64bit)
エラー: パッケージ: ImageMagick-last-libs-6.9.0.4-1.el6.remi.x86_64 (remi)
             要求: libImath.so.6()(64bit)
エラー: パッケージ: ImageMagick-last-libs-6.9.0.4-1.el6.remi.x86_64 (remi)
             要求: librsvg-2.so.2()(64bit)
エラー: パッケージ: ImageMagick-last-libs-6.9.0.4-1.el6.remi.x86_64 (remi)
             要求: libgdk_pixbuf-2.0.so.0()(64bit)
エラー: パッケージ: ImageMagick-last-devel-6.9.0.4-1.el6.remi.x86_64 (remi)
             要求: OpenEXR-devel(x86-64)
エラー: パッケージ: ImageMagick-last-libs-6.9.0.4-1.el6.remi.x86_64 (remi)
             要求: libIex.so.6()(64bit)
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest
```

まだ依存しているものがあるようです。

```
libHalf.so
```

誰だ？お前は！？と調べていくと、、、
「ilmbase」というモジュールが必要のようです。

そして、
当然Amazon Linux内のyumリポジトリにはいません。(エラー起きてるしね)

どうやらCentOSのBaseリポジトリにはいるということで追加します。


## 2. CentOS-Baseリポジトリを追加して実行

```bash
cat << '_EOT_' > /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-6 - Base
mirrorlist=http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
_EOT_

yum -y install --enablerepo=remi,epel,base ImageMagick-last ImageMagick-last-devel ImageMagick-last-libs
```

これで無事インストール完了


## おわりに

ImageMagickがyumで入らないという記事を見つけると、
だいたい「ソースから入れようぜ！」というものばかり見つかる気がします。
せっかくパッケージ管理ツールを使ってるんだから、極力その恩恵を受けたいですよねー。
Redhat系OSを使ってる方の参考になればなーと思ってます。
【tail】Linux コマンド

#tail [option] file
ファイルの末尾を指定したバイトや行数を表示する。
※デフォルトは10行。

##option
`-c num`
ファイルの最後のnum byteを表示する。

`-n num`
ファイルの最後のnum 行を表示する。
※いつも-'100'とか省略した形で実行していたけど、どうやら古い文法なのか...。
http://ja.wikipedia.org/wiki/Tail

`-f`
ファイルの末尾を表示しながら常に監視し、更新があった場合もリアルタイムで表示する。
-f (follow)
※logfile等、デバック等では必要不可欠。
GoでMQTTのベンチマークツールを作ってみた

#MQTT-Bench : Benchmark tool for MQTT Broker

MQTTクライアントライブラリである、[Paho](https://eclipse.org/paho/)には、[Goのライブラリ](http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.golang.git/)があるため、それを利用して、Go言語ベースで、MQTT Brokerに対するベンチマークツールを作ってみました。

MQTT-Bench
https://github.com/takanorig/mqtt-bench


#概要

Publish／Subscribeのそれぞれの処理に対して、並列でアクセスして、スループットを測定します。
MQTT3.1.1に対応しています。

Go言語自体の勉強も兼ねて作ってみたものなので、今後も改善していこうと思いますが、ひとまず動作するところまでできたので、公開してみました。
CIなどを利用したビルドなども、継続して実施していく予定です。

#インストール

`go get` を利用して、GitHubからダウンロードした上で、インストールしてください。
インストールが成功していれば、 GOPATH で指定されたパス配下に、インストールされます。

```bash
$ go get github.com/takanorig/mqtt-bench
$ go install github.com/takanorig/mqtt-bench

$ cd $GOPATH/bin
$ ls
mqtt-bench
```

#ベンチマーク

##Publish

MQTT Broker を起動した状態で、以下のように実行します。

```bash
$ mqtt-bench -broker=tcp://192.168.1.100:1883 -action=pub
2015-04-04 12:47:38.690896 +0900 JST Start benchmark
2015-04-04 12:47:38.765896 +0900 JST End benchmark

Result : broker=tcp://192.168.1.100:1883, clients=10, totalCount=1000, duration=72ms, throughput=13888.89messages/sec
```

デフォルトでは、以下の条件でBrokerに対して、メッセージを送信します。

| 項目 | 値 |
|:-----|:---|
| QoS | 0 |
| クライアント数 | 10 |
| 1クライアント当たりの繰り返し回数 | 100 |
| 1メッセージ当たりのサイズ | 1024 byte |


##Subscribe

Subscribeの場合は、事前に、Brokerにメッセージを登録しておく必要があります。
BrokerがRetainに対応していれば、Publishの機能でRetainオプションを指定することにより、メッセージを保持しておくことが可能になります。

```bash
(Keep the messages before subscribing)
$ mqtt-bench -broker=tcp://192.168.1.100:1883 -action=pub -retain=true

$ mqtt-bench -broker=tcp://192.168.1.100:1883 -action=sub
2015-04-04 12:50:27.188396 +0900 JST Start benchmark
2015-04-04 12:50:27.477896 +0900 JST End benchmark

Result : broker=tcp://192.168.1.100:1883, clients=10, totalCount=1000, duration=287ms, throughput=3484.32messages/sec
```

BrokerがRetainに対応していない場合、別サーバから、Publishの処理を行いながら、Subscribeの処理を行ってください。

デフォルトでは、以下の条件でBrokerに対して、メッセージを取得します。

| 項目 | 値 |
|:-----|:---|
| QoS | 0 |
| クライアント数 | 10 |
| 1クライアント当たりの繰り返し回数 | 100 |

##オプション

その他、オプションとしては以下のようなモノがあります。
Brokerや測定したい内容に応じて、指定してください。

```
Usage of mqtt-bench
  -action="p|pub|publish or s|sub|subscribe"  : Publish or Subscribe (required)
  -broker="tcp://{host}:{port}"               : URI of MQTT broker (required)
  -broker-password=""                         : Password for connecting to the MQTT broker
  -broker-username=""                         : Username for connecting to the MQTT broker
  -qos=0                                      : MQTT QoS(0|1|2)
  -retain=false                               : MQTT Retain
  -topic="/mqtt-bench/benchmark"              : Base topic
  -clients=10                                 : Number of clients
  -count=100                                  : Number of loops per client
  -size=1024                                  : Message size per publish (byte)
  -pretime=3000                               : Pre wait time (ms)
  -intervaltime=0                             : Interval time per message (ms)
  -x=false                                    : Debug mode
```
Unity2d 別のGameObjectにメッセージを送る(SendMessage)


# 概要

例えば、アクション等で、プレイヤーキャラがダメージを受けた場合、

ゲーム全体を管理しているマネージャーにその情報を送りたいという事は往々にしてあります。

その時に情報を送るやり方の１つとして、SendMessageと言う機能があります。

(iOSで言うところの、Notificationが近しいかも)

# やり方

オブジェクトAから、オブジェクトBにメッセージを送る例

```
// オブジェクトAの処理
GameObject objectB = GameObject.FindGameObjectsWithTag ("ObjectB");
objectB.SendMessage("hogehogeMessage");
```

```
// オブジェクトBの処理
void hogehogeMessage() {
	/* 処理 */
} 
```

上記の用に記述することによって、オブジェクトAの然るべきタイミングで、オブジェクトBのhogehogeMessageメソッドをコールすることが出来ます。

また、引数を持たせたい場合は以下のように記述します。

```
// オブジェクトAの処理
GameObject objectB = GameObject.FindGameObjectsWithTag ("ObjectB");
objectB.SendMessage("hogehogeMessage", 10);
```

```
// オブジェクトBの処理
void hogehogeMessage(int arg) {
	/* 処理 */
} 
```

その他にも、SendMessageは単純にメッセージを送る機能ですから、同時にいくつも送信しても問題ありません。


```
// オブジェクトAの処理
GameObject[] objectBArray = GameObject.FindGameObjectsWithTag ("ObjectB");
foreach (var obj in objectBArray) {
	obj.SendMessage("hogehogeMessage");
}
```

```
// オブジェクトBの処理
void hogehogeMessage() {
	/* 処理 */
} 
```
はじめてのStylus②


# Stylusの特性
早速実務でStylus使い始めましたー。

今回の場合は自分ひとりで更新もすることになりそうだから良いのですが、
stylusはSCSSとは違い、慣れてくると素のCSSとはかけ離れた書き方をするようになりそうです。

なので、複数人で更新するような案件の場合は、学習コストもかかるので使うことはなさそうですね。
（日本で、フリーランス以外にStylus使っている人はいるのかという・・・）

ではStylusの特性について羅列していきたいと思います。

##良い所
Stylusはかなり寛容なCSSプリプロセッサです。
例えば下記のような書き方が可能です

```stylus:style.styl

//以下すべての記述が有効

/*従来のCSS記法*/
.title {font-size: 18px;}

/*SCSSのネスト記法*/
.title {
  font-size: 18px;
  
  span {
    font-size: 12px;
  }
}

/*SASS記法*/
.title
  font-size: 18px

/*SASSでは;があるのでエラー*/
.title
  font-size: 18px;

/*Stylus独自記法(:なんかいらない)*/
.title
  font-size 18px  

```

またこの特性は、後述するimport機能で大いに活躍してくれます。

##変数
Stylusの変数は、Sassの`$main-color: #3a3a3a;`のように頭に$をつけたり、LESSのように@をつける必要はありません。

また、:ではなく=を使用します。よりプログラマーフレンドリーになりましたね。

```stylus:variable.styl
main-color = #3a3a3a

.container
  color main-colr

```
 
##mixin
そのままかけます。@なんかいりません。

```stylus:mixin.styl

clearfix()
  &:before,
  &:after
    content ""
    display table
  &:after
    clear both
    

```


##extend(継承)
使用できます。
が、未検証です・・・。


##import

Sassと同じように、@importを使用して、
拡張子がCSSかStylusのファイルをインポートできます。

先述したように、基本的にStylusはどのような書き方でもコンパイルしてくれるため、
例えばreset.scssというSCSS記法で記述されたファイルがあったとしても拡張子を.stylに変更すればインポートできます。

Sassで便利だったパーシャルなインポート（接頭辞に_をつけるとそのファイルはコンパイルされない。すなわち@import用なやつ。）は未検証です。

##予告
Stylusを実務で使い始めたと書きましたが、gulpに組み込んで使用しているので、次回はgulpfile周りについて書きたいと思いますー。

##追記
結局scssに書き換えました。自分以外の誰かが更新することを考えると、Stylusは実務で使うものじゃないなと思った。
iOSアプリ開発でブラーエフェクトを手間なく使う方法

# ブラーエフェクトとは？

ここ最近のiOSアプリでは、UIをリッチに見せるためにブラーエフェクト（磨りガラス効果）を使用する機会が増えてきました。ここでは主にUIImageViewでブラー画像を容易に扱えるようにする方法を書いていこうと思います。

今回、[SABlurImageView](https://github.com/szk-atmosphere/SABlurImageView)というUIImageViewのサブクラスを使用します。
[SABlurImageView](https://github.com/szk-atmosphere/SABlurImageView)を使用することで
- ブラー画像の生成
- 通常の画像からブラー画像に変化するアニメーション
- alphaを指定するように0.0から1.0の間でブラー画像の度合いの調整
を容易に実現することができます。

[Youtube](https://www.youtube.com/watch?v=wCXe1jZIZVk)よりサンプルの動画もご覧いただけます。

![iOS Simulator Screen Shot 2015.04.08 23.39.09.png](https://qiita-image-store.s3.amazonaws.com/0/60325/a814f969-74be-834b-ecec-f74377cc6a80.png)![iOS Simulator Screen Shot 2015.04.08 23.39.12.png](https://qiita-image-store.s3.amazonaws.com/0/60325/c5519568-76ee-c07d-1530-cf80d5e8ab3a.png)

# 使用方法

以下で``image``と表記されている変数は、``UIImage``のインスタンスです。

#### ・ブラー画像の生成

```swift
let imageView = SABlurImageView(image: image)
// ボックスサイズ30pxのブラー画像を生成する
imageView.addBlurEffect(30)  
```

```swift
let imageView = SABlurImageView(image: image)
// 複数回ブラーエフェクト
imageView.addBlurEffect(30, times: 3)
```

#### ・ブラー画像のアニメーション

```swift
let imageView = SABlurImageView(image: image)
// ボックスサイズ100pxのブラー画像の準備を行う
imageView.configrationForBlurAnimation(100)
// 2秒かけて通常画像からブラー画像に変わるアニメーションをする
imageView.startBlurAnimation(duration: 2.0)
````

1回目に``startBlurAnimation``を呼ぶと、通常画像からブラー画像へ変わるアニメーションをしますが
2回目は自動的にブラー画像から通常画像へ変わるアニメーションをします。

#### ・0.0から1.0でブラー画像を調整

```swift
let imageView = SABlurImageView(image: image)
// ボックスサイズ100pxのブラー画像の準備を行う
imageView.configrationForBlurAnimation(100)
// 50%のブラー画像を表示する
imageView.blur(0.5)
```
UISliderやUIScrollViewのスクロールに合わせて、0.0から1.0でブラー画像を調整することで
リアルタイムのようなブラーエフェクトを実現できます。

# どうのように動いているのか

例として100pxのボックスサイズのブラーエフェクトをかけることにします。

まず、``configrationForBlurAnimation``の中で
1px、4px、9px、16px、25px、36px、49px、64px、81px、100px
のボックスサイズのブラー画像が10枚生成されています。
``startBlurAnimation``が呼ばれた場合は``CATransition``の``kCATransitionFade``を使用して
指定された秒数内で10枚の画像をFadeで切り替えるアニメーションが行われています。

``blur``が呼ばれた場合は
現在表示されている画像の上に、``CALayer``を使って次に表示される画像が
任意の``opacity``を適用して描画されています。
例えば、25%のブラーエフェクトを指定した場合は
2枚目のブラー画像を表示しつつ、``CALayer``をつかって3枚目のブラー画像が
50%の``opacity``で描画されています。
上記のように画像の切り替えを行っているので、``UISlider``や``UIScrollView``のスクロールに
合わせてブラー画像を滑らかに表示することも可能になります。

# 最後に

このようにして、容易にブラーエフェクトを使用することができます。
よりリッチなアプリを作って行きましょう！！
【初めてのSymfony2】インストール編 


(正直)あんまり乗り気ではないが、symfony2を取り扱ってみることにした時のメモ

## 環境

[vagrant](https://www.vagrantup.com/)で構築

* Guest OS
	* CentOS6.4 x86

## 事前準備に必要なもの

* PHP5.3以上
	* 自分は PHP 5.6.0でトライ
	* [phpenv](https://github.com/CHH/phpenv)で入れたい方は[virtualbox(centos)でphpenv+php-buildインストールメモ(5.3,5.4変更確認まで)](http://qiita.com/ryurock/items/7d031440bb174a55a6a1)を参考に入れてください
* [composer](https://getcomposer.org/)
	* 入れていない方は[composerを使ってみた時のメモ](http://qiita.com/ryurock/items/43beef25d26966fff8cc)を参考にでもしてください

## 出来上がるもの

* [ryurock/leaning-symfony2](https://github.com/ryurock/leaning-symfony2/tree/9797ab9657c988f0b9838ae0957799eab7cc3203)

## 参考にしたサイト

* [symfony公式](http://symfony.com/)
* [Symfony2 ドキュメント日本語版](http://docs.symfony.gr.jp/symfony2/)



## symfonyをインストールする

公式を写経したらすぐできた

```bash:/path/to/hoge
curl -LsS http://symfony.com/installer > symfony.phar
sudo mv symfony.phar /usr/local/bin/symfony
chmod a+x /usr/local/bin/symfony
# /usr/local/binにPATHを通していない場合は下記を実行
# export PATH="/usr/local/bin:$PATH"
symfony --help
```

helpが表示されたらOK

## プロジェクトを作成する

```bash:/path/to/hoge
# leaning-symfony2は自分の任意の名前で
symfony new leaning-symfony2
```

## PHPのビルドインサーバーでsymfonyを起動してみる

```bash:/path/to/hoge
cd leaning-symfony2
# vagrantで作成している場合は 0.0.0.0:8000で起動するとprivate_networkのIPアドレスでみれます(ex. 192.168.59.103:8000)
php app/console server:run 0.0.0.0:8000
```

symfonyのデモ画面が表示されたら完了です
ansible (1)



## 目的
ansibleを試す環境を作るところまで

## 事前準備
* virtualbox install
* vagrant install

## 仮想マシン準備

``` Bash(mac上)
mkdir ansible
cd ansible
vagrant init
```

作成されたVagrantファイルを編集する前に、
以下のどちらかでvmのテンプレートを探す。
https://atlas.hashicorp.com/boxes/search
http://www.vagrantbox.es/


今回はopscodeさんのcentos7を利用することにした。

``` Bash
-  config.vm.box = "base"
+  config.vm.box = "chef/centos-7.0"
```

仮想マシン起動、sshログインできれば仮想マシン準備完了
vagrant up
vagrant ssh


## ansible用の準備

### ansible install
brew install ansible

### なんども思考出来るようsnapshotプラグインインストール
vagrant plugin install vagrant-vbox-snapshot


## ansibleテスト
チュートリアルを見ながら実施
http://yteraoka.github.io/ansible-tutorial/


ansibleは、sshでパスワードなしでログインできるようにしておく必要が有る。
具体的には、ssh ホスト名　でパスワードなしで実行出来ればOK。

そのために、
* 「vagrant ssh-config」の実行結果を~/.ssh/configにコピーする
* コピーする際、Host名をわかりやすいものに変更する

```
Host centos
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /（各自の環境依存）/ansible/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
```

ansibleは、設定ファイルがないと動かないぽいので、
hosts名だけが入ったファイルを作成する。

```
echo centos > hosts
```

ssh centosができれば準備完了

```Bash(mac)
$ ansible -i hosts centos -m ping

localhost | success >> {
    "changed": false,
    "ping": "pong"
}
```

```Bash(mac)
$ ansible -i hosts centos -a 'uname -r'
centos | success | rc=0 >>
3.10.0-123.el7.x86_64
```
PyPI 上位 100 パッケージでやってみた > Python にインストールしたパッケージをグラフにしてみた

この手前味噌の記事: 
[Python にインストールしたパッケージをグラフにしてみた](http://qiita.com/kitsuyui/items/0e72af781ac1a7e3e948)
を、 PyPI の上位 100 パッケージでやってみた。

![dependencies.gv.png](https://qiita-image-store.s3.amazonaws.com/0/25886/4d6c2269-1844-63f4-e874-0671045610ec.png)

とても横に長い。

# PyPI のランキング上位の抽出方法

こちらのランキングを使わせていただいた。
http://pypi-ranking.info/alltime

```
distribute
virtualenv
setuptools
requests
certifi
boto
wincertstore
pip
six
pbr
python-dateutil
lxml
nose
simplejson
pika
Jinja2
MarkupSafe
docutils
pytz
PyYAML
pyasn1
Django
psycopg2
pycrypto
coverage
paramiko
zc.buildout
Paste
ssl
botocore
supervisor
colorama
rsa
SQLAlchemy
selenium
awscli
jmespath
bcdoc
meld3
redis
ecdsa
Werkzeug
cffi
PasteDeploy
carbon
Flask
MySQL-python
pymongo
graphite-web
pycparser
mock
pep8
httplib2
greenlet
anyjson
Pygments
Fabric
kombu
setuptools-git
beautifulsoup4
zope.interface
py
itsdangerous
docopt
South
Pillow
Babel
tornado
celery
Mako
WebOb
gunicorn
iso8601
isodate
pyOpenSSL
amqp
psutil
ordereddict
billiard
gevent
logilab-common
pyflakes
argparse
PrettyTable
numpy
pycups
Sphinx
pylint
cryptography
pyparsing
stevedore
Twisted
decorator
pytest
flake8
mccabe
oslo.config
urllib3
PasteScript
suds
```

うち、以下のパッケージはインストールできなかった。
（おそらく Python 3 対応ではないため。）

```
psycopg2
ssl
supervisor
MySQL-python
graphite-web
gevent
PasteScript
suds
```
UI bookmark

UI bookmark
==========

■ company
----------

Standard Inc アプリやWebサービスのUIデザイン会社
: http://www.standardinc.jp/

株式会社オハコ OHAKO Inc. | アプリ開発・UIデザイン会社
: http://ohako-inc.jp/

Goodpatch Inc. 株式会社グッドパッチ UIデザイン・設計
: http://goodpatch.com/




■Patterns
----------

UX思考を学ぶ。UIデザインパターン全28選 | UI/UX JAPAN
: http://ohako-inc.jp/uiux-japan/world-uiux/201410-ui_design_patterns.html

イケてるUIのデザインパターンを集めたサイト「Design Patterns on CodePen」 ｜ ライフハッカー［日本版］
: http://www.lifehacker.jp/2014/10/141010uidesign_patterns.html
formatador gem で CLI ツールの出力を支援する #ruby

## <i class="fa fa-code" style="font-size:1em;"></i> 概要
formatador gem で CLI ツールの出力を支援します

## <i class="fa fa-cloud-download" style="font-size:1em;"></i> インストール

~~~bash
$ gem install formatador
~~~

## <i class="fa fa-flask" style="font-size:1em;"></i> 標準出力サンプル
### サンプルコード
~~~ruby
require 'formatador'
Formatador.display_line('normal!!')
Formatador.display_line('[yellow]yellow[/]!!')
Formatador.display_line('[underline]underline[/]!!')
Formatador.display_line('[blink_slow][blue]blink_slow and blue[/]!!')
Formatador.display_lines(['first', 'second'])
Formatador.indent {
  Formatador.display_line('indent one')
}
Formatador.indent {
  Formatador.indent {
    Formatador.display_line('indent two')
  }
}
Formatador.new_line
Formatador.display_line('after newline')
~~~

![stdout.png](https://qiita-image-store.s3.amazonaws.com/0/43480/46b72fc9-75d6-33be-ec28-8db3462f2ab9.png)

## <i class="fa fa-flask" style="font-size:1em;"></i> テーブルフォーマットサンプル
### サンプルコード
~~~ruby
require 'formatador'

languages = [
  {:name => "Ruby", :type => "OO"},
  {:name => "Java", :type => "OO"},
  {:name => "Haskell", :type => "Functional"}
]
Formatador.display_table(languages)
~~~

### 出力

~~~
% ruby table.rb
  +---------+------------+
  | name    | type       |
  +---------+------------+
  | Ruby    | OO         |
  +---------+------------+
  | Java    | OO         |
  +---------+------------+
  | Haskell | Functional |
  +---------+------------+
~~~

## <i class="fa fa-flask" style="font-size:1em;"></i> テーブルフォーマットサンプル（日本語）
日本語は非対応。表がずれてしまう

### サンプルコード
~~~ruby
require 'formatador'

languages = [
  {:name => "田中", :age => "23"},
  {:name => "佐藤", :age => "42"},
  {:name => "鈴木", :age => "43"}
]
Formatador.display_table(languages)
~~~

### 出力

![table_japanese.png](https://qiita-image-store.s3.amazonaws.com/0/43480/0172aa24-350e-9011-09b3-3f980763ea39.png)

## <i class="fa fa-flask" style="font-size:1em;"></i> テーブルフォーマットサンプル（日本語）
自作の gem <i class="fa fa-external-link" style="font-size:1em;"></i> [kosi](https://github.com/tbpgr/kosi) なら日本語も綺麗に表示可能。

### サンプルコード
~~~ruby
require 'kosi'

kosi = Kosi::Table.new
print kosi.render([
  [*'name', 'age'],
  ['田中', '23'],
  ['鈴木', '42'],
  ['佐藤', '44']
])
~~~

### 出力

![kosi.png](https://qiita-image-store.s3.amazonaws.com/0/43480/d6065ebb-c459-075f-7bb6-635741fdaf34.png)

## <i class="fa fa-flask" style="font-size:1em;"></i> 進捗バー

### サンプルコード
~~~ruby
require 'formatador'

total = 100
progress = Formatador::ProgressBar.new(total, :color => "light_blue")
100.times do
  progress.increment
  sleep 0.05
end
~~~

### 出力

![progress.gif](https://qiita-image-store.s3.amazonaws.com/0/43480/26c102a2-d7b3-f2af-0a39-7fb193d9bb38.gif)

## :books: 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [formatador GitHub](https://github.com/geemus/formatador)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [formatador RubyGems](https://rubygems.org/gems/formatador)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [kosi RubyGems](https://github.com/tbpgr/kosi)
`ansible-galaxy install ...` をまとめて実行する playbook ...

# :books:

```yaml:install-required-roles.yml
- name: Install required roles
  gather_facts: false
  hosts: all
  vars:
    roles:
    - role_file: "./requirements.yml"
      roles_path: "./roles-must-be-installed/"
    - role_file: "./requirements-x.yml"
      roles_path: "./roles-must-be-installed-x/"
    - role_file: "./requirements-x.yml"
      roles_path: "./roles-must-be-installed-xx/"
  tasks:
    - name: Ensure multiple roles be installed according to 'Role Requirements Files'
      local_action: command ansible-galaxy install --force --role-file {{ item.role_file }} --roles-path {{ item.roles_path }}
      run_once: true
      with_items: roles
```

#:dancer: `ansible-playbook -i a,b,c,d,e install-required-roles.yml`

# 感想

勢いで書いてみただけ
ember ガイド

http://guides.emberjs.com/
　が公開されて、バージョンごとのガイドに以降になったのを機に翻訳活動に協力したいなぁと思って、[issue](https://github.com/emberjs/guides/issues/188)を立ててみたり、[discuss](http://discuss.emberjs.com/t/move-the-ember-guide-to-support-multi-language/7736)を立ててみたけど、日本以外の人はそんなに翻訳に不足を感じていないんですかねぇ。
　いい感じに翻訳されている[エマ・デュランダルさん](https://twitter.com/emadurandal)もいらっしゃるので、日本語は日本語で黙々と翻訳するべきなんでしょうか、どのプルジェクトでも翻訳を当てるのは苦労していると勝手に想像しているんですけど、いい手順はないんですかねぇ。


その後、別の人も同じ提案をして、正式に動き出しました。[翻訳](https://crowdin.com/project/emberjs)
web site design reference bookmark

web site design reference bookmark
==========

■simple
----------

elements margaret river
: http://elementsmargaretriver.com.au/

EVISU ONLINE | Iconic Japanese Designer Jeans Company
: http://www.evisu.com/

EYESCREAM.JP - For Creative Living
: http://eyescream.jp/

Highsnobiety | Online lifestyle news site covering sneakers, streetwear, street art and more.
: http://www.highsnobiety.com/

TOKYO GRAPHIC PASSPORT 2015 in New York
: http://www.grapass.net/2015/

note ――つくる、つながる、とどける。
: https://note.mu/

Apple
: http://www.apple.com/jp/




■ その他
----------

無料動画のオンライン学習サイト - schoo WEB-campus（スクー）
: https://schoo.jp/
Bootstrap 3 bookmark

Bootstrap 3 bookmark
==========

Bootstrap · The world's most popular mobile-first and responsive front-end framework.
: http://getbootstrap.com/

あまり知られていないBootstrapスタイルテクニック、小技16個まとめ - Photoshop VIP
: http://photoshopvip.net/archives/69687

Bootstrap Glyphicons v3.2.2 | Bootstrap Cheat Sheets
: http://glyphicons.bootstrapcheatsheets.com/



■テンプレート
----------

Start Bootstrap - Free Bootstrap Themes and Templates
: http://startbootstrap.com/

Bootstrap Zero - Free Bootstrap Themes and Templates
: http://www.bootstrapzero.com/

Free Website Templates - TemplateGarden
: http://www.templategarden.com/

GetTemplate - Free HTML5/CSS3 Bootstrap templates
: http://www.gettemplate.com/


### まとめ

商用も無料！Bootstrapをベースに最近のトレンドを取り入れた新作テンプレートのまとめ | コリス
: http://coliss.com/articles/build-websites/operation/work/best-templates-for-bootstrap-2014.html

ブックマークしておきたい、Bootstrapの商用利用無料のテーマがダウンロードできるサイトのまとめ | コリス
: http://coliss.com/articles/build-websites/operation/work/bootstrap-free-themes-2015.html

Bootstrapを使った管理画面テンプレートをまとめて紹介 | hifive開発者ブログ
: http://blog.htmlhifive.com/2014/07/28/bootstrap%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E7%B4%B9%E4%BB%8B/




■パーツ
----------

Bootstrapで使えるjQueryプラグイン | ENTEREAL/エンタリアル
: http://www.entereal.co.jp/blog/entry_jQuery-plugin-for-Bootstrap.html

Twitter Bootstrapを使うときに便利なUIパーツ集とかツールとか10選 | ランキングシェア byGMO
: https://www.rankingshare.jp/rank/cqlxcvllqj

Home of free code snippets for Bootstrap | Bootsnipp.com
: http://bootsnipp.com/




■スニペット
----------

The ultimate guide to Bootstrap | Webdesigner Depot
: http://www.webdesignerdepot.com/2014/10/the-ultimate-guide-to-bootstrap/?ref=facebooksp

36 Open Source Twitter Bootstrap Code Snippets
: http://spyrestudios.com/36-free-bootstrap-code-snippets/

### 

Single column Timeline dotted - Bootsnipp.com
: http://bootsnipp.com/iframe/KXQEW#

Sign in Panel - Bootsnipp.com
: http://bootsnipp.com/iframe/947G4

Bootstrap Number Spinner - Bootsnipp.com
: http://bootsnipp.com/iframe/Max59

Buttons minus and plus in input - Bootsnipp.com
: http://bootsnipp.com/iframe/dGWP


Triangle Breadcrumbs Arrows - Bootsnipp.com
: http://bootsnipp.com/iframe/y4Qa#

Required field styling with tooltip - Bootsnipp.com
: http://bootsnipp.com/iframe/VKGb


Form Process Steps - Bootsnipp.com
: http://bootsnipp.com/iframe/O4O8

Form Wizard and validation - Bootsnipp.com
: http://bootsnipp.com/iframe/yaZa


Simple Vertical Tab - Bootsnipp.com
: http://bootsnipp.com/iframe/81A3

Tabbed Slider Carousel (inspired by sevenx.de) - Bootsnipp.com
: http://bootsnipp.com/iframe/6Bd7

Bootstrap Number Spinner On Click Hold - Bootsnipp.com
: http://bootsnipp.com/iframe/lW2XG

Responsive breadcrumbs - Bootsnipp.com
: http://bootsnipp.com/iframe/D70jq

Timeline 2.1 with images and responsive - Bootsnipp.com
: http://bootsnipp.com/iframe/7B7W
ユーザー選択ダイアログを作成してみる

ファイルメーカーの標準コントロールで複数値を選択する方法はチェックボックスしかありません。選択肢が少ない場合はチェックボックスでも問題無いですが、多くの候補から選択する場合や可変で選択肢が増える場合などはレイアウトに困ります。
そこで今回は左右にリストを表示し、左は候補一覧、右に選択された値の一覧を表示するレイアウトを作成してみます。

動作イメージは以下のようになっています。
良くユーザーへの権限付与などの画面で使われているUIです。
![複数選択用リストイメージ.png](https://qiita-image-store.s3.amazonaws.com/0/68589/e3909723-7549-7c30-9fb2-aa84a4e871e7.png "複数選択用リストイメージ.png")

実装方法は他にもあると思いますので、一つの案だと思って下さい。

#用意したテーブル
テーブルは2つです。
##顧客テーブル
1つは選択肢一覧用のデータが入ったテーブル。サンプルではダミーの顧客リストにしてみました。
今回は候補値の絞り込みを組み込んだので、その値を入力するためのグローバルフィールドを顧客テーブルに追加しています。

##選択値保持用テーブル
2つ目は選択された値を保持するフィールドを持ったテーブルです。このフィールドに選択されたレコードのキー値を保持します。今回はグローバルフィールドにしましたが、通常のフィールドでも大丈夫です。
###選択値保持フィールドの初期値
フィールド値が空欄だとリレーションがで値一覧が表示されないので、このフィールドの初期値として **「半角スペース」**を設定しています。

#リレーション
結構単純なリレーションです。
![リレーション](https://qiita-image-store.s3.amazonaws.com/0/68589/9bc6ca8b-5e94-7255-3002-aca9871e1b24.png "スクリーンショット 2015-04-08 21.56.04.png")

選択された値を表示するためのテーブルオカレンス(以下TO）と候補値を表示するためのTOへのリレーションのみです。

#レイアウトの設定
レイアウト上には、「フィルター値入力用の編集ボックス」「候補値一覧用のポータル」「選択された値一覧用のポータル」です。
それぞれのポータルにはボタンを配置して、値の追加と削除をするように設定しています。

サンプルファイルでは、選択値がどのように保存されているか確認するためのテキストフィールドを追加しています。

##選択値追加用のボタン設定
ボタンが押された時に、選択値保持用フィールドに改行区切りで値を追加するように設定します。
サンプルの場合以下のように設定しています。
![追加用ボタンの設定](https://qiita-image-store.s3.amazonaws.com/0/68589/bb7d5186-71ba-04fa-051d-e2ac1cbd6a7d.png "スクリーンショット 2015-04-08 22.14.45.png")
List関数を利用してすでに設定されている値に、ボタンが押された行のキー値を追加しています。

##選択値消去のボタン設定
ボタンが押された時に、押された行のキー値を選択値保持用フィールドから削除するように設定します。
サンプルの場合、以下のように設定しています。
![削除ボタンの設定](https://qiita-image-store.s3.amazonaws.com/0/68589/ebfe706a-f3f6-c99f-c95c-8fd3f7e69cbb.png "スクリーンショット 2015-04-08 22.18.49.png")
Substitute関数を利用して一つ前の改行とキー値を削除しています。


ここまで設定すると、値の追加削除が動作するようになります。

#候補一覧のフィルター機能の組み込み
次に候補一覧のフィルター機能の設定をしていきます。
##画面更新用スクリプトとトリガーの設定
フィルター値を確定した際に、そのままだとポータル内のリストがフィルターされないので、更新用のスクリプトを用意します。

```FileMakerScript:Filter更新
1 ウインドウ内容の再表示 [キャッシュ結合結果を書き込む]
```
スクリプトの中身はウィンドウ内容の再表示だけです。

これを編集ボックスのトリガに以下のように設定します。
![フィルター用トリガの設定](https://qiita-image-store.s3.amazonaws.com/0/68589/099bd8d9-147b-4f7e-774a-204d6ab22cec.png "スクリーンショット 2015-04-08 22.28.30.png")

##フィルター値の確定処理用の設定
絞り込み用の値を入力してリターンキーで確定させるための設定をします。
![フィルター値の確定処理用の設定](https://qiita-image-store.s3.amazonaws.com/0/68589/7ca0d1e3-6944-d06a-7fa5-b7cf18d138ac.png "スクリーンショット_2015-04-08_22_39_05.png")


##ポータルのフィルター設定
候補値用のポータルに対して、入力された値で一覧を絞り込むための設定をします。
フィルター値が空欄の場合は全てを表示対象として、値が入って居る場合はフィルター値を含むデータを表示対象にします。
![ポータルのフィルター設定内容](https://qiita-image-store.s3.amazonaws.com/0/68589/338534ff-41f9-4d98-3bcb-01dd0532c45c.png "スクリーンショット 2015-04-08 22.36.26.png")
PatternCount関数を利用してフィルター値が含まれているか判定しています。

以上で設定完了です。

今回のサンプルは以下の場所に置きましたので、詳しくはファイルを参照して下さい。
[サンプルファイル](http://it-komons.jp/filemaker/samples/multi_select.zip)
僕とAndroidの30日戦争

CSSとHTML1か月くらい触った事しかないまったくのプログラミング初心者が、Android開発に挑戦してみたという日記

これからAndroid開発をやってみたいという人や、開発をやってみたいという人に読んでもらえると、もしかしたら参考になるかもしれません。

スペックは？と聞かれそうなので、先にお伝えしておきます。
世間様のプログラムはじめてみましたってのは、なんやかんや授業とかでやってたりする子がやる事が多いけど、僕は、ド文系でした。当然プログラミングの授業なんて皆無。
普段は、エクセル触るくらい。趣味で、HTMLとCSSはドットインストール見た事があります。

という感じなんですが、そろそろ言い訳はおいておいて、話しを始める。

先ず、話しの発端はあるプロジェクトの人手不足だ。

現在の、アプリブームからか、なかなかネイティブアプリエンジニアが見つからない。
そう、全然見つからないのだ。
そういう、いわゆる人手不足から、「あっ、お前がなったらいいじゃん」という事でエンジニアになる事がなんとなく決まった。なんとなく。

僕は、これでも将来起業したい意識高い系だから、二つ返事で受けてみた。
ここから、ゆとり世代に降り掛かる悲劇？奇跡？ははじまる。

こんな話しが出た翌日から、僕は、Androidの本を買い、読み始めた。

ちなみに、先輩になんの本を買ったらよいか聞いた時に
「Android」ならjavaもと言われたのだが、僕は知ってる単語JavaScriptと勘違いしてたくらい初心者だ。

とにかく、初心者向けのAndroidの本と、Javaの本を買った。(正確にはこの２冊は買ってもらった)

勉強をはじめ３日目。
public voidと呪文を唱えていたのだが、飽きてドットインストールへ。
すぐに有料課金し、Androidの動画を見まくっていた。

これが1週間くらい続いた。

2週目が終ろうとした頃、やっと英語のプログラムというものになれ始め、ふーんと思っていたのだが、全然身になっていない事をずっと不安に思っていた。

2週目が終っても、一向にJavaは理解できないし、Androidとかよくわからんかった。

そんな頃、先輩に。今企画してるもの作ってみたら？と言われた。

僕は、全然身になってないし、理解してないし、隠してたけど、本も2冊とも1/3くらいしか読んでなかったから、無理ですと答えた。
でも。兎に角実践だという事で、本格的なAndroid開発を始める事になった。
僕の本格的挑戦と困難はここから始まる。

3週目
Android触りはじめ1週目

なにもかもが意味わからなかった。
このページはどう作る？これは、なんと呼ぶ？これどう調べればいい？
僕は、僕のもってる力全てを使い、とにかくAndroidのxmlだけを使いひたすらページを作った。つかこれしか出来なかった。
3日くらいたった頃だろうか？
先輩に見せてみたら、全部没になった。

お前、とりあえず本屋に行って、Androidでは、どんな事をなにを使ってやればいいかを見てこいと言われた。
明日、本屋のAndroidの本を全部パラパラと読んでこいと、突如タスクが発生した。
なにも分からない僕は本屋に行き、とりあえず、Androidの本を読みまくった。(5冊くらいぱーっとみた)
それで、こんなのがあるのかとAndroidについて少し理解した。
このページは、こう呼ぶんだとか、こういう風に作るのか。とかがなんとなくわかった。

そして、この時僕は今まで使っていた初心者向けの本は全て捨てた。だって、全然実践にいきない。初心者向けの本を読んでも、僕の作りたいものは、どこにも書いてない。
結局逆引きとかを買う事になった。

そう1週目が終わり、やった事は、初心者向けの本を捨てるという事だった。

Android2週目
僕はコピペを捨てた。（実は3週目までコピペは、癖でやってた時もある）
うごきませ〜〜ん。って先輩に聞きにいくじゃない？（1日多くて2回くらい）
そこで言われるんですよ。これってどうい意味？これどこに書いてある？
でも僕コピペなんで全然わかんない。（しかも最初に取りかかったのNavigationDrawer）
わかるはずない。だってコピペだし。

そこで、おこられてようやく気がついた。
コピペ駄目やん。って。

お前これは、レポートでもないし、ちゃっちー学生向けのビジネスコンテストでもないから、今までやってきたようなコピペじゃ通用せんのだよと。

だから、せめて見ながら書くようにした。Command + C　Command +V より遥かに理解が深まった。

Android3週目
僕は聞くという恥じらいを捨てた。
先輩へも、ネットへも
聞けるものは全て使う。
だってググっても出てこない事たくさんあるし。特にFragment周り・
でも英語でもできる限り調べるよ

Stack Over Flowも
FBのコミュニティにも
テラテイルにも
先輩にも聞いた。

もう、恥ずかしい質問しまくったよ。社内的に、みんな忙しかったんで、ネットの人に相当教えてもらった。
みんな大好きだよ

そうして、僕の開発は徐々に先に進んだ。

そうして4週目は終った。
なんやかんや、日本や、世界中のエンジニアと一緒に開発した1ヶ月間だった。

作ったページ数は、20数ページ。
Fragmentも沢山使った。

最後にはじめて実機で動かした時、少し目頭があつくなった。

通信周りまではしっかりできなかったけど、いろんな技術を学んだし
エンジニアという仕事を少しだけ肌で感じれた。

僕は、大切なものをこの1ヶ月で学んだ。

エンジニアは、母である。
母が居ないと子は生まれない。
産む苦労は、母にしか分からないのだ。そして、だいたいの場合、実際に育てあげるのも母なのである。

企画側がいかに無茶を言っているのか、肌身をもって感じた。
エンジニアの苦労がわかった。
そういう意味で心から、エンジニアをリスペクトできるようになった。

きっと、僕が見たものは、エンジニアのほんの少しの部分。
それでも、学ぶ意味がある1ヶ月であった。
1ヶ月という時間と引き換えに、今後の10年を変えるかもしれない経験を得た。

最後に
これまで沢山助けてくれた、ネットのエンジニアの皆さん
ありがとうございました！
やはり俺のHerokuアプリはまちがっている。

pythonの軽量WebフレームワークbottleでWebアプリっぽいものをぽちぽち作ってて、ある程度できたのでHerokuにデプロイしたところでハマった。8時間くらい！通勤中のググり時間入れると10時間いくかも？　
問題解決のプロセスが悪かったのもあり（もっとgit使えるようになっておくと捗るよ、俺）、またPythonの勉強から始めたりしてたので無益でもなかったのでいいんだけど、一応メモっとく。

問題：　ローカルでは動くのにherokuでは挙動がおかしい。

ページのボタン押すとデータがセットされる→リダイレクトで元ページに戻る。というページ内容が書き直されるようにしている部分（専門用語は知らない）で、再表示されるページが崩れる！　変数値のセットにglobal使ってたのでそれをクッキーに変えたりモジュールで外に出したり色々やってみたけど、崩れる。そしてボタンを押す度に変数の状態が変わっていく、ランダムで正しい状態に戻る時もある。パターン掴めない。

原因がbottleとherokuのどちらにあるのかわからないので、両方調べた。gunicornのせいかもと思って、waitressに浮気したりもした。jinja2のことを疑ったりもした。ごめん。結局、原因はherokuの`` WEB_CONCURRENCY``だった。
``heroku config``
で
``WEB_CONCURRENCY:       3``
となっていたので、昨日見たhttp://sessan.hatenablog.com/entry/2015/01/13/213226
を思い出して、``heroku config:set WEB_CONCURRENCY=1``としてみた。直った！この歓びを誰にか伝えむ。

 web (1X)ってなってるのに、デフォでWEB_CONCURRENCY: 3ってどうよ？
Integer#valueOfとparseIntのパフォーマンス測定

## 動機
自分が今見ているシステムでFindBugsを2.0.2から3.0.1に上げたらDM_BOXED_PRIMITIVE_FOR_PARSINGという重要度Highの警告が大量に発生してしまった。
内容的にはNumber#valueOfでボクシングされた値をプリミティブな変数に代入しているのでパフォーマンス的にアレですよ、Number#parseXXXを使いましょうねって感じ(だと認識しています)

```java
String num = "1";
// ダメ
int hoge = Integer.valueOf(num);
// こっちの方が良い
int hoge = Integer.parseInt(num);
```
## 測定
以下のコードを使って測定しました。
測定環境は

* MBP(2GH, 16GB, MacOS10.9.5)
* jdk1.8.0_25

```java
import java.util.function.Consumer;
import java.util.stream.IntStream;
import java.util.stream.Stream;


public class ConvertIntTest {
    public static void main(String[] args) {
        final int count = Integer.parseInt(args[0]);
        Stream<String> values = IntStream.range(0, count).parallel().boxed().map(String::valueOf);

        if(args[1].equals("valueOf")) {
            test(values, Integer::valueOf);
        } else {
            test(values, Integer::parseInt);
        }
    }

    public static void test(Stream<String> values, Consumer<String> method) {
        long start = System.currentTimeMillis();
        values.forEach(method);
        System.out.println("time: " + (System.currentTimeMillis() - start));
    }
}
```

## 結果
確かにparseIntの方が早いけど、valueOfでも1億件でも4秒弱くらいなので、そこまで気にするレベルでもない気もします…w

| count     | valueOf   | parseInt |
|----------:|----------:|---------:|
| 100万     |  約130ms  |   約110ms |
| 1000万    |  約500ms  |   約350ms |
| 1億       |  約3500ms |  約2000ms |
Rails の routes 情報を csv 書式で出力する。 (rake routes:csv)

rake routes の内容を excel に取り込みたいと思った。
rake routes の出力結果を手作業で csv (, 区切り) にしてもよいけど、
rake のタスクを書いて、routes 情報を csv 形式で出力することで対処した。

https://gist.github.com/katoy/f06965acc820b6c76b88
(routes_csv.rake を lib/tasks 以下に置けば良い)

こんな風に動きます。

    $ rails -v
    Rails 4.2.1

    $ rake -T routes
    rake routes      # Print out all defined routes in match order, with names
    rake routes:csv  # Print out all defined routes in CSV format
 
    $ rake routes:csv
    Prefix, Verb, URI Pattern, Controller#Action
    data, GET, /data(.:format), data#index
    , POST, /data(.:format), data#create
    new_datum, GET, /data/new(.:format), data#new
    edit_datum, GET, /data/:id/edit(.:format), data#edit
    datum, GET, /data/:id(.:format), data#show
    , PATCH, /data/:id(.:format), data#update
    , PUT, /data/:id(.:format), data#update
    , DELETE, /data/:id(.:format), data#destroy

routes の情報の構造は Rails の version で変化があるようです。
rails の他の version では動作しないかもしれません。
ngStorageを使ってみる



## 概要

AngularJSからLocalStorageを簡単に使えるようにするモジュール。
LocalStorageが使用できない場合、Cookieを代わりに使ってくれるらしい。

- https://github.com/agrublev/angularLocalStorage

実際には「angularLocalStorage」っぽい。


## 準備

[こちら](http://qiita.com/kiarina/items/e911d928f542a381e257)を参考にAngularJSのプロジェクトの雛形を生成する。

```bash
$ bower install ngStorage --save
```

依存関係を追加する。

```javascript
angular.module('myApp', ['angularLocalStorage']);
```

## 使ってみる

### bind

自動で同期してくれる。

```javascript
angular.module('myApp')
    .controller('myCtrl', function($scope, storage) {
    	var defaultValue = {id: 1, name: 'hoge'};
       storage.bind($scope, 'myValue', {defaultValue: defaultValue});
	});
```

### set

```javascript
angular.module('myApp')
    .controller('myCtrl', function($scope, storage) {
        storage.set('test', {id: 1, name: 'hoge'});
	});
```

### get

```javascript
angular.module('myApp')
    .controller('myCtrl', function($scope, storage) {
        $scope.val = storage.get('test');
	});
```

### clearAll

```javascript
angular.module('myApp')
    .controller('myCtrl', function($scope, storage) {
    	storage.clearAll();
	});
```


### getKeys

```javascript
angular.module('myApp')
    .controller('myCtrl', function($scope, storage) {
        console.log(storage.getKeys());
	});
```
Nexus5をWindows 8.1でデバッグする（USBデバッグできるようにする）

スマホ側でUSBデバッグをON
そのままケーブル接続
あれ？デバッグできる奴として認識してくれない。たんなるストレージ系端末になってる。
デバイスマネージャー開く
Nexus5ってでてるよね。認識はされてる
ADB Interfaceとかそんな感じのになってなきゃいけないんじゃなかったっけ？
WindowsはUSBドライバが用意されてたなぁ。。。MacやLinuxはそんなのなしでいけるのに。
Windowsだから仕方ない。あきらめてUSBドライバを導入。
Androidの開発環境があるならSDK Mangerでインストールできる。解発環境がないならUSBドライバだけ個別でダウンロードしてきましょう。
デバイスマネージャーでNexus5を右クリックして、ドライバの更新をする。
このとき、コンピューター内を参照してUSBドライバが検索にかかるようにします。
あとはそのままUSBドライバをインストールするだけ。ADB Interfaceっぽい名前のデバイスとしてドライバがインストールされて無事デバッグ可能な端末としてつながるようになりました。

これしないとChromeのデバイス検証（リモートWebインスペクタなこと）ができないので、困る。もちろんADBでの操作ができないので他もいろいろと困ります。
CocoaPodsでインストールしたライブラリの"Other Swift Flags"を設定し、#ifdef DEBUG を有効にする


とりあえず自分用として、非公式なCocoaPods化した[ライブラリ](https://github.com/keygx/PAssert)にて、Other Swift Flagsの設定（-D DEBUG）が必要だったのですが、.xcworkspace形式の場合には設定方法が異なるということにハマったのでメモ。

---

通常の.xcodeprojにおいては、下記参考ページのように、Build Settings の Other Swift Flags にカスタムフラグを設定します。

参考：[Swift での #ifdef DEBUG のやり方](http://qiita.com/qmihara/items/a6b88b74fe64e1e05ca4)

ですが、CocoaPodsインストール後 .xcworkspace形式になった場合は、上記の方法ではカスタムフラグが有効になりませんでした。

---

どうやら今回のケースでは、設定する場所が違うようです。

Pods > TARGETS > Pods-ライブラリ名 > Swift Compiler - Custom Flags > Other Swift Flagsが設定場所になります。

![-D DEBUGの追加](https://qiita-image-store.s3.amazonaws.com/0/15905/0d527e94-c83d-817d-e5ea-9b45ba542ea0.png "scr01.png")


これでライブラリ内の #ifdef DEBUG が有効になりました。
mac 設定備忘録

# Yosemite で dot files を表示した. Finding Hidden Files
`$ defaults write com.apple.finder AppleShowAllFiles TRUE`  
続いて  
`$ killall Finder`  
でFinderを終了.  
Finderが自動的に再起動しなければ  
`open /System/Library/CoreServices/Finder.app`  
非表示に戻すには  
`$ defaults write com.apple.Finder AppleShowAllFiles FALSE`
# ローカルスナップショットをdisableにした.  
`$ sudo tmutil disablelocal`  
戻すには    
`$ sudo tmutil enablelocal`
# 充電時に音が鳴るようにした.  
`$ defaults write com.apple.PowerChime ChimeOnAllHardware -bool true; open /System/Library/CoreServices/PowerChime.app &`   
無効化は  
`$ defaults write com.apple.PowerChime ChimeOnAllHardware -bool false;killall PowerChime`  
# Google 日本語入力  
環境設定で,Input mode を Kana に,Punctuation style を ，．に変更した．
homebrewで全てのformulaに対してrelinkする

結論を先に書く。

```
$ brew list -1 | while read line; do brew unlink $line; brew link $line; done
```

とあることがきっかけでMacのOSのみの再インストールを行ったところ、homebrewでインストールしたコマンドが全滅していた。
`/usr/local/bin`配下をみたところシンボリックリンクが全滅してしまったようだ。

上記のコマンドで復活させたが、大量にシンボリックリンク出来過ぎてこんなにあったかなぁという思いに駆られている…

時間が無いので今回はこれでOKにするが、ちゃんと取捨選択したほうがよいかもしれない。
一度全滅してしまっているのでまたシンボリックリンクを全部はずしてから考えることも出来るカナ。
【CakePHP】プライマリーキーにUUIDを使用する

cakeではプライマリーキー（デフォではid）を「CHAR(36)」または 「BINARY(36)」として、save()するとUUIDを生成してinsertしてくれる。

UUIDの例）
4b1a307c-cfe4-4343-9d06-1094c0a80b06

通常、プライマリーキーはmysqlであれば、int型でautoincrementを使用することが多い。
プライマリーキーにUUIDを使用するメリットは、autoincrementで生成するシーケンスに比べて予測しづらくセキュリティが高いこと。

更新処理で一旦クライアント側にプライマリーキーを渡すことがある。（hiddenで隠れてはいるが。）そのため、予測しづらいUUIDの使用したほうがセキュリティが高く良いのではと考えた。
ただ、予測しづらいだけで、本質的な解決ではないかもしれない。

UUIDを使うデメリットは少々パフォーマンスが落ちることらしい。

ユーザが更新するテーブル（プライマリーキーをクライアントに渡す）のプライマリーキーは全てUUIDにしようかと考えている。
プライマリーキーをUUIDにすることについての是非やノウハウあれば教えて頂けるとありがたい。

参考
[CakePHP プライマリキーIDについて](http://blog.widget-info.net/2009/12/cakephp_uuid/)
[MySQLテーブルの主キー(Primary Key)をUUIDにした場合のパフォーマンス](http://www.kamomeapps.com/blogs/annadel/mysql%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E4%B8%BB%E3%82%AD%E3%83%BCprimary-key%E3%82%92uuid%E3%81%AB%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E/)
`ansible-galaxy list` でバージョン取れないことあるよね

# `ansible-galaxy list` でロールのバージョン情報取れるのって便利よね :cat2: 
`ansible-galaxy install ...` でインストールすれば、

```yaml:rolename/meta/.galaxy_install_info
{install_date: 'Wed Apr  8 11:05:54 2015', version: 1.0.2}
```
ってファイル出来るので便利よね。


あれ、でも表示されないことあった気がするなぁ...

ということで

# 検証

## Role requirements file

```yaml:requirements.yml
---

- src: geerlingguy.repo-epel
  name: installed-via-ansible-galaxy

- src: geerlingguy.repo-epel
  version: 1.0.1
  name: installed-via-ansible-galaxy-with-specific-version

- src: https://github.com/geerlingguy/ansible-role-repo-epel
  name: installed-via-github

- src: https://github.com/geerlingguy/ansible-role-repo-epel
  version: 1.0.2
  name: installed-via-github-with-specific-version
```

## `ansible-galaxy install`

```shell-session:
$ ansible-galaxy install -r requirements.yml -p test
- downloading role 'repo-epel', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-repo-epel/archive/1.0.2.tar.gz
- extracting installed-via-ansible-galaxy to test/installed-via-ansible-galaxy
- installed-via-ansible-galaxy was installed successfully
- downloading role 'repo-epel', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-repo-epel/archive/1.0.1.tar.gz
- extracting installed-via-ansible-galaxy-with-specific-version to test/installed-via-ansible-galaxy-with-specific-version
- installed-via-ansible-galaxy-with-specific-version was installed successfully
- executing: git clone https://github.com/geerlingguy/ansible-role-repo-epel installed-via-github
- executing: git archive --prefix=installed-via-github/ --output=/tmp/tmpuOK0wX.tar HEAD
- extracting installed-via-github to test/installed-via-github
- installed-via-github was installed successfully
- executing: git clone https://github.com/geerlingguy/ansible-role-repo-epel installed-via-github-with-specific-version
- executing: git archive --prefix=installed-via-github-with-specific-version/ --output=/tmp/tmpsmE7Zt.tar 1.0.2
- extracting installed-via-github-with-specific-version to test/installed-via-github-with-specific-version
- installed-via-github-with-specific-version was installed successfully
```

## `ansible-galaxy list`

```shell-session
$ ansible-galaxy list -p test | sort
- installed-via-ansible-galaxy, 1.0.2
- installed-via-ansible-galaxy-with-specific-version, 1.0.1
- installed-via-github, (unknown version)
- installed-via-github-with-specific-version, 1.0.2
```

# まとめ

細かいところで微妙な挙動の多いAnsibleです...