OmniAICreator/Qiita-1.07M huggingface dataset:
Swiftまとめ - 関数・クロージャ -

**追記: 2016/9/19**
Swift3.0版はこちらです
http://qiita.com/merrill/items/2a2a069771cb89d5499b

## 関数

#### 引数なし・戻り値なし

```swift
func hello() {
  print("Hello!")
}
```

#### 引数なし・戻り値あり

```swift
func hoge() -> Int {
  return 100
}
```

#### 引数あり・戻り値あり

```swift
func hoge(num: Int) -> Int {
  return num
}

hoge(100)
```

#### 引数あり（複数）

```swift
func hoge(a: Int, b: String) {
  print(a)
  print(b)
}

hoge(100, "テスト")
```

#### 引数あり（複数かつ数を指定しない）

引数の値は配列として格納される。

```swift
func hoge(a: Int...) {
  print(a[0])
  print(a[1])
}

hoge(100, 200)
```

#### 引数あり（初期値を設定）

```swift
func hoge(a: Int = 100) {
  print(a)
}

hoge() // => 100
hoge(a: 200) // => 200 ※引数にデフォルト値を指定した場合は、引数のラベル名が必要になる！
```

#### 引数を使って変数宣言

引数のパラメータは、通常定数(let)として扱われるので、値を代入することはできない。

```swift
func hoge(a: Int) {
  a = 200 // エラー
}

hoge(100)
```

ただし、引数でvar宣言をしてあげるとエラーにならない。

```swift
func hoge(var a: Int) {
  a = 200 // OK
}

hoge(100)
```

#### 名前付き引数（外部引数）を使う

引数の変数名の前に`#`をつける。

```swift
func hoge(#a: Int) {
  print(a)
}

hoge(a: 100)
```

第2引数以降は、自動的に引数名が名前付き引数となるので#はつけない。

```swift
func hoge(#a: Int, b: Int) {
  print(a)
  print(b)
}

hoge(a: 100, b: 200)
```


あまりないと思うが、引数名とは別名で指定したい場合は、以下のように書ける。

```swift
func hoge(num a: Int) {
  print(a)
}

hoge(num: 100)
```

#### 戻り値が複数

タプルを使用する。

```swift
func compareNumber(arr: [Int]) -> (min: Int, max: Int) {
    var min = minElement(arr)
    var max = maxElement(arr)

    return (min, max)
}

var result = compareNumber([1,2,3,4,5,6,7,8,9,10])
result.min // => 1
result.max // => 10
```

## オーバーロード

引数の数や、外部引数の名前が異なれば、同じ名前の関数をたくさん定義できる。

```swift
func hoge() {
  print(100)
}

func hoge(#a: Int) {
  print(a)
}

func hoge(#b: Int) {
  print(b)
}

hoge() // => 100
hoge(a: 200) // => 200
hoge(b: 300) // => 300
```

## クロージャ

名前がない関数。{}で囲まれたブロック。メソッドのように呼び出すのではなく、その場で実行される。関数の引数でよく利用される。

**引数なし・戻り値なし**

型は `() -> Void`

```swift
{() -> void in
  ...
}
```

**引数あり・戻り値なし**

型は `(a: Int) -> Void`

```swift
{(a: Int) -> void in
  ...
}
```

**引数あり・戻り値あり**

型は `(a: Int) -> Int`

```swift
{(a: Int) -> Int in
  ...
}
```

クロージャを変数に入れることも可能

```swift
var plus = { (a: Int, b: Int) -> Int in a + b }
```

サーバリクエストのコールバックとして、クロージャを引数で受け取る関数を書くのはよく使われる。

```swift
# requestメソッド呼び出し
request(
  params: params,
  success: {() -> Void in
    println("通信成功")
  }, 
  error: {() -> Void in
    println("通信エラー")
  }
)

# クロージャを受け取るrequestメソッド
func request(request: request, success: () -> Void, error: () -> Void) {
    //渡されたクロージャを実行する
    success()
}
```

クロージャを渡さず nil を渡す場合は、クロージャを Optional にできる。

```swift
func request(success: (()->Void)?) {
    success?()
}
```
LIG風の面白記事書いてみたので共有します。

こんばんは、がーでんです。

突然ですが
**モリナーガ博士とエンゼル助手**

第1話「ビスケットサンドの最も美味しい食べ方を解明せよ！」
http://ap.tadacopy.com/morinaga/?app_id=149922Xa

第2話「アイスの新利用法!?チーズスティックで3秒クッキングしてみた」
http://ap.tadacopy.com/morinaga2/?app_id=149922Xa

###■今日は記事というか、お願いがあります。笑

上の二つの記事をクリックしてみて下さい。


そして、ぜひ**「いいね！」してください。**


よろしくお願いします。


文章は僕が書いてます！！


今後もこういう活動をしていくかもなので、皆さんからフィードバックや感想等頂けると励みになります。

すげー手抜きでごめんなさい（笑）
ApexTriggerを構造化する


ApexTriggerのベストプラクティスとして、Handlerクラスを作成して、呼び出しと処理を分離するというものがあります。とはいえ、ちょっとしたTriggerなのにHandlerクラスを作ったりするのは面倒だけど、メソッド化したいということはないでしょうか？あるいはシステム管理者権限で実行したいとか…。

実は、ApexTriggerも構造化することができます！

## ApexTriggerにメソッドを書く
こんな感じで書けます。

```java:method
trigger AccountTestTrigger on Account (before insert, before update) {
    if(Trigger.isBefore && Trigger.isInsert) {
        doBeforeInsert();
    }
    
    public void doBeforeInsert() {
        System.debug('TestTriggerHandler.doBeforeInsert()');
    }
}
```

あんまり意味無いですが、staticメソッドも書けます。

```java:static_method
trigger AccountTestTrigger on Account (before insert) {
    if(Trigger.isBefore && Trigger.isInsert) {
        doBeforeInsert();
    }

    public static void doBeforeInsert() {
        System.debug('TestTriggerHandler.doBeforeInsert()');
    }
}
```

## ApexTriggerに内部クラスを書く
内部クラスも書けたりします。

```java:class
trigger AccountTestTrigger on Account (before insert) {
    TestTriggerHandler h = new TestTriggerHandler();

    if(Trigger.isBefore && Trigger.isInsert) {
        h.doBeforeInsert();
    }
    
    public class TestTriggerHandler {
        public void doBeforeInsert() {
            System.debug('TestTriggerHandler.doBeforeInsert()');
        }
    }

}
```

## ApexTriggerにテストは書けるのか？
残念ながらテストメソッドは書けません。

まずは外部のテストクラスから呼び出せるか試してみましたが、呼び出せませんでした。

```java:テストクラス
AccountTestTrigger.TestHandler h = new AccountTestTrigger.TestHandler();
```

大胆にApexTriggerにテストメソッドを書いてみましたが、こちらもNGでした。

```java:testMethod
trigger AccountTestTrigger on Account (before insert) {
	static testMethod void testDoBeforeInsert() {
		System.debug('TestTriggerHandler.doBeforeInsert()');

	}
```

## ApexTrigger構造化が拓く世界
ApexTriggerを構造化することで、AppExchangeアプリケーション開発者がハッピーになることがあります。

アクセス権限がないレコードを更新したいとき __without sharing__ を利用すれば問題ないところですが、AppExchangeアプリケーションを開発する場合、セキュリティレビューでApexClassに __with sharing__ を設定することが求められます。
そのため、Handlerクラスを利用するとアクセス権限のないレコードは更新できなくなってしまいます。

しかし、ApexTrigger内に記述された処理についてはシステム管理者権限で動作しますので、アクセス権限に縛られずレコードなどを操作できます。とはいえ、構造化できない状態では見通しが悪くなり保守性が落ちるので書く気が起きませんが、ApexTriggerを構造化できればある程度のロジックをトリガー内に書いてもいいかな、と思えてきます。

## まとめ
最後にメリット・デメリットをまとめておきます。
実際問題としてAppExchangeに公開するパッケージを開発している人でなければ、あまり利用しないかもしれません。

| 実装方法 | メリット | デメリット |
|:--------|:-------|:----------|
| Handlerクラスにロジックを分離 | 他のクラスやトリガーで再利用・単体テストしやすい | AppExchangeに掲載するアプリの場合はアクセス権限が制限される |
| ApexTrigger内で構造化 | AppExchangeに掲載するアプリでもアクセス権限が制限されない | 再利用できるのはトリガー内のみで、単体テストが書きにくい |

