OmniAICreator/Qiita-1.07M huggingface dataset:
RedisをWindowsにインストール

# RedisをWindowsにインストールする
* Redis自体はWindows環境をサポートしていない。
    * http://redis.io/download
    * 本家には下記のように記載されている。

> Windows
> The Redis project does not officially support Windows. However, the Microsoft Open Tech group develops and maintains this Windows port targeting Win64. Learn more

* とのことなので、MSOpenTeckを利用してインストールした手段

# 環境
* OS : Windows7 (64bit)
* ~~Redis : 2.8~~
* Redis : 3.0.5 RC1
    * Releasesに行ったら3.0.5がリリースされていたので、それを利用
        * https://github.com/MSOpenTech/redis
        * https://github.com/MSOpenTech/redis/releases
            * 「This release is not yet approved for production.」と記載されているので注意！
    * Redis-x64-3.0.500-rc1.msi をダウンロードする。

# インストール
* msiを実行する。
* インストール中に変更した箇所
    * Destination Folder
        * インストールフォルダを「C:\develop\Redis」に変更
            * 個人的に開発系のソフトを同一フォルダに集約しているため
        * Add the Redis installation folder to the PATH enviroment variable.をチェックする。
            * 環境変数に追加するため。
    * Set the Max Memory limit
        * 100MB
            * 変更しなくてもよいが、制約をつけるため
* インストール終了を待つ。

# 動作確認
* スタートメニュー　>　アクセサリ　> コマンドプロンプトを起動
* pathの確認
    * > path を実行して環境変数を表示
    * C:\develop\Redis が表示されればＯＫ
* Redisの確認
* >redis-cli を実行。下記のようにkey valueを登録＆取得ができれば動作確認完了

```
127.0.0.1:6379> set sample sample
OK
127.0.0.1:6379> get sample 
"sample"

```

# サービスの確認
* すでにサービスとして登録されてるはずなので、その確認
* コントロールパネル > 表示方法「小さいアイコン」 > 管理ツール > サービス と選択
* サービスの一覧が表示されるので「Redis」が登録されてることを確認する。

# サービスの設定
* スタートアップの種類は、初期状態では「自動」となっている。
    * これは起動時にサービスが自動実行されることを意味している。
    * この状態でも問題はないが、開発中のみ起動したい場合は下記のように変更する。

## 起動方法の変更
* 「Redis」サービスを右クリックし、プロパティを選択する。
* スタートアップの種類を「自動」から「手動」に変更する。
* これで、起動時にサービスが起動しなくなる。

## サービスを起動・停止について
* 毎回サービスウインドウを開いて起動・停止を行うのは面倒なので、Batファイルを作成する。

### バッチ
* Redis起動バッチ
    * 名前　：　redis_start.bat
    * 内容

```
REM +---------------------------------
REM | Redisを起動するバッチ
REM +---------------------------------

SC START Redis
PAUSE
```

* Redi停止バッチ
    * 名前　：　redis_stop.bat
    * 内容

```
REM +---------------------------------
REM | Redisを停止するバッチ
REM +---------------------------------

SC STOP Redis
PAUSE
```

* 下記のエラーが発生したら、起動時にファイルを右クリック > 「管理者として実行」で実行する。
* バッチ起動の動作確認は、上記の「サービス」一覧にて状態が変更されることで確認すればＯＫ
CDN(Content Delivery Network)

#[Cybozu CDN](https://cybozudev.zendesk.com/hc/ja/articles/202960194-Cybozu-CDN)
- [ ] **Ace**
- [ ] **AngularJS**
- [ ] **Chart.js**
- [ ] **DataTables**
- [ ] **DataTables**
- [ ] **DOMPurify**
- [ ] **Font Awesome**
- [ ] **FullCalendar**
- [ ] **Handsontable**
- [ ] **highlight.js**
- [ ] **jqGrid**
- [ ] **jQuery**
- [ ] **jQuery UI**
- [ ] **jQuery.Gantt**
- [ ] **JSRender**
- [ ] **jsTree**
- [ ] **JSZip**
- [ ] **Marked.js**
- [ ] **Moment.js**
- [ ] **OpenLayers**
- [ ] **popModal**
- [ ] **Spin.js**
- [ ] **SweetAlert**
- [ ] **UltraDate.js**

#[cdnjs.com](https://cdnjs.com/)
https://cdnjs.com/libraries

#Google
https://developers.google.com/speed/libraries/

- [ ] **AngularJS**
- [ ] **Angular Material**
- [ ] **Dojo**
- [ ] **Ext Core**
- [ ] **jQuery**
- [ ] **jQuery Mobile**
- [ ] **jQuery UI**
- [ ] **MooTools**
- [ ] **Prototype**
- [ ] **script.aculo.us**
- [ ] **SPF**
- [ ] **SWFObject**
- [ ] **three.js**
- [ ] **Web Font Loader**

ex)
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js

#bootstrap

ex)
http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css
http://netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js
#jquery
http://code.jquery.com/



- [ ] **jQuery Core**
- [ ] **jQuery UI**
- [ ] **jQuery Mobile**
- [ ] **jQuery Color**
- [ ] **QUnit**
- [ ] **PEP**

ex)
http://code.jquery.com/jquery-1.11.0.min.js
【統計学】外れ値があってもいい感じで回帰直線を引いてみる

最小刈込み2乗法というものについてのメモです。
通常、回帰直線は誤差に正規分布を想定することが多く、通常の最小二乗法を適用すると外れ値の影響を受けやすいですが、外れ値を除外（刈り込む）ことでその影響を除いて直線を引いてみる手法です。

パッケージのインストールと読み込み。

```r
install.packages("galts")
install.packages("ggplot2")
require(galts)
require(ggplot2)
```


## 通常の最小二乗法と最小刈込み2乗法の両方で回帰直線を引いてみる関数を定義

```r
lts_test <- function(x, y) {
  df <- data.frame(x, y)
  
  result <- lm(y ~ x, data=df)
  summary(result)
  
  #Estimating LTS with ga (Default optimization method)
  lts <- ga.lts(y ~ x, popsize=40, iters=2, lower=-20, upper=20)
  print(lts)
  
  x2 <- seq(-4, 10, 0.1)
  y2 <- lts$coefficients[1] + x2*lts$coefficients[2]
  df2 <- data.frame(x2, y2)
  
  y1 = result[[1]][1] + result[[1]][2]*x2
  df1 <- data.frame(x2, y1)
  
  
  # 赤い線：通常の回帰直線、青い線：刈込み平均を適用した回帰直線
  ggplot() +
    layer(data=df, mapping=aes(x=x, y=y), geom="point",
          size=3, na.rm=TRUE) +
    layer(data=df1, mapping=aes(x=x2, y=y1), geom="line", color="Red") +
    layer(data=df2, mapping=aes(x=x2, y=y2), geom="line", color="Blue")
}
```

## x軸方向に外れ値があった場合

```r
################### x方向の外れ値
x <- rnorm(100)
e  <- rnorm(100)
y <- 5 + 5*x + e
outlyings <- sample(1:100,48)
x[outlyings] <- 10
lts_test(x, y)
```

