OmniAICreator/Qiita-1.07M huggingface dataset:
Vagrant + Chef で fluentd-ui を動かす


某御方から `Edison-fluentd-elasticsearch-kibana` という電波を受信したので、vagrant + chef でおためし環境構築してみる．

ホスト名はとりあえず `fluentd` でいく．

リポジトリ
https://github.com/tac0x2a/vagrant_chef_fluent-ui

# Vagrantの準備
ノード立てる．

```bash:
$ vagrant box add ubuntu1410 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.10_chef-provisionerless.box
$ vagrant init ubuntu1410
$ vagrant up
```

ノードにアクセスするための設定

```
$ vagrant ssh-config --host fluentd >> ~/.ssh/config
```

# Chefの準備

```Ruby:Gemfile
source 'https://rubygems.org'
gem 'knife-solo'
```

ノードにchefを入れる

```
$ bundle
$ bundle exec knife solo init .
$ bundle exec knife solo prepare fluentd
```

# fluentd
## インストール
Cookbookを作る

```
$ bundle exec knife cookbook create fluentd -o site-cookbooks
$ emacs site-cookbooks/fluentd/recipes/default.rb
```

```ruby:site-cookbooks/fluentd/recipes/default.rb
#
# Cookbook Name:: fluentd
# Recipe:: default
#
# Copyright 2014, TAC
#
# All rights reserved - Do Not Redistribute
#
packages = ["build-essential", "ruby-dev", "libssl-dev"]
packages.each do |p|
  package p do
    action :install
  end
end

gem_packages = ["fluentd-ui"]
gem_packages.each do |p|
  gem_package p do
    action :install
    end
end

```

実行

```
$ bundle exec knife solo cook fluentd -o fluentd
```

## サービス開始
```diff:site-cookbooks/fluentd/recipes/default.rb
+ template "fluentd-ui" do
+   path "/etc/init.d/fluentd-ui"
+   owner "root"
+   group "root"
+   mode 0755
+ end
+  
+ service "fluentd-ui" do
+   supports :start => true, :stop => true
+   action [:start, :enable]
+ end
```

fluentd-ui サービスのテンプレート

```site-cookbooks/fluentd/templates/default/fluentd-ui.erb
#!/bin/sh

export PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin

NAME="fluentd-ui"
FLUENTD_UI_PATH="/usr/local/bin"
PIDFILE=/run/${NAME}.pid

case "$1" in
    start)
        start-stop-daemon --background --start --quiet --pidfile $PIDFILE \
                          --make-pidfile --exec $FLUENTD_UI_PATH/$NAME -- start
        ;;
    stop)
        $FLUENTD_UI_PATH/$NAME stop
        rm -f $PIDFILE
        ;;
    status)
        $FLUENTD_UI_PATH/$NAME status
        ;;
    *)
        ;;
esac

exit 0

```

ホストPCからアクセスできるように

```diff:Vagrantfile
+ config.vm.network "private_network", ip: "192.168.33.10"
```

Vagrantの設定変えたので再起動

```
$ vagrant halt
$ vagrant up
$ bundle exec knife solo cook fluentd -o fluentd
```

で、http://192.168.33.10:9292 へアクセスすると．．．

起動してる！！

username: admin, password: changeme でログインできる．

# 補足:リポジトリからCloneしてきたら．．．
```
$ vagrant ssh-config --host fluentd >> ~/.ssh/config
$ bundle
$ bundle exec knife solo init .
$ bundle exec knife solo prepare fluentd
$ bundle exec knife solo cook fluentd -o fluentd
```
輸入取引の際の仕訳（弥生）

##輸入取引の処理

【前提】弥生で税抜処理（期末一括税抜処理）を利用している場合

 輸入品に関しては、税関通貨時に消費税の支払処理が完結している。よって期末の消費税の処理時に処理対象外となるよう、本体は課税対象外として記帳。
Fedexなどの配送業者が立て替えた消費税額は本体の勘定科目に合わせ、立て替えサービスフィーは非課税。
 
仕訳は以下の通り。
 本体分
 　消耗品費（課税対象外）　　　　　　10,000 /預金 10,000
 配送業者への支払分
 　仮払消費税（課税対応輸入消費税6.3％）630   /預金    800
 　　　　　  （地方消費税貨物割1.7%)   170
　支払手数料（非課税)        500

これによって期末の消費税税抜処理後には以下となる。
 輸入品             1,000
 仮払消費税　　　　　　800
 支払手数料           460
 仮払消費税            40
Mac 上で Vagrant を使って CentOS に FuelPHP をセットアップ


最近、FuelPHPを導入する機会をいただきました。環境構築は大変重要ですので、備忘録的に整理しておきます。記載して自分で試してみましたが、おおよそ15分程度でできました。是非お試しください。

# 構築する環境

* OSX 10.9.5
* Vagrant
* CentOS 6.5
* FuelPHP 1.7.2

