OmniAICreator/Qiita-1.07M huggingface dataset:
Proxy経由でCentOS6のpipを使えるようにする

# 結論
`easy_install`を使って`pip`を更新すると解決する。

# CentOS 6のpipの問題
CentOS 6においてyumで入れられるpython-pipは、Proxy経由のsearchが通らないという問題がある。

# なんとかしてみる

まず普通にpython-pipパッケージをインストールする。このとき依存パッケージとしてpython-setuptoolsが導入される

```bash:pip導入
yum install -y python-pip
```

`easy_install`を使って、`pip`を更新する。

```bash:pip更新
HTTP_PROXY=http://user:pass@proxy.example.com:port HTTPS_PROXY=$HTTP_PROXY easy_install --upgrade pip
```

おもむろに検索してみる

```text
pip search Tinkerer --proxy http://user:pass@proxy.example.com:port

Tinkerer                  - Sphinx-based blogging engine
sphinxjp.themes.tinkerturquoise - Two column blogging theme tool for Tinkerer, based on turquoise color.
sphinxjp.themes.tinkerbelizehole - A single column blogging theme tool for Tinkerer, based on belizehole color.
Tinkerer-Localpost        - Localhost your Tinkerer blog
rutherford                - Atom feed for Tinkerer
sphinxjp.themes.tinkerbelizeholesidebar - A two column blogging theme tool for Tinkerer, based on belizehole color.
sphinxjp.themes.tinkerpress - A tinkerer theme like some famous blogging tool.
sphinxjp.themes.tinkeralizarin - A single column blogging theme tool for Tinkerer, based on alizarin color.
Twinkerer                 - tinkerer small extension to use twitter api.
```

これで勝つる
git log よく使うオプションまとめ

`git log`はオプションがありすぎて全然使いこなせていなかったので
よく使いそうなものだけまとめた。

# 表示形式
`git log --oneline --graph --decorate`でそこそこ見やすく表示される。
自前のaliasが設定されていない環境でgitを使うときに頭に入れておくとよいかも。

自分は以下のようなaliasを設定している。

```gitconfig
[alias]
	graph = log --graph --date=short --pretty=\"format:%C(yellow)%h %C(cyan)%ad %C(green)%an%Creset%x09%s %C(red)%d%Creset\"
```

## ファイル毎の削除、追加行数を表示
```sh
$ git log --numstat
```

## 変更したファイルを表示
```sh
$ git log --name-status
```

# コミットの絞り込み

## 日付で
```sh
$ git log --since="4 days ago" --until="2015/01/22"
```

## 表示数
```sh
$ git log -n 10
```

## 特定のファイルのみ
```sh
$ git log -- path/to/*.sh
```

## コミッターで
```sh
$ git log --author='take4s5i'
```

## コミットログで
```sh
$ git log --grep='typo'
```

## マージコミットのみ
```sh
$ git log --merges
```

## マージコミットを除く
```sh
$ git log --no-merges
```

## マージコミットのマージ元を非表示
```sh
$git log --first-parent
```

## 全ブランチ
```sh
$ git log --all
```
rbenvを使用したRuby環境構築 (Raspbian)

Raspberry Pi(Raspbian)にrbenvを使用してRuby環境を構築したので、手順メモを残します。