この投稿は[Salesforce1 Advent Calendar 2014](http://qiita.com/advent-calendar/2014/salesforce1)の12月19日の記事です。

Happy Hacking!
いつものプロットに流行色を取り入れるのはいかが？

PANTONEが来年春のテーマカラーを[発表しました](http://pantone.com/pages/fcr/?season=spring&year=2015&pid=11)ね。せっかくなのでプロットの凡例にこの色を使ってみたいと思います。

前回の[rvestでDribbbleに投稿されたshotのカラーパレットを作る - Qiita](http://qiita.com/uri/items/4fd3ee95ab40e66fe7a4)に引き続き、`rvest`パッケージによるwebスクレイピングによるカラーパレットの作成です。

まずは使用するパッケージを読み込みます

```{r}
library(rvest)
library(stringr)
library(ggplot2)
```

URLを指定し、カラーコードを取得します

```{r}
color2015 <- html("http://pantone.com/pages/fcr/?season=spring&year=2015&pid=11") %>%
  html_nodes("div .coloredSquare") %>%
  html_attr("style") %>%
  str_sub(start = 18, end = 24)
 ```

 適当なデータフレームを作って、プロット

 ```{r}
x <- c(1, 1.4, 1.8, 2.2,  1, 1.4, 1.8, 2.2, 1, 1.4, 1.8, 2.2,  1, 1.4, 1.8, 2.2)
y <- c(1, 1, 1, 1, 1.35, 1.35, 1.35, 1.35, 1.7, 1.7, 1.7, 1.7, 2.05, 2.05, 2.05, 2.05)
z <- color2015

df <- data.frame(x, y, z)

ggplot(df,
       aes(x = x, y = y, colour = z, label = z), guide = F) +
  geom_point(shape = 21, size = 30, colour = z, fill = z) +
  scale_x_continuous(limit = c(0.8, 2.5)) +
  scale_y_continuous(limit = c(0.8, 2.2)) +
  geom_text(size = 6)
```

![Rplot.png](https://qiita-image-store.s3.amazonaws.com/0/19462/6389ecc4-7686-55f5-dbfa-63b206b537c8.png)

丸にするとアイスクリームみたいでおいしそうですね（唐突）

実際のカラーコードは以下のとおりです

```{r}
color2015
 [1] "#9DC6D8" "#00B2CA" "#7DCFB6" "#1D4E89"
 [5] "#D2B29A" "#E3868F" "#F79256" "#EAD98B"
 [9] "#955251" "#C6CBCC" "#7DA1BF" "#4E6E38"
[13] "#7F8040" "#C78D6B" "#888688" "#B38FB1"
```
DeploygatePluginでJSONエラーが吐く場合

#問題
AndroidStudioのDeploygateプラグインでDeploygateに送信しようとするとJSONパースエラーで送信できない

#原因
Deploygateのアプリに空きが無いとJSON以外の文字列が帰ってきてDeploygateがそれを処理できないことが原因

#解決策
Deploygateの空きアプリを増やす（課金・アプリ消す）


flaverとかでpackageを弄ってると気が付かない事があるので注意
AndroidStudio で &quot;Java not found&quot;


# Info.plist の変更はやっちゃダメ

参考: http://qiita.com/neiraza/items/fdde2f922daa47b85bcd

> Please note: Do not edit Info.plist to pick a different version. That will break not only the application signature, but also future patch updates to your installation.

ということらしい

# ターミナルから起動するのは面倒なのでシステムワイドな環境変数を設定する

`/etc/launchd.conf` （無い場合は作成）に以下の設定を記述し、システムを再起動する。

```
setenv STUDIO_JDK /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk
```

これで、普通にAndroidStudio起動しても大丈夫

# 参考
Lightningのjsがエラーになってしまう理由がわからない時

まずは自分の記述が間違っていると考えるのが王道です。おそらく自分の記述が間違っています。ですが、ベータ版だからか、jsファイルの保存や動作時に幾つか予期しない挙動がありました。

## 文字列`{!`の繫がり

```js
var fn = function(flag1, flag2){!flag1 && flag2
  ? this.f()
  : this.g();
};

{!value;}
// {!
/* {! */

```

のように、`{!`で始まる文字列があると、保存時にその周辺でエラーが起きます。驚くべきことにコメント内の文字列でも起きます。
これは、`{ !value;}`のように、`{`と`!`の間に空白文字を挟めばOKです。

## /正規表現リテラル中の引用符`"'`/
現在Lightningのjs内に正規表現リテラルを記載すると、JsonStreamParseExceptionとか言われて保存できないことがあります。

```js
var re = /can't save this?/g;
```

シングルクォート及びダブルクォートが含まれていると、対応する引用符を探してしまっているようです…。

RegExpオブジェクトを明示的にインスタンス化することで保存できるようになります。

```js
var re = new RegExp("can't save this?", "g");
```

その他の方法としては、実行時に副作用のない形で、対応する引用符を書いてしまって正規表現を閉じるという方法もあります。保存さえできれば、実行時には通常のJavaScriptの解釈にて処理されます。

```js
// var re=/can't?/;
var re = /can't?/;// '/;

// var re2 = /can't?/,b=true;
var re2 = (/'/,/can't?/),b=true;
```

1つ目は実行時はコメントですが、パース時には引用符を書いた後、正規表現を終わらせる形です。2つ目は先に引用符付きの正規表現を記述してカンマ区切りすることで、実行時には後ろ側の式が有効になる形にしています。

## /正規表現リテラル中のエスケープ中括弧`\{`/

引用符だけでなく、中括弧も注意が必要です。

```js
var re_ok = /a{1,3}/; // parsed correctly

// var re_ng = /\{\{\{/;
var re_ng = /\}\}\}/;
```

（出現回数指定などの用途で）エスケープせずに使用している場合は良いのですが、
なぜか、エスケープしている場合に、リテラル外の中括弧と解釈されるらしく、保存時に関数が終わっていないだとか不審なエラーになります。

`\{`の代わりに`[{]`で置き換え（`[]`中で使われていたらエスケープ文字を外す）れば大丈夫だと思いますが、より無難に行くならば、全体をnew RegExpでくるめばOKです。

## /正規表現リテラル中のコメント風文字列/

引用符や中括弧と似たような理由で、正規表現リテラル中にコメントと解釈されうる文字列を含む場合も注意が必要です。

```js
var re1 = /ends with slash character \//;
var re2 = /0 or more slash characters \/* /;
```

これらは、保存はできるのですが、実行画面にてソースを見てみると、コメントと解釈されうる部分以降の記述がコメント扱いになり削除されてしまっています。保存ができてしまうので気づく機会が遅れ、引用符や中括弧よりたちが悪いとも言えます。

回避策としては、new RegExpでの対応が好ましいと思います。

## 検索と置換

例えばminimizeしたJavaScriptには正規表現リテラルが多様されているので、そんな時はこれらどれかの方法を駆使しながらがんばって置き換えて行きましょう。

まずは`{!`、`\{`、`\}`、`\/`で検索しましょう。
デベロッパーコンソールでは`/re/`形式で記述すれば正規表現でも検索できるので、引用符用に`/\/[^/]*['"].*?\/(?!['"])/`辺りで検索してみましょう。
誤マッチも出てしまうので置換は目視しながら行いましょう。

静的リソースに保存してそれを読み込むことで事足りるならこの問題は起きませんので、それに越したことはありません。
EdocをDash用に変換してくれるライブラリ「edocset」を作りました

# Erlangはじめました
https://github.com/mtgto/edocset

一ヶ月ほど前くらいからErlangを触り始めた[@mtgto](https://twitter.com/mtgto)です．それまでは主にScalaを書いてました．Erlangはまだ駆け出しなので[すごいE本](http://www.amazon.co.jp/gp/product/4274069125)を片手にコードを書くわけですが，OTPやライブラリを使うときにはAPIの説明を読む場面が多々あります．

私はAPIドキュメントを高速に検索・閲覧できる[Dash](http://kapeli.com/dash)というMacアプリを愛用しています．このアプリではErlangもサポートされているのですが，残念ながらOTPのモジュールのみしか対応していません．今回紹介する[edocset](https://github.com/mtgto/edocset)を使えば外部ライブラリも閲覧できるようになります．Dashのわかりやすい説明は[Dash の使い方](http://qiita.com/imk2o/items/3f7e507c1ea857c8f225)などをご参照ください．

なおライブラリ名は「Erlang + docset」（docsetはDash用のドキュメントファイルの拡張子）という意味です．

## デモ
試しに[cowboy](https://github.com/ninenines/cowboy)のAPIドキュメントをDashから見る様子を動画にしてみました．画像をクリックでYouTubeに飛びます．

[![Demo video](http://img.youtube.com/vi/kceOouNxsJs/0.jpg)](http://youtu.be/kceOouNxsJs)

動画ではcowboyのAPIドキュメントを見ていますが，私の環境(Erlang 17.4)でcowboyの`rebar doc`をすると`src/cowboy_protocol.erl`の処理に失敗するので適当にコードをいじってEdocが生成できるようにしてあります．

## 使い方
現在のedocsetは`reber doc`コマンドにフックして動くため，その設定を追加します．`edoc_opts`に`{doclet, edocset_doclet}`と`{xml_export, xmerl_xml}`を追加します(xml_exportの設定をしないと出力されるHTMLがxmerlで読めない形式になるため)．

```rebar.config
{edoc_opts, [
  {doclet, edocset_doclet},
  {xml_export, xmerl_xml}
]}.
{deps, [
  {edocset, ".*", {git, "git://github.com/mtgto/edocset.git", {branch, "master"}}}
]}.
```

`rebar.config`の編集が終わったら`rebar get-opts compile`してから`rebar doc`すると`XXXX.docset`が生成されます．

```sh
$ rebar doc
==> cowboy (doc)
$ find . -name '*.docset'
./cowboy.docset
```

あとは`XXXX.docset`をダブルクリックすればDashにライブラリのAPIドキュメントがインストールされて検索できるようになります．

## ライブラリの中でやってること
Dash用のDocはHTMLのドキュメントと，モジュール・関数・タイプのURLが保存されたsqlite3データベースからなっています．

Edocの生成がユーザーから要求されると，最初にデフォルトの操作であるHTMLドキュメントの生成を行い，その後HTMLをxmerlでパースしてモジュール・関数・タイプの一覧をsqlite3に保存しています．

「Erlang sqlite3」でGoogle検索して最初に出てくる[alexeyr/erlang-sqlite3](https://github.com/alexeyr/erlang-sqlite3)を使ってみたのですが，私の環境では生成される*.soが使えなかったので（たぶん[これと同じ問題](https://github.com/alexeyr/erlang-sqlite3/issues/17)），フォークを使っています．というか[フォークの数多すぎ・・・](https://github.com/alexeyr/erlang-sqlite3/network/members)

## まとめ
Erlangの勉強がてらDash用のAPIドキュメントを生成するライブラリを作りました．プロセスやサーバーはほとんど登場しませんがファイル操作やXML操作などに触れることができてよかったです．

最後に，DashはJava, Ruby, Goなど様々なAPIドキュメントに対応してるので本当におすすめのアプリです．[Windows，iOS，Android版もある](http://blog.kapeli.com/dash-for-ios-android-windows-or-linux)ようなので宗教上の理由でMacが使えない人にも使えると思います．

## リンク
- [mtgto/edocset (GitHub)](https://github.com/mtgto/edocset)
	- [デモ動画 (YouTube)](http://youtu.be/kceOouNxsJs)
- [Dash (English)](http://kapeli.com/dash)
	- [Dashドキュメントの作り方 (English)](http://kapeli.com/docsets)
choroplethr - Vignettes - g) 世界銀行データの地図

Rのパッケージ`choroplethr`のビネットの翻訳です．
( 原文: http://cran.r-project.org/web/packages/choroplethr/index.html )

* a) [イントロダクション](http://qiita.com/nakamichi/items/23730349f31a377fb071)
* b) [アメリカの州単位コロプレス図](http://qiita.com/nakamichi/items/b8267674b610ef6e1cab)
* c) [アメリカの郡単位コロプレス図](http://qiita.com/nakamichi/items/2f63dcfb7b1cc407d87c)
* d) [アメリカの郵便番号に基づく地図](http://qiita.com/nakamichi/items/889d3883e9b2ff8e2cdf)
* e) [国家単位のコロプレス図](http://qiita.com/nakamichi/items/5090b4dadeed42c2e13c)
* f) [国勢調査の地図](http://qiita.com/nakamichi/items/de929da9335f96f6468c)
* g) [世界銀行データの地図](http://qiita.com/nakamichi/items/66fa782bb3104dd815bf)
* h) [コロプレス図の動画](http://qiita.com/nakamichi/items/02ca0f678933405cf18f)
* i) [自分の地図を作る](http://qiita.com/nakamichi/items/99ff93769f4f67b97d18)
* j) [行政区画レベル1の地図を作る](http://qiita.com/nakamichi/items/8fde40a12c6aca2abbd3)

----------

# g) 世界銀行データの地図 #

`choroplethr` は，世界銀行の世界開発指標（WDI）のデータからコロプレス図を作成する機能をネイティブで持っています．
この機能は`choroplethr_wdi function`関数によって利用可能です（`?choroplethr_wdi`）．世界開発指標については[ここ](http://data.worldbank.org/products/wdi)でより詳しく学ぶことができます．


## 例：人口 ##

世界の国々の人口を連続的なスケールを使って表したコロプレス図です．SP.POP.TOTLというコードのより詳しい情報については[ここ](http://data.worldbank.org/indicator/SP.POP.TOTL)を見てください．

```{r}
library(choroplethr)
library(WDI) 

choroplethr_wdi(code="SP.POP.TOTL", year=2012, title="2012 Population", buckets=1)
```
![pop-world-2012.png](https://qiita-image-store.s3.amazonaws.com/0/58917/a0d1f6a2-31ae-90cc-39a9-d5e77b66be69.png)

## 例：平均寿命 ##

世界の国々の平均寿命のコロプレス図です．SP.DYN.LE00.INというコードのより詳しい情報については[ここ](http://data.worldbank.org/indicator/SP.DYN.LE00.IN)を見てください．

```{r}
choroplethr_wdi(code="SP.DYN.LE00.IN", year=2012, title="2012 Life Expectancy")
```

![life-exp-world-2012.png](https://qiita-image-store.s3.amazonaws.com/0/58917/ac5278db-00da-f718-000c-7e3f7b8f14ad.png)


## 例：一人当たり所得 ##

世界の国々一人当たり所得のコロプレス図です．NY.GDP.PCAP.CDというコードのより詳しい情報については[ここ](http://data.worldbank.org/indicator/NY.GDP.PCAP.CD)を見てください．

```{r}
choroplethr_wdi(code="NY.GDP.PCAP.CD", year=2012, title="2012 Per Capita Income")
```

![per-capita-income-world-2012.png](https://qiita-image-store.s3.amazonaws.com/0/58917/fb838ade-3f14-cfcb-2e77-4d90e7025ddf.png)
[Ethereum][Whisper] ÐΞVcon-0 Whisper Video memo

以下に移行しました<br><a href="http://block-chain.jp/tech/ethereum-whisper-d%ce%bevcon-0-whisper-video-memo/" title="[Ethereum][Whisper] ÐΞVcon-0 Whisper Video memo">[Ethereum][Whisper] ÐΞVcon-0 Whisper Video memo</a>
OSS版droneを一発で試せるfig.yml書いた

# 概要

Docker流行ってるので勉強も兼ねてdroneのイメージを作ってみた。CIツールといえばJenkinsなイメージが強いけど、コンテナ内に環境を閉じ込めてテストとか色々出来るdroneはクリーンで大変に気持ちいいね。

で、せっかくDockerなのでその強みを活かして、手元にdrone+GitLabの環境をfig up一発で構築できるfig.ymlのサンプルも作ってみた。

- https://github.com/s2ugimot/docker-drone/blob/master/doc/examples/drone-with-gitlab.fig.yml

Dockerとfigが使える環境ならなんでも動くはず。boot2dockerでも試せる。

# 手順

01. 上記ファイルをfig.ymlにして適当なディレクトリに保存
02. GITLAB_HOSTをDockerホストのIPアドレスに書き換える
    - boot2dockerならboot2docker ipで表示されるやつ
03. fig up
04. GitLabのセットアップ
    01. DockerホストIP:20080にアクセスしてGitLabを開く
    02. root / 5iveL!fe でログイン
    03. 適当にパスワード変更して再ログイン
    04. SSH公開鍵登録
    05. 適当な名前でレポジトリを作る
05. droneのセットアップ
    01. DockerホストIP:10080にアクセスしてdroneを開く
    02. 先ほどGitLabで変更したパスワードでログイン
        - rootアカウントのメールアドレスのデフォルトは admin@example.com
    03. Syncing your Account...のあと、先ほどGitLabで作ったレポジトリが表示されるので、選択してActivateする
        - こうするとGitLab側のWeb HooksにdroneのビルドをキックするURLが登録される
06. 先ほど作ったレポジトリをクローンしてきて.drone.ymlをcommitしpush
07. droneでビルドがうごく

.drone.ymlはとりあえずこんな感じのものでもよい。

```yml:.drone.yml
image: "bradrydzewski/ruby:2.0.0"
script:
  - echo "Hello"
```

最初にビルド用のイメージをpullしてくるのに時間がかかるが、最初の一回だけなのでそれ以降は比較的速い。scriptのところにコマンドを並べると色々試せる。imageには公開されている物なら何でも指定できるが`/usr/local/bin/git`が無いと、そのビルド対象のレポジトリをクローンするところでコケて止まるので、自分でビルド用のイメージを作る際は要注意。

droneは設定がシンプルで少なくて分かりやすいし、テストやビルド環境はイメージさえ用意してしまえばどんなものでも出来ちゃうところがいい。あと何より自分でホスト出来るってのは大きい。
brewコマンドを実行するとbad interpreterと言われる問題の解決方法

brewコマンドを使おうとしたらエラーがでました。環境はMacのYosemiteです。

```bash:brewコマンドを試した
brew list

/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
```
brewコマンドが失敗します。

# brew.rbを書き換える
brew.rbの1行目を書き換えると良いみたいです。

```bash:brew.rbを書き換え
vi /usr/local/Library/brew.rb

#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0
```

# brewコマンドが使えるように
Yosemiteだとこのエラーがでるみたいですナンテコッタ／(^o^)＼

# 参考
http://rrt.hateblo.jp/entry/2014/10/19/031312
【Laravel】Laravelのインストール


## 前提

・CentOS6.5でのインストールを想定しています。
・Composerを利用したインストールを想定しています。
・Composerはグローバルインストールを行っています。


## 参考

### インストールについて

http://laravel4.kore1server.com/docs/installation

### その他参考記事

Laravelオフィシャルサイト
http://laravel.com/

Laravel日本語オフィシャルサイト
http://laravel.jp/

Laravel の書籍 まとめ(日本語オフィシャルサイトより直リンク)
http://qiita.com/mukaken/items/2058a193ee0ce6fbfd30


## 関連記事

[【CentOS, PHP】CentOSへのPHP5.5, MySQL5.6環境の構築](http://qiita.com/knife0125/items/4923f3899716d68f85b1)


## Composerのインストール

### Composerの本家サイト

https://getcomposer.org/doc/00-intro.md


### Composerのインストール

	# cd /opt
	# curl -sS https://getcomposer.org/installer | php
	# mv composer.phar /usr/local/bin/composer

※ 参考⇒https://getcomposer.org/doc/00-intro.md#globally


## Laravelのインストール

### Laravelのインストール

	$ composer create-project laravel/laravel --prefer-dist
	$ cd laravel /var/www/html/

### storageディレクトリのパーミッションの設定
		
	$ cd laravel
	$ chmod -R 777 app/storage


### インストール完了
http://{Domain Name}/laravel/public にアクセスして、
下記画面が表示されるようになっていればインストール成功。

![01_Laravel.png](https://qiita-image-store.s3.amazonaws.com/0/18615/a6479994-d9e9-aa28-b799-369141f5b08c.png "01_Laravel.png")

### ※もしうまく表示されなかった場合??
Apacheの設定で、.htaccessを有効にしていないとうまくいかないので、下記を確認。

	# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.origin
	# vim /etc/httpd/conf/httpd.conf
	- 338     AllowOverride None
	+ 338     AllowOverride All


## まとめ
上記でLaravelのインストールは完了です。
けっこう設定などいじらなければならないものが少ない状態でインストールできるフレームワークという印象です。
ドキュメントルートはapp/public以下なので、バーチャルホストを切って設定してあげたほうがベターかなと思いつつ、今回はここまで。
SwiftでUIImageを回転、リサイズ、クリッピング、塗りつぶし


Objective-Cで色々書いていたので、どうせならswiftで残しておこうと思いまして。
Playgroundをそのまま貼り付けてます。

```ImageUtilPlayground.swift
import UIKit

// URLで画像を取得
let url = NSURL(string: "http://placehold.jp/300x300.png")
var err: NSError?
let data :NSData = NSData(contentsOfURL: url!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!
let image = UIImage(data: data)!


// そのまま表示
let view1: UIImageView = UIImageView(frame: CGRectMake(0,0,300,300))
view1.image = image

// リサイズ
let size = CGSize(width: 150, height: 150)
UIGraphicsBeginImageContext(size)
image.drawInRect(CGRectMake(0, 0, size.width, size.height))
var resizeImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let view2: UIImageView = UIImageView(frame: CGRectMake(0,0,150,150))
view2.image = resizeImage

// クリッピング
let cropCGImageRef = CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, 0, 150, 150))
var cropImage = UIImage(CGImage: cropCGImageRef)
let view3: UIImageView = UIImageView(frame: CGRectMake(0,0,150,150))
view3.image = cropImage

// 回転
var rotateImage = UIImage(CGImage: image.CGImage, scale: 1.0, orientation: UIImageOrientation.Right)
let view4: UIImageView = UIImageView(frame: CGRectMake(0, 0, 300, 300))
view4.image = rotateImage

// 色塗りつぶし
UIGraphicsBeginImageContext(size)
let cgContextRef = UIGraphicsGetCurrentContext()
CGContextSetFillColorWithColor(cgContextRef, UIColor.grayColor().CGColor)
CGContextSetAlpha(cgContextRef, 0.8)
CGContextFillRect(cgContextRef, CGRectMake(0, 0, 300, 300))
let colorImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let view5: UIImageView = UIImageView(frame: CGRectMake(0,0,300,300))
view5.image = colorImage


```
Ruboty | 諸見里語を話す ruboty-moromizato Plugin を作成 #ruboty

# Ruboty | 諸見里語を話す ruboty-moromizato Plugin を作成 #ruboty

## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
諸見里語を話す ruboty-moromizato Plugin を作成しました。

## <i class="fa fa-cube" style="font-size:1em;"></i> 用途
諸見里語を話す。ただそれだけだ。

## <i class="fa fa-cube" style="font-size:1em;"></i> Installation

Add this line to your application's Gemfile:

```ruby
gem 'ruboty-moromizato'
```

And then execute:

    $ bundle

## <i class="fa fa-terminal" style="font-size:1em;"></i> Commands

|Command|Pattern|Description|
|:--|:--|:--|
|convert|/moromizato convert (.+)\z/|Show moromizatonized text|

## <i class="fa fa-file-text-o" style="font-size:1em;"></i> Usage
### convert
* Show moromizatonized text

~~~
>ruboty moromizato convert さしすせそ
>ruboty しゃししゅせしょ
>ruboty moromizato convert ローソン
>ruboty ローション
>ruboty moromizato convert あいうえお
>ruboty あいうえお
~~~

## <i class="fa fa-gears" style="font-size:1em;"></i> ENV

|Name|Description|
|:--|:--|
|--|--|

## <i class="fa fa-puzzle-piece" style="font-size:1em;"></i> Dependency

|Name|Description|
|:--|:--|
|--|--|

## <i class="fa fa-arrow-circle-right" style="font-size:1em;"></i> 参照
* <i class="fa fa-external-link" style="font-size:1em;"></i> [ruboty-moromizato GitHub](https://github.com/tbpgr/ruboty-moromizato)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [ruboty-moromizato RubyGems](http://rubygems.org/gems/ruboty-moromizato)
超小型PC Intel EdisonでScalaを動かす方法

実用性はさておき、Edison上ではJVMが動作します。
ここでは、JVMで動作するScalaのプログラミング環境を動かしてみましょう。

まず、Javaをインストールします。
```
wget --no-check-certificate --no-cookies --header="Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-i586.tar.gz
```

```
tar xvzf jdk-8u102-linux-i586.tar.gz
```

```
echo "export PATH=$PATH:/home/root/jdk1.8.0_102/bin" >> ~/.profile
```

ログアウト、再ログイン。

次に、Typesafe Activatorをダウンロード、インストールします。
```
wget -O typesafe-activator-1.3.10.zip https://downloads.typesafe.com/typesafe-activator/1.3.10/typesafe-activator-1.3.10.zip?_ga=1.29985791.1903815954.1467214906
```

```
unzip typesafe-activator-1.3.10.zip
```

```
cd typesafe-activator-1.3.10
```

```
chmod +x activator
```

```
./activator shell
```

```
console
```
これで、ScalaのREPL環境が起動します。



参考：https://communities.intel.com/docs/DOC-23391
抽象的なテストのススメ(FizzBuzzの例で)


Ruby Advent Calender 2014の19日目です。

FizzBuzzとは以下の仕様を満たすプログラムを作る有名な問題です。

* 3の倍数かつ5の倍数の場合には"FizzBuzz"を出力する
* 3の倍数かつ5の倍数でない場合には"Fizz"を出力する
* 3の倍数でなくかつ5の倍数の場合には"Buzz"を出力する
* 3の倍数でも5の倍数でもない場合には入力された数字そのものを返す

実装してみるとこんな感じになります。

```
def fizzbuzz x
  return "FizzBuzz" if x % 15 == 0
  return "Fizz" if x % 3 == 0
  return "Buzz" if x % 5 == 0
  return x
end
```


本記事の主張は「FizzBuzzぐらいは仕様通りに確実にテストしたいよね」ってことです。
非常に巷に転がっているテストコードにもやもやしています。
FizzBuzzに対するテストコードのよくある書き方と理想的な書き方について試行錯誤してみます。

## よくあるテストの書き方

```
describe :main do
  it {expect(fizzbuzz 15).to  eq "FizzBuzz"}
  it {expect(fizzbuzz 3).to   eq "Fizz"}
  it {expect(fizzbuzz 5).to   eq "Buzz"}
  it {expect(fizzbuzz 11).to  eq 11}
end
```

どの言語でテストを書いても、ほとんどはこのように実際に値を入力してテストする方法になるかと思います。
この方法だと以下の問題があります。

* 特定の場合のチェックのみで、それ以外の場合は保証しない
* テストが断片的で、テストから仕様が読み取れない

## 自分が考える理想形とGem abst_int

この問題を解決するために、abst_intというGemを作りました。
このGemは、「3の倍数」といったオブジェクトを作ることができます。
例えば、こんな感じです。

```
abst2 = (AbstInt.new * 2).object # 2の倍数
abst3 = (AbstInt.new * 3).object # 3の倍数
abst2 % 2 #=> 0
abst3 % 3 #=> 0
abst2 % 3 #=> AbstInt::MultiResultError
(abst2 + 1) % 2 #=> 1

abst2_and_3 = ((AbstInt.new * 2) & (AbstInt.new * 3)).object  # 2の倍数かつ3の倍数
abst2_and_3 % 6 #=> 0
abst2_and_3 % 2 #=> 0
abst2_and_3 % 3 #=> 0

not_abst3 = (AbstInt.new * 3).not.object # 3の倍数でない
not_abst3 % 3 #=> 1 or 2 を表現するオブジェクト
not_abst3 % 3 == 0 #=> false
not_abst3 % 3 == 1 #=> AbstInt::MultiResultError
```

(AbstInt.new * 2).objectにて「2の倍数」を作ることができます。
2などの具体的な値は裏では持たず、「2の倍数」共通の動作を行うようにしています。
「2の倍数」に2を足しても「2の倍数」であり続けるなどはmockなどで組むには大変だと思います。

このGemを使うとFizzBuzzのテストは以下のように書けます。

```
describe :main do
  let(:x35) { (AbstInt.new * 3       & AbstInt.new * 5).object }
  let(:x3)  { (AbstInt.new * 3       & (AbstInt.new * 5).not).object }
  let(:x5)  { ((AbstInt.new * 3).not & AbstInt.new * 5).object }
  let(:x)   { ((AbstInt.new * 3).not & (AbstInt.new * 5).not).object }

  it {expect(fizzbuzz x35).to eq "FizzBuzz"}
  it {expect(fizzbuzz x3).to  eq "Fizz"}
  it {expect(fizzbuzz x5).to  eq "Buzz"}
  it {expect(fizzbuzz x).to   eq x}
end
```

テストコードも仕様を読み取りやすく書けるようになったかなと思います。

## まとめ

Rubyだからこそではありますが、一味違ったテスト方法を紹介しました。
「バグのないシステムはない」とは言いますが、少しでも正確なシステムを作りたいものです。
【SceneKit】SCNIKConstraintの使い方

## はじめに
iOS8のSceneKitにおいて、IK（逆運動学）処理を行うためのクラスにSCNIKConstraintがあります。
これはSCNNodeとして配置されたモデルに対して拘束条件を加えるSCNConstraintのサブクラスとなっています。

ここではこのSCNIKConstraintの使い方について簡単に書きたいと思います。

## 3Dモデルの用意
まず、IKを組み込む対象となるボーンの入った3Dモデルを用意します。
今回はBlender 2.72を使い、以下のロボットアームのようなモデルを作りました。

![Arms.png](https://qiita-image-store.s3.amazonaws.com/0/63319/b79d659d-65a6-38f0-799f-2dff01c3de9c.png)

青い立方体を根、赤い立方体を末端としています。　全部で4本のボーンが入っており、それぞれモデルの対応する部分に紐づけられています。
（紐づけに関してはこちらのサイトを参考にさせて頂きました：[自主練blender ハードボーン](http://jrblender.blog.shinobi.jp/%E3%81%9D%E3%81%AE%E4%BB%96/%E3%83%8F%E3%83%BC%E3%83%89%E3%83%9C%E3%83%BC%E3%83%B3)）
モデルが完成したらdae形式でエクスポートします。

## 実装
先ほど作成した3Dモデルのdaeファイルをプロジェクトにインポートします。
この時、モデルとボーンを含む親ノードを用意していなければ、用意してください。

![スクリーンショット 2014-12-18 10.53.46.png](https://qiita-image-store.s3.amazonaws.com/0/63319/ac62ed85-16c3-205a-2cbc-1ff6afc58181.png)

プロジェクトナビゲーター（ファイル一覧）からdaeファイルを選べば上のような画面になります。
daeファイルに記録されているシーンの中のノード一覧が見えますが、この左下に+ボタンがあり、これを押すことでノードを追加できます。　また、ノードを別なノードにドラッグすれば子ノードにすることもできます。
上記の画像では、「Arm」というノードを作り、そこにモデル本体(Cube)とボーン(Armature)を入れています。

daeファイルの準備が終わったらいよいよ実装です。
まず、IKで動かしたいボーンの根っこの部分(ここでは"RootBone"という名前だとします)を表すSCNNodeと、ボーンの先端部分(ここでは"BoneC"とします)を表すSCNNodeをそれぞれ用意します。
次にSCNIKConstraintのインスタンスを用意しますが、この時ボーンの根っこにあたるSCNNodeを指定する必要があるので、先ほどのRootBoneを表すSCNNodeのインスタンスを渡します。
最後に、ボーンの先端部分に拘束条件として用意したSCNIKConstraintのインスタンスを割り当て、influenceFactor(動きへの影響度)を1.0にして準備完了です。
実際に動かすためには、SCNIKConstraintのtargetPositionプロパティに目標位置を与えてやればOKです。

実際のコードは以下のようになります。

```objc:GameViewController.m
//　部位ごとのNodeの作成
SCNNode *arm_root = [arm childNodeWithName:@"RootBone" recursively:YES];
SCNNode *arm_end = [arm childNodeWithName:@"BoneC" recursively:YES];

//　SCNIKConstraint:IKの用意
SCNIKConstraint *ik = [SCNIKConstraint inverseKinematicsConstraintWithChainRootNode:arm_root];
//　モデルの末端に拘束条件として先ほど用意したIKを設定する
arm_end.constraints = @[ik];
//　影響度を設定
ik.influenceFactor = 1.0;

//　試しに動かしてみる
[SCNTransaction begin];
//　目標位置をSCNIKConstraintに与える
ik.targetPosition = [scene.rootNode convertPosition:SCNVector3Make(0,-1,0) toNode:nil];
[SCNTransaction commit];
```

## サンプルコード
https://github.com/uedadaze/IKTest
SCNIKConstraintを利用したサンプルコードです。
画面内をタッチすると、位置に応じてモデルの先端が動くようになっています。
また、根っこと先端だけでなく逆運動に関わっている中間の各ノードの角度もとれるようになっています。
mw-to-gitの使い方

[Git](https://github.com/git/git)のソースコードには、[mw-to-git](https://github.com/git/git/tree/master/contrib/mw-to-git)という、MediaWikiのデータをgitで取得、投稿できるコードが含まれています。これは、Perlのコードですが、セットアップすると、gitのラッパーとして動作します。

この記事は、概ね[Git-MediaWiki](https://github.com/moy/Git-Mediawiki/wiki)の内容に倣います。

## 下準備
まずは、以下のライブラリを入れます。
* MediaWiki::API 
* DateTime::Format::ISO8601

CPANで導入します。
```$ sudo cpan MediaWiki::API
 $ sudo cpan DateTime::Format::ISO8601
```

httpsでアクセスしたい場合は、
* LWP::Protocol::https
を入れます。

これらのライブラリがperlの実行時に含まれるようにしてください。

## インストール
ライブラリが整ったら、ソースをインストールします。gitをビルドしてもいいし、Perlのコードだけで利用しても構いません。要点は2つあって、
* `git --exec-path` の相当するパスにgit-remote-mediawikiとgit-mwがあること(.perlなどの拡張子はつけません。シンボリックリンクで構いません)
* `$PERL5LIB`にgitのソースツリーにあるperlのコード`$GIT/perl`以下と、mw-to-gitのコード`$GIT/contrib/mw-to-git`が含まれていること
です。

## 実行
コマンドは、以下のとおりです。
```$ git clone mediawiki::http://(mediawikiのurl)
```
でMediaWikiのデータを取得することができます。

あとは、記事をMediaWikiのフォーマットで編集して、いつもどおり`git commit`、`git push`をすれば、記事を書いた分が反映されます。`git log`でもちろん記事の履歴を見ることができます。コミットメッセージはMediaWikiの履歴に掲載されます。

取得するためのURLは、MediaWikiのURLがデフォルトの場合には、何もすることがありませんが、Wikipediaのようにmod_rewriteなどで操作している場合には、APIの位置に合わせる必要があります。Wikipediaで言えば、https://ja.wikipedia.org/w になります。これは、MediaWikiの「特別ページ」→「バージョン情報」の「スクリプトパス」で確認できます。


## オプション
MediaWikiの特定のコンテンツだけを取得する場合は、
```$ git clone -c remote.origin.pages='記事名' mediawiki::http://アドレス
```
としてください。

また、記事のうち、履歴を取得しない場合は、
``` $ git -c remote.origin.shallow=true clone mediawiki::http://アドレス
```
と実行してください。

認証が必要な場合は、remote.origin.mwLoginとremote.origin.mwPasswordをgitのオプションで設定してください。

## 注意点
記事をプッシュする前には、必ずgit pullをしてください。編集が競合した時の対処法がないからです。

また、Wikipediaのような巨大なプロジェクトのソースを取得するのは、慎重に行ってください。容量が相当大きくなります。
GKE＋BQがうまく動かなかった話

これは[Kubernetes Advent Calendar 2014](http://qiita.com/advent-calendar/2014/kubernetes)の18日目の記事です。

k8sカレンダーに書くネタは何にしようかと考えていて、最近ちょくちょく作ってた[bigquery-fluentd-docker-sample](https://github.com/GoogleCloudPlatform/bigquery-fluentd-docker-sample)（nginxのログをFluentdでBigQueryに流すサンプルのDockerコンテナ）を[Google Container Engine (GKE)](https://cloud.google.com/container-engine/?hl=ja)で動かしてみよう！ 動くだろDockerだし！ と思った。しかし結果から言うと、現状のGKEではコレ動かない...orz

じゃあGKEじゃなくて素のk8sなら行けるかな？ と思ってk8s環境を用意しようとしたら、これもいろいろハマって時間切れになってしまった。結局、当初の目標を達成できなかったのだけど、postmortemとして書いておこう。

## GKEからBQ、何が問題か

FluentdからBQへ流すには定番の[fluent-plugin-bigquery](https://github.com/kaizenplatform/fluent-plugin-bigquery)を使うのだけど、GKEの場合はGCEからBQへの接続となるので、秘密鍵を置く必要はない。その代わりに、td-agent.confには以下のように書いておく。

```
<match nginx.access>
  type bigquery
  auth_method compute_engine

  project "#{ENV['GCP_PROJECT']}"
  dataset bq_test
  tables access_log

  time_format %s
  time_field time
  fetch_schema true
  field_integer time
</match>
```

こんなふうに`auth_method compute_engine`と書いておくと、プラグインが[GCEのMetadata Serverから最新のアクセストークンを取得](https://cloud.google.com/compute/docs/authentication#applications)してくれるので、秘密鍵がいらない仕組み。GCPは認証が統合化されてて便利だね。

...のはずだけど、この仕組みを使うにはGCEのインスタンス作成時のオプションでOAuth2のスコープを指定しておく必要がある。こんなふうに：

```
$ gcloud compute instances create "bq-test" \
--zone "us-central1-a"  \
--machine-type "n1-standard-1"  \
--network "default" \
--maintenance-policy "MIGRATE"  \
--scopes storage-ro bigquery \
--image container-vm-v20140929 \
--image-project google-containers
```

ここで`--scopes storage-ro bigquery`と指定している部分、これによってBQ接続権限を持つアクセストークンをMetadata Serverから取得可能になる。

### 現在のGKEではOAuth2スコープ指定ができない

で、GKEのクラスタ設定でこのスコープを指定するところってどこ？ と探したけど、

![Screen Shot 2014-12-18 at 23.35.40.png](https://qiita-image-store.s3.amazonaws.com/0/38290/417147b1-2a07-5a15-dae8-cfb059b6cf74.png)

うーん、GKEのUIにはないね。じゃあ[CLI](https://cloud.google.com/container-engine/docs/clusters/operations)ではどうかな？

![Screen Shot 2014-12-18 at 23.38.28.png](https://qiita-image-store.s3.amazonaws.com/0/38290/1bbee596-ee67-7dc5-9a87-0e774d27f2ac.png)

あれ、それっぽいオプションないね。

k8sエキスパートのYさんに相談してみたら、「そうなんですよねー、スコープ指定できないんですよ」とのお返事。結局、GKEでは未対応ということが判明...orz GKEのissueとして上がってたので、これは困りますとコメントしといた。

### 4/19追記

GKEでのスコープ指定、対応しました。詳しくはコメントをご覧ください。

## k8sなら行けるかも

秘密鍵方式に変更すれば動くかもだけど、なんだかスマートでないので、GKEでのBQ接続は断念。

一方で、素のk8sなら[GCEインスタンス作成時のscopeオプション指定できそう](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/cluster/gce/config-default.sh#L36)だ。

```
MINION_SCOPES=("storage-ro" "compute-rw")
```

そこで、作戦変更してk8s環境を用意することにした...が、

- GCEインスタンスでkube-up.shを動かそうとしたら、GCS認証まわりでエラー
- Mac上のboot2dockerでkube-up.shを動かそうとしたら、なぜかsegmentation faultで落ちる

などなどの事象でハマってしまった。最終的に、手元のUbuntuにk8sを入れて、kube-up.shが正しく動作し、nginxサンプルが動いたところで時間切れとなってしまった。

というわけで、GKE、まだAlpha版なので暖かく見守ってあげてください。

----
Disclaimer この記事は個人的なものです｡ここで述べられていることは私の個人的な意見に基づくものであり､私の雇用者には関係はありません｡
AnsibleとFreeBSDの詰まりポイント

Ansible使い始めて詰まったポイントを色々書こうと思っていたんですが、詰まったのがFreeBSDのパッケージ管理がいまいちなことが原因の再現性のないものばかりでいざ記事を書こうと思ってもう一度やってみると、全部何も問題なくうまくいってしまいました。

とは言ってもアドベントカレンダー登録してしまったので、一言だけ書きます。

~~**Ansibleはホスト側でPythonを/usr/bin/にしかチェックしにいかないので、FreeBSDではシンボリックリンクを貼ろう！**~~

----
**2015/09/29 追記**
インベントリファイルに以下のように書くそうです。コメントで教えていただきました。
参考：[How do I handle python pathing not having a Python 2.X in /usr/bin/python on a remote machine?](http://docs.ansible.com/ansible/faq.html#how-do-i-handle-python-pathing-not-having-a-python-2-x-in-usr-bin-python-on-a-remote-machine)

```
freebsd_host      ansible_python_interpreter=/usr/local/bin/python
```

----


以上です。以下に少しだけ詳しく状況を書きました。

### 環境
Vagrant上で
CentOS 6.5から
FreeBSD 9.2を操作
([MacでAnsibleが動かなくなった時のファーストアクション](http://qiita.com/tienlen/items/f629f780eba18d5bfdf5)と同じくMacで動かせなかったため、仕方なく2つVMをたてています、、、なんとかしたい、、、)


### あるはずのpythonがない

CentOSでAnsibleのインストールなどもろもろして、pingを確認してみると、
FreeBSD側で/usr/bin/pythonが見つからないと怒られます。

```
$ ansible -i hosts 192.168.33.10 -m ping
192.168.33.10 | FAILED >> {
    "failed": true,
    "msg": "/usr/bin/python: not found\n",
    "parsed": false
}
````

確認してみるとFreeBSDでデフォルトでインストールされているPythonは、/usr/local/bin/下にあり、/usr/bin/下にはたしかにありません。
仕方ないので、シンボリックリンクをば。あまり良い解決策ではないのかも。

```
$ sudo ln -s /usr/local/bin/python2.7 /usr/bin/python
```

無事pingが通りました。

```
$ ansible -i hosts 192.168.33.10 -m ping
192.168.33.10 | success >> {
    "changed": false,
    "ping": "pong"
}
```
Top 10 Open Source Tools of 2014 released by Red Hat sponsored Opensource.com


List includes 3 month old newcomer Taiga.io (http://www.taiga.io) Agile Project Management.

![top10_projects_lead.jpg](https://qiita-image-store.s3.amazonaws.com/0/56627/a3b6be52-df3f-23d3-e18f-b5d207e3504f.jpeg)

 

http://opensource.com/business/14/12/top-10-open-source-projects-2014
UIWebViewとWKWebViewを切り替える仕組みを試作してみた。



## UIWebView vs WKWebView 
以前から、Webページを表示するにはUIWebViewが使用されてきました。ただ、iOS 8から導入されたWKWebViewというのがありまして、こちらのほうがJavaScriptの実行が速かったりするなど、色々と改善されているようです。

そういうことなら、すぐにWKWebViewに移行したいところですが、iOS 7では使用できません。iOS7以前では、UIWebViewを使用する必要があります。

また、UIWebViewとWKWebViewでは、delegateメソッドが微妙に異なるので、両対応をしようとすると両方のdelegateメソッドを書かなくてはならず、手間がかかります。

## 作ってみた
というわけで、UIWebViewとWKWebViewを自動切り替えする仕組みを作ってみました。

ソースはこちら
* [TOTWebView.h](https://gist.github.com/tototti/f50b31053ecc81833d32)
* [TOTWebView.m](https://gist.github.com/tototti/554d910bb3fa373802c7)

とは言え、WebViewのフル機能に対応するのは面倒なので、必要な機能のみに絞っています。

今回作ったのは、以下の機能だけです。

* URL request設定
* URLを開くかどうかの判定(カスタムスキーム用)
* ローディング開始
* ローディング終了
* ローディングエラー

作っては見たものの、いまいち自信がないので、誰か改良してくださらないですかね |дﾟ)ﾁﾗｯ
（特に、UIViewを挟んでいるのが、よろしくない気がする。）

## ちょっと説明
名前がTOTWebViewというわりに、そのものはWebViewではなくUIViewを継承しています。 で、 initのところでSubViewとして UIWebView or WKWebViewを追加しています。

``` Objective-C
    if ([WKWebView class]) {
        _wkWebView = [[WKWebView alloc] initWithFrame:frame];
        _wkWebView.navigationDelegate = self;
        _wkWebView.UIDelegate = self;
        [self addSubview:_wkWebView];

    } else {
        _uiWebView = [[UIWebView alloc] init];
        _uiWebView.delegate = self;
        [self addSubview:_uiWebView];
    }
```

あとは、UIWebViewとWKWebViewの両方のdelegateメソッドを用意しておいて、その中身で独自に定義したDelegate を返すようにしています。

``` Objective-C
// 独自定義の delegate
@protocol TOTWebViewDelegate
- (BOOL)shouldStartLoadWithURL:(NSURL*)url;
- (void)didStartLoading;
- (void)didFinishLoading;
- (void)didFailLoadingWithError:(NSError*)error;
@end
```
WKWebViewだと、Webサイト読み込みにプログレスが取れたりするのですが、UIWebViewだと取れません。なので、機能が低い方に合わせることにします。

### WKWebView雑感など
今回は、アプリの中でWebViewを使用するという要件があって、このような調査をしてみた次第です。

ただ、WKWebView はまだまだノウハウが少なく、これまで長年使われてきたUIWebViewに比べるとだいぶ差があります。普通にWeb閲覧用途で使用するには問題無いとは思うのですが、Cookieを独自で設定するだとか、そういうちょっと凝ったことをしようとすると、調査に骨が折れます。

あと、テストも手間を考えると、なかなか両対応には踏み出せないところもあります。

というわけで、両対応する仕組みを作ってみたものの、結局はUIWebViewのみで作ることになったのでした。


### 参考サイト
* [let UIWebView as WKWebView - Yahoo! JAPAN Tech Blog](http://techblog.yahoo.co.jp/ios/let-uiwebview-as-wkwebview/)
この記事を見て、作ってみようと思い立ちました。たぶん、↑のやり方が正当なやり方なのかなあ、という気がします。
AIR書き出しの際の証明書「この証明書のパスワードが正しくありません」時の対応

# はじめに
AIRでパッケージ化する際、以下の様な画面になり、進めなくなる。

![d2bdd2882825ceb599f952400a4f2905.png](https://qiita-image-store.s3.amazonaws.com/0/37103/ef4fed4a-24b2-92e7-3570-a00734be5424.png)

変にハマるのでメモ

# 解決方法
このウインドウをちょっと引っ張る（拡大させる）

＿人人人人人人人人人＿
＞　　中身が出る　　＜
￣Y^Y^Y^Y^Y^Y^Y^￣

![c9080fbfea1118e6dd1ad1b2dd9bf47a.png](https://qiita-image-store.s3.amazonaws.com/0/37103/d7825b26-11b9-33b7-3359-89ee7b2bea97.png)


Adobeェ...
ジェネレーターでリストモナドを模倣してみた

 [Haskellの実験メモ](http://qiita.com/7shi/items/b6cbb7df2dd969c84f49)です。

ECMAScript 6のジェネレーターでHaskellのリストモナドを模倣してみました。

# 一重

```hs:Haskell
main = do
    print $ do
        x <- [1..5]
        return $ x * 2
```
```text:実行結果
[2,4,6,8,10]
```

これになるべく近くなるように模倣してみました。ジェネレーターや`for`～`of`は動作環境を選びます。

```js:ES2015
console.log(Array.from(function*() {
    for (let x of [1, 2, 3, 4, 5]) {
        yield x * 2;
    }
}()));
```
```text:実行結果
[ 2, 4, 6, 8, 10 ]
```

参考までに、ジェネレーターを使わない例を示します。

```js:ES2015
console.log(function() {
    let ret = [];
    for (let x of [1, 2, 3, 4, 5]) {
        ret.push(x * 2);
    }
    return ret;
}());
```
```text:実行結果
[ 2, 4, 6, 8, 10 ]
```

この方式は以下の記事で使用しています。

* [Haskell リストモナド 超入門](http://qiita.com/7shi/items/deb19c4cba933590ffbf) 2014.12.19

# 二重

```hs:Haskell
main = do
    print $ do
        x <- [1..3]
        y <- "abc"
        return (x, y)
```
```text:実行結果
[(1,'a'),(1,'b'),(1,'c'),(2,'a'),(2,'b'),(2,'c'),(3,'a'),(3,'b'),(3,'c')]
```

同じ方針で模倣します。

```js:ES2015
console.log(Array.from(function*() {
    for (let x of [1, 2, 3]) {
        for (let y of "abc") {
            yield [x, y];
        }
    }
}()));
```
```text:実行結果
[ [ 1, 'a' ],
  [ 1, 'b' ],
  [ 1, 'c' ],
  [ 2, 'a' ],
  [ 2, 'b' ],
  [ 2, 'c' ],
  [ 3, 'a' ],
  [ 3, 'b' ],
  [ 3, 'c' ] ]
```

タプルがないため配列で代用しています。

## フラット化

Haskellでは`return`ではなく複数の項目を含むリストを返すとフラット化されます。LINQの`SelectMany`やScalaの`flatMap`と関係があります。

タプルと比較します。リストにする関係上、要素の型は同じにします。

```hs:Haskell
main = do
    print $ do
        x <- [1,2]
        y <- [3,4]
        return (x, y)
    print $ do
        x <- [1,2]
        y <- [3,4]
        [x, y]
```
```text:実行結果
[(1,3),(1,4),(2,3),(2,4)]
[1,3,1,4,2,3,2,4]
```

`join`と`return`を省略しているとも解釈できます。リスト内包表記で結果をフラットにするには`join`必須です。

```hs:Haskell
import Control.Monad

main = do
    print $ do
        x <- [1,2]
        y <- [3,4]
        return [x, y]
    print [[x, y] | x <- [1,2], y <- [3,4]]
    print $ join $ do
        x <- [1,2]
        y <- [3,4]
        return [x, y]
    print $ join $ [[x, y] | x <- [1,2], y <- [3,4]]
```
```text:実行結果
[[1,3],[1,4],[2,3],[2,4]]
[[1,3],[1,4],[2,3],[2,4]]
[1,3,1,4,2,3,2,4]
[1,3,1,4,2,3,2,4]
```

ジェネレーターで模倣するには`yield`を複数回に分けるのが簡単です。

```js:ES2015
console.log(Array.from(function*() {
    for (let x of [1, 2]) {
        for (let y of [3, 4]) {
            yield x;
            yield y;
        }
    }
}()));
```
```text:実行結果
[ 1, 3, 1, 4, 2, 3, 2, 4 ]
```

# 関連記事

https://qiita.com/7shi/items/6575cbb98c5a710a2945

https://qiita.com/7shi/items/e5365885fb53c015630c

https://qiita.com/7shi/items/55f10aa99108afd5a128
GitHub の README の見出しに emoji を利用して見栄えが良く・・・なるといいですね #github #emoji

# GitHub の README の見出しに emoji を利用して見栄えが良く・・・なるといいですね #github #emoji
## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
GitHub の README の見出しに emoji を利用して見栄えが良く・・・なるといいですね

先に白状すると、試してみたけどこれ見栄えが良いのかどうか・・という結果。
のっぺりとしたテキストのみの状態よりは良いのか？
## <i class="fa fa-history" style="font-size:1em;"></i> 経緯
Qiita の記事の見出しに Font Awesome のアイコンを利用し始めたところ、
自分にも周りにも評判が良かった。
詳しくはこちら。

[Qiita の記事の見出しに Font-Awesome を利用して見栄えを良くする](http://qiita.com/tbpgr/items/361d8aaa38fb57d75216)

GitHub の README も OSS のユーザーや共同開発者など「人間」に読んでもらうためのものであり、
読みやすいにこしたことはない、ということで同様の手法を用いた方が良いかな、と考えました。
しかし、 GitHub は Font Awesome を組み込んでいない。
そこで、 emoji を利用することにしました。
## <i class="fa fa-pencil" style="font-size:1em;"></i> emoji について
GitHub をはじめ多くのプラットフォームで下記のチートシートの emoji を利用可能です

<i class="fa fa-github-square" style="font-size:1em;"></i> [EMOJI CHEAT SHEET](http://www.emoji-cheat-sheet.com/)

## <i class="fa fa-flask" style="font-size:1em;"></i> emoji を使ってみる
### <i class="fa fa-github-square" style="font-size:1em;"></i> ターゲット
2014/12/18 現在で私のリポジトリの中で一番星がついている（4つだけですが） <i class="fa fa-github-alt" style="font-size:1em;"></i> [eto gem](https://github.com/tbpgr/eto) を対象にします。
eto gem は Ruby のコマンドラインツールです。
入力した西暦に応じた 十干十二支や十二支を返却します。

### <i class="fa fa-edit" style="font-size:1em;"></i> emoji 適用結果
* emoji 適用前

![eto_emoji_before.png](https://qiita-image-store.s3.amazonaws.com/0/43480/7cf7da79-b76f-a531-556d-4196156f0aa1.png)

* emoji 適用後

![eto_emoji_after.png](https://qiita-image-store.s3.amazonaws.com/0/43480/28d1f8e8-f505-d32f-3e52-4752002e9422.png)

## <i class="fa fa-cube" style="font-size:1em;"></i> 雑感
Font Awesome と比べて、見出しに向いたデザインが少ないのが玉に瑕

## <i class="fa fa-cube" style="font-size:1em;"></i> 補足

* Sublime Text を利用していて Markdown + emoji の編集作業を円滑に行いたい方は下記もあわせてご確認ください。

[Sublime Text | emoji を snippet 化して楽に入力する](http://qiita.com/tbpgr/items/b1ce7de3cc84a1548734)

## <i class="fa fa-arrow-right" style="font-size:1em;"></i> 参照
* <i class="fa fa-github-square" style="font-size:1em;"></i> [EMOJI CHEAT SHEET](http://www.emoji-cheat-sheet.com/)
* [Qiita の記事の見出しに Font-Awesome を利用して見栄えを良くする](http://qiita.com/tbpgr/items/361d8aaa38fb57d75216)
* [Sublime Text | emoji を snippet 化して楽に入力する](http://qiita.com/tbpgr/items/b1ce7de3cc84a1548734)
Phratch（ScratchのPharo移植版）の紹介

教育用ビジュアルプログラミング言語として「Scratch」が有名です。
このScratchには1.4と2.0の２系統があり、1.4まではSmalltalk上で動いていたのですが、2.0からはFlash上で動作するようになりました。
おかげでインストール不要でだれでも簡単に始められるようになった一方で、いざとなれば、Smalltalkで好き勝手できるという強力さを失ってしまいました。

そこで本記事ではScratchをPharoに移植した「Phratch ( http://www.phratch.com/ )」を紹介します。

Phratchの特徴
===
- Pharo 3.0という近代的なSmalltalkイメージ上で動作するので、強力なSmalltalkの環境が使えてうれしい
(Scratch 1.4のSmalltalkは古いSqueakでレガシーさが漂っていた)

- Smalltalkとの親和性を重視しており、新しいブロックやプラグインの実装がやりやすい

- このプロジェクトはロボティクスへの応用を目的にしており、アドオンをインストールすると、arduinoやlego mindstormなどとの連携もできる。
> @newapplesho さんによるPhratchのarduino プラグインを使ったLEDの点滅( https://twitter.com/newapplesho/status/544036356683354112 )


導入手順
===
Phratchのページから実行ファイルをダウンロードすれば、Phratchの実行はすぐできますが、ここでは開発者らしく、Pharoをインストールしてその中でPhratchをインストールする手順を説明します。

1. http://pharo.org/download から Pharo 3.0をダウンロードして、展開して、実行する。（詳細はこちら → Smalltalk入門（Pharo Smalltalkインストール）(http://qiita.com/newapplesho/items/d541bfdc1c54f273cea9]）

2. Pharoが起動したら、背景をクリックしてメニューを表示する。
  「Tools」→「Configuration Browser」をクリック
![phratch_1.png](https://qiita-image-store.s3.amazonaws.com/0/12251/6cb6f0f4-5874-e541-afd0-08a3812c0efb.png)

3. 「Phratch (janniklaval.XX)」を選択して、「Install Stable Version」をクリック

4. 左上の方にダウンロードなどのプログレスバーがちらちらでてきます。
  しばらくおまちください。（10分くらい？）「Welcome to Phratch!」というダイアログが表示され、左上のプログレスバーが消えたら、インストール完了です。

![phratch_2.png](https://qiita-image-store.s3.amazonaws.com/0/12251/a4459d35-c87f-9db2-d62e-f23086312392.png)

5.もう一度、背景をクリックして、メニューを表示すると「Phratch」というメニューが追加されているはずです。

6.Phratchを起動すると、Scratchと同じような画面が立ち上がります。一番左側の枠から部品をドラッグして、真ん中の枠にドロップして、コードを組み立てます。組み立てたコードをクリックすると、そのコードが実行されます。
![phratch_code.png](https://qiita-image-store.s3.amazonaws.com/0/12251/12e3020b-1d91-59c7-8d34-bb1055b91af7.png)

7.ブロックを右クリックすると、「edit block for developer」というメニューが表示されます。それをクリックすると、IDEが起動し、そのブロックのコードが表示されます。既存のコードを参考にすれば、独自のブロックも簡単に作れそうですね。
![phratch_code_2.png](https://qiita-image-store.s3.amazonaws.com/0/12251/0d1292e6-af36-06fa-0465-2344e401fdca.png)

8.ここで、左側の部品の枠から「Motion」カテゴリの「Arrow key move with speed 」のブロックを右クリックして、helpを表示してみましょう。

9.「Error:beep」というダイアログが出てきます。なにかダメだったようです。Abandonをクリックしてもよいですが、この時のスタックが表示されているので、上から3番目の"PhratchFrameMorph presentHelpScreen"をクリックしてみます。
![phratch_beep.png](https://qiita-image-store.s3.amazonaws.com/0/12251/a527c854-0ee2-8b29-1fd9-38e081a6596e.png)

10.コードを見るとヘルプファイルが見つからないことが分かります。コードや実行中の状態を見れば、何をしようとしているか理解できます。
![phratch_beep_2.png](https://qiita-image-store.s3.amazonaws.com/0/12251/68c7ae89-a9f3-611c-e782-fd7c7f83dc51.png)

まとめ
===
ビジュアルプログラミングは教育用だけでなく、タブレットのような入力が限定された環境でのプログラミングなどいくつかの応用が考えられます。PhratchはSmalltalk上で動いているおかげで、コードをダイナミックに触れるSmalltalkの楽しさもあります。
基本的な部分は動作していますが、まだまだ応用やドキュメンテーションなどまだ未成熟な部分もあります。開発に貢献してみても楽しそうですね。
【CentOS, PHP】CentOSへのPHP5.6, MySQL5.7環境の構築



## リポジトリの追加

### epelリポジトリの登録

	# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

### remiリポジトリの登録

	# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

### mysql-communityの登録

	# yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm


## MySQLのインストール

### MySQLのインストール
/etc/yum.repos.d/mysql-community.repoで、5.6をdisable, 5.7をenableする。
下記コマンドでは、5.6系のバージョンがインストールされる。

	# yum install -y mysql mysql-server mysql-devel 
	
### PHPMyAdminのインストール
(必要であればPHPMyAdminを下記コマンドでインストールできます）

	# yum install -y --enablerepo=remi,remi-php55 phpMyAdmin


## PHP5.5のインストール

### 依存関係のあるパッケージのインストール

	# yum install -y --enablerepo=epel libmcrypt

### PHP5.6のインストール

	# yum install -y --enablerepo=remi,remi-php56 php php-devel php-pear php-mbstring php-xml php-mcrypt php-gd php-pecl-xdebug php-opcache php-pecl-apcu php-fpm php-phpunit-PHPUnit php-mysqlnd
	

## Apacheのインストール

	# yum install -y httpd httpd-devel
	

## まとめ

とりあえず現状でPHP×MySQLで開発するのに必要十分な環境の構築が完了です。
できればNginxにしたいという話はありつつですが、とりあえずはApacheでの環境構築とします。
Rubyの変数の種類

Rubyの変数名で使える文字は、半角のアルファベットと数字、アンダースコア。
大文字で始めてしまうと定数になる。

##Rubyの編集の種類
|変数名|働き|
|:------------:|:------------|
|message|ローカル変数|
|$message|グローバル変数|
|@message|インスタンス変数|
|@@message|クラス変数|
|MESSAGE|定数|


詳しくはここを見る。
http://railsdoc.com/ruby_base
Flash BuilderのAIR SDKコンパイラの入れ替え

# はじめに
* AIR 16 SDK & Compiler Beta
http://labs.adobe.com/downloads/air.html

Adobe AIRがiOSの64bit対応したので、最新版のSDK入れ替え手順メモ
2014/12/18 地点

# 手順
1. FlashBuilderの環境設定より「インストールされているAIR SDK」を見て、格納されているファイルパスを取得する
    ![b100642bd9518297636170be2958830d.png](https://qiita-image-store.s3.amazonaws.com/0/37103/c5ea1335-a651-135c-c497-52ac2326d45b.png)
    * 場所は多分MACなら「/Applications/Adobe Flash Builder  4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722/AIRSDK」
* 最新版のSDKをダウンロード、解凍
* 「AIRSDK」の旧フォルダは適当に名前を変えてバックアップしておく
* 同ディレクトリに「AIRSDK」の新フォルダを作る
* コマンド使わなくてもOKでした。普通にFinderのコピーでも可。 ~~コマンドラインより「ditto」コマンドでコピー~~
    * ~~$ ditto [コピー元] [コピー先]~~
* FlashBuilder再起動
* FlashBuilderの環境設定より「インストールされているAIR SDK」を見て「AIR SDK 〜は...」の〜が最新版になっていればOK
railsの実行でYou must set config.secret_key_base in your app's config.のエラーが出た時の対応


# 問題

railsのサーバを立ち上げ、そのサーバのアドレス(http://localhost:3000)にアクセスするとブラウザ上にエラーが表示。

![kobito.1418908943.958830.png](https://qiita-image-store.s3.amazonaws.com/0/33620/89aa16a9-332e-8e38-f49d-2f4729cab238.png "kobito.1418908943.958830.png")

コマンドライン上には以下のエラーが表示されました。

```
DEPRECATION WARNING: You didn't set config.secret_key_base. Read the upgrade documentation to learn more about this new config option. (called from service at /usr/lib/ruby/1.9.1/webrick/httpserver.rb:138)
[2014-12-18 13:15:07] ERROR RuntimeError: You must set config.secret_key_base in your app's config.
	/var/lib/gems/1.9.1/gems/railties-4.0.5/lib/rails/application.rb:145:in `env_config'
	/var/lib/gems/1.9.1/gems/railties-4.0.5/lib/rails/engine.rb:507:in `call'
	/var/lib/gems/1.9.1/gems/railties-4.0.5/lib/rails/application.rb:97:in `call'
	/var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/lock.rb:17:in `call'
	/var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
	/var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `service'
	/usr/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
	/usr/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
	/usr/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
DEPRECATION WARNING: You didn't set config.secret_key_base. Read the upgrade documentation to learn more about this new config option. (called from service at /usr/lib/ruby/1.9.1/webrick/httpserver.rb:138)
[2014-12-18 13:15:07] ERROR RuntimeError: You must set config.secret_key_base in your app's config.
	/var/lib/gems/1.9.1/gems/railties-4.0.5/lib/rails/application.rb:145:in `env_config'
	/var/lib/gems/1.9.1/gems/railties-4.0.5/lib/rails/engine.rb:507:in `call'
	/var/lib/gems/1.9.1/gems/railties-4.0.5/lib/rails/application.rb:97:in `call'
	/var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/lock.rb:17:in `call'
	/var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
	/var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `service'
	/usr/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
	/usr/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
	/usr/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
```

## 対応
railsのバージョンが問題のようです。gemfileを開いてrailsのバージョンを4.0.5から4.1.0にしました。

```
gem 'rails', '4.0.5'
```
上記を次のように変更した。

```
gem 'rails', '4.1.0'
```

その後にbundleのupdateをした。

```
bundle update
```

サーバを起動させてた後、無事アクセスに成功。


```
rails server
```