OmniAICreator/Qiita-1.07M huggingface dataset:
Java PlayFramework2.5 アノテーションでコントローラへ値を引き渡す

# アノテーション(アクション)の実装
コンテキスト引数マップを使ってアクションからコントローラへオブジェクトを引き渡すことができます。
ctx.args.putで値を渡します。

```java:TestAction.java
public class TestAction extends play.mvc.Action.Simple {
    @Override
    public CompletionStage<Result> call(Http.Context ctx) {
        ctx.args.put("key","hogehoge");
        return delegate.call(ctx);
    }
}
```
# Controller
ctx().args.getで値を取得します。

```java:TestController.java
public class TestController extends Controller {
    @With(TestAction.class)
    public Result index(Long id) {
        String testValue = (String) ctx().args.get("key");
        return ok(index.render());
    }
}
```
波動方程式の導出（弦の運動）

## 弦の運動を考える
今回は手始めに弦の運動を考えます。
いきなり空間的な運動を考えるのは大変なので、この弦は上下にしか運動しないことにします。

それを踏まえて、もろもろ現実との対応を考えます。

![1_座標系.png](https://qiita-image-store.s3.amazonaws.com/0/8588/475a8564-b81d-a0c9-4608-59ab2cbba247.png)

図のように弦が左から右に貼られている状況で、**ある時間 (t)** における**ある位置 (x)** における弦の高さを **u(x, t)**と関数として捉えることにします。

さて、次にこの弦の空間を細切れにして、**ある地点xとそこから微小な距離⊿xだけ離れた x+⊿xに挟まれる弦**について考えます。

![2_微小.png](https://qiita-image-store.s3.amazonaws.com/0/8588/a974c022-8fb9-8ebd-1ce3-b05758f38020.png)

また、弦にはわずかながら質量がありますので、質量を考えたいですが、細切れにすることを考えると、密度を考えたほうが都合が良さそうです。そこで今回は弦の長さあたりの質量をρとおきます。
とすると、この⊿xの長さの弦の質量は、**ρ⊿x**として扱う事ができます。

次にこの微小弦に働く力を考えます。
まず重力が考えられますが、今回は真上から弦を観察することにして、重力を無視します。あしからず。
重力を考えないとなると、次は張力を考えます。
微小弦は左端と右端で、共にある張力(T)で常に引っ張られていると考えます。

![3_張力.png](https://qiita-image-store.s3.amazonaws.com/0/8588/1e63272d-bd2e-938b-690d-be39bcde1585.png)

今回弦は上下にしか運動しないことにしました。
弦の角度を右をθ1、左がθ2、としておいたとき、張力Tがu(x, t)に影響する成分は図を参考に、

![4_張力.png](https://qiita-image-store.s3.amazonaws.com/0/8588/d966f6ec-afa4-0210-1fbb-30fd2015618e.png)

```math

右側(x+⊿x) = T\sin{\theta_1}\\ 
左側(x) = -T\sin{\theta_2}\\ 

```

となります。
したがって、ここまでの考察をもとに、弦の運動方程式ma=Fを以下のように立てます。

```math

ρ⊿x\frac { { \partial  }^{ 2 }u\left( x,t \right)  }{ { \partial  }{ t }^{ 2 } } =T\sin { \theta _{ 1 } } -T\sin { \theta _{ 2 } } 

```

さて、ここでそれぞれの角度がとても小さいと仮定します。なので、

```math

\sin  \theta =\frac { \sin { \theta  }  }{ \cos { \theta  }  } \cos { \theta  } =\tan { \theta  } \cos { \theta  } =\frac { \partial u(x,t) }{ \partial x } \cos { \theta  } \cong \frac { \partial u(x,t) }{ \partial x } 

```

のように考えることができます。
それを元に、

```math

ρ⊿x\frac { { \partial  }^{ 2 }u\left( x,t \right)  }{ { \partial  }{ t }^{ 2 } } =T(\sin { \theta _{ 1 } } -\sin { \theta _{ 2 } } )\\ ρ⊿x\frac { { \partial  }^{ 2 }u\left( x,t \right)  }{ { \partial  }{ t }^{ 2 } } =T(\frac { \partial u(x+⊿x,t) }{ \partial x } -\frac { \partial u(x,t) }{ \partial x } )\\ \frac { { \partial  }^{ 2 }u\left( x,t \right)  }{ { \partial  }{ t }^{ 2 } } =\frac { T }{ ρ } (\frac { \frac { \partial u(x+⊿x,t) }{ \partial x } -\frac { \partial u(x,t) }{ \partial x }  }{ ⊿x } )\\ \frac { { \partial  }^{ 2 }u\left( x,t \right)  }{ { \partial  }{ t }^{ 2 } } =\frac { T }{ ρ } \frac { { \partial  }^{ 2 }u(x,t) }{ { \partial  }{ x }^{ 2 } } 

```

と一般的な波動方程式の形まで持っていく事ができました。

コンピュータでの数値解法についてはこちら
http://qiita.com/Ushio@github/items/0249fd7a5363ccd914dd
github にて fork 経由で pull request を送られたときに merge するまでの手順

# はじめに
標記の通りです．

`pull request`を「送る」際の手順に関する情報はたくさんあるのですが，「***送られた***」際の情報が意外と少ないように感じたので，念の為メモを残しておく次第です．

# 前提
## `pull request` を「***送られた***」側(自分側)の情報
- リポジトリ: https://github.com/my_name/repo_name.git
- ブランチ: master

## `pull request` を「***送った***」側(`fork`した側)の情報
- リポジトリ: https://github.com/someones_name/repo_name.git
- ブランチ: master

# 手順
## 1．`pull request`されたリポジトリをローカルに`clone`する．

```bash
$ git clone https://github.com/my_name/repo_name.git
```

## 2．`pull request`された内容を確認するためのブランチを作成し，そのブランチに切り替える．

```bash
$ git checkout -b pull-request-master master
```

- 作成ブランチ名は任意．
- 引っ張り元のブランチは，`pull request`を送られたブランチとする．

## 3．`pull request`元のリポジトリを`pull`する．

```bash
$ git pull https://github.com/someones_name/repo_name.git
```

## 4．変更点および動作の確認をする．

- 必要なら`commit`するなり`GitHub`上で議論するなりで対応する．
- リモートリポジトリに変更が追加されたらまた`pull`する．

```bash
$ git pull https://github.com/someones_name/repo_name.git
```

## 5．問題がなくなるまで変更しきったら，`merge`する．

- まずは`commit`漏れがないか確認する．

```bash
$ git status
```

- 自身のリポジトリで`pull request`された対象のブランチに切り替える．

```bash
$ git checkout master
```

- `pull request`元の変更を`merge`する．

```bash
$ git merge pull-request-master
```

## 6. `merge`した内容を自身のリモートリポジトリに`push`する

```bash
$ git push origin master
```

## 7. `GitHub`上で`pull request`が`close`されたことを確認する．

- 最後に一言お礼を言う．

# 参考文献
- [akisute (Masashi Ono), A-Liaison BLOG, Feb.20 2011.](http://akisute.com/2011/02/github-pull-request.html)
機械学習をざっくりと理解する

目的変数:予測したい情報
説明変数：予測に使う情報
モデル：説明変数と目的変数を結ぶ”箱”（数式やプログラム）

目的変数の方に応じて問題の種類が変わる
- 目的変数が数値型　⇒　回帰問題　（ex.売上予測）
- 目的変数がID型　⇒　分類問題（ex.クリック予測（クリックする or しない））

目的変数の有無に応じて機械学習は以下の２種類にわけられる
- 目的変数がある：教師あり学習　　：　正解があって機械学習モデルで求める
- 目的変数がない：教師なし学習　：　データからパターンを見つけたい。

#教師あり学習-回帰-

以下において、線形回帰分析（linear regression）以外は非線形回帰分析（nonlinear regression）。
線形回帰では線形パラメータが必要だが、非線形回帰では必要ない。線形パラメータとの関係を適切にモデル化できない場合は、線形回帰ではなく非線形回帰を使用する。

| モデル | 説明 | イメージ |
|:-:|:----|:-:|
| 線形回帰分析 | ”線形”とは線で解けることを意味する。回帰の場合、目的変数:説明変数のグラフを書くと線になる。 |   ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/43eb5446-921a-2b79-8eeb-a6c82d4eaacd.png)　wikipediaより引用|
| MARS(Multivariate adaptive regression splines)  |  部分的に線形モデルを作ってる感じ。 | ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/9d1206c7-c809-af9c-c04b-ea9fd580cf2b.png) wikipediaより引用 |
| サポートベクター回帰(SVR)  | サポートベクターマシンの考え方を利用している。| ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/91429499-52b7-4a33-50c9-d73db7dc15c3.png) wikipediaより引用 |
| 回帰木  | ツリー状に分類していく。リーフの平均値が枝の値。離散的な値しか予測できない。データがグループ分けされていく。  |  ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/936a8689-9fa8-4118-8f12-dd4f1d4e048b.png)　引用元：http://codecrafthouse.jp/wp-content/uploads/2014/09/decisiontree1.png|
| モデル木  | モデル木は回帰木に似ているが、 回帰木が予測値として端末ノードの平均値を利用するのに対して、 モデル木の場合は線形回帰モデルで予測値を求める。  |   |
| 遺伝子プログラミング  |どういうモデルをするか推定する。進化論を真似している。最初に適当な乱数で非構造を作って、それに対して演算。試行回数を増やさないといい結果は得られない |  ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/3079c0f1-f88c-1dd7-cd7f-a50b5bd0c08a.png) wikipediaより引用 |

#教師あり学習-分類-