# 参考: Vagrant
[Vagrant体験入門ハンズオン手順 - 2014/04/24 DevLove関西](http://qiita.com/shin1x1/items/3288d9de7f04192b6ad8 "Vagrant体験入門ハンズオン手順 - 2014/04/24 DevLove関西")

* Vagrant ではいつも助けていただいております。本当にありがとうございます。 

# 参考: FuelPHP
[はじめてのフレームワークとしてのFuelPHP](http://www.amazon.co.jp/gp/product/4899774222)
<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?t=hero76-22&o=9&p=8&l=as1&asins=4899774222&ref=tf_til&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&npa=1&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

* FuelPHP 関連の良書です。迷ったらこちらを買うことをおすすめします。FuelPHPの基本だけでなく、各種PHP開発環境構築手法、各環境でのFuelPHPインストール設定から順序立ててわかりやすく解説されています。

# 事前準備1: Vagrant
* 上記の参考より、VirtualBox と Vagrant をインストールしておいてください。

# 事前準備2: CentOS6.5, Apache on Vagrant
[Mac 上で Vagrant を使って CentOS + Apache をセットアップ](http://qiita.com/hmukaida/items/8836a96ce5cbe88019b7)

* CentOS6.5とApacheまでの設定はこちらを参考にお願いします。

# FuelPHP をインストール

最初に、Vagrant へログインします。

```
$ vagrant ssh
```

curl が無ければインストールします。

```
[vagrant]sudo yum install curl
```

次に FuelPHP の oil コマンドをインストールします。

```
[vagrant]curl get.fuelphp.com/oil | sh
```

FuelPHP のインストールです。インストールしたいディレクトリに移動してください。
自分は、syncしているディレクトリ配下にインストールしたいため、「/vagrant」にて実行します。

```
[vagrant]cd /vagrant
[vagrant]mkdir work
[vagrant]cd work
[vagrant]oil create fuelphp
```

上記コマンドにより、GitHub から FuelPHP の最新正式リリース版がダウンロードされました。（2014年11月21日現在ですと、FuelPHP 1.7.2 となります。）

次に、Composer で依存ライブラリをダウンロードします。少し時間かかりますが待ちます。
```
[vagrant]cd /vagrant/work/fuelphp
[vagrant]php composer.phar update
```

# タイムゾーンの変更（重要）
このままですとうまく起動しません。/etc/php.ini ファイル内のタイムゾーンを設定します。

```
[vagrant]sudo vi /etc/php.ini
```

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

# DocumentRoot を変更し Welcome ページ表示

httpd.conf の DocumentRoot を変更し Welcome ページを表示させます

```
[vagrant]sudo vi /etc/httpd/conf/httpd.conf
```

まずは下記をコメントアウトします。

```
NameVirtualHost *:80
```

次に VirtualHost の最下部に追記設定をします。

```
<VirtualHost *:80>
	DocumentRoot /vagrant/work/fuelphp/public
	ErrorLog logs/fuelphp_error.log
	CustomLog logs/fuelphp_access.log combined
	<Directory /vagrant/work/fuelphp/public>
		DirectoryIndex index.php
		AllOcerride All
		Order allow,deny
		Allow from all
	</Directory>
</VirtualHost>
```

ここまで準備できたら、Apache を再起動してアクセスしてみます。

```
[vagrant]sudo service httpd restart
```

ブラウザで [http://192.168.33.10](http://192.168.33.10)にアクセスし、Welcom ページが表示されれば成功です。（アクセス先は、Vagrant での設定環境に依存します。）

![スクリーンショット 2014-11-21 10.43.49.png](https://qiita-image-store.s3.amazonaws.com/0/39380/10343570-8e29-90a4-fc14-7f0d310c5eba.png "スクリーンショット 2014-11-21 10.43.49.png")
Ubuntuにnode.jsをインストールするときにcommand not found: nodeと言われないようにするために

[scleen_x_xさんがおっしゃっておられたので](http://qiita.com/scleen_x_x/items/9b50a57562dc88ca3aef)。
自分がnode.jsをUbuntuにインストールする際にやること。

# 実はnodejs.orgに書いてある

実は、Ubuntuインストール時にnodejsってパッケージで既に登録されているのでついついそれを使ってしまいがちなのですが。
自分も以前に素のUbuntuでapt-getでインストールしたときにscleen_x_xさんと同じく、あれ？となった一人なのです。

node.jsのサイトを見てみると。
node.jsトップ → Downloads → Installing from package managers
と進むことで、node.jsをパッケージシステムへ追加する方法が書かれています。
曰く、

```shell-session
curl -sL https://deb.nodesource.com/setup | sudo bash -
```

これを実行することでUbuntuのaptにnode.jsのリポジトリが登録されるようです。
この状態にして、

```shell-session
sudo apt-get install -y nodejs
```

を行うと、ちゃんと nodejs -> node のリンクが張られた状態でインストールされます。
エラーハンドリングについて

コマンドを呼び出してWait した時に返されるerrには ExitError とそれ以外というのがあって、ExitError は コマンドの異常終了、それ以外はほぼIOエラーということが公式ドキュメントに記載されている。

異常終了だったのかそうでないのかを判定する方法は以下のような感じになる。

```go
err := cmd.Wait()
if exitError, ok := err.(*exec.ExitError); ok {
  // 異常終了
  log.Fatal(exitError)
}
if err != nil {
  // たぶんIOエラー
  log.Fatal(err)
}
```

err が exec.ExitError型かどうかを判定するのに型アサーションで判定するというテクニックが使われている。golang では一般的なのだろう。今後も使っていきたい。


[参考]
[Package exec](http://golang.org/pkg/os/exec/)
[[Go言語] Goでのキャスト (型アサーション)](http://www.fujlog.net/2014/02/golang-type-assertion.html)
携帯(ほぼ)すべて判定するjavascript

海外のブログでたまたま見つけた。
忘れないようにメモ。

via http://www.simoahava.com/analytics/macro-magic-google-tag-manager/#15

```js
function () {
  var a = navigator.userAgent || navigator.vendor || window.opera;
  if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) { return true; }
  return false;
}
```
pipでlxmlを入れるとlibxml/xmlversion.hがないと怒られた時の対処

# あるある
scrapy利用するにはlxmlが必要なのですが、lxmlがいんすとーるできない。。。

ネット上でよく見られる解決策が

```
brew install libxml2 libxslt
```

で必要なプログラムをインストールすればOKという話。Macの場合、

```
xcode-select --install
```

でOKだよっていうのはほとんど。ただ、もうそのプログラムを提供していないよというメッセージがでて上記のコマンドは実行できない。そこで他の解決策が必要になります。

私の場合、*brewで入れたlibxml2のバージョンと/usr/local/bin/xslt-configで指定されていたlibxmlのバージョンが違っていました。* （たぶん、直接これが原因というか、いじりまくってむちゃくちゃになっていた）
なお、pip installのときにどこを参照しているかは~/.pip/pip.logを見ればわかります。

* * *

以下の２つの対処が考えられます。

1. /usr/local/bin/xslt-config内で参照しているbrewでインストールしたlibxml2のバージョン指定を修正する

2. brew remove libxml2で一旦アンインストールし、/usr/local/bin/xslt-config内のバージョンに合わせたlibxml2をインストールする。

１についてはlxmlのインストール自体は成功しましたが、他のプログラムとの依存関係のせい？でscrapyでstartprojectコマンドが実行できず、以下のエラーが出ました。

```
ImportError: dlopen(/Users/username/.virtualenvs/testenv/lib/python2.7/site-packages/lxml/etree.so, 2): Library not loaded: /usr/local/opt/libxml2/lib/libxml2.2.dylib
  Referenced from: /usr/local/opt/libxslt/lib/libxslt.1.dylib
  Reason: Incompatible library version: libxslt.1.dylib requires version 12.0.0 or later, but libxml2.2.dylib provides version 11.0.0
```

２つ目の解決策はうまくいきました！！
Docker Private Registry


※ この記事は古いです。[registry 2.0 で改めて試した記事を書き直しました。](http://qiita.com/megmogmog1965/items/824feb05346ad926944e)

## Docker private registry って何？

[Docker Hub] みたいのを自前のサーバーに立てる事ができます。

> 以下、CentOSでの例で説明します

## どうやって？

> 詳しくは [Docker Private Registry] に書いてある。

[Docker Private Registry] 自体もDocker Image化されているので、以下のCommand実行でできちゃう。

```sh
$ sudo docker run -d -p 5000:5000 registry
```

## CA証明書ないって言われる

[Docker Private Registry] 立てたはいいけど、証明書がなくてクライアント側のCommand実行で SSL (HTTPS) 通信に失敗する。 

```sh
$ sudo docker search localhost:5000/search_word

2014/11/21 00:22:14 Error response from daemon: Invalid registry endpoint https://172.31.17.31:12345/v1/: Get https://172.31.17.31:12345/v1/_ping: EOF. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 172.31.17.31:12345` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/172.31.17.31:12345/ca.crt
```

> ```$ docker pull hoge``` とかのコマンドはdefaultでHTTPSを使う

次の手順で、クライアント側のDocker daemonに [Docker Private Registry] をHTTPS通信しないように設定する。

## HTTPS通信しない方法

まず、"/etc/sysconfig/docker" を開く

```sh
$ emacs /etc/sysconfig/docker
```

"other_args="--insecure-registry XXX.XXX.XXX.XXX:YYYYY" "を追加

```
# /etc/sysconfig/docker  
# ↓これ追加する。指定したRegistryにSSL通信しなくなる設定  
other_args="--insecure-registry XXX.XXX.XXX.XXX:YYYYY"
```

Docker daemonを再起動

```sh
$ sudo service docker restart
```

## 使い方

基本は [Working with Docker Hub] と同じ。URIの明示的指定があるだけ。

検索 (search):

```sh
$ sudo docker search your.server.address:port/search_word
```

取得 (pull):

```sh
$ sudo docker pull your.server.address:port/namespace/yourimage:tag
```

保存 (push):

```sh
$ sudo docker tag namespace/yourimage:tag your.server.address:port/namespace/yourimage:tag
$ sudo docker push your.server.address:port/namespace/yourimage:tag
```

[Yusuke Kawatsu]:https://bitbucket.org/megmogmog1965
[Docker Hub]:https://hub.docker.com/
[Docker Private Registry]:https://github.com/docker/docker-registry
[Working with Docker Hub]:https://docs.docker.com/userguide/dockerrepos/
スタッシュから指定ファイルだけをチェックアウトする

「スタッシュから一部ファイルだけ取り出したい！」場合は以下の通り作業します。


## 1.スタッシュ名の確認

stash@{0} な感じのがスタッシュ名。

```
git stash list
```

## 2.スタッシュ内ファイル一覧の確認
```
git stash show ＜スタッシュ名＞
```

## 3.チェックアウト
```
git checkout ＜スタッシュ名＞ ＜ファイル名＞
```
[sublime Text and WebStorm For Mac]vimのh,j,k,lの連続押下で移動する方法

sublime Text も　WebStormもvimキーバインドで使用しているんだけど、
ほんと、いつからかわからないけど、h,j,k,lの連続押下？（押し続け）で
移動できなくなっていて、困った。
で、調べた結果をなぜか、ブログに書いちゃったので、こっちにも貼っておくことにする。

ちなみに、OSは、OS X Yosemite 10.10.1です。

[h, j, k, l の 連続押下で、移動できない。。。](http://puttyo.hatenablog.com/entry/2014/11/21/075611)
[h, j, k, l の 連続押下で、移動できない。。。第二弾w](http://puttyo.hatenablog.com/entry/2014/11/21/081752)

以上。
jQueryでd3の描画領域を指定する


backbone.jsの`view.$`の様にアクセスできるDOM要素が限られているのに、d3の描画領域を`'.chart'`とかするとグローバルな$を使って`$('.chart')`が指定されてしまう時などに。

d3.jsで`selectAll`するなら`view.$('.chart').toArray()`をselectAllに渡せば良いし、
`select`を使うなら`view.$('.chart').toArray()[0]`をselectに渡せば良い。

[c3.js](http://c3js.org/)はd3をラップしたライブラリで、描画領域をbindtoで渡すが、内部ではd3のselectにそのまま引き渡しているので同じようにview.$で描画領域を指定できる。
CentOS7にKVMをインストール

```bash:インストール
yum install -y \
  virt-manager qemu-kvm libvirt-daemon* \
  xorg-x11-xauth vlgothic-fonts adwaita-gtk3-theme
```

```bash:スタートアップに登録
systemctl enable libvirtd
```

```bash:X転送でつなげる
ssh -X servername virt-manager
```

# 参考

* bond0 + br0
  * [KVM仮想化環境構築 - その3 - スカーフ猫](http://d.hatena.ne.jp/catWithScarf/20120211/1329027172)
  * [[RHEL][Linux] bridged bondingデバイス設定 | blog.hansode.org](http://blog.hansode.org/archives/52502696.html)
  * [CentOS(Sientific Linux) 6 で Bonding & Bridge - How old are you ?](http://www.nari64.com/?p=78)
* virt-manager
  * [centos KVM virshコマンドのまとめ - mediawiki](http://fukumoto-tech.serveblog.net/wiki/index.php?centos%20KVM%20virsh%A5%B3%A5%DE%A5%F3%A5%C9%A4%CE%A4%DE%A4%C8%A4%E1)
  * [virt-managerでマイグレーションする - 殿様ガエルのwiki](http://seesaawiki.jp/frogapp/d/virt-manager%A4%C7%A5%DE%A5%A4%A5%B0%A5%EC%A1%BC%A5%B7%A5%E7%A5%F3%A4%B9%A4%EB)


## アイコンが表示されない場合

adwaita-gtk3-theme をインストールする。
(ubuntuではhicolor-icon-theme)

![スクリーンショット 2014-11-21 6.02.22.png](https://qiita-image-store.s3.amazonaws.com/0/25728/2b28cb05-1ec8-0472-92c5-d08199231577.png)

![スクリーンショット 2014-11-21 6.02.09.png](https://qiita-image-store.s3.amazonaws.com/0/25728/6f3f8a9f-630d-c04a-0826-0e1bef787237.png)
時間課金スキームを使ってDatadogの利用料金を適正化する


**注: このポストの内容は、AWS Instance 向けに確認できている内容です。　他のパブリッククラウドへの適応は、[support@datadoghq.com](support@datadoghq.com)にて確認ください。**

Datadogの月額利用料金は、基本的に **$15/インスタンス**と設定されています。そして、インスタンスのカウント方法は、一ヶ月を通して **最も監視インスタンス数の多かった時間帯のインスタンス数**をベースに請求書を作っています。

|Free|Standard|Enterprise|
|---:|----:|----:|
|$0|$15|contact us|
|5台まで|100台まで|100台以上|
|データ保存:1日|データ保存:１年|データ保存:無期限|

> Each invoice is determined by the high watermark of concurrently running hosts for that month.

> 請求金額の基本となるインスタンス数は、当該月に同時に監視していたインスタンス数の最高値にを基準としております。

パブリッククラウドの利用形態を考えるとインフラに帰属するインスタンスの数は常に変わるし。AWSは時間課金でチャージされているので、同じ時間課金方式はないのかと思いますよね。

**朗報は、Datadogにも期間課金のスキームはあります!**


### どういうケースに時間課金を使うのか?

インスタンス数がオートスケールする仕組みを使ってサービスをしている場合、一時的にスケールアウトし、月に数時間しか稼働しないインスタンスに対し固定で課金されるのは避けたいものです。

監視しているインスタンス数が流動的な場合に **時間課金スキーム**が有効に機能します。

*注) Datadogでは、ブルー&グリーン・ディプロイの場合は、別の課金ルールが適応され、ダブルで課金されることはまずない設定になっています。*

> Datadogでは、 **99パーセンタイル課金ルール**をとっています。毎月、課金対象インスタンスを時間ごとに記録し、720個の課金ベースデータを収集します。対象となる課金データの中で、課金対象インスタンスの多い上位 1％の７サンプル時間帯を削除した後、課金のベースとなるインスタ値の最高値を特定しています。(従って、スパイク的に監視インスタンスが増えた７個の時間帯があっても、それらは課金対象にならないということになります。)


### どれくらいの稼働時間割合まで、時間課金が安いか?

営業担当者の解説によると、「監視インスタンスの稼働率/月が **70%**を目処に、時間課金から固定課金への切り替えるのがベストプラクティス」らしいです。(この稼働率から逆算すると、時間課金レートは、およそ$0.03/hrということになりますね。)

従って、「70%を超えて稼働している監視インスタンスのみを固定課金とし、それ以外を時間課金にしておく」のが、オートスケールするインスタンスを有しているインフラでは、ベスト課金プラクティスということになると思います。


### 申し込み時の方法

今のところ、固定課金と時間課金を設定/変更をするためのサイトは、準備できていません。

時間課金の設定/変更が必要な場合は、該当月が始まる前に、[support@datadoghq.com](support@datadoghq.com)か[bill@datadoghq.com](bill@datadoghq.com)へ課金スキーム変更のメール連絡が必要です。

(英語が不得意な場合は、日本語で問い合わせてみてください。きっと対応してくれると思います。） 


---

**最後に、もしもこの投稿を読んでDatadogの本当の魅力について知りたいと思うなら、[signup](https://app.datadoghq.com/signup)ページからフリートライアルに申し込んでみてください。**
Freebie - OPEN UI Constructive Kit By HAMZA

This is stunning and responsive UI kit for indie game developers who have no access to Photoshop.
Now an indie game developer "Hamza" providing you this kit for free on Behance.

what Hamza said in his facebook profile

Hello fellows i have created a free casual game Ui kit made in SVG format using inkscape.
i wanted to make a SVG UI library because almost UI kits in the INTERNET are PSD and i thought about low budget developers and studios who can't get PS. so you can use this kit and modify it in Inkscape.

**[SOURCE](http://unity3diy.blogspot.com/2014/11/freebie-open-ui-constructive-kit-by.html
)**

![alt](https://m1.behance.net/rendition/modules/143551181/disp/abc4d9dd70d930492343b815fac4b6bb.png)
STI modelでfriendly_idを使う


# モデル毎にslugのunique判定をする
http://ruby.zigzo.com/2011/10/08/how-to-use-the-friendly_id-gem-w-sti-models/

validatesのuniquenessと似た感じで、scopeを使う。
STI modelではtypeカラムでモデル毎のデータを表しているので、scopeにtypeを指定する。

以下の様に、継承元のモデルでfriendly_idに指定する。

```ruby:hoge.rb
class Hoge < ActiveRecord::Base
  extend FriendlyId
  friendly_id :from_data,
              use: [:slugged, :finders, :scoped],
              scope: :type
end

```

# モデル検索      

2014/11/23 追記

```ruby:パターン1
friendly_id :foo, use: :slugged # you must do MyClass.friendly.find('bar')
```

```ruby:パターン2
friendly_id :foo, use: [:slugged, :finders] # you can now do MyClass.find('bar')
```

STI(単一テーブル継承）使っているモデルだと、子モデルでfindersが有効にならないようでfindメソッドにslugの値を入れても検索してもRecordNotFoundとなる。
なので、パターン1を使うようにする。
SwiftのTupleを使う


##Tuple(タプル)とは
型の異なる複数の値をひとまとめにできる。（ざっくり）

```objectivec:Tupleのリテラル
// 値のみ
(val1, val2, ...)

// 値に名前をつけられる
(name1: val1, name2: val2, ...)
```

##Tupleをつかう

####値のみで宣言
- 0からの連番で参照する

```objectivec:値のみのTuple
var tpl = ("Qiita", 10, true)

println(tpl)		// -> (Qiita, 10, true)

println(tpl.0)		// -> Qiita
println(tpl.1)		// -> 10
println(tpl.2)		// -> true
println(tpl.3)		// Error

tpl.1 = 20
println(tpl.1)		// -> 20
```

####値に名前をつけて宣言
- つけた名前で参照できる
- 連番でも参照できる

```objectivec:値に名前をつけたTuple
var tpl = (name: "Qiita", count: 10, flag: true)

println(tpl.name)	// -> Qiita
println(tpl.count)	// -> 10
println(tpl.flag)	// -> true

println(tpl.0)		// -> Qiita
println(tpl.1)		// -> 10
println(tpl.2)		// -> true
```

####Tupleに変数名をつけない
- まとめて変数宣言っぽいことができる

```objectivec:Tupleに変数名をつけない
var (name, count, flag) = ("Qiita", 10, true)
println(name)		// -> Qiita
println(count)		// -> 10
println(flag)		// -> true
```

####Tupleから指定した値のみ取り出す
- 取得しない位置に_(アンダースコア)を入れる

```objectivec:Tupleから指定した値のみ取り出す
var (name, _, flag) = ("Qiita", 10, true)
println(name)		// -> Qiita
println(_)			// Error
println(flag)		// -> true
```


####Tupleで値を入れ替える

- tmpてきな変数を用意する必要がない

```objectivec:Tupleで値を入れ替える
var n1 = 1
var n2 = 2
(n1, n2) = (n2, n1)
println(n1)		// -> 2
println(n2)		// -> 1
```

####ネストしたTuple

- 右辺と左辺のネスト構造が同じなら代入される

```objectivec:ネストしたTuple
var nest = (10, 20, (30, 40))
var (n1, n2, n3, n4) = nest	// Error
var (n1, n2, (n3, n4)) = nest	// 代入される
```

####無駄なネスト

- 無駄なネストは無視される？

```objectivec:無駄なネスト
var nest = (((((1)))), 2)
println(nest.0)	// -> 1
println(nest.1)	// -> 2

var (num1, num2) = nest	// 代入される
```

```objectivec:間違えそうな例
// ネストの構造がおかしいのでnest.num1を参照するとErrorになる
var nest = (((((num1: 1)))), num2: 2)

// 通る
var nest = (num1: ((((1)))), num2: 2)
println(nest.num1)	// -> 1
println(nest.num2)	// -> 2
```

##ArrayやDictionaryとの違い
- 型の異なる値を入れられる
- 繰り返し処理ができない
- 値の追加/削除ができない

とか。

##実はTupleはSwiftの基本となる値

すべての値は「値が1つだけのTuple」らしい。

```objectivec:この2行は同じ意味
var txt = "てきすと"
var (txt) = ("てきすと")
```

なので 変数名.0 でアクセスできる。

```objectivec:変数名.0
var txt = "てきすと"
println(txt.0)		// -> てきすと
txt.0 = "テキスト"
println(txt)		// -> テキスト
```

これ リテラル.0 もいけた。

```objectivec:リテラル.0
println("text".0)	// -> text
println((0).0)		// -> 0
println(true.0)	// -> true
```

そしてこれ

```objectivec:0の連鎖
var txt = "てきすと"
println(txt)		// -> てきすと
println(txt.0)		// -> てきすと
println(txt.0.0)	// -> てきすと
println(txt.0.0.0)	// -> てきすと
txt.0.0.0.0 = "テキスト"
println(txt)		// -> テキスト
```

こえーよー
Swiftこえーよー



##参考
[Swiftスタートアップガイド](http://www.amazon.co.jp/dp/4798042196/)
Vagrant 関連記事 #vagrant

# Vagrant 関連記事 #vagrant

更新日: 2014/12/05 23:03:34

|No.|タイトル|作成日|ストック数|
|--:|:--|:--:|--:|
|1|[Docker  Vagrant + Itamae で Docker の Hello world #docker #itamae #vagrant](http://qiita.com/tbpgr/items/d27845082dd49c36142f)|2014/11/25 22:32:34|1|
|2|[Vagrant AWS Provider で EC2 上に CoreOS のインスタンスを作成し、 Ubuntu 14.04 LTS のコンテナを乗っけて、 SSH で接続可能に。](http://qiita.com/tbpgr/items/7f19bd120395776bd9d4)|2014/12/05 22:54:00|0|
|3|[Vagrant  Global Control と percol( peco ) を組み合わせて、どこからでも簡単に VM を操作する #vagrant #percol #peco](http://qiita.com/tbpgr/items/e428cf04da63a1f84974)|2014/11/19 23:15:55|3|
|4|[Vagrant  Vagrant + Itamae で middleman 環境を構築し、 Vagrant Share で Vagrant Could に公開する #vagrant ](http://qiita.com/tbpgr/items/44135d1463d07c0489d4)|2014/11/21 00:20:50|3|
|5|[Vagrant  Vagrant VMware Workstation Provider の購入からVMの起動まで](http://qiita.com/tbpgr/items/c796ae93da2057b1cced)|2014/06/26 21:37:04|3|
|6|[Vagrant  Vagrant-AWS Provider で AWS に CoreOS 環境を構築する #vagrant #coreos](http://qiita.com/tbpgr/items/f155a9e5c9ba4c5272fe)|2014/12/01 22:33:39|3|
|7|[Vagrant  synced_folder でホストOSとゲストOSの任意のフォルダを同期する](http://qiita.com/tbpgr/items/67125ea883409ae5fd51)|2014/06/20 22:22:40|9|
|8|[Vagrant  version 1.5 新規フィーチャー #vagrant](http://qiita.com/tbpgr/items/fb020a130a69dbf77455)|2014/11/20 23:33:06|3|
|9|[Vagrant  version 1.6 新規フィーチャー #vagrant](http://qiita.com/tbpgr/items/5acf0bda9fc822d7fff5)|2014/11/19 23:11:36|2|
|10|[Vagrant で Windows 上の VirtualBox に CoreOS のインスタンスを作成し、 Ubuntu 14.04 LTS のコンテナを作成し、 SSH で接続可能にする #vagrant #coreos #docker](http://qiita.com/tbpgr/items/800ad117e234b38f0a80)|2014/12/05 22:56:39|0|
Vagrant | Vagrant + Itamae で middleman 環境を構築し、 Vagrant Share で Vagrant Could に公開する #vagrant 

# Vagrant | Vagrant + Itamae で middleman 環境を構築し、 Vagrant Share で Vagrant Could に公開する #vagrant #itamae #middleman
## 概要
Vagrant + Itamae で middleman 環境を構築し、 Vagrant Share で Vagrant Could に公開します。

* Itamae: 国産プロビジョニングツール。Chef の軽量版のような立ち位置。
* middleman: Ruby の 静的サイト構築フレームワーク

## 前提
* Vagrant Cloud にユーザー登録しておきます
* Vagrant / Itamae インストール済み

## 手順
### 作業用ディレクトリ ＋ Vagrantfile ひな型生成
~~~bash
$ mkdir middleman
$ cd middleman
$ vagrant init -m
$ vi Vagrantfile
~~~

### Vagrantfile 編集

~~~ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define "middleman" do |web|
    web.vm.provider :virtualbox do |vb|
      vb.name = "middleman"
    end
    web.vm.hostname = "middleman"
    web.vm.box = "hashicorp/precise64"
    # middleman のデフォルトポートは 4567
    config.vm.network :forwarded_port, guest: 4567, host: 4567
  end
end
~~~

### Gemfile 編集

* rutan さんの `itamae-plugin-recipe-rtn_rbenv` で rbenv + ruby 環境を構築

~~~ruby
source "https://rubygems.org"

gem 'itamae-plugin-recipe-rtn_rbenv'
~~~

### node.js の作成・編集

~~~json
{
    "rtn_rbenv": {
        "user": "vagrant",
        "versions": {
            "2.1.2": [
                {
                    "name": "bundler",
                    "version": "1.7.3",
                    "force": true
                },
                "middleman"
            ]
        },
        "global": "2.1.2"
    }
}
~~~

### middleman.rb
Itamae のレシピを作成

~~~ruby
execute "apt-get update" do
  command "sudo apt-get update"
end
package "make" do
  action :install
end
include_recipe 'rtn_rbenv::user'
~~~

### 仮想環境起動

~~~bash
$ vagrant up
~~~

### Itamae プロビジョニング

~~~bash
$ vagrant ssh-config --host middleman
$ bundle exec itamae ssh --vagrant -h middleman --node-json node.json middleman.rb
# 各種ログ

# インストール内容の確認
$ vagrant ssh
vagrant@middleman:~$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
vagrant@middleman:~$ middleman v
Middleman 3.3.7
~~~

### middleman でサイトテンプレート生成

~~~
$ middleman init itamae_middleman
~~~

### middleman 起動

~~~bash
$ cd itamae_middleman

$ vi Gemfile
# middleman-livereload をコメントアウト
$ bundle installs

# ここから
$ sudo apt-get install build-essential gcc g++ -y
$ gem install ejs
$ gem install eco
$ sudo apt-get install nodejs
# ここまで試行錯誤しながらだったので不要なものがあるかも

$ middleman server
~~~

### middleman ローカル確認

![middleman.png](https://qiita-image-store.s3.amazonaws.com/0/43480/e23468f2-13c3-c8ae-df52-f3e47d22d9a3.png)

## vagrant share

~~~bash
$ vagrant login
# user, pass を入力
$ vagrant share
$ vagrant login --logout
~~~

share 実行時に表示された URL にアクセス

![middleman.png](https://qiita-image-store.s3.amazonaws.com/0/43480/e23468f2-13c3-c8ae-df52-f3e47d22d9a3.png)

## 補足
* Firewall の設定によって、 `vagrant share` が失敗するケースがある

## 参照
* [itamae-plugin-recipe-rtn_rbenv | GitHub](https://github.com/rutan/itamae-plugin-recipe-rtn_rbenv)
[JavaScript]バイナリ(String)を保存するときに注意すること

Base64で書かれたとあるデータをデコードした後、保存するために以下のようなコードを書いた。

```js
var base64String = "/wE=";  // btoa("\xff\x01"); utf-16で"！"
var blob = new Blob([atob(base64String)]);
var url = URL.createObjectURL(blob);  // このurlをaタグのhrefに設定してダウンロードできるようにした
```

するとダウンロードできたバイナリの0xffが0xc3 0xbfに置き換わってしまっている。
これはBlobの第一引数の文字列がUTF-8として扱われてしまうからである。
[ここ](http://www.lingua-systems.com/unicode-converter/unicode-mappings/encode-iso-8859-1-to-utf-8-unicode.html)のISO-8859-1の部分のバイトがUTF-8の部分のバイト列に置き換わってしまう。
これを防ぐためには以下のようにすればよい

```js
var base64String = "/wE=";
var str = atob(base64String);
var arr = new Uint8Array(str.length);
for (var i = 0;i < str.length;i++) {
    arr[i] = str.charCodeAt(i);
}
var blob = new Blob([arr]);
var url = URL.createObjectURL(blob);
```

ただし文字列のすべての文字コードが1byteより小さい場合しか使うことができない。
("あ"や"！"の文字コードは2byte使うためUint8Arrayに入れると情報が欠けてしまう。)
今回の場合はbase64で復元したものなので全て文字コードは1byteとなっている。
phpMyAdmin導入

MySQLに直に入るのもいいけど楽にデータ見たり更新したり削除したりしたい！ということでvagrantで作った環境にphpMyAdminを導入してローカルからブラウザでアクセスしてみたいと思います。

環境(vagrantにて作成)：
CentOS 6.4
PHP 5.3.3
MySQL 5.1.73
apache 2.2.15


```
cd /usr/local/src
sudo wget 'http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/4.0.3/phpMyAdmin-4.0.3-all-languages.tar.gz?r=http%3A%2F%2Fwww.phpmyadmin.net%2Fhome_page%2Fdownloads.php&ts=1371041417&use_mirror=jaist'
sudo tar zxvf phpMyAdmin-4.0.3-all-languages.tar.gz
```

を実行しphpMyAdminをインストールする。

次に

```
sudo mv phpMyAdmin-4.0.3-all-languages /var/www/phpMyAdmin
sudo chown -R root:apache /var/www/phpMyAdmin/
```

を実行する。

次に設定ファイルを作成する。

```
sudo vi /etc/httpd/conf.d/phpmyadmin.conf

中身----
Alias /phpMyAdmin "/var/www/phpMyAdmin"

<Directory "/var/www/phpMyAdmin">
Order allow,deny
Allow from all
</Directory>
---ここまで

sudo apachectl -t
sudo /etc/rc.d/init.d/httpd reload
```

で（アクセス制限をかけない設定をして）保存し、apache再起動してhttpdを再読み込みする。
そしてconfigディレクトリを作成しパーミッション設定する。

```
sudo mkdir /var/www/phpMyAdmin/config
sudo chmod 777  /var/www/phpMyAdmin/config
```

これでもう大丈夫、ローカルからphpMyAdminmにアクセスできる！

・・・・

・・・・

アクセスすると・・・画面が白い！何回リロードしても白い画面です。。。
これはおかしい、とエラーログを見てみると、

```
PHP Fatal error:  Call to undefined function mb_detect_encoding() in /var/www/phpMyAdmin/libraries/php-gettext/gettext.inc on line 177
```

調べてみると、php.iniに

```
extension=mysqli.so
extension=mbstring.so
```

を入れて（orコメントアウトを外して）、

```
sudo yum install php-mysqli
sudo yum install php-mbstring
```

すれば直るとのことでしたのでやってみると、


![スクリーンショット 2014-11-21 0.04.11.png](https://qiita-image-store.s3.amazonaws.com/0/58014/6ae0c565-92d3-29f4-8d77-9672f5b8d90e.png)

ログイン画面に入れました！

ユーザ名を入力して、パスワードは特に設定していないのでそのまま実行をクリックすると、、、

弾かれました。どうやらパスワード設定のないユーザは入れないようです。

なので先日<a href="http://qiita.com/shell/items/917cf7c67a54d0d128dc">MySQLのユーザ管理</a>で学んだパスワード設定方法を駆使してパスワード設定すると、、、

無事にphpMyAdmin内に入れました。


以上、phpMyAdmin導入までの道でした。
最後までお読みいただきありがとうございました。
PlayFrameworkをElastic Beanstalkのt2.microのdockerにdeployする

`addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0-M1")`
`Native memory allocation (malloc) failed to allocate 715849728 bytes for committing reserved memory.`


build.sbtに下記を追記する。

```
def creteEbextensions: Unit = {
  val directory = new File("target/docker/.ebextensions")
  val file = new File("target/docker/.ebextensions/env.config")
  val contents =
    """commands:
      |  01_enable_sudo:
      |    command: "echo Defaults:root !requiretty >> /etc/sudoers"
      |    test: "test ! -e /home/ec2-user/swapdone"
      |  02_dd:
      |    command: "sudo dd if=/dev/zero of=/swapfile bs=1M count=1024"
      |    test: "test ! -e /home/ec2-user/swapdone"
      |  03_mkswap:
      |    command: "sudo mkswap /swapfile"
      |    test: "test ! -e /home/ec2-user/swapdone"
      |  04_swapon:
      |    command: "sudo swapon /swapfile"
      |    test: "test ! -e /home/ec2-user/swapdone"
      |  05_swapdone:
      |    command: "touch /home/ec2-user/swapdone"
      |    test: "test ! -e /home/ec2-user/swapdone"
    """.stripMargin
  IO.createDirectory(directory)
  IO.write(file, contents)
}

(stage in Docker) <<= stage in Docker andFinally creteEbextensions
```
コマンドを実行して出力を処理する(パイプ編) exec.Command()

```go
import "os/exec"
```
しておいて

```go
cmd := exec.Command("ls", "-l", ".")
pipe, err := cmd.StdoutPipe()
if err != nil {
  log.Fatal(err)
}
err = cmd.Start()
if err != nil {
  log.Fatal(err)
}
output := make([]byte, 1024)
for {
  len, err := pipe.Read(output)
  if err == io.EOF {
    break
  }
  if err != nil {
    log.Printf("Error: %s", err)
    break
  }
  println(string(output[0:len]))
}
err = cmd.Wait()
if err != nil {
  log.Fatal(err)
}
```
こんな感じ。
パイプを使ってコマンドの出力を読み込むときは、RunではなくStartを使う。
また、パイプへの入力を全て処理完了しない限り、Waitを呼び出してはいけない。

- func (c *Cmd) StderrPipe() (io.ReadCloser, error)
- func (c *Cmd) StdinPipe() (io.WriteCloser, error)
- func (c *Cmd) StdoutPipe() (io.ReadCloser, error)
SQLでデータベース探索

前回は```db.py``` を使ってデータベースを探索してみました。

* [db.pyでデータベース探索](http://qiita.com/atsaki/items/a3d0884915ae93c61597)

しかし、環境によってはインストールが難しい場合もありますし、それほど頻繁に探索するわけではないがちょっと情報が欲しいといった場合には直接クライアントで調べられた方がうれしいです。

というわけで、SQLで直接データベースを探索する方法を調べてみました。

## テーブル・カラムの検索

### MySQLの場合

```MySQL``` では```information_schema``` の中にデータベースの情報が格納されている。

#### テーブルの検索

```sql
SELECT * FROM information_schema.TABLE WHERE TABLE_NAME LIKE '%Customer%';
```

#### カラムの検索

```sql
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLUMN_TYPE FROM information_schema.COLUMNS WHERE COLUMN_NAME LIKE '%list%';
```

### SQLiteの場合

SQLiteの場合には```sqlite_master``` テーブルにテーブル情報が格納されている。
カラムの情報を直接検索することはできないが、```sqlite_master``` テーブルを表示させれば必要な情報は大体得られる。

```bash
$ sqlite3 -line chinook.sqlite 'SELECT name, sql FROM sqlite_master WHERE type="table" AND name LIKE "%list%"' 
 name = Playlist
  sql = CREATE TABLE [Playlist]
(
    [PlaylistId] INTEGER  NOT NULL,
    [Name] NVARCHAR(120),
    CONSTRAINT [PK_Playlist] PRIMARY KEY  ([PlaylistId])
)

 name = PlaylistTrack
  sql = CREATE TABLE [PlaylistTrack]
(
    [PlaylistId] INTEGER  NOT NULL,
    [TrackId] INTEGER  NOT NULL,
    CONSTRAINT [PK_PlaylistTrack] PRIMARY KEY  ([PlaylistId], [TrackId]),
    FOREIGN KEY ([PlaylistId]) REFERENCES [Playlist] ([PlaylistId]) 
		ON DELETE NO ACTION ON UPDATE NO ACTION,
    FOREIGN KEY ([TrackId]) REFERENCES [Track] ([TrackId]) 
		ON DELETE NO ACTION ON UPDATE NO ACTION
)
```

ちなみに、```db.py``` ではこのクエリでテーブル名、```PRAGMA TABLE_INFO(テーブル名);```でカラム名を取得し、一時的に```information_schema``` のようなテーブルを作成している。

## データの取り出し

### 先頭のデータを取り出す

```LIMIT``` を使う。

```sqlite3
sqlite> .mode tabs
sqlite> SELECT CustomerId, FirstName, LastName FROM Customer LIMIT 10;
1	Luís	Gonçalves
2	Leonie	Köhler
3	François	Tremblay
4	Bjørn	Hansen
5	František	Wichterlová
6	Helena	Holý
7	Astrid	Gruber
8	Daan	Peeters
9	Kara	Nielsen
10	Eduardo	Martins
```

### サンプリングする

データをランダムに並べ替えて先頭をとってくる。乱数は```sqlite3```では```RANDOM()```、```MySQL``` では ```RAND()``` で生成できる。

巨大なテーブルを対象に実行するとかなり負荷がかかるので注意。

```sqlite3
sqlite> SELECT CustomerId, FirstName, LastName FROM Customer ORDER BY RANDOM() LIMIT 10;
53	Phil	Hughes
14	Mark	Philips
34	João	Fernandes
32	Aaron	Mitchell
7	Astrid	Gruber
58	Manoj	Pareek
13	Fernanda	Ramos
18	Michelle	Brooks
10	Eduardo	Martins
12	Roberto	Almeida
```

## db.pyのクエリから学ぶ

```db.py``` が使っているクエリを見ると、各データベースでどのようなクエリを実行すれば良いか分かる。

https://github.com/yhat/db.py/tree/master/db/queries

## まとめ

SQLだけでも思ったより簡単にテーブルを探索できることがわかりました。大体のケースではSQLだけで十分かもしれません。

データベースの種類ごとにクエリが異なるので```db.py``` を使っていると同じコマンドで操作できて便利そうです。
GitHub入門　④FirstCommit（Windows版）

最初のファイルを登録してリポジトリへ記録を開始することをFirst Commitと言うようです（間違ってたら教えてください。）

１．「＋」をクリックし、「Clone」を選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/3f4a8dab-35fc-2774-c388-8ca78056a3f5.png)

２．リポジトリを選択し、「Clone [リポジトリ名]」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/bc204e4e-5875-915a-0193-3727e4698565.png)

３．リポジトリの情報をローカルに保存するときの場所を選択し、「OK」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/0736d4e7-7bcd-e107-e1ad-f540d312762c.png)

４．選択したリポジトリに対応した画面が表示されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/2bd2222b-f2c3-6a8b-7945-1328fb476105.png)

５．リポジトリ名を右クリックし、「Open in Explorer」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/196b4039-9cdb-575b-68f3-1985a4d39d7c.png)

６．保存場所が開かれます。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/96038253-877f-602f-9e42-159c2c69db72.png)

７．ここに「sample.txt」を作成し、内容に「Sample」と記述して保存します。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/033247c6-2054-b9fa-1a55-ed67d06fbba3.png)

８．画面上に変化が・・・「Summary」、「Description」を入力しないといけないっぽいです。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/ca3f7ae8-0457-5384-b172-61d56e185f91.png)

９．入力を行い、「Commit to master」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/cfd083cb-72ca-bf8f-be63-a38f72145d32.png)

１０．何かできたっぽいです。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/e178c80b-a434-e70a-166d-2c04a16d4c73.png)