![x_outlier.png](https://qiita-image-store.s3.amazonaws.com/0/50670/62f20a80-18ae-cb0b-cc85-a6f80f84640e.png)


## y軸方向に外れ値があった場合

```r
################### y方向の外れ値
x <- rnorm(100)
e  <- rnorm(100)
y <- 5 + 5*x + e
outlyings <- sample(1:100,48)
y[outlyings] <- 30
lts_test(x, y)
```
![y_outlier.png](https://qiita-image-store.s3.amazonaws.com/0/50670/9dca2557-4d1b-0dd4-98a7-07c2bf823f03.png)



## 参考
経済データの回帰分析と頑健性 (美添泰人) 
　　http://www.econ.aoyama.ac.jp/~yasuto_yoshizoe/econstat/stat200809.pdf

LTS (Least Trimmed Squares)
　　https://cran.r-project.org/web/packages/galts/galts.pdf
tarコマンドaclsオプションの使い方

まずは正解から。

```bash
$ tar --acls -cf suzaki-nishi.tar suzaki-nishi/
```

# aclって何なの？

こちらを読んで下さい。

ITmedia エンタープライズ：特集：Linuxカーネル2.6で実現するACL (4/5)
http://www.itmedia.co.jp/enterprise/0403/06/epn01_4.html

# なんで記事にしたの？

tarコマンドのオプションの扱いは他のコマンドと比べて特殊で、困惑することがままあります。

## オプションの順番は自由だよね？

tar「やだよ」

```bash
$ tar suzaki-nishi.tar suzaki-nishi -cf
tar: Cannot update compressed archives
Try `tar --help' or `tar --usage' for more information.
```

## オプションは-(ハイフン)を付けて指定するよね？

tar「別につけなくてもいいよ」

```bash
$ tar cf suzaki-nishi.tar suzaki-nishi/
```

## aclsオプション指定してみたよ

tar「この場合は-いるよ」

```bash
$ tar --acls cf suzaki-nishi.tar suzaki-nishi
tar: You must specify one of the `-Acdtrux' or `--test-label'  options
Try `tar --help' or `tar --usage' for more information.
```

# 他にもいっぱいオプションあるんだけど使い方分からないんだけど

巨大（多機能）なオープンソースのプロジェクトではテストコードがソースに含まれているのが普通です。勿論、各オプションが機能するかどうかを評価するためのものなので、これとmanページを見ればほぼ解決できるでしょう。

```bash
$ wget http://ftp.gnu.org/gnu/tar/tar-1.28.tar.gz
$ tar xfz tar-1.28.tar.gz
$ cd tar-1.28
$ grep \\-\\-acls -r .
./tests/acls01.at:tar --acls -cf archive.tar dir
./tests/acls01.at:tar --acls -xf archive.tar
```
Mojolicious::LiteでSQLiteを扱う１

クリック数をカウントアップするだけのものを作ってみます。
SQLiteとTengというORマッパーを使う練習です。

まず、クリック数を保持する適当なDBを用意します。

```bash
$ sqlite3 count.db
sqlite> CREATE TABLE tbl (id INTEGER PRIMARY KEY, count INTEGER DEFAULT 0);
sqlite> INSERT INTO tbl (count) VALUES (1);
sqlite> .q
```

あとはひな形を作成し、少々追加修正します。

```bash
$ mojo generate lite_app sqlite_sample.pl
```

```pl:sqlite_sample.pl
#!/usr/bin/env perl

use Mojolicious::Lite;
use DBI;
use Teng::Schema::Loader;

get '/' => sub {
  my $c = shift;

  # DBからスキーマをロードしてもらいます
  my $dbh  = DBI->connect("dbi:SQLite:count.db","","");
  my $teng = Teng::Schema::Loader->load(
    dbh => $dbh,
    namespace => "My::DB",
  );

  # selectとupdateのクエリーを投げます
  my $row   = $teng->single('tbl', +{ id => 1 });
  my $count = $row->count;
  $row->update({ count => ++$count });

  # テンプレートに変数を展開して表示します
  $c->stash(count => $count);
  $c->render('index');
};

app->start;
__DATA__

@@ index.html.ep
% layout 'default';
% title 'Welcome';
Welcome to the Mojolicious real-time web framework!<br>
count = <%= $count %><br>
<a href="/">here</a>


@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
  <head><title><%= title %></title></head>
  <body><%= content %></body>
</html>
```

２はあるかどうか・・・

# 参考

A Simple Mojolicious/DBI Example | Joel Berger [blogs.perl.org]
http://blogs.perl.org/users/joel_berger/2012/10/a-simple-mojoliciousdbi-example.html
Time Machineナニソレ？とか思ってるUNIX歴の長いMacユーザが覚えておくのは無駄だけど存在を知っていると良いかもしれないコマンド1選

# はじめに
ディスクに修復不能なエラーが見つかり、リカバリーモード（Command + R）で起動してターミナルからディスクのデータ退避作業。UNIX使いならdd、tar、ssh、rsyncなど、お気に入りのコマンドを使って復旧作業を始めると思うのですが、ここで1つ重大な問題。なんとTerminal.appが唯一の戦友、みたいな状況だというのに、悠長にもパワーマネージメントが動作しているのです。さすがAppleエレガント！そこにシビれる、あこがれるゥ……なので、

```shell-session
# dd if=/dev/disk3 of=/Volumes/Heaven/will-be-disk3.img ...
```

などと叩いて一晩寝たら、まんまとスリープしていて唖然、みたいな事に。[V-USBのマウスのサンプル](https://github.com/obdev/v-usb/tree/master/examples/hid-mouse)でも使ってひたすら動きまわるだけの似非USBマウスでも作ってやろうかと思ったのですが、ぐっとこらえてググった結果、きちんとありました、コマンドラインからパワーマネージメントを制御する方法。

# pmset

```
# pmset -a sleep 0
```

これで完璧。詳しくはmanで検索。

# おわりに
今回データが500GBほどあったので、USB3.0接続の2TBのポータブルディスクを買って、そこへ一時退避しました。使い終わった後はTime Machineに利用するつもりなので、もう二度とpmsetのお世話になることはないでしょう。
windows10 xamppのapacheが起動しなくなる問題　解決法

Windows7 からWindows10に切り替えると

Port 80 in use by "Unable to open process" with PID 4!

という表示が出てapacheが起動しなくなります。


xampp導入時に四苦八苦したPort80問題。


「またかよ」ということで
解決にあたってみました。

PID4の正体は
WindowsのIIS（インターネットインフォメーションサービス）です。

これを停止するには
左下Windowsボタン右クリックで
コントロールパネルを開き
「プログラムのアンインストールと変更 -> Windows の機能の有効化または無効化」からインターネットインフォメーションサービスのチェックを外す
必要があります。

以上の作業で再びapacheが起動するようになります。
Linux(Ubuntu)でUIM-SKK + mozc(google日本語入力)

## TL;DR
LinuxでSKK入力を使用していましたが、
少し前に同僚がGoogle日本語入力で便利そうに変換候補を利用しているのを見て自分もそちらに移行しました。

…が、やはりSKKの入力テンポというか
「入力していて楽しい✌(‘ω’✌ )三✌(‘ω’)✌三( ✌’ω’)✌」
という感覚が無いので、なんとかならないかなー、と思っていたところ
SKKの辞書サーバーとしてmozcを利用出来そうだったので試してみました。

## とはいえ

今回は既に公開いただいてるプログラムを利用するだけです。

[hitode909の日記 - Google IME SKK サーバー 作った](http://hitode909.hatenablog.com/entry/20110421/1303274561)
上記を参考にgemにてサーバーとなるプログラムを取得

```shell-session
% gem install google-ime-skk

;; インストールしたら実行。ポート55100番で待機状態になります。

% google-ime-skk
```

次にSKKの設定で辞書サーバーを設定します。
今回はUIM-SKKを利用しているので、UIMの設定 -> SKK辞書 を選択して
SKKのサーバーに先程起動したプログラム指定します。

|ホスト名  |ポート番号|
|:--------|:-------|
|localhost|55100   |

を登録。
一発で変換されないようなそれっぽい単語（人名やらラノベのタイトル）

```shell-session
▽とあるかがくのれーるがん
↓
とある科学の超電磁砲
```

ここら辺が変換出来ればgoogle日本語入力の変換が効いているでしょう。
※ 既に辞書登録されているような方は別ので試して ＾＾b

## よいSKK入力ライフを

SKKは地味に`全角<->半角切り替え`や、`ひらがな<->カタカナ変換`の手軽さが効いてくるので
コーディングの際にコメントを日本語で入れる人はSKKを試してみるのも良いかも。
Windows 10にDocker ToolboxをDドライブに入れようとしてハマった点

# はじめに

もしかして、Dドライブに入れようとしたからかもだが、
CドライブはSSDのため、自分の自作PCではDドライブ以降のHDDな
ドライブにDocker Toolbox一式をインストールしたかった。

# Windows 10はまだ、公式のページだとサポート外

https://github.com/docker/toolbox/issues/77

の最初のコメント欄のhereよりインストーラーがDLできる。

# しかし、VirtualBoxが動かない

どうも、自分の環境ではこのインストーラーにバンドルされているVirtualBoxだと、VirtualBox本体が起動しない！

# 2番めのコメントのhereよりDL

https://www.virtualbox.org/wiki/Testbuilds

から、VirtualBoxのインストーラーをDLしてこれを、インストール
これだと、VirtualBoxが動く。

# start.shの編集

Cドライブ決め打ちなので、シェルスクリプトのドライブ名の
箇所をDドライブに変更

```
if [ ! -f $DOCKER_MACHINE ] || [ ! -f /d/Program\ Files/Oracle/VirtualBox/VBoxManage.exe ]; then
```

```
/d/Program\ Files/Oracle/VirtualBox/VBoxManage.exe showvminfo $VM &> /dev/null
```


# うごいた

![SnapCrab_MINGW32cUserskjunichi_2015-11-28_22-39-56_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/3458/124774f9-613a-cf37-d077-84142ea15fe4.png)

元々、入れていたVirtualBoxの他のVMも問題なく生き残っていた。

下手にDOS窓でdocker-machineで頑張るより、start.shを編集してDocker Quickstart Terminalから動かすほうがハマらない気がした。

# 関連記事

- [EC-CUBEをh2oと連携させてdocker for macで動かしてosxfsが大変遅いことを体感した件](http://abrakatabura.hatenablog.com/entry/2017/03/11/094319)
- [DockerでIPython Notebookを動かして、数え上げおねえさんを救う](http://abrakatabura.hatenablog.com/entry/2014/11/30/214133)
- [Dockerで音を鳴らす](http://abrakatabura.hatenablog.com/entry/2014/08/21/062305)
- [JavaScriptをDockerを使って黒い画面に表示する](http://abrakatabura.hatenablog.com/entry/2014/08/09/224138)
- [Dockerやって知ったmoshの残念な点](http://abrakatabura.hatenablog.com/entry/2014/07/26/043530)
- [OSXでDocker入れるとTimeMachineが遅くなるかも #solved](http://abrakatabura.hatenablog.com/entry/2014/07/19/075732)
- [Dockerやって色々勉強になってる件](http://abrakatabura.hatenablog.com/entry/2014/07/15/065931)
- [Dockerの画面をiPhoneに表示する](http://abrakatabura.hatenablog.com/entry/2014/09/10/205608)
- [Docker入れてからのVirtualBoxのアップデート](http://abrakatabura.hatenablog.com/entry/2014/03/30/080156)
- [DockerのAlpine Linuxでタイムゾーンでハマった](http://abrakatabura.hatenablog.com/entry/2017/07/16/081952)
waitをかけながらjQuery.each()の処理をやらせる

意外と無いっぽいコードを置いとく。

````coffee
    # each entries
    entries = objects
    $.each entries, ( i, entry ) ->
      setTimeout () ->
        console.log 'say '+i
      
      , 500*i
````

注意
- `$.each()`は勝手に処理して終わる
- setTimeoutが律儀に 500×i分のms待って順次処理する

`$.each()`のコールバック`this`自体には`.wait()`や`.delay()`メソッドが居らっしゃらないので、こうなる。
Rails devise omniauth-facebook で確認メールをスキップする

### 変更前

``` rb
def self.from_omniauth(auth)
  where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
    user.email = auth.info.email
    user.password = Devise.friendly_token[0,20]
    user.name = auth.info.name   # assuming the user model has a name
    user.image = auth.info.image # assuming the user model has an image
  end
end
```

### 変更後

``` rb
def self.from_omniauth(auth)
  user = where(provider: auth.provider, uid: auth.uid).first_or_initialize do |user|
    user.email = auth.info.email
    user.password = Devise.friendly_token[0,20]
    user.name = auth.info.name   # assuming the user model has a name
    user.image = auth.info.image # assuming the user model has an image
  end
  user.skip_confirmation!
  user.save
  user
end
```
Funtoo LinuxでDMM.R18動画をFirefoxでストリーミング鑑賞

理由はわかりませんが、Funtoo LinuxでDMM R18動画をFirefoxでストリーミング鑑賞できるようになったので、書いておきます。

1. [Pipelight](http://pipelight.net/cms/installation.html)をインストール。
2. Wineをインストール。
3. Silverlight(たぶん5.1)をインストール。
4. # pipelight-plugin --enable silverlight
5. # pipelight-plugin --create-mozilla-plugins
6. $ pipelight-plugin --system-check <br>
   をしてみたら自分の環境ではlibodbcの32bit版がインストールされていなかったので、インストールしました。
7. # pipelight-plugin --enable widevine<br>
   Firefoxで<br>
   https://tools.google.com/dlpage/widevine<br>
   へ行って何やらインストール。

たぶんこれでDMM.R18動画をストリーミング鑑賞できるようになりました。もちろん購入済み動画をです。DMM Playerもインストールしたのですが、たぶんこれは使っていないような気がします。再生ボタンを押すとSilverlightが起動して、再生が始まります。

### Netflixでは
NetflixではUser AgentをWindows Firefoxにする必要があるようです。

### U-NEXTでは
最初はLinux上でU-NEXTを見たくていろいろ設定していたのですが、以上の設定でもFirefoxでは見ることはできませんでした。Google Chromeで見ています。

### hulu
Google Chromeでは確かそのまま見ることができたと思います。違っていたらごめんなさい。Firefoxで見るのにはChromeのFlashプラグインを使用する[freshplayerplugin](https://github.com/i-rinat/freshplayerplugin)をインストールしました。

字幕が変になるのはフォント情報をメイリオにしたフォントをインストールするといけるようです。

## 思うのは
思うのは以上のようなソフトウェアを開発した方々はすばらしい技術力をお持ちだなということです。願わくばわたしもそのようなソフトウェアが作れるように精進したいと思います。

# 自己責任でお願いします
上述の設定はあくまでもこのようなことをやったら自分の環境では見ることができた、ということに過ぎません。ストリーミング再生では鑑賞できるのですが、ダウンロードした動画ファイルを再生する方法はわかりません。

皆様のLinux環境でも見ることができるかどうかはわかりません。そしてDMMの動画を買っちゃったけど見られないじゃないかよ! と言われても、すみませんとしか言いようがありません。その辺は大人のご判断でよろしくお願いいたします。

あとわたしも上述の設定だけで動くのか、それとも他にインストールすべきものがあるのか、またはやらなくてもいい設定があるのかについてはよくわかっていません。手順も違っているかもしれません。その辺は是非ともコメントをお寄せ下さい。よろしくお願いいたします。
Googleフォームから投稿された住所から経度緯度を検索しGoogleスプレッドシートに追記するやつ

表題の通り

`getLocation()`は [【GAS】住所から緯度経度を取得する](http://qiita.com/OUIEA/items/bcbeacd0fff53d5a4d2b)より流用。

フォームの解答が入るSpreadsheetのスクリプトエディター上で、トリガー設定（投稿時→`onFormSubmit()`）をすること。

````js:fu*kgas.gs

// 【GAS】住所から緯度経度を取得する
function getLocation(address) {
  var requestUrl = "https://maps.googleapis.com/maps/api/geocode/json?address=" + address; // Google Geocoding API
  var result = JSON.parse( UrlFetchApp.fetch(requestUrl) );
  if ( result['status'] === 'ZERO_RESULTS' ) { return 'No Result.' }
  var location = result['results'][0]['geometry']['location'];
  return location['lat'] +','+ location['lng'];
}


// フォームがサブミットされたら
function onFormSubmit(e) {
  
  Logger.log(e);
  
  try {
    address = e.namedValues["住所１（都道府県）"].toString() +' '+ e.namedValues["住所２（市区町村）"].toString();
    address = address.replace(/,/g, '');//配列をtoStringするとカンマが邪魔なので殺す
    Logger.log('address: '+address);
    
    latlng = getLocation(address);
    Logger.log('latlng: '+latlng);
    
    // 経度緯度を書き込むところは固定   
    var range = e.range
    var ss = SpreadsheetApp.getActiveSpreadsheet().getDataRange();
    ss.getCell( range.getRow(), 15 ).setValue(latlng);
    
  } catch (e) {
    //エラーが発生した場合に管理者にメールを送信する
    MailApp.sendEmail(Session.getActiveUser().getEmail(), "Error report", e.message);
  }
}
````

- うまくいかない時は、スクリプトエディターの実行ログとにらめっこしよう。。
- `address.replace()`してるのは、同じ名目名がかぶると`e.value`では配列になっていて、それを`.toString()`するとゴミのようにカンマが入り込むので殺戮している
- 経度緯度の追記箇所が右端から数えた数字の固定なので注意。-> `ss.getCell( range.getRow(), 15 ).setValue(latlng);`
 - 本当は、Header indexからターゲットの名目名のRowCountしてとかやればいいんだけど、クソデバッグめんどくさいので挫折した

いやほんとGASのデバッグめんどくさすぎて死ぬ
vagrant上のUbuntuでMeteorアプリを動かす

環境はOS X Yosemite。
vagrant と virtualboxはインストール済み。

```bash
$ vagrant -v
Vagrant 1.7.2
$ VBoxManage -v
4.3.30r101610
```

Mac内の`~/workspace`というディレクトリに、`yourAppName`という名前のアプリを作成すると仮定し、`meteor.vm.local:3000`というURLでアプリが公開されるようする。

## 仮想環境のセットアップ

```bash
$ vagrant box add ubuntu https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-i386-vagrant-disk1.box
$ cd ~/workspace
$ vagrant init ubuntu
```

`Vagrantfile`が作成されるので、29行目付近を以下の様に修正。ipは何でも良い。

```rb:Vagrantfile
  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.33.44"
```

`hosts`ファイルの末尾に以下を追記。

```hosts:/etc/hostshosts
192.168.33.44    meteor.vm.local
```

仮想環境を起動。

```bash
$ vagrant up
```

仮想環境に接続。

```bash
$ vagrant ssh
```

## 仮想環境内での作業

Meteorのインストール。

```bash
$ curl https://install.meteor.com/ | sh
```

Meteorアプリケーション作成。`/vagrant`直下に作ることで、ローカルのMacの`~/workspace`とリンクするため、ローカルのエディタでコーディングができます。

```bash
$ cd /vagrant
$ meteor create yourAppName
```

ここで、

```bash
$ cd yourAppName
$ meteor
```

でアプリを起動しようとすると

```
$ meteor
[[[[[ /vagrant/yourAppName ]]]]]

=> Started proxy.
Unexpected mongo exit code 45. Restarting.
Unexpected mongo exit code 45. Restarting.
Unexpected mongo exit code 45. Restarting.
Can't start Mongo server.
MongoDB cannot open or obtain a lock on a file
```

というエラーで起動に失敗する。
色々調べてみると、パーミッションの問題らしい。
https://github.com/TelescopeJS/Telescope/issues/935

[このサイト](http://stackoverflow.com/questions/25712468/cant-create-working-meteor-js-project-on-a-vagrant-box)を参考に、以下の手順で解決。

```bash
$ cd ~
$ mkdir -p yourAppName/.meteor/local
$ sudo mount --bind /home/vagrant/yourAppName/.meteor/local/ /vagrant/yourAppName/.meteor/local/
```

上記手順をサーバ起動時に自動で行うようにしておく。

```bash
$ echo "sudo mount --bind /home/vagrant/yourAppName/.meteor/local/" >> ~/.bashrc
```

さて、

```bash
$ cd /vagrant/yourAppName
$ meteor
```

でアプリが起動するので、ブラウザから`http://meteor.vm.local:3000`にアクセスすれば、以下の画面が表示されるはず。

![スクリーンショット 2015-11-28 21.53.22.png](https://qiita-image-store.s3.amazonaws.com/0/62143/71eea9ea-3343-2db2-c296-43bfa0493cbb.png)

あとは、お好きなエディタででコーディングするのみ！
raspberry pi > データ取出し案 > SFTPが有力

```txt:動作環境
Raspberry Pi2 + raspbian
```

RPi2で保存するファイルの取出しについての検討中

1. raspbianにFAT32パーティションを用意し共用する
  - [Qiita投稿](http://qiita.com/UedaTakeyuki/items/1b9708cd40d5f83d4b7c)
2. USBメモリに書き込む
  - これもFAT32パーティション?
  - マウントポイントを固定にするのか?
3. SFTP接続
  - 設定済み
  - 初期設定のRPiに対してMacOS XからCyberduckで接続できた
4. raspbian(ext4)をマウントして読込む
  - VirtualBoxの利用などセットアップが必要

項目３が一番簡単な気がする。

linemonitorのロギングについては、raspbian内に保存して、SFTPで取り出せばいいか。

<hr>
(2015/12/12 追記)

やはりUSBメモリ取出しも便利そうなので、以下を実装した。

http://qiita.com/7of9/items/f4f27c47581d182d67b1
テキストファイルの文章から穴あき文を作る

#　テキストファイルの文章から穴あき文を作る

そろそろテストが近づいてきたので、簡単にテキストから問題を作れるようなプログラムをrubyで組んでみました

まずは穴にしたいところを"[]"で囲む

``` test.txt

はい、そろそろ[夏休み]に入るので、[自由工作]ということで自作pcを組み立ててpt3を買い、[録画サーバー]を建ててみることにしました。
[録画ソフト]はお金をかけるつもりはなかったので[foltina]ではなく[chinachu]を使うことにしました。
[簡単にはまったところなどを......]

```


コード(改善点あったら教えてください

```ruby:test.rb

#coding:utf-8

bool,ary,count = false,[],1


f = File.read("test.txt").encode("utf-8")



#区切っている文字

f = f.split(%r<(\[|\])>)

f.each_with_index do |text,i|

	if bool
		ary.push(count.to_s + ",　" + text + "\n")
		f[i] = "#{count},__________"
		count += 1
		bool = false	
	end

	# if text == "「"
	if text == "["
		bool = true
	end
end

File.write("test2.txt",f.join + "\n\n\n-------------以下解答---------------\n\n" + ary.join) 

```


#実行結果
``` test2.txt 
はい、そろそろ[1,__________]に入るので、[2,__________]ということで自作pcを組み立ててpt3を買い、[3,__________]を建ててみることにしました。
[4,__________]はお金をかけるつもりはなかったので[5,__________]ではなく[6,__________]を使うことにしました。
[7,__________]


-------------以下解答---------------

1,　夏休み
2,　自由工作
3,　録画サーバー
4,　録画ソフト
5,　foltina
6,　chinachu
7,　簡単にはまったところなどを......
 ```

あとはワードにコピペするとかなんとかしてください
これで期末も安心だ（死亡フラグ
BurntSushi/tomlを使ってハマったこと

## omitzeroをつけると読み込めない

自前のコマンドの簡単な設定をtomlで書いていたんですが、`omitzero`を付けた場合に、読み込み(decode)の際に、値を読み込んでくれない事態に遭遇しました。

こういう構造体に

``` Go
type Config struct {
    Text   string `toml:"x_text"`
    Number int    `toml:"number,omitzero"`
}
```

このファイルを

``` toml
x_text = "text message."
number = 10
```

読み込ませても`Config.Number`は`0`になってしまいます。

## 原因はライブラリのバグですが・・・

結果としてはライブラリのバグでした。

`omitzero`を付けなければ、正常に読み込めるため、Issue/PullRequestを探すと、同様の問題に遭遇した方から修正が来てましたが、マージはされていませんでした。

どちらの修正でも、読み込めました。(他のtestも通ります)

https://github.com/BurntSushi/toml/pull/82
https://github.com/BurntSushi/toml/pull/90

このリポジトリ自体が2015/05から更新されていないようなので、自分でforkするかローカルのファイルを編集する、もしくは別のライブラリを探すことが必要です。
全文検索機能をRails EngineにするのにMroongaを使ってみた

## はじめに

[Rails Engine](http://railsguides.jp/engines.html)を勉強するネタを探していたところ、
[Ruby on RailsでMySQLとMroongaを使って日本語全文検索を実現する方法](http://www.clear-code.com/blog/2015/11/10.html)
という記事が目に入ったので、これをRails Engineにしてみました。

## 成果物

なんとか動いたのでGitHubに置きました。

https://github.com/myokoym/document_search_engine

## 作り方

ほぼ[記事](http://www.clear-code.com/blog/2015/11/10.html)の通りです。
主な違いは以下の2点です。

* プロジェクト作成時のコマンドを `rails plugin new (エンジン名) --database=mysql --mountable` にする
* マイグレーションファイルのテーブル名を `:(エンジン名)_documents` にする

詳細はコミットログをご覧ください。

https://github.com/myokoym/document_search_engine/commits/master

## 使い方

MySQLとMroongaがインストールされていれば、
普通のRails Engineとして好きなルートにマウントできます。

参考: [インストール — Mroonga v5.09 documentation](http://mroonga.org/ja/docs/install.html)

詳細はREADMEをご覧ください。

https://github.com/myokoym/document_search_engine#readme

## 感想

Mroonga用の設定をRails Engineにしておけば、MySQLを使っているRailsアプリに対して
簡単に検索機能を追加できそうなことがわかりました。

このままだと単にRailsアプリの一部分をEngineとして切り出しただけという感じですが、
既存のスキーマからMroonga用のインデックスを作成できるようにするなどすれば
もっと使いやすくなりそうだなあと思いました。

## お知らせ

* いい肉の日である11/29（日）（明日！）に[Groonga Meatup 2015](https://groonga.doorkeeper.jp/events/31482)が開催されます。まだ参加枠に空きがあるようですし、MroongaやRails絡みの発表もあるようなので、興味のある方はぜひご参加ください。
* [Groonga Advent Calendar 2015](http://qiita.com/advent-calendar/2015/groonga)、参加者募集中です！
java.lang.IllegalArgumentException: button doesn't exist 0

機能まで問題なく動いていたアプリ。
今日突如ビルドに失敗。
そしてこのエラー。

java.lang.IllegalArgumentException: button doesn't exist 0
ボタンは存在しないっつったって、ボタンなんかいじってない。
でも間違って消したんじゃないかとレイアウト等眺めてみる。
やっぱりいじってない。

仕方なくOnCreate以降１行ずつ追いかけていったところ、
Int[] termId = {要素４つ}
の配列で
getString(termId[４])
となっていた、このあたりでエラー。
この４は、計算によって日々変わる仕様だから、昨日は３だったのが今日になっていた。
というオチ。

だがしかし、ボタン関係ないじゃないの。
腑に落ちないなー。
プログラムの記憶領域

# 概要
例えば、あなたがパソコンを開いて、アプリを開いて何か作業をするとする。
その時、パソコンの内部ではどのようにそれらの情報を記憶しているのだろうか？
それを説明してみる。

# ストレージ、メモリ、レジスタ
基本的に、ストレージ、メモリ、レジスタと呼ばれる３種類の記憶装置がある。
作業していない内容は、ストレージにはいっている。
(フォルダに入っている画像や、インストールしたアプリケーションなど)
アプリを開いて、そこで作業をすると高速なメモリや、レジスタが使われる。

すべて高速で大容量のものにしたいが、それだと高価なものになるので、現実なおとしどころとして、
ストレージ　安価で大容量、低速
メモリ　高価で中容量、中速
レジスタ　超高価で小容量、超高速

ストレージに保存して、何か作業をしたいときに、その作業データなどをメモリ上に保存し、計算処理の内容などをレジスタに保存する。

# キャッシュ、スワップ
ただ、レジスタの処理能力が高速なので、メモリの処理能力との間に差ができてしまっている。なので、キャッシュとよばれるレジスタとメモリの間の処理能力をもつものが生まれた。
また、メモリの容量が足りないことが多くなるのでスワップという考え方がうまれた。
TimeMachineで隠しファイルを表示する


個人的にメモ。

##Finderの設定変更

TimeMachineというより、Finderの設定を変更することで隠しファイルを表示できるようになる。

以下Terminalで実行する。

```
defaults write com.apple.finder AppleShowAllFiles -bool True
killall Finder
```

##元に戻す

隠しファイルの表示が不要であれば、以下の手順で元に戻せる。

```
defaults write com.apple.finder AppleShowAllFiles -bool False
killall Finder
```
Swiftでプロパティ監視(KVO)

プロパティを監視して、変更があった場合にイベントを受け取る仕組みがSwiftにはあって、Key Value Observing(KVO)と呼ぶらしい。

監視対象に自身を登録

```swift:
hoge.addObserver(self, forKeyPath: "name", options: .New, context: nil)
```

プロパティ変更ハンドラ

```swift:
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
	// ここで処理を行う
}
```

監視を削除

```swift:
hoge.removeObserver(self, forKeyPath: "name")
```

jsなどのaddEventListenerと使い方は似ています
C#で文字列配列が空であるか調べる方法

# 目的

```csharp
string[] lines = System.IO.File.ReadAllLines(FILENAME);
```
としたとき、文字列配列linesが空であるか調べるのに少し迷ったので、メモ程度に書くことにしました。  

注意 : ここで言う「空」とは、`配列==null`のことではありません。

# 実行環境
OS : OS X Yosemite 10.10.5
Compiler : Mono 4.2.0

## 方法1
`System.Linq` 名前空間の `Enumerable.Any` メソッドを使う。
このメソッドは、要素が含まれているかどうかを返します。
要素がある場合は`True`、ない場合は`False`を返します。
[Enumerrable.Any() - MSDN](https://msdn.microsoft.com/ja-jp/library/bb337697(v=vs.110).aspx)

```csharp:Example1
if (!lines.Any())
{
    Console.WriteLine($"{nameof(lines)}は空です。");
}
```

## 方法２
`System.Linq` 名前空間の `Enumerable.Count` メソッドを使い、要素数を調べる。
[Enumerable.Count() - MSDN](https://msdn.microsoft.com/ja-jp/library/bb338038(v=vs.110).aspx)

```csharp:Example2
if (lines.Count() == 0)
{
    Console.WriteLine($"{nameof(lines)}は空です。");
}
```


## 方法3
`Array.Length`プロパティを使って配列の要素数を調べる。
MSDNによると、計算量が`O(1)`のようなのでこっちを使ったほうが速いかもしれないですね。
[Array.Length - MSDN](https://msdn.microsoft.com/ja-jp/library/system.array.length(v=vs.110).aspx)

```csharp:Example3
if (lines.Length == 0)
{
    Console.WriteLine($"{nameof(lines)}は空です。");
}
```

# ベンチマーク
それぞれFor文で10億回ループしてます。
計測用のコードは以下に示します。

```csharp:Test.cs
using System;
using System.IO;
using System.Linq;
using System.Diagnostics;
using static System.Console;

namespace Test
{
    class Program
    {
        public static void Main(string[] args)
        {
            int n = 0;
            bool b = false;
            string[] lines = new string[0];

            Stopwatch sw = Stopwatch.StartNew();
            for (int i = 0; i < 1000000000; i++)
            {
                /* ここに処理を書く！ */
            }
            sw.Stop();

            WriteLine(sw.Elapsed);
        }
    }
}
```

コンパイルと実行のコマンドは以下に示します。

```bash:command
mcs Test.cs
mono ./Test.exe
```

## 方法１の結果
意外に時間がかかりました。

```bash:Result1
00:00:51.7555533
```
For文内の処理は以下のとおりです。

```csharp
b = lines.Any();
```

## 方法２の結果
方法１と比べるとそこそこ速い。

```bash:Result2
00:00:14.5522226
```
For文内の処理は以下のとおりです。

```csharp
n = lines.Count();
```

## 方法３の結果
は、速い！

```bash:Result3
00:00:00.3757821
```
For文内の処理は以下のとおりです。

```csharp
n = lines.Length;
```

# まとめ
配列が空であるか調べるなら`配列.Length`を使うのが良さそう。
AtomからMayaへコマンドを送る

Mayaのスクリプトエディタはあんまりそんなに評判よくありません。
ちゃちゃっと書くにはお手軽でいいんですが。
![atomMaya_scripteditor.png](https://qiita-image-store.s3.amazonaws.com/0/102581/3c3936ff-a6be-5144-9c2c-77f07d7446d5.png)

そこで、外部エディタでコードを書いてMayaに送信する、
という方法がいくつかのエディタで用意されています。

Atom経由で試してみたので備忘録。

# インストール

## Python

事前にPythonをインストールしておく必要があります。
https://www.python.org/downloads/

## Atom側

![atomMaya_install.png](https://qiita-image-store.s3.amazonaws.com/0/102581/5cc98a2d-beea-65bd-e22b-6764a79767f4.png)

File > Setting (`ctl` + `,`)
でSettingタブをひらき、「Install」で『maya』と検索します。
一番上に**atom to Maya**なパッケージが出てくると思います(▲)。

![atomMaya_detail.png](https://qiita-image-store.s3.amazonaws.com/0/102581/460612d3-b53b-711f-9764-20da926436f2.png)
詳細こんな感じ。Python ScriptをRunします。*MELは送れません*。
「Install」をクリック。

![atomMaya_run.png](https://qiita-image-store.s3.amazonaws.com/0/102581/491d041c-abf4-f10a-d8fe-e223bfb3990e.png)
すると、Packagesメニューに「**Maya**」が追加されます。
AtomからMayaへの送信は`alt` + `ctl` + `r`だそうです。

##Maya側

ここまでがAtom側の準備。次にMaya側の準備です。

下記の内容を、**userSetup.py** というファイル名で
ドキュメント以下のMayaフォルダの「Scripts」に保存します。

```python:userSetup.py
import maya.cmds as cmds

cmds.commandPort(name=":7005", sourceType="python")
```
*もしすでにuserSetup.pyを設置している場合は、その中のどこかに追記します。*

![atomMaya_usersetup.png](https://qiita-image-store.s3.amazonaws.com/0/102581/f2e0b16c-9879-1939-b08d-ede757fdcc44.png)

そしたらMayaを起動し、
あとはAtomでコードを書いて `alt` + `ctl` + `r` するだけです。

# 実行

とりあえず`alt` + `ctl` + `r`すると、書いている**コード全体**がMayaへ送られます。

一部選択しておくと、**選択部分だけ**送られます。


# 注意

## Maya起動必須

![atomMaya_withoutMaya_.png](https://qiita-image-store.s3.amazonaws.com/0/102581/b06e59f8-dd7b-37cf-3ac5-4e07ad80d9fd.png)
Mayaが起動していないとなにも起きません。

## 保存必須

Mayaへ送信する前に、書いてるファイルを保存しておく必要があります。
標準のスクリプトエディタは書いてすぐ実行できるので、そこはこちらの方が一手間。

**ファイルの拡張子**は、基本的には **.py** にしておくのがいい気がしますが、
実はなんの拡張子でも、**一部選択してRun**の方は通ります。
（選択なしでRunする場合は、.pyである必要があります）

この件についてはこちらに報告が上がっています
https://github.com/davidpaulrosser/atom-maya/issues/11

# 参考

Githubが開発するエディタ Atom
https://atom.io/

Autodesk Maya
http://www.autodesk.co.jp/products/maya/overview

「atom-maya」はdavidpaulrosser氏の開発するパッケージ
https://github.com/davidpaulrosser/atom-maya
https://atom.io/packages/maya

## おまけ

### atom アニメーションフォーマット

「atom maya」で検索すると、Mayaドキュメント内の**ATOM**についてのページが出てきます。
これはアニメーションを入出力するためのMayaに用意されたファイル形式の解説で、
**エディタの方のAtomとは関係ありません**。

http://help.autodesk.com/cloudhelp/2016/JPN/Maya/files/GUID-6C84AB97-1766-4260-9C2A-754C9578AE42.htm

### sublimeプラグイン

sublimeエディタ用のプラグインというのも見つけたのでメモ

- 開発 : justinfxさん
- プラグイン名 : MayaSublime
- URL : https://github.com/justinfx/MayaSublime

## 今回の環境
Atom 1.2.4
atom-maya package 0.17.0
Autodesk Maya 2016 Extension 1 + SP4
フレームワークとかライブラリー

 初めの方、フレームワークとかライブラリーとか、雲をつかむような話でよくわからなかった。
けど、最近すっきり整理した。なんてことはなかった。

# フレームワーク
プログラムを１から作り始めるのはすごく時間がかかる。
なので、予めいくらか作られているものをもらってこよう、いくつか制約があるけど。
という考え方が、フレームワーク。

現在のプロジェクトでは、サーバー側では、ruby on rails、クライアント側では、PureMVCというフレームワークを使用している。あまり触らないのでよくわからなかったが、フレームワークで記述されている内容も特別なものでもなんでもなかった。
拡張子とその言語によって理解されることしか書くことしかできないし、書かれていない。なので、言語が理解でいれば、その言語によってフレームワークの内容も理解できるようになる。

# ライブラリー
ライブラリーも得体のしれないものではなく、
何度も多用するものをライブラリーと読んで、使用している。
汎用性が高いものが当てはまる。
しかし、これも得体のしれないものではなく、単純にその言語で書かれているので、びびることはなかった。

という雑感の話。
scopeとlambdaを使った記述 

# 概要
プロジェクト内でscopeとlambdaを使った記述をしているので、
記述方法とその意味を調べてみた

# 使い方とその意味
scope :not_student lambda{ where(:student => false) }

上記のようにクラス内に記述することで、
「オブジェクトで学生ではない人たちを抽出する」
ことを表現することができます。

それぞれの意味は
scopeは:not_studentをlambda{ where(:student => false) }と定義することができます。
:not_studentはメソッド名の役割を果たします。
lambda{ where(:student => false) }はブロック関数です。
Samurai CodingをMac環境で動かす

SamuraiCoding2015 http://samuraicoding.info/
ルール、プレイ環境、ビジュアライザが公開されていますが、まだα版という位置付けなのでしょうか。
Macでス◯プラトゥーンしたいです...
もう少しまとまったら公式さんにメール送ろうかと思っているので、僕も現在進行形でコード読んでる途中ですが、何かありましたらご意見置いて行ってください。

MacOS(ClangとGCC4.8で試してました)

* (未解決) manager起動してもplayerが動いてないらしく、初手timeoutで死ぬ
 * readResponse@game.cppが帰っていないよう
  * mkfifoというシステムの関数を使って生成した名前付きパイプファイルを指すss.fromAIという変数を通じて、managerからのメッセージを待っているが、これを受け取れていないよう
* width, heightがmaybe初期化されないので配列サイズには使えないよ、と言われてビルドが通らない
 * width, heightで配列を初期化してる箇所を[20][20]に変更
 * ルールを読むとheight, widthの最大値は20なのでこれでいいはず
* はじめにmake allした時に出てるwarningはエラー出てる変数にstd::to_string()かぶせると消える
 * 具体的にはerrno -> std::to_string(errno)など
* コンパイル時に-Wall, -Wextraつけるともう少しwarning出る
 * (void) is;を書いてisを使わないことを明示すれば消える
  * まだ内容よく理解していないので、なぜ使わないisが引数にいるのかは謎

その他

* xubuntu、g++-4.9でmake allすると特になにもせずに通った
* (友人に聞いたところ、)UbuntuではMacと同じようなビルドエラーが出るものの、そこを修正すると動作したそう
* (細かい部分だが)英語版のルールドキュメントのactionの項で、moveに割当てられている番号が5~7になってるのは5~8の誤植かと思われる
Spring InitializrをIntelliJで使う

# はじめに
[SPRING INITIALIZR](https://start.spring.io/)を使うと簡単にSpring Bootベースのアプリケーションが作成できる。

![image](https://qiita-image-store.s3.amazonaws.com/0/38174/a5e1cad9-e0ea-b6b1-a56f-6a6313780c79.png)

これをIntelliJから利用できるプラグインが追加になったので試してみる。

# 環境
- Mac
- IntelliJ 15

# 手順
## IntelliJのメニューから「File」「New」「Project」を選択
![image](https://qiita-image-store.s3.amazonaws.com/0/38174/ed41a4e0-a3a6-b13b-efd9-358eac7cbca5.png)

## 左のペインから「Spring Initializr」を選択して「Next」
![image](https://qiita-image-store.s3.amazonaws.com/0/38174/a36b0268-3669-a3e1-2a64-ac43d669f6b2.png)

## Typeを`Gradle Project`を選択して「Next」ボタンをクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/38174/ae9e93bf-456a-1b62-4645-8d3d135d49ff.png)

※Packagingで「War」が選択できるがこれは選択しないほうがいいらしい
※Typeは、`Maven Project`でもいい

## とりあえず「Web」と「Actuator」を選択して「Next」ボタンをクリック
検索窓を使って検索すると少し選びやすい
![image](https://qiita-image-store.s3.amazonaws.com/0/38174/1ca24546-5515-a93a-ea86-8b89d6a3f94b.png)

## Project Nameを適当に入力して、「Finish」ボタンをクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/38174/96b742c5-1e6c-fa68-1b86-244498a70677.png)

## Gradleの設定画面がでるかもしれない。気にならなければそのまま「OK」
![image](https://qiita-image-store.s3.amazonaws.com/0/38174/35f52851-e59f-8333-a4b4-c7fae5b04cbe.png)

## できた「DemoApplication」を実行
![image](https://qiita-image-store.s3.amazonaws.com/0/38174/a070d8d6-362a-5309-3d3f-4aa1d3130d60.png)

## 8080ポートで立ち上がる
![image](https://qiita-image-store.s3.amazonaws.com/0/38174/339b3a0b-35e3-1a3f-13a4-71b0bacc32fd.png)

## Actuatorの情報をみる
statusが`up`になっていればOK

```
~/D/g/spring-cloud-stream ❯❯❯ curl http://localhost:8080/health                                                                                                                         [master]
{"status":"UP","diskSpace":{"status":"UP","total":249804886016,"free":19889369088,"threshold":10485760}}% 
```
SwiftでHTTPリクエストを許可する


iOS9ではデフォルトでhttpリクエストがhttpsに変更させられてしまうらしい
httpを許可する方法をメモ

### info.plistを編集
info.plistに下記項目を追加する

```xml:
<key>NSAppTransportSecurity</key>
<dict>
	<key>NSAllowsArbitraryLoads</key>
	<true/>
</dict>
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/29966/cf2fec99-7041-b007-137c-875f26e54a89.png" alt="" width="300" />

追加後はこのような表示になります

<img src="https://qiita-image-store.s3.amazonaws.com/0/29966/c135b47a-9d29-b724-753c-2bb2fb86d000.png" alt="" width="300" />

これでWebViewなどでhttpリクエストでページを表示させることが出来ます
Xcodeでコード補完が効かなくなった時に…

# 補完が効かない…

ほとんどが
・DerivedDataを削除
・Xcodeを再起動
・macを再起動
とかで効くようになるようですが、
それでも効果がなかった時に


```
$ rm -rf ~/Library/Caches/com.apple.dt.Xcode
$ defaults delete com.apple.dt.Xcode IDEIndexDisable
$ defaults write com.apple.dt.Xcode IDEIndexEnable 1
```
としたら効くようになりました。

# 参考
http://mjhd.hatenablog.com/entry/xcode-indexing-come-back
Rails4で_run_save_callbacksの書き方が変更された

Rails4にバージョンアップしたところ_run_save_callbacksでエラーになった

```
エラー。, undefined method `_run_save_callbacks' for #
2015/11/19 13:20:24 [INFO] ::
        /poge/hoge/.rbenv/versions/2.2.3/gemsets/4.0/gems/activemodel-4.0.13/lib/active_model/attribute_methods.rb:439:in `method_missing'
        /poge/hoge/workspace/version/app/pogeapl/lib/my_base/base.rb:333:in `method_missing'
```

書き方がかわったらしい、以下のように変更すると動くようになる

```rb
-      _run_save_callbacks do
+      run_callbacks :save do
```

[参考](http://qiita.com/metheglin/items/1cb602ae8bd18c0ef0f0)
コマンドに一文字足すだけでなんでも雑に色付けする

どんな出力もなんとなく色がついてると読みやすかったりする。
そういうオプションがないコマンドもあるし、あっても引数が覚えきれない。
なにより、普通にパイプして行った先の結果に色は付けられない。

そこで、とにかく雑に色付けするコマンドを作って zsh でエイリアス貼ってみたら地味に便利だった。

# color コマンド

主にログのように行ベースで、スペースで区切られるものを対象にしている。
`"` , `()` , `[]` あたりでの囲みは考慮している。

https://github.com/Jxck/dotfiles/blob/master/bin/color

パスを通して `tail -f /var/log/syslog | color` としても使えるが、
zsh のエイリアスを使うと非常に良い感じになる。

# zsh エイリアス

zsh ではこういうエイリアスが定義できる。

```zsh
alias -g C="| color"
```

すると、あらゆるコマンドの一番最後に `C` と足せばそれだけでよくなる。

```shell-session
$ tail -f /var/log/syslog C
```

`apt-get` だとこんな感じ。

![apt-get.png](https://qiita-image-store.s3.amazonaws.com/0/6452/6f1f7bf7-1ea9-bc21-20a0-e34682208458.png)


本当は、ソースを色付けするのに使ってる source-highlight でできないかと思ったけど、ファイル情報がうまくみつからないと色づけをあきらめたりして面倒なのでやめた。
vagrantでwpscan環境を作る

vagrantでwpscan環境を作る
=========================

[OWASP BWA](https://www.owasp.org/index.php/OWASP_Broken_Web_Applications_Project)を対象にwpscanコマンドを試してみました。
※この手順ではwpscanのみでBWAは扱いません。

`vagrant up` でwpscanの環境を構築するレシピをAnsibleで作成しました。
[matayoshi/vagrant_wpscan](https://github.com/matayoshi/vagrant_wpscan) を利用するとvagrant upするだけでwpscanが利用できるようになります。

## 1. 環境構築

[wpscan](https://github.com/wpscanteam/wpscan) の [Installing on Ubuntu](https://github.com/wpscanteam/wpscan#installing-on-ubuntu) に沿って行います。
※リンク先の手順だとgitがインストールされていないのでgitのインストールも必要です。

```bash
# host
$ vagrant box init ubuntu/trusty
$ vagrant up

$ vagrant ssh
# guest
$ sudo apt-get install libcurl4-openssl-dev libxml2 libxml2-dev \
  libxslt1-dev ruby-dev build-essential libgmp-dev
$ sudo apt-get install git
$ git clone https://github.com/wpscanteam/wpscan.git
$ cd wpscan
$ sudo gem install bundler && bundle install --without test
$ ./wpscan.rb --update
```

あとは [WPSCAN ARGUMENTS](https://github.com/wpscanteam/wpscan#wpscan-arguments) を見ながら実行します。
※自分が管理しているサーバー以外には実行しないでください。

## x. 参考

- [wpscanteam/wpscan](https://github.com/wpscanteam/wpscan)
- [matayoshi/vagrant_wpscan](https://github.com/matayoshi/vagrant_wpscan)
- [WPScanを導入しよう！ | とある技術者の開発記録帳](http://vritra.mydns.jp/2014/04/07/let-us-install-wpscan/)
- [WordPressの脆弱性スキャンツールwpscanを使ってみる - ろば電子が詰まっている](http://d.hatena.ne.jp/ozuma/20130820/1376927068)
Ubuntuのufwコマンドメモ

Ubuntuのufwコマンドメモ
======================

gufwだと上手く設定しきれなかったのでコマンドで設定。
多分他でも使うので備忘録的にメモ。

# DropboxのLAN同期の通信を許可

ローカルネットワーク(192.168.xxx.0/24)内のホストから17500/tcpへの接続を許可。

```bash
$ sudo ufw allow in proto tcp from 192.168.xxx.0/24 to any port 17500
```

# Sambaの通信を許可

```bash
$ sudo ufw allow Samba
```

あるいは

```bash
$ sudo ufw allow in proto udp from 192.168.xxx.0/24 port 137 to any port 137
$ sudo ufw allow in proto udp from 192.168.xxx.0/24 port 138 to any port 138
$ sudo ufw allow in proto tcp from 192.168.xxx.0/24 to any port 139
$ sudo ufw allow in proto tcp from 192.168.xxx.0/24 to any port 445
```

適宜追加
MongoDBをプロダクションで運用して分かったReplicaSetの落とし穴に落ちないためのチェックリスト


新たなサーバーを気軽にReplicaSetのメンバーに追加すると **同期の負荷に耐えられなくなることがある** という落とし穴がある。ResplicaSetって便利な機能だけど、正しく利用しないと痛い目にあうので、チェックリストをまとめることにした。


## キャパシティプランニングは入念に行っているか？
当たり前だが、これを怠ると同期した瞬間サーバーが負荷に耐えられなくなり大変なことになる場合がある。どの程度のプランニングが必要か？基本、iopsとmemoryとcpuを十分確保することを勧めたい。ギリギリのキャパシティーだと危険。富豪ならスパイク時の2、3倍のキャパは欲しいところ。

## 使っているバージョンのバグを把握しているか？
例えば、v3.0.5の場合、awsの方から聞いて知ったのですが、負荷に耐えられない問題があるらしく、至急アップデートすることになった。この様にバグを把握していると、未然に防げることがある。当たり前の話しだけど、基本、できるだけ新バージョンを使うようにした方が良いと考えている。ただ、DBのバージョンアップは辛いのでついつい怠ってしまうことがある。

## サーバーの設定は正しく行っているか？
プロダクション利用の場合、しっかりProduction Notes読んで、設定を怠らないことが重要。
https://docs.mongodb.org/manual/administration/production-notes/


## データの容量が膨れないようにしているか？
データ容量が大きいと同期の時間が長くサーバーへの負荷が増す状態が続く。気持ち的に辛い。backupしたデーターを移動してなどの対応も考えられるが、ReplicaSetの手軽さの恩恵が受けられれない。肥大していくデータをMongoDBで扱うのはお勧めできない。

特にGridFSを使っているDBをReplicaSetにおくと、どんどんデータが肥大していくので気をつけた方が良い。私の結論として、GridFSはProductionでは使わない方が得策。使う場合、ReplicaSetのメンバーに入れない使い方を考えた方が良い。

## DBをうまく使い分けているか？
DBの用途によって、ReplicaSetを使わない、もしくは、メンバーに入れないという選択肢もある。

例えば、アプリケーションでReadとWriteを使い分けてDBに接続してサーバーのパフォーマンスを引き出すなどするためのDBは、ReplicaSet向きだと言えるが、バッチやバックグラウンドで何か処理するために使うデータ、例えばログ的なものは、ReplicaSetを使う必要はないので別にDBを作るか、別のものを使った方が良い。データー容量の肥大化も防げる。

# まとめ
ReplicaSetはとても便利で簡単に使えるが、間違った使い方をすると落とし穴に落ちてしまう可能性がある。是非、チェックリストを参考にMongoDBと戯れてみてください。

以下、MongoDB+WiredTiger+ReplicaSet+NewRelicでサーバー構築について書いてます。
http://qiita.com/kiyotaman/items/354875fbd421594698d0
MacでAzureを利用際の有益情報


##やりたいこと

MacでAzureを使う場合の情報等のまとめ。

##Azure CLI

何はなくともコマンドツールをインストールしておきましょう。
npmでインストール可能です。まだインストールできてない人はnode.jsをインストールすれば入ります。
詳しくはブチザッキさんのページにあります。

###インストール

```bash
sudo npm install -g azure-cli
```

```bash
azure
```
と打ち込んでAzure。。。的な画面がでればOKです。

###Azureへのログイン

いくつかのパターンがるようですが、多くの場合、

```bash
azure login
```

とするのが手っ取り早い。http://aka.ms/devicelogin にアクセスして、コードを入れろ！と言われるので、CLI側の画面に表示さたcodeをコピペします。

一度この操作をしておけば、あとは透過的にコマンドが利用できるようです。

###Storageの操作

私の場合、VMの操作をCLIからすることはあまりありません。基本Strage、特にBlobの操作が主です。
いろいろなコマンドがありますが、基本、

```bash
azure storage blob -h
```

とかでコマンドは見れます。
実行の際は、account,keyを指定して、

```bash
azure storage blob list -a account -k key
```
とすればいいようですが、いちいち、acountとkeyを確認、指定するのが面倒という際は、.bash_profile等に、

```bash
$ export AZURE_STORAGE_ACCOUNT=acount
$ export AZURE_STORAGE_ACCESS_KEY=key
```

としておけば良いようです。もちろん、一時的にexportしてもいいでしょう。

>acount, keyはAzureポータルで確認できます。

主な操作としては、

```bash
azure storage blob delete
azure storage blob upload
azure storage blob download
```
など。

##CyberduckでStrage操作

WindowsではAzure Storage ExplorerがありGUIでStrageを操作できるので便利ですが、MacではGUIがない状態ですが、いつの間にかCyberduckがAzure Strageに対応しております。[こちら](http://zuvuyalink.net/nrjlog/archives/1660)を参考にさせていただきました。

>Azureポータルでも閲覧まではできます。なんでUpload機能つけないんでしょうか？？謎。
FuelPHPをec2に導入する


apache2.4に上げた際に困ったのでメモ

```
$ httpd -v
Server version: Apache/2.4.16 (Amazon)
```

# Virtualhostの設定

```
#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
     DocumentRoot "/home/ec2-user/hoge/public"
    <Directory "/home/ec2-user/hoge/public">
        Require all granted
        Allow from All
        DirectoryIndex index.php index.html index.htm
    </Directory>
    ServerName hoeg.com

    ErrorLog logs/hoge.com-error_log
    CustomLog logs/hoge.com-access_log common
</VirtualHost>
```

#timezoneの設定
/etc/php.iniの以下の所を編集

```
date.timezone ="Asia/Tokyo"
```

リスタート
```
sudo service httpd restart
```
参考：http://itrestaurant.hatenablog.com/entry/2012/12/08/090230
line monitor > 情報表示部分 (v0.2, v0.3) > IPアドレスを7セグLEDで表示する実装

line monitor
http://qiita.com/7of9/items/028556c5a819a6a8de96

```txt:動作環境
Raspberry Pi2 + raspbian
7セグメントLEDシールド (自作)
```

http://qiita.com/7of9/items/33296849786e38ff3467
にて作成した7セグLEDでIPアドレスを表示したい。

## プログラム

[v0.2 @ github](https://github.com/yasokada/python-151127-7segLed_IPadrDisplay/releases/tag/v0.2)

## 動作

以下で実行する（または、/etc/rc.localに自動実行設定すると常時IPアドレスが表示される)

```
$ python IPadrDisplay.py
```

動作としては

1. 0..9の数値が表示される
2. .(decimal point)が３回表示される
3. IPアドレスが表示される (1 -> 9 -> 2 -> . -> 1 -> 6 ...)
4. ３の繰り返し

高輝度赤色LEDを見ていると目を痛めそうなので、あまり見続けない方がよさそう。


## v0.3

/etc/rc.localで自動実行するようにしたが、起動しない。

初期にwait 10秒を入れるようにしたら動いた。
初期化処理を待たないといけないのだろう。

[v0.3 @ github](https://github.com/yasokada/python-151127-7segLed_IPadrDisplay/releases/tag/v0.3)
Githubを二段階認証にして、弾かれた時にする一番ラクな対策


よく忘れるのでまとめました。

## はじめに
Githubで二段階認証にした後に `git push` などをすると弾かれるようになります。Qiita上にもいくつか方法が載っていましたが、一番ラクな方法が見つかったのでお困りの方はぜひ参考にしていただきたいと思います。

## やり方

1. [Generate new token](https://github.com/settings/tokens/new) で token を生成（repo は必須であとはお好みで
1. ターミナルで情報を入力して下記を実行してください
	
```sh
cat << EOF > ~/.netrc
machine github.com
  login <your-github-id>
  password <presonal-access-token>
EOF
``` 

以上で完了です。

##参考URL

[[Git][GitHub]GitHubにPushする際に認証失敗する](http://wada811.blogspot.com/2014/05/failed-to-push-to-github-over-https.html)
python > "192.168"を１文字ずつprintする / "."はDPとする > range() と in の組合せ

http://ideone.com/u7fwqM

"192.168"という文字を１文字ずつ走査して、"."の時だけ"DP"と表示する。

```test.py
str = "192.168"

for idx in range(0, len(str)):
	if "." in str[idx]:
		print "DP"
	else:
		print str[idx]
	
```

```txt:結果
Success	time: 0.03 memory: 44680 signal:0
1
9
2
DP
1
6
8
```
JavaScript for AutomationでIpythonを起動

Yosemiteからの新機能で、Macがシステム標準で、JavaScriptを使って、操作できるようになったそうです。

とりあえず、Ipythonを起動するコードを書いてみました。超ニッチですが、、、
こうしておくと、Spotlight検索で一発で呼び出せて便利です。

```js

var Terminal = Application("Terminal");
Terminal.activate();

var tab = Terminal.doScript("workon dev");//Pythonの仮想環境を立ち上げる
Terminal.doScript("Ipython --pylab", {in:tab});
```
あとは、Pythonのモジュール読み込むためのファイルを作っておけばいろいろと捗りそう。

###参考
- [Mac : JavaScript for Automation (JXA) 例文辞典](http://www.openspc2.org/reibun/JXA/Yosemite/)
- [JavaScript for Automation (JXA)](http://tonbi.jp/AppleScript/JavaScript/)
- [知らないうちにMacがシステム標準でJavaScriptで操作できるようになってた (JXA)](http://qiita.com/zakuroishikuro/items/1b02378bf9e940602d87)
GitHubにSSH接続 手順の簡単まとめ

# **目的**
・https接続だとパスワード一々聞かれてめんどいので、SSH接続にする。

# **① ターミナル開く**
```zsh:Terminal
cd
cd .ssh
ssh-keygen　　　　(Enter3回でおｋ
cat id_rsa.pub　 (これの出力ログ全部コピペ。
```
# **② Githubのwebページ開く**
右上アイコンからsettings → SSH keys → Add SSH Key
適当にタイトル付けて、コピペしたの貼り付け。

# ③ **SSH接続させたいローカルリポジトリに行く**
```zsh:Terminal
cd hoge
git config remote.origin.url 　　　　　　　　 (出力ログの https://github.com/以下コピペ
git remote set-url origin git@github.com:　 (この後に貼り付け
```

# **終了**
Amazon EC2のGPUインスタンスにChainer v1.5を3行で入れる


**この記事は古いです。最新版は、<a href="http://qiita.com/unnonouno/items/78ca98cf4911b5135c6f">こちら</a>の記事を参照して下さい。いずれこの記事は消します**

Chainer 1.5になってからインストールが若干面倒になり、失敗しやすくなりました。ここでは、Amazon EC2にChainerを簡単に入れる方法を解説します。
CUDAとドライバのインストールが面倒なので、nVidia公式の "Amazon Linux AMI with NVIDIA GRID GPU Driver" を使います。起動して、ログインしたら、以下のコマンドを実行して下さい。

```
$ sudo yum-config-manager --enable epel
$ sudo yum install -y hdf5-devel
$ sudo CUDA_PATH=/opt/nvidia/cuda pip install chainer
```

３行の内訳は以下のとおりです。

* hdf5をインストールするために、EPELをenableにする
* hdf5をインストールする
* Chainerをインストールする


試してみましょう。CUDA対応を確認するには、CuPyが正しくインストールされているか確認すればOKです。`import cupy`できれば、インストールが完了しています。ちなみに、numpyやcythonなど、重たいライブラリがあるので時間がかかります。

```
$ python
Python 2.7.10 (default, Aug 11 2015, 23:39:10)
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cupy
>>>

```


# 解説

Chainer 1.5から、save/loadの機能が追加されました。この機能のために、h5pyというライブラリを使っていますが、これはlibhdf5をラップしています。libhdf5はPythonのライブラリではないので、pipではインストール出来ません。libhdf5は、EPELリポジトリに含まれているため、まずこれをenableにしてからインストールする必要があります（ここまで2行）。
最後に、nVidia公式のAMIでは、CUDAは `/opt/nvidia/cuda` にあります。これを環境変数 `CUDA_PATH` でインストール時に渡してあげると、インストールできます。本当はnvccコマンドの場所から逆算するのですが、 **sudoでインストールしようとするとPATH環境変数をクリア** してしまうのでこうしています。

# 参考

* [@slaさんの記事](http://sla.hatenablog.com/entry/chainer_on_ec2) がありますが、これはv1.1のときの古い記事です（PyCUDAの時代）
* [bohemian916さんの記事](http://qiita.com/bohemian916/items/7625711e8b9099dcaccc)も参考になります。こちらはhdf5をソースから入れています
* その他、v1.5以降のインストール周りの問題は[以前の投稿](http://qiita.com/unnonouno/items/c491b6df59352159cbf0)を参照下さい
Rails devise omniauth-facebook で Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request

## 現象
こんなエラーが出た。

```
Started GET "/users/auth/facebook/callback?redirect_uri=REDIRECT_URL&code=CODE&state=STATE" for ::1 at 2015-11-28 14:14:54 +0900
I, [2015-11-28T14:14:54.941266 #9383]  INFO -- omniauth: (facebook) Callback phase initiated.
E, [2015-11-28T14:14:56.362811 #9383] ERROR -- omniauth: (facebook) Authentication failure! invalid_credentials: OAuth2::Error, :
{"error":{"message":"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request","type":"OAuthException","code":100,"fbtrace_id":"FACEBOOK_ID"}}
Processing by Users::OmniauthCallbacksController#failure as HTML
  Parameters: {"redirect_uri"=>"http://localhost:3000//", "code"=>"CODE", "state"=>"STATE"}
Redirected to http://localhost:3000/users/sign_in
Completed 302 Found in 88ms (ActiveRecord: 0.0ms)
```

## 対策
[deviseのwiki](https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview#facebook-example)を見ると

Note: v2.0.1 has an issue with callback url error. You need to add a callback url on config.

``` rb
config.omniauth :facebook, "APP_ID", "APP_SECRET",
                callback_url: "CALLBACK_URL"
```

バージョン固有の問題かもしれない。
omniauth-facebookのバージョンをみると

``` rb
omniauth-facebook (2.0.1)
```

バージョンにこだわりはなかったので、バージョンを上げてしまうことにする。

```
bundle update omniauth-facebook
```

解決した。
配列同士の大小比較がうまくいかないケース

`<`とか`>`とかで行う演算について変な状態を見つけたのでメモ。

PHPでは配列同士もうまいこと大小比較ができるのだけど、こういう推移律を満たさないケースがあるので注意が必要っぽい。

```php
$a = ['a' => 1, 'b' => 10];
$b = ['b' => 2, 'a' => 20];

var_dump($a < $b); // true
var_dump($a > $b); // true
```

「aはbより大きい」「bはaより大きい」どちらもtrueとはこれいかに。

マニュアルによると、
http://jp2.php.net/manual/ja/language.operators.comparison.php

```php
// 標準の比較演算子を用いて、配列はこのように比較されます
function standard_array_compare($op1, $op2)
{
    if (count($op1) < count($op2)) {
        return -1; // $op1 < $op2
    } elseif (count($op1) > count($op2)) {
        return 1; // $op1 > $op2
    }
    foreach ($op1 as $key => $val) {
        if (!array_key_exists($key, $op2)) {
            return null; // uncomparable
        } elseif ($val < $op2[$key]) {
            return -1;
        } elseif ($val > $op2[$key]) {
            return 1;
        }
    }
    return 0; // $op1 == $op2
}
```

つまり、`>`や`<`の小さい方に書かれた配列を基準に比較していってるくさい。例もこれが原因だろう。

```php
$a = ['a' => 1, 'b' => 10];
$b = ['b' => 2, 'a' => 20];

var_dump($a < $b); // $aを基準に比較。まず$a['a']と$b['a']を比較したので1<20で$aが小さいと判定
var_dump($a > $b); // $bを基準に比較。まず$b['b']と$a['b']を比較したので2<10で$bが小さいと判定
```

配列同士を大小比較したいなら、キーの順番が揃っているかも意識しないとまずそう。


## 応用：じゃんけん変数

```php
$stone    = [0=>1, 2=>2];
$paper    = [1=>1, 0=>2];
$scissors = [2=>1, 1=>2];

assert($stone < $paper);
assert($paper < $scissors);
assert($scissors < $stone);
```

楽しい！！ ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
TeraTerm 自動ログインマクロ (coreos-vagrant用)

[coreos-vagrant](https://github.com/coreos/coreos-vagrant) VM に自動ログインする TeraTerm マクロの作り方です。


チュートリアル
----
以下のような内容で `coreos-vagrant.ttl` ファイルを作成する。

```
; ---- config start

HOST = '127.0.0.1:2222'
USERNAME = 'core'
KEYFILE = 'C:\Users\1000k\.vagrant.d\insecure_private_key'

; ---- config end

; 最終的に↓のようなコマンドになればOK
;cmd = '{HOST} /ssh /2 /auth=publickey /user={USERNAME} /keyfile={KEYFILE}'

cmd = HOST
strconcat cmd ' /ssh /2 /auth=publickey /user='
strconcat cmd USERNAME
strconcat cmd ' /keyfile='
strconcat cmd KEYFILE
strconcat cmd ''

connect cmd

end
```

`ttpmacro.exe` (ttermpro.exe ではない) を起動し、いま作成した ttl ファイルをロードすれば接続できます。


TIPS
----
- `.ttl` ファイルを `ttpmacro.exe` に関連付けしておけば、マクロファイルをダブルクリックするだけで接続できます。
- [fenrir](http://www.forest.impress.co.jp/library/software/fenrir/) などのランチャーで .ttl ファイルを起動できるようにしておけばなおさら便利。
    - fenrir の場合は、`fenrir\data\scan.ini` の1行目を `\;*.exe;*.ttl
` と変更すればインデックス化対象になります。


参考
----
- [TeraTermマクロ－SSH公開鍵認証で自動ログイン | Tera Term（テラターム）の便利な使い方](http://www.j-oosk.com/teraterm/authorized_keys/307/)