| モデル | 説明 | イメージ |
|:-:|:----|:-:|
| 二値分類  | シンプルな方法。データを二種類に分類する。  |  ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/cc17ffdc-1cc8-7a6a-b68a-63ca3bf924d9.png) |
| ロジスティック回帰  |を直線の代わりにシグモイド曲線(S 字状曲線)で回帰する手法   |  ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/fdd3f153-b897-9446-d524-b92d1d319e21.png) wikipediaより引用 |
| k近傍法  | 学習データをベクトル空間上にプロットしておき、未知のデータがそこから距離が近い順に任意のK個を取得し、多数決でデータが属するクラスを推定する。  |  ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/4fecfd59-5f36-ed1b-edf8-9e4ce6208d21.png) wikipediaより引用|
| サポートベクターマシン(SVM)  |  カーネル関数を用いて線形分離ができないものを特徴空間にマッピングを行い分離することができるようにしている。カーネルの種類は4つ（linear,polynomial,rbf,sigmoid）ある。 | ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/8f7078a7-0c7c-ed86-b16d-cf6e9633fca9.png)　http://scikit-learn.org/stable/modules/svm.html　　　　　　https://www.youtube.com/watch?v=3liCbRZPrZA  |
| 決定木  |  ツリー状に分類。 |  ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/96cdb399-f72c-d5b6-6f42-b1b5c851c26b.png)　引用元：https://ja.wikipedia.org/wiki/%E6%B1%BA%E5%AE%9A%E6%9C%A8 |
| ランダムフォレスト  |木をいっぱい作る。木の形ばらばら。予測するときは多数決。分類はされて正解率は高いが、なんでこのような結果になるのかその理由は分からないのが欠点。 |   |
| ニューラルネット  | 人間の脳の神経回路の特性を計算機上のシミュレーションによって表現することを目指した数学モデル。  |  ![image](https://qiita-image-store.s3.amazonaws.com/0/95399/01bec74a-4e69-5e50-a945-45cc502346d2.png)　wikipediaより引用 |
Type.GetFiled()やType.GetProperty()で取得したFildTypeやPropertyTypeからEnumの名前と値をちょっとだけスマートに列挙する方法


　昨日アップした[「C#のリフレクションを使ってC#クラスからC構造体を生成する」](http://qiita.com/marksard/items/40ce323a9724e9167264)でEnumの値も取り出すようにしたいねとちょっと書きました。  
　Type.GetFiled()やType.GetProperty()の戻り値の（他は調べてないので知りませんが）FildTypeやPropertyTypeにはGetEnumValues()てのがあって値も簡単に取り出せます。

```C#
    var enumNames = new Dictionary<string, string[]>(); // enumの中身を入れとく
    var prop = type.GetField(memberInfo.Name);

    var names = new List<string>();
    foreach (var value in prop.FieldType.GetEnumValues())
    {
        names.Add(string.Format("{0} = {1}", value.ToString(), (int)value));
    }

    enumNames[prop.FieldType.Name] = names.ToArray();
```

valueがEnumなのでToString()すれば名前も取り出せて一石二鳥。  
ただなんとなくforeachに一行がアレ。LINQ出来たよね？と調べたら、ArrayはLINQ出来ないっぽい。  
なのでこうしてみました。

```C#
    var enumNames = new Dictionary<string, string[]>(); // enumの中身を入れとく
    var prop = type.GetField(memberInfo.Name);

    enumNames[prop.FieldType.Name] = prop.FieldType.GetEnumNames().Select(name => 
        string.Format("{0} = {1}", name, (int)Enum.Parse(prop.FieldType, name))
    ).ToArray();
```

GetEnumNames()で取得したEnumの列挙名と、Enumのタイプ（prop.FieldType）から値を取り出してます。
最初のやつのvar namesを空で作ってforeachで回して最後に入れる、みたいなちょっと回りくどい方法をしなくてよくなってなんとなくすっきり。
rakeでエラー You have already activated rake xx.x.x, but your Gemfile requires rake xx.x.x.での対処の仕方 備忘録その２

#ただ単純にrakeのバージョンをあげるだけで解決する場合がある
下記の様にお決まりに怒られるパターンです。
$ rake routes
rake aborted!
Gem::LoadError: You have already activated rake 11.3.0, but your Gemfile requires rake 11.2.2. Prepending `bundle exec` to your command may solve this.

システムではrake 11.3.0は、
しかし開発してる側のファイルではrake 11.2.2.
案外単純に解決できるかも。

$ bundle update rake 
Fetching gem metadata from https://rubygems.org/..........
Fetching version metadata from https://rubygems.org/..
Fetching dependency metadata from https://rubygems.org/.
Resolving dependencies...
Installing rake 11.3.0 (was 11.2.2)
ここからいくつか何をinstallしているかの一覧が出るが省略。
そして終わりにくると、

Bundle updated!
Gems in the group production were not installed.

rakeコマンドがbin/などを省略できる。

#違う解決方法も記録してますので参考に。
http://qiita.com/ARTS_papa/items/41e2868273dd344cd317


#多数で開発したり、既存のを開発する場合はオススメしない。

今回も自分用に記録しておく。
http://www.papa-programing.jp
DataSpiderサーバをテンポラリとして利用する方法

#実現したいこと
ここでは、ある一連の処理を実現する際に発生するファイルの一時格納先をDataSpiderサーバとするような使い方を実現します。
その際に利用するプロトコルは`HTTP`を前提としているので、機能としては以下のようなものになります。

- HTTP POSTメソッドでファイルをアップロードする
- [ファイルリストをHTTP GETメソッドで取得する](http://qiita.com/appresso_wakino/items/285cf67ade66e2381260)

きっかけは[AITalk(R)](http://www.ai-j.jp/about/)という音声合成を行うサービスで生成された音声ファイルを、[Twilio](http://twilio.kddi-web.com/)から利用するときにファイルがWeb上に公開されていなければいけないという要件を実現するために考えた仕組みになります。

#DataSpiderの仕様
DataSpiderのヘルプの`HTTPトリガー`に以下のような記載があります。
このディレクトリにjspもしくはhtmlファイルを配置することでエラーページを返却することができるのですが、ここをテンポラリとして利用します。

```html
・フォワードできるページはJSPまたはHTMLです。
・JSPファイルは、$DATASPIDER_HOME/server/system/kernel/modules/webcontainer/META-INF/catalina/webapps/dataspider以下に配置してください。
```

#スクリプトの実装
##HTTP POSTメソッドでファイルをアップロードする

1. 保存先の作成<br>
 ![image](https://qiita-image-store.s3.amazonaws.com/0/35843/86199ecb-6912-ac4f-9bb5-b897dc95a4f7.png)<br>今回は`tmp`配下に`store`というディレクトリを作成しました。ここにファイルの実態が保存されます。 
2. マウント設定<br>![image](https://qiita-image-store.s3.amazonaws.com/0/35843/b51bd195-ae30-4614-b926-53a8ed56c4c4.png)<br>`コントロールパネル`→`マウント設定`を開いて図のようにマウント設定を行います。
2. スクリプトの作成（完成図）<br>![image](https://qiita-image-store.s3.amazonaws.com/0/35843/37716409-2fac-a4d7-76a0-d026fd02309a.png)<br>
    3. スクリプト入力変数として`バイナリ型`と`文字列型`の二種類を用意します。<br>バイナリ型にはファイルの実体が格納され、文字列型にはPOSTされるファイル名が格納されます。<br>ここで作成しているバイナリ型の`スクリプト変数名`がPOSTメソッドのマルチパートフォームで送信される際の<b>`パート名`</b>になります。そして、ファイル名を取得するに`パート名`＋<b>`_filename`</b>とした変数を用意しておきます。
    4. `ツールパレット`→`変換`→`基本`→`マッピング`をキャンバスにドラッグ＆ドロップ
    5. `ツールパレット`→`ファイル`→`ファイルシステム`→`ファイルシステム書き込み`をキャンバスにドラッグ＆ドロップします。<br>![image](https://qiita-image-store.s3.amazonaws.com/0/35843/13e62f45-89f4-0269-a92a-4d0a0712cfaa.png)<br>入力元を`mapping`、ディレクトリを先ほど作成した`store`にします。
    6. マッピングの設定を行います。<br>![image](https://qiita-image-store.s3.amazonaws.com/0/35843/31974ea3-ed62-9950-b9fa-5a243b24c709.png)<br>- filetypeには`単一行文字列定数ロジック`を利用して`file`<br>- pathには`単一行文字列定数ロジック`を利用して`/tmp/store/${file_filename}`※1<br>- dataにはスクリプト入力変数の`file`<br>をそれぞれ設定したら、スクリプトは完成です。<br>スクリプトを保存してプロジェクトをサービスとして登録します。<br>※1：`${スクリプト変数名}`はDataSpiderにおける入力フィールドの記述方法です。
7. メニュー→`マイトリガー`から`新しいHTTPトリガー`を作成します。<br>![image](https://qiita-image-store.s3.amazonaws.com/0/35843/3f650413-63c5-481b-9053-aa18c2be0721.png)<br>ここでは実行パスを`store`にしたので、POST先が`http://{DataSpiderServer稼働OSのホスト名またはIPアドレス>:<DataSpiderServerのポート番号}/dataspider/trigger/store`になっています。
8. 実行パスの設定が終わったら次へ進んで登録したサービスと紐付けます。<br>![image](https://qiita-image-store.s3.amazonaws.com/0/35843/e7231579-02f9-6673-b99e-9d458078f50b.png)<br>あとは保存して終了です。

#実行
生成されたURLに対してPOSTメソッドでファイルを送ってみます。
ここではDHCというChromeのプラグインを利用しています。
![image](https://qiita-image-store.s3.amazonaws.com/0/35843/e6c241ee-13c2-99e2-f3b9-428ecc83e9cd.png)<br>
エクスプローラを開いて`/tmp/store`を確認すると正しく取得できていることがわかります。<br>![image](https://qiita-image-store.s3.amazonaws.com/0/35843/22697df7-e1cd-24c0-f11f-5621a64d04f4.png)

#最後に
思いの外長くなったので「[ファイルリストをHTTP GETメソッドで取得する](http://qiita.com/appresso_wakino/items/285cf67ade66e2381260)」機能は別立てで記載することにしました。
PowerShellスクリプトでSlackAPIにメッセージをPOSTする方法

# はじめに
SlackにPowerShellスクリプトやAzure Automationでメッセージを投稿した時の備忘録

# SlackAPIのトークン取得
Slackに投稿する時は固有のトークンが必要なので
https://api.slack.com/docs/oauth-test-tokens
からトークンを生成しておく。

# PowerShellスクリプトの作成
特定のURL( https://slack.com/api/chat.postMessage )に
特定の形式のデータをPOSTするだけでメッセージ投稿できる。

```Bash
$postSlackMessage = @{token='YourToken';
                      channel='targetChannel';
                      text='BOTテスト';
                      username='BOTテスト'}
Invoke-RestMethod -Uri "https://slack.com/api/chat.postMessage" -Body $postSlackMessage
```

これを実行するとSlackに投稿されてAPIからレスポンスが返ってくる。

![スクリーンショット 2016-11-13 21.27.24.png](https://qiita-image-store.s3.amazonaws.com/0/149212/f262022c-4f8e-f2c1-d3b3-b2d44810252b.png)


成功した場合のレスポンス例

```bash
 ok channel   ts                message                                                                                
  -- -------   --                -------                                                                                
True C307S1WQK 1479039659.000002 @{text=BOTテスト; username=BOTテスト; bot_id=B3011E4GH; type=message; subtype=bot_message;...
```
投稿に失敗したらこんな感じ（指定チャンネルが無いとき）

```bash
   ok error            
   -- -----            
False channel_not_found
```

# POSTデータに必須のプロパティ
|プロパティ名|概要|
|---|---|---|
|token|取得したトークン|
|channel|投稿するチャンネル|
|text|投稿する文章|
その他オプションでつけることができるプロパティは以下のリンク
https://api.slack.com/methods/chat.postMessage
rakeでエラー You have already activated rake xx.x.x, but your Gemfile requires rake xx.x.x.での対処の仕方 備忘録

#よく見かけるrake aborted!で二つのrakeのバージョンがみる時
なぜそうなるかというと、複数のファイルでディレクトリ下で、システムでのrakeと独自で動いているファイルとでのrakeのバージョンが異なるが故に発生する。
複数同じディレクトリ下で開発していると下記の様な事が起きるのよく見かける。
rake aborted!
Gem::LoadError: You have already activated rake 10.4.2, but your Gemfile requires rake 10.5.0. Prepending `bundle exec` to your command may solve this.

##rakeコマンドの時にrakeの前に”bin”/や”bundle exec”をつけてコマンドする
これで気がすむなら一番早い。
というよりみんなこれで諦める。
$ bundle exec rake routes

$ bin/rake routes

##どうせやるなら修正して見る
まずRubyが連動してRailsとちゃんと動く様に、PATHの確認を。
$　HOME/.rbenv/shims及び 　

$　HOME/.rbenv/binの確認。

ターミナルにて
$ env | grep PATH

export PATH="＄HOME/.rbenv/bin:$PATH" >> ~/.bash_profile

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

source ~/.bash_profile

sourceは上記を実行するためのコマンドなので忘れずに。


##バージョン管理さえしっかりしていればいい
同じディレクトリ内で複数の開発している時、
**bundle　install**に気をつけなくてはならない。
なぜかというと、すべてのgemがお互いに依存関係から問題を起こし、
複数のgemが連動して、特定のgemが特定のバージョンに依存している場合、
すべてのgemをbundle　installしてまうと、
動作してくなるのだ。
これはRailsの弱点の一つなる。




##rakeをuninstallして指定し直す。
まず$ rails -vでバージョン確認

rakeも確認する。
$ gem list rake

*** LOCAL GEMS ***

rake (11.3.0)

gem uninstall rake -v 10.4.2

uninsatllする時に注意しなくてはならないのは、
この時にすべてのgemが影響してくる。
メッセージに沿ってyかnを立てよう。
二回聞かれる。

$ bundle update rake
ここまでくるとシステムでのbundleが修正される。

##注意してinstallしていく
万が一ファイルごとにrails が消えてしてまったら。
ディレクトリでバージョンを指定してinsatll
$gem install rails --version="4.2.6"

私の場合bundlerを消してしまったので下記のコマンドを行なった。
$ gem update bundler

$ gem install bundler

bundleインストールをしなおした
$ bundle install

ここまでくるとシステムでのバージョンが新しくなってしまう。
というか私の場合新しくなってしまった。

##プロジェクト作成ごとの修正
$ rails new sample --skip-bundle

この--skip-bundleがないとbundle　installが一緒に走ってしまう。

この後に
$ bundle install --path vendor/bundle
--path vendor/bundle　このオプションをつけるとrailsアプリのルートディレクトリにインストールする。
つまり独立性を保ってくれる。

つけないと次のプロジェクトrails newをした時に,
またYou have already activated rake xx.x.x, 
but your Gemfile requires rake xx.x.x.が出てくる。

一度このコマンドをすれば、Bundlerはインストール先を指定するので次回以降は、
bundle installのみで大丈夫。


##一時的にbundle execやbin/を省くなら。
”export PATH=＄PWD/bin:＄PATH”
ターミナル上でこれをやると、ターミナルを閉じるまで省ける。
ただターミナルを再起動した時は再びexport PATH=＄PWD/bin:＄PATH


どうしても気になったので、自分なりに調べたので、
備忘録として残しておく。

#他の解決作も参考　
http://qiita.com/ARTS_papa/items/b180176f3efd910b57d5
http://www.papa-programing.jp
Microsoft Teams の Twitter 連携で情報収集

[ブログから転載](http://1bed.allright.life/?p=2348)

Microsoft Teams は 2016 年 11 月に Preview 版として発表された Office 365 のチャットベースのワークスペースです。

Slack や IRC では IFTTT 等を使ったり、自力でプログラムを組んだりして当たり前のように行われている、「○○さんのツイート」や「ハッシュタグ #△△ のツイート」を指定したチャネルに投稿するのを **ノンプログラミングで** で行えます。

# 用意するもの

* Microsoft Teams にログインできるアカウント
* Twitter のアカウント  **※個人のアカウントとは別で取ったほうが無難だと思います**

# 設定手順

* 1.Microsoft Teams にログイン後、チャネル右にある点々をクリックして **コネクタ** をクリックします  
  ![1.png](https://qiita-image-store.s3.amazonaws.com/0/118961/ff559463-1b83-b42d-1e85-4200175d6a9a.png)  
　
* 2.コネクタの選択画面から Twitter の右にある **追加** をクリックします  
  ![2.png](https://qiita-image-store.s3.amazonaws.com/0/118961/6f4f8348-aa09-3ba7-cf84-ea925ffa090b.png)  
　
* 3.初めて操作する時には Twitter アカウントにサインインが必要です  
  ![3.png](https://qiita-image-store.s3.amazonaws.com/0/118961/66f5cf49-4a08-79f2-7023-6b9ec698cafa.png)  
　
* 4.用意していた Twitter アカウントでログインします  
  ![4.png](https://qiita-image-store.s3.amazonaws.com/0/118961/57b43229-acbf-ba94-2b97-7f21ecd03f1c.png)  
　
* 5.コネクタの設定画面が表示されます
  ![5-1.png](https://qiita-image-store.s3.amazonaws.com/0/118961/259966cb-989f-f5d4-b2c4-304ea64ab77a.png)  
  各種設定が終わったら **保存** をクリックします

  * フォロー  
    ウォッチしたい Twitter アカウントを入力します。ここでは **datmisonoMe_bot** さんを設定しています  
    複数の時はカンマで区切って設定できますが、全部含めて **50 文字以内** という制限があります(2016/11/13 現在)  

  * 追跡  
    ウォッチしたいハッシュタグを入力します。ここでは **misono** を設定しています  
    複数の時はカンマで区切って設定できるようですが、全部含めて **140 文字以内** という制限があります(2016/11/13 現在)  

  * 通知  
    メンションやリツイートも対象とするか設定できます

  * 頻度  
    更新頻度を設定できます  
    ダイジェストでは、Every 15 minutes, Every 30 minutes, Every hour, Daily, Weekly が選択できます  
    都度更新する時には、「新しいツイートが届いたときに個別メッセージを配信する」を選択します  

# 設定確認

設定が終わると、会話にメッセージが表示されます。

![6.png](https://qiita-image-store.s3.amazonaws.com/0/118961/174a6809-51e5-d637-ecff-ad2782d03364.png)

設定の確認や変更は、もう一度チャネル右にある点々をクリックして **コネクタ** をクリックします

![1.png](https://qiita-image-store.s3.amazonaws.com/0/118961/ff559463-1b83-b42d-1e85-4200175d6a9a.png)

Twitter の **追加** の下に **構成済み** というリンクがあるのでクリックすると、先程設定したデータとその右に **管理** ボタンが表示されますので、 **管理** をクリックします

![9-1.png](https://qiita-image-store.s3.amazonaws.com/0/118961/afff8786-0c15-57f8-25be-71e84a27252c.png)

下記の画像は本コネクタを登録したユーザーで管理画面を開いたときで、他のユーザーで開いたときには **削除しか行なえません**

![9-2.png](https://qiita-image-store.s3.amazonaws.com/0/118961/f5c30a4a-066a-f93f-2567-c28697daa2ac.png)


# 実行結果

![10.png](https://qiita-image-store.s3.amazonaws.com/0/118961/f7c35c16-6c0d-3666-1377-532c07ea5357.png)

これでチャットしながらでも情報収集が行なえますね！
API Gateway と Lambda で Invalid permissions on Lambda function

# 背景

Lambda Function を作って、API Gatewayと連携させて、TestボタンでAPIの確認！

を試してみたけれど、なんかエラーが発生する…大したことしてないのに。

# エラー

```
Execution failed due to configuration error: Invalid permissions on Lambda function
```

# 解決

この動画を見てみよう。私はこれで解決しました。スッキリ。

https://www.youtube.com/watch?v=H4LM_jw5zzs
エラー: ファイルまたはアセンブリ 'Sigil'、またはその依存関係の 1 つが読み込めませんでした。

# エラー: ファイルまたはアセンブリ 'Sigil'、またはその依存関係の 1 つが読み込めませんでした。

9 月以来、2 か月ぶりに開いた ASP.NET MVC プロジェクトを実行すると上記のエラーが発生した。その対処を記録する。

エラーメッセージ
> ファイルまたはアセンブリ 'Sigil'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040)

## 問題発見時の状況

- ソリューションの packages フォルダには `Sigil.4.6.1` と `Sigil.4.7.0` が作成されていた。
- ビルド出力を見ると、どのバージョン使うかわからない参照がある (的意味) の警告が表示されていた。


## 対処

1. エラー確認後、デバッグを停止
2. uninstall-package jil
3. uninstall-package sigil
4. プロジェクトを閉じて開く
5. install-package sigil (-> 4.7.0)
6. install-package jil (-> 2.14.5)
7. プロジェクトを閉じる
8. project/bin, project/obj フォルダを削除
9. プロジェクトを開き、リビルド、実行

## 確認した環境

- 日本語 Windows 10 Home 64ビット
- Visual Studio 2015
- ASP.NET MVC 5.2.3
BLE温度計アプリケーションの概要

#はじめに
BLE温度計アプリケーションの概要を記載します。

#スクリーンショット
実際に作成した温度計アプリケーションのスクリーンショットとなります。

![Screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/148400/e4da0d4d-f1d1-9d61-0a43-ee5fd19d62eb.png)

#概要
アプリケーションのイメージを記載します。

![application.png](https://qiita-image-store.s3.amazonaws.com/0/148400/8a56752d-b102-97f4-90d4-5c77fd9a7196.png)

#動作仕様
動作仕様を記載します。

1.基本機能
1-1.BLE温度センサーから受信した温度を画面に表示する

2.温度範囲
2-2.範囲は125度から-40度まで
2-3.分解能は0.5度単位

3.温度表示
3-1.表示する温度の範囲を変更できる
3-2.表示範囲を超えた温度を受信したら上限または下限に表示する
3-3.表示は500ミリ秒ごとに更新する
3-4.表示する温度の幅が20度未満のときは1度おきに目盛りを表示する
3-5.表示する温度の幅が20度以上のときは5度おきに目盛りを表示する
3-6.範囲内に0度が含まれる場合は0度の軸を描画する

4.バー表示
4-1.温度を監視するためにユーザーが温度の基準値を設定することができる
4-2.基準値は画面にバーで表示する
4-3.高温の基準値は赤色のバーで表示する
4-4.低温の基準値は青色のバーで表示する
4-5.基準値を表示するバーは高温と低温で個別に表示、非表示を設定できる
4-6.高温の基準値は必ず低温の基準値のバーより上に表示される
4-7.バーはタッチ操作で移動できる
4-8.バーがタッチされたら操作音を鳴らす
4-9.バーが移動中は破線表示とする

5.警告
5-1.高温バーを超えたとき警告音を鳴らす
5-2.低温バーを超えたとき警告音を鳴らす
5-3.警告音のオン、オフは高温、低温で個別に設定できる
過去にEC-CUBE3のApplicationクラスを眺めてみたりしたポエム

# 注意

異論は全面的に認める。

## 書いた人のスペック

* Laravel大好き
* EC-CUBE2で一瞬地獄を見た事がある
* 最近Twitterアカウント消したのでQiitaに寄生している[^8]

# 下書きに残ってた

```
https://github.com/EC-CUBE/ec-cube/blob/master/src/Eccube/Application.php

https://github.com/laravel/framework/blob/master/src/Illuminate/Foundation/Application.php
```

1年以上前に書いたらしき、URLを２つだけ書いた下書きが残っていて、なんじゃこりゃって思ったんだけど、
当時EC-CUBE2の案件に関わることがあってなんやかんやで辟易していて、
EC-CUBE3が進行中って聞いたんで「じゃぁきっと良くなるんだね！」って期待を持ってソースを見に行ったら絶望したときに書いたものだと思う。

ちなみに、最初に絶望したところは[EC-CUBE2と比較して全く改善されてないER図](https://github.com/EC-CUBE/eccube3-doc/blob/master/ER-D_Logical.pdf)でした。[^1]

確か、マジ絶望って社内で呟いてたときにどう絶望なのか聞かれて、
それに答えるために、敢えてLaravelの同名のクラスと見比べるっていう回答をしたんだと思う。

# 敢えて多くは語りませんが

https://github.com/EC-CUBE/ec-cube/blob/master/src/Eccube/Application.php

`initialize`の中に直接エラーメッセージが書かれてたり、
`initRendering`あたりの深いネストもすごく素敵だと思うし、
絵に描いたような典型的なGod Class、いわゆる神クラスになってて興味深いです。[^2][^7]

## いや、わかるんスよ？

レンタルサーバーでの動作を念頭にあるからPHP5.3.9で動作しなきゃいけないとか、
だからTraitも使えないし、short array syntaxも使えないし可読性はどうしても落ちるよねーと思いますし。[^3]
実際、古いバージョンのサポートってきついものがあるしね…私ももうできれば7以上だけ触ってたい。[^4]

## 良いものが使われるのではない、使われるから良いものなのだ

これは私も真理だと思うので、嫌味抜きでEC-CUBEは良いものだと思いますよ。[^5]

ま、それと、エンジニア的に見た「良さ」はまた別次元だよね、というお話だったのさ。[^6]

-----
[^1]: ２のとき使ってるカラムと使ってないカラムが混在してて実際こっち見てなかった、みたいな事が多々あり、そのまま持ってきたような設計でマジ絶望したんだっけなぁ…（遠い目
[^2]: 「Applicationクラスは何をするのか」の問に、『アプリの初期化を行う』とか答えるんだろうなーとか思うわけですよ。「アプリの初期化には何があるか」の部分を考えてないというか、思慮が足りないというか。
[^3]: まぁ可読性以前の設計の問題だと思うんですけれどね
[^4]: ~~まぁPHP7以上のみ対応だったとしても(略~~
[^5]: 本当ですよ？
[^6]: なので「じゃぁお前が書けよ」と言われても困るけど。EC-CUBE以上に「使われる良いもの」は作れないだろうし。
[^7]: 新人教育で「駄目なところを○個以上挙げよ」とかってすると面白いかもね？
[^8]: Twitterアカウント消したら一気にQiita欲が増えたライフハックおすすめはしない
地味にアップデート中(FreeType2 module for OpenCV)

# 地味にアップデートしております。

https://github.com/Kumataro/opencv_contrib/tree/freetype2/modules/freetype

1. BitmapでBlendモードつけました。
2. ベジエ曲線を線分に変換する時の分割数を指定できるようにしました。

![a.png](https://qiita-image-store.s3.amazonaws.com/0/89434/026807a2-cdf4-2edb-a372-1bed5771587b.png)

#今後の未定（予定ではない）
1. ベジエ曲線を線分に変換する際のパラメータを「分割数」ではなく、「１線分の距離」にしたい…
自分用:PHPを用いたCSVファイルの書き出しとダウンロード

#PHPを用いたCSVファイルの書き出しとダウンロード

動的にcsvを作って、それをダウンロードさせたいなと思って書きました。

本当はheaderにforce-downloadを入れて強制的にダウンロードさせた後に作ったCSVファイルを削除しようかと思っていたんですけれど、その場合、そのページに文章をうまく表示できなかったのでとりあえず、ボタンクリックでできるようにしました。

ただ、この場合、今度は作ったCSVファイルの削除をこのページ内できないという……。
今後の課題ですね。

参考サイト
[PDFなどのファイルを強制的にダウンロードさせる3つ方法の比較](http://mamewaza.com/support/blog/force-download.html)

```php:sample.php
<html>
    <head>
    <?php
		$filepath = "./data.csv";
		$fname = "data.csv";

    	//書き込むデータを2次元配列に入れる
    	$csvdata = array( 
    		array('aaa', 'bbb', 'ccc'),
    		array('ddd', 'eee', 'fff'),
    		array('ggg', 'hhh', 'iii'),
    		array('111', '222', '333')
    	 );

    	//配列からcsvファイルへの書き込み
		$fp = fopen($filepath, 'w');
		foreach ($csvdata as $fields) {
			fputcsv($fp, $fields);
		}
		fclose($fp);

	?>
    </head>
    <body>
    	<?php
			echo "<a href='{$filepath}' download='{$fname}'>CSVファイルのダウンロード</a>";
		?>
	</body>
</html>
```
Laravel5における環境毎のconfigの上書き

# 追記

コメントにて補足頂きました。
Laravel5からは.env.{APP_ENV}に環境ごとの設定を記載する形になっていたようです。

当該ソースはこの辺。

https://github.com/laravel/framework/blob/decc107768da3784e120122284445d081ef1c424/src/Illuminate/Foundation/Bootstrap/DetectEnvironment.php

流儀に沿うなら、環境ごとの.envを用意するのが正しいかも。

# 本編

Laravel4のときは、config以下にenvironment名ごとのconfigファイルを置いておけば環境変数によってconfigを切り替える機能があったようだが、（参考： http://www.1x1.jp/blog/2014/09/laravel-environment-config.html ）Laravel5ではこのような機能はなくなっていた。


なぜ5でなくなってしまったのか（と言うか本当になくなってしまったのか）、
思想的な部分がわからないので若干不安はあるが、プロジェクトであったほうがよいという話になったので作成した。

```php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ConfigServiceProvider extends ServiceProvider
{
    public function register()
    {
        $env = \App::environment();
        $env_config = \Config::get($env);
        if($env_config && is_array($env_config)) {
            \Config::set(array_replace_recursive(\Config::all(), $env_config));
        }
    }
}
```

こんな感じでServiceProviderを作って、`app.php`の`provides`で読み込むだけ。

ディレクトリ構成は以下のようにする。

- `config/`
  - `local/`
     - `.gitkeep`
     - `database.php`
  - `development/`
  - `testing/`
  - `staging/`
  - `production/`
  - `app.php`
  - `database.php`
  - ...etc

localだけ中のPHPファイルを.gitignoreしておいて、config直下には、基本となる設定を記載する。
それぞれのディレクトリ内には、上書きしたいconfigと同じ名称のphpファイルを置き、中には変更したい内容のみを記載していく。

現在のプロジェクトでは、

* local: 各開発者のローカルマシン環境
* development: 共通サーバー上での動作環境
* testing: PHPUnit実行時の環境
* staging: ステージングサーバー用
* production: 本番サーバー用

という切り分けにしている。

## 改善が考えられる点

この書き方だと…config cacheした場合に、productionでも毎回マージ処理入るのでcacheの恩恵が減るかもしれない。
そういう意味では、productionではconfig直下の設定にはproductionの値を書いておいて、
productionの場合にはConfigServiceProciderを読まないような仕組みにしておいた方が動作は軽くなる、かもしれない。

というか、config cacheってサブディレクトリも対象になるんだろうか。
その辺を考慮してまだ改良の余地はあるかも？
（但し、config cache自体どれくらい恩恵のあるものなのかも試さないとわからないけどな）
（サブディレクトリも含めて1ファイルになるんなら、`array_replace_recursive`のコストが無視できるものなのかどうか）
プログラムの勉強をしたいけど何を作ったらいいか分からない人へ

# 自己紹介
- 当方1年目の新人プログラマ
- 使用言語はPHP

# 内容
未経験で開発会社に入社した際に、上司から「確実にスキルがつく鉄板の課題だからやっておいてね」と言われて出された課題を記載しています。
###### **※なお、私はこの課題をPHPで作ったので、他の言語でスキルが上がるかどうかはわかりません。**

##### **11/24追記 LEVEL7を追記しました。**

# LEVEL
### **LEVEL0：FizzBuzz**
#### 仕様
- なし（どういうものかはググってね）

#### 目的
- if / for 文を理解したかの確認

### **LEVEL1：計算機**
#### 仕様
- 四則演算ができること
- 括弧を含んだ計算ができること
- 負の値も計算できること
- 一気につくるのではなく、四則演算->括弧->負の値 の順番で作ること

#### 目的
- 勉強した基礎知識（ifやfor等）をアウトプットする
- PHPで定義されている関数を使ってみる
- データ型についても学べる

### **LEVEL2：一行チャット**
#### 仕様
- 必要項目
 - 名前（未入力の場合は汎用的な名前を自動挿入（2ちゃんねるの「名無し」みたいな））
 - 投稿日時（フォーマットは 年/月/日 時:分:秒）
 - 本文
- 画像投稿機能を実装
- 日付毎、名前毎にフィルタリング機能を実装
- ページネーションを実装（「< 1 2 3 ... >」「<前へ 次へ>」どちらでも可）
- チャットのログはテキストファイルに保存

#### 目的
- ファイルの保存、読み込み、編集を学ぶ
- 現在日時の出力方法を学ぶ

### **LEVEL3：カレンダー**
#### 仕様
- 初期表示は現在日時の月を表示
- 指定した月のカレンダーを表示
- 土曜日は青、日曜祝日は赤で表示する
- 指定した月日を祝日扱いにする（指定する月日はプログラム内に直接書き込んで良い。また振替休日等祝日のずれは考えないものとする）

#### 目的
- 現在だけでなく過去や未来の年月日を出力する方法を学ぶ

### **LEVEL4：住所録**
#### 仕様
- 必要項目
 - id
 - 氏名
 - カナ氏名
 - 登録日時
 - 変更日時
 - 郵便番号
 - 住所
 - 電話番号
 - 備考（複数行テキスト）
- データの保存はデータベースを使う（初心者にはMySQLがオススメ）
    - なお、ここから先の課題でデータを保存する際はデータベースを使うこと
- 登録、変更、削除ができること
- 10件ごとにページネーションで区切る
- カナ氏名、住所で検索できる機能を実装
- カナ氏名でのソート機能を実装

#### 目的
- データベースの使い方を学ぶ
- ソートの使い方を学ぶ

### **LEVEL5：おみくじ**
#### 仕様
- ランダム関数を使い、おみくじをつくる
- ただし、ただランダム関数を使うのではなく、一捻りしてなるべく偏りがなくなるようにする
    - 具体的には回数の平均値の誤差を10%以内にする

#### 目的
- ランダム関数の仕様を学ぶ

### **LEVEL6：ツリー型掲示板**
#### 仕様
- ある書き込みに対してのレスはインデントをつけること

#### 目的
- これまでの課題の復習
- ロジック（処理）を作る練習

### **LEVEL7：フレームワーク・テンプレートを使う**
#### 仕様
- 今まで作ったものをフレームワーク・テンプレートを使って作り直す
 - 元のプログラムは流用可
- エラーを出さずに組み込むこと
 - Noticeも不可
- フレームワークは何でもいいけどCakePHPがオススメ[^1]
 - 逆にLaravelは初心者が手を出すとしんどいらしいのでオススメしない
 - CakePHPが一番情報が多いので躓きにくいとのこと
- テンプレートエンジンはSmartyを使うこと[^1]


#### 目的
- オブジェクト志向のプログラミングを理解する
- MVCモデルを理解する
 - [私はこのサイトで上記2つを理解しました](http://www.objective-php.net/)
- 開発する上でフレームワークは必須なので覚えておきましょう

[^1]: 私の職場では独自のフレームワークとSmartyを使っているので、それらを使いました。

***

以上、私がプログラムの経験を積むために行った課題です。

これからプログラムを勉強しようとしている人に、この記事が参考になれば幸いです。
課題に関して質問等があれば可能な限り答えていきます。
[AWS] boto3でLambdaとS3を連携させる

# はじめに
AWS Lambdaでテンポラリファイルを作成し、それをS3にアップロード。さらに、S3にアップロードしたファイルを元の場所にダウンロード、というグルグルをやってみます。

# システム構成

　　　　　　　　![Lambda_S3.png](https://qiita-image-store.s3.amazonaws.com/0/107056/d85a44e6-5276-0956-7213-b3ba4627ebf8.png)

1. `/tmp/log/sess/` にファイルを作成し、ディレクトリを `/tmp/sess-info.tar` にアーカイブします。
3. S3\<bucket>に `sess-info.tar` をアップロードします。
3. `/tmp/sess-info.tar` を削除し、S3\<bucket>の`sess-info.tar` を`/tmp/sess-info.tar`にダウンロードします。
4. `/tmp/log/sess/` が存在すれば削除し、`sess-info.tar` を `/tmp/log/sess/` に展開します。

# Lambda Code

```
import boto3
import os
import os.path
import tarfile
import shutil

def lambda_handler(event, context):
    bucket_name = 'bucket_name'
    tmp_dir = '/tmp/'
    log_dir = '/tmp/log/sess/'
    file_name = 'sess-info.tar'

    key = file_name
    file_path = tmp_dir + file_name

    # === Step 1
    # create log dir
    if os.path.exists(log_dir) == False:
        os.makedirs(log_dir)

    # write log
    with open(log_dir + 'log1.txt', 'w') as file:
        file.write('hoge\n')
    with open(log_dir + 'log2.txt', 'w') as file:
        file.write('fuga\n')

    # create log archive
    with tarfile.open(file_path, mode='w:gz') as archive:
        archive.add(log_dir)

    # === Step 2
    # create s3 resource
    s3 = boto3.resource('s3')
    bucket = s3.Bucket(bucket_name)

    # upload log archive
    bucket.upload_file(file_path, key)

    # === Step 3
    # delete log archive
    if os.path.exists(file_path):
        os.remove(file_path)

    # download log archive
    bucket.download_file(key, file_path)

    # === Step 4
    # delete log dir
    if os.path.exists(log_dir):
        shutil.rmtree(log_dir)

    # extract log archive
    with tarfile.open(file_path, mode='r:gz') as archive:
        archive.extractall('/')
```
※ `bucket_name` は適宜、設定してください。

# Lambda Configuration
+ Runtime: Python 2.7
+ Handler: lambda_function.lambda_handler
+ Role: Choose an existing role
+ Existing role: **AmazonS3FullAccess**
+ Memory(MB): 128
+ Timeout: 0 min 10 sec

※ LambdaとS3を連携させる場合、Lambdaにroleを設定するだけで連携可能でした。SessionにAccess Key Id,Secret Access Keyを指定したり、S3のアクセス許可を設定したりする必要はありませんでした。

# S3 Bucket
Lambda Codeの`bucket_name`と同じ名前のBucketを作成します。

# おわりに
Lambdaは、ステートレスに設計するのが基本ですが、ステートフルなデータにアクセスしたくなるケースもあります。
そんな場合は、下記をうまく利用して対応します。

+ Lambdaの/tmp ディレクトリに 500 MBまでのテンポラリファイルを作成可能
+ Amazon S3と連携
+ Amazon DynamoDBと連携

今回は、Lambdaの/tmpディレクトリとS3を利用する例でした。
UILabelのtextに入れた記号が絵文字に変わるのを防ぐ

## UILabelのtextに特定の記号を入れると絵文字化してしまう
UILabelのtextに❤(ハート)や☎(電話)などの特定の記号をセットして表示すると、絵文字として表示されてしまうことがあります。
試しにトランプのマークをtextにセットすると...

```swift
let label: UILabel = ...
label.text = "♠♣❤♦"
```

![img1.png](https://qiita-image-store.s3.amazonaws.com/0/27802/f9328e8e-3c8d-5621-6828-a1546d0cce6e.png)

このように絵文字になってしまいます。

## 絵文字化しないようにする

単純に記号として表示したい場合は以下のように、記号文字の後に **`\u{FE0E}`** を追加してあげます。

```swift
let label: UILabel = ...
// 1文字の場合
label.text = "♠\u{FE0E}"
// 複数ある場合はmapとか使うと楽かも
label.text = "♠♣❤♦".characters.map { "\($0)\u{FE0E}" }.joined(separator: "")
```

これで、絵文字に変わることなく表示させることができます。

![img2.png](https://qiita-image-store.s3.amazonaws.com/0/27802/ea662040-0502-9dda-532f-56a223507626.png)

## "\u{FE0E}" って一体
記号の後に付けた **`\u{FE0E}`** は、 **Variation Selector** (異字体セレクタ)というものの1つです。
ある文字がテキストスタイル、絵文字スタイルどちらにもなりうる場合に、 **`\u{FE0E}`** を付与してあげるとテキストスタイルとして表示させることができます。
逆に、絵文字として表示したいときは、**`\u{FE0F}`**を付与してあげると、絵文字として表示させることができます。

```swift
let label: UILabel = ...
label.text = "Ⓜ\u{FE0E} → Ⓜ\u{FE0F}"
```

![img3.png](https://qiita-image-store.s3.amazonaws.com/0/27802/36f798b4-154b-42b0-677e-0f30ea682884.png)

ただ、文字によっては付与することで文字化けする可能性もあるので注意が必要です。

詳しくは[wiki](https://ja.wikipedia.org/wiki/%E7%95%B0%E4%BD%93%E5%AD%97%E3%82%BB%E3%83%AC%E3%82%AF%E3%82%BF)をご覧ください。

## おまけ
Playgroundで試せるコードを用意しました。1.5秒後に絵文字になってしまった記号が普通の記号に戻るようになっています。

```swift
import PlaygroundSupport
import Foundation
import UIKit

PlaygroundPage.current.needsIndefiniteExecution = true
let view = UIView(frame: CGRect(x: 10, y: 10, width: 100, height: 50))
let label = UILabel(frame: .zero)
label.text = "♠♣❤♦"
label.backgroundColor = .white
label.sizeToFit()
view.addSubview(label)
PlaygroundPage.current.liveView = view

DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
    label.text = "♠♣❤♦".characters.map { "\($0)\u{FE0E}" }.joined(separator: "")
    label.sizeToFit()
}
```
【Swift】乱数をシンプルに生成するRandomKit触ってみた

# Swiftで乱数を生成する
Swiftで乱数を生成する場合、従来では以下のようにする必要がありました。

```swift
// 1~9の値を取得する場合
let random = arc4random_uniform(10)

// 1~99の乱数を取得する場合
let random = arc4random() % 100
```

としたり、自分で乱数生成用のクラスを実装したり、大変でした...。

# RandomKitインストール
特に意識することなく直感的に乱数を使用することができるライブラリ[RandomKit](https://github.com/nvzqz/RandomKit)をインストールします。

## Carthageでインストール
Cartfileに以下を記述します。

```Cartfile
github "nvzqz/RandomKit"
```

以下を実行し、ライブラリをビルドします。

```
$ carthage update --platform iOS
```

Run ScriptのInput Fileに

```
$(SRCROOT)/Carthage/Build/iOS/RandomKit.framework
```
を追加します。

## ソースにインポート
```
import RandomKit
```

## 使ってみる
### 数値文字を範囲から
数値、文字で使えます。
自分で数値や文字の範囲を決めて指定するだけです。
また、数字に関してはrandom(to: )を使用することで、
0から指定値までの値を得ることができます。

```swift
Int.random(within: -100...100)) // -100~100
Double.random(within: -11.2...22.3) // -11.2~22.3
Character.random(within: "a"..."z") // a~z

Int.random(to: 100) // 0~100
Double.random(to: 0.9) //0~0.9
```

### 配列や文字列から要素を抽出
配列や文字列などからも要素を抽出することもできます。

```swift
["Bob", "Cindy", "May", "Charles", "Javier"].random // Cindy
"Hello".characters.random // e
```

### シャッフル
配列の要素をシャッフルすることができます。

```swift
// Array
var a = [1, 2, 3, 4, 5]
a = a.shuffled()  // [3, 4, 1, 5, 2]

// Dictionary
var b = ["a": 1, "b": 2, "c": 3]
b.shuffled()  // ["a": 3, "b": 1, "c": 2]
```
他の型における使用方法については、[RandomKit](https://github.com/nvzqz/RandomKit)のReadmeをご覧ください。
Apache Sparkのサンプルプログラムを、IntelliJ IDEAで動かすときに、変更する可能性のある個所のTips

## Projectのimport

最初は、Existing Sourcesからプロジェクトを作成します。

<img width="504" alt="Screen Shot 2016-11-13 at 17.49.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/133139/a93a4ac5-5706-efe1-5ef7-f36ab1791c47.png">

build.sbtファイルが存在するフォルダをプロジェクトルートフォルダとして選択します。
use-auto importもチェックを入れました。

## Build

``` build.sbt
libraryDependencies ++=
Seq("org.apache.spark" % "spark-core_2.10" % "1.5.0" % "provided")
```

SparkのApplicationを、IntelliJのようなIDEで動作させる場合は、Sparkのライブラリが必要になるので、providedをcompileに変更します。
（逆に、予め起動したSparkに、spark-submitで投入する場合には、Sparkのライブラリは起動しているSparkに含まれるために、Sparkのアプリケーションのjarには必要ありません。）

provided/compileのような、依存関係のあるライブラリが無い場合の実行時エラーは、例外の発生（Class Not Found Exception）です。

## Configuration

SparkConfに必須の初期値がありますよね。こちらがダウンロードしているサンプルにない場合があり、そのときは追加しないと動かなかったりします。

よくありがちなサンプル

``` sample.scala（修正前）
    val conf = new SparkConf
    val sc = new SparkContext(conf)
```


自分のローカル設定を反映した場合のソース

``` sample.scala（修正後）
    val conf = new SparkConf
    conf.setSparkHome("/Users/yourname/xxx/spark-1.6.2-bin-hadoop2.6")
    conf.setMaster("local")
    conf.setAppName("SampleAppName")
    val sc = new SparkContext(conf)
```

定義が不足している場合の実行時エラーは、コンテキストの初期化エラーです。

``` コンソール
WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
ERROR SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: A master URL must be set in your configuration
```

ちょっと動かすなら、ソースファイルに定義を書いても良いけど、最終的には定義ファイル（conf/spark-defaults.conf）に記載すると思います。

将来はこちらの[公式HPの記載](https://spark.apache.org/docs/1.6.1/configuration.html)を参照です。
MasonryをReactで使う

# 概要
写経していたテンプレートがMasonryを使っていたので試しました。
Masonryは指定した要素を自動的にタイル状に並べてくれるライブラリです。

百聞は一件に如かずで写経元のサンプルコードは[こちら](http://www.shoeisha.com/book/hp/mcoding/2/#)
※ 『HTML5/CSS3モダンコーディング フロントエンドエンジニアが教える3つの本格レイアウト スタンダード・グリッド・シングルページレイアウトの作り方』という書籍のサンプルです。


先行事例をさっと探したら
[react-masonry-component](https://github.com/eiriklv/react-masonry-component)というものがあり、Starも356あるのでこれを使うことにしました。

# インストール

``` npm install --save react-masonry-component ``` 

# サンプル

前後は略します

``` javascript
import Masonry from 'react-masonry-component'; 
class Gallery extends Component {
  render() {
    var options = {
      itemSelector: '.item',
      columnWidth: 180,
    };
    return (
      <Masonry options={options}>
        <Box />
        <Box />
        <Box />
        <Box />
      </Masonry>
    );
  }
}

class Box extends Component {
  render() {
    return (
      <section className="item">
        /* 略 */
      </section>
    );
  }
}

```

<Masonry></Masonry>で要素を囲んであげる感じです。
別途jQueryは必要ではありません。
Winソフト > 印刷時にフォントの幅がせまくなる > GDIの使用をやめる

```txt:動作環境
Windows 7 pro
```

印刷時にフォントサイズが狭くなる現象が見られた。使用フォントは「MSゴシック」。

色々試した結果、有効だったのは「GDIという機能の使用をやめる」ことだった。

関連 https://msdn.microsoft.com/ja-jp/library/a3a2bads(v=vs.110).aspx

Macの場合Quartzの使用をやめることで、同じトラブルを回避できるかもしれない。
UIBarButtonItem のタイトルや文字色などの状態をサッと変更する✨

`UIBarButtonItem` のタイトルや文字色などの状態を、アニメーションなしで _**サッと**_ 変更したかったので試したことを書きます。📝
より正しい方法があれば教えていただけると助かります。🙏

<br>

# 実現したいこと

状況に応じて次の **条件1** と **条件2** のようにタイトルや文字色を _**サッと**_ 切り替えます。

### 条件1
```swift
rightBarButtonItem.title = "Later"
rightBarButtonItem.tintColor = UIColor.whiteColor()
```

### 条件2
```swift
rightBarButtonItem.title = "Next"
rightBarButtonItem.tintColor = UIColor.redColor()
```

<br>

# まず単純に設定すると

これだけだと Later と <font color=#FF0000>Next</font> が _**サッと**_ ではなく、いくつかの状態を経て切り替わります。

<img src=https://qiita-image-store.s3.amazonaws.com/0/105213/1c4a8552-6cb5-e207-2efb-8d62ca642e33.gif width=120>

<br>

# そこで実現した方法

`UIBarButtonItem` を外したうえで状態を変更し、再度追加しました。

```swift
navigationItem.setRightBarButtonItem(nil, animated: false)
rightBarButtonItem.title = "Later"
rightBarButtonItem.tintColor = UIColor.whiteColor()
navigationItem.setRightBarButtonItem(rightBarButtonItem, animated: false)
```

するとこのように Later と <font color=#FF0000>Next</font> が _**サッと**_ 切り替わります。

<img src=https://qiita-image-store.s3.amazonaws.com/0/105213/7a433928-d711-e688-7656-d993d14ad4ed.gif width=120>

<br>

# こうした経緯

### `UIButton` の場合

`title` を変更するのに次のように設定するとスムーズに切り替わりません。

```swift
button.title = "Next"
```

次のようにすればスムーズに切り替わります。

```swift
button.setTitle("Next", forState: .Normal)
```

### `UIBarButtonItem` の場合

まず同様の `setTitle` がないか探しましたが見当たりません。

そこで `UIBarButtonItem` が継承している [`UIBarItem` のドキュメント](https://developer.apple.com/reference/uikit/uibaritem/1616412-title) を見ると次のように記述されています。

> You should set this property before adding the item to a bar. The default value is nil.

これを読んで追加する前に設定すればよいと考えました。
そして一度 `UIBarButtonItem` を `nil` にして再度追加したところ、 _**サッと**_ 切り替わりました。

<br>

# 参考

https://developer.apple.com/reference/uikit/uibarbuttonitem
https://developer.apple.com/reference/uikit/uibaritem
JSTQB認定テスト技術者資格を受けてみた

JSTQB認定テスト技術者資格 Foundation Levlを受けてきました。
とりあえずメモ程度に。。。


・そもそもJSTQBって、、
ソフトウェアテストに関する知識を認定する資格
3つレベルあって今回はFoundation Levl(通称:FL)なので、基本的な知識体系が問われる内容

ソフトウェアテスト業界では結構有名な資格

基本情報技術者資格と比べるとかなり知名度も難易度も低いとは思います。

・背景
ソフトウェアテスト業界で働いているので、基礎知識は身につけたいと考えていたので、受験してみました。


・勉強方法
青本とか色々あるけど今回は
 •演習で学ぶソフトウェアテスト特訓150問 ~JSTQB認定テスト技術者資格FoundationLevel対応

•テス友
ios.Android共に対応してるアプリ
このアプリ中々使えるのでオススメ！！

演習で学ぶソフトウェアテスト150問は1周目は問題を解く前に解説を見てから問題を解いて8割程度正解し、2周目は普通に問題解いて9割程度正解してからテス友で問題解いて勉強しました。
最後の方はテス友でほぼ100%正解してました。


・試験
お昼過ぎスタートなので朝ゆっくりできます。
会場ついて意外と人多かったです。
会場ついてから勉強してもそんなに変わらないと思ってたので、とりあえず落ち着いてやろうと普段通り携帯をずっと触ってました。
アナウンスがあったので、携帯をカバンに入れテスト用紙が配られ試験開始。
試験時間は1時間で4択式の40問です。
テス友では出題されない長文も結構有りますが、理解してればそこまで難しくないと思います。
テス友とかで勉強してたそのまんまの問題とかもあったので、そこは楽勝でした。

・合格発表
発表が3ヶ月以内という事で、仕事しながらも合格発表されるのをドキドキしながら待ってました。そしたら1ヶ月半程度で合格発表しましたと言うメールが届き、サイトに行き確認。
最初、自分の受験番号が見つからず少し焦りましたが、無事合格してました。


・最後に
受験料が2万超えてるので一回で合格しなきゃ！と思い、自然と勉強してました。
シラバスもあるので、シラバスを読みつつ、足りない部分も書籍やアプリで補えば充分合格できる資格です。

興味のある方は参考程度にしていただければ、、
次回は２月です。
PHP PDOでdate、datetime型を扱う。

# PDOでdate、datetime型を扱う
PHPでデータベース操作する時に使うPDOでdate型のパラメーターにbindValue()で入れれないという事象が発生して、微妙にハマったので、メモ代わりに書いておきます。

##　コード例
```php
$sql  = "SELECT ... "
$sql .= "WHERE DATE_FORMAT(start_at, '%Y-%m-%d') = STR_TO_DATE(:date ,'%Y-%m-%d')";
$stmt = $this->db->prepare($sql);
$stmt->bindValue(":date", date("Y-m-d", strtotime($date)), PDO::PARAM_STR);
```

## だめだった例

```php
$sql  = "SELECT ... "
$sql .= "WHERE DATE_FORMAT(start_at, '%Y-%m-%d') = :date";
$stmt = $this->db->prepare($sql);
$stmt->bindValue(":date", $date, PDO::PARAM_STR);
```
Onesignalの近況

プッシュ通知系サービスでは、扱いやすいであろうOnesignal。そのんかで、メーリングリストで配布された近況について触れていきます。(以下、箇条書き)

* [ドキュメントの刷新](https://documentation.onesignal.com/docs)
* ユーザーページ(登録者の一覧)をフィルタリングできるように
* 通知に使用しているバックエンド、またはトータルの登録者の時間的変化のグラフをダッシュボードに表示
* 対Web通知のChrome向けの登録が簡素されたとのこと
* iOS10対応を含むiOS向けSDKのアップデート

    * iOS10のリッチな通知に対応
    * セッションのカウントがより正確になりました
    * デフォルトで、SafariではなくWebviewで通知を開くようになりました
    * iOS6のサポートを打ち止め
    * プッシュ通知機能がアプリケーションターゲットに対して有効になっていない場合、「No Push Token」の問題を検出してエラーメッセージを表示するようになりました
    * ユーザーのE-mail(アドレスかも)を匿名ハッシュとして、保存するメソッドの追加
    * アプリが開いているときに通知を受け取ると、アプリ内アラート表示がデフォルトになりました(カスタマイズ可能)
    * 位置情報によるターゲッティングが可能に

* それに合わせてAndroid向けもアップデート

    * 「期限切れのGoogle Playサービス」エラーを修正
    * さまざまな種類のサブスクリプションの問題について、OneSignal All Usersページに詳細なメッセージを追加
    * ソニーとHuaweiのランチャーでの未読バッジに対応
    * サウンドフィールドをnull値に設定すると、Android通知音を無効にできるようになりました
    * まれにみられていたクラッシュを修正
    * manifestApplicationIdを設定する必要がなくなり、デフォルトのapplicationIdが使用されるように変更
    * PostNotificationResponseHandler.onFailureは、常にエラーのあるJSONObjectを返します
    * ユーザーのE-mail(アドレスかも)を匿名ハッシュとして、保存するメソッドの追加
    * アプリが開いているときに通知を受け取ると、アプリ内アラート表示がデフォルトになりました(カスタマイズ可能)
    * 位置情報によるターゲッティングが可能に

* サーバー側のAPIアップデートで、ユーザーのフィルターが可能に
* Xamarin SDKが登場
* OS Xのアプリでも機能が使えるように
* [Drupalのモジュール](https://www.drupal.org/project/onesignal)が登場
* [React NativeのSDK](https://github.com/geektimecoil/react-native-onesignal)が登場
* GoとRubyにおけるREST APIに関するドキュメントが公開
Windowsアプリケーションのテストライブラリ"Friendly"が面白い。

FriendlyはWIndowsアプリケーション向けの結合テスト作成用のライブラリです。
砕けていうな**WIndowsアプリケーションをAPI化してテストが可能**というツール。
API化前提なのでテストに留まらずソースコードに直接手が出せないツールなども利用可能だ。

ソースコードとチュートリアル諸々が製作者様のホームページにて
公開されているので興味ある方はご覧ください。
http://www.codeer.co.jp/AutoTest


Friendlyの破壊力は凄まじいものがあるが、
導入効果としてはやはりテスト意識の向上に着目したい。
特に**MVVMモデルのアプリケーション**に対してだ。

各層をライブラリ単位(.csproj/.dll)で分けてしまえば
Model及びViewModelはFriendlyでテストを行うという切り分けが安易に可能だ。
MVVMパターンとものすごく相性が良い。

補足すると最初からロジックを分けているのであれば、
各クラスを個別で単体テストしてしまえば良いと言えるが、
**MVVMモデルをテストする上で厄介なのはバインド**だ。

一般的にUnitテストは１クラスに対してテストケースを作成するが、
ViewModel(VM)を対象にした場合、対象を１クラスにしてしまうと、
バインド情報を無視する事になり健全なテストと言い切るのは難しい。

その点、Friendlyであれば別プロセスで実行中のアプリケーションをAPI化して
テストしてしまうので、バインド情報が生きたまま１クラス(ViewModel)に対するテストが可能なのだ。

MVVMモデルで単体テストを行うなら
バインドの事情も踏まえつつ単体テストが可能なFriendlyを是非推したい。


さて話がガラリと変わりますが、
Friendlyを利用してWPFの各イベントフローの調査ツールを作る話を
アドベントカレンダーで話したいと思います。
興味ある方は次の記事も是非見ていただければ嬉しいです。

http://qiita.com/advent-calendar/2016/csharp
2016/12/22
gistで簡単なHTMLやCSSを確認しました

簡単なHTMLやJS、CSSをgistで試したいと考えていました。

# gistで記事を作成
https://gist.github.com/ からindex.htmlという名前のファイルを作成します。

ここでは昔試しに作っていた[index.html](https://gist.github.com/pugiemonn/d74f4261f7bab86dd0ea) を使用します。

# gistの表示を確認する
gistの表示を確認する場合、rawgit.comというホストのページを見るとデモを確認できました。

| 項目 | URL | URL例 |
|:-:|:-:|:-:|
| メニュー | `https://gist.github.com/GithubID` | https://gist.github.com/pugiemonn |
| 個別ページ | `https://gist.github.com/GithubID/ハッシュ` | https://gist.github.com/pugiemonn/d74f4261f7bab86dd0ea |
|  ソースページ | `https://gist.githubusercontent.com/GithubID/ハッシュ/raw/ハッシュ/ファイル名`  | https://gist.githubusercontent.com/pugiemonn/d74f4261f7bab86dd0ea/raw/7e4f813b689b3452d322b8143e06f6fd3d641b97/index.html |
| デモ1 | `https://rawgit.com/GithubID/ハッシュ/raw/ファイル名` | https://rawgit.com/pugiemonn/d74f4261f7bab86dd0ea/raw/index.html |
| デモ2 | `https://rawgit.com/GithubID/ハッシュ/raw/ファイル名/index.html`  | https://rawgit.com/pugiemonn/d74f4261f7bab86dd0ea/raw/7e4f813b689b3452d322b8143e06f6fd3d641b97/index.html |
上記テーブルの下2つのデモURLいずれかにブラウザからアクセスすると表示を確認できました。gistでのソースページをテーブルデモ２にあるようなrawgit.com経由で見てみると、ソース表示ではなく通常のHTMLとして表示されるみたいです。

表示を確認したい場合は2ステップのみで、gistでページを作成し、次にrawgitのページへアクセスするだけでした。

# gistからの変更差分を確認する
gistからファイルを変更した場合、rawgitに変更がされないような経験をしました。
このような場合には、gistのリビジョンから差分を確認します。先程の例では以下のようなURLからリビジョンを確認できます。

https://gist.github.com/pugiemonn/d74f4261f7bab86dd0ea/revisions

リビジョンから各コミットのソースURLを取得しました。

+ １つ目 https://gist.githubusercontent.com/pugiemonn/d74f4261f7bab86dd0ea/raw/7e4f813b689b3452d322b8143e06f6fd3d641b97/index.html
+ ２つ目 https://gist.githubusercontent.com/pugiemonn/d74f4261f7bab86dd0ea/raw/f20a96a073ced6d2b4b031adb3a80ad89bcefd03/index.html

このURLを元に、rawgit.comのURLを作成します。

+ １つ目 https://rawgit.com/pugiemonn/d74f4261f7bab86dd0ea/raw/7e4f813b689b3452d322b8143e06f6fd3d641b97/index.html
+ ２つ目　https://rawgit.com/pugiemonn/d74f4261f7bab86dd0ea/raw/f20a96a073ced6d2b4b031adb3a80ad89bcefd03/index.html

各URLにアクセスすると変更の差分をブラウザから確認できました。

# 参考
http://stackoverflow.com/questions/10717169/view-rendered-output-of-a-gist
ios開発者が使っているmacの空き容量を増やす

#はじめに
開発にしか使っていないmacの空き容量が減ったので色々調べてみたことの備忘録です

きっかけはmacのOSをsierraにした時に空き容量が6GBから30GBまで増えてi cloudの容量も変わっていなかったことです

#原因

```path
~/Library/Developer/Xcode/iOS\ DeviceSupport/
```

の中身が原因だったみたいです
中身を調べてところiosシミュレータ用に使っているiosのバージョンごとのファイルみたいです

この場所でduコマンドを使ってどれだけ容量を使っていたのか調べてみると

```terminal
sudo du -h -x -d 1
2.9G	./10.0.2 (14A456)
2.9G	./10.1 (14B72)
2.1G	./9.0.2 (13A452)
2.2G	./9.2 (13C75)
2.2G	./9.2.1 (13D15)
2.2G	./9.3.1 (13E238)
2.2G	./9.3.2 (13F69)
2.2G	./9.3.3 (13G34)
2.2G	./9.3.5 (13G36)
 21G	.
```
となっており
すごく容量を食っています

個人的には最新のバーションしか使わないので

```terminal
sudo rm -rf 9*
```

でさっくり削除しました
【雑感】Developers Festa Sapporo 2016

2016年11月11日(金)に開催されたDevelopers Festa Sapporo 2016を聴講してきました。


[Developers Festa Sapporo 2016](http://www.devfesta.jp/program.html)

Developersと謳っているだけあって、Speakerも聴講者もエンジニアらしい風貌で、聴こえてくる会話もマニアックでしたｗ

聴講してきた2コマの雑感です。

#Googleがめざす、誰もが使える機械学習
佐藤　一憲
(グーグル株式会社)

---

【雑感】
クラウドでAWS、Azure(Microsoft)に遅れを取っているGoogleはAIを武器に巻き返しを狙っているというお話。
AWS、Azureと違い、ハードも自前という点がGoogleの強みであり、スペックの差が大きく影響するAI分野での躍進のカギを握るような気がする。
まずは自社のサービスで実践してサービスの質を磨き、単体のサービスとしてユーザーに提供していくという流れはAWSと同じ。
近い将来、AIに仕事を奪われる業種が出てくることが現実味を帯びてきていることを感じさせる。
最初は翻訳業か。


【メモ】
######ニューラルネットワークとディープランニング
・ニューラルネットワーク→学習できる関数
・かつてのAIはルールベースであったが、現在のモデル(認識の階層化→ディープランニング)になることにより人間を超える認識もできるようになった→特に画像認識
・AIに学習させるコストの大きさが課題

######Googleサービスを支える機械学習
・すでにGoogleの各サービスでAIが活用されている
　- Google検索(の予測検索の表示順)
　- AlphaGo→コンピューター囲碁プログラム
　- WaveNet by DeepMind→合成音声
　　　　自然な音声を人工的に作り出せる
　- Google Photo → 写真を画像認識してグループ分けする
　- Gmailのスマートリプライ(自動返信)→英語版のみ
　- Google翻訳
　　→ この講演と前後してAIを取り入れてよくなった！という話題が出ているが、講演の中の話としては、日本語への適用は年末から年明けにかけてと仰ってました。
　　→ これまでと違うところは自信満々に翻訳するところで、間違う時も<font color="red">自信満々に間違う</font>そうです( ﾟ∀ﾟ)･∵. ｶﾞﾊｯ!! 

######誰でも使える機械学習
・[Cloud Vision API](https://cloud.google.com/vision/?hl=ja&utm_source=google&utm_medium=cpc&utm_campaign=2015-q1-cloud-japac-jp-vision-bkws-freetrial-jap&utm_term=%2Bcloud%20%2Bvision%20%2Bapi&gclid=COjs5tSFpdACFYVjvAodoL8Mqg)
　機械学習による画像認識
　不適切画像の検知で大きな成果が出始めている→これまで人力で行っていたものを機械学習に置き換えた事例
　　[Google Cloud Platform Japan 公式ブログ: Cloud Vision API による不適切コンテンツのフィルタリング](http://googlecloudplatform-japan.blogspot.jp/2016/09/cloud-vision-api.html)

・Cloud Speech API
　音声認識
　コールセンターの文字起こし

・機械学習APIが適さない用途
　特定用途向け(医療画像など)の認識
　　→**<font color="red">学習用のデータがあるか</font>**

######TensorFlowで誰もが使えるディープランニングへ
・TensorFlow（テンソルフロー）
　Googleが開発したオープンソースの機械学習ライブラリ
　学習環境：
　　　　Mac/Windows
　　　　GPUマシンが望ましい：学習速度に影響
　　　　クラウドのGPUクラスタ
　実行環境：
　　　　Android、iOS、RasPi
・開発事例
　[きゅうりの仕分け](https://www.youtube.com/watch?v=PY-PN5xfw_0)
　RasPiカーの自動運転
　TensorFlow + ドローン

######Googleによる大規模分散学習
・学習に必要な計算パワーが課題
　　→高スペックのマシンがたくさんあればいいわけではない
　　　　→スパコンなみのネットワークが必要
　　　　　　→Googleでは専門の技術者を雇い自前でネットワーク機器を作っている→Jupiterネットワーク([いかにしてGoogleは他の企業では成し得ないような驚くべきデータセンターネットワークを作り上げたか | インフラ・ミドルウェア | POSTD](http://postd.cc/how-google-invented-an-amazing-datacenter-network-only-they-could-create/))

・[Cloud Machine Leaning](https://cloud.google.com/ml/?hl=ja&utm_source=google&utm_medium=cpc&utm_campaign=2016-q2-cloud-japac-jp-ml-bkws-freetrial-jap&utm_term=%2Bcloud%20%2Bml&gclid=CI3UtryLpdACFVgRvQodeJwB8w)
　機械学習のフルマネージドサービス

---

#Serverless Revolution
西谷　圭介
(アマゾン ウェブ サービス ジャパン株式会社)

####[発表資料](http://www.slideshare.net/keisuke69/serverless-revolution)

---
【雑感】
AWS LambdaとAWS API Gatewayが中心のお話。

MicroServiceを次々にリリースし、それらを束ねた使いやすいフルマネージドサービスを提供していくというのがAWSの定番になりつつある。

最後にデモしてたPython Serverless MicroFramework for AWSは、Elastic BeanstalkのMicroservice版のイメージですかな。

本筋とは全く関係ないんだが、AWS、サービスが増えすぎて専門家の介在なしだと使い始めるのも億劫なレベルになってるんじゃ？
お勧めサービス検索サービス的なの作りませんか？( ﾟ∀ﾟ)･∵. ｶﾞﾊｯ!! 

【メモ】
発表資料が早々に公開されたので、印象に残ったところのみ
・価値を生み出す作業に注力するためのサーバレス
・サーバレス一択ではなく用途によって使い分ける
・サーバレスは銀の弾丸ではない
　→新しい技術が出る度に言われることだが、サーバレスに対しても同じことが言える
・Lambdaだとファンクションレベルで言語変えれるのすごいと思う

以上