OmniAICreator/Qiita-1.07M huggingface dataset:
[CentOS7][SVN]サーバ構築

# お断り
（2022/5/22）今の時代は、Docker使ったほうが良いです。

# ねらい
家庭内でSVNサーバ立てて利用したい。

# 構成
SVNサーバ
　CentOS 7

クライアント
　TortoiseSVN
　通信プロトコル：SVN

# インストール
`yum install subversion`
# リポジトリ用ディレクトリを作成
`mkdir /data/svn/`
# リポジトリ登録
`svnadmin create /data/svn/`
# リポジトリの仮想ルートを修正
`vi /etc/sysconfig/svnserve`
修正前
`OPTIONS="-r /var/svn/"`
修正後
`OPTIONS="-r /data/svn/"`

# リポジトリのアクセス制御を変更
`vi /data/svn/conf/svnserve.conf`
修正前
　`# anon-access = read`
修正後
　`anon-access = write`
行頭に空白があるとアクセス時にエラー「～Option expected」が出るのでハマりポイント。

※この設定内容自体はセキュリティ的にアレなので、自己責任で。

#ファイアウォールの設定
###事前確認
`firewall-cmd --list-all`
###設定（デフォルトポートを許可）
`firewall-cmd --permanent --add-port=3690/tcp`
###更新
`firewall-cmd --reload`
###事後確認
`firewall-cmd --list-all`

# サービス化とサーバプロセス開始
## サービス化
`systemctl enable svnserve.service`
起動時にサービス起動されるようにする。

## 開始
`systemctl start svnserve.service`
## 開始結果ステータス確認
`systemctl status svnserve.service`

# あとはTortoiseSVNでアクセス
URL:`svn://[SVNサーバIP]`
でアクセス
TensorFlow用のインターフェースTFLearnが新しくなっていたので試してみた

TensorFlow0.9からTFLearnが独立して、使いやすくなっていそうだったので使ってみた

## インストール

TensorFlow0.9以上が必要

```
$ pip install tflearn
```

上でもインストールできるけど、現時点（0.2.1）では公式のチュートリアルも実行できなかったので以下で最新版（0.2.2）をインストール

```
$ pip install git+https://github.com/tflearn/tflearn.git
```

## チュートリアル

タイタニック号乗客の生存確率をMulti Layer Perceptronで解く問題が公式にある

