OmniAICreator/Qiita-1.07M huggingface dataset:
Docker 1.11 リリース情報の要約

# 概要

Docker 社のブログに Docker 1.11 リリースに関する投稿があり、以下は、技術的な要素を要約したもの＋各リリースノートへのリンク。参考程度にどうぞ。

* [Docker 1.11: The first OCI-compliant runtime, built on containerd](https://blog.docker.com/2016/04/docker-engine-1-11-runc/)


# Docker 1.11 のリリース

* Docker Engine は [runC](http://runc.io/) と [containerd](https://containerd.tools/) を基にして開発した（OCI準拠）初めてのリリース。
* Docker が [昨年6月](https://blog.docker.com/2015/06/runc/)にコンテナ規格とランタイムを寄贈した成果。
* containerd を去年12月に[発表](https://blog.docker.com/2015/12/containerd-daemon-to-control-runc/) し、Engine に取り込んだ初めてのリリース。
* Docker Engine を使えば自動的に OCI に準拠するシステムを使うことになる。
* コマンドラインや API に変更はない。これまで通り、ユーザは Docker Engine と通信する。
* Engine は containerd と通信する。containerd はランタイムとして runC を使う。

![docker111.png](https://qiita-image-store.s3.amazonaws.com/0/13002/02de6fd8-ea0d-2fc9-a18f-817109819baf.png)


* containerd との統合により、Docker のコードがキレイになり、歴史的なバグも修正。
* コンテナ作成時間が前よりも速くなり、将来的には更に改良。
* runC は [Open Containers Runtime specification](https://github.com/opencontainers/runtime-spec)（オープン・コンテナ・ランタイム仕様）に準拠する初の実装であり、Docker Engine の標準 executor （実行ランタイム）。
* ランタイムは利用者の用途に応じて取り付け・取り外し可能。将来的には他の executor もサポート。
* 更に詳細 https://blog.docker.com/2016/04/docker-containerd-integration/

# Docker Engine 1.11 の機能

* DNS ラウンドロビン負荷分散：Docker ネットワーク上でコンテナの負荷分散ができる。複数のコンテナを同じエイリアスで指定すると、Docker のサービスディスカバリがラウンドロビン DNS でアドレスを返す。
* VLAN サポート（実験的）：experimental 版で VLAN のサポート。
* IPv6 サービス・ディスカバリ：AAAA レコードを返せるようになる。
* [Yubikey](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) ハードウェア・イメージ署名をサポート 
* ネットワークとボリュームのラベル対応：コンテナやイメージ同様、キーバリュー形式でラベルを指定可能に。
* device mapper 利用時、ディスク領域が少なくなった時の対処：オプション `dm.min_free_space` で完全に領域を圧迫する前に停止。
* docker inspect に  status フィールド：コンテナの状態を確認できる。
* リリースノートに詳細 https://github.com/docker/docker/releases/tag/v1.11.0

# Compose 1.7

* `docker-compose up` に ``--build`` オプション： ``docker-compose build`` と ``docker-compose up`` を１つに。必要に応じ、実行時に毎回最新版をビルドできる。
* `docker-compose exec` コマンド： ``docker exec`` コマンドのミラーリング。
* リリースノート https://github.com/docker/compose/releases/tag/1.7.0

# Swarm 1.2

* コンテナの再スケジューリング（rescheduling）が安定版に：ノードが停止すると、コンテナを自動的に再スケジュールする。
* リリースノート https://github.com/docker/swarm/releases/tag/v1.2.0

# Machine 0.7

* 新しい Azure API に対応
* リリースノート https://github.com/docker/machine/releases/tag/v0.7.0

# Registry 2.4

* ガベージコレクション：管理者向けのクリーンアップ機能。
* S3 ドライバが高速・安定化：公式 Amazon S3 SDK に対応
* リリースノート https://github.com/docker/distribution/releases/tag/v2.4.0

# 参考

* Docker 1.11: The first OCI-compliant runtime, built on containerd | Docker Blog
 * https://blog.docker.com/2016/04/docker-engine-1-11-runc/
Windowsで,β版Android Studioを使用する時のAndroidSDKの設定など

- 非常に非本質的でやれやれな話だが,Android2.0が出たばかりでなかなかダウンロードできない近時,同じようにはまっている人が多いのではと思い,メモ書きを載せておく。。

- その他のAndroid Studioの環境設定については, [Android StudioにおけるAndroidSDKやJDKのパス設定](http://qiita.com/hidekuro/items/d2aadb907c617a4554db)を参考のこと。


#出発点:Android Studioでは,AndroidSDKはAndroid SDK Managerで別途管理

バージョンアップが盛んなAndroid Studioではβ版でも正式板でも,AndroidSDKはAndroid SDK Managerによって別フォルダに管理することが推奨されている(正式板では,Android SDK Managerを含めた一括ダウンロードが提供されているため,ユーザーがこれを必ずしも意識しなくとも良い)。
Android SDK Managerは,ディフォルトでユーザーフォルダの"AppData"フォルダにおいてSDKを管理する(すなわち"C:\Users\ユーザー名\")。


"AppData"フォルダは,Windowsユーザーならおなじみの"隠しフォルダ"であり,「隠しファイル、隠しフォルダー、及び隠しドライブを表示する」ことでエクスプローラーで表示されるようになる。
=> [Windows 7での解説](http://www.jaskun.com/windows7/appdata-dasu/)

問題は,Android Studio(今回は2.1β)のフォルダ表示(=>Javaベース)が隠しフォルダに"あまり対応していない"こと。例えば,Android Studio初回起動時に表示される「Android SDKがないアラート」(以下)のUIからは,”C:\Users\geeks\AppData"にたどり着けない。。
![noGood.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/e9cdeb15-07ba-c18e-872b-7e1d6e55b357.png)

#解決策:直接AppDataと"手入力"
「Android SDKがないアラート」はキャンセルして,いったんAndroid Studioをスタートさせる。そのうえで「Setting->System Settings-> Android SDK」に入り,Android SDK Location:の横にある**Edit**をクリックする。すると, SDK Components Setup画面(以下)がスタートする。

![Good.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/4ffdee9c-4b19-e35f-37d6-9ba0d31779f9.png)


ここでのポイントは,Android SDK Location:の右下にある**...**すると画面右に表示される,"Select Android SDK install directory"の入力欄に,”C:\Users\geeks\AppData"など,ユーザー名下のAppdataフォルダを直接手入力すること(以下)。

![select.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/aa87abd0-3a42-7b67-2ff6-26377ec3e3ef.png)

すると,"Select Android SDK install directory"のフォルダUI画面に隠しフォルダが表示されるようになり,”C:\Users\geeks\AppData\Local\Android\android-sdk”等,android-sdkのインストール先を辿れるようになり, Android StudioとAndroid SDK Managerとが紐づくようになる。

やれやれ,約2時間,時間を無駄にした。。。
linebotでズンドコきよし

話題のlinebotをherokuで試してみました。

# はじめに
最近会社でslackが導入されてbot作ったばかりだった矢先に、linebotが作れるようになったとのことだったのでやってみました。
ズンドコ機能についてはslack用につくったのを流用しました。
当たり前ですが、hubotでlinebotが作れるとなると、今までの資産がつかえるのね。素敵。
hubot-line-trialの作者様に感謝。

なお、開発マシンはMac。

# 必要なやつ

```
$ brew install heroku-toolbelt
$ brew install node
$ npm install -g hubot hubot-line-trial yo generator-hubot coffee-script
```

# linebot登録
[https://business.line.me/ja/products/4/introduction](https://business.line.me/ja/products/4/introduction)から登録しとく。

# つくりかた

```
$ mkdir linebot
$ cd linebot
$ yo hubot
$ git init
$ heroku login
$ heroku create:apps {アプリ名}
$ heroku addons:create fixie
```

```yo hubot```したときのadapterには```line-trial```を入力。

アドオンのfixieは、ころころ変わるherokuのIPを固定してくれるらしい。
```heroku addons:create fixie```のあとにIPが表示されるからlinebotのServer IP Whitelistに設定。
ついでにlinebotのCallback URLに```https://{アプリ名}.herokuapp.com:443/hubot/incoming```を入力しとく。

botのChannel ID、Channel Secret、MIDを環境変数に設定。

```
$ heroku config:set LINE_CHANNEL_ID={Channel ID}
$ heroku config:set LINE_CHANNEL_SECRET={Channel Secret}
$ heroku config:set LINE_CHANNEL_MID={MID}
```

# ズンドコ機能
```coffeescript:linebot/script/zundoko.coffee
zundoko = ->
  result = ''
  check = []
  zundokoList = ['ズン', 'ドコ']
  until check[check.length-6..check.length].join('').match(/([^(ズン)]ズンズンズンズンドコ|^ズンズンズンズンドコ)$/)
    wordSelector = Math.floor(Math.random() * zundokoList.length)
    check.push(zundokoList[wordSelector])
    if check.length == 5 and check.join('') == 'ズンズンズンズンドコ'
      break
  trial_num = check.length
  check.push('キ・ヨ・シ！！！ (試行回数: ' + trial_num + '回)')
  result = check.join('\r\n')
  return result

module.exports = (robot) ->
  robot.hear /^(ず|ズ)(ん|ン)(ど|ド)(こ|コ)$/, (msg) ->
    result = zundoko()
    msg.send result
```

"ズンズンズンズンドコ"の前は"ズン"が来たらいけないと思って、少しストイックなズンドコにした。
だって"ズンズンズンズンズンズンズンズンズンズンズンドコ"だとキヨシも歌いづらいだろうし。


## ずんどこしてみる
```
$ bin/hubot
```

```
zundoko> ズンドコ
ズン
ドコ
ドコ
ズン
ズン
(中略)
ズン
ドコ
ズン
ズン
ズン
ズン
ドコ
キ・ヨ・シ！！！ (試行回数: 47回)
```

# でぷろい
```
$ git add .
$ git commit -m 'first commit'
$ git push heroku master
```

# やってみる
linebotのページの下の方にあるQRコードからbotに話しかけてみる。
![スクリーンショット 2016-04-14 11.05.36.png](https://qiita-image-store.s3.amazonaws.com/0/49825/30930937-37a2-a91e-8700-a91824dd2d74.png)

ズンドコの試行回数の大小で勝ち負け決めるゲームして、飲み会で飲みまくるぞ〜〜〜


# 参考
[Line BOT API Trial + hubot で heroku 上にBot作成 | liptonista](https://liptonista.wordpress.com/2016/04/10/build-hubot-using-line-bot-api-trial/)
[hubot-line-trialを使ってhubotからlinebotに通知させてみた - Qiita](http://qiita.com/tochi_ondy/items/fb3905c09008cfacf9c9)
BigQueryの結果をGoogleSpreadSheetに簡単に保存する方法


# Save to Google Sheetsボタンを押すだけ
![スクリーンショット_2016-04-14_11_26_13.png](https://qiita-image-store.s3.amazonaws.com/0/74551/fa026301-f69c-a828-fc6d-c64bc3075f98.png "スクリーンショット_2016-04-14_11_26_13.png")

# 自動的にGoogleSpreadSheetに読み込まれます
![スクリーンショット 2016-04-14 11.31.17.png](https://qiita-image-store.s3.amazonaws.com/0/74551/91a83ab7-627e-3c76-33b0-9d65494a8a86.png "スクリーンショット 2016-04-14 11.31.17.png")

気づいたらボタン一発でGoogleSpreadSheetに保存する機能が付いていました。
いちいちcsvでダウンロードしてimportしていた時と比べると桁違いに便利になりますね。
Rails+rbenv+GitHubでローカル開発環境を構築する

備忘録。
たまにやると忘れているので。

## Preparation

Homebrew: [Official](http://brew.sh/index_ja.html)
rbenv: [Official](https://github.com/rbenv/rbenv)
Git: `brew install git`
GitHub: [Official](https://github.com)

## Mkdir for Project

```
$ mkdir ~/dev/rails/myapp
$ cd ~/dev/rails/myapp
```

## Specify Ruby Version 

```
# インストール済みのrubyのバージョンを確認
 $ rbenv versions

# インストール可能なrubyのバージョン確認
 $ rbenv install --list

# バージョンを選択してインストール（少々時間がかかる）
 $ rbenv install 2.2.3

# インストールに成功したら、 
 $ rbenv rehash

# 念のため、インストール済みのrubyのバージョンを確認
 $ rbenv versions

# プロジェクトで使用するrubyバージョンを指定
 $ rbenv local 2.2.3
 $ rbenv rehash

# => プロジェクトルートに".ruby-version"が作られる
 $ ls -la

# rubyバージョンを確認
 $ ruby -v
  # => ruby 2.2.3
```

## bundler

```
# 先ほどインストールしたrubyにbundlerがインストールされているか確認
 $ rbenv exec gem list

# なければインストール
 $ rbenv exec gem install bundler
```

## Install Rails

```
# Create Gemfile
 $ bundle init

# Edit Gemfile
 $ vim Gemfile
  # gem "rails"の行の先頭のコメントアウトを外す

# Install Rails（少々時間がかかる）
 $ bundle install --path vendor/bundle

# バージョンを確認
# バージョンが表示されればインストールに成功
 $ bundle exec rails -v
  # => Rails 4.2.4
```

## Create New Rails App

- `-B`オプションを指定（`bundle install`が自動で実行されない）
- `-T`オプションを指定（Rspecを使用する場合）
- `-d`オプションを指定（DBを`sqlite3`から変更する場合）

```
# DBにPostgreSQLを使用
 $ bundle exec rails new . -BT -d postgresql

# Gemfileは上書きしてOK
 conflict  Gemfile
 Overwrite /Users/****/dev/rails/myapp/Gemfile? (enter "h" for help) [Ynaqdh] y

# .gitignoreに"vendor/bundle"を追記する
 $ vim .gitignore
  add "/vendor/bundle"

# gemをインストール
 $ bundle install
```

## Settings PostgreSQL

```
$ createuser myapp
$ createdb myapp_development
```

## Push to Github

```
$ git init
$ git remote add origin "GitHubのリポジトリ"
$ git add .
$ git commit -m "Setting my rails app"
$ git push -u origin master
```
Overleafを使う際のメモ

# Overleafって英語にしか対応していないと思っていたけど、日本語のパッケージがあったのでメモ

 [Overleaf 日本語](https://www.overleaf.com/latex/templates/japanese-latex-template/jjrfzbwkyyjs#.Vw7_gvl96Hs "Qiita")
Thunderbird での HTML メール作成方法

# Thunderbird での HTML メール作成方法

これまで TEXT メールを使っていましたが、メール内のリンクに Google Analytics のパラメータを設置したくて作成方法を調べました。

ちなみに、パラメータの設定方法はこちらを参考にしてください。
https://support.google.com/analytics/answer/1033867?hl=ja

どのリンクが見られているかを把握するためには、パラメータ付きのリンクが必要だったのですが、TEXTメールだとURLが長くなってしまい、リテラシーが高くない方は不安に思うのかクリックされにくい印象があります。

弊社でよく使っているメールクライアントが Thunderbird (サンダーバード) だったので、まずは Thunderbird での作成方法です。他のメールクライアントでも作成できるはずなので、調べてみてください。

## 作成方法
1. 「ツール」→「アカウント設定」を選択すると、アカウント設定画面が開きます。
2. HTML メールを作成したいメールアカウントの「編集とアドレス入力」をクリック。
3. 「編集」項目に「HTML形式でメッセージを編集する」のチェックボックスがあるのでチェックを入れます。あとは「OK」ボタンを押して、アカウント設定を完了させます。
4. 次に「作成」から普通にメール作成画面を開きます。
5. 「挿入」→「HTML」を選択すると、HTML の入力画面が開きますので、別に作っておいた HTML をコピペして 「挿入」 を押すと HTML メールの出来上がり。

画像を入れたい場合は、サーバーにアップロードしておいて、リンクを貼って表示させるのがよいでしょう。
Bundler ignores "no_proxy"の対処法

# 問題

* Ruby on RailsのGemfileに、https://rubygems.org とprivate gemを両方使っている
* プロキシ経由して、インターネットへアクセスしないといけない
  * ubuntuに、http_proxyとno_proxy(社内サーバー)を設定している
* private gemは、社内のサーバーに保存されている(アクセスは、プロキシ不要)

* Gemfile

```
source 'https://rubygems.org'
source 'https://社内ドメイン'

gem 'rails'
gem 'private-gem'
```

* 上記の場合は、bundle installを実行すると、社内サーバーから、gemファイルをDLできない
* ちょっと調査して、bundler ignores no_proxy問題が分かった
    * http://stackoverflow.com/questions/12158237/bundler-ignores-no-proxy



# 対処法

## 概要
* 社内gemサーバーを使わない
* private-gemをDLして、指定したフォルダにunpackして、Gemfileにprivate-gemのpathを追加する
* bundle installして、OK

## 手順

* 1. private gem のDL
* 2. unpack

```
gem unpack private.gem --target /path/to/private-gem
```

* 3. Gemfile修正

```
source 'https://rubygems.org'
#source 'https://社内ドメイン'

gem 'rails'
gem 'private-gem', :path => "/path/to/private-gem"
```

* 4. proxy設定
* 5. bundle install

## メリット
* private-gemファイルが少ない場合は、上記の手順より、速くbundle installできる
* しかし、private-gemファイルが多い場合は、DLとunpackが面倒になる


# その他の対処法
* squid3（未確認）
  * ubuntuに、squid3プロキシサーバをインストールして、社内と社外の振り分けは、squid3に任せる
  * 社内に、専用gem bundle proxyサーバーを用意すると、便利になるはず
* 社内と社外を区別して、bundle install


# 参照
* http://stackoverflow.com/questions/12158237/bundler-ignores-no-proxy
* http://stackoverflow.com/questions/5633939/how-do-i-specify-local-gem-files-in-my-gemfile
* http://www.server-world.info/query?os=Ubuntu_14.04&p=squid
* http://ruby.studio-kingdom.com/bundler/bundle_config/
【俺メモ】VagrantでNode.jsサーバ(CentOS7)をWindows上に10分でチョチョイのチョイっと構築

ほんま、便利な世の中になったで。
10分ってのはだいたいの感覚やから細ぇことは気にせんといてや。
（※ダウンロード時間は省くで）

# １．VirtualBoxインストール

とりあえず、[公式ページ](https://www.virtualbox.org/)からダウンロードしてインストールしてや。
VMWareでもええにゃけど、Vagrant自体VirtualBox用やさかいな。

# ２．Vagrantインストール

次はこっちや。[公式ページ](https://www.vagrantup.com/)からダウンロードしてさくっとインストールしてや。

# ３．サーバ起動

## Box取得
[ここ](http://www.vagrantbox.es/)のページの検索ボックスに「CentOS 7」て入れてから、VirtualBox用のBoxのアドレスをコピーしてや。
次にコマンドプロンプト起動してや。

```shell-session:cmd.exe
> mkdir hogehoge
> cd hogehoge
> vagrant box add {box名} {boxのurl}
> vagrant init {box名}
```

## Vagrantfile編集(ネットワーク設定)
initした後に出来たVagrantfileをエディタで開いて編集や。
コメントになってるさかい、#消して外してや。
あとIPアドレスも適当に設定してな。
（idは必要な場合だけでえぇで。）

```rb:Vagrantfile
  config.vm.network "private_network", ip: "192.168.xxx.xxx", id:"{hoge_network}"
```

## サーバ起動
んで、サーバ起動やな。ついでにログインもするで。

```shell-session:cmd.exe
> vagrant up
> vagrant ssh
```

## 共有ディレクトリのマウントに失敗する場合
/vagrantディレクトリの共有に失敗する場合は、ログインした後にこのコマンド叩くんやで。

```bash:bash
$ sudo /etc/init.d/vboxadd setup
```

# ４．Node.js環境構築や

## nodebrewインストール

vagrantからサーバにログインした状態からスタートな。

```bash:bash
$ curl -L git.io/nodebrew | perl - setup
$ echo "export PATH=$HOME/.nodebrew/current/bin:$PATH" >> ~/.bash_profile
$ source ~/.bash_profile
```

## Node.jsインストール

とりあえず、最新安定版を入れるで。

```bash:bash
$ nodebrew install-binary stable
$ nodebrew use stable
```

## その他インストール
npmやらで環境構築してや。

# ５．まとめ（プロビジョニング）
いちいち起動してからやらんでもvagrantにはprovisioningがあるやん。
というわけで、Vagrantfileを修正するで。
プロビジョニングは__rootユーザーで実行__されるからprivileged: falseオプションを付けて、vagrantユーザーで実行や。
(※もちろんroot権限がいるならsudoつけとけよ)
ここはテストに出るさかい要チェックや。

```rb:Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "{box名}"
  config.vm.network "private_network", ip: "192.168.xxx.xxx", id:"{hoge_network}"
  config.vm.provision "shell", privileged: false, inline: <<-SHELL
    sudo /etc/init.d/vboxadd setup
    curl -L git.io/nodebrew | perl - setup
    echo "export PATH=$HOME/.nodebrew/current/bin:$PATH" >> $HOME/.bash_profile
    source $HOME/.bash_profile
    nodebrew install-binary stable
    nodebrew use stable
  SHELL
end
```

これで、vagrant upするだけやから、まぁ、コマンド叩いて待つだけになってもうたな。

あー、あと、Vagrantのバージョンは1.3.0以降な。
詳しくは[ここ](http://www.msng.info/archives/2013/09/vagrant-1-3-0-no-provision.php)を参考にしてや。（※動作確認Vagrant 1.8.2）
Gitlabとkanboardを連携してみた所感

# kanboard+GitlabPlugin導入方法

## docker でのインストール方法

docker-composeでインストールしてみます。

- docker-compose.ymlを下記のように記述

```yaml
main:
    restart: always
    image: kanboard/kanboard:stable
    volumes:
        - ./plugin:/var/www/kanboard/plugins
    ports:
        - "80:80"
```
- docker-compose.ymlと同じディレクトリにpluginディレクトリを作成
- pluginディレクトリに公式からダウンロードした [GitlabPlugin](https://kanboard.net/plugin/gitlab-webhook) を展開し設置
- `docker-compose up -d`を実行

これでとりあえずインストールは完了です。
以下docker実行環境に当てているドメイン名を`dock.er`とします。

## kanboard上で設定

kanboardはスタンドアロンでプロジェクト、アカウントを持っているので、Gitlabとは**別で**設定が必要です(この辺シームレスにしたいですね)

- http://dock.er/ にアクセスし下記アカウントでアクセス
	- id: admin
	- pass: admin
- 右上の**+**からnew projectでプロジェクト作成
- 左の**Integration**にあるGitlab webhooksのところのテキストボックスの文字列をコピー
- ホスト名が違うので localhost→ dock.erに変更
- **Automatic actions**にて下記を設定
    - 1
        - Event name = Gitlab commit received
        - Action name = Close a task
    - 2
        - Event name = Gitlab issue closed
        - Action name = Close a task 
    - 3
        - Event name = Gitlab issue opened
        - Action name = Create a task from an external provider
    - 4
        - Event name = Gitlab issue comment created
        - Action name = Create a comment from an external provider
    - 5
        - Event name = Gitlab commit received
        - Action name = Create a comment from an external provider


## Gitlabに設定

- コピーしたurlをGitlabのプロジェクトのWebhooksに設定
- **Push event**, **Comments**, **Issue events**にチェックを入れる
- **Add Web Hook**をクリック

以上で設定は完了です。
Automatic actionsに設定したとおりGitlab側でissueが作成されたり、コメントされたり、closeされたりすると、kanboard側でも同期されます

# イケてない点

- issueの登録とissueの移動をする画面が同じ画面ではない
	- 全部kanboard上でハンドリングできればだいぶマシになるはず
- gitlabとアカウント情報、プロジェクト情報が別
	- 非同期でもいいので、シンクする何かがあるといいですね。
El Capitanでtherubyracerがインストールできない問題解消！

# 導入

El Capitanにアップデートして、`bundle install`で`therubyracer`を入れようとしたけど下記のようなエラーが出てインストールできない人向けです！

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

・・・途中省略・・・

An error occurred while installing therubyracer (0.12.2), and Bundler cannot continue.
Make sure that `gem install therubyracer -v '0.12.2'` succeeds before bundling.
```

# 最新(2016年４月14日現在)のgccをインストールする

## インストール手順

- [Homebrew](http://brew.sh/index_ja.html)を使って最新のgccを入れる

```
brew tap homebrew/versions
brew install gcc49
```

- /usr/local/bin以下にシンボリックリンクをはっておく

```
ln -s /usr/local/bin/gcc-4.9 /usr/local/bin/gcc
ln -s /usr/local/bin/g++-4.9 /usr/local/bin/g++
```

## インストール確認

- パス確認

```
$ which gcc
/usr/local/bin/gcc
```

- バージョン確認

```
$ gcc --version
gcc (Homebrew gcc49 4.9.3) 4.9.3
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

# v8のインストールする

- 最新のv8だとtherubyracerが正常にインストールできないので消す

```
brew uninstall v8
```

- 古いバージョンのv8をインストール

```
brew install v8-315
```

# bundleを使ったtherubyracerのインストール

```
bundle config build.libv8 --with-system-v8
bundle config build.therubyracer --with-v8-dir=/usr/local/opt/v8-315
bundle install
```

# 完了

- これで正常にインストールできました！
Bootstrap 4のグリッドシステムの基本を学ぼう

Twitter社製のUIフレームワーク「[Bootstrap](http://getbootstrap.com/)」でのレイアウトにおいて、**ポイントとなるのは[グリッドシステム](http://v4-alpha.getbootstrap.com/layout/grid/)の理解です**。本エントリーではBootstrapのグリッドシステムについておさらいしつつ、最新のBootstrap 4に対応したグリッドレイアウトの方法を紹介します。

# そもそもグリッドシステムとは？
グリッドとは「画面を縦横に分割する線」のことです。横の線で分割されたエリアは「行」、縦の線で分割されたエリアは「列」となります。これらの**「行」と「列」を使ってボックスを配置していくのがBootstrap 4のグリッドシステムの基本**です。

## グリッドシステムの「行」
グリッドシステムの「行」は画面を横に分割して作るエリア。行の幅は画面横幅であり、高さは中のコンテンツに応じます。

![](https://qiita-image-store.s3.amazonaws.com/0/67884/f75739cc-94e3-f4d1-dd9a-0bd04eb44173.png)

## グリッドシステムの「列」
グリッドシステムの「列」は、**画面を縦に12分割して作るエリア**。列の幅は画面幅の12分の1です。

![](https://qiita-image-store.s3.amazonaws.com/0/67884/02aec6f3-7bb5-5969-f091-b659ba5e3cd3.png)

# ボックスのレイアウト方法
ボックスとは`<div>`タグや`<section>`タグ等で作られる矩形のブロック要素です。ソースコードを交えながら具体的なレイアウト方法について見てみましょう。

## 1.「行」の作成
まずは「行」の作成です。**`row`クラスを使います**。行を定義することで**「ここからここまでがグリッドシステムを使ったレイアウトである」と宣言する**ことになります。

```html
<!--行1-->
<div class="row">
</div>

<!--行2-->
<div class="row">
</div>

<!--行3-->
<div class="row">
</div>
```

## 2.「行」の中で何個分の列の幅を使ってボックスを配置するかを指定
行ができたら「**何個分の列を使ってボックスを配置するか**」を決定します。ボックスは行の中に何個でも作成可能です。


![](https://qiita-image-store.s3.amazonaws.com/0/67884/d32ee25e-2e31-b84b-d6de-4eb36ef197fc.png)

HTMLコードでは、`col-(画面幅)-(何個分の列か)`クラスを使って列を作ります。「画面幅」の部分には`xs`や`sm`といった文字列が入るのですが、これについては次の記事で説明します。ひとまず`xs`を入れておいてください。10列分の幅があるボックスを配置した行、7列幅と5列幅のボックスを配置した行のコードは下記です。

```html
<!--行1-->
<div class="row">
  <!--10列幅分のボックス-->
  <div class="col-xs-10 bg-primary">10列</div>
</div>

<!--行2-->
<div class="row">
  <!--7列幅分のボックス-->
  <div class="col-xs-7 bg-success">7列</div>
  <!--5列幅分のボックス-->
  <div class="col-xs-5 bg-info">5列</div>
</div>
```

なお、それぞれのボックスには背景色設定のために`bg-*`系のクラス（[Utility classes · Bootstrap ](http://v4-alpha.getbootstrap.com/components/utilities/#contextual-colors-and-backgrounds))を設定しています。

## 実行結果
実行結果は[jsdo.it](http://jsdo.it/tonkotsuboy/qxmsd)を参照ください。次のキャプチャーのようにグリッドシステムを使ったボックスのレイアウトができました。

![](https://qiita-image-store.s3.amazonaws.com/0/67884/dcbb6add-26c5-fedd-0892-21d31b0a9e70.png)

# グリッドシステムは怖くない
今回はBootstrapのグリッドシステムの基本を紹介しました。CSSを一切書くこと無く、手軽に横並びを含むボックスレイアウトができました。次の記事「[こうすれば理解できるBootstrap 4のレスポンシブWebデザインとそのCSS - Qiita](http://qiita.com/tonkotsuboy_com/items/7c01460b59c3ca5ee047)」では、グリッドシステムを駆使したレスポンシブWebデザインの方法について説明します。
アイテムリストが並んでいるだけのデータを0と1の行列に変換する

```
a, b, c
b, c, d
d, e, f
```
こういうアイテムリストが並んでいるデータを

```
  a b c d e f
1 1 1 1 0 0 0
2 0 1 1 1 0 0
3 0 0 0 1 1 1
```
こういう0と1の行列に変換したい。
Rのarulesパッケージを使うと簡単にできるようだ。

```r
require(arules)
tran <- read.transactions("trans.txt", sep=",", format="basket")
mat1 <- as(tran, "matrix")
head(mat1)
```
# 参考
http://tjo.hatenablog.com/entry/2014/03/20/190000
http://qiita.com/hidetarou2013@github/items/dc3b448542c5fce7a6ce#matrix_convert
LiveStyleのAtom用プラグインが出てた


##概要

エディタで書いたCSSをブラウザ上でリアルタイム同期してくれるLiveStyleですが、SublimeText専用のイメージがありました。
普段使いのエディタがAtomなので、Atomで出来たらいいんだけどなーとたまたま公式を眺めていたら
*Atom plugin is available for beta testing.*
との記載が。
どうやら2016/1からβ版リリースがされているようです。

##環境

OS X El Capitan(10.11.4)

##導入

プロジェクトは[ココ](https://github.com/livestyle/atom)

README.mdに従ってlivestyle-atomパッケージをインストール

> This plugin can be installed as regular Atom package:
>
> 1. In Atom, go to `Preferences > Install`.
> 2. Search for `livestyle-atom` plugin and install it.
>
> Or you can install it via `apm`:
>
> `apm install livestyle-atom`

LiveStyle.appとChrome拡張機能は既にインストール済みでした。

インストール後、LiveStyle.app Chrome Atomをそれぞれ再起動。

##インストール完了、動作確認

[公式のデモ](http://livestyle.io/docs/using-livestyle/)にて動作確認。

おお、何の違和感もなく使える！

##おわりに

初めに書いた通りまだβ版なので不具合があるかも知れません。
またLiveStyle.appもAtomに未対応のため、画像のようにSublime Textがねーよ！状態です。

![LiveStyle.app.jpg](https://qiita-image-store.s3.amazonaws.com/0/119349/f667afd8-8cfe-543e-52f3-55db075b77e2.jpeg "LiveStyle.app.jpg")


とは言え使用感は全く違和感ありませんし、Atomに乗り換えたいけどLiveStyleのおかげでSublime Textを脱却出来ない人や、LiveStyleを捨ててAtomに乗り換えた人はこれを機に導入を考えて良さそうかと思います。
rbenvで新しいバージョンのインストールに失敗した時の対処

## rbenv installでの失敗

ec2 amazonlinuxでの事象
rbenv versionsで2.3.0がなかったのでrbenvとruby-biuldをpullし直した後の話

```
# rbenv install 2.3.0

　・
　・
　・
 99% [938/945]  vm_backtrace.c
 99% [939/945]  vm_dump.c
 99% [940/945]  vm_eval.c
 99% [941/945]  vm_exec.c
 99% [942/945]  vm_insnhelper.c
 99% [943/945]  vm_method.c
make: *** [rdoc] Killed
```

これで対処してみる

```
# export RUBY_CONFIGURE_OPTS=--disable-install-doc
```

再度実行

```
# rbenv install 2.3.0

Downloading ruby-2.3.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...
Installed ruby-2.3.0 to /usr/local/rbenv/versions/2.3.0
```

確認

```
# rbenv local 2.3.0

# ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
```

## 参考
https://github.com/rbenv/ruby-build/issues/156#issuecomment-54922357
HP IceWall SSO 10.0 とは

# HP IceWall SSO 10.0 とは 
> IceWall SSOは、シングルサインオンにより一度の認証で複数のWebアプリケーションへのログインを実現し、さらにセキュリティと「アクセスコントロールの4A」の統合を実現する「統合認証基盤」です。
> エージェントレスでOSやWebアプリケーションに制限の少ないリバースプロキシ方式を主体としています。
>![what_img01.jpg](https://qiita-image-store.s3.amazonaws.com/0/121359/9bcce5c3-708f-876a-daef-53cb44a9f301.jpeg)
> 引用元：http://h50146.www5.hp.com/products/software/security/icewall/sso/about/what.html

## シングルサインオンとは
一回のユーザ認証で独立した複数のシステムにログインを行えるもの  

## アクセスコントロール4Aとは
1. Authentication
1. Authorization
1. Auditing
1. Administration

# HP IceWall SSO 10.0 の基本機能
>|No|機能名|
>|---|---|
>|01|認証機能|
>|02|認可機能|
>|03|シングルサインオン機能<br>(Single Sign On = SSO)|
>|04|セッション管理機能|
>|05|リバースプロキシ機能|
>|06|URL変換機能<br>(ホスト隠蔽機能)|
>|07|キーワード変換機能|
>|08|情報継承機能|
>|09|パスワード変更機能|
>|10|自動フォーム認証機能|
>|11|ユーザーExitルーチン|
>|12|クロスサイトスクリプティング対策機能|
>|13|バッファオーバーフロー対応|
>|14|詳細ロギング機能|
>|15|パフォーマンスモニタツール|
>|16|IPv6対応|
>|17|ノンストップメンテナンス|
>|18|パスワードのSHA2対応<br>カラムの高度暗号化|
>|19|オリジナルURL対応<br>（Virtual Host 対応）|
>|20|HTTPヘッダの制御|
>引用元：http://h50146.www5.hp.com/products/software/security/icewall/sso/function/
Rails Tutorial 第二版(Rails 4.0)の機能を拡張する2(検索機能)


Ruby on Rails Tutorial の第二版11.4.1にある、「サンプルアプリケーションの機能を拡張する」を実践しました。今回は、マイクロポストの検索機能の実装です。最新の第三版ではなく第二版なのは、自分の会社がRspecを用いているからです。

[Ruby on Rails チュートリアル：11.4.1](http://railstutorial.jp/chapters/following-users?version=4.0#sec-search)

# 仕様

以下、 今回の仕様です。あくまでも演習ということで最低限の機能しか実装していません。

1. 検索するのはマイクロポストのcontentカラムのみ(ユーザー名や投稿日時は検索しない)。
2. ホーム画面の左上に検索ワード入力用のテキストボックスと検索ボタンを設置
3. テキストボックスが空白の状態で検索すると、 全マイクロポストが表示。


# 実装

以下実装です。

## ビューへの検索フォームの追加

Tutorialの進め方によってビューの仕様が違うと思うが、 検索フォームがホーム画面に表示されるように以下のコードを適当な箇所に挿入。

```html
<%= form_tag root_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>
```

## 検索のためのscope

Micropostモデルに検索に用いるためのscopeを追加する。

```rb:app/model/micropost.rb
class Micropost < ActiveRecord::Base
  ・
  ・
  scope :search, ->(search_word){where("content LIKE ?", "%#{search_word}%")}
  ・
  ・
  ・
end
```

## searchスコープによる絞り込み

上で実装したscopeをstatic_pages_controllerで使用する。

```rb:app/controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController
  def home
  	if signed_in?
	  	@micropost = current_user.microposts.build
			
      # 元のコード
      # @feed_items = current_user.feed.paginate(page: params[:page])
      
      # 変更後のコード
      search_word = params[:search].to_s
      @feed_items = current_user.feed.search(search_word).paginate(page: params[:page])
	  end
  end
  ・
  ・
  ・
  ・
end
```

これで、簡易的な検索機能が実装できたと思います。

# おまけ

以下、 RSpecでの簡単なテストです。

```rb:spec/requests/static_pages_spec.rb

describe "Static pages" do

  subject { page }
  describe "Home page" do
  ・
  ・
  ・
    describe 'when search feeds' do
      let(:user){ FactoryGirl.create(:user) }
      before do
        FactoryGirl.create(:micropost, user: user, content: 'hello world')
        FactoryGirl.create(:micropost, user: user, content: 'hello ruby')
        FactoryGirl.create(:micropost, user: user, content: 'hogehoge')
        sign_in user
        visit root_path
      end
      describe 'hit single feed' do
        before do
          fill_in 'search', with: 'hello world'
          click_button 'Search'
        end
        it { should have_content('hello world') }
      end
      describe 'hit multiple feeds' do
        before do
          fill_in 'search', with: 'hello'
          click_button 'Search'
        end
        it { should have_content('hello world') }
        it { should have_content('hello ruby') }
      end
      describe 'don`t hit any feeds' do
        before do
          fill_in 'search', with: 'hugahuga'
          click_button 'Search'
        end
        it { should_not have_selector('li', text: 'Posted') }
      end
    end
    ・
    ・
    ・
```
AndroidでKotlinを使ったDagger2

#AndroidでKotlinを使ったDagger2
ハマったので、共有します。
Android Studio 2.0でも動きます
サンプル：https://github.com/kamedon/AS2KotlinDagger2

~~追記。。。~~
~~Submoduleまで使ったサンプルなのに、push忘れてて古いバージョンだ。。。。~~
~~あとでソースを更新しておきます。。。。。。~~
~~ごめんなさい~~
追記
SubmoduleとScopeを新たに追加してPushしました。
ActivityScopeがちゃんとできてるっぽい！

##KotlinでDagger2を使う
##app/build.gradleにDagger2を設定
重要な部分のみ抜粋
全文https://github.com/kamedon/AS2KotlinDagger2/blob/master/app/build.gradle

```
kapt {
    generateStubs = true
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

    compile 'com.google.dagger:dagger:2.2'
    kapt 'com.google.dagger:dagger-compiler:2.2'
    provided 'org.glassfish:javax.annotation:10.0-b28'
}
```
##エラー
たくさんエラーがでて困ったので共有します
###Dagger2のバージョン
compile 'com.google.dagger:dagger:2.+'
ってずっとしてたんですが、2.3だと以下のエラーが出てビルドができない！

>Error:Execution failed for task ':app:compileDebugJavaWithJavac'. >java.lang.NoSuchMethodError: >com.google.common.collect.ImmutableSetMultimap$Builder.putAll(Ljava/lang/Iterable;)Lcom/google/common/collect/ImmutableSetMultimap$Builder;

どうもAppComponentの @Component(modules = arrayOf(AppModule::class)) でエラーがでるようだ
daggar2.2 -> 2.3 の時に発生したエラーのようだ。。。 
参考：https://github.com/google/dagger/issues/356

### @Namedができない
Moduleの中で同じ型を@Providesするとエラーになるので@Namedをつけて識別するですが
MainActivityの中で、以下のように記述してました。。。
```
@Inject @Named("Toast")
lateinit var toast: PrintInterface
```
>Error:com.example.kamedon.sample20.print.PrintInterface cannot be provided >without an @Provides- or @Produces-annotated method. >com.example.kamedon.sample20.MainActivity.print [injected field of type: >com.example.kamedon.sample20.print.PrintInterface print]
というエラーが出る

どうもKotlinでのアノテーションのつけたが間違っていた。
これにだいぶ時間をくった
正しく以下の通り
```
@field:[Inject Named("Toast")]
lateinit var toast: PrintInterface
```
@Named @Injectって書くとget set field全部にアノテーションの設定がつくのかな
なので、きちんと指定しないといけないっぽい

これでKotlinで幸せDagger生活がおくれるのかしら。。。

参考:
Annotations - Annotation Use-site Targets
https://kotlinlang.org/docs/reference/annotations.html

damianpetla/kotlin-dagger-example
https://github.com/damianpetla/kotlin-dagger-example
サンプルがあって本当に感謝。。。
Realmのデータベースをドロップする

モデルを変更するたびにマイグレーションで怒られるのに疲れたのでアプリを起動するたびにRealmのデータベースをドロップすることにした。

アプリ起動時に以下のコードを呼び出してあげればOK。

```
// Drop database
let path = Realm.Configuration.defaultConfiguration.path!
if NSFileManager.defaultManager().fileExistsAtPath(path) {
    try! NSFileManager.defaultManager().removeItemAtPath(path)
}
```

## 追記

Realm1.0になってAPIが変更になり上記のコードは使えなくなってた。Realm公式ドキュメントによると以下のようにすれば良いみたい。

```
let realmURL = Realm.Configuration.defaultConfiguration.fileURL!
  let realmURLs = [
  realmURL,
  realmURL.URLByAppendingPathExtension("lock"),
  realmURL.URLByAppendingPathExtension("log_a"),
  realmURL.URLByAppendingPathExtension("log_b"),
  realmURL.URLByAppendingPathExtension("note")
]
let manager = NSFileManager.defaultManager()
for URL in realmURLs {
  do {
    try manager.removeItemAtURL(URL)
  } catch {
    // handle error
  }
}
```

参考: https://realm.io/jp/docs/swift/latest/#realm-7


## 参考

* Clear complete Realm Database
    * http://stackoverflow.com/a/26067337
# ITエンジニアのための機械学習理論入門（第3章）


## 3.1 確率モデルの利用
 * データサイエンティストが取り組む問題はデータがすべてそろっているものはあり得ない
     * どこまでいってもできることは推定でありそこに絶対的な正解はない
     * 正解はないが工夫することで精度を上げることはできる
         * データの選択
         * 手法をいろいろ試す
 * 今回は確率モデルを用いた推定方法の解説
 * 最小二乗法では得られたデータのある意味平均を通るような多項式を求めた
     * 多項式を正確に求めたとしても、データは誤差を持つ
     * その誤差の大きさを求めていく
 * 誤差を含めた多項式を求める際に以下の要素を考える
     * データが発生する多項式のモデル
         * 例えば最小二乗法と同じように重みを付けた多項式
     * データがもつ誤差のモデル
         * 例えば正規分布やt分布など
         * ここはデータからどの分布かわかるならそれを使えばよいが、わからない場合はとりあえずで試せばよい
             * やってみてダメだったとしてもそこから考察ができる
     * 何らかの手法で得られた多項式の重みと誤差分布を評価していく

### 3.1.2 尤度関数によるパラメータの評価
 * 尤度関数
     * データが得られる確率を求める
         * 例えば、サイコロを振って１が出たときにその１が出た確率を求める
         * その事象がどの程度珍しいのか、とか
 * 観測されたデータは、最も発生確率が高いデータ
     * と仮定して進める
         * あってるかどうかは不明
         * どこかしらを仮定しなければ勧めない、間違っていたとしてもそこからまた考察すればいいだけ
     * つまり尤度関数が最大になるように各パラメータを求める
         * この最大化問題も数学的に解くことが可能
             * 尤度関数を対数尤度関数に変形
             * 対数尤度関数は線形なので
             * 推定するべき、重みや標準偏差に対して偏微分をすればよい
* 尤度関数を計算し、それが最大になる（最も尤もらしい）ようなパラメータが最適なものであるとする考え方（？）最尤推定法
    * 求めるためのアルゴリズムではなく考え方っぽい
    * 実際に求めるパラメータは別の手法で求める必要がある
        * 解析的に解くのか数値計算的に解くのかなど

### 3.2.3 推定量の評価方法
 * 最尤推定法は必ずしも正解のモデルを推定できるわけではない
     * データ量が不十分だったり、得られたデータに偏りがあったり
 * ちょっとこの節はまだ腹落ちできていない
conemuのStartup→Auto save/restore opend tabsがPowerShellでカレントディレクトリが再現されない

されない。

cmd.exeではちゃんとカレントディレクトリが復元されるけど、powerShellでは常にHOMEが開いてしまう。これでは正直意味が無い・・・
↓ここね
![imgTemp-2016-04-14-08-23-35.png](https://qiita-image-store.s3.amazonaws.com/0/5825/891aba93-e20c-b23a-8c60-38092c82bfed.png)

よーしプラグイン作っちゃうぞと思ったけどプラグインは無いっぽい。マクロで頑張るしか無い
`ConEmuC.exe -GuiMacro:T1 print "abc" ; keys(\"Enter\")`

このコマンドで任意のタブに文字を送れる。
powershellとcmdでsaveState c:\temp\out.txt みたいなコマンドを定義して、カレントディレクトリとタブ名をテキストとして出力するようにする
そのコマンドを全部のタブに送る
起動時はそれを読み込んで全部のタブを再現する

って感じかな。そのタブで何かプロセスが動いていたらそれを止めないといけないし。
gitとか動いてたらどうするのとか。bashだったらどうするのとか、限定されたモノになりそう
ユニティちゃん歩く走るくつろぐ

#ユニティちゃん歩く走るくつろぐ

前回「[ユニティちゃんを走らせてみた](http://qiita.com/tatmos/items/3b8a5e73b297f3f391c2)」からの変更点としては

・走らせ続けているのも（ユニティちゃんが）大変そうなので、ある程度ボールに近づいたら歩いてくつろぐように変更してみた。

#動画

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/7U0PPVz_X1M/0.jpg)](http://www.youtube.com/watch?v=7U0PPVz_X1M)

#ダウンロード (Unityパッケージ)はこちら
[Unity_FootstepsADX2LE_tatmos20160414](https://drive.google.com/open?id=0B_omSCuMqg3ed25iSjVDY0VmQ3M)

```
上記パッケージをインポートして自由に使っていただいて構いません。
ってか遊んでみてね。
```

#歩かせるために

ターゲットまでの距離に応じて速度を変化させるようにしてみたり、休憩するモーション「Rest」に切り替えたりしてみた。
あとSpeedへ与える値も少し調整。

```　MoveToTarget.cs
public class MoveToTarget : MonoBehaviour {
    public Transform target;
    NavMeshAgent agent;

    void Start () {
        Reset();
    }

    float lastMoveTime = 0f;

    void Update () {
        if(Time.timeSinceLevelLoad > lastMoveTime+0.1f)
        {
             GotoNextPoint();
            lastMoveTime = Time.timeSinceLevelLoad;
        }
        animator.SetFloat("Speed", agent.velocity.sqrMagnitude/40f);

        //Debug.Log(agent.remainingDistance );
        //  近いとゆっくり
        if (agent.remainingDistance < 2.5f)
        {
            agent.speed = 0;
            animator.SetTrigger("Rest");
        } else if (agent.remainingDistance < 10f)
        {
            agent.speed = 3.5f;
        } else {
            agent.speed = 6f;
        }
    }

    void GotoNextPoint()
    {
        agent.SetDestination(target.position);
    }

    [SerializeField, HideInInspector] Animator animator;

    void Reset()
    {
        agent = GetComponent<NavMeshAgent>();
        animator = GetComponent<Animator>();
    }
}

```

＃ナビと戯れる

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/0a649be6-511c-87b7-7dd7-6b0abbb9c5ec.png)

若干パラメータを変えている。
Stopping Distanceとかが近いと止まるみたい。

##エージェントの移動とアニメーションの合わせるのちと大変かも
ちょこっと動いては止まるみたいな挙動などは何かしら抑制するように書かないといけないのか、Animetor側でトランジション調整するのか悩ましいところ。

あと、ナビメッシュのエージェント設定で動いているので、なんとなく速度は合わせたけど、
向きとか合わせる方法がなかなか難しい。

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/9e37056c-af79-c989-0aed-36523f3286b6.png)


#コライダー設定ミス？モーションの問題かな？
どうもジャンプモーションをさせると、位置がずれてしまうっぽくて、足音のトリガーがされなくなったりしてしまった。

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/3cbbb366-a9e8-3035-a045-cb9cc2cffe01.png)


あと、OnTriggerEnterで足音がなるけど、
床がPlaneだと、突き抜けたときに２回なりそうな気がするのでCubeに変えてみた。

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/a2d1798b-f053-c25e-fe1c-eb5fb201adef.png)
技術英語 > To ensure this the engineering team will [undertake a number of steps] ...

@ Adam Taylor MicroZed Chronicles - Using the Zynq 101 [Kindle Edition]

No. 993 / 2129

Implementing the Private Timer
のあたり

> To ensure this the engineering team will <font color=red>undertake a number of steps</font> ...

[undertake](http://ejje.weblio.jp/content/undertake)とstepsの結びつきに違和感があったが、[google検索](https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=%22undertake+a+number+of+steps%22)すると、12万件ほどが出てくる。
プログラマの考えが・・身につく本より：２倍した結果が２桁になったら各桁を合算する

毎日、本のコードをpythonのして備忘録書き綴っていこうと
思っていたら早速３日坊主になってしまった。
本の演習問題を解くことが最初の目的だったけど、たどり着くまでに
僕の頭では理解が時間がかかるので解答あり(C++)でも
自分なりにpythonにして更新してみます。(もっと理解早い頭が欲しい。。）
まあ、でも書くしか理解できないから続けてみます。
***（是非とも壮大なツッコミとともにコードへのご意見お待ちしてます）***
***コピペってとこも情けないですけど書いてみます***
<h1>2.3入力の処理/問題：「ルーンチェックサムの検証」</h1>
>ルーン式は、識別番号の検証によく使われる方式だ。元の数字の各桁に対して、１桁おきにその数字を２倍する。そのあとで、各桁の数字を足していく（２倍した結果が２桁になる数字があれば、十の位と一の位をそれぞれ個別に足していく）。その合計が１０で割り切れる場合に、識別番号は妥当なものであると見なす。
任意の長さの識別番号を受け取り、その値がルーン式で妥当かどうかを調べるプログラムを書こう。このプログラムでは、１つの桁を読み込んだら次の桁に進む前に、その桁の処理をすませなければいけない。
問題に出てくる識別番号は：176248


いきなり大きな問題の答えが導けないので
・・・昨日１日ここでストップ。。。最後のコードが大きすぎて(自分には)
とりあえず本にも記載がある通り対処すべき4つの課題を１個づつ進める
***
1. どの桁を２倍にすればいいのかを知る
2. ２倍した結果が２桁になったときに、それぞれの桁を個別に扱う
3. 数値を最後まで読み終えたことを知る
4. 各桁を個別に読み込む


***
<h1>小問題：２倍した結果が２桁になったときに、それぞれの桁を個別に扱う</h1>

C++の解答(本より)

```c++
int doubleDigitValue(int digit){
    int doubledDigit = digit * 2
    int sum;
    if (doubledDigit >= 10) sum = 1 + doubledDigit % 10;
    else sum = dubledDigit;
    return sum;
```

<h3>僕のPythonなら</h3>

```py
:test.py
#!/usr/bin/env python
#coding:utf-8

def doubleDigitValue(digit):
    doubledDigit = digit * 2
    if (doubledDigit >= 10):
        sum = 1 + doubledDigit % 10 //間違えていたので訂正しました(汗（さらに修正4/15
    else:
        sum = doubledDigit
    return sum

・・・
>>> from test import doubleDigitValue
>>> doubleDigitValue(7)
5
```
なんの工夫もできませんでしたが、とりあえず予定通り動いた。
(メモ) daemontools

## 参考

* [daemontoolsからサービス起動方法 : マロンくん.NET](http://www.marronkun.net/linux/other/daemontools_000039.html) を自分用にメモ
* 滝澤さんの
    * [daemontools HOW-TO (α版)](http://www.emaillab.org/djb/daemontools/daemontools-howto.html)
    * [daemontools訳](http://www.emaillab.org/djb/tools/daemontools/top.html)
* [cr.yp.to](http://cr.yp.to/)
* [最近のinitでdaemontoolsを使う - y-kawazの日記](http://d.hatena.ne.jp/y-kawaz/20090913/1252842896)

## メモ

* qmailの作者であるD. J. Bernstein氏作のサービスの起動を行うツール

```diff:/etc/inittab
+ SV:12345:respawn:/usr/local/bin/svscanboot
```

```inittabを有効にする
kill -HUP 1
```

* セットアップした人ごとにsvscanの起動スクリプトをどこに書くかが異なる様子。

## qmailの設定

```
mkdir /var/supervise/qmail
cp -p /var/qmail/rc /var/supervise/qmail/run
ln -s /var/supervise/qmail /var/service/qmail
```

```bash:状態の確認
svstat /var/service/qmail
```

## サービスの起動停止

```bash:停止
svc -d /var/service/qmail
```

```bash:起動
svc -u /var/service/qmail
```
AndroidでReact Nativeを使ってPush通知を受け取る方法

React Nativeの場合、iOSでPush通知する方法は表示で提供されていますが、
Androidの場合、自分で頑張るか外部のパッケージに頼ることになると思います。(04/2016現在)
ちょっと面倒がありそうな状況だから無難にGoogle Cloud Messagingをチョイスした方がいいよね、という判断で以下進めました。Parseもなくなるし。(Javaの時はParseしか使ったことなく、GCMも始めてなので回りくどいことしてたら教えてください）

### Google APIsでプロジェクトを作る

https://console.developers.google.com/project

「プロジェクトを作成」で今回用のプロジェクトを作ります。

### GCMを許可してキーなどを得る

https://developers.google.com/cloud-messaging/android/start

GCMのクイックスタートから
「プロジェクトでGCMで有効にすること」と、「キーの取得」が同時に出来るので上記URLから進めます。

「GET A CONFIGURATION FILE」をクリックして、
App nameに今回のプロジェクト名、package nameにAndroidのパッケージ名を入力してContinue...

`Server API Key`と`Sender ID`が得られます。

### react-native-push-notificationを使う

https://github.com/zo0r/react-native-push-notification

自分はiOSでも標準のClassを使わずにこのライブラリを使ってます。

```
npm install react-native-push-notification
```

インストールした後、ReadMeにしたがって以下のファイルを編集します。

- AndroidManifest.xml
- android/settings.gradle
- android/app/build.gradle

### 好きなとこでreact-native-push-notificationを呼ぶ

AndroidはiOSのようにpush通知許可のポップアップも出ないので、
App.js的な初めの方で呼ばれるComponentで好きに設定しましょう。



```
var PushNotification = require('react-native-push-notification');

PushNotification.configure({
  onRegister: function(token) {
    console.log( 'TOKEN:', token );
    // ここでサーバーにtokenを送るなりする。
    // token.tokenがstringのtokenのようです。    
  },

  onNotification: function(notification) {
    // 通知が届いたらにここにくる。
    // notification.foregroundがtrueならアプリを開いている時
    // notification.dataという感じで好きなデータをぶら下げて送って
    // ここで画面遷移したりなんやかんやする
    console.log( 'NOTIFICATION:', notification );
  },

  // 先ほど取得したsender IDを記述
  senderID: "YOUR GCM SENDER ID",
});
```

#### テスト送信する

よくcurlでテスト送信する方法が紹介されてます。
サーバーサイドがrailsの場合はgcmというgemがあったり色々あるので便利に使いましょう。
API KEYは以前の工程で取得した`Server API Key`です。

```
%curl --header "Authorization: key=＜API KEY＞" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"＜RegistrationID＞\"],\"data\":{\"title\":\"Hello\",\"message\":\"Hello\"}}"
```

ここでミソとなるのはreact-native-push-notificationが以下の様なdataを想定していることです。

```
{
  title: "My Notification Title", // (optional)
  ticker: "My Notification Ticker", // (optional)
  largeIcon: "ic_launcher", // (optional)
  smallIcon: "ic_notification", // (optional)
  message: "My Notification Message" // (optional)
  data: {}
}
```

今触ってるverではsmallIconを空にしても表示されてしまうので、何かは絶対表示する仕様のようです。透明の画像とか用意したら騙せるかもしれません。どうしても嫌なら違うパッケージなり自前で頑張るということになりそうです。

そしてdataの更に下に自前のdataをぶら下げて、先ほどの`onNotification`でなんやかんやするようにしています。

#### (メモ)通知アイコンの置き場所

最後にハマったとこメモですが、react-native-push-notificationはandroidネイティブのコードの方の`drawable`ではなく`mipmap`からしか`ic_notification`を探そうとしません。`mipmap`にイケてるアイコンを置きましょう。


以上、上手く送れたでしょうか？グッドラックです。
Laravelを使っているのでvaporを触ってみた

# Vapor?

[Vapor](https://github.com/qutheory/vapor)

`A Laravel/Lumen Inspired Web Framework for Swift that works on iOS, OS X, and Ubuntu.`
だそうで、Swift入門にはいいのかなと思い触ってみました。

# インストール

```bash
brew tap qutheory/tap
brew install vapor-swift-2
```

githubに載っている通りにそのままコマンドをインストールし、

```bash
vapor new [AppName]
```

で現在いるディレクトリにSwiftアプリがインストールされます。

# デプロイ

Procfileがあるので、swift builderをherokuに設定してあげると、すぐにアプリケーションを展開できます。

```bash
git init
heroku apps:create [heroku-appname]
heroku buildpacks:set https://github.com/kylef/heroku-buildpack-swift.git --app [heroku-appname]
git commit -a -m "first commit"
git push heroku master
```

# 所感

- Appディレクトリ内にHttpのディレクトリ内のものが入っている
- Resourceディレクトリの中にViewだけ入ってる
- Publicは固定ファイルが入っている

という感じで、ディレクトリ構成をLaravelっぽくして、最低限動くだけにしました。って言う程度でした。
PHPユーザ的には、

- DIとかどうするんだろう
- migration, seeding
- elixir関連によるsass, coffeeの展開
- ネームスペース的なものはどうやってimportするのか

らへんがきになりました。この辺はswift側で吸収してくれるのだろうか。。
Outlook OAuth 2.0 でハマった話

## OAuth
[http://oauth.net/2/](http://oauth.net/2/)
[OAuth2.0の備忘録的まとめ](http://www.ari-hiro.com/blog/2012/12/30/oauth2-summary)  

RESTful APIでは常識になっているOAuthですが、
今回、私はOutlookのOAuth認証にハマりました。（´・ω・｀）

## ことの始まり
Outlookのスケジュールを管理できるアプリ欲しいなという要望のもと、
「Cordovaで簡単にアプリ作っちゃおう！！」
という感じでスタートしました。
この時はまだ、OAuth認証で丸一日以上を費やすとは思ってなかった・・・。
今までにOAuthを使ったAPIを何度か扱ったことはありますが、アクセストークンが取れないということはなかったです。

## なぜハマったのか
それは今まで、OAuthライブラリーに頼っていたから。
つまり、実際にどうやってaccess_tokenを取得するかを理解していなかった。
ここで、ライブラリーに頼ってばかりではダメだと痛感しました。
CordovaのOAuthライブラリには、Outlookに対応しているものがなかったので、自前でOAuth認証を実装する必要がありました。
[https://github.com/nraboy/ng-cordova-oauth](https://github.com/nraboy/ng-cordova-oauth)
↑にOutlook(Office365)用のOAuth認証の機能を実装して、プルリクを送っておきます。

## 実際にコードを見てましょう。
AngularJS 1.5.xで書いています。

```js:somethingCtrl.js  
...

function oauthOutlook(client_id, client_secret, redirect_uri) {
	var deferred = $q.defer();
	var browser = window.cordova.InAppBrowser.open('https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=' + client_id + '&redirect_uri=' + redirect_uri + '&response_type=code' + '&scope=openid+https%3A%2F%2Foutlook.office.com%2Fcalendars.read', '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
	browser.addEventListener('loadstart', function(e) {
	    if((e.url).indexOf('code') != -1) {
	        var requestToken = (e.url).split("code=")[1];
	        if(requestToken) {
                $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
                // client_id : client_secret をBase64にエンコード
                $http.defaults.headers.post['Authorization'] = 'Basic ' + window.btoa(client_id + ':' + client_secret);

                $http({method: "post", url: "https://login.microsoftonline.com/common/oauth2/v2.0/token", data:
                    "client_id=" + client_id +
                    "&code=" + requestToken +
                    "&redirect_uri=http://localhost/callback" + 
                    "&client_secret=" + client_secret +
                    "&grant_type=authorization_code" +
                    "&scope=" + "openid+https://outlook.office.com/calendars.read"
                })
                .success(function(data) {
                    deferred.resolve({ access_token: data.access_token});
                    console.log("access_token", data.access_token);
                })
                .error(function(data, status) {
                    deferred.reject("Problem authenticating");
                })
                .finally(function() {
                    setTimeout(function() {
                        browser.close();
                    }, 10);
                });
            }
        } else {
            deferred.reject("please login");
        }
	});

	return deferred.promise;
}
...

```


参考：
[Java プログラミングで実装する OAuth 2.0 クライアント: 第 2 回 クライアント・クレデンシャル・グラント](http://www.ibm.com/developerworks/jp/security/library/se-oauthjavapt2/)


## 最後に
単に私の勉強不足でハマっただけですね笑
間違っているところや、アドバイスがあれば是非コメントください。
今更ながらLINE BOTのEchoサーバをRails4で簡易的に書いてみる

## 今までのは前段でした、的な投稿
http://qiita.com/kskomori/items/ba84ae0bb6a3b5bf6305
http://qiita.com/kskomori/items/07b93b46e5b12ee22685

## 参考にしたページ
http://osa030.hatenablog.com/entry/2016/04/08/214939

## 環境
Rails:4.2.0
Ruby:2.1.3p242（with rbenv）
Gem:faraday

## Railsコード（コントローラのみで完結させてます）
```
require 'faraday'

class Linebots::BotController < ApplicationController

  protect_from_forgery except: :callback


  def callback
    if request.method != 'POST'
      render text: 'NG', status: 500
    end

    post_text(params[:result][0][:content][:from], params[:result][0][:content][:text])

    render text: ''
  end


private

  def post_text(to, text)
    content = {
      contentType: 1,
      toType: 1,
      text: text
    }

    post_event(to, content)
  end

  def post_event(to, content)
    msg = {
      to: [ to ],
      toChannel: '1383378250',        # 固定値
      eventType: 138311608800106203,  # 固定値
      content: content
    }

    conn = Faraday::Connection.new(url: 'https://trialbot-api.line.me') do |builder|
      builder.request :url_encoded
      builder.response :logger
      builder.adapter Faraday.default_adapter
    end

    res = conn.post '/v1/events' do |req|
      req.headers['Content-type'] = 'application/json; charset=UTF-8'
      req.headers['X-Line-ChannelID'] = 'xxxxxxxxxxxxx'
      req.headers['X-Line-ChannelSecret'] =  'yyyyyyyyyyyyyyyyyyy'
      req.headers['X-Line-Trusted-User-With-ACL'] =  'zzzzzzzzzzzzzzzzzzzzzzzzzzzz'

      req.body = msg.to_json
    end
  end

end
```

## 注意
* テキストのみ対応です
* エラー処理入れてません
PowerShellでGit環境を構築する

## はじめに
GitHub実践入門を読んでいて、hubコマンドのインストールがうまくいかなかったので、解決方法のメモです。

# セットアップ
### 環境
- Windows 10
- git 2.8.0
- hub 2.2.3

### 背景
- posh-git、GitHub Desktopをインストールした状態でhubコマンドがインストールできなかった。
- posh-gitが使えなくなったりした。

### posh-gitのインストール
作業する前に、GitHub Desktopはアンインストールしました。

- [私家版 Git For Windowsのインストール手順](http://opcdiary.net/?page_id=27065)

インストールが終わったら、リポジトリのあるフォルダに移動します。
うまくいけば、次のように今いるブランチ名が表示されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/15543/d6c27146-dd8d-0d35-db53-a21f2c19e106.png)

### hubコマンドのインストール
1. [ここ](https://github.com/github/hub/releases)からzipでダウンロードしました。
たぶん、`hub.exe`が入っていればどこから手に入れてもいいです。

2. ダウンロードしたzipを解凍して、適当なフォルダに入れます。

3. 環境変数のPATHに、`hub.exe`があるフォルダを追加する。

### 動作確認
まず、hubコマンドにgitコマンドでアクセスできるようにエイリアスを設定します。

```ps1
set-alias git hub
```

コマンドを叩いて動作確認します。
次のように表示されれば成功です。

```ps1
hub --version
git version 2.8.0.windows.1
hub version 2.2.3
```

僕の環境だと、PowerShell起動時にgitのパスが通ってないよ、と怒られたので、その場合は
同じようにPATHに`[gitのインストールフォルダ]\bin`を追加してください。

## 感想
インストールしてパス通すだけなのに、気づいたら1日経っていた、、、
hubコマンドのインストール方法はWindows環境でも色々あったのでどれを採用したらいいかよくわからなかった。

これで、URLが省略できる上にgitの入力補完もしてくれるようになって快適なGitHubライフが送れるようになった！

## 参考サイト
- [Releases・github/hub](https://github.com/github/hub/releases)
- [GitHub製のGitHub利用支援ツール hub の便利なコマンドとWindowsでセットアップした時のメモ](http://qiita.com/nakahashi/items/bddc55e31417070834b9)
- [Windowsへの「hub」コマンドのインストールでハマった](http://polaris-bear.lolipop.jp/shunroom/368)
【Unity】短いアニメーションからAnimator.CrossFadeでスムーズに遷移できない

#結論
スクリプトリファレンスちゃんと読め！
http://docs.unity3d.com/jp/current/ScriptReference/Experimental.Director.IAnimatorControllerPlayable.CrossFade.html
http://docs.unity3d.com/ja/current/ScriptReference/Animation.CrossFade.html

#問題となった事象
Animator使用時に、ダメージやガードのような短いアニメーションからアイドリングへCrossFadeさせようとするとなぜか一瞬で遷移してしまう。
Animation(Legacy)のときはこれでキレイにいけたはずなのに何故じゃ。

    anim.CrossFade("Idle", 0.3f);

#原因
Animator.CrossFadeのtransitionDurationとAnimation.CrossFadeのfadeLengthは仕様が違った。
**transitionDuration**と**fadeLength**は違う！！

|タイプ|引数|内容|
|:--|:--|:--|
|Animator|transitionDuration|CurrentStateの正規化された時間|
|Animation|fadeLength|実時間|

#Animator.CrossFadeで実時間遷移する方法
簡単ですが、一応載せておきます。

    float fadeLength = 0.3f;    // 遷移させたい時間
    float duration = fadeLength / anim.GetCurrentAnimatorStateInfo(0).length;
    Animator.CrossFade("XXX", duration);

####追記
中の人に、CrossFadeInFixedTimeがあるよと教えていただきました。
http://docs.unity3d.com/ja/current/ScriptReference/Animator.CrossFadeInFixedTime.html
ちゃんとあったんですね、恥ずかしいですね。

#あとがき
Animatorがない頃からUnity使っている人がはまりそうだけど、そういう人はもうみんな知ってるよね。
スクリプトリファレンスちゃんと見ないとあかんよ！という自戒をこめて、初投稿。

いまだにAnimatorをしっかり使いこなしてない感ある。
みんなAnimatorControllerでtransitionうお～って繋げてたりするのかな。
自分はただのアニメーション登録リストとしてしか使ってない！
muninでnginxのステータスを確認する

## なぜ書こうと思ったか
nginxのステータスをnginxで表示しているのですが、なぜか404エラーが出ていていたので。

## 予兆
nginxのステータスなのに、バックエンドのログにエラーがでていた。

## 対応方針
nginx_statusとserver-statusにアクセスがきていたので、両方を許容。

## 対応前
``` nginx.domain.conf
location ~ /nginx_status {
  .....（省略）
```

## 対応後
``` nginx.domain.conf
location ~ /(nginx_|server-)status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
        break;
}
```
Reactive Swift Meetupに行けなくて残念だったので、そのまとめ。



## 登壇者資料

@susieyy さん
[SwiftBondとMVVMで状態管理をシンプルにしよう]
(https://speakerd.s3.amazonaws.com/presentations/2826248a7dde4c908dde73ea152ff699/20160413_Reactive_Swift_Meetup.pdf)

@tokorom さん
[かっこ悪くリアクティブじゃダメですか？]
(https://t.co/IfZFcRmx2f)

@yonekawa さん
[Fluxで複雑な状態の変化を予測可能にするiOSアプリ開発]
(https://speakerdeck.com/yonekawa/fluxdefu-za-nazhuang-tai-falsebian-hua-woyu-ce-ke-neng-nisuruiosapurikai-fa)

@ishikawa
[RxSwift+MVVM](https://speakerdeck.com/ishkawa/rxswift-plus-mvvm)

## 参考資料
[Unidirectional Data Flow in Swift:
An Alternative to Massive View Controllers](https://realm.io/news/benji-encz-unidirectional-data-flow-swift/)


## Twitterのハッシュタグ#Reactive_Swift_Meetupを眺めてて自分が気になったことやキーワード

- RxとReactiveの違いってなんなんだろ？
- Stream, Observable, Signal って似た概念なのか？
- パフォーマンスを考えるとRxSwiftに差し替えるのが良い？
- ReSwift(ReduxのSwift実装)
- Carthageの読み方は「カッセージ」の方が良い？　※try!swiftでも聞いたような議論だ。。。
- Rxは厨二病？
Javaでの文字列連結では、できるだけ＋演算子を使おう！

Javaでの文字列連結の話題です。

「なにがなんでも**StringBuilder**を使うのは良くない」のは「可読性が悪い」から。

私も合意します。ただし、私の場合、少し言い方が違います。

「できるだけ**StringBuilder**を使わずに、**＋演算子**を使おう」です。

その理由を述べます。

Javaでは、**＋演算子**は**StringBuilder** を使ったバイトコードに変換してくれますね。

ところが、将来のJavaで**StringBuilder**より性能が良いクラスが出たとします。このクラスを仮に **StringGenerator** としましょう。そして、Javaは**＋演算子**を**StringBuilder**ではなく、**StringGenerator**を使ったバイトコードに変換してくれるかもしれません。

**StringBuilder**を使ったレガシーコードは、**StringGenerator**に書き換えなければ性能が良くなりません。しかし、**＋演算子**を使ったレガシーコードは、書き直さなくても、**StringGenerator**にコンパイルしてくれますから、性能は良いわけです。

つまり、**＋演算子**は、「**可読性が良い**」だけではなく、どのクラスを使うかを明示しない「**抽象化した表現**」と見ることもできるんじゃないかなと。

もちろん、「**＋演算子**を適切に使いこなせる」ことが**前提**です。