OmniAICreator/Qiita-1.07M huggingface dataset:
EC2インスタンスサーバーの移行の手順


AWSからEC2インスタンスのメンテのお知らせがきました。
今回はサーバーの移行をする必要があり、Elastic Beanstalkで作成した環境がが対象になりました。

Elastic Beanstalkで作成した場合、EC2インスタンスコンソールで「同様のものを作成」をしてはいけないと思っていました（Elastic Beanstalk環境で作成されているものをEC2インスタンスで勝手に停止・起動などすると依存関係が壊れるとかで..）が、

Elastic Beanstalk は配下のインスタンスに異常を検知する場合、Auto Scaling 機能が働いて
問題のあるインスタンスを取り除き、新たにインスタンスを補充する動きをします。

その際にはあらかじめ設定されたアプリケーションがデプロイされるので、以前と同じ機能を持った
インスタンスが補充され元の状態へ復旧される、と考えることができます。

なので、今回は

EC2 管理コンソールより意図的にインスタンスを停止させ、その停止を検知して新規インスタンスでの置き換え処理が実行されることで、サーバの移行を行います。
EC2インスタンスの画面から対象になったElastic Beanstalkで作成した環境のインスタンスを右クリックで「インスタンスの状態→停止」の方法で移行ができるので簡単！

無事にサーバ移行できました。

他にも方法があるのでメモします。今回は3の手順を利用しました。

1. 「環境のクーロン設定」により別の 環境を作成する
Worker に対して「環境のクローン作製」を実行すると、同じ設定の Elastic Beanstalk 環境が作成されますが、SQS のキュー は Elastic Beanstalk が作成したキューを利用している為、、既存の キューとは別の新しいキューが作成されます。
この為、「環境のクローン作製」で作成したElastic Beanstalk 環境 へ移行を行う場合、メッセージを送信される SQS のキュー名をご変更する必要があるので注意。
つまり、環境の切り替えはメッセージを送信されるアプリケーション側の SQS のキュー名を切り替える事で実現されます。
新しい環境の切り替えを行って頂いた後、既存の環境を削除してください。

2. 対象のインスタンスを任意の時刻に Stop する
インスタンスを Stop する事で 自動的に 新しい インスタンスが起動します。手元の環境で確認した所、 Elastic Beanstalk が提供しているサンプルアプリケーションで稼働している Worker の場合、およそ 5分で新しいインスタンスが稼働しました。
この方法では、新しいインスタンスが正常に稼働するまでの期間、サービスの停止が伴います。その為、サービスを停止しても問題無い時間帯にて実施する必要があります。

また、Stop したインスタンスは AutoScaling により 自動的に Terminate される為、既存のインスタンスにデータ等を保管している場合は、事前に別のリソースへ退避する必要があります。

３. 環境タイプ 負荷分散、Autoscaling を利用する
Worker を複数台同時稼働しても問題無いようであれば、「環境タイプ 負荷分散、Autoscaling を利用する」方法もある。

負荷分散、Autoscaling を利用した入れ替え手順
　a. ElasticBeanstalk 環境の設定から スケーリング->環境タイプ を「負荷分散、AutoScaling」へ変更。
　b. 「適用」をクリックし、設定が反映したら、 ElasticBeanstalk 環境の設定から スケーリング->Auto Scaling -> 最小インスタンス数を「2」へ変更
　c. ElasticBeanstalk 環境のヘルスカラ、2台 インスタンスが正常に稼働している事を確認
　d. 稼働確認後、メンテナンス対象のインスタンスを削除
　e. d の操作でインスタンスが1台削除されるが、その後自動的に新しいインスタンスが起動してきます。
　f. 新しく起動したインスタンスの正常稼働を確認した後、ElasticBeanstalk 環境の設定から スケーリング->Auto Scaling -> 最小インスタンス数を「1」へ変更
　g. 以降 Worker 1台で稼働されたい場合は、ElasticBeanstalk 環境の設定から スケーリング->Auto Scaling -> 最大インスタンス数も「1」へ変更してください。

3 の手順では、サービスの停止が伴わないよう、複数の Worker を同時稼働させ、メンテナンス対象のインスタンスを停止させる方法になります。
こちらの手順においても、もし既存のインスタンスにデータ等を保管している場合は、事前に別のリソースへ退避してください。

2および3の手順では、既存の SQS キューをそのまま継続して利用致しますので、メッセージを送信されるアプリケーション側の設定の変更は必要ありません。
Scala版のSpark Jarの最小限の構成


結論、Scala-libraryもSpark-coreも要らない（Spark-submit時に勝手にclasspathに追加される）ので、これだけで動作する。

```scala:plugins.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.2")
```

```scala:build.sbt

  organization := "com.github.uryyyyyyy",
  scalaVersion := "2.11.7", //2.10.x
  libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-core" % sparkVersion % "provided"
  )

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)
```

あとは、
```
sbt assembly
```
とかでいける。
片道勇者をMacでプレイ

片道勇者もプラスも開発記もMacで問題なくプレイできる。

homebrew経由のwineで動かす。

```
$ brew install wine
$ cd 片道勇者プラス
$ wine Game.exe
```
wine 1.8だと動かなかったので
wine 1.6.2だと動く。
エラーについて

aberyuuokunoAir:mooovi2 ryuki$ bundle exec rake db:migrate
rake aborted!
ActiveRecord::AdapterNotSpecified: development database is not configured
/Users/ryuki/projects/mooovi2/config/environment.rb:5:in `<top (required)>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)
[Linux] ユーザ管理と設定ファイル

#概要

たくさん稼動しているサーバを管理するため、ログインユーザとユーザの権限の一覧を作成します。
その際利用するLinuxの設定ファイルについてのメモです。

- ユーザとグループの基礎
- ユーザ設定にかかわる設定ファイル
- セキュリティ設定ファイル

#1.ユーザグループの基礎知識

◆ユーザアカウントの分類

　　ユーザアカウントは、3種類に分けられる
<img src="https://qiita-image-store.s3.amazonaws.com/0/108485/d52ddc15-f603-c6fc-e36c-5338ed9c6ccd.png" width="400px">


◆割り当て範囲
　　各ユーザは1つのグループに所属する必要があります。
　　これをプライマリグループと呼びます。
　　そのグループにはユニークな「GID（グループID）」が割り当てられます。

　　3種類のユーザに対して割り当て範囲は決まっています。

<img src="https://qiita-image-store.s3.amazonaws.com/0/108485/767c08d7-b061-dcc1-498d-f97ec1e3abf1.png" width="500px">


◆グループ割り当て例

プライマリグループとは別に、追加のグループ（セカンダリグループ）に属することも出来ます。

以下の図で、ユーザ「yococo」は、セカンダリグループとして「wheel」に属しています。
1つのグループに対して、複数のユーザがセカンダリグループとして所属することもあります。

<img src="https://qiita-image-store.s3.amazonaws.com/0/108485/3f4c8150-3357-ea05-b920-76e2197d01b7.png" width="500px">


◆Idコマンドによる確認例

各ユーザが所属するグループやUID、GIDなどの情報はIdコマンドで確認できます。


```
[yococo@mgr01 ~]$ id root
uid=0(root) gid=0(root) 所属グループ=0(root)

[yococo@mgr01 ~]$ id yococo
uid=503(yococo) gid=1000(r_admin) 所属グループ=1000(r_admin),10(wheel)