[TFLearn - Quick Start](http://tflearn.org/tutorials/quickstart.html)

モデルの定義と学習部分を抜き出したのが以下

```python:titanic.py
# Build neural network
net = tflearn.input_data(shape=[None, 6])
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 2, activation='softmax')
net = tflearn.regression(net)

# Define model
model = tflearn.DNN(net)
# Start training (apply gradient descent algorithm)
model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True)
```

すっきりしていて書きやすい

## VGG Net

```python:vgg.py
# -*- coding: utf-8 -*-

from __future__ import (
    absolute_import,
    division,
    print_function
)

from six.moves import range

import tflearn
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.layers.estimator import regression

net = input_data(shape=[None, width, height, channel])

for i in range(2):
    net = conv_2d(net, 64, 3, activation='relu')
net = max_pool_2d(net, 2, strides=2)

for i in range(2):
    net = conv_2d(net, 128, 3, activation='relu')
net = max_pool_2d(net, 2, strides=2)

for i in range(3):
    net = conv_2d(net, 256, 3, activation='relu')
net = max_pool_2d(net, 2, strides=2)

for i in range(2):
    for j in range(3):
        net = conv_2d(net, 512, 3, activation='relu')
    net = max_pool_2d(net, 2, strides=2)

for i in range(2):
    net = fully_connected(net, 4096, activation='relu')
    net = dropout(net, 0.5)

net = fully_connected(net, n_classes, activation='softmax')

net = regression(net, optimizer='adam', loss='categorical_crossentropy')

model = tflearn.DNN(net, checkpoint_path='model_vgg', max_checkpoints=1, tensorboard_verbose=0)

model.fit(X, y, n_epoch=500, shuffle=True, show_metric=True, batch_size=32)
```

[元のサンプル](https://github.com/tflearn/tflearn/blob/master/examples/images/vgg_network.py)をfor文を使って書き直したけどかえって構造がわかりにくい気もするので、そこはfor文を使わずにコピペするなどすればいい
slimのrepeatやarg_scopeが使えるようになると、もっとすっきりすると思う
slimは別に開発されているけど、TFLearnに統合されそうな気がする

## サンプル

公式ドキュメントにNetwork in Network, VGG, Residual Network, LSTM, Seq2seq, Q-learning（パックマン）と色々なサンプルがある

[TFLearn Examples](http://tflearn.org/examples/)

## TFLearnの利点

- TensorFlow0.8くらいときに比べて、非常に書きやすくなっている
- Convolution 2D Transpose, Residual Block / Residual Bottleneckなどの様々なレイヤーが標準装備
- 生のTensorFlowとも親和性高い

## 感想

まだドキュメントにも色々とToDoが残ってるし、特に他にない機能を使いたいのでなければKerasなどを使っていてもいいかもしれない
TensorFlowの周辺は開発が早くて、気づいたら色々なものが出てきそう
【ライブラリ】ヘルパー


REVISION: '78'

`URL#debug` でヘルパーライブラリを読み込む仕様にしておくといい

## stats.js

https://github.com/mrdoob/stats.js

FPSを表示する

```javascript:stats.js使用時のテンプレ
var stats = initStats();

function render(){
  stats.update();
  
}

function initStats() {

  var stats = new Stats();

  stats.setMode(0); // 0: fps, 1: ms

  // Align top-left
  stats.domElement.style.position = 'absolute';
  stats.domElement.style.left = '0px';
  stats.domElement.style.top = '0px';

  document.getElementById("Stats-output").appendChild(stats.domElement);

  return stats;
}
```

## dat.gui.js

https://github.com/dataarts/dat.gui

コード内のパラメーターをユーザーが調整できるUIコンポーネント。

全パターン：http://qiita.com/mo4_9/items/9e9222cab4ba8b5e5ac9

```javascript:dat.gui.jsを使用時のテンプレ
var controls = new function () {
    this.rotationSpeed = 0.02;
    this.bouncingSpeed = 0.03;
    this.scaleX = 1;
    this.scaleY = 1;
    this.scaleZ = 1;
    this.ambientColor = ambiColor;
    this.addCube = function () { ... }; // 関数も可
    this.outputObjects = function () {
		console.log(scene.children);
    };
};

var gui = new dat.GUI();
// obj, property, min, max
// プロパティが表示される名前になる
gui.add(controls, 'rotationSpeed', 0, 0.5);
gui.add(controls, 'bouncingSpeed', 0, 1.0);
gui.add(controls, 'addCube');
// addFolder()でグループ化できる
guiScale = gui.addFolder('scale');
guiScale.add(controls, 'scaleX', 0, 5);
guiScale.add(controls, 'scaleY', 0, 5);
guiScale.add(controls, 'scaleZ', 0, 5);
// 色はadd()ではなくaddColor()
gui.addColor(controls, 'ambientColor').onChange(function (e) {
    ambientLight.color = new THREE.Color(e);
});
// addCube()を実行してもnumberOfObjects()は実行されないので、
// 自動で実行されるようにlisten()が必要
gui.add(controls, 'numberOfObjects').listen();

// レンダリングの中でcontrolsオブジェクトのプロパティを直接参照する
function render () {
	cube.rotation.x += controls.rotationSpeed;
	cube.rotation.y += controls.rotationSpeed;
	cube.rotation.z += controls.rotationSpeed;
	
	cube.scale.set(controls.scaleX, controls.scaleY, controls.scaleZ);
	
	step += controls.bouncingSpeed;
}
```

> 参考
[プログラムの中身を直感的なGUIで操作できるJavaScriptライブラリ「dat.gui」を使ってみた！](http://webhacck.net/archives/1329221.html)
[9. Updating the Display Automatically](http://workshop.chromeexperiments.com/examples/gui/#9--Updating-the-Display-Automatically)


## 組み込みHelper()

テンプレ

```javascript
// helper
gridHelper = new THREE.GridHelper(200,50);
scene.add(gridHelper);
axisHelper = new THREE.AxisHelper(200,50);
scene.add(axisHelper);
lightHelper = new THREE.DirectionalLightHelper(light,20);
scene.add(lightHelper);
```



> 参考
[初めてのThree.js 第2版――WebGLのためのJavaScript 3Dライブラリ](https://www.oreilly.co.jp/books/9784873117706/)
Macでnode.jsをインストールしたのに、npm command not found になったとき

node.jsのバージョン v4.4.7
Mac OS X Capitan

node.jsをずっと使っていなくて、使い始めようと、再インストールしたら、
npmが「command not found」でうんともすんとも言わず困った。
エンジニアの先輩たちに助けてもらい、なんとかなったので、その覚書。

##原因

下記記事によると、Capitanにすると、
ディレクトリ権限がかわり、node.js（のインストーラー？）がファイルにアクセスできず、インストールが不完全になる模様。
（※すごいざっくりすぎる解釈です。）

参考：この記事のおかげで直りました！！！感謝！
「OS X 10.11 El CapitanのSystem Integrity Protection(SIP)についてちょっと詳しく」
http://rcmdnk.github.io/blog/2015/10/10/computer-mac/


##対処
上記記事の言うとおりにする。
（SIPを無効化し、node.jsをインストールし直す。
インストール後、npmが動くことを確認したら、SIPを有効に戻す。）


###【手順１】SIPを無効化する

####1.リカバリーモードで起動する


>Mac の電源を入れた直後または Mac を再起動した直後に「command (⌘) + R」キーを押し続け、Apple ロゴが表示されたら離します。

※下記記事より引用
https://support.apple.com/ja-jp/HT201314



####2.リカバリーモードで起動できたら、ターミナルを開き、下記を入力する。

いつもとはデスクトップ画面が変わってしまいますが、ターミナルは
メニューバーの、「ユーティリティ」の中にあります。

   ```ターミナル
-bash-3.2 # csrutil disable
   ```

enterを押すと、「Successfully ....」とか出てくる。
再起動後、無効化されているかチェックするには、ターミナルで以下を入力すればわかるとのこと。

   ```ターミナル
csrutil status
   ```

↓

###【手順２】node.jsを再インストール
無難に公式ページからダウンロードしました。
https://nodejs.org/en/download/

これでnpmが動きました！
↓

###【手順３】SIPを有効化に戻す

#### 1.リカバリーモードで起動する

無効化の時と同じ。

#### 2.リカバリーモードで起動できたら、ターミナルを開き、下記を入力する。

   ```ターミナル
-bash-3.2 # csrutil enable
   ```

これもenterを押すと、「Successfully ....」とか出てくる。
再起動後、「csrutil status」してみて有効化されているか確認する。
シンプルな軽量フレームワークFlight

# Flight

サイトでは高速、シンプル、拡張可能なPHPのフレームワークと書いてます。 
http://flightphp.com/
https://github.com/mikecao/flight

## Routing

こんな感じですごい簡単
http://flightphp.com/learn/

```php
Flight::route('/', function(){
    echo 'hello world!';
});
```

```php
Flight::route('/@name/@id', function($name, $id){
    echo "hello, $name ($id)!";
});
```

## GET / POSTの値取得

`GET /users?page=1`

```php
Flight::route('GET /users', function(){
  $page = Flight::request()->query->page;
  $users = User::all($page);
  Flight::json(['status' => 200, 'users' => $users]);
});
```

`POST /users`

```php
Flight::route('GET /users', function(){
  $name = Flight::request()->data->name;
  $user = new User($name);
  Flight::json(['status' => 200, 'user' => $user]);
});
```


api向けに利用したのでテンプレートはよくわからないですが
1日で作りたいものができたので学習コストも低めでらくちんフレームワークだと思います。
GTM：URLの一部を変数に渡す

#カスタムjavascriptでURLの一部を変数に渡す

**www.test.com/list/id123456.html**
から**123456**を抜き出したい


##1.パスの前後をカットする
**<書き方>**
function() {
   return location.pathname.slice(8,-5);
 }

**<解説>**
/list/id123456.html　の
頭から8文字、つまり"d"のあとから、
おしりから5文字、つまり"."の前までの、
間の文字列を返す


##2.特定の文字列と文字列の間を抜き出す
**<書き方>**
function(){
var href = window.location.href ;
var a = href.split("id"); 
var b = a[1].split(".html"); 
return b[0];
}

**<解説>**
www.test.com/list/id123456.html
を"id"で分割し、"a"に入れる
⇒a[0] = "www.test.com/list/"
　a[1] = "123456.html"

a[1]を".html"で分割し、"b"に入れる
⇒b[0] = "123456"
　b[1] = ""

b[0]を戻す
tar コマンド “file changed as we read it” エラーの回避方法にていて

該当フォルダを圧縮するとき：

```
tar czvf bak.tar.gz . --exclude bak.tar.gz
```

エラーが出ました。

```
tar: .: file changed as we read it
```

解消方法は `--warning=no-file-changed` をつけることです。同様に `--warning=no-file-removed` オプションもあります。
[WordPress] WordPressをPHPのビルトインサーバーで使えるようにしたらパーマリンクにindex.phpが含まれてしまう問題の対処方法

PHP5.4で追加されたビルトインサーバー、便利ですよね。

WordPressのローカル環境構築のためにMAMPいれたり、ローカルにapacheとかnginxとか立てるのもいいですが、ビルトインが一番お手軽で最近使いはじめました。
（http://wald-grun.biz/web/wp/5659/ のような手順で設定）

わりと上手く動いていると思ったのですが
パーマリンク設定を見ると、なぜかURLにindex.phpが含まれている・・・！
（実際にアクセスするとindex.phpは表示されないんですが）

<img width="882" alt="スクリーンショット 2016-08-11 18.05.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/52847/a2d902b8-6451-89c5-3eb0-f421e6c548c7.png">


これによって問題が起こるプラグインがあったりして困りました。
http://qiita.com/jshimazu0820/items/1d1d93adbbce875d708e

## 解決方法

無難といえば無難ですが・・
「カスタム構造」で定義しなおしました。
他のパターンにしたい場合もこのカスタム構造で表現できます問題ないかと思います。

例：
<img width="785" alt="スクリーンショット 2016-08-11 18.06.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/52847/33e7dd5e-571a-36e0-5278-0b3d6c666c34.png">


Structure Tagは公式を参考に
https://codex.wordpress.org/Using_Permalinks
IntelliJ IDEAでGradleを使うのをやめてMavenに戻った件

#最初は使うプラグインの選択
IntellJ IDEAを初めて起動すると、使用するプラグインを選択する画面になる。
ここで軽くはまったのだが、buildツールとしてこれから（Mavenを使っていたが、ちょっと背伸びして）Gradleを使おうと思い、「2世代前のAntは使わないよね〜」とか思ってた。

Spring InitializerでGradleプロジェクトを選択して作ったSpring Boot Applicationのサンプルソースが動かないぞ？
新しくシンプルなプロジェクトを作って、mainメソッドを書いてみたら…それすら動かない

エラーメッセージは、
Error:gradle-resources-test:asdf_main: java.lang.NoClassDefFoundError: org/apache/tools/ant/util/ReaderInputStream

http://stackoverflow.com/questions/27978908/java-lang-noclassdeffounderror-org-apache-tools-ant-util-readerinputstream-vaad

http://stackoverflow.com/questions/26989932/intellij-cant-run-gradle-project-due-to-missing-class

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206756555-Gradle-JPS-plugin-broken-NoClassDefFoundError-org-apache-tools-ant-util-ReaderInputStream?sort_by=votes

なぜか皆もドハマリしているし、ここに書いてある解決法（リフレッシュとかオプション選択とか）しても治らないので、おとなしく安定しているMavenプロジェクトに戻りました。

別に、buildの方法くらい、いつでも移行できるしね。
かなりいい加減なPythonエラー解決方法

TypeError: can only concatenate tuple (not "instance") to tuple

django.core.exceptions.FieldError: Local field 'created_at' in class 'TestClass' clashes with field of similar name from base class 'BaseClass'
親クラスで定義したフィールドを子クラスでも定義したらでた.

---
ValueError: invalid literal for int() with base 10: ''

```py
num = int(num)
```
とかでnumの値がintにできないときにでる.

---
```py
ImportError: No module named syslog
```

Unix系だと特になにも考えず起きることはないけど、windows系のPCだと起きるかもしれない。
pythonの読み込みパスが通っているところに、syslog.pyというファイルをつくって中身をgoogle先生に聞けば解決すると思う。
[WordPress] qtranslateXを使ってwordpressを多言語する手順

## qtranslateXをインストール

https://wordpress.org/plugins/qtranslate-x/

有効化した瞬間から投稿画面に言語切替ボタンが出現します。

<img width="745" alt="スクリーンショット 2016-08-11 18.42.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/52847/044df08f-346f-8f00-a27a-4d7eb3aaa4de.png">

## 言語の追加

デフォルトで存在するlocaleについては、
管理画面 > 設定 > 言語
のメニューから「有効化する」を選択するだけ

デフォルトで存在しないlocaleについては
https://make.wordpress.org/polyglots/teams/
から言語ファイル(*.mo)をダウンロードして、
wp-content/language
に設置後、管理画面からlocaleを追加する。

## URLモード

以下の3パターンから選べます

1. `hogehoge.com?locale={言語コード}` 
2. `hogehoge.com/{言語コード}`
3. `{言語コード}.hogehoge.com`

※ 1はSEO的に良くないので非推奨
※ デフォルトlocaleの場合はhogehoge.com　の様に言語コードを外す設定もできます。

## 言語切替ボタンの設置

あまりスマートな方法はないようです。
以下を参考に実装しました。
http://daily.glocalism.jp/wordpress/qtranslate-x-link-to-change-language/

## 言語毎のコードの分岐

これはこのプラグインに限った方法ではないですがこのように実装しました。

```php
<?php if (get_locale() == 'en_US') { ?>
英語のときだけ表示！！！！
<?php } ?>
<?php if (get_locale() == ‘ja') { ?>
日本語のときだけ表示！！！！
<?php } ?>
```

## 「事前パスモード」が選択できない
管理画面  > パーマリンク設定
を「基本」にしているとだめらしい。それ以外にすると選択できるようになる。
https://wordpress.org/support/topic/i-cannot-choose-the-url-pre-path-mode

```

See Permalinks - choose Post name if that is also so set, click anyway Save Changes.
See if that makes a difference.

Success
```

※ 自分の場合は、ローカル環境でビルトインサーバーを使用していて、
パーマリンクにindex.phpが含まれてしまうという原因もありました。
これに関しては、以下の方法で解決。
http://qiita.com/jshimazu0820/items/cf3ac3288789f3b4240c

## 導入してみての所感

便利です。
phpのコードを触ること無く、ほぼ管理画面の操作だけで多言語化対応ができます。
（phpコード内の文言はもちろんgettextで対応する必要がありますが）

## どういった要件に向いているか
* 開発初期段階
 - 途中から導入するのは難しそう＆他のプラグインからの移行も難しそう
* あくまでデフォルト言語利用者がメインでサイトを運用
 - 管理画面の言語がデフォルト（日本語）になってしまうため
* サイトの仕様はすべての言語で統一できる
 - 言語によって表示する投稿タイプを変えたりする場合は向かない

上記に当てはまらない場合は、この記事などを参考に
最適な方法を探しましょう。
http://nskw-style.com/2015/wordpress/multi-language-plugins-list.html
PHPのobjectの代入にはcloneを使おうって話

# 環境
Mac OSX
PHP7

# やっちまった

```php
$a = (object)['a'=>'a'];
$b = $a;
$b->a = 'b';
print_r($a);
```

```
stdClass Object
(
    [a] => b
)
```

# 正解

```php
$a = (object)['a'=>'a'];
$b = clone $a;
$b->a = 'b';
print_r($a);
```

```
stdClass Object
(
    [a] => a
)
```

# 雑な解説

答えはすごく単純で、~~objectを普通に代入しようとすると参照渡しになってしまい、代入先の変更が代入元にも作用してしまう。~~
コメントで訂正いただきました。ただしくは

> objectは参照型なので，代入先でプロパティを変更したときに代入元と共通のものを操作してしまう

ということらしいです。

これを回避するには `clone` を使って中身のデータだけを渡すようにすればよい。

ちなみにこれは仕様通りの動きっぽいので間違っても怒ったりしてはいけない。

## ドキュメントにもそれとなく書いてある
http://php.net/manual/ja/language.oop5.references.php

## 解説記事を書いて頂きました
[オブジェクトをいい感じに複製(クローン)する [myclabs/deep-copy] - 超PHPerになろう](http://cho-phper.hateblo.jp/entry/2016/08/12/011135)
図があってとてもわかりやすいです。
Ansibleで「~/」を指定した際に指し示す場所


結論から言うと、`become: yes`を付けた時点で「~/」は「/root」を指し示した。
`become`、`become_method`、`become_user`の組み合わせで「~/」の指定ユーザに変更することは可能。
playbookのコメントでファイルが作成された位置を追記しています。

## 実験のplaybookの内容

`ansible-playbook -i hosts_vagrant playbook_test20160811.yml --tags debug数字`で実験した

```yaml
- hosts: targets

  tasks:
    # /home/vagrant/20160811
    - name: "debug1"
      file:
        path: "~/20160811"
        state: touch
      tags:
        - debug1

    # /root/20160811
    - name: "debug2"
      become: yes
      file:
        path: "~/20160811"
        state: touch
      tags:
        - debug2

    # /home/vagrant/20160811
    - name: "debug3"
      shell: /bin/bash -lc "touch ~/20160811"
      tags:
        - debug3

    # /root/20160811
    - name: "debug4"
      become: yes
      shell: /bin/bash -lc "touch ~/20160811"
      tags:
        - debug4

    # /home/vagrant/20160811
    - name: "debug5"
      shell: /bin/bash -lc "touch 20160811"
      args:
        chdir: "~"
      tags:
        - debug5

    # /root/20160811
    - name: "debug6"
      become: yes
      shell: /bin/bash -lc "touch 20160811"
      args:
        chdir: "~"
      tags:
        - debug6

    # /home/vagrant/20160811
    - name: "debug7"
      become: yes
      become_user: "vagrant"
      become_method: su
      shell: /bin/bash -lc "touch ~/20160811"
      tags:
        - debug7

    # /home/vagrant/20160811
    - name: "debug8"
      become: yes
      become_user: "vagrant"
      become_method: su
      shell: /bin/bash -lc "touch 20160811"
      args:
        chdir: "~"
      tags:
        - debug8
```
Vagrant 1.8.5 を Windows7 にインストールする手順

# やりたいこと

* Vagrant 1.8.5 を Windows7 にインストールする。

# 前提環境

* OS: Microsoft Windows 7 Professional 6.1.7601 Service Pack 1 (SP1) ビルド 7601 x64

# インストールするソフトウェア

* Vagrant 1.8.5

# 手順

## インストーラをダウンロード

[DOWNLOAD VAGRANT](https://www.vagrantup.com/downloads.html) で WINDOWS の **Universal (32 and 64-bit)** を選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/ef8c1dca-c754-8053-62f4-ed62af140272.png)

## インストーラを実行

ダウンロードされたインストーラ **vagrant_1.8.5.msi** を実行

**Next** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/0fc22001-bfa4-c9c4-895a-162a744fb26d.png)

1. **I accept the terms in the License Agreement** をON
2. **Next** を選択

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/ea0a2a21-e135-f5e1-4be6-e8c6b01ac4a9.png)

**Next** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/9c59c9a6-870e-2c30-595c-d288686c9a67.png)

**Install** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/94a26f24-3cf6-bd02-af8e-88d999f8c270.png)

**Finish** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/37b86b20-76ed-a463-a870-54080ba0054b.png)

**Yes** を選択して、PCを再起動。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/7b36d13a-7363-652b-e92d-1e87e3fa1833.png)

1. PowerSheel を起動。`%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe`
2. Vagrant のバージョンを確認

```ps1:コマンド
PS C:\> vagrant -v
```

```ps1:出力結果
Vagrant 1.8.5
```

# 完了
node,npmのメモ


## インストールしたらファイルが足りない

```
npm cache clean && npm install
```

## links

awesome npm
https://github.com/sindresorhus/awesome-npm

Node.js 日本ユーザグループ
http://nodejs.jp/

developers | npm Documentation
https://docs.npmjs.com/misc/developers

> a) a folder containing a program described by a package.json file
b) a gzipped tarball containing (a)
c) a url that resolves to (b)
d) a <name>@<version> that is published on the registry with (c)
e) a <name>@<tag> that points to (d)
f) a <name> that has a "latest" tag satisfying (e)
g) a git url that, when cloned, results in (a).

