OmniAICreator/Qiita-1.07M huggingface dataset:
RVT で web console 用のページを作成する

「[web-console を使えば Rails App のデバックが楽になる](http://qiita.com/pekepek/items/74c8b1f4c886fc9b15cd)」で web-console でデバックすると楽という話しを書きましたが、加えて [RVT](https://github.com/gsamokovarov/rvt) を入れると web-console 用のページを作る事が出来ます。

# 使い方

```:Gemfile
gem 'rvt'
```

特に設定は不要で、RVT を入れて、`/console` にアクセスするだけです。
すると web-console が立ち上がります。

![image](https://qiita-image-store.s3.amazonaws.com/0/41416/4f203836-fd42-5b45-1a3a-8943c4f23c74.png)

んー簡単。

特定のパスにマウントしたい場合は application.rb に以下のように記述します。

```rb:application.rb
class Application < Rails::Application
  ...
  config.rvt.default_mount_path = 'sukina/path/setting'
end
```

これで `/sukina/path/setting` にマウントされます。
development 環境の場合だけマウントするとかもありですね。

また、デフォルトでは `127.0.0.1` からのリクエストでしかアクセス出来ませんが、`whitelisted_ips` で他の IP からのアクセスも可能になります。
例えば、`192.168.0.100` からのアクセスを許可したければ

```rb:application.rb
class Application < Rails::Application
  ...
  config.rvt.whitelisted_ips = %w(127.0.0.1 192.168.0.100)
end
```

とすれば OK です。
これ、他の環境で上手く行かないときの調査とかに使えそうですね。

設定はこれくらいで、簡単に利用出来ます！

# 補足: カラーを変更する

上記でやりたい事は出来ると思いますが、一応スタイルも変更出来ます。
これも簡単で `style.colors` にテーマを指定するだけです。

```rb:application.rb
class Application < Rails::Application
  ...
  config.rvt.style.colors = :solarized_dark
end
```

設定できるテーマは以下です。

```
monokai 
solarized_dark 
solarized_light
tango
xterm
```

上記が気に入らない場合は

```rb:application.rb
class Application < Rails::Application
  ...
  RVT::Colors.register_theme(:custom) do |c|
    # 8 darker colors.
    c.add '#000000'
    c.add '#cd0000'
    c.add '#00cd00'
    c.add '#cdcd00'
    c.add '#0000ee'
    c.add '#cd00cd'
    c.add '#00cdcd'
    c.add '#e5e5e5'

    # 8 lighter colors.
    c.add '#7f7f7f'
    c.add '#ff0000'
    c.add '#00ff00'
    c.add '#ffff00'
    c.add '#5c5cff'
    c.add '#ff00ff'
    c.add '#00ffff'
    c.add '#ffffff'

    c.background '#708090'
    c.foreground '#66cdaa'
  end

  config.rvt.style.colors = :custom
end
```

![image](https://qiita-image-store.s3.amazonaws.com/0/41416/94a839a2-d5c2-341f-7d1b-73ba1853232b.png)

こういう感じで、カスタムすることも出来ます！
んー簡単
ConoHaのVPSでMinecraftサーバーを作ったときのメモ


Minecraftサーバーをよく作ったり潰したりをやっているので、楽に立ち上げるときのメモです。

# 環境について

1. Vagrantを利用してConoHaにVPSを作成する
2. Dockerを利用してMinecraftサーバーをサクッと立ち上げ

上記の条件で構築したものです。

# Vagrantを利用してConoHaにVPSを作成する

参考URL
[VagrantからConoHaを使う](http://qiita.com/hironobu_s/items/8422a427fd5571747196)

上記の記事を参考にvagrant-conohaのプラグインを入れればOKです。
実行し、立ち上げたVPSまでSSH接続できれば、次に環境を作りなおすときもvagrantコマンドからサクッと作成できます。

ちなみに本手順ではCentOS7のVPSを利用します。

# Dockerを利用してMinecraftサーバーをサクッと立ち上げ

VPSに接続したら、

1. Dockerをインストールする
2. DockerComposeをインストールする
3. Minecraftサーバーのコンテナを起動する

この順番で環境を構築していきます。
(この手順の部分もVagrantでやってしまっても良いけど)

## Dockerをインストールする

既存のyumパッケージを更新

```
yum update
```

yumレポジトリを追加

```
tee /etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
```

Dockerをインストール

```
yum install docker-engine
```

Dockerを起動

```
systemctl start docker
systemctl enable docker
```

参考URL
http://docs.docker.jp/engine/installation/centos.html

## DockerComposeをインストールする

DockerComposeをインストール

```
curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
```

```
chmod +x /usr/local/bin/docker-compose
```

参考URL
http://docs.docker.jp/compose/install.html

## Minecraftサーバーのコンテナを起動する

適当にminecraft用のディレクトリを作成し、そこで起動する

```
mkdir minecraft
```

```
cd minecraft
```

上記ディレクトリ内にdocker-compose.ymlを作成する

```
vi docker-compose.yml
```

```ruby:docker-compose.yml
minecraft:
    image: itzg/minecraft-server
    ports:
        - "25565:25565"
    environment:
        - EULA=TRUE
```

docker-compose.ymlを配置したディレクトリでコンテナ立ち上げすれば完了です。

```
docker-compose up -d
```

参考URL
https://github.com/itzg/dockerfiles/tree/master/minecraft-server
redux-thunkとは？

# 公式
https://github.com/gaearon/redux-thunk

# 作者による解説
http://stackoverflow.com/questions/35411423/how-to-dispatch-a-redux-action-with-a-timeout/35415559#35415559

# reduxのmiddlewareとは？
dispatchをmiddlewareでwrapする機能

```js:middleware
let middleware = ({dispatch, getState}) => {
  return (next) => {
    return (action) => {
      next(action)
    };
  };
};
```

reduxのapplyMiddlewareを使うことで、次のmiddleware(=next)を呼び出してactionを与えていきます。

# redux-thunk

actionに関数を与えることを可能にして、任意の処理を実行できるようにするmiddleware

# 中身

非常に短くて簡潔なコードです

```js:redux-thunk

function createThunkMiddleware(extraArgument) {
  return ({ dispatch, getState }) => next => action => {
    if (typeof action === 'function') {
      return action(dispatch, getState, extraArgument);
    }

    return next(action);
  };
}

const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;

export default thunk;
```

nextは他にmiddlewareがない場合、`store.dispatch`となります。
つまり、`store.dispatch`が無視され、actionで指定した任意の関数が実行されます。
見た感じ、middlewareの最初に置かないとnextでの連鎖が止まる気がするな・・？
**reduxのmiddlewareはLIFOなので気をつける**
https://github.com/fbsamples/f8app/blob/master/js/store/configureStore.js#L45
ここを見ると間違いなさそう。気をつけよう。

https://github.com/reactjs/redux/blob/master/examples/real-world/src/actions/index.js#L19
このようなactionを渡したい時に有用。

actionは`function(dispatch, getState, extraArgument)`の形でなければならない。
これで公式の例題を読んで理解できるようになりました。
vagrantでhttpd入れたけどアクセスできない（centos7）

vagrantfileでアクセス用の設定をした後、vagrant reloadで解決。


備忘録的に浮かべておきます。体裁はあしからず。

はまった流れ：コピペプログラムで進行していたが、その時の最新をDLしたがために参考にした説明と差異が発生し、イレギュラーパターンに陥ったものと思われる。

はまった原因①：vagrantfileでデフォルトで__ip指定行がコメントアウト__されていた。
はまった原因②：vagrantのreloadをするという発想がなかった。
※仮想鯖のrebootは試して再起動したつもりでいたけど、vagrantとは次元が違うので無意味だった。
AWS EC2にWordPress(version 4.5.3) の環境構築・インストール

Amazon EC2(Amazon Elastic Compute Cloud)のインスタンス（Amazon linux）の設定および立ち上げが終わったところから手順のご案内をスタートします。

#１、LAMP環境構築

まずは、下記コマンドでルートユーザーに変更するとともに、yumでインストールしたパッケージのアップデートを行います。

```
$ sudo -i
$ yum update
```

その後、下記の通り、AWS EC2にLAMP環境を構築していきます。

##　1-1、Apacheのインストール
今回は、Apache2.4のバージョンをインストールします。

```
$ yum install -y httpd24
$ chkconfig httpd on
$ service httpd start
```
##　1-2、PHPのインストール
次はPHPをインストールします。今回インストールするPHPのバージョンは5.6です。

```
$ yum install -y php56
```

##　1-3、MySQLのインストール
下記コマンドで、MySQLは最新のバージョンがインストールされます。

```
$ yum install -y mysql-server
$ chkconfig mysqld on
$ service mysqld start
```

#２、WordPress（ワードプレス）のインストール

##　2-1、パッケージのダウンロード
まず、ワードプレスの最新バージョンのパッケージを作業ディレクトリーにダウンロードし、そのパッケージを解凍します。

```
$ wget https://wordpress.org/latest.tar.gz
$ tar -xzf latest.tar.gz
```

なお、日本語バージョンをインストールする場合は、下記のファイルをダウンロードしてください。

```
$ wget https://ja.wordpress.org/latest-ja.tar.gz
$ tar -xzf latest-ja.tar.gz
```

##　2-2、データベース作成
インストールしたWordPressのためのデータベースを作成するとともに、MySQLユーザーを作成しその権限を付与します。

```
$ mysql -u root -p
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
mysql> CREATE DATABASE `wordpress`;
```

作成したユーザーに対して、該当データベースへの権限を付与する

```
mysql> GRANT ALL PRIVILEGES ON `wordpress`.* TO "user"@"localhost";
mysql> FLUSH PRIVILEGES;
mysql> exit
```

##　2-3、拡張ライブラリーのインストール
ブラウザでアクセスすると、下記エラーメッセージが表示され、怒られる。
Your PHP installation appears to be missing the MySQL extension which is required by WordPress.

なので、拡張ライブラリーをインストールする

```
$ yum install -y php56-mysqlnd
$ yum install php-mysql
```

無事、ドメイン名/ディレクトリ名/wp-admin/setup-config.phpのページにリダイレクトされ、Welcome to WordPress.の画面が表示される。

##　2-4、設定ファイルの作成・設定（wp-config.php）
デフォルトでは、サンプル用の設定ファイルしかないので、サンプルを基に設定ファイルを作成する

```
$ cd 作業用ディレクトリ名
$ cp wp-config-sample.php wp-config.php
```

$ vi wp-config.php
21行目付近に、MySQL settingsの大項目があり、その中の下記項目に作成したデータベース情報を入力する

```ruby:wp-config.php
/** The name of the database for WordPress */
define('DB_NAME', 'データベース名');

/** MySQL database username */
define('DB_USER', 'ユーザー名');

/** MySQL database password */
define('DB_PASSWORD', 'パスワード');
```

データベースへの接続が正しく行われたら、サイト情報の設定画面へリダイレクトされる

##　2-５、WordPressの設定（サイト情報）
wp-admin/install.phpのページで、サイトタイトル、ログインユーザー名、そのパスワードの項目を入力し、submitしたらログイン画面に遷移する

とりあえず、さっくりとここまで。
なお、ワードプレスのバージョンは、4.5.3　です。
Eclipseの細かな環境設定

### 正規表現をヘルプを表示

|Ctrl  + space  | 正規表現のヘルプが表示 |     
|:------------:|:------------:|

引用元：<a href="http://tbpgr.hatenablog.com/entry/20130120/1358686258" target="_blank">Eclipseのファイル編集中に正規表現のヘルプを表示する方法 - Tbpgr Blog</a>

### 入力補完

|「syso」Ctrl+space| 「System.out.println();」 |     
|:------------:|:------------:|
|「「main」Ctrl+space| public static void main(String[] args) {}」 |     
| Alt+Shift+s | ゲッターセッターの取得 |
| Ctrl + 1 | クイックフィックス |


### インデント

|Ctrl+Shift+f| インデントのフォーマットを整える |     
|:------------:|:------------:|

### Javadoc

|alt+↓| コメントアウトを開く |     
|:------------:|:------------:|


### エディターフル表示

|Ctrl  + m  | エディターの最大化表示 |     
|:------------:|:------------:|


### コメント

|Ctrl+Shift+c| コメントの追加・削除 |     
|:------------:|:------------:|

### インポート

|Ctrl + Shift + o| インポート最適化 |     
|:------------:|:------------:|



### コンソールに移動
|Ctrl  + Shift + qの後にc  | コンソールに移動 |     
|:------------:|:------------:|

引用元：<a href="http://d.hatena.ne.jp/asakichy/20100217/1266366227#2" target="_blank">Eclipseショートカット・移動・ワークベンチ - Strategic Choice</a>


### 正規表現

|[] | カッコ内のいずれかの文字列 |     
|:------------:|:------------:|


引用元：<a href="http://nobuo-create.net/seikihyougen/#i-12" target="_blank">【Java】正規表現って何？ | 一番かんたんなJava入門</a>



引用元：<a href="http://did2memo.net/2012/08/29/eclipse-key-bindings/#i-4" target="_blank">プログラミングが劇的高速化！Eclipseで必ず設定したい基本キーバインドまとめ（テキスト編集編）</a>



### 検索

|Alt + a　の後にf | ファイル検索 |     
|:------------:|:------------:|
|Alt + a　の後にj | Java検索 |     
|Ctrl + h|プロジェクト横断のファイル検索機能|
|Ctrl + Shift + r| 今開いているリソースを開く。（java、クラスファイル）|
|Ctrl + Shift + t| クラスを開く|
|Ctrl + e|開いているファイルから検索|

- パッケージ検索
    - [検索] パッケージを選択→[制限] すべての出現箇所を選択→目的のパッケージで「Alt + shift + w」でパッケージ・エクスプローラーを選択。

引用元：<a href="http://www.otchy.net/20120617/eclipse-warp/" target="_blank">瞬間移動でストレスフリー！Eclipse 移動系ショートカット集 – OTCHY.NET</a>



### 調べた単語

#### インクリメンタルサーチ(incremental search)
アプリケーションにおける検索方法のひとつ。 検索したい単語をすべて入力した上で検索するのではなく、入力のたびごとに即座に候補を表示させる。 逐語検索、逐次検索とも。
UITabBarのバッジの背景色を変更する

UITabBarは各タブアイコンの右上にバッジを表示できる。
<img width="327" alt="スクリーンショット 2016-07-10 15.42.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/37053/807c2bff-ff79-a1ee-4ca0-b5ec3f83e15e.png">

バッジの表示内容に対する変更は badgeValue を変更することで可能だが、その背景色を変更する手段は用意されていない。
その背景色を変更するメソッドを書いた。



```
func tabbaredit(color:UIColor){
    let tabbar = self.tabBarController!.tabBar
    // search badgeView
    for barButton in tabbar.subviews{
        for buttonSubView in barButton.subviews{
            if NSStringFromClass(buttonSubView.dynamicType) == "_UIBadgeView"{
                buttonSubView.backgroundColor = color
                buttonSubView.layer.cornerRadius = buttonSubView.frame.size.height/2
                for badgeView in buttonSubView.subviews{
                    // change badge background color
                    if NSStringFromClass(badgeView.dynamicType) == "UILabel"{
                        let label:UILabel = badgeView as! UILabel
                        label.backgroundColor = color
                        label.layer.cornerRadius = label.frame.size.height/2
                    }
                    // remove _UIBadgeBackground
                    if NSStringFromClass(badgeView.dynamicType) == "_UIBadgeBackground"{
                        badgeView.hidden = true
                    }
                }
            }
        }
    }
}
```


上記メソッドをbadgeValueを変更した直後に呼び出す。
すると、下記のようにバッジの背景色が変更される。

<img width="347" alt="スクリーンショット 2016-07-10 15.42.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/37053/28ceb069-0e5c-2d74-0f17-e282912e6c0d.png">

<img width="334" alt="スクリーンショット 2016-07-10 15.43.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/37053/1a1399b2-daea-87a6-9fbe-26cb71f54d04.png">


少し応用すれば文字色も変更可能。

#### テストで使用したソース
https://github.com/colorbox/Example/tree/master/tabtrial

#### 参考
http://qiita.com/satomikko94/items/3623f8d56e17513579d6
https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework
TensorFlow入門 - 画像認識編


[TensorFlow入門Hello World編](http://qiita.com/negabaro/items/41bc0b27eeeb023297e3)に続きImageNetという学習データを使った画像認識を試してみました。

 

構文

```
(tensorflow)$ python classify_image.py --image_file [画像ファイル]
```

※classify_image.py のソースは[ここ](https://gist.github.com/negabaro/a60dbacd0c8d2de25a637d523957d027)のソースをコピーペーストしてください。



ストーブの画像をwgetでダウンロードして以下のように実行してみました。

```
wget https://qiita-image-store.s3.amazonaws.com/0/26079/ef75a5b4-8ddd-0015-9b3d-194b55a6b88e.jpeg
python classify_image.py --image_file ef75a5b4-8ddd-0015-9b3d-194b55a6b88e.jpeg
```

表示結果

```
stove (score = 0.99871)
fire screen, fireguard (score = 0.00047)
space heater (score = 0.00021)
rotisserie (score = 0.00002)
table lamp (score = 0.00002)
```

stoveである確率が99%か！賢い


参考：
http://qiita.com/nkjm/items/a2dada74d48b29f0e5f4
TensorFlow入門 - Hello World編


Dockerを利用してTensorFlow環境構築

```
docker run -it -p 8888:8888 --name tensorflow gcr.io/tensorflow/tensorflow
```
※tensorflowのdockerイメージ構成は[ここ](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/docker)を参考

コンテナに接続

```
docker exec -it tensorflow /bin/bash
```

必要なパッケージインストール

```
apt-get update
apt-get install -y vim wget
```





Tutorialを参考してhello World出力


```
#python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42
>>> quit
```
新しいAnsible Containerを使うとPlaybookだけでDockerイメージをビルドできる

[Ansible Container](https://github.com/ansible/ansible-container)という新しいツールの開発が進んでいます。このAnsible Containerを使うとDockerイメージのビルドとコンテナのオーケストレーションをAnsible playbookだけで行うことができます。つまりこれを使えば、DockerfileやBashスクリプトが肥大して読みにくくなるという悩みが消えますし、Dockerのためだけに新しいオーケストレーションツールを勉強するといった手間もなくなりそうです。

オフィシャルのドキュメントの例を試してみたので以下に手順を残しておきます。

## 必要なもの

- Docker Engine
- Python 2.7
- setuptools 20.0.0+
- pip
- git

## インストール

```
$ git clone https://github.com/ansible/ansible-container.git
$ cd ansible-container
$ python ./setup.py install
```

## Dockerマシンを準備する

```
$ docker-machine create --driver virtualbox node1
$ eval $(docker-machine env node1)
```

## プロジェクトを準備する

```
## ディレクトリを作る
$ mkdir project1
$ cd project1

## 初期化する
$ ansible-container init
$ tree
.
└── ansible
    ├── container.yml
    ├── main.yml
    └── requirements.txt
```

## container.ymlとmain.ymlを編集する

```
#
# container.yml
#
version: "1"
services:
  web:
    image: "ubuntu:trusty"
    ports:
      - "80:80"
    command: ["/usr/bin/dumb-init", "/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
    dev_overrides:
      environment:
        - "DEBUG=1"
```

```
#
# main.yml
#
- hosts: all
  gather_facts: false
  tasks:
    - raw: which python || apt-get update
    - raw: (which python && which aptitude) || apt-get install -y python python-apt aptitude
- hosts: web
  tasks:
    - name: Upgrade APT
      apt: upgrade=yes
    - name: Install ca-certificates
      apt: name=ca-certificates state=latest
    - name: Install dumb-init
      apt: deb=https://github.com/Yelp/dumb-init/releases/download/v1.0.2/dumb-init_1.0.2_amd64.deb
    - name: Install Apache
      apt: name=apache2 state=latest
```

## 使ってみる

```
## ビルドする
$ ansible-container build

## コンテナを作る
$ ansible-container run
```

ウェブブラウザで`http://<Docker MachineのIP>`を開いてみると、ウェブサーバーが立ち上がっていることを確認できます。

現時点の`ansible-container run`には`-d`オプションがないようで、バックグラウンドの実行ができないようです。バックグラウンドで実行したい場合は下記のように`docker run`コマンドを使うことで実現できます。

```
$ docker run -p 80:80 -dt ansible-container-web /usr/bin/dumb-init /usr/sbin/apache2ctl -D FOREGROUND
```

仮に`ansible-container build`で複数のタイプのイメージを作成した場合(例えばwebとmysqlを作成した)には、`docker-compose.yml`で複合的なコンテナの設定を明記したうえで`docker-compose up -d`を実行するというのが手だと思います。

`ansible-container push`と`ansible-container shipit`についてはまだ試していませんが、[オフィシャルのドキュメント](http://docs.ansible.com/ansible-container/)に詳しく書かれていますので、そちらをご参照下さい。

## 感想

Ansible Containerはまだまだ開発が始まったばかりだそうなので、今後は`docker-compose`と同じようなサブコマンドが使えるようになっていくともっと使いやすくなりますね。
Check! 画像に何が写っているのかを知る ～ Cognitive Services を使ってみよう

こんにちは、オークファンの @dz_ こと大平かづみです。

Prologue - はじめに
====
きっかけは突然に。[おばかIoT選手権](https://obakapp.doorkeeper.jp/events/44982 "おばかIoTアプリの応募（おばかIoT選手権 2016 Summer選手募集） - おばかアプリ選手権 | Doorkeeper") に応募したくて、画像解析を利用した IoT (?) ソリューションを開発してみます！

今回使うのは、画像の中に何が写っているのかを解析してくれる「[Computer Vision API](https://www.microsoft.com/cognitive-services/en-us/computer-vision-api "Microsoft Cognitive Services - Computer Vision API")」。
![20160710_cognitive-services_001.png](https://qiita-image-store.s3.amazonaws.com/0/3812/bd6d52c9-c619-e4c2-96fa-4be7540c8e27.png)

ここでは、この Computer Vision API を例に、 Cognitive Services の始め方についてご紹介いたします。

Cognitive Services Computer Vision API を使ってみよう！
=====================================================
大まかな流れ
-----------

- サブスクリプションを発行する
- API を使う！

これだけ！

具体的な手順
-----------
### サブスクリプションを発行する
まずは [Cognitive Services のページ](https://www.microsoft.com/cognitive-services) で、 My account をクリックし、 Microsoft アカウントとの紐づけとサインインを行います。
![20160710_cognitive-services_004.png](https://qiita-image-store.s3.amazonaws.com/0/3812/486a1f2a-17a0-1a82-19fd-ce86a8421b26.png)

Request new trials の画面で、利用するサービスにチェックした後、下方にスクロールし、 Subscribe します。

![20160710_cognitive-services_005.png](https://qiita-image-store.s3.amazonaws.com/0/3812/d423ebcf-68f2-8833-4248-d0ab94d229f5.png)

### API を使う！
さて、早速 Cognitive Services を使ってみましょう！

[SDKs & samples](https://www.microsoft.com/cognitive-services/en-us/SDK-Sample "Microsoft Cognitive Services - SDKs & samples") が用意されているので、まずは利用できる SDK があるかどうか確認してみてください。

SDK がなくても心配することはありません。REST API で自由に使うことができるのです。

私は Raspberry Pi で Python から使おうと思っているので、 REST API を試します。ここからは Computer Vision API を例に説明します。

[Computer Vision API](https://www.microsoft.com/cognitive-services/en-us/computer-vision-api "Microsoft Cognitive Services - Computer Vision API") のページを開き、 [API Reference](https://dev.projectoxford.ai/docs/services/56f91f2d778daf23d8ec6739/operations/56f91f2e778daf14a499e1fa "Microsoft Cognitive Services - Computer Vision API - v1.0") を開きます。

![20160710_cognitive-services_006.png](https://qiita-image-store.s3.amazonaws.com/0/3812/21b78166-899b-fded-9cab-9f1522782b73.png)

Open API Testing Console を開いてみましょう。

![20160710_cognitive-services_007.png](https://qiita-image-store.s3.amazonaws.com/0/3812/5bc566a0-ba1f-726b-77f7-d0d3a48abe42.png)

パラメータとサブスクリプションキーを指定するだけで、すぐ API を試すことができます！

![20160710_cognitive-services_008.png](https://qiita-image-store.s3.amazonaws.com/0/3812/d3b897fd-df1a-69e3-a251-1ce58d078d42.png)

こんな感じで結果をすぐ見ることができます。便利ですね～！

Epilogue - おわりに
==================
ということで、思いのほか手順が少なく、記事にするのをためらいましたが、メモがてら書いておきます(笑)

そういえば、大学校のころに画像分析の授業で、トランプ画像を2値化しマークを判別する、といった簡単なものを行いましたが、これだけでも結構面倒でした。さらに、汎用的にするにはどんなアルゴリズムにすればいいのか…

そんな問題を、APIとして提供してくれ簡単に利用できる時代になったとは、本当にありがたいことですね！
Blender Mirror

# Blender Mirror

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/5a2feaea-606b-24ca-6520-99ee92cd5ba3.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/69f821a5-f673-0299-de31-f63c2d483ac5.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/1fa78245-ff57-d2b0-a5b1-c4798efc34be.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/c7871a9b-833e-ff7c-26a4-ef92aba3cb7c.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/dc27fcce-9a57-7a29-d2dd-0fad574fda7a.png)
mysql_fetch_arrayとmysql_fetch_assocの違い

mysql_fetch_array: 連想配列、添字配列、またはその両方として結果の行を取得する
mysql_fetch_assoc: 連想配列として結果の行を取得する

らしい。

連想配列、添字配列って？

たとえば、SQLが、select id,name from xxxx; だとすると、
連想配列・・・カラム名の文字列を添え字にして値にアクセスします。nameが欲しい場合は $a["name"]
添字配列・・・selectに書いた何番目のカラムかの番号を添字にして値にアクセスします。idが欲しい場合は $a[0]

みたいなイメージ。
Chainer + anaconda3でGPUが使えない

# 環境
 - windows 10 64bit
 - anaconda3(python3.5.2)
 - chainer 1.10.0

# やったこと
 - Anaconda3のインストール
 - Cuda Tool kitのインストール
 - 環境変数の確認　CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
 - nvccコマンド実行の確認
 - cuDNNのインストール（kerasにてcuDNNの動作確認済み）
 - chainerインストール（C:\Anaconda3\Scripts\pip install chainerで--no-cache-dirと-vvvvはそれぞれ実施したが状況変わらず)
 - mnistのサンプル実行
 - CPUモードでは動作確認できた
 - GPUモードで以下のエラーと共にCUDAが利用できないと怒られた。
![error.jpg](https://qiita-image-store.s3.amazonaws.com/0/124388/eae7d13a-b351-4c70-7460-e455b4b685ee.jpeg)

# お願い
もし同じ状況が発生した方がいらっしゃいましたら解決方法を教えていただけますと幸いでございます。。

（昨日の[Anaconda2でのインストール](http://qiita.com/romth/items/f9bb95dd1ca454d5437b)にくじけてしまったので、Anaconda3で再挑戦してみたらこの結果でした！！ダメダコリャ＼(^o^)／）
EntityFrameworkについて

仕事でEntityFrameworkを使うかもしれないので、今のところの知識をまとめてみました。

#### EntityFrameworkとは？

Ruby on RailsにおけるActiveRecord の .NETバージョン。O／Rマッパー。

ActiveRecordに相当するのは、POCOエンティティ（Plain Old CLR Object）という、プロパティだけを持つクラスです。ただ、これはRailsのActiveRecordのように自動生成されずユーザーが自作します。

```csharp:student.cs
public class Student
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual int Age { get; set; }
}
```

こんな感じのエンティティをModelフォルダ内に作ります。

そしてこのデータをDBから読み込むためにSystem.Data.Entity.DbContextを継承したコンテキストクラスを作ります。

```csharp:MyContext.cs
// DbContext を継承する必要がある
public class MyContext : DbContext
{
    public DbSet<Student> Students { get; set; }
    public DbSet<Teacher> Teachers { get; set; }
}
```

プロジェクトをビルドしたタイミングで、コンテキストクラスと同名のデータベースが、そのDB内にPOCOエンティティと同名のテーブルが、自動生成されます。  
DBのテーブルにアクセスする際は、このコンテキストクラスのプロパティを使います。

DBからデータを読み込むには↓のようにします。

```csharp:example_read.cs
using (var context = new MyDbContext())
{
   var student = context.Students.Find(x => x.Name == "Yuichi"); //Find()のタイミングでクエリ発行
   var students = context.Students.Where(x => x.Age <= 20).ToArray(); //ToArray()のタイミグでクエリ発行

    //...
}
```
usingを使っているのは、コンテキストクラスを確実にDisposeするためです。
また、上記２クエリはFindメソッドが実行されるタイミング、ToArrayメソッドが実行されるタイミングでそれぞれ、DBに対してクエリが発行されています。
ですので、クエリが発行されるタイミングを意識して、使用時には不要なDBアクセスを極力抑えるように注意する必要があります。
 
データの追加、更新、削除は↓のようにやります。

```csharp:example_update.cs
using (var context = new MyDbContext())
{
    // 追加
    // Addした段階ではSql文はDBに発行されない
    context.Students.Add(new Student
    {
        Name = "Daisuke",
        Age = 18
    });
    //更新
　　var student = context.Students.Find(x => x.Name == "Yuichi"); //Find()のタイミングでクエリ発行
    student.Age = 26;
    //削除
    var deleteTarget = context.Students.Find(x => x.Name == "Takashi");
    context.Students.Remove(deleteTarget);
    // SaveChangesが呼び出された段階で初めてInsert,Update,Delete文が発行されます
    context.SaveChanges();
}
```

通常は、更新、削除処理はDBContext経由で読みだした（Find、Whereで読み込んだ）データに対してのみ行なえます。
しかし、例えば削除対象のデータの主キーが予めわかっている場合は、そのデータを事前に読み込むのは冗長な気がします。
そんなときは、Attachメソッドを使います。

```csharp:example_attach.cs
    using (var context = new MyDbContext())
    {
　　 //削除（削除対象のIDが予めわかっている時）
        var deleteTarget = new Student { Id = 1 };
        context.Students.Attach(deleteTarget);
        context.Students.Remove(deleteTarget);
        
        context.SaveChanges();
    }
```

#### データベースファーストについて
この記事で紹介したのは、まずPOCOエンティティを作って、それに合わせて自動的にDBが作成される、いわゆるコードファーストという手法です。
（EntityFramework自体はこのコードファーストという手法をAsp.NET MVCで実現する為に考案されたものです）
しかし、既にデータベースが存在している場合は、既存のテーブルからPOCOエンティティを作成する必要があります。
これをデータベースファースといいます。
これについては、また記事を分けてまとめていきたいと思います。
SwiftでPlistからTypesafeに値を取得するライブラリを作った

WebAPIを利用したアプリ開発をする場合、ApplicationIDやAPIKeyなどソースコードに記述したくない値をPlistに定義して利用することが多いかと思います。そんな時に便利なライブラリ [SwiftyConfiguration](https://github.com/ykyouhei/SwiftyConfiguration) を書いてみました。

# 使い方
### 1. インストール
Carthage, Cocoapodsに対応
（2016/07/10現在 Swift2.2, Xcode7.3.1）

### 2. Plistを作成・プロジェクトに追加
![スクリーンショット 2016-07-10 13.18.35.png](https://qiita-image-store.s3.amazonaws.com/0/33433/0860be88-6a5b-bd83-bd25-d3459d71009f.png "スクリーンショット 2016-07-10 13.18.35.png")

### 3. PlistのKeyを定義
`Keys`のExtensionとしてPlistの各Keyを定義

```Swift
import SwiftyConfiguration

extensino Keys {
	static let string = Key<String>("string")
	static let int    = Key<Int>("int")
	static let float  = Key<Float>("float")
}
```

対応しているPlistの値

| Type | Plistでの型 |
|:-----------|:------------|
| String | String |
| NSURL | String |
| NSNumber | NSNumber |
| Int | NSNumber |
| Float | NSNumber |
| Double | NSNumber |
| Bool | Boolean |
| NSDate | Date |
| Array | Array |
| Dictionary | Dictionary |



### 4. Configurationオブジェクトを生成してPlistの値を取得
Plistのパスを指定してConfigrationオブジェクトを作成、`get`で値を取得
Genericsメソッドとして定義しているので利用側は安全に利用可能

```Swift
import SwiftyConfiguration

let plistPath = NSBundle.mainBundle().pathForResource("Configuration", ofType: "plist")!
let config = Configuration(plistPath: plistPath)!

let stringValue = config.get(.string)!	// "Hoge"
let intValue    = config.get(.int)!		// 1
let floatValue  = config.get(.float)!	// 3.14
```

### その他
キーを`.`で区切ることで、Array・Dictionaryのネストした値も取得することができます。Debug, ReleaseでAPIKeyなどを分けたい時に便利です。

![スクリーンショット 2016-07-10 13.50.51.png](https://qiita-image-store.s3.amazonaws.com/0/33433/7b2717bb-98d7-e1e4-799b-b5df6990f92b.png "スクリーンショット 2016-07-10 13.50.51.png")


```Swift
import SwiftyConfiguration

extension Keys {
	#if DEBUG
        private static let prefix = "Debug"
    #else
        private static let prefix = "Release"
    #endif
    
    static let apiKey = Key<String>("\(prefix).apiKey")
}
```


# 宣伝
他にもいくつかSwift製のUI系ライブラリなどを作成しているので、よければスター・プルリクエストお待ちしてます(ΦωΦ)

* https://github.com/ykyouhei/KYDrawerController
* https://github.com/ykyouhei/KYShutterButton
* https://github.com/ykyouhei/KYNavigationProgress
* https://github.com/ykyouhei/KYDigitalFontView
* https://github.com/ykyouhei/KYWheelTabController
* https://github.com/ykyouhei/SwiftyConfiguration
Ectoで後からwhereの条件式を追加する場合の書き方


## 状況

PhoenixFrameworkのmodelを書いている時に、引数があるときだけ`updated_at`の指定時間より新しいレコードを取得したかった。しかし、あとからwhere句を追加する方法が情報として少なかったのでメモとして残す。

## 環境

Elixir 1.3.0
Ecto   1.1.8

## 解決方法

`from/2`にqueryを入れた変数を直接渡す。

## サンプル

仮で下記modelがあると想定する。(PhoenixFrameworkを利用した場合のmodel)

```elixir
defmodule App.Post do  
  use App.Web, :model

  schema "posts" do
    field :title, :string
    field :body, :string
    field :published, :boolean
    field :deleted, :boolean
    field :published_at, :datetime

    timestamps
  end
end
```

引数がtrueだった場合に、`from p in base_query`の箇所で元のqueryにwhere句の条件を動的に追加している。

```elixir
def all(published \\ false) do
  base_query = from p in App.Post, 
               where: p.deleted == false
  
  query = if published do
    from p in base_query, 
    where: p.published == true
  else
    base_query
  end
  
  query
  |> App.Repo.all()
end
```


## まとめ

ここまで書いた後でQiitaを見ていたら[こちら](http://qiita.com/HirofumiTamori/items/b71ca312778e42326017)にしっかりとした情報が載っていた・・・もっと色々なクエリのサンプルが見たい方は参考までに。
とある事情でEcto 2.0が利用できない環境なので、今後はEcto 2.0もキャッチアップしてEctoの理解をもっと進めたい。
Ubuntu16.04のFirefox47でSelenium WebDriverを動かす方法

## 参考

* [Selenium WebDriverでFirefox47を動かす方法 - Qiita](http://qiita.com/yssg/items/a054d67bc7c7fc39b276)

## geckodriverのダウンロード

* [geckodriver](https://github.com/mozilla/geckodriver/releases)のダウンロード

![スクリーンショット_2016-07-10_12-49-40.png](https://qiita-image-store.s3.amazonaws.com/0/25728/0aa8f3ac-6c24-5472-4b72-a1178de5dd02.png)

解凍してリネームする。

```bash: 
mv geckdriver /usr/local/bin/wires
```

## 既存のスクリプト修正

* [python - How to fix Selenium WebDriverException: The browser appears to have exited before we could connect? - Stack Overflow](http://stackoverflow.com/questions/26070834/how-to-fix-selenium-webdriverexception-the-browser-appears-to-have-exited-befor)
* [WebDriver - Mozilla | MDN](https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver#Python)

```py:以下修正が必要
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'

driver = webdriver.Firefox(capabilities=firefox_capabilities)
```

----

### Selenium IDEでエクスポートしたものの修正

![スクリーンショット_2016-07-10_12-53-42.png](https://qiita-image-store.s3.amazonaws.com/0/25728/6d76f96e-80e9-fc4e-e821-34591a92c00e.png)

```diff:qtest1.py
 # -*- coding: utf-8 -*-
 from selenium import webdriver
-from selenium.webdriver.common.by import By
+from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
 from selenium.webdriver.common.keys import Keys
 from selenium.webdriver.support.ui import Select
 from selenium.common.exceptions import NoSuchElementException
 from selenium.common.exceptions import NoAlertPresentException
 import unittest, time, re
 
 class Qtest1(unittest.TestCase):
     def setUp(self):
-        self.driver = webdriver.Firefox()
+        caps = DesiredCapabilities.FIREFOX
+        caps["marionette"] = True
+        caps["binary"] = "/usr/bin/firefox"
+        self.driver = webdriver.Firefox(capabilities=caps)
         self.driver.implicitly_wait(30)
         self.base_url = "http://qiita.com"
         self.verificationErrors = []
         self.accept_next_alert = True
...
```

* なお[一部コマンドが正しく動作しない](http://qiita.com/yssg/items/a054d67bc7c7fc39b276#%E4%B8%80%E9%83%A8%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%8F%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%84)ので注意


## 処理を指定時間待つ

そういえば処理を指定時間待つようにするには

* [5. Waits — Selenium Python Bindings 2 documentation](http://selenium-python.readthedocs.io/waits.html)

によると以下を使う例があるが、

```py:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
```

* [Python time sleep() Method](http://www.tutorialspoint.com/python/time_sleep.htm)でも良い。

```py:
import time

time.sleep(10) #10秒まつ
```
CentOS7 yum updateでエラーが出るとき

#はじめに
CentOS7でのyum updateでエラーが出るようになり、リポジトリの取得先を変更すればよいとよく書かれていて、理研のURLが張られていましたが、どこもリンク切れで正しいリンクが分かりましたのでここでまとめておきます。

##URLどこよ?
古いリンクは
http://ftp.riken.jp/Linux/centos/$releasever/os/$basearch/
等が多かったのですが
現在のリンクは
http://ftp.riken.jp/Linux/centos/7/
以降にあります

#変更点
CentOS-Base.repoの内容を変更します
```vi /etc/yum.repos.d/CentOS-Base.repo 
```

それぞれのbaseurl=の値を

Base
```baseurl=http://ftp.riken.jp/Linux/centos/7/os/x86_64/```
Updates
```http://ftp.riken.jp/Linux/centos/7/updates/x86_64/```
Extras
```http://ftp.riken.jp/Linux/centos/7/extras/x86_64/```
Plus
```http://ftp.riken.jp/Linux/centos/7/paas/x86_64/openshift-origin/```



#__追記 この変更は無意味でした__
まず`$releasever`と`$basearch`ですがそれぞれソフトウェア(CentOSなど)名などに__自動的__に変換がかかります

なのでブラウザで直接アクセスする際には置き変える必要がありますが、yumなどでは自動的に変換がかかるので変える必要がありません。

また、`yum update`でエラーが出る原因ですが、そもそもリポジトリにアクセスしてもそのバージョンの物が無かったからです。

再インストールした際にCentOS 7.0.1406を使っていましたが、すでに__非推薦__になっていました(気づくのが遅い)
http://ftp.riken.jp/Linux/centos/7.0.1406/readme

この記事を直さないとと思っていましたが、かなり遅くなってしまいました

再インストールする際は最新のイメージを使うようにしましょう

###おまけ
非推薦になってしまったので理研のリポジトリには一切ありませんが、
http://vault.centos.org/
からDLできるみたいです。( [理研の方にあるreadme](http://ftp.riken.jp/Linux/centos/7.0.1406/readme)に載っています)

ただ、非推薦になっているので__自己責任__です
コロプラのIRサイトから、財務データを取得


自分的なメモ。年一回取得しておく。

```python
#coding:utf-8
import pandas as pd

urls =[]

urls.append("http://colopl.co.jp/ir/highlight/performance.html")
urls.append("http://colopl.co.jp/ir/highlight/profit.html")
urls.append("http://colopl.co.jp/ir/highlight/cashflow.html")

df_name = ["perfomance", "profit","cashflow"]

for i in [0,1,2]:
    #html5libがないとエラーになる
    feteched_data = pd.read_html(urls[i])

    #list型で取得しているので注意
    df  = feteched_data[0]
    df.to_csv("colopl_"+df_name[i]+".csv" ,index = False, encoding='utf-8')
    print "completed  " +  df_name[i]
```
gcloud note


# install
https://developers.google.com/cloud/sdk/
and PATH, autocompl

#config

## config configurations?
≒ AWS's Profile

### switch configurations
```bash:
gcloud config configurations list
gcloud config configurations activate [configuration_name]
```

### create configuration
```bash:
gcloud config configurations create hoge 
```

## all comands
https://gist.github.com/frntn/838dbbbc857c6e3dc51e

## auth
```bash:
$ gcloud config set account <google.account>
$ gcloud auth login
$ gcloud auth application-default login
```
### ADC?
Application Default Credentials.

```text:
WARNING: gcloud auth login no longer writes application default credentials.
If you need to use ADC, see:
$ gcloud auth application-default --help
```
https://stackoverflow.com/questions/41215667/google-cloud-sql-proxy-couldnt-find-default-credentials
https://github.com/StanfordBioinformatics/loom/issues/248
## Change project

```bash:
$ gcloud config set project <project-id>
```

## Access Token

```bash:
$ gcloud auth print-access-token
```

# Create snapshot

```bash:
$ gcloud compute disks snapshot fuji-devel --description "hogehoge" --snapshot-names "snap-yymmdd-instanceid" --zone <zone>
```

# Create image
AWSと違い、動いているインスタンスからImage作製は出来ない。terminateしないとダメ
https://developers.google.com/compute/docs/images

$ gcloud compute instances delete <インスタンスID> --keep-disks boot
$ gcloud compute images create <イメージ名> --source-disk <ディスクID> --source-disk-zone <Zone>

# metadata
Full URL: http://metadata.google.internal/computeMetadata/v1/

Shorthand URL: http://metadata/computeMetadata/v1/
IP address: http://169.254.169.254/computeMetadata/v1/

```
$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/device-name"  -H "Metadata-Flavor:Google"
```

# Install gsutil (for centos6)
via pyenv

1. Install pyenv `/otp/pyenv`
2. `pyenv install 2.7.12`
3. `pyenv global 2.7.12` @ root user

## virtualenv

1. install virtualenv @ root user
2. virtualenv <hoge> @ normal user
3. . <hoge>/bin/activate

## gsutil via pip

```
sudo yum install libffi-devel
pip install cryptography
pip install gsutil
```
# virtualenv & cron
```run.sh:
#!/bin/bash
~/.virtualenvs/snap-back/bin/python ~/bachup/xxxx.py

```

```crontab:
0 12 * * * /home/hoge/run.sh
```

# No virtualenv or pyenv user, just use 2.7.x for gcloud
```
CLOUDSDK_PYTHON=/opt/pyenv/versions/2.7.12/bin/python /usr/local/bin/gcloud -v
```
# To revert `gcloud components update`
Read result!

```
To revert your SDK to the previously installed version, you may run:
  $ gcloud components update --version 110.0.0
 
```
PHPを書くときはVimを使っててもEmacsを使っててもIDEを併用すると便利だよ

# はじめに
開発エディタはお好みが良いですよね。
特にCUI系のエディタはメリットがたくさんありますよね。

* 軽い
* Gnu Screnn, tmuxでいける
* ターミナルと相性が良い

対してIDE(IntelliJ, Eclipse, NetBeans)のメリットは

* コード解析
* ジャンプ機能
* ソースコードの俯瞰

かと思っています。

このIDEのメリットを利用するために補助的にIDEを使ったらどうでしょうか？というお薦めです。

単一ファイルだけのコーディングならVimやEmacsでも全く問題ないですが、コード追いかけるときに頻繁にファイルを移動したりすると大変になってきます。

<img width="1025" alt="Screen Shot 2016-07-10 at 11.46.58 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/47327/e94c47d2-a516-1a1c-5ce2-7c2acb6e0ae4.png">

定義部、利用部へのジャンプ機能は凄く便利です。
ほとんどのIDEではCtrl+クリックで飛ぶことができます。

# IntelliJ (PHPStorm) の戻る
コードをジャンプしまくって追いかけていると呼び出し元に戻りたい、ということがあります。
別ファイルであればタブで戻る事ができますが、フレームワークとかのコアのコードを追いかけていると同一ファイル内で飛ばされて戻るのが大変、となってしまうことがあります。

そんなときには「戻る」機能を使うと便利です。

(恐らく)デフォルトでは 「Ctrl + Option + ←」です。

<img width="695" alt="Screen Shot 2016-07-10 at 7.58.09 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/47327/d2799c09-4772-3b66-a181-a28bd44ddaa4.png">


僕はキーバインドをブラウザの戻ると揃えてあり、Command + [で戻れるようにしています。

これを多ボタンマウスに割り振ってあり、ブラウザもIDEも同じボタンで戻れるようにしてあります。便利です。

# オブジェクト指向プログラミング
オブジェクト指向プログラミング(OOP)なファイルの場合、補完機能をIDEで行うこともできます。
オブジェクトのクラスから補完してくれるので、ちょっとだけ補完のために呼び出す、ということも凄く便利です。

# IDEからの編集はしない
両方のエディタで変更してしまうと変更が衝突します。
VimとかEmacsで編集したいというのが元の意図なので、そちらに編集を任せましょう。
IDEは変更の読み出しをうまくやってくれるので、VimとかEmacsで保存したら読み直ししてくれるはずです。

# それでも衝突したら

<img width="552" alt="Screen Shot 2016-07-10 at 11.47.32 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/47327/37dd0d85-5dee-6c9a-7171-e9b241c388af.png">

二重でEmacsを開いた、とかと同じような対応でOKです。


# IntelliJとVi, Vimモード

Vi, Vim派の人はこちらの記事が参考になると思います。

> IdeaVimを入れて困っていること
http://qiita.com/gd_yasu/items/8494b3d919eb80d79133

アンチパターンの記事ではありますが、補助的に使う分にはviキーバインドが十分使えるように見えます。
【C#】ネスト回避+多重forループbreak機能付きfor関数の実装

今回は
「ネストが深くならない」
「多重forループからbreakできる」
という２つの機能を持つfor文について考えてみます。

for文はいかなるプログラムでもついて回り、次元が増えれば増えるほどネストします。
例えば3重ループの処理なら

```csharp:
for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        for (int k = 0; k < 10; k++)
        {
            // TODO
        }
    }
}
```

このように記述すると思いますが、何かしらの処理を記述するころにはネストがかなり深くなってしまっています。

多次元配列ならばforeachでネストせずに記述できますが、
`int[][]`のようなジャグ配列やListでは結局ネストせざる終えません。

そんな多重ループの回避法としては途中で関数をかませて別の場所に記述すれば良いですが、
そうしたくない時もあると思います。

# 作るもの
そんなわけで今回作るのはネストしない多重forループ関数です。
作った関数は以下の様に利用できます。

```csharp:
var array = new int[5][][]; // 3次元ジャグ配列

// arrayの配列要素を生成
For(0, 5, 0, 5, (i, j) =>
{
    if (j == 0) array[i] = new int[5][];
    array[i][j] = new int[5];
});

// arrayの要素を初期化
For(0, 5, 0, 5, 0, 5, (i, j, k) =>
{
    // i + j + k が奇数なら-1, 偶数なら1をセット
    array[i][j][k] = ((i + j + k) % 2) == 0 ? 1 : -1;
});
```

Forという関数を使うことで、３重ループをネストせずに回すことができます。
第一引数はループの開始index、第二引数はループのindexの上限
後はそれがループの数だけあって、その後に処理したい内容を記述します。

# 実装
結構単純なトリックです。
以下の拡張メソッドを実装するだけです。

```csharp:
using System;

public static void For(int s1, int m1, int s2, int m2, Action<int, int> action)
{
    for (int i = s1; i < m1; i++)
    {
        for (int j = s2; j < m2; j++)
        {
            action(i, j);
        }
    }
}

public static void For(int s1, int m1, int s2, int m2, Funk<int, int, bool> action)
{
    for (int i = s1; i < m1; i++)
    {
        for (int j = s2; j < m2; j++)
        {
            if(!action(i, j)) return;
        }
    }
}
```

純粋に別の場所で多重ループを回して、Actionを実行しているだけです。
そして、参照場所がわかるようにactionにiとjを渡しています。
上記は2重ループ用の関数しか定義していませんが、3重ループも同じ様にオーバーロードすれば作成できます。

ちょこっと工夫してあるのは、多重ループをすぐbreakできる2つ目の様なFor関数です。
普通、多重forループは抜け出すためにはbreak用のflagを定義するかgoto(NG行為)を使わなければならないのでちょっと厄介ですが、このFor関数を使うと

```csharp:
For(0, 5, 0, 5, (i, j) =>
{
    // 何かしらの処理
    return i * j < 50;
});
```

breakしたい時にfalseを返せば抜けることができます。上記の例だと `i * j` が50を超えたときに多重ループをすぐbreakできます。
多重ループを抜けるためだけのフラグ変数を使わなくて良いので、見た目もすっきりします。


# まとめ
以上、多重forループ処理をネストさせず、かつbreakも可能なFor関数の実装でした。

ただ、for文というプログラムの根幹とも言える処理を置き換えているため、多用は厳禁です。
なのでこの様な考え方もあるという参考程度に留めていただければ幸いです。
Check! Raspberry Pi で I2C を使いたい（トラブルシューティング）

こんにちは、オークファンの @dz_ こと大平かづみです。

Prologue - はじめに
====
こちらの [I2C at Raspberry Pi GPIO Pinout](http://pinout.xyz/pinout/i2c) を参考に I2C を使ってみようとしたところ、 `i2cdetect` でエラーが出て検出できずしばらく悩みました。（テスターで配線も問題ないがことを測ったり…）

```bash
# i2c-tools のインストール(すでに入っていました)
$ sudo apt-get install i2c-tools
Reading package lists... Done
Building dependency tree       
Reading state information... Done
i2c-tools is already the newest version.
...略...

# I2C デバイスの検知 -- エラー！
$ sudo i2cdetect -y 1
Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory
```

原因
====
Raspberry Pi の設定で、**I2Cが無効** になってました！

対処
====
Raspberry Pi の I2C の利用設定を有効にしましょう。コマンドラインで以下を実行すると、GUIの設定画面が表示されますので、サクサク設定できます。

```bash
$ sudo raspi-config
```

![20160709_raspi-config_i2c_001.png](https://qiita-image-store.s3.amazonaws.com/0/3812/35c43075-7c1b-d4ce-b837-d101dd3c1f6f.png)
![20160709_raspi-config_i2c_002.png](https://qiita-image-store.s3.amazonaws.com/0/3812/104ba1e9-a06e-4531-8054-093097bcf7fa.png)
![20160709_raspi-config_i2c_003.png](https://qiita-image-store.s3.amazonaws.com/0/3812/1b8c1a01-5159-cc3b-46c2-f5441f745593.png)
![20160709_raspi-config_i2c_004.png](https://qiita-image-store.s3.amazonaws.com/0/3812/21328e21-143f-602e-e052-b3edeb0cd2ff.png)

上記を実施後、無事に検知しました！（以下の値は [BME280](https://www.switch-science.com/catalog/2236/ "BME280搭載　温湿度・気圧センサモジュール - スイッチサイエンス") の例です。）

```bash
$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- 76 -- 
```

Epilogue - おわりに
===================
最近、仕事や勉強会講師などでバタバタしてましたが、やっと自由な時間ができて、唐突に放置していたセンサで遊びだしました。
そして思ったことは、やっぱり配線するの楽しいー！好きだーって思いましたとさ(\*'ω'\*)
Failed to find request token in session

# 自己紹介

大阪を拠点に活動しているフロントエンドエンジニアです。

HAL大阪2年生。

Twitterやってます。

[@konojunya](http://twitter.com/konojunya)

# 動作環境

Node v4.1.1
npm v1.4.25
Express v4
Passport v0.3.2
Passport-twitter v1.0.4

OS X (El Capitan) v10.11.4

# エラー内容

```
Error: failed to find request token in session
```

このエラーよくあるらしいですね。

でも、ググってもあまり日本語の記事にヒットせず、stack over flowばかりでてきます。
あとはgithubのissue欄。

twitterで認証をする場合、[http://apps.twitter.com](http://apps.twitter.com)でアプリの登録をすると思います。

開発中の場合の多くはhttp://127.0.0.1:3000 などで、開発するのではないでしょうか。

このエラーは、apps.twitter.comにはこれで登録しているのに、passportの設定をするところでlocalhostで指定してしまっている場合におきます。

なので、プログラムをlocalhost -> 127.0.0.1に変えてやれば動きます。

# 謎現象

しかし、僕の場合は昨日寝る前に動いたコードが朝起きて続きをするぞ！ってなった時に動きませんでした。

なんだこれと思って、試行錯誤した結果apps.twitter.comの方を同じ内容で打ち直すだけで治りました。

詰んだ〜〜〜〜となってる人、もしかしたら原因になっているかもしれないので是非お試しあれ。
デジタルオシロスコープでR

#概要
デジタルオシロスコープのFDDを修理したので、データをRで使ってみた。
#準備
横河 DL1540（古いデジタルオシロ）
windowsなパソコン
Excel
ana.exe（横河のサンプルプログラム）
R
#データを書き込む。
波形をFDDに保存する。
![005.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/1aff85c1-836c-739c-7f14-9fccd9ce2d22.jpeg)

#データを変換する。
ana.exeでテキストに変換する。
ana 001 0 > 001.txt
Excelで加工する。
001.txtを読み込んで
左側に、タイムベースとなる数字を書き込む。
test.csvで書き込む。
```
t,v
0.000002,2.00E-02
0.000004,0.00E+00
0.000006,0.00E+00
0.000008,2.00E-02
0.00001,0.00E+00
```
#Rで読み込む。
```
y<-read.csv("test.csv")
plot(y, type="l")
```
![r.png](https://qiita-image-store.s3.amazonaws.com/0/18104/6d98f73e-5680-8a10-dc5b-e5174cc7c675.png)
文字コードについて

# はじめに
文字コードには，２つのプロトコルが存在する．
1) 文字集合: 表示される文字のfigureの集合．
2) 符号化方式: 文字集合の文字と数値表現のひも付け辞書

# Unicode
(1)文字集合の一つである．
しかし，符号化方式とは別に，それぞれの文字が位置情報(コードポイント)を持っており，これをUnicodeスカラ値と呼ぶ．u+16進数．

# utf-8
(2)符号化方式の一つ．

# Pythonでの取り扱い
Pythonで文字列を扱う場合は，２つの種類がある．
```
str='あいう'
unicode=u'あいう'
```
上の場合は，指定している文字コードに対応して，数値が保存される．
文字コードの指定は，以下のように行う．
(# -*- coding: utf-8 -*-)
(# -*- coding: Shift_JIS -*-)
(# -*- coding: EUC-JP -*-)
下の場合は，unicode文字列として認識され，unicodeスカラ値が代入される．

## example1: htmlパース
requests等でhtmlから取ってきた後，encoding形式を対称のhtmlの符号化方式に合わせることで，表示される．
```
import requests
res=request.get(url)
res.encoding='utf-8'
print res.text
```
初期化時の優先度情報を隠ぺいするオレオレListを作ってみた。

#0. 要求

- 初期化時の並び順を確実にするコレクションが欲しかった。
- 不慮の書き換えを許さないガチガチのコレクションがほしかった。
 - toSeqとかTraversable内にあるCollectionを再生成する系のメソッドを排除
 - foreach、mapなどで高階関数からは並びが保証された状態での操作は可能
- 一意性を必ず担保する型にしたかった。（重複排除）
 - Setだと並び順が...
- 不用意に.par.foreachされたくないコレクションがつくりたかった。

#1. 実装

Scalaの場合、traitとかで定義されてるメソッドはスーパークラスにてPrivate化できないので再定義することに。
コレクションをラップした型クラスをつくるにはTraverseを継承すれば楽ちんにつくれるのだが、それをやってしまうとtoSeqとかfoldleftとか余計なお荷物ついてくるのでそれは継承しない。

```scala:Priority.scala
import scalaz._
import Scalaz._
/**
  * Priority型クラス
  * 初期化時の情報を絶対保証するクラス
  * @tparam T 順序保証するタイプ
  */
final class Priority[+T](i: Seq[T]) {
  require(i.distinct.length == i.length)

  private[collection] def order[U >: T]: Seq[U] = i

  def isDefine: Boolean = order.nonEmpty

  def apply(index: Int): T = order(index)

  def foreach[U](f: T => U): Unit = order.foreach(f)

  def map[B](f: T => B): Priority[B] = Priority(order.map(f))

  override def toString: String = s"Priority(${order.mkString(",")})"

  override def equals(obj: scala.Any): Boolean = obj match {
    case p:Priority[_] => p.order == order
    case _ => false
  }
}

object Priority {
  def apply[A](i: A*): Priority[A] = new Priority[A](i)
}
```

#1. 使い方

あたまかもSeqであるかのように使えます。
今回は設定が重複しないといった形で作ってはありますが、設定重複したい場合には

```scala
// これを取れば、設定重複可能。
require(i.distinct.length == i.length)
```
としてみるといいかもしれないです。

実際の使い方は、こんな感じになると想定。

```scala
case class Plan(){
    def execute():Unit = ???
}

object Plan{
   def apply(planName):Plan = ???
}

class PlanController{
    val defaultPlanPriority:Priority[String] = Priority("plan-a" , "plan-c" , "plan-b" , "plan-default")

    def executePlan(planName:Seq[String]) = Action { implicit request => 
        val priority = Priority(planName:_*)
        // この間に不慮の並び替えは絶対発生しない。
        /* priority.toSeq <- × */
        /* priority.foldleft ... <- x */
        priority.map(Plan.apply).foreach(_.execute())
        Ok("success")
    }

    def executePlanSingle(int priorityNumber) = Action { implicit request => 
        // 1個だけの実行も可能
        defaultPlanPriority(priorityNumber).fold(
           NotFound("plan not found")
        ) { p =>
           p.execute()
           Ok("success") 
        }
    }
}
```

#2. 総まとめ

- 内部コレクションを隠ぺいできる型クラスがつくれた。
- **型名を増やすことができるのでとっても、表現力があがった感じがする。**
- デメリット：オレオレなので保守必要
- デメリット：実装なれてないと頭がとろける。（抽象ともっと仲良くならねば。

オレオレList with Functorつくってみた系エントリなので、もしもっといいものあれば…ご紹介いただければ。
upverter > DC/DC (0.7-5.0V入力 / 5.0V出力) > Parts登録した

関連 http://qiita.com/7of9/items/193181bb1a8c7b873aaf

3Vから5Vに昇圧する以下の回路のパーツをupverterに登録した。
http://akizukidenshi.com/catalog/g/gM-03451/

UpverterにてAdd Componentの検索キーワードとして「Akizuki」とすると以下のように見つかる。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/c150b92f-32de-c445-0481-09bb3abecb68.png)

実際の使用時には100uFのコンデンサをOUTとGND間に入れた方がいい ( http://qiita.com/7of9/items/639ee9c81ffdb8da0dae )。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/0a7763ad-7314-596b-0aec-163153c7aed0.png)
技術英語 > we're trying to be, I guess, accommodating [to a certain extent]. / How much water is too much? / To what extent, ... ?

@ LOE > June 20, 2003
http://www.loe.org/shows/shows.html?programID=03-P13-00025
> we're trying to be, I guess, accommodating <font color=red>to a certain extent</font>.

http://ejje.weblio.jp/content/to+a+certain+extent
> ある程度(まで)

<hr>
関連して思い出したのは

> How much water is too much?

「どれくらいの水だと多すぎるのか?」という意味になる。
LOEで出ていた。

<hr>
疑問として聞く場合

> To what extent, 

http://ejje.weblio.jp/content/to+what+extent
EC2(Amazon linux)でpipインストール時のエラー対処

EC2（Amazon linux）でpipであるソフトウェアをinstallしようとしたところ、エラー（pkg_resources.DistributionNotFound: pip==6.1.1）が出たので、その対処法をメモ

①pipのインストール

`sudo easy_install pip`


②pipのupgrade

`sudo easy_install --upgrade pip`


③pipのパスを移動

`sudo cp /usr/local/bin/pip /usr/sbin/`


※pipのバージョン確認

`which pip`


上記③の対処をすることで、前述のエラーはなくなりました。


参考）
http://stackoverflow.com/questions/34103119/upgrade-pip-in-amazon-linux
UbuntuでTensorFlow



AWS上のUbuntuでやる。

- AMI ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-20160114.5 (ami-06116566)

インストール方法はいろいろ書いてあるがAnacondaを使ってみる。

- https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html#requirements

Anacondaインストール。


```
$ wget http://repo.continuum.io/archive/Anaconda3-4.0.0-Linux-x86_64.sh
$ bash Anaconda3-4.0.0-Linux-x86_64.sh 
exec $SHELL

$ conda -V
conda 4.0.5

```

python2.7環境をつくる。3.5だと何故かエラーが出た。

```

$ conda create -n tensorflow python=2.7

$ source activate tensorflow

$ python -V
Python 2.7.11 :: Continuum Analytics, Inc.

$ pip -V
pip 8.1.1 from /home/ubuntu/anaconda3/envs/tensorflow/lib/python2.7/site-packages (python 2.7)

```

このあと何故かlocaleのエラーが出たので潰しておく。

```
$ locale
$ export LC_ALL=C
```

いよいよTensorFlowインストール。


```
$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl

$ python
>>> import tensorflow as tf
```

これでintroductionのコードを実行していく

- https://www.tensorflow.org/versions/r0.8/get_started/index.html