OmniAICreator/Qiita-1.07M huggingface dataset:
GemfileはRailsだけのものじゃない！Capistrano2と3の共存について考えてみた

# Capstranoで自動化してる方 ハイっ！
（やり方だけ知りたい方は、この章飛ばしてくださいね！）
Capistranoでデプロイ自動化しているナウくてヤングな方、多いかと思います。
しかし、業務でCapistranoを使用しているとこんなことありませんか。

> ふむ、このプロジェクトではサーバデプロイ自動化してるのか。
どうやらCapistrano2を使っているようだ。
Capistrano2始めて使うから、インストールからはじめなきゃ...

意気揚々と、使い始めます

> デプロイ楽すぎて脳汁でそう...。こりゃ捗るわー！

しかし

> はっ！次のプロジェクトではCapistrano3だと？しかも、Capistrano2との共存はめんどくさい...。しかたないなー。RbenvでRubyのバージョンを管理してるし、Capistrano2は1.9系で、Capistrano3は2.0系で管理するかー...

そんなことありませんか？僕はありました。

# つまり
**同じバージョンのRubyを使用しつつ、プロジェクト毎に使用するgemを使い分けたい**
基本的には下記のサイトを超参考しました。
http://whiskers.nukos.kitchen/2014/10/06/bundle_exec_alias.html
http://qiita.com/misopeso/items/2db2d791eb4c226ed5dc

ざっくり言うと

1. rbenvによるRubyの管理がされている
2. 使用するRubyにbundleがインストールされている
3. rbenv-binstubsというプラグインを追加する
4. Capistrano2や3を使用するリポジトリルート上で、gemfileを作成(Railsである必要はない)し、そのプロジェクトで使用するgemを指定する
5. bundle installする際に使用するrubyのリンク？と、gemのインストール先をそのディレクトリ内に指定してあげる
6. そのプロジェクト内でのみの環境が手に入る

記憶を頼りに、上記のコマンドをご説明していきます。
また、今回はgitによるプロジェクトの管理が行われているため、リポジトリルート上で諸々の作業を行います。

# 1. RbenvによるRuby管理
より詳しい記事があるので、是非参考にしてください。
http://dev.classmethod.jp/server-side/language/build-ruby-environment-by-rbenv/

# 2. 使用するRubyにbundleがインストール
RbenvでRubyが正しく管理されていることを確認 & 使用したいRubyが正しく使用されることを確認して...

```zsh
$ gem install bundle
$ bundle update
```

done!

# 3. rbenv-binstubsというプラグインを追加する
```zsh
$ mkdir ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/ianheggie/rbenv-binstubs.git
```

```zsh
$ vi ~/.zshrc # ワタクシはzshを使用しているため、zshrcです
export PATH=./vendor/bin:$PATH # 追記する
$ source ~/.zshrc # zshrc反映
```

# 4. Capを使用するリポジトリルート内でgemfileを用意
```zsh
# リポジトリルートにて
$ bundle init
```

gemfileが用意されるはずです。そこに、必要なgemを書いてあげてください

```zsh
$ vim gemfile
```

```vim
gem 'capistrano2' # このプロジェクトではCapistrano2を使用
```

# 5. bundle install
```zsh
# リポジトリルートにて
$ bundle install --path=vendor/bundle --binstubs=vendor/bin
```

これで使えるようになりました！おわり。
記憶を頼りにしているため、上手く行かなかったらコメントくださいませ。
また、もっと良い方法や勘違いがあったらコメント出さると...
Raspberry pi に node.js を構築する


## ラズベリーパイの構築

以下のサイトでRaspianのDL（WindowsにDLした）
https://www.raspberrypi.org/downloads/

その後
SDカードなどに書き込んだ（Win32 Disk Imagerなんかで書き込んだ気がする）

## node.jsの環境構築
今回はv0.12系を入れたいと思っていたけど、適切なドキュメントがなかったので以下のサイトを主に利用した

http://node-arm.herokuapp.com/

```
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install gcc-4.8 g++-4.8
pi@raspberrypi ~ $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
pi@raspberrypi ~ $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
pi@raspberrypi ~ $ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
pi@raspberrypi ~ $ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
```

とりあえずこれをやり

その後

```
wget http://node-arm.herokuapp.com/node_archive_armhf.deb
sudo dpkg -i node_archive_armhf.deb
```
これをやる

最後に以下を行って

```
pi@raspberrypi ~ $ node -v
```

以下のようになればおっけーです


```
v0.12.6
```
Elixirを始める時にVimmerが設定しておいた方がいいこと


最近Elixirを始めたての初心者Vimmerが「これは入れといた方がいいなー」と思ったプラグインを２つ紹介します。

## vim-elixir

公式が作成しているElixirサポートプラグイン。
https://github.com/elixir-lang/vim-elixir

何が出来るかというと３つあり、

- Elixirのシンタックスハイライト
- `.ex` `.exs` `.eex`形式のファイルタイプが検出可能に
- Elixirに合わせた自動インデント

の３つが可能になります。

シンタックスハイライトはこんな感じに。