## 使ってみた

### react-jstree

2016/8
npm install を普通にするとソースが取れない。
tarが古いようだ。

githubを指定して取得。
babelだとTreeという命名が許可されないのか圧縮で失敗する。
dist以下のものをimportしたらうまくいった。
reactのバージョンは若干ずれてしまったが動いているようだ。
でも、ドラッグとか細かい動きをつけるのはどうするのかよくわからない。。

### nxcore-tree

うごいたけど、階層構造の依存性がある感じがしていろいろいじった。。

### rc-tree

わりとすんなり動いた。
exapmleをほぼコピーしていけた。
ドラッグの例もある。
いろんなもののfork元はこれ。
いいかもなあ。
でも、サンプルはconsole.logは吐き出されたりしてるので若干注意。
スマホだとドラッグできないな。。

### jquery-ui

指定の仕方が多分バージョンで違う。

```
const jQuery = require('jquery')

//minimal required jquery-ui modules
require('jquery-ui/ui/core')
require('jquery-ui/ui/widget')
require('jquery-ui/ui/effects/effect-blind')

//import of fancytree by injecting jquery
require('imports?jQuery=jquery!jquery.fancytree/dist/jquery.fancytree.js')

//potential extensions (by injecting jquery as well)
require('imports?jQuery=jquery!jquery.fancytree/src/jquery.fancytree.childcounter.js')

{
    let $ = jQuery
    console.log($('body').append('<h4>hofisefefef</h4>'));
}
```

Moving forward with ES6 modules (or commonjs) · Issue #603 · mar10/fancytree
https://github.com/mar10/fancytree/issues/603

jquery-ui/ui/effects at master · jquery/jquery-ui
https://github.com/jquery/jquery-ui/tree/master/ui/effects

Using "npm install" to install jquery-ui - Stack Overflow
http://stackoverflow.com/questions/34219046/using-npm-install-to-install-jquery-ui