１１．これだとローカルのリポジトリに反映？しただけなようなので、右上の「Publish」をクリックします。

１２．これでインターネット上のGitHubにも反映されたようです。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/9cf550a6-3e7a-1ddf-93d8-c6e20d6b92cf.png)

１３．リポジトリ名を右クリックし、「View on GitHub」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/b6906960-7b95-e245-a917-61a25b2e6212.png)

１４．無事登録されたみたいです！
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/518af584-86d6-3e97-21ba-318f667ff0c3.png)
[Node.js] fd から fs.WriteStream を作成する

API DOCS には記載されていないが、`fs.createWriteStream()` の options に fd を渡すことができる。その際 path には `null` でも渡しておけばよい。

```javascript
fs.createWriteStream(null, {fd: 1});
```

[node/fs.js at 8d045a30e95602b443eb259a5021d33feb4df079 · joyent/node](https://github.com/joyent/node/blob/8d045a30e95602b443eb259a5021d33feb4df079/lib/fs.js#L1635)

```javascript
// lib/fs.js
  this.fd = options.hasOwnProperty('fd') ? options.fd : null;
```

[File System Node.js v0.10.33 Manual & Documentation](http://nodejs.org/api/fs.html#fs_fs_createwritestream_path_options)
Yosemiteの日本語入力をちょっとことえり風にする。

##「JapaneseIM」のキーアサインをちょっと「ことえり」風にします。

OSX Yosemiteから日本語入力プログラムが「ことえり」から「JapaneseIM」というのにかわりました。
そんなに日本語入力にはこだわりはないんですが、一つだけ困ったことがあったので変更方法のメモです。

変換中の文字列の文字種を切り替えるのに、「ことえり」は「option+**s**」で半角英数になったんですが、「JapaneseIM」は「option+**a**」なんですよね。ここを変更します。


##変更するファイル
変更するファイルはこれです。コピーをとっといてください。（要sudo）

```
/System/Library/Input Methods/JapaneseIM.app/Contents/Resources/KeySetting_Default.plist
```

このファイルの1496行目あたりです。
「option+&apos;a&apos;」を「option+&apos;s&apos;」に変更します。

```lang:KeySetting_Default.plist
<key>option+&apos;s&apos;</key>
<dict>
	<key>command</key>
	<string>transliterate_roman</string>
</dict>
```
diff結果はこんな感じです。

```lang:diff
%diff KeySetting_Default.plist KeySetting_Default.plist.org
1496c1496
< 			<key>option+&apos;s&apos;</key>
---
> 			<key>option+&apos;a&apos;</key>

```
PyCharmのフォントがおかしい、文字化けするときの対処

自分用に、すぐ忘れるのでメモ。

こんな画面が出てきて悲しい気持ちになる。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/28404/a1d6757f-02cd-3c97-aa19-1f96d6bfced3.png)


そんなときは、PyCharmをインストールしたフォルダの中にあるファイルに1行追加すれば良い。

対象ファイル：
JetBrains/PyCharm X.X/bin/pycharm.exe.vmoptions

追記するコード
-Dawt.useSystemAAFontSettings=on

PyCharmを終了。追記して保存
![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/28404/07a03aeb-d6ff-cf86-5ab4-6a3759a15ed1.png)

これで無事にコードがかける。嬉しい。
Ruby | Rubular で ruby の正規表現を検証しながら作成 #ruby #正規表現

# Ruby | Rubular で ruby の正規表現を検証しながら作成
## 概要
Rubular で ruby の正規表現を検証しながら作成します
## Rubular とは？
Ruby の正規表現 Web エディタ。
[Rubular](http://rubular.com/)

![rubular1.png](https://qiita-image-store.s3.amazonaws.com/0/43480/656685d8-333b-7c5f-a138-8c62702772a2.png)

## 利用サンプル
### ケース1: シンプルな正規表現
~~~ruby
/h.ge/ =~ 'hoge'
/h.ge/ =~ 'hige'
/h.ge/ =~ 'hage'
/h.ge/ =~ 'HoGe'
~~~

![rubular2.png](https://qiita-image-store.s3.amazonaws.com/0/43480/db379a8c-17b9-04ea-d8b9-badf08c4db89.png)
### ケース2: シンプルな正規表現(マッチせず)
~~~ruby
/h.ge/ =~ 'noy match'
~~~
※no match にしたつもりがタイポしてた。再キャプチャがめんどかったのでそのまま。

![rubular3.png](https://qiita-image-store.s3.amazonaws.com/0/43480/b41a9dca-6f6a-4dee-4e94-c9eb6d1184e8.png)
### ケース3: グループ化
~~~
/^(.+?),(\d{1,3}?)$/ =~ "tanaka,23"
/^(.+?),(\d{1,3}?)$/ =~ "suzuki,43"
/^(.+?),(\d{1,3}?)$/ =~ "monster,1234"
/^(.+?),(\d{1,3}?)$/ =~ "not_exist_comma_line43"
~~~

![rubular4.png](https://qiita-image-store.s3.amazonaws.com/0/43480/bdbeec02-3f75-0179-7785-659e47061ac9.png)
### ケース4: 名前付きキャプチャ
~~~
/^(?<name>.+?),(?<age>\d{1,3}?)$/ =~ "tanaka,23"
/^(?<name>.+?),(?<age>\d{1,3}?)$/ =~ "suzuki,43"
/^(?<name>.+?),(?<age>\d{1,3}?)$/ =~ "monster,1234"
/^(?<name>.+?),(?<age>\d{1,3}?)$/ =~ "not_exist_comma_line43"
~~~
![rubular5.png](https://qiita-image-store.s3.amazonaws.com/0/43480/79f92bdd-a74b-36d6-5f57-7e4459cb3c09.png)


## 参照
[Rubular](http://rubular.com/)
AWSのセッションストレージ冗長構成

オンプレミス環境で稼働しているWebサービスをAWSに移行するべく色々と学習中なのですが、出来るだけコストをかけずに「冗長性」「可用性」を確保しようとすると、Developers.IOさんの下記の記事のようになるみたいですね。

[【AWS】VPC環境構築ノウハウ社内資料 2014年4月版](http://dev.classmethod.jp/cloud/aws/vpc-knowhow-2014-04/)
# セッションストレージの冗長性は？
## memcached
上記の記事では触れられていませんが、大抵のWebサービスではセッションストレージを使用すると思います。
memcachedをセッションストレージとして使用しているWebサービスの場合、
AWSでもElastiCacheのエンジンとしてmemcachedを使えばアプリケーションのコードを書き換えることなく
そのまま移行が可能ですが、memcachedでは冗長性を確保することが出来ません。

[本当は怖いMemcached](http://qiita.com/taruhachi/items/a844bf373623991873ff)

## Redis
ElastiCacheのエンジンにRedisを使用してMulti-AZ構成にすれば冗長性が確保できるようなので、
アプリケーションのコードを書き換えるコストを確保出来るのであれば、この方式が第一候補になりそうです。

[Amazon ElastiCache (Redis)のMulti-AZを構成する](http://dev.classmethod.jp/cloud/elasticache-redis-multi-az/)

## MySQL memcached plugin
もしくは、RDSでMySQL5.6を使用出来るのであれば、memcached pluginを使用するという方式もありますね。
DBの負荷に余裕がある場合は、アプリケーションコードの変更が不要ということで、こちらも選択肢としては魅力的です。

[Amazon RDS MySQL 5.6と新機能を試してみた](http://dev.classmethod.jp/cloud/aws/amazon-rds-mysql56-new-features/)

# とりあえずの結論
既存のWebサービスをAWSに移行する場合で、

* セッションストレージにmemcachedを使っている
* DBにMySQLを使っており、バージョンが5.6以上。(もしくは5.6以上への移行が可能)
* メインのDBへの負荷にまだ十分余裕があり、RDSでもスペックの高いインスタンスを使用可能である。

という条件が揃うようであれば、セッションストレージにはMySQL memcached pluginを選択するのが良さそうです。

なにぶんAWS初心者なので、認識が間違っている可能性も高いです。
誤りがありましたら是非ご指摘頂けますと幸いです。
Elixir | Mix | Environments #elixir

# Elixir | Mix | Environments #elixir
## 概要
Elixir に付属している CLI Tool Mix は Environments をサポートしています。
## Environments
デフォルトでは

* dev  :`mix compile` の実行時など
* test :`mix test` の実行時など
* prd  :本番環境

が用意されています。
環境変数 MIX_ENV を設定すると、その内容を `Mix.env` で取得できます。

## Mix.env
デフォルトではすべての環境が同じ設定になっています。
個別の環境情報を設定するには、 mix.exs の中で
Mix.env を参照して設定を行う必要があります。

## サンプル
### プロジェクトのひな型生成
~~~bash
$ mix new mix_env
* creating README.md
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/mix_env.ex
* creating test
* creating test/test_helper.exs
* creating test/mix_env_test.exs
$ tree
.
`-- mix_env
    |-- config
    |   `-- config.exs
    |-- lib
    |   `-- mix_env.ex
    |-- mix.exs
    |-- README.md
    `-- test
        |-- mix_env_test.exs
        `-- test_helper.exs
~~~

### mix.exs の設定

~~~elixir
defmodule MixEnv.Mixfile do
  use Mix.Project

  def project do
    [app: :mix_env,
     version: "0.0.1",
     elixir: "~> 1.0.0",
     deps: deps,
     output_env: output_env(Mix.env)]
  end

  def application do
    [applications: [:logger]]
  end

  defp deps do
    []
  end

  defp output_env(:prod), do: IO.puts "prod"
  defp output_env(:test), do: IO.puts "test"
  defp output_env(:dev), do: IO.puts "dev"
end
~~~

### env の動作確認

~~~bash
$ mix test
1dev
test
Compiled lib/mix_env.ex
Generated mix_env.app
.

Finished in 0.03 seconds (0.03s on load, 0.00s on tests)
1 tests, 0 failures

Randomized with seed 761300
vagrant@precise64:~/hoge/sample/mix_env/mix_env$ mix compile
dev
Compiled lib/mix_env.ex
Generated mix_env.app
vagrant@precise64:~/hoge/sample/mix_env/mix_env$ mix run -e "MixEnv"
dev
vagrant@precise64:~/hoge/sample/mix_env/mix_env$ mix run -e "IO.puts :hoge"
dev
hoge
$ MIX_ENV=prod mix compile
warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)
prod
Compiled lib/mix_env.ex
Generated mix_env.app
~~~

## 参照
[Elixir Official | Mix | Environments](http://elixir-lang.org/getting_started/mix_otp/1.html#1.4-environments)
GitHub入門　③windowsにGitHubを入れてみる（2014年11月版）

１．次のURLにアクセスする。
　　https://windows.github.com/

![image](https://qiita-image-store.s3.amazonaws.com/0/47012/ffbad333-104b-1f29-fad3-d2fc371cd49e.png)

２．「Download GitHub for Windows」をクリックする。ファイルを保存するか実行してください。

３．「インストール」をクリックする。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/2d8b1ed6-3113-7a89-c4eb-2d1f074bb644.png)

インストールが開始します。Windowsって分かりやすいですね～
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/88acc7f0-fea7-51b7-d4e2-dcf0c7f89229.png)

４．GitHubの登録情報を入力し、「Log in」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/834e895b-62ba-369d-e3d0-eda2c7cb64fc.png)

５．E-mailを入力して、「Continue」をクリックします。（実際は勝手に出てきました）
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/0931a487-b825-edfc-4a09-a263006520eb.png)

６．「Skip」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/00cdcd1d-0c97-ef82-5ab3-c4dd91cb7b33.png)

７．こんな画面が出てきました。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/e7022be8-c60c-285e-619a-ed8b88a049b6.png)

８．「＋」をクリックし、「Clone」を選択するとインターネット上に作ったものが見れるようです。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/4eddc79d-2534-2282-c961-60ef279c30e8.png)
HTMT仕事でのメモ


##2014_11_17業務内容とMemo
###業務内容
1. 重複管理チェックソフト作成
	* 詳細　　　　　：google apps scriptで作った
	* 学んだ事　　　：google apps script
	* 次に活かせる事：不明（やっぱり、IT系って効率的な構築やルールを守ると言う考え方大事、そしてユーザーとの意思疎通。何か作ってる途中に、こうすれば良いのにって、思ってしまう。）

	
###Memo


####作るにあたって参考にしたサイト

[正規表現](http://rfs.jp/sb/perl/02/09.html)
[google API](https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet)
[Google Apps Scriptリファレンス](http://nevernoteit1419.blogspot.jp/2012/07/blog-post_24.html)

####仕事で感じた事

* サイト構築が分かりずらい、作業するときにどう手をつけていいか分からなかった(ホームページ作成)
* google apps scriptについて、手軽に理解出来るサイト、本が欲しい。
	* 探した結果見つかった参考サイト
		* [逆引きGoogle Apps Scriptリファレンス](http://www.bmoo.net/archives/google-apps-script-refference)
		* [ネーバーノートまとめ](http://www.bmoo.net/archives/google-apps-script-refference)
		* [Google Apps Scriptクイックリファレンス（本）](http://www.amazon.co.jp/Google-Apps-Script%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-%E6%A8%AA%E5%B1%B1-%E9%9A%86%E5%8F%B8/dp/4798036757)



１について、重複管理チェックソフト作成のソース



```js()
function duplication _check() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// var objCell = sheet.getActiveCell();
var count=0;

// var gyou = objCell.getRow()
var gyou = GetActiveCell(sheet);

var org_book = sheet.getRange("B"+gyou).getValue();
fomart(sheet,gyou);

var last_index = gyou

for (var i = 1; i <= last_index; i++) {
var search_book = sheet.getRange("B" + i).getValue();
fomart(sheet,i);
if((gyou != i) && (org_book == search_book)) {
count=1;
Browser.msgBox("B "+ i+"にこの書籍はすでにあります");
break;
}
}

if(count == 0)Browser.msgBox("B "+ i+"この書籍は重複していませんでした");
}

function fomart(sheet, i){
var test = sheet.getRange("B"+i).getValue();

var res = test.replace(/[Ａ-Ｚａ-ｚ０-９]/g, function(s) {
return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
});

sheet.getRange("B"+i).setValue(res);

}

function onOpen(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menus = [{name: '重複チェック', functionName: 'hon'},
];
ss.addMenu('便利メニュー', menus);
}

function GetActiveCell(sheet) {

var objCell = sheet.getActiveCell();

var gyou = objCell.getRow()
return gyou
}
```
「Railsでシステム作ってます。MVCでMとCの境目がよくわかりません（＞＜）」への回答を試みる

# これがわからない理由

恐らくあなたは

* コントローラが依存しているHTTPの世界の要素についての理解
* 「疎結合にする」という目

のどちらかを持っていないと想像できる。

# 簡単な解説

## コントローラについて
コントローラはHTTPの仕様に依存したものが入っている。例えば下記のようなものだ。

 * リクエスト（GET引数やPOST引数、Header、etc...）
 * レスポンス（WEB用のHTMLの描画、リダイレクト、etc...）
 * セッション
 
つまり、コントローラは「このシステムがWEB用のシステムである」という事実に立脚している。

## 疎結合について
システムには変更がつきものだ。だからなるべく変更しやすさを残しておく設計が望ましい。例えば

* 今までPC用のViewしか無かったが、これからはケータイ用のViewも必要になる。
* これまで人が画面側で入力していた値があったが、これからはその取得がセッションからも行われるようになる。


などなど、他にも色々可能性がある。

そういった時に「システムの重要な処理」と「そうでもない処理」が分かれていることは重要な要素だ。「ここを触ってもシステムが根底から壊れることはない」という部分なら思い切った変更もできる。

そして、モデルで行われるロジックの実行はシステムの根底を形作る重要な部分だ。なるべく些細な変更の影響を受けないことが望ましい。

最もドラスティックな変更は「今まではWEBのシステムに乗っけていたけれど、これからはWEBではなくなります。」というような変更で、その場合はこれまで使っていたコントローラを全て捨てることになる。それでもモデルだけはそのまま再利用できるのが望ましい。

# どうしたら良いのか

* モデルは「もしもこのシステムがWEBじゃなかったら」と考えた時でも変更が発生しない場所。
* コントローラは「WEBであるから必要な要素」が入っている。

と考えると解りやすい。そして「出来る限りモデルへ寄せる」。モデルはコントローラの処理に比べて再利用性が高くなる（HTTPや外部への依存性が低くなる傾向が強いから）ので、できるだけモデルへ寄せると将来の変更に対して柔軟なシステムになる。

# ひと昔前だと
ここに「モデルのテストしやすさ」の話を絡めるのだが、最近はコントローラレベルのテストもかなりやりやすいと思うので、あえて話題にはしなかった。人によってはこの話のほうが響く場合もあるだろう。

# おしまいに
脊髄反射で書いているのでなんか抜け漏れとか、心余り過ぎて言葉足らずとかあるかも知れないけど笑って許してちょーだい。
GitHub入門　②リポジトリを作成する（2014年11月版）

リポジトリっていうのを作りましょうってHPに書いてあるので、作ってみることに。

リポジトリとは、ファイルやディレクトリの変更履歴を記録・管理するものらしいです。

１．画面の右上「＋」をクリックし、「New repository」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/90f69b17-0c6c-f1e4-ef20-e9051499174c.png)

２．各種情報を入力し、「Create repository」をクリックします。

|項目| 解説 |
|:-----------|:------------|
| Owner |【必須】リポジトリの所有者 |
| Repository name |【必須】任意名称 |
| Description | このリポジトリは何かと言う事の要約を任意で記述する |
| Public/Private | 【必須】皆で管理する／自分だけで管理する　かを選ぶ |
| Initialize this repository with a README | （調べます・・・） |
| Add .gitgnore: |　githubで管理しないファイルを選ぶっぽいです。「none」でいってみます|
| Add a license: | ミドルウェアのライセンスを選ぶっぽいです。「none」でいってみます|


![image](https://qiita-image-store.s3.amazonaws.com/0/47012/69df3757-29ee-949d-6c3e-a09419ae3975.png)

３．なんか初期化しなさいって出てきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/68c74924-e372-be15-a86a-ed134bbde105.png)
Dropbox API（iOS版）についてのメモ

iOSアプリでDropbox APIを使用したのでメモ

## 実装した機能
iOSアプリのDBファイルとアプリで保存した画像ファイルをDropboxにバックアップして、Dropboxから復元できるようにする

## Dropbox APIについて

* 利用できるAPIにはいくつか種類がある(ファイルの同期、DBの同期など
* APIを利用するためにはkey, secretのセットが必要
* keyを複数のアプリで使い回すことはできない
* keyは無料

## API keyのバージョンについて(開発用と本番用）
* keyにはdeveloper用とproduction用の2種類がある
* developerは100人のユーザ端末までしかAPIを利用できない
* productionは無制限

* どちらも無料だが、developer statusをproduction statusに昇格するためにはDropboxの審査が必要
* 審査には数日営業日かかる
* 審査の基準を満たす必要がある
* 一旦production statusにしてしまうと、アクセス権等の設定情報が変更できなくなるので注意する


## iOSアプリ審査について

アプリ上でDropboxにログインした際に、ストレージを購入・拡張できてしまうとリジェクトされる

## Dropbox API利用ガイド
##### 公式サイト
https://www.dropbox.com/developers/reference/branding
https://www.dropbox.com/developers/reference/tos


* Dropbox api consoleで作成したアプリ名は実際のアプリ名を含んでいる必要がある（または同じ）
* アプリ名はDropboxと類似の名前は避ける
* Dropboxのロゴ、名前を使用する際はDropboxのpartnerだと誤解される表現は避ける
* Dropboxのスペルを間違えない(大文字・小文字も含めて）


## その他
##### エラーが出たとき
http://safx-dev.blogspot.jp/2011/12/xcode42dropbox-sdk-v1.html

##### 参考文献
* Dropbox SDKの利用について 
http://atushiyamazaki.blogspot.jp/2012/10/o0-how-to-use-dropbox-sdk-for-ios-1-0o.html

* Dropbox SDKに関するApple審査リジェクト 
http://venturebeat.com/2013/02/08/9-surprising-reasons-mobile-apps-get-rejected-from-the-apple-app-store/
GitHub入門　①ユーザアカウントを作成する（2014年11月版）

名前だけは聞いていたが、使ったことが無かったため勉強がてらやってみます。

１．GitHubのページにアクセスする。
　　https://github.com/

![image](https://qiita-image-store.s3.amazonaws.com/0/47012/9c525db3-6620-5822-c171-d9d9360ef652.png)

２．「Sign up for GitHub」をクリックします。

３．アカウント情報を埋めて、「Create an account」をクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/c9f63bda-2103-ed92-5c4b-504958f7a3e4.png)

４．料金プランを選ぶ画面に移行します。デフォルトが無料枠のようなので、
　　このまま「Finish sign up」ボタンをクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/4556176b-6077-4c92-03f2-02b3b923eb2e.png)

５．これでできたっぽいです
![image](https://qiita-image-store.s3.amazonaws.com/0/47012/a1a25de2-dd0f-8ddb-7f44-b26acc62bd06.png)

とりあえず、アカウントは出来たようです