```

#2.ユーザ設定にかかわる設定ファイル
基本になるのはユーザ情報、グループ情報、パスワード情報を収めた3点セット

 「/etc/passwd」
 「/etc/group」
 「/etc/shadow」

◆/etc/passwdの書式

<個人ユーザの例>

<img src="https://qiita-image-store.s3.amazonaws.com/0/108485/b2c29d36-7eb3-8b5b-959d-67b9feda74f2.png" width="650px">

<システムユーザの例>

<img src="https://qiita-image-store.s3.amazonaws.com/0/108485/922c705a-64e3-f0a8-5666-1ce6d2f62f44.png" width="650px">

誰かがイタズラでログインしようとしても出来ない仕掛けになっている


◆/etc/groupの書式

<img src="https://qiita-image-store.s3.amazonaws.com/0/108485/83a24ae5-4cd7-d17c-9868-838f4ff98017.png" width="500px">

◆/etc/shadowの書式

<個人ユーザの例>

<img src="https://qiita-image-store.s3.amazonaws.com/0/108485/6a48c5ef-4236-617f-dbfe-82603b40819f.png" width="650px">

<システムユーザの例>

<img src="https://qiita-image-store.s3.amazonaws.com/0/108485/ee4b2702-97e4-0146-8342-0960a3a24ab3.png" width="500px">


#3.セキュリティ設定ファイル

◆/etc/sudoersの書式
特定のコマンドだけをrootユーザの権限で実行できるようにする場合などに活用します。

ユーザによる指定　　
　　「yococo」に対して、heepdサービスの起動・停止コマンドを許可している

<img src="https://qiita-image-store.s3.amazonaws.com/0/108485/13a26b96-fb01-17b5-5966-ce1b73fca0a6.png" width="650px">

コマンドが引数を含めて記載しているので、ユーザ「yococo」はこれ以外の引数でserviceコマンドを実行することができません。コマンドのみを記載すると、任意の引数で実行できるようになります。

コマンドをフルパスで記載する必要があります。
フルパスが分からない場合はwhichコマンドで確認します。

```
#which service
/sbin/service
```

グループ名による指定

グループ「wheel」に属するユーザに対する設定です。
ユーザ権限の部分とコマンドの部分がともに「ALL」になっているので
グループ「wheel」に属するユーザは任意のユーザ権限で、任意のコマンドを
実行できます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/108485/f897d447-4cf8-8fbe-fe49-f2d4269c50ad.png" width="650px">


NOPASSWORDオプションが指定されているので、自分のパスワードを入力する必要がありません。




次はこれらの設定ファイルを利用して一覧を自動で生成する方法をメモします。
npm で似たような名前のパッケージを DRY にインストールする


Bash の[ブレース展開](http://qiita.com/ine1127/items/6e5fe80f4a9c64509558)を使います。

## 例えば Babel plugin

ちょうどいい preset があればそれを使えばいいのですが、一個一個入れるのは面倒です。

Before:

```sh
npm install -D babel-plugin-transform-foo babel-plugin-transform-bar babel-plugin-transform-baz
```

After:

```
npm install -D babel-plugin-transform-{foo,bar,baz}
```

そもそもそれなりに使われてそうな組み合わせなら、preset を作ると他の人の役に立つかも？

## Scoped packages（例えば Angular 2）

Angular 2 は beta までは `angular2` という一つのパッケージでしたが、rc.0 から [scoped package](https://docs.npmjs.com/misc/scope) を採用するようになり、モジュールが分割されました。これ自体は喜ばしいことと思いますが、いかんせんインストールが面倒ですね。

Before:

```sh
npm install -S @angular/core @angular/common @angular/compiler @angualar/platform-browser @angular/platform-browser-dynamic @angular/router
```

After:

```sh
npm install -S @angular/{core,common,compiler,platform-browser,platform-browser-dynamic,router}
```
Vim scriptでも愛が生まれた


元ネタ: [愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)(golangによる実装)

```vim
echo nr2char(and(char2nr('生', 1), char2nr('死', 1)), 1)
```

`char2nr`及び`nr2char`の第2引数は第1引数の文字を常にUTF-8として扱うフラグだが、`'encoding'`がUTF-8であれば不要である。
Mathematicaでも愛が生まれた

Mathematicaでも無事に愛が生まれた。

```Mathematica
FromCharacterCode[BitAnd @@ ToCharacterCode["生死"]]
```

## 元ネタ

元ネタはGoで書かれた[愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)という記事です。多くの派生記事が[あります](https://www.google.co.jp/search?q=%22%E6%84%9B%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%81%9F%22+site:qiita.com&ie=UTF-8&oe=UTF-8&gfe_rd=cr&ei=EiExV8v5IoWL8Qeb36-QAg)。
ベトナムのRailsエンジニアの求人＆給与事情

GYAOの窓際エンジニア　玉利です。

うちのチームにいた、ベトナム子会社一番の腕利きエンジニアがやめてしまって、しびれていました。ベトナムも中国も、がんがん転職してキャリアアップしていく社会なので、上司としては喜ばしいことなのですが仕事はどうなるかとヒヤヒヤしました。

２年位、他所で修行してきたら再度呼ぼうかと思ってます。まだオフショア開発もオフショアの範疇を超えないので、日本と同じフルスタックエンジニアの経験を積ませてあげたいのですが、そこまでこちらが用意できるのはもう少しかかりそうです。

幸い、次に担当になった新規採用者が同じくらいできる男だったので、開発は順調です。それよりも自分の仕事が積み上がっててベトナムのブリッジができなくなってきててやばい。

![スクリーンショット_2016_04_30_17_34.png](https://qiita-image-store.s3.amazonaws.com/0/113049/a407b6ff-a423-16c4-ef23-078c711190b5.png)
ベトナムで買うオレンジジュース　露天の手作業で絞ってて1杯25円

ついでに、転職したエンジニアも巻き込んで飲み会やってきました。ベトナムに行くたびに慰労会と称して飲み会をやってますが、店探しが大変です。今回は海鮮料理屋でした。ホーチミンは海鮮が旨いのです。



# ベトナムでRubyエンジニアの求人はおいくら？

ベトナム人エンジニアに転職状況を聞いた所、最短９ヶ月でやめたメンバーもいました。日本でもこのくらい流動性があれば良いなと思うのです。

ちなみに、最近私はベトナム人のRails開発者として広告システムのオーディエンス登録されちゃったみたいで、求人広告が掲載されます。おもしろいので紹介します。

いま、聞いた話ではベトナムオフショアでは人月25万円程度が相場だそうです。そのうち、エンジニアの給与は1/3の8万円程度（現地ではスーパー高給取りのはず）

家を建てるのは700万円くらいということなので、年収の７年分。羨ましい国です。私は賃貸から抜け出せる気がしません。

### 案件その１

<img width="233" alt="Ruby_On_Rails_Việt_Nam.png" src="https://qiita-image-store.s3.amazonaws.com/0/113049/fde71b8b-5262-53ec-95b4-d7c410953ba9.png">


こちら、日本が発注主のようです。給料は700-900USDなので、相場と言えるでしょう。

### 案件その2

```
[HCMC] - Ruby on Rails Developer Recruitment 
Attractive Salary: $800 ~ $1800
We are looking for highly-motivated and totally-geekish Ruby on Rails programmers to develop web app.
```

こちらちょっと上限が高いです。たぶん買い叩かれるのでしょうけど、月収20万円くらいと夢があります。


### 案件その3

<img width="478" alt="Ruby_On_Rails_Việt_Nam.png" src="https://qiita-image-store.s3.amazonaws.com/0/113049/93fa209c-9ebe-9777-9ef8-08c035570821.png">

時給15USDからなので、160時間働くとして2,560USD, 25万円からです。３年のRoR経験が必要ということでそれなりに間口は狭そう。
雇い主は日本じゃ無さそうです。語学の相互学習サービスということなので、もしや中国やシンガポールの企業かもしれません。

### 案件その4

<img width="526" alt="google_translate_-_Google_検索.png" src="https://qiita-image-store.s3.amazonaws.com/0/113049/48aca58d-b310-c232-8f0c-39796aa80f2a.png">

これは夢いっぱい、３ヶ月日本で働けるお仕事。うちも日本に連れてきたいですね。7万円から20万円。いちど日本でトレーニングして、ベトナムのブリッジエンジニアに育てる目論見のようです。

### 案件その5

<img width="467" alt="_1__Ruby_On_Rails_Việt_Nam.png" src="https://qiita-image-store.s3.amazonaws.com/0/113049/222c3335-f6bf-29e2-792a-a682bfe53c25.png">

腕利き(kick-ass) RoRエンジニア募集。1,000USDなので10万円くらいですね。

PHPとか他の言語だと、あまりに多数のフレームワークがあったり、いろんな書き方が出来てしまうので品質管理に苦労しそうなんですが、Railsだとプロビジョニングの方法がしっかりしてるのでオフショア出しやすいと思います。いずれにせよｌブリッジSEの腕次第ではあります。
技術英語 > Any adverse effect?

@ Star Trek Voyager > MELD

バルカン人の特殊な技法を使ったことに対して Janeway が心配して

> Any adverse effect?

http://eow.alc.co.jp/search?q=adverse
> `2. 不利な、不都合な、不運な

<hr>
関連して思い出したのは

byproduct 
http://eow.alc.co.jp/search?q=by-product&ref=wl
DMMアフィリエイト SDKが出てたので試してみた

# 前書き