### react-dnd

使ってはいない。。

http://qiita.com/59naga/items/39e6aaa816f7abacc6a9
【メモ】ERATO感謝祭 SeasonⅢ スライドまとめ

コンピュータサイエンス分野でトップカンファレンスに通した日本人たちの発表が生で聞けるお祭り、ERATO感謝祭が 8/9, 8/10 で行われました。

- [Program | ERATO感謝祭 SeasonⅢ](http://bigdata.nii.ac.jp/eratokansyasai3/program)

スライドが一部上がっているようですのでメモ程度にまとめておきます。
他にもありましたら編集リクエストかコメントで教えていただけると助かります。

## 一日目

### 17:20 田部井 靖生 東京工業大学
- Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices（KDD’16）
- 概要：文法圧縮されたデータ行列上PLS回帰モデルを学習する ([ブログより](http://d.hatena.ne.jp/tb_yasu/20160810/1470826059))
- [スライド](http://www.slideshare.net/tbyasu/scalable-partial-least-squares-regression-on-grammarcompressed-data-matrices)
- 解説記事：[KDD'16に文法圧縮されたデータ行列上でのPLS回帰のモデル学習に関する論文が採択 - Yasuo Tabeiの日記](http://d.hatena.ne.jp/tb_yasu/20160512/1463061853)

## 二日目

### 10:50 Song Liu 統計数理研究所
- Structure Learning of Partitioned Markov Networks（ICML’16）
- [スライド](http://allmodelsarewrong.org/wp-content/uploads/2016/08/Structure-Learning-of-Partitioned-Markov-Networks_NII.pdf)

### 11:55 林 浩平 産業技術総合研究所
- Expected Tensor Decomposition with Stochastic Gradient Descent（AAAI’16）
- 概要：テンソル分解の確率勾配法による効率的な計算方法に関する発表 ([Twitterより](https://twitter.com/hayasick/status/763258247000109056))
- [スライド](http://www.slideshare.net/KoheiHayashi1/expected-tensor-decomposition-with-stochastic-gradient-descent)

### 14:10 Mathieu Blondel NTTコミュニケーション科学基礎研究所
- Polynomial Networks and Factorization Machines: New Insights and Efficient Training Algorithms（ICML’16）
- 概要：factorization machineを特別な場合として含んでいる枠組みの話 ([Twitterより](https://twitter.com/mblondel_ja/status/763288445401767936))
- [スライド](http://www.mblondel.org/talks/mblondel-erato-2016-08.pdf)
ストレスなくVimを使うコマンド5つ

#`/hoge`
下に`hoge`を検索してカーソルが移動する。
上に検索は`?hoge`。

一文字の検索は`f`,`t`,`F`,`T`。
これさえ知ってれば, キーを連打する必要はないはず。

#`Ctrl-O`
ジャンプリストの履歴でカーソルが戻る。
一つ進むは`Ctrl-I`。
検索もジャンプの一つ。
移動に失敗した時に使える。

#`Ctrl-^`
前に編集していたバッファに戻る。
2回押すと元のバッファに戻る。
よくわからないバッファを開いてしまったらこれ。

#`g;`
チェンジリストの履歴でカーソルが戻る。
チェンジリストは, これまでの変更箇所を記録している。
飛び飛びの箇所を編集することが楽になる。
履歴を進むは`g,`

#`g-`
時間軸でファイルを元に戻す。
`u`は変更前に戻る。
`g-`は何秒か前の状態を復元する。
時間軸で一つ進むは`g+`
`u`と`CTRL-R`と編集を繰り返して
変更前に戻れなくなった時に落ち着いて`g-`

#`gv`(追記)
前回のVisualモードの選択範囲を復元する。
サブパターン

preg_match_all検索などで出てくる「サブパターン」という概念。なかなか理解できない人も多いと思うので、分かりやすかった説明をメモ。

preg_match_allでは検索でひっかかった値を配列に渡す処理が行われるが、実際どんな処理が行われているのか、ぱっと見わかりにくい。

そこでまず、preg_match_allで用意される配列は多次元配列であることを理解する。以下のサイト参照。
http://php.net/manual/ja/function.preg-match-all.php

多次元配列？となった人もいるでしょう。
多次元配列の中へ値がつっこまれる様は、以下のサイトの説明が分かりやすい。
http://zen6a.hateblo.jp/entry/2015/09/09/230237

それで、match[1]にはサブパターンが入るよと説明されているが、ここでまた「サブパターンて何？」となる人もいるでしょう。

つまるところ、正規表現検索の条件内にある()で囲われた部分のことらしい。
以下のサイトで解説があるのでこちらもチェックしてください。
http://frozentuna.hatenablog.jp/entry/2012/06/27/223633

以上。
Deep Learningを使用して日経平均を予測するというよくある話を試してみた(バックテスト編)


# 変更履歴
**2016/8/14 : 三手法のシグナルを合成した場合の結果を追加。**
**2016/8/14 : 勝率を追加。**


# 概要

前回([Deep Learningを使用して日経平均を予測するというよくある話を試してみた](http://qiita.com/wbh/items/da881fac695f17042b19))で、前日の日経平均株価構成銘柄のリターンを使用して、次の日の日経平均株価の上昇、下降を予測してみました。今回はとりあえず運用バックテスト編ということで、予測したリターンを使用して実際に運用したらどうなるか、をシミュレーションしてみました。

# ディスクレーマー

前回も記載した通り、本手法を使って実際に運用した場合の損害等々について私は全くもって責任を負いません。

# 運用前提

本来的には手数料とか売買できる時間、売買回転等を考える必要があるのですが、今回は簡単に「前日の終値時点で予測を行い、瞬間的に売買判断をして、瞬間的に日経平均が買える、または売れる」というなんとも非現実的な前提をおきます。(え、計算が面倒だからじゃないよ？)

まとめると以下のようになります。

* 何もポジションを持っていない状態で「上昇」予測の場合、「買い」
* ポジションを持っている状態で「上昇」予測の場合、ホールド
* ポジションを持っている状態で「下降」予測の場合、ポジション解消
* 何もポジテョンを持っていない状態で「下降」予測の場合、何もしない

# 前回の結果

前回の結果は以下のようになっていました。ランダムフォレスト、多層パーセプトロン(MLP)、畳み込みニューラルネットワーク(CNN)の三手法を試しました。

* ランダムフォレスト

![Kobito.B8RCPa.png](https://qiita-image-store.s3.amazonaws.com/0/54539/c3d17584-596d-932c-b0bb-972da63e1e6d.png "Kobito.B8RCPa.png")

* 多層パーセプトロン(MLP)

![Kobito.8YIHGQ.png](https://qiita-image-store.s3.amazonaws.com/0/54539/5e6f1d89-ea6f-974f-5693-81e2fcdff86a.png "Kobito.8YIHGQ.png")

* 畳み込みニューラルネットワーク

![Kobito.VOx3BE.png](https://qiita-image-store.s3.amazonaws.com/0/54539/7ba83b1d-3ef6-3b4a-5d7d-0e4524e5eeac.png "Kobito.VOx3BE.png")

AUC的に見ると、CNN > MLP > RFの順番。

# 運用バックテスト

バックテスト期間は2008年から直近までのデイリーで行います。
最初を1000として、それぞれインデックス化しています。(左軸)
また、対日経平均インデックスに対する差分も表示しています。(右軸)

## RFシミュレーション結果

![RF運用.png](https://qiita-image-store.s3.amazonaws.com/0/54539/9302c531-6de2-533a-8a80-9de8f16144a2.png "RF運用.png")

## MLPシミュレーション結果

![MLP運用.png](https://qiita-image-store.s3.amazonaws.com/0/54539/88d8f774-9777-8570-6f01-b82d30dfa2d4.png "MLP運用.png")

## CNNシミュレーション結果

![CNN運用.png](https://qiita-image-store.s3.amazonaws.com/0/54539/45053795-e3dd-b38d-a5db-2a338055508c.png "CNN運用.png")

## 三手法比較

![三手法.png](https://qiita-image-store.s3.amazonaws.com/0/54539/106e33ea-fe75-6d76-3572-f7bdfd25cf00.png "三手法.png")

## CNN,MLP,RFの合成シグナルによる結果(2016/08/14追加)

CNNがモデルの性能としてはまぁ一番いいので、これを軸にしてRFとMLPを合成してみます。条件式としては

```python
signal = (CNNのシグナル) & (RFのシグナル | MLPのシグナル)
```

みたいな感じ。つまり、CNNが上がると言っいて、かつ他の二つのモデルのどちらかも上がると言っている場合だけ最終シグナルを上がると判定します。

![合成.png](https://qiita-image-store.s3.amazonaws.com/0/54539/dce4cecf-2c6d-f45e-2d4a-ccedbdca94d7.png "合成.png")



## 各種統計量(2016/8/14追加)

||RF|MLP|CNN|合成|日経|
|--:|--:|--:|--:|--:|--:|
|年率リターン(%)|5.6%|8.1%|9.2%|11.7%|1.5%|
|年率標準偏差(%)|20.1%|20.5%|19.9%|18.6%|27.2%|
|リスクリターン|0.277|0.395|0.461|0.628|0.054|
|累積勝率|54%|55%|54%|56%|52%|

結果としては、合成 > CNN > MLP > RF (リスクリターンでみた場合)となりました。
日経平均をLongHoldしていても52%勝ちということなので、この期間上昇・下降は若干上昇トレンドに寄っているようです。ただ、その中でも全手法がそれに勝っている状態で、合成については56%と結構いい数字。

# まとめ

* バックテストの期間を変えたら変わるかもしれないが、性能としてはCNNが一番よさそう。
* AUCの順序性と同じリスクリターン結果になったので、もしかするとAUCをあげられるのであれば運用結果は良くなる可能性はある。
* CNNはリーマンショックの下落局面を早急に察知して回避し、アベノミクスの波に乗っているものの、昨今の情勢に関しては性能はイマイチ。
* リターンの大きな局面、逆にマイナスが大きな局面での振る舞いを見てみると面白いかもしれない。
* 合成シグナルはちょっと事後的な匂いもするが、仮に実運用するとしても複数のモデルがあったほうがいいでしょう。(エヴァのマギ的な)
メモ(MFT2016 自動運転)

Maker Faire Tokyo2016 機械学習を用いた自動運転についてのメモ

概要 (動画)
https://drive.google.com/open?id=0B_o9vkhBpXoYUEdaMzBiR2pMMUk

当日掲示していた資料
[<img width="300" alt="ppt" src="https://qiita-image-store.s3.amazonaws.com/0/127010/80614c53-393d-f686-a539-40cba38d45ff.png">](https://drive.google.com/open?id=0B_o9vkhBpXoYZWV0d1dsSTF3cUE)
https://drive.google.com/open?id=0B_o9vkhBpXoYZWV0d1dsSTF3cUE

ソースコード
https://github.com/AAmmy/MFT2016
(当日使用したものは後日アップロード)
#ニューラルネットワーク
###前提
入力 X ： 50×50 の画像を 1×2500 にしたもの
つまり $X = \\{x_0, x_1, ・・・, x_{2499}\\}$
$0 \leq x_i \leq 255$ は画像のそれぞれのピクセルの値 (輝度値)

出力 Y ： 直進 ⇒ 0, 左 ⇒ 1, 右 ⇒ 2
つまり $Y = \\{y_0, y_1, y_2\\} = \\{0, 1, 2\\}$

重み W：ネットワークの大きさによって要素数が異なる
$\hat{y}$：作成したモデルによって予測される値

###最も単純な場合
<img width="150" alt="wxb" src="https://qiita-image-store.s3.amazonaws.com/0/127010/c6d0b6de-bbe6-8df1-2936-95e3732eecb8.jpeg">

$\hat{y} = argmax(WX + b)$

W：今回は入力 2500, 出力 3 であるから, W は 2500×3 の2重配列
b：バイアス, 今回は出力 3 であるから, b はサイズ 3 の配列
WX：W と X の内積, 出力は3つ

```c:dot
float[] WX = new float[w[0].size] // 出力の数(3つ)
for(j = 0; j < WX.size; j++)      // 3回
    for(i = 0; i < x.size; i++)   // 2500回
        WX[i] += x[i] * w[i][j]   // 積の和が内積
```

argmax()：もっとも最大の要素を含むインデックスを求める
内積によって得られた3つの値のうち最大のものが予測される操作となる.
例
　argmax([3, 2, 1, 0]) ⇒ 0 (0番目の要素の3が最も大きい)
　argmax([0, 3, 2, 1]) ⇒ 1 (1番目の要素の3が最も大きい)

```c:argmax
max = a[0]
argmax = 0
for(i = 0; i < a.size, i++)  // a をすべて見る
    if(max < a[i]){          // 現在のmaxよりも今見ているa[i]が大きいとき
        max = a[i]           // maxを更新
        argmax = i           // argmaxを更新
    }
```

まとめると

```c:
y_pred = argmax(dot(X, W) + b)
```


実際にmnistのデータとpythonで実行すると次のようになる．
[ソースコード](https://github.com/AAmmy/MFT2016/tree/master/MFT2016/sample)

```
$ ./wxb
91.64%
$ python wxb.py
92.25 %
```

(Cを普段書かないので全部グローバル変数なのはご了承ください)

ソースコードについて
mnist：手書き数字のデータセット．手書きの数字のデータとそれが何の数字かというラベルデータが大量に入っている．
これと学習済みの重みとバイアスを用いて WX + b により 10000 のテストデータに対して数字の予測を行った結果を表示している．
C と python での結果が微妙に異なるのは精度が異なるため(だったと思う)．
重みの学習は
http://deeplearning.net/tutorial/
の Logistic Regression や Multilayer perceptron のコードを用いた．

###中間層を1つつける場合
$\hat{y} = argmax(tanh(W1X + b1)W2 + b2)$
層が一つ増えるので重み W とバイアス b も増える
W1：中間層の出力数を適当に 100 とすると, 入力 2500 であるから, W1は 2500×100 の 2 重配列
b1：入力は中間層の出力 100 となるため, b1はサイズ 100 の配列
W2：入力は中間層の出力 100 , また,出力 3 となるため. W2 は 100×3 の 2 重配列
b2：入力は中間層の出力 100 となるため, b1 はサイズ 3 の配列

tanh：ハイパボリックタンジェント, 

```math
tanh = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
```

```c:tanh
tanh = Math.tanh(x)
```


```c:tanh(W1X+b1)
i for all input elements index     // すべての入力の要素に対して
    output[i] = tanh(input[i])     // 単純にtanhの値を求める
```


学習済みの重みを用いてテストデータを識別すると，
[ソースコード](https://github.com/AAmmy/MFT2016/blob/master/MFT2016/sample/mlpWXb.py)

```shell:mlpWXb
$ python mlpWXb.py
97.97 %
```



###参考
https://www.coursera.org/learn/machine-learning
–機械学習の講義 (日本語字幕あり)
http://deeplearning.net/tutorial/
–Theano を用いた機械学習チュートリアル
JavaScriptでNiftyCloud mb の REST APIを呼ぶメモ

jQuery と jsSHA(https://caligatio.github.io/jsSHA/) を利用して、
JavaScriptから Nifty Cloud mb の REST API を呼び出す。

参考 *REST API リファレンス* 
http://mb.cloud.nifty.com/doc/current/rest/common/format.html


```js
        /**
         * RESTAPI /2013-09-01/installations に PUSH通知用キーを登録する
         */
        postInstallation: function (deviceToken) {

            var self = this, str = "", signature = "",
                now = (new Date()).toISOString(),
                // アプリケーションキー
                applicationKey = '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef',
                // クライアントキー
                clientKey = '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef',
                params =
                    'SignatureMethod=HmacSHA256&SignatureVersion=2'
                    + '&X-NCMB-Application-Key=' + applicationKey
                    + '&X-NCMB-Timestamp=' + now
                // URLにクエリパラメータがある場合、付与
                // + '&where=%7B%22testKey%22%3A%22testValue%22%7D';
            ;

            str += "POST\n";
            str += "mb.api.cloud.nifty.com\n";
            str += "/2013-09-01/installations\n";
            str += params;

            // HMAC-SHA256
            var sha256 = new jsSHA('SHA-256', 'TEXT');
            sha256.setHMACKey(clientKey, 'TEXT');
            sha256.update(str);
            signature = sha256.getHMAC("B64");

            $.ajax({
                url: 'https://mb.api.cloud.nifty.com/2013-09-01/installations',
                type: 'POST',
                headers: {
                    'X-NCMB-Application-Key': applicationKey,
                    'X-NCMB-Timestamp': now,
                    'X-NCMB-Signature': signature,
                    "Content-Type": "application/json",
                },
                dataType: 'json',
                data: JSON.stringify({
                    "deviceType": "ios",
                    "deviceToken": deviceToken,
                }),
            }).then(function (data) {
                console.log(data);
            });

        }
```
GTM：URLパラメータの中身を取得する

#カスタムJavaScriptでパラメータを変数に渡す
**<例>**
**www.test.com/?a=1111&b=2222**

##パラメータ部分を全部取得する
**■書き方**
function(){
var sample1 = decodeURIComponent(location.search);
return sample1;
}

**■結果**
sample1に
 　a=1111&b=2222
が戻される。

![sample1.png](https://qiita-image-store.s3.amazonaws.com/0/121251/78d3f365-0f6b-5c44-0e00-0371519a7037.png)







##パラメータの中身を取得する

**■書き方**

function(){
var sample2 = decodeURIComponent(location.search.match(/b=(.*?)(&|$)/)[1]);
return sample2;
}

**■結果**
sample2に
  2222
が戻される。

![sample2.png](https://qiita-image-store.s3.amazonaws.com/0/121251/eb49b24a-899c-27e5-a4f5-aad3837cb303.png)
nysol ( Mコマンド MCMD) (4) は、使えるか？

[nysol](http://www.nysol.jp/)をこれから使うと思っている人向けです。

# pandas で貿易統計処理していて、やはり nysol だなと思いました。pandas がメモリエラーになる大きさで問題なく処理できました。

## **かなり大きなCSVを処理できる**

この仕様のPC　で

CPU i5-2520M
メモリ 8G
OS windows 10

貿易統計の[1988から2015年の月別データ](https://www.dropbox.com/s/xvfarjfhnzb095q/ym_1988_2015.csv.zip?dl=0)
をpandas で処理しようとしたらこけてしまいました。

メモリ不足です。
データは、約4.2G で、約8000万行 でした。

で、これを、windows 10 の bash で、nysol をつかったら、時間はかかりますが処理可能です。
メモリ使用状況などみていると、メモリは、ほとんど使わず、ディスクをつかって処理しているようでした。
テスト対象のメソッドにnilのブロックを渡す

#### 概要

テストのために、ブロックを受け取るメソッドに対して、nilとなるブロックを渡す方法について記載する。

---

#### メソッドの形式

下記のようなメソッドがあった時、`raise 'main_block is necessary.'`部分をテストするために、ブロックとしてnilを渡さなくてはいけない。

```
def handle_exception(&main_block)
  raise 'main_block is necessary.' unless (main_block)
  return true
end
```

---

#### 解決策

下記のように実体のないブロックを渡してやればOK
```
@handler_stub.__send__('handle_exception',&nil_block)
```
UnityでビルドしたAndroidアプリが実機上で起動しない場合の解決法

UnityでビルドしたAndroidアプリが、実機上で起動しなかったので、今後のための記録として解決法を書きます。
#開発環境
・Windows 10
・Unity 5.4

実機として、ONKYO DP-X1(Android 5.1.1)を使用

#症状
・Build&Runを実行して実機に転送できてもすぐに落ちてしまう。
・アプリのアイコンをタップしても、同様に落ちてしまう。
・落ちるときにエラーの表示はない。
・Build SettingsでDevelopment Buildをすると、アプリが落ちるときに「問題が発生したため～」とエラーが出る。
・普段使っているMac環境でビルドすると、ちゃんと起動できる。
・他のシーン、他のプロジェクトをビルドしても、アプリが起動できない。

上に挙げたような症状から、Unityの設定が悪いのではないかと推測しました。

#原因
実機のログを見るために、コマンドプロンプト上で

```コマンド
adb logcat
```
を入力しました。

すると、

```エラー出力
Java.lang.RuntimeException: Couldn't load host package
...
System.err(xxxx) oculus.~~~（思い出して書いているので大体こんな感じ）
...
```
というエラーが確認でき、oculus関連が悪さをしているということが分かりました。

#解決法
Build Settings→Player Settings→OtherSettings→Virtual Reality SDKsのOculusを-ボタンで削除

このやり方で解決しましたが、Virtual Reality Supportedのチェックを外す方法でもできるかもしれません。


普段Macで開発しており、CRI ADX2 LEを使うためにWindowsで環境を整えた矢先に、この症状が出て焦りました。
同じようなエラーで悩まれてる方に役立てたら幸いです。
【随時更新】wrapbootstrap テンプレート"Angle"を使う場合の注意点

## 本情報は備忘録である。

作成理由は、Angleを利用して作成しているが、jQueryがまともに動かないということがあったためである。

---

## インストールの仕方

1. {warp}bootstrap Angle - Bootstrap Admin Templateから購入しダウンロードする。
https://wrapbootstrap.com/theme/angle-bootstrap-admin-template-WB04HF123
![angle.png](https://qiita-image-store.s3.amazonaws.com/0/18072/1e9526b1-6744-47b6-900f-c0c7620cdf4b.png)

2. zipファイルを解答する
3. フォルダの中から任意のテンプレートを選択する。今回はRailsテンプレートを使用した。フルパッケージ版のbackend-railsとスケルトンテンプレートのbackend-rails-seedが存在するため、両方共コピーする。

---

## デモを開く
4. Chromeを起動し、デモ（http://wrapbootstrap.com/preview/WB04HF123）を開く。今回はそこからRuby on Rails のデモを選択した。これはHeroku上で動いているのだが、クリックしても開かないので、右クリック→新しいタグ／ウィンドウで開くを選択して、各コンポーネントの動きを確認しておく。

---

## 解凍する。
5. backend-rails/Angleの下にある、bower.jsonをコピーし、backend-rails-seed/Angleの下のbower.jsonを上書きする。

---

## ファイルを更新する。
6. Gemfileは以下のように書き換える。ただし、任意の実装が必要な部分も多いため、各自bootstrapとjQery部分以外は実装すること。標準ではrailsは4.1.8だが、最新安定版は4.2.6のため最新版に上げている。

---

## 実際のファイルの中身

```
 source 'https://rubygems.org'

gem 'rails', '4.2.6'
gem 'sass-rails'
gem 'uglifier'
gem 'coffee-rails'
gem 'jbuilder'
gem 'sdoc', '~> 0.4.0',          group: :doc
gem 'tzinfo-data', platforms: [:mingw, :mswin]

gem "bower-rails"

group :development, :test do
    gem 'sqlite3'
end

group :prodcution do
  gem 'pg'
  gem 'thin'
end
```

---

## 注意：環境構築

7. Mac環境で今回は作っているので、Homebrewを入れ、rbenvでバージョン管理し、ruby 2.3.1にアップデートしている。その後railsが動く環境を構築しておくこと。また、bowerを利用するので、nodebrewを入れ、nodejsが動く環境も実装すること。 これに関しては他の記事が詳しいので参照すること。

---

## bundle update 他

8. bundle update をすることでrails 4.1.8　→　rails 4.2.6他をアップデートする。
9. bundle install --without productionしてdevelop環境のみインストールする。
10. rake bower:installをしてbowerをインストールする。途中、質問が出てくるので、Angleに対応させるため"10"を選択すること。

---

# 次回へ続く
ここまでできれば、下準備が終わったので、コードを書いていく。

## To be continued
XiaomiからSMSが返ってきた


[XiaomiのデバイスのBootloader Unlockの申請をしてみた](http://qiita.com/or2/items/2b8f1166af172e84cf92)の続き

## 結構待つと聞いていたのに、思いの他すぐSMSが返ってきた
今回の場合、土曜日のAM5:00前にBootloader Unlockの申請したものが、月曜日のAM9:00過ぎにはSMSが返ってきていました

![XiaomiからのSMS](https://qiita-image-store.s3.amazonaws.com/0/89027/9fc6499d-a199-5b1c-c7c2-a48ffb55c85b.png "名称未設定.png")

## サイトにアクセスする
早速[http://en.miui.com/unlock](http://en.miui.com/unlock)にアクセスしてみた

![http://en.miui.com/unlock](https://qiita-image-store.s3.amazonaws.com/0/89027/78b829ee-263c-dfe9-2057-32cbb7e0fede.png "スクリーンショット 2016-08-10 7.10.12.png")

## [Unlock Now]をクリックする
今度は違う画面に遷移した
ここからBootloader Unlockをするアプリ(MiFlashUnlock)をダウンロードするみたい

![ここからBootloader Unlockをするアプリ(MiFlashUnlock)をダウンロードする](https://qiita-image-store.s3.amazonaws.com/0/89027/97456824-2f05-5141-221d-97de9f3f6a40.png "スクリーンショット 2016-08-10 7.10.43.png")

## ダウンロードしたMiFlashUnlockを起動する
![MiFlashUnlock01.PNG](https://qiita-image-store.s3.amazonaws.com/0/89027/747c59ed-e359-6bc9-4e08-069530b9a4ec.png "01.PNG")

[Agree]をクリックする

![MiFlashUnlock02.PNG](https://qiita-image-store.s3.amazonaws.com/0/89027/44292ddb-3f2f-81af-94e0-e2ed16807ed3.png "02.PNG")

アンロックの申請をした時のMiアカウントでサインインする

![MiFlashUnlock03.PNG](https://qiita-image-store.s3.amazonaws.com/0/89027/7b480c8d-c6ac-b061-29d3-b2953a61060c.png "03.PNG")

Fastbootモード(ボリューム(-)を押しながら電源On)で端末を接続する

![MiFlashUnlock04.PNG](https://qiita-image-store.s3.amazonaws.com/0/89027/1191dfd4-6ebf-1127-89cb-b29884f521c3.png "04.PNG")

[Unlock]をクリックする

![MiFlashUnlock05.PNG](https://qiita-image-store.s3.amazonaws.com/0/89027/fd27e585-d756-63b4-e834-7c14ca4f7491.png "05.PNG")

後はソフトがアンロックしてくれるのを待つだけ

![MiFlashUnlock06.PNG](https://qiita-image-store.s3.amazonaws.com/0/89027/dd924c65-4b20-67e2-f492-4ea1b6eed2dd.png "06.PNG")

[Reboot phone]をクリックする
直線位置調整 > Link > PチャネルFET > VGS 2.5V

ESP8266からMOSFETを扱う場合、VGSは2.5Vのものを使うことになるだろうか。

VGS2.5VのPチャネルMOSFETはaitendoさんのページでいくつか見られる。
http://www.aitendo.com/product-list/679

秋月電子さんのページでは一覧ではVGSは分からなく、１つ１つ開いて確認しないといけない。
http://akizukidenshi.com/catalog/c/cpmos/
直線位置調整 > Link > FETによるモーター駆動 > MOSFETの基本的な回路

MOSFETを使う場合の基本的な回路。

RobotMaker v1.0.0 documentationに詳しい。
http://irobot.csse.muroran-it.ac.jp/html-corner/robotMaker/themes/motorDriveWithFET/

R1, R2を検討することになるだろうか。
直線位置調整 > Link > ＦＥＴをマイコン出力のスイッチとして使う方法

1.5V 1Aの電源をON/OFFする仕組みはMOSFETを使うのが良さそうだ。

きむ茶工房ガレージハウスさんのページが分かりやすい。
~~~http://www.geocities.jp/zattouka/GarageHouse/micon/circuit/FET.htm~~~

(2021.02.17)
以下に移転されたようです。
http://zattouka.net/GarageHouse/micon/circuit/FET.htm
財布の中の小銭最小化問題

# はじめに
[財布の小銭最少化問題の極北〜694円の会計に1245円出す人〜](http://togetter.com/li/916958)が大分前に話題になっていたので、線形計画問題として解けるようにした。Pythonだとモデリングライブラリとしてpulpが使えるため、pulpを利用。pulpの使い方がいまいちという方のために、以下の記事をリンクしておきます。
[PuLP による線型計画問題の解き方ことはじめ](http://qiita.com/mzmttks/items/82ea3a51e4dbea8fbc17)
# ソース
694円の商品に1245円出すことを確認。
下記ソースのコメントを見れば、やっていることは理解出来るかと思います。
支払い変数とお釣り変数の2種類を使ってますが、実は支払い後の財布の枚数変数の1種類で事足りることに気づきました。定式化のセンスが問われるところですなー。大規模問題になるとここらへんが命取りになります。
あと、財布の中身の枚数は硬貨・紙幣で区別していません。枚数最小化ではなく体積最小化がベターですね。
【追記】
しっかり研究している人がいるもんですな。
[財布の中の小銭の最適化について](http://takeno.iee.niit.ac.jp/~shige/math/lecture/misc/data/kozeni1.pdf)

```py:MinimizeChange.py
import pulp
import numpy as np
#お金の種類
money_type = (10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1)
#商品の金額
price = 694
#財布の中身（左から10000の枚数、5000の枚数、...）
purse = [1, 1, 1, 1, 0, 4, 0, 4, 1, 3]

#最小化の問題を作りましょう...
problem = pulp.LpProblem('Change Minimization', pulp.LpMinimize)
#何円硬貨を何枚使うか変数
pay_var = np.array([pulp.LpVariable('pay_var_'+str(i),0,purse[k]+1,'Integer') for k,i in enumerate(money_type)])
#何円硬貨が何枚お釣りとして返ってくるか変数
change_var = np.array([pulp.LpVariable('change_var_'+str(i),0,purse[k]+1,'Integer') for k,i in enumerate(money_type)])

'''
目的関数
会計後の財布の中身のお札・硬貨枚数 + 払うお札・硬貨枚数 * 0.01
後ろの項は、10000円払って10000円お釣り返してもらう的な意味不明な結果を避けるため
'''
problem += pulp.lpSum(purse - pay_var + change_var) + pulp.lpSum(pay_var)*0.01

#払ったお金は商品金額より大きくないと駄目よん制約
problem += pulp.lpDot(money_type,pay_var) - price >= 0
#お釣り金額＝10000*10000枚数+5000*5000枚数+...+1*1枚数じゃなきゃいけないよ制約
problem += pulp.lpDot(money_type,change_var)  == pulp.lpDot(money_type,pay_var) - price
#財布の中の枚数より多くは支払えないよん制約
for i,v in enumerate(purse):
    problem += pay_var[i] - purse[i] <= 0
status = problem.solve()

print("最適な支払方法")
for i,v in enumerate(pay_var):
    print("{}円　{}枚".format(money_type[i],pay_var[i].value()))
print("お釣り枚数")
for i,v in enumerate(change_var):
    print("{}円　{}枚".format(money_type[i],change_var[i].value()))
```
# 応用
中の硬貨・紙幣をカウント出来る財布があれば、会計の度に支払い金額をレコメンド出来るのですが。時代に逆行している感半端ないですが、そんな財布あったらひとまず買うけどな（笑）ご興味ある方はトライを！
Photos frameworkを使ってアルバムからオリジナルサイズの画像を取得する

iOS8から追加されたPhotos frameworkを使って、
写真アルバムからオリジナルサイズの画像を取得する方法です。

## アルバムから画像の情報を取得する

```swift
// アルバム写真の情報
var photoAssets: [PHAsset] = []

let options = PHFetchOptions()
let assets: PHFetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: options)
assets.enumerateObjectsUsingBlock { (asset, index, stop) -> Void in
    photoAssets += [asset as! PHAsset]
}
```

## 画像オブジェクトを取得する
Photos frameworkのPHImageManagerを使用。
上記で取得した画像asset情報を元に、UIImageオブジェクトを取得する。
targetSizeで指定する引数を**PHImageManagerMaximumSize**にすることによって、
オリジナルサイズの画像を取得できる。

```swift
let manager: PHImageManager = PHImageManager()
let asset = photoAssets[0]
manager.requestImageForAsset(asset,
    targetSize: PHImageManagerMaximumSize,
    contentMode: PHImageContentMode.AspectFill,
    options: nil) { (image, info) in
        // imageにUIImageが渡ってきます
    }
```
GolangでSlackに画像をアップロード

GolangでSlackに画像をアップロードする関数

```go
func UploadImageToSlack(u, token, name, channels string, r io.Reader) error {
       	body := &bytes.Buffer{}
       	writer := multipart.NewWriter(body)
       	part, err := writer.CreateFormFile("file", name)
       	if err != nil {
       		return err
       	}
       	if _, err := io.Copy(part, r); err != nil {
       		return err
       	}
       	err = writer.WriteField("token", token)
       	if err != nil {
       		return err
       	}
       	err = writer.WriteField("channels", channels)
       	if err != nil {
       		return err
       	}
       	err = writer.Close()
       	if err != nil {
       		return err
       	}
       	req, err := http.NewRequest("POST", u, body)
       	req.Header.Set("Content-Type", writer.FormDataContentType())
       	client := &http.Client{}
       	resp, err := client.Do(req)
       	if err != nil {
       		return err
       	}
       	defer resp.Body.Close()
       	_, err = ioutil.ReadAll(resp.Body)
       	if err != nil {
       		return err
       	}
       	return nil
}
```

これでできました。`io.Reader`はファイルやネット上のリソースから生成できます。

参考: https://matt.aimonetti.net/posts/2013/07/01/golang-multipart-file-upload-example/
UWP App exeが起動しない

簡単なアプリを以下の環境で作成しましたが、アップ　コンテナーのコンテキストで実行する必要があると言われ、何も起きません。コンパイルの仕方がまずいのでしょうが、どう調整したらよいかわからないド素人です。

Windows10 1607
Visual Studio 2015 Community
C#

助けてください。

コルタナと連携するアプリです。
JUnitでRuleChainを使う

テストコードを書いていると、例外を検証するケースや、テストメソッドを実行する度に一時ディレクトリを作成して終了時には自動的に削除する、といったようなケースがあると思う。
この手のテストは[JUnitのRule](http://www7b.biglobe.ne.jp/~archer/tryjunit4/tryjunit4Rules.html)を利用することで、少ないコード量でシンプルに書くことが出来る。例えば例外を検証する場合は[ExpectedException](http://www7b.biglobe.ne.jp/~archer/tryjunit4/tryjunit4Rules.html#ExpectedException)、一時ディレクトリやファイルを作成するような場合は[TemporaryFolder](http://www7b.biglobe.ne.jp/~archer/tryjunit4/tryjunit4Rules.html#TemporaryFolder)を利用する。
※[JUnitのTemporaryFolderルールのディレクトリやファイルの出力先]
(http://qiita.com/NagaokaKenichi/items/622a738f744c00b6b696)

```HogeTest.java
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();

@Rule
public ExpectedException thrown = ExpectedException.none();
```

ただ、上記のようにRuleを複数適用させようとすると、[Ruleが実行される順序の制御](http://www7b.biglobe.ne.jp/~archer/tryjunit4/tryjunit4Rules.html#RuleChain)はJavaVMのリフレクションAPIの実装に依存してしまい、開発者が期待するようなテストの実施が困難になってくる。

# そこで使うのがRuleChain
そういった際に利用するのがJUnit4.10から導入されたRuleChain。
以下のような感じで、利用するRuleを定義してRuleChainのouterRule、aroundの引数に適用したい順に指定する。

```HogeTest.java

public TemporaryFolder temporaryFolder = new TemporaryFolder();
public ExpectedException thrown = ExpectedException.none();

@Rule
public RuleChain ruleChain = RuleChain.outerRule(this.temporaryFolder).around(this.thrown);
```

こうすることで、指定した順序(上記の場合、TemporaryFolder→ExpectedException)でRuleが呼ばれるようになる。また、3つ以上Ruleを適用したい場合は、

```HogeTest.java

public TemporaryFolder temporaryFolder = new TemporaryFolder();
public ExpectedException thrown = ExpectedException.none();
public ErrorCollector errorCollector = new ErrorCollector();

@Rule
public RuleChain ruleChain = RuleChain.outerRule(this.temporaryFolder).around(this.thrown).around(this.errorCollector);
```

のように.aroundでつなげていけばOK。
プログラミング　ゲーム　おみくじアプリ

おみくじアプリを作った際に気づいた点をメモ。

                document.getElementById('btn').addEventListener('click', function() {
・ｂｔnクリックするというイベントに対して（動作に対して、）

var results =['大吉', '小吉', '中吉', '凶','小吉','大大吉','Max吉','大凶'];
resultsは、数字。

0-8までの小数点含むランダムな数字を表示する。
※var　resultがその値となる。

・var result = Math.floor(Math.random() * 8);

もしくは、　

・var result = Math.floor(Math.random() * results.length);
と記載する。
※　表示させたい個数分（results.length で数字が表示できる。）
                    
/*results.lengthとは、resultsの個数分表記の際に使用する*/
                        document.getElementById('result').innerHTML = results[result];

・resultのランダムな数字を得て、そのresultに合わせて、results(おみくじ内容）を表示する。
※ innerHTML　とは、HTMLに表示するといった意味となる。
Sklearn-theanoを使ってR-CNNをしてみよう

#はじめに
[CNNの前処理としてOpenCVでBINGを使ってみた](http://qiita.com/Almond/items/ad56ce29112d6397a704)
[R-CNNとしてSelective search を使ってみた]
(http://qiita.com/Almond/items/7850cf81903fbe2a2c6c)

これまで、BINGやSelective Searchを使ってR-CNNを行ってきました。
が、折角CNN（畳み込み処理）を行うならその時にオブジェクトっぽい箇所を見つけてよと思った方はいないでしょうか。安心してください、それできますよ！
ということで、今回はCNNで位置推定を行います。（※Sklearn-theanoのGitHubではLocalizing - 位置推定と記載されているので以下こちらの表現を使うことにします）

#Sklearn-theanoって何？
Sklearn-theanoはディープラーニングのフレームワークであるTheanoを抽象化することでディープラーニングを容易にするライブラリです．似たようなものだと、[Keras](https://keras.io/)があります。こちらは流行っていてかなり良い感じですが、今回は敢えて無名？のSklearn-theanoを使ってみます。

#Sklearn-theanoならこんなことができちゃうよ
前述のようにSklearn-theanoは位置推定だけではなく画像の分類や推定なども簡単にできます。
また、OverFeat, AlexNet, VGGNet, GoogLeNet　などの有名所のライブラリを簡単に試すことができます。
色んな学習済みモデルを使って実践的な問題を解いてみたい。
そんなあなた、Sklearn-theanoを使ってみてはいかがでしょうか？

#早速使ってみよう
https://github.com/sklearn-theano/sklearn-theano
上記のリポジトリをクローンして、コマンドの python setup.py install でインストールします。また、こちらのパッケージが必要なので、インストールしていない場合は先にインストールしておきましょう。
・numpy
・scipy
・theano
・scikit-learn
・pillow

#結果
今回はSampleにあるplot_single_localization.pyを使ってみました。
最後のフレームでナマケモノの位置が推定されています。
かなりざっくり説明すると、最初に黄色の四角い領域内でオブジェクトらしい点を推定していき、集まった点郡を最終的なオブジェクトとして検出します。
検出の詳しい過程はこちらの[ページ](http://sklearn-theano.github.io/auto_examples/plot_localization_tutorial.html)を参照してください。

![figure_sloth_example.png](https://qiita-image-store.s3.amazonaws.com/0/99765/7c39cbc8-99fa-8f70-5e9a-aa9c579faa83.png)

さて、気になる処理時間ですがおよそ310sec.... 約5分！！！！
長い。。。公式にも352.80 secondsと書いてあるので間違いなさそうです。

#まとめ
今回は、Sklearn-theanoというマイナーなライブラリを使って、CNNで位置推定を行いました。ある程度の時間がかかっても問題ないという場合は使ってみるのも良いかもしれません。が、スピードが求められる場合は言うまでもなく厳しいと思います。
**どなたかリアルタイムに耐えうる一般物体検出方法をご存知な方、一報ください**
【Python】辞書（ハッシュ）

Pythonではハッシュ（正確にはハッシュテーブル）のことを辞書と呼ぶ。

辞書の機能を利用して各KWの出現回数を集計する場合など、[Counter](http://docs.python.jp/2/library/collections.html#collections.Counter)や[defaultdict](http://docs.python.jp/2/library/collections.html#collections.defaultdict)という辞書のサブクラスを利用すると良い。
例えば、Counterやdefaultdictを利用しないと、下記のように冗長な記述が必要となる。

```sample1.py
# 辞書の初期化
count_by_kw = {}

# KeyErrorとなる
count_by_kw['apple'] += 1

# 冗長になるが次のように書く必要がある
if count_by_kw.get('apple'):
    count_by_kw['apple'] += 1
else:
    count_by_kw['apple'] = 1

```

これをCounterを利用すると、下記のようにシンプルに記述することができる。
また、most_commonメソッドを使えば、valueが大きい順にkeyを取り出すこともできる。

```sample2.py
from collections import Counter

# 辞書の初期化
count_by_kw = Counter()

# シンプルな記述にできる
count_by_kw['apple'] += 1
count_by_kw['apple'] += 1
count_by_kw['apple'] += 1
count_by_kw['peach'] += 1
count_by_kw['orange'] += 1
count_by_kw['orange'] += 1

# valueの値が大きい順（apple -> orange -> peach）にkeyを取り出す
for kw, count in count_by_kw.most_common():
    print(kw, count)
```

```
$ python sample2.py
apple 3
orange 2
peach 1
```

さらに、Counterとdefaultdictを組み合わせると、辞書の中に辞書（ネストした辞書）を作ることも可能になる。
もちろん、most_commonメソッドも使える。

```sample3.py
from collections import Counter, defaultdict

# 辞書の初期化
count_by_category_and_kw = defaultdict(Counter)

# 辞書の辞書
count_by_category_and_kw['A']['apple'] += 1
count_by_category_and_kw['A']['apple'] += 1
count_by_category_and_kw['A']['orange'] += 1

# 外側の辞書からkeyとvalueを取り出し、さらに内側の辞書からkeyとvalueを取り出す
for category, count_by_kw in count_by_category_and_kw.items():
    for kw, count in count_by_kw.most_common():
        print(category, kw, count)
```

```
$ python sample3.py
A apple 2
A orange 1
```

次のように、辞書の中の辞書（ネストした辞書）に配列を入れることも可能。
その場合はlambda（無名関数）を使ってdefaultdictをネストして書く。

```sqmple4.py
from collections import defaultdict

# 辞書の初期化
persons_by_org_and_team = defaultdict(lambda: defaultdict(list))

# 辞書の辞書
persons_by_org_and_team['A']['x'].append('Taro')
persons_by_org_and_team['A']['x'].append('Hanako')
persons_by_org_and_team['A']['y'].append('Jiro')

# 外側の辞書からkeyを取り出し、さらに内側の辞書からkeyを取り出し、最後にvalueを取り出す
for org in persons_by_org_and_team.keys():
    for team in persons_by_org_and_team[org].keys():
        for person in persons_by_org_and_team[org][team]:
            print(org, team, person)
```

```
$ python sample4.py
A x Taro
A x Hanako
A y Jiro
```
ESP8266 > Link > GPIO > 12mA / 20mA for source current / sink current

関連 http://qiita.com/7of9/items/0256996d9cf94fd2abc8

ESP8266で3VリレーをON/OFFしようとしていたが、定格電流が170mAのものの動作で失敗した。

GPIOの出力電流はどのくらいなのだろうか。

http://bbs.espressif.com/viewtopic.php?t=139
> by Espressif_Kelly » Fri Jan 30, 2015 11:51 am
> 1. 12mA here refers to the source current and sink current is greater than 12mA.
2.12mA is for per pin and each pin is the same.
3. Drive capacity current of all GPIO pins total can be 16 x 12 mA.
...
by Espressif_Kelly » Mon Dec 14, 2015 10:22 am
> The sink current of GPIO is about 20mA.