OmniAICreator/Qiita-1.07M huggingface dataset:
SVGによるパーリンノイズ

SVGのフィルター機能を使ってパーリンノイズを生成することができます。

以下のページを参考にしました。

[svg要素の基本的な使い方まとめ](http://www.h2.dion.ne.jp/~defghi/svgMemo/svgMemo_11.htm)

### SVGファイル

```xml:SVGのフィルターを使用したパーリンノイズ生成の例
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="200" height="200">
  <defs>
    <filter id="feTurbulence" filterUnits="userSpaceOnUse" x="0" y="0" width="200" height="200">
      <feTurbulence type="fractalNoise" baseFrequency="0.05" numOctaves="5" seed="3" stitchTiles="stitch"></feTurbulence>
      <feColorMatrix type="saturate" values="0"></feColorMatrix>
    </filter>
  </defs>
  <rect filter="url(#feTurbulence)" x="0" y="0" width="200" height="200"></rect>
</svg>
```

この中のフィルター設定部分を見やすくしたのが以下のものです。

```xml:フィルター設定
<feTurbulence
        type="fractalNoise"
        baseFrequency="0.05"
        numOctaves="5"
        seed="3"
        stitchTiles="stitch">
</feTurbulence>
<feColorMatrix
        type="saturate"
        values="0">
</feColorMatrix>
```

`<filter>`の`<feTurbulence>`によってパーリンノイズを生成することができます。このフィルターのみですと、各色要素に対してノイズが生成されますので、そのあとに`feColorMatrix`を利用してグレースケールにし、利用しやすい形にしています。

`<feTurbulence>`のみのフィルターの場合、以下の様なイメージになります。

![スクリーンショット 2014-03-20 16.34.25.png](https://qiita-image-store.s3.amazonaws.com/0/636/ace256c4-d84e-bc1c-0e41-5bf443cd351a.png)

これにグレースケールのフィルターをかけて、以下のように仕上げています。

![スクリーンショット 2014-03-20 16.36.20.png](https://qiita-image-store.s3.amazonaws.com/0/636/b1b996e7-41f1-0488-9cd0-2be08b55e3da.png)

`<feTurbulence>`の`type`には`"turbulence"`と`"fractalNoise"`の2種類から選ぶことができ、それぞれで特徴が異なります。

`baseFrequency`では周期を設定することができ、きめ細かさに影響します。

`numOctaves`では、フラクタル的な階層の深さを設定します。

`stitchTiles`は、`"stitch"`の指定で繋ぎ目をつなぐ設定にできるのですが、自分の環境だとそれらしく生成されませんでした。
weechat でウィンドウ分割した時の便利かもしれない設定


## ウィンドウ分割している時でも入力バーを1つにする
```
/bar add rootinput root bottom 1 0 [buffer_name]+[input_prompt]+(away),[input_search],[input_paste],input_text
```
```
/bar del input
```

### 元に戻す時
```
/bar del rootinput
```

document
http://www.weechat.org/files/doc/weechat_faq.ja.html#one_input_root_bar

## アクティブなウィンドウだけハイライトする
```
/set weechat.look.color_inactive_window on
```

## ウィンドウ移動に vimキーバインドを設定
```
/key bind ctrl-H /window left
/key bind ctrl-J /window down
/key bind ctrl-K /window up
/key bind ctrl-L /window right
```


enjoy!
RubyとC#の配列操作対応表

C#の配列操作を勉強していて、rubyのあのmethodに対応するのってなんだろうと思って調べたときのメモ書きです

## 配列の用意 
ruby
`list = [1,2,3]`
C#
`List<int> list = new List<int>() {1, 2, 3};`
## 配列の要素数を調べる
ruby
` result = list.count`
C#
` var result = list.Count`

## 各要素に処理をして配列を返す
ruby
` result_list = list.map{|elem| elem * 10} `
C#(Linq)
` var resultList = list.Select(elem => elem * 10).ToList(); `

## 条件に一致する配列を返す
ruby
` result_list = list.select{|elem| elem ==  1} `
C#(Linq)
` var resultList = list.Where(elem => elem == 1).ToList(); `

## 各要素を使って何か処理する
ruby
` list.each{|elem| puts elem * 10} `
C#(Linq)
` list.ForEach(elem => Console.WriteLine(elem * 10)); `

## 条件に一致した最初の要素を取得
ruby
` result = list.find{|elem| elem == 2} `
C#(Linq)
`var result = list.FirstOrDefault(elem => elem == 2); `

## 条件を満たす要素が配列内に含まれているか調べる
ruby
` result = list.any?{|elem| elem == 1})`
C#(Linq)
` bool result = list.Any(elem => elem == 1); `

## ソートする
ruby
` result = list.sort_by {|elem| -elem)`
C#(Linq)
` var resultList = list.OrderBy(elem => -elem).ToList();`

## 畳み込み
ruby
` result = list.reduce {|sum, elem| sum + elem)`
C#(Linq)
` var result = list.Aggregate ( (sum, elem) => sum + elem);`
互換ASUS X55U バッテリー


X55U バッテリー製品仕様:
電 圧:10.8V
重量: 424g
容量: 56Wh
カラー: ブラック
サイズ: 202.01 x 48.81 x 20.52 mm

モバイルノートで気になるバッテリー駆動時間だが、カタログ値では約4時間半となっている。バッテリーは6セルのリチウムイオン充電池を内蔵しており、取り外しはできない。Windows搭載ノートでバッテリー交換ができない製品は珍しい。デザイン重視のマイナス面と言える。

バッテリーベンチマークテストの「BBench」を使用し、簡単だがバッテリー駆動時間を計測してみた。インターネット接続には内蔵無線LANを使用。Windows 7の電源プラン設定はプリセットの「DELL」設定を元に、ディスプレー常時点灯、スリープなしで計測している。

結果として、液晶バックライト輝度最大では約2.5時間、バックライト輝度を電源プランの規定値(40％)にした場合は約2.9時間だった。カタログ値の55～64％が実動時間というところで、おおむねスペックから想定されるとおりの結果と言える。ヘビーなモバイルユーザーには物足りないが、訪問先での1～2時間のミーティングやプレゼンテーションには十分対応できるだろう。

http://www.newcheapbattery.com/asus-x55u.html

環境の湿度および非絶対に絶縁する環境に影響されて、充電池の内部に保護板に備えた充電池は静態の消耗が存在します。それのため、電池の新しさと品質にしたがって、３－４日ぐらい１％の電気量を減らすこと恐れがあります。それで、大幅の下がりさえでなければ、正常な現象に属します。

購入された電池は、放電した状態でお手元に届きますのでご使用前に必ず充電してください。初めてお使いになる（もしくは長期間使わないで保存していた）場合は、電池性能を最大に引き出す為にご使用前に２～３回の充・放電を行ってください。
ImportError: dynamic module does not define init function


Boost.Pythonでビルドは問題なく通ったのにインポートしようとすると ImportError: dynamic module does not define init function (initbar_ext) と怒られてしまった。

これはモジュールの宣言の名前が間違っていたことが原因だった。下記コードではbar_extにすべきところがfoo_extになっている。

	BOOST_PYTHON_MODULE(foo_ext)
	{
		...
	}

めったに書き換えないから記憶からページアウトしてた。
GDBでブレークポイントの名前解決を遅延させる


Pythonの拡張ライブラリをgdbでデバッグするのにいちいちrun test.pyとか打ち込みたくなかった。

gdbは-xオプションでコマンドの書かれたファイルを読み込むことができる。だからここにブレークポイントの設定とかrun test.pyとかを書いたらいいや、と思ったのだが、python起動時にはまだ拡張ライブラリが読まれていないので名前の解決を遅延させる必要がある。対話的に使う場合には遅延させるかどうか聞いてくるから悩むこともないのだけど今回はファイルで指定したい。どうやるか？

debug.gdbの中身(fooがブレークポイントを仕掛けたい関数の名前)

    set breakpoint pending on
    break foo
    run test.py

これを以下のようにして使えばOK

    $ gdb python -x debug.gdb
IISに新しく追加したアプリケーションが起動しない

原因はユーザープロファイルのテンプレートフォルダにコピーできない許可設定のファイルがあったから。

`Users\Default\`以下にあるコピーできないファイルのアクセス許可 を"継承の有効化"で解決。

イベントログ 
ソース:`User Profile General` ID:`1509`

```
ファイル \\?\C:\Users\Default\AppData\Local\Microsoft\VSCommon\12.0\SQM\sqmdata-5452-039-00000.sqm を \\?\C:\Users\TEMP\AppData\Local\Microsoft\VSCommon\12.0\SQM\sqmdata-5452-039-00000.sqm にコピーできません。ネットワークの問題が発生しているか、セキュリティの権限が不足していることが原因と考えられます。

 詳細 - アクセスが拒否されました。
```

ソース:`User Profile Service` ID:`1511`

```
ローカルのプロファイルが見つかりません。一時プロファイルでログオンしています。このプロファイルへの変更はログオフ時に失われます。
```

ソース:`User Profile Service` ID:`1500`

```
プロファイルを読み込めないためログオンできません。ネットワークに接続していること、およびネットワークが正しく機能していることを確認してください。
```

***
今回は発覚したのが新しいアプリケーションプールの追加だっただけで、問題はIIS,WASとは関係ない。
アプリケーションプールの実行アカウント設定がApplicationPoolIdentityの場合はアプリケーションプールごとに`IIS APPPOOL\[name]`というアカウントが作られる。そのときにコピー出来ないファイルがあったからワーカープロセスが起動できなくなっていた。

ソース:`WAS` ID:`5022`

```
Windows プロセス アクティブ化サービスでは、アプリケーション プール 'app1' のワーカー プロセスの作成に失敗しました。データ フィールドにはエラー番号が含まれています。
```

ソース:`WAS` ID:`5002`

```
アプリケーション プールを提供しているプロセス内での一連のエラーのため、アプリケーション プール 'app1' は自動的に無効になっています。
```

***
参考にした
[New user gets event 1509 after deploying IE9/10/11 packaged by IEAK](http://blogs.msdn.com/b/asiatech/archive/2014/01/30/new-user-gets-event-1509-after-deploying-ie9-10-11-packaged-by-ieak.aspx)
[Case of the User Service Service Failed The Logon](http://chentiangemalc.wordpress.com/2011/07/18/case-of-the-user-service-service-failed-the-logon/)
ansible_から始まる変数


```shellscript
$ ansible -i hosts ホスト名 -m setup
```

などと実行すると、テンプレートやyaml中で使える変数を取得できる。

ansible_fqdnやansible_domain、ansible_distribution、ansible_distribution_versionなどがサーバの設定で使えて便利。

varsに同名の値を定義しても上書きできない模様。
Xcode5のstoryboard内でUIKeyCommandエラーの対処法

既存のプロジェクトからstoryboardにあるオブジェクトをコピペして、新規プロジェクトに貼付けたら以下のエラーが出た。

`'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named UIKeyCommand'`

調べたところ、iOS7からUIKeyCommandというクラスが追加されたらしい。
よく見たらstoryboard内で以下のような警告も。

`Main_iPhone.storyboard: Key Commands on View Controller on iOS versions prior to 7.0`

storyboardをテキストベースで表示してみると、\<keyCommands\>というタグを見つけたので全て削除。
結果、問題なく動くようになった。
【AWSシリーズ】AWS-CLIを使ってEC2インスタンスを秒で立てる

<img src="http://nikuniku.me/wp-content/uploads/logo.png" alt="aws log" title="logo.png" border="0" width="250" height="130" />
<h2>AWS-CLIとは？</h2>
<a href="http://aws.amazon.com/jp/cli/" target-"_blank">AWS コマンドラインインターフェイス | アマゾン ウェブ サービス（AWS 日本語）</a>
こちらから引用。
<BLOCKQUOTE>
AWS コマンドラインインターフェイス（CLI）は、AWS サービスを管理するための統合ツールです。ダウンロードおよび設定用の単一のツールのみを使用して、コマンドラインから複数の AWS サービスを制御し、スクリプトを使用してこれらを自動化することができます。
</BLOCKQUOTE>

コマンドラインからAWSのサービスを操作出来るツールです。

今回は、AWS-CLIを使って、EC2インスタンスを<strong>秒</strong>で立ててみたいと思います。

レジュメ
・AWS-CLIのインストール
・使い方
・EC2インスタンスの確認

<h2>AWS-CLIのインストール</h2>

`$ pip install awscli`
※Python 2.6以降が必要

インストールの確認
`
$ pip freeze
$ awscli==1.3.1　←インストール完了
`

<h2>使い方</h2>
まずやりたいことの整理をすると、
・AWS-CLIのコマンドからEC2インスタンスを1台立てる。
これです。

<h3>公式ドキュメント</h3>
<a href="http://docs.aws.amazon.com/cli/latest/reference/" target-"_blank">aws -- AWS CLI 1.3.1 documentation</a>

<h3>参考サイト</h3>
<a href="http://inokara.hateblo.jp/entry/2013/09/13/003118" target="_blank">aws-cli を試してみる - ようへいの日々精進</a>
<a href="http://lab.unicast.ne.jp/2013/12/28/manage-ec2-instance-by-awscli/" target="_blank">EC2インスタンスをawscliから操作する</a>
ありがとうございます！

<h3>アクセスキー、シークレットキーの設定</h3>
<color="red">※セキュリティ保護のため、 4 月 21 日以降はシークレットアクセスキーを取得できなくなります。アクセスキーは安全な場所に保管してください。</color>
<a href="https://portal.aws.amazon.com/gp/aws/securityCredentials?" target-"_blank">ここから確認</a>

確認出来たら作業ディレクトリにテキストファイルに以下の内容を記述
`
[default]
aws_access_key_id=<default access key>
aws_secret_access_key=<default secret key>
region=ap-northeast-1
`
テキストファイルではなく、confファイルでも。

環境変数にPATHを通す
`
export AWS_CONFIG_FILE=test-aws.conf
`

<h3>試してみる</h3>
EC2インスタンスを立てるので、run-instancesコマンドを使います。

リファレンス
<a href="http://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html" target="_blank">run-instances &mdash; AWS CLI 1.3.1 documentation</a>
`
$ aws ec2 run-instances --image-id ami-0d13700c
`
image-idはami-0d13700cを使いました。Amazon Linux 64bitのAMIです。
defaultのインスタンスタイプはm1.smallの様です。

インスタンスが作られたか確認してみましょう。
`
$ aws ec2 describe-instances
`
結果はjson形式で返ってきます。
無事作られていれば成功。めでたしめでたし。
乱数を使った単体テストのためのデコレータ


#要約
乱数が使われていて、一定の確率で失敗する単体テストが失敗した時に、「焦らずもう一回やってみてね」と表示するデコレータ

#ソース

```python:randtest.py
import unittest
import numpy as np




def statistical(test):
    def do_test(self):
        try:
            test(self)
        except AssertionError as e:
            e.args += ("NOTE: this is a statistical test, which may fail.", )
            raise 
    return do_test




class TestHoge(unittest.TestCase):
    @statistical
    def test_normal(self):
        val = np.random.uniform(0, 1, 1)
        self.assertTrue(val[0] < 0.8) # 10回に2回くらい失敗する




if __name__ == "__main__":
    unittest.main()
```

statisticalというデコレータを定義しておいて、乱数を使ったテストの前に、@statisticalと置いておく。

#実行結果

```bash:
bash-3.2$ for i in $(seq 10); do ./randtest.py ; done
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
F
======================================================================
FAIL: test_normal (__main__.TestHoge)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./randtest.py", line 14, in do_test
    test(self)
  File "./randtest.py", line 24, in test_normal
    self.assertTrue(val[0] < 0.8)
AssertionError: ('False is not true', 'NOTE: this is a statistical test, which may fail.')

----------------------------------------------------------------------
Ran 1 test in 0.006s

FAILED (failures=1)
...以下略...
```
忘れがちなComposerメモ

いいのか悪いのかは置いといて、忘れがちな自分用と共有用メモ。

# Install
via. https://getcomposer.org/doc/00-intro.md#installation-nix


mv先はあらかじめ作ってPATHを通しておいてね。

```bash
curl -sS https://getcomposer.org/installer | php
mv -i composer.phar ~/bin/composer

# check
composer
which composer
```

# 欲しいライブラリのパッケージを探す
## packagistで検索
https://packagist.org/

## ググって公式orGithubのリポジトリあたりを探す
昔からあるPHPのライブラリって、検索してもpearのページやpearを使ったインストール方法を解説したページがひっかかりやすい。
PHP_CodeSnifferとかね。

検索キーワードにcomposerを加えてやると、公式やGithubが引っかかる。
`php codesniffer composer`

# パッケージのインストール

composer.jsonファイルを用意して
composer.jsonのあるディレクトリで
`composer install` or `composer update` 

下はcomposer.jsonのsample。
Jenkins + PHPな環境作りの際に使ったもの
via. http://jenkins-php.org/ 

bin-dirで指定したパスにパッケージがインストールされます。
デフォルトは相対パスで `vendor/bin`
PATHを通しておきましょう。

```bash:composer.json
{
    "require-dev": {
        "phing/phing": "*",
        "phpunit/phpunit": "4.0.*",
        "squizlabs/php_codesniffer": "*",
        "phploc/phploc": "*",
        "pdepend/pdepend" : "*",
        "phpmd/phpmd" : "1.4.*",
        "sebastian/phpcpd": "*",
        "theseer/phpdox": "*"
    },
    "config": {
        "bin-dir" : "~/.composer/vendor/bin/"
    }
}
```
なぜJavaのラムダ式の型を調べたのか（C#とJavaの違い）

## 説明

なぜ私がJava8のラムダ式の型を[わざわざ調べる](http://qiita.com/irxground/items/983a7d25239eef02bf8f)ことになったのか説明する。

C#ではラムダ式の型として`Func`と`Action`が用意されている。
一方Javaではさまざまな型が用意されており、それらの定義がまた様々なパッケージに分散している。このため必要な型を探すのが難しい。

例えば「`int`と`int`を受け取り`int`を返すような関数」を引数に取る関数`reduce`を定義したくなったとする。
この時C#では、`Func<int, int, int>`を型として利用すればよいと容易に判断がつくが、Javaで`IntBinaryOperator`を使えばよいと判断するのはJava8に慣れたプログラマでないと難しい。

そんな理由で、わざわざJava8のラムダ式の型を調べたり、それらの命名規則を探ってみたりしたのである。

## おまけ

例示のため、JavaとC#で`reduce`関数を利用したプログラムを記述した。

```java:Reducer.java
import java.util.function.IntBinaryOperator;

public class IntReducer {
    private static int reduce(int[] list, int initial, IntBinaryOperator func) {
        for (int num : list) {
            initial = func.applyAsInt(initial, num);
        }
        return initial;
    }

    public static void main(String[] args) {
        int[] values = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int sum = reduce(values, 0, (acc, num) -> acc + num);
        int prd = reduce(values, 1, (acc, num) -> acc * num);
        System.out.format("Sum = %d, Product = %d%n", sum, prd);
    }
}
```

```csharp:Reducer.cs
using System;

public class IntReducer {
    private static int Reduce(int[] list, int initial, Func<int, int, int> func) {
        foreach (var num in list) {
            initial = func(initial, num);
        }
        return initial;
    }

    public static void Main() {
        var values = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        var sum = Reduce(values, 0, (acc, num) => acc + num);
        var prd = Reduce(values, 1, (acc, num) => acc * num);
        Console.WriteLine("Sum = {0}, Product = {1}", sum, prd);
    }
}
```

## おまけのおまけ

ここで「バカめ、`reduce`はジェネリックを使い汎用的に作るのだ」などと言い出すと、Javaへのヘイトが止まらなくなるので避ける。
（このヘイトはJava5のジェネリックで型消去に決めたことに由来する）
unity基本の基本

# 概要
* 最近は、unityに趣味になるので、ゼロから、勉強した
* インストール方法と基本画面構成のみを調査した
* ショートカットキーがあるので、操作便利だ


# インストール
* [ダウンロード](http://unity3d.com/unity/download/?gclid=CIjjssKknL0CFQYepAod9CMAbQ)
* [ライセンス登録](http://naichilab.blogspot.jp/2013/05/unityunity.html)

# 画面基本構成
![unitybasic_image.png](https://qiita-image-store.s3.amazonaws.com/0/13451/dbf44b5b-bec9-fc5d-b833-922d652de959.png)
### ビュー 
* [Game](http://docs-jp.unity3d.com/Documentation/Manual/GameView40.html)
 * Game View はゲーム内のカメラから見た絵をレンダリングしています。それはあなたが最終的に出力しようとしているゲーム画面です。
 * [ショートカットキー](http://docs-jp.unity3d.com/Documentation/Manual/UnityHotkeys.html)：　CTRL/CMD+2
* [Scene](http://docs-jp.unity3d.com/Documentation/Manual/SceneView43.html)
 * Scene View はいわばインタラクティブなサンドボックスです。 シーンビューで環境要素、プレイヤー、カメラ、敵およびその他の GameObjects を選択したり配置するのに使用します。 
 * ショートカットキー: CTRL/CMD+1
* [Hirerachy](http://docs-jp.unity3d.com/Documentation/Manual/Hierarchy.html)
 * Hierarchy には、現在開いているシーン中のすべての GameObject が含まれています。
 * ショートカットキー: CTRL/CMD+4
* [Project](http://docs-jp.unity3d.com/Documentation/Manual/ProjectView40.html)
 * このビューでは、プロジェクトに属するアセットにアクセスし、管理することができます。
 * ショートカットキー: CTRL/CMD+5
* [Inspector](http://docs-jp.unity3d.com/Documentation/Manual/Inspector.html)
 *  Inspector は、現在選択されているゲームオブジェクトの詳細な情報を表示します。
 * ショートカットキー: CTRL/CMD+3
* [Console](http://docs-jp.unity3d.com/Documentation/Manual/Console.html)
 * Console は、メッセージ、警告、エラー等のログを表示します。
 * ショートカットキー: CTRL/CMD+SHIFT+C

### ボタン - [オブジェクトを移動させたり、大きさを変更する](http://docs-jp.unity3d.com/Documentation/Manual/SceneView43.html)
![unitybasic_hands.png](https://qiita-image-store.s3.amazonaws.com/0/13451/a6bb08b7-fb2b-62eb-149d-8743f1f053b0.png)

* ハンド
 * ショートカットキー: Q
* 移動
 * ショートカットキー: W
* 回転
 * ショートカットキー: E 
* 拡大/縮小
 * ショートカットキー: R 

### その他のボタン
![unitybasic_pivot.png](https://qiita-image-store.s3.amazonaws.com/0/13451/1529d137-9ecb-e239-edb6-1722d9448374.png)

* [Pivot/Global](http://docs-jp.unity3d.com/Documentation/Manual/PositioningGameObjects43.html)
 * Center は、オブジェクトのレンダリング境界線の中心にギズモを配置します。
 * Pivot は、メッシュの実際のピボット点にギズモを配置します。
 * Local オブジェクトの回転に対して、ギズモの回転を維持します。
 * Global は、ギズモを世界空間の方向に固定します。 


![unitybasic_layout.png](https://qiita-image-store.s3.amazonaws.com/0/13451/c5681ecb-5af8-acf9-8d4f-4ac3f5528c3d.png)

* Layers
 * わからないw
 * 誰かは、わかったら、教えてくれませんか
* Layout
 * デフォルトレイアウトなどを選択できる
Java8 Stream#collect

Stream -> List がちょっと複雑だったからメモ


### 単純に変換可能だった。

```java:Stream&lt;E&gt;#collect
Stream.of(1,2,3,4,5,6,7,8,9,10,11).collect(Collectors.toList());
```

### IntStream に変えてみたら面倒になった。

```java:IntStream#collect
IntStream.of(1,2,3,4,5,6,7,8,9,10,11).collect(ArrayList<Integer>::new,(a,b)->{a.add(b);},null);
```

#### 長いと思ったので Stream&lt;E&gt; に変換してみた

```java:Stream#collect
IntStream.of(1,2,3,4,5,6,7,8,9,10,11).mapToObj(Integer::valueOf).collect(Collectors.toList());
```

#### Utilクラスを作成してみる
```java:ListUtil
class ListUtil {
    public static <T> void add(List<T> list, T value) {
        list.add(value);
    }

    public static <T> List<T> gen() {
        return new ArrayList<>();
    }
    
}
```

```java:IntStream#collect
IntStream.of(1,2,3,4,5,6,7,8,9,10,11).collect(ListUtil::gen,ListUtil::add,null);
```

### よくみたら boxed てものがあった。
```java:Stream#collect
IntStream.of(1,2,3,4,5,6,7,8,9,10,11).boxed().collect(Collectors.toList());
```

#### この例は通し番号だからこういうことも
```java:Stream#collect
IntStream.range(1,11).boxed().collect(Collectors.toList());
```
Vimでカーソル下のハイライト情報を表示する

最近Vimのカラースキームを作っているのですが、作成中に「この部分のハイライトグループってなんだ？」ということがよくあるので、カーソル下のハイライト情報を表示するコマンドをこしらえてみました。

スクリプトは[Vim のカラースキームが微妙に気に食わないときの対処法 - 反省はしても後悔はしない](http://cohama.hateblo.jp/entry/2013/08/11/020849)を<del>パクり</del>参考にさせていただきました。

```vim
" カーソル下のhighlight情報を表示する {{{
function! s:get_syn_id(transparent)
    let synid = synID(line('.'), col('.'), 1)
    return a:transparent ? synIDtrans(synid) : synid
endfunction
function! s:get_syn_name(synid)
    return synIDattr(a:synid, 'name')
endfunction
function! s:get_highlight_info()
    execute "highlight " . s:get_syn_name(s:get_syn_id(0))
    execute "highlight " . s:get_syn_name(s:get_syn_id(1))
endfunction
command! HighlightInfo call s:get_highlight_info()
```

`:HighlightInfo`を実行するとカーソル下のハイライト情報が表示されます。
NSMutableArrayスコープを最小限にする

正直、初見の時の可読性が落ちるので微妙かもしれませんが、
発想の１つとしてメモしてみます。
blocksをその場ですぐ使う事で、NSMutableArrayのスコープを最小限にして、その後をNSArrayとして固定してしまいます。
NSMutableArrayがだらだらと下に残ってしまうのを防ぐ事が出来ます。
Mutable系のオブジェクトでは全て可能です。

```objc
NSArray *array = ^{
    NSMutableArray *r = [NSMutableArray array];
    for(int i = 0 ; i < 100 ; ++i)
    {
        [r addObject:@(i)];
    }
    return r;
}();
for(NSNumber *n in array)
{
    NSLog(@"%@", n);
}
```
XcodeのRun Scriptでお世話になったページ

[$(SRCROOT) や $(BUILD_DIR) 等の Xcode で使用しているマクロの置換内容の一覧を調べる方法](http://d.hatena.ne.jp/shu223/20120804/1344155002 "$(SRCROOT) や $(BUILD_DIR) 等の Xcode で使用しているマクロの置換内容の一覧を調べる方法")

[.ipa ファイル生成を自動化する](http://qiita.com/shu223/items/5bfba10e642b453e6d30 ".ipa ファイル生成を自動化する")

[How to Automatically Update Xcode Build Numbers from Git](http://objcsharp.wordpress.com/2013/10/01/how-to-automatically-update-xcode-build-numbers-from-git/ "How to Automatically Update Xcode Build Numbers from Git")

[How to get the latest tag name in current branch in Git?](http://stackoverflow.com/questions/1404796/how-to-get-the-latest-tag-name-in-current-branch-in-git "How to get the latest tag name in current branch in Git?")
git tagにバージョン入れといて勝手に反映してくれると便利だよね

[iOS app, programmatically get build version](http://stackoverflow.com/questions/16888780/ios-app-programmatically-get-build-version/16888788#16888788 "iOS app, programmatically get build version")
Build Version: CFBundleVersion
Version Number: CFBundleShortVersionString
UITableViewで親を呼んでるのに『-layoutSubviews needs to call super』と言われた

http://stackoverflow.com/questions/16471846/is-it-possible-to-use-autolayout-with-uitableviews-tableheaderview/16472853#16472853

エラーメッセージで『親を呼べ』と言われても-layoutSubviewsで[super layoutSubviews]は呼んでるし、いろいろ調べていたらtableHeaderViewでAutoLayoutを使っているのが良くないとわかった。
AutoResizingMaskは大丈夫だったのでAutoLayoutを外したらうまくいった。
Blockを使って変数スコープを作成するカテゴリ

## 概要
NSObjectのカテゴリとして、「自分自身を引数にもつ」ブロックを呼び出すメソッドを作成しました。そのスコープ内では対象となるオブジェクトに好きな名前をつけられるので、特にUI関係のコードなどを非常に綺麗に書けるようになります。
説明よりも、下記サンプルを見るのが一番手っ取り早いです。

## サンプルコード
### 通常の書き方

```objc
    self.longNameLabel.text = @"test";
    self.longNameLabel.font = [UIFont systemFontOfSize:15];
    self.longNameLabel.textAlignment = NSTextAlignmentCenter;
    self.longNameLabel.numberOfLines = 3;
```

###普通にスコープを使う場合
新しく宣言した変数はスコープから出る時に消滅しますが、元々ある変数を自由に変更することが出来ます。

```objc
  {
     UILabel *l = self.longNameLabel;
     l.text = @"test";
     l.font = [UIFont systemFontOfSize:15];
     l.textAlignment = NSTextAlignmentCenter;
     l.numberOfLines = 3;
  }
```

###スコープブロックを使う書き方
スコープ内では、__block宣言されていない変数は変更できません。

```objc
    [self.longNameLabel btk_scope:^(UILabel *l) {
        l.text = @"test";
        l.font = [UIFont systemFontOfSize:15];
        l.textAlignment = NSTextAlignmentCenter;
        l.numberOfLines = 3;
    }];
```

## ソース

```objc:NSObject+BTKUtils.h
//
//  NSObject+BTKUtils.h
//  BTKCommons
//
//  Created by Tomohisa Ota on 3/20/14.
//
//

#import <Foundation/Foundation.h>

@interface NSObject (BTKUtils)

- (instancetype) btk_scope:(void (^)(id obj))scopedBlock;

@end
```

```objc:NSObject+BTKUtils.m
//
//  NSObject+BTKUtils.m
//  BTKCommons
//
//  Created by Tomohisa Ota on 3/20/14.
//
//

#import "NSObject+BTKUtils.h"

@implementation NSObject (BTKUtils)

- (instancetype) btk_scope:(void (^)(id obj))scopedBlock
{
    if(scopedBlock){
        scopedBlock(self);
    }
    return self;
}

@end
```
Java 8 新機能 Iterable#forEach [改定]

旧記事：http://qiita.com/asahina_dev/items/44a5325b0192b729cd4c

正式リリースされてメソッド名がかわっていたので改定してみた。
ついでに lamuda で記述。


```java:初期化
List<Integer> list =Arrays.asList(1,2,3,4,5,6,7,8,9,10,11);
```


## 通常

```java
list.forEach(a -> { System.out.printf("consumer1: %5d %n", a);});
```

## 二種類

### だめな例なんだろうな
```java
list.forEach(
  ((Consumer<Integer>) a -> { System.out.printf("consumer2: %5d %n", a);})
  .andThen(            a -> { System.out.printf("consumer3: %5d %n", a * 3);}));
```

### やるならこうだろうね。
```java
Consumer<Integer> consumer4 = a->System.out.printf("consumer4: %5d %n", a);
Consumer<Integer> consumer5 = a->System.out.printf("consumer5: %5d %n", a*4);
list.forEach(consumer4.andThen(consumer5));
```

### 実行結果
```text
consumer1:     1 
consumer1:     2 
consumer1:     3 
consumer1:     4 
consumer1:     5 
consumer1:     6 
consumer1:     7 
consumer1:     8 
consumer1:     9 
consumer1:    10 
consumer1:    11 
```
---

```text
consumer2:     1 
consumer3:     3 
consumer2:     2 
consumer3:     6 
consumer2:     3 
consumer3:     9 
consumer2:     4 
consumer3:    12 
consumer2:     5 
consumer3:    15 
consumer2:     6 
consumer3:    18 
consumer2:     7 
consumer3:    21 
consumer2:     8 
consumer3:    24 
consumer2:     9 
consumer3:    27 
consumer2:    10 
consumer3:    30 
consumer2:    11 
consumer3:    33 
```

---

```text
consumer4:     1 
consumer5:     4 
consumer4:     2 
consumer5:     8 
consumer4:     3 
consumer5:    12 
consumer4:     4 
consumer5:    16 
consumer4:     5 
consumer5:    20 
consumer4:     6 
consumer5:    24 
consumer4:     7 
consumer5:    28 
consumer4:     8 
consumer5:    32 
consumer4:     9 
consumer5:    36 
consumer4:    10 
consumer5:    40 
consumer4:    11 
consumer5:    44 
```
TRAMPで/ssh:ではなく/scp:を使うようにしたらファイル転送速度が100倍になった

# TRAMPのファイル転送が遅くて困る

EmacsにはTRAMPというリモートのファイルをローカルファイル同様に透過的に扱えるパッケージが標準で添付されています。開発中にサーバ上のファイルを操作する時などに大変便利で、わたしも普段から愛用しています。

しかし一方で、サーバから数MBのファイルをコピーしてくるだけでEmacsが分単位で固まるなど、速度の面で不満に感じることもちらほらありました。elispがあまり速くないとは言えこの速度はさすがに異常では…と思い調べてみると、使い方をすこし変えるだけで劇的に転送速度を改善することができたのでここにメモしておきます。

# /ssh:ではなく/scp:を使うと速い

結論から先に書くと、リモートサーバ側のパスを`/ssh:example.com:/path/to/dir`のように`/ssh:`で指定するのをやめ、`/scp:`に変えただけでファイル転送が劇的に速くなりました。

以下は某VPSの一番安いインスタンスから4.9MBのファイルをダウンロードして検証した結果です。`/ssh:`で平均196秒かかっていた転送処理が、パスの指定を`/scp:`に変えるだけで平均2.4秒で終わるようになりました。試しに`/rsync:`も使ってみるとこちらも平均1.7秒で、`/ssh:`と比較して100倍近い速度が出ていることがわかります。

```el
;; パスの指定に/ssh:を使用した場合
(benchmark-run (copy-file "/ssh:host1:sample.zip" "~/sample.zip"))
; 3回実行した結果
; (209.477159 313 10.917686999999958)
; (172.97826 267 9.396021000000019)
; (208.477551 310 10.92040199999991)

;; パスの指定に/scp:を使用した場合
(benchmark-run (copy-file "/scp:host1:sample.zip" "~/sample.zip"))
; 3回実行した結果
; (2.55923 0 0.0)
; (2.370804 0 0.0)
; (2.198924 0 0.0)

;; パスの指定に/rsync:を指定した場合
(benchmark-run (copy-file "/rsync:host1:sample.zip" "~/sample.zip"))
; 3回実行した結果
; (2.113792 0 0.0)
; (1.989517 0 0.0)
; (1.79146 0 0.0)

```

# 外部転送メソッド

上記の例では、パスの指定を`/ssh:`ではなく`/scp:`とすることで、TRAMPの外部転送メソッドとしてscpを使用するようにしています。[TRAMPのマニュアル](http://www.bookshelf.jp/texi/tramp/tramp_ja_4.html#SEC6)によると、外部転送メソッドとはコマンドの実行にはssh、ファイルオープンやコピーの際の転送にはscp、のように接続を使い分ける仕組みのようです。`/scp:`の他には`/rsync:`や`/sftp:`なども指定できます。

一方の`/ssh:`はインラインメソッドというもので、コマンドの実行とファイルの転送を同じsshコネクションを使用してインラインで行うとのことでした。ファイル転送の際はuuencodeやbase64などでいったんテキストにして送受信するため、外部転送メソッドを使用する場合に比べてどうしても時間がかかってしまいます。

# 外部転送メソッドが使えないケース

良いことづくめな外部転送メソッドですが、またまたマニュアルによると転送に使用するコマンドで対話的にパスワード入力が求められる場合は使えないという制限があるとのことでした。

ということは鍵認証ではなくパスワード認証でサーバに接続しているようなケースだと使えないのでは？と思って試してみたのですが、なぜかパスワードを聞かれることなくscpできてしまった気がします。このあたりはsshのControlMasterの設定なども関連するかもしれませんが、面倒になってあまり調べてないです。

# まとめ

長くなりましたが、`/scp:`や`/rsync:`などの外部転送メソッドが使える状況ならそちらを使った方がだいぶ速いよ、というお話でした。

今回の記事の内容に加えて、TRAMPとdiredを使ってローカルとサーバのディレクトリを左右に並べるとファイルコピーなどが大変捗るので超おすすめです。
![dired.png](https://qiita-image-store.s3.amazonaws.com/0/14347/4a92fc7e-ff21-9cbb-cad4-b349b8f457ee.png)

参考
[Emacs標準のファイラdiredの基本的な使い方と便利なTipsいくつか](http://qiita.com/l3msh0@github/items/8665122e01f6f5ef502f)
Obj-Cで正規表現使うならRegexKitLite


objective-cの正規表現はめんどくさい。
そこで[RegexKitLite](http://regexkit.sourceforge.net/RegexKitLite/)。これをimportするとNSStringクラスに正規表現な諸々の関数が追加される。

## stringByMatchingを呼ぶだけで一致文字列を取得
```
#import "RegexKitLite.h"

...

NSString *hoge = @"Hello world!!!";
NSString *match = [hoge stringByMatching:@"[a-z]*!"];

NSLog (@"%@", match);  // world!
```

## マッチグループを配列に入れるのも簡単
```
NSString *url = @"http://hogehoge/api/city=1234";
NSArray *matchArray = [url captureComponentsMatchedByRegex:@"city=([0-9]*)"];

NSLog(@"%@", matchArray[0]);  // city=1234
NSLog(@"%@", matchArray[1]);  // 1234
```



## もちろんCocoaPodsにもあるよ

```Podfile
pod 'RegexKitLite', '4.0'
```
コラッツ問題でRubyの練習

[コラッツ問題@Wikipedia](http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E3%81%AE%E5%95%8F%E9%A1%8C)

ある自然数n（0でない）に対して以下を繰り返す。
* 奇数だったら3倍して1足す
* 偶数だったら2で割る

例： 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1

書いて計算すればなんてこと無いですが、暗算だといきなりエキサイティングです。
1〜2時間暇な時は「27」から始めるのがオススメ。

```lang:collaz.rb
def calc(x)
  if x.even? then
    x = x/2
  else
    x = (x*3)+1
  end
  puts sprintf("%10d", x)
  return x
end

x = ARGV[0].to_i
try = 0

puts "Start: #{x}"

while x != 1 do
  try += 1
  x = calc(x)
end

puts ".........."
puts "Steps: #{try}"
```

使い方：
`ruby collaz.rb 27`
一度まちがえて更新確定すると編集履歴に残り続けてしまう例

この投稿の編集履歴見てもらえば分かるけどQiitaって間違えて更新しちゃうと履歴に残っちゃうからもし一度でもアウトなこと書いちゃうとその投稿を消さなきゃいけない
「今回の編集を編集履歴に残さない」って選択肢があったらいいなってのと過去の編集履歴も消せてもいい気がする
"Roach Motel" in JMM

Roach Motel ≒ ごきぶりホイホイ

http://en.wikipedia.org/wiki/Roach_motel

> * Roach Motel (insect trap), a device used to catch cockroaches.
> * In computers, sometimes as slang use:
>  * Sometimes used to refer to a proprietary file standard -- "you can check your data in, but you can't check it out".
>  * A property of the Java Memory Model, which lets compilers and Java Virtual Machines move accesses to memory into synchronized blocks, but not to move them out.


http://jeremymanson.blogspot.jp/2007/05/roach-motels-and-java-memory-model.html

> The JMM has what we call "roach motel" ordering. "Roach Motel" is Black Flag's name for their cockroach trap; in grad school, my apartment had lots and lots and lots of cockroaches, so I find it particularly salient (although I think it was probably Bill Pugh who came up with this association).
>
> In the 1980s, the slogan for Black Flag Roach Motels was "Roaches check in, but they don't check out". The memory model is the same: accesses can be moved into synchronized blocks, but they can't be moved out.
Vimで検索を行った際に必ずカーソルを画面中央に持ってくる方法

便利な割にあまり言及されている記事を見かけないので。

Vimで `*` や `/` による検索を行ったりした際に、設定によってはハイライトはされるものの自分のカーソル位置が分からなくなったり、スクロールを伴う際は画面端でヒットするため、前後の行を満足に読めなかったりします。

しかしそんな時のために、Vimでは `zz` というコマンドが用意されており、これを利用すると、現在カーソルの当たっている行を画面中央にくるようにスクロールする事ができます。

大抵僕が検索をする際には、その前後の文脈も含めて見たいので、 .vimrc に以下のような記述を加えています。

```vim:.vimrc
nmap n nzz
nmap N Nzz
nmap * *zz
nmap # #zz
```

こうしておけば、検索の候補を辿る度に、必ず目的の単語が画面中央に来るので見失いにくいし、前後のコードも参照できるのでかなりオススメです。
SDカードのパスを強引に取得する方法２


[SDカードのパスを(強引に)取得する方法](http://qiita.com/aMasatoYui/items/e13664455af45123a66e)を見て。

##ボリューム管理
AndroidはVolume Daemonというのがボリュームのマウントの管理を行っています。その設定が/etc/vold.fstabです。aMasatoYuiさんも言及してます。ちなみにmountコマンドとは同期が取れていないため、umountでアンマウントしてもVolume Daemon側はマウント状態のままになります。

##Storage Manager
StorageManagerはUnixドメインソケットでVolume Daemonと通信をするJava側のフロントエンドになります。

##vdc
コマンドラインでのVolume Daemonのフロントエンドになるのがvdcコマンドです。ボリュームの一覧を取得したい場合は、

```
vdc volume list
```

を実行すると一覧が表示されます。詳しい使い方は以下のコードを参照してください。
https://android.googlesource.com/platform/system/vold/+/master/CommandListener.cpp
Xcodeのバージョンアップ後、Titanium StudioからiOSシミュレータが起動できなくなった場合の対処


Xcodeを5.1にバージョンアップ後、Titanium StudioからiOSシミュレータがエラーで起動できなくなってしまいましたが、次の手順でTitanium SDKのバージョンアップをすると、起動できるようになりました。

## Titanium SDKのバージョンを上げる

1. Titanium Studioから、[Help] - [Install Titanium SDK] を開く。
2. [Install from Update Stream] から、最新のバージョンにアップデート。

## tiapp.xmlを書き変える

```xml:tiapp.xml
<sdk-version>3.2.2.GA</sdk-version>
```

このバージョンを、先ほどアップデートしたバージョンに書き変えれば完了です。

### 補足：バージョンアップしてもビルド時にエラーになる場合

利用しているモジュールが、新しいSDKのバージョンに対応してない場合は、ビルド時にエラーになってしまうので、モジュールをGitHubからcloneし直して、モジュールをビルドし直す必要があるそうです。

Titaniumもくもく会で教えてもらいました。ありがとうございました。
MacでJDKのバージョンを切り替える


Java 8がリリースされたので早速インストールしたが、まだJava 7も残しておきたいし、切り替えることもあるので調べてみた。

Macでは、 **/usr/libexec/java_home** を使ってJAVA_HOMEを変えるのが一番スマートっぽい。

# インストールされているJDKのバージョン一覧を出す
```bash
% /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    1.8.0, x86_64:      "Java SE 8"     /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
    1.7.0_45, x86_64:   "Java SE 7"     /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

```

# 現在有効なJDKのバージョンを出す
```bash
% /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
```

# JDKのバージョンを切り替える
```bash
% export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45`

% java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
% javac -version
javac 1.7.0_45

% export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0`
% java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
```
Windows7にopensshを入れて~/.ssh/configを使う

# chocolateyをインストール

```
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin
```

# opensshをインストール

```:管理者権限のコマンドプロンプト
$ cinst openssh
```

# ~/.ssh/configを作成

適当な例

```:C:\Users\yourusername\.ssh\config
Host example.com
	User yourusername
```

# 環境変数HOMEを設定

|変数|値|
|:--|:--|
| HOME | C:\Users\yourusername |

# このまま実行すると、多分権限で怒られます

```
$ ssh example.com
Bad owner or permissions on /cygdrive/c/users/yourusername/.ssh/config
```

# cygwinをインストール

```:管理者権限のコマンドプロンプト
cinst cygwin
```

# ~/.ssh/configの権限設定

```:cygwin
$ chown yourusername /cygdrive/c/users/yourusername/.ssh/config

$ chmod 700 /cygdrive/c/users/yourusername/.ssh/config
```

# 完了

```
$ ssh example.com
```
見せたくないファイル・各開発者の環境毎に設定内容が変わるようなファイルをGitでどう管理するか

# 考察

## 見せたくないファイル

「GitHubやBitbucketを利用してチーム開発したいけど、
本番環境に適用する設定ファイル等はほかのメンバーに見せたくない」
これって、 git ではそこそこややこしい問題だと思う。
今後、ファイル単位でのアクセス制御が出来るようになってくれるようなこともあるかもしれないが、
現状ではそれが望めないので *ignore* するかってことになるかと思うのだが、
*.gitignore* に対象ファイルの path を記述することすらしたくない。
もう少しスマートにやる為には、 **exclude** を使うといいんじゃないか。

## 開発者の環境毎に設定内容が変わってしまうファイル

開発者の環境によって設定内容が変わってしまうようなファイルがいくつか存在する。
そういったファイルは、とりあえず

```php:example.php
switch (gethostname())
{
	case 'www.production.ne.jp':// 本番環境
		define('FUEL_PATH', '/www/lib/FuelPHP/');
		define('LOG_DIR', realpath(__DIR__.'/../app/').DIRECTORY_SEPARATOR.'logs'.DIRECTORY_SEPARATOR);
	break;

	default :// ローカル環境
		error_reporting(-1);
		ini_set('display_errors', 1);

		/* >>>> 各自の環境に合わせて書き換える */
		define('FUEL_PATH', 'Write the directory that contains the FuelPHP.');
		define('LOG_DIR', 'Write the directory that contains the log.');
		/* <<<< 各自の環境に合わせて書き換える */
	break;
}
```

みたいな感じにして`commit`しておいて、開発者各自が適宜自分の環境に合わせて設定内容を記述し、`skip-worktree`するみたいな感じかなと。

# 実践

## exclude

.git ディレクトリ配下に **info** というディレクトリがあって、
その中に exclude ファイルが格納されている。(～/.git/info/exclude)
ここに管理対象から外したいディレクトリやファイルの path を記述しておけば
.gitignore ファイルに記述する必要がなく、
対象となるディレクトリやファイルの path が公開されることがないので安心。
記法は .gitignore と同じ。

## skip-worktree

考察に掲載したようなファイルがあると仮定して、
そのファイルの path が「root/public/index.php」とかだったりするとする。
で、ファイルの記述を自分の環境に合わせて変更したりすると
`git-status`に出てきてしまうことになるわけだが、

`git update-index --skip-worktree root/public/index.php`

↑を実行すると`git-status`に表示されなくなるので、`commit`→`merge`しても反映されなくなる。
EC2リージョン別応答時間メモ

EC2リージョン別の応答時間を調査する機会がありました。
東京からのping／httpのリージョン別応答時間を
一覧で見れるサイトがなかった<sub><a href="#1">1</a></sub> ため
調査した結果をメモ書き程度に残しておきます。


## 計測サーバ環境
t2.microに yum install nginx しただけのサーバです。

## 確認コマンド
以下を１分程度まわした平均値を取りました。

```
ping xxxxxx.com
```
```
httping xxxxxx.com
```


## 応答時間表

自宅（東京）からの数値です。
データセンターの違い／ネットワーク経路等により結構変動しますが、
ざっくりと確認したいときなどにどうぞ。

| リージョン| ping avg(ms) | httping avg(ms)|
|----|----:|----:|
| **Virginia(us-east-1)**  |  129.23  |  293.2|
| **California(us-west-1)**|  120.16 |  264.9|
| **Oregon(us-west-2)**|  205.78|  409.5|
| **Ireland(eu-west-1)**|  319.43|  603.7|
| **Singapore(ap-southeast-1)**| 91.11| 180.8|
| **Tokyo(ap-northeast-1)**| 22.62| 43.4|
| **Sydney(ap-southeast-2)**| 126.88| 272.0|
| **Sanpaulo(sa-east-1)**| 336.07| 722.5|
| **Frankfrt(eu-central-1)**|296.75|618.1|
| **Seoul(ap-northeast-2)**| 40.46 | 83.5|



※今回、httpingは"http"で計測しましたが"https"通信だとさらに遅延すると思われます

<a name="1">1.</a> 見つけられなかった
iOS(iPhone, iPad)アプリの配信国の変更方法


* わかりづらかった&ググってもすぐに出てこなかった
* 次回も迷う自信がある

ので、自分用メモ


## 配信国の変更

* iTunes Connect にログイン
* 右上の[Manage Your Apps] をクリック
* アプリのアイコンをクリック
* 右の青のボタンの上から三番目 (Rights and Pricing) をクリック
* Rights and Pricing のページにある

```
Unless you select specific territories, your app will be for sale in all App Store territories worldwide.
```

上記の specific territories のリンクをクリックする
(わかりづらい!)

* すると、国選択のチェックボックスが沢山現れるので、選択する


## Tips

* デフォルトは、全世界に配信
* なので、デフォルト言語は English にしておいた方がいい
 * App Information [Edit] からデフォルト言語を変更
* 国というよりテリトリー "App Store territories"
デフォルトの .gitignore を使用する方法

## 手順

1. ``.gitignore`` を用意する
- git の global 設定に保存する

## ``.gitignore`` を用意する

``.gitignore`` (今回は区別のため ``.gitignore_global`` を使用した) を作成し, ホームディレクトリに配置する.

```~/.gitignore_global
# Vi/Vim backup files
*~
*.swp
*.swo

# Emacs backup files
.DS_Store
*~
*#
.#*
```

## git の global 設定に保存する

```bash
git config --global core.excludesfile $HOME/.gitignore_global
```

上のコマンドを実行すると, 以下のように ``.gitconfig`` に反映される.

```~/.gitconnfig
[core]
    excludesfile = /home/${ユーザー名}/.gitignore_global
```

## 付録: ``.gitignore`` の生成

``.gitignore`` を生成するコマンドラインツールも存在する

[simonwhitaker/gibo](https://github.com/simonwhitaker/gibo)

## References

- [~/.gitignoreを複数プロジェクトで使い回す - satoko's blog - s21g](http://blog.s21g.com/articles/1042)
- [.gitignoreを作ってくれるgiboが便利すぎる - hnwの日記](http://d.hatena.ne.jp/hnw/20121221)
【これでらくらく】ターミナルで途中まで入力していたコマンドを全部消したくなった時

ターミナルで例えば

```bash
$ hogehoge kantoiitenkidesu
```

と入力している途中で、先に実行したいコマンドが出た時
"delete" を 25 回押して消していたが、

### esc + delete

とすると一括で消せる。
(Ctrl + c でも目的は達成できますが。。。)

Mac と Ubuntu で確認しています。

--- 追記 ---
gm_kou さんからコメント頂ました。
どうやら

### Ctrl + u

で全消しが出来るようようです。
また、これは一時的に保存されているようで

### Ctrl + y

を押すと復元できます。

つまり、長いコマンドを入力中にふと、ファイルの編集をしたくなっても悩み無用です。
objectForKey:/objectAtIndex:は書かない事に決めた。

```objc
[_Dic objectForKey:@"bust"];
```
は

```objc
_Dic[@"bust"];
```
と書ける事を知った。同様に

```objc
[_Ar objectAtIndex:0];
```
は

```objc
[_Ar firstobject];
```
とも書けるし、

```objc
_Ar[0];
```
でもいいみたい。

絶対hoge[]の方がかっちょいいし一行が長くならないので、今度から
hoge[]で書いていこうと思います。
そんだけ
Ruby環境の構築

#Ruby環境を構築してみる
##はじめに
Fluentd+ElasticSearch+Kibanaの環境が欲しくて、まずは、
Flunetdをインストールするための環境構築を実施してみた。

CentOS6.4のyumでのrubyのバージョンは1.8.7であるが、
これではマルチバイト対応していないらしく、後々面倒がおきそう。
そのためtarから展開してサーバにインストールすることにした。

ruby1.9.3の変更点については、以下のslideshareに
まとまっていたので後でみておくことにしようかと

###Ruby1.9.3変更点
http://www.slideshare.net/mrkn/ruby-193

##インストール方法
では早速インストールしようと思ったがやり方は色々あるみたい

###方法
①configure→make→make installの正当派インストール
②RPM化してrpmコマンドにてインストール
③rbenvコマンドにてインストール

###参考サイト
http://park1.wakwak.com/~ima/centos_ruby0001.html

##インストール
…力つきたので後々記載していきます。
phpDocumentor使おうとして詰んだ

phpDocumentorをインストールしようとしたらなんか使えなかったのでメモ(解決済)。
なお、PHP本体はWebMatrixがインストールしてくれたもの(v5.5.8)を利用。(Windows8)

# やったこと


## Pearのインストール
http://pear.php.net/ から`go-pear.phar`をDL,適当なディレクトリに移してインストール。

```cmd
> php .\go-pear.phar
```

質問にはEnterだけでOK。

`PEAR_ENV.reg`を適用しておく。

## phpDocのインストール

pearの取得元にphpDocを追加してpear install 

```
pear channel-discover pear.phpdoc.org
pear install phpdoc/phpDocumentor
```

ダウンロードが終わってからインストール完了まで時間がかかるから少し待つ。お茶でもどうぞ。

インストールが終わったらとりあえず恒例のコマンド

```cmd
> .\phpdoc --version
```

問題なくインストール出来ていたら`phpDocumentor version 2.3.1`って返ってくるはず。

## ここでエラー

まず`phpdoc.php`がないって言われた。バッチファイルを見てみると`%PHP_PEAR_BIN_DIR%`とか使ってるので多分環境変数がちゃんと通ってなかったみたい。とりあえず一旦Windowsをサインアウト→サインイン。

次にこんなエラーが出た。

```
[2014-03-19 23:28:51] phpDocumentor.EMERGENCY: phpDocumentor detected that a requirement is missing in your system setup: The XSL writer was unable to find your XSLTProcessor; please check if you have installed the PHP XSL extension or XSLCache extension [] []
```

xslがどうのこうの。

phpinfo()を見てみても問題無さそうな…

ん？

```
php -i
```

あれ？xslとか無いやん…

`php_xsl.dll`はちゃんと存在してるで…

## php.iniの修正

PHP.iniの最後の方にある`extension`に`php_xsl.dll`が無かった。

つまり、

```ini
extension=php_xsl.dll
```

書き足してやればいい。

## 再チャレンジ！

もう一回`.\phpdoc --version`を叩いてみる。

```cmd
> .\phpdoc --version
phpDocumentor version 2.3.1
```

大丈夫やね。

##ドキュメントを作る

```
.\phpdoc -d 元ディレクトリ -t 出力先
```

Warningが大量に出るかもしれないけど気にしない。

多分これでちゃんと出力されてます。

以上。

お疲れ様でした。
Jenkinsでスレーブのテンポラリの参照を変更する

Jenkinsにおいて、マスターとスレーブでサーバを分けて運用するのはよくあることです。その際、スレーブのディスクが少なくなるとノードがオフラインになってしまいます。workspaceを別パーティションの領域にする場合、ディスクの参照先も変更しなくてはいけません。
今回はそんな場合のディスクの参照先の変更方法を紹介します。

まず、スレーブのworkspaceの領域を変更する場合です。ノード -> NODENAME のリモートFSルートに、スレーブで使用したいディレクトリを指定します。例えばスレーブがWindowsのばあい、ここにD:\hudson-slaveと入れてやれば、このノードで実行したジョブのworkspaceはD:\hudson-slave以下に作成されます。

次にマスターがディスク容量を監視する先を変更します。一見、リモートFSルートに指定したD:\hudson-slaveを見ていそうですが、どうやらそうでもないようです。
参照先を確認したい場合は、ノード -> NODENAME のシステム情報にあるjava.io.tmpdirに表示されます。
で、ここを変更するにはスレーブ側でslave.jarを実行する場合に -Djava.io.tmpdir=D:\ とオプションを渡してやると、任意の場所を指定する事が出来ます。こんな感じ。

java -Djava.io.tmpdir=D:\ -jar slave.jar -jnlpUrl http://localhost:8080/computer/NODENAME/slave-agent.jnlp

workspaceをC:以外の別のパーティションにした場合等は参考にしてみてください。
aws-cli で preview 機能を使う


まず、aws-cli のどの機能が Preview 版なのかは [PyPI](https://pypi.python.org/pypi/awscli) か [GitHub のコード](https://github.com/aws/aws-cli/blob/develop/awscli/customizations/preview.py)を参照します。

version 1.3.1 現在、preview として提供されているのは以下の4サービス。

* cloudsearch
* cloudfront
* emr
* sdb

例として cloudfront を有効にしてみる。

    $ aws configure set preview.cloudfront true

aws cloudfront の使い方はヘルプを参照。

    $ aws cloudfront help

実は試しに aws cloudfront を叩けば preview を有効にする方法は出てきます。ユーザーフレンドリー（このエントリの存在意義が問われている）。

    $ aws cloudfront

    This service is only available as a preview service.

    However, if you'd like to use a basic set of cloudfront commands with the
    AWS CLI, you can enable this service by adding the following to your CLI
    config file:

        [preview]
        cloudfront=true

    or by running:

        aws configure set preview.cloudfront true

aws-cli、git 風味なサブコマンドが豊富でかつヘルプが充実していてとても使いやすいのでオススメです。シェル芸で何でも片付けてしまいそうになります。

わからなくてもコードが追いやすいのも Pythonista には嬉しいところ。
シェル・スクリプト ヘッダ部テンプレート

```hoge.sh
#!/bin/bash
# hoge.sh
#
# -----------------------------------------------------------------------------
# Purpose : foobarbaz
# -----------------------------------------------------------------------------
# yyyy.MM.dd created  {account}@{mail.address}
#
# Description :
#   1. hoge
#   2. fuga
#   3. piyo
#
# Usage :
#   $ hoge.sh param1 param2
#       param1 - foo
#       param2 - bar
#   Example) $ hoge.sh baz
#
#
# -----------------------------------------------------------------------------
```
生物系の人が苦しめられるあのデータ形式をRで扱いやすいように変換する #rstatsj

生物系の人なら一度は見たことあると思うんですけど、データをこういう形式で渡されることって、ありますよね。
![mouse1.png](https://qiita-image-store.s3.amazonaws.com/0/2570/bfc694b5-0feb-0720-803a-55e92e1f249f.png)
例えばマウスの体重だと思ってください。
コントロールと2つのトリートメントに対して ANOVA かけたいとしましょう。
でも、このデータ形式って、そのままじゃ R で統計解析できないんですよね。
今回はこのデータ形式を R に入力できるように変換する手順を紹介します。

1. まず、空欄に NA を挿入します。これはあとで read.table() で R に読み込むために必要です。
![mouse2.png](https://qiita-image-store.s3.amazonaws.com/0/2570/9d8301fe-da22-6ce3-23c2-f8f04eef23df.png)

2. これをファイルに保存してもいいのですが、今回はクリップボードから読み込みます。クリップボードというのは、コピーした内容が一時的に保管される場所のことです。なので、Excel 上でデータのあるセルを選択して普通にコピーしてください。(Ctrl-C)

3. 次のようにすれば、R にデータを取り込むことができます。

```r
data1 <- read.table("clipboard", header=TRUE)
data2 <- stack(data1)
data <- subset(data2, !is.na(values))
print(data)
```

```
   values  ind
1    4.17 ctrl
2    5.58 ctrl
3    5.18 ctrl
4    6.11 ctrl
5    4.50 ctrl
6    4.61 ctrl
7    5.17 ctrl
8    4.53 ctrl
9    5.33 ctrl
10   5.14 ctrl
11   4.81 trt1
12   4.17 trt1
13   4.41 trt1
14   3.59 trt1
15   5.87 trt1
16   3.83 trt1
17   6.03 trt1
21   6.31 trt2
22   5.12 trt2
23   5.54 trt2
24   5.50 trt2
25   5.37 trt2
26   5.29 trt2
27   4.92 trt2
28   6.15 trt2
```

あとは普通に ANOVA なりなんなりできると思います。

```r
anova(aov(values~ind, data))
```

### おまけ

`dplyr` パッケージを使えば中間変数がいらなくなります。

```r
library(dplyr)
data <- read.table("clipboard", header = TRUE) %.% stack() %.% subset(!is.na(values))
```

### 参考
1. [Stack or Unstack Vectors from a Data Frame or List](https://stat.ethz.ch/R-manual/R-devel/library/utils/html/stack.html)
2. [Excel等のデータをサクっとRに持って来る方法](http://d.hatena.ne.jp/teramonagi/20111217/1324106862)
3. [dplyr入門](http://rpubs.com/dichika/dplyr_intro)
文字列の全角・半角変換

## stringに全角・半角変換処理の拡張メソッドを追加する

変換処理には、WIN32APIの`LCMapString`を利用してます。

```csharp
static class StringUtil
{
    // WIN32API:LCMapStringWの宣言
    [DllImport("kernel32.dll")]
    static extern private int LCMapStringW(int Locale, uint dwMapFlags,
        [MarshalAs(UnmanagedType.LPWStr)]string lpSrcStr, int cchSrc,
        [MarshalAs(UnmanagedType.LPWStr)] string lpDestStr, int cchDest);

    public enum dwMapFlags : uint
    {
        NORM_IGNORECASE = 0x00000001,           //大文字と小文字を区別しません。
        NORM_IGNORENONSPACE = 0x00000002,       //送りなし文字を無視します。このフラグをセットすると、日本語アクセント文字も削除されます。
        NORM_IGNORESYMBOLS = 0x00000004,        //記号を無視します。
        LCMAP_LOWERCASE = 0x00000100,           //小文字を使います。
        LCMAP_UPPERCASE = 0x00000200,           //大文字を使います。
        LCMAP_SORTKEY = 0x00000400,             //正規化されたワイド文字並び替えキーを作成します。
        LCMAP_BYTEREV = 0x00000800,             //Windows NT のみ : バイト順序を反転します。たとえば 0x3450 と 0x4822 を渡すと、結果は 0x5034 と 0x2248 になります。
        SORT_STRINGSORT = 0x00001000,           //区切り記号を記号と同じものとして扱います。
        NORM_IGNOREKANATYPE = 0x00010000,       //ひらがなとカタカナを区別しません。ひらがなとカタカナを同じと見なします。
        NORM_IGNOREWIDTH = 0x00020000,          //シングルバイト文字と、ダブルバイトの同じ文字とを区別しません。
        LCMAP_HIRAGANA = 0x00100000,            //ひらがなにします。
        LCMAP_KATAKANA = 0x00200000,            //カタカナにします。
        LCMAP_HALFWIDTH = 0x00400000,           //半角文字にします（適用される場合）。
        LCMAP_FULLWIDTH = 0x00800000,           //全角文字にします（適用される場合）。
        LCMAP_LINGUISTIC_CASING = 0x01000000,   //大文字と小文字の区別に、ファイルシステムの規則（既定値）ではなく、言語上の規則を使います。LCMAP_LOWERCASE、または LCMAP_UPPERCASE とのみ組み合わせて使えます。
        LCMAP_SIMPLIFIED_CHINESE = 0x02000000,  //中国語の簡体字を繁体字にマップします。
        LCMAP_TRADITIONAL_CHINESE = 0x04000000, //中国語の繁体字を簡体字にマップします。
    }

    // 文字列を変換する
    public static string StringConvert(this string str, dwMapFlags flags)
    {
        var ci = System.Globalization.CultureInfo.CurrentCulture;
        string result = new string(' ', str.Length);
        LCMapStringW(ci.LCID, (uint)flags, str, str.Length, result, result.Length);
        return result;
    }

    // 半角を全角に変換
    public static string Han2Zen(this string str)
    {
        return StringConvert(str, dwMapFlags.LCMAP_FULLWIDTH);
    }

    // 全角を半角に変換
    public static string Zen2Han(this string str)
    {
        return StringConvert(str, dwMapFlags.LCMAP_HALFWIDTH | dwMapFlags.LCMAP_KATAKANA);
    }
}
```


### 使い方
```csharp
static void Main(string[] args)
{
    string s1 = "アイウエオかきくけこＡＢＣＤＥＦＧ";
    Console.WriteLine("{0} → {1}", s1, s1.Zen2Han());
    string s2 = "abcdefgｱｲｳｴｵ";
    Console.WriteLine("{0} → {1}", s2, s2.Han2Zen());
}
```

### 実行例

> アイウエオかきくけこＡＢＣＤＥＦＧ → ｱｲｳｴｵｶｷｸｹｺABCDEFG
abcdefgｱｲｳｴｵ → ａｂｃｄｅｆｇアイウエオ
NSFetchredResultsController で直前・直後の IndexPath を取得する方法


カテゴリとして実装。

``` NSFetchedResultsControllerExtension.h
#import <CoreData/CoreData.h>

@interface NSFetchedResultsController (NSFetchedResultsControllerExtension)

/**
 * 次の IndexPath を取得
 */
- (NSIndexPath *)nextIndexPath:(NSIndexPath *)currentIndexPath;

/**
 * 前の IndexPath を取得
 */
- (NSIndexPath *)previousIndexPath:(NSIndexPath *)currentIndexPath;

@end
```

``` NSFetchedResultsControllerExtension.m
#import "NSFetchedResultsControllerExtension.h"

@implementation NSFetchedResultsController (NSFetchedResultsControllerExtension)

- (NSIndexPath *)nextIndexPath:(NSIndexPath *)currentIndexPath
{
    if (!currentIndexPath) {
        return nil;
    }
    
    NSIndexPath *nextIndexPath = nil;
    id <NSFetchedResultsSectionInfo> sectionInfo = [[self sections] objectAtIndex:currentIndexPath.section];
    NSInteger rowCount = [sectionInfo numberOfObjects];
    NSInteger nextRow = currentIndexPath.row + 1;
    NSInteger currentSection = currentIndexPath.section;
    
    if (nextRow < rowCount) {
        nextIndexPath = [NSIndexPath indexPathForRow:nextRow inSection:currentSection];
    } else {
        NSInteger sectionCount = [[self sections] count];
        NSInteger nextSection = currentSection + 1;
        
        if (nextSection < sectionCount) {
            nextIndexPath = [NSIndexPath indexPathForRow:0 inSection:nextSection];
        }
    }
    
    return nextIndexPath;
}

- (NSIndexPath *)previousIndexPath:(NSIndexPath *)currentIndexPath
{
    if (!currentIndexPath) {
        return nil;
    }
    
    NSIndexPath *previousIndexPath = nil;
    NSInteger previousRow = currentIndexPath.row - 1;
    NSInteger currentSection = currentIndexPath.section;
    
    if (previousRow >= 0) {
        previousIndexPath = [NSIndexPath indexPathForRow:previousRow inSection:currentSection];
    } else {
        NSInteger previousSection = currentSection - 1;
        
        if (previousSection >= 0) {
            id <NSFetchedResultsSectionInfo> sectionInfo = [[self sections] objectAtIndex:previousSection];
            NSInteger rowCount = [sectionInfo numberOfObjects];
            previousRow = rowCount - 1;
            previousIndexPath = [NSIndexPath indexPathForRow:previousRow inSection:previousSection];
        }
    }
    
    return previousIndexPath;
}

@end
```
tig でリモートブランチを checkout する


[やけに丁寧なtigのキーバインド設定ガイド](http://qiita.com/yoshikazusawa/items/3eaa6db78fa348d38bfe#1-4) で、リモートブランチを取得する設定が紹介されていた。
コマンドラインから叩くよりは楽なんだけど、checkout 先を入力する必要があるのがダルい。

そこで次のように設定してみた。

```
bind branch r !sh -ec 'b=`expr "%(branch)" : "origin/\(.*\)"`; git checkout -b $b %(branch)'
```

`%(branch)` で取れるブランチ名は `origin/feature/test` のようになっていて、除去したいので、!sh で shell を起動し、expr を経由させて、それをやっている。
更に、origin/ で始まっていない branch は対象外としたいので sh に -e オプションをつけている。

**追記**

-t/--track オプションを使うともっと簡単にできることをコメント欄で教えてもらった。
`bind branch r ...` は次のように書ける:

```
bind branch T !git checkout -t %(branch)
```

## 使い方

tig を起動し、`H` を押して、ブランチビューに移動する。

![スクリーンショット 2014-03-19 22.51.08.png](https://qiita-image-store.s3.amazonaws.com/0/9549/9a86e3b8-aad7-12ec-d90d-726dde0b5d15.png "スクリーンショット 2014-03-19 22.51.08.png")



そしてチェックアウトしたいブランチにカーソルを移して、`r` を押す。

![スクリーンショット 2014-03-19 22.44.52.png](https://qiita-image-store.s3.amazonaws.com/0/9549/14abf186-cee3-b2ea-5b68-9cad66bc93ed.png "スクリーンショット 2014-03-19 22.44.52.png")

すると一旦以下のようになるので、言われたとおりに `Enter` を押す。

![スクリーンショット 2014-03-19 22.45.43.png](https://qiita-image-store.s3.amazonaws.com/0/9549/514b21c0-c026-c267-2449-40cebc883121.png "スクリーンショット 2014-03-19 22.45.43.png")

`feature/test` がチェックアウトできた！

![スクリーンショット 2014-03-19 22.46.46.png](https://qiita-image-store.s3.amazonaws.com/0/9549/85b334da-ac63-3ae9-f21d-89274ba83d4f.png "スクリーンショット 2014-03-19 22.46.46.png")

ちなみに、origin/ で始まっていないブランチ (master branch とか) で `r` を実行しても、何もしない。
Terminalで連番ダウンロード


たまに使いたい。でもわざわざアプリ入れるのもあれなので。

```Terminal
curl -O "http://hoge.com/[01-09].jpg"
```

これで同じファイル名で連番保存できます。
保存先を指定したい場合は、そのディレクトリに移動しましょう。

なお、ファイル名を指定したい場合は以下。

```Terminal
curl -o fuga-#1.jpg "http://hoge.com/[01-09].jpg"
```

```保存結果
fuga-01.jpg
fuga-02.jpg
fuga-03.jpg
～中略～
fuga-09.jpg
```

忘れては調べ、調べては忘れる… 人間とは忘れる生き物ですよね。