![スクリーンショット 2015-09-20 16.36.42.png](https://qiita-image-store.s3.amazonaws.com/0/39382/5b284c4f-1f10-8295-3652-5ab0bf8ae411.png "スクリーンショット 2015-09-20 16.36.42.png")

ただ、オムニ補完が効くようになるとどこかで見たのですが効いてないような気がします・・・
これについて分かる人いらっしゃいますでしょうか？＞＜

## vim-mix

mixに特化したプラグイン。
https://github.com/mattreduce/vim-mix

mix全般に関することがvim上で出来るようになります。
使えるコマンドは以下の１０個。

- `:Mix [command]` `mix phoenix.new`のようなコマンドを`:Mix phoenix.new`のように実行することが出来る
- `:Mclean` 現在のプロジェクトの自動生成されたファイルの削除
- `:Mcompile` ソースのコンパイル
- `:Mdeps` すべての依存関係とそのステータスを一覧表示します。
- `:Mdeps clean` アーティファクトやフェッチされたソースを含めて依存関係を全て削除
- `:Mdeps compile` 依存関係のコンパイル
- `:Mdeps get` 依存関係で必要なものを取得、mix.lockに書き込み
- `:Mdeps unlock` 全ての依存関係をmix.lockから削除
- `:Mdeps update` プロジェクトの依存関係を全てアップデート
- `:Mtest` テストの実行

`:Mix [command]`や`:Mtest`は特に実行回数が多くなりがちなものですので、これがあると便利ですね！

参考. `:Mtest`の実行
![f74968dd6c57ecedce7039179269f6cc.gif](https://qiita-image-store.s3.amazonaws.com/0/39382/6fe6bb8b-3461-4ea0-aa50-7cc423bc9abf.gif "f74968dd6c57ecedce7039179269f6cc.gif")



以上、現在のところ役に立っているプラグイン２つの紹介でした！

-

[追記：2015/09/23]

@yoavltさんに教えて頂きました、vim-extestを追加でご紹介致します！

## vim-extest

vim-extestはElixirのネイティブテストと[Amitra](https://github.com/josephwilk/amrita)に対応しているテスト実行プラグインです。
https://github.com/BjRo/vim-extest

登録されるキーバインディングは以下の３つ

- `:ExTestRunFile` 開いているファイルのテストを全て実行
- `:ExTestRunTest` 現在のカーソル以下のテストを実行
- `:ExTestRunLast` 最後のテストを実行

![99135cf7ee62ddfa574ad6aeb9898b90.gif](https://qiita-image-store.s3.amazonaws.com/0/39382/981e7a05-6190-d30e-c94a-2f28e4a1ed85.gif "99135cf7ee62ddfa574ad6aeb9898b90.gif")
QGISにnetCDFv4,GMTv5フォーマットを読む

## QGIS 2.10 for windows 

最新の2.10でも、GMTv5で作成したnetCDFファイルが読めません。
オプションで=cfとして出力した場合は問題なく読めますが、=nfで出力したファイルを読むことができません。netCDFv4形式は圧縮機能があるので、ファイルサイズを小さくでき、また、それにより読み込み速度が向上します。

## ではどうする？

一番簡単な方法は、Windows 仮想環境上にCentOS7をインストールすることです。

### インストール
- GUI Desktopでインストールします。
- yum install epel-release
- yum install qgis
- yum install gdal

インストールされるバージョンは2.8.2 Wienです。

### 起動方法
/usr/bin/qgis

起動時にpythonエラーが表示されますが、とりあえずは利用できるようです。

基本的にはWindowsと同じ機能です。
Windows版と比較すると、はるかに高速です。
またLinuxのファイルキャッシュなども有効に作用し、2回目以降もかなり高速に起動します。

## エラーが出る場合の対処

### only 1 supported when  reading bottom-up dataset

こうすると、とりあえず読めるようになります。
ただし、上下反対に表示されるのと、読み込み速度が非常に遅くなります。
データの確認程度にしかつかえませんが。

export GDAL_NETCDF_BOTTOMUP=NO 
/usr/bin/qgis


以上です。
KotlinでJackson (JsonProperty) を利用するときの注意点

# 前置き

retrofitをJacksonで利用する際に、readはうまくいくのに、Post時のBodyパラメータでJacksonPropertyでアノテーションしたObjectを渡すと、うまくいかない・・・。

実際に下記のようなテストを書いてみると失敗する

```kotlin
package hoge

import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.KotlinModule
import org.junit
import kotlin.test.assertEquals

public class JacksonKotlinTest {
    data class Sample(
            @JsonProperty("device_id")
            var deviceId: String
    )

    @junit.Test
    fun read() {
        val mapper = ObjectMapper()
        val entity = mapper.readValue("{\"device_id\": \"123\"}", Sample::class.java)
        assertEquals("123", entity.deviceId)
    }

    @junit.Test
    fun write() {
        var entity = Sample(deviceId = "123")
        val mapper = ObjectMapper() // これはNG
        val result = mapper.writeValueAsString(entity)
        assertEquals("{\"device_id\":\"123\"}", result) // it returns {"deviceId":"123"}
    }
}
```

これは既知の問題らしく、kotlinでJackthonを利用する際には、`jackson-module-kotlin`を利用しなくてはならないようだ。

# 対策1: jackthon-module-kotlinを利用する

Gradleのdependenciesに下記を追加

```groovy
compile 'com.fasterxml.jackson.module:jackson-module-kotlin:2.6.2'
runtime "org.jetbrains.kotlin:kotlin-reflect:0.13.1513"
```

KotlinModuleを利用するように変更する。

```kotlin
        val mapper = ObjectMapper() // これはNG
        val mapper = ObjectMapper().registerModule(KotlinModule()) // これはOK
```

# 対策2: JsonPropertyをやめる

素直にproperty名をそのままJsonのfield名にしてしまえばうまくいく。
私のプロジェクトではAndroidでruntime修飾子が利用できず、compileにしてしまうと65K問題がでたので、この方法で一時しのぎした。

# 参考

- https://github.com/FasterXML/jackson-module-kotlin
[AndroidStudio] eglSurfaceAttrib not implementedというwarning

```java
eglSurfaceAttrib not implemented
```

このwarningはemulatorの設定をいじれば消せます。

AVDManagerからDeviseの設定にいき、use Host GPUからチェックを外せばいいです。

![Screen Shot 2015-09-20 at 16.43.40.png](https://qiita-image-store.s3.amazonaws.com/0/18705/37dcc8f8-c59e-75be-e084-9742c75a2195.png)



# References

- http://stackoverflow.com/questions/28966496/android-studio-emulator-eglsurfaceattrib-not-implemented
iOS 9で言語設定の取得が変わった

システムのカレント言語設定を調べるのに以下のようにしていました。

```lang:
NSArray *languages = [NSLocale preferredLanguages];
NSString *lang = [languages objectAtIndex:0];
if ( [lang isEqualToString:@"ja"] ) {
    // 日本語
}
```
これまでは lang に @"ja"が入っていたのですが、iOS 9環境では、lang に @"ja-JP" が入ってきて、比較が通らなくなってしまいました。

下位互換もあるので、先頭2文字だけを切り出すことにしました。

```lang:
NSString *lang = [[languages objectAtIndex:0] substringToIndex:2];
```
フォームで入力されたURLにJavaScriptで移動する方法。

<pre>
&lt;form name="my">
  &lt;input type="text" name="u">
  &lt;input type="button" value="move"
    onclick="m();">
&lt;/form>
&lt;script type="text/javascript">
function m(){
location.href = document.my.u.value;
return;
}
</pre>
[Android][Realm]  is not associated to any field. というようなエラーが出たら

# 環境
- RealmJava 0.82.2
- AndroidStudio 1.4 Beta2

# エラー

RealmでGetter/Setterを実装していたらエラーが出ました。

```java
Setter hogehoge is not associated to any field....
```

↑こんな感じです。

Getter/SetterはAndroidStudioの機能を使って自動生成していました。

結果的には、他のエラーを直したらこの表示は消えました。
ただ、他のエラーがこの表示によって出力されなかったりして、ちょっと悩みました。
Visual Studio Express 2015 for Webで64bit開発

とりあえずのメモ。
気が向いたときにきれいに書き直します(;´∀｀)


Visual Studio Express 2015 for WebとODP.NETを使った簡単なアプリを作成。
ただし、64bit。

この「64bit」というところにやられました。

プロジェクトのビルドターゲットを「AnyCPU」から「x64」にしてもODP.NETの参照をやり直したり特定バージョン外したり、、、
いろいろやってみてもビルドログにずっと
---
warning MSB3270: 構築されているプロジェクトのプロセッサ アーキテクチャ "MSIL" と、参照 "Oracle.DataAccess" のプロセッサ アーキテクチャ "AMD64" の間には不一致がありました。この不一致は、ランタイム エラーを発生させる可能性があります。プロジェクトと参照の間でプロセッサ アーキテクチャが一致するように、構成マネージャーを使用してターゲットとするプロジェクトのプロセッサ アーキテクチャを変更するか、ターゲットとするプロジェクトのプロセッサ アーキテクチャに一致するプロジェクト アーキテクチャとの依存関係を参照で設定することを検討してください。
---
こんなの出っ放しで、無理やり実行すると案の定参照エラーで落ちます。

わけわからん。。。

ちなみに、実行環境はVisual Studio内蔵の「IIS Express」。
これもダメっちゃダメだった理由なんですがね(;´Д｀)

どうもこいつが既定値ではx86でしか動かないみたい。

x64で動くように設定変更してあげたら無事動くようになりました。
ではどこで設定するか。
ある意味すごくわかりやすいところにいました。

メニューから行きます。
「ツール」＞「オプション」
でダイアログ開いて
「プロジェクトおよびソリューション」＞「Webプロジェクト」
をたどります。
「Webサイトおよびプロジェクト用IIS Expressの64ビットバージョンを使用する」
これにチェックを入れます。


簡単なことだったけども、なかなかこの答えにたどり着かずに半日無駄にした。。。。。
[Elixir]ezファイルを作成して、"mix archive.install"する

#Goal
.ezファイルを作成して、"mix archive.install"する。

#Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.5

#Wait a minute
カスタムタスクを作成した後、そのプロジェクト内もしくはダウンロードしたプロジェクトでしか使えないのは不便ですね。
mixが使えれば、どこからでも呼べるコマンドにしたいですね。

具体的には、"archive.install"でezファイルをインストールして、
mixコマンドからどのディレクトリにいても呼べるようにしたいです。

というわけで、やっていきましょう！！

#Index
mix archive.build
|> Preparation
|> mix archive.build
|> Extra

##Preparation
プロジェクトの準備をします。

Example:

```cmd
>cd path/to/create/directory
>mix new ez_sample
* creating README.md
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/ez_sample.ex
* creating test
* creating test/test_helper.exs
* creating test/ez_sample_test.exs

Your mix project was created successfully.
You can use mix to compile it, test it, and more:

    cd ez_sample
    mix test

Run `mix help` for more commands.


>cd ez_sample

>mix test
```

####Directory: lib/mix
ディレクトリを作成。

####Directory: lib/mix/tasks
ディレクトリを作成。

適当なカスタムタスクを作成します。
ただ、引数を表示するだけのカスタムタスク。

####File: mix/tasks/ez_sample.ex

```ex
defmodule Mix.Tasks.EzSample do
  use Mix.Task

  @shortdoc "ez sample"

  def run(args) do
    IO.puts (inspect args)
  end
end
```

##mix archive.build
それでは、.ezファイルに固めてmixにインストールできるようにします。

####Example:

```cmd
>mix archive.build
Generated archive ez_sample-0.0.1.ez with MIX_ENV=dev
```

.exファイルを作成するのは、これだけ(笑)

次は、mixにインストールします。

```cmd
>mix archive.install ez_sample-0.0.1.ez
Are you sure you want to install archive ez_sample-0.0.1.ez? [Yn] y
* creating c:/Users/user_name/.mix/archives/ez_sample-0.0.1.ez
```

今回使っているプロジェクト以外の適当なディレクトリに移動してからカスタムタスクを試す。

```cmd
>cd appropriate/path

>mix ez_sample hoge
["hoge"]

>mix ez_sample hoge huge foo:bar
["hoge", "huge", "foo:bar"]

```

##Extra
手を動かすことはない。

依存関係のライブラリがある場合注意が必要。

ex_mark2pdfと言うライブラリを作成していたのだが、
そのライブラリは、earmarkライブラリに依存している。

ex_mark2pdfを.ezファイルに固めて使ってみたところ、
earmarkの関数がないと言われる。

方法があるのか分からないが、依存関係先の機能(関数)は使えない模様。

#Speaking to oneself
今回は、.ezファイルへの固め方でした。
探す必要がないくらい簡単でしたorz

#Bibliography
特になし。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。

スマホエンジニア勉強会[potatotips #21](http://connpass.com/event/18732/)にて以下の発表をしてきました。
Xcodeでデバッグするならこれを忘れないで！というお話です。
バリバリiOSの開発をされている方はすでにご存知の内容だと思いますので、新人が入ってきた時などにXcodeのことが嫌いになる前に教えてあげてください。
#1.忘れないでException Breakpointのこと
こんなことありませんか？
アプリがクラッシュした時にいつもAppDelegateで止まっている（下の画像みたいな状態にいつもなる）。
![image](https://qiita-image-store.s3.amazonaws.com/0/21158/d2e846f3-a3cb-d565-7bd4-d4d4a8044b9b.png)
こうなってしまうとコード上で本当に問題のある箇所がどこなのかよくわからず
本質的な原因はスタックトレースなどをみて自分で探しにいくことになります。
開発に慣れている人ならそれでもいいですが、もうちょっと分かりやすくしたいです。

　この状態は、実は例外発生時のbreakpointを設定していないことが原因です。
Xcodeでも例外発生時にbreakpointを仕込むことができて、設定箇所はXcodeの左下のほうにある+をクリックすると出てくる「Add Exception Breakpoint」を選べば設定できます。
![image](https://qiita-image-store.s3.amazonaws.com/0/21158/c565f474-032f-89e0-cf17-befcb56abb0b.png)


こいつを選ぶとAll Exceptionというbreakpointが追加されます。
ちなみに、breakpointマークのところで右クリックをするとさらにメニューが出てきて、
「Edit Breakpoint...」を選択するとbreakpointの詳細設定ができるようになります。
ここの「Action」はbreakpointが発生した時に実行するコマンドを記述することができます。
ここでは「po $arg1」というコマンドを設定しています（例外発生の説明を出力するコマンドです）。
![image](https://qiita-image-store.s3.amazonaws.com/0/21158/a9499baa-a7a3-cb2f-749d-023c5dd60736.png)
この設定をしておくとちゃんと
ええ感じで例外が発生した箇所でbreakpointが発動して止まってくれて
![image](https://qiita-image-store.s3.amazonaws.com/0/21158/177bfdc5-3597-11d8-63c1-7dde20171ba0.png)
ええ感じで原因説明がコンソールに表示されるようになります。
![image](https://qiita-image-store.s3.amazonaws.com/0/21158/ab635d14-e606-df23-10a7-41186fafd5ae.png)
他のIDE使っていた人もこの動きなら違和感を感じないですよね。
なんでデフォルトでこのせって・・・（略
#2.Xcodeで設定を共有しよう。
あとはこの設定をプロジェクト毎にやるのは面倒なので
Xcode内で共有できるようにしましょう。

共有したいbreakpointを右クリックして表示されるメニューで「Move Breakpoint To」を選択して
さらに「User」を選択しましょう。これでXcode上でbrekpoint設定が共有されました。
試しに新規プロジェクトを作成してbreakpoint設定画面を開くと設定されていることが
確認できると思います。
![image](https://qiita-image-store.s3.amazonaws.com/0/21158/3497e0ab-330d-155d-8572-1dcb02dbb8cd.png)


ここまでやっておけば他のIDEでのデバッグに慣れている人もXcode使いやすくなるはず！
ぜひこの設定はやっておきましょう。
新人のiOSエンジニアが入ってきたときも是非一番最初に教えてあげましょう。

参考）potatotips #21 発表資料
[バグのことは嫌いになってもXcodeのことは嫌いにならないでください](http://www.slideshare.net/daisukeyamashita180/21-potatotips-yamashita)
RefileでTinyPNG

通信量削減のためTinyPNGで生成した画像を圧縮したくなることがあります。

Refileでそれをやるにはどうやるのかな？と気になったので試しにgemにしてみました。

https://github.com/takeyuweb/refile-tinypng

## 使い方

Railsで使うのであればconfig/initializers/refile.rbあたりでこのようにします。

```rb 
Refile::TinyPNG.configure do |config|
  config.key = ENV['TINYPNG_KEY']
end
%i(fill fit limit pad convert).each do |name|
    Refile.processor(name, Refile::TinyPNG.new(Refile::MiniMagick.new(name)))
end
```

## 注意

このgemは実験的なものです。

いろいろ適当なので本格的に使うなら自分でちゃんとしたの作るなり、プルリクするなりしてくれると嬉しいです。
【Go】fmt.Print とビルトイン関数の print の違い

## はじめに


以前、fmtパッケージにて提供されるprint系の関数についての投稿を行いました。
[【Go】print系関数の違い](http://qiita.com/taji-taji/items/77845ef744da7c88a6fe)

こちらの投稿にて、ビルトイン関数の `print`, `println` についても紹介してみては？とコメントをいただいたので、調べてみました。

ビルトイン関数の`print`, `println`については私自身の実用経験がないので、単純に調べたことをまとめただけになります。
間違い等あればご指摘ください。 :raised_hands: 


## fmt.Print() について

`fmt.Print()`については「[【Go】print系関数の違い](http://qiita.com/taji-taji/items/77845ef744da7c88a6fe)」にてまとめさせていただきましたので、そちらをご参照ください。


## ビルトイン関数 print, println について

まずは `print` について公式のドキュメントを見てみましょう。
[builtin - The Go Programming Language](http://golang.org/pkg/builtin/#print)

> The print built-in function formats its arguments in an implementation-specific way and writes the result to standard error. Print is useful for bootstrapping and debugging; it is not guaranteed to stay in the language.

訳すと、

*- print関数は引数をフォーマットして標準エラーに書き込みます。ブートストラッピングやデバッグに役立ちますが、このまま言語に残される保証はありません。*

といった感じでしょうか？

ちなみに、`println` については前述の投稿でも紹介の通り、
接尾辞「ln」がつくので**オペランド間にスペース**が入り、**最後に改行**が加えられるという点が`print`と異なります。


## fmt.Print() とビルトイン関数 print() の違いは？

それでは、`fmt.Print()` とビルトイン関数 `print()` の違いをあげていきましょう。


### 1. パッケージの import

#### - fmt.Print()

fmtパッケージで提供される`Print`関数は当然ながらfmtパッケージをimportする必要があります。

```go
import "fmt"

fmt.Print("hello")
```

#### - ビルトイン関数 print()

一方、ビルトイン関数は組み込みなので、そのまま使用できます。

```go
print("hello")
```


### 2. 書き込み先

#### - fmt.Print()

`fmt.Print()`では、標準出力に書き込まれます。
また、`fmt.Fprint()`とすると書き込み先を設定することも可能です。

#### - ビルトイン関数 print()

一方、ビルトイン関数では、
ドキュメントにある通り、**標準エラー**に書き込まれます。


### 3. フォーマット

#### - fmt.Print()

`fmt.Print()` ではデフォルトのフォーマットでフォーマットされます。
デフォルトのフォーマットはこちら。

```
bool:                    %t
int, int8 etc.:          %d
uint, uint8 etc.:        %d, %x if printed with %#v
float32, complex64, etc: %g
string:                  %s
chan:                    %p
pointer:                 %p
```
https://golang.org/pkg/fmt/

また、接尾辞に`f`がついた`fmt.Printf`などはフォーマットを指定できます。

#### - ビルトイン関数 print()

一方、ビルトイン関数の`print`では、フォーマットの指定はできないようです。

> The print built-in function formats its arguments in an implementation-specific way

とあり、訳すと「実装固有の方法でフォーマットする」という感じのようですが、
正直なところ、この辺りは理解しきれていないです。。
（詳しい方教えていただけるとありがたいです :sweat_smile: ）


## まとめ



ざっと調べたところ、

|| fmtパッケージ Print系関数 | ビルトイン関数 print  |
|:-:|:-:|:-:|
|パッケージの import|fmt パッケージの import|無|
|書き込み先|標準出力（Fprint系は書き込み先の設定が可能）|標準エラー|
|フォーマット|「%v」で指定されるデフォルトのフォーマット（Printf系はフォーマットの指定が可能）|「an implementation-specific way」実装固有の方法？|

の３点が違いのようです。

補足・間違いなどご指摘ください。 :pray: 

## 参考
[builtin - The Go Programming Language](http://golang.org/pkg/builtin/#print)
https://golang.org/pkg/fmt/
http://stackoverflow.com/questions/14680255/whats-the-difference-between-fmt-println-and-println-in-go
[memo] Cassandra  on Ubuntu 14.04


# Install Java
You can skip it if you've already had java in your system.

    sudo add-apt-repository -y ppa:webupd8team/java

    sudo apt-get update
    sudo aptitude -y install oracle-java8-installer
    
    mkdir ~/tmp; cd ~/tmp

# Install Cassandra
    wget http://www.us.apache.org/dist/cassandra/2.2.1/apache-cassandra-2.2.1-bin.tar.gz

    tar -xvzf apache-cassandra-2.2.1-bin.tar.gz

    mv apache-cassandra-2.2.1 ~/cassandra

    sudo mkdir /var/lib/cassandra
    sudo mkdir /var/log/cassandra
    sudo chown -R $USER:$GROUP /var/lib/cassandra
    sudo chown -R $USER:$GROUP /var/log/cassandra

    export CASSANDRA_HOME=~/cassandra
    export PATH=$PATH:$CASSANDRA_HOME/bin


# Run Cassandra

    cassandra -f
R言語 インストール

[The R Project for Statistical Computing](https://www.r-project.org)

### インストール
* [R for Mac OS X](http://cran.ism.ac.jp)
* R-3.X.X.pkgをダウンロード
* 特に選択するようなオプションはないので、『続ける』を押して次へ次へと進んでいきます。

### 動作の確認
* アプリケーションから『Rコンソール』を起動するか、Macのユーティリティにある『コンソール』を起動します。
* 試しに算数をしてみます。統計解析のツールだからといって、単純な算数をしてはいけないという理由はありません。積極的にツールを利用して、心のハードルを下げておきます。

```Bash:算数
$R      # Rの開始
> 1+2*3 # 四則演算
[1] 7   # 答え7
> q()   # Rの終了
```

### グラフの表示
* Rには、データセットと言われるサンプルデータがあります。
* 今回利用する『cars』データセットには、車の速度と停止時間が含まれています。
* ぱっと見で、なにか相関はありそうです。
* 線を引いてみます。
* *車は急に止まれない*ということでしょうか。


```Bash:サンプルデータを利用したグラフ表示
> head(cars, n = 3) # サンプルデータcarsの確認
  speed dist
1     4    2
2     4   10
3     7    4
> plot(cars) # 散布図を描く
> lines(lowess(cars)) # 平準結果をつなぐ線を描く
```

![R_20150920_11.png](https://qiita-image-store.s3.amazonaws.com/0/92038/542d2760-afc4-a1c6-4d3b-e541cdfbb17b.png "R_20150920_11.png")
![R_20150920_12.png](https://qiita-image-store.s3.amazonaws.com/0/92038/c3e1c444-0028-3507-9528-171b9a2b0451.png "R_20150920_12.png")
Spray: Base64リクエストをデコードしたい

SprayでBase64リクエストをデコードする方法を紹介します。

まず、SprayでリクエストボディがBase64のものをデコードするにはいくつかの方法があります。

1. `entity(as[String])`で一旦Entityを文字列で受け取り、ルーティングの中でごりごりデコードする
2. 自前でBase64をデコードするMarshallerを作る

1の方法は手っ取り早く実装できる反面、Base64デコードの処理を共通化しにくい、デコード失敗のエラーハンドリングをルートごとに書かないと行けないといったデメリットがあります。

今回は2の方法でデコードする方法を紹介します。

## Base64のUnmarshallerを作る

Sprayにはリクエストボディを変形するために[Unmarshalling](http://spray.io/documentation/1.2.2/spray-httpx/marshalling/)という仕組みが有ります。デフォルトでは、StringやJSON、XMLのUnmarshallerが提供されています。

SprayでJSONを受け取るルートを書くときに、`entity(as[???])`のように書きますが、この`as[T]`関数がimplicitパラメータで、`FromRequestUnmarshaller[T]`を受け取るようになっているため、JSONがデコードできるわけです。

というわけで、Base64にデコードする際には次のようなUnmarshallerインターフェイスを用意しておけば、`entity(as[Base64String])`で内部のルートがデコード済みの値を受け取れるようになります。

```scala
type Base64String = String
implicit val Base64Unmarshaller: FromRequestUnmarshaller[Base64String] = ???
```

これをベースに実装したコードが次のものです。`Unmarshaller[T]`だと、`as`関数の型に合致しないため、`fromMessageUnmarshaller`と`fromRequestUnmarshaller`で型を`FromRequestUnmarshaller[T]`に変換する必要があります。


```scala:Base64Support.scala
package playground.spray.example2.marshalling

import java.util.Base64

import spray.http.{ HttpEntity, MediaTypes }
import spray.httpx.unmarshalling.UnmarshallerLifting._
import spray.httpx.unmarshalling._

trait Base64Support {
  type Base64String = String

  implicit val Base64Unmarshaller: FromRequestUnmarshaller[Base64String] = {
    fromRequestUnmarshaller {
      fromMessageUnmarshaller {
        Unmarshaller[Base64String](MediaTypes.`application/base64`) {
          case x: HttpEntity.NonEmpty =>
            new String(Base64.getDecoder.decode(x.asString.trim), "UTF-8")
        }
      }
    }
  }
}

object Base64Support extends Base64Support
```

クラス名は、`SprayJsonSupport`などにならって、`Support`で終わる名前にします。

なお、`java.util.Base64`はjava8のAPIなので、java7以下では動きません。java7以下では、[Apache CommonsのcodecにBase64のデコーダがある](https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base64.html)のでそれを利用することができます。

## 使用例

上の`Base64Support`をルーティングで使う場合は、`Base64Support`を継承して使います。

```scala
package playground.spray.example2

import playground.spray.example2.marshalling.Base64Support
import spray.routing.HttpService

trait Base64DecodingService extends HttpService with Base64Support {
  val decodeRoute = {
    entity(as[Base64String]) { body =>
      complete(body)
    }
  }
}
```

## 完全なサンプル

GitHubにてBase64Supportが動く完全なサンプルがあるので、動かしてみたい人はダウンロードしてください。

* [scala-playground/Base64DecodingServiceExample.scala at master · suin/scala-playground](https://github.com/suin/scala-playground/blob/master/src/main/scala/playground/spray/example2/Base64DecodingServiceExample.scala)
Refileで画像のURLをカスタマイズしたい


https://github.com/refile/refile

※今回使用したバージョン 0.6.1

デフォルトではこんな感じです。

```rb
Refile.attachment_url(Video.first, :image, :fill, 200, 200, format: 'jpg')
# => "/attachments/<signaturetoken>/<backend>/fill/200/200/:image_id/:image_filename.jpg"
```

## パスを変えたい

仮に`/attachments`ではなく`images`にするなら

config/initializers/refile.rb

```rb
Refile.mount_point = 'images'
```

とすれば

```rb
Refile.attachment_url(Video.first, :image, :fill, 200, 200, format: 'jpg')
# => "/images/<signature>/store/fill/200/200/:image_id/:image_filename.jpg"
```

になり、画像サーバがマウントされるのもそこになります。

## ホスト部やスキームを指定したい

CloudFrontなどのCDNを使う場合やSSLページで使うために`https://`あるいは`//`からはじめたいことがあります。

config/initializers/refile.rb

```rb 
Refile.cdn_host = Rails.application.secrets.cdn_host
```

config/secrets.yml

```yaml
development:
   cdn_host: <%= ENV["CDN_HOST"] %>
```

のような感じにしておくと

```rb
Refile.attachment_url(Video.first, :image, :fill, 200, 200, format: 'jpg')
# => "//your-cdn-host.com/attachments/<signature>/store/fill/200/200/:image_id/:image_filename.jpg"
```

となります。
「その他全て」のルートを定義するには

SPAを作りたいときなどRailsのルーティングが不要な場合があります。

```rb
Rails.application.routes.draw do
  # たとえばAPI
  constraints subdomain: /^api/ do
    mount Api::Root => '/'
    mount GrapeSwaggerRails::Engine => '/docs'
  end
  
  # それ以外はすべて
  get '*path', to: 'home#otherwise'
end
```

で、`app/views/home/otherwise.html.erb`にSPAを書けば良いです。
Pythonにexcept式ができる日は来るのか

#式と文
Pythonを含め、多くのプログラミング言語には、文(statement)と式(expression)の区別があります。その詳細は、(私も言語にそこまで精通していないので)他に譲るとして、ものすごく大雑把には、

* コードは文の集まりである
* 式は、文の中で使うことができる
* 文は、式の中で使うことができない

といえます。
コードを短く書きたいという欲求がなければ、あまりどっちでもいいのですが、短く書くためには、できるだけ多くが式である方が、ひとつの式に多くを押し込めて有利です。
一方で、何もかもを式にしてしまうと、複雑怪奇なコードが容易に書けてしまうこともあり、言語によってはそれを嫌います。
Pythonは、どちらかといえばそれを嫌う言語で、例えば代入も式ではなく文です。なので、`a = (b = 1) + (c = 2)`のようなコードは書けません。`a = i++`のような表現もありません。関数もlambda式で作れますが、lambda式の中には文を書くことができず、単一の式で表現できる関数しか作れません。そういう複雑な関数が作りたいなら、ちゃんと`def hogehoge():`で定義しなさい、という思想です。

#なぜexcept式がほしいか
いくらでもありますが。2例ほど。
1) 辞書の参照

```python:
try:
    process(dic[key])
except KeyError:
    process(None)
```
2) 文字列のint化

```python:
try:
    process(int(s))
except ValueError:
    process(0)
```

1の辞書参照は、ifで書き換えられます。

```
if key in dic:
    process(dic[key])
else:
    process(None)
```
また、これは三項演算子を使い、式で書けます。
`process(dic[key] if key in dic else None)`
2の文字列のint化も、やろうと思えばifで書き換えられます。
`process(int(s) if s[0] in '-0123456789' and all(c in '0123456789' for c in s) else 0)`
けど、これやるの？って感じですよね。int化じゃなくfloat化だったら、もっとめんどくさいです。

#PEP 463とGuidoの反応
そこで、except式を付け加えようよ、というPEPが2014年3月に提案されています。
http://legacy.python.org/dev/peps/pep-0463/

```py
lst = [1, 2]
value = (lst[2] except IndexError: "No value")
```
うん。これはわかりやすい。これだと、文字列のint化も
`process(int(s) except IndexError: 0)`
とシンプルに書けます。

ところが、Pythonの生みの親、Guidoは、やはり2014年3月の時点で、よく調べられたPEPで、文法もよく練られているが、この提案自体は、却下したいと言っています。
https://mail.python.org/pipermail/python-dev/2014-March/133118.html

> But the thing I can't get behind are the motivation and rationale. I don't
think that e.g. dict.get() would be unnecessary once we have except
expressions, and I disagree with the position that EAFP is better than
LBYL, or "generally recommended" by Python.

(雑な訳)
けれど、私が同意しかねるのは、その動機と根拠だ。例えば、except式があればdict.getが不要であったとは思わない。また、EAFP(\*1)がLBYL(\*2) よりも優れている、あるいはPythonにおいて「一般的に推奨される」という考えには反対だ。

(\*1) it's Easier to Ask Forgiveness than Permission (許可を得るより許しを請う方が簡単だ)の略。つまり、try-except構文のように、やってみて失敗したときは別の方法をとること。
(\*2)Look Before You Leap: 転ばぬ先の杖、つまり事前にifで失敗しないことを確認してからやること。

あったら便利だと思うんですが。やっぱり、採用されないんですかね？
NavigationBar hidden 時のステータスバーの背景色

通常ナビゲーションバーの色と同じ色がステータスバーに設定されるが、ナビゲーションバーをhiddenにした時にステータスバーの背景色が適用されない。

ビューの下にステータスバーと同じ高さのビューを配置してステータスバーの背景色を設定することによって対応。

![statusbarcolor01.png](https://qiita-image-store.s3.amazonaws.com/0/37947/c3d018cf-6e47-a6b1-0fd3-bd846e104d28.png "statusbarcolor01.png")
mysqlを起動しようとしたらPIDファイルがnot foundで起動できないのを解決する話

寝落ちしたらいつの間にかターミナルとか色々落ちててmysqlに入れなくなったときの対処記録。
なんども直面している問題なので、いい加減自分の中に解決方法をストックしておきたい。

## 1.エラー内容を多角的に捉える
そもそも

```
ERROR! MySQL server PID file could not be found!
```
というエラーを吐くのは、mysql.server restartしようとするときの話。
この状態のままでは、このエラー文しか見れていない。しかし、

```
$ mysql -u root -p
Can't connect to local MySQL server through socket '/tmp/mysql.sock'

```

というようにエラー文が変わる。実際にエラーが起きている事実は変わらないが、ググるときの検索キーワードが増えることになります。

## 2.エラーのログをよく読む
このエラーが起きているときには、毎回 /usr/local/var/mysql/~.errorというところにログが入っています。なので、まずはそのログをよく読む。いや、よくは読まなくてもいいのでそこに出ているエラー文を検索キーワードとして使うという心意気を持っておく。これで検索する上でのフル装備が整うわけです。

ちなみに今回のエラー文は以下のもの
>InnoDB: Error: could not open single-table tablespace file .\bbs2_training_development\comments.ibd  
InnoDB: We do not continue the crash recovery, because the table may become  
InnoDB: corrupt if we cannot apply the log records in the InnoDB log to it.  
InnoDB: To fix the problem and start mysqld:  
InnoDB: 1) If there is a permission problem in the file and mysqld cannot  
InnoDB: open the file, you should modify the permissions.  
InnoDB: 2) If the table is not needed, or you can restore it from a backup,  
InnoDB: then you can remove the .ibd file, and InnoDB will do a normal  
InnoDB: crash recovery and ignore that table.  
InnoDB: 3) If the file system or the disk is broken, and you cannot remove  
InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf  
InnoDB: and force InnoDB to continue crash recovery here.  


## 3.ググる
1., 2.で検索する視点を２つ持てたので、それに従って両方を検索すれば色々出てくるわけです。

### 書き込み権限があるか確認
今回はこれで済みました。
まず、/usr/local/varに移動します。そして、ls -llでmysqlディレクトリの権限を確認します。
あれ？mysqlになっているじゃん、と。

これを自分のユーザー名にしてしまえば解決できました。

```
$ sudo chown -R [ユーザー名] mysql
```
ここで、<b>-R</b>をいれることを忘れないでください。ディレクトリ全体に適応するには、これがないとだめなので。

### 途中のプロセスを切る
mysql pid not foundで検索してくるとすぐに出てくるやつですね。

```
$ ps ax | grep mysql
```
で途中になっているプロセスがないかどうか確認して、あったらkillする、と。
僕はこれにぶち当たったことはまだないですけど。

```
4823 s000  R+     0:00.00 grep mysql
```
てな感じで、検索に使ったのが出てくるだけでした。

## まとめ
mysqlのエラーが出ても、一つのエラー文のみに固執せず、他にいろいろなエラーがないか探したり、段階的にエラーをおこしてログが変わるのを期待したりするのがいいすね。
Ansibleを最速で学習する方法

Ansibleは要領よく学習すれば30分くらいでそこそこ使えるようになります。
この記事も極力短くまとめます。

## Ansibleの知識の足場
Ansible学習をする上で最初に知っておくべき最低限の知識は以下になります。

* **Playbook**と言うものがあり、それには「どのサーバーで何を実行するか」を記述する。Ansibleでは殆どの時間をこれを書くことに費やす。
* `ansible`コマンドと`ansible-playbook`コマンドがあり、Playbookを実行するのに使うのは後者。前者の出番は少ない。
* Playbookの例が[LAMP構成の例](https://github.com/ansible/ansible-examples/)にあり、これを見るだけで大体のイメージがつかめる。
* Playbook内で**モジュール**というものを多用するが、それについてのドキュメントは[Ansible Docs - All Modules -](http://docs.ansible.com/ansible/list_of_all_modules.html)にある。

## 実際のPlaybookを見ながら理解する
最低限の知識の足場ができたら、実際の例を見ましょう。

[LAMP構成の例](https://github.com/ansible/ansible-examples/tree/master/lamp_simple)でシンプルなPlaybookが見れます。
コードをざっと眺めると以下のことがわかるはずです。

* Playbookの実体はいろんな設定ファイルが格納されたフォルダである
* Playbook内のhostsファイル内に対象サーバーをグループごとに書く
* Playbook内のrolesディレクトリに各ロールごとのフォルダが有る
* Playbook内のsite.ymlにはどのホストがどのロールを持つかなどの設定を書く

次に、**タスク**を見てみましょう。
[roles/common/tasks/main.yml](https://github.com/ansible/ansible-examples/blob/master/lamp_simple/roles/common/tasks/main.yml)を開くと、サーバー上で実行したいことがYAMLで書かれてます。
このファイルを見る上では以下を知っておくといいです。

* 各処理に**name**を書く(Playbook実行時に表示されるのでわかりやすい文言で)
* **tags**は処理をグループ化するためだけもので、無くてもOK(一部の処理だけを実行したい場合に使う)
* **notify**は後述の**ハンドラー**を実行したい時に書く
* **yum**, **template**, **service**はモジュールと呼ばれるもので、実際に行いたいことを記述するために使う。モジュールの使い方の詳細は毎回、上で紹介したドキュメントを見ながら行う。
* その他の**register**とか**changed_when**とかは使う機会が少ないものなので、後々ドキュメントを見て勉強すればいい

次に、**ハンドラー**を見てみましょう。
[roles/common/handlers/main.yml](https://github.com/ansible/ansible-examples/blob/master/lamp_simple/roles/common/handlers/main.yml)にはサービスを再起動するための記述があります。
タスクを実行したあと、サービスを再起動したい時などはこんな風に書いて、**name**で指定した名前を使ってタスク内から呼び出せます。

次に、**テンプレート**を見てみましょう。
[roles/common/templates/ntp.conf.j2](https://github.com/ansible/ansible-examples/blob/master/lamp_simple/roles/common/templates/ntp.conf.j2)はntp.confの元になるテンプレートです。Ansibleでは**jinja2**というテンプレートエンジンが使われていて、`{{ ntpserver }}`という部分に変数が展開されるようになっています。

次は、**変数**について。
[group_vars/all](https://github.com/ansible/ansible-examples/blob/master/lamp_simple/group_vars/all)を見ると上のテンプレートで使われていた変数が定義されているはずです。
見るとわかりますが、変数はロールごとに分けて定義できます。

## その先の学習
以上でなんとなくAnsibleを理解できたと思います。
上の例より複雑な構成のサーバー群を構築しようと思ったら、もう少し学習が必要だとは思いますが、基本的には必要に応じて[Ansible Docs - All Modules](http://docs.ansible.com/ansible/list_of_all_modules.html)でモジュールの使い方を調べたり、[ansible-examples](https://github.com/ansible/ansible-examples)を参考にいろんな場合の記述方法を覚えていけば宜しいかと思います。
Oracle で 1 CPU を占有させる方法

# Oracle で 1 CPU を占有させる方法

以下の PL/SQL を実行することで、1 CPU を占有(CPU 使用率 100%)することができます。

```lang:pl/sql
begin
  while 1 = 1 loop
    declare n1 number;
    begin n1 := 1; end;
  end loop;
end;
/
```
githubで他人の作成中のブランチをローカルに持ってくる方法


チーム開発でgithubを使っているとき、互いにコードレビューを行ってコードの質を上げるということをやっているチームは世の中に多くあると思います。

そういったことをする過程で、サーバー側のコードならgithub上でソースコードを読めばたいがいわかりますが、フロント側のコードは読むだけでは不十分な場合が多くあります。実際の動きを自分のローカルで再現してレビューをする必要が出てきたりします。

そんなとき、どうやって他人の開発中のブランチを手元に持ってきて再現するか、ということです。

## やりかた
まず、

```terminal
git checkout origin/[ブランチ名]
```
というコマンドを打ちます。そうすると、おそらくリモートリポジトリのブランチにcheckoutしている状態になります。

そして、このコマンドを打つと親切にも以下のような文章が出てきます。

>Note: checking out 'origin/[ブランチ名]'.

>You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

>If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

 > git checkout -b new_branch_name

まぁ、要するに自分のローカルのブランチにしたいなら、今いるブランチ（リモートの他人が開発途中のブランチ）をもとにローカルに新しいブランチ切ってね、ということ。

そこで、

```terminal
git checkout -b wip_branch
```

とすれば、自分のローカルに他人が開発途中のブランチをwip_branchとして取ってこれるわけです。
Azureで逆引き設定

 
`Set-AzureService -ServiceName "対象VM名" -ReverseDnsFqdn "逆引きにするドメイン"`

逆引きにするドメインへ最後の"."を忘れないように
DNSの浸透まで多少時間がかかることは承知かと思いますが、
浸透するまでは、エラーで設定できません。
Groongaで学ぶ全文検索 2015-09-18

Groongaで学ぶ全文検索の勉強会に参加した際のメモです。
https://groonga.doorkeeper.jp/events/31604

## 全文検索とは

複数文書にまたがって、文書の全文を対象とした検索

``` 
入力（クエリー、キーワードなど）→全文検索→出力(マッチした文書)
```

上記の様に複数の文書の中からクエリやキーワードなどの入力にマッチした文書を出力として返す
※何かを考えるときは入力と出力を考えるとよい

## 全文検索の仕組み

 複数の文書の中の文字列を毎回頭から検索していると時間がかかるため
 辞書の索引の様に、事前にどの文書にマッチする文字列が存在しているかという情報を保持するインデックス作る。
 全文検索の際には作成したインデックスからマッチする文書を検索する。

### インデックスの作り方

どうやって見つけるかによって作成の仕方が異なる。
前方一致で検索させる事が多いためA-Zなど決まった順に並んだリストとして作成する事が多い。
下記の例の様に「He」で検索したい場合などに周辺のデータを探しやすい。

```
index0 Hello 文書3
index1 Hey   文書2 
index2 World 文書3
```

関連するものを取る必要がないタグなどの場合にはハッシュ値などを利用してデータを一意に特定することもある

インデックスの作り方には
1.随時処理
2.バッチ処理
の２種類があるが
Groongaの場合には ~~随時~~ 逐次処理を利用する事ができ、インデックスの作成時間を遅く感じさせない事ができる

### 検索の仕方

作成したインデックスを検索する際には二分探索を使う事が多い。
これにより文書数が増えても線形的に検索時間が増えることを防いでいる。

二分探索の検索の仕方

1.データを昇順、または降順に並べたリスト作る
2.リストの中央値をとる
3.検索したいものが中央値と同じであれば終了
4.検索したいものが中央値よりも前半にある場合検索の対象範囲前半として、後半にあれば対象範囲を後半として2.に戻り、3.になるまで検索を続ける。

例)下記のリストからHを検索する場合
中央値はリストの最初と最後の値を足して2で割ったものとする(小数点以下は切り捨て)

1.(1+10)/2 =5が中央値でEを取得
2.HはEより後ろなので中央値より後ろを検索範囲とする
3.(6+10)/2 =8が中央値でHを取得し検索終了

```
index1  A 
index2  B
index3  C
index4  D
index5  E　☆1.最初の中央値
index6  F
index7  G
index8  H  ☆2.次の中央値
index9  I
index10 J
```

### 後半戦メモ

* どうやって見つけるかが大切

→条件がゆるすぎると検索結果が多すぎてしまい、きつすぎると欲しいものが見つからなくなってしまう。

例)「ネジ」でも「ねじ」でも検索させたい。

* 検索対象が何かも大切

例)通常の検索では記号を無視するが
下記などリファレンスなどの場合には記号も検索対象とするなど

るりまサーチ
http://docs.ruby-lang.org/ja/search/

* 重みづけなどもしている
例)完全一致した方がランクが高い、大文字小文字違いはその次のランクなど

* キャシュはOSに任せている

→効率的に処理できるように近いものは同じ領域に確保するなどの工夫をしている

* 日本語の場合にはトークナイズ（何個ずつで区切るか)なども考える必要がある。日本語は1文字も多いので難しい
Windows10でHaskellPlatformとAtom導入

[stack](https://github.com/commercialhaskell/stack) を使った Haskell 環境を構築済みだったのだが、Haskel Platform にフォールダウンした。Cholatey 来るかな来ないかな自分で作るかな。[作っている人いるな](http://apatheia.info/blog/2013/02/08/create-chocolatey-package/)とか。Platform はデブいから ghc でできないかなとかで半日コース使った結果。

#Haskell Platform 導入
Haskel Platform は ghc にツール群をアペンドしたプラットフォーム。
[Haskell](https://www.haskell.org/platform/) からインストーラダウンロード。

#ghc-mod 導入
cabal で ghc-mod 導入する。`--global`オプションで`C:\Program Files\Haskell\bin`に導入するよう指定している。
1. `cabal update`
2. `cabal install cabal-install --global`
3. `cabal install ghc-mod --global`

#Atom 導入
Chocolatey 使って Atom 入れておく。
```
cinst atom
```
同じ Electron つながりの Visual Studio Code も `cinst` できる。 

#Atomプラグイン設定
Ctrl + Comma > install で language-haskell, haskell-ghc-mod 導入。
haskell-ghc-mod の setting から Ghc Mod Path、Ghc Modi Path を指定する。
```
C:\Program Files\Haskell\bin\ghc-mod.exe
C:\Program Files\Haskell\bin\ghc-modi.exe
```
関係ないけど haskell-ghc-mod のアップデートが頻繁過ぎてビビる。
初めてのフレームワーク-Laravel5-4エラー時の対策メモ

#Laravel & Markdown記法の勉強及びメモとして書いています。
間違えている点ございましたら、ご指摘いただけますと大変ありがたいです。よろしくお願いいたします。

#エラーメッセージメモ

##環境
Mac OS X
php artisan serve　でビルトインサーバーを起動して開発


##Warning: require(C:\laravel5\bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in C:\laravel5\bootstrap\autoload.php on line 17

ターミナルからphp artisan serveしようとすると、発生。
```composer install```すればOK

##Whoops, looks like something went wrong.
####対処法
.envを開いて、
```APP_DEBUG=false```
をtrueに変更
```APP_DEBUG=true```

#####.envが見つからない場合
ターミナル開いて、Laravelプロジェクトのフォルダに移動して、```ls -a```と打つ。（隠しファイルを表示）
それかMacの設定を隠しファイル表示するように変える。

#####まだ.envが見つからない場合
通常は/.env.exampleがあるはずなので、これをコピーして、コピーしたファイルの名前を「.env」に変更して保存。
ターミナルで、```cp .env.example .env```したら楽。

##No supported encrypter found. The cipher and / or key length are invalid.
.envがあるか確認。
ない場合は、ターミナルから、
```cp .env.example .env```
した後に、
```php artisan key:generate```
でOK。

.envがもともとあれば、
```php artisan key:generate```
だけでOK。

やってることは、.envファイル内が、
```APP_KEY=SomeRandomString```
ってなってるところを、```php artisan key:generate```とすることで、
```APP_KEY=生成されたKEY```に変える！

####上記３つのエラーは、Laravelプロジェクトをgit cloneした時に起こりやすい。
理由：Laravel5.1にある.gitignoreファイルに、vendor内ファイルと、.envはgitで管理されない設定にデフォルトでなっている。
vendor内ファイル：サイズが大きいので
→```composer install```でインストールする。
.env：これを共有するとDBパスワードとかばれるため
→.env.exampleをコピーして作って、```php artisan key:generate```する。


##QueryException in Connection.php SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel.staff' doesn't exist

データベース名をStaffsとして作成してモデル作って、アクセスしようとしたらエラーが起きた。
Laravelはデータベース名：複数形、モデル名：単数形で記載するルール
str::pluralという関数で、単数を複数にしている。
Staffは複数形もStaffというかStaff自体が複数でも単数でも使えるらしいので、データベース名：staff、モデル名：Staff　と作らないといけなかった。

エラーメッセージ出るたび追記。


##記事一覧
[初めてのフレームワーク-Laravel5-1 基本用語整理](http://qiita.com/k-okada/items/65332803aa79745e8f69)
[初めてのフレームワーク-Laravel5-2 構造、基礎メモ](http://qiita.com/k-okada/items/c92a3f3594d751d42740)
[初めてのフレームワーク-Laravel5-3 DB周り用語整理](http://qiita.com/k-okada/items/4dae1d5b25db8a7f3072)
[初めてのフレームワーク-Laravel5-4 エラー時の対策メモ](http://qiita.com/k-okada/items/0fa94f076d08584ee314)
[初めてのフレームワーク-Laravel5-5 DBアクセスメモ](http://qiita.com/k-okada/items/13a3814987fbecc9ae25)

##参考サイト
[laravelプロジェクトをgit cloneしてきて起動しようとしたらエラーで落ちた話](http://yuzu441.hateblo.jp/entry/2015/09/01/204658)
[Laravelで…vendor/autoload.php): failed to open stream: No such file or directory というエラーによりデフォルト画面が表示されない解決方法](http://qiita.com/pugiemonn/items/3d000ac0486987dd92df)
LINE アカウントを作成する方法

一部の機能を携帯キャリアのサービスを使用して実現していますが、PC のみで LINE アカウントを作成する方法です。既存のアカウントは変更せず、新規に LINE のアカウントを作成します。
基本は http://nelog.jp/line-without-phone を参考にしてます。

# LINE アカウント作成手順 

1. google アカウントを作成する

2. facebook アカウントを作成する
google アカウントを使用して facebock アカウントを作成します。

3. Android のエミュレータをインストールする
BlueStacks というエミュレータを使用します。
bluestacks-app-player-0-9-17-5012-multi-win.exe をダウンロードしてインストールします。
※ 最新の BlueStacks だと LINE をインストールしても認証できない可能性あり(試したらダメでした。。)
※ 基本的には無償で使用可能だが、使用し続けるにはアプリをインストールし続ける必要がある。月 $2 支払えば無制限で使用可能

4. BlueStacks 上に LINE をインストールする

5. LINE を起動する
facebook アカウントを使用してログインします。
※ 年齢認証をしないと LINE で ID 検索できないので、そこだけは携帯キャリアの認証を使用する必要がある

6. LINE にログインする
※ Windows のストアアプリの LINE だと、グループのノートやアルバムは見られないので注意
Kotlin M12 -> M13 移行でやったこと


# 前置き

Kotlin M13が出た！

- http://blog.jetbrains.com/kotlin/2015/09/kotlin-m13-is-out/

updateしたプロジェクトでいくつかハマった問題があったのでメモ。

# error対応

## rxkotlinを除外

プロジェクトではRxAndroid + RxKotlinを利用していたのだけど、RxKotlinがまだM12ベースでない (2015/09/20現在) だったので、不要なエラーを招くのを阻止するために除外。
プロジェクト内で対して利用してなかったのでたいした問題にはならなかった。

## Genericsの継承元にAny

たとえばこんな感じのDelegates.notNullを利用するGenericsクラスがあったのだけど。

```kotlin
public class DummyObserver<T> : Observer<T> {
    var count: Int = 0
    var errorCount: Int = 0
    var completed: Boolean = false
    var element: T by Delegates.notNull()

    override fun onNext(t: T) {
        element = t
        count++
    }

    override fun onError(e: Throwable?) {
        errorCount++
    }

    override fun onCompleted() {
        completed = true
    }
}
```

Delegates.notNullでエラー。
Delegates.notNullの宣言が変わり、`<T : Any>`をnotNullの返り値に利用するようにへんこうされていた。

```kotlin
public final fun <T : kotlin.Any> notNull(): kotlin.properties.ReadWriteProperty<kotlin.Any?, T> { /* compiled code */ }
```

```kotlin
- public class DummyObserver<T> : Observer<T> {
+ public class DummyObserver<T : Any> : Observer<T> {
```

としてあげることで回避した。

## 

# warning対応

## Delegates.lazy -> lazy

Delegates.lazyがdepreatedになっていた。
かわりにlazyを使う。

```kotlin
-    val hoge: Int by Delegates.lazy { 1 }
+    val hoge: Int by lazy { 1 }
```

## annotation

`@` なしのAnnotationを利用するとwarningsが出るようになった。

```kotlin
data class Hoge(
-    JsonProperty("user_id")
+    @JsonProperty("user_id")
    val userId: String
)
```

あと小文字のannotationがdeprecatedになっていた。

```kotlin
+            is Boolean -> { @Suppress("UNCHECKED_CAST") return pref.getBoolean(key, defaultValue) as T }
-            is Boolean -> { @suppress("UNCHECKED_CAST") return pref.getBoolean(key, defaultValue) as T }
```

## java<T>() => T::class.java

deprecated.
主にretrofitで利用していた。

## <String>.splitBy -> <String>.split

deprecated.

## <List>.sortBy -> <List>.sortedBy

deprecated.

## assert(Boolean, message) => assert(Boolean, lazyMessage)

deprecated.
遅延メッセージ推奨になっていた。

```kotlin
- assert(false, "message")
+ assert(false, { "message" })
```
Windows10上のChocolateyでYeomanセットアップ

開発環境がセットアップされていない Windows 10 に Yeoman を導入するまでのメモ。
実は Git や Node.js はいったん導入済みだったが、バージョンが古いのと Chocolatey に移行したかったのでアンインストールした（`C:\Users\[USER]\AppData\Roaming` 配下の `npm` フォルダも消し消ししてある）。
# Chocolatey セットアップ

[Chocolatey](https://chocolatey.org/) は Windows でパッケージ管理を目指した CLI ツール。管理の煩雑な開発環境のセットアップに威力を発揮する。
アンインストール回りはまだまだ未整備なので、あくまで初期セットアップの省力化程度の認識がよい（20150919現在）。

管理者権限でコンソールから下記を実行する。
```
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
```
念のための再起動を推奨するサイトが多いが、ターミナル再起動で問題ない。
# Node インストール
Chocolatey コマンドを使って [Git](https://git-scm.com/)、[Node.js](https://new.nodejs.org/) をインストールする。
```
cinst git nodejs
```
`cinst` は `choco install` のシュガーシンタックス。
また、パッケージ `git nodejs` はそれぞれ `git.install nodejs.install` のエイリアスとなっている。
git インストール時にはパラメータで UNIX Tool パスの環境変数追加と CRLF 自動変換の無効化が指定できる（今回はやっていない）。
```
cinst -params '"/GitAndUnixToolsOnPath /NoAutoCrlf"'
```
職場でよくわかっていない頃に Git 導入して、CRLF 自動変換のために大量のマージが発生したのは苦い思い出。Windows の人は指定しておいたほうがよいのかもしれない（悪いのかもしれない、わからない）。

# Yeoman インストール
[Yeoman](http://yeoman.io/) は yo（scaffolding）、Grunt（ビルド）、Bower（パッケージマネジャ）からなるワークフロー。
npm コマンドを使って yo をインストールする。
```
npm install -g yo
```
自動で bower grunt-cli もインストールされる。あとは任意の generator を使用すればよい。
generator は npm コマンドで導入する。今回 generator-aspnet を入れたけど、32bit 機では [DNX](https://github.com/aspnet/dnx) が未整備なので動作確認には至っていない。
[javascript]配列から最も近い値を探す


jsで配列から最も近い値を探すやり方を調べたけどあんまり出てこなかったのでメモ。

数値配列から、指定の値に最も近い値のindexを取り出す。

```javascript
var value = 100; // 調べたい値
var array = [1,123,13,84,255,3,136,96,117,62]; // 調べたい配列
var diff = [];
var index = 0;

$(array).each(function(i,val){
  diff[i] = Math.abs(value - val);
  index = (diff[index] < diff[i]) ? index : i;
});
```

indexじゃなくて値がほしいときは、array[index]を見れば良い。

まあ特に難しいことはなかった。

関数やクラスにして使いまわすというよりは、状況に応じて使いやすいように変えればいいと思います。


###参考
http://qiita.com/PianoScoreJP/items/755e7d638e4381b5de24
Run したとき WatchKit App か iOS App かを切り替える

わからなかった & 他人のプロジェクト一式を渡すときに毎回説明するのもあれなので、ここに書いちゃう。

Product > Scheme で変更できます。

![スクリーンショット 2015-09-20 10.09.01.png](https://qiita-image-store.s3.amazonaws.com/0/50220/62dee2fd-9635-fb83-4745-ee10ac3638c0.png)
VirtualBoxにScientific Linux 7.1を入れる

覚書です。

# TL;DR
早いミラーサイトを指定すること。

# インストール
ミラーサイト（今回はJAIST）からネットインストール用のISOをダウンロードする。

http://ftp.jaist.ac.jp/pub/Linux/scientific/7.1/x86_64/iso/

からSL-7.1-x86_64-netinst.isoをダウンロードした

## Date & Time
Asia/Tokyoを選択

## Network & Host Name
VirtualBoxで指定したもの (今回はNAT）を選択
ホスト名は "sl" とした

## Installation Source
http://ftp.jaist.ac.jp/pub/Linux/scientific/7.1/x86_64/os/

## Software Selection
Minimal installを選択

## インストール
インストール画面で次の２つをやっておく

- rootパスワードを設定
- userを作成
sublime text > JSON整形パッケージ > PrettyJSON

```txt:動作確認
Windows 8.1 pro(64bit)
```

sublime text2にてJSON整形ツールを探していた。
PrettyJSONというのがあるようだ。

参考
http://blog.morizotter.com/2014/04/02/sublime-text-package-pretty-json-is-good/

パッケージをインストール後の使い方は以下。

1. ファイルをSublime Text2で開く
2. Syntaxを Javascript > JSON とする
3. Ctrl + Alt + j で整形できる


![before.png](https://qiita-image-store.s3.amazonaws.com/0/32870/a2881505-00f5-defb-303f-8979de9d8c26.png)

が以下になる。

![after.png](https://qiita-image-store.s3.amazonaws.com/0/32870/889eac68-1b9f-9bb7-7b5b-f0a155a31cd2.png)


複数のJSON文字列がある時、すべて選択して変換はできないようだ。
1つのJSON文字列を選択ごとに Ctrl + Alt + j で変換する。

<hr>
上記整形したファイルをC++ Builder XE4で読取しようとすると、改行がついたことにより、JSONファイルの読取が失敗した。
行単位の処理としていたのが原因。

読取る前にXE4側で改行を取り除くなどの処理が必要かもしれない。
[Android] Emulatorの追加

# AVDManager

## 開き方

![Screen Shot 2015-09-20 at 09.42.06.png](https://qiita-image-store.s3.amazonaws.com/0/18705/94e1552c-a7d9-dd77-311e-022a5a907c47.png)

![Screen Shot 2015-09-20 at 09.43.12.png](https://qiita-image-store.s3.amazonaws.com/0/18705/bac8616d-2472-7ce5-9391-50a90192a551.png)

## デバイス一覧

![Screen Shot 2015-09-20 at 09.38.35.png](https://qiita-image-store.s3.amazonaws.com/0/18705/cc1e9231-e5ea-e679-e482-b6aa7616c0ef.png)

Create Virtual Deviseへ。

## Select Hardware

![Screen Shot 2015-09-20 at 09.38.26.png](https://qiita-image-store.s3.amazonaws.com/0/18705/3fb1ef8a-d765-3efb-ca16-8b174a8c9b0e.png)

選択します。

## System Image

show downloadable system images にチェックを入れます。

![Screen Shot 2015-09-20 at 09.47.24.png](https://qiita-image-store.s3.amazonaws.com/0/18705/1c95e4ba-36e6-c9ca-d8d9-a61f2d7dfdaa.png)

必要なものをダウンロードしていきます。

SystemImagesに戻るとimageが増えています。

![Screen Shot 2015-09-20 at 09.39.10.png](https://qiita-image-store.s3.amazonaws.com/0/18705/acb7229c-23cf-83f8-da8c-32b882178886.png)

選択して次へを押していくと追加できます。

![Screen Shot 2015-09-20 at 09.40.14.png](https://qiita-image-store.s3.amazonaws.com/0/18705/ff539618-d2a0-f850-dd33-d6f69e292f52.png)
MySQLのバルクインサートを実行したときのエラー対処法

#MySQLでバルクインサートを実行したときのエラー対処法
こんなエラーが出てしまった・・・

```
Communication link failure: 1153 Got a packet bigger than 'max_allowed_packet' bytes
```

SQL文のデータ？がmax_allowed_packetの値を超えてしまった場合に出るエラーのようです。
/etc/my.cnfのmax_allowed_packetのサイズを増やしましょう。

```lang:/etc/my.cnf
max_allowed_packet=8M
```

編集したら、MySQLを再起動すれば完了となります。
[Android] Toolbarの色を変える

```java:style.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">ここに色を指定する</item>
</style>
```

![Screen Shot 2015-09-20 at 08.44.24.png](https://qiita-image-store.s3.amazonaws.com/0/18705/aed1ae17-2772-ef0e-0ce0-7f7ecca373b9.png)
nagiosの監視間隔は(初期値)5分なので1分に修正すること

## 参考

* [ぷらっとホーム - サポート - 技術情報 - OpenMicroServer(TM) Nagios の設定](http://www.plathome.co.jp/support/labo/oms400/nagios_setup.html)
* [WEB MEMO: Nagiosのデフォルト設定について](http://blog.milds.net/2012/11/nagios.html)

## 通常のチェック間隔(service)

* generic-service で定義されている normal_check_interval が5分

これだと検知が遅れるので1分にする

```diff:/etc/nagios/objects/templates.cfg
 define service{
         name                            generic-service
         max_check_attempts              3
-        normal_check_interval           5
+        normal_check_interval           1
         retry_check_interval            2
         }
```

なお interval_length(初期値60秒) を変更することで秒単位の監視も可能


## リトライ時のチェック間隔

* generic-service で定義されている retry_check_interval が2分

これだと検知が遅れるので1分にする

```diff:/etc/nagios/objects/templates.cfg
 define service{
         name                            generic-service
         max_check_attempts              3
         normal_check_interval           1
-        retry_check_interval            2
+        retry_check_interval            1
         }
```

----

## 通常のチェック間隔(generic-host)

```diff:/etc/nagios3/conf.d/generic-host_nagios2.cfg
 define host{
        name                            custom-host
        notifications_enabled           1
        event_handler_enabled           1
        flap_detection_enabled          1
        failure_prediction_enabled      1
        process_perf_data               1
        retain_status_information       1
        retain_nonstatus_information    1
		check_command                   check-host-alive
-		max_check_attempts              10
+		max_check_attempts              1
		notification_interval           60
		notification_period             24x7
		notification_options            d,u,r
		contact_groups                  admins
        register                        0
        }
```

> max_check_attempts

この値が10(初期値)だと、10回チェックの後通知となる。
1回に修正した。
MarvelでUIプロトタイピング


(この記事は大分で開催中の高校生ハッカソン・アイデアソン向けの内容です)

UIプロトタイピングツールの一種。画像自体は、別アプリケーションで作成してアップロードする形態なので、ペーパープロトタイピングから本格的なものまで、幅広く使えます。アニメーションに関しては、単純な遷移に限られるものの、使い方は簡単。次の3点で構成されています。

- Web版 https://marvelapp.com/
- iOS / Android 版 (高校生各自がインストール)
- Sketch / Photoshop プラグイン (Sketchとプラグインは、会場のMacにインストール済み)

![Artboard 1.png](https://qiita-image-store.s3.amazonaws.com/0/1858/824aefe6-d06a-49e5-770e-44a2e2706efe.png "Artboard 1.png")

## 準備
1. 高校生はiPhone/AndroidにMarvelをインストール。アプリケーションはApp Store / Play Storeで探しましょう。
2. Marvelのユーザ登録はすでに済ませてあります。MacBookの電源アダプタに書かれているメールアドレスとパスワードを使って、アプリケーションからSign Inしておきましょう。

## 使い方 - 手書き編

1. iPhone / Android版のMarvelで、「+」ボタンを押してプロジェクトを追加
	- プロジェクト名は日本語でもOK
	- 画面サイズも選びます (iPhone6にしておくのがひとまずは良いと思います)
2. デザインスプリントで選ばれた画面スケッチを、Marvelで撮影
3. 他の画面に遷移させたい場所にリンクをつける
	- 「ADD」ボタンをクリックして、写真の中にリンクを作成
	- 遷移先の画面スケッチを選択
4. Playボタンを押して、試してみましょう!

## 使い方 - Sketch編

### MacのSketchで画面をデザイン

1. Sketchを起動して、`File > New From Template > iOS UI Design` を選択
2. Insertボタン(「+」アイコン)から、`Artboard`を選択
3. 右側の一覧から`iPhone 6`をクリック
4. Insertボタンから、`Symbol`の中の好きな要素を選択
5. 配置された要素の位置を調整
6. くりかえし
7. Symbolにないものは、図形ツールで自分で描くか、[Sketch App Sources](http://www.sketchappsources.com/)などのサイトで探す

http://www.sketchappsources.com/

### Marvelにアップロード

Marvelプラグインは、Sketchにインストール済みです。

1. Sketchで`Plugins > Send or Update All Artboard to Project...`を選択
2. [MarvelのWebサイト](https://marvelapp.com/)で確認
3. iPhone / Android版と同様のリンクをつけられる他、アニメーションの設定もできます

https://marvelapp.com/

### 端末でチェック

iPhone / Android版のMarvelを開くと、Sketchからアップロードしたプロジェクトが登録されているはずです。Playボタンを使って、使い勝手/手触りを試してみましょう。
Ubuntu 15.04 でかつProxy環境で、Dockerを使う場合の落とし穴

# まえがき

落とし穴というか、Google検索で古いほうが上に出てくるというだけなんですが。

# 本題

Ubuntu 12.04では、Upstartを使っていたので、`/etc/default/docker`に環境変数`http_proxy`, `https_proxy`を書くだけでよかったんですが、
Ubuntu 15.04では、systemdになっているため上記の方法では対応できません。

ではどうすればよいかというと、公式にドキュメントがありました。

http://docs.master.dockerproject.org/articles/systemd/

少し手順が複雑なので、ポインタを貼っておくにとどめておきます。

# 参考
ちょい古めの記事。Ubuntu 15.04使うときに参照してしまうとハマります。
http://deeeet.com/writing/2014/07/01/docker-behind-proxy/
http://tkak.hatenablog.com/entry/2014/02/23/110907