OmniAICreator/Qiita-1.07M huggingface dataset:
「FMC2Goスケジューラーにおける絞込み検索機能」のつづき


[FileMaker Advent Calendar 2015](http://www.adventar.org/calendars/865)の21日目

# 「FMC2Goスケジューラーにおける絞込み検索機能」のつづき
[「FMC2Goスケジューラーにおける絞込み検索機能」](http://qiita.com/or2/items/271ac5a84aaee7708a5d)の続き

昨日「絞込み」ボタンの中のボタンに「Session Filter」スクリプトが割り当てられていたのを確認できたので、「Session Filter」スクリプトを見ていくことにする

## 「Session Filter」スクリプトの呼び出しを確認する
![151221-01.png](https://qiita-image-store.s3.amazonaws.com/0/89027/544c30cb-b1cd-43e4-7fc3-9805a71ba3fc.png)
ボタンを確認すると、「Session Filter」スクリプトが呼び出されるときに指定したい検索条件をスクリプト引数で渡しているようだ

## 「Session Filter」スクリプトを見ていく
昨日、ファシリテータの永井さんより「この機能を見ていくにあたっては結果から見ていくとわかりやすい」という情報をもらっていたことは書いたので、「Session Filter」スクリプトはお尻から見ていくことにする

### 最初(最後)のブロック
![151221-02.png](https://qiita-image-store.s3.amazonaws.com/0/89027/6508ed22-0aed-7c0b-583e-a679541ecfea.png)
「Get ( 最終エラー )」でエラーが無かったか、「Get ( 対象レコード数 ) = 0」で対象レコードが見つかったかを確認
Ifブロックの中はエラーメッセージの定義忘れですかね？
レコードをソートして最初のレコードに移動しています

ここまではレコードの絞り込みのありきたりな処理です

その後「SchedulePopover」というオブジェクトに移動しています
この「SchedulePopover」というオブジェクトは何を指しているかというと、まあ名前の通り「絞込み」ボタンに割り当てられている「ポップオーバー」です
![151221-03.png](https://qiita-image-store.s3.amazonaws.com/0/89027/deb2ffc7-3727-793b-7489-6c7bb1e176a2.png)
「ポップオーバー」は「ポップオーバーボタン」を押すことで表示されるのですが、スクリプトからは「オブジェクトへ移動」スクリプトステップを実行することで表示させることができます

オブジェクトへ移動
> 目的 
現在のレイアウト上の指定オブジェクトに移動します。
構文 
オブジェクトへ移動 [オブジェクト名:""<オブジェクト名>"]

そして「ポップオーバー」の中のオブジェクトに条件付き書式を設定しているので、それを反映させるために「オブジェクトの更新」スクリプトステップを実行を実行しています

オブジェクトの更新
> 目的 
指定されたオブジェクトの内容、条件付き書式の設定、表示状態を更新します。
構文 
オブジェクトの更新 [オブジェクト名:"<オブジェクト名>";繰り返し: <値または式>]

### 次のブロック
![151221-04.png](https://qiita-image-store.s3.amazonaws.com/0/89027/7eb38e56-c72c-dfeb-7d31-d0e4fd26dc4b.png)
このブロックで対象レコードを確定しています
「Schedule」テーブルの「gScheduleFilterIDs」というグローバルフィールドに、ローカル変数「$IDs」の値を設定して「ScheduleByGlobal」テーブルの関連レコードに移動しています
ローカル変数「$IDs」には条件に該当するセッションのスケジュールのIDが入っているのでは？と推察できます

#### 「Schedule」テーブルと「ScheduleByGlobal」テーブル
リレーションシップグラフで確認してみます
![151221-05.png](https://qiita-image-store.s3.amazonaws.com/0/89027/762e7f05-e80f-2973-ef4f-7c63396118e8.png)
今回対象となりそうなのはこのリレーション

中身を見てみます
![151221-06.png](https://qiita-image-store.s3.amazonaws.com/0/89027/f5c4edf6-9a57-0646-1e49-00de6d2eae62.png)
「Schedule」テーブルの「gScheduleFilterIDs」フィールドと「ScheduleByGlobal」テーブルの「__kp_Schedule_ID」フィールドの間でリレーションが張られていますね

![151221-07.png](https://qiita-image-store.s3.amazonaws.com/0/89027/4c92742f-11a6-ace8-2a38-9bf396e44806.png)
「ScheduleByGlobal」テーブルは「Schedule」テーブルの別名のようです
ということは自己リレーションですね

明日は「関連レコードに移動」について書いてみます
【FileMaker】バーコードフォントを読み取る

FileMaker Advent Calendar 2015 21日目です。

私、どっかでバーコードフォントを読み取る記事を書いた覚えがあるのですが、、、忘れちゃったのでまた書きます💦

バーコードフォントを読み取るのは、まるっとFileMakerのサイトで公開されているので、[ここ](http://filemaker-jp.custhelp.com/app/answers/detail/a_id/13375/~/バーコードのスキャニング)を見るとすぐに作成できると思います。

ちなみに、FileMakerで利用出来るバーコードは、[ここ](http://filemaker-jp.custhelp.com/app/answers/detail/a_id/12964/related/1)に指定されています。

では、上記サイトを元にゆるっとバーコード読み取りを作っていきましょう。

まず、テーブル定義です。
![スクリーンショット 2015-12-20 20.25.38.png](https://qiita-image-store.s3.amazonaws.com/0/60538/519700dc-1119-d7c8-4f8f-a036ed8ce04a.png)
iPhoneで読み取り専用のグローバルフィールドを定義します。
これは今回読み取るだけなのでグローバルフィールドにしていますが、何らかのレコードにバーコード読み取りとその後の処理を結びつけるなら、バーコードを使って管理しているテーブルのレコードなどに結びつけた方が利便性が良いと思います。

iPhoneレイアウトを作り、読み取りテーブルのフィールドを置いていきます。
![スクリーンショット 2015-12-20 20.25.49.png](https://qiita-image-store.s3.amazonaws.com/0/60538/41ab0dca-8fff-6fc5-fa48-0287d1d79bac.png)

画像フィールドをタップされたらバーコードリーダーが立ち上がるようにスクリプトを組み、スクリプトトリガのOnObjectEnterに割り当てます。
![スクリーンショット 2015-12-20 20.26.21.png](https://qiita-image-store.s3.amazonaws.com/0/60538/3b184bb5-6315-6126-3dd3-9e37a41ef5d8.png)

バーコード画像を読込んだら、「バーコード文字列」のフィールドに読み取ったバーコードの文字列を格納します。

準備はこれでOKです。

では、iPhoneのFileMaker Goに置いてやってみましょう。

大きなフィールドの方が画像読み取りのスクリプトを設定しているので、タップします。
![写真 2015-12-20 20 23 23.png](https://qiita-image-store.s3.amazonaws.com/0/60538/d65ea950-ef2d-4abe-6af1-36c7e0d43020.png)

iPhoneのカメラが立ち上がり、バーコードの読み取りが自動的に行わえます。
![写真 2015-12-20 20 23 51.png](https://qiita-image-store.s3.amazonaws.com/0/60538/36a794d5-982e-35a2-9991-bebf284613f9.png)

読み取りが完了すると、「バーコード文字列」フィールドに読み取ったバーコード文字列が表示されました。
![写真 2015-12-20 20 23 34.png](https://qiita-image-store.s3.amazonaws.com/0/60538/0d4872df-2416-ffa2-4857-a8624af8b000.png)
バーコードの読み取りは、一瞬です。
結構性能いいです。

これもワンスクリプトで済むので、ぜひやってみてくださいね。
rubyをソースからビルドしてrbenvで使えるようにする

## 実行環境

* Mac OS X 10.11.2

## 前提

* gccが使えていること

```bash
% gcc -v
gcc: warning: couldn't understand kern.osversion '15.2.0
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc49/4.9-20140330/libexec/gcc/x86_64-apple-darwin13.1.0/4.9.0/lto-wrapper
Target: x86_64-apple-darwin13.1.0
Configured with: ../configure --build=x86_64-apple-darwin13.1.0 --prefix=/usr/local/Cellar/gcc49/4.9-20140330 --enable-languages=c,c++,objc,obj-c++ --program-suffix=-4.9 --with-gmp=/usr/local/opt/gmp4 --with-mpfr=/usr/local/opt/mpfr2 --with-mpc=/usr/local/opt/libmpc08 --with-cloog=/usr/local/opt/cloog018 --with-isl=/usr/local/opt/isl011 --with-system-zlib --enable-version-specific-runtime-libs --enable-libstdcxx-time=yes --enable-stage1-checking --enable-checking=release --enable-lto --disable-werror --enable-plugin --disable-nls --enable-multilib
Thread model: posix
gcc version 4.9.0 20140330 (experimental) (GCC)
```


## インストール手順

https://github.com/ruby/ruby にしたがってインストール

### gitからrubyのソースコードを取ってきて移動

```bash
% git clone git://github.com/ruby/ruby.git
% cd ruby
```

### ./configure の生成

```bash
% autoconf
```

### ./configureの実行

以下の点に注意
1. 自分の環境の場合opensslをhomebrewでインストールしているため，そのパスを指定する必要がある
2. rbenvで使う場合インストール先を変える

```bash
# opensslの場所を確認し，opensslの場所と出力先を指定して実行
# homebrewでopensslを入れてパスを通している場合以下の様になる
% brew --prefix openssl
/usr/local/opt/openssl

# ここではrbenvで使えるようにしたいので.rbenv/versions以下に指定
# rubyのバージョン名は今回は適当に日付(20151221)にしておく(任意設定可)
% ./configure --prefix=$HOME/.rbenv/versions/20151221 --with-opt-dir=/usr/local/opt/openssl 
```

### makeの実行

```bash
# 並列数は任意で
% make -j4
```

### make check & install

```bash
# テスト等を行う場合
% make check

% make install
``` 

### rbenvで使えることを確認

```
% rbenv versions # インストールしたrubyが追加されている(ここでは20151221)
% rbenv local 20151221
% ruby -v
ruby 2.3.0dev (2015-12-20 trunk 53220) [x86_64-darwin15]
```
AWSで docker-swarmクラスタを立ち上げようとして失敗した話

[Docker Advent Calendar 2015](http://qiita.com/advent-calendar/2015/docker) 18日目の予定だった記事です。
もう 21日ですね、当アドカレ関係者各位ごめんなさい :tired_face: 

docker-machine 経由で consul を利用した swarm クラスタを
組みたかったのですが、失敗した話です。


## overlay networkのパフォーマンスを測定したかった

お気軽に試すなら [Get started](https://docs.docker.com/engine/userguide/networking/get-started-overlay/) に VirtualBox での例があったり
DigitalOcean なら [パフォーマンス測定結果](http://mustafaak.in/2015/12/05/docker-overlay-performance.html) もあったのですが
実運用で一番使っている AWS でも検証してみたかったのです。

が、失敗しました。

うまくいかなったスクリプトは [こちら](https://gist.github.com/pottava/0939ec941ff1f211c4e0)[^1] です・・
（↑クレデンシャル、Subnet、SecurityGroupは要設定）
必要なコンテナは立ち上がりますが、ノードは join してくれず。

ちなみに、これまでの選択肢だった `--net=host` と `--net=bridge`、
そして Docker なしそれぞれのネットワークパフォーマンスは
[アムステルダム大の学生が検証](http://rp.delaat.net/2014-2015/p92/report.pdf) していたのでご参考までに。
ほとんど差はないよ、って結論ですね。

さて、ここで 記事が終わると悲しいのでもう少し書きます。


## docker-machine で t2.nano on AWS を起動する

実はこれ、いまはまだ動きません。

HVM EBS-Backed な、多くの AMI はルートボリュームを
`/dev/xvda` でインスタンスを起動しないといけない[^2] のですが、
docker-machine は現状 `/dev/sda1` が [ハードコード](https://github.com/docker/machine/blob/master/drivers/amazonec2/amazonec2.go#L358) されており
EC2は起動せず、一見それとわからないエラーを吐いて死にます[^3]。


## docker-machineで CoreOS on AWSを起動する

試したことある方いますか？

これも運用で回避しないと動きません。たぶん。
こちらは深追いしていないのですが、[CoreOS provisioner](https://github.com/docker/machine/blob/master/libmachine/provision/coreos.go) が
上書きしている systemd の docker.service が起動しないことが。

なので、以下のように暫定対応することで
docker-machine の管理下に入ります。

```Bash:2〜3行目が重要
$ docker-machine create --driver amazonec2 ec2
$ docker-machine ssh ec2 sudo systemctl start docker
$ docker-machine regenerate-certs ec2
```

systemd 難しい。
　

[^1]: どなたか正常に複数ホストでクラスタが組めて、その上でコンテナが起動できた方がいらっしゃったらご教示くださいませ。。
[^2]: EC2コンソールから操作してると勝手に整合性を取ってくれるので気づきません。CLI好きな方ははまったことのある方もいるはず
[^3]: initiated shutdown。[これ](https://github.com/docker/machine/pull/2640) がマージされるのを祈りましょう・・
統一金融機関コードデータセットライブラリ ZenginCode は自動更新になりました(あとリポジトリが分割されました)

全国1億人の銀行利用者のみなさんこんにちは！そしてそのうちの銀行コードのソースデータどう用意したらええんやと頭を悩ませている数十人のみなさんお疲れ様です！あなたの友人 rosylilly です！

前々から保守していた zengin_code (https://github.com/rosylilly/zengin_code) ですが、このたびリポジトリを分割し、 GitHub org で管理することにしました。

 https://github.com/zengin-code

この org にある source-data は JSON および YAML 形式で適当にご利用いただけますので、適当にご利用いただければ幸いです。元データは過去と同様 ykaku.com さんから引いているのですが、ちょこちょこ落ちてるので、負荷を下げる意味でも ZenginCode のデータをご利用いただければ幸いです。

その ZenginCode のデータやそれらに付随する Gem や npm package が僕の手動更新だったため、最長で3ヶ月程元データとの差異が生じてしまっていました。が、それも今や CI 上での自動更新と相成りましたので僕が死んでもどうにかなる予定です。

また、今後の展望としては ZenginCode のライブラリが全銀フォーマットの振り込みファイルを吐き出せると最高っぽいなという発想に至ったので 2016 年が来たら考えます。

また、せっかく Org になったし、各言語のライブラリは各リポジトリで適当に誰かに Author 頼めないかなと思ってます。僕 Python の作法とかわからんし、 PHP のライブラリの作り方もよくわかってないし。なので誰か手を上げてくれると喜んでコミット権をお渡しします。その気になったら @rosylilly までご連絡ください。

それではみなさん、最高の Zengin ライフを！
Linux PCにBluetooth機器を接続する

LinuxにおけるBluetoothデバイスの接続方法についてのまとめます。
LinuxでBluetoothデバイスと接続する際には、```bluez```という[プロトコルスタック](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF)を用います。
今回は```bluetoothctl```を使って設定します。```bluetoothctl```は対話型の設定ツールです。

## 私の環境
PC: HPのノートPC(ENVY)
OS: Arch Linux

## 手順
1. ```bluez```をインストールする
2. Bluetoothのデーモンを起動する
3. ```bluetoothctl```でBluetoothデバイスを接続する
4. OS起動時に自動的に接続するように設定する

## bluezをインストールする
``pacman``で``bluez``と``bluez-utils``をインストールします。
```bluez-utils```は```bluetoothctl```を含んでいるため、インストールする必要があります。
Arch以外のディストリビューションを使っている場合は、それぞれ対応するパッケージをインストールしてください。

```
$ sudo pacman -S bluez bluez-utils
```

## Bluetoothのデーモンを起動する
Bluetoothのデーモンを起動します。
これが起動していなければ```bluetoothctl```を起動しても入力を受け付ません。

```
$ sudo systemctl start bluetooth.service
```

OS起動時に```bluetooth.service```が起動するようにします。

```
$ sudo systemctl enable bluetooth.service
```

## bluetoothctlでBluetoothデバイスを接続する
``bluetoothctl``を起動します。

```
$ bluetoothctl
```

ここからは``bluetoothctl``との対話です(プロンプトが変わっていることに注意)。
コントローラを起動します。

```
# power on
```

ペアリングしたいデバイスのMACアドレスを調べます。

```
# devices
```

デバイスが見つからない場合はスキャンをします。

```
# scan on
```

ペアリングをします。

```
# pair MACアドレス
```

デバイスによっては信用登録する必要があります。

```
# trust MACアドレス
```

接続します。

```
# connect MACアドレス
```

これで接続できるはずです。

``bluetoothctl``から抜けるには次のコマンドを実行します。

```
# exit
```

## OS起動時に自動的に接続するように設定する
[udev]([https://wiki.archlinux.org/index.php/Udev)(デバイスマネージャー)の設定ファイルに次の記述を追記します。設定ファイルがない場合は新たに作ります。

```/etc/udev/rules.d/10-local.rules
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig hci0 up"
```

udevの設定ファイルの書き方について詳しく知りたい場合はこちらが参考になります。
http://www.reactivated.net/writing_udev_rules.html

## おしまい
これで再起動後は自動的に接続できるはずです。

## 参考
https://wiki.archlinux.org/index.php/Bluetooth
Vagrant, VirtualBox, Windows10 の環境でVMを起動できずにハマった話

# Vagrant, VirtualBox, Windows10 の環境でVMを起動できずにハマった話

## 環境
* Vagrant
* VirtualBox
* Windows10

## 目的
* 上記環境で`vagrant up`しようとした際にエラーが色々と発生してハマったのでまとめておく
 * Vagrant, VirtualBox, Windowsともに雑にバージョンをアップしたところ、環境がおかしくなってしまった
 * 基本的には、vagrantではなくVirtualBox側でエラーが発生する

## 不具合と対応

### Failed to create VirtualBox COM object REGDB_E_CLASSNOTREG (0×80040154)
#### 内容
* `vagrant up` でboxを初期化時にエラーが発生し、正常に起動がされない
* vagrant や VirtualBox を再インストールしても解消しない
* 同じエラーが発生したっていう記事はネット上に沢山あるが、大抵は下記対応で解消しているよう
  1. アンインストール
  1. アンインストール時に削除されなかった.vagrantとか.VirtualBox等のフォルダ、ファイルの削除
  1. 再インストール

#### 対応

* DOS上で下記コマンドを実行

```
chdir “C:\Program Files\Oracle\VirtualBox”
VBoxSVC /ReRegServer
regsvr32 VBoxC.dll
```

* レジストリ側の問題だったみたい
* [参考](http://www.kirtrainford.co.uk/fix-failed-create-virtualbox-com-object-regdb_e_classnotreg-0x80040154/)




### The guest machine entered an invalid state while waiting for it to boot.
#### 内容
* また`vagrant up`でこけてVMを起動できない

#### 対応
* VirtualBoxのバージョンダウン
* [参考](http://qiita.com/medaka5/items/d70751a562a5604c2115)



### Failed to open a session for the virtual machen ...
#### 内容
* `vagrant up` だと、また`The guest machine entered an invalid state while…`でエラー
* VirtualBox上で起動しようとすると、`Failed to open a session...`でエラーになってる

#### 対応
* MacTypeの「除外プロセス」で`VBoxSVC`,`VirtualBox`を除外指定
 * MacType：Windows上のフォントレンダリングをいい感じにしてMacみたいな綺麗な文字を表示してくれるやつ（こいつが悪さをしてたらしい）
* [参考](https://www.virtualbox.org/ticket/13187#comment:122)

### VBoxManage.exe: error: Failed to create the host-only adapter
#### 内容
* やっぱり`vagrant up`で死ぬ

#### 対応
* https://www.virtualbox.org/ticket/14040 から VBox-Win10-fix-14040.exe をDL
* `vagrant up` する際は必ず事前に管理者権限でこのexeを実行しておく
    * VirtualBoxの不具合で、暫定的な対応らしい
* [参考](http://d.hatena.ne.jp/kobarn/20150805)
Windows コマンドプロンプトの調査で良く使うコマンドまとめ

Windowsの管理をしていると、意外と必要になってくるコマンドが結構ある。備忘も含めてまとめる。私はよくエクセルのVBAと併用することが多い。VBAとの併用は別途まとめる。

[PowerShellコマンド集](http://qiita.com/ShotaKameyama/items/1d3784183f1b00ce98e5)もご参照ください。こちらはLinux系に慣れている方はこちらの方が断然使いやすい＋コマンドプロンプトのコマンドの多くをサポートしています。

## Ping

```
ping qiita.com -t
```

pingできるか、自分のネットワーク死んでないか、対象先生きてるかなどの確認のための手っ取り早いコマンド。個人的にオプションの`-t`は常につける癖をつけようと心がけている。

## ユーザー名取得

```
echo %USERNAME%
```

ヘルプデスク用に、ドキュメント管理などできていない場合とか改めてまとめておきたいとか、調査時に一応知っておいて損はないかな程度だけど・・・

## ホスト名取得

```
hostname
```

AD管理とかで使う

## OS情報取得

```
systeminfo | findstr /C:"OS Name"
```

たまに古いPCとか使っている部署があったりすると・・・

## OSバージョン、Bios情報取得

```
systeminfo | findstr /C:"OS Version"
```

念のため・・・

## MACアドレス取得

```
getmac /NH
```

スイッチ関係の設定でこれ持っておくと楽だから。`ipconfig /all`でもいいけど、単純にMACアドレスを知るだけだったら、`getmac`で十分。
オプションいくつかあって、当然`/NH`はつけなくても良い。オプションは後日アップデートしたい（希望）


## IPアドレス情報取得

```
ipconfig /all
```

Linuxのように`ifconfig`ではなく、`ipconfig`であることに注意。当然オプションも色々あるけど、割愛。後日アップデートしたい。（希望）

## 取得した情報をコピー（クリップボード）

```
ifconfig | clip
```

取得したい情報の後にパイプ`|`を入れて、後に`clip`と入れるだけ。わざわざ右クリックとかしなくていいから、**かなり重宝している**

## グループポリシーアップデート

```
gpupdate /force
```

あまり放置されてたパソコンや、久しぶりに社内LANにつなげたという人に対してDot1Xの設定を強制的に適用させるために使った。

## ネットワーク接続一覧表示

```
control net connections
```

WifiとかEthernetのリストを出してくれる。Dot1Xの設定を確かめる時とか。


## WindowsUpdate表示

```
control /name Microsoft.WindowsUpdate
```

あまり使わないかもだけど。。。

## アプリ管理（追加、削除）表示

```
appwiz.cpl
```

## ファイル名からパス取得

```
cd C:\Program Files (x86)\Symantec & dir /b /s SymCorpUI.exe
```

これはSymantec Endpoint Protectionのパスを探す時のコマンド。パフォーマンスを上げるために、パスを一部限定したけど、一応自分の所属している組織に導入しているパソコンは全てこのコマンドでパスを取得可能だった。VBAとか別のものに応用するために意外と重宝した。

## プロキシー

httpとhttpsでそれぞれ設定する。ユーザー名など必要な場合も設定できる。

```
set http_proxy=http://your-proxy.site:port
set http_proxy=http://username:password@your-proxy.site:port
set https_proxy=https://your-proxy.site:port
set https_proxy=https://username:password@your-proxy.site:port
```

## ファイルの中身検索（LinuxでいうGrep）

Grep機能はLinuxでよく使っていたので重宝しておりましたが、Windowsだと下記のようになる。

`find "検索したい文字列" test.txt`


## Windows Updateの更新停止

調査でWindows Updateとの関係を調べたいときに、Windows Updateの停止をさせるときもでてくるかもしれない。

```
net stop wuauserv
```

## Windows Updateの有効化

```
net start wuauserv
```

## ホストのネットワーク接続状態確認

```
netstat
```

## 現在の日時を表示する

```
echo %date% %time%
```

結果=> Thu 03/03/2016  17:46:32.06


## コマンド履歴を表示


```
doskey /h
```

## Wi-Fiの設定関連

### 基本コマンド
```
netsh wlan
```
様々なコマンドがあるので、詳細なコマンドは別途

### あるプロファイルの設定を見る

```
netsh wlan show profile name="guest-WiFi"
```

### あるプロファイルの設定のためのプロパティ情報一覧を取得

```
netsh wlan set profileparameter
```

### 例）プロファイルのキャッシュ設定をオフにする

```
netsh wlan set profileparameter name=guest-WiFi cacheUserData=no
```

###プロファイルの設定をエクスポートする

```
netsh wlan export profile name=guest-WiFi folder="C:¥"
```

###プロファイルの設定をインポートする

```
netsh plan add profile filename="C:¥Wi-Fi-guest-WiFi.xml"
```

## コマンドを作成（Linuxコマンドなど）

LinuxコマンドなどをWindowsでも使いたい場合、下記のようにコマンドを作成することができる。


```
doskey cat=type $*
```

これでcatコマンドがWindowsでも使えるようになる。

```
doskey ls=dir

```

僕はよくくせでlsコマンドをWindowsでやろうとしてしまうので、こうやってコマンドをつくることでストレス軽減できます。

## シャットダウン

```
shutdown /s
```


今後も気づいたらちょくちょくアップしたい。。。このコマンドを入れてほしいなどリクエストがあればお気軽にコメントくださいませ。
underscoreコードリーディング（countBy）


underscoreに詳しくないので、勉強半分でソースコードを読む。


##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##countByとは


###[underscorejs.orgのcountBy](http://underscorejs.org/#countBy)

こんな説明。
>####_.countBy(list, iteratee, [context]) 
>Sorts a list into groups and returns a count for the number of objects in each group.
>Similar to groupBy, but instead of returning a list of values, returns a count for the number of values in that group.


```javascript

_.countBy([1, 2, 3, 4, 5], function(num) {
  return num % 2 == 0 ? 'even': 'odd';
});
=> {odd: 3, even: 2}

```

------------- 
listをソートし、listの中にobjectがいくつあるのかをカウントし、それを返す。
groupByとにているが、groupByはlistの値を返すのに対して、countByはそれらの値がいくつあるのかを返す

###[underscore.countBy](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L418)

コード的にはこのあたり。


```javascript
  // Counts instances of an object that group by a certain criterion. Pass
  // either a string attribute to count by, or a function that returns the
  // criterion.
  _.countBy = group(function(result, value, key) {
    if (_.has(result, key)) result[key]++; else result[key] = 1;
  });
```

groupByと同様にgroup関数を用いて結果を返す。
groupByと同じように、_.hasを用いて結果が既に存在する場合はそのカウントを+1し、初めての場合は1を代入する
windows vim 開発環境構築メモ(gvim + neobundle)

## Git インストール
[私家版 Git For Windowsのインストール手順](http://opcdiary.net/?page_id=27065)

## gvim, neobundleのインストール
[Windowsでgvimを使う(neobundleのインストール)](http://ylgbk.hatenablog.com/entry/2015/01/07/120000)

```sh:gvimダウンロード
$ mkdir %userprofile%\.vim\bundle
$ cd %userprofile%\.vim\bundle
$ git clone git://github.com/Shougo/neobundle.vim
$ cd %userprofile%
```
## _vimrcファイルを作成。

```sh:_vimrcファイル作成
vim _vimrc 
```
## _vimrcを以下のように修正。
[本家 URL](https://github.com/Shougo/neobundle.vim)
required: となっているところは必要な処理なので、変更する場合は注意してください。

```sh:_vimrc修正
:source $VIMRUNTIME/mswin.vim
 " Note: Skip initialization for vim-tiny or vim-small.
 if 0 | endif

 if has('vim_starting')
   if &compatible
     set nocompatible               
   endif

   " Required:
   set runtimepath+=~/.vim/bundle/neobundle.vim/
 endif

 " Required:
 call neobundle#begin(expand('~/.vim/bundle/'))

 " NeoBundle 設定
 " Required:
 NeoBundleFetch 'Shougo/neobundle.vim'

 " My Bundles here:
 " Refer to |:NeoBundle-examples|.
 " Note: neobundle の設定を.gvimrcに書かないこと！

 " ここに追加したいプラグインを追加します。 
NeoBundle 'https://github.com/Shougo/neocomplcache.git'
NeoBundle 'https://github.com/Shougo/unite.vim.git'
NeoBundle 'https://github.com/Shougo/vimshell.git'

 call neobundle#end()

 " Required:
 filetype plugin indent on

 " If there are uninstalled bundles found on startup,
 " this will conveniently prompt you to install them.
 NeoBundleCheck
```

## NeoBuundle　コマンド
```sh:NeoBuundleコマンド
:NeoBundleInstall :インストール
:NeoBundleUpdate　:アップデート
:NeoBundleClean　:削除
```

## プラングイン説明

- [neocomplcache](http://qiita.com/hide/items/229ff9460e75426a2d07)
- [unite](http://qiita.com/hide/items/77b9c1b0f29577d60397)
- [vimshell](http://nauthiz.hatenablog.com/entry/20101107/1289140518)

## Wiki

- [Git](https://ja.wikipedia.org/wiki/Git)
- [Vim](https://ja.wikipedia.org/wiki/Vim)
- [Neobundle](http://kaworu.jpn.org/vim/NeoBundle)

## 参考

- [Qiita Vim plugins](http://qiita.com/tags/vim-plugins)
- [Vim初心者がvimrcを育てていく](http://qiita.com/kamina91/items/4d2f2f12df8512fac889)
- [Vim script と vimrc の正しい書き方](http://www.slideshare.net/cohama/vim-script-vimrc-nagoyavim-1)
- [Vim Advent Calendar 2015](http://qiita.com/advent-calendar/2015/vim)
- [ウィンドウズアプリケーション風キーマッピング](http://nanasi.jp/articles/vim/mswin_vim.html)
レイヤー化アーキテクチャとDIP

[オブジェクト指向Advent Calendar](http://qiita.com/advent-calendar/2015/oop)が空いていたので、せっかくなので投稿します。

# 概要

先日レイヤー化アーキテクチャとDIPについて共有することがあったのでその内容の焼き直しです。
内容自体は[実践ドメイン駆動設計](https://www.shoeisha.co.jp/book/detail/9784798131610)の4章アーキテクチャの前半を自分なりに解釈したものです。

# レイヤー化アーキテクチャ

レイヤー化アーキテクチャはシステムの関心ごとをレイヤーごとに分けて疎結合にするためのアーキテクチャです。例を以下に示します。
![layered.png](https://qiita-image-store.s3.amazonaws.com/0/15369/4ae6de80-15dc-dcea-97fa-1eba0a079bf3.png)
レイヤー化アーキテクチャの上位のモジュールは下位のモジュールに依存することが許されています。また、図には書いてませんが上位、下位の関係が守れていればアプリケーション層からインフラストラクチャ層への依存といった層を跨いだ依存も許されます。逆に下位のモジュールから上位のモジュールへの依存は許されていません。

## 課題

レイヤー化アーキテクチャを素直に実装した例を下記に示します。
![layer-detail.png](https://qiita-image-store.s3.amazonaws.com/0/15369/6db26d2f-52fc-7a68-a0e5-924fae387a3a.png)
簡単に説明すると、idで指定したユーザーをactivateするというユースケースがあり、アプリケーション層でドメイン層とインフラストラクチャ層のオブジェクトを利用して、ユーザーを取得してactivateし保存する、という処理になります。

ここで問題となるのはインフラストラクチャ層のクラスがドメイン層のクラスに依存しているということです。レイヤー化アーキテクチャでは下位のモジュールは上位のモジュールに依存してはいけないので何とかしてこれを解決する必要があります。

# Dependency Inversion Principle

上記の問題はSOLID原則のひとつであるDependency Inversion Principle(DIP)で解決できるとされています。DIPは下記の2つの主張をしています。

- 上位のモジュールが下位のモジュールに依存するのではなく、両者とも抽象に依存すべきである。
- 抽象は詳細に依存するべきではなく、詳細は抽象に依存すべきである。

DIPに従い問題となっていた部分を抽象に依存させた図が下記となります。![layered_dip.png](https://qiita-image-store.s3.amazonaws.com/0/15369/98cbafe1-ca43-b06b-77f7-465f18b546fa.png)

UserRepositoryのinterfaceをドメイン層に定義し、インフラストラクチャ層で実装することで、レイヤー化アーキテクチャの上位から下位への依存という条件を満たすことができました。

# 利点

- 依存が一方向になっているため、レイヤー化アーキテクチャの目指すところの疎結合が実現できています
- 上記の例ではUserRepositoryをスタブなどで差し替えられるためUserServiceのテストが容易になります

# 欠点

- コードの記述量は増えます
- 実装を挿入する必要があるため、Dependency Injectionなどの仕組みが別途必要になります

# まとめ

レイヤー化アーキテクチャとそれを実現するためのDIPの適用を行いました。このアーキテクチャを採用するかどうかはシステムの複雑度にもよると思います。MVCなどのアーキテクチャではModelがドメイン層とインフラストラクチャ層が密に結合した形になっているので、システムがそれほど複雑でなければ素直にそういったアーキテクチャに従うほうがコストがかからないと考えられます。また、レイヤー化アーキテクチャですが、実践ドメイン駆動設計ではこの構造をさらに一般化したヘキサゴナルアーキテクチャを利用して4章の後半以降の解説を行っています。私見ですがヘキサゴナルアーキテクチャの方がモジュールの命名規則などが理に適っている印象があるため、実際に採用する場合はそちらを採用するほうがよいと思います。

# 参考

- [実践ドメイン駆動設計](https://www.shoeisha.co.jp/book/detail/9784798131610)
- [Wikipedia:Dependency inversion principle](https://en.wikipedia.org/wiki/Dependency_inversion_principle)
作業用BGMによく使うサービスと曲

# おすすめのサービス

## soundsgood

音楽配信サービスというか、音楽のキュレーションサイトです。
作ったのがフランスの会社らしく、基本的にフランス語と英語です。
日本でもなくアメリカっぽくもない感じが気にっています
http://soundsgood.co

## ニコBGM

ニコニコ動画からBGM系を集めてランキングしているだけのサイト。
なにげに使えます。
http://nicodb.jp/b/

## その他

youtubeとかsoundcloudとか...
どうせみんな知ってるでしょ？使ってるんでしょ？ 

# シーン別

## 万能！？ (2016/01/08追記)

記事書いた後に見つけました。
ココアシガレットPはBGM作成においては天才かもしれない

ボーカロイドたちがただﾃｯﾃｰﾃﾚｯﾃｰするだけ
http://www.nicovideo.jp/watch/sm27905394

ボーカロイドたちがただ2コードくりかえすだけ
http://www.nicovideo.jp/watch/sm26937870

## 長丁場を乗り切るとき

真・SaGaマニアのための全曲集
http://www.nicovideo.jp/watch/sm8457975

## 普通の作業

youtubeに"Cafe Music BGM channel"というCafeっぽいBGMばかり集めたチャンネルがあるのでそこから選びます。
https://www.youtube.com/channel/UCJhjE7wbdYAae1G25m0tHAA

## 気分を変えたい時

ブルーノマーズなんかいいと思います。
新しいのにどこか懐かしい感じもして。
https://www.youtube.com/channel/UCoUM-UJ7rirJYP8CQ0EIaHA

THE SOCIAL NETWORK のサントラなんかも
結構いい感じです。
https://www.youtube.com/playlist?list=PLC772F42251C6522B

# 番外編

## 寝不足はプログラミングの大敵

寝なきゃいけないけど寝れない時は、
「 **蟲師** 」のサントラがおすすめです。
蟲師のBGMは幻想的というかそういう風に作ってる関係もあって
鈴や琴、水の音など睡眠誘導系のアプリで使われている要素が盛りだくさんで
そのために作られたんじゃないかという構成をしています。

試して、どうぞ！！
https://www.youtube.com/watch?v=lkpT3eS001M
Fail2Ban でWordPress のセキュリティ対策

WordPress を立てると（立てなくても）、どこからともなく管理画面が攻撃されますよね？

一番良いのは、WordPress の管理画面に対してIP 制限したり、表側とドメイン変えたり一般のユーザから普通にはアクセス出来ない設定にするのが良いと思います。

とはいえ、止むに止まれぬ事情でできない場合はあの手この手でセキュアにしていきましょう。今回はFail2Ban を使って雑ですがブルートフォースアタック、辞書攻撃的なやつをやりづらくする設定をしました。

## Fail2Ban の設定

```/etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8 172.0.0.0/8 192.168.0.0/16 10.0.0.0/16
bantime  = 600
findtime = 600
maxretry = 3
backend  = auto
usedns   = no

[wplogin-iptables]
enabled  = true
filter   = nginx-ltsv-wplogin
action   = iptables[name=HTTPS, port=https, protocol=tcp]
           slack[name=HTTPS]
logpath  = /var/log/nginx/access.log
maxretry = 10
findtime = 1800
bantime  = 3600
```

これで、 `nginx-ltsv-wplogin` というフィルタルール（後述）にマッチしたIP からのアクセスを一時的に拒否することができます。30分以内に10回ログインできなかった場合に1時間アクセスを遮断するように設定しています。

Fail2Ban の仕組みとしてはログファイルの中で、フィルタルールに一致したIP が `findtime` の設定時間内に `maxretry` の設定回数以上カウントされたら、iptables に該当IP を追加して遮断するようになっています。

ちなみに、 `slack[name=HTTPS]` は別途設定したBan されたホスト情報の通知用に設定したものです。名前の通り、Slack に通知されます。

### 独自フィルタ `nginx-ltsv-wplogin` の設定

```/etc/fail2ban/filter.d/nginx-ltsv-wplogin.conf
[Definition]

failregex = host:<HOST>\s.*req:POST /wp-login\.php.*status:200
ignoreregex =
```

LTSV でログ出力しているので、デフォルト設定の場合は正規表現を適宜書き換えてください。`<HOST>` と書いた場所にあるIP が遮断対象になります。

このフィルタのテストのやり方がわからなかったのですが、調べてみたら `fail2ban-regex` を使うとできるようです。

#### 設定したファイルを元にテストする場合

```
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-ltsv-wplogin.conf
```

#### 直接正規表現をテストする場合

```
fail2ban-regex /var/log/nginx/access.log "host:<HOST>\s.*req:POST /wp-login\.php.*status:200"
```

## slack 通知（おまけ）

```/etc/fail2ban/action.d/slack.conf
[Definition]

# Option:  actionstart
# Notes.:  command executed once at the start of Fail2Ban.
# Values:  CMD
#
actionstart =

# Option:  actionstop
# Notes.:  command executed once at the end of Fail2Ban
# Values:  CMD
#
actionstop =

# Option:  actioncheck
# Notes.:  command executed once before each actionban command
# Values:  CMD
#
actioncheck =

# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    See jail.conf(5) man page
# Values:  CMD
#
actionban = curl -X POST --data-urlencode 'payload={"channel": "#<channel>", "username": "<username>", "text": "`<hostname>` *[<name>]* IP <ip> has been banned by Fail2Ban filter.", "icon_emoji": "<icon_emoji>"}' <webhook_url>

# Option:  actionunban
# Notes.:  command executed when unbanning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    See jail.conf(5) man page
# Values:  CMD
#
actionunban =

[Init]
hostname = wordpress-server

# Webhook URL
webhook_url = https://xxxxx

channel     = fail2ban
username    = fail2ban
icon_emoji  = :boom:
```

`[Init]` のあたりをよしなに書き換えて使ってください。 `hostname` は複数台サーバーがある時などにどのサーバーかわかるようにすると良いと思います。
TechAcademy学習記録 Git編

#TechAcademy Git編
この記事はTechAcademyの学習メモGit編です。
メインページは[こちら](http://qiita.com/sutatin/items/c8c52ad6190622a37c0e)。
cloud9とGithubを連携させて使いましたが色々とはまりましたね。
基本的な使い方は既に使ったことあるので結構省略します。

##言葉の整理
リモートリボジトリ：githubなどローカルではなく主管理される場所。メタファーは木
ローカルリポジトリ：ローカルで管理されている場所。メタファーは木
ブランチ：リポジトリの中にできる歴の幹。メタファーは枝
commit：歴を作る
add：２つあるので注意、git addはコミット候補にする、git remote addはリボジトリを登録


##基本の流れ

###自分で開発を始めた時
Githubでリモートリポジトリ作成
git init　でローカルリポジトリ作成
git add . でファイル変更をコミット候補へ（.は全てを表す、地味に忘れがちなので注意）
git commit でコミット
git remote add origin git@github.com:ユーザ名/リポジトリ名.git　でリモート先を登録
git push origin ブランチ名　でリモートリポジトリの歴を作成

あとoriginのところはupstreamになる可能性があるが、
ここはがっつりはまったところなので別に記事を書きます。
とりあえずそれまでは汚いですけど自分の理解用の図で許してください。

![upstream.jpg](https://qiita-image-store.s3.amazonaws.com/0/20825/797520c5-38aa-0127-3464-33e3ceb45f1c.jpeg)

addはリモートリポジトリを作るのではなく、参照先を追加するだけというのがポイント
あとは、cloneの時は勝手にadd originがされています。

###他人の開発から時
上の図のようにするんだけど、本当はローカルでもう一つブランチ切るのが良いみたい。
詳しくはこれが一番わかりやすかった。
[Github Fork Pull Request](http://kik.xii.jp/archives/179)

他人のフォークしたけど、本線の更新を追いたい場合はこちら
[GitHubでFork/cloneしたリポジトリを本家リポジトリに追従する](http://qiita.com/xtetsuji/items/555a1ef19ed21ee42873)


##nanoエディタでコミットメッセージを入れる
cloud9だと　git commit -m "コミットメッセージ"　ではなくて
git commit だけするとnanoというエディタが起動する。
これが地味にはまったのでメモ

ファイルの保存は、Ctrl+O　(オーね、念のため)　※自分の家の環境だとAlt＋Oなので注意
nanoを終わるのは、Ctrl+X

詳しくは以下などを見よう。というか -m "コミットメッセージ"で済ませよう。
[端末で使うテキストエディタ nano](https://sites.google.com/site/linuxnomemo/mint-use/nano)

##かつてちゃんとわかっていなかったところ[追記あり]
・githubでは複数のブランチは作れるのか？
追記：作れる。けどgithubからのコマンドで作成することはできない。どう作るかというとローカルで作成した新規ブランチをmaster以外のブランチ指定してpushすると作られる（らしい）。どうりで検索してもgithubでのブランチ作成方法が出てこないはずだ。こういう風に出来ないことを延々と調べなくて済むのでメンターへの質問できる環境はとても助かります。

あとプロジェクト管理者まで行ったら複数ブランチ運用の必要が出てくるだろうからココらへんを参考にすること

[6.3 GitHub - プロジェクトのメンテナンス プロジェクトの管理](https://git-scm.com/book/ja/v2/GitHub-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E7%AE%A1%E7%90%86)

・git checkout と git clone の違い
チェックアウトをSVNの感覚で理解しようとするから勘違いにハマっている。SVNでのcheckoutはcloneに相当している。一方でgit checkoutは色々と機能はあるけど基本は「スナップショットへのロード」と考えると良い。

[Git checkout | アトラシアン Git チュートリアル](https://www.atlassian.com/ja/git/tutorial/undoing-changes#!checkout)
node.jsでSlackのBotにポストする簡単なサンプル

## 前提条件（環境）
* SlackのIncomingWebhookを有効にしていること
    * WebHookURLはhttps://hooks.slack.com/services/xxxxxxxxxx
* node.js,npm,request(npmにてインストール）がインストールされていること
* Ubuntu 14.04

## サンプルコード
```file:index.js
var request = require('request');

var options = {
        url: 'https://hooks.slack.com/services/xxxxxxxxxx',
        form: 'payload={"text": "hogehogeegege", "username": "kurewebhookbot","icon_emoji": ":ghost:", "channel": "#random"}',
        json :true
};


request.post(options, function(error, response, body){
  if (!error && response.statusCode == 200) {
    console.log(body.name);
  } else {
    console.log('error: '+ response.statusCode + body);
  }
});
```

### 実行

```
#nodejs index.js
```
自動生成ソースとKotlinが相性良すぎる話

# はじめに

Entityや決まりきった定形コードを書くために、コードを自動生成しているという方は多いと思います。
しかし、自動生成は便利な半面、生成されたコードに変更を加えたい場合に悩みの種になります。

Model層にロジックを置くのも一つの手ではありますが、Entityの持つデータの表現方法を変えたいなど、自動生成されたクラスの中に入ってれば便利なのになぁと思う機会は多いのでは無いでしょうか？

そんなとき、KotlinのExtensionの機能が役に立ちます。

# Extension

Javaでは1ファイル1クラスの原則がありますが、KotlinではExtensionとして定義することで、別ファイルにクラス・メソッドを定義することができます。どのように実現されてるかは[こちら](http://qiita.com/pine613/items/640428706dac1bfae409)とか見てもらえればわかると思います。

# 実際に見てみましょう

## Entityの定義(自動生成できそうなところ)

```kotlin:RowSampleEntity.kt
// ModelsSampleEntityのRow要素
data public class RowSampleEntity(
        val id: Int,
        val key: String,
        val value: Int
)
```

```kotlin:ModelSampleEntity.kt
data public class ModelSampleEntity(
        val subject: String,
        val rows: List<RowSampleEntity>
)
```

## Extensionの定義

```kotlin:ModelSampleEntityExtension.kt
// Row要素のvalueのSUM
fun ModelSampleEntity.totalValue(): Int {
    return this.rows.sumBy { it.value }
}

// Rowのkeyプロパティからnext要素を取得する
fun List<RowSampleEntity>.nextByKey(key: String): RowSampleEntity? {
    val currentIdx = this.indexOfFirst({ it.key == key })
    return if (currentIdx < 0) null else currentIdx.let {
        return this[(it + 1) % this.size]
    }
}
```

## 呼び出してみる

```kotlin:MainActivityFragment.kt
class MainActivityFragment : Fragment() {
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        // データ作る
        val entity = ModelSampleEntity(
                "This is Sample Entity",
                listOf(1, 2, 3, 4).map {
                    RowSampleEntity(id = it, key = "key_${it.toString()}", value = it * 10)
                }
        )

        Log.d("DemoApp", "total:${entity.totalValue().toString()} nextBy: key_2 -> ${entity.rows.nextByKey("key_2")?.key ?: "fail"}")
    }
}
```

```logos:結果
12-16 21:56:44.723 1398-1398/com.example.yashims85.demoapp D/DemoApp: total:100 nextBy: key_2 -> key_3
```

# まとめ

それなりの制約はあるものの、メソッド外出しができると自動生成ソースの再生成とか気にしないで良いのでステキ感がありますね。
Emacsで他の言語とRPC

Emacs 25.x から、とうとう Dynamic Module 拡張が入るようになりました。(参考: [Emacsに mrubyを組み込んでみた](http://qiita.com/syohex/items/fa71f1c61107b5e30c43))
これで、もともとEmacs本体に持っていなかった機能をネイティブに拡張することが可能になる世界が開けました。果たしてこの流れが良かったのかどうか、判断するにはもう少し時間が必要ですね。（参考：[Emacsは死んだ](http://cx4a.org/pub/emacs-is-dead.ja.html)、[ソフトウェアの思想が設計にもたらす影響](http://cpplover.blogspot.jp/2013/06/blog-post_3.html)）

自分は、数年前からIPC（プロセス間通信）によるEmacsの拡張を試みていて、EPCというEmacsのためのRPCフレームワークを作ってきました。
- [EPC : The Emacs RPC](https://github.com/kiwanami/emacs-epc)
- Perl側モジュール (本体に付属)
- [python-epc](http://python-epc.readthedocs.org/en/latest/) by tkfさん
- [ruby-elrpc](https://github.com/kiwanami/ruby-elrpc)
- [nodejs-elrpc](https://github.com/kiwanami/node-elrpc)

このしくみを用いることによって、別の言語で書かれたプログラムの機能をEmacsから使うことが出来るようになります。

例えば、EPCを使った代表的なアプリとして、以下のものがあります。
- [Emacs Jedi](http://tkf.github.io/emacs-jedi/latest/) : 高速で強力なPython補完拡張
- [EDBI](https://github.com/kiwanami/emacs-edbi) : EmacsでDB操作
また、[EmacsでWebkitを強引に使う](http://www.emacswiki.org/emacs/WebKit)ものに使われたり、[NimのEmacs拡張](https://github.com/nim-lang/nim-mode)のためにNim本体にEPCのRPCが入ったりと、期待通りの使われ方をされていているようで、ありがたく思います。
なるべくUIの動作を妨げず、高速に動くように作りましたので、それなりに実用的なものが作れるはずです。そのかわり多少非同期の扱いは大変かもしれません。

個人的には、まだまだこれでやりたいことはたくさんあります。

昨年は[elispでスレッドプールみたいなもの](http://qiita.com/kiwanami/items/0c03d37bb2a80b0571a9)を作ってみました。まだ途中なのですが、Emacs同士で負荷を分散することが出来ました。もう少し、やれば使えるところまで来そうなのですが、気合が足りませんでした。

今年はEmacsとWebの接続を目標に少し開発を進めてきました。すでに今年もいくつかの先行研究があります（[Emacs Lispでブログエンジン書いた](http://darui.io/posts/this-blog-is-written-in-emacs-lisp)、[Microservices 風 Emacs HTTP Server(s) on Heroku](http://qiita.com/gongo/items/34dc82521d77f9cc38cd)）。

自分の場合は、直接Emacsでリクエストを受けるのではなくて、リクエストはRubyなどのサーバーで受けておいて、Emacsは別に起動させてEPCで通信するという構成を考えています。こうすることで、Webは慣れたRubyやNodeJSで書いておいて、落ちやすいEmacsのインスタンスは使い捨てにして全体の安定性を高めるようなことが出来るのではないかと考えています。

実際に作ったものをここでばばーんと紹介できたらよかったのですが、ちょっと今年も気合が足らずに完成までたどり着けませんでした。。。途中のスクリーンショットだけはっておきます。
![calfwをWebで動かしているところ](https://qiita-image-store.s3.amazonaws.com/0/603/14d4dc17-0d32-5137-fb58-1544cbeb2946.png)

calfwのバッファをWebブラウザで開いているところです。比較のためにEmacsの画面ものせてます。

目標の機能は、以下のようです。
- 少しの設定情報で、任意のバッファをほぼそのままWebブラウザで表示させる
- Webブラウザでのクリックを適当にエミュレートしてEmacsのバッファと相互作用する

最終的には、howmやorgmodeをスマートフォンで表示させて、あと簡単な操作ぐらいしたいというものです。PCのEmacsの情報をモバイルでも見たいというソリューションには、一つ前の[grugrutさんのorgmodeアプリ](http://grugrut.hatenablog.jp/entry/2015/12/19/121219)や、[myuheさんのGoogleとの同期](http://sheephead.homelinux.org/2015/03/29/7276/)などの方法がありますが、どうせならスマートフォンにEmacs載せるような方法のほうが、それぞで個人でカスタマイズしやすいしEmacsらしいのでは？との考えで進めています。

まだまだ試行錯誤の段階ですが、自分がかなり必要に迫られて作っていますので、おそらく来年には完成できるのではないかと考えています。

以上です。
Rails4のActiveResourceでRedmine APIを利用する

[Hamee Advent Calendar 2015](http://qiita.com/advent-calendar/2015/hamee)の21日目です。

## はじめに
Railsで開発ツールを作る過程でAPIを叩くのにActiveResourceを使ったのでその紹介をしようと思います。
今回はRedmine APIを利用します。

## 環境
Mac OSX 10.10.3
Ruby    2.2.3
Rails   4.2.4

## ActiveResourceの概要
ActiveRecordでDB操作を行うのと同じような書き方でREST APIを利用できます。
JSON等のレスポンスをオブジェクトに変換したりといったこともActiveResourceがやってくれます。
Rails4ではコアから除外され、Gemとして提供されています。

## Redmineのテスト環境を準備する
http://m.redmine.org/hostings/new
上記リンク先でRedmineのテスト環境を作ることができます。
今回はこの環境のAPIを利用します。

## Redmine APIを叩いてみる

### URLを設定する

```rb
class Issue < ActiveResource::Base
    self.site = 'http://XXXX.m.redmine.org'
    self.headers['X-Redmine-API-Key'] = 'XXXX'
    self.format = :xml

    #Basic認証を行うなら
    self.user = ''
    self.password = ''

    #siteの後に続くパス
    self.prefix = ''
end
```

ActiveResource::Baseを継承することでAPI接続を行うクラスを作成することができます。
self.siteでアクセスするURL、self.headersでリクエストヘッダにRedmineのAPIキーを指定しています。
今回は使用しませんが、ActiveResourceはBasic認証もサポートしています。

ActiveResouceによって内部的に作られるアクセス先にURLは、
``` #{site}#{prefix}#{クラス名の複数形} ```にidや拡張子をつけたものになります。
例えば上記のIssueクラスならhttp\://XXXX.m.redmine.org/issues.xmlやhttp\://XXXX.m.redmine.org/issues/1.xmlといった感じです。

formatはJSONとXMLを指定できるのですが、JSONにするとオブジェクトとJSON間の変換がうまくいかないのか、チケットの更新などができませんでした。
なぜ失敗するのか分かってないので、調べてみようと思います。

### チケットを取得して更新する

各クラスの親としてURLの設定だけしたBaseクラスがあるものとします。

```rb

class Base < ActiveResource::Base
    self.site = 'http://XXXX.m.redmine.org'
    self.headers['X-Redmine-API-Key'] = 'XXXX'
    self.format = :xml
end
```

findでオブジェクトを取得して、プロパティの値を変更してsaveというActiveRecordでDB操作を行うのと同じ感覚でAPIを利用できます。

```rb
class Issue < Base
end

#全件取得
Issue.find(:all)

#チケットIDが1のチケットを取得してタイトルを変更
ticket = Issue.find(1)
ticket.subject = 'hoge'
ticket.save
```

### プロジェクトメンバーを取得する

prefixを利用する場合の例としてプロジェクトメンバーの一覧を取得してみます。
下記の例だとhttp\://XXXX.m.redmine.org/projects/hoge/memberships.xmlにアクセスします。
hogeの部分がプロジェクト名です。

```rb
class Membership < Base
    self.prefix = '/projects/' + 'hoge' + '/'
end

Membership.find(:all)
```

## 終わりに
なにかしらのAPIを利用するときには良さそうなGemがなかったりで自分で実装することになったら、ActiveResouceを使うと簡単にAPIが利用できて良さそうです。
別の記事で開発ツールのほうにも触れられたらなと思います。

## 参考
* [ActiveResource(Github)](https://github.com/rails/activeresource)
* [Redmine API](http://www.redmine.org/projects/redmine/wiki/Rest_api)
* [ActiveResource の使い方（中編） : メソッドの詳細](http://webos-goodies.jp/archives/how_to_use_activeresource_2.html)
Rubyを触ってみる

# 今日の目標
Rubyを触ってみる

# 使ったもの
* [RubyInstaller for Windows 2.2.3](http://rubyinstaller.org/downloads/)
* Windows 8.1

# 参考
* [Rubyist Magazine-Ruby ではじめるプログラミング 【第 1 回】](http://magazine.rubyist.net/?0002-FirstProgramming)

# Rubyとは
>Ruby（ルビー）は、まつもとゆきひろ（通称 Matz）により開発されたオブジェクト指向スクリプト言語であり、スクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。 また日本で開発されたプログラミング言語としては初めて国際電気標準会議で国際規格に認証された事例となった。

もうみなさん知ってのとおりですね。日本人が開発したプログラミング言語として有名。

# ではスタート

## 準備
Windows環境なので、RubyInstaller for Windowsをダウンロードして実行します（使ったもの参照）。
終わったら、いつも通り環境変数を設定しましょう。

```
RUBY_HOME = 【Rubyをインストールした場所】
PATH = %RUBY_HOME%\bin
```

## とりあえずPrintを…

と思ったら、Rubyの参考サイトを見ているとprintではなくputsの文字が…。Rubyってputsなの！？と思ったらprintもありましたとさ。ただし、putsは改行あり、printは改行無しで表示されるみたいです。（\n入れたら改行になるのはおなじみのとおり）

```hello.rb
puts "Hello World!"
print "Hello World!"
```

![ruby.png](https://qiita-image-store.s3.amazonaws.com/0/97937/62e5fd96-453a-612e-62a3-753823acb45d.png)

## 変数使ってHello World
変数の型がなくてもいける。#{}で式展開もできる。そして、文字連結も+で大丈夫。

```hello.rb
name = "torinist"
puts "Hello, #{name}, Welcome to Ruby!"
# ここは下記でも良い
# puts "Hello, " + name + ", Welcome to Ruby!"
```
![ruby2.png](https://qiita-image-store.s3.amazonaws.com/0/97937/a511c749-804e-3e0b-b868-fb083ca2b9b4.png)

## 入力した文字でHello World
文字を入力させて、Helloの後に付け加えます。getsメソッド使います。（getsメソッドは最後に改行コードを付け足してしまうので、chompメソッドでそれを取り除きます）

```hello.rb
name = gets.chomp
puts "Hello, #{name}, Welcome to Ruby!"
```

![ruby3.png](https://qiita-image-store.s3.amazonaws.com/0/97937/246855eb-85d8-ebb8-01cb-c1b2bb4de159.png)

ちなみに改行コードがあるか確認できるpメソッドというものがあるのでそれも使ってみた！

```hello.rb
name = gets
puts "Hello, #{name}, Welcome to Ruby!"
p name
```
![ruby4.png](https://qiita-image-store.s3.amazonaws.com/0/97937/f650360f-51f6-8249-b865-5d6a847625d3.png)

おおお！と、これだけでも感動できます。

## メソッドを使ってHello World
最後にメソッドを使ってみようと。
Rubyのメソッドはdef～endの間に定義できます。コールするときは、メソッド名(引数)でOK。
getsで入力待ちしていることがわかるように、printを付け足しました。

```hello.rb
def hello(name)
	puts "called hello"
	puts "Hello, #{name}, Welcome to Ruby!"
end

print("名前を入力してください: ")
name = gets.chomp
hello(name)
```

Rubyファイル内で日本語を使うときは文字コードしていたほうが良いみたいです。-KuはUTF-8、-KsはSJISだそうです。私はUTF-8で作ってるので、-Kuを実行時に指定しました。
![ruby5.png](https://qiita-image-store.s3.amazonaws.com/0/97937/7a349e41-ad09-f795-7d46-9cab973f5adc.png)

---
はい、こんな感じでした。
RubyはC言語っぽい。getsとか「見たときある！」と思いました。もうだいぶ遠ざかってたので`C言語 gets`でググりましたけど。HAHAHA。参考サイトの影響かもしれませんが、結構サクサク進んだ気がします。Ruby開発だとその恩恵が受けられるのかな、どうなのかな。
次はRuby on Railsやってみたいですね。
React Native - Over-The-Air updates

先日のRedditの[AMA](https://www.reddit.com/r/IAmA/comments/3wyb3m/we_are_the_team_working_on_react_native_ask_us/)での言及されていたようにover-the-air(OTA)はReact Nativeを選ぶ上で重要な機能です。これを簡単に解説しようと思います(私はまだ使ってないので記載に間違いがあるかもしれません）


## Over-The-Airとは

"Over The Air"アップデートとは、Apple等にバイナリを送らずにアプリのコードをアップデートすることです。Appleのレビューが必要なくなるので、レビュー待ちすることなく開発サイクルを短くし、頻繁にアップデートすることができます。利点として、例えば、ボタンなどのデザイン、テキストの変更、bug fixなどをすぐに変更することができます。

##どうしてOTAが可能なのか？

React Nativeの動きとして、Javascript bundleをロードして、そのJavascriptでネイティブライブラリを操作してアプリを動かします。このJS bundleは開発時にはローカルからダウンロードして使うし、そのバンドルをインターネット経由で配布することも可能です。もちろん、アプリ内に入れておいてそこからロードすることも可能です。したがって、どのバンドルを使うかを明示しておけば、必要ならばインターネットから新しいバンドルをダウンロードしてきて使うことができる、というわけです。


## Apple的には大丈夫なの？

レビューを通さなくなるので、悪意のあるアプリを生む可能性がなくなくはありません。これについて、React NativeのAMAで、FacebookのNick氏が下記のように述べています。

>Actually that's not quite correct. Apple has stated that they are OK with developers deploying OTA (over-the-air) bug fixes and minor updates to apps in the store without resubmitting, provided that:
*) The updates don't significantly change the nature of what was originally submitted for review
*) The updated code is executed using the Apple-supplied JavaScriptCore VM
...
As for whether this would theoretically allow developers to deploy malicious updates? Yes, absolutely it would, and if developers choose to do that, Apple will no doubt take those apps of the store and apply whatever sanctions they deem appropriate. -Nick

意訳すると、"bugfixや機能を変えなような変更ならばOTAをすることをAppleは認めている。しかし、悪意のあるアプリができる可能性は理論的にある"

やはりあのAppleですし、方針を変えることは考えられます。現時点では、React Nativeの個々の開発者が節度を持って、OTAを実装する必要があると思っています。OTAはアプリを開発する上で便利な機能なので、他の開発者に迷惑をかけないためにもAppleのガイドラインに従って開発しましょう。

## どうやってOTAをやるか？

FacebookではOTAの機能を持っています。実際、広告アプリやメッセンジャーはReact Nativeで書かれているので、OTAでアップデートしてるのだと思います。React Nativeのオープンソースの中にはOTAの機能は含まれていませんが、私が知っている限り二つのサービスを利用することでOTAが利用可能になります。


### Apphub.io

https://apphub.io/ 

MIT出身のMatthew Arbesfeldが立ち上げたサービス。[ここ](http://www.businessinsider.com/apphubio-solves-apple-app-store-review-process-2015-8)にアントレプレナーの記事があります。価格表を見ればわかりますがフリーから使えます。

### Codepush

https://microsoft.github.io/code-push/ 

あのMicrosoftがReact Nativeをサポートするとは結構衝撃的でした。まだベータなのでフリーで使えます。最近のMicrosoftは攻めてますね。

## Summary

私はまだテストできていないOTAですが、今すぐにでも使ってみたいです。機会があれば、使った後の記事を書きたいと思います。
dtsm + Vim + Uniteで.d.ts管理が幸せになる話

久々にTypeScript + Vimのお話です。

TypeScriptには欠かせない.d.tsファイルですが、管理には何を使ってますか？
僕は @vvakame 氏の[dtsm](https://github.com/vvakame/dtsm)を使っていますが、やはりVimmerとしてはVimからの操作で完結したいものです。

ということで、[vim-dtsm](https://github.com/Quramy/vim-dtsm)というVim プラギンを作りました。

![screencast](https://github.com/Quramy/vim-dtsm/raw/master/screen.gif)

`:Unite dtsm` で.d.tsの一覧が表示されるので、必要であれば、Iで絞り込んでcandidateを選択すると `install --save`してくれます。

本家のdtsmでも`dtsm search -i` や`dtsm install -i` でpecoと連動したincremental searchが出来るんですが、この手の操作は[Unite.vim](https://github.com/Shougo/unite.vim)の方が慣れてるので、Uniteのsource化しました。

殆ど書くことが無いので、Unite sourceのコードでも貼り付けときますね。Uniteのsource作るのがどんだけ簡単かが伝われば幸いかと。

```vim:autoload/unite/sources/dtsm.vim

scriptencoding utf-8

let s:source = {
      \ 'name': 'dtsm',
      \ 'description': '.d.ts files you can installe',
      \ }

function! s:source.gather_candidates(args, context)
  let stdouts = systemlist('dtsm search '.join(a:args, ' '))
  let result = []
  if len(stdouts) < 3
    return
  endif
  call remove(stdouts, 0, 1)
  for type_file_name in stdouts
    call add(result, {
          \ 'word': type_file_name,
          \ 'kind': 'command',
          \ 'source': 'dtsm',
          \ 'action__command': 'DtsmInstall '.type_file_name
          \ })
  endfor
  return result
endfunction

function! unite#sources#dtsm#define()
  return s:source
endfunction
```

インストールとか細かいEx commandについては、レポジトリのREADMEに書いてあります。
swiftでクリップボードにテキストを貼り付ける方法

リリースしてるアプリの新機能でクリップボードに開いているWebページのリンクをコピーする機能をつけたくて、iOSアプリ内でのクリップボードの扱いについて初めて触れたので備忘として投稿しておく

# すごく簡単だった・・・
結論から言うとものすごく簡単だった。
UIPasteboardというクラスが用意されており、そちらを利用すると下記の通り
これでCopy1というテキストがクリップボードに保持された。

    @IBAction func tapCopy1Btn(sender: AnyObject) {
        let board = UIPasteboard.generalPasteboard()
        board.setValue("Copy1", forPasteboardType: "public.text")
    }

generalPasteboardを使うと端末内で共有されるクリップボードに保持される。
Safariなりメモ帳なりでペーストするとCopy1が出力される

# 自身のアプリ内のみで使うものであれば

自身のアプリ内のみで利用したい場合はコチラ

    @IBAction func tapCopy3Btn(sender: AnyObject) {
        let board = UIPasteboard(name: "Copy3", create: true)
        board!.setValue("Copy3", forPasteboardType: "public.text")
    }

上記のようにUIPasteboardを名前指定して生成することができる。
で実際アプリ内でペーストする際は下記

    @IBAction func tapPaste3(sender: AnyObject) {
        let board = UIPasteboard(name: "Copy3", create: true)
        sampleTextView.text.appendContentsOf((board?.string!)!)
    }

# 画像をクリップボードに保持

上の例ではテキストはクリップボードに保持する処理を記述しているが、下記のようにすれば画像も保持することが可能

    @IBAction func tapCopy2Btn(sender: AnyObject) {
        let board = UIPasteboard.generalPasteboard()
        board.setValue(UIImage(named: "sample_image")!, forPasteboardType: "public.image")
    }
【Unreal Engine】iOS・Androidでの実機起動とパッケージングしてみた

#**開発環境**
Unreal Engine4 [4.10.1]
OS [OS X El Capitan／windows10 64bit]

#**iOS編**
**予め用意するもの**
1. iOSが搭載された実機（私はiPhone5Sを利用）
2. プロビジョニング（***.mobileprovision）
3. 署名証明書（.cerまたは.p12）

##**macでiOSの実機起動とパッケージング**
いきなり実機をつないで「起動」を押してもプロビジョニングと署名証明書がないと怒られる。
![launch.png](https://qiita-image-store.s3.amazonaws.com/0/8945/9f19c593-7693-3a80-67ac-842f34ebf4ae.png)
　

[編集] > [プロジェクト設定] > [iOS] を選択。
「プラットフォーム - iOS」でプロビジョニング、署名証明書、Bundleidentifierなどの設定ができる。
![platform.png](https://qiita-image-store.s3.amazonaws.com/0/8945/adf4f6f8-1b56-b231-0e10-75d4ff4b1bfa.png)
　

Xcodeで開発をしており、かつプロビジョニング、署名証明書をインポートしていた場合は、Unreal Engineは読み取りにいくので再び「Import Provision」からインポートする必要はありません。（新しく追加する場合は除く）
プロビジョニングの格納パスはこちら：**「~/Library/MobileDevice/Provisioning Profiles」**
![mobileprovision.png](https://qiita-image-store.s3.amazonaws.com/0/8945/f0dcfccf-9a2e-43a7-da1d-e9fa370a76b2.png)
　

正しい「Bundleidentifier」を設定します。
「Bundleidentifier」が正しくないとステータスが**Valid**になりません。
うまくいかない場合は、プロビジョニングを作り直したり、実機デバイスが登録されている事を確認することをお勧めします。　
![bundle.png](https://qiita-image-store.s3.amazonaws.com/0/8945/311d9061-dba4-88dd-72d5-e5a97d9919e2.png)

　
これで実機起動もパッケージングもできます！

##**windowsでiOSの実機起動とパッケージング**
いきなり実機をつないで「起動」を押してもプロビジョニングと署名証明書がないと怒られる。
![launch.png](https://qiita-image-store.s3.amazonaws.com/0/8945/9f19c593-7693-3a80-67ac-842f34ebf4ae.png)
　

[編集] > [プロジェクト設定] > [iOS] を選択。
「プラットフォーム - iOS」でプロビジョニング、署名証明書、Bundleidentifierなどの設定ができる。
![platform.png](https://qiita-image-store.s3.amazonaws.com/0/8945/adf4f6f8-1b56-b231-0e10-75d4ff4b1bfa.png)
　

「Import Provision」を押してそれぞれ読み込みます。
「Bundleidentifier」が正しくないとステータスが**Valid**になりません。
![mobileprovision.png](https://qiita-image-store.s3.amazonaws.com/0/8945/f0dcfccf-9a2e-43a7-da1d-e9fa370a76b2.png)
　

正しい「Bundleidentifier」を設定します。
![bundle.png](https://qiita-image-store.s3.amazonaws.com/0/8945/311d9061-dba4-88dd-72d5-e5a97d9919e2.png)

　
　
これで設定ができたので再び「起動」を押すとできるはずなのですが、うまい具合に実行できません。（発狂
パッケージも同様に失敗してしまいます。他に何を設定しなければならないのか？
　
調べていると下記を見つけました。
**Unreal 4.7.1 Errors out when launching on connected ios device (iphone).**
https://answers.unrealengine.com/questions/180090/unreal-471-errors-out-when-launching-on-connected.html
 
 
つまり今回であれば、
**「C:\Program Files\Epic Games\4.10\Engine\Intermediate\IOS\UE4Game-Info.plist」を
「C:\Program Files\Epic Games\4.10\Engine\Build\IOS」**にコピーすればOK。

　
これで実機起動もパッケージングもできます！（初見殺し）

#**Android編**
##**Androidの実機起動**
準備中
　

#**パッケージ化に失敗する場合**
疑うべき場所
・レベル名（デフォルトから変更するとあまりよくないらしい）
・プロジェクトのパスが深い（パッケージングでこけるらしい）
・プラグイン（substanceが影響する）
　
「Enable」のチェックをはずし、Unrealエディタを再起動する。パッケージングを試みる。
![plugin.png](https://qiita-image-store.s3.amazonaws.com/0/8945/f09b4a58-9218-de3e-18ac-017da3bad95b.png)
FuelPHP　インストール

以下記事を参考にインストールしてみましたが、途中でTokenを聞かれてインストールが止まってしまったのでメモ。


[FuelPHP 勉強中１ インストールの仕方](http://qiita.com/mogetarou/items/e33be6b3d7a07640b713)


```
to retrieve a token. It will be stored in "/root/.composer/auth.json" for future use by Composer.
Token (hidden):
```


ComposerがGitHubのAPIを使っているようですが、それがrate limitに引っかかっているらしい。
時間を空けて制限が解除されればダウンロードできるようになるみたいですが、レート制限を緩和するためにTOKENを作って設定してあげるとダウンロードできるらしい。


githubにログインして以下URLへ。
[https://github.com/settings/tokens](https://github.com/settings/tokens)


「Generate new token」からトークンを作成。
作成したトークンを貼り付けたら無事にインストールしました。


![img.png](https://qiita-image-store.s3.amazonaws.com/0/43281/753db1ce-a5ff-04dc-8d1e-47ec858fe4d9.png)
WindowsにGPU対応のChainer1.5をインストールしたメモ

新しくPCをセットアップして、WindowsにChainer1.5をインストールしました。GPUを使おうとしたところ、やや手間どったのでメモを残しておきます。私の環境はWindows8.1の64bit版です。

# CUDA周りのインストール
CUDAを先にインストールしておきます。CUDA環境がない状態でChainerを先にインストールしてしまった場合はCUDAを有効にしてからChainerを再度インストールする必要があるようです。

* CUDA SDK
    * ダウンロード [CUDA 7.5 Downloads](https://developer.nvidia.com/cuda-downloads)
    * インストーラでインストール
    * ~~PATHにCUDA SDKのパス(標準は```C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\bin```)を追加する~~
    * ↑インストーラが勝手にやるので不要でした
* cuDNN
    * cuDNN v3をダウンロード [NVIDIA cuDNN](https://developer.nvidia.com/cudnn) (要登録)
    * zipを展開してCUDA SDKの中に放り込んでおく

# Microsoft Visual C++ Compiler for Python 2.7
Chainerのインストール時にモジュールをコンパイルするっぽく、そのために必要。

* ダウンロード先→[Microsoft Visual C++ Compiler for Python 2.7](https://www.microsoft.com/en-us/download/details.aspx?id=44266)


# Visual Studioのインストール
上のやつとは別に、GPU対応コードを動かす時nvcc(CUDAコンパイラ)を使うため必要。CUDA7.5はVS2010, 2012, 2013に対応するようです。Visual Studioの商用版を持っている人は普通にインストールすれば問題ないと思います。

今回は自宅用だったので無料のVisual Studio 2013 Expressを使おうとしましたが、CUDA7.5はExpress版を公式にはサポートしていないようです。問題はディレクトリ名・ファイル名の違いだけのようでしたので、下記の手順で無事動かせました。

* Visual Studio 2013 Expressが使えるようにする手順
    * まずダウンロードしてインストールします [Microsoft Visual Studio Express 2013 for Windows Desktop Update 5](https://www.microsoft.com/ja-jp/download/details.aspx?id=48131)
    * ```C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64```を```C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64```にコピーします。
    * ディレクトリの中の```vcvarsx86_amd64.bat```を```vcvars64.bat```に名前を変更します

# Pythonのインストール
Windows用Pythonは様々なパッケージで配布されていて、どれを選んだらよいのか、私はよく分かっていません。私はJupyterも使いたいので今回はAnacondaからインストールすることにしました。

* [Download Anaconda](https://www.continuum.io/downloads) 私はPython2.7 64bitを使っています

# Chainerのインストール
* コマンドプロンプトから
    * ```pip install chainer``` を実行

# サンプルを動かしてみる
* Chainerのソースをダウンロード https://github.com/pfnet/chainer
* コマンドプロンプトを開いて、ソースの\examples\mnistに移動
* ```"c:\Program Files (x86)
\Microsoft Visual Studio 12.0\vc\bin\amd64\vcvars64.bat"```を実行 (VSのバージョンによりディレクトリは変わります)
* ```python train_mnist.py -g 0```を実行
* エラーが出ずにMNISTの訓練ができたら成功です