OmniAICreator/Qiita-1.07M huggingface dataset:
【Python】処理にかかる時間を計測して表示

#はじめに
以前書いた『[【PHP】処理にかかる時間を計測して時間・分・秒で表示](http://qiita.com/fantm21/items/f1a0319b4cd6f93e9c6e)』という記事がまぁまぁ反響があったので今回はPythonで。

#サンプルコード
```py:hoge.py
#-*- using:utf-8 -*-
import time

if __name__ == '__main__':
	start = time.time()
	for i in range(0,11):
		print "a"
	elapsed_time = time.time() - start
	print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
```

まぁ、やっていることはほとんどPHPのときと同じです。
基本的に
`(処理時間)＝(処理が終わった時間)ー(処理を始めた時間)`
というアルゴリズムは変わらないので(^^;)
PythonでURLが存在しているか確認

#はじめに
最近ちょっとURLが存在しているかを確認するプログラムを作ってやりたいことがあったので、そのときPythonでURLが存在しているか確認するサンプルコードはなかなか見つからなかったのでここに記録。

#サンプルコード
今回は『[http://qiita.com/](http://qiita.com/)』が存在しているかを確認するサンプルコードです。

```py:confirm_url.py
#-*- using:utf-8 -*-
import urllib2

def checkURL(url):
	try:
		f = urllib2.urlopen(url)
		print url
		f.close()
	except urllib2.HTTPError:
		print "NotFound:" + url

if __name__ == '__main__':
	url = "http://qiita.com/"
	checkURL(url)
```

まぁ、コードを見てもらえれば何も特別なことはしていないのは明確ですが...
`urllib2`を利用してURL先に接続しようとして、接続できなければ`HTTPError`が返ってくるのを利用しているだけです。
PHPでXMLをパース

#はじめに
最近PythonやPHPでXMLなどをパースすることについてちょっと勉強しているので、記録。今回はPHP版。

#利用している関数
今回は『[一手間必要。PHPでのSimpleXML関数のパース処理](http://liginc.co.jp/programmer/archives/5317)
』というサイトを参考にさせていただいて、`simplexml_load_file()`という関数を利用してXMLからデータを取得しました。

#サンプルコード
今回はアイドルグループ「[乃木坂46](http://www.nogizaka46.com/)」さんが公開しているブログに関するXML([http://blog.nogizaka46.com/atom.xml](http://blog.nogizaka46.com/atom.xml))をパースして、タイトル、ブログへのリンク、公開日、更新日、ブログ内容を取得します。

```php:get_xmldata.php
<!DOCTYPE html>
<html lang="ja">
	<head>
		<meta charset="utf-8">
		<title>XMLをパース|FantmSite</title>
	</head>
	<body>
		<?php
		$data = array();
		$nogiblog_xml = simplexml_load_file('http://blog.nogizaka46.com/atom.xml');
		foreach($nogiblog_xml->entry as $item){
			$x = array();
			$x['title'] = (string)$item->title;
			$x['link'] = (string)$item->link;
			$x['published'] = (string)$item->published;
			$x['updated'] = (string)$item->updated;
			$data[] = $x;
		}
		?>
		<pre><?php var_dump($data);?></pre>		
	</body>
</html>
```

出力結果の例としては以下のような感じになります。

```
array(165) {
  [0]=>
  array(5) {
    ["title"]=>
    string(37) "アリスにデビルにメ イド。"
    ["link"]=>
    string(0) ""
    ["published"]=>
    string(20) "2014-10-20T15:00:02Z"
    ["updated"]=>
    string(20) "2014-10-20T16:01:08Z"
  }
  [1]=>
  array(5) {
    ["title"]=>
    string(26) "ひめたん-OoO-その490"
    ["link"]=>
    string(0) ""
    ["published"]=>
    string(20) "2014-10-20T14:45:02Z"
    ["updated"]=>
    string(20) "2014-10-20T16:01:00Z"
  }
}
```

# 実際の出力結果について

~~実際に出力した結果は『XMLをパース|FantmSite』で(2014.10.21現在)公開しました。~~(公開を終了しました)

上記のURL先のコードは以下のようになっています。
ブログの内容を`$x['content'] = (string)$item->content;`と追加することで取得しました。

```php:xmltest.php
<!DOCTYPE html>
<html lang="ja">
	<head>
		<meta charset="utf-8">
		<title>XMLをパース|FantmSite</title>
	</head>
	<body>
		<h3><a href="http://www.nogizaka46.com/">乃木坂46</a>さんのブログのXMLをパースした結果</h3>
		<hr>
		<?php
		$data = array();
		$nogiblog_xml = simplexml_load_file('http://blog.nogizaka46.com/atom.xml');
		foreach($nogiblog_xml->entry as $item){
			$x = array();
			$x['title'] = (string)$item->title;
			$x['link'] = (string)$item->link;
			$x['published'] = (string)$item->published;
			$x['updated'] = (string)$item->updated;
			$x['content'] = (string)$item->content;
			$data[] = $x;
		}
		?>
		<pre><?php var_dump($data);?></pre>		
	</body>
</html>
```
fsck失敗してOS起動完了しない時の対処

以下画面で止まった。rootのパスワードを入力。

```bash:
fsck -y
```

![memo.png](https://qiita-image-store.s3.amazonaws.com/0/25728/be7d6502-0f63-fb7a-d04c-89718c0343e4.png)

10分くらいまつ

![finish.png](https://qiita-image-store.s3.amazonaws.com/0/25728/d9dbbd9b-59ca-345e-f645-3fa8a3efb9ba.png)

終わったら

```bash:
reboot
```

起動するようになった。久しぶりすぎてビビった

## 参考

* [CentOSサーバー起動時に”Repair filesystem”になったときの対処法](http://blog.layer8.sh/ja/2011/12/21/centos%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%ABrepair-filesystem%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE/)
Jscript/Excel 覚え書き2 - hello world -

###覚え書き(2)
####新規excelファイルをオープンし、A1に「hello world」と記入する。
#####Rangeを使用
```js:helloworld.js
var objXL = new ActiveXObject("Excel.Application");
objXL.Visible = true;              //Excelを表示する
var book = objXL.Workbooks.Add();  //新規ブック
var sheet = book.Worksheets(1);    //1シート目のオブジェクトを取得

sheet.Range("A1").Value = "hello world";  //Range(A列1行目)

book.SaveAs("Book1.xlsx");  //新規保存（おそらくドキュメントフォルダへ）
book.Close();
objXL.Quit();
```

#####Cellsを使用
```js:helloworld.js
var objXL = new ActiveXObject("Excel.Application");
objXL.Visible = true;              //Excelを表示する
var book = objXL.Workbooks.Add();  //新規ブック
var sheet = book.Worksheets(1);    //1シート目のオブジェクトを取得

sheet.Cells(1, 1).Value = "hello world";  //Cells(1行目, 1列目)

book.SaveAs("Book1.xlsx");  //新規保存（おそらくドキュメントフォルダへ）
book.Close();
objXL.Quit();
```
Jscript/Excel 覚え書き1

###覚え書き(1)
####新規のExcelファイルを作成・実行する（１）

```js:OpenExcel.js
var Excel = new ActiveXObject("Excel.Application");
Excel.Visible = true;              //Excelを表示する
var book = Excel.Workbooks.Add();  //新規ブック

//なにか仕事をする。

book.SaveAs("Book1.xlsx");  //新規保存（おそらくドキュメントフォルダへ）
book.Close();
Excel.Quit();
```

####既存のExcelファイルを実行する（２）
```js:OpenExcel.js
var Excel = new ActiveXObject("Excel.Application");
Excel.Visible = true;
var book = Excel.Workbooks.Open("ファイル名");  //既存のファイルをオープン

//なにか仕事をする。

book.Close(true);    //上書き保存する
Excel.Quit();
```
`Close(true);`で上書き保存で終了（確認なし）
`Close(true);`で保存しないで終了（確認なし）
`Close();`で確認のダイアログボックスが表示される

####既存のExcelファイルを実行する（３）
　excelファイルを.jsファイルにドロップして指定

```js:OpenExcel.js
var Excel = new ActiveXObject("Excel.Application");
Excel.Visible = true;

var objArg=WScript.Arguments;
var book = objXL.Workbooks.Open(objArg(1));  //ドロップされたファイルをチェックしていません。

//なにか仕事をする。

book.Close(true);
Excel.Quit();
```
IPそのままで新サーバに入れ替えた時は、新サーバからネットワーク機器にPingを打つこと

よくハマるのでメモ

MACアドレステーブルを更新しないと、
そのネットワーク機器下にいる端末から新サーバに通信ができないため、
新サーバからネットワーク機器にPingを打つこと。

ブロードキャストにPingを打つのもいいかも。
Packerをつかって3ステップでVagrantのBoxを作る



[Vagrant](https://www.vagrantup.com/)は使っているけども、Packerは使っていないって方がだいたいかと思います。
まあそこまでやらずとも[vagrantbox](http://vagrantbox.es/)で十分やんけ

## よくわかる

自分も昔[Packer](http://www.packer.io/)でbox作った時に

## 超めんどくさかった。。。。(ビルドに時間がかかるので)

インフラに携わっている人とかには魅力を感じるかもしれませんが、デベロッパーにしてみたら

「ふーんそういうものがあるんだ。。。で？？」

が正しいリアクションかもしれません。

## でも他人が作ったboxとかよりも自分で作ったもののほうがブラックボックスではないよね

とか感じるときあるんすよ。(ほんのたまに)
自分も一回作った後は面倒でやっていなかったのですが普段お使いのPackerで作ったBoxがCentOS6.4でCentOSのバージョンも7まで上がったので重い腰あげようと思って
ググったら便利なものがありました。

## [Boxcutter](https://github.com/boxcutter)

Packerの各OSでのテンプレートが配布されていて基本選ぶだけというものなので
これで使った時のメモになります

## 環境

* macosx10.8(ホストOS)

## 作る仮想インスタンスのOS(VirtualBoxで)

* CentOS7.0-x86_64

## 事前準備に必要なもの
* [virtualbox](https://www.virtualbox.org/) ※入れていない方は[そうだvirtualboxを使ってみよう](http://qiita.com/ryurock/items/31029ea9ac3fcb34abdc)からvirtualboxの入手だけを試してください


## 参考にしたサイト

* [Packer 用のテンプレート集 Box-Cutter を使ってみる](http://d.hatena.ne.jp/akishin999/20140702/1404302238)
 * このブログ読んで作ろうと思ったので、感謝です

### [Boxcutter](https://github.com/boxcutter)を使わずに作成した時のメモ

* [PackerでVagrant用のBoxを作成したときのメモ](http://qiita.com/ryurock/items/28690f2b1553601d684d)


## [Boxcutter](https://github.com/boxcutter)で自分が作りたいOSを選択して Git cloneする

言語設定等が必要になるのでCloneしましょ

```shell:/path/to/dir
#cloneよりかはforkしたものをcloneしたほうがベスト
git clone https://github.com/box-cutter/centos-vm.git
```

## 自分が作りたいOSのcentosXX.jsonを編集する

これはビルドするファイルの設定ファイルになります。
iso_urlがデフォルトUSかどこかのサイトになっているので変更しましょう。
(ビルドに時間がかかる為やったほうが幸せになれる)

```centos70.json
#iso_urlの部分を編集する
    "iso_url": "http://ftp.riken.jp/Linux/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso",
```

## TimeZoneの設定をする

デフォルトがUTCなのでAsia/Tokyoにする

``` http/ks7.cfg
timezone UTC #修正前
timezone Asia/Tokyo #修正後
```

## ビルドする

ビルドに時間がかかります

```shell:/path/to/centos-vm
packer build --only=virtualbox-iso centos70.json
```

## これだけでVagrantに使用するBoxの出来上がりです。

ちなみに出来上がったboxをVagrantに設定するのは下記のようにします

```VagrantFile
  #box url
  config.vm.box_url = "./path/to/centos-vm/box/virtualbox/centos70-nocm-0.1.0.box"
```

今まで億劫だったboxのビルドの管理も大分楽してできるようになりました。

## 補足

自分でビルドのオレオレ設定を書きたい場合は
scripts/* 以下にビルド実行の色々な設定やらなにやらがありますのでそこを自分なりに編集してください
ファイル名が長くて削除できない

先日windowsが起動しなくなったため，リフレッシュしたがその時復旧に使ったファイルの一部が削除できなくなった．理由としては，ファイル名があまりに長すぎたため，ファイルに対するほとんどの操作ができなくなったため．

こういう系のファイル削除できなくなった際の対処法としては，例えば以下の様なものがある

* 管理者権限で実行したシェルから削除
* 別の内容で上書き保存
* ファイル名が長い場合は，dir /x 等で表示される短縮形のファイル名に対して削除コマンドを実行

これらを全部試してみてダメだったので，調べてみると意外な方法が．今回対象とするファイルは階層が深く，またファイル名が長かったため，ネットワークドライブに割り当てることによってファイルパスを短くする方法．

1. 対象とするファイルのあるディレクトリのパスをコピーし，ホーム>新規>ドライブとしてマップを選択．
![menu.png](https://qiita-image-store.s3.amazonaws.com/0/40655/3f1ec3c0-abde-c14c-853b-1dffb800aff3.png)  
  
  
2. 適当なドライブにパスを設定する．この際，"¥¥(PC名)¥C$¥"の様に先頭を変更する
![map_to_drive.png](https://qiita-image-store.s3.amazonaws.com/0/40655/c2dbb7c1-698c-5571-99ab-167e70d56cb9.png)
 
3. ドライブにアクセスし，ファイルを削除！(今回はこれでうまくいった)

4. ドライブの接続を解除

結構悩んでたので，めっちゃ助かった．これでダメならwindows以外からアクセスして削除するしかないのかね・・・それかセーフモードとかかな・・・

######追記
最近再びwindowsが再起動しなくなった際，xcopyでのコピーでもファイルパスが長いと「メモリが足りません」というエラーが出て，そのままだと続行できなかった．本当に厄介・・・
Yosemiteで換装したSSDのTrimを有効にしてしまった場合にすること


Macは標準で装着されているSSD以外は自動的にTrimを有効にしてくれない。

なので、SSDをデフォルトで装着されているもの以外に取り替えた場合、[Trim Enabler](http://www.cindori.org/software/trimenabler/ "Trim Enabler")などを使わないとTrimが有効にならない。

Yosemiteにアップデート後、Trimを有効にして再起動すると、どういうわけか起動しなくなる（白画面にリンゴがでてくる画面から先に進めない）。

最新のTrim Enablerなら問題ないようだが、古いものを使ってしまうと起動できなくなる様子。
先に進めなくなった場合、次の手順で起動できるようにすることができる。

- Command + Rを押しながら電源を入れ、OS X ユーティリティを起動する
- ツールバーのユーティリティ → ターミナルを実行する
- 次のコマンドを順番に入力する

```
nvram boot-args=kext-dev-mode=1
```
↓はMacがインストールされているボリュームを選択する

```
cd /Volumes/Macintosh\ HD/
```

```
touch System/Library/Extensions
```

```
kextcache -prelinked-kernel System/Library/Caches/com.apple.kext.cache/Startup/kernelcache -K System/Library/Kernels/kernel System/Library/Extensions
```
Yosemiteにしたら環境設定"一般"がエラーで開かなくなった


アップデート直後から環境設定"一般"がエラーを吐いて開かなくなってしまい、とても焦ったので同じ症状に陥った誰かのためにメモを残しておく。

## エラー

```
“一般”環境設定パネルを読み込めませんでした。
```

このエラーが出て開けなかった。
詳細を残してなかったので全文は残ってないけど、

```
com.apple.preference.general.remoteservice
```

このプロパティ関連のところでエラーが出ていた様子。
でもよくわからなかった。

まあ何らか自分で設定したところだろうと思って直近設定したやつから調べた。

## 原因

アンチエイリアスの効き具合を調整するために`AppleFontSmoothing`を設定していたのが原因だった。

```
defaults -currentHost read -globalDomain AppleFontSmoothing
```

これを叩いたら、`1`だった。

## 対応

エラーの内容をみてもよくわからなかったので、諦めて設定を消した。

```
defaults -currentHost delete -globalDomain AppleFontSmoothing
```

ということで無事開いた。
Movable Typeで記事データをJSONで吐き出すメモ

# Movable Typeで記事データをJSONで吐き出すメモ

Mobale Type6では、DataAPIなど色々できることが増えているのですが、下位のバージョンでは、そもそも機能がない等出来ない時の対処方法としてメモしておきます。

右カラム・関連記事には使えそうなので覚えておこうと思います。

# JSONデータサンプル

``` index.json
var data = [
<mt:Entries>{
  "title": "<$mt:EntryTitle$>",
  "category": "<mt:IfArchiveTypeEnabled archive_type="Category"><mt:If tag="EntryPrimaryCategory"><mt:EntryPrimaryCategory><$mt:CategoryLabel$></mt:EntryPrimaryCategory></mt:If></mt:IfArchiveTypeEnabled>",
  "date": "<$mt:EntryDate format="%Y-%m-%d"$>"
}<MTIf name="__last__"><MTElse>,</MTElse></MTIf>
</mt:Entries>
]
```

# インデックステンプレート

テスト用に用意したインデックス・スクリプトになります。

``` index.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>MT</title>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function () {
    // 出力されたJSONのパスを入れる
    $.getJSON("index.json", function(data){
        for(var i in data){
        $("#output").append("<li><strong>" + data[i].title + "</strong></li>");
        }
    });
});
</script>
<ul id="output"></ul>
</body>
</html>
```
Yosemiteちゃんはnodeでなくとも生まれから js を実行できる良い子に育ちました。



~~~hello.js
console.log("hello Yosemite!");
~~~

~~~$
osascript -l JavaScript hello.js
~~~



node上から動かして連携できるようなものもnpmにあるようですね。


---

#### 2014/10/23追記

鳶嶋工房さんが記事上げてました。現状わかっていることはこれと、appleのリファレンス読めば十分・・・？

http://www.tonbi.jp/AppleScript/JavaScript/
minecraftのマルチサーバーを自宅ローカルに構築

読みました
[マインクラフト 革命的ゲームの真実 (単行本)](http://www.amazon.co.jp/dp/4046532955/)

無名プログラマーが一発当てたゲーム、Minecraft。の無名プログラマー部分に焦点を当てて書かれてる本です。熱いわー、一発当てたい。

マイクラは昔東京に出てきたばかりの時にハマってマルチサーバー運用してサーバー知識得て行ってサーバーぶっ壊してしばらくやってなかったんですが、マイクラ熱復活してきたのでリハビリがてらマルチサーバーの設定してみた。

自宅ローカル環境に構築したけど、外部からアクセスできるサーバーとかだったら普通に外部に公開できる。

対象サーバーはUbuntu 14.04.1

まずは必要なパッケージのインストール

    sudo apt-get install openjdk-7-jre screen

マルチサーバーのダウンロード、起動。

    mkdir minecraft
    cd minecraft
    wget -O minecraft_server.jar https://s3.amazonaws.com/Minecraft.Download/versions/1.8/minecraft_server.1.8.jar
    java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
    <C-c>

だけどこの段階だと起動できない。
マルチサーバーを立てるにはEULAの認証が必要なので以下で確認
<https://account.mojang.com/documents/minecraft_eula>

EULAに同意できれば、作成された`eula.txt`でのを`true`に変更する。

    vi eula.txt

```
eula=true
```

以上でサーバーの起動ができるようになる。以下で立ち上がることを確認しておく。実際に接続できるか、Minecraftを起動して マルチプレイ -> サーバーの追加 でサーバーipを入力して確認

    java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
    <C-c>

後は起動スクリプトとバックアップの設定

起動スクリプトはwikiで公開されてるものを使用する。wikiにあるスクリプトなので誰でも自由に変更することができる。使用するときは不審な記述がないか確かめておいたほうが安全かも。

    cd
    mkdir backup
    wget -O minecraft "http://minecraft.gamepedia.com/Tutorials/Server_startup_script/Script?action=raw"
    vi minecraft

以下の値を変更する

```
USERNAME='soramugi'

MCPATH='/home/soramugi/minecraft'
BACKUPPATH='/home/soramugi/backup'
```

    sudo cp minecraft /etc/init.d/
    sudo chmod +x /etc/init.d/minecraft
    /etc/init.d/minecraft start
    sudo update-rc.d minecraft defaults

しばらくすればマルチサーバーが起動される。

次は定期バックアップの設定
バックアップ先はとりあえずs3にしておく。簡単便利だけど金かかるのでバックアップ先は個々人で好き好きですね。
s3のバケットはあらかじめ作っておく。

    sudo apt-get install python-pip
    sudo pip install awscli
    aws configure # access_key,secret_keyの設定
    cd
    vi crontab.bak

```crontab.bak
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
MAILTO=''
LANG=ja_JP.UTF-8

MC=/etc/init.d/minecraft

#,----------分
#| ,--------時
#| | ,------日
#| | | ,----月
#| | | | ,--曜日（0:日 1:月 2:火 3:水 4:木 5:金 6:土 7:日）
#| | | | |
#* * * * * command
# マイクラサーバーのバックアップ
# リストア方法
# tar zxvf $BACKUPFILE && mv world $DIR/world && mv *.jar $DIR
45 5 * * * $MC command say 'バックアップを開始します。1分後にサーバーがシャットダウンされ、再起動されます' && sleep 600 && $MC stop 100 && $MC backup && $MC start && find /home/soramugi/backup/ -name 'world*' -ctime +30 -exec rm {} \; && aws s3 sync --delete /home/soramugi/backup/ s3://{作成しておいたs3バケットネーム}/
```

    crontab crontab.bak

で完了。時間になればサーバー内に通知、1分後にストップ、バックアップの作成、起動、30日以上前のバックアップ削除、s3に同期、してくれる。

あと起動スクリプトとかもバックアップさせておいたほうがよさそう

    cp crontab.bak backup
    cp minecraft backup

おつしゃしゃっした
MacでJuliusインストールする方法

Julius(シリウス)をインストールしてみたのですが、けっこう大変でした。
なので、みなさんに共有。

前準備
---
※brewを使っているので、以下をご参考に入れて下さい。
http://qiita.com/amano-kiyoyuki/items/f27f113a079c57d59b6e

※xcodeコマンドラインツールがインストールされていないとCFLAGSがエラーになるので
以下の強火で進めさんの記事を参考にインストールして下さい。
http://d.hatena.ne.jp/nakamura001/20140503/1399116353

※権限の問題っぽい時は、こちらを使って下さい。
sudo chmod 777 /usr/local/bin
sudo chmod 777 /usr/local/share/man/man1

※ターミナルの補足
$ cdでディレクトリ移動
$ cd ..　で一つ上の階層へ移動


flewインストール
---
flexが必要らしいので、とりあえず入れます。

```
brew install flex
```

portaudioインストール
---
juliusはcoreaudioでは使えないのでportaudioを入れる

以下から、pa_stable_v19_20140130.tgzをダウンロードします。
http://www.portaudio.com/download.html
データを指定のディレクトリに移動して解凍します。

```
//このやりかたはうまくいかなかった。
$ tar xvf pa_stable_v19_20140130.tgz
$ cd portaudio
$ CFLAGS='-arch i386' ./configure
$ sudo make install
//このやりかたはうまくいかなかった。
```

こ、これでportaudioが入るはずなんだけども、ダメだったので
brewでインストールしてみる。

```
$ brew install --universal portaudio
```
brewでは成功しました！


ディクテーションキット　インストール
---
ディクテーションを以下からダウンロード
http://sourceforge.jp/projects/julius/downloads/60416/dictation-kit-v4.3.1-osx.tgz/

```
$ tar xvzf dictation-kit-v4.3.1-osx.tgz
$ cd dictation-kit-v4.3.1-osx
$ ./run-gmm.sh
```
こちらに、Juliusのバイナリがついてくるのでインストールが不要のようです。


確認
---
以下で実行。

```
$ cd dictation-kit-v4.3.1-osx
$ ./run-gmm.sh
```

序盤の桃太郎を口ずさんでみたいけども。
音声認識がイマイチだった。

![スクリーンショット 2014-10-21 7.49.30.png](https://qiita-image-store.s3.amazonaws.com/0/38279/c05ba2e9-8f94-fdd3-e2a8-2d73f1d3fb0e.png)

とはいえ、一応インストールは無事に終了。

Juliusの終了
Control + Cで中断できます。


juliusインストール（一応記載）
---
※試してないので出来るか不明？？

brewでインストール
```
brew install julius julius-dictation-kit
```

以下からjulius-4.2.3.tar.gzをダウンロードします。
http://sourceforge.jp/projects/julius/downloads/59049/julius-4.2.3.tar.gz/

↓以下の方法だと失敗する。
```
$ tar -xzf julius-4.2.3.tar.gz
$ cd julius-4.2.3
4 env CFLAGS='-O3 -arch i386' LDFLAGS='-arch i386' ./configure --enable-words-int --with-mictype=portaudio
```

julius-4.2.3/julius/main.cの197行目を変更する。
-1を追記！

```
if (j_adin_init(recog) == FALSE) return -1;
```

```
$ make
```

これだとmakeでエラーします。

makeできない理由は

'sent/config.h' file not foundってでるけども
config.h.inとファイル名が違ったので変更してみたけど
変わらずエラーしてしまった。

一応、深追いする必要がなかったのでエラー原因は追求せずに終了しています。
pentaho勉強メモ

pentahoを勉強しているので、そのメモをつらつらと書いていきます。まだ勉強中なので、間違いも多いと思いますが、見つけた場合は突っ込みお願いします。

## pentahoのコンポーネント

pentahoはかなりいろんなコンポーネントで構成されている模様。一つづつ噛み砕いていく。

### ビジネスアナリティクス関連コンポーネント

#### BA Server and User Console - BAサーバ

* Tomcat上のWebアプリケーションサーバ
* ユーザやpentaho自身が作ったコンテンツを格納するサーバ
* ユーザコンソールを同梱しておりWebベースで管理できる
* BAのコンテンツ、スケジュール、レポートの表示、セキュリティの管理ができる

#### Report Designer - レポートデザイナ

* Javaのクライアントアプリ
* レポートを作るときのメインツール
* ピクセルレベルで制御できるレポートを作れる
* スタンドアローンなツール

#### Aggregation Designer - アグリゲーションデザイナ

* Javaのクライアントアプリ
* ディメンジョンデータから集計テーブルを作るためのシンプルなインターフェースを提供する
* ユーザの選択をもとにDDL(データ定義言語)とDML(データ操作言語)を生成する
* Mondrianスキーマを更新して新しい集計テーブルをみるようにする

※ Mondrianは巨大なデータを簡単に扱えるOnline Analytical Processing (OLAP) サーバ。javaで書かれている。

#### Metadata Editor - メタデータエディタ

* Javaのクライアントアプリ
* メタデータのドメインとモデルを作るのに役立つ。
* メタデータモデルは物理構造と論理的なビジネスモデルを紐づける
* このマッピングは中央メタデータレポジトリに格納される
* 管理者はこのデータに対してセキュリティパラメータ、ローカライズ、追加の計算、レポート用のフォーマット等を作っていく

#### Schema Workbench - スキーマワークベンチ 

* Javaのクライアントアプリ
* 多次元データモデルの生成・編集ができる
* セキュリティや複雑な計算をモデルに対して行える


### データインテグレーション関連コンポーネント

#### Data Integration Server - DIサーバ (EE)

* Tomcatベースサーバ
* DIをローカルマシンではなくサーバで実行したいときはこれを使う
* ETLのジョブやトランザクションを実行する
* ユーザやロールの管理ができるし、既存のLDAPやActive Directoryを認証に利用することも可能
* クライアント側のツール(Spoon)と接続することにより、ジョブなどのスケジューリングやモニタリングが可能

#### Carte - カルテ (CE)

* Data Integration ServerのCE版
* Webサーバ
* XMLを送ることによりリモートからジョブやトランザクションを実行できる


#### Spoon - スプーン

* Javaのクライアントアプリ
* DIのメインとなるツール
* ジョブやトランザクションを作ることができるグラフィカルなツール

#### Kitchen - キッチン 

* ジョブをコマンドラインから実行するツール

#### Pan - パン

* トランザクションをコマンドラインから実行するツール

#### Instaview - インスタビュー

* プラグイン
* 複雑なデータアクセスを管理するテンプレートが使えるようになる
* Instaviewは自動的に"変換"やメタデータモデルを作成し、それらを実行し、結果を可視化できる

#### Agail BI - アジャイルBI 

* プラグイン
* 開発者がBIプロジェクトのプロトタイプを開発できるようになる
[Swift] UIViewの自作subclassの初期化

Swift 1.2版を投稿しました！
[[Swift 1.2] UIViewの自作subclassの初期化](http://qiita.com/tkuma/items/0187f819e49c47bb9873)

***
初投稿なので読みづらいです。

UIViewのサブクラスを自作するときの初期化で少しはまってしまったので残します。

自作のviewクラスにとりあえず以下のメソッドを入れておけば上手く動きました。


    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(frame: CGRect) {
        super.init(frame: CGRectMake(0, 0, 0, 0))
    }
    
    override init() {
        super.init()
    }

<del>どれかが欠けるとエラーになるのでとりあえずこの３つは入れて置けば大丈夫だと思います。</del>コードのみの生成や、xibに配置したviewをcustom classにして生成した場合などで異なります。

required init(coder aDecoder: NSCoder) {}
は
xibやstoryboardにviewを配置した時、

override init() {}
と
override init(frame: CGRect) {}
は
コードで生成した時に呼ばれるみたいです。
ちなみにどちらでも呼ばれるメソッドは

    override func drawRect(rect: CGRect) {
        super.drawRect(rect)
    }

<del>なので、ここに初期化したい処理を書くと良いかと思います。</del>drawRectはcolorやtextを変えた時に呼ばれます。


※追記
xib (storyboard) に配置したviewをcustom classにした場合も、
override init()とrequired init(coder aDecoder: NSCoder) を入れないと親のプロパティにアクセス出来なかったので、
やっぱりこの３つを入れるのが無難ですね。

※追記2
この方法でinit(frame:)にrectを引数にして初期化するとviewの透過が正常に動きませんでした。
objective-cだと同じような方法で問題なかったので、足りない記述があるかと思います。
失礼しました。調べて確認が出来ましたら追記いたします。
c++11のラムダ式でグローバル変数を初期化

今日見つけた話ですが、c++のラムダ式は変数の初期化にも使えますね。

```c++:test.h
extern const std::string global_str;
```

```c++:test.cpp
const std::string global_str = [] {
    std::string str;
    str.append("abc");
    return str;
}();
```

さらに驚くことに、静的変数を初期化する場合そのラムダ式内では所在クラスのプライベート関数をアクセスできます。

```c++:test.h
class test_class {
    test_class() {};
public:
    const static test_class single_obj;
};
```

```c++:test.cpp
const test_class test_class::single_obj = [] {
    test_class obj;
    return obj;
}();
```
Yosemiteにアップデート後、iTerm2でアンチエイリアスが効かないとき


OS X Yosemite‎にアップデートして、iTerm2を立ち上げたところアンチエイリアスが効かなくなった。フォントはRicty。

![前.png](https://qiita-image-store.s3.amazonaws.com/0/25240/8f12f3b4-9cc8-88e3-8448-ed2457b7b477.png "前.png")

見づらい。
次のコマンドを流して、iTermを再起動すると解消する。

```sh
defaults -currentHost write -globalDomain AppleFontSmoothing -int 2
```

![後.png](https://qiita-image-store.s3.amazonaws.com/0/25240/d68f1ab5-8363-6070-840a-3c34dd77531f.png "後.png")

--

参考URL
[プログラムに最適なフォント『Ricty』を超簡単にインストール[Mac限定] - 酒と泪とRubyとRailsと](http://morizyun.github.io/blog/ricty-font-homebrew-mac/)

--

追記

上記のコマンドを入力後、なんかFinderとかのフォントを含めて、全体的にフォントがきれいになった気がする。。。

Finder内の文字が突然太字化される謎の現象もなくなったし。
CSSやJSのキャッシュ対策をGruntで行う

## 目的
システムをアップデート時にCSSやJavascriptを更新していると，ブラウザのキャッシュが効いていて思った挙動にならなく困ったりします．
対策としては下記のようにCSS, JSのsrcにビルド時のタイムスタンプなどをQueryStringとして設定して強制的にリクエストを呼ばせます．

	<link href="/css/main.css?rel=20141020" rel="stylesheet" type="text/css"/>

QueryStringをビルド時に動的につける方法は様々あるのですが，今回はGruntを使ってやってみました．

## 方法
[grunt-cache-breaker](https://github.com/shakyshane/grunt-cache-breaker)といういい感じにQueryStringを追加してくれるPluginがあるので，使います．

`Gruntfile.js`

```
var moment = (require('moment'))();

module.exports = function (grunt) {
 
  var timestamp = 'None';
 
  grunt.initConfig({
    cachebreaker: {
      dist: {
        options: {
            match: [
              '.css',
              '.js'
            ],
            replacement: function () {
              return moment.format('YYYYMMDD');
            }
        },
        files: {
          src: [
            'build/**/WEB-INF/view/**/*.jsp'
          ]
        }
      }
    }
  });
 
  grunt.loadNpmTasks('grunt-cache-breaker');
 
  grunt.task.registerTask('default', ['cachebreaker:dist']);
};
```

`package.json`

```
{
  "name": "package",
  "version": "0.0.1",
  "devDependencies": {
    "grunt": "^0.4.5",
    "moment": "^2.8.3",
    "grunt-cache-breaker": "^1.0.1"
  }
}
```

### 使い方

	$ npm install
	$ grunt
AWS CLI の --query で複数のタグでインスタンスを検索

例えば Name=hoge かつ Role=fuga のインスタンスの ID と AZ を表示する場合。

見やすくするために無理やり改行を入れています。

```
aws ec2 describe-instances --query 'Reservations[].Instances[] '\
'| [? Tags[?Key==`Name`][] | [?Value==`hoge`] ] '\
'| [? Tags[?Key==`Role`][] | [?Value==`fuga`] ] '\
'| [][InstanceId,Placement.AvailabilityZone]'
```

あるいは、次のように書いたほうが見やすいでしょうか。

```
aws ec2 describe-instances --query "$(echo 'Reservations[].Instances[]
  | [? Tags[?Key==`Name`][] | [?Value==`hoge`] ]
  | [? Tags[?Key==`Role`][] | [?Value==`fuga`] ]
  | [][InstanceId,Placement.AvailabilityZone]
')"
```

タグでの検索なら filter でもできるので filter  の方が簡単です。

```
aws ec2 describe-instances --filter \
  'Name=tag:Name,Values=hoge' \
  'Name=tag:Role,Values=fuga' \
  --query 'Reservations[].Instances[][InstanceId,Placement.AvailabilityZone]'
```
Rspecでコントローラのインスタンス変数を取得する方法

Rspecを使ったコントローラのテストで、コントローラのインスタンス変数を取得する方法。

```language:Ruby
it { expect(controller.instance_variable_get("@users")).to include user } 
```
http://ref.xaio.jp/ruby/classes/object/instance_variable_get
controller.instance_variable_get("@users")によって、インスタンス変数「@users」を取得している。Featureテストを書きたくない時とかに。
Itamae | Ohai 連携オプション #devops #itamae

# Itamae | Ohai 連携オプション #devops #itamae

## 概要
プロビジョニングツール Itamae

Ohai 連携オプションでサーバー情報を Node から利用します。
Ohai は環境の情報取得用のライブラリ。

※ ohai については下記リンク参照
https://github.com/opscode/ohai
http://docs.getchef.com/ohai.html

## 試行
### レシピを作成
~~~ruby
require 'pp'

pp node[:platform]
pp node[:platform_version]
pp node[:hostname]
pp node[:languages][:ruby]
~~~

### 実行

~~~
$ itamae local --ohai recipe.rb
"12.04"
"precise64"
{"host_vendor"=>"unknown",
 "gem_bin"=>"/usr/local/bin/gem",
 "target_os"=>"linux",
 "host"=>"x86_64-unknown-linux-gnu",
 "target_vendor"=>"unknown",
 "gems_dir"=>"/usr/local/lib/ruby/gems/2.0.0",
 "platform"=>"x86_64-linux",
 "bin_dir"=>"/usr/local/bin",
 "target_cpu"=>"x86_64",
 "release_date"=>"2013-11-22",
 "host_os"=>"linux-gnu",
 "ruby_bin"=>"/usr/local/bin/ruby",
 "host_cpu"=>"x86_64",
 "version"=>"2.0.0",
 "target"=>"x86_64-unknown-linux-gnu"}
 INFO : Recipe: /home/vagrant/ohai_test/recipe.rb
~~~

## 参照
* [Itamae GitHub](https://github.com/ryotarai/itamae)
* [vagrant-itamae GitHub](https://github.com/chiastolite/vagrant-itamae)
* [軽量・高速版 Chef 「Itamae」。 プロビジョニングツールの学習コスト低下。Berkshelfからの解放。Chef Solo から Chef Zero への移行からの解放 #devops #itamae](http://qiita.com/tbpgr/items/3b6796c1cfc3c3e5521f)
Sublime Text 3でPackage Controlがいきなり動かなくなった... 時の対応

## Sublime Text 3でPackage Controlが動かなくなった。

**Q.あなたならどうする？**

**A.**
　　||
　∧||∧
（ / ⌒ヽ
　| | 　　|
　∪ / ﾉ
　 | ｜|
　 ∪∪


とならないために、対応したこと。

    ※対応する前に設定のバックアップとっておきましょう！！

###1) とりあえず、githubにあたって見る。

あった！！

I deleted the ~/.config/sublime-text-3/Packages/Package Control folder and the
~/.config/sublime-text-3/Installed Packages/Package Control.sublime-package file and reinstalled the package manager. Now it's working again.

(https://github.com/wbond/sublime_package_control/issues/736)

やってみた...
動かなかった...

###2) もう最終手段だ！！

Sublime Text消して入れなおす！！
Package Controll インストール！！
**動いた！！ ﾟ+.(◕ฺ ω◕ฺ )ﾟ+.**


## 結局原因はなんだったのか？

1. ディレクトリ構成が微妙に変わった。
2. SSL証明書(CRT)が更新された気がする。(多分... きちんと見てなかった...)

## あっ、設定消えた

**結論**

　　||
　∧||∧
（ / ⌒ヽ
　| | 　　|
　∪ / ﾉ
　 | ｜|
　 ∪∪
Elixir Range

# Elixir Range

## 概要
Elixir の Range について。

Range は範囲を扱います。
実際に利用する際は、ほとんどの場合、自動的に import されている
Kernel#../2 を経由での利用となる。

### new(first, last)
binary を Range に変換します

~~~
IO.inspect Range.new(1, 10) |> Enum.take(5)
IO.inspect Range.new(65, 90) |> Enum.take(5)
~~~

* 出力

~~~
[1, 2, 3, 4, 5]
'ABCDE'
~~~

### range?(range)
Range を char_list に変換します

~~~
IO.inspect Range.range?(1..5)
IO.inspect Range.range?(1)
'2345'
~~~

* 出力

~~~
true
false
~~~

### Kernel#first .. last
Range を生成します

~~~
IO.inspect Range.range?(1..5)
IO.inspect Range.range?(1)
'2345'
~~~

* 出力

~~~
[1, 2, 3, 4, 5]
'ABCDE'
~~~

## 参照
http://elixir-lang.org/docs/stable/elixir/Range.html
http://elixir-lang.org/docs/stable/elixir/Kernel.html#../2
AmazonLinuxにRailsプロジェクトを構築するための準備

Railsのセットアップで苦しいのはただ一つ。
もうとにかくnokogiriが入らない！苦しい！

ということでAmazonLinuxにRailsのプロジェクトを構築するための準備をまとめてみました。

rootに昇格しておきます

~~~
sudo su - 
~~~

rbenvのインストールにgitを

~~~
yum install -y git
~~~

Rubyのコンパイル用にgccとgcc-c++を

~~~
yum install -y gcc gcc-c++
~~~

各種gemでxmlパースなどで必要なライブラリをインストールしておきます

~~~
yum install -y openssl-devel readline-devel libxml2-devel libxslt-devel libffi-devel
~~~

Rubyの実行ユーザを作って

~~~
useradd matz
su - matz
~~~

rbenvをインストール

~~~
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source .bash_profile 
~~~

rbenvを使うのに便利なプラグインをインストール

~~~
mkdir .rbenv/plugins
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
git clone https://github.com/sstephenson/rbenv-default-gems.git ~/.rbenv/plugins/rbenv-default-gems
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
~~~

rbenv-default-gemsプラグインで、初期インストールしておくgemを指定
今回はbundlerのみ

~~~
touch ~/.rbenv/default-gems
echo 'bundler' >> ~/.rbenv/default-gems
~~~

gem install する際、ドキュメントをインストールしない設定を追加

~~~
touch ~/.gemrc
echo 'gem: --no-ri --no-rdoc' >> ~/.gemrc
~~~

Rubyをインストール！

~~~
rbenv install 2.2.2
rbenv global 2.2.2
~~~

Bundlerでモジュールインストールをする際、並列インストールするよう設定

~~~
bundle config --global jobs 4
~~~

nokogiriはシステムライブラリを見るよう設定

~~~
bundle config build.nokogiri --use-system-libraries
~~~

これでmatzユーザでRailsアプリを起動できるようになりました( ・∀・)ﾉ
Atomで右クリックメニュー（コンテキストメニュー）をカスタマイズする

# 概要
Atomを使っていて、この機能を右クリックから使いたいなーって思ったので、追加してみました。

# 前提
- 利用環境：Mac
- [atom-terminal](https://atom.io/packages/atom-terminal)をインストール済み（説明する上でatom-terminalにしただけなので実際はなんでもOKです）

# 内容

## atom-terminalを右クリックメニューに追加する

### ファイル一覧
- クリックしたファイルのあるディレクトリをterminalで開く（標準だとPJのrootを開くものしかない）

### エディタ
- 開いているPJのrootをterminalで開く
- 開いているファイルのあるディレクトリをterminalで開く

# 具体的な変更内容

各々で設定ができる、`Init Script(init.coffee)`に下記コードを追加します。
Init Script は Atomメニューから開けます。

```init.coffee
atom.contextMenu.add({
  '.workspace .editor:not(.mini)': {
    'Open Terminal at Root':    'atom-terminal:open-project-root',
    'Open Terminal at Current': 'atom-terminal:open'
  }
});
atom.contextMenu.add({
  '.platform-darwin .tree-view': {
    'Open Terminal at Current': 'atom-terminal:open'
  }
});
```


**以上！！**

簡単ですねー。これを応用すれば他にも好きな項目を追加できそうです。

## 余談
デフォルトでは`Terminal.app`が使われる設定になっていますが、`atom-terminal` の設定画面に好きなアプリケーションを設定できます。（最初しらなく本体のコードを書き変えてた(；´∀｀)
CentOS 7 nginx + php-fpm のインストール

CentOS に nginx と php-fpm をインストールする手順。
yum を使って簡単にインストール。

## インストール

```shell-session
$ sudo yum install epel-release
$ sudo yum install nginx
$ sudo yum install php-fpm
```

## nginxの起動

```shell-session
$ sudo systemctl start nginx
```

デフォルトは80番ポートで起動

nginxのconf は下記のディレクトリ以下にあるので適宜編集する。

```sh
/etc/nginx/
```

## php-fpmの起動

```shell-session
$ systemctl start php-fpm
```

デフォルトは9000番ポートで起動する

php-fpmのconfにあるので適宜編集する。

```sh
/etc/php-fpm.conf
/etc/php-fpm.d/
```
CentOS 7 Node.js のインストール手順 (yum を利用)

CentOS 7 での Node.js のインストールメモ。

nvm を使ったりしてもいいが、簡単な yum でのインストールの手順。

Node.js の案内 : https://nodejs.org/ja/download/package-manager/#enterprise-linux-and-fedora-enterprise-linux-fedora
にある、
nodesource : https://github.com/nodesource/distributions を利用する

最新の LTS (8.x) をインストールする。

## インストール

### リポジトリを追加

```shell-session
$ curl -sL https://rpm.nodesource.com/setup_8.x | sudo bash -
```

### インストール

```shell-session
$ sudo yum install nodejs
```

### バージョン確認

```shell-session
$ node -v
```
Android AOSPの group一覧のための oneliner


manifest.xmlに以下を適用してください:

```
perl -ne 'if (m,groups="([^"]+)",) { $a = $1; $a =~ s/,/\n/g; print $a, "\n"}' |sort|uniq
```

Groupは以下のために使います:
http://qiita.com/monamour555/items/804cc47110a0a7031117

ちなみに、いま syncした repositoryに対してやったところ、以下の groupができました。意味は類推してください:
```
arm
broadcom_wlan
cts
darwin
device
eclipse
exynos5
flo
grouper
hammerhead
invensense
libyuv
linux
mako
manta
mips
motodev
notdefault
omap4
pdk
pdk-java
qcom
qcom_msm8960
qcom_msm8x74
qcom_wlan
tools
x86
```
AWS SDK for PHP でバッチ（並列）送信する方法

AWS SDK for PHPで、まとめて送信する方法について記載します。

ご存知かとは思いますが、AWS SDK for PHP は、Guzzleをベースとして実装されているので、Guzzleの機能がほぼ利用できます。
今回説明する方法は、Guzzleの機能を利用しているので、Guzzleベースのものであれば、だいたい使えるんじゃないかと思います。

## 環境

* AWS SDK for PHP v2.6.15
* Guzzle v3.9.2
* PHP 5.4

なお、今回利用したバージョンは上記になりますが、AWS SDK for PHPなら、ほぼすべてのバージョンで使えるんじゃないかと思います、
ただ、AWS SDK for PHP v3 からは、Guzzle自体のバージョンも上がって確認してないので、保証できません...。

## 実装例

以下の実装は、AWS SNS の publish コマンドを例に実装していますが、他のサービスやメソッドでも、すべて同様に実装ができるので参考として考えてください。同様に publish コマンドだけではなく、複数の他のコマンドを並列で送信できるので、依存関係がないリクエストを、並列で処理させることもできると思います（やったことないけど...）

```php
use Aws\Common\Aws;
use Aws\Common\Enum\Region;

$aws = Aws::factory([
    'key'    => '<your key>',
    'secret' => '<your secret>',
    'region' => Region::AP_NORTHEAST_1
]);
$sns = $aws->get('Sns');


// 共通の送信内容を作成
$apnsMessage = json_encode([ 'aps' => [ 'alert' => 'hogehoge' ] ], JSON_UNESCAPED_UNICODE);
$message     = json_encode([ 'APNS' => $apnsMessage ], JSON_UNESCAPED_UNICODE);

$publishArgs = [
    'MessageStructure' => 'json',
    'Message'          => $message
];

// publishのコマンドを まとめて作成
$commands = [];
foreach ($endpointArns as $targetArn) {
    $publishArgs['TargetArn'] = $targetArn;

    $commands[] = $sns->getCommand('publish', $publishArgs);
}

try {

    // 作成したコマンドを まとめて送信（全リクエストに応答があったら戻ってくる）
    $succeeded = $sns->execute($commands);

} catch (\Guzzle\Service\Exception\CommandTransferException $e) {

    $succeeded = $e->getSuccessfulCommands();
    $failed    = $e->getFailedCommands();

    // それぞれのコマンドの失敗内容に応じて処理する
    foreach ($failed as $failedCommand) {
        /** @var \Aws\Common\Command\QueryCommand $failedCommand */
        $exception = $e->getExceptionForFailedCommand($failedCommand);

        // 失敗したリクエストの内容を取得したい場合はこんな感じ
        /** @var \Guzzle\Http\Message\EntityEnclosingRequest $request */
        $request  = $failedCommand->getRequest();

        if ($exception instanceof \Aws\Sns\Exception\InvalidParameterException) {
            // InvalidParameterException に対して処理したい場合とか
        }
    }

} catch (\Exception $e) {

    // 通信以外でのエラーとか

}

```

## 注意点

通常の Sns::publish コマンド（メソッド）を利用した場合、AWS SDK の Exception が throw されますが、Guzzle の機能を使って並列送信した場合は、Guzzle の CommandTransferException が throw されて、その Exception が、それぞれのリクエストでの失敗内容を持っています。

## 参考

今回の実装と同様の、他コマンドでの実装は以下のものを参考にすると良いと思います。

* AWS S3の例: [AWS SDK for PHP を使用したオブジェクトのコピー](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/CopyingObjectUsingPHP.html)


間違いあればコメントなど頂ければと思います。。。
videojsでビデオ停止時にcontrolsを非表示にする

#controlsを非表示にできない
video.jsはビデオが停止すると、コントロールバーが表示されるようになっている。それを消したいと思った。

ドキュメントを読むと、controlsというAPIがあるようだ。
https://github.com/videojs/video.js/blob/stable/docs/api/vjs.Player.md#controls-controls-

```js:script.js
var hogePlayer;
videojs("example_video_1", {}, function(){
  hogePlayer = this;
});
```
こんなプレイヤーを想定するとして、

```js:script.js
hogePlayer.controls(false);
```
こう書いても、コントロールバーは消えなかった。


#CSSでdisplay:noneする
```js:script.js
if(!hogePlayer.controls()){
	hogePlayer.controlsBar.el().className = v.controlBar.el().className + " vjs-controls-disabled";
}
```

```css:style.css
.vjs-controls-disabled{
	display: none !important;
}
```
上のように書いて、コントロールバーを扱うCSSを非表示させるとできた。
・参考ドキュメント
https://github.com/videojs/video.js/blob/stable/docs/guides/setup.md
https://github.com/videojs/video.js/blob/stable/docs/api/vjs.Player.md#el
UNIX管理ツールについて

4種類のUNIX管理ツールについて調べてみました。

#Webmin
* GUIでUNIXの設定・管理を行うツール(PC管理者向け)
* ユーザの管理やネットワーク設定、プリンタ管理等が可能
* 日本語化可能

#Virtualmin
* GUIで仮想サーバの管理や設定を行うWebminの拡張モジュール
* 日本語化が中途半端

#Usermin
* GUIでUNIXの設定を行うツール(一般ユーザ向け)
* メールの設定等が可能
* 日本語化可能

#ISPConfig
* GUIでUNIXの設定・管理を行うツール(ISP・ホスティングサービス事業者向け)
* サーバやデータベースの管理等が可能
ヤマハ ルータ RT107e 静的IPマスカレード設定をする



マニュアル　P76
http://www.rtpro.yamaha.co.jp/RT/manual/rt107e/Users.pdf



##ローカル接続される端末のIPを固定する

システム環境設定＞ネットワーク＞詳細＞TCP/IP

DHCPサーバを使用のセレクトボックスを
DHCPサーバを使用（アドレスは手入力）に切り替える

IPv4アドレスの欄が入力可能になるので任意のアドレスを設定しておく

例）
192.168.11.200


![Window_と_sheet_AB6C58C6-44D1-4427-8EA1-D66B258C4474.png](https://qiita-image-store.s3.amazonaws.com/0/5472/43875e96-2965-85d6-4a3b-cbc43884e15a.png "Window_と_sheet_AB6C58C6-44D1-4427-8EA1-D66B258C4474.png")





##ルータ側のひも付け

### ブラウザでアクセス
アイパスが求められるので入力
http://192.168.11.1


![ee5fd44b-6960-2ad9-17bb-d3f50d489764.png](https://qiita-image-store.s3.amazonaws.com/0/5472/a1eda5f2-9382-edad-32a9-3ea29d90c0f1.png "ee5fd44b-6960-2ad9-17bb-d3f50d489764.png")






![RT107e_詳細設定と情報.png](https://qiita-image-store.s3.amazonaws.com/0/5472/d200eef5-eda9-5979-cf4a-7b7523719b06.png "RT107e_詳細設定と情報.png")


![a50a2a85-280c-93f1-f6f6-db6f997f5070.png](https://qiita-image-store.s3.amazonaws.com/0/5472/4980df5b-9325-670e-239a-61bded7f369e.png "a50a2a85-280c-93f1-f6f6-db6f997f5070.png")




![RT107e_詳細設定と情報_→_基本接続の詳細な設定_→_プロバイダの登録_修正.png](https://qiita-image-store.s3.amazonaws.com/0/5472/c9411f04-e21f-9281-6261-ba48aeb9c59a.png "RT107e_詳細設定と情報_→_基本接続の詳細な設定_→_プロバイダの登録_修正.png")


![RT107e_詳細設定と情報_→_基本接続の詳細な設定_→_プロバイダの登録_修正_→_静的IPマスカレードの登録.png](https://qiita-image-store.s3.amazonaws.com/0/5472/2b8ce820-d3aa-34c7-1c5b-1743e9b02568.png "RT107e_詳細設定と情報_→_基本接続の詳細な設定_→_プロバイダの登録_修正_→_静的IPマスカレードの登録.png")
MacにHomebrewをインストールする@追記

こちらをちょっとだけ追記した記事になります。
http://qiita.com/is0me/items/475fdbc4d770534f9ef1

----
Homebrewとは、パッケージ管理システムで要するにソフトウェアを簡単に入れたり出したりできるものです。

[Homebrew公式はこちらになります。](http://brew.sh/)

それでは、早速brewを入れてみよう！

まずは、macのターミナルを起動します。

Homebrewをインストールする。

```
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

これでインストールできます。
次にパスを編集します。

```
vi ~/.bash_profile
```
eで編集モードへ

```
export PATH=/usr/local:$PATH
```
記載後にesc（エスケープキー）を入力して
:w　で書き込み
:q　で保存します。

最後に再起動します。

```
$ source ~/.bash_profile
```

brewが入っているのかを確認します。

```
$ brew -v
```

これで以下が表示されれば成功！
Homebrew 0.9.5
Swift の switch 文で独自のクラスを使用する


# 目的

Swift言語 の switch 文では、整数型だけではなく任意の型を使って条件分岐ができます。ここで独自のクラスを使用する方法を調べてみました。

# 独自クラスを switch 文に対応させる

## 独自クラスのインスタンスを使って分岐できるようにする

自分自身と同じクラスのインスタンスと switch 文で比較できるようにするには、クラスが ```Equatable``` プロトコルに準拠している必要があります。

```swift
class MyClass : Equatable {

}

func ==(lhs: MyClass, rhs: MyClass) -> Bool {

}
```

このようにすることで、独自クラスのインスタンスを使って switch による条件分岐ができるようになります。

```swift
let obj1 = MyClass()
let obj2 = MyClass()

switch obj1 {
	
case MyClass():
	println("new")
		
case obj2:
	println("obj2")
	
default:
	println("others")
}
```

## リテラルを使って分岐できるようにする

とえば整数リテラルを使って条件分岐したい場合は、独自クラスを ```Equatable``` プロトコルと ```IntegerLiteralConvertible``` プロトコルに準拠させます。

```swift
class MyClass : Equatable, IntegerLiteralConvertible {

	init() {

	}
	
	required init(integerLiteral value: IntegerLiteralType) {

	}
}

func ==(lhs: MyClass, rhs: MyClass) -> Bool {

}
```

このようにすることで、整数値リテラルを使った条件分岐が可能になります。

```swift
let obj1 = MyClass()

switch obj1 {
	
case 1:
	println("1")
		
case 2:
	println("2")
	
default:
	println("others")
}
```

## 範囲を使って分岐できるようにする

独自のクラスも ```Comparable``` プロトコルを実装することで、case 文で ```1...3``` のような範囲型を使って条件を記載できるようになります。

> ここでは整数リテラルで範囲を指定することを想定して、併せて ```IntegerLiteralConvertible``` プロトコルにも準拠させておくことにします。

```swift
class MyClass : Comparable, IntegerLiteralConvertible {

	init() {
	}
	
	required init(integerLiteral value: IntegerLiteralType) {
	}
}

func ==(lhs: MyClass, rhs: MyClass) -> Bool {
}

func <=(lhs: MyClass, rhs: MyClass) -> Bool {
}

func >=(lhs: MyClass, rhs: MyClass) -> Bool {
}

func >(lhs: MyClass, rhs: MyClass) -> Bool {
}

func <(lhs: MyClass, rhs: MyClass) -> Bool {
}
```

これで、次のように範囲を使った条件分岐が可能になります。

なお、今回は ```IntegerLiteralConvertible``` に準拠させたため、整数値で表現された範囲で判定しています。これに準拠させなくても、独自クラスのインスタンスで表現された範囲での判定が可能です。

```swift
let obj1 = MyClass()

switch obj1 {
	
case Range(3...5):
	println("3 to 5")
	
default:
	println("others")
}
```

なお、```Comparable``` プロトコルは ```Equatable``` プロトコルにも準拠しているため、必要な機能を実装すれば、必然的にインスタンス単体での case にも対応します。

今回は ```IntegerLiteralConvertible``` プロトコルにも準拠させているため、整数値リテラル単体での case にも対応することになります。

---
[詳細] http://ez-net.jp/article/19/r5vQKEVM/DZoH_4gsVj7B/
Debian squeeze における ShellShock 対策


# 経緯
巷で話題の ShellShock 対策を、管理している Debian(squeeze) のサーバに実施しました。

ココを見ながらやったんですが、、、
http://knowledge.sakura.ad.jp/tech/2580/

squeeze だと少し追加で手順が必要そうでしたので。

# 現状確認

載っていた検証スクリプトを流す。

```bash
$ env x='() { :;}; echo this bash is vulnerable' bash -c :
this bash is vulnerable
```

案の定脆弱性あり。

# bash を更新する

```bash
$ sudo apt-get update
$ sudo apt-get install bash
```

これで完了、、、と思いきや、まだ出るとゆー。

```bash
$ env x='() { :;}; echo this bash is vulnerable' bash -c :
this bash is vulnerable
```

# sources.list の追加

自分が試した 2014年9月下旬現在、squeeze の場合は、LTS のレポジトリを追加しなければならないご様子。
https://wiki.debian.org/LTS

こんな感じ。

```bash
$ cat /etc/apt/sources.list.d/lts.list
deb http://http.debian.net/debian/ squeeze-lts main contrib non-free
deb-src http://http.debian.net/debian/ squeeze-lts main contrib non-free
```

# bash を更新する(再チャレンジ)

てことで再チャレンジ。

```bash
$ sudo apt-get update
$ sudo apt-get install bash
```

`4.1-3+deb6u2` なる version が落ちてきました。

```bash
$ dpkg -l | grep bash
ii  bash                                4.1-3+deb6u2                 The GNU Bourne Again SHell
```

検証スクリプトを流す。問題無し。対応完了。

```bash
$ env x='() { :;}; echo this bash is vulnerable' bash -c :
$
```
admobのテスト広告に使うYOUR_SIMULATOR_IDENTIFIERの調べ方

#YOUR_SIMULATOR_IDENTIFIERがわからない
admobでテスト広告のリクエストを行いたく、ドキュメントを見てみました。
https://developers.google.com/mobile-ads-sdk/docs/admob/additional-controls?hl=ja#ios-test

```objc
GADRequest *request = [GADRequest request];

// テスト広告のリクエストを行う。シミュレータと
// テスト広告を表示する端末の識別子を埋め込む。
request.testDevices = [NSArray arrayWithObjects:
                          @"YOUR_SIMULATOR_IDENTIFIER",
                          @"YOUR_DEVICE_IDENTIFIER",
                          nil];
```
上のようなことが書いてありますが、「YOUR_SIMULATOR_IDENTIFIER」が何かわかりません。

#@[ GAD_SIMULATOR_ID ]を使う
プロジェクトを実行して、コンソールを見てみるとこんな表示出ていることに気づきます。
```
<Google> To get test ads on this device, call: request.testDevices = @[ GAD_SIMULATOR_ID ];
```
「GAD_SIMULATOR_ID」を使えばいいようです。結果、下のように書けば、シミュレーターで動きます。

```objc
//テスト用バナー
    GADRequest *request = [GADRequest request];
    request.testDevices = @[ GAD_SIMULATOR_ID ];
    
    [bannerView_ loadRequest:request];
```
bash で yesno

LICENSE は [NYSL](http://www.kmonos.net/nysl/) / [CC0](http://creativecommons.org/publicdomain/zero/1.0/deed.ja) / [THE BEER-WARE LICENSE](http://en.wikipedia.org/wiki/Beerware) とか適当に好きなの選んでください。

適宜 ``yeno`` を記載した ``functions.sh`` 作って、 ``source /path/to/functions.sh`` すると良いのかな。

コード

```bash
#! /usr/bin/env bash

function yesno() {
    printf '処理を開始します。 (Y/n) >> '
    read answer
    answer=`printf $answer | grep -iE '^(yes|y|no|n)$' | tr "[:lower:]" "[:upper:]"`
    case "$answer" in
        "Y" | "YES") return 0;;
        "N" | "NO") return 1;;
        *) yesno;;
    esac
}

yesno && echo 'yes'
```

使用例

```console
$ ./yesno.sh
処理を開始します。 (Y/n) >> y
yes
```

THX: Shell 

- 参照: [case 文の使用方法 - UNIX & Linux コマンド・シェルスクリプト リファレンス](http://shellscript.sunone.me/case.html)
- 参照: [bashなどシェルスクリプトで大文字と小文字の変換](http://takuya-1st.hatenablog.jp/entry/2014/07/08/102001)

僕が所属している[会社](http://www.beproud.jp/)が[社員募集中](http://jobs.beproud.jp/)みたいです。なんか、 Python とか何か書いてみてーなと思った人は応募してみてくださいな。 (すてま)
Macの初期設定でよく困ること 5つ


OS X Yosemiteクリーンインストールしたので、その際のメモ。

## 1. 英語をデフォルト言語にしていると、日本語フォントがときどき変

System preferences > Langage & Region

言語に日本語を追加する。

http://shijimiii.hatenablog.com/entry/2013/11/03/123508

## 2. キーボードの打ち間違った時の警告音がうるさい

System preferences > Sound > Alert Volume

をゼロにする。

## 3. スクリーンショットの保存先がデフォルトデスクトップなのが困る

```
mkdir ~/Screenshots
defaults write com.apple.screencapture location ~/Screenshots
killall SystemUIServer
```

## 4. IMEの変更とSpotlight（Alfredも）のショートカットキーがコンフリクト

いつもはSpotlightの方を`Option+Space`に変更している。

## 5. iTerm2でOptキーをmetaキーとして使う

Preference -> Profile ->

![Screen Shot 2014-10-20 at 14.38.54.png](https://qiita-image-store.s3.amazonaws.com/0/4192/6dc4d9fb-589c-062e-9cf9-3528a8542b69.png "Screen Shot 2014-10-20 at 14.38.54.png")

## その他

* dotfilesにまとめられるものはすべてまとめる。https://github.com/tachiba/dotfiles
OS X YosemiteにアップデートしたらFinderがクラッシュループ


週末に #rebuidfm 聴いたあと、興味本位で更新かけたら大後悔の巻。

# Finder crash looooooop

OSのバージョン上げるとよく起こるみたいですね。
Finderが立ち上がっては落ち、立ち上がっては落ち、使い物になりません。なにせFinderです...

# Yosemite に対応していないパッケージの問題らしいが...

**下記のステップを試してみる場合、必ずバックアップとってね！！！わからない人はGeniusBar行くのが無難だよ！！！**

## 解決策１ DollyDriveがいるなら消してみる

依存しているパッケージ・アプリケーションのファイルを消し去れば解決するかも？

`DollyDrive`は残っていると現時点では落ちるみたいですね。
`~/Library`以下に悪玉がいるみたいなので、Finder使えず大変ですが、Terminalで探してみましょう。

Finder Crash Loop after Yosemite Update
https://discussions.apple.com/message/26855410#26855410

Yosemite Update - Finder in a crash loop!
https://discussions.apple.com/thread/6603612

上記であがっているようなものではない場合、自分で探すしかないみたいです。

## 解決策２ SafeBootを繰り返して原因を特定する

Shiftキーを押しながら起動するとSafe Bootになります。
これでもFinderがcrashしたら諦めましょう。

でも、これでFinderが安定していれば、頑張れるかも？

OS X：セーフブート、セーフモードとは？
http://support.apple.com/kb/ht1564?viewlocale=ja_JP

* System Preferences -> Users&Groups -> Login ItemsにあるアプリケーションをひとつずつLogin Itemsから外してみる。
* その他可能性のあるApplicationや~/Library以下のファイルを消してみる。

## 解決策３ あきらめてクリーンインストール

再起動時にCommand+Rを押し続けると起動時に"Disk Utility"を選択できるようになるので、パーティションを選択してフォーマット、再インストール。

OS X: How to erase and install
http://support.apple.com/kb/HT5943

ええ、自分は結局クリーンインストールしましたよ...
結果、軽くなった気がするので良かったです...笑

クリーンインストールする方でTimeMachine使わない方は、部分的にdotfilesとかバックアップとっていても、製品ライセンスは無くしやすいので注意してくださいね。
bootstrap 事始め　

[この本](http://www.amazon.co.jp/%E8%A8%88%E7%AE%97%E7%B5%B1%E8%A8%88%E5%AD%A6%E3%81%AE%E6%96%B9%E6%B3%95%E2%80%95%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%83%88%E3%83%A9%E3%83%83%E3%83%97%E3%83%BBEM%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%83%BBMCMC-%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%E4%BA%88%E6%B8%AC%E3%81%A8%E7%99%BA%E8%A6%8B%E3%81%AE%E7%A7%91%E5%AD%A6-5-%E5%B0%8F%E8%A5%BF-%E8%B2%9E%E5%89%87/dp/4254127855 "この本")の第一章例3をRで。



データの定義
>x<- c(5,10,15,20,25,30,35,40,45,50)
y<- c(8.6,10.4,21.6,22.8,19.5,30.0,29.5,34.3,38.7,47.4)

線形回帰
>re<-lm(y~x)

その残差
>resi<-summary(re)$residual

箱を作って
>ncount<-100000
Res<-matrix(0,ncount,length(x))
res.boot<-matrix(0,ncount,length(x))
result<-matrix(0,ncount,2)

一応時間なんかも測ったりして
>time<-proc.time()

R初心者です（ループ）
>for(i in 1:ncount){
Res[i,]<-sample(resi,replace=T)
res.boot[i,]<-re\$coefficients[1]*array(1,length(x))+re\$coefficients[2]*x+Res[i,]
temp<-lm(res.boot[i,]~x)
result[i,1]<-temp\$coefficients[1]
result[i,2]<-temp\$coefficients[2]
}
時間見て
proc.time()-time

| ユーザ | システム | 経過(秒) |
|------|--------|--------|
| 1.16 | 0.00 | 1.16 |

1000回で1.5秒か・・・。



> summary(result[,1])

|   Min. |1st Qu. | Median |   Mean |3rd Qu.   | Max. |
|---------|--------|-------|--------|---------|------|
|-0.8874|  3.6070|  4.9510 | 4.9550|  6.3630 |11.0900| 
> sd(result[,1])
[1] 2.070965

ちなみにただの線形回帰なら
> re$coefficients[1]
(Intercept) 
        4.9 

点推定値はいいけど結構散らばっている。まあサンプル10個だからな。


> summary(result[,2])

|   Min. |1st Qu. | Median |   Mean |3rd Qu.   | Max. |
|---------|--------|-------|--------|---------|------|
| 0.6035 | 0.7282 | 0.7741 | 0.7757 | 0.8175 | 0.9668 |

> sd(result[,2])
[1] 0.06594192

回帰係数は
> re$coefficients[2]
        x 
0.7774545 

こっちはほとんど動かない。
パッケージがあるかとかは調べてない。

一応これでブートストラップ。
事始めでもないか。一応回帰だし。
ChromeでCSS Transform使用時にエッジがジャギった時


chromeでcss transformを使用して、要素の傾きなどを変更すると
エッジがジャギる時がある

##sample code
```
#test {
	 -webkit-transform: skewY(-9.5deg);
       -moz-transform: skewY(-9.5deg);
        -ms-transform: skewY(-9.5deg);
            transform: skewY(-9.5deg);    
}
```

### chrome
![スクリーンショット 2014-10-20 18.16.53.png](https://qiita-image-store.s3.amazonaws.com/0/16678/f4638fa5-c1a0-4851-30ff-46cbbca6bde8.png "スクリーンショット 2014-10-20 18.16.53.png")


### safari
![スクリーンショット 2014-10-20 18.16.30.png](https://qiita-image-store.s3.amazonaws.com/0/16678/0d9594b3-f43a-9900-158f-ac3f2adb590e.png "スクリーンショット 2014-10-20 18.16.30.png")

### firefox

![スクリーンショット 2014-10-20 18.18.00.png](https://qiita-image-store.s3.amazonaws.com/0/16678/fd715c66-6e1a-799c-df4a-cf34d8e70150.png "スクリーンショット 2014-10-20 18.18.00.png")


## 解決方法
該当要素に -webkit-backface-visibility: hidden;をいれることで解決する。

```
#test {
	 -webkit-transform: skewY(-9.5deg);
       -moz-transform: skewY(-9.5deg);
        -ms-transform: skewY(-9.5deg);
            transform: skewY(-9.5deg); 
	 -webkit-backface-visibility: hidden;   
}
```

### chrome
![スクリーンショット 2014-10-20 18.20.11.png](https://qiita-image-store.s3.amazonaws.com/0/16678/b783c41b-ce0d-37dd-585e-8e64fc4c7857.png "スクリーンショット 2014-10-20 18.20.11.png")
【VBS】ファイル操作

##書き込み

```vbs
Set objFileSys = CreateObject("Scripting.FileSystemObject")

'第二引数　2:上書きモード 8:追記モード
'第三引数　true:新ファイル作成 false:対象ファイルが必要
Set writeStream = objFileSys.OpenTextFile("ファイル名",2,True)

'1行づつ書き込み
writeStream.WriteLine "書き込む文字列です。"

writeStream.Close
Set writeStream = Nothing
Set objFileSys = Nothing
```


##　読み込み
```vbs
Set objFileSys = CreateObject("Scripting.FileSystemObject")

'第二引数　1:読み込みモード
'第三引数　true:新ファイル作成 false:対象ファイルが必要
Set readStream = objFileSys.OpenTextFile("ファイル名",1,false)

'1行づつ読み込み
echo readStream.ReadLine

ReadStream.Close
Set ReadStream= Nothing
Set objFileSys = Nothing


```
音声認識 Unity/Julius　自分用ブックマーク＠更新中

Juliusのインストールについて
---
各記事を参考にして自分なりにまとめたもの
http://qiita.com/amano-kiyoyuki/items/41f250a52e0929001e1f

※以下参考記事
巨人の肩の上に登る
http://mayo.hatenablog.com/entry/2014/01/29/051705

音声認識 Juliusのインストール（OSX:10.9 Marvericks）
http://nonbiri-tereka.hatenablog.com/entry/2014/07/04/131205

Macで日本語音声認識
http://qiita.com/awakia/items/9e56f5d95a77fd02265f

Mavericksで音声認識Juliusで試してみる
http://mayo.hatenablog.com/entry/2014/01/29/051705

MacでJulius
http://blog.k-sakabe.com/?p=4770


Juliusの使用例
---
Juliusで音声認識させてみた　@凹みさん
http://tips.hecomi.com/entry/20120111/1326296629

Node経由でJuliusを操作する　@nenjiru
http://qiita.com/nenjiru/items/4264d603561778df0e45

UnityでJuliusを使うクライアントスクリプト
https://github.com/SavantCat/Julius-Client-for-Unity

Unity初心者がJuliusで音声認識してみた! Ver1.4
http://rift-world.tumblr.com/post/84010435851/unity-julius-ver1-4
メール受信環境を自動構築するCloudFormationを書いてみた

# 作った背景

時々SSL証明書の取得でドメイン所持の証明のためにメールを受信することがあった。
そのたびに以前自分で書いた記事[AWS上のpostfixでメールを受信してみる · mechamogera/MyTips Wiki](https://github.com/mechamogera/MyTips/wiki/AWS%E4%B8%8A%E3%81%AEpostfix%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E5%8F%97%E4%BF%A1%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B)を参照して環境を構築 => 利用後削除していたのだが、設定を間違えたりすることが多く面倒になってきた。
このためCloudFormationで自動化してみた。

2015年10月7日追記：SESでメール受信できるようになったので今後はそちらを使う方が良さそう

# 作ったTemplate

[メール受信環境を構築するCloudFormationテンプレート](https://gist.github.com/mechamogera/dc82737a8a94ee00fd0e)
※ 現状、東京とシンガポールリージョンのみ対応(AMI付け加えたら他でも利用可能なはず)

* 入力パラメータ
 * MailServerDomain：メールサーバーのドメインを指定
 * MailDomain：メールのドメインを指定
 * HostedZone：上の2つを登録するRoute53のHostedZoneを指定
 * KeyName：メールサーバーにログインするための既存のキーペア名を指定
 * ToEmail：転送するE-mailを指定(空だと転送しない、aliasを指定しているので特別な名前じゃない限り転送してくれるはず)
* 出力
 * MailServer：メールサーバーのDNSを表示 

# はまった

テストで転送する設定のE-mailアドレスから送信したら転送されないようではまった。