と言っても、[Ruby - rbenv のインストール (Linux Mint) - Qiita](http://qiita.com/tsubu-mustard/items/3f818bf9831a4a934c5a)に従っただけですが。

# 完了状態

* Ruby 2.2.0が使用可能。

# 作業手順

`rbenv`を`git clone`します。

```bash
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
```

".bashrc"に追記します。

```bash:.bashrc
# rbenv
PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
```

".bashrc"を再読み込みします。

```bash
$ source .bashrc
```

`ruby-build`を`git clone`します。

```bash
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

依存パッケージをインストールします。

```bash
$ sudo aptitude install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
```

インストールできるRubyのバージョンを確認します。

```bash
$ rbenv install --list
```

Rubyをインストールします。すごく時間がかかったので、`screen`の中で行いました。

```bash
$ sudo rbenv install 2.2.0
$ sudo rbenv rehash
$ rbenv versions
```

`rbenv versions`でインストールしたバージョンが表示されるはずです。
デフォルトで使用するRubyのバージョンを設定します。

```bash
$ rbenv global 2.2.0
$ ruby -v
```

`ruby -v`で設定したバージョンが表示されるはずです。

# 参考

* [sstephenson/rbenv](https://github.com/sstephenson/rbenv)
* [Home ・ sstephenson/ruby-build Wiki](https://github.com/sstephenson/ruby-build/wiki)
ElmのHtmlライブラリのメモ

#elm-lang/html : Html

elm-lang/htmlパッケージは、ElmでHTMLを作るときの基本のパッケージになります。

HTMLのような自然な記述で書くことが出来ます。

使用例ハローワールド

```hs
import Html exposing (div,text)

main =
  div [] [text "Hello World"]
```

Htmlライブラリは[virtual-dom](https://github.com/Matt-Esch/virtual-dom)（仮想DOMのライブラリ）をElm用にそのままラップしたものなので、仮想DOMの機能を使うことが出来ます。

クリックできるHTMLなど、イベント系を使うときはElm Architectureのドキュメントも参考にしてみてください。

使い方の参考になるよい作例として、Elm公式のexsampleページや、Elm公式のTODOリスト[evancz/elm-todomvc](https://github.com/evancz/elm-todomvc)があります。

パッケージのインストールコマンド

```
elm-package install elm-lang/html --y
```



##Htmlモジュール

Htmlモジュールは、基本になるモジュールでHtml型があって、divタグなどのHTMLを作る関数があります。

例えばdiv関数は以下のように定義されています。

```hs
div : List (Attribute msg) -> List (Html msg) -> Html msg
div =
  node "div"
```

一引数目で、属性を設定できます。（属性を作る関数はHtml.Attributesモジュールにあります。）
二引数目は、子供のHtmlをListで渡すことができます。  


hello worldというhtmlを作るコードです。

```hs
import Html exposing (div,text)

hello =
  div [] [text "hello"] ---textは何もタグで囲まれていない文字列Html a を作る

world =
  div [] [text "world"]

main =
  div [] [ hello
         , world]

```

結果のイメージになります。

```html
<div>
    <div>hello</div>
    <div>world</div>
</div>
```

例えばid属性があるinputタグを作るには以下のようになります。

```hs
import Html exposing (input)
import Html.Attributes exposing (id)

main = input [id "Input"] [] ---id は id属性を作る関数
```

```html
<div>
  <input id="Input">
</div>
```

ほかにもいろんなタグを作る関数が揃ってます。


##Html.Attributesモジュール


HTMLに属性を付けるには、Html.Attributesモジュールにある関数で作ることができます。

class属性、id属性をつけてみます。

```hs
import Html exposing (div)
import Html.Attributes exposing (class,id)

main : Html
main = div [class "test"  
           ,id "a"]
           []
```

結果HTMLイメージ

```html
<div>
    <div class="test" id="a"></div>
</div>
```

上記のようにclass,id属性をつけて、別途CSSファイルを読みこめば、ちゃんとCSSも適用されます。

CSSは、Html.Attributesモジュールにあるstyle属性を使うと、HTMLに直接インラインでCSSを付けることができます。

```hs
style : List (String, String) -> Attribute msg
```


##Html.Eventsモジュール

Html.Eventsモジュール内ある関数を使って、Htmlにイベントの属性を付けることが出来ます。

例えばクリックイベントを付けるにはonClick関数を使います。

```elm
onClick : msg -> Attribute msg
onClick msg =
  on "click" (Json.succeed msg)
```

onclick関数は一引数目にMsg型のデータ構築子を渡す必要があります。イベントを付けたHtmlに発火が起きると、Msg（メッセージ）がupdateに渡ります。

```haskell
type Msg = Click 
         | Enter 

hello : Html Msg
hello = 
    div [onClick Click] [text "hello"]     ---Clickすると……

update msg model = 
    case msg of 
         Click -> ...                      ---updateにMsgが渡るので、ここの処理が起きる
```


##Html.Lazy

Html.Lazyモジュールにあるlazy関数を使うことで、仮想DOMの力を発揮させて、効率の良い描画ができます。
指定した値が変化した時だけ、その部分を再描画する事ができます。

```hs
lazy : (a -> Html) -> a -> Html
lazy = VirtualDom.lazy
```

一引数目にviewの関数、二引数目の値が変更した時だけviewを更新します。

##外部ツール

[HTML to Elm](https://mbylstra.github.io/html-to-elm/)はHTMLをElmコード(現在Elm0.17)に変換します。Elm0.17なので多少直す必要があります。atomプラグインとしても公開されています。
MacOS側でdockerを使う(CoreOS,Vagrant使用)

本記事では

* VagrantでCoreOSを起動し
* CoreOSのdockerを
* brewでインストールしたMacOS側のdockerコマンドで操作する

までの手順を説明する。

# CoreOSをインストール、起動する
CoreOSはVagrantからの起動が可能なのでそれを使う。
Vagrantfileは下記のgitで取得できる。

```lang:shell.sh
git clone https://github.com/coreos/coreos-vagrant.git
cd coreos-vagrant
```

デフォルトだとCoreOS側のIPは172.17.8.100から取られていく。
下記のように自分で変えても構わない。

```lang:Vagrantfile
      #ip = "172.17.8.#{i+100}"
      ip = "172.17.8.123"  
```

```vagrant up```でCoreOSのイメージを取得、起動する。

```lang:shell
vagrant up
vagrant ssh
```

# CoreOSのdockerの設定
CoreOSは起動するとデフォルトではUnix socketでの接続のみを受け付ける設
定になっている。[Customizing docker](https://coreos.com/docs/launching-containers/building/customizing-docker/)
を参照してdockerをTCP socketで待ち受けるように修正する。

systemdの為にdocker-tcp.socketを/etc/systemd/systemに作成し、

```lang:/etc/systemd/system/docker-tcp.socket
[Unit]
Description=Docker Socket for the API

[Socket]
ListenStream=2375
BindIPv6Only=both
Service=docker.service

[Install]
WantedBy=sockets.target
```

それをsystemctlで有効にする。

```lang:shell
sudo systemctl enable docker-tcp.socket
sudo systemctl stop docker
sudo systemctl start docker-tcp.socket
sudo systemctl start docker
```

CoreOS側で下記のように実行してエラーが出ないことを確認するとよい。

```
core@core-01 ~ $ docker -H tcp://127.0.0.1:2375 ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
```

# MacOS側でのdockerコマンドのインストール
ここではhomebrewを使ってインストールする。

```
brew install docker
```

インストールしたら'-H'オプションを使ってCoreOSのdockerに接続できる。
```
docker -H tcp://172.17.8.123:2375 ps
```

環境変数DOCKER_HOSTにIPを指定することで'-H'オプションを使わなくても接
続が可能である。

```
export DOCKER_HOST=tcp://172.17.8.123:2375
```
dstat の darkgray が見づらかったので...

```diff
--- dstat.back	2015-01-23 14:23:26.911928403 +0900
+++ dstat	2015-01-23 14:24:21.237011050 +0900
@@ -1608,11 +1608,11 @@
             'error': ansi['white'] + ansi['redbg'],
             'roundtrip': ansi['darkblue'],
             'debug': ansi['darkred'],
-            'input': ansi['darkgray'],
+            'input': ansi['white'],
             'text_lo': ansi['gray'],
-            'text_hi': ansi['darkgray'],
-            'unit_lo': ansi['darkgray'],
-            'unit_hi': ansi['darkgray'],
+            'text_hi': ansi['white'],
+            'unit_lo': ansi['white'],
+            'unit_hi': ansi['white'],
             'colors_lo': (ansi['red'], ansi['yellow'], ansi['green'], ansi['blue'],
                           ansi['cyan'], ansi['white'], ansi['darkred'], ansi['darkgreen']),
             'colors_hi': (ansi['darkred'], ansi['darkyellow'], ansi['darkgreen'], ansi['darkblue'],
```

https://gist.github.com/iwai/fd2cb7eb6f9e6e3af6c5

![スクリーンショット 2015-01-23 14.42.54.png](https://qiita-image-store.s3.amazonaws.com/0/4725/4a01c6d5-dcae-2094-bc31-165515eae5b4.png)
Google Spread Sheetからplistを作った手順

# はじめに
iPhoneアプリのデータをスプレッドシートで管理する場面があると思います。
それを利用するために一度plistに変換しなければ...という時に。

今回Google Spread Sheet上の約5000件のデータをplistに変換したのでその手順を共有します。

テキストエディタはCotEditorを使用したのですが
私のマシンの低性能のためかしばしば固まりました。

### 今回作成したplistの形式
dictionaryのarrayを想定しています。

```lang:plistの形式
<array>  
  <dict>
    <key>keyX</key><string>value1</string>
    <key>keyY</key><string>value2</string>
    <key>keyZ</key><string>value3</string>
  </dict>
  <dict>
    <key>keyX</key><string>valueA</string>
    <key>keyY</key><string>valueB</string>
    <key>keyZ</key><string>valueC</string>
  </dict>

  ...

</array>
```

# シート上でデータ生成
対象のシート上で作業しました。

左端に列を挿入。

データ部分が2行目からだったので、
2行目の左端セルに以下のような数式を設定。

```lang:セルの数式
=CONCATENATE("  <dict>",CHAR(10),"    <key>keyX</key><string>",D2,"</string>",CHAR(10),"    <key>keyY</key><string>",E2,"</string>",CHAR(10),"    <key>keyZ</key><string>",F2,"</string>",CHAR(10),"  </dict>")
```

セルを選択しテキストエディタにコピーして、想定した内容が入ってきているか確認します。
(ダブルクオートが先頭と末尾についてますが、それは後の工程で消します)

問題なかったら、あとはそのセルを選択し左端の列全体にペースト！
数式内のセル指定部分は自動で変わっているので大丈夫です。

そして左端列全体をコピーしテキストエディタにペーストします。

# テキストエディタで整形

ここで一度txt形式でファイルを保存。
CotEditorでは自動でカラーリングしようとして固まったりしますが
txt形式にしておくことで抑制します。

### 「"」除去
複数行のセル内容をコピペすると「"」が付加されているので
「"    \<dict>」を「    \<dict>」に全件置換。
「    \</dict>"」を「    \</dict>」に全件置換。

### 「&」を「\&amp;」に置換
「&」を「\&amp;」に全件置換。

### 先頭と末尾にplistヘッダとarrayタグを付加

```lang:先頭
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>

...

```

```lang:末尾
...

</array>
</plist>
```

# おわりに
こういった作業ですと「スクリプト化しろ」「自動化しろ」と怒られそうですが
まずは手動でやる手順として、参考にしてください。

よろしくお願いします。

## 別の方法
Excel又はcsvをplistに変換するWebサービスを作成した方がいました。
試しましたが処理が失敗してしまいました。
[Excel and CSV to Apple Plist online converter](http://exceltoplist.herokuapp.com/)

こちらは試していませんが、着地点はここかもしれません。
[【Objective-C】GoogleDriveのSpreadsheetで管理してるデータをplistにする【Ruby】](http://shakezoomer.com/?p=583)
Vimを用いたPHPのステップ実行によるデバック

## 目的

PHPによる既存のシステムの改修を行う為、
ステップ実行によるデバックを可能にする。
（当方PHP経験がほぼありません）

今回は Vim, vdebug, Xdebug を使用します。
## 環境

OS X yosemite です。
PHPは初期に導入されていたものを使用しています。（多分）

```
$ sw_vers -productVersion
10.10.1

$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 17 2014 15:30:28)
MacOS X (unix) version
Included patches: 1-488
Compiled by Homebrew

$ php -v
PHP 5.5.14 (cli) (built: Sep  9 2014 19:09:25) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.3.0dev, Copyright (c) 2002-2015, by Derick Rethans
```

# 環境構築

### vdebug の導入。

vim上でdebugを実施するためのプラグインです。

[joonty/vdebug](https://github.com/joonty/vdebug)

私の環境下では neobundle を用います。
vimrc に以下の内容を追記し、インストールを行います。

```.vimrc
NeoBundle 'joonty/vdebug'
```

### php.ini の配置

初期では php.ini は未配置のようなので、
初期値のファイルをコピーし、使用する。

```
sudo cp /etc/php.ini.default /etc/php.ini
```

### xdebug の導入の前に準備

xdebug の導入前にいくつか事前に導入しておくものがある。
phpize コマンドがエラーなく動作することが目的となります。

#### 1. Xcode Command Line Tools

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

#### 2. autoconf

```
brew install autoconf
```

### xdebug の導入

```
git clone https://github.com/derickr/xdebug.git
cd xdebug
phpize
./configure --enable-xdebug
make
cp -r modules/  /usr/local/xdebug
```

ちなみに phpize コマンドの結果は以下のようになったかと思います。

```
$ phpize 
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
```

正常に make できた場合には以下を php.ini へ設定します。

```php.ini
zend_extension= /usr/local/xdebug/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
```

最後に apache を再起動します。

```
sudo apachectl restart
```

### chrome 拡張の Xdebug helper の導入

ブラウザとの連携は chrome を用います。
また、Xdebug との連携を行う為の拡張を導入します。

[Chrome ウェブストア - Xdebug helper](https://chrome.google.com/webstore/search/Xdebug%20helper)

導入後はURLバーに虫の形のアイコンが表示されます。
デバックを実行したい場合はクリックし、「Debug」を選択します。

![osx - How to find out Mac OS X version from Terminal  - Super User.png](https://qiita-image-store.s3.amazonaws.com/0/47836/fbbf2b87-fa3d-5836-6ae6-fdb0d15a57a0.png)

## 実行

vdebugの操作については [githubページ](https://github.com/joonty/vdebug) にてご確認ください。

vim にて debug したい箇所にて F10 キーを押し、
ブレイクポイントを設定します。

また、F5 キーを押し Vdebug を待機状態にします。
その後ブラウザにてそのコードを通過するページを表示します。
(先ほどの虫アイコンがDebug状態であることを確認ください。)

うまく動作すると Vim 側のウインドウが分割され
デバック状態になっているかと思います。

F2, F3, F4 を用いてステップ実行を行っていきます。

以上


## 参考にさせていただいたエントリー

[Vim + Vdebug + Xdebug でPHPのリモートデバッグ - Code Life](http://blog.code-life.net/blog/2012/10/01/vim-vdebug-xdebug/)

[How to setup PHP Xdebug in Mac OSX 10.9 mavericks - ComputersnYou](https://www.computersnyou.com/2763/setup-php-xdebug-mac-osx-10-9-mavericks/)

[php - $PHP_AUTOCONF errors on mac os x 10.7.3 when trying to install pecl extensions - Stack Overflow](http://stackoverflow.com/questions/9322742/php-autoconf-errors-on-mac-os-x-10-7-3-when-trying-to-install-pecl-extensions)
Unityのパッケージインストールで失敗したとき

Unityさんを数日前から触っております弱者です。

UnityさんのCreate New Projectで、
途中でフリーズしてしまう場合が私の使ってる端末で
頻繁におきておりましたので、備忘録もかねて書いておきます。

1. いったんマシン再起動
2. なにげにProjectは不完全なものだが作成されている
3. プロジェクト開く
4. 上部タブ「assets」選択
5. reimport all をチョイス
6. すると、もう一回インポートしてくれ、正しい状態になる

Unityさん、VBやADT みたいに使えて楽ちんだし楽しい！
衝突や重力などもほぼ意識しないで使える優秀なUnityさんです。
私のようなゲーム弱者でも、何か作れるんじゃないだろうか！と希望を与えてくれます。

おもしろいから、まだまだハマりどころはありそうですが
引き続き挑戦してみたいです。
[電車やカフェでの暇つぶしに] Qiita 新着投稿リーダーに検索機能をつけた


前回の [モバイルWEB用の Qiita 新着投稿リーダーを作った](http://qiita.com/hkusu/items/5b2be1d4b263b420cfe4) をバージョンアップして、リストのデザインを Twitter ライクに刷新 ＆ 検索機能を充実させました。

自分で使う為に作ったのですが、タイトルどおり、電車やカフェでの暇つぶしに良いです :smile:

> モバイルで Qiita のWEBサイトを見ろっていう話もありますが、SPA(シングルページアプリケーション)にしてあるので、閲覧がよりスムーズだ、と思っています。ただ、大きい投稿を表示しようとすると、ちょっと重いけど..

こちらからどうぞ。

http://hkusu.github.io/qiita-newpost-reader/dist

![写真 2015-01-23 13 28 18.png](https://qiita-image-store.s3.amazonaws.com/0/35733/55a1ea14-520a-551a-bce1-4c8a56757430.png "写真 2015-01-23 13 28 18.png") ![写真 2015-01-23 13 27 16.png](https://qiita-image-store.s3.amazonaws.com/0/35733/1ad31bb6-4ae1-16f5-9a30-fb2030fa5f4c.png "写真 2015-01-23 13 27 16.png")

ソースコード は GitHub に置いてあります。
⇒ https://github.com/hkusu/qiita-newpost-reader

JavaScript/CSS ライブラリとして [ionic](http://ionicframework.com/)（ロジックは AngularJS ベース）を利用しています。Qiita の投稿は [Qiita API v1](https://qiita.com/api/v1/docs) を利用して取得しています。（認証が必要ない範囲のパブリックなデータを利用しています。）

## 所感

静的リソース(JavaScript/CSS/HTML/画像)のみで構成しているので、処理は全てクライアントサイトの JavaScript です。昔は大変だったことも、JavaScript で簡単に実現できる時代になってきたなあと。

次は、自社で使ってる Qiita:Team に目ぼしいアプリが無いので、今回のを応用して Qiita:Team リーダーを作ってみようかなっと思っています。
Herokuで、DBアクセスするPHPのアプリ動かすと、call_user_func関数がうんたらというエラーが出て困った話


## 最初に
[[忙しい人向け] PHPフレームワークSlimを使ったアプリをHerokuで公開してみる](http://qiita.com/yonell/items/d9b6933cb306a684d714)

以前投稿した記事↑のようにherokuでslimを使えるようにして、
さらにmysql使えるようにして、DBにアクセスするコード書いたら、
エラーが出てハマったので　他の人向けに解決策をシェアします。


## 状況
[lluminate/Eloquent](https://github.com/illuminate/database)使って、DBアクセスすると、↓のエラーが出る。

````
Slim Application Error
The application could not run because of the following error:

Details

Type: ErrorException
Code: 2
Message: call_user_func() expects parameter 1 to be a valid callback, function 'mb_strtolower' not found or invalid function name
File: /app/vendor/illuminate/support/Illuminate/Support/Pluralizer.php
Line: 234
Trace

#0 [internal function]: Slim\Slim::handleErrors(2, 'call_user_func(...', '/app/vendor/ill...', 234, Array)
# 以下略
````

## ぐぐってみた

phpでは、マルチバイト文字を正しく扱うために、php.iniをよしなに設定しないといけないのはわかっていたので、
そのあたりかな、、、とアタリをつけてぐぐってるとよさげな記事を発見。

[HerokuでPHPを使うときに気を付けるところ](http://qiita.com/hiro_y/items/bc631a27c9701f81a4f9)

を参考に、````.user.ini````にmbstring周りの設定を追記したが、解決せず。。。


もう少しぐぐると、更に発見。

* [PHP Multibyte String on Heroku](http://stackoverflow.com/questions/8656247/php-multibyte-string-on-heroku)
* [How to use mbstring on Heroku (PHP)](https://coderwall.com/p/deyqua/how-to-use-mbstring-on-heroku-php)

なるほど(^O^)
php.iniの設定ではなくて、マルチバイト文字まわりのライブラリを追加しないといけないのか。

## 修正コミット

以下の修正をいれて、herokuにpushで幸せになれます。

```` Diff
--- a/composer.json
+++ b/composer.json
@@ -5,7 +5,8 @@
                "slim/extras": "2.0.*",
                "twig/twig": "1.*",
                "Respect/Validation" : "0.5.*",
-               "illuminate/database" : "4.0.*"
+               "illuminate/database" : "4.0.*",
+               "ext-mbstring": "*"
        },
        "autoload": {
                "psr-0": {"":"lib/"}
````

## 振り返ると、、、

`mb_strtolower`というマルチバイト文字に関係するメソッドがない、というエラーメッセージから
「そういえばphpでマルチバイト文字列を使う時はうんたら、、、」
とかアタリが付けば一瞬で解決するのですが、
僕はそこに達するまで2時間位は、ああでもない、こうでもないとハマりました。

herokuではまだ色々ハマりそうorz
ターミナルの$前の部分に色をつける

![color_term.png](https://qiita-image-store.s3.amazonaws.com/0/23194/b7a43a99-b079-8830-f1d5-9a3553d1b365.png)

kalilinuxの端末を見ていてそこの部分に色がついていると『便利だな〜』と思ったのでメモしておきます。
コマンドを実行した時に、だらだらと出力がされた際、『どこから見ればいいんだっけ？』って時に目印にもなるので、良いですね。

# 設定方法
[[Mac] ターミナルの$前の出力内容をカスタマイズする](http://www.yoheim.net/blog.php?q=20140309)のサイトに分かりやすく記載されていました

## 現在の設定確認
* mac

```bash
$ echo $PS1
\h:\W \u\$
```

* kalilinux

```bash
$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
```

## 変更してみる

変更前
![スクリーンショット 2015-01-23 13.49.29.png](https://qiita-image-store.s3.amazonaws.com/0/23194/dc7478c1-0da7-d11c-469f-2beee11aba6c.png)

* 以下を実行

```bash
PS1='\[\033[47m\](\t)\[\033[00m\]\[\033[31m\]\u@\h: \[\033[34m\]\W\[\033[00m\]\$'
```
* 後で、何時に実行したのか分かるように時刻を表示します
 * 時刻部分は背景色を変更
* ユーザー名の順番とかを変更しました

![スクリーンショット 2015-01-23 13.47.12.png](https://qiita-image-store.s3.amazonaws.com/0/23194/957d90b4-20b9-b9a5-686d-0d8f68092f41.png)

ぉー。センスの無い配色ですね！
でも、黒一色より目印として利用出来るようになっていませんか？

## 設定の保存
お気に入りの設定を見つける事が出来たら.bashrcで毎回実行されるようにしておきます。

* ~/.bashrcに追記

```text
PS1='\[\033[47m\](\t)\[\033[00m\]\[\033[31m\]\u@\h: \[\033[34m\]\W\[\033[00m\]\$'
```

* 一応反映

```bash
source ~/.bashrc
```

# ついでに
* [historyに実行時刻を表示する](http://qiita.com/ionis_h/items/4ae711ea0ece8c09c4ab)も一緒にしておくと、便利な場面があるかもしれません

# まとめ
私の~/.bashrcが1行増えました。

```bash
$cat ~/.bashrc 
PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting

HISTTIMEFORMAT='%Y-%m-%dT%T%z '
PS1='\[\033[47m\](\t)\[\033[00m\]\[\033[31m\]\u@\h: \[\033[34m\]\w\[\033[00m\]\$'
```

※スクショを撮った後、気が変わってディレクトリ名の部分をカレントのパスにしました。
SASS(SCSS)を始めたが、ネットのアニメーションの例がことごとく動かなかった #soleved

# 背景

LESSはnode.jsで閉じてるのが利点だけど、atom-shell-starterでデフォルトで使えるLESSはバージョンが古かった。

そこで、Railsを業務で使うような世界の住人では今後もなそそうではあるけれどRubyは好きなので、SASSを試すことにした。


## ところがだ！

atom-shell-starterにSASSを組み込むことは、あまり積極的に覚えるつもりがないGruntのしかもCoffee化されたモノを扱いに苦しみながら、なんとか、それっぽくlint系の方もいれたのに、

肝心のCSSアニメーションが動かない！

# キーフレームの変数が展開されない！!

調べてみると、以下のように記述した。$nameが「spin」と展開されずに
css上も$nameとなっていた。

```sass
@mixin keyframes($name) {
  @-webkit-keyframes $name {
    @content;
  }
  @-moz-keyframes $name {
    @content;
  }
  @keyframes $name {
    @content;
  }
}

@include keyframes(spin) {
  0% {
    @include transform(rotate(0deg) scale(0.6));
    background: #bf4040;
  }
  50% {
    @include transform(rotate(180deg) scale(1));
    background: #40bfbf;
  }
  100% {
    @include transform(rotate(360deg) scale(0.6));
    background: #bf4040;
  }
}
```

# 困ったときの何とかだより

ということで、

- [Sass mixins are not replacing variables - Stack Overflow](https://stackoverflow.com/questions/25770166/sass-mixins-are-not-replacing-variables/25770474#25770474)

展開したい変数を
\#{}で囲む必要がある模様。

```sass
@mixin keyframes($name) {
  @-webkit-keyframes #{$name} {
    @content;
  }
  @-moz-keyframes #{$name} {
    @content;
  }
  @keyframes #{$name} {
    @content;
  }
}
```

# おわりに

ここ数十日で素のCSSでない、方法をあれこれ試し始めた
段階なので、まったくトンチンカンなことやってるかもという
不安があるが、記録として残すことにした。
ssh_exchange_identification: Connection closed by remote host と言われたときにクライアント側でできる対処


家のネット回線を変えてからsshしたときに

```
$ ssh hoge
ssh_exchange_identification: Connection closed by remote host
```

と言われました。
このようなとき、クライアント側で`~/.ssh/known_hosts`を削除すると、再び接続できるようになりました。

```
$ rm ~/.ssh/known_hosts
$ ssh hoge
The authenticity of host 'x.x.x.x (y.y.y.y)' can't be established.
RSA key fingerprint is xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'x.x.x.x' (RSA) to the list of known hosts.
<<正常にログインできる>>
```

おそらく、known_hostsに前の接続情報が残っていてコンフリクトを起こしたのでしょう。

なお、他の原因として、サーバ側で`/etc/hosts.allow`をいじったことなどもありますが、この辺はググってみてください。
monitで起動するユーザーを指定してかつ環境変数を渡したい

プロセス監視として monit を使うと便利ですが，使用するスクリプトに対して起動するユーザーや環境変数を指定する機能はありません．

そこで例えば `/share/tmp.sh start` というスクリプトを www ユーザーで `RUN_ENV=production` という環境変数で起動するには `start program` を以下のように設定するとよいです．

    start program = "/usr/bin/sudo -u www /usr/bin/env RUN_ENV=production /share/tmp.sh start" with timeout 10 seconds

そもそも環境変数の PATH が渡っていないのでコマンドは絶対パスで渡すのと最初に sudo でユーザーを指定してから環境変数を env で渡すのがポイントです．
文字列中の &nbsp; (C2A0) を正規表現で削除

スクレイピングなどしているとテキスト中に含まれている ＆nbsp; によく遭遇します。
これは ```strip``` でも ```gsub(/\s/'')``` 等でも消せませんが、以下のようにすると削除できます。

```rb
 # 正規表現でPOSIX文字クラスを使う
