OmniAICreator/Qiita-1.07M huggingface dataset:
既に最強なIntelliJ IDEAを更にパワーアップさせられる10個のプラグイン

## 紹介するプラグインについて
この投稿で紹介するプラグインは何かのツール、言語、フレームワーク、サービスなどとintegrateする類のものは含まず、それ単体で便利に感じられるであろうプラグインに絞って紹介している。
（アルファベット順）

## [A prevent pinned tabs from closing plugin - by momomo.com](https://plugins.jetbrains.com/plugin/8442)
固定したタブを閉じられなくするプラグイン。いらないタブを複数閉じようとすると間違って開いておきたいタブまで閉じてしまうことがある。それを防ぐことができるようになる。

## [AceJump](https://plugins.jetbrains.com/plugin/7086)
見えている範囲でカーソルを移動させたい場所にサッと移動させられるようにするプラグイン。慣れるとめちゃくちゃ速い。設定したショートカットで機能を起動すると1文字入力を求められ、入力するとその文字がある場所に飛ぶためのショートカットが画面に表れる（画像参照、これは`string`を入力したところ）
![](https://plugins.jetbrains.com/files/7086/screenshot_16299.png)

## [Autoscroll Save](https://plugins.jetbrains.com/plugin/7575)
Projectツールウィンドウの設定項目には`Autoscroll from Source`というものがあり、これをオンにしているとエディタで開いているファイルがProjectツールウィンドウ上でも選択状態になる。同じパッケージ（フォルダ）のファイルを見たいという場合がよくあるので便利な機能なのだけど、この設定はプロジェクト毎に別になっている。つまり新しくプロジェクトをインポートする度にこれを設定しないといけない。しかしこのプラグインを入れて`Autoscroll from Source`の設定をオンにして`Autoscroll Save`するとそれ以降自動でその設定がオンになってくれる。地味だけど便利。

## [CodeGlance](https://plugins.jetbrains.com/plugin/7275)
Sublime Textで右側に表示されるMiniMapと同様の機能のプラグイン。サイズや色などはカスタマイズ可能。
![](https://plugins.jetbrains.com/files/7275/screenshot_16821.png)

## [Describe Key](https://plugins.jetbrains.com/plugin/81)
~~あるショートカットがどの機能に割り当てられているかを検索する機能がIntelliJにはない（何かにバインドしようとするダイアログで見れるけどそのためのダイアログではない）。このプラグインによって検索できるようにするとキーマッピングを吟味するのが楽になる。~~
(訂正：Keymap設定画面のキートップ＋虫眼鏡のボタンから検索できた。)

## [gfm](https://plugins.jetbrains.com/plugin/7701)
GithubのMarkdownレンダリングに特化したプラグイン。他のMarkdownプラグインは色々なMarkdown方言に対応するために設定がややこしくなってしまっているが、Githubしか使わないって場合はこれがいい。
![](https://plugins.jetbrains.com/files/7701/screenshot_14988.png)

## [IDEAStickyPaper](https://plugins.jetbrains.com/plugin/1064)
IntelliJ上で付箋紙が使えるようになる。付箋紙は最小化でき、ツールウィンドウ内で管理できる。ちょこっとメモしておきたい事があるとき、メモ帳ではなくこの付箋紙を使ったほうが便利な場合もある。
ただし付箋紙がIntelliJのウィンドウに関係なく常に最前面に表示され続ける仕様は好みが分かれるかもしれない。
![](https://jetbrains-plugins.s3.amazonaws.com/1064/screenshot_155.png)

## [RegexpTester](https://plugins.jetbrains.com/plugin/2917)
正規表現を試せる。
![](https://plugins.jetbrains.com/files/2917/screenshot_1563.png)

## [Save Actions](https://plugins.jetbrains.com/plugin/7642)
ファイルを保存するときにコードに対してアクションを施せるプラグイン。例えばimportを最適化したり、フォーマッタを適用したり、ダイヤモンド演算子を適用できる部分をそうしたりもできる。コードをpushしたあとに「あー、ifと(の間にスペースない。。」みたいなのをなくせる。

## [Synonyms](https://plugins.jetbrains.com/plugin/7576)
名前を考えていて良い感じの単語が思いつかない時、その度にシソーラスをググりに行くのはかなりの労力だ。そんなときにショートカット一発で類義語をずらっと出してくれる便利なプラグイン。キャメルケースの途中でも出してくれるし、出してくれる内容も品質が高く、意味合い毎に分けて列挙してくれるのでとても便利。
知らない単語は他の人も大体理解できないので無視して、知ってるけど閃かなかった丁度良い単語があったらそれを使う、という使い方がなかなかに最強だ。
![](https://plugins.jetbrains.com/files/7576/screenshot_14747.png)
RHEL/CentOS7ではiptablesではなくfirewalld

## firewalldの基礎基本

今更なのですが、RHEL/CentOS 7系からOSのファイアウォールはiptablesからfirewalldへと変更されています。
知らなかったわけではないのですが、今までちゃんと使う機会がなかった（それもどうかと思うけれど）ので、
今回、備忘録ってことで基本的な部分をおさらいしてみました。
（ちなみに、7系でも従来のiptablesも利用することもできますが、firewalldが RHEL 7のデフォルトとなっているということで。）

## まずはステータス確認

RHEL/CentOS 7系ではsystemdコマンドが採用されています。つまり、サービスの起動・停止方法も従来とは異なっているということですね。
とりあえず、ファイアウォールが今activeかどうかを確認してみましょう。

下記のコマンドで確認することができます、
```
$ systemctl status firewalld
```
```
Active: active (exited)
```
と帰ってきたら起動されているということですね。

起動・停止は下記コマンドです。
```
起動
$ systemctl start firewalld
停止
$ systemctl stop firewalld
```

## 通信を許可しているかの確認

まずは、どんな設定が入っているかを確認する必要があります。

firewalldでは、ゾーンという単位で設定が定義されます。
このゾーンとNICが紐づくことで、設定が有効になります。

すべてのゾーンの情報を見る

```
$ firewall-cmd --list-all-zones
```
それぞれのゾーンによって情報が表示されているのがわかるかと思います。
さて、それぞれのゾーンに設定されているサービスを確認するコマンドは以下になります。

```
$ firewall-cmd --zone=public --list-services --permanent
```
サービス名が表示されますね。表示されたサービス名のポートが空いているということですね。

## ゾーンにサービスを追加する

さて、この指定のゾーンにサービスを追加するには下記のようにします。
今回は、例としてhttpのサービスをpublicゾーンに追加します。
コマンドは以下のようになります。

```
$ firewall-cmd --add-service=http --zone=public --permanent
```

引数に`--permenent`をつけないと、firewalldを再起動した際に設定が元に戻ってしまいます

さて、今回はhttpとしましたが、実際にはこれが3000番ポートだったり8080番だったりするわけです。
このサービスの設定ファイルの実態は下記ディレクトリにあります。

```
/usr/lib/firewalld/services
```
このディレクトリにサービス名のファイルが格納されています。

このサービス名のファイルを
```
/etc/firewalld/services
```
に追加すると、優先して使用されるようになります。

なので、httpを8000番ポートで使用したいとすると、

```
# コピ-
cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/http.xml

# 編集
vi /etc/firewalld/services/http.xml
```


```
 <?xml version="1.0" encoding="utf-8"?>
 <service>
   <short>WWW (HTTP)</short>
   <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server 
 publicly available, enable this option. This option is not required for viewing pages locally or 
 developing Web pages.</description>
   # <port protocol="tcp" port="80"/>
   <port protocol="tcp" port="8000"/>
 </service>
```


みればわかるように、8000番に書き換えます。
そして最後にリロードすると、設定が反映されます。

```
$ systemctl reload firewalld
```

## ちなみにiptablesも使える

ちなみに、firewalldというコマンドの実態は実は単なる管理インターフェースだったりする。なので、その裏ではiptablesがちゃっかり動いているのだ。
なので、実際の結果をみたいとかいうときには、iptablesのコマンドでも確認することができる。

おなじみの、あのコマンド。
```
$ iptables-save
```

これで今現在どのように管理されているかを確認することができる。

個人的にはiptablesよりもfirewalldの方が楽だなあと思った次第ですが、
今までの管理に慣れている人はやっぱりiptablesの方が捜査しやすいのかと思います。
ようはこういうのは慣れだと思うので、どんどん使っていくに越したことはないのかなと思ってます^^
電子工作 > 考察 > モジュールの廃盤について

@ 社員をサーフィンへ行かせよう by Yvon Chouinard (シュイナード) 
> 製品全体の耐久性が尽きるのは<font color=red>最も弱い部分が壊れた時点だ</font>。究極の目標は、どのパーツもほぼ同時に、しかも長期の使用のあとにすり切れる製品を作ることだ。


ある基板を作るとする。その基板にはいくつかのモジュールがあるとする。
それらモジュールのうちの１つが廃盤になった時、「最も弱い部分が壊れた」と言える。

作成した基板の寿命を10年(可能であれば20年)にしたい場合にどうするか。

- 後継モジュールを使う
  - 長所: フォームファクタ、通信プロトコルなどが同じ可能性がある
  - 長所: モジュール自体を自作する必要がない
  - 短所: 後継モジュールが用意されない場合がある
  - 短所: 後継モジュールのふるまいが元モジュールと同じ保証はない
  - 短所: 後継モジュールが廃盤になる可能性がある
- 自作する
  - 長所: 部品が廃盤にならない限り製造を続けられる
  - 長所: 1部品の廃盤は、同等部品に可換であれば製造を続けられる
  - 短所: 自作にコストがかかる (設計、ソフト実装、など)
  - 短所: 製造コスト(IC実装)がかかる

ESP8266 + Arduino IDE + microSDスロット にて以下の条件はどうなるだろうか

- フォームファクタ
- 応答特性
- 消費電流
- ラニングコスト (製造コスト)

フォームファクタがESP8266では厳しいだろう。[ATTiny85](http://qiita.com/search?utf8=%E2%9C%93&sort=&q=%22ATTiny85%22)や[8pino](http://qiita.com/search?utf8=%E2%9C%93&sort=&q=%228pino%22)などであればクリアできそうか。

MCU選定も10年手に入るものにするか、適宜後継版がでそうなフレームワーク上で作ればいいだろうか。

(追記 2016/08/02)
こういう問題はモジュールではなくライブラリでも起こりうる。
多くのライブラリを使うフレームワークの場合、それらをすべてきちんとupdateしていける環境にする必要がある。
きちんとメンテナンスするには、それなりの知識が必要となる。
[Elasticsearch]インデックス作成時のシャード数を変更してみる

# バージョン

+ Elasticsearch 2.3.4


# やってみる

[Shards & Replicas](https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html#_shards_amp_replicas)

> By default, each index in Elasticsearch is allocated 5 primary shards and 1 replica which means that if you have at least two nodes in your cluster, your index will have 5 primary shards and another 5 replica shards (1 complete replica) for a total of 10 shards per index.

上記にも記載があるようにデフォルトでは 5プライマリシャード、1レプリカシャードが作られるようになっているようです。
試しに作ってみます。

```bash
# インデックス作成
$curl -s -XPOST http://10.66.35.30:9200/test_index | jq
{
  "acknowledged": true
}

# インデックスの設定確認
$curl -s http://10.66.35.30:9200/test_index/_settings | jq
{
  "test_index": {
    "settings": {
      "index": {
        "creation_date": "1469840401660",
        "number_of_shards": "5",
        "number_of_replicas": "1",
        "uuid": "SrrZsLTAQhKSJ5LSgjiEPQ",
        "version": {
          "created": "2030499"
        }
      }
    }
  }
}

# 確認後削除
$curl -s -XDELETE http://10.66.35.30:9200/test_index | jq
{
  "acknowledged": true
}

```

確かにドキュメント通りの設定になっています。

この設定を変えるために予め Index Template を設定します。

[Index Template](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html)

今回は setting のみのテンプレートを定義しますが、mappingのテンプレートも行えるようです。
シャード数を1とするテンプレートを作成します。


```bash
# テンプレート登録
$curl -XPUT localhost:9200/_template/template_1 -d '
{
    "template" : "te*",
    "settings" : {
        "number_of_shards" : 1
    }
}'
{"acknowledged":true}


# テンプレート確認
$curl -s http://10.66.35.30:9200/_template/template_1 |jq
{
  "template_1": {
    "order": 0,
    "template": "te*",
    "settings": {
      "index": {
        "number_of_shards": "1"
      }
    },
    "mappings": {},
    "aliases": {}
  }
}
```

正しく登録されているようなので再度インデックスを登録してみます。


```bash
$curl -s -XPOST http://10.66.35.30:9200/test_index | jq
{
  "acknowledged": true
}

$curl -s http://10.66.35.30:9200/test_index/_settings | jq
{
  "test_index": {
    "settings": {
      "index": {
        "creation_date": "1469842187701",
        "number_of_shards": "1",
        "number_of_replicas": "1",
        "uuid": "Qn8vIieWQ0eNIv9iK6fWQw",
        "version": {
          "created": "2030499"
        }
      }
    }
  }
}
```

number_of_shards が変わってますね。無事できました!

不要になったのでインデックス、テンプレートも一応削除しておきましょう。

```bash
$curl -s -XDELETE http://10.66.35.30:9200/test_index

$curl -s -XDELETE http://10.66.35.30:9200/_template/template_1
```
React + Typescriptシリーズ（随時更新）

## 問題提起

React始めたいですよね！
でも今時、型のない言語とか使いたくないですよね！
TypeScriptコンパイラもjsxに対応したし、Angular2でもTypeScriptが標準っぽいし、
とりあえずこれから始めるならTypeScriptでしょう。
ということで、個人的に良いのではと考えている技術スタックをまとめてみました。
内容が膨大なのでシリーズにしています。

## 環境・技術スタック

基本的には以下のように最新に追従していきます。

- NodeJS 7.X~
- React 15.5
- Redux
- TypeScript 2.3
- wepack 2.5
- express(開発用の仮サーバーとして)
- karma

（他、各種ライブラリを都度見ていきます）

## 記事

### 導入編

Reactで普通のSPAを作るために最低限必要だと筆者が考える構成を順を追って説明していきます。

- [React + TypeScript + Webpackの最小構成](http://qiita.com/uryyyyyyy/items/63969d6ed9341affdffb)
  - まずはReactの環境構築です。

- [React + Redux + TypeScriptの最小構成](http://qiita.com/uryyyyyyy/items/3ad88cf9ca9393335f8c)
  - ここでReduxを導入してみます。

- [React + Redux + TypeScriptでテストを書く](http://qiita.com/uryyyyyyy/items/7d4b0ede3f2b973d6951)
  - Reduxによって分けられた、Component/Reducer/ActionCreatorのテストを書いてみます。

- [React + Redux + TypeScriptで非同期処理](http://qiita.com/uryyyyyyy/items/41334a810f1501ece87d)
  - ミドルウェアは使わずにシンプルに書いてみます。もちろんテストも

- [React + Redux + TypeScriptでreact-router](http://qiita.com/uryyyyyyy/items/30733e9cd140e60c52bd)
  - SPAの必須要件とも言えるroutingを書いてみます。

- [SPAの静的ファイルのデプロイの仕方](http://qiita.com/uryyyyyyy/items/a4b97709a019af1242be)

### 拡張編

Reactをさらに便利に使うための便利ライブラリなどを導入してみます。

- [React + fetch APIでFileをUploadする](http://qiita.com/uryyyyyyy/items/9954205a620b6f3c1f24)

- [React + Redux + TypeScriptとImmutable.js](http://qiita.com/uryyyyyyy/items/6143feba20554fe55a82)
  - TypeScriptを相性が良いと筆者が思っているImmutable.jsをどうにゅうしてみます。

- [SPAでのログイン処理のやりかた](http://qiita.com/uryyyyyyy/items/56f9a80a829161ae1f8e)

### 番外編

- [型とテストのある暮らし〜jasmineの香りを添えて〜](http://qiita.com/uryyyyyyy/items/acf22b6ca96ad25f6bb7)
  - LT資料

## 随時更新したい

こちら、ReactやTypescriptのバージョンが上がったり、これらのスタックをさらに便利にするものが出てきたら随時紹介してきます。
（今のところhot-module-loaderなどは入れる予定はありません。）

何かご質問やもっと良い構成案があれば気軽にコメント頂ければと思います。

### TBD

- Material-ui(or material design css framework)
- react-bootstrap
- websocket
- canvas
[Swift版] 今さら聞けないFirebase② Authentication(認証)

# はじめに
今さら聞けないFirebaseシリーズ第二弾は、Authentication(認証)の実装方法についてご紹介します。

## Authenticationができること
・メール、パスワードを使ったユーザ管理、ユーザ認証
・OpenIDを使ったユーザ認証(Google/Twitter/facebook/Github)

今回は、メールとパスワードを利用したユーザ管理及びユーザ認証をやってみます。

[導入編はこちら](http://qiita.com/eKushida/items/54b62d3961a5c74a71af)

## やること
・Authenticationの導入方法について
・ユーザ登録、ログイン、ログアウトのサンプルコードのご紹介

## やらないこと
・[Firebaseの導入について]((http://qiita.com/eKushida/items/54b62d3961a5c74a71af))
・会員登録画面、ログイン画面等の画面について
・[エラーハンドリングについて](https://firebase.google.com/docs/auth/ios/errors)

# いざ、チャレンジ！

## 1. 前準備

### 1.1. Podfileを開いて、以下を追加する

```:Podfile
pod 'Firebase/Auth'
```

### 1.2. ログイン方法を指定する
[Firebase console](https://firebase.google.com/console/)のAuthenticationを開き、ログイン方法を指定します

<img width="824" alt="01-01.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/eb050400-c03a-c2a9-b9a9-94f6a8e6df4c.png">

今回は、メール、パスワードでの認証を指定する

<img width="812" alt="01-02.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/aa678969-00dd-caff-fbc8-99a8fd53c33c.png">

正しく指定できると、下記のような画面になります
<img width="830" alt="01-03.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/2ea6d294-c6b0-48c2-abce-a9467ed03005.png">

## 2. 実装 

### 2.1. ユーザ登録
ユーザ登録は、下記のとおりです。

```
        let email = "hogehoge@gmail.com"
        let password = "barbarbar"
        
        FIRAuth.auth()?.createUserWithEmail(email, password: password) { (user, error) in
            // ...
            
            if let error = error {
                
                //TODO : エラーハンドリング                
                print(error.code)

                // 17007 : 登録済みのメール
                // 17008 : メールの書式が間違っている
                // 17026 : パスワードが短い(6文字以上）
                // 17999 : メールまたは、パスワードが不正（空文字を指定した場合）
                
                return
            }
            
            if let user = user {
                print(user.uid)
                print(user.email)
            }
        }
```

正しく会員登録ができると、管理画面上でもユーザを確認することができます。
最大で500ユーザまでのようです。（少ないですね。。）

<img width="875" alt="スクリーンショット 2016-07-30 10.14.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/66768741-1339-7b7b-41e7-979fe19bfebf.png">

### 2.2. ログイン
ログインは、下記のとおりです。
ログイン中にログインしても、エラーにはならないようです。

```
		FIRAuth.auth()?.signInWithEmail(email, password: password) { (user, error) in
            
            if let error = error {
                
                //TODO : エラーハンドリング
                print(error.code)

                // 17009: パスワードが間違っている
                // 17011: ユーザが存在しない   
                
                return             
            }
            
            if let user = user {
                print(user.uid)
            }
        }
```

### 2.3. ログアウト
ログアウトは、下記のとおりです。
ログアウト中にログアウトしても、エラーにはならないようです。

```
        do{
            try FIRAuth.auth()?.signOut()
        }catch let error as NSError{
            print(error)
        }

```

# まとめ
今回は、ユーザ登録、ログイン、ログアウトの実装方法について、ご紹介しました。
予め決められたクラスのメソッドを呼ぶだけなので、簡単に実装できて良いですね。
[Swift版] 今さら聞けないFirebase① 導入編

# はじめに
Firebaseとは、最近にわかに注目が集まっているMBaasのひとつです。
Googleに買収されたことで一気に知名度が上がりましたね。

出遅れ感はございますが、さっそくトライしてみたいと思います。
今回は導入編をご紹介します。

## できること
他社製のMBaasでできることは大概できます。

* Develop
 - Cloud Messaging
 - Authentication
 - Realtime Database
 - Strage
 - Hosting
 - Remote Config
 - Test Lab
 - Crash Reporting

* GROW
 - Notifications
 - App Indexing
 - Dynamic Links
 - Invites
 - Adwords

* EARN
 - AdMob

## 必要条件
・Xcode 7.0以降
・XCodeプロジェクトとBundleID
・CocoaPods 1.0.0以降

# 導入方法
1. 導入対象のプロジェクトを作成する
2. アプリの詳細情報を入力する
3. Firebaseをインストールする
4. 初期化コードを追加する

# やってみます！
## 1. 導入対象のプロジェクトを作成する
割愛します。

## 2. アプリの詳細情報を入力する
### 2.1. [Firebase console](https://firebase.google.com/console/)にアクセスする
<img width="1087" alt="01-01.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/42a7adfd-53a3-1219-96c9-27d17455069d.png">

### 2.2. プロジェクト名を入力する
<img width="485" alt="01-02.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/77269286-f38e-9a1b-b997-b63b9831a417.png">

### 2.3. 対象アプリを選択する
<img width="830" alt="01-03.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/98f35b8a-35da-dfd2-d66d-f32cd3e4c2c8.png">

### 2.4. Bundle IDを入力する
<img width="695" alt="01-04.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/ed61ba50-fe82-965c-a8c7-82f5d90020e3.png">

### 2.5. 設定ファイルをダウンロードし、プロジェクトに追加する
<img width="693" alt="01-05.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/ed964176-c3d6-299b-ab60-d33a487f0b48.png">

## 3. Firebaseをインストールする
Cocoa Podsを利用してインストールします

<img width="695" alt="01-06.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/a06a0d8e-1266-86b3-4f9c-ae6d6c6b3e98.png">

## 4. 初期化コードを追加する
AppDelegate.swiftに初期化コードを追加します

<img width="694" alt="01-07.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/1823532d-fb6a-b72c-1097-2bf9bf9be9e4.png">

# まとめ
以上で導入は終わりです。
導入が完了すると、下記のような画面が表示されます

<img width="830" alt="スクリーンショット 2016-07-30 8.34.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/611ec4aa-dba4-be6c-6be6-756e529778f4.png">

今後は、Firebaseの機能及び実装サンプルを少しづつご紹介していければと思います。
らずぱい motionEye (Web UIベースのカメラサーバ)

(2017-01-27追記) CSIカメラ(mmal service 16.1) と USBカメラ(USB 2.0 PC Camra)のカメラ2台にて。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/9074d1c4-b70a-82fe-6914-91b9e5fe352f.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/75594/86359f03-d41b-2615-7dca-a3fa3e11c737.png)

## 概要
- [motionEye](https://github.com/ccrisan/motioneye/wiki/Features)というのをラズパイに入れてみる。

- 機能 ([Features](https://github.com/ccrisan/motioneye/wiki/Features))
    - ウェッブベースで、モバイル・タブレットフレンドリーな、ユーザインタフェース
    - らずぱいのカメラモジュール(CSI)や、多くのUSBカメラとの互換性
    - IPネットワークカメラ対応
    - スケジュール動体検出で、eメールでお知らせ。
    - JPEG静止画、AVIで動画保存。
    - 低速度撮影(timelapse)動画
    - グーグルドライブやドロップボックスへファイルのアップロード

    \#　だそうです。全機能は確認してません。

- [スクリーンショット](https://github.com/ccrisan/motioneye/wiki/Screenshots)

## 環境
- Raspberry Pi 3
- `2016-05-27-raspbian-jessie-lite.img`
- USB2.0 Webカメラ BUFFALOのやつ.
- らずぱいのカメラモジュール使う場合は、`bcm2835-v4l2`を`/etc/modules`に追加しておく

    ```bash
grep bcm2835-v4l2 /etc/modules || echo bcm2835-v4l2 | sudo tee -a /etc/modules
```
- (2017-01-27更新) Raspberry Pi 2 + `2017-01-11-raspbian-jessie-lite.img` + USBカメラ + CSIカメラにて動作確認。

## 手順

1. いつもの (`sudo apt-get update; sudo apt-get upgrade; sudo raspi-config` )


2. motionEyeのインストール
    - [Install On Raspbian](https://github.com/ccrisan/motioneye/wiki/Install-On-Raspbian)にしたがって、インストール

    ```bash
    # 必要なパッケージ類のインストール 
sudo apt install -y python-pip python-dev curl libssl-dev libcurl4-openssl-dev libjpeg-dev libx264-142

    # motionのインストール
    # 2017-01-27: Raspbianのmotionいれて動くよ。
sudo apt install -y motion 

    # 2017-01-27: ↓でも動作確認済み
    # ffmpegのインストール
#wget https://github.com/ccrisan/motioneye/wiki/precompiled/ffmpeg_3.1.1-1_armhf.deb
#sudo dpkg -i ffmpeg_3.1.1-1_armhf.deb
    # motionのインストール.
#sudo wget https://github.com/ccrisan/motioneye/wiki/precompiled/motion-mrdave-raspbian -O /usr/local/bin/motion
#sudo chmod +x /usr/local/bin/motion
    
    # motioneyeのインストール
sudo pip install motioneye

    # motionの設定ファイル
sudo mkdir -p /etc/motioneye
sudo cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf

    # motionのメディアディレクトリ
sudo mkdir -p /var/lib/motioneye
 
    # initスクリプトの追加、motionEyeサーバ起動.
sudo cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service
sudo systemctl daemon-reload
sudo systemctl enable motioneye
sudo systemctl start motioneye
systemctl status motioneye
    
    ##########################################
# motionEyeをアップグレードするとき。
#
sudo pip install motioneye --upgrade
sudo systemctl restart motioneye
```

3. ブラウザからアクセス: `http://<らずぱいのIP>:8765/`
    - 初回ログイン<br>Usename: admin<br>Password:  (なし)

    ```shell-session:ポートの設定は、このへん。
pi@raspberrypi:~ $ cat /etc/motioneye/motioneye.conf  | grep -i ^port
port 8765
```
<!--
![motionEye01.png](https://qiita-image-store.s3.amazonaws.com/0/75594/2cbd93ca-e783-af70-aefa-26af2472c5e3.png)
-->

4. `You have not configured any camera yet. Click here to add one...`
=> のメッセージをクリック　=> 認識されているカメラが出てくるので、選んで `[OK]`
![motionEye02.png](https://qiita-image-store.s3.amazonaws.com/0/75594/f3d13695-0624-2863-e0b0-cea3aaca7e60.png)

5. adminとuserのパスワードを設定しときましょう。
AD2 > I2Cロジックを見てみた | アドレス0xA4の罠

```txt:動作環境
ESP8266 (気圧計で使用したユニバーサル基板. I2Cは4.7kでプルアップ)
Analog Discovery 2 (以下AD2)
WaveForms 2015 on Windows 8.1 pro(64bit)
```

## エピローグ

6:30の7of9
「先週に届いた某I2Cデバイスをサクッと動かそう。I2Cはいくつかやってきたので、もはや朝飯前([a peace of cake](http://ejje.weblio.jp/content/a+piece+of+cake))だ」

9:30の7of9 (朝飯はもちろん食べ終わっている)
「UARTでの動作は確認した。配線も正しいようだ。I2Cのアドレスは取説に従い0xA4にしている。何が問題なのか。。。」

そして、Analog Discovery 2を使うことにした。

## AD2でのI2Cロジック測定

### 配線

AD2のケースの下敷きに以下のような配線の説明図がある。
今回は「Digital I/O Signals」の0(ピンク色)と１(緑色)を使うことにした。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/5e786ac2-4ec9-ab61-753a-5ff259fc5752.png)

- AD2 > Digital I/O Signals 0
  - I2CデバイスのSCLに接続
  - ESP8266のIO5(SCL)に接続
- AD2 > Digital I/O Signals 1
  - I2CデバイスのSDAに接続
  - ESP8266のIO4(SDA)に接続

### WaveFormsの設定

- 左側のメニューの「Logic」を選択する
  - Logic 1のタブが開く
- Logic 1ウィンドウの左側の「Click to Add channels」を選択し、I2Cを選択
  - Data: DIO 1
  - Clock: DIO 0
  - Addを選択
- SCLの項目のT(初期値X)をクリックして、「Rising Edge」にする

RunボタンまたはSingleボタンでI2Cの波形が見れる。
波形を確定したいのでSignleボタンを使った。

## Code v0.1

取説を参照して、以下のESP8266用コードにしてみた。

```c:esp8266_160730_MSC-MOD20p1.ino
#include <Wire.h>

#define DEVICE_ADDRESS (0xA4)

void setup() {
  Serial.begin(115200);
  Serial.println("");

  Wire.begin();
  Wire.setClock(100000L); // 100kHz
}

void loop() {
  helloWorld();
  delay(3000); // msec
}

void readData() {
  Wire.requestFrom(DEVICE_ADDRESS, /* length= */1);  
  char code = Wire.read();
  delayMicroseconds(30);

  Serial.println(code);
}

void helloWorld()
{
  Wire.beginTransmission(DEVICE_ADDRESS);
  Wire.write(0x0A);
  Wire.endTransmission(); 
  delayMicroseconds(30);

  for(int loop=0; loop<3; loop++) {
    readData();
  }
}
```

以下の動作になるはずだったが、ならなかった。

- 0x0Aを送信
- !00というコードを受信


## 波形

AD2で測定した波形。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/25656f0b-d59a-8407-8dbe-6a19168084a8.png)

AD2で確認したところ以下の点に気づいた。

- アドレスが0xA4なのに0x24となっている

## アドレス0xA4の問題

I2C通信をするとき、7ビットのアドレスを指定する。

取説に「アドレス0xA4」と書かれているとする。

「7ビットの0xA4アドレス」というのはあり得ないと気づいた。
0xA4は`0b 1010 0100`になるので、8ビットは必要となる。

おそらく、「Read/Writeビットを足して8ビットとした上での0xA4」というのが正しいのだろう、と思った。

## code v0.2 > アドレス指定変更

### code

`#define DEVICE_ADDRESS (0xA4 >> 1)`
とすることにより7ビットのアドレス値にした。

```c:esp8266_160730_MSC-MOD20p1.ino
#include <Wire.h>

#define DEVICE_ADDRESS (0xA4 >> 1)

void setup() {
  Serial.begin(115200);
  Serial.println("");

  Wire.begin();
  Wire.setClock(100000L); // 100kHz
}

void loop() {
  helloWorld();
  delay(3000); // msec
}

void readData() {
  Wire.requestFrom(DEVICE_ADDRESS, /* length= */1);  
  char code = Wire.read();
  delayMicroseconds(30);

  Serial.println(code);
}

void helloWorld()
{
  Wire.beginTransmission(DEVICE_ADDRESS);
  Wire.write(0x0A);
  Wire.endTransmission(); 
  delayMicroseconds(30);

  for(int loop=0; loop<3; loop++) {
    readData();
  }
}
```

### 結果

I2C通信ができるようになった。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/ab58ffe9-df32-6c8a-d3a1-cb5807180e99.png)

```txt:シリアル出力
G
H
I
 
E
l
e
c
t
r
o
n
i
c
s
,
 
L
L
C
 


-
-
-
-
-
-
-
-
-
-
-
-
```

AD2がなかったら上記で1日をつぶしていたかもしれない。
これまででAD2の定価の3倍くらいは活躍している気がする。
[Xcode7] 「Unknown class xxxxx in Interface Builder file.」が出る

# 環境

以下の環境でのiOSアプリ作成

  * Xcode7
  * Swift

# 問題内容

Xcodeでビルドしたら下記メッセージがコンソールに出力された。

```
  Unknown class xxxxx in Interface Builder file.
```

「xxxxx」は、自分が追加したカスタムクラス名が入る。

自分は、ViewControllerのサブクラスで発生していた。

# 解決

ググるとこのケースは結構あるらしい。
原因は数パターンあるらしいが、色々試しても直らず途方にくれていたが、この[サイト](http://yoropipi.hatenablog.com/entry/2016/02/15/231430)の内容で解消できた。感謝。

    http://yoropipi.hatenablog.com/entry/2016/02/15/231430

## 原因

![before.png](https://qiita-image-store.s3.amazonaws.com/0/135429/1666d934-e395-47f7-a845-95ef0fe6e1de.png)

上記画像は、エラーが発生しているViewControllerを選択したときのインスペクタである。

カスタムクラスのModule名が「None」になっている。

## 解決方法

Moduleのセレクトボックスを選択してEnterを押下する。
下記画像のように「Current - yyyyy」と表示が変化すればOK。

![after.png](https://qiita-image-store.s3.amazonaws.com/0/135429/b1a3e780-757e-7616-bc0d-42636d90d0e9.png)

# 原因・解決方法いろいろ

私が遭遇したパターンの情報に辿り着くまで時間がかかったので、ここでまとめておく。

## パターン1:ビルドのターゲットになっていない。

「File -> New -> ...」のようにXcodeの機能を使用せずにドラッグ & ドロップすると、プロジェクトのビルド対象にならないらしい。

プロジェクトを選択し、「Build Phases」のCompile Sourcesに対象のファイルが入っていない場合には、追加すればOK。

## パターン2:storyboardの設定不備

カスタムクラスの場合、特に注意する。
本ケースでは、Moduleの設定がおかしかったが、Classの設定がおかしいケースもあると思う。

## パターン3:原因不明

  * 「Shift + Command + K」でビルド生成物をクリアする(全て1からコンパイルされる)。
  * Xcodeを再起動する。
  * シミュレータからアプリを削除して、再度コンパイル→実行する。
  * Macを再起動する。
郵便番号データの取得

ユーザーの登録画面など、郵便番号と住所の相互変換をする際は、日本郵便から提供されている郵便番号データ
http://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html
よりも、

こちらの郵便番号データ（加工済バージョン）
http://zipcloud.ibsnet.co.jp/
がお勧めです。

これをDBに登録して画面から参照すれば、相互変換が実現できます。

郵便番号データは毎月更新されているようですので、この加工済みバージョンのCSVファイルをDBに流し込むツールを作って上げればメンテも簡単です。
[Elasticsearch]Cluster Healthのstatus が yellow となる

# バージョン

+ Elasticsearch 2.3.4
+ ノードは一つ
+ Kibana から Elasticsearch へ接続済み

# 内容

Elasticsearch を構築したぞ!となって Cluster Health を確認したら以下のように Status が yellowに

```bash
$curl http://10.66.35.30:9200/_cluster/health?pretty=true
{
  "cluster_name" : "elasticsearch",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 1,
  "active_shards" : 1,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 1,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 50.0
}
```

そもそも yellow とはどのような状態か。こちらは公式ドキュメントに記載あり。

[Cluster Health](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html)

>  yellow means that the primary shard is allocated but replicas are not

なるほど。プライマリーシャードは割り当たっているけどレプリカシャードが割り当たってないと。なので、unassigned_shards も 1 で active_shards_percent_as_number も 50　になっているのだろう。

今回の場合には kibana 用のインデックスがあるが、こちらの設定で active_shards_percent_as_number が1となっており、レプリケーションを作るようになっているが、ノードがなく作成できないため、このようになっているっぽい。

```bash
$curl -s http://10.66.35.30:9200/.kibana/_settings | jq
{
  ".kibana": {
    "settings": {
      "index": {
        "creation_date": "1469610418434",
        "number_of_shards": "1",
        "number_of_replicas": "1",
        "uuid": "CMdCyVezSJeA90KmUVNiTw",
        "version": {
          "created": "2030499"
        }
      }
    }
  }
}
```

# どうすればよい?

ノードを追加すればOK。
実際別環境でノードを追加したら status が green になった。
number_of_replicas を 0 にするという方法もあるかもしれないが(試してない)、出来たとしてもこれは良い方法ではない気がする。。。
Chaincodeのデプロイ方法（Githubの場合、ローカルの場合）


なぜか分からないけど、githubの場合には全部小文字、ローカルの場合には小文字大文字区別するみたい。

##githubから取得する場合
```
curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d "{
  \"jsonrpc\": \"2.0\",
  \"method\": \"deploy\",
  \"params\": {
    \"type\": 1,
    \"chaincodeID\": {
      \"path\": \"https://github.com/kkoiwai/consentform\"
    },
    \"ctorMsg\": {
      \"function\": \"init\",
      \"args\": [
      ]
    }
  },
  \"id\": 0
}" "127.0.0.1:5000/chaincode"
```

## ローカルで取得する場合( $GOPATH/src/下のディレクトリ )
```
curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d "{
  \"jsonrpc\": \"2.0\",
  \"method\": \"deploy\",
  \"params\": {
    \"type\": 1,
    \"chaincodeID\": {
      \"path\": \"github.com/kkoiwai/ConsentForm\"
    },
    \"ctorMsg\": {
      \"function\": \"init\",
      \"args\": [
      ]
    }
  },
  \"id\": 0
}" "127.0.0.1:5000/chaincode"

```
プログラミングド素人のデザイナーがJava入門してみた_その3

## 前回までのあらすじ
[プログラミングド素人のデザイナーがJava入門してみた_その2](http://qiita.com/iwashi0830/items/f6a7494f59f85695c491)

- if文やfor文、配列などがJavaScriptと同様に書けることがわかった

## 教科書
[ドットインストール](http://dotinstall.com/)さまさま

- [#14 データ型とメモリの関係を理解しよう](http://dotinstall.com/lessons/basic_java_v2/37714)

- [#15 基本データ型と参照型を理解しよう](http://dotinstall.com/lessons/basic_java_v2/37715)

- [#16 メソッドを使ってみよう](http://dotinstall.com/lessons/basic_java_v2/37716)

- [#17 メソッドをオーバーロードしてみよう](http://dotinstall.com/lessons/basic_java_v2/37717)


## データ型とメモリの関係
- データ型には**基本型(プリミティブ型)**と**参照型**がある
- メモリとは**番地のついた連続したデータを置く為の領域**

### 基本型(プリミティブ型)
- 基本型の変数には値そのものが格納される
- byte
- short
- int
- long
- float
- bouble
- boolean
- char

### 参照型
- 参照型の変数にはメモリの番地が格納される
- ↑以外
- String
- Array
- Class

など

- 参照型の変数には値そのものは格納されていないので、挙動に注意が必要
- 値が格納された**メモリの番地のメモ**が格納されているイメージ?

```
public static void main (String[] args){
  int[] arr1 = {1,3,5}; //arr1はメモリに格納された{1,3,5}を参照
  int[] arr2 = arr1; //arr2はarr1が参照している{1,3,5}、つまり★同じもの★を参照
  arr2[1] = 10; //大元をいじっているので、arr1もarr2も影響を受ける

  System.out.println(arr1[1]);//10
  System.out.println(arr2[1]);//10
}
```

##メソッド
###メソッドの定義

```
public static [returnする値の型] [変数名]([引数の型] [変数名]){
  hogehoge;
}
```

- 返す値(returnしない)がない場合は、```void```

```
public static void sayHi(){
  System.out.println("Hi!");
}
```

- 文字列returnする場合は```String```と明記

```
public static String sayHi(String name){
  return "Hi! " + name;
}
```

###変数の有効範囲
- メソッド内で定義した変数は、そのメソッド内でのみ有効

```
public class HelloWorld {
  public static void hoge(){
    int x = 1;
  }

  public static void main (String[] args){
    System.out.println(x); //xはhoge()内で定義されているので使えない
  }
}
```

##メソッドをオーバーロードする
- 引数の個数や値が異なれば、同じメソッド名でも別のものとして登録できる

```
public class HelloWorld {
  public static void hoge(){ //メソッド名hoge
    System.out.println("引数なし");
  }

  public static void hoge(String msg){ //こちらもメソッド名hoge
    System.out.println("引数は " + msg + " です");
  }

  public static void main (String[] args){
    hoge(); //引数なし
    hoge("こんにちは"); //引数は こんにちは　です
  }
}
```

## [@iwashi0830](https://twitter.com/iwashi0830)はこう思った
- 変数には常に値そのものが格納されていると思っていたので、参照型の話は新鮮だった
    - 結構複雑な話な気がするが、ドットインストールの説明がわかりやすかったので理解できた
- メソッドを定義するとき、JavaScriptと比べていろいろと書かなければいけないことが多い
- 常に型を明示していくのはけっこうめんどう
- メソッドをオーバーロードするのってどんな場面で役立つのかわからん
ES6でPromiseのレートリミット実装


DynamoDBのようなスループットを気にする必要があるAPIにアクセスする場合、API実行に実行回数制限をかけたくなる場合があります。npmに沢山ライブラリが公開されていますが、Promise関数にレートリミットを付与したクロージャーを返す実装を書いて使うことにしました。

例えばあるPromiseを返す関数の実行を秒間20回に制限したい場合、次のように書くと設定値を超える回数の実行をsleepで調整します。
rateLimit関数では結果的に引数の関数を実行するクロージャーを返しているので、関数の使い方は変わりません。


```js
const testFunctionRateLimit = rateLimit(testFunction, 20, 1000);
```

## 実装

ソースコード:

```js
// ES2015以外のPromiseライブラリでも動作可
// import Promise from 'bluebird';

const delay = (ms) => {
  return new Promise((resolve) => {
      setTimeout(resolve, ms);
  });
};

const rateLimit = (func, rate, inMs) => {
  let executedHistories = [];

  const wrapped = (...args) => {
    const now = Date.now();
    executedHistories.push(now);
    executedHistories = executedHistories.filter((executedAt) => {
      return (now - executedAt) < inMs;
    });

    if (rate < executedHistories.length) {
      const sleepTime = inMs - (now - Math.min(...executedHistories));
      return delay(sleepTime).then(() => {
          executedHistories.pop();
          return wrapped(...args);
      });
    } else {
      return func(...args);
    }
  }
  return wrapped;
};
```

### 動作確認

ソースコード:

```js
// 動作確認用の関数を定義
const startTime = Date.now();
const testFunction = (arg1, arg2, arg3) => {
  return Promise.resolve().then(() => {
      const elapsed = Date.now() - startTime;
      console.log('arg1:', arg1, ', arg2:', arg2, ', arg3:', arg3, 'elapsed:', elapsed);
  });
};

// testFunctionの実行を1000msに20回に制限
const testFunctionRateLimit = rateLimit(testFunction, 20, 1000);

// 直列に100回実行
let promise = Promise.resolve(null);
for (let i = 0; i < 100; i++) {
  promise = promise.then(() => {
    return testFunctionRateLimit(i, i + 1, i + 2);
  });
}

promise.then(() => {
  console.log('done');
});
```

出力:

```
arg1: 0 , arg2: 1 , arg3: 2 elapsed: 2
arg1: 1 , arg2: 2 , arg3: 3 elapsed: 3
...
arg1: 18 , arg2: 19 , arg3: 20 elapsed: 5
arg1: 19 , arg2: 20 , arg3: 21 elapsed: 5
arg1: 20 , arg2: 21 , arg3: 22 elapsed: 1004
arg1: 21 , arg2: 22 , arg3: 23 elapsed: 1005
...
arg1: 38 , arg2: 39 , arg3: 40 elapsed: 1006
arg1: 39 , arg2: 40 , arg3: 41 elapsed: 1006
arg1: 40 , arg2: 41 , arg3: 42 elapsed: 2006
arg1: 41 , arg2: 42 , arg3: 43 elapsed: 2006
...
arg1: 58 , arg2: 59 , arg3: 60 elapsed: 2007
arg1: 59 , arg2: 60 , arg3: 61 elapsed: 2007
arg1: 60 , arg2: 61 , arg3: 62 elapsed: 3003
arg1: 61 , arg2: 62 , arg3: 63 elapsed: 3003
...
arg1: 78 , arg2: 79 , arg3: 80 elapsed: 3006
arg1: 79 , arg2: 80 , arg3: 81 elapsed: 3006
arg1: 80 , arg2: 81 , arg3: 82 elapsed: 4002
arg1: 81 , arg2: 82 , arg3: 83 elapsed: 4002
...
done
```
機械学習を用いたオレオレFXシステムトレーディングプログラムのロジック解説

"xgboostによる決定木アンサンブル学習でFXのシステムトレードするコードを書いた"
http://qiita.com/ryo_grid/private/757fa93fc479439b2676

の解説をまともにやってなかったのでロジックを解説します。
この内容は、

"ディープラーニングでFXのシステムトレーディングをするコードを書いた"
http://qiita.com/ryo_grid/items/7746528f8cae8026b936

とも基本的には共通(ただ回帰を行うアルゴリズムが異なるだけ)です。

ソースコードは以下です。
https://github.com/ryogrid/fx_systrade/blob/2ca1faf30620d65cf5768a5bd6353c656aeb51c5/xgboost_trade.py

■xgboostとは
こちらが詳しいです。
http://tjo.hatenablog.com/entry/2015/05/15/190000

要は、入力したデータ群から、「何か」を分類できる分類器ですね。
最近流行りの機械学習のライブラリです。
分類のルールを教師データから学習することができます。
なお、内部のアルゴリズムは決定木学習？をブースティング？でやっているらしいです。
ここらへんは私も勉強不足でそこまでちゃんと理解していません・・・。

■やっていること
テクニカル指標群+αを特徴量として入力し、回帰にって為替が上昇・下降するかの2値分類を行う。
この結果を主軸に、少し工夫してトレーディングを行っていく。

テクニカル指標群から予測を行うというアイデアですが、最初は移動平均線やボリンジャーバンドにタッチしたらうんぬんみたいなのを試していたのですが、うまくいかず、それであれば、わざわざ小難しいことしないで、過去の一定期間のチャートの情報を集約したテクニカル指標を見てやれば、チャートの動きも読めるのでは、と考えたのが経緯です。

■プログラムの流れ
1. 学習
過去の為替データからテクニカル指標群+αと入力期間から3足後が上昇するか下降するかを求めて、そのペアをたくさん作ってxgboostに学習させる。
過去に読んだ論文で、上下を反転させたチャートについても学習するとパフォーマンスが良くなると書いてあったので、そういうこともしています。

入力しているテクニカル指標群については下の記事で整理しています。
+αは、前日との差分や当日までのチャートのタイプ(私が定義したもの)です。

"シストレプログラムで特徴量として利用しているテクニカル指標を整理してみた"
http://qiita.com/ryo_grid/items/6bb1a95e47705c5ebdbb

チャートタイプの分類については下の記事を参照ください。

"オレオレアルゴリズムで時系列データ（為替データ）のおおまかな形状を分類してみた"
http://d.hatena.ne.jp/kanbayashi/20160301/p1

2.予測及びポジションの購入
学習の時と同じようにして入力データを作成し、予測を行います。予測結果はスカラ値として得られ、1に近いほど上昇する可能性が高く、0にちかいほど下降する可能性が高いことを示します。
この結果が閾値(High)より高ければ買いポジションを、閾値(Low)より低ければ売りポジションを持ちます。
これが基本的な考え方ですが、他にもボラリティが高い場合は見送る、現時点までのチャートタイプが大体単調での減少か、増加ではないと見送るといった条件が加えられています。買いポジションを持つ場合は過去のチャートが減少タイプでないとならず、売りはその逆といった条件になっているので、このロジックは逆張りを狙った動作をするものだと言えます。
なお、ポジションは全資産を用いて購入し(レバレッジ1倍)ます。このため、上記プログラムは複利で資産が変化します。
また、ある時点でポジションは最大1つしか持ちません。

3.決済
決済は購入後常に試みます。その際にチャートタイプが大体単調増加・減少であれば決済します。この際、勝ち負けは見ておらず、どちらであっても決済してしまいます。

■バックテストの結果（参考）
USDJPYで、スプレッド0.3銭、レバレッジ1倍、初期資金100万円で上記プログラムを動作させた結果が、資産推移は以下のようになりました。学習期間が2001年～2002年冒頭、バックテスト期間がそれから2008年末までです。データは5分足です。

ベースライン（同じタイミングで全て買いポジを購入した場合）
![all_long.png](https://qiita-image-store.s3.amazonaws.com/0/12325/7b623aec-6b9a-2797-b939-58e50d4f19ef.png)

ベースライン（同じタイミングで全て売りポジを購入した場合）
![all_short.png](https://qiita-image-store.s3.amazonaws.com/0/12325/0323445b-c438-31a8-673f-d75f619b2556.png)

xgboostで予測した方のポジを購入した場合
![1093c81c770524e53e0ee4acc883d05e.png](https://qiita-image-store.s3.amazonaws.com/0/12325/493a4900-d274-3c59-5b0f-4a75a2ccdc53.png)

■余談
一番上の記事のリンク先を見てもらえば分かりますが、試行錯誤の途中で意図しない動きをするコードを書いてしまった際に上記の決済ルールを見つけました。バグから有効なトレードルールが見つかるというのは興味深いですね。

■お願い
上記のgithubリポジトリをcloneしてきて、必要なライブラリをインストールすればすぐ動かせるようになっています。
改良してプルリク等もらえたら、うれしいです。
その他にも、コメント欄でのアドバイスやコメントなども歓迎します。
よろしくねがいいいたします。

■謎
動かしてみると買いポジ保有が圧倒的に多く、売りポジ保有が行われることはあまりありません。
これはなぜなのかは未だよくわからず。逆張りの場合、買いの方が読み易い傾向にあるってことなのかなあ。
[Node.js]Basse64エンコード、Base64デコードしてみた

画像のBase64エンコード、デコードを Node.js(v4.4.4) で試した際のメモです。 

以下の「1」、「3」について Node.js で書いてみました。

1. xxx.png を一旦エンコードしてDBなどに保存。
2. DBなどから文字列を取得し、encoded.pngとして保存
3. 再度デコードして保存。pngとして表示できる

# エンコード

+ [fs.readFile](https://nodejs.org/api/fs.html#fs_fs_readfile_file_options_callback)


```encode.js
var fs = require('fs');
fs.readFile('xxx.png', 'base64', function(err, data) {
  if (err) throw err;
  // どこかに文字列として保存
  console.log(data);
});
```

# デコード

+ [Buffer.from](https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_str_encoding)
+ [fs.writeFile](https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback)


```decode.js
var fs = require('fs');
fs.readFile('encoded.png', 'utf8', function(err, data) {
  var decode = new Buffer(data,'base64');
  fs.writeFile('xxx.png', decode, function(err) {
    console.log(err);
  });
});
```
python2.7,beautifulsoupでnetkeiba.comの競馬情報をｽｸﾚｲﾋﾟﾝｸﾞする時に、馬名のﾀｸﾞのtxt_lだけがNoneとなり苦慮しています

初めまして、プログラミング超初心者でございます。

python2.7でbeautifulsoupを用いて、netkeiba.comから競馬情報（騎手の成績）をｽｸﾚｲﾋﾟﾝｸﾞしています。

定法に基づきまして、『検証』からページのツリー構造を把握して、プログラムを作成しました。 
馬名部分の構造が<td class="txt_l"> 
<a href="/horse/2011105901">テンテマリ</a></td> #テンテマリは馬名
 
となっておりましたので、
"txt_l"を拾い出せるようにスクリプトを作りました。

しかしながら、 
馬名以外の"txt_l"は全部ｽｸﾚｲﾋﾟﾝｸﾞ出来るのですが、

馬名部分だけがNoneと返ってまいります。
 
エラーメッセージではありませんが、
何が原因でNoneとなるのかが、どうしても分かりません。 

ちなみに、馬名以外で、ほぼ同様の構造を持つ、『レース名』、
構造は 
<td class="bml txt_l"> 
<a href="/race/201603020812/" title="3歳上500万円下">3歳上500万円下</a> 
(3歳上500万円下はレース名) では、問題なくレース名を拾うことが出来ました。

小生の作成したプログラム

 -*- coding:utf-8 -*-

import urllib2 
import codecs

from bs4 import BeautifulSoup

tpl_url='http://db.netkeiba.com/?pid=jockey_detail&id=00663&page={0}'

for i in xrange( 1, 2 ): 
url=tpl_url.format( i ) 
soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml")

tr_arr = soup.find('div', {'id':'contents_liquid'}).findAll('tbody')

for tr in tr_arr:

lrg1 = tr.findAll('td',{'class':'txt_l'})

for tr1 in lrg1: 
print tr1.string

試したこと

馬名以外の('td',{'class':'txt_l'})に準ずる『レース名』は、うまく拾うことが出来ました。

lrg1 = tr.findAll('td',{'class':'txt_l'}) 

聡明な皆様、

上記のスクリプトで馬名を得ることが出来ない理由、併せて馬名を拾えるスクリプトを御教示くださいますよう、よろしくお願いいたします！

失礼いたします。
技術英語 > Long routines are [far from extinct], however. / far from ideal

@ Code Complete (No. 6172 / 36077)
> How Long Can a Routine Be?

> Long routines are <font color=red>far from extinct</font>, however.

far from ideal : 理想からほど遠い

と関連して上記の場合 far from extinct >> 絶滅からほど遠い >> しっかり生き残っている、とでも訳せそうだ。
レスポンシブ　メディアクエリ

そのままコピペで使える用にメモ。
## メディアクエリのメモ
```
@media screen and (min-width:480px) { 
/*　画面サイズが480pxからはここを読み込む　*/
}
@media screen and (min-width:768px) and ( max-width:1024px) {
/*　画面サイズが768pxから1024pxまではここを読み込む　*/
}
@media screen and (min-width:1024px) {
/*　画面サイズが1024pxからはここを読み込む　*/
```

## sassの@mixin用
```
@mixin mediaSP {
  @media screen and (min-width:480px) and (max-width:$break-pointSP) {
    @content
  }
}

@mixin mediaT {
  @media screen and (min-width:$break-pointSP) and (max-width:$break-pointPC) {
    @content
  }
}

@mixin mediaPC {
  @media screen and (min-width:$break-pointPC) {
    @content
  }
}

```

参考:http://qiita.com/kyaido/items/828906ffa7198e99d0b7
sassの@mixinの引数を文字列に割り当てる

使う場面は今のところ、@mixinを使いつつの引数で背景画像を変更したい時。よく忘れるのでメモ。
## mixinの指定
背景画像を指定する@mixinがあって

```scss
@mixin bg {
  background-image: url("./../img/bg01.jpg");
  background-size: cover;
  background-position: center;
}
```
bg01.jpgを使う場所ごとに変更したい時は
インターポレーション → #{ } を使うことで背景画像を指定している文字列に引数を埋め込む事が可能。

こんな感じ。($img-num:01)の：01は初期値。

```scss
@mixin bg($img-num:01) {
  background-image: url("./../../img/bg#{$img-num}.jpg");
  background-size: cover;
  background-position: center;
}
```
## 呼び出す
```scss
#sample {
  @include bg(02);
}

```
これでbg02.jpgが背景画像に指定される。
もし引数に何も指定してない時は初期値の01になる。
初期値を指定してない時はちゃんと引数入れてねっていうエラーが出る。

参考：http://sass-lang.com/documentation/file.SASS_REFERENCE.html#interpolation_
jade(pug)でよく使う書き方。

jadeのよく使う特有の書き方、ものすごく忘れるので自分用メモ。

## 改行せずに要素の入れ子をつくる（主にリストとかリンク、li>a）
タグの後ろに「: ＋ 半角スペース」いれる

```pug
nav
  ul
    li: a(href="#") リンク
```

## 改行のbr

```pug
p ほげほげ
 br
 | ほげほげほげ
 span ぴよぴよ
   br
   | ぴよ
 br
 | ほげ
```
↓入れ子関係ややこしいけど改行に気をつければ子のタグにも改行入れれる

```html
<p>ほげほげ<br/>ほげほげほげ<span>ぴよぴよ<br/>ぴよ</span><br/>ほげ</p>
```
## 要素の繰り返し
### for文を使う場合
```pug
.content
  - for (var i = 0; i < 3; i++) {
    .block
      h3(class="test") 見出し
      p テキストテキスト
  - }
```

### eachを使う場合
```pug
- var list = ["apple", "banana", "orange"]
ul
 - each fruit in list
    li= fruit
```

参考：[【Pug】ゴリラでもわかるJade改めPug入門 – Snaplog](https://blog.mismithportfolio.com/web/20160326pugbegin)
ネットワーク設定をミスってもrebootで元に戻って欲しい場合

遠隔地のubuntuをネットワーク設定変更したいが、
失敗するとリモート接続できなくなる場合の方法。

## cronに仕込む

```bash:
cd /etc/network/
cp -a interfaces interfaces.bak
vi interfaces
cp -a interfaces ~/interfaces
crontab -e
```

```bash:cron
@reboot (cd /etc/network/; cp -a interfaces.bak interfaces)
# 念の為以下も
6 * * * * (cd /etc/network/; mv interfaces.bak interfaces && reboot)
```

OS再起動し問題なければ
interfacesを消されないようにcron設定を消す。
rubyのtrunkをさっくりbuildしてchrubyから使えるようにする

推奨できる物かは知らないけど個人的に楽

Mac OS X + zsh + chruby

```zsh
ruby_version=$(grep '#define RUBY_VERSION' version.h | grep -o -E '[0-9.]+')
ruby_bin=ruby-${ruby_version}dev.$(git rev-parse --short trunk)
./configure --prefix="$HOME/.rubies/$ruby_bin" --disable-install-doc --with-openssl-dir="$(brew --prefix openssl)"
make install
source /usr/local/share/chruby/chruby.sh
chruby "$ruby_bin"
```
Make Fortran Great Again！

![MakeFortranGreatAgain.png](https://qiita-image-store.s3.amazonaws.com/0/44522/a9bff20a-18b8-85f1-8548-7fe6796498cc.png)

ご自由にお使いください。


#Fortran Fortune Teller
あなたの運勢を Lucky GO TO 文で占います。 

```fortran
    program Fortune
      implicit none
      real :: x
      integer :: m
      call random_seed()
      call random_number(x)
      m = 4 * x
      select case (m)
      case (0)
        print *, 'あなたのラッキー GO TO 文は「単純 GO TO 文」です。'
        print *, '世間の常識にとらわれない自由なあなたは、どこへでも好きなところへ行きましょう。'
        print *, 'FORTRAN66 なら DO LOOP の中へも飛び込めます！（拡張 DO LOOP）'
      case (1)
        print *, 'あなたのラッキー GO TO 文は「計算型 GO TO 文」です。'
        print *, 'Fortran95 規格で、禁止予定文法となりました。'
        print *, '合法である今のうちにどんどん使いましょう。'  
      case (2)
        print *, 'あなたのラッキー GO TO 文は「割り当て型 GO TO 文」です。'
        print *, 'Fortran95 規格で、禁止文法となりました。'
        print *, 'GO TO 文は無害だと信じるあなたは、脱法 GO TO 文を思う存分満喫してください。' 
        print *, 'C  '
        print *, '      ASSIGN 420 to LABEL'
        print *, '      GO TO LABEL '
        print *, '  420 CONTINUE  '
      case (3)
        print *, 'あなたのラッキー GO TO 文は「選択戻り RETURN 文」です。'
        print *, 'Fortran90 規格で、禁止予定文法となりました。'
        print *, 'サブルーチンから戻る時 CALL された位置には戻ったりしない。'
        print *, 'あなたはさすらいの旅人、故郷を捨てた放浪者。'
      case default
        print *, 'アブノーマル・エンド'
      end select  
      stop 
    end program Fortune
```
Toppers/ASP for Renasas RX 文字コードをUTF-8にしました

# すみません、文字コードをUTF-8に統一させてください。
　LinuxとWindowsの環境で作業している関係で文字化けが頻発しており、修正にかなりの工数を取られるため文字コードをUTF-8に統一しました。
　すみません、次にpullするとすべてのファイルが更新されます。使っていただいている方にはご迷惑をおかけしますがご容赦ください。
Ruby初心者がrails5チュートリアルをやってみた。(1)

チュートリアルを2回以上やり込むのが上達へのベストプラクティスらしいので、Rubyistを目指す人は一緒に頑張りましょう。


##チュートリアル概要 〜第1章〜
- 環境構築＆動作確認
- railsの仕組み
- gitの使い方と本番環境


チュートリアルを一通りやる事で、アプリを作ってネット上に公開するまでを体験できるらしい。

##事前準備
[Google](www.google.co.jp) アカウント作成。*開発用にアカウントを分ける人用。
[Bitbucket](http://bitbucket.org) アカウント作成。*GitHubでもいいけどチュートリアルではこれ。
[Cloud9](https://c9.io) アカウント作成。*ローカル環境構築した人はいらないけど定番ルートなので押さえておく。
[Heroku](https://www.heroku.com) アカウント作成。*AWSでもいいけどRubyist御用達らしい？？

##ローカル環境
[Macの場合](http://qiita.com/hirotamz/items/036270a695ef6dd24b24)

##Cloud9環境


##gitの使い方
ソース管理をしながらのプログラミングは必須。チームに迷惑をかけない為にも、自分が迷子になったとしても直ぐに戻って来れるよう徹底的に癖をつけよう！！

1. ソースコードの分岐(ブランチ)を作成。
2. ブランチの切替を確認(本流→分岐)
3. ブランチの状態を確認(分岐側)
4. 変更内容をブランチに保存。 ＊ここまでが新人の役割。
5. ブランチを切替。(分岐→本流)　＊ここから先はチームリーダー。
6. ソースコードの合体。(本流+分岐)　
7. ブランチの削除。

>$ git checkout -b ブランチ名

>$ git branch

>$ git status

>$ git commit -a -m "変更内容"

>$ git checkout master

>$ git merge ブランチ名

>$ git branch -d ブランチ名


##チュートリアルを読みながら進める。
[Ruby on Rails4チュートリアル(日本語)](http://railstutorial.jp/chapters/beginning?version=4.2)
[Rails5 tutorial(本家：英語)](https://www.railstutorial.org/book/beginning)

Railsアプリ雛形を作成 ＊testはRSpecにしたので省略。
>$ rails new プロジェクト名 --skip-test

>$ cd ./tutorial


###Gemfileを変更する。
RSpecと自動監視、デバック用のgemを追加。
少しチュートリアルから変更してます。

>group :development, :test do
&nbsp;  gem 'byebug', platform: :mri
&nbsp;  gem 'rspec-rails'
&nbsp;  gem 'rspec-core','>=3.4.4'
&nbsp;  gem 'guard-rspec'
&nbsp;  gem 'factory_girl_rails'
&nbsp;  gem 'capybara'
&nbsp;  gem 'pry-rails'
&nbsp;  gem 'sqlite3' 
>end  

###Gemをインストールする。

>$ bundle install

###ローカルWebサーバ有効化
>$ rails server

###DB初期化
>$ rails db:migrate RAILS_ENV=test


###自動監視の初期化と有効化
>$ rails g rspec:install

>$ bundle exec guard init rspec

[spec_helper.rb](http://qiita.com/hirotamz/items/036270a695ef6dd24b24)に記述追加

>$ bundle exec guard


##gitの初期設定＆ソース登録
事前にbitbucket.orgでアカウントを作っておくこと。
>$ git config --global user.name "XXX"

>$ git config --global user.email xxx@xxx.xx

>$ git init

>$ git add -A

>$ git status

>$ git commit -m "Initialize repository"

>$ git remote add origin git@bitbucket.org:アカウント名/アプリ名.git

>$ git push -u origin --all


ローカルに設定したリモートアカウントを再設定する場合は、
>$ git remote set-url origin git@bitbucket.org:アカウント名/アプリ名.git


###本番環境herokuへの登録
事前にherokuアカウントを作っておくこと。
herokuコマンドツールも入れておくこと。
>$ heroku version

>$ heroku login

>$ heroku keys:add

>$ heroku create

>https://勝手に生成されるアプリ名.herokuapp.com/ | 
>https://git.heroku.com/勝手に生成されるアプリ名.git

>$ heroku rename 新しいアプリ名

>$ git push heroku master

>$ heroku logout

*ルーティング設定しないでHerokuにアップするとエラーになる。

*SQLite3はDevelopment側に入れないとエラーになる。

*アプリ名がURLなので命名に注意。https://アプリ名.herokuapp.com

*gitでコミットしたソースをherokuに上げるのが基本。


###以降のチュートリアル進め方

- ソース分岐
- ソース変更
- ローカルWebサーバで動作確認
- ソース合体
- ソース管理元へUp
- 本番環境へログイン
- 本番環境へソース適用
- 本番環境で動作確認
- 本番環境からログアウト
勘違いしていたGit stash

### いままでものすごく勘違いをしていた

もしかしたら、ほかにもいる？いや、きっと俺だけだと思う。。。

```
git stash
```
とは何かについて、まーほとんどのひとはわかっているとおもう。

gitでバージョン管理している場合、作業分を一時的にセーブしたりする。
また、その作業分をセーブしながら、　**作業を隠してくれる。**

##### 何を勘違いしていたのか。
**git stashというものは作業をなかったことにするものだと思っていたのだ。**

例えば、途中までやっていたけど、いっかいこの作業分いらないなーってなときに

```
git stash
```
をしてやり直したりするのに使っていた。

しかし、本当は違うらしい。（というよりこれは基本だと思う）

### git stashの本当の使い道

> 作業を一度隠すためのgit stash

使いどき
* 途中で、違うタスク（緊急）な奴が降ってきた時に、今までの差分をセーブして、隠す。

> 代替としては一度commitしてからまとめるのもあり。

* テストファースト　TDD

> うん？ってなる人もいるかもしれない。
> 最近では？テストを最小に記述してからapplication codeを書こうみたいな。
> だけど実際はテスト書く前にapplication codeを書くときもあるだろう。
> そのときにapplication codeのみをgit stashして一度隠してからテストをはしらせてみて、失敗することを確認してから、もう一度git stash popで復元して、テストを走らせるみたいな流れ。
> やりたいことはテストファーストとかわらないと思う。

##### 言い忘れたけど、実際にいらない修正分もstashしたりしてもいいとは思う。まーcheckoutでもいいか。。。

って感じで、最近学んだ。

それは違うだろー！！！などの意見などあればお願いします。
sedコマンドでファイルの先頭行に文字列を挿入する

ファイルの末尾に追記するなら、echoでリダイレクトですが先頭行に追記するときってどうするのかな？となったのでメモしておきます。

# sedコマンド
以下のコマンドで、memoファイルの先頭行に「naruhodo」を追記することができます。

```
$ sed -i '1s/^/naruhodo\n/' memo
```

本処理に必要なオプションは以下のとおりです。

|オプション|説明|
|:---:|:----|
|-i|ファイルを指定して処理を行う|
|s|sコマンドの前に数字を置くことで対象行を絞って置換を行う|

# 動作確認
以下の内容で処理を実施する。

```
$ echo 'the' > memo
$ echo 'world' >> memo
$ sed -i '1s/^/naruhodo\n/' memo
```

結果を確認します。

```
$ cat memo
naruhodo
the
world
```

naruhodoをちゃんと先頭行に挿入できました。

# 訂正

もっとシンプルな書き方があるとご指摘いただきました。

```
$ sed -i '1inaruhodo' memo
```

これは簡単だ。。。
ld と ld.gold のリンクの速さを比較した話

ベンチマークのスクリプト類は [Githubにあります](https://github.com/YusukeSuzuki/ld_gold_benchmark)。

ld.gold についてとベンチマークの動機
----------------------------------

C++で作業をしているとリンクの遅さがストレスになります。OpenCVみたいな複数の共有ライブラリを作るようなプロジェクトの場合は顕著になります。オブジェクトファイルへのコンパイルは `make -j9` のように並列で行えばよいのですが、リンクは並列に行えないためにボトルネックとなります。

2012年ごろに `gold`(`ld.gold`) というリンカが出てきました。Google発だそうです。現在は `binutils` に入っています。既存の `ld` に比べて5倍ほど速いそうです。それだけ速いなら常用できないかと試しにベンチマークをとりました。

ベンチマークの方法
----------------------------

- `std::vector<some_type_XXXX>` を使用するオブジェクトファイルを2000個作る
- 上記オブジェクトファイルが提供する関数をすべて `main()` で使用する
- これらのリンクにかかる時間を `time` コマンドで計測する

使用法と注意
----------------------------

`binutils` の一部になっているので `gcc` から使用できます。リンク時に `-fuse-ld=gold` を指定してください。環境変数`LD`に`ld.gold`を指定してもよいという記事を見かけましたが自分の環境ではうまくいきませんでした。

`ld.gold` はELF専用です。Windows用のバイナリ出力などには使用できません。

結果と感想
--------------

Core i7-4770 3.40GHz、VMWare上で4コア、16GB RAM、HDD上のUbuntu 14.04。`ld` と `ld.gold` との相対が重要です。

人工的なコードのせいか `ld.gold` の方がだいたい6倍くらい速いです。可能な状況では `ld.gold` を使用していきたい気分です。

最近LLVMチームが `lld` というリンカを発表したそうです。まだ試すことができていませんが環境が整ったら試したいところです。

```text
# ld の場合(sec)
4.84
4.55
4.56
4.55
4.73
```

```text
# ld.gold の場合(sec)
0.73
0.72
0.75
0.72
0.73
```
Raspberry Pi にnode brewを使ってnode.jsインストール

#概要
node brewを使ってnode.jsをインストール

#環境
Raspberry Pi 2 Raspbian

#nodebrewをインストール
```
$curl -L git.io/nodebrew | perl - setup
$echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bashrc
$source .bashrc
```
#nodebrewを使ってnode.jsをインストール

```
$nodebrew ls-all
````


インストール可能なnode.jsのバージョンを確認

v4.4.4をインストールする場合

```
$nodebrew install-binary v4.4.4
```
でv4.4.4のバイナリがインストールされる

※もしエラーが出るならnodebrew install v4.4.4のようにする
ただし、ビルドに2時間近く時間がかかってしまうので注意
```
$nodebrew use v4.4.4
```
使用するnodeのバージョンを指定する
```
$node -v
```
で、v4.4.4 と出力されていればインストール完了
bootstrap3 DatetimePickerを使ったときに迷ったのでメモ

##bootstrap3 DatetimePickerを使いたい・・・
こちらの記事[Bootstrap 3でDatetimePickerを使いたい](http://qiita.com/albyte/items/775e92f02625bc0738a1)を参考に導入してみましたが、現バージョンと違うところがありハマってしまいました。
勝手ながら補足させていただきます。m(__)m

##最新のjQueryだとうまく動かない！？
コピペで作ってみました

```html:test.html
<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <!--jquery　最新-->
    <script type="text/javascript" src="~/Scripts/jquery-3.1.0.min.js"></script>
    <!--日付処理用　最新-->
    <script type="text/javascript" src="~/Scripts/moment.js"></script>![無題3.jpg](https://qiita-image-store.s3.amazonaws.com/0/90337/1832aa85-5adf-471f-885d-2eab879e8345.jpeg)

    <!--bootstrap3　最新-->
    <script type="text/javascript" src="~/Scripts/bootstrap.js"></script>
    <!--datetimepicker　最新-->
    <script type="text/javascript" src="~/Scripts/bootstrap-datetimepicker.js"></script>
    <script type="text/javascript">
        $(function () {
            $('#datetimepicker1').datetimepicker();
        });
    </script>
    <link rel="stylesheet" href="~/Content/bootstrap.css" />
    <link rel="stylesheet" href="~/Content/bootstrap-datetimepicker.css" />
    <title>Index</title>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class='col-sm-6'>
                <div class="form-group">
                    <div class='input-group date' id='datetimepicker1'>
                        <input type='text' class="form-control" />
                        <span class="input-group-addon">
                            <span class="glyphicon glyphicon-calendar"></span>
                        </span>
                    </div>
                </div>
            </div>
        </div>
        </div>
</body>
</html>
```

あれ、なんかエラーがでます

![無題3.jpg](https://qiita-image-store.s3.amazonaws.com/0/90337/c2be0820-d604-ab9c-b23f-153f22ecf043.jpeg)

何度も公式のプログラムと見比べてみました・・・

どうやらjqueryのバージョンが原因だったようです。公式のサンプルのソースと同じ2.1.1にしました

```html:test.html
<script type="text/javascript" src="~/Scripts/jquery-2.1.1.min.js"></script>
```

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/90337/43e577d0-bc98-1763-d384-8c2b1045828f.png)
できた！！