DMMがアフィリエイトAPIを一新したのは[前回](http://qiita.com/dimgraycat/items/85aef52f75ad58aa123b)お伝えしましたが、
API利用向けに[SDKをリリース](https://affiliate.dmm.com/api/v3/affiliatesdk.html)していました。
SDKの内容としては、

- php SDK
- JavaScript SDK
- GO Lang SDK

の３つです。

この記事ではphp SDKをFuelPHP1.8を利用したサンプルをご紹介します。
※ FuelPHP1.8は既にインストール済みという体で進めます。
また、v1.8に限った方法ではないのであまりとらわれなくていいと思います。

# FuelPHP上で利用できるように設定

## composer.json の設定

composer.json にdmm-sdkを追加する

```json:composer.json
{
    "require": {
        ....,
        "dmmcomlabo/dmm-sdk-v3": "1.0.*"
    }
}
```

設定が出来たら、 `composer install` or `composer update`
既にいろいろとcomposerでパッケージをインストールしている人は update で大丈夫かと。

## bootstrap.php の設定

以下を追記

```php:fuel/app/bootstrap.php
\Autoloader::add_namespaces([
    'Dmm' => VENDORPATH.'dmmcomlabo/dmm-sdk-v3/src/Dmm',
]);
```

## 実際にdmm-sdkを利用する

```php:fuel/app/tasks/test.php
<?php
namespace Fuel\Tasks;

use Dmm\Dmm;

class Test
{
    public function run()
    {
        $dmm = new Dmm([
            'affiliate_id'  => 'YOUR-AFFILIATE-ID',
            'api_id'        => 'YOUR-API-ID',
        ]);
        $response = $dmm->api('product')->find(
            \Dmm\Apis\Product::SITE_GENERAL,
            [
                'service'   => 'digital',
                'floor'     => 'idol',
                'sort'      => 'date',
            ]
        );
        $content = $response->getDecodedBody();
        print_r($content);
    } 
}
```

### 実行

```
$ php oil refine test
```

今回はdmm.com側のデータを取り出すサンプルでしたが、
dmm.co.jp(dmm.r18)側のデータを取り出す場合は、
`SITE_GENERAL` を `SITE_ADULT` するといいです。

`service` や `floor` など検索するキーはたくさんありますので、
webApiの仕様を確認していろんなデータを取得してムフフしてください。
リファレンスURL : https://affiliate.dmm.com/api/v3/itemlist.html
クラウド英和辞典

ふと思い立ったので共有します。クラウドを開発する・使う上でよく使う基本用語です。セキュリティ用語にもちょっと触れています。今後も追加するかも知れません。

|単語|意味|
|:---|:----|
|Authentication (AuthN)|「自分は誰なのか」を証明すること。通常はパスワードや証明書が使われる。認証。|
|Authorization (AuthR)|リソースを使う許可を得ること。認可。AuthNとの違いをざっくり例えると、AuthNは建物の入口での入場申請で、AuthRは建物内でどの部屋に入れるか。|
|Compromise|[セキュリティ]セキュリティ上の脆弱性やパスワード盗難等によってユーザアカウントやネットワーク資源が攻撃者に乗っ取られた状態を指す。|
|Deploy|[動詞] サービスやアプリケーション等を展開する行為。「アップロード」はデプロイの手段の一部。「デプロイする」|
|Deployment|クラウド上にユーザが展開したサービスやアプリケーションのこと。テナントともいう。|
|Disaster Recovery (DR)|自然災害などでデータセンターが機能を喪失した場合、地理的に離れたデータセンターでサービスを継続するための仕組み及びプロセス|
|Downtime|障害やメンテナンス等によるサービス停止期間。ダウンタイム|
|Endpoint|サービスが公開されているアドレス。URLであることが多い|
|Incident|障害。インシデント|
|Lateral movement|[セキュリティ] 攻撃者が、アクセス可能なネットワーク資源を次々に取得しながら移動すること|
|Live Site Incident (LSI)|インシデントのうち、特に広範囲にわたって影響を及ぼすものを指す。対処の優先度が高い場合が多い。単にlive siteと呼んだりもする|
|Mitigate|[動詞] 発生した障害を緩和、あるいは取り除くこと|
|On call|障害対応の電話番のこと。チーム内で順番に受け持つことが多い|
|Production|ビジネスとして稼働している運用環境。対義語: テスト環境|
|Roll out|新しい機能やバグフィックスを全データセンターに対してデプロイすること|
|Root Cause Analysis (RCA)|障害の根本原因。通常はコードのバグやハードウェア不良などを指す|
|Scale in/out|Deploymentのインスタンス(マシンまたはプロセス)数を増やす／減らすこと|
|Scale up/down|Deploymentを構成するマシンのハードウェア構成(メモリ, CPU等)を拡大／縮小すること|
|Scale unit|デプロイ先を指定する単位。サービスごとに違い、地域名、データセンター名、ホスト名などから成る|
|Staging|次期バージョンの運用環境をデプロイする環境。ここでテストして問題がなければProductionと切り替える|
|Threat|[セキュリティ] 直訳は「脅威」。セキュリティ的な弱点や、攻撃者そのもの等を指す|
|Vulnerability|[セキュリティ] 脆弱性|

間違っている点や疑問点があったらご指摘ください。
Google Earth Engine覚書２ 〜これってどうやるの？〜

##大量ダウンロード
python APIで実現可能
Earth Engineをpythonで使うためのセットアップ方法：https://developers.google.com/earth-engine/python_install
画像の大量ダウンロード実現方法：https://groups.google.com/forum/?hl=ja#!searchin/google-earth-engine-developers/export$20no$20click/google-earth-engine-developers/-MMukxVsRJI/rTMTrdwtjCoJ

###で、どうするの
getDownloadURL()を使用
PlayGroundでもできるけど，URLをテキストで出力してそのままダウンロードするにはPythonが楽．

```download.py
url=L8_image.getDownloadURL({"name":'landsat8_n'+str(lat)+"e"+str(lon),"scale": 150,"region": polygon})
print(url)
```

ただし，URLがhttpsなので，通常のwgetではSSL認証が必要になってダメ．
だから以下のようなダウンロード用の関数を定義して，使用する．

```download2.py
def downloadZip(url):
    u = urllib2.urlopen(url)

    meta = u.info()

    # A zip download
    file_name = (meta.getheaders("Content-disposition")[0]).replace('attachment; filename=', '')
    f = open(file_name, 'wb')
    print "Downloading: %s " % (file_name)
    #os.system('cls')
    file_size_dl = 0
    block_sz = 8192
    while True:
        buffer = u.read(block_sz)
        if not buffer:
            break

        file_size_dl += len(buffer)
        f.write(buffer)
        status = r"%10d  " % (file_size_dl)
        status = status + chr(8)*(len(status)+1)
        print status,

    f.close()
    return
```
Google Earth Engine覚書１ 〜よく使う関数〜

##ee.ImageCollection.size()
Integer返してくれるって書いてあるけど、実際にはNumberの形で返ってくる。`.size()`の使い方も`ee.Number`参照。

##ee.Number
Numberというオブジェクトは、`imageCollection.size() + 1`みたいなことはできない。
`imageCollection.size().add(1)`とすればおｋ。
四則演算とか簡単な計算は以下のとおり。

```四則演算.js
.add(right) //rightと足し算
.subtract(right) //rightを引き算する
.multiply(right) //掛け算
.divide(right) //rightで割り算。0で割ると0になる。
.mod(right) //剰余
```

ここで問題なのはif文とかで分岐したい時。
もちろん`if(ee.Number==0)`とかはできない。
if使いたいときは`ee.Algorithms.If`を使用する。

```if文.js
var landsat5=ee.ImageCollection(ee.Algorithms.If(size.mod(2).eq(0),load_L5.merge(allone_col),load_L5));
```

##new Date()

```
var date_ymd=new Date(year,month,date);
```
ここで問題なのは引数の値。
yearは年をそのままいれればいいんだけど、month,dateはちょっとへん。
monthは0が1月、dateは2が1日を指す。
それで時間はなぜかそのままにすると15:00:00となる。

##reduceNeighborhood()
imageにかけるもの。
それぞれのピクセルの周りのピクセルをみて何かするためのもの。

```
image.reduceNeighborhood(reducer, kernel, inputWeight)
```
引数として、
reducerには任意のreducerを、
kernelには任意のkernel（丸とか四角とか、あるピクセルの周りのどの範囲をreduceの対象にするか）を、
inputweightにはウェイトをmaskとかkernelの形で渡す。

例えば、

```
var landsat5=ee.Image(/*なんかの画像*/);
var edge_mask=landsat5.reduceNeighborhood({
    reducer: ee.Reducer.count(),
    kernel:ee.Kernel.square(1,"pixels"),
  });
```
こんな感じにしておけば、
すべてのピクセルにおいて、周りの有効ピクセルが何個あるかを確認できる。ただし自分のピクセルもカウントされて、最大９になる。
要は端っこを抽出できるってこと。

##ee.Kernel.square
単位を`"pixels"`にしておくと、ズームの度合いに応じて変化してしまう。
`"meters"`でも同様。
原因はピクセルの大きさがズームレベルによって変化するから。
Scalaの再帰ループ

# Scalaでスマートな再帰ループ
　関数型プログラミング言語 **Scala** で再帰ループ(Recusion Loop)処理を実装してみました。関数「再帰ループ」の中に１からある整数までの総和を求める関数「ループ」を定義しています。関数「ループ」ではある整数と次の整数の和を求めて返します。関数「ループ」を再帰呼び出しすることである整数までの総和を再帰的に計算することが出来ます。

　ここで、特徴的なのはループ変数と結果格納変数が無いことです。ループ変数の初期化やループ内でのカウントアップ処理や結果格納変数の更新が不要になっています。こういうループ処理で必ず現れる処理したい本質とあまり関係の無い変数が出てこないのですっきりとしています。「したいこと」がシンプルに表現出来ていると思います。

```Scala:recursionLoop.scala
object RecursionLoop {
  def recursionLoop( loopCounter: Int ) = {
    def loopProcess( number: Int ) : Int = {
      if( number <= loopCounter ) number + loopProcess( number + 1 ) else number
    }
    loopProcess( 0 )
  }

  def main( args: Array[String] ): Unit  = {
    for( i <- 0 to 10 ) {
      println("1 ～ " + ( i+1 ) + " までの整数の総和 = " + recursionLoop( i ) )
    }
  }
}
```
## コンパイル

```bash:git-bash
teruroom@TeruroomPC01 MINGW64 /g/Dev/Scala
$ scalac recursionLoop.scala
```
## 実行

実行はファイル名 **recursionLoop** ではなく、object名 **RecursionLoop** を指定捨て行うことに注意してください

```text:実行結果
teruroom@TeruroomPC01 MINGW64 /g/Dev/Scala
$ scala RecursionLoop
1 ～ 1 までの整数の総和 = 1
1 ～ 2 までの整数の総和 = 3
1 ～ 3 までの整数の総和 = 6
1 ～ 4 までの整数の総和 = 10
1 ～ 5 までの整数の総和 = 15
1 ～ 6 までの整数の総和 = 21
1 ～ 7 までの整数の総和 = 28
1 ～ 8 までの整数の総和 = 36
1 ～ 9 までの整数の総和 = 45
1 ～ 10 までの整数の総和 = 55
1 ～ 11 までの整数の総和 = 66
```

## Git-Bashの設定
出力結果の日本語を表示させるためには以下のように設定します
1. Git-Bash コンソール上部バー ⇒　右クリック　⇒　Options
2. 左ペイン　⇒　Text　⇒　右ペイン　⇒　Font　⇒ [Select]ボタン 押下
3. フォント名　⇒　ＭＳ ゴシック　⇒ [OK]ボタン押下
4. Local　⇒　ja_JP　⇒　Character Set ⇒ SJIS
C++でも愛が生まれた

元ネタ: http://qiita.com/dongri/items/041ff3e7dde6c99beeb0

```cpp
#include <iostream>
#include <codecvt>
#include <locale>

int main()
{
	std::cout << std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t>().to_bytes(U'生' & U'死') << std::endl;
}
```

ここから確認できます
http://ideone.com/0lPZ8J

`u8"生"` と `u8"死"` (どっちも `char[4]`) を要素毎に `&` 演算できれば、なかなか実装されていない `<codecvt>` とか使う必要がなかったのですが、ワンライナーでうまいこと書けなかったのでこんな感じになりました。
当初、`std::transform` を使おうとしてたのですが、範囲の終端や変換結果の格納先を指定する必要があるから、そのための変数を宣言しておく必要があるので。
JavaScriptでUserAgentを取得する

今日、JavaScriptを使用してUserAgentを取得してゴニョゴニョするという機能を実装した。
はじめて「JavaScriptでのUserAgentの取得」ということをしたので、以下参考にどうぞ。

## 前提条件

* 特に無し


UserAgentを取得し、これを画面上に出力する。（画面への出力に関してはjQueryを使用。）
HTMLファイルにまとめると、以下のようになる。

```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>UserAgent Sample</title>
</head>
<body>
<span id="userAgent"></span>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script>
    $(document).ready(function () {
        var userAgent = window.navigator.userAgent.toLowerCase();
        $('span#userAgent').text(userAgent);
    });
</script>
</body>
</html>
```

scriptタグの中の`window.navigator.userAgent`でUserAgentを取得することができる。
あとはこの中身を解析して、OSやブラウザの情報を調べることができる。

ただし、UserAgentの情報は偽装することが可能なので、超厳密に調べる場合にはこの方法では不十分なようです。悪しからず。

## 参考

* [JavaScriptでUserAgentを使った判別をする](http://cly7796.net/wp/javascript/make-a-determination-using-the-useragent-in-javascript/)
* [javaScriptで対応ブラウザ判定](http://qiita.com/Evolutor_web/items/162bfcf83695c83f1077)
枠線つきの吹き出しをAndroidでかんたんに作る 


#BubbleLayout
<a href="https://github.com/MasayukiSuda/BubbleLayout"><img src="https://raw.githubusercontent.com/MasayukiSuda/BubbleLayout/master/art/sample3.png" width="30%"></a>

<a href="https://github.com/MasayukiSuda/BubbleLayout">BubbleLayout</a>
枠線つきの吹き出しをAndroidでかんたんに作るライブラリを作成しました。

吹き出しを作れるViewのライブラリは、<a href="https://github.com/lguipeng/BubbleView">BubbleView</a>など存在
したのですが、いい感じに枠線をつけれるのが存在しなかったので、作成してみました。

実装は地道にCanvasにPathを描画したのですが、その分軽量なライブラリになったと思います。

# Dependencies
```
dependencies {
    compile 'com.daasuu:BubbleLayout:1.0.0'
}
```

# Basic Usage
<img src="https://raw.githubusercontent.com/MasayukiSuda/BubbleLayout/master/art/sample3.png" width="20%">
上記のレイアウトは下記のようにxmlで描画すれば非常に簡単に作成できます。

```xml
<com.daasuu.bl.BubbleLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="12dp"
    android:padding="8dp"
    app:bl_arrowDirection="right"
    app:bl_arrowHeight="8dp"
    app:bl_arrowPosition="16dp"
    app:bl_arrowWidth="8dp"
    app:bl_cornersRadius="6dp"
    app:bl_strokeWidth="1dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="4dp"
        android:text="BubbleLayout"
        android:textColor="@android:color/holo_red_dark" />

</com.daasuu.bl.BubbleLayout>
```
# Attributes
Attributesは下記の通りに用意しました。

| attr | description |
|:---|:---|
| bl_arrowWidth | Width of the arrow, default 8dp |
| bl_arrowHeight | Height of the arrow, default 8dp |
| bl_arrowPosition | Position of the arrow, default 12dp |
| bl_cornersRadius | Corner radius of the BubbleLayout, default 0dp |
| bl_bubbleColor | Color of the BubbleLayout, default WHITE |
| bl_strokeWidth | Width of the stroke, default 0dp |
| bl_strokeColor | Color of the stroke, default GLAY |
| bl_arrowDirection | Drawing position of the arrow : 'left' or 'top' or 'right' or 'bottom', default 'left' |

是非、<a href="https://github.com/MasayukiSuda/BubbleLayout">BubbleLayout</a>をご覧になり、Starもつけていただけると
とても嬉しく思います。pull reqestも大歓迎です！
愛を生む二人を探して


[なんで愛が生まれるのか](http://qiita.com/tienlen/items/44daf3a52eb872085556) を読んで面白いと思ったので・・・。

UTF-8 で漢字は概ね `U+0800` - `U+FFFF` の範囲に収まるようです。[本当はいろいろあるようですが](http://tama-san.com/kanji-regex/)、今回はとりあえずこの範囲で生成します。 [Wikipedia](https://en.wikipedia.org/wiki/UTF-8#Description) によれば、この範囲の意味のあるビットは `1110xxxx 10xxxxxx 10xxxxxx` の x の部分。このうち「愛」で 0 になっているビット（下記太字）を `0 & 0`, `0 & 1`, `1 & 0` に変えた組み合わせは、愛を生むはずです。

| 文字 | バイナリ |
| ---- | ---- |
| 生 | 1 1 1 0 0 1 1 1 1 0 0 1 0 1 0 0 1 0 0 1 1 1 1 1 |
| 死 | 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0 1 1 0 1 1 1 0 1 1 |
| 愛 | 1 1 1 0 **0** 1 1 **0** 1 0 **0 0 0** 1 **0 0** 1 0 **0** 1 1 **0** 1 1 |

ということで Ruby で書いてみました。ビットだけ見て「愛」を生み出すカップルを探した後、漢字じゃないものと「愛」そのものを除外します。

結果は [Gist に](https://gist.github.com/shuhei/240f752c54b03f2c01025793ee6fda50#file-couples-txt)。3025 組のカップルが成立しました！[「生」と「死」もしっかり入ってます](https://gist.github.com/shuhei/240f752c54b03f2c01025793ee6fda50#file-couples-txt-L2853)。めでたしめでたし。

```couple.rb
# Extract meaningful bits.
# https://en.wikipedia.org/wiki/UTF-8#Description
def code_bits(bits)
  bits.each_slice(8).with_index.map do |byte, i|
    i == 0 ? byte[4..-1] : byte[2..-1]
  end.flatten
end

# Returns unicode charactor from bits.
def bits_to_char(bits)
  size = bits.size
  code = bits.each.with_index.reduce(0) do |acc, pair|
    bit, i = pair
    acc + (bit << size - 1 - i)
  end
  [code].pack('U')
end

# Generate possible bits pairs.
def generate(bits)
  if bits.size == 0
    [
      [[], []]
    ]
  elsif bits[0] == 0
    generate(bits[1..-1]).flat_map do |pair|
      a, b = pair
      # 0 can be generated from 0 & 0, 0 & 1 and 1 & 0.
      [
        [[0] + a, [0] + b],
        [[0] + a, [1] + b],
        [[1] + a, [0] + b]
      ]
    end
  else
    generate(bits[1..-1]).map do |pair|
      a, b = pair
      # 1 is generated only from 1 & 1.
      [[1] + a, [1] + b]
    end
  end
end

# http://qiita.com/tienlen/items/44daf3a52eb872085556
ai = %w(1 1 1 0 0 1 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1).map(&:to_i)
ai_bits = code_bits(ai)

ai_pairs = generate(ai_bits).map do |pair|
  pair.map do |bits|
    bits_to_char(bits)
  end.sort
end

kanji_pairs = ai_pairs.select do |pair|
  pair.all? do |char|
    # http://tama-san.com/kanji-regex/
    # char != '愛' && /\p{Han}/ =~ char
    char != '愛' && /[一-龠]/ =~ char
  end
end.uniq

kanji_pairs.each do |pair|
  puts pair.join(',')
end
```
hubコマンドでGitHubのIssueをプルリクエストにしました。

hubコマンドでGitHubのIssueをプルリクエストにしました。環境はMacです。

# hubのインストール
hubをインストールします。

```bash:
brew install hub
```

```bash:バージョンを確認
hub version
git version 2.3.5
hub version 2.2.3
```


# hub pull-request で GitHubのIssueを作る
適当にIssueを作りました。番号は53番です。
https://github.com/pugiemonn/pugiemonn.com/issues/53

# ローカルでブランチを作ります。
開発用のブランチを `issue/#53-add-facebook-link-pugiemonn` という名前で作りました。

```git:ブランチの確認
git branch
* issue/#53-add-facebook-link-pugiemonn
  master
```

変更をしていくつかコミットしました。

# pull-requestを作成
hubコマンドでプルリクエストを作成してみます。
こちらをmasterブランチへのプルリクエストにします。Issueは53番なので53と指定しました。

```
hub pull-request -i 53
Error creating pull request: Unprocessable Entity (HTTP 422)
Missing field: "head_sha"
Missing field: "base_sha"
No commits between master and issue/#53-add-facebook-link-pugiemonn
```
失敗しました。masterと変わらないじゃんとあります。

# コミットしたブランチをpush
先にブランチをGitHubへpushするみたいです。

```
git push -u origin issue/#53-add-facebook-link-pugiemonn
```
githubへpushしました。

# 再度 pull-requestを作成
もういちどプルリクエスト作成を試します。

```
hub pull-request -i 53
https://github.com/pugiemonn/pugiemonn.com/pull/53
Warning: Issue to pull request conversion is deprecated and might not work in the future.
```
警告がでました。この機能なくなるかもみたいに書いてあります＼(^o^)／

# プルリクエストができている
Warningがでたものの、プルリクエストが作成されています。
https://github.com/pugiemonn/pugiemonn.com/pull/53

先ほど[Issue](https://github.com/pugiemonn/pugiemonn.com/issues/53)にアクセスするとプルリクエストにリダイレクトされました。

# 感想
メリットととして、Issueをプルリクエストに詳しく書き直すみたいな作業が不要になりコストが下がると感じました。
Warningがでているように、この機能が無くなるかもしれないということです。無くならないといいな(☝ ՞ਊ ՞)

# 参考
https://github.com/github/hub
http://qiita.com/shoma2da/items/c4356e9f17e1e1d5e2fc
[Ruby] Mac OS 10.11 で gem eventmachine install with native extengion でエラーが出る場合の対処方法

以下の様なエラー

```
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/jsmz/app/vendor/bundle/ruby/2.3.0/gems/eventmachine-1.0.7/ext
/Users/jsmz/.rbenv/versions/2.3.0/bin/ruby -r ./siteconf20160510-59652-1necoaj.rb extconf.rb --with-cppflags=/opt/vagrant/embedded/include/openssl/ssl.h
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/Users/jsmz/.rbenv/versions/2.3.0/bin/$(RUBY_BASE_NAME)
	--with-openssl-config
	--without-openssl-config
	--with-pkg-config
	--without-pkg-config
/Users/jsmz/.rbenv/versions/2.3.0/lib/ruby/2.3.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
	from /Users/jsmz/.rbenv/versions/2.3.0/lib/ruby/2.3.0/mkmf.rb:541:in `try_link0'
	from /Users/jsmz/.rbenv/versions/2.3.0/lib/ruby/2.3.0/mkmf.rb:556:in `try_link'
	from /Users/jsmz/.rbenv/versions/2.3.0/lib/ruby/2.3.0/mkmf.rb:657:in `try_ldflags'
	from /Users/jsmz/.rbenv/versions/2.3.0/lib/ruby/2.3.0/mkmf.rb:1813:in `pkg_config'
	from extconf.rb:64:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/jsmz/app/vendor/bundle/ruby/2.3.0/extensions/x86_64-darwin-14/2.3.0-static/eventmachine-1.0.7/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/jsmz/app/vendor/bundle/ruby/2.3.0/gems/eventmachine-1.0.7 for inspection.
Results logged to /Users/jsmz/app/vendor/bundle/ruby/2.3.0/extensions/x86_64-darwin-14/2.3.0-static/eventmachine-1.0.7/gem_make.out
```

http://stackoverflow.com/questions/30818391/gem-eventmachine-fatal-error-openssl-ssl-h-file-not-found
を参考に

```
bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include
```

をディレクトリ指定を変えて再度bundle installを実行するとうまくいった。
Unity Multi Scene EditingでUI作業分業

自分用メモ。

# 前提

- Unity 5.3 ~
- Page単位の分割。細かいUIパーツごとの分業にはならないかも。
- ScreenSpace - Cameraで表示
- 2D UIで対応

# 結果

こんな感じ

<img width="1134" alt="overlay.png" src="https://qiita-image-store.s3.amazonaws.com/0/15000/581a3b36-4239-40ac-2829-4b27440ab02a.png">

# 説明

用意するScene

- Common.unity
    - すべてのシーンに共通する要素を置く
    - 要素: Camera, EventSystem, 各種Singletonを含めたシーン
    - 編集時: 常にActiveなシーン(太字表示)として設定。どのUIを作るときにもActiveなシーンとして含めておく.
    - 実行時: 最初に読み込まれるシーンに設定する. ここから各種UIシーンを読み込むようにする.
- Layer{1,2}.unity
    - 各UIのシーン
    - 例: Headerのシーン, Footerのシーン, ListViewのシーン, Dialogのシーンなど
    - 要素: Canvas, Image, Button, ..., Camera(編集時のみ有効)
    - 編集時: Activeでないサブシーンとして編集する. 他のUIシーンを一緒に含めつつ編集編集してもよいし、Common.unityだけ含めて編集してもよい。
    - 実行時: 最初によみこまれないようにする. 他のシーンからAdditiveに追加されるようにする

# はまりどころ

## Q. Scene管理どうするの？

SceneLoader.csみたいなスクリプトつくって、そこでAdditiveにシーン追加できるようにします。重複チェックもそこでおこないます。

- https://gist.github.com/mattak/b49bb8066f285123f963703c9f33a060#file-scenemanager-cs

## Q. Canvasに設定する共通のカメラがほしいんだけど、どうする？

共通のカメラはCommonにおきます。
実行時に各Canvasのカメラの参照をCommonのカメラに切り替えます。
また編集時にカメラをUIに設定できてないと何かとわかりずらいので、各UIシーンにも編集時のみ有効なカメラを用意します。

Common.unity
- CommonCamera

Layer1.unity
- Canvas => 編集時: Camera1を参照. 実行時: CommonCameraを参照
- Camera1

Canvasにアタッチするスクリプト
- https://gist.github.com/mattak/b49bb8066f285123f963703c9f33a060#file-camerafinder-cs
- 実行時に各シーンのカメラを消して、Camera.mainに参照を切り替えてくれます

## Q. UIの描画順序どうするの？

各UIシーンのCanvasのOrder in LayerかSorting Layerで切り替えます。

# 結論

- 各UIシーンでCanvasを一つ所持
- SceneをAdditiveに追加・削除することで全体UIの構築をする
- 共通の要素を置くシーンを用意する (Camera, EventSystemなど)
- 共通シーンを作り、共通Cameraはそこに置く。またRuntime時に参照解決する (CrossSceneReference)
- 開発のプレビューに不便なので、開発中は各シーンにカメラを置いておきそれを参照する. 実行時もしくはリリース時に削除されるようにする
[Groovy]MapをPHPの連想配列のようにお気楽に扱えるようにする

#やりたいこと
PHPだと、以下のように連想配列を利用できます。

```php
<?php
$array = array();
$array["a"]["sub-1"] = 111;
$array["a"]["sub-2"] = 222;
$array["b"]["sub-1"] = 333;
print_r($array);
```

実行結果は、

```php
Array
(
    [a] => Array
        (
            [sub-1] => 111
            [sub-2] => 222
        )

    [b] => Array
        (
            [sub-1] => 333
        )

)
```

一目瞭然ですね。素敵です。
こんな感じでサクサク連想配列をGroovyでも使いたいですね。
Groovyだと連想配列に該当するのはMapになります。
実際にやってみましょう。

```groovy
def map = [:] // Mapインスタンスの生成
map ["a"]["sub-1"] = 111
```
しかし、コレを実行すると`java.lang.NullPointerException: Cannot set property 'sub-1' on null object`という例外が発生します。
というのも、GroovyのMapの動作として、まず`map["a"]`から値を取得して、その値の`sub-1`というプロパティに111を代入する、という流れになっているので、そもそも`map["a"]`は何もないのでnullを返すため、nullのプロパティに値を突っ込もうとしてもダメだよ！と怒られているんですね。

```groovy
assert map["a"] == null
```

# 解決方法
GroovyのMapには、「該当するキーがなければ、そのキーと指定したデフォルト値を使って新しい値をMapに突っ込む」という便利メソッド`withDefault`があります。
鋭い人ならこの時点でピンと来るかもしれません。このwithDefaultを使って、キーが存在しない場合には、そのキーをキーとして **新しいMap** を突っ込んであげれば上記の問題を解決できます。

日本語だけだと何がなんだかわからないですね。実際のソースを見てみれば一目瞭然です。

```groovy
def map = [:].withDefault{[:]}
map["a"]["sub-1"] = 111
map["a"]["sub-2"] = 222
map["b"]["sub-1"] = 333

assert [
  "a":[
    "sub-1":111,
    "sub-2":222
  ],
  "b":[
    "sub-1":333
  ]
] == map
```

最初の`[:]`でMapインスタンスを生成するタイミングで、`.withDefault{[:]}`を使って、キーが存在しない場合には空の新しいMapを返すように宣言しています。
これで、GroovyでもPHPの連想配列のように、よりお気楽にMapが利用できるようになります。
Bluemixでデータ分析「dashDB」× 統計言語「R」 Part1:お遊び編

調べてみると、結構充実した機能だったりするので、3部作くらいのイメージで記事で書き留めていこうと思います。今回は「とりあえずこんなことができるっぽい」というお話でPart1。
## イメージ的にはこういうのができます。
Rは別にお絵かきツールではないのですが、イメージつきやすいので色鮮やかなplot結果からどうぞ。
・dashDBのデータを、単純にRを使ってグラフィカルに描画
![スクリーンショット 2016-05-09 23.56.27.png](https://qiita-image-store.s3.amazonaws.com/0/119378/8561d824-8f09-f21c-5efd-4d7de1985872.png)

・マイニング（すでに作られたモデルを、新しいデータに当てはめてみて、これからどうなるかなーと予測してみる）ができたりもします。それがこちら↓。決定木をやってみました。
![スクリーンショット 2016-05-09 23.52.52.png](https://qiita-image-store.s3.amazonaws.com/0/119378/e13bbbf1-e80e-975b-fa9a-aa426d59c14c.png)

## dashDB と R　が連携すると、どんな良いことがありそう？（仮）
いろいろ資料読み漁った結果、以下がポイントらしい。

**・DBサーバ〜統計クライント側で、大量データがネットワークを介して移動しない。**
　従来は、DBからクライアントへデータを送って、クライアントで処理して、それをまたDBへ送ってた。無駄！
　**この無駄がなくなる、つまりネットワーク負荷が従来より全然軽くなるので処理が高速化！**

**・DBサーバ側で統計的処理をぶんぶん回してくれる。**
　→PCのようなHWがこじんまりとした環境でR使ってると、**HW制約で分析が思う存分できない**（メモリの上限があるとかで分析できるデータの大きさが限定的になるというのがRのお約束制約）**・・・なんて悩みがなくなる！**

**・データを貯める環境と分析の環境を統合できる。**
　→従来はDB屋さんにお願いしてデータの準備をしてもらう必要があって時間がかかっていたけど、dashDBはデータロードとかも簡単で、DB管理作業がほとんどないので、**データ分析者が自分自身でデータロードとかができて、すぐにやりたい分析ができる！**

## 今日のまとめ：サンプルデータを使って色々試すと楽しい。
本当には自分で用意したデータで、自分のやりたい分析をするのがもちろん一番ですが、感覚をつかむということだったり「なんか面白いかも、ちょろっとやってみよう」なんてときはデータ準備は大変だから、サンプルデータでやってみると良いかも！
dashDBのWEBコンソールから「Analytics」→「R Scripts」。
![スクリーンショット 2016-05-10 0.19.45.png](https://qiita-image-store.s3.amazonaws.com/0/119378/050d9956-4f06-11e2-4c3a-a7f4c410208e.png)

で、Sample Projectsというのが出てくるので、その中から好きなのを選びます（①）。そうするとサンプルのRスクリプトがばばばと表示されるので（②）、それを眺めつつ、Submitをクリックします（③）。以上！
![スクリーンショット 2016-05-10 0.21.34.png](https://qiita-image-store.s3.amazonaws.com/0/119378/1e380e98-a5cc-6246-cc90-cfa1d73dad05.png)

## 次回予告
ローカルのPCに入れたRからもdashDBとの連携ができますし、dashDBはWEBブラウザとしてR Studioが使えるようになっています。
作りこんだRスクリプトを流す、、、ということであればローカルが良いですし、たかがテスト〜な雰囲気だったらWEBブラウザとしてR Studioを使ってもいいかもしれません。
というわけで次回はその辺を攻めて行きたいと思います。
rails content_for

http://rubyer.me/blog/1632/

http://benjit.com/rails/2015/04/01/rendering-partials-with-layouts-recursively/

http://andre.arko.net/2013/02/02/nested-layouts-on-rails--31/

http://blog.plataformatec.com.br/2012/07/flushing-content-blocks-with-rails-4/ content_for可以重复定义,不会覆盖以前的 

```rb
<!DOCTYPE html>
<html>
<head>
  <% binding.pry %>
  <title><%= yield :title %></title>
  <%= stylesheet_link_tag    "application" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>
```

```rb
[2] pry(#<#<Class:0x007ffe4832d2c0>>)> self.view_flow
=> #<ActionView::OutputFlow:0x007ffe48333b70
 @content=
  {:title=>"new page",
   :layout=>
    "<h1>New post</h1>\n\n\n<form accept-charset=\"UTF-8\" action=\"/posts\" class=\"new_post\" id=\"new_post\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"&#x2713;\" /><input name=\"authenticity_token\" type=\"hidden\" value=\"i0Q8C+nGQPPQ8GnPqnXleWYF+qkM5u++HGTs4k3KTPQ=\" /></div>\n\n  <div class=\"field\">\n    <label for=\"post_title\">Title</label><br />\n    <input id=\"post_title\" name=\"post[title]\" size=\"30\" type=\"text\" />\n  </div>\n  <div class=\"field\">\n    <label for=\"post_body\">Body</label><br />\n    <textarea cols=\"40\" id=\"post_body\" name=\"post[body]\" rows=\"20\"></textarea>\n  </div>\n  <div class=\"actions\">\n    <input name=\"commit\" type=\"submit\" value=\"Create Post\" />\n  </div>\n</form>\n\n<a href=\"/posts\">Back</a>\n"}>
[3] pry(#<#<Class:0x007ffe4832d2c0>>)> self.view_flow.get(:title)
=> "new page"
```

```rb
[7] pry(#<#<Class:0x007ffe4832d2c0>>)> self.view_flow.set :lala, "jiba"
=> "jiba"
[8] pry(#<#<Class:0x007ffe4832d2c0>>)> self.view_flow.content
=> {:title=>"new page",
 :layout=>
  "<h1>New post</h1>\n\n\n<form accept-charset=\"UTF-8\" action=\"/posts\" class=\"new_post\" id=\"new_post\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"&#x2713;\" /><input name=\"authenticity_token\" type=\"hidden\" value=\"i0Q8C+nGQPPQ8GnPqnXleWYF+qkM5u++HGTs4k3KTPQ=\" /></div>\n\n  <div class=\"field\">\n    <label for=\"post_title\">Title</label><br />\n    <input id=\"post_title\" name=\"post[title]\" size=\"30\" type=\"text\" />\n  </div>\n  <div class=\"field\">\n    <label for=\"post_body\">Body</label><br />\n    <textarea cols=\"40\" id=\"post_body\" name=\"post[body]\" rows=\"20\"></textarea>\n  </div>\n  <div class=\"actions\">\n    <input name=\"commit\" type=\"submit\" value=\"Create Post\" />\n  </div>\n</form>\n\n<a href=\"/posts\">Back</a>\n",
 :lala=>"jiba"}
[9] pry(#<#<Class:0x007ffe4832d2c0>>)> self.view_flow.get(:jiba)
=> ""
[10] pry(#<#<Class:0x007ffe4832d2c0>>)> self.view_flow.get(:lala)
=> "jiba"
```
仕事の取り組み方みたいなことについて


いまさらですが新人プログラマ応援キャンペーン的なものに乗っかってタイトルのことについて
エンジニア歴約3年のヘボの私のやり方をさらしていきます

##もくじ
1.日々の業務への取り組み方
2.わからない事がある場合の取り組み方
3.最新の技術情報について情報収集の方法

以上のことについて少し書いていきたいと思います。


##1.日々の業務への取り組み方

これについてはなんというかものすごく単純なんですが、結論を申し上げますと
「どうやったら楽ができるか」をひたすら考えることです。

決して仕事をサボるとかそういった類のものではなく、日々のルーティンワークやテスト作業、ドキュメント作成などをどうすれば効率よく出来るか？といったことです。

具体的な例を挙げるとものすごく長くなりそうなので割愛させていただきますが、例えばテストであればJenkins等のツールを使用して自動化するとかそういうことです。

あと、「残業ダメ、絶対！」
残業しないという強い意志を持って仕事をしましょう。
ぶっちゃけどうにもならないケースもありますが、残業が発生する状況というのはなにかがおかしい証拠です。

・スケジュールに無理がある
・自分の能力を大幅に超える業務にアサインされている

だいたいは上の2つのどちらかです、多分。
なので無理なものは無理！とはっきり言いましょう！
いえ、言える環境であればその会社はとても良い会社です、きっと素晴らしい人たちがたくさんいる会社なのだと思います。

言えないことの方がきっと多いと思います、でもそれが当たり前になると仕事がどんどん嫌いになると
思います（私は確実になります）し心も体もどんどん辛くなってくるのでどうしても言えない場合はスパッと仕事を辞めましょう！

3年勤めないととか辞めると誰かが困るとかは考えてはいけません、
3年勤めないと転職に影響するとか考えなくて大丈夫です
そんな事が影響する会社はきっと転職してもまた同じことの繰り返しになります、もっといい職場が見つかります。
「周りに迷惑がかかる」、大丈夫です誰も困りません！人間生きてたら誰かしらに迷惑かけてます、大丈夫です。
頑張りすぎて無理して体や心を壊しても会社は助けてくれません、
助けてくれるような会社であればそもそもそんな状況になりません。

自分をなによりも優先して守ってください

以上！

##2.わからない事がある場合の取り組み方

今の世の中大体のことはgoogle先生が解決してくれます。
ただ、少し難しいのはググり方でしょうか、これは大半は慣れとか経験とかで上手くなってくるのですが、
少しコツが必要です。

「どういう検索のかけ方」をするのかが非常に重要でこの部分の差が問題解決までの時間に直結すると僕は感じています。

エンジニア業務に限ったことではありませんが、そんなに大した数ではありませんがいろんな人を見てきてググり方が上手くない人をたくさん見てきました。

後輩にわからないところがあると質問されることもあったりなかったりするのですが、
自分自身もわからない場合はやはりググるのですが、
割とあっさり解決することも多々あったりしてそれは上記の「検索の仕方」の違いのように思います。

なので心当たりのある方は先輩にどうやって検索してるかを聞いてみてもいいかもです。

また、ググってもわからなかった場合は誰かに質問すると思いますが、その際は質問の仕方もよく考えたほうがよいかと思います。

気をつけることは質問の内容はなるべく具体的にすることと、もう一つ重要なのは自分で調べたり考えたりした結果、自分はどう思うのか？や自分なりの意見をしっかりと持って質問する事が大事だと思います。

抽象的な質問をされても質問された側の人も「なにがわからないのかがわからない」ことがよくあります。

慣れの部分が大きいのでたくさん失敗してたくさん怒られてください、絶対できるようになります！

以上！

##3.最新の技術情報について情報収集の方法

日々の業務に追われているとなかなか最新技術や自分の業務以外の分野について情報を得る機会は
ないと思います。
しかしこの業界は日々新しい技術が出てきてどんどん便利になっていきます。
それを知らない、使わないのはもったいないです。
自分が今使っている言語やツールもどんどん新しくなっていきます、そこにアンテナを張れないようでは
エンジニアとしては失格ではないのかと僕は思っています。
使う使わないは別にして知識として知っておけばいざというときに役にたったりするので是非皆さんも
最新の情報にはアンテナを張るよう心がけてみましょう。

前置きが長くなりましたが僕の情報収集の方法について説明します、
まぁ偉そうに言って大したことしてないんですけどね。
日々チェックしているものは以下です

・Qiita　→ 興味のあるカテゴリのタグやユーザーさんをフォロー
・twitter　→　Qiitaやブログ記事などで気になったエンジニアの方をフォロー
・ニュースアプリのテクノロジー系の記事　→　まんまニュースアプリのテクノロジーのカテゴリの記事を読む
・Slackのコミュニティ　→　コミュニティに参加してたまに見てます
・github → 自分が使ってたり気になっているフレームワーク等にスターをつけて更新があれば更新内容をチェック


ざっくりこんな感じです。

で、まぁこれ意識しないとついつい忘れちゃうんですよ。
なので僕はこれをやる時間を決めてやっています。

僕の場合だと朝出勤してから30分〜最大で1時間と決めて毎日やっています。
知らなかったことを知れたり、自分が使っているものにこんな便利な使い方があるのかなど
いろんな発見があって、それが業務の効率化につながったりするので楽しいです。


以上！


##おわりに

しょうもない文章を最後まで読んでいただきありがとうございました
この文章が誰かの何かのきっかけにすこしでもなれば非常にうれしいです

また、ご指摘やご意見を頂けると喜びます

では
OCamlでも愛が生まれた

OCamlでも[愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)。UCoreLib依存。
もっと良い書き方を知りたい。

```
open UCoreLib;;

let love =
  let sei = UChar.int_of (Text.get (Text.of_string "生") 0) in
  let si = UChar.int_of (Text.get (Text.of_string "死") 0) in
  let ai = Text.to_string (Text.of_uchar (UChar.of_int (sei land si))) in
  ai  
;;

print_string love;;
```
レスポンシブサイトで両端揃え・均等割りをするときはflexを使うといいよ

タイトルままです

ググっても検索しても出てこなかったのでメモ代わりに書いてみます、もし他の方とネタがかぶってたら削除するのでご了承下さい

レスポンシブサイト以前、ひと昔前のサイト作成時、両端揃えをする場合はletter-spacingを使い



```lang:html
<dl>
	<dt><span class="a">リン</span>ゴ</dt>
	<dd>赤いフルーツ</dd>
	<dt><span class="b">オレン</span>ジ</dt>
	<dd>橙色のフルーツ</dd>
</dl>
```

```lang:scss
dl {
	dt{
		span.a {
			letter-spacing: 20px;
		}
		span.b {
			letter-spacing: 10px;
		}
	}
}
```
というようにブロック内の文字数に応じて位置を何pxと調節して両端揃えを実現していました。

ですがレスポンシブサイトサイトが全盛の今、親要素の横幅は常に不定であってないようなもの、letter-spacingがピクセル単位で固定されてしまっている以上うまく両端揃えになってくれません

letter-spacingが「%」に対応してくれればいいのですが仕様でできないようです、ではどうするか


## flexを使って対応する

```lang:html
<dl>
	<dt>
		<span>リ</span>
		<span>ン</span>
		<span>ゴ</span>
	</dt>
	<dd>赤いフルーツ</dd>
	<dt>
		<span>オ</span>
		<span>レ</span>
		<span>ン</span>
		<span>ジ</span>
	</dt>
	<dd>橙色のフルーツ</dd>
</dl>
```

```lang:scss
dl {
	dt{
		display: flex;
		justify-content: space-between;	
	}
}
```

spanで1文字づつ囲い、無理やり子要素を作り出し親にflexをかけjustify-contentプロパティを指定すれば均等割りができます


justify-contentはflexコンテナ内でアイテムが自動で均等の間隔を作り出してくれるプロパティで、レスポンシブ以前のように1つづつサイズを計算して指定する必要がなくなります

こうすれば親の横幅がいくらになっても自動で均等に表示してくれます


## 問題点
a要素のリンク内でこれをすると下線の表示が残念なことになります
Haskell個人メモ :: 4.再帰


# シリーズ :: [Qiita記事]

[Haskell個人メモ :: 1.基本](http://qiita.com/YusukeHosonuma/items/41ad9346b6e3a4d3789c)
[Haskell個人メモ :: 2.型](http://qiita.com/YusukeHosonuma/items/b115de430aa0d3fc9205)
[Haskell個人メモ :: 3.関数の構文](http://qiita.com/YusukeHosonuma/items/5da9847db16d33f27a06)
**Haskell個人メモ :: 4.再帰　←いまここ**

# 再帰の必要性と考え方

- 命令形言語と違ってループが無いので、代わりに **再帰** を使う。
- **どうやって** ではなく、 **どうあるべきか** で考える。（数学的な定義のイメージ）
	- 例1) nの階乗の定義
		- `0! = 1`
		- `n! = n * (n - 1)!`
	- 例2) n番目のフィボナッチ数
		- 1番目のフィボナッチ数は`1`
		- 2番目のフィボナッチ数も`1`
		- n番目のフィボナッチ数は`(n - 2)番目のフィボナッチ数 + (n - 1)番目のフィボナッチ数`
- 問題の **基底部** （これ以上分解できない実体の値）を考える。
	- 階乗の例では`0! = 1`
	- フィボナッチ数の例では、1番目の`1`と2番目の`1`
	- 一般的にリストであれば空のリスト（`[]`）、数値であれば`0`や`1`を考えると良いかも。
- **与えられた値を分解して、再帰によって結果を定義する** ことを考える。

# 再帰コードの例

標準ライブラリの関数を自分で実装してみる例。
（「すごいHaskell楽しく学ぼう」に書かれているコードと殆ど同じです）

## maximum

```haskell
-- | 最大値を求める
maximum' :: (Ord a) => [a] -> a
maximum' []     = error "List is empty."
maximum' [x]    = x
maximum' (x:xs) = max x (maximum' xs)
```

- リスト内の要素は順序付けされている必要があるので`Ord`型クラスを制約に追加
- 空のリストの場合はエラー
- 【基底部】要素数が1のリストであれば（当然ながら）それが最大値
- 先頭要素とそれ以外でリストを分解し、「先頭要素」と「残りのリストの最大値（再帰）」のうち大きい方（`max`）が最大値

「先頭要素」と「それ以外のリスト」に分解して、「それ以外のリスト」に対して再帰的に関数を適用するのはリストの再帰における黄金パターン。

## replicate

```haskell
replicate' :: Int -> a -> [a]
replicate' n x
  | n <= 0 = []
  | otherwise = x : replicate' (n - 1) x
```

パターンマッチで`0`を基底部としても良いけれど、ガードにすることで負のケースも処理できる。

## take

```haskell
take' :: Int -> [a] -> [a]
take' _ [] = []
take' n (x:xs)
  | n <= 0 = []
  | otherwise = x : take' (n - 1) xs
```

## reverse

```haskell
reverse' :: [a] -> [a]
reverse' [] = []
reverse' (x:xs) = reverse' xs ++ [x]
```

末尾への要素追加は出来ないので`++`で連結している。
連結はリスト同士なので、`[x]`としてリストにしている。

## repeat

```haskell
repeat' :: a -> [a]
repeat' a = a : repeat' a
```

基底部が無い例。（無限リスト）

## zip

```haskell
zip' :: [a] -> [b] -> [(a, b)]
zip' [] _ = []
zip' _ [] = []
zip' (x:xs) (y:ys) = (x, y) : zip' xs ys
```

基底部が2つあるケース。（1つ目のリストが空、2つ目のリストが空）

## elem

```haskell
elem' :: (Eq a) => a -> [a] -> Bool
elem' _ [] = False
elem' a (x:xs)
  | (a == x)  = True
  | otherwise = elem' a xs
```

要素は比較可能でなければならないので`Eq`型クラス制約をつけている。

## クイックソート

```haskell
qsort :: (Ord a) => [a] -> [a]
qsort []     = []
qsort (x:xs) = (qsort lt) ++ [x] ++ (qsort gt)
  where
    lt = filter (<= x) xs
    gt = filter (>  x) xs
```

よく「世界一美しいクイックソート」として紹介される例。（書き方は人によって少し異なったりしますが）
`filter`は述語を使用してリストをフィルタリングする処理。

# 最後に（再帰に慣れるまで苦労しての感想）

少なくとも私は、再帰的な考え方に慣れるまでかなり時間がかかりました。
（C言語のポインタのように、人によってはすぐに理解できてしまうのかもしれませんが）

再帰的にコードを書くポイントは冒頭で記載しましたが、やはり多くのHaskellの記事で「基底部」と「それ以外の再帰部」に分解することが **コツ** とされています。

最初の頃は、それは分かるけど「基底部」ってどうやって考えたら良いのだろう、と非常に苦心しました。

個人的には関数プログラミングの本質である、 **問題を定義する** という考え方がポイントかな、と思いました。
答えをどのように求めるか、ではなく **どうあるべきか** で考えるということです。

再帰コードの例を見ても、どれもが論理的な **定義** に過ぎないことが分かります。
その定義を元に実際の値を計算するのはコンピュータであって、プログラマではないのです。

あとはとにかく練習として再帰コードをたくさん書くのが良いかと思います。
たくさん書いているうちに、ある日になって突然見えてくるものがあります。
BEMのModifierはclassで書くのやめませんか？


この記事は僕のポエムであり、夢です。
温かい目で見守ってください。

# BEMのModifierの(僕が感じている)問題

BEMについての説明は省きます。詳しくは[ここ](https://github.com/juno/bem-methodology-ja/blob/master/definitions.md)とかを参考にお願いします。
簡単な例を上げます。

```scss
.navigation {
  // ...
  
  &__item {
    // ...
    
    &#{&}_selected {
      // ...
    }
  }
}
```

こんな感じに`scss`を書いたとしましょう。
そうすると`HTML`は

```html
<div class="navigation">
  <div class="navigation__item">Menu1</div>
  <div class="navigation__item">Menu2</div>
  <div class="navigation__item">Menu3</div>
  <div class="navigation__item navigation__item_selected">Menu4</div>
</div>
```

こんな感じになるでしょうね。

それで僕の不満な点は、
`navigation__item navigation__item_selected`この部分です。

## 何故不満なのか。

- 長い。読みづらい。
- `__`と`_`の違いを常に意識していないと、`element`か`modifier`なのかわからなくなる。

といったところでしょうか。

### 長い。読みづらい点について
  
`selected`という`modifier`を付けたいためだけに、`block__element`をもう一度書かないといけなくなります。
[b_](https://github.com/azproduction/b_)等のBEMのクラス名をいい感じに構築するものもありますが、結局ほとんど同じように記述しないといけません。
またただクラス名を構築するためだけにJSを実行させるのも少し癪です。
しかもその殆どのクラス名は動的に変わることは無いはずです(上の例だとほとんどが動的に変わる可能性がありますが・・・)。

上の例はコード自体が少ないのでまだ見通しがいいのですが、
もっと長いものがたくさん出てくるかと思います。
またもしかしたら`modifier`が複数個付く場合…
考えるだけであれですね…

### `element`か`modifier`なのかわからなくなる点について
  
`block`自体に`modifier`がついた場合、パット見でわからなくなるかと思います。
実際自分がやっている仕事や、個人的なものでも**自分が命名規則を決めて、管理しているにもかかわらずどっちがどっちかわからなくなることがあります**。
これは`__`,`_`を工夫することで回避できることですが、**そもそもそこを工夫しないといけないってなんだよ！！！**と思います。

# ではどうするべきか
`modifier`の表現は**カスタムデータ属性**を使えばいいのでは。という考えに行き着きました。


```scss
.navigation {
  // ...
  
  &__item {
    // ...
    
    &[data-selected] {
      // ...
    }
  }
}
```
```html
<div class="navigation">
  <div class="navigation__item">Menu1</div>
  <div class="navigation__item">Menu2</div>
  <div class="navigation__item">Menu3</div>
  <div class="navigation__item" data-selected>Menu4</div>
</div>
```

`modifier`は**カスタムデータ属性**に押し込み、`class`は`element`または`block`に集中することができます。
こうすることで、同じ名前をn回書いたりしてなが～い`class`を書くこともなくなり、また`__`?`_`？どっちだっけなんだっけ？みたいなことも起きなくなります。

それ以上にこれの利点は、

- `class`には表示されるもの、`block`または`element`が記述されるところ。
- カスタムデータ属性には、状態・少しの見栄えの違い、`modifier`を記述するところ。

と考え方を分けることができることだと思います。

# まとめ
BEM自体は僕は好きですし、とても良い考えだと思ってます。
ですが、融通が利かないというか煩わしい思いもすることがあります。

BEMはあくまで設計手法、命名規則なのでそこから少し外れて、こうするといいのでは！と思うところはどんどん改善していくといいのかなぁ。とこれを考えながら思いました。
まぁBEMに限らず言えることだと思いますが…

これで終わりにしたいと思います。
ここまで読んでいただきましてありがとうございます。
またこういうふうに書いたほうがもっといいよ！という意見がありましたら、教えていただけますとありがたいです :pray:
VBScriptとRubyで簡単な処理を書いて比較してみる

# VBScriptとRubyの比較

ふと、VBSciptとRubyで同じ処理を書いたらどのくらい短くなるのだろうと思ったので試してみた。

「5回入力をして、その合計を足す」という簡単な例。

```lang:VBSciprt
Dim i, r
r = 0
For i = 1 To 5
   r = r + CInt(WScript.StdIn.ReadLine)
Next
WScript.Echo r
```

```lang:Ruby
puts 5.times.map{gets.to_i}.reduce(&:+)
```

行数こそ6行と１行だけれども、文字数はざっくり、VBScriptが78文字くらいで、Rubyが39文字くらい。半分ですね。

だからどうだということはないんですが、なんとなく比較してみたくなったので比較してみました(^^;
Rustでも愛が生まれた

see http://qiita.com/dongri/items/041ff3e7dde6c99beeb0

```rust
use std::char;

fn main() {
  let love = char::from_u32(('生' as u32) & ('死' as u32)).unwrap();
  print!("{}", love)
}
```

安全じゃないやつ（unsafe版）。

```rust
use std::char;

fn main() {
  let love = unsafe { char::from_u32_unchecked(('生' as u32) & ('死' as u32)) };
  print!("{}", love)
}
```
vagrant up で rails-dev-box が起動しない

### 環境
 - Windows7 x64
 - VirtualBox 5.0.20
 - Vagrant 1.8.1

### エラー内容

```
> vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/wily64' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 3000 (guest) => 3000 (host) (adapter 1)
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "xxxx-xxxxxxxx-xxxxxxxx-a4b1", "--type", "headless"]

Stderr: VBoxManage.exe: error: The virtual machine 'rails-dev-box_default_1461997523333_77253' has terminated unexpected
ly during startup with exit code -1073741819 (0xc0000005).  More details may be available in 'C:\Users\xxx\VirtualBox
 VMs\rails-dev-box_default_1461997523333_77253\Logs\VBoxHardening.log'
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component MachineWrap, interface IMachine

```

### 解決（2016/05/11）
色々試しましたが、結局、[ここにあるように](http://qiita.com/yusuke-k/items/e1cedaa421be4de25e33)、VirtualBox4.3.12にダウングレードして解決しました。

### 他に試したこと
 - Vagrant 1.7.4にダウングレート ⇒現象変わらず
 - [こちらの方法](http://mu60.net/post/139696450949/virtualbox-5014%E3%81%A7vagrant-up%E3%81%99%E3%82%8B%E3%81%A8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95) ⇒現象変わらず
 - VirtualBox4.3.38にダウングレード ⇒現象変わらず

### 参考
Vagrantのバージョンが異なる（1.7台）他のWindows8 PCで同じrails-dev-boxは正常に起動しました。
 - Windows8 x64
 - VirtualBox 5.0.20
 - Vagrant 1.7台