inner_text.gsub(/[[:space:]]/)

 # 文字コード直接指定でもできる
inner_text.gsub(/\u{C2A0}/)  # gsub(/\uC2A0/) でもOK
```
　
リファレンスよく読めばかいてありますね。
* [リファレンスマニュアル - 正規表現](http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fregexp.html)

ここを読んでピンと来ました。
* [Stack Overflow - How to remove whitespace from string in Ruby](http://stackoverflow.com/questions/20431470/how-to-remove-whitespace-from-string-in-ruby)
rbenv と ruby-build を使って macOS に Ruby の環境を構築する

システムの Ruby に依存させたくなかったり、複数バージョンのrubyを管理したい場合に使うのがバージョンマネージャー。今回は [rbenv](https://github.com/rbenv/rbenv) と [ruby-build](https://github.com/rbenv/ruby-build) を使って、システムの Ruby に依存しない環境を作る。ruby-build は rbenv のプラグインで、`rbenv install` が使えるようになる。

## rbenvをインストールする

`rbenv` をホームディレクトリの `.rbenv` にクローンしてくる。

```bash
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
```

## rbenvにパスを通す

zshであれば `.zshrc` とか、bash であれば `.bash_profile` とか。

```bash
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

つまり、以下の設定が記述されていれば OK である。

