OmniAICreator/Qiita-1.07M huggingface dataset:
TitaniumのプロジェクトをXcodeからビルドする in 2016

そういえばtransport.pyをいじったのが最初にTitaniumのソースコードを調べるきっかけだったなあ、と遠い目をしながらこんばんは。表題の通り、今TitaniumのプロジェクトをXcodeから起動するために必要な手順をまとめます。

かつてはtransport.pyというスクリプトが用意されていたのですが、今はもう必要ありません。

まず一度通常のビルドを実行します。build/iphone以下にプロジェクトが作成されるので、プロジェクト名.xcodeprojファイルを開きます。

次にXcodeメニューからPreferencesを開き、Locationsを表示します。

![locations.png](https://qiita-image-store.s3.amazonaws.com/0/1782/a515cfb4-1fff-1ab9-d00b-283fa87ea722.png)

Derived Dataの右のAdvanced...をクリックします。

![advanced.png](https://qiita-image-store.s3.amazonaws.com/0/1782/07ecb58b-7646-8269-0ccd-ea28ca09ff65.png)

Build LocationにCustomを選択し、build/Productsとbuild/Intermediatesをそれぞれ指定します。

終わりです。最初のビルドで指定したターゲット（シミュレータや実機）と同じものしかビルドできないので、変更する場合は再度CLIやAppcelerator Studioからビルドする必要があります。
自作ライブラリでも画像データ構造を引数として画像処理の関数を実装しよう

複数のメンバーで開発していると、この関数の引数がこうだったらいいのにと思うことがある。そのことについて述べてみる。
何を当たり前のことを述べているのだと思うだろう。そう、当たり前のことしか書いていないから、貴重な時間を、この記事を読むのに使う必要はない。

##原則１：一番融通のきく変数を関数の引数としよう。

例：画像ファイル名を引数とするよりも、画像データそのものを引数としよう。
画像の中に顔があるかどうかを判定する関数を作るとしよう。

bool hasFace(const std::string fname);//ファイル名を引数とする設計

bool hasFace(const cv::Mat &img);//cv::Mat型を引数とする設計

この２つの設計のうち、どちらを実装するかは、一番融通のきく変数を実装するべきだと考える。
hasFace(cv::imread("lena.jpg"))
のように書けるのは後者である。
cv::VideoCapture()と相性よく処理できるのも後者である。

だから、常に
bool hasFace(const cv::Mat &img);//cv::Mat型を引数とする設計
の実装をすべきと考える。

##原則２：テストが容易なインタフェースを持つように関数を設計する。
例：次のような3種類の可能性があるときには、テストが容易なインタフェースを含めること。
bool isSmiling(int deviceID);//VideoCapture deviceの device ID
bool isSmiling(const std::string imgFileName);
bool isSmiling(const cv::Mat &img);

USBカメラからの入力があって、そこに笑っている顔が写っているかどうか判定する関数があるとしよう。
その場合には、テストが容易なインタフェースを含めるように設計すべきと考える。

bool isSmiling(int deviceID);//VideoCapture deviceの device ID
が必要なインタフェースと求められている場合に、このインタフェースしか実装しないと
この関数は単体テストができない関数となってしまう。
この関数をテストする場合には、USBカメラを接続して、その前で笑顔でいることが必須となってしまう。
bool isSmiling(int deviceID)が必須のインタフェースとして設計されている場合でも、
その内部は、
bool isSmiling(const cv::Mat &img);
を用いて実装しよう。

そうすれば、入力画像をファイルで用意しておいて、単体テストをすることが可能になる。


##原則３：関数は直交性よく設計する

bool isFace(const std::string url_of_imageFile);
を開発するのではなく、
bool isFace(const cv::Mat &img);
と協調的に動作する関数
cv::Mat getWebImage(const std::string url_of_imageFile);
を開発しよう。

そうすれば、相互に依存性がないため関数のメンテナンスも楽だし、
cv::Mat getWebImage(const std::string url_of_imageFile);
を別の目的にも利用できる。

bool isFace(const cv::Mat &img);
は、cv::Mat getWebImage(const std::string url_of_imageFile);
を知る必要もないし、
cv::Mat getWebImage(const std::string url_of_imageFile);
はbool isFace(const cv::Mat &img);
を知る必要もない。

そのため、余分なヘッダファイルのincludeも生じないので
メンテナンス性が向上する。

仕事で与えられる関数の仕様が、上記の原則１～３に該当していないときには、
上記の原則１～３に該当する関数を作って、それを利用して実装すべきと私は考える。

-----
付記：
原則３は、単一責務の原理からも求められる。

bool isFace(const std::string url_of_imageFile);
bool isFlower(const std::string url_of_imageFile);
bool isCat(const std::string url_of_imageFile);
などを実装したときには、
web上から画像ファイルをもってくる機能が、それぞれの関数にコードとして書かれているようになってしまう。


付記：
　直交性がよいとは、相互に無関係ということです。なぜ無関係なことを直交というのかは、少しだけ数学を説明させてください。
ある量と別な量が無関係なときは、相関係数は０になります。ある量のベクトルと別の量のベクトルの内積が０になることを、ベクトルの世界では直交といいます。a=(1, 0) と b=(0,1)では内積をとると０になります。グラフにaとbのベクトルを書いてみると、まさしく90度で直交していることが分かります。このため、２つの量の間が無関係であることを直交しているといいます。

追加
　速度が重要なときには
cv::Mat someFunction(const cv::Mat &img);
ではなく、
void someFunction(const cv::Mat &img, cv::Mat &outImg);
のようにAPIを設計する。既に領域を確保済みの配列を利用することで、関数の中で新規に領域を確保しなおすことをなくす。


付記：
実際には、顔があるかどうかというbool型ではなく、顔検出の結果を返す関数であるべきでしょう。ここでは、物事の単純化のため、次のような案としました。
bool hasFace(const cv::Mat &img)
Excelの座標値リストから図形を作成

Excelで設計した座標データから紙の模型を作る際、データを図形化するのに困っていた。グラフの「散布図」を使えばおおよその形は分かるが、縦横比を厳密に指定できないため模型には向かない（軸などを消す手間もある）。そこで、VBAを用いて座標値を読み取り折れ線図形を出力することにした。

コードを書いたのは2007年頃のはずだが、今もたまに使っている。（それどころかExcelを「表計算機能付きドローソフト」扱いすることが多くなった）

<blockquote class="twitter-tweet" data-conversation="none" data-lang="ja"><p lang="ja" dir="ltr">久しぶりの工作。何ができるかな？ <a href="https://t.co/PckyNqPLMI">pic.twitter.com/PckyNqPLMI</a></p>&mdash; Nomoto (@HMMNRST) <a href="https://twitter.com/HMMNRST/status/1069113877168705536?ref_src=twsrc%5Etfw">2018年12月2日</a></blockquote>

<blockquote class="twitter-tweet" data-conversation="none" data-lang="ja"><p lang="ja" dir="ltr">答え：熱気球の球皮 <a href="https://t.co/6FOlx0ki46">pic.twitter.com/6FOlx0ki46</a></p>&mdash; Nomoto (@HMMNRST) <a href="https://twitter.com/HMMNRST/status/1069153658862940160?ref_src=twsrc%5Etfw">2018年12月2日</a></blockquote>

## 方法

1. `BuildFreeform` で図形作成用のオブジェクトを作る（開始点も指定）
1. `AddNodes` でオブジェクトに点を追加していく
1. `ConvertToShape` で図形作成を完了する

引数に与える座標値については、マニュアルによると以下の決まりがある。

- シートの左上隅が原点で、x座標は右向きが正、y座標は下向きが正
- 単位はポイント（pt）。1 pt = 1/72 in, 1 in = 25.4 mm

また、実際に試したところ以下の動作をしているように感じる。

- 終点を始点と同じにすると図形が閉じる
- 負の座標値があると、作成後に図形全体が正の領域に入るよう平行移動
- 古いExcelでは隣り合う2点が近すぎるとエラー（2003で確認、2010では発生せず）

## サンプルコード
N行2列のxy座標リスト（単位：mm）を選択してマクロを実行すれば図形を作成できる。

```vb

Option Explicit
Option Base 1

Sub DrawPolyline()

	Dim C As Variant
	Dim f As Double
	Dim n As Integer
	Dim m As Integer
	Dim i As Integer

	' セルの読み込み
	n = Selection.Rows.Count
	m = Selection.Columns.Count
	If (n < 2 Or m <> 2) Then
		MsgBox ("座標リストには2行以上×2列(x,y)の矩形領域を選択してください")
		Exit Sub
	End If
	C = Selection.Value

	' 単位換算（セル入力値[mm] -> 内部処理[pt]）
	f = 72 / 25.4   ' 1pt=1/72in, 1in=25.4mm
	For i = 1 To n
		C(i, 1) = C(i, 1) * f
		C(i, 2) = C(i, 2) * f
	Next i

	' ポリライン（フリーフォーム）の作成
	With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, C(1, 1), C(1, 2))
		For i = 2 To n
			.AddNodes msoSegmentLine, msoEditingAuto, C(i, 1), C(i, 2)
		Next i
		.ConvertToShape.Select
	End With

End Sub
```

もちろん模型作りだけでなく、寸法などが正確であってほしいもの全般の描画に使用できる。

![polyline_sample.png](https://qiita-image-store.s3.amazonaws.com/0/127130/fd1284a5-529b-23b3-a024-b7f184b377ce.png)


## 参考
Excel VBA リファレンス

- [FreeformBuilder オブジェクト (Excel)](https://msdn.microsoft.com/ja-jp/library/office/ff835920.aspx)
Vimでタブ使ってる人におすすめのやつ

最近、使い始めたプラグインでとってもおすすめのやつを紹介します。
Vimでタブを使ってて、[NERDTree](https://github.com/scrooloose/nerdtree)入れている人は絶対いれた方がいいと思います。
NERDTreeの説明はもう既に紹介してくださっている方がたくさんいるので、以下をご参照下さい。

- [vim-plugin NERDTree で開発効率をアップする！](http://qiita.com/zwirky/items/0209579a635b4f9c95ee)
- [Vimプラグイン「NERDTree」設定・コマンド備忘録](http://kontany.net/blog/?p=112)

私はタブを使いながら、NERDTreeで表示しながらという感じで作業するタイプの人間なのですが、以前は新しいタブを立ち上げてファイルオープンする場合、またNERDTreeから選択して...とやっていました。
...めんどくさい。
タブ間でTreeを同期するとかできないかなと思って、
最近ドットファイルをアップデートする時に探してたら...ありました！
[vim-nerdtree-tabs](https://github.com/jistr/vim-nerdtree-tabs)です。

さらに[この方の記事](http://wonderwall.hatenablog.com/entry/2016/04/07/232313)もとても参考にさせて頂きました。
インストール方法や使い方も上記の方の記事を参考にしてください。

## demo
[![https://gyazo.com/f69da589313c669109c388e868ad081a](https://i.gyazo.com/f69da589313c669109c388e868ad081a.gif)](https://gyazo.com/f69da589313c669109c388e868ad081a)

こんな感じでタブを増やしてもNERDTreeは常に同期されているのがわかります。

ちなみに私は以下の設定をしてます。

```vim
" 隠しファイルを表示する
let NERDTreeShowHidden = 1

nnoremap <silent><C-e> :NERDTreeFocusToggle<CR>

" デフォルトでツリーを表示させる
let g:nerdtree_tabs_open_on_console_startup=1

" 他のバッファをすべて閉じた時にNERDTreeが開いていたらNERDTreeも一緒に閉じる。
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
```
Ansibleのlineinfileを使ってAmazon Linuxのロケールをニッポンに変更する

## ■ Ansibleとは
+ **Ansibleの特徴**
    - エージェントレスでサーバ構築を自動化してくれるツールです。
    - sshdが動作しているマシンにSSHで接続し環境を構築してくれます。
    - 設定ファイルはYAMLで書きます。プログラムの知識（Ruby、Python、etc.）は不要です。
    - 数台～数十台規模のサーバ構築だったらchefよりも簡単です。

    　  
+ **環境の準備**
前々回の記事を参照してください。
[Ansible 最初の一歩](http://qiita.com/olympic2020/items/9c21d53066c9c6e5357f)


## ■ ロケールをニッポンに変更する
+ **playbook.yml**  
    lineinfileモジュールで文字列の置換を行っています。
    fileモジュールでシンボリックリンクをはっています。  
    
    ```playbook.yml
    - hosts: all
      remote_user: ec2-user
      become: true
      tasks:
        - name: set LANG
          lineinfile: >
            dest=/etc/sysconfig/i18n
            regexp='LANG=.*'
            line='LANG=ja_JP.utf8'
        - name: set ZONE
          lineinfile: >
            dest=/etc/sysconfig/clock
            regexp='ZONE=.*'
            line='ZONE="Asia/Tokyo"'
        - name: set UTC
          lineinfile: >
            dest=/etc/sysconfig/clock
            regexp='UTC=.*'
            line='UTC=false'
        - name: link localtime
          file: >
            src=/usr/share/zoneinfo/Asia/Tokyo
            dest=/etc/localtime
            state=link
            force=yes
    ```

+ **ansible-playbook**
    実行してみます。

    ```Bash
    $ ansible-playbook playbook.yml
    target01               : ok=5    changed=4    unreachable=0    failed=0
    ```

## ■ 確認
+ **playbook実行前**

    ```Bash
    $ env | grep LANG
    LANG=en_US.UTF-8
    $ cat /etc/sysconfig/i18n
    LANG=en_US.UTF-8
    $ locale
    LANG=en_US.UTF-8
    LC_CTYPE="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=
    $ date
    Thu Jun 30 15:05:14 UTC 2016
    $ strings /etc/localtime
    TZif2
    TZif2
    UTC0
    $ cat /etc/sysconfig/clock
    ZONE="UTC"
    UTC=true
    ```

+ **playbook実行後**
    ログインし直すと以下のように設定が変更されています。

    ```Bash
    $ env | grep LANG
    LANG=ja_JP.utf8
    $ cat /etc/sysconfig/i18n
    LANG=ja_JP.utf8
    $ locale
    LANG=ja_JP.utf8
    LC_CTYPE="ja_JP.utf8"
    LC_NUMERIC="ja_JP.utf8"
    LC_TIME="ja_JP.utf8"
    LC_COLLATE="ja_JP.utf8"
    LC_MONETARY="ja_JP.utf8"
    LC_MESSAGES="ja_JP.utf8"
    LC_PAPER="ja_JP.utf8"
    LC_NAME="ja_JP.utf8"
    LC_ADDRESS="ja_JP.utf8"
    LC_TELEPHONE="ja_JP.utf8"
    LC_MEASUREMENT="ja_JP.utf8"
    LC_IDENTIFICATION="ja_JP.utf8"
    LC_ALL=
    [ec2-user@ip-172-31-23-139 ~]$ date
    2016年  7月  1日 金曜日 00:27:46 JST
    $ strings /etc/localtime
    TZif2
            JCST
    TZif2
    JCST
    JST-9
    $ cat /etc/sysconfig/clock
    ZONE="Asia/Tokyo"
    UTC=false
    ```

    おしまい(^^)v
iPhone実機でデバッグしようとするとインストールが出来ない


【症状】実機でデバッグしようとするとエラーが出る
※ 検証できていない事象なので、メモ書きとして残しておきます。

【環境】Xcode7.3.1, Swift, iPhone5s

【内容】
Buildは成功するのに、"the application bundle does not contain a valid identifier"というメッセージウインドウが表示され、アプリがiPhoneの実機にインストール出来なかった

ネットで似たようなトラブルを探してみたところ、
- メッセージどおりidentifierがおかしくないか確認してみる
- リソース？フォルダの名前を変えてみた(英語がダメなので本当にそう書いていたのかは怪しいけど）
- インストールしてあるアプリを削除してクリーン(Product > Clean) + 実行(Product > Run)

などあったので試してみましたが、自分の環境では全く直らず３時間ほど困り果てていました。

いろいろ関係ありそうなところを触っていたら、XcodeのWindow → Projectsというところを見つけたので、ものは試しと、該当するアプリのDerived Dataを削除してみたところ、無事にインストールができました。
いつの間にかgitでデフォルトのページャがlvになっていた件



# 僕は何にもやってないのに git log / diff ができなくなった(怒)

原因がわからないが、~~社内用のWindowsマシン~~社内で使っているCentOSのサーバ上に
WindowsからTera Termで接続し、 git log とか git diff をしようと思ったら、

```
error: cannot run lv: No such file or directory
```
と出力。以前まで見れていたログが見れない(悲)。
どうも自分の環境だけのようだ。

解決方法は lv をインストールするか、

```
$ git config --global core.pager 'less'
``` 

などでデフォルトのページャを変更すればよい。

ちなみに自分のmacbookAirでこれを再現しようとしたところ、
上記のエラーが出るも、ログを確認することができた。
自動でlessが実行されたようだ。
gitのproxy設定をリポジトリごとに変える方法

# 動機
私の職場では社外アクセスにProxyが必要なのですが、`git config --global http.proxy http://[proxy]:[port]`をすると、社内のリポジトリにアクセスできなくなってしまうため。
[公式ドキュメント](https://git-scm.com/docs/git-config)にやり方が載っていたのですが、ググっても意外と日本語情報がなかったのでメモ代わりにまとめました。

# 対象バージョン
Git 1.8.5以降

# 方法
`# git config --global http.<url>.proxy [ProxyサーバーのURL]` 
で、GitサーバーごとのProxyを指定できます。
下記のように空文字を入れると、Proxyを使用せずにアクセスするようになります。
`# git config --global http.http://example.com/.proxy "" ` 

`~/.gitconfig`ファイルは下記のようになります。

```
[http]
	proxy = http://proxy.acme.com:8080

[http "http://example.com/"]
	proxy = 
```

` # git config --global --get-urlmatch http.proxy [リポジトリURL]`
で、指定したURLで使われるProxy設定を確認できます。
RxJavaでフィボナッチ数列を出力する


「RxJava フィボナッチ」でググるといくつか記事が出てきますが、あまりイケてるのがなかったので自分で書いてみました。

いくつかのオペレータを使うので、RxJavaの勉強には良さそうです。

# 値を保持するクラスを作成
今回は、1000より小さいフィボナッチ数列を出力します。

```java
public class Fibonacci {
    /**
     * フィボナッチ数列の値
     */
    private final BehaviorSubject<Integer> value = BehaviorSubject.create();

    /**
     * 値をObservableで取得する
     */
    public Observable<Integer> getValue() {
        return value.asObservable();
    }

    /**
     * 値をセットする
     */
    public void setValue(int i) {
        value.onNext(i);
    }

    /**
     * 値の計算元となる2つのObservableをセットする
     */
    public void setSource(Observable<Integer> observable0, Observable<Integer> observable1) {
        Observable.zip(observable0, observable1, (i, j) -> i + j) // 値が来たら足し算する
                .filter(i -> i < 1000) // 1000以上では止まるようにする
                .subscribe(value::onNext); // 値を更新する
    }
}
```

# 呼び出し側
通常、subscribeを循環させると無限ループになってしまうのでやりませんが、ここではあえてそうすることで、値を次々に計算していきます。

```java
public static void main(String[] args) {
    // 初期化
    Fibonacci a = new Fibonacci();
    Fibonacci b = new Fibonacci();
    Fibonacci c = new Fibonacci();

    // 値を出力する（※1）
    a.getValue().subscribe(System.out::println);
    b.getValue().subscribe(System.out::println);
    c.getValue().subscribe(System.out::println);

    // 値の計算元となる2つのObservableをセットする
    a.setSource(b.getValue(), c.getValue());
    b.setSource(c.getValue(), a.getValue().skip(1)); // （※2）
    c.setSource(a.getValue(), b.getValue());

    // 初期値をセットする
    a.setValue(0);
    b.setValue(1);
}
```

## ※1　必ず先に出力設定
値更新より前に出力設定をしないと、出力する前にどんどん値が更新されてしまいます。

## ※2　最初の値はスキップする
最初のbの計算では、aの初期値である0でなく、b+cが格納された後の2を使いたいので、1回だけスキップします。  
（本当はここもスマートに書きたい）

# 出力
```
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
```

# 考察
プログラムを書いていると、値を全て知っている人が現れるケースがしばしばあると思いますが、Subjectを使うことで、それぞれの項が自発的に値を計算し、それを伝搬している点で、責任が分散していていいかなと思いました。

似たような方法で、物理演算（波とか）もできるかなーとか思いました。

質問・ご意見があればお気軽にどうぞ！ :raised_hands:
【Angularjs】filterに自作検索条件を使う

filterに自作検索条件を使う方法です。

# 構文
```angularjs
{{<data> | filter : <mySearch>}}
```

\<data>:検索対象のデータ群
\<mySearch>:自作検索条件

# 例1

価格を持った製品のリストから、価格が100円以上のものをng-repeatでテーブル形式で表示する。

```sample.html
<tr ng-repeat ="product in products | filter : mySearch">
```

```sample.js
---

$scope.mySearch = function(value, index){
  return value.price >= 100;
};

---
```

mySearchメソッドが検索条件を表しています。
検索条件を自作するには、value(現在の要素)と、index(現在のインデックス)を引数とするメソッドを自作する必要があります。
そして、結果に反映したいものはtrueを返すようにします。


# 例2
価格を持った製品のリストから、価格が100円以上のものの件数を表示する。

```sample.html
<p>{{(products | filter : mySearch ).length}}</p>
```

```sample.js(例1と同じ)
---

$scope.mySearch = function(value, index){
  return value.price >= 100;
};

---
```

上記のようにすると、データ群の中で検索条件に合致する件数を表示することができます。
Slackのメッセージを一括削除

**※Slackのメッセージを一括削除する機能は公式では無くなってしまったようです。**

普通に知られていることなのかもしれないけれど、
https://twitter.com/slackhq/status/467182697979588608
Slackのメッセージを一括削除するのは

https://チーム名.slack.com/archives
または
https://my.slack.com/archives
のチャンネル一覧から該当のチャンネルを選ぶと右下に「Delete messages... 」の項目があるので、そこをクリックすると削除するメッセージを一括で指定できる。




大量だとちょっと時間がかかるので、いっその事チャンネルごと削除して、
同名のチャンネルを作り直したらいいんじゃないかとやってみたら、表示のたびに
同名のチャンネルが新旧２つ表示されたり、１表示だけになったりと挙動がおかしくなった。

![iroiro.png](https://qiita-image-store.s3.amazonaws.com/0/34699/a427f75a-7d81-59c9-22c7-70ceff6e0b71.png)

2017/4/28　今もう一度、試してみたら、新旧２つ表示されてしまう問題はなくなっていた。
でも、大量にメッセージが入ったチャンネルの削除はしてみてないので、メッセージを一括削除の方法として大丈夫かは不明。


**一括削除機能は廃止になったようです。（2017年６月以降？）**
https://twitter.com/SlackHQ/status/877893584577540096
今後、有償プランで一括削除ができるようになるかもしれないみたいです。
それまでは、ググると色々見つかる削除ツール等を使うしかないかも。
クリップボードの画像データを直接PNGファイルとして保存するコマンド

[GitHub - jcsalterego/pngpaste](https://github.com/jcsalterego/pngpaste)

Twitterでお気に入りの画像とか見つけて，素早くターミナル経由で保存したいときに超お役立ち  :sparkles: 
**JPEGがPNGに変換される**のも地味にありがたい :dizzy: 

```shell-session:インストール
mpyw@localhost:~$ brew install pngpaste
==> Downloading https://homebrew.bintray.com/bottles/pngpaste-0.2.1.el_capitan.b
######################################################################## 100.0%
==> Pouring pngpaste-0.2.1.el_capitan.bottle.tar.gz
🍺  /usr/local/Cellar/pngpaste/0.2.1: 5 files, 20.5K
```

```shell-session:ヘルプ
mpyw@localhost:~$ pngpaste -h
Usage: pngpaste [OPTIONS] <dest.png>
	-v	Version
	-h,-?	This usage
```


```shell-session:例
mpyw@localhost:~$ pngpaste ~/Pictures/inm/yjsnpi.png
```

ただこれそのままだとファイル上書き確認無しでやっちゃうので，上書き確認とか連番振りとかやりたい場合は`~/.bashrc`等でオーバーライドしてしまいましょう．

```bash:オーバーライドして機能拡張
pngpaste() {
    if [ "$1" = '-v' -o "$1" = '-h' -o "$1" = '-?' ]; then
        command pngpaste "$1"
        return
    fi
    while [ -f "$1" ]; do
        >&2 echo 'File already exists!'
        >&2 echo '(a)Abort  (o)Overwrite  (s)Sequence-Numbering'
        if ! IFS= read action; then
            return 1
        fi
        case "$action" in
            'a') 
                return
                ;;
            'o')
                command pngpaste "$1" && >&2 echo "Overwritten as $1"
                return
                ;;
            's')
                local ext=$([[ "$1" = *.* ]] && echo ".${1##*.}" || :)
                local name=$([[ "$1" = *.* ]] && echo "${1%.*}" || echo "$1")
                local i=0
                while true; do
                    (( i++ ))
                    local filename="$name-$(printf %02d "$i")$ext"
                    if [ ! -f "$filename" ]; then
                        break
                    fi
                done
                command pngpaste "$filename" && >&2 echo "Saved as $filename"
                return
                ;;
        esac
    done
    command pngpaste "$@" && >&2 echo "Saved as $1"
}
```
粒子的数値計算とOpenMP + Tree テスト計算と性能評価

※この記事は書きかけです

初めに
-

粒子法というのは、天文学などで多く使われる数値計算手法の一つで、
世の中の運動量保存則などは全て粒子間相互作用にコンバートされる。

粒子法は、馬鹿正直に計算を行うと、自分の周りの粒子全てとの相互作用を計算することになるため、
粒子数を$N$とすると、$N^2$の計算コストがかかる事になる。
そこで、一般的にはTree法と呼ばれる手法(Barnes & Hut, 1986)と、並列計算(e.g., OpenMP, MPI)などを組み合わせて、高速な計算を行う。

とは行っても、並列Tree法で性能を出そうと思うと、結構難しいコーディングを強いられる事になる。
そこで、これを何とか解決するために開発されたソフトウェアが、以上の事を自動で行ってくれるソフトウェアFramework for Developing Particle Simulator、略してFDPSである( http://www.jmlab.jp/?p=503&lang=ja )。
というか**僕も頑張って開発のお手伝いをしました**とも。

で、悲しいかなこれでど偉いコア数のCPU買ってくれば早くなるんでしょヒャッホイとは行かない。
というのも、
(1)Tree法は粒子数の少ないところでは普通に計算するより遅くなる。
(2)OpenMPはコア数をつぎ込んでも単純に早くなるとは限らない。
という事があるからである。
今回はそれを実際に見てみよう。

計算する方程式
-
今回はシンプルに重力を解くことにする。
即ち、

```math
\frac{\mathrm{d}^2 \vec{r}_i}{\mathrm{d} t^2} = - \sum_j \frac{m_j}{|\vec{r}_{ij}|^2} \hat{{r}}_{ij}
```
である。
これは明らかに$N^2$の計算量が必要な計算である。
これを、Tree法を用いて$N \log_8(N)$の計算コストにしてくる。

計測
-
以下、FDPSの使い方は特に説明しない。
とにかく、$[0, 1]^3$の計算boxに、$N$個の粒子をランダムにばらまき、1回の相互作用計算にかかった計算時間を見る。
計測は$N$を$2$からスタートして、2倍ずつ上昇させていく。
また、同時に並列計算に用いたコア数も$1$から順番に2倍にしていく。
計測に用いたのはIntel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHzで、これは12コア24スレッドである。
時間の計測にはCの関数``gettimeofday``を用いた。

また、ばらつきを抑えるために以上の測定を何回か行って13回ほど行った。

コード
-
省略…そのうちgithubとかにあげるかも

結果
-
まずは横軸を粒子数、縦軸を計算時間に取る。
![Nt.png](https://qiita-image-store.s3.amazonaws.com/0/44457/defb0324-0f8b-9b3c-2725-eb72b50bccdb.png)
青の点がTree法を用いた際の計測点、赤が$N^2$計算の計測展で、緑のカーブが$N log_8(N)$である。
使用コア数は1コアのみとした。

これから見て分かる通り、粒子数が少ないところ($N < 2048$)では、**ダイレクト計算の方が早い**。
これは、そもそもTree構造の生成に時間がかかるからであり、粒子数が少ない部分ではTreeを作らず正直に$N^2$するほうが早いという事である。

次に、横軸をコア数、縦軸を計算時間に取った物を表示した。
粒子数は65536である。
![ct.png](https://qiita-image-store.s3.amazonaws.com/0/44457/670a27a5-1824-942c-b238-aeede649bd1b.png)
これから、12スレッドのところまでは順調に計算時間が落ちていくが、そこから先は少し落ち悩む。
~~(コレなんでなんだっけ？同期？キャッシュ？)~~
多分HTのせいで物理的な演算装置が増えてないので、ここで一旦折れ曲がる。

また、24スレッドフルに使うと、たまに計算時間が跳ね上がる点がある。
多分これはOS jitterか何かだと思われるため、安全をきすなら24スレッド全部使うのではなく、
23とか22とかあたりにしておくと防げる。
あるいは、12スレッドの計算を2本流すとか。

結論
-
というわけで、Tree vs. Directの計算時間比較をしてみたり、コア数依存性を見てみたり。
「早くなる」と伝え聞いたからそれを使う、のではなく、自分がやりたい計算にとって最も効率的なconfigurationを選んできましょう。
情報の発信者に還元がされる方法を考えてみる

#はじめに

企業でディープラーニングなどなにか開発をしていると、
たまたま、ちょっとした面白い方法を発見をすることってあるかもしれません。
でも、それが社内で使えるのはほんの一部で、他の分野でも使えるかもしれない場合に
そのまま持っておくのは、ちょっともったいないと思うのです。
自分ひとりの考えることには限界がありますが、別の人から見れば新しい発見への
ヒントとなり、世の中がより便利になる可能性があります。

進歩の速い世界なので、数か月後には同じことを誰かがするかもしれませんが、
そうだったとしても、その発見が数ヶ月早く世の中に普及して便利になる
ことに意味はあると思います。

しかし、企業側としてその発見をどうするかってなると難しい問題で、

＜知財戦略＞
１．特許　⇒　煩雑でスピードが遅い
２．オープンソース　⇒　会社の利益にならない
３．社内にとどめる　⇒　活用の範囲に限界

２番を選んで公開することは、社会にとって一番役に立つわけですが、
自社のノウハウをなぜ無料で他社に渡すんだってことになりかねないわけです。

社外に活用されれば、はるかに社会全体の利益につながったとしても、
企業にメリットがなければ公開しない、というのは企業としては正しいのですが、
社会にとっては望ましい形ではありません。

やはり情報をオープンにするには、企業にとってインセンティブが必要で、
情報を発信した者（企業）に還元される仕組みが必要なんだと思います。


#還元がされる方法を考えてみる

例えば下図のように
・B社のある人がプログラムを作って共有サイトに投稿
・それをみてC・D・E社はプログラムをダウンロード
・利用者は貢献に応じて、contributionを評価
・共有サイトは企業から毎月定額の利用料を徴収
・毎月のcontributionに応じて投稿者に分配
のような形が考えらえると思います。
![20160630_還元方法.png](https://qiita-image-store.s3.amazonaws.com/0/109458/9c0f8ef2-063c-49ed-ed65-e1799782b98d.png)

いろいろと問題ありますが、なにかしら新たな仕組みがあったほうがいいと思うので
みなさんの何か考えるきっかけになってくれればと思います。
Android開発者向けにGoogleが「日本語」で用意してくれたサイト


開発者なので英語はほぼ必須とはいえアイアムジャパニーズなので、日本語で読めるサイトをメモしておきます。

Google Developers Japan(YouTubeチャンネル）
https://www.youtube.com/channel/UC6tAXy7UFO_QG0LeD_OKQBQ

デベロッパーポリシーセンター
https://play.google.com/intl/ja/about/developer-content-policy/
Mavenメモ1 pom.xmlの要素〜


引き続き、Mavenの理解を深めていく。

1. pomの項目(使用頻度が高いもの)
modelVersion pomのバージョン。特に変更する必要なし。
groupId プロジェクトを一意に表す文字列。通常はパッケージ名を使用。
artifactId パッケージ(jar,war等)の際に、名前となる文字列。
packaging パッケージする拡張子。通常jar。war,earも可能。
version プロジェクトの名前
name プロジェクトの表示名。(ドキュメント用)
url プロジェクトのサイトURL(ドキュメント用)
dependencies プロジェクトが依存するライブラリ情報


2. javadocの作成
mvn javadoc:javadoc


3. サイトの作成
mvn site


4. jarファイルの作成
mvn package


◆進捗
Maven | TECHSCORE(テックスコア)の
「2.8. jarファイルの作成」まで完了

◆参考サイト
・Maven | TECHSCORE(テックスコア)
http://www.techscore.com/tech/Java/ApacheJakarta/Maven/index/
HUBOTでSlackと連携する。（2回目）


[1回目はコチラ](http://www.noraneko.works/activity/b2ccf2cd13db5633bde3)

# Slackと連携するための準備
1. slackでBOT用のトークンを取得する
  * [コチラ](http://qiita.com/KeitaMoromizato/items/0ee11d795d18a49538d8)を参考にして環境変数の設定までおこなう。
  * なお、起動時に`bin/hubot`を叩くので覗いて見たら中で `npm install`を実行してから、`node_modules/.bin/hubot`を起動するshellだったので、`npm install`の後に`export HUBOT_SLACK_TOKEN=xxxxxxx`を入れて起動する直前でトークンを設定するようにしてみた。
  * これで、環境変数設定し忘れたりしなくなるかな。。。
2. Slack側での確認
  * 後はhubotをinviteしたチャンネルで呼びかけて見たら反応してくれる！
3. 単純につなぐまでは出来たので、後は好きな様にカスタマイズ！！！
  * いつも名前呼びかけるのもダルいので、特定のチャンネルに投稿されたら反応するようにする

  ``` .coffee
  # scripts/norabot.coffee
  #Commands:
  #  msg - Return a message msg
  #
    module.exports = (robot) ->
      robot.hear /(.*)$/i, (msg) ->
        room = msg.envelope.room
        text = msg.message.text
        text_en = encodeURIComponent text
        if room == "test"
          msg.send room, "#{text} "
  ```

  * 上記は`test`チャンネルに発言された内容をオウム返しする
  * 正規表現を覚えればなんか色々できちゃいそう。正規表現覚えなきゃ。。。
Qiitaで好きなタグの投稿をストック数順に表示するスクリプト

Qiitaで好きなタグの投稿をストック数順に見たい。

でも、タグページにあるのは「最近ストックされた投稿」と「新着投稿」で、
「ストック数の多い投稿」は先週のものしか見られない。
もっと長い期間でストック数の多い順に見れたりしないの？

* 例: JavaScriptのタグページ
    * http://qiita.com/tags/JavaScript

<img width="600" alt="tag.png" src="https://qiita-image-store.s3.amazonaws.com/0/60243/af7700ac-ac8f-7f41-fede-73a67fd8b3fb.png">

いろいろ触ってたら、どうやら検索画面ではストック数順ソートが普通にできるらしい。
これを使ってタグ検索＋ストック数順ソートすれば望む結果が得られる。

* 例: JavaScriptのタグ検索＋ストック順ソート
    * http://qiita.com/search?q=tag%3AJavaScript&sort=stock

なんでタグページから行けないのかはわからないが、
とりあえずこの検索画面へのリンクがあったら便利そう！

というわけでスクリプト書いた。

* [qiita-stock-ranking-link.user.js (Gist)](https://gist.github.com/tkrkt/2c5f881606fbe65bb869b1bfbdd92239)

Greasemonkey(Firefox)またはTempermonkey(Chrome)アドオンが必要。
アドオンを入れたあと、ソース右上のRawを押せばインストールできる。

やってることは、タグページにある「先週ストックの多かった投稿」の下に、
検索結果へのリンクを貼ってるだけ。単純。

<img width="250" alt="link.png" src="https://qiita-image-store.s3.amazonaws.com/0/60243/0a1bebe7-2ccf-bd66-53d2-f3a1c6e29e62.png">

これで好きなタグの記事をストック数順に見ることができるようになったが、
今度は古い記事ばっかり上位に出てくるのが気になってくる。
手軽に期間指定できるものが欲しい！

というわけでスクリプト書いた。

* [qiita-filter-by-created-at.user.js (Gist)](https://gist.github.com/tkrkt/6fd3531a100cdf2f1f567ba700e9a94f)
* [qiita-filter-by-updated-at.user.js (Gist)](https://gist.github.com/tkrkt/4c7f373faa66bf288c90d09e5f2f4965)

どっちか好きな方を入れておくと、
検索画面のちょうどいい感じに空いてるスペースに期間指定用のリンクが並ぶようになる。
検索オプションを書かなくても良くなるので便利。

<img width="600" alt="filter.png" src="https://qiita-image-store.s3.amazonaws.com/0/60243/b7d86ffc-db61-af15-c600-be5024b3a38e.png">

だいたい満足。良ければ使ってね。

こういう手軽な外科手術的ハックはとても好きなんだけど、
Reactのようなフレームワークが流行ってきたことでやりづらくなってきて困る。
みんなもっとjQueryをガンガン使えばいいと思います。
急いでダウンロードしたい時はwgetやcurlじゃなくてaxelを使おう

ソースとかisoイメージとかを、急いでダウンロードしなければならない場合は、wgetやcurlではなくaxelを使うと分割ダウンロードができるのでとてつもなく便利になる、ので皆使うべき。
※7/1追記：皆使うべき、というのは語弊がありました。必要に応じて急いでいる人は世界に謝りながら使うべきですね。

## インストール

### Mac OSX

Macの場合は超簡単。brewで一発で入る。

```
$ brew install axel
```

### CentOS 

普通のyumレポジトリにはないので、下記で対応。

```
# rpm -ivh http://pkgs.repoforge.org/axel/axel-2.4-1.el6.rf.x86_64.rpm
```

### Ubuntu
aptで一発で入る。

```
$ sudo apt-get install axel
```
※@SUZUKI_Masayaさんより追記頂きました。（2016/07/14）

### Arch Linux
以下でいけるようです！

```
pacman -S axel
```
※@starmineoujiさんよりコメントいただきました（2019/9/3)

## 使い方

```
$ axel -a -n 10 -o CentOS.iso http://mirror.fairway.ne.jp/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
```

これだけで、10分割してダウンロードするので、体感的に5倍くらい早くなった。

とても便利で簡単なので、みなさんも使ってみてください。

※参考までに、centosのminimumのイメージが普通に落とすと予想で60分だったのに対して、8分くらいで落とせました。isoとかは特に相性がいいだけかもですが。
結局どうすればセパレータは左端に寄るの？

TableViewにCustomCellを入れた時セパレータが左端までよらないことありますよね！
ネットを探し回りましたが、答えが見つからず結局自己解決したので備忘録として残しておきます。

##環境
Xcode Version 7.3

##結論
CustomCellのSeparatorのLeftを0にすればOKです！自分はこれで解決できました！
これ以外特に設定せずとも問題なく動作しております。
![スクリーンショット 2016-06-30 22.14.57.png](https://qiita-image-store.s3.amazonaws.com/0/120969/d7d3c12a-f00d-7257-a025-2037b551029d.png "スクリーンショット 2016-06-30 22.14.57.png")
Vagrant+chefでelasticsearchの環境構築


## 環境構築メモ

Vagrant+chefでelasticsearchの環境構築をしたときのメモ.
まずはelasticsearchをセットアップするcookbookの用意. 

```
$chef generate repo chef-repo
$cd chef-repo

#cookbook作成
$knife cookbook create elastic

#berkshelfを使う為に初期化
$cd cookbooks/elastic && berks init

#javaとelasticsearchを追加
$vi Berksfile
$cat Berksfile
source "https://supermarket.chef.io"

metadata

cookbook 'elasticsearch', '~> 2.3.2'
cookbook 'java', '~> 1.39.0'

#defaultのjdkバージョンだとelasticsearchが動かなかったのでバージョン指定
$vi attributes/default.rb
$cat attributes/default.rb
default['java']['jdk_version'] = '7'

#Elasticsearchをインストールして起動するレシピ
$vi elastic/recipes/default.rb
$cat elastic/recipes/default.rb
elasticsearch_user 'elasticsearch'
elasticsearch_install 'elasticsearch'
elasticsearch_configure 'elasticsearch'

elasticsearch_service 'elasticsearch' do
  service_actions [:enable, :start]
end

elasticsearch_plugin 'head' do
  url 'mobz/elasticsearch-head'
  notifies :restart, 'elasticsearch_service[elasticsearch]', :delayed
end

#chef provisionで使用するためcommunity cookbookをローカルに配置
$berks install
$berks vendor
```

なとなくできたはずなので、Vagrant側の準備.

```
$vagrant init

#config.vm.provisionの項目を追加
$vi Vagrantfile
$cat Vagrantfile
  ...省略...

  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = ["chef-repo/cookbooks", "chef-repo/cookbooks/elastic/berks-cookbooks"]
    chef.nodes_path = "chef-repo/nodes"
    chef.add_recipe "java"
    chef.add_recipe "elastic"
  end
```

最終的にこんなディレクトリ構成になるはず。

```
$tree -L 4 .
.
├── Vagrantfile
└── chef-repo
    ├── LICENSE
    ├── README.md
    ├── chefignore
    ├── cookbooks
    │   ├── README.md
    │   ├── elastic
    │   │   ├── Berksfile
    │   │   ├── Berksfile.lock
    │   │   ├── CHANGELOG.md
    │   │   ├── Gemfile
    │   │   ├── README.md
    │   │   ├── Thorfile
    │   │   ├── Vagrantfile
    │   │   ├── attributes
    │   │   ├── berks-cookbooks
    │   │   ├── chefignore
    │   │   ├── definitions
    │   │   ├── files
    │   │   ├── libraries
    │   │   ├── metadata.rb
    │   │   ├── providers
    │   │   ├── recipes
    │   │   ├── resources
    │   │   ├── templates
    │   │   └── test
    │   └── example
    │       ├── README.md
    │       ├── attributes
    │       ├── metadata.rb
    │       └── recipes
    ├── data_bags
    │   ├── README.md
    │   └── example
    │       └── example_item.json
    ├── environments
    │   ├── README.md
    │   └── example.json
    ├── nodes
    └── roles
        ├── README.md
        └── example.json
```

vagrantでインスタンスを作成しつつchefで環境を一気に構築.

```
#インスタンス作成からprovisioningまで
$vagrant up

#なんか足りてなかったら再読み込みしてchef再実行
$vagrant reload --provision
```

##感想

- レシピを試しに動かしながらデバックして作るのにvagrantはすごくあう

- vagrantもchefも中途半端な知識しか無い割には比較的さくっとできた

- Dockerでelasticsearch入ったコンテナ落としてきて動かした方が絶対早いとは思う

## 参考
https://github.com/elastic/cookbook-elasticsearch
https://github.com/agileorbit-cookbooks/java
https://www.vagrantup.com/docs/provisioning/chef_solo.html
今さら聞けないMacのターミナルでFTP

ここではローカル/Users/xxxxxxxxxx/work/sampleのindex.htmlをリモートの/sampleにアップロードします。

# ログインする

## ftp実行

ftpコマンドを実行するとftpのプロンプトが表示されます。

```:ftp
$ ftp
``` 

```:結果
$ ftp
ftp>
``` 

## open実行

openコマンドを実行するとアドレスの入力を促されます。

```:open
ftp> open
```

```:結果
ftp> open
(to)
```

## アドレスを入力
このとき私はyahooのgeocitiesを利用していたので、ftp.geocities.jpです。
接続できると、パスワードの入力を求められます。

```:アドレスを入力
ftp> open
(to) ftp.geocities.jp
```

```:結果
ftp> open
(to) ftp.geocities.jp
Connected to ftp.geocities.jp.
220-Welcome to GeoFTPd.
220-You are user number 39 of 128 allowed.
220-Local time is now 08:48. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 15 minutes of inactivity.
Name (ftp.geocities.jp:xxxxxxxxxxx): xxxxxxxxxx
331 User xxxxxxxxx OK. Password required
Password: 
```

xxxxxxxxxはユーザー情報を表しています。

## パスワードを入力

```:パスワードを入力
Password: 
````

```:結果
Password: 
230-OK. Current directory is /
230 2 Kbytes used (0%) - authorized: 97656 Kb
Remote system type is UNIX.
Using binary mode to transfer files.
```

これでログインできました。

# リモートにディレクトリを作成→ローカルのファイルをアップロード

## リモートにディレクトリを作成
```:mkdir
ftp> mkdir sample
```

```:結果
ftp> mkdir sample
257-"sample" : The directory was successfully created
257 0 Kbytes used (0%) - authorized: 97656 Kb
```

## 作成したディレクトリに移動
```:cd
ftp> cd sample
```

```:結果
ftp> cd sample
250 OK. Current directory is /sample
```

## lcdでローカルのディレクトリに移動
```:lcd
ftp> lcd /Users/xxxxxxxxxx/work/sample
```

```:結果
ftp> lcd /Users/xxxxxxxxxx/sample
Local directory now: /Users/xxxxxxxxxx/work/sample
```

## putでローカルのファイルをリモートにアップロード

/Users/xxxxxxxxxx/work/sampleにあるindex.htmlをアップロードします。

```:put
ftp> put index.html
```


```:結果
ftp> put index.html
local: index.html remote: index.html
200 PORT command successful
150 Connecting to port 56318
100% |***********************************|   489        1.03 MiB/s    00:00 ETA
226-2 Kbytes used (0%) - authorized: 97656 Kb
226-File successfully transferred
226 0.052 seconds (measured here), 9.24 Kbytes per second
489 bytes sent in 00:00 (7.80 KiB/s)
```

これでアップロードできました。
【MySQL】MySQL5.7をWordpressに組み込んでJSON型を使ってみる

#【MySQL】MySQL5.7をWordpressに組み込んでJSON型を使ってみる
***MySQL5.7から速度もアップしてJSON型が使用できるようになったということで、Wordpressを絡めて使用した時のメモ。今回は独自テーブルをJSON型を含む形で作成し、post_idでwp_postと紐付けて投稿内容をそこに格納してみる。***

・JSON型を含むテーブルをCREATE

```
CREATE TABLE wp_my_meta (
          id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
          json_val json DEFAULT NULL,
          modified_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
          create_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
          UNIQUE KEY id (id)
        )
        CHARACTER SET 'utf8';
```
こんな感じで。

・データのインサート

```
$temp_json_val = フォームのPOST値など(テストなら別に空でもいい);
$temp_json_val['post_id'] = $post_id;
$temp_json_val['post_type'] = $_POST['post_type'];
$temp_json_val['post_title'] = $_POST['post_title'];
$wpdb->insert( 'wp_my_meta', array('json_val' => json_encode($temp_json_val)));
```

これでインサートできる。

・データのアップデート

```
//更新するデータのid
$get_id = $wpdb->get_var(
            $wpdb->prepare(
                "SELECT id
                  FROM wp_my_meta
                   WHERE json_extract(json_val,'$.post_id') = " .$post_id)
        );
$temp_json_val = フォームのPOST値など(テストなら別に空でもいい);
$temp_json_val['post_id'] = $post_id;
$temp_json_val['post_type'] = $_POST['post_type'];
$temp_json_val['post_title'] = $_POST['post_title'];
$wpdb->update( 'wp_my_meta', array('json_val' => json_encode($temp_json_val)), array('id' => $get_id));
```

アップデート完了。

とりあえずここまでメモ。
ヒカラボ JavaScriptの情報交換LT会 行ってきたメモ。

https://atnd.org/events/77499

思っていたよりも初心者向けな内容でした。

大竹氏「Processing ではじめるインタラクティブコーディング入門」
--

到着遅れたのでデモしか見れなかった。


永井氏「ナウいJavaScriptアニメーション実装法」
--

* Parallax
* Stop motion
* CSS animation

### Parallax scrolling

今まではposition:fixed;をスクロール量取得してずらしていた。重い。
高解像度画像を１０枚とか使うとブラウザ落ちる。

そこでWebGLつかった。
手書きはしんどい。

* CreateJS ←コレ使った
* pixi.js
* three.js
* Processing.js

ズレ量、要素の高さを配列で保持する。

spliteStage?で扱うとWebGLが使われる。

### Stop motion animation

今まではスプライト作ってsetIntervalでずらしていた。扱いにくい。

指定したフレームを繰り返したり、止めたりしたい。

そこでCreateJSで実装。
SpriteSheet Classを使う。

JSONで配列でフレームを指定したものをオブジェクトとして細切れのアニメーションを定義できる。

### CSS animation

今まではjquery.animate使っていた。カクつく。
実態はsetIntervalでの実装。

そこでVelocity.jsを使う。request animation frameを使っている。
使い方はjquery.animateと互換性があるっぽい。

### まとめ

使い古された表現でも新しい実装使えば処理性能が上がるかも。


柏氏　「Webだけの知識でできたCordovaを使ったアプリ開発」
---

Push7というサービスを展開中。
W3C Push APIを利用。

### iOSはWEBから直接Push出来ない

iOSで使うときはCordova pluginから使う。
phonegap-push使っている。

WEBページ開いたのに連動してアプリ起動。Universal Links

### Cordova使った時に感じたデメリット

DeviceTokenが送られない。
デバッグ大変。
プラグインはxcode、UIはSafari開発ツール

iOSだとUniversalLinksだけど、AndroidはDeepLinksと仕様がちがう。

のびすけ氏「Let's enjoy JavaScript Robotics」
---

Web Bluetooth

WebUSB

navigater.*
  platform
  oscpu
  battery
  hardwareConcurerncy
  connection
  getGamepads
  getVRdevice
  getBattery
  vibrate
  mediaDevices

のびすけさんの発表はちょいちょい聞いてるのでメモが少なくなってしまった……。

福岡氏「React + Redux + Node.js + Raspberry Piでビデオプレイヤーを作りたかった話」
---

オススメBoilerplate react-webpack-node
react+redux+express

PostCSS良かったよ

classnameでオブジェクトっぽく、CSSクラス定義を使える

AMP
GoogleのWebサイトキャッシュサービス
JSが動かない

Facebook Instant Article
これもJSが動かない

AppleNewsも
アロケータを指定できて参照がなくなった時点で破棄されるSingleton

# アロケータを指定できて参照がなくなった時点で破棄されるSingleton
## はじめに
[shared_ptrを使用したSingletonの実装](http://qiita.com/block/items/5604104ab2b0392590aa)
[Singletonのアロケータを後から指定 (shared_ptrを使用したSingletonの実装の続き)](http://qiita.com/block/items/f6c3c56bf6c3e6de4506)
上2つの続き的なものですが読まなくて大丈夫です。

## 実装
```cpp
// アロケータ指定用
template <typename T>
struct singleton_allocator
{
  template <typename U>
  using type = std::allocator<U>;
};

// singleton
template <typename T>
class singleton
{
private:
  struct impl : public T{};
  using allocator_type = typename singleton_allocator<T>::template type<impl>;

protected:
  singleton() = default;

public:
  virtual ~singleton() { instance_.reset(); }

  singleton( singleton const& ) = delete;
  singleton& operator=( singleton const& ) = delete;

public:
  static std::shared_ptr<T> get_instance()
  {
    auto ret_ptr = instance_.lock();
    if( ret_ptr )
    {
      return ret_ptr;
    }

    ret_ptr   = std::allocate_shared<impl>( allocator_ );
    instance_ = std::weak_ptr<T>( ret_ptr );
    return ret_ptr;
  }

private:
  static std::weak_ptr<T> instance_;
  static allocator_type   allocator_;
}; // class singleton

template <typename T> std::weak_ptr<T> singleton<T>::instance_;
template <typename T>
typename singleton<T>::allocator_type singleton<T>::allocator_;
```

## 使い方
### アロケータを指定しない場合
シングルトンにしたいクラスを ```singleton<T> ``` を継承して定義します。

```cpp
class A : public singleton<A>
{
private:
  friend class singleton<A>; // コンストラクタがprivateなのでfriend宣言が必要
  A(){}
public:
  ~A(){}

  void func(){}
};
```

使用例

```cpp
int main()
{
  std::shared_ptr<A> a1 = A::get_instance(); // 初回のget_instance()時にインスタンス生成

  std::shared_ptr<A> a2 = A::get_instance(); // a1と同じオブジェクトを指す

  a1->func(); // shared_ptrなので普通のポインタのようにメンバにアクセスが可能
} // ここで参照が0になるので自動で破棄される
```

### アロケータを指定する場合
使用するアロケータを```my_allocator```とします。
上の```class A```を**定義する前**に以下のような定義をします。

```cpp
class A; // 前方宣言

template <>
struct pyrite::singleton_allocator<A>
{
  template <typename T>
  using type = my_allocator<T>;
};
```

後はアロケータを指定しない場合と同じです。

## 解説
```cpp
template <typename T>
struct singleton_allocator
{
  template <typename U>
  using type = std::allocator<U>;
};
```

はじめのこの部分はアロケータを指定するのに必要な部分です。
``` singleton_allocator ``` を部分特殊化することでアロケータを指定します。
デフォルトでは ``` std::allocator ``` を使用します。




型Tのコンストラクタがprivateで宣言されているはずなので ` allocate_shared<T> ` や `make_shared<T> ` が使えません。
しかし `allocate_shared` を使用したいので型Tを継承した ` impl ` を定義します。

```cpp
struct impl : public T{};
```

この辺のことは [std::make_shared から private コンストラクタを呼び出す](http://d.hatena.ne.jp/gintenlabo/20131211/1386771626) にいろいろ書いてあるので是非。


デストラクタ内で ` instance_.reset() ` しているのは ` make_shared ` などで確保したメモリは弱参照が残っていても開放されないからです。

後は特に変わったことはしていないと思います。

## まとめ
Singletonの型を変えずに派生クラスを定義する側でアロケータを指定できます。
Singletonのアロケータを指定したいと思うことがあるのかはわかりませんができないよりできたほうが良いだろうというだけです。

参照が0で ` get_instance() ` を呼び出すとインスタンスが生成されます。
参照が0になった時点で自動で破棄されます。

注意しなければならないのは

 - 実際確保する方が ` singleton<T>::impl ` 型である
 - T型に ` final ` をつけられない

あたりだと思います。
Reactでprototypingする時にdocument.bodyにレンダリングすんな！って怒られた時の回避


ReactDomで、下記のように直接`document.body`にレンダリングすると怒られる


```index.js
ReactDom.render(
　　<Main />, 
　　document.body
)
```

```
Warning: render(): Rendering components 
directly into document.body is discouraged,
since its children are often manipulated by third-party
scripts and browser extensions. 
This may lead to subtle reconciliation issues. 
Try rendering into a container element created for your app.
```

サードパーティscriptやextensionが`document.body`に依存してる可能性あるからやめておけという警告。とても真っ当。
productionコードなら、`<div id="container"></div>`のようにdivを書いてそちらを指定して回避する。

が、[budo](https://github.com/mattdesl/budo)などを使ってちょこちょこっと素振りやprototypingするときに、index.htmlをいちいち作りたくない。

# 解決策
`createElement`を直接`appendChild`してそれをターゲットとする。

```index.js
ReactDom.render(
　　<Main />,
　　document.body.appendChild(document.createElement('div'))
)
```

繰り返しになるが、budoのようなprototyping用の想定なので、productionではやらない。おとなしく`<div id="container"></div>`とhtmlに書く方が良い
Pepper SDK for Android Studioでモーションを作成してみた

Qiita初投稿です。

Pepper SDK for Androidがリリースされたので、早速触ってみました。
SayやQichatについては、他の方がすでに投稿されていますので、自分はPepperのモーション作成について書いてみます。

#環境
- Mac OS X 10.10.5 / Android Studio  2.1.2

現在、公式では非推奨とされていますが、Mac版Android StudioでもSDKをインストールし、動かすことができます。

#アニメーションタイムラインの新規作成
1. [ここ](https://android.aldebaran.com/doc/create_project.html#create-project)を参考に、プロジェクトの新規作成まで終わらせておきます

2. `File > New > Animation Timeline`を選択すると、以下のウィンドウが表示されるので、適当に名前を付け、Createを選択します

![スクリーンショット 2016-06-30 18.56.15.png](https://qiita-image-store.s3.amazonaws.com/0/129473/23b68185-eba8-f8b9-a358-6417c656b630.png)

Choregrapheでもおなじみの、タイムラインエディタが表示されました。

![スクリーンショット 2016-06-30 19.00.36.png](https://qiita-image-store.s3.amazonaws.com/0/129473/2b4795d1-f42d-28d0-f713-0d5929d5db73.png)

※ここで、バーチャルロボットを起動させていない場合、起動するかどうかのダイアログが表示されることがありますので、表示された場合は、バーチャルロボットを起動してください。
#バーチャルロボットでモーションを作成
これまで、Pepperのモーションを作成する時は、自分はPepper実機とアニメーションモードを駆使していたのですが、まだAndroid対応のPepperがリリースされていない（執筆当時）ので、バーチャルロボットを動かしながらモーションを作成します。

【参考】http://qiita.com/Atelier-Akihabara/items/7847aa3fb10069e0f2aa#2-3

バーチャルロボットの各部位をクリックすると、ローテーションハンドルが表示さます。
Choregrapheで表示されていたモーションダイアログは表示されないようです。

![スクリーンショット 2016-06-30 19.17.12.png](https://qiita-image-store.s3.amazonaws.com/0/129473/c799949f-c001-48bf-8340-0ef50815f55d.png)

好きなポーズをバーチャルロボットに取らせた後、タイムラインエディタ上でフレームを右クリックし、`Create Keyframe > Whole Body`を選択すると、モーションキーフレームが挿入されます。
ここはChoregrapheと一緒ですね。

また、タイムラインエディタの左上にある曲線アイコンをクリックすると、[カーブビュー](http://qiita.com/Atelier-Akihabara/items/adbcbf5de1c04767ca93#%E3%82%AB%E3%83%BC%E3%83%96%E3%83%93%E3%83%A5%E3%83%BC)に切り替えることも可能です。

#Choregrapheのモーションを移植してみる
試しに、[よしもとロボット研究所が公開しているモーションライブラリ](http://pepper-atelier-akihabara.jp/archives/280)の中のひとつ、「両手ウッス腰へ」をAndroid Studio上で作成してみました。

ボックスライブラリのモーションを極力そのまま移植したのですが、**各関節の角度をChoregrapheで調べて、Android Studio側のエディタにコピペ**する必要がありました。
また、Android Studio側のタイムラインエディタでは、前述の通りモーションダイアログが表示されないので、カーブビューに切り替えて、いちいち各関節の値を入れることに…。
もう少しスマートな方法があったかもしれません。
【2016/9/12追記】以下の記事でテキストエディタを使ったコピー方法が紹介されています。
[Pepper SDK for Android Studio用アニメーションオブジェクトの生成](http://qiita.com/UMasaU/items/803b296c8bce7f056404)

何とか「両手ウッス腰へ」のキーフレームをAndroid Studio側に打ち込んだので、バーチャルロボットで再生してみます。
モーションを再生する場合、タイムラインエディタ右上の黒い矢印ボタンをクリックします。

![スクリーンショット 2016-06-30 20.13.11.png](https://qiita-image-store.s3.amazonaws.com/0/129473/5fa9b6e3-4517-65af-9971-3736011c48d8.png) ![スクリーンショット 2016-06-30 20.13.30.png](https://qiita-image-store.s3.amazonaws.com/0/129473/2fb481d9-8999-51df-bf7b-3e0d6f65f786.png)

無事に再生できました。

#所感など
Android Studioでも、モーション作成はほぼChoregrapheと同じ感覚でできそうです。
（実機が無いのでまだ何とも言えませんが…）
あと、Choregrapheで作成したモーションを、Android Studio側にインポートする機能が欲しいですね。
Atomのmarkdown-pdfを使った時に長いコードブロックを全て表示させるための対処法

# tl;dr
Markdownで手順書を書く機会があったのですが、markdown-pdfを使ったPDFへの出力時に、コードブロックにスクロールバーが入ってしまい、コマンド列が確認できなくなってしまいました。
そこで、styles.lessに適当な設定を入れて対応しましたというお話です。

# 事象
何も設定を加えずにmarkdown-pdfでPDFを出力すると、一定の長さをはみ出した場合以下のようにスクロールバーが出た状態のPDFファイルが出力されてしまいます。

![image](https://qiita-image-store.s3.amazonaws.com/0/76791/5f343251-8382-33a6-72ea-df93e22011de.png)

PDFなので勿論スクロールバーは動かせません。
印刷前提で作っている手順書もあるため、これだと使い物になりません。

# 対処後
とりあえずスクロールバーは表示させず、コードブロックの内容を全て出力できるようになりました。

![image](https://qiita-image-store.s3.amazonaws.com/0/76791/d6f31392-e202-f1e8-a567-b043f71391d6.png)



# styles.lessの設定

追記した設定は以下の通り。

```css:styles.less
.markdown-body pre,.markdown-body .highlight .markdown-body em{
  word-break: break-all;
  white-space: normal;
}
```

これだけです。

CSS自体よくわかっていないのですが、 `word-break` プロパティと `white-space` プロパティの両方を指定しないとスクロールバーが消えてくれません。
調べても `word-break` プロパティと `white-space` プロパティってやってること同じような気が・・・何が違うのかさっぱり・・・。
対処法を調べていた時は多分違いを理解した上でstyles.lessに書いたのでしょうけど、今となっては・・・。

とりあえず、これでどうにかなったのでした。
めでたし。
Tensorflowで使用するGPUおよびGPU台数とGPUメモリ使用率を指定する方法

何も考えずにGPUを積んだマシンでtensorflowを動かすとすべてのGPUを使ってしまう。これはこれで便利なのだが、他の人と共用のマシンだとリソース的に厳しい。そこで以下のようにして、Sessionに入る前に設定をする。

```py
gpuConfig = tf.ConfigProto(
    gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.5),
    device_count={'GPU': 1})
with tf.Session(config=gpuConfig) as session:
    # 以下略
```
`tf.GPUOptions`によりその設定をするわけだが、`per_process_gpu_memory_fraction`でGPUメモリの使用率を（×１００%）、device_countでGPUをいくつ使うかを指定する。上記の設定ではGPU１台を50%のメモリ使用率で用いるということである。どのGPUを使うかの設定は、自分はシェルの環境変数`CUDA_VISIBLE_DEVICES`によった。例えば以下のようにする。

```export CUDA_VISIBLE_DEVICES="0"
```
ここでどの数字を与えるかでGPUの特定がなされるわけだが、どの数字を与えるべきかは環境依存である。何も設定せずに動かして全GPUをフルに使った場合、tensorflowのログにおそらく現れる使用GPUの通し番号が0から始まるという認識でよい。したがって、'0'を与えれば1台目のGPU、'1'を与えれば2台目のGPU、である。複数台なら`export CUDA_VISIBLE_DEVICES="0, 1"`などとすればよい。
CentOS 7.2で、geditのプラグインが使えるようにする(メモ）

*CentOS 7.2でgeditのプラグインが使えるようにしたときのメモ*

#はじめに
Ubuntu 14.04上のVirtual BoxにCentOS 7.2を導入した。
しかし、このCentOS 7.2上で、geditのプラグインを設定しようとすると下記のようなエラーが出力され、プラグインが利用できない。
>(gedit:3720): libpeas-WARNING **: Error initializing Python Plugin Loader: PyGObject initialization failed ImportError: could not import gobject (could not find _PyGObject_API object)
>(gedit:3720): libpeas-WARNING **: Please check the installation of all the Python related packages required by libpeas and try again
>(gedit:3720): libpeas-WARNING **: Loader 'python' is not a valid PeasPluginLoader instance

#原因と解決方法
調査の結果、pygobject3とpygobject3-baseをバージョン3.14.0-3から3.8.2-6へダウングレードすればよいことがわかった。
結局、下記コマンドでgeditのプラグインが利用できるようになった。
`sudo yum downgrade http://vault.centos.org/7.1.1503/os/x86_64/Packages/pygobject3-3.8.2-6.el7.x86_64.rpm http://vault.centos.org/7.1.1503/os/x86_64/Packages/pygobject3-base-3.8.2-6.el7.x86_64.rpm`

#参考
本メモを作成するにあたり、下記を参考にしました。投稿者に深く感謝申し上げます。
>https://bugs.centos.org/view.php?id=10403
Kobitoのプレビュー画面でFont Awesomeのアイコンを表示する方法


## <i class="fa fa-fonticons"></i> はじめに
Qiitaでは[Font Awesome](http://fortawesome.github.io/Font-Awesome/)が読み込まれているため、記事中でもHTMLで[Font Awesome Icons](http://fortawesome.github.io/Font-Awesome/icons/)を使用することが出来ます。

たとえば、こんなの<i class="fa fa-cubes"></i>とか、こんなの<i class="fa fa-database"></i>とか、こんなの<i class="fa fa-github"></i>とか800種類くらいのアイコンがQiita記事に使用できます。（あわせて読みたい：[Qiitaで使えるアイコン一覧](http://qiita.com/noriaki/items/f11cd960988dc2560cca)）

## <i class="fa fa-warning"></i> 課題

しかし、QiitaのMac用エディタである[Kobito](http://kobito.qiita.com/)では、初期設定のままではリアルタイムプレビュー画面にアイコンを表示することができません。

## 	<i class="fa fa-check-circle-o"></i> Kobitoのプレビューにアイコン表示する設定

2Stepでアイコンを表示できるようになります。

### Kobitoの環境設定を変更する

メニューバーの`Kobito`から`環境設定`をクリックし、下図のように`プレビューにカスタムCSSを適用する`へチェックを入れます。
![環境設定内のプレビューにカスタムCSSを適用するにチェックを入れる](https://qiita-image-store.s3.amazonaws.com/0/6368/f5586236-22da-4b89-e288-e33bfad74824.png "環境設定内のプレビューにカスタムCSSを適用するにチェックを入れる")

### カスタムCSSに1行追記する

同じ`環境設定`ダイアログで、`カスタムCSSを開く`をクリックするとエディタが起動するので以下の1行を追記して保存します。

```custom.css
@import url(https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.1/css/font-awesome.min.css);
```

これでKobitoのリアルタムプレビュー画面にFont Awesomeのアイコンが表示されるようになります。

## <i class="fa fa-folder"></i> さいごに

役に立ちそうでしたら「ストック」してもらえると嬉しいです。
それでは良いQiitaライフをお過ごしください。
Angular2 入門①(環境構築編)


# 概要

AngularJS(Angular1)は触っていましたが、Reactを触り出して以来、React中心で開発していました。

React大好きなのですが、Angular2が出たので敵情視察という事で入門しようと思います。
(アシアルさんの [**OnsenUI for Anuglar2**](https://onsen.io/v2/angular2.html) が出たのがきっかけです。)

環境の構築は、ごちゃごちゃとややこしそうなので、とりあえず[本家](https://angular.io/)の雛型をインストールして動かしてみようと思います。

# 前提条件

* Node.js・Gitはインストール済み。
* JavaScriptをある程度はかじっている。
* できれば、Angular1/Reactをかじっていればよい。

# 環境構築

* 雛型をインストールした場所へ移動して、ルートディレクトリを作成。

```
cd Desktop
```

+ 雛型ディレクトリのクローン。

```
git clone https://github.com/angular/quickstart.git
```

* 作成した雛型ディレクトリへ移動。

```
cd quickstart
```


+ package.jsonの中身をインストール。

```
npm install
```

+ ローカルサーバ起動。

```
npm start
```

# 結果

ちゃんと動きました。

![Angular_2_QuickStart.png](https://qiita-image-store.s3.amazonaws.com/0/129216/6a84cc61-47a9-cd01-757c-7008e843da6b.png)

ローカルサーバの起動・TypeScriptのコンパイルなど、最初から設定されているので、まずはAngular2を試してみたいという人にはちょうどいいんじゃないかと思います。(また1からの環境開発もまとめたいですが。)

# 終わり

次回以降、Angular2のSynthaxを調査していこうと思います。
React・Angular1と比較しながら良し悪しも意見できればと思います。

続きは次回。
【Apache】FastCGIで使用しているモジュールをmod_fastcgi → mod_fcgidに切り替える

# 参考にしたサイト

以下記事を参考に設定を行っています。
先にこちらをご覧になって、分からなかったら以下手順を参考にしていただければ良いかと思います。

[FastCGI+Apache インストールメモ（mod_fcgid）](https://www.softel.co.jp/blogs/tech/archives/2100)
[apache の FastCGI(mod_fcgid) で phpを動かしてみる](http://server-setting.info/centos/apache_fastcgi_fcgid_php.html)
[apache の FastCGI(mod_fastcgi) + PHP-FPM で phpを動かしてみる(CentOS,ScientificLinux編)](http://server-setting.info/centos/apache-mod_fastcgi-php-fpm.html)
[apache で phpのモジュール版とcgi版の切り替えを行ってみる](http://server-setting.info/centos/php_cgi_module_exchange.html)

# mod_fcgidの設定

## インストール

```
yum install mod_fcgid
```

# mod_fastcgiを読み込めないようにする

後々復活をさせることも考慮して、renameで対応

```
mv /etc/httpd/conf.d/fastcgi.conf /etc/httpd/conf.d/fastcgi.conf_
```

# apacheの設定

```/etc/httpd/conf/httpd.conf
<Directory "/xxx/xxx/xxx">
    Options FollowSymLinks ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
    AddHandler fcgid-script .php
    FCGIWrapper /usr/local/bin/php-cgi .php
</Directory>
```

* mod_fastcgiで"+IncludesNoExec"と記述していたところを"FollowSymLinks ExecCGI"に切り替える
* AddHandlerを追加
* FCGIWrapperを追加

## 補足 : php-cgiを探すコマンド

```
find / -name 'php-cgi'
```
最近Qiitaの記事の見出しにアイコン付いているのが気になって調べてみた

# <i class="fa fa-camera-retro"></i> ← こういうのをやりたい

これ調べていてふと気付いたのだけど[htmlも(一部は)書ける](http://qiita.com/Qiita/items/c686397e4a0f4f11683d#%E3%81%9D%E3%81%AE%E4%BB%96)のですよね。

ということは、言うまでもないというか、単純に見出しにhtmlを記述していたのです。
上記のアイコンはこのようにして記述しています。

```
# <i class="fa fa-camera-retro"></i> ← こういうのをやりたい
```

見出しに限らず使えます。

<i class="fa fa-star"></i> <i class="fa fa-star-o"></i> <i class="fa fa-star"></i> <i class="fa fa-star-o"></i> <i class="fa fa-star"></i> <i class="fa fa-star-o"></i> <i class="fa fa-star"></i> <i class="fa fa-star-o"></i> <i class="fa fa-star"></i> <i class="fa fa-star-o"></i> <i class="fa fa-star"></i> <i class="fa fa-star-o"></i> <i class="fa fa-star"></i> <i class="fa fa-star-o"></i> 

アイコン一覧はこちら
http://fontawesome.io/icons/
Mac OS XでCommand + E にて Finderを起動する方法

# きっかけ
元々Windows界隈で育ったためか「Windows + E」でエクスプローラーを開く癖があります。
最近は(WWWDCで刺激を受け)MacBookを中心にお仕事をしているのですがどうしても「Command + E」でFinderを起動したかったのでちょっと工夫してみました。

# 利用したソフト
- [Karabiner](https://pqrs.org/osx/karabiner/index.html.ja)

# 方法
[Macのキーバーインドを変更 - アプリ「Karabiner」](http://pc-karuma.net/mac-app-karabiner/) を参考にインストールして、Private.xmlの編集を行う。

「Control + F3 + Enter」でFinderを起動できることは知っていたので、Karabinerを使って「Command + E」を「Control + F3 + Enter」に置き換えました。

具体的には、private.xml に以下の記載を追加しました！

```xml
<?xml version="1.0"?>
<root>
	<!-- よく使うRDCベータ版では動作しないために準備しておく -->
	<appdef>
		<appname>Microsoft_RDC_beta</appname>
		<equal>com.microsoft.rdc.osx.beta</equal>
	</appdef>

	<item>
		<name>Command + E で Finderを表示する</name>
		<identifier>private.open.finder</identifier>

		<!-- RDCではWindows側のExplorerを開きたいので無視設定をする -->
		<not>Microsoft_RDC_beta</not>

		<!-- 「左Command + E」 を 「F3 + 左Control + Enter」に割り当て -->
		<autogen>
			__KeyToKey__
			KeyCode::E, ModifierFlag::COMMAND_L,
			KeyCode::F3, ModifierFlag::CONTROL_L, KeyCode::ENTER
		</autogen>
	</item>
</root>
```

設定できたら追加したルールにチェックをつけ、いざ「Command + E」でFinder起動!
![Karabiner設定画面](https://qiita-image-store.s3.amazonaws.com/0/48016/bc7412ce-ec6a-8ee2-b907-1c1f9e699514.png)


ちなみに、自分は左のCommandキーしか使わないので記載していませんが、右Commandキーをご利用になる場合は追加が必要です。

# 最後に
本当に素晴らしいソフトを作成していただいてありがとうございます!!!
また、コメントで教えていただいて初めて知ったのですが注意点として「選択したディスクを取り出し」のショートカットとかぶってしまうので利用されている方はご注意くださいませ。

# 参考にさせていただいたサイト
- http://pc-karuma.net/mac-app-karabiner/

# Karabinerリファレンス
- https://pqrs.org/osx/karabiner/xml.html.ja
- https://github.com/tekezo/Karabiner/blob/master/src/bridge/generator/keycode/data/KeyCode.data