```
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
```

シェルを再起動すると `rbenv` が使えるようになる。

## ruby-build をインストールする

ホームディレクトリの `.rbenv` 配下に `plugins` フォルダがあるので、その中にクローンする。

```bash
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
```

## rbenv で Ruby をインストールする

以下のようにバージョンを指定して Ruby をインストールする。

```bash
$ rbenv install 2.2.0
```

すると、`~/.rbenv/versions/` 配下にインストールしてきたrubyが配置される。インストールしてきた後は shim のリフレッシュをしておく。

```bash
$ rbenv rehash
```

## 使う Ruby の指定

あとは、実際に使う Ruby を指定する。グローバルに指定したいのであれば `rbenv global` を。ローカルで指定したいのであれば `rbenv local` を使う。

```bash
$ rbenv global 2.2.0
```
指定したあとに、パスが `.rbenv` 配下の Ruby を向いていれば OK である。

```bash
$ which ruby
# /Users/1000ch/.rbenv/shims/ruby
```

## Ruby のアンインストール

rbenv を使ってインストールした Ruby は、以下のようにしてアンインストールする。ちなみにこの`uninstall` コマンドも ruby-build によって提供されている。

```bash
$ rbenv uninstall 2.2.0
```

そのままですね。
Cygwin で最新の Lua をインストールする方法。

## 前提 

- [Cygwin](https://www.cygwin.com/) インストール済み。
- 尚且つ、gcc-mingw-core, make インストール済み (devel tree)

## インストール方法

- [Lua](http://www.lua.org/home.html) を確認すると最新バージョンが **5.3.0** なので `lua-5.3.0.tar.gz` をダウンロードする。

    `curl -O http://www.lua.org/ftp/lua-5.3.0.tar.gz`
  
- 保存した `lua-5.3.0.tar.gz` を解凍する。

    `tar xzvf lua-5.3.0.tar.gz`

- 解凍したら以下のコマンドを打つ。

    ```
    cd lua-5.3.0
    make mingw  
    make install
    ```

- そして cygwin1.dll と lu53.dll を見つけてきて `C:\cygwin64\usr\local\bin` にコピーする。
    - `cygwin1.dll` は `C:\cygwin64\bin` にあります。
    - `lua53.dll` は `C:\cygwin64\usr\local\bin` にあります。

## これでインストール完了です。

```
$ lua -v
Lua 5.3.0  Copyright (C) 1994-2015 Lua.org, PUC-Rio
```
【英語のお時間】四捨五入・切り上げ・切り捨て

どうもround以外の単語が思い出せない。
ceilとかfloorとかピンとこない。
とりあえず日→英で辞書ってみました。

## 四捨五入

```zsh
四捨五入する
【他動】
round（数値を）〔【参考】round-off ; round-down〕
【句動】
round off
```

## 切り上げる

```zsh
～の端数を切り上げる
【句動】
round up
```

## 切り捨てる

```zsh
～の端数を切り捨てる
【句動】
round down
round off
```

# 全部roundじゃないすか

```rb
# 1234.5678を少数第二位まで四捨五入してね
-> round off 1234.5678 to the second decimal palce
-> round off 1234.5678 to the nearest 100th

# 1234.5678を切り上げて整数にして
-> round up 1234.5678 to the nearest integer

# 1234.5678を10のくらいで切り捨てて
-> round off 1234 to the nearest 10
```

http://english-hanasitaino.seesaa.net/article/354267246.html

考え方を変えねばならない。

```zsh
切り上げる→数字を増やして、一つ上の位を上げる→今の数字を天井に押しやってしまえ->ceil
切り捨てる→数字を減らして、一つ上の位を下げる→今の数字を床に押しやってしまえ->floor
```

だいぶ無理ある。そもそもceilってroofじゃないの？とか
妥協して覚えるしかないのかな。。。


# 例

```html
<form name="marume">
  <input type="text" value="3.14159">：丸める数字<br>
  <input type="text" value="">：四捨五入<br>
  <input type="text" value="">：切り上げ<br>
  <input type="text" value="">：切り捨て<br>
  <input type="button" value="計算" onclick="keisan()">
</form>

<script>

function keisan(){

  //最初のテキストボックスの値を数字に変換
  var num = parseFloat(document.marume.elements[0].value);
  
  //順に、四捨五入・切り上げ・切り捨てを求める
  document.marume.elements[1].value = Math.round(num);
  document.marume.elements[2].value = Math.ceil(num);
  document.marume.elements[3].value = Math.floor(num);
}
</script>
```

# ちなみに他にも

rubyには
絶対を求めるabsとか、近似整数値を求めるtruncateとかがあります。
この2つは割りとピンときます。

http://www.atmarkit.co.jp/ait/articles/1407/29/news030_3.html#061
はじめてライブラリを触る(nikic\iter)

関数型っぽくなるライブラリがあるとのことで試してみる。

```php:
<?php
use function iter\range;
use function iter\map;
use function iter\toArray;
use function iter\fn\operator;

require_once __DIR__ . '/iter-master/src/bootstrap.php';

$nums = range(1, 10);
$numsTimesTen = toArray(map(operator('*', 10), $nums));
// => array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
```

名前空間についての学習が全然出来ていないので間違った理解をしているかもしれないけれど、
`range`は標準関数でもあるので`namespace`で`iter`と名前を付けて
`iter`の`range`なので標準関数とは別物だよーって教えてあげている、のだと思ってる。

`use`を上で行わないのであれば、

```php:
$numsTimesTen = iter\toArray(iter\map(iter\fn\operator('*', 10), $nums));
```

というハイパー冗長プログラムになってしまう気がする。
それは避けたい。

でも同一ファイル内で`iter`の関数全部使ったとしたら、
それはそれですごい量の`use`が上に書かれる気がする。現時点でも十分うわーってなる。
それも避けたい…。

でも`use`はファイル単位らしく、`include`しても継承されないとどっかで拝見したんだよね…。

うーん、上手く利用してる人はどうしてるんだろう
EXPLAINを見て気をつけること（自分なりの忘付録）

##EXPLAINについて
mysqlにはexplainというものがある。
これはクエリを実行した際に、
「mysqlが作成したクエリをどのように判断して実行したのか」というものが
見れるようなものです。
(データへのアクセス方法がわかるものです。)

####使い方
使い方は簡単でSQL文の一番先頭にexplainをつけるだけです。
ex)
`EXPLAIN SELECT * FROM テーブル名；`

結果)
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows  | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
|  1 | SIMPLE      | emp   | ALL  | NULL          | NULL | NULL    | NULL | 62004 |       |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
1 row in set (0.00 sec)
だいたいこんな感じのものが表示される

####カラムについて
######select_type
単一の表を参照する場合は「SIMPLE」になるはず。UNIONを使用すると「PRIMARY」「UNION」「UNION RESULT」なども現れるくると思います。

######type
const・・・PKやUNIQUEインデックスの等価検索
ref・・・UNIQUEでないインデックス使用検索時。セカンダリインデックスを禁止していたら問題大あり
range・・・INDEXを用いた範囲検索時
index・・・INDEX内のフルスキャン
ALL・・・全表走査。インデックスが効いていない状態。

######key
keyには「PRIMARY KEY」かセカンダリインデックス名が入っているべき。のはず。
セカンダリインデックスを禁止していればPRIMARY KEY以外入ってはいけない。

######EXTRA(付与情報)
Using where
　　　　頻繁に出力される追加情報であまり気にする必要はない
Using index
　　　　クエリがインデックスだけを用いて解決できることを示す。
　　　　カバリングインデックスを利用している場合などに表示される。
Using filesort
　　　　ソートを行っている。適切なインデックスを
　　　　張ることで改善されるかもしれないことを表す。
OS X Yosemiteへアップグレードした後PHPのGD関数imagepng()などの回復


OS X Yosemiteへアップグレードした後、設定が変わったことが少なくない。例えば、ApacheはPHPをオフにした。それは気付きやすいだが、ある日PHP開発でQRコードの利用を実装する件があって、馴れ馴れしくimagepng()関数を利用してしまったまで。その時こそ、imagepng()について「undefined function」というエラーが提示されて、またやられたと感じた。

phpinfoにてGDの設定はあったが、pngについては記録なくなった。解決する方法は、相応なる画像処理機能を再インストールする。そうりゃ面倒な仕事じゃん。

従ってstackoverflowで一つの問答を見つかった。
http://stackoverflow.com/questions/26443242/after-upgrade-php-no-longer-supports-png-operations
そのうち、一つの便利な解決策が提供された。

つまり、PHP 5.6の場合は、ターミナルで一ラインで解決できる。
`curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6`
railsアプリをDocker化してみる


dockerを使っていきたいけどなかなか難しい。
だけど、RailsアプリだけをDocker化してデータベースはいままで通りはそんなに難しくない。

# イメージの作成

railsアプリケーションのプロジェクトルートにDockerfileを作成します。

```Dockerfile
FROM rails:onbuild
CMD ["rails", "server", "-b", "0.0.0.0"]
```

Dockerfileを作成したら`docker build`でイメージを作成します。
名前はmy-rails-appにしておきます。

```
$ docker build -t my-rails-app .
```

FORMに記述したrails:onbuildのDockefileはここにあります。

* https://github.com/docker-library/rails/blob/master/onbuild/Dockerfile

ONBUILDすばらしい。

# データベースへの接続

データベースへの接続は環境変数DATABASE_URLを利用すればよいです。
DATABSE_URLを設定しておけば`config/database.yml`の設定は無視して接続できます。

Railsの開発をしているのであればローカルでデータベースが動いているはずなので、ここに接続できるようにDATABASE_URLをつくればよいです。

`アダプタ://ユーザ名@IPアドレス/データベース名`

という感じです。

boot2dockerを使用しているMacユーザでbrewでインストールしたPostgreSQLを使用していれば、ベースとなるURLを作成できます。

<code> echo postgres://${USER}@`boot2docker config | grep HostIP | cut -d'"' -f 2`/</code>

あとは接続するDB名を追加してください。

brewでインストールいたpostgresは外部から接続できないので、使っているバージョンにもよりますが、

`/usr/local/var/postgres9.4/postgresql.conf`に

`listen_addresses = '*'`を追加したり

`/usr/local/var/postgres9.4/pg_hba.conf`に

`host   all             all             192.168.xx.1/24                       trust`のようなものを追加することになります。

IPアドレスは`boot2docker config`で確認します。

変更したら設定ファイルの再読込をしましょう。

```
$ pg_ctl -D /usr/local/var/postgres9.4/ reload
```

# Railsアプリの起動

作成したイメージを起動します。DATABASE_URLを用意できていれば
これをつかって`docker run`をします。
以下のような感じになります。

```
$ docker run --rm -i -t -p 3000:3000 -e  DATABASE_URL="postgres://${USER}@192.xx.xx.xx/hoge_development" my-rails-app
```

railsアプリが起動したら`boot2docker config | grep LowerIP` が返すIPアドレス
スのポート3000にアクセスしてみましょう。

すべてをDocker化するのは難しいですが、DBはそのままで、アプリケーションだけdocker化ということはそんなに難しくないと思います。
Reactについて話してみる


## What is React?

Facebook のチームが開発している、JavaScriptライブラリ。
公式ページによると、特徴としては、

- JUST THE UI

- VIRTUAL DOM

- DATA FLOW

があげられる。後はJSXっていうシンタックスですかね。

## What is vertual dom?

virtual domとは、real domと1対1で関係を持つ仮想dom。

例えば、

```
<div>
  <p>test</p>
</div>
```

というhtml構造を、

```
<div>
  <p>test</p>
  <p>test2</p>
</div>
```

というhtml構造にリロードせずに変更するとした場合、

```
var newDom = document.createElement("p");
newDom.innerHTML = "test2";
document.querySelector('div').appendChild(newDom);
```

とかってしないといけない。
じゃあ仮にこの生成したdomにクリックイベントつけようってなったら？？？```addEventListener```するしかないですよね。

本当は0から構築したいけど、UX面やパフォーマンス面からもさすがにできない。
それを解決したのが、virtual-domという概念と、差分方式を実装したReactって訳です。

ちなみにVirtual Domを実装しているライブラリは他にもあって、
[virtual-dom](https://github.com/Matt-Esch/virtual-dom)とかが有名かと。

## What is Flux?

昨今ではインタラクティブなアプリケーションが求められるが、
そうなると現状のMVCだとスケールしないってのが、FBが出した結論。

(下記FBの資料を引用)

![flux-react-mvc.png](https://qiita-image-store.s3.amazonaws.com/0/5365/6dfc85ed-15c8-2051-c336-50a13132e4d7.png "flux-react-mvc.png")

FBだと上記のような構造になっていたらしい。
そもそもMVCって実はMVCとMVCモデル2ってのが存在する。

### 1979年にsmalltalkにて実装されたMVC

![700px-ModelViewControllerDiagram2.svg.png](https://qiita-image-store.s3.amazonaws.com/0/5365/cd9a136f-4d74-730f-f717-3b13d7987639.png "700px-ModelViewControllerDiagram2.svg.png")

-引用：[Model View Controller](http://ja.wikipedia.org/wiki/Model_View_Controller)

ちょっと現状では理解しにくい部分がありますね。
Railsなどを使ってるとM⇔Vはありえません。
これは、状態を持つイベント駆動型のクライアントアプリケーションのために生まれた開発手法です。
なので現状のWebアプリケーションには当てはまりません。

### それをwebの世界に持ち込んだ、MVCモデル2

![440px-JSP_Model_2.svg.png](https://qiita-image-store.s3.amazonaws.com/0/5365/b3283bd1-c86d-98e8-e498-e33ef970560d.png "440px-JSP_Model_2.svg.png")

-引用：[Model 2](http://en.wikipedia.org/wiki/Model_2)

FBの言っているMVC!=MVCモデル2なので、Railsの人が「は？それMVCじゃなくね」ってなるのはしょうがないですね。
色々歴史的に変化が合ったようです。

で、新しく提唱されたFluxというデータフロー。

![flux-react.png](https://qiita-image-store.s3.amazonaws.com/0/5365/fcde0654-56f6-fc21-c61b-ba7e5ec7a835.png "flux-react.png")

僕には限りなくMVCモデル2に見えますが、どうなんでしょうか。
Controllerが直接viewを触らなくなった？
View層で捉えるとBackboneとかとそんなに変わらないんですかね。

データが一方向になるのは、わかりやすくて良いと思います。

## What is Jsx?

Reactで使用することが推奨されているシンタックス。
javascriptの中にXML的な記法で記述出来る。
JSXTransformer.jsを使ってコンパイルが必要。

node使うとリアルタイムにコンパイルしてくれるものもあるよ。

## Performance

![20141202133927.png](https://qiita-image-store.s3.amazonaws.com/0/5365/93a8ce03-5c1a-c572-69cc-42cc8a2ea29b.png "20141202133927.png")

MercuryとかElmはvirtual-domってのを使ってます。
OmはReact+clojureScriptなんですけど、何故かReactの方が遅いw

書き方とかで結構違うのかな？

## Example

Reactは公式ページを見てみましょうww
http://facebook.github.io/react/

Fluxはまだ試してないのでまた今度ww
https://github.com/facebook/flux
Test Kitchenでsshへのオプションの渡し方


Test KitchenのDriverがsshするときのオプションは設定ファイルで行うことができる。

参考: [chef - なぜか Test Kitchen 公式ドキュメントに書いていない .kitchen.yml のリファレンスのありか - Qiita](http://qiita.com/tetor/items/17b9855f421a27ba83aa)

sshの秘密鍵を指定したい場合はdriverの中に値をssh_keyというキーを使って指定できる。


```
driver:
  name: vagrant
  ssh_key: "~/.ssh/id_rsa"
```

他にもpasswordやportなどの指定もできる。

参考: https://github.com/test-kitchen/test-kitchen/blob/v1.3.1/lib/kitchen/driver/ssh_base.rb#L115-L124

# 余談

test-kitchenのgceドライバーを利用していてsshに失敗するようになった。なぜだか原因はわからない。sshの秘密鍵がみつけられていないようだった。

gce用のsshの鍵は`~/.ssh/google_compute_engine`にあるのでこれを指定した。
どうしてこうなったのか知らべているがわからない。

また、調べていて知ったこととして[kitchen-gce](https://github.com/anl/kitchen-gce)のサンプルのymlファイルは

```.kitchen.yml
driver_plugin: gce
driver_config:
  google_client_email: "123456789012@developer.gserviceaccount.com"
  google_key_location: "<%= ENV['HOME']%>/gce/1234567890abcdef1234567890abcdef12345678-privatekey.p12"
  google_project: "alpha-bravo-123"
  network: "kitchenci"
  region: any
```

となっているがこれはレガシーな書き方で、

```.kitchen.yml
driver:
  name: gce
  google_client_email: "123456789012@developer.gserviceaccount.com"
  google_key_location: "<%= ENV['HOME']%>/gce/1234567890abcdef1234567890abcdef12345678-privatekey.p12"
  google_project: "alpha-bravo-123"
  network: "kitchenci"
  region: any
```

のように書くほうがモダンのようです。

こういうトラブルにあった時はログを見ろと言われるけど、ログレベルを変えて実行するのほうが原因がわかりやすかった。
Test Kitchen の実行の際にログレベルを変更するには -l を使う。

convergeする際の場合は

```
$ kitchen converge -l debug
```

のようにすると良い。
秘密の値をローカル、Travis、Herokuで扱うには


# 前提

* Travis、Herokuを使ってWebアプリケーションやAPIなどを開発していること
* 外部サービスのAPIキーなどバージョン管理にそのまま載せたくない値を使用していること

# 結論を先に

* 秘密の値は環境変数で用意しよう
* Travis、Herokuの仕組みを正しく使おう
* ローカル環境では手動で値を用意するより便利な仕組みを導入したほうが良い

# 各環境でどのように秘密の値を扱うか

## 方向性

ローカル、Travis、Herokuの３つともでうまく値を扱うためには環境変数を使って値を用意する必要があります。

言わずもがなですが環境変数とはこんなやつですね。

```bash
$ export SECRET_VALUE=hogehoge
$ echo $SECRET_VALUE
hogehoge
```

## Travis

[Travis](https://travis-ci.org/)とは設定ファイルひとつで手軽にWebサービスやアプリでCIができる人気の高いCIサービスです。

Travisには環境変数を秘密で指定できる方法があります。
ドキュメントは[こちら](http://docs.travis-ci.com/user/encryption-keys/)

具体的な方法としては以下のコマンドを実行していくだけです。

```bash
#travisコマンドを使えるようにする。初回のみ必要
$ gem install travis

#値をTravisにしか復元できない値として暗号化し、設定ファイルに追記する
$ travis encrypt SECRET_VALUE=hogehoge --add
```

たったこれだけの設定をすればTravisのビルド時には環境変数 `SECRET_VALUE` が使えるようになります。

## Heroku

[Heroku](https://www.heroku.com/)とはPaaSのひとつでサクッとサーバが用意できるかなり便利なサービスです。

HerokuもTravisと同じくかなり簡単に秘密の値を扱えます。
方法は基本的には二つあります。
ドキュメントは[こちら](https://devcenter.heroku.com/articles/config-vars)

まず一つ目はherokuコマンドを使う方法です。
コマンドインストール後、ワンコマンドで値を設定することができます。

```bash
$ heroku config:set SECRET_VALUE=hogehoge
```

もうひとつはWebのUI画面から設定する方法です。
対象のappのダッシュボードから「Config Variables」を探して入力してください。

## ローカル

ローカルでは普通に環境変数を設定すれば秘密の値を扱うことができます。

```bash
$ export SECRET_VALUE=hogehoge
```

しかし開発前のタイミングなどでいちいちこのコマンドを実行するのはとても面倒です。
かといって特定のプロジェクトでしか使わない値を`.bash_profile`などに書いておくのも気持ちが悪いです。

そこで登場するのが`direnv`です。

`direnv`を使えば「特定のディレクト内でのみ自動で環境変数を追加する」ことができます。

公式リポジトリは[こちら](https://github.com/zimbatm/direnv)。

導入方法はいくつかありますが例えばMacユーザーならhomebrewですぐにインストールできます。

```bash
$ brew install direnv
```

インストールできたら初期設定をします。
初期設定と言っても`.bash_profile`に1～2行追記するだけです。

```bash
$ tail .bash_profile
...
...
export EDITOR=vim
eval "$(direnv hook bash)"

$ source bash_profile
```

これで準備は完了です。
ディレクトリ内だけで有効になる環境変数を用意してみましょう。

```bash
$ direnv edit . #設定したい環境変数を編集する

$ cat .envrc #このファイル内に値が記載される
export SECRET_VALUE=hogehoge
export SOME_VALUE=some-hogehoge

$ pushd ..
#環境変数が未設定の状況に戻る

$ popd
# $SECRET_VALUE と $SOME_VALUE が設定される
```

`.envrc`はバージョン管理しないようにしておきましょう。（gitなら`.gitignore`に追記する）
tmuxで困った


tmux便利に使わせて頂いているのですが、あるサーバに入ってtmuxを起動して作業してるにもかかわらず、そこから新たなサーバに入って、tmuxを起動してしまった。（ネストしてしまった。）そんな失敗を時々します。

何が、困るかってキーバインドがかぶってるので、内側のtmuxにコマンドが送れないんですね。

そんな時は、


```
$ tmux unbind-key C-v
$ tmux set-option -g prefix C-t
$ tmux bind-key C-t send-prefix
```

キーバインドを解除した上で、新たなキーバインドを設定するという感じですね。


忘備録として。
Ghostのインストール


## Ghostとは

[Ghost](https://ghost.org)とは、簡単で、しかもパワフルなBlogツールだそうです。

## 今回の環境

 - Ubuntu 14.04.1 LTS
 - Ghost 0.5.8

## インストール

node.jsは0.10.30が、npmは、1.4.21が推奨されています。


が、気にせずapt-getでインストール！

```
$ sudo apt-get install nodejs npm
$ node -v
-bash: node: コマンドが見つかりません
$ nodejs -v
v0.10.25
$ npm -v
1.3.10
```

というわけで、普通にインストールすると nodejs という名前になってしまうので、

```
$ sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
```

シンボリックリンクでもいいんだろうけど、一応。
若干古い感じがしますが、気にしないことにします。


```
$ curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip
$ unzip -uo ghost.zip -d ghost
$ cd ghost
$ sudo npm install --production 
$ npm start
```

うにゅうにょと何か、画面に出て、developmentモードでサーバが立ち上がります。で、 http://localhost:2368 にアクセスすれば、Blogが見えるのですが、localhost以外からは見えないので、

```
$ diff -u config.js.org config.js
--- config.js.org       2015-01-23 03:05:11.000000000 +0900
+++ config.js   2015-01-23 03:14:50.000000000 +0900
@@ -10,8 +10,15 @@
     // When running Ghost in the wild, use the production environment
     // Configure your URL and mail settings here
     production: {
-        url: 'http://my-ghost-blog.com',
+        url: 'http://自分のに変更',
@@ -22,7 +22,7 @@
 
         server: {
             // Host to be passed to node's `net.Server#listen()`
-            host: '127.0.0.1',
+            host: '0.0.0.0',
             // Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
             port: '2368'
         }
@@ -58,7 +58,7 @@
         },
         server: {
             // Host to be passed to node's `net.Server#listen()`
-            host: '127.0.0.1',
+            host: '0.0.0.0',
             // Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
             port: '2368'
         },
```

こんなかんじにしておきます。
あと、urlも適宜変更してください

これで、developmentで動くことが確認できたので、一応productionでも確認しておきます。

```
$ npm start --production
```

## Daemon化

このまま運用でもいいけど、落ちると困るので、Daemon化しておきます。Daemon化ツールは有名なところだと、[forever](https://www.npmjs.com/package/forever)とか、ありますが、自分の環境だと、すでに[supervisor](http://supervisord.org)が導入済みなのでそちらを使いました。
【OSX】【swift】Drag & Dropを受け付ける(ファイルパスを取得)

NSViewを継承したクラスを作ったとして、

```swift


class AcceptDragView: NSView {

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        self.registerForDraggedTypes([NSFilenamesPboardType]);
    }

```

ドラッグの受け付けるタイプを指定する。


```swift

    override func draggingEntered(sender:NSDraggingInfo)->NSDragOperation{
        return NSDragOperation.Generic;
//        return NSDragOperation.Copy; //マウスポインタがかわる(+の緑アイコンがつく)
//        return NSDragOperation.Link;
    }

```

ドラッグされてきた場合の動きを調整。
returnに合わせて、マウスポインタの見せ方を変えることが可能

```swift

    override func performDragOperation(sender:NSDraggingInfo)->Bool{
        var pboard:NSPasteboard! = sender.draggingPasteboard()
        if pboard != nil {
            pboard = sender.draggingPasteboard()
            if contains(pboard.types as [NSString],NSFilenamesPboardType) {
                var files:[String] = pboard.propertyListForType(NSFilenamesPboardType) as [String]
                println(files)
            }
            return true
        }
        return false
    }

```

filesにそのファイルパスが格納されています。
(複数のファイルがドラッグされてくることも考えられるので、配列になっています
dateコマンドでバックアップファイル作成時にファイル名に日付_時間を付ける (LinuxとWindows用)

dateコマンドでバックアップファイル名末尾に日付_時間を付ける
===

LinuxとWindowsでcpコマンドによりファイルのバックアップを作成する場合、バックアップファイル名の末尾に日付_時間を付けるコマンドです。

## (1) Linux版のコマンド

```
$ cp -p バックアップ対象ファイル名 バックアップファイル名.`date "+%Y%m%d_%H%M%S"`
```

## (2) Windows版のコマンド

```
D:\> copy バックアップ対象ファイル名 バックアップファイル名.%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
```

コマンド実行した環境
===

・CentOS release 6.6 (2.6.32-504.3.3.el6.x86_64)

・Windows 7 Professional (32bit版)

コマンド実行例(Linuxの場合)
===

例えばLinuxの/etc/fstabのバックアップを作成する場合、以下のように実行すると、バックアップファイル名末尾に日付_時間を付ける事が出来ます。

```
# date
Fri Jan 23 02:48:40 JST 2015
# date "+%Y%m%d_%H%M%S"
20150123_024843
# cp -p /etc/fstab /etc/fstab.`date "+%Y%m%d_%H%M%S"`
#
```

バックアップファイル名は /etc/fstab.20150123_024858 のような形で作成されます。

```
# ll /etc/fstab.20150123_024858
-rw-r--r--. 1 root root 584 Oct  3 01:59 /etc/fstab.20150123_024858
#
# ll /etc/fstab
-rw-r--r--. 1 root root 584 Oct  3 01:59 /etc/fstab
#
# diff /etc/fstab /etc/fstab.20150123_024858
#
```

コマンド実行例(Windowsの場合)
===

例えばWindowsのexample.txtというファイルのバックアップを作成する場合、以下のように実行すると、バックアップファイル名末尾に日付_時間を付ける事が出来ます。

まず、Windowsではデフォルトのdate環境変数で日付、time環境変数で時刻が取得可能です。

```
D:\tools>echo %date%
2018/12/24

D:\tools>echo %time%
19:06:28.93

D:\tools>
```

以下のコマンドを実行すると、20181224_190612といった形式で日付と時刻を取得出来ます。

```
D:\tools>echo %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
20181224_190612

D:\tools>
```

以下のように実行すると、バックアップファイル名末尾に日付_時間を付ける事が出来ます。

```
D:\tools>copy example.txt example.txt.%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
        1 個のファイルをコピーしました。

D:\tools>
```

バックアップファイル名は example.txt.20181224_190922 のような形で作成されます。

```
D:\tools>dir

　(中略)

 D:\tools のディレクトリ

2018/12/24  19:09    <DIR>          .
2018/12/24  19:09    <DIR>          ..
2018/12/24  19:01                 4 example.txt
2018/12/24  19:01                 4 example.txt.20181224_190922

　(中略)
```


以上です。
pythonの実行時間を出力する

最近気に入っているから忘れないように貼っておく．


```lang:python
if __name__ == '__main__':
    start_time = time.clock()
    main()
    end_time = time.clock()
    print("TOOK TIME : {0:d} min {1:d} sec".format(int(end_time - start_time) // 60, int((end_time - start_time) % 60)))
```
【C++】順列を求めるプログラム

#はじめに
順列：「異なる n個のものから r個を選んで並べる順列の総数 nPr を求める」
これを実装しました。今回は外部入力が整数値なのかもチェック(フールプルーフ)してます。

#プログラム
```cpp:permutation.cpp
#include<iostream>

using namespace std;

int permutationMethod(int n,int r);

int main(){
    int cardNumber,getNumber;
    int checkNumber = 0;
    
    while (checkNumber==0) {
        cout<<"カードは何枚ありますか？：";cin>>cardNumber;
        if(!cin.fail()){
            (cardNumber<=0)?cout<<"\nError!不正な値です。\n1以上の値で再度入力してください。\n"<<endl:checkNumber=1;
        }else{
            cout<<"\nError!不正な値です。\n整数値で再度入力してください。\n＊数値を入れていても半角数字でなければ同様のエラー扱いとなります。\n"<<endl;
            cin.clear();
            cin.ignore(1024,'\n');
        }
    }
    checkNumber = 0;
    while (checkNumber==0) {
        cout<<"カードを何枚とりますか？：";cin>>getNumber;
        if(!cin.fail()){
            if(getNumber>cardNumber){
                cout<<"\nError!そんなに取り出せません。\nカードは"<<cardNumber<<"枚しかないので...。\nもう一度入力してください。\n"<<endl;
            }else if(getNumber<0){
                cout<<"\nError!不正な値です。\n再度入力してください。\n"<<endl;
            }else{
                checkNumber = 1;
            }
        }else{
            cout<<"\nError!不正な値です。\n整数値で再度入力してください。\n＊数値を入れていても半角数字でなければ同様のエラー扱いとなります。\n"<<endl;
            cin.clear();
            cin.ignore(1024,'\n');
        }
    }
	cout<<permutationMethod(cardNumber,getNumber)<<"通り"<<endl;
}

int permutationMethod(int n,int r){
    r = n - r;
    int sum = 1;
    int i;
    for (i=n;i>=r+1;i--)sum*=i;
    return sum;
}
```

#解説
##順列のプログラムの考え方
順列は次の式で表せます。

>![順列の式](http://keisan.casio.jp/has10/mimetex.cgi?%5cnormal%20Permutations%5c%5c%5cvspace{5}%3Cbr%20/%3E(1)%5c%20{}_nP_r={%5clarge%5cfrac{n!}{(n-r)!}}%5c%5c%3Cbr%20/%3E)!

>([順列・組合せ - 高精度計算サイト](http://keisan.casio.jp/has10/Menu.cgi?path=04000000.%90%94%8Aw%8C%F6%8E%AE%8FW/03000300.%8F%87%97%F1%81E%91g%8D%87%82%B9)より)

この式から、

>nPr = n・(n-1)・...・(n-r+1)

であるのがわかります。
つまり、「異なるn個のものから r個を選んで並べる順列」をプログラムに落とし込むと次のようになる。

```cpp:permutationMethod()
int permutationMethod(int n,int r){
    r = n - r;
    int sum = 1;
    int i;
    for (i=n;i>=r+1;i--)sum*=i;
    return sum;
}
```

for文は高速化するために降順でしてます。(ほぼ差が出ないので意味はないが。)

参考：[処理速度の向上](http://ww4.tiki.ne.jp/~yosshie-k/programming/techniques/speed.html)
Slackme: テキストも画像もコマンドラインからSlackに送りつける


コマンドラインからSlackにメッセージや画像を送りつけたいので、そのようなコマンドを作った。
 
https://github.com/hayamiz/comfort/blob/master/scripts/slackme

![Slackme demo](http://i.imgur.com/V9t112T.gif)

# 使い方

引数に文字列を渡して、文字列が存在するファイル名だったらファイルがSlackにアップロードされる。ファイル名じゃない文字列はメッセージとしてSlackにポストされる。

例えば：

* `slackme "hello world"` : "hello world" とメッセージをポストする
* `slackme image.jpg` : `image.jpg` をアップロードする（ファイルが存在すれば）
* `slackme "i like it" lgtm.gif` : "i like it" をメッセージとしてポストしたあと、`lgtm.gif` をアップロードする

個人的な便利ポイントとして、EPSファイルやSVGファイルは、ImageMagickの`convert`があると勝手にPNGに変換してくれたり、高解像度(1Mピクセル)のファイルは縮小してアップロードするようになっていたりする。

# 初期設定

`~/.slackme.yml` を作っておく

~~~
:token: <slack API token>
:channel: "#channel"
~~~

今のところチャンネル名は決め打ちになってる。

# ぼっちSlackのススメ

計算機を使って長時間のジョブをいろんなマシンで実行することが多いので、最近はSlackを通知専用に使っている。SlackをiPhoneとMacbookにインストールしておけば、ネットワークに繋がっている時は必ず何らかの方法で通知を受け取ることができるので便利。これがメールだと受信トレイがゴミで溢れてストレスが貯まるが、Slackだと適当に流れていくだけなのでちょうど良い。

Slackmeで画像もアップロード出来るようになったので、通知＋結果データのgnuplot出力を送る、といったこともこれからやってみようと画策している。

また、リモートサーバで実験していると、グラフをgnuplotでファイルに出力してからGUIのあるマシンまでコピーしてきて表示させるという手間が何かしら発生してしまうが、とりあえずプレビューするのにもSlackmeが便利なのではという気がしている。

# 他との比較

とりあえず作ってみてから、他に似たようなものがないか調べてみたら、まあ色々ある。

* [Slack incoming webhook](https://my.slack.com/services/new/incoming-webhook): Slackがデフォルトで提供しているHTTPS経由で投稿できるエンドポイントがある。`curl`などで叩ける
* [slackcat](https://github.com/rlister/slackcat) : 汎用的にメッセージポストしたりファイルアップロードしたりできる
* [slacktee](https://github.com/course-hero/slacktee) : `tee`を使う感覚でテキストをポストできる
* [slack-post](https://github.com/CozyCo/slack-post) : 簡単なRubyのSlack APIラッパ＋コマンドラインインターフェース。テキストのポストのみ対応っぽい。
コンピュータ将棋製作記 その3

# コンピュータ将棋製作記 その3（2015年1月22日）

## 進捗どうですか？

### 昨日の課題

- TCP/IPでfloodgateにつなげるコードを書く
- 余力があればテストをもうちょっと綺麗に書く
- 後手の香車が後ろに進むバグが発覚

### 今日進んだ所

- バグを直し、テストを書いた
- TCP/IPでfloodgateにつなげた

余力なかったのでテストを綺麗に書くのは後回し

## TCPクライアントの実装

TCPでクライアントをテスト実装した。C言語でソケット系のプログラムを書くのは久しぶりだったけど、調べながらで大変面倒だった。

もしコンピュータ将棋を開発しようと思われる方は、まず何かのスクリプト言語で軽く書いてみることをオススメする。どうせ多分書き直すことになるのに、最初からC言語で書くと面倒なだけだなぁと思う。

クライアントプログラムの作成はこちらのページを参考にした。C言語で実装する際にはある程度参考になると思う。

コンピューター：C言語講座：TCP/IPプログラム(その1：クライアント): http://www.ncad.co.jp/~komata/c-kouza9.htm

今日のところは、floodgateのサーバにログインして即座にログアウトするクライアントを書いたところで終了。

## バグ修正

香車が反対方向に走るバグは、長い利きの駒（香、角、飛、馬、龍）の場合、後手番の時には走る方向にマイナスを入れなければいけないのを忘れていたせいだった。角、飛、馬、龍は先手でも後手でも利きが同じなので発覚しなかった。

バグを修正し、そのバグのテストを追加しておいた。

## 雑感

- テスト実装のつもりだったのに、C言語で書きはじめたのは少し失敗だったかもしれない
  - 思考ルーチンのコアな実装も最初はスクリプト言語で書いて、あとでCに移植する方法もある
  - まあしかし、1から書き直すほどの失策ではないかな、と思うのでこのまま進む
- floodgateさんのサーバになるべく迷惑をかけないように細心の注意を払おう

## 次回予定

### TODO

- floodgateでランダムプログラムを走らせる

### 短期目標

- 金曜夜（23日夜）までに、floodgateでランダムを走らせる（明日）

floodgate: http://wdoor.c.u-tokyo.ac.jp/shogi/floodgate.html
iTextのライセンスについて


Javaを使ってPDFファイルを生成するために重宝するライブラリ[iText](http://itextpdf.com)。是非とも使いこなせるようになりたいライブラリの一つです。

さて、iTextは2009年のver.5リリースからライセンスが大幅に変更になりました。それについて少し調べてみました。

#ver.4系はLGPLとMPLのデュアルライセンス

ライセンスについて分かりやすく解説してくれている[応用情報技術者試験ドットコム](http://www.ap-siken.com/kakomon/25_aki/q21.html)の解説を引用します。
##LGPL(Lesser General Public License)ライセンス
> 厳格なGPLから派生したライセンスで、他のプログラムにリンクされることを前提としたライブラリのために作成された。
「改変や再コンパイルの自由」や「二次著作物を再頒布する場合のソースコードの公開」などはGPLと同等だが、LGPLライセンスされたライブラリをリンクして使用するプログラムの頒布に対する制限は、

> ・動的リンク：本体プログラムのリバースエンジニアリングを禁止する条項を含めてはならない。
> ・静的リンク：本体プログラムのソースコード、またはオブジェクトコードを公開しなくてはならない。

>というように動的リンクであれば本体プログラムのソースコードを公開する義務がないライセンスになっている。

##MPL(Mozilla Public License)ライセンス
> ネットスケープコミュニケーションズとMozilla Organization(後のMozilla Foundation)によって作成されたコピーレフトのライセンスのひとつ。二次著作物にも自動的にMPLライセンスが適用されるため、プログラムを頒布する場合にはソースコードを公開する義務が生じるが、GPLと比較するとコピーレフト性は弱く、MPLライブラリに静的／動的リンクするプログラムはライセンス適用の対象外となる。

私の場合iTextを改変して配布することはないので、関係があるのは静的・動的にリンクする場合です。デュアルライセンスのうちMPLの方を採用すれば、 __静的・動的にリンクした自分のプログラムはソースを公開する必要はない__ ということですので一安心です。

ver.4系はライセンス的に非常に使い勝手が良いので、私は今でもこちらを使っています。ver.4系の最後のリリースであるitext-4.2.1.jarは検索すればたくさん見つかります（例えば[こちら](http://mvnrepository.com/artifact/com.lowagie/itext/4.2.1)）。

#ver.5系はAGPLライセンス

__AGPL(Affero GPL)__ は、MPLとは正反対で相当厳しいライセンスなようです。[このスライド](http://www.slideshare.net/nippondanji/okuno-agpl)を見れば、いかに厳しいかがよく分かります。なにせあの __GPL(General Public License)__ よりも厳しいのですから。
ですので、クローズドなアプリ内でiTextを使用する（ソースコードの公開を回避する）ためにはiTextの商用ライセンスの購